diff --git a/app/components/composer/button.vue b/app/components/composer/button.vue deleted file mode 100644 index 8f4c4d9..0000000 --- a/app/components/composer/button.vue +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - {{ tooltip }} - - - - - diff --git a/app/components/composer/buttons.vue b/app/components/composer/buttons.vue deleted file mode 100644 index 5d9194b..0000000 --- a/app/components/composer/buttons.vue +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - - - (contentType = i ? 'text/html' : 'text/plain') - "> - - - - - - - - - - - - - - - - - - - - - - - - - - - {{ - relation?.type === "edit" - ? m.gaudy_strong_puma_slide() - : m.free_teal_bulldog_learn() - }} - - - - diff --git a/app/components/composer/character-counter.vue b/app/components/composer/character-counter.vue deleted file mode 100644 index 6f118b3..0000000 --- a/app/components/composer/character-counter.vue +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - - - - {{ current }} / {{ max }} - Too long! - - - - - diff --git a/app/components/composer/composer.vue b/app/components/composer/composer.vue index e936923..293b437 100644 --- a/app/components/composer/composer.vue +++ b/app/components/composer/composer.vue @@ -3,29 +3,94 @@ - - + + + + - - - - + - - - + + + + + + + + + + + + + + + Plain text + + + Rich text + + + + + + + + + + + + + + + + {{ charactersLeft.toLocaleString(getLocale(), { + maximumFractionDigits: 2, + notation: 'compact', + compactDisplay: 'short', + }) }} + + + + + + Send + + + + + diff --git a/app/components/composer/dialog.vue b/app/components/composer/dialog.vue index ba9b2b5..f05b6ad 100644 --- a/app/components/composer/dialog.vue +++ b/app/components/composer/dialog.vue @@ -81,7 +81,7 @@ const relation = ref( > {{ diff --git a/app/components/editor/content.vue b/app/components/editor/content.vue index bf01d36..e2579cf 100644 --- a/app/components/editor/content.vue +++ b/app/components/editor/content.vue @@ -2,7 +2,7 @@ + :class="$style.content" /> + + + + + + diff --git a/app/components/ui/input-group/InputGroupAddon.vue b/app/components/ui/input-group/InputGroupAddon.vue new file mode 100644 index 0000000..ec3c374 --- /dev/null +++ b/app/components/ui/input-group/InputGroupAddon.vue @@ -0,0 +1,39 @@ + + + + + + + diff --git a/app/components/ui/input-group/InputGroupButton.vue b/app/components/ui/input-group/InputGroupButton.vue new file mode 100644 index 0000000..8965cb0 --- /dev/null +++ b/app/components/ui/input-group/InputGroupButton.vue @@ -0,0 +1,21 @@ + + + + + + + diff --git a/app/components/ui/input-group/InputGroupInput.vue b/app/components/ui/input-group/InputGroupInput.vue new file mode 100644 index 0000000..10e4d95 --- /dev/null +++ b/app/components/ui/input-group/InputGroupInput.vue @@ -0,0 +1,19 @@ + + + + + diff --git a/app/components/ui/input-group/InputGroupText.vue b/app/components/ui/input-group/InputGroupText.vue new file mode 100644 index 0000000..d988052 --- /dev/null +++ b/app/components/ui/input-group/InputGroupText.vue @@ -0,0 +1,19 @@ + + + + + + + diff --git a/app/components/ui/input-group/InputGroupTextarea.vue b/app/components/ui/input-group/InputGroupTextarea.vue new file mode 100644 index 0000000..7388693 --- /dev/null +++ b/app/components/ui/input-group/InputGroupTextarea.vue @@ -0,0 +1,19 @@ + + + + + diff --git a/app/components/ui/input-group/index.ts b/app/components/ui/input-group/index.ts new file mode 100644 index 0000000..b87a21b --- /dev/null +++ b/app/components/ui/input-group/index.ts @@ -0,0 +1,62 @@ +import type { VariantProps } from "class-variance-authority"; +import { cva } from "class-variance-authority"; +import type { HTMLAttributes } from "vue"; +import type { ButtonVariants } from "@/components/ui/button"; + +export { default as InputGroup } from "./InputGroup.vue"; +export { default as InputGroupAddon } from "./InputGroupAddon.vue"; +export { default as InputGroupButton } from "./InputGroupButton.vue"; +export { default as InputGroupInput } from "./InputGroupInput.vue"; +export { default as InputGroupText } from "./InputGroupText.vue"; +export { default as InputGroupTextarea } from "./InputGroupTextarea.vue"; + +export const inputGroupAddonVariants = cva( + "text-muted-foreground flex h-auto cursor-text items-center justify-center gap-2 py-1.5 text-sm font-medium select-none [&>svg:not([class*='size-'])]:size-4 [&>kbd]:rounded-[calc(var(--radius)-5px)] group-data-[disabled=true]/input-group:opacity-50", + { + variants: { + align: { + "inline-start": + "order-first pl-3 has-[>button]:ml-[-0.45rem] has-[>kbd]:ml-[-0.35rem]", + "inline-end": + "order-last pr-3 has-[>button]:mr-[-0.45rem] has-[>kbd]:mr-[-0.35rem]", + "block-start": + "order-first w-full justify-start px-3 pt-3 [.border-b]:pb-3 group-has-[>input]/input-group:pt-2.5", + "block-end": + "order-last w-full justify-start px-3 pb-3 [.border-t]:pt-3 group-has-[>input]/input-group:pb-2.5", + }, + }, + defaultVariants: { + align: "inline-start", + }, + }, +); + +export type InputGroupVariants = VariantProps; + +export const inputGroupButtonVariants = cva( + "text-sm shadow-none flex gap-2 items-center", + { + variants: { + size: { + xs: "h-6 gap-1 px-2 rounded-[calc(var(--radius)-5px)] [&>svg:not([class*='size-'])]:size-3.5 has-[>svg]:px-2", + sm: "h-8 px-2.5 gap-1.5 rounded-md has-[>svg]:px-2.5", + "icon-xs": + "size-6 rounded-[calc(var(--radius)-5px)] p-0 has-[>svg]:p-0", + "icon-sm": "size-8 p-0 has-[>svg]:p-0", + }, + }, + defaultVariants: { + size: "xs", + }, + }, +); + +export type InputGroupButtonVariants = VariantProps< + typeof inputGroupButtonVariants +>; + +export interface InputGroupButtonProps { + variant?: ButtonVariants["variant"]; + size?: InputGroupButtonVariants["size"]; + class?: HTMLAttributes["class"]; +} diff --git a/app/components/ui/spinner/Spinner.vue b/app/components/ui/spinner/Spinner.vue new file mode 100644 index 0000000..9d6f55a --- /dev/null +++ b/app/components/ui/spinner/Spinner.vue @@ -0,0 +1,17 @@ + + + + + diff --git a/app/components/ui/spinner/index.ts b/app/components/ui/spinner/index.ts new file mode 100644 index 0000000..8a95e7a --- /dev/null +++ b/app/components/ui/spinner/index.ts @@ -0,0 +1 @@ +export { default as Spinner } from "./Spinner.vue"; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ae40c26..3da9b43 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -252,12 +252,6 @@ packages: resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==} engines: {node: '>=6.9.0'} - '@babel/helper-create-class-features-plugin@7.27.1': - resolution: {integrity: sha512-QwGAmuvM17btKU5VqXfb+Giw4JcN0hjuufz3DYnpeVDvZLAObloM77bhMXiqry3Iio+Ai4phVRDwl6WU10+r5A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - '@babel/helper-create-class-features-plugin@7.28.5': resolution: {integrity: sha512-q3WC4JfdODypvxArsJQROfupPBq9+lMwjKq7C33GhbFYJsufD0yd/ziwD+hJucLeWsnFPWZjsU2DNFqBPE7jwQ==} engines: {node: '>=6.9.0'} @@ -279,10 +273,6 @@ packages: resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} engines: {node: '>=6.9.0'} - '@babel/helper-member-expression-to-functions@7.27.1': - resolution: {integrity: sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==} - engines: {node: '>=6.9.0'} - '@babel/helper-member-expression-to-functions@7.28.5': resolution: {integrity: sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==} engines: {node: '>=6.9.0'} @@ -6149,19 +6139,6 @@ snapshots: lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-create-class-features-plugin@7.27.1(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-member-expression-to-functions': 7.27.1 - '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.5) - '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/traverse': 7.28.5 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - '@babel/helper-create-class-features-plugin@7.28.5(@babel/core@7.28.5)': dependencies: '@babel/core': 7.28.5 @@ -6187,7 +6164,7 @@ snapshots: '@babel/core': 7.28.5 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 - debug: 4.4.1 + debug: 4.4.3 lodash.debounce: 4.0.8 resolve: 1.22.10 transitivePeerDependencies: @@ -6195,13 +6172,6 @@ snapshots: '@babel/helper-globals@7.28.0': {} - '@babel/helper-member-expression-to-functions@7.27.1': - dependencies: - '@babel/traverse': 7.28.5 - '@babel/types': 7.28.5 - transitivePeerDependencies: - - supports-color - '@babel/helper-member-expression-to-functions@7.28.5': dependencies: '@babel/traverse': 7.28.5 @@ -6380,7 +6350,7 @@ snapshots: '@babel/plugin-transform-class-properties@7.27.1(@babel/core@7.28.5)': dependencies: '@babel/core': 7.28.5 - '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.28.5) + '@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.28.5) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color @@ -6388,7 +6358,7 @@ snapshots: '@babel/plugin-transform-class-static-block@7.27.1(@babel/core@7.28.5)': dependencies: '@babel/core': 7.28.5 - '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.28.5) + '@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.28.5) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color @@ -6591,7 +6561,7 @@ snapshots: '@babel/plugin-transform-private-methods@7.27.1(@babel/core@7.28.5)': dependencies: '@babel/core': 7.28.5 - '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.28.5) + '@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.28.5) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color @@ -6600,7 +6570,7 @@ snapshots: dependencies: '@babel/core': 7.28.5 '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.28.5) + '@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.28.5) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color
{{ tooltip }}
{{ current }} / {{ max }}
Too long!