From 333d54c1a5257b35e4bef88b343b8b1af694b844 Mon Sep 17 00:00:00 2001 From: Ignace Maes <10243652+IgnaceMaes@users.noreply.github.com> Date: Mon, 25 May 2026 21:02:36 +0200 Subject: [PATCH 1/2] feat: port drawer --- .../components/docs/examples/drawer-demo.gts | 89 ++ .../docs/examples/drawer-dialog.gts | 118 ++ .../examples/drawer-scrollable-content.gts | 46 + .../components/docs/examples/drawer-sides.gts | 55 + apps/v4/app/content/docs/components/drawer.md | 81 ++ apps/v4/public/r/index.json | 100 +- .../r/styles/new-york-v4/accordion.json | 7 +- .../r/styles/new-york-v4/alert-dialog.json | 7 +- .../v4/public/r/styles/new-york-v4/alert.json | 2 +- .../r/styles/new-york-v4/aspect-ratio.json | 2 +- .../public/r/styles/new-york-v4/avatar.json | 6 +- .../v4/public/r/styles/new-york-v4/badge.json | 2 +- .../r/styles/new-york-v4/breadcrumb.json | 2 +- .../r/styles/new-york-v4/button-group.json | 6 +- .../public/r/styles/new-york-v4/button.json | 2 +- .../public/r/styles/new-york-v4/calendar.json | 8 +- apps/v4/public/r/styles/new-york-v4/card.json | 2 +- .../public/r/styles/new-york-v4/checkbox.json | 2 +- .../r/styles/new-york-v4/collapsible.json | 6 +- .../public/r/styles/new-york-v4/command.json | 6 +- .../r/styles/new-york-v4/context-menu.json | 2 +- .../public/r/styles/new-york-v4/dialog.json | 7 +- .../public/r/styles/new-york-v4/drawer.json | 16 + .../r/styles/new-york-v4/dropdown-menu.json | 2 +- .../v4/public/r/styles/new-york-v4/empty.json | 6 +- .../v4/public/r/styles/new-york-v4/field.json | 7 +- .../r/styles/new-york-v4/hover-card.json | 2 +- .../v4/public/r/styles/new-york-v4/index.json | 15 +- .../r/styles/new-york-v4/input-group.json | 8 +- .../r/styles/new-york-v4/input-otp.json | 7 +- .../v4/public/r/styles/new-york-v4/input.json | 2 +- apps/v4/public/r/styles/new-york-v4/item.json | 6 +- apps/v4/public/r/styles/new-york-v4/kbd.json | 2 +- .../v4/public/r/styles/new-york-v4/label.json | 2 +- .../r/styles/new-york-v4/native-select.json | 2 +- .../r/styles/new-york-v4/pagination.json | 2 +- .../public/r/styles/new-york-v4/popover.json | 2 +- .../public/r/styles/new-york-v4/progress.json | 2 +- .../r/styles/new-york-v4/radio-group.json | 6 +- .../public/r/styles/new-york-v4/registry.json | 135 +- .../r/styles/new-york-v4/scroll-area.json | 2 +- .../public/r/styles/new-york-v4/select.json | 2 +- .../r/styles/new-york-v4/separator.json | 2 +- .../v4/public/r/styles/new-york-v4/sheet.json | 7 +- .../public/r/styles/new-york-v4/sidebar.json | 2 +- .../public/r/styles/new-york-v4/skeleton.json | 2 +- .../public/r/styles/new-york-v4/slider.json | 2 +- .../public/r/styles/new-york-v4/sonner.json | 6 +- .../public/r/styles/new-york-v4/spinner.json | 2 +- .../v4/public/r/styles/new-york-v4/style.json | 15 +- .../public/r/styles/new-york-v4/switch.json | 2 +- .../v4/public/r/styles/new-york-v4/table.json | 2 +- apps/v4/public/r/styles/new-york-v4/tabs.json | 6 +- .../public/r/styles/new-york-v4/textarea.json | 2 +- .../r/styles/new-york-v4/theme-gray.json | 2 +- .../r/styles/new-york-v4/theme-neutral.json | 2 +- .../r/styles/new-york-v4/theme-slate.json | 2 +- .../r/styles/new-york-v4/theme-stone.json | 2 +- .../r/styles/new-york-v4/theme-zinc.json | 2 +- .../v4/public/r/styles/new-york-v4/toast.json | 6 +- .../r/styles/new-york-v4/toggle-group.json | 10 +- .../public/r/styles/new-york-v4/toggle.json | 2 +- .../public/r/styles/new-york-v4/tooltip.json | 2 +- .../v4/public/r/styles/new-york-v4/utils.json | 7 +- apps/v4/registry/__blocks__.json | 2 +- apps/v4/registry/__index__.ts | 1124 ++++++++--------- apps/v4/registry/new-york-v4/ui/drawer.gts | 555 ++++++++ apps/v4/registry/registry-blocks.ts | 4 +- apps/v4/registry/registry-charts.ts | 4 +- apps/v4/registry/registry-ui.ts | 822 ++++++------ 70 files changed, 2258 insertions(+), 1126 deletions(-) create mode 100644 apps/v4/app/components/docs/examples/drawer-demo.gts create mode 100644 apps/v4/app/components/docs/examples/drawer-dialog.gts create mode 100644 apps/v4/app/components/docs/examples/drawer-scrollable-content.gts create mode 100644 apps/v4/app/components/docs/examples/drawer-sides.gts create mode 100644 apps/v4/app/content/docs/components/drawer.md create mode 100644 apps/v4/public/r/styles/new-york-v4/drawer.json create mode 100644 apps/v4/registry/new-york-v4/ui/drawer.gts diff --git a/apps/v4/app/components/docs/examples/drawer-demo.gts b/apps/v4/app/components/docs/examples/drawer-demo.gts new file mode 100644 index 0000000..fe3a48d --- /dev/null +++ b/apps/v4/app/components/docs/examples/drawer-demo.gts @@ -0,0 +1,89 @@ +import { on } from '@ember/modifier'; +import Component from '@glimmer/component'; +import { tracked } from '@glimmer/tracking'; + +import { Button } from '@/components/ui/button'; +import { + Drawer, + DrawerClose, + DrawerContent, + DrawerDescription, + DrawerFooter, + DrawerHeader, + DrawerTitle, + DrawerTrigger, +} from '@/components/ui/drawer'; + +export default class DrawerDemo extends Component { + @tracked goal = 350; + + handleDecrement = () => { + this.goal = Math.max(200, Math.min(400, this.goal - 10)); + }; + + handleIncrement = () => { + this.goal = Math.max(200, Math.min(400, this.goal + 10)); + }; + + + + get isMinGoal() { + return this.goal <= 200; + } + + get isMaxGoal() { + return this.goal >= 400; + } +} diff --git a/apps/v4/app/components/docs/examples/drawer-dialog.gts b/apps/v4/app/components/docs/examples/drawer-dialog.gts new file mode 100644 index 0000000..58c3cab --- /dev/null +++ b/apps/v4/app/components/docs/examples/drawer-dialog.gts @@ -0,0 +1,118 @@ +import Component from '@glimmer/component'; +import { tracked } from '@glimmer/tracking'; + +import { Button } from '@/components/ui/button'; +import { + Dialog, + DialogContent, + DialogDescription, + DialogHeader, + DialogTitle, + DialogTrigger, +} from '@/components/ui/dialog'; +import { + Drawer, + DrawerClose, + DrawerContent, + DrawerDescription, + DrawerFooter, + DrawerHeader, + DrawerTitle, + DrawerTrigger, +} from '@/components/ui/drawer'; +import { Input } from '@/components/ui/input'; +import { Label } from '@/components/ui/label'; +import { cn } from '@/lib/utils'; + +import type { TOC } from '@ember/component/template-only'; + +export default class DrawerDialogDemo extends Component { + @tracked open = false; + @tracked isDesktop = window.matchMedia('(min-width: 768px)').matches; + + constructor(owner: unknown, args: Record) { + super(owner, args); + this.mediaQuery = window.matchMedia('(min-width: 768px)'); + this.handleMediaChange(this.mediaQuery); + this.mediaQuery.addEventListener('change', this.handleMediaChange); + } + + willDestroy(): void { + super.willDestroy(); + this.mediaQuery?.removeEventListener('change', this.handleMediaChange); + } + + private mediaQuery: MediaQueryList | null = null; + + handleMediaChange = (e: MediaQueryListEvent | MediaQueryList) => { + this.isDesktop = e.matches; + }; + + setOpen = (value: boolean) => { + this.open = value; + }; + + +} + +interface ProfileFormSignature { + Element: HTMLFormElement; + Args: { + class?: string; + }; + Blocks: { + default: []; + }; +} + +const ProfileForm: TOC = ; diff --git a/apps/v4/app/components/docs/examples/drawer-scrollable-content.gts b/apps/v4/app/components/docs/examples/drawer-scrollable-content.gts new file mode 100644 index 0000000..d86ac18 --- /dev/null +++ b/apps/v4/app/components/docs/examples/drawer-scrollable-content.gts @@ -0,0 +1,46 @@ +import { Button } from '@/components/ui/button'; +import { + Drawer, + DrawerClose, + DrawerContent, + DrawerDescription, + DrawerFooter, + DrawerHeader, + DrawerTitle, + DrawerTrigger, +} from '@/components/ui/drawer'; + +const paragraphs = Array.from({ length: 10 }); + + diff --git a/apps/v4/app/components/docs/examples/drawer-sides.gts b/apps/v4/app/components/docs/examples/drawer-sides.gts new file mode 100644 index 0000000..a7bc8ac --- /dev/null +++ b/apps/v4/app/components/docs/examples/drawer-sides.gts @@ -0,0 +1,55 @@ +import { Button } from '@/components/ui/button'; +import { + Drawer, + DrawerClose, + DrawerContent, + DrawerDescription, + DrawerFooter, + DrawerHeader, + DrawerTitle, + DrawerTrigger, +} from '@/components/ui/drawer'; + +const DRAWER_SIDES = ['top', 'right', 'bottom', 'left'] as const; +const paragraphs = Array.from({ length: 10 }); + + diff --git a/apps/v4/app/content/docs/components/drawer.md b/apps/v4/app/content/docs/components/drawer.md new file mode 100644 index 0000000..f423d7e --- /dev/null +++ b/apps/v4/app/content/docs/components/drawer.md @@ -0,0 +1,81 @@ +--- +title: Drawer +description: A drawer component for Ember. +--- + + + +## Installation + +### CLI + +```bash +npx shadcn-ember@latest add drawer +``` + +### Manual + +**Install the following dependencies:** + +```bash +pnpm add ember-provide-consume-context ember-modifier +``` + +**Copy and paste the drawer component into your project:** + + + +**Update the import paths to match your project setup.** + +## Usage + +```gts showLineNumbers +import { + Drawer, + DrawerClose, + DrawerContent, + DrawerDescription, + DrawerFooter, + DrawerHeader, + DrawerTitle, + DrawerTrigger, +} from '@/components/ui/drawer'; +``` + +```hbs showLineNumbers + + Open + + + Are you absolutely sure? + This action cannot be undone. + + + + + + + + + +``` + +## Examples + +### Scrollable Content + +Keep actions visible while the content scrolls. + + + +### Sides + +Use the `@direction` argument to set the side of the drawer. Available options are `top`, `right`, `bottom`, and `left`. + + + +### Responsive Dialog + +You can combine the `Dialog` and `Drawer` components to create a responsive dialog. This renders a `Dialog` component on desktop and a `Drawer` on mobile. + + diff --git a/apps/v4/public/r/index.json b/apps/v4/public/r/index.json index 38f48c8..12d62aa 100644 --- a/apps/v4/public/r/index.json +++ b/apps/v4/public/r/index.json @@ -8,7 +8,10 @@ "type": "registry:ui" } ], - "dependencies": ["ember-modifier", "ember-provide-consume-context"] + "dependencies": [ + "ember-modifier", + "ember-provide-consume-context" + ] }, { "name": "alert-dialog", @@ -19,7 +22,10 @@ "type": "registry:ui" } ], - "dependencies": ["ember-modifier", "ember-provide-consume-context"] + "dependencies": [ + "ember-modifier", + "ember-provide-consume-context" + ] }, { "name": "alert", @@ -50,7 +56,9 @@ "type": "registry:ui" } ], - "dependencies": ["ember-truth-helpers"] + "dependencies": [ + "ember-truth-helpers" + ] }, { "name": "badge", @@ -81,7 +89,9 @@ "type": "registry:ui" } ], - "registryDependencies": ["separator"] + "registryDependencies": [ + "separator" + ] }, { "name": "button", @@ -102,7 +112,9 @@ "type": "registry:ui" } ], - "registryDependencies": ["button"] + "registryDependencies": [ + "button" + ] }, { "name": "card", @@ -133,7 +145,9 @@ "type": "registry:ui" } ], - "dependencies": ["ember-provide-consume-context"] + "dependencies": [ + "ember-provide-consume-context" + ] }, { "name": "command", @@ -144,7 +158,9 @@ "type": "registry:ui" } ], - "registryDependencies": ["dialog"], + "registryDependencies": [ + "dialog" + ], "dependencies": [ "ember-modifier", "ember-provide-consume-context", @@ -176,7 +192,24 @@ "type": "registry:ui" } ], - "dependencies": ["ember-modifier", "ember-provide-consume-context"] + "dependencies": [ + "ember-modifier", + "ember-provide-consume-context" + ] + }, + { + "name": "drawer", + "type": "registry:ui", + "files": [ + { + "path": "ui/drawer.gts", + "type": "registry:ui" + } + ], + "dependencies": [ + "ember-modifier", + "ember-provide-consume-context" + ] }, { "name": "dropdown-menu", @@ -203,7 +236,9 @@ "type": "registry:ui" } ], - "dependencies": ["class-variance-authority"] + "dependencies": [ + "class-variance-authority" + ] }, { "name": "field", @@ -214,7 +249,10 @@ "type": "registry:ui" } ], - "registryDependencies": ["label", "separator"] + "registryDependencies": [ + "label", + "separator" + ] }, { "name": "hover-card", @@ -240,7 +278,11 @@ "type": "registry:ui" } ], - "registryDependencies": ["button", "input", "textarea"] + "registryDependencies": [ + "button", + "input", + "textarea" + ] }, { "name": "input-otp", @@ -251,7 +293,10 @@ "type": "registry:ui" } ], - "dependencies": ["ember-modifier", "ember-provide-consume-context"] + "dependencies": [ + "ember-modifier", + "ember-provide-consume-context" + ] }, { "name": "input", @@ -272,7 +317,9 @@ "type": "registry:ui" } ], - "registryDependencies": ["separator"] + "registryDependencies": [ + "separator" + ] }, { "name": "kbd", @@ -349,7 +396,9 @@ "type": "registry:ui" } ], - "dependencies": ["ember-provide-consume-context"] + "dependencies": [ + "ember-provide-consume-context" + ] }, { "name": "scroll-area", @@ -396,7 +445,10 @@ "type": "registry:ui" } ], - "dependencies": ["ember-modifier", "ember-provide-consume-context"] + "dependencies": [ + "ember-modifier", + "ember-provide-consume-context" + ] }, { "name": "sidebar", @@ -450,7 +502,9 @@ "type": "registry:ui" } ], - "registryDependencies": ["toast"], + "registryDependencies": [ + "toast" + ], "dependencies": [ "ember-click-outside", "ember-modifier", @@ -497,7 +551,9 @@ "type": "registry:ui" } ], - "dependencies": ["ember-provide-consume-context"] + "dependencies": [ + "ember-provide-consume-context" + ] }, { "name": "textarea", @@ -518,8 +574,12 @@ "type": "registry:ui" } ], - "registryDependencies": ["toggle"], - "dependencies": ["ember-provide-consume-context"] + "registryDependencies": [ + "toggle" + ], + "dependencies": [ + "ember-provide-consume-context" + ] }, { "name": "toggle", @@ -546,4 +606,4 @@ "ember-provide-consume-context" ] } -] +] \ No newline at end of file diff --git a/apps/v4/public/r/styles/new-york-v4/accordion.json b/apps/v4/public/r/styles/new-york-v4/accordion.json index 59a4a5b..0095243 100644 --- a/apps/v4/public/r/styles/new-york-v4/accordion.json +++ b/apps/v4/public/r/styles/new-york-v4/accordion.json @@ -2,7 +2,10 @@ "$schema": "https://shadcn-ember.com/schema/registry-item.json", "name": "accordion", "type": "registry:ui", - "dependencies": ["ember-modifier", "ember-provide-consume-context"], + "dependencies": [ + "ember-modifier", + "ember-provide-consume-context" + ], "files": [ { "path": "registry/new-york-v4/ui/accordion.gts", @@ -10,4 +13,4 @@ "type": "registry:ui" } ] -} +} \ No newline at end of file diff --git a/apps/v4/public/r/styles/new-york-v4/alert-dialog.json b/apps/v4/public/r/styles/new-york-v4/alert-dialog.json index a4db456..874f30f 100644 --- a/apps/v4/public/r/styles/new-york-v4/alert-dialog.json +++ b/apps/v4/public/r/styles/new-york-v4/alert-dialog.json @@ -2,7 +2,10 @@ "$schema": "https://shadcn-ember.com/schema/registry-item.json", "name": "alert-dialog", "type": "registry:ui", - "dependencies": ["ember-modifier", "ember-provide-consume-context"], + "dependencies": [ + "ember-modifier", + "ember-provide-consume-context" + ], "files": [ { "path": "registry/new-york-v4/ui/alert-dialog.gts", @@ -10,4 +13,4 @@ "type": "registry:ui" } ] -} +} \ No newline at end of file diff --git a/apps/v4/public/r/styles/new-york-v4/alert.json b/apps/v4/public/r/styles/new-york-v4/alert.json index 3c2fd6c..a624fa1 100644 --- a/apps/v4/public/r/styles/new-york-v4/alert.json +++ b/apps/v4/public/r/styles/new-york-v4/alert.json @@ -9,4 +9,4 @@ "type": "registry:ui" } ] -} +} \ No newline at end of file diff --git a/apps/v4/public/r/styles/new-york-v4/aspect-ratio.json b/apps/v4/public/r/styles/new-york-v4/aspect-ratio.json index aa117eb..122319e 100644 --- a/apps/v4/public/r/styles/new-york-v4/aspect-ratio.json +++ b/apps/v4/public/r/styles/new-york-v4/aspect-ratio.json @@ -9,4 +9,4 @@ "type": "registry:ui" } ] -} +} \ No newline at end of file diff --git a/apps/v4/public/r/styles/new-york-v4/avatar.json b/apps/v4/public/r/styles/new-york-v4/avatar.json index b7de655..9810bd8 100644 --- a/apps/v4/public/r/styles/new-york-v4/avatar.json +++ b/apps/v4/public/r/styles/new-york-v4/avatar.json @@ -2,7 +2,9 @@ "$schema": "https://shadcn-ember.com/schema/registry-item.json", "name": "avatar", "type": "registry:ui", - "dependencies": ["ember-truth-helpers"], + "dependencies": [ + "ember-truth-helpers" + ], "files": [ { "path": "registry/new-york-v4/ui/avatar.gts", @@ -10,4 +12,4 @@ "type": "registry:ui" } ] -} +} \ No newline at end of file diff --git a/apps/v4/public/r/styles/new-york-v4/badge.json b/apps/v4/public/r/styles/new-york-v4/badge.json index 61b2658..7901199 100644 --- a/apps/v4/public/r/styles/new-york-v4/badge.json +++ b/apps/v4/public/r/styles/new-york-v4/badge.json @@ -9,4 +9,4 @@ "type": "registry:ui" } ] -} +} \ No newline at end of file diff --git a/apps/v4/public/r/styles/new-york-v4/breadcrumb.json b/apps/v4/public/r/styles/new-york-v4/breadcrumb.json index fca77f2..8ae3fa7 100644 --- a/apps/v4/public/r/styles/new-york-v4/breadcrumb.json +++ b/apps/v4/public/r/styles/new-york-v4/breadcrumb.json @@ -9,4 +9,4 @@ "type": "registry:ui" } ] -} +} \ No newline at end of file diff --git a/apps/v4/public/r/styles/new-york-v4/button-group.json b/apps/v4/public/r/styles/new-york-v4/button-group.json index 60674ea..477a733 100644 --- a/apps/v4/public/r/styles/new-york-v4/button-group.json +++ b/apps/v4/public/r/styles/new-york-v4/button-group.json @@ -2,7 +2,9 @@ "$schema": "https://shadcn-ember.com/schema/registry-item.json", "name": "button-group", "type": "registry:ui", - "registryDependencies": ["separator"], + "registryDependencies": [ + "separator" + ], "files": [ { "path": "registry/new-york-v4/ui/button-group.gts", @@ -10,4 +12,4 @@ "type": "registry:ui" } ] -} +} \ No newline at end of file diff --git a/apps/v4/public/r/styles/new-york-v4/button.json b/apps/v4/public/r/styles/new-york-v4/button.json index 7d0b3b5..29bd800 100644 --- a/apps/v4/public/r/styles/new-york-v4/button.json +++ b/apps/v4/public/r/styles/new-york-v4/button.json @@ -9,4 +9,4 @@ "type": "registry:ui" } ] -} +} \ No newline at end of file diff --git a/apps/v4/public/r/styles/new-york-v4/calendar.json b/apps/v4/public/r/styles/new-york-v4/calendar.json index b4d77d9..0b9ef3a 100644 --- a/apps/v4/public/r/styles/new-york-v4/calendar.json +++ b/apps/v4/public/r/styles/new-york-v4/calendar.json @@ -2,12 +2,14 @@ "$schema": "https://shadcn-ember.com/schema/registry-item.json", "name": "calendar", "type": "registry:ui", - "registryDependencies": ["button"], + "registryDependencies": [ + "button" + ], "files": [ { "path": "registry/new-york-v4/ui/calendar.gts", - "content": "import { fn } from '@ember/helper';\nimport { on } from '@ember/modifier';\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport {\n addDays,\n addMonths,\n eachDayOfInterval,\n endOfMonth,\n endOfWeek,\n format,\n getWeek,\n isSameDay,\n isSameMonth,\n isToday,\n startOfMonth,\n startOfWeek,\n subMonths,\n} from 'date-fns';\n\nimport { buttonVariants } from '@/components/ui/button';\nimport { cn } from '@/lib/utils';\n\nimport type Owner from '@ember/owner';\n\nimport ChevronDown from '~icons/lucide/chevron-down';\nimport ChevronLeft from '~icons/lucide/chevron-left';\nimport ChevronRight from '~icons/lucide/chevron-right';\n\ninterface DateRange {\n from?: Date;\n to?: Date;\n}\n\ninterface CalendarSignature {\n Element: HTMLDivElement;\n Args: {\n mode?: 'single' | 'range';\n selected?: Date | DateRange;\n onSelect?: (value: Date | DateRange | undefined) => void;\n defaultMonth?: Date;\n month?: Date;\n onMonthChange?: (month: Date) => void;\n showOutsideDays?: boolean;\n numberOfMonths?: number;\n captionLayout?: 'label' | 'dropdown';\n disabled?: Date[] | ((date: Date) => boolean);\n modifiers?: Record;\n modifiersClassNames?: Record;\n showWeekNumber?: boolean;\n fixedWeeks?: boolean;\n class?: string;\n buttonVariant?: 'default' | 'ghost' | 'outline';\n timeZone?: string;\n startMonth?: Date;\n endMonth?: Date;\n };\n Blocks: {\n default: [];\n day: [DayInfo];\n };\n}\n\ninterface DayInfo {\n date: Date;\n isOutside: boolean;\n isToday: boolean;\n isSelected: boolean;\n isRangeStart: boolean;\n isRangeEnd: boolean;\n isRangeMiddle: boolean;\n isDisabled: boolean;\n isFocused: boolean;\n modifierClasses: string;\n dayOfMonth: number;\n}\n\ninterface WeekInfo {\n weekNumber: number;\n days: DayInfo[];\n}\n\ninterface MonthData {\n month: number;\n year: number;\n label: string;\n labelShort: string;\n weeks: WeekInfo[];\n}\n\nconst WEEKDAY_LABELS = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'];\nconst MONTH_NAMES_SHORT = [\n 'Jan',\n 'Feb',\n 'Mar',\n 'Apr',\n 'May',\n 'Jun',\n 'Jul',\n 'Aug',\n 'Sep',\n 'Oct',\n 'Nov',\n 'Dec',\n];\n\nfunction eq(a: unknown, b: unknown): boolean {\n return a === b;\n}\n\nfunction notFn(value: unknown): boolean {\n return !value;\n}\n\nfunction and(a: unknown, b: unknown): boolean {\n return Boolean(a) && Boolean(b);\n}\n\nfunction selectedSingle(day: DayInfo): boolean {\n return (\n day.isSelected && !day.isRangeStart && !day.isRangeEnd && !day.isRangeMiddle\n );\n}\n\nfunction monthNameShort(index: number): string {\n return MONTH_NAMES_SHORT[index] ?? '';\n}\n\nclass Calendar extends Component {\n @tracked _displayMonth: Date;\n @tracked focusedDate: Date | null = null;\n\n constructor(owner: Owner, args: CalendarSignature['Args']) {\n super(owner, args);\n const initial =\n args.month ?? args.defaultMonth ?? this.selectedStartDate ?? new Date();\n this._displayMonth = startOfMonth(initial);\n }\n\n get showOutsideDays(): boolean {\n return this.args.showOutsideDays ?? true;\n }\n\n get numberOfMonths(): number {\n return this.args.numberOfMonths ?? 1;\n }\n\n get captionLayout(): 'label' | 'dropdown' {\n return this.args.captionLayout ?? 'label';\n }\n\n get btnVariant(): 'default' | 'ghost' | 'outline' {\n return this.args.buttonVariant ?? 'ghost';\n }\n\n get displayMonth(): Date {\n if (this.args.month) {\n return startOfMonth(this.args.month);\n }\n return this._displayMonth;\n }\n\n get selectedStartDate(): Date | undefined {\n if (!this.args.selected) return undefined;\n if (this.args.mode === 'range') {\n return (this.args.selected as DateRange).from;\n }\n return this.args.selected as Date;\n }\n\n get startYear(): number {\n return (\n this.args.startMonth?.getFullYear() ??\n this.displayMonth.getFullYear() - 100\n );\n }\n\n get endYear(): number {\n return (\n this.args.endMonth?.getFullYear() ?? this.displayMonth.getFullYear() + 10\n );\n }\n\n get yearOptions(): number[] {\n const years: number[] = [];\n for (let y = this.startYear; y <= this.endYear; y++) {\n years.push(y);\n }\n return years;\n }\n\n get monthOptions(): { value: number; label: string }[] {\n return MONTH_NAMES_SHORT.map((label, i) => ({ value: i, label }));\n }\n\n get months(): MonthData[] {\n const result: MonthData[] = [];\n for (let i = 0; i < this.numberOfMonths; i++) {\n const m = addMonths(this.displayMonth, i);\n result.push(this.buildMonthData(m));\n }\n return result;\n }\n\n get canGoBack(): boolean {\n if (!this.args.startMonth) return true;\n const prev = subMonths(this.displayMonth, 1);\n return prev >= startOfMonth(this.args.startMonth);\n }\n\n get canGoForward(): boolean {\n if (!this.args.endMonth) return true;\n const next = addMonths(this.displayMonth, this.numberOfMonths);\n return next <= startOfMonth(this.args.endMonth);\n }\n\n buildMonthData(monthDate: Date): MonthData {\n const monthStart = startOfMonth(monthDate);\n const monthEnd = endOfMonth(monthDate);\n const calendarStart = startOfWeek(monthStart);\n const calendarEnd = endOfWeek(monthEnd);\n\n const allDays = eachDayOfInterval({\n start: calendarStart,\n end: calendarEnd,\n });\n\n if (this.args.fixedWeeks) {\n const targetDays = 42;\n while (allDays.length < targetDays) {\n allDays.push(addDays(allDays[allDays.length - 1]!, 1));\n }\n }\n\n const weeks: WeekInfo[] = [];\n\n for (let i = 0; i < allDays.length; i += 7) {\n const weekDays = allDays.slice(i, i + 7);\n const days: DayInfo[] = weekDays.map((date) => {\n const outside = !isSameMonth(date, monthDate);\n const selected = this.isDateSelected(date);\n const rangeStart = this.isRangeStart(date);\n const rangeEnd = this.isRangeEnd(date);\n const rangeMiddle = this.isRangeMiddle(date);\n const disabled = this.isDateDisabled(date);\n const focused =\n this.focusedDate !== null && isSameDay(date, this.focusedDate);\n\n return {\n date,\n isOutside: outside,\n isToday: isToday(date),\n isSelected: selected,\n isRangeStart: rangeStart,\n isRangeEnd: rangeEnd,\n isRangeMiddle: rangeMiddle,\n isDisabled: disabled,\n isFocused: focused,\n modifierClasses: this.getModifierClasses(date),\n dayOfMonth: date.getDate(),\n };\n });\n\n weeks.push({\n weekNumber: getWeek(weekDays[0]!),\n days,\n });\n }\n\n return {\n month: monthDate.getMonth(),\n year: monthDate.getFullYear(),\n label: format(monthDate, 'MMMM yyyy'),\n labelShort: format(monthDate, 'MMM'),\n weeks,\n };\n }\n\n isDateSelected(date: Date): boolean {\n if (!this.args.selected) return false;\n\n if (this.args.mode === 'range') {\n const range = this.args.selected as DateRange;\n if (range.from && isSameDay(date, range.from)) return true;\n if (range.to && isSameDay(date, range.to)) return true;\n return false;\n }\n\n return isSameDay(date, this.args.selected as Date);\n }\n\n isRangeStart(date: Date): boolean {\n if (this.args.mode !== 'range' || !this.args.selected) return false;\n const range = this.args.selected as DateRange;\n return !!range.from && isSameDay(date, range.from);\n }\n\n isRangeEnd(date: Date): boolean {\n if (this.args.mode !== 'range' || !this.args.selected) return false;\n const range = this.args.selected as DateRange;\n return !!range.to && isSameDay(date, range.to);\n }\n\n isRangeMiddle(date: Date): boolean {\n if (this.args.mode !== 'range' || !this.args.selected) return false;\n const range = this.args.selected as DateRange;\n if (!range.from || !range.to) return false;\n return date > range.from && date < range.to;\n }\n\n isDateDisabled(date: Date): boolean {\n if (!this.args.disabled) return false;\n if (typeof this.args.disabled === 'function') {\n return this.args.disabled(date);\n }\n return this.args.disabled.some((d) => isSameDay(d, date));\n }\n\n getModifierClasses(date: Date): string {\n if (!this.args.modifiers || !this.args.modifiersClassNames) return '';\n const classes: string[] = [];\n for (const [key, dates] of Object.entries(this.args.modifiers)) {\n if (dates.some((d) => isSameDay(d, date))) {\n const cls = this.args.modifiersClassNames[key];\n if (cls) classes.push(cls);\n }\n }\n return classes.join(' ');\n }\n\n setDisplayMonth = (date: Date) => {\n this._displayMonth = startOfMonth(date);\n this.args.onMonthChange?.(this._displayMonth);\n };\n\n goToPreviousMonth = () => {\n if (!this.canGoBack) return;\n this.setDisplayMonth(subMonths(this.displayMonth, 1));\n };\n\n goToNextMonth = () => {\n if (!this.canGoForward) return;\n this.setDisplayMonth(addMonths(this.displayMonth, 1));\n };\n\n handleMonthSelect = (event: Event) => {\n const target = event.target as HTMLSelectElement;\n const month = parseInt(target.value, 10);\n this.setDisplayMonth(new Date(this.displayMonth.getFullYear(), month, 1));\n };\n\n handleYearSelect = (event: Event) => {\n const target = event.target as HTMLSelectElement;\n const year = parseInt(target.value, 10);\n this.setDisplayMonth(new Date(year, this.displayMonth.getMonth(), 1));\n };\n\n selectDate = (day: DayInfo) => {\n if (day.isDisabled || (day.isOutside && !this.showOutsideDays)) return;\n\n if (this.args.mode === 'range') {\n const range = (this.args.selected as DateRange | undefined) ?? {};\n if (!range.from || (range.from && range.to)) {\n this.args.onSelect?.({ from: day.date, to: undefined });\n } else {\n if (day.date < range.from) {\n this.args.onSelect?.({ from: day.date, to: range.from });\n } else {\n this.args.onSelect?.({ from: range.from, to: day.date });\n }\n }\n } else {\n if (\n this.args.selected &&\n isSameDay(day.date, this.args.selected as Date)\n ) {\n this.args.onSelect?.(undefined);\n } else {\n this.args.onSelect?.(day.date);\n }\n }\n };\n\n handleKeydown = (day: DayInfo, event: KeyboardEvent) => {\n let newDate: Date | null = null;\n\n switch (event.key) {\n case 'ArrowLeft':\n newDate = addDays(day.date, -1);\n break;\n case 'ArrowRight':\n newDate = addDays(day.date, 1);\n break;\n case 'ArrowUp':\n newDate = addDays(day.date, -7);\n break;\n case 'ArrowDown':\n newDate = addDays(day.date, 7);\n break;\n case 'Enter':\n case ' ':\n event.preventDefault();\n this.selectDate(day);\n return;\n default:\n return;\n }\n\n event.preventDefault();\n\n if (newDate) {\n this.focusedDate = newDate;\n\n if (!isSameMonth(newDate, this.displayMonth)) {\n this.setDisplayMonth(startOfMonth(newDate));\n }\n }\n };\n\n \n}\n\ninterface CalendarDayButtonSignature {\n Element: HTMLButtonElement;\n Args: {\n day: DayInfo;\n isSelectedSingle: boolean;\n onSelect: () => void;\n onKeydown: (event: KeyboardEvent) => void;\n };\n Blocks: {\n default: [];\n };\n}\n\nclass CalendarDayButton extends Component {\n get classes(): string {\n return cn(\n buttonVariants('ghost', 'icon'),\n 'relative isolate z-10 flex aspect-square size-auto w-full min-w-(--cell-size) flex-col gap-1 border-0 leading-none font-normal',\n 'group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:border-ring group-data-[focused=true]/day:ring-[3px] group-data-[focused=true]/day:ring-ring/50',\n 'data-[range-end=true]:rounded-(--cell-radius) data-[range-end=true]:rounded-r-(--cell-radius) data-[range-end=true]:bg-primary data-[range-end=true]:text-primary-foreground',\n 'data-[range-middle=true]:rounded-none data-[range-middle=true]:bg-muted data-[range-middle=true]:text-foreground',\n 'data-[range-start=true]:rounded-(--cell-radius) data-[range-start=true]:rounded-l-(--cell-radius) data-[range-start=true]:bg-primary data-[range-start=true]:text-primary-foreground',\n 'data-[selected-single=true]:bg-primary data-[selected-single=true]:text-primary-foreground',\n 'dark:hover:text-foreground [&>span]:text-xs [&>span]:opacity-70'\n );\n }\n\n \n}\n\nexport { Calendar, CalendarDayButton };\nexport type { DateRange };\n", + "content": "import { fn } from '@ember/helper';\nimport { on } from '@ember/modifier';\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport {\n addDays,\n addMonths,\n eachDayOfInterval,\n endOfMonth,\n endOfWeek,\n format,\n getWeek,\n isSameDay,\n isSameMonth,\n isToday,\n startOfMonth,\n startOfWeek,\n subMonths,\n} from 'date-fns';\n\nimport { buttonVariants } from '@/components/ui/button';\nimport { cn } from '@/lib/utils';\n\nimport type Owner from '@ember/owner';\nimport type { Locale } from 'date-fns/locale';\n\nimport ChevronDown from '~icons/lucide/chevron-down';\nimport ChevronLeft from '~icons/lucide/chevron-left';\nimport ChevronRight from '~icons/lucide/chevron-right';\n\ninterface DateRange {\n from?: Date;\n to?: Date;\n}\n\ninterface CalendarSignature {\n Element: HTMLDivElement;\n Args: {\n mode?: 'single' | 'range';\n selected?: Date | DateRange;\n onSelect?: (value: Date | DateRange | undefined) => void;\n defaultMonth?: Date;\n month?: Date;\n onMonthChange?: (month: Date) => void;\n showOutsideDays?: boolean;\n numberOfMonths?: number;\n captionLayout?: 'label' | 'dropdown';\n disabled?: Date[] | ((date: Date) => boolean);\n modifiers?: Record;\n modifiersClassNames?: Record;\n showWeekNumber?: boolean;\n fixedWeeks?: boolean;\n class?: string;\n buttonVariant?: 'default' | 'ghost' | 'outline';\n locale?: Locale;\n weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6;\n timeZone?: string;\n startMonth?: Date;\n endMonth?: Date;\n };\n Blocks: {\n default: [];\n day: [DayInfo];\n };\n}\n\ninterface DayInfo {\n date: Date;\n isOutside: boolean;\n isToday: boolean;\n isSelected: boolean;\n isRangeStart: boolean;\n isRangeEnd: boolean;\n isRangeMiddle: boolean;\n isDisabled: boolean;\n isFocused: boolean;\n modifierClasses: string;\n dayOfMonth: number;\n}\n\ninterface WeekInfo {\n weekNumber: number;\n days: DayInfo[];\n}\n\ninterface MonthData {\n month: number;\n year: number;\n label: string;\n labelShort: string;\n weeks: WeekInfo[];\n}\n\nconst DEFAULT_WEEKDAY_LABELS = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'];\nconst DEFAULT_MONTH_NAMES_SHORT = [\n 'Jan',\n 'Feb',\n 'Mar',\n 'Apr',\n 'May',\n 'Jun',\n 'Jul',\n 'Aug',\n 'Sep',\n 'Oct',\n 'Nov',\n 'Dec',\n];\n\nfunction eq(a: unknown, b: unknown): boolean {\n return a === b;\n}\n\nfunction notFn(value: unknown): boolean {\n return !value;\n}\n\nfunction and(a: unknown, b: unknown): boolean {\n return Boolean(a) && Boolean(b);\n}\n\nfunction selectedSingle(day: DayInfo): boolean {\n return (\n day.isSelected && !day.isRangeStart && !day.isRangeEnd && !day.isRangeMiddle\n );\n}\n\nfunction monthNameShort(index: number, monthNames: string[]): string {\n return monthNames[index] ?? '';\n}\n\nclass Calendar extends Component {\n @tracked _displayMonth: Date;\n @tracked focusedDate: Date | null = null;\n\n constructor(owner: Owner, args: CalendarSignature['Args']) {\n super(owner, args);\n const initial =\n args.month ?? args.defaultMonth ?? this.selectedStartDate ?? new Date();\n this._displayMonth = startOfMonth(initial);\n }\n\n get showOutsideDays(): boolean {\n return this.args.showOutsideDays ?? true;\n }\n\n get numberOfMonths(): number {\n return this.args.numberOfMonths ?? 1;\n }\n\n get captionLayout(): 'label' | 'dropdown' {\n return this.args.captionLayout ?? 'label';\n }\n\n get btnVariant(): 'default' | 'ghost' | 'outline' {\n return this.args.buttonVariant ?? 'ghost';\n }\n\n get weekStartsOn(): 0 | 1 | 2 | 3 | 4 | 5 | 6 {\n return (\n this.args.weekStartsOn ?? this.args.locale?.options?.weekStartsOn ?? 0\n );\n }\n\n get weekOptions(): { weekStartsOn: 0 | 1 | 2 | 3 | 4 | 5 | 6 } {\n return { weekStartsOn: this.weekStartsOn };\n }\n\n get weekdayLabels(): string[] {\n if (this.args.locale) {\n const refDate = startOfWeek(new Date(), this.weekOptions);\n return Array.from({ length: 7 }, (_, i) =>\n format(addDays(refDate, i), 'EEEEEE', {\n locale: this.args.locale,\n })\n );\n }\n const wso = this.weekStartsOn;\n if (wso === 0) return DEFAULT_WEEKDAY_LABELS;\n return [\n ...DEFAULT_WEEKDAY_LABELS.slice(wso),\n ...DEFAULT_WEEKDAY_LABELS.slice(0, wso),\n ];\n }\n\n get monthNamesShort(): string[] {\n if (this.args.locale) {\n return Array.from({ length: 12 }, (_, i) =>\n format(new Date(2024, i, 1), 'MMM', { locale: this.args.locale })\n );\n }\n return DEFAULT_MONTH_NAMES_SHORT;\n }\n\n get displayMonth(): Date {\n if (this.args.month) {\n return startOfMonth(this.args.month);\n }\n return this._displayMonth;\n }\n\n get selectedStartDate(): Date | undefined {\n if (!this.args.selected) return undefined;\n if (this.args.mode === 'range') {\n return (this.args.selected as DateRange).from;\n }\n return this.args.selected as Date;\n }\n\n get startYear(): number {\n return (\n this.args.startMonth?.getFullYear() ??\n this.displayMonth.getFullYear() - 100\n );\n }\n\n get endYear(): number {\n return (\n this.args.endMonth?.getFullYear() ?? this.displayMonth.getFullYear() + 10\n );\n }\n\n get yearOptions(): number[] {\n const years: number[] = [];\n for (let y = this.startYear; y <= this.endYear; y++) {\n years.push(y);\n }\n return years;\n }\n\n get monthOptions(): { value: number; label: string }[] {\n return this.monthNamesShort.map((label, i) => ({ value: i, label }));\n }\n\n get months(): MonthData[] {\n const result: MonthData[] = [];\n for (let i = 0; i < this.numberOfMonths; i++) {\n const m = addMonths(this.displayMonth, i);\n result.push(this.buildMonthData(m));\n }\n return result;\n }\n\n get canGoBack(): boolean {\n if (!this.args.startMonth) return true;\n const prev = subMonths(this.displayMonth, 1);\n return prev >= startOfMonth(this.args.startMonth);\n }\n\n get canGoForward(): boolean {\n if (!this.args.endMonth) return true;\n const next = addMonths(this.displayMonth, this.numberOfMonths);\n return next <= startOfMonth(this.args.endMonth);\n }\n\n buildMonthData(monthDate: Date): MonthData {\n const monthStart = startOfMonth(monthDate);\n const monthEnd = endOfMonth(monthDate);\n const calendarStart = startOfWeek(monthStart, this.weekOptions);\n const calendarEnd = endOfWeek(monthEnd, this.weekOptions);\n\n const allDays = eachDayOfInterval({\n start: calendarStart,\n end: calendarEnd,\n });\n\n if (this.args.fixedWeeks) {\n const targetDays = 42;\n while (allDays.length < targetDays) {\n allDays.push(addDays(allDays[allDays.length - 1]!, 1));\n }\n }\n\n const weeks: WeekInfo[] = [];\n\n for (let i = 0; i < allDays.length; i += 7) {\n const weekDays = allDays.slice(i, i + 7);\n const days: DayInfo[] = weekDays.map((date) => {\n const outside = !isSameMonth(date, monthDate);\n const selected = this.isDateSelected(date);\n const rangeStart = this.isRangeStart(date);\n const rangeEnd = this.isRangeEnd(date);\n const rangeMiddle = this.isRangeMiddle(date);\n const disabled = this.isDateDisabled(date);\n const focused =\n this.focusedDate !== null && isSameDay(date, this.focusedDate);\n\n return {\n date,\n isOutside: outside,\n isToday: isToday(date),\n isSelected: selected,\n isRangeStart: rangeStart,\n isRangeEnd: rangeEnd,\n isRangeMiddle: rangeMiddle,\n isDisabled: disabled,\n isFocused: focused,\n modifierClasses: this.getModifierClasses(date),\n dayOfMonth: date.getDate(),\n };\n });\n\n weeks.push({\n weekNumber: getWeek(weekDays[0]!, this.weekOptions),\n days,\n });\n }\n\n return {\n month: monthDate.getMonth(),\n year: monthDate.getFullYear(),\n label: format(monthDate, 'MMMM yyyy', {\n locale: this.args.locale,\n }),\n labelShort: format(monthDate, 'MMM', { locale: this.args.locale }),\n weeks,\n };\n }\n\n isDateSelected(date: Date): boolean {\n if (!this.args.selected) return false;\n\n if (this.args.mode === 'range') {\n const range = this.args.selected as DateRange;\n if (range.from && isSameDay(date, range.from)) return true;\n if (range.to && isSameDay(date, range.to)) return true;\n return false;\n }\n\n return isSameDay(date, this.args.selected as Date);\n }\n\n isRangeStart(date: Date): boolean {\n if (this.args.mode !== 'range' || !this.args.selected) return false;\n const range = this.args.selected as DateRange;\n return !!range.from && isSameDay(date, range.from);\n }\n\n isRangeEnd(date: Date): boolean {\n if (this.args.mode !== 'range' || !this.args.selected) return false;\n const range = this.args.selected as DateRange;\n return !!range.to && isSameDay(date, range.to);\n }\n\n isRangeMiddle(date: Date): boolean {\n if (this.args.mode !== 'range' || !this.args.selected) return false;\n const range = this.args.selected as DateRange;\n if (!range.from || !range.to) return false;\n return date > range.from && date < range.to;\n }\n\n isDateDisabled(date: Date): boolean {\n if (!this.args.disabled) return false;\n if (typeof this.args.disabled === 'function') {\n return this.args.disabled(date);\n }\n return this.args.disabled.some((d) => isSameDay(d, date));\n }\n\n getModifierClasses(date: Date): string {\n if (!this.args.modifiers || !this.args.modifiersClassNames) return '';\n const classes: string[] = [];\n for (const [key, dates] of Object.entries(this.args.modifiers)) {\n if (dates.some((d) => isSameDay(d, date))) {\n const cls = this.args.modifiersClassNames[key];\n if (cls) classes.push(cls);\n }\n }\n return classes.join(' ');\n }\n\n setDisplayMonth = (date: Date) => {\n this._displayMonth = startOfMonth(date);\n this.args.onMonthChange?.(this._displayMonth);\n };\n\n goToPreviousMonth = () => {\n if (!this.canGoBack) return;\n this.setDisplayMonth(subMonths(this.displayMonth, 1));\n };\n\n goToNextMonth = () => {\n if (!this.canGoForward) return;\n this.setDisplayMonth(addMonths(this.displayMonth, 1));\n };\n\n handleMonthSelect = (event: Event) => {\n const target = event.target as HTMLSelectElement;\n const month = parseInt(target.value, 10);\n this.setDisplayMonth(new Date(this.displayMonth.getFullYear(), month, 1));\n };\n\n handleYearSelect = (event: Event) => {\n const target = event.target as HTMLSelectElement;\n const year = parseInt(target.value, 10);\n this.setDisplayMonth(new Date(year, this.displayMonth.getMonth(), 1));\n };\n\n selectDate = (day: DayInfo) => {\n if (day.isDisabled || (day.isOutside && !this.showOutsideDays)) return;\n\n if (this.args.mode === 'range') {\n const range = (this.args.selected as DateRange | undefined) ?? {};\n if (!range.from || (range.from && range.to)) {\n this.args.onSelect?.({ from: day.date, to: undefined });\n } else {\n if (day.date < range.from) {\n this.args.onSelect?.({ from: day.date, to: range.from });\n } else {\n this.args.onSelect?.({ from: range.from, to: day.date });\n }\n }\n } else {\n if (\n this.args.selected &&\n isSameDay(day.date, this.args.selected as Date)\n ) {\n this.args.onSelect?.(undefined);\n } else {\n this.args.onSelect?.(day.date);\n }\n }\n };\n\n handleKeydown = (day: DayInfo, event: KeyboardEvent) => {\n let newDate: Date | null = null;\n\n switch (event.key) {\n case 'ArrowLeft':\n newDate = addDays(day.date, -1);\n break;\n case 'ArrowRight':\n newDate = addDays(day.date, 1);\n break;\n case 'ArrowUp':\n newDate = addDays(day.date, -7);\n break;\n case 'ArrowDown':\n newDate = addDays(day.date, 7);\n break;\n case 'Enter':\n case ' ':\n event.preventDefault();\n this.selectDate(day);\n return;\n default:\n return;\n }\n\n event.preventDefault();\n\n if (newDate) {\n this.focusedDate = newDate;\n\n if (!isSameMonth(newDate, this.displayMonth)) {\n this.setDisplayMonth(startOfMonth(newDate));\n }\n }\n };\n\n \n}\n\ninterface CalendarDayButtonSignature {\n Element: HTMLButtonElement;\n Args: {\n day: DayInfo;\n isSelectedSingle: boolean;\n onSelect: () => void;\n onKeydown: (event: KeyboardEvent) => void;\n };\n Blocks: {\n default: [];\n };\n}\n\nclass CalendarDayButton extends Component {\n get classes(): string {\n return cn(\n buttonVariants('ghost', 'icon'),\n 'relative isolate z-10 flex aspect-square size-auto w-full min-w-(--cell-size) flex-col gap-1 border-0 leading-none font-normal',\n 'group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:border-ring group-data-[focused=true]/day:ring-[3px] group-data-[focused=true]/day:ring-ring/50',\n 'data-[range-end=true]:rounded-(--cell-radius) data-[range-end=true]:rounded-r-(--cell-radius) data-[range-end=true]:bg-primary data-[range-end=true]:text-primary-foreground',\n 'data-[range-middle=true]:rounded-none data-[range-middle=true]:bg-muted data-[range-middle=true]:text-foreground',\n 'data-[range-start=true]:rounded-(--cell-radius) data-[range-start=true]:rounded-l-(--cell-radius) data-[range-start=true]:bg-primary data-[range-start=true]:text-primary-foreground',\n 'data-[selected-single=true]:bg-primary data-[selected-single=true]:text-primary-foreground',\n 'dark:hover:text-foreground [&>span]:text-xs [&>span]:opacity-70'\n );\n }\n\n \n}\n\nexport { Calendar, CalendarDayButton };\nexport type { DateRange };\n", "type": "registry:ui" } ] -} +} \ No newline at end of file diff --git a/apps/v4/public/r/styles/new-york-v4/card.json b/apps/v4/public/r/styles/new-york-v4/card.json index 26492be..6677a51 100644 --- a/apps/v4/public/r/styles/new-york-v4/card.json +++ b/apps/v4/public/r/styles/new-york-v4/card.json @@ -9,4 +9,4 @@ "type": "registry:ui" } ] -} +} \ No newline at end of file diff --git a/apps/v4/public/r/styles/new-york-v4/checkbox.json b/apps/v4/public/r/styles/new-york-v4/checkbox.json index e65a729..5da0507 100644 --- a/apps/v4/public/r/styles/new-york-v4/checkbox.json +++ b/apps/v4/public/r/styles/new-york-v4/checkbox.json @@ -9,4 +9,4 @@ "type": "registry:ui" } ] -} +} \ No newline at end of file diff --git a/apps/v4/public/r/styles/new-york-v4/collapsible.json b/apps/v4/public/r/styles/new-york-v4/collapsible.json index 957eb91..f26cc8d 100644 --- a/apps/v4/public/r/styles/new-york-v4/collapsible.json +++ b/apps/v4/public/r/styles/new-york-v4/collapsible.json @@ -2,7 +2,9 @@ "$schema": "https://shadcn-ember.com/schema/registry-item.json", "name": "collapsible", "type": "registry:ui", - "dependencies": ["ember-provide-consume-context"], + "dependencies": [ + "ember-provide-consume-context" + ], "files": [ { "path": "registry/new-york-v4/ui/collapsible.gts", @@ -10,4 +12,4 @@ "type": "registry:ui" } ] -} +} \ No newline at end of file diff --git a/apps/v4/public/r/styles/new-york-v4/command.json b/apps/v4/public/r/styles/new-york-v4/command.json index 7b573cd..beea695 100644 --- a/apps/v4/public/r/styles/new-york-v4/command.json +++ b/apps/v4/public/r/styles/new-york-v4/command.json @@ -7,7 +7,9 @@ "ember-provide-consume-context", "tracked-built-ins" ], - "registryDependencies": ["dialog"], + "registryDependencies": [ + "dialog" + ], "files": [ { "path": "registry/new-york-v4/ui/command.gts", @@ -15,4 +17,4 @@ "type": "registry:ui" } ] -} +} \ No newline at end of file diff --git a/apps/v4/public/r/styles/new-york-v4/context-menu.json b/apps/v4/public/r/styles/new-york-v4/context-menu.json index 2dd0a46..b185d43 100644 --- a/apps/v4/public/r/styles/new-york-v4/context-menu.json +++ b/apps/v4/public/r/styles/new-york-v4/context-menu.json @@ -15,4 +15,4 @@ "type": "registry:ui" } ] -} +} \ No newline at end of file diff --git a/apps/v4/public/r/styles/new-york-v4/dialog.json b/apps/v4/public/r/styles/new-york-v4/dialog.json index c02e1de..a112824 100644 --- a/apps/v4/public/r/styles/new-york-v4/dialog.json +++ b/apps/v4/public/r/styles/new-york-v4/dialog.json @@ -2,7 +2,10 @@ "$schema": "https://shadcn-ember.com/schema/registry-item.json", "name": "dialog", "type": "registry:ui", - "dependencies": ["ember-modifier", "ember-provide-consume-context"], + "dependencies": [ + "ember-modifier", + "ember-provide-consume-context" + ], "files": [ { "path": "registry/new-york-v4/ui/dialog.gts", @@ -10,4 +13,4 @@ "type": "registry:ui" } ] -} +} \ No newline at end of file diff --git a/apps/v4/public/r/styles/new-york-v4/drawer.json b/apps/v4/public/r/styles/new-york-v4/drawer.json new file mode 100644 index 0000000..623fd8c --- /dev/null +++ b/apps/v4/public/r/styles/new-york-v4/drawer.json @@ -0,0 +1,16 @@ +{ + "$schema": "https://shadcn-ember.com/schema/registry-item.json", + "name": "drawer", + "type": "registry:ui", + "dependencies": [ + "ember-modifier", + "ember-provide-consume-context" + ], + "files": [ + { + "path": "registry/new-york-v4/ui/drawer.gts", + "content": "import { hash } from '@ember/helper';\nimport { on } from '@ember/modifier';\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { modifier } from 'ember-modifier';\nimport { provide, consume } from 'ember-provide-consume-context';\n\nimport { cn } from '@/lib/utils';\n\nimport type { TOC } from '@ember/component/template-only';\n\ntype Direction = 'top' | 'right' | 'bottom' | 'left';\n\nconst CLOSE_THRESHOLD = 0.25;\n\nconst DrawerContext = 'drawer-context' as const;\n\ninterface DrawerContextValue {\n open: boolean;\n isRendered: boolean;\n direction: Direction;\n isDragging: boolean;\n dragOffset: number;\n setOpen: (open: boolean) => void;\n finishClose: () => void;\n onDragStart: (event: PointerEvent) => void;\n}\n\ninterface ContextRegistry {\n [DrawerContext]: DrawerContextValue;\n}\n\ninterface DrawerSignature {\n Args: {\n open?: boolean;\n direction?: Direction;\n onOpenChange?: (open: boolean) => void;\n };\n Blocks: {\n default: [];\n };\n}\n\nclass Drawer extends Component {\n @tracked isOpen = false;\n @tracked isOpenOrClosing = false;\n @tracked isDragging = false;\n @tracked dragOffset = 0;\n\n get open() {\n return this.args.open ?? this.isOpen;\n }\n\n get isRendered() {\n return this.open || this.isOpenOrClosing;\n }\n\n get direction(): Direction {\n return this.args.direction ?? 'bottom';\n }\n\n setOpen = (open: boolean) => {\n if (open) {\n this.isOpenOrClosing = true;\n this.isOpen = true;\n } else {\n this.isOpen = false;\n }\n this.args.onOpenChange?.(open);\n };\n\n finishClose = () => {\n if (!this.open) {\n this.isOpenOrClosing = false;\n }\n };\n\n onDragStart = (event: PointerEvent) => {\n const startPos = { x: event.clientX, y: event.clientY };\n const direction = this.direction;\n\n const onPointerMove = (e: PointerEvent) => {\n const dx = e.clientX - startPos.x;\n const dy = e.clientY - startPos.y;\n\n let offset: number;\n switch (direction) {\n case 'bottom':\n offset = Math.max(0, dy);\n break;\n case 'top':\n offset = Math.max(0, -dy);\n break;\n case 'right':\n offset = Math.max(0, dx);\n break;\n case 'left':\n offset = Math.max(0, -dx);\n break;\n }\n\n this.isDragging = true;\n this.dragOffset = offset;\n };\n\n const onPointerUp = () => {\n document.removeEventListener('pointermove', onPointerMove);\n document.removeEventListener('pointerup', onPointerUp);\n\n const contentEl = document.querySelector(\n '[data-slot=\"drawer-content\"]',\n );\n\n if (contentEl) {\n const isVertical =\n direction === 'bottom' || direction === 'top';\n const size = isVertical\n ? contentEl.offsetHeight\n : contentEl.offsetWidth;\n\n if (this.dragOffset > size * CLOSE_THRESHOLD) {\n this.isDragging = false;\n this.dragOffset = 0;\n this.setOpen(false);\n } else {\n this.isDragging = false;\n this.dragOffset = 0;\n }\n } else {\n this.isDragging = false;\n this.dragOffset = 0;\n }\n };\n\n document.addEventListener('pointermove', onPointerMove);\n document.addEventListener('pointerup', onPointerUp);\n };\n\n @provide(DrawerContext)\n get context(): DrawerContextValue {\n return {\n open: this.open,\n isRendered: this.isRendered,\n direction: this.direction,\n isDragging: this.isDragging,\n dragOffset: this.dragOffset,\n setOpen: this.setOpen,\n finishClose: this.finishClose,\n onDragStart: this.onDragStart,\n };\n }\n\n \n}\n\ninterface DrawerTriggerSignature {\n Element: HTMLButtonElement;\n Args: {\n class?: string;\n asChild?: boolean;\n };\n Blocks: {\n default: [];\n };\n}\n\nclass DrawerTrigger extends Component {\n @consume(DrawerContext) context!: ContextRegistry[typeof DrawerContext];\n\n handleClick = () => {\n this.context.setOpen(true);\n };\n\n \n}\n\ninterface DrawerCloseSignature {\n Element: HTMLButtonElement;\n Args: {\n class?: string;\n asChild?: boolean;\n };\n Blocks: {\n default: [];\n };\n}\n\nclass DrawerClose extends Component {\n @consume(DrawerContext) context!: ContextRegistry[typeof DrawerContext];\n\n handleClick = () => {\n this.context.setOpen(false);\n };\n\n \n}\n\ninterface DrawerPortalSignature {\n Blocks: {\n default: [];\n };\n}\n\nconst DrawerPortal: TOC = ;\n\ninterface DrawerOverlaySignature {\n Element: HTMLDivElement;\n Args: {\n class?: string;\n };\n Blocks: {\n default: [];\n };\n}\n\nclass DrawerOverlay extends Component {\n @consume(DrawerContext) context!: ContextRegistry[typeof DrawerContext];\n\n handleClick = () => {\n this.context.setOpen(false);\n };\n\n handleAnimationEnd = (event: AnimationEvent) => {\n if (event.target === event.currentTarget && !this.context.open) {\n this.context.finishClose();\n }\n };\n\n get overlayStyle() {\n if (this.context.isDragging) {\n const contentEl = document.querySelector(\n '[data-slot=\"drawer-content\"]',\n );\n if (contentEl) {\n const isVertical =\n this.context.direction === 'bottom' ||\n this.context.direction === 'top';\n const size = isVertical\n ? contentEl.offsetHeight\n : contentEl.offsetWidth;\n const progress = Math.min(this.context.dragOffset / size, 1);\n const opacity = 1 - progress;\n return `opacity: ${opacity}; transition: none;`;\n }\n }\n return undefined;\n }\n\n \n}\n\ninterface DrawerContentSignature {\n Element: HTMLDivElement;\n Args: {\n class?: string;\n };\n Blocks: {\n default: [];\n };\n}\n\nclass DrawerContent extends Component {\n @consume(DrawerContext) context!: ContextRegistry[typeof DrawerContext];\n\n get destinationElement() {\n return document.body;\n }\n\n get classes() {\n return cn(\n 'group/drawer-content data-[state=open]:animate-in data-[state=closed]:animate-out fixed z-50 flex h-auto flex-col bg-popover text-sm text-popover-foreground data-[vaul-drawer-direction=bottom]:inset-x-0 data-[vaul-drawer-direction=bottom]:bottom-0 data-[vaul-drawer-direction=bottom]:mt-24 data-[vaul-drawer-direction=bottom]:max-h-[80vh] data-[vaul-drawer-direction=bottom]:rounded-t-xl data-[vaul-drawer-direction=bottom]:border-t data-[vaul-drawer-direction=left]:inset-y-0 data-[vaul-drawer-direction=left]:left-0 data-[vaul-drawer-direction=left]:w-3/4 data-[vaul-drawer-direction=left]:rounded-r-xl data-[vaul-drawer-direction=left]:border-r data-[vaul-drawer-direction=right]:inset-y-0 data-[vaul-drawer-direction=right]:right-0 data-[vaul-drawer-direction=right]:w-3/4 data-[vaul-drawer-direction=right]:rounded-l-xl data-[vaul-drawer-direction=right]:border-l data-[vaul-drawer-direction=top]:inset-x-0 data-[vaul-drawer-direction=top]:top-0 data-[vaul-drawer-direction=top]:mb-24 data-[vaul-drawer-direction=top]:max-h-[80vh] data-[vaul-drawer-direction=top]:rounded-b-xl data-[vaul-drawer-direction=top]:border-b data-[vaul-drawer-direction=left]:sm:max-w-sm data-[vaul-drawer-direction=right]:sm:max-w-sm data-[vaul-drawer-direction=bottom]:data-[state=closed]:slide-out-to-bottom data-[vaul-drawer-direction=bottom]:data-[state=open]:slide-in-from-bottom data-[vaul-drawer-direction=top]:data-[state=closed]:slide-out-to-top data-[vaul-drawer-direction=top]:data-[state=open]:slide-in-from-top data-[vaul-drawer-direction=left]:data-[state=closed]:slide-out-to-left data-[vaul-drawer-direction=left]:data-[state=open]:slide-in-from-left data-[vaul-drawer-direction=right]:data-[state=closed]:slide-out-to-right data-[vaul-drawer-direction=right]:data-[state=open]:slide-in-from-right',\n this.args.class,\n );\n }\n\n get contentStyle() {\n if (this.context.isDragging && this.context.dragOffset > 0) {\n const offset = this.context.dragOffset;\n let transform: string;\n switch (this.context.direction) {\n case 'bottom':\n transform = `translateY(${offset}px)`;\n break;\n case 'top':\n transform = `translateY(-${offset}px)`;\n break;\n case 'right':\n transform = `translateX(${offset}px)`;\n break;\n case 'left':\n transform = `translateX(-${offset}px)`;\n break;\n }\n return `transform: ${transform}; transition: none; animation: none;`;\n }\n return undefined;\n }\n\n handlePointerDown = (event: PointerEvent) => {\n this.context.onDragStart(event);\n };\n\n scrollLock = modifier(\n (_element, _positional, { enabled = true }: { enabled?: boolean } = {}) => {\n if (!enabled) {\n return;\n }\n\n document.body.classList.add('overflow-hidden');\n\n return () => {\n document.body.classList.remove('overflow-hidden');\n };\n }\n );\n\n handleAnimationEnd = (event: AnimationEvent) => {\n if (event.target === event.currentTarget && !this.context.open) {\n this.context.finishClose();\n }\n };\n\n handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n this.context.setOpen(false);\n }\n };\n\n \n}\n\ninterface DrawerHeaderSignature {\n Element: HTMLDivElement;\n Args: {\n class?: string;\n };\n Blocks: {\n default: [];\n };\n}\n\nconst DrawerHeader: TOC = ;\n\ninterface DrawerFooterSignature {\n Element: HTMLDivElement;\n Args: {\n class?: string;\n };\n Blocks: {\n default: [];\n };\n}\n\nconst DrawerFooter: TOC = ;\n\ninterface DrawerTitleSignature {\n Element: HTMLHeadingElement;\n Args: {\n class?: string;\n };\n Blocks: {\n default: [];\n };\n}\n\nconst DrawerTitle: TOC = ;\n\ninterface DrawerDescriptionSignature {\n Element: HTMLParagraphElement;\n Args: {\n class?: string;\n };\n Blocks: {\n default: [];\n };\n}\n\nconst DrawerDescription: TOC = ;\n\nexport {\n Drawer,\n DrawerPortal,\n DrawerOverlay,\n DrawerTrigger,\n DrawerClose,\n DrawerContent,\n DrawerHeader,\n DrawerFooter,\n DrawerTitle,\n DrawerDescription,\n};\n", + "type": "registry:ui" + } + ] +} \ No newline at end of file diff --git a/apps/v4/public/r/styles/new-york-v4/dropdown-menu.json b/apps/v4/public/r/styles/new-york-v4/dropdown-menu.json index 52758b7..fc51e3a 100644 --- a/apps/v4/public/r/styles/new-york-v4/dropdown-menu.json +++ b/apps/v4/public/r/styles/new-york-v4/dropdown-menu.json @@ -15,4 +15,4 @@ "type": "registry:ui" } ] -} +} \ No newline at end of file diff --git a/apps/v4/public/r/styles/new-york-v4/empty.json b/apps/v4/public/r/styles/new-york-v4/empty.json index b691731..7c446e6 100644 --- a/apps/v4/public/r/styles/new-york-v4/empty.json +++ b/apps/v4/public/r/styles/new-york-v4/empty.json @@ -2,7 +2,9 @@ "$schema": "https://shadcn-ember.com/schema/registry-item.json", "name": "empty", "type": "registry:ui", - "dependencies": ["class-variance-authority"], + "dependencies": [ + "class-variance-authority" + ], "files": [ { "path": "registry/new-york-v4/ui/empty.gts", @@ -10,4 +12,4 @@ "type": "registry:ui" } ] -} +} \ No newline at end of file diff --git a/apps/v4/public/r/styles/new-york-v4/field.json b/apps/v4/public/r/styles/new-york-v4/field.json index 1126d6e..2bfb253 100644 --- a/apps/v4/public/r/styles/new-york-v4/field.json +++ b/apps/v4/public/r/styles/new-york-v4/field.json @@ -2,7 +2,10 @@ "$schema": "https://shadcn-ember.com/schema/registry-item.json", "name": "field", "type": "registry:ui", - "registryDependencies": ["label", "separator"], + "registryDependencies": [ + "label", + "separator" + ], "files": [ { "path": "registry/new-york-v4/ui/field.gts", @@ -10,4 +13,4 @@ "type": "registry:ui" } ] -} +} \ No newline at end of file diff --git a/apps/v4/public/r/styles/new-york-v4/hover-card.json b/apps/v4/public/r/styles/new-york-v4/hover-card.json index 0838e76..a6fcfc8 100644 --- a/apps/v4/public/r/styles/new-york-v4/hover-card.json +++ b/apps/v4/public/r/styles/new-york-v4/hover-card.json @@ -14,4 +14,4 @@ "type": "registry:ui" } ] -} +} \ No newline at end of file diff --git a/apps/v4/public/r/styles/new-york-v4/index.json b/apps/v4/public/r/styles/new-york-v4/index.json index 2b0b94a..eaa339e 100644 --- a/apps/v4/public/r/styles/new-york-v4/index.json +++ b/apps/v4/public/r/styles/new-york-v4/index.json @@ -2,9 +2,16 @@ "$schema": "https://shadcn-ember.com/schema/registry-item.json", "name": "index", "type": "registry:style", - "dependencies": ["class-variance-authority", "@iconify-json/lucide"], - "devDependencies": ["tw-animate-css"], - "registryDependencies": ["utils"], + "dependencies": [ + "class-variance-authority", + "@iconify-json/lucide" + ], + "devDependencies": [ + "tw-animate-css" + ], + "registryDependencies": [ + "utils" + ], "files": [], "cssVars": {} -} +} \ No newline at end of file diff --git a/apps/v4/public/r/styles/new-york-v4/input-group.json b/apps/v4/public/r/styles/new-york-v4/input-group.json index 90329a7..5a9f50d 100644 --- a/apps/v4/public/r/styles/new-york-v4/input-group.json +++ b/apps/v4/public/r/styles/new-york-v4/input-group.json @@ -2,7 +2,11 @@ "$schema": "https://shadcn-ember.com/schema/registry-item.json", "name": "input-group", "type": "registry:ui", - "registryDependencies": ["button", "input", "textarea"], + "registryDependencies": [ + "button", + "input", + "textarea" + ], "files": [ { "path": "registry/new-york-v4/ui/input-group.gts", @@ -10,4 +14,4 @@ "type": "registry:ui" } ] -} +} \ No newline at end of file diff --git a/apps/v4/public/r/styles/new-york-v4/input-otp.json b/apps/v4/public/r/styles/new-york-v4/input-otp.json index 79f4b0c..2aeb275 100644 --- a/apps/v4/public/r/styles/new-york-v4/input-otp.json +++ b/apps/v4/public/r/styles/new-york-v4/input-otp.json @@ -2,7 +2,10 @@ "$schema": "https://shadcn-ember.com/schema/registry-item.json", "name": "input-otp", "type": "registry:ui", - "dependencies": ["ember-modifier", "ember-provide-consume-context"], + "dependencies": [ + "ember-modifier", + "ember-provide-consume-context" + ], "files": [ { "path": "registry/new-york-v4/ui/input-otp.gts", @@ -10,4 +13,4 @@ "type": "registry:ui" } ] -} +} \ No newline at end of file diff --git a/apps/v4/public/r/styles/new-york-v4/input.json b/apps/v4/public/r/styles/new-york-v4/input.json index 7b016d3..cc6533a 100644 --- a/apps/v4/public/r/styles/new-york-v4/input.json +++ b/apps/v4/public/r/styles/new-york-v4/input.json @@ -9,4 +9,4 @@ "type": "registry:ui" } ] -} +} \ No newline at end of file diff --git a/apps/v4/public/r/styles/new-york-v4/item.json b/apps/v4/public/r/styles/new-york-v4/item.json index 1aaf941..45f49fc 100644 --- a/apps/v4/public/r/styles/new-york-v4/item.json +++ b/apps/v4/public/r/styles/new-york-v4/item.json @@ -2,7 +2,9 @@ "$schema": "https://shadcn-ember.com/schema/registry-item.json", "name": "item", "type": "registry:ui", - "registryDependencies": ["separator"], + "registryDependencies": [ + "separator" + ], "files": [ { "path": "registry/new-york-v4/ui/item.gts", @@ -10,4 +12,4 @@ "type": "registry:ui" } ] -} +} \ No newline at end of file diff --git a/apps/v4/public/r/styles/new-york-v4/kbd.json b/apps/v4/public/r/styles/new-york-v4/kbd.json index 036705d..010927c 100644 --- a/apps/v4/public/r/styles/new-york-v4/kbd.json +++ b/apps/v4/public/r/styles/new-york-v4/kbd.json @@ -9,4 +9,4 @@ "type": "registry:ui" } ] -} +} \ No newline at end of file diff --git a/apps/v4/public/r/styles/new-york-v4/label.json b/apps/v4/public/r/styles/new-york-v4/label.json index cea91db..a1ff02e 100644 --- a/apps/v4/public/r/styles/new-york-v4/label.json +++ b/apps/v4/public/r/styles/new-york-v4/label.json @@ -9,4 +9,4 @@ "type": "registry:ui" } ] -} +} \ No newline at end of file diff --git a/apps/v4/public/r/styles/new-york-v4/native-select.json b/apps/v4/public/r/styles/new-york-v4/native-select.json index c84566e..1dd6c8c 100644 --- a/apps/v4/public/r/styles/new-york-v4/native-select.json +++ b/apps/v4/public/r/styles/new-york-v4/native-select.json @@ -9,4 +9,4 @@ "type": "registry:ui" } ] -} +} \ No newline at end of file diff --git a/apps/v4/public/r/styles/new-york-v4/pagination.json b/apps/v4/public/r/styles/new-york-v4/pagination.json index 0e3e0dc..2aba081 100644 --- a/apps/v4/public/r/styles/new-york-v4/pagination.json +++ b/apps/v4/public/r/styles/new-york-v4/pagination.json @@ -9,4 +9,4 @@ "type": "registry:ui" } ] -} +} \ No newline at end of file diff --git a/apps/v4/public/r/styles/new-york-v4/popover.json b/apps/v4/public/r/styles/new-york-v4/popover.json index 82a031c..deb87dd 100644 --- a/apps/v4/public/r/styles/new-york-v4/popover.json +++ b/apps/v4/public/r/styles/new-york-v4/popover.json @@ -15,4 +15,4 @@ "type": "registry:ui" } ] -} +} \ No newline at end of file diff --git a/apps/v4/public/r/styles/new-york-v4/progress.json b/apps/v4/public/r/styles/new-york-v4/progress.json index 5a2cf3e..079e7f2 100644 --- a/apps/v4/public/r/styles/new-york-v4/progress.json +++ b/apps/v4/public/r/styles/new-york-v4/progress.json @@ -9,4 +9,4 @@ "type": "registry:ui" } ] -} +} \ No newline at end of file diff --git a/apps/v4/public/r/styles/new-york-v4/radio-group.json b/apps/v4/public/r/styles/new-york-v4/radio-group.json index 5ae122f..8c279e8 100644 --- a/apps/v4/public/r/styles/new-york-v4/radio-group.json +++ b/apps/v4/public/r/styles/new-york-v4/radio-group.json @@ -2,7 +2,9 @@ "$schema": "https://shadcn-ember.com/schema/registry-item.json", "name": "radio-group", "type": "registry:ui", - "dependencies": ["ember-provide-consume-context"], + "dependencies": [ + "ember-provide-consume-context" + ], "files": [ { "path": "registry/new-york-v4/ui/radio-group.gts", @@ -10,4 +12,4 @@ "type": "registry:ui" } ] -} +} \ No newline at end of file diff --git a/apps/v4/public/r/styles/new-york-v4/registry.json b/apps/v4/public/r/styles/new-york-v4/registry.json index 1bb64dc..f1ddab4 100644 --- a/apps/v4/public/r/styles/new-york-v4/registry.json +++ b/apps/v4/public/r/styles/new-york-v4/registry.json @@ -5,25 +5,42 @@ { "name": "index", "type": "registry:style", - "dependencies": ["class-variance-authority", "@iconify-json/lucide"], - "devDependencies": ["tw-animate-css"], - "registryDependencies": ["utils"], + "dependencies": [ + "class-variance-authority", + "@iconify-json/lucide" + ], + "devDependencies": [ + "tw-animate-css" + ], + "registryDependencies": [ + "utils" + ], "files": [], "cssVars": {} }, { "name": "style", "type": "registry:style", - "dependencies": ["class-variance-authority", "@iconify-json/lucide"], - "devDependencies": ["tw-animate-css"], - "registryDependencies": ["utils"], + "dependencies": [ + "class-variance-authority", + "@iconify-json/lucide" + ], + "devDependencies": [ + "tw-animate-css" + ], + "registryDependencies": [ + "utils" + ], "files": [], "cssVars": {} }, { "name": "accordion", "type": "registry:ui", - "dependencies": ["ember-modifier", "ember-provide-consume-context"], + "dependencies": [ + "ember-modifier", + "ember-provide-consume-context" + ], "files": [ { "path": "registry/new-york-v4/ui/accordion.gts", @@ -34,7 +51,10 @@ { "name": "alert-dialog", "type": "registry:ui", - "dependencies": ["ember-modifier", "ember-provide-consume-context"], + "dependencies": [ + "ember-modifier", + "ember-provide-consume-context" + ], "files": [ { "path": "registry/new-york-v4/ui/alert-dialog.gts", @@ -65,7 +85,9 @@ { "name": "avatar", "type": "registry:ui", - "dependencies": ["ember-truth-helpers"], + "dependencies": [ + "ember-truth-helpers" + ], "files": [ { "path": "registry/new-york-v4/ui/avatar.gts", @@ -96,7 +118,9 @@ { "name": "button-group", "type": "registry:ui", - "registryDependencies": ["separator"], + "registryDependencies": [ + "separator" + ], "files": [ { "path": "registry/new-york-v4/ui/button-group.gts", @@ -117,7 +141,9 @@ { "name": "calendar", "type": "registry:ui", - "registryDependencies": ["button"], + "registryDependencies": [ + "button" + ], "files": [ { "path": "registry/new-york-v4/ui/calendar.gts", @@ -148,7 +174,9 @@ { "name": "collapsible", "type": "registry:ui", - "dependencies": ["ember-provide-consume-context"], + "dependencies": [ + "ember-provide-consume-context" + ], "files": [ { "path": "registry/new-york-v4/ui/collapsible.gts", @@ -164,7 +192,9 @@ "ember-provide-consume-context", "tracked-built-ins" ], - "registryDependencies": ["dialog"], + "registryDependencies": [ + "dialog" + ], "files": [ { "path": "registry/new-york-v4/ui/command.gts", @@ -191,7 +221,10 @@ { "name": "dialog", "type": "registry:ui", - "dependencies": ["ember-modifier", "ember-provide-consume-context"], + "dependencies": [ + "ember-modifier", + "ember-provide-consume-context" + ], "files": [ { "path": "registry/new-york-v4/ui/dialog.gts", @@ -199,6 +232,20 @@ } ] }, + { + "name": "drawer", + "type": "registry:ui", + "dependencies": [ + "ember-modifier", + "ember-provide-consume-context" + ], + "files": [ + { + "path": "registry/new-york-v4/ui/drawer.gts", + "type": "registry:ui" + } + ] + }, { "name": "dropdown-menu", "type": "registry:ui", @@ -218,7 +265,9 @@ { "name": "empty", "type": "registry:ui", - "dependencies": ["class-variance-authority"], + "dependencies": [ + "class-variance-authority" + ], "files": [ { "path": "registry/new-york-v4/ui/empty.gts", @@ -229,7 +278,10 @@ { "name": "field", "type": "registry:ui", - "registryDependencies": ["label", "separator"], + "registryDependencies": [ + "label", + "separator" + ], "files": [ { "path": "registry/new-york-v4/ui/field.gts", @@ -255,7 +307,11 @@ { "name": "input-group", "type": "registry:ui", - "registryDependencies": ["button", "input", "textarea"], + "registryDependencies": [ + "button", + "input", + "textarea" + ], "files": [ { "path": "registry/new-york-v4/ui/input-group.gts", @@ -266,7 +322,10 @@ { "name": "input-otp", "type": "registry:ui", - "dependencies": ["ember-modifier", "ember-provide-consume-context"], + "dependencies": [ + "ember-modifier", + "ember-provide-consume-context" + ], "files": [ { "path": "registry/new-york-v4/ui/input-otp.gts", @@ -287,7 +346,9 @@ { "name": "item", "type": "registry:ui", - "registryDependencies": ["separator"], + "registryDependencies": [ + "separator" + ], "files": [ { "path": "registry/new-york-v4/ui/item.gts", @@ -364,7 +425,9 @@ { "name": "radio-group", "type": "registry:ui", - "dependencies": ["ember-provide-consume-context"], + "dependencies": [ + "ember-provide-consume-context" + ], "files": [ { "path": "registry/new-york-v4/ui/radio-group.gts", @@ -411,7 +474,10 @@ { "name": "sheet", "type": "registry:ui", - "dependencies": ["ember-modifier", "ember-provide-consume-context"], + "dependencies": [ + "ember-modifier", + "ember-provide-consume-context" + ], "files": [ { "path": "registry/new-york-v4/ui/sheet.gts", @@ -471,7 +537,9 @@ "ember-truth-helpers", "ember-cli-flash" ], - "registryDependencies": ["toast"], + "registryDependencies": [ + "toast" + ], "files": [ { "path": "registry/new-york-v4/ui/sonner.gts", @@ -512,7 +580,9 @@ { "name": "tabs", "type": "registry:ui", - "dependencies": ["ember-provide-consume-context"], + "dependencies": [ + "ember-provide-consume-context" + ], "files": [ { "path": "registry/new-york-v4/ui/tabs.gts", @@ -533,8 +603,12 @@ { "name": "toggle-group", "type": "registry:ui", - "dependencies": ["ember-provide-consume-context"], - "registryDependencies": ["toggle"], + "dependencies": [ + "ember-provide-consume-context" + ], + "registryDependencies": [ + "toggle" + ], "files": [ { "path": "registry/new-york-v4/ui/toggle-group.gts", @@ -570,7 +644,10 @@ { "name": "utils", "type": "registry:lib", - "dependencies": ["clsx", "tailwind-merge"], + "dependencies": [ + "clsx", + "tailwind-merge" + ], "files": [ { "path": "registry/new-york-v4/lib/utils.ts", @@ -581,7 +658,9 @@ { "name": "toast", "type": "registry:composable", - "dependencies": ["ember-cli-flash"], + "dependencies": [ + "ember-cli-flash" + ], "files": [ { "path": "registry/new-york-v4/services/toast.ts", @@ -956,4 +1035,4 @@ } } ] -} +} \ No newline at end of file diff --git a/apps/v4/public/r/styles/new-york-v4/scroll-area.json b/apps/v4/public/r/styles/new-york-v4/scroll-area.json index 50c9e9b..6692548 100644 --- a/apps/v4/public/r/styles/new-york-v4/scroll-area.json +++ b/apps/v4/public/r/styles/new-york-v4/scroll-area.json @@ -9,4 +9,4 @@ "type": "registry:ui" } ] -} +} \ No newline at end of file diff --git a/apps/v4/public/r/styles/new-york-v4/select.json b/apps/v4/public/r/styles/new-york-v4/select.json index 49d1901..c6253c5 100644 --- a/apps/v4/public/r/styles/new-york-v4/select.json +++ b/apps/v4/public/r/styles/new-york-v4/select.json @@ -15,4 +15,4 @@ "type": "registry:ui" } ] -} +} \ No newline at end of file diff --git a/apps/v4/public/r/styles/new-york-v4/separator.json b/apps/v4/public/r/styles/new-york-v4/separator.json index 66be96b..43166b4 100644 --- a/apps/v4/public/r/styles/new-york-v4/separator.json +++ b/apps/v4/public/r/styles/new-york-v4/separator.json @@ -9,4 +9,4 @@ "type": "registry:ui" } ] -} +} \ No newline at end of file diff --git a/apps/v4/public/r/styles/new-york-v4/sheet.json b/apps/v4/public/r/styles/new-york-v4/sheet.json index 599a55a..a1dc436 100644 --- a/apps/v4/public/r/styles/new-york-v4/sheet.json +++ b/apps/v4/public/r/styles/new-york-v4/sheet.json @@ -2,7 +2,10 @@ "$schema": "https://shadcn-ember.com/schema/registry-item.json", "name": "sheet", "type": "registry:ui", - "dependencies": ["ember-modifier", "ember-provide-consume-context"], + "dependencies": [ + "ember-modifier", + "ember-provide-consume-context" + ], "files": [ { "path": "registry/new-york-v4/ui/sheet.gts", @@ -10,4 +13,4 @@ "type": "registry:ui" } ] -} +} \ No newline at end of file diff --git a/apps/v4/public/r/styles/new-york-v4/sidebar.json b/apps/v4/public/r/styles/new-york-v4/sidebar.json index 4c20397..8575627 100644 --- a/apps/v4/public/r/styles/new-york-v4/sidebar.json +++ b/apps/v4/public/r/styles/new-york-v4/sidebar.json @@ -22,4 +22,4 @@ "type": "registry:ui" } ] -} +} \ No newline at end of file diff --git a/apps/v4/public/r/styles/new-york-v4/skeleton.json b/apps/v4/public/r/styles/new-york-v4/skeleton.json index 30b9efe..946a83c 100644 --- a/apps/v4/public/r/styles/new-york-v4/skeleton.json +++ b/apps/v4/public/r/styles/new-york-v4/skeleton.json @@ -9,4 +9,4 @@ "type": "registry:ui" } ] -} +} \ No newline at end of file diff --git a/apps/v4/public/r/styles/new-york-v4/slider.json b/apps/v4/public/r/styles/new-york-v4/slider.json index a2e8141..40ba5d6 100644 --- a/apps/v4/public/r/styles/new-york-v4/slider.json +++ b/apps/v4/public/r/styles/new-york-v4/slider.json @@ -9,4 +9,4 @@ "type": "registry:ui" } ] -} +} \ No newline at end of file diff --git a/apps/v4/public/r/styles/new-york-v4/sonner.json b/apps/v4/public/r/styles/new-york-v4/sonner.json index 4b60eb6..c4d31a7 100644 --- a/apps/v4/public/r/styles/new-york-v4/sonner.json +++ b/apps/v4/public/r/styles/new-york-v4/sonner.json @@ -8,7 +8,9 @@ "ember-truth-helpers", "ember-cli-flash" ], - "registryDependencies": ["toast"], + "registryDependencies": [ + "toast" + ], "files": [ { "path": "registry/new-york-v4/ui/sonner.gts", @@ -16,4 +18,4 @@ "type": "registry:ui" } ] -} +} \ No newline at end of file diff --git a/apps/v4/public/r/styles/new-york-v4/spinner.json b/apps/v4/public/r/styles/new-york-v4/spinner.json index 7bba77e..b293d6f 100644 --- a/apps/v4/public/r/styles/new-york-v4/spinner.json +++ b/apps/v4/public/r/styles/new-york-v4/spinner.json @@ -9,4 +9,4 @@ "type": "registry:ui" } ] -} +} \ No newline at end of file diff --git a/apps/v4/public/r/styles/new-york-v4/style.json b/apps/v4/public/r/styles/new-york-v4/style.json index dfe44ad..38d8702 100644 --- a/apps/v4/public/r/styles/new-york-v4/style.json +++ b/apps/v4/public/r/styles/new-york-v4/style.json @@ -2,9 +2,16 @@ "$schema": "https://shadcn-ember.com/schema/registry-item.json", "name": "style", "type": "registry:style", - "dependencies": ["class-variance-authority", "@iconify-json/lucide"], - "devDependencies": ["tw-animate-css"], - "registryDependencies": ["utils"], + "dependencies": [ + "class-variance-authority", + "@iconify-json/lucide" + ], + "devDependencies": [ + "tw-animate-css" + ], + "registryDependencies": [ + "utils" + ], "files": [], "cssVars": {} -} +} \ No newline at end of file diff --git a/apps/v4/public/r/styles/new-york-v4/switch.json b/apps/v4/public/r/styles/new-york-v4/switch.json index acc3d28..195e1d0 100644 --- a/apps/v4/public/r/styles/new-york-v4/switch.json +++ b/apps/v4/public/r/styles/new-york-v4/switch.json @@ -9,4 +9,4 @@ "type": "registry:ui" } ] -} +} \ No newline at end of file diff --git a/apps/v4/public/r/styles/new-york-v4/table.json b/apps/v4/public/r/styles/new-york-v4/table.json index ba9570a..5636acd 100644 --- a/apps/v4/public/r/styles/new-york-v4/table.json +++ b/apps/v4/public/r/styles/new-york-v4/table.json @@ -9,4 +9,4 @@ "type": "registry:ui" } ] -} +} \ No newline at end of file diff --git a/apps/v4/public/r/styles/new-york-v4/tabs.json b/apps/v4/public/r/styles/new-york-v4/tabs.json index 9a1b91d..c871cc7 100644 --- a/apps/v4/public/r/styles/new-york-v4/tabs.json +++ b/apps/v4/public/r/styles/new-york-v4/tabs.json @@ -2,7 +2,9 @@ "$schema": "https://shadcn-ember.com/schema/registry-item.json", "name": "tabs", "type": "registry:ui", - "dependencies": ["ember-provide-consume-context"], + "dependencies": [ + "ember-provide-consume-context" + ], "files": [ { "path": "registry/new-york-v4/ui/tabs.gts", @@ -10,4 +12,4 @@ "type": "registry:ui" } ] -} +} \ No newline at end of file diff --git a/apps/v4/public/r/styles/new-york-v4/textarea.json b/apps/v4/public/r/styles/new-york-v4/textarea.json index 7182eb3..8d8eec4 100644 --- a/apps/v4/public/r/styles/new-york-v4/textarea.json +++ b/apps/v4/public/r/styles/new-york-v4/textarea.json @@ -9,4 +9,4 @@ "type": "registry:ui" } ] -} +} \ No newline at end of file diff --git a/apps/v4/public/r/styles/new-york-v4/theme-gray.json b/apps/v4/public/r/styles/new-york-v4/theme-gray.json index 312db88..de8852f 100644 --- a/apps/v4/public/r/styles/new-york-v4/theme-gray.json +++ b/apps/v4/public/r/styles/new-york-v4/theme-gray.json @@ -71,4 +71,4 @@ "sidebar-ring": "oklch(0.551 0.027 264.364)" } } -} +} \ No newline at end of file diff --git a/apps/v4/public/r/styles/new-york-v4/theme-neutral.json b/apps/v4/public/r/styles/new-york-v4/theme-neutral.json index 552e02e..7ef9fa1 100644 --- a/apps/v4/public/r/styles/new-york-v4/theme-neutral.json +++ b/apps/v4/public/r/styles/new-york-v4/theme-neutral.json @@ -71,4 +71,4 @@ "sidebar-ring": "oklch(0.556 0 0)" } } -} +} \ No newline at end of file diff --git a/apps/v4/public/r/styles/new-york-v4/theme-slate.json b/apps/v4/public/r/styles/new-york-v4/theme-slate.json index 52203af..71f3747 100644 --- a/apps/v4/public/r/styles/new-york-v4/theme-slate.json +++ b/apps/v4/public/r/styles/new-york-v4/theme-slate.json @@ -71,4 +71,4 @@ "sidebar-ring": "oklch(0.551 0.027 264.364)" } } -} +} \ No newline at end of file diff --git a/apps/v4/public/r/styles/new-york-v4/theme-stone.json b/apps/v4/public/r/styles/new-york-v4/theme-stone.json index de44b40..092a053 100644 --- a/apps/v4/public/r/styles/new-york-v4/theme-stone.json +++ b/apps/v4/public/r/styles/new-york-v4/theme-stone.json @@ -71,4 +71,4 @@ "sidebar-ring": "oklch(0.553 0.013 58.071)" } } -} +} \ No newline at end of file diff --git a/apps/v4/public/r/styles/new-york-v4/theme-zinc.json b/apps/v4/public/r/styles/new-york-v4/theme-zinc.json index abec732..7a20cc6 100644 --- a/apps/v4/public/r/styles/new-york-v4/theme-zinc.json +++ b/apps/v4/public/r/styles/new-york-v4/theme-zinc.json @@ -71,4 +71,4 @@ "sidebar-ring": "oklch(0.552 0.016 285.938)" } } -} +} \ No newline at end of file diff --git a/apps/v4/public/r/styles/new-york-v4/toast.json b/apps/v4/public/r/styles/new-york-v4/toast.json index d1c8bb9..8fa2a28 100644 --- a/apps/v4/public/r/styles/new-york-v4/toast.json +++ b/apps/v4/public/r/styles/new-york-v4/toast.json @@ -2,7 +2,9 @@ "$schema": "https://shadcn-ember.com/schema/registry-item.json", "name": "toast", "type": "registry:composable", - "dependencies": ["ember-cli-flash"], + "dependencies": [ + "ember-cli-flash" + ], "files": [ { "path": "registry/new-york-v4/services/toast.ts", @@ -11,4 +13,4 @@ "target": "app/services/toast.ts" } ] -} +} \ No newline at end of file diff --git a/apps/v4/public/r/styles/new-york-v4/toggle-group.json b/apps/v4/public/r/styles/new-york-v4/toggle-group.json index 3777e1d..3589f9c 100644 --- a/apps/v4/public/r/styles/new-york-v4/toggle-group.json +++ b/apps/v4/public/r/styles/new-york-v4/toggle-group.json @@ -2,8 +2,12 @@ "$schema": "https://shadcn-ember.com/schema/registry-item.json", "name": "toggle-group", "type": "registry:ui", - "dependencies": ["ember-provide-consume-context"], - "registryDependencies": ["toggle"], + "dependencies": [ + "ember-provide-consume-context" + ], + "registryDependencies": [ + "toggle" + ], "files": [ { "path": "registry/new-york-v4/ui/toggle-group.gts", @@ -11,4 +15,4 @@ "type": "registry:ui" } ] -} +} \ No newline at end of file diff --git a/apps/v4/public/r/styles/new-york-v4/toggle.json b/apps/v4/public/r/styles/new-york-v4/toggle.json index 23c4aa3..4cec8e0 100644 --- a/apps/v4/public/r/styles/new-york-v4/toggle.json +++ b/apps/v4/public/r/styles/new-york-v4/toggle.json @@ -9,4 +9,4 @@ "type": "registry:ui" } ] -} +} \ No newline at end of file diff --git a/apps/v4/public/r/styles/new-york-v4/tooltip.json b/apps/v4/public/r/styles/new-york-v4/tooltip.json index 5bde9f2..e6778be 100644 --- a/apps/v4/public/r/styles/new-york-v4/tooltip.json +++ b/apps/v4/public/r/styles/new-york-v4/tooltip.json @@ -14,4 +14,4 @@ "type": "registry:ui" } ] -} +} \ No newline at end of file diff --git a/apps/v4/public/r/styles/new-york-v4/utils.json b/apps/v4/public/r/styles/new-york-v4/utils.json index 8e789dd..7324553 100644 --- a/apps/v4/public/r/styles/new-york-v4/utils.json +++ b/apps/v4/public/r/styles/new-york-v4/utils.json @@ -2,7 +2,10 @@ "$schema": "https://shadcn-ember.com/schema/registry-item.json", "name": "utils", "type": "registry:lib", - "dependencies": ["clsx", "tailwind-merge"], + "dependencies": [ + "clsx", + "tailwind-merge" + ], "files": [ { "path": "registry/new-york-v4/lib/utils.ts", @@ -10,4 +13,4 @@ "type": "registry:lib" } ] -} +} \ No newline at end of file diff --git a/apps/v4/registry/__blocks__.json b/apps/v4/registry/__blocks__.json index fe51488..0637a08 100644 --- a/apps/v4/registry/__blocks__.json +++ b/apps/v4/registry/__blocks__.json @@ -1 +1 @@ -[] +[] \ No newline at end of file diff --git a/apps/v4/registry/__index__.ts b/apps/v4/registry/__index__.ts index bece357..b516adc 100644 --- a/apps/v4/registry/__index__.ts +++ b/apps/v4/registry/__index__.ts @@ -5,764 +5,672 @@ // Do not edit this file directly. export const Index: Record = { - index: { - name: 'index', - description: '', - type: 'registry:style', - registryDependencies: ['utils'], + "index": { + name: "index", + description: "", + type: "registry:style", + registryDependencies: ["utils"], files: [], categories: undefined, meta: undefined, }, - style: { - name: 'style', - description: '', - type: 'registry:style', - registryDependencies: ['utils'], + "style": { + name: "style", + description: "", + type: "registry:style", + registryDependencies: ["utils"], files: [], categories: undefined, meta: undefined, }, - accordion: { - name: 'accordion', - description: '', - type: 'registry:ui', + "accordion": { + name: "accordion", + description: "", + type: "registry:ui", registryDependencies: undefined, - files: [ - { - path: 'registry/new-york-v4/ui/accordion.gts', - type: 'registry:ui', - target: '', - }, - ], + files: [{ + path: "registry/new-york-v4/ui/accordion.gts", + type: "registry:ui", + target: "" + }], categories: undefined, meta: undefined, }, - 'alert-dialog': { - name: 'alert-dialog', - description: '', - type: 'registry:ui', + "alert-dialog": { + name: "alert-dialog", + description: "", + type: "registry:ui", registryDependencies: undefined, - files: [ - { - path: 'registry/new-york-v4/ui/alert-dialog.gts', - type: 'registry:ui', - target: '', - }, - ], + files: [{ + path: "registry/new-york-v4/ui/alert-dialog.gts", + type: "registry:ui", + target: "" + }], categories: undefined, meta: undefined, }, - alert: { - name: 'alert', - description: '', - type: 'registry:ui', + "alert": { + name: "alert", + description: "", + type: "registry:ui", registryDependencies: undefined, - files: [ - { - path: 'registry/new-york-v4/ui/alert.gts', - type: 'registry:ui', - target: '', - }, - ], + files: [{ + path: "registry/new-york-v4/ui/alert.gts", + type: "registry:ui", + target: "" + }], categories: undefined, meta: undefined, }, - 'aspect-ratio': { - name: 'aspect-ratio', - description: '', - type: 'registry:ui', + "aspect-ratio": { + name: "aspect-ratio", + description: "", + type: "registry:ui", registryDependencies: undefined, - files: [ - { - path: 'registry/new-york-v4/ui/aspect-ratio.gts', - type: 'registry:ui', - target: '', - }, - ], + files: [{ + path: "registry/new-york-v4/ui/aspect-ratio.gts", + type: "registry:ui", + target: "" + }], categories: undefined, meta: undefined, }, - avatar: { - name: 'avatar', - description: '', - type: 'registry:ui', + "avatar": { + name: "avatar", + description: "", + type: "registry:ui", registryDependencies: undefined, - files: [ - { - path: 'registry/new-york-v4/ui/avatar.gts', - type: 'registry:ui', - target: '', - }, - ], + files: [{ + path: "registry/new-york-v4/ui/avatar.gts", + type: "registry:ui", + target: "" + }], categories: undefined, meta: undefined, }, - badge: { - name: 'badge', - description: '', - type: 'registry:ui', + "badge": { + name: "badge", + description: "", + type: "registry:ui", registryDependencies: undefined, - files: [ - { - path: 'registry/new-york-v4/ui/badge.gts', - type: 'registry:ui', - target: '', - }, - ], + files: [{ + path: "registry/new-york-v4/ui/badge.gts", + type: "registry:ui", + target: "" + }], categories: undefined, meta: undefined, }, - breadcrumb: { - name: 'breadcrumb', - description: '', - type: 'registry:ui', + "breadcrumb": { + name: "breadcrumb", + description: "", + type: "registry:ui", registryDependencies: undefined, - files: [ - { - path: 'registry/new-york-v4/ui/breadcrumb.gts', - type: 'registry:ui', - target: '', - }, - ], + files: [{ + path: "registry/new-york-v4/ui/breadcrumb.gts", + type: "registry:ui", + target: "" + }], categories: undefined, meta: undefined, }, - 'button-group': { - name: 'button-group', - description: '', - type: 'registry:ui', - registryDependencies: ['separator'], - files: [ - { - path: 'registry/new-york-v4/ui/button-group.gts', - type: 'registry:ui', - target: '', - }, - ], + "button-group": { + name: "button-group", + description: "", + type: "registry:ui", + registryDependencies: ["separator"], + files: [{ + path: "registry/new-york-v4/ui/button-group.gts", + type: "registry:ui", + target: "" + }], categories: undefined, meta: undefined, }, - button: { - name: 'button', - description: '', - type: 'registry:ui', + "button": { + name: "button", + description: "", + type: "registry:ui", registryDependencies: undefined, - files: [ - { - path: 'registry/new-york-v4/ui/button.gts', - type: 'registry:ui', - target: '', - }, - ], + files: [{ + path: "registry/new-york-v4/ui/button.gts", + type: "registry:ui", + target: "" + }], categories: undefined, meta: undefined, }, - calendar: { - name: 'calendar', - description: '', - type: 'registry:ui', - registryDependencies: ['button'], - files: [ - { - path: 'registry/new-york-v4/ui/calendar.gts', - type: 'registry:ui', - target: '', - }, - ], + "calendar": { + name: "calendar", + description: "", + type: "registry:ui", + registryDependencies: ["button"], + files: [{ + path: "registry/new-york-v4/ui/calendar.gts", + type: "registry:ui", + target: "" + }], categories: undefined, meta: undefined, }, - card: { - name: 'card', - description: '', - type: 'registry:ui', + "card": { + name: "card", + description: "", + type: "registry:ui", registryDependencies: undefined, - files: [ - { - path: 'registry/new-york-v4/ui/card.gts', - type: 'registry:ui', - target: '', - }, - ], + files: [{ + path: "registry/new-york-v4/ui/card.gts", + type: "registry:ui", + target: "" + }], categories: undefined, meta: undefined, }, - checkbox: { - name: 'checkbox', - description: '', - type: 'registry:ui', + "checkbox": { + name: "checkbox", + description: "", + type: "registry:ui", registryDependencies: undefined, - files: [ - { - path: 'registry/new-york-v4/ui/checkbox.gts', - type: 'registry:ui', - target: '', - }, - ], - categories: undefined, - meta: undefined, - }, - collapsible: { - name: 'collapsible', - description: '', - type: 'registry:ui', + files: [{ + path: "registry/new-york-v4/ui/checkbox.gts", + type: "registry:ui", + target: "" + }], + categories: undefined, + meta: undefined, + }, + "collapsible": { + name: "collapsible", + description: "", + type: "registry:ui", registryDependencies: undefined, - files: [ - { - path: 'registry/new-york-v4/ui/collapsible.gts', - type: 'registry:ui', - target: '', - }, - ], - categories: undefined, - meta: undefined, - }, - command: { - name: 'command', - description: '', - type: 'registry:ui', - registryDependencies: ['dialog'], - files: [ - { - path: 'registry/new-york-v4/ui/command.gts', - type: 'registry:ui', - target: '', - }, - ], - categories: undefined, - meta: undefined, - }, - 'context-menu': { - name: 'context-menu', - description: '', - type: 'registry:ui', + files: [{ + path: "registry/new-york-v4/ui/collapsible.gts", + type: "registry:ui", + target: "" + }], + categories: undefined, + meta: undefined, + }, + "command": { + name: "command", + description: "", + type: "registry:ui", + registryDependencies: ["dialog"], + files: [{ + path: "registry/new-york-v4/ui/command.gts", + type: "registry:ui", + target: "" + }], + categories: undefined, + meta: undefined, + }, + "context-menu": { + name: "context-menu", + description: "", + type: "registry:ui", registryDependencies: undefined, - files: [ - { - path: 'registry/new-york-v4/ui/context-menu.gts', - type: 'registry:ui', - target: '', - }, - ], - categories: undefined, - meta: undefined, - }, - dialog: { - name: 'dialog', - description: '', - type: 'registry:ui', + files: [{ + path: "registry/new-york-v4/ui/context-menu.gts", + type: "registry:ui", + target: "" + }], + categories: undefined, + meta: undefined, + }, + "dialog": { + name: "dialog", + description: "", + type: "registry:ui", registryDependencies: undefined, - files: [ - { - path: 'registry/new-york-v4/ui/dialog.gts', - type: 'registry:ui', - target: '', - }, - ], - categories: undefined, - meta: undefined, - }, - 'dropdown-menu': { - name: 'dropdown-menu', - description: '', - type: 'registry:ui', + files: [{ + path: "registry/new-york-v4/ui/dialog.gts", + type: "registry:ui", + target: "" + }], + categories: undefined, + meta: undefined, + }, + "drawer": { + name: "drawer", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [{ + path: "registry/new-york-v4/ui/drawer.gts", + type: "registry:ui", + target: "" + }], + categories: undefined, + meta: undefined, + }, + "dropdown-menu": { + name: "dropdown-menu", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [{ + path: "registry/new-york-v4/ui/dropdown-menu.gts", + type: "registry:ui", + target: "" + }], + categories: undefined, + meta: undefined, + }, + "empty": { + name: "empty", + description: "", + type: "registry:ui", registryDependencies: undefined, - files: [ - { - path: 'registry/new-york-v4/ui/dropdown-menu.gts', - type: 'registry:ui', - target: '', - }, - ], - categories: undefined, - meta: undefined, - }, - empty: { - name: 'empty', - description: '', - type: 'registry:ui', + files: [{ + path: "registry/new-york-v4/ui/empty.gts", + type: "registry:ui", + target: "" + }], + categories: undefined, + meta: undefined, + }, + "field": { + name: "field", + description: "", + type: "registry:ui", + registryDependencies: ["label","separator"], + files: [{ + path: "registry/new-york-v4/ui/field.gts", + type: "registry:ui", + target: "" + }], + categories: undefined, + meta: undefined, + }, + "hover-card": { + name: "hover-card", + description: "", + type: "registry:ui", registryDependencies: undefined, - files: [ - { - path: 'registry/new-york-v4/ui/empty.gts', - type: 'registry:ui', - target: '', - }, - ], - categories: undefined, - meta: undefined, - }, - field: { - name: 'field', - description: '', - type: 'registry:ui', - registryDependencies: ['label', 'separator'], - files: [ - { - path: 'registry/new-york-v4/ui/field.gts', - type: 'registry:ui', - target: '', - }, - ], - categories: undefined, - meta: undefined, - }, - 'hover-card': { - name: 'hover-card', - description: '', - type: 'registry:ui', + files: [{ + path: "registry/new-york-v4/ui/hover-card.gts", + type: "registry:ui", + target: "" + }], + categories: undefined, + meta: undefined, + }, + "input-group": { + name: "input-group", + description: "", + type: "registry:ui", + registryDependencies: ["button","input","textarea"], + files: [{ + path: "registry/new-york-v4/ui/input-group.gts", + type: "registry:ui", + target: "" + }], + categories: undefined, + meta: undefined, + }, + "input-otp": { + name: "input-otp", + description: "", + type: "registry:ui", registryDependencies: undefined, - files: [ - { - path: 'registry/new-york-v4/ui/hover-card.gts', - type: 'registry:ui', - target: '', - }, - ], - categories: undefined, - meta: undefined, - }, - 'input-group': { - name: 'input-group', - description: '', - type: 'registry:ui', - registryDependencies: ['button', 'input', 'textarea'], - files: [ - { - path: 'registry/new-york-v4/ui/input-group.gts', - type: 'registry:ui', - target: '', - }, - ], + files: [{ + path: "registry/new-york-v4/ui/input-otp.gts", + type: "registry:ui", + target: "" + }], categories: undefined, meta: undefined, }, - 'input-otp': { - name: 'input-otp', - description: '', - type: 'registry:ui', + "input": { + name: "input", + description: "", + type: "registry:ui", registryDependencies: undefined, - files: [ - { - path: 'registry/new-york-v4/ui/input-otp.gts', - type: 'registry:ui', - target: '', - }, - ], + files: [{ + path: "registry/new-york-v4/ui/input.gts", + type: "registry:ui", + target: "" + }], categories: undefined, meta: undefined, }, - input: { - name: 'input', - description: '', - type: 'registry:ui', + "item": { + name: "item", + description: "", + type: "registry:ui", + registryDependencies: ["separator"], + files: [{ + path: "registry/new-york-v4/ui/item.gts", + type: "registry:ui", + target: "" + }], + categories: undefined, + meta: undefined, + }, + "kbd": { + name: "kbd", + description: "", + type: "registry:ui", registryDependencies: undefined, - files: [ - { - path: 'registry/new-york-v4/ui/input.gts', - type: 'registry:ui', - target: '', - }, - ], + files: [{ + path: "registry/new-york-v4/ui/kbd.gts", + type: "registry:ui", + target: "" + }], categories: undefined, meta: undefined, }, - item: { - name: 'item', - description: '', - type: 'registry:ui', - registryDependencies: ['separator'], - files: [ - { - path: 'registry/new-york-v4/ui/item.gts', - type: 'registry:ui', - target: '', - }, - ], + "label": { + name: "label", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [{ + path: "registry/new-york-v4/ui/label.gts", + type: "registry:ui", + target: "" + }], categories: undefined, meta: undefined, }, - kbd: { - name: 'kbd', - description: '', - type: 'registry:ui', + "native-select": { + name: "native-select", + description: "", + type: "registry:ui", registryDependencies: undefined, - files: [ - { - path: 'registry/new-york-v4/ui/kbd.gts', - type: 'registry:ui', - target: '', - }, - ], + files: [{ + path: "registry/new-york-v4/ui/native-select.gts", + type: "registry:ui", + target: "" + }], categories: undefined, meta: undefined, }, - label: { - name: 'label', - description: '', - type: 'registry:ui', + "pagination": { + name: "pagination", + description: "", + type: "registry:ui", registryDependencies: undefined, - files: [ - { - path: 'registry/new-york-v4/ui/label.gts', - type: 'registry:ui', - target: '', - }, - ], + files: [{ + path: "registry/new-york-v4/ui/pagination.gts", + type: "registry:ui", + target: "" + }], categories: undefined, meta: undefined, }, - 'native-select': { - name: 'native-select', - description: '', - type: 'registry:ui', + "popover": { + name: "popover", + description: "", + type: "registry:ui", registryDependencies: undefined, - files: [ - { - path: 'registry/new-york-v4/ui/native-select.gts', - type: 'registry:ui', - target: '', - }, - ], + files: [{ + path: "registry/new-york-v4/ui/popover.gts", + type: "registry:ui", + target: "" + }], categories: undefined, meta: undefined, }, - pagination: { - name: 'pagination', - description: '', - type: 'registry:ui', + "progress": { + name: "progress", + description: "", + type: "registry:ui", registryDependencies: undefined, - files: [ - { - path: 'registry/new-york-v4/ui/pagination.gts', - type: 'registry:ui', - target: '', - }, - ], + files: [{ + path: "registry/new-york-v4/ui/progress.gts", + type: "registry:ui", + target: "" + }], categories: undefined, meta: undefined, }, - popover: { - name: 'popover', - description: '', - type: 'registry:ui', + "radio-group": { + name: "radio-group", + description: "", + type: "registry:ui", registryDependencies: undefined, - files: [ - { - path: 'registry/new-york-v4/ui/popover.gts', - type: 'registry:ui', - target: '', - }, - ], + files: [{ + path: "registry/new-york-v4/ui/radio-group.gts", + type: "registry:ui", + target: "" + }], categories: undefined, meta: undefined, }, - progress: { - name: 'progress', - description: '', - type: 'registry:ui', + "scroll-area": { + name: "scroll-area", + description: "", + type: "registry:ui", registryDependencies: undefined, - files: [ - { - path: 'registry/new-york-v4/ui/progress.gts', - type: 'registry:ui', - target: '', - }, - ], + files: [{ + path: "registry/new-york-v4/ui/scroll-area.gts", + type: "registry:ui", + target: "" + }], categories: undefined, meta: undefined, }, - 'radio-group': { - name: 'radio-group', - description: '', - type: 'registry:ui', + "select": { + name: "select", + description: "", + type: "registry:ui", registryDependencies: undefined, - files: [ - { - path: 'registry/new-york-v4/ui/radio-group.gts', - type: 'registry:ui', - target: '', - }, - ], + files: [{ + path: "registry/new-york-v4/ui/select.gts", + type: "registry:ui", + target: "" + }], categories: undefined, meta: undefined, }, - 'scroll-area': { - name: 'scroll-area', - description: '', - type: 'registry:ui', + "separator": { + name: "separator", + description: "", + type: "registry:ui", registryDependencies: undefined, - files: [ - { - path: 'registry/new-york-v4/ui/scroll-area.gts', - type: 'registry:ui', - target: '', - }, - ], + files: [{ + path: "registry/new-york-v4/ui/separator.gts", + type: "registry:ui", + target: "" + }], categories: undefined, meta: undefined, }, - select: { - name: 'select', - description: '', - type: 'registry:ui', + "sheet": { + name: "sheet", + description: "", + type: "registry:ui", registryDependencies: undefined, - files: [ - { - path: 'registry/new-york-v4/ui/select.gts', - type: 'registry:ui', - target: '', - }, - ], + files: [{ + path: "registry/new-york-v4/ui/sheet.gts", + type: "registry:ui", + target: "" + }], categories: undefined, meta: undefined, }, - separator: { - name: 'separator', - description: '', - type: 'registry:ui', + "sidebar": { + name: "sidebar", + description: "", + type: "registry:ui", + registryDependencies: ["button","input","separator","sheet","skeleton","tooltip"], + files: [{ + path: "registry/new-york-v4/ui/sidebar.gts", + type: "registry:ui", + target: "" + }], + categories: undefined, + meta: undefined, + }, + "skeleton": { + name: "skeleton", + description: "", + type: "registry:ui", registryDependencies: undefined, - files: [ - { - path: 'registry/new-york-v4/ui/separator.gts', - type: 'registry:ui', - target: '', - }, - ], + files: [{ + path: "registry/new-york-v4/ui/skeleton.gts", + type: "registry:ui", + target: "" + }], categories: undefined, meta: undefined, }, - sheet: { - name: 'sheet', - description: '', - type: 'registry:ui', + "slider": { + name: "slider", + description: "", + type: "registry:ui", registryDependencies: undefined, - files: [ - { - path: 'registry/new-york-v4/ui/sheet.gts', - type: 'registry:ui', - target: '', - }, - ], + files: [{ + path: "registry/new-york-v4/ui/slider.gts", + type: "registry:ui", + target: "" + }], categories: undefined, meta: undefined, }, - sidebar: { - name: 'sidebar', - description: '', - type: 'registry:ui', - registryDependencies: [ - 'button', - 'input', - 'separator', - 'sheet', - 'skeleton', - 'tooltip', - ], - files: [ - { - path: 'registry/new-york-v4/ui/sidebar.gts', - type: 'registry:ui', - target: '', - }, - ], + "sonner": { + name: "sonner", + description: "", + type: "registry:ui", + registryDependencies: ["toast"], + files: [{ + path: "registry/new-york-v4/ui/sonner.gts", + type: "registry:ui", + target: "" + }], + categories: undefined, + meta: undefined, + }, + "spinner": { + name: "spinner", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [{ + path: "registry/new-york-v4/ui/spinner.gts", + type: "registry:ui", + target: "" + }], categories: undefined, meta: undefined, }, - skeleton: { - name: 'skeleton', - description: '', - type: 'registry:ui', + "switch": { + name: "switch", + description: "", + type: "registry:ui", registryDependencies: undefined, - files: [ - { - path: 'registry/new-york-v4/ui/skeleton.gts', - type: 'registry:ui', - target: '', - }, - ], + files: [{ + path: "registry/new-york-v4/ui/switch.gts", + type: "registry:ui", + target: "" + }], categories: undefined, meta: undefined, }, - slider: { - name: 'slider', - description: '', - type: 'registry:ui', + "table": { + name: "table", + description: "", + type: "registry:ui", registryDependencies: undefined, - files: [ - { - path: 'registry/new-york-v4/ui/slider.gts', - type: 'registry:ui', - target: '', - }, - ], - categories: undefined, - meta: undefined, - }, - sonner: { - name: 'sonner', - description: '', - type: 'registry:ui', - registryDependencies: ['toast'], - files: [ - { - path: 'registry/new-york-v4/ui/sonner.gts', - type: 'registry:ui', - target: '', - }, - ], - categories: undefined, - meta: undefined, - }, - spinner: { - name: 'spinner', - description: '', - type: 'registry:ui', - registryDependencies: undefined, - files: [ - { - path: 'registry/new-york-v4/ui/spinner.gts', - type: 'registry:ui', - target: '', - }, - ], - categories: undefined, - meta: undefined, - }, - switch: { - name: 'switch', - description: '', - type: 'registry:ui', - registryDependencies: undefined, - files: [ - { - path: 'registry/new-york-v4/ui/switch.gts', - type: 'registry:ui', - target: '', - }, - ], - categories: undefined, - meta: undefined, - }, - table: { - name: 'table', - description: '', - type: 'registry:ui', - registryDependencies: undefined, - files: [ - { - path: 'registry/new-york-v4/ui/table.gts', - type: 'registry:ui', - target: '', - }, - ], + files: [{ + path: "registry/new-york-v4/ui/table.gts", + type: "registry:ui", + target: "" + }], categories: undefined, meta: undefined, }, - tabs: { - name: 'tabs', - description: '', - type: 'registry:ui', + "tabs": { + name: "tabs", + description: "", + type: "registry:ui", registryDependencies: undefined, - files: [ - { - path: 'registry/new-york-v4/ui/tabs.gts', - type: 'registry:ui', - target: '', - }, - ], + files: [{ + path: "registry/new-york-v4/ui/tabs.gts", + type: "registry:ui", + target: "" + }], categories: undefined, meta: undefined, }, - textarea: { - name: 'textarea', - description: '', - type: 'registry:ui', + "textarea": { + name: "textarea", + description: "", + type: "registry:ui", registryDependencies: undefined, - files: [ - { - path: 'registry/new-york-v4/ui/textarea.gts', - type: 'registry:ui', - target: '', - }, - ], + files: [{ + path: "registry/new-york-v4/ui/textarea.gts", + type: "registry:ui", + target: "" + }], categories: undefined, meta: undefined, }, - 'toggle-group': { - name: 'toggle-group', - description: '', - type: 'registry:ui', - registryDependencies: ['toggle'], - files: [ - { - path: 'registry/new-york-v4/ui/toggle-group.gts', - type: 'registry:ui', - target: '', - }, - ], + "toggle-group": { + name: "toggle-group", + description: "", + type: "registry:ui", + registryDependencies: ["toggle"], + files: [{ + path: "registry/new-york-v4/ui/toggle-group.gts", + type: "registry:ui", + target: "" + }], categories: undefined, meta: undefined, }, - toggle: { - name: 'toggle', - description: '', - type: 'registry:ui', + "toggle": { + name: "toggle", + description: "", + type: "registry:ui", registryDependencies: undefined, - files: [ - { - path: 'registry/new-york-v4/ui/toggle.gts', - type: 'registry:ui', - target: '', - }, - ], + files: [{ + path: "registry/new-york-v4/ui/toggle.gts", + type: "registry:ui", + target: "" + }], categories: undefined, meta: undefined, }, - tooltip: { - name: 'tooltip', - description: '', - type: 'registry:ui', + "tooltip": { + name: "tooltip", + description: "", + type: "registry:ui", registryDependencies: undefined, - files: [ - { - path: 'registry/new-york-v4/ui/tooltip.gts', - type: 'registry:ui', - target: '', - }, - ], + files: [{ + path: "registry/new-york-v4/ui/tooltip.gts", + type: "registry:ui", + target: "" + }], categories: undefined, meta: undefined, }, - utils: { - name: 'utils', - description: '', - type: 'registry:lib', + "utils": { + name: "utils", + description: "", + type: "registry:lib", registryDependencies: undefined, - files: [ - { - path: 'registry/new-york-v4/lib/utils.ts', - type: 'registry:lib', - target: '', - }, - ], + files: [{ + path: "registry/new-york-v4/lib/utils.ts", + type: "registry:lib", + target: "" + }], categories: undefined, meta: undefined, }, - toast: { - name: 'toast', - description: '', - type: 'registry:composable', + "toast": { + name: "toast", + description: "", + type: "registry:composable", registryDependencies: undefined, - files: [ - { - path: 'registry/new-york-v4/services/toast.ts', - type: 'registry:composable', - target: 'app/services/toast.ts', - }, - ], + files: [{ + path: "registry/new-york-v4/services/toast.ts", + type: "registry:composable", + target: "app/services/toast.ts" + }], categories: undefined, meta: undefined, }, -}; + } \ No newline at end of file diff --git a/apps/v4/registry/new-york-v4/ui/drawer.gts b/apps/v4/registry/new-york-v4/ui/drawer.gts new file mode 100644 index 0000000..d925af8 --- /dev/null +++ b/apps/v4/registry/new-york-v4/ui/drawer.gts @@ -0,0 +1,555 @@ +import { hash } from '@ember/helper'; +import { on } from '@ember/modifier'; +import Component from '@glimmer/component'; +import { tracked } from '@glimmer/tracking'; +import { modifier } from 'ember-modifier'; +import { provide, consume } from 'ember-provide-consume-context'; + +import { cn } from '@/lib/utils'; + +import type { TOC } from '@ember/component/template-only'; + +type Direction = 'top' | 'right' | 'bottom' | 'left'; + +const CLOSE_THRESHOLD = 0.25; + +const DrawerContext = 'drawer-context' as const; + +interface DrawerContextValue { + open: boolean; + isRendered: boolean; + direction: Direction; + isDragging: boolean; + dragOffset: number; + closingFromDrag: boolean; + setOpen: (open: boolean) => void; + finishClose: () => void; + onDragStart: (event: PointerEvent) => void; +} + +interface ContextRegistry { + [DrawerContext]: DrawerContextValue; +} + +interface DrawerSignature { + Args: { + open?: boolean; + direction?: Direction; + onOpenChange?: (open: boolean) => void; + }; + Blocks: { + default: []; + }; +} + +class Drawer extends Component { + @tracked isOpen = false; + @tracked isOpenOrClosing = false; + @tracked isDragging = false; + @tracked dragOffset = 0; + @tracked closingFromDrag = false; + + get open() { + return this.args.open ?? this.isOpen; + } + + get isRendered() { + return this.open || this.isOpenOrClosing; + } + + get direction(): Direction { + return this.args.direction ?? 'bottom'; + } + + setOpen = (open: boolean) => { + if (open) { + this.isOpenOrClosing = true; + this.isOpen = true; + } else { + this.isOpen = false; + } + this.args.onOpenChange?.(open); + }; + + finishClose = () => { + if (!this.open) { + this.isOpenOrClosing = false; + this.closingFromDrag = false; + this.isDragging = false; + this.dragOffset = 0; + } + }; + + onDragStart = (event: PointerEvent) => { + const startPos = { x: event.clientX, y: event.clientY }; + const direction = this.direction; + + const onPointerMove = (e: PointerEvent) => { + const dx = e.clientX - startPos.x; + const dy = e.clientY - startPos.y; + + let offset: number; + switch (direction) { + case 'bottom': + offset = Math.max(0, dy); + break; + case 'top': + offset = Math.max(0, -dy); + break; + case 'right': + offset = Math.max(0, dx); + break; + case 'left': + offset = Math.max(0, -dx); + break; + } + + this.isDragging = true; + this.dragOffset = offset; + }; + + const onPointerUp = () => { + document.removeEventListener('pointermove', onPointerMove); + document.removeEventListener('pointerup', onPointerUp); + + const contentEl = document.querySelector( + '[data-slot="drawer-content"]', + ); + + if (contentEl) { + const isVertical = + direction === 'bottom' || direction === 'top'; + const size = isVertical + ? contentEl.offsetHeight + : contentEl.offsetWidth; + + if (this.dragOffset > size * CLOSE_THRESHOLD) { + this.isDragging = false; + this.closingFromDrag = true; + this.dragOffset = size; + this.setOpen(false); + + // Fallback: if transitionend doesn't fire, finishClose after timeout + setTimeout(() => { + if (this.closingFromDrag) { + this.finishClose(); + } + }, 300); + } else { + this.isDragging = false; + this.dragOffset = 0; + } + } else { + this.isDragging = false; + this.dragOffset = 0; + } + }; + + document.addEventListener('pointermove', onPointerMove); + document.addEventListener('pointerup', onPointerUp); + }; + + @provide(DrawerContext) + get context(): DrawerContextValue { + return { + open: this.open, + isRendered: this.isRendered, + direction: this.direction, + isDragging: this.isDragging, + dragOffset: this.dragOffset, + closingFromDrag: this.closingFromDrag, + setOpen: this.setOpen, + finishClose: this.finishClose, + onDragStart: this.onDragStart, + }; + } + + +} + +interface DrawerTriggerSignature { + Element: HTMLButtonElement; + Args: { + class?: string; + asChild?: boolean; + }; + Blocks: { + default: []; + }; +} + +class DrawerTrigger extends Component { + @consume(DrawerContext) context!: ContextRegistry[typeof DrawerContext]; + + handleClick = () => { + this.context.setOpen(true); + }; + + +} + +interface DrawerCloseSignature { + Element: HTMLButtonElement; + Args: { + class?: string; + asChild?: boolean; + }; + Blocks: { + default: []; + }; +} + +class DrawerClose extends Component { + @consume(DrawerContext) context!: ContextRegistry[typeof DrawerContext]; + + handleClick = () => { + this.context.setOpen(false); + }; + + +} + +interface DrawerPortalSignature { + Blocks: { + default: []; + }; +} + +const DrawerPortal: TOC = ; + +interface DrawerOverlaySignature { + Element: HTMLDivElement; + Args: { + class?: string; + }; + Blocks: { + default: []; + }; +} + +class DrawerOverlay extends Component { + @consume(DrawerContext) context!: ContextRegistry[typeof DrawerContext]; + + handleClick = () => { + this.context.setOpen(false); + }; + + handleAnimationEnd = (event: AnimationEvent) => { + if (event.target === event.currentTarget && !this.context.open) { + this.context.finishClose(); + } + }; + + get overlayStyle() { + if (this.context.closingFromDrag) { + return 'opacity: 0; transition: opacity 200ms ease-out; animation: none;'; + } + if (this.context.isDragging) { + const contentEl = document.querySelector( + '[data-slot="drawer-content"]', + ); + if (contentEl) { + const isVertical = + this.context.direction === 'bottom' || + this.context.direction === 'top'; + const size = isVertical + ? contentEl.offsetHeight + : contentEl.offsetWidth; + const progress = Math.min(this.context.dragOffset / size, 1); + const opacity = 1 - progress; + return `opacity: ${opacity}; transition: none;`; + } + } + return undefined; + } + + +} + +interface DrawerContentSignature { + Element: HTMLDivElement; + Args: { + class?: string; + }; + Blocks: { + default: []; + }; +} + +class DrawerContent extends Component { + @consume(DrawerContext) context!: ContextRegistry[typeof DrawerContext]; + + get destinationElement() { + return document.body; + } + + get classes() { + return cn( + 'group/drawer-content data-[state=open]:animate-in data-[state=closed]:animate-out fixed z-50 flex h-auto flex-col bg-popover text-sm text-popover-foreground data-[vaul-drawer-direction=bottom]:inset-x-0 data-[vaul-drawer-direction=bottom]:bottom-0 data-[vaul-drawer-direction=bottom]:mt-24 data-[vaul-drawer-direction=bottom]:max-h-[80vh] data-[vaul-drawer-direction=bottom]:rounded-t-xl data-[vaul-drawer-direction=bottom]:border-t data-[vaul-drawer-direction=left]:inset-y-0 data-[vaul-drawer-direction=left]:left-0 data-[vaul-drawer-direction=left]:w-3/4 data-[vaul-drawer-direction=left]:rounded-r-xl data-[vaul-drawer-direction=left]:border-r data-[vaul-drawer-direction=right]:inset-y-0 data-[vaul-drawer-direction=right]:right-0 data-[vaul-drawer-direction=right]:w-3/4 data-[vaul-drawer-direction=right]:rounded-l-xl data-[vaul-drawer-direction=right]:border-l data-[vaul-drawer-direction=top]:inset-x-0 data-[vaul-drawer-direction=top]:top-0 data-[vaul-drawer-direction=top]:mb-24 data-[vaul-drawer-direction=top]:max-h-[80vh] data-[vaul-drawer-direction=top]:rounded-b-xl data-[vaul-drawer-direction=top]:border-b data-[vaul-drawer-direction=left]:sm:max-w-sm data-[vaul-drawer-direction=right]:sm:max-w-sm data-[vaul-drawer-direction=bottom]:data-[state=closed]:slide-out-to-bottom data-[vaul-drawer-direction=bottom]:data-[state=open]:slide-in-from-bottom data-[vaul-drawer-direction=top]:data-[state=closed]:slide-out-to-top data-[vaul-drawer-direction=top]:data-[state=open]:slide-in-from-top data-[vaul-drawer-direction=left]:data-[state=closed]:slide-out-to-left data-[vaul-drawer-direction=left]:data-[state=open]:slide-in-from-left data-[vaul-drawer-direction=right]:data-[state=closed]:slide-out-to-right data-[vaul-drawer-direction=right]:data-[state=open]:slide-in-from-right', + this.args.class, + ); + } + + get contentStyle() { + const offset = this.context.dragOffset; + if (offset <= 0 && !this.context.closingFromDrag) { + return undefined; + } + + let transform: string; + switch (this.context.direction) { + case 'bottom': + transform = `translateY(${offset}px)`; + break; + case 'top': + transform = `translateY(-${offset}px)`; + break; + case 'right': + transform = `translateX(${offset}px)`; + break; + case 'left': + transform = `translateX(-${offset}px)`; + break; + } + + if (this.context.closingFromDrag) { + return `transform: ${transform}; transition: transform 200ms ease-out; animation: none;`; + } + + return `transform: ${transform}; transition: none; animation: none;`; + } + + handlePointerDown = (event: PointerEvent) => { + this.context.onDragStart(event); + }; + + scrollLock = modifier( + (_element, _positional, { enabled = true }: { enabled?: boolean } = {}) => { + if (!enabled) { + return; + } + + document.body.classList.add('overflow-hidden'); + + return () => { + document.body.classList.remove('overflow-hidden'); + }; + } + ); + + handleAnimationEnd = (event: AnimationEvent) => { + if (event.target === event.currentTarget && !this.context.open) { + this.context.finishClose(); + } + }; + + handleTransitionEnd = (event: TransitionEvent) => { + if ( + event.target === event.currentTarget && + this.context.closingFromDrag + ) { + this.context.finishClose(); + } + }; + + handleKeyDown = (event: KeyboardEvent) => { + if (event.key === 'Escape') { + this.context.setOpen(false); + } + }; + + +} + +interface DrawerHeaderSignature { + Element: HTMLDivElement; + Args: { + class?: string; + }; + Blocks: { + default: []; + }; +} + +const DrawerHeader: TOC = ; + +interface DrawerFooterSignature { + Element: HTMLDivElement; + Args: { + class?: string; + }; + Blocks: { + default: []; + }; +} + +const DrawerFooter: TOC = ; + +interface DrawerTitleSignature { + Element: HTMLHeadingElement; + Args: { + class?: string; + }; + Blocks: { + default: []; + }; +} + +const DrawerTitle: TOC = ; + +interface DrawerDescriptionSignature { + Element: HTMLParagraphElement; + Args: { + class?: string; + }; + Blocks: { + default: []; + }; +} + +const DrawerDescription: TOC = ; + +export { + Drawer, + DrawerPortal, + DrawerOverlay, + DrawerTrigger, + DrawerClose, + DrawerContent, + DrawerHeader, + DrawerFooter, + DrawerTitle, + DrawerDescription, +}; diff --git a/apps/v4/registry/registry-blocks.ts b/apps/v4/registry/registry-blocks.ts index 74e9eeb..2450a92 100644 --- a/apps/v4/registry/registry-blocks.ts +++ b/apps/v4/registry/registry-blocks.ts @@ -1,3 +1,3 @@ -import type { Registry } from '../../../packages/cli/src/registry/schema'; +import type { Registry } from "../../../packages/cli/src/registry/schema" -export const blocks: Registry['items'] = []; +export const blocks: Registry["items"] = [] diff --git a/apps/v4/registry/registry-charts.ts b/apps/v4/registry/registry-charts.ts index eb271fa..25d21e4 100644 --- a/apps/v4/registry/registry-charts.ts +++ b/apps/v4/registry/registry-charts.ts @@ -1,3 +1,3 @@ -import type { Registry } from '../../../packages/cli/src/registry/schema'; +import type { Registry } from "../../../packages/cli/src/registry/schema" -export const charts: Registry['items'] = []; +export const charts: Registry["items"] = [] diff --git a/apps/v4/registry/registry-ui.ts b/apps/v4/registry/registry-ui.ts index 103d023..1a34ba8 100644 --- a/apps/v4/registry/registry-ui.ts +++ b/apps/v4/registry/registry-ui.ts @@ -1,551 +1,611 @@ -import type { Registry } from '../../../packages/cli/src/registry/schema'; +import type { Registry } from "../../../packages/cli/src/registry/schema" -export const ui: Registry['items'] = [ +export const ui: Registry["items"] = [ { - name: 'accordion', - type: 'registry:ui', - files: [ + "name": "accordion", + "type": "registry:ui", + "files": [ { - path: 'ui/accordion.gts', - type: 'registry:ui', - }, + "path": "ui/accordion.gts", + "type": "registry:ui" + } ], - dependencies: ['ember-modifier', 'ember-provide-consume-context'], + "dependencies": [ + "ember-modifier", + "ember-provide-consume-context" + ] }, { - name: 'alert-dialog', - type: 'registry:ui', - files: [ + "name": "alert-dialog", + "type": "registry:ui", + "files": [ { - path: 'ui/alert-dialog.gts', - type: 'registry:ui', - }, + "path": "ui/alert-dialog.gts", + "type": "registry:ui" + } ], - dependencies: ['ember-modifier', 'ember-provide-consume-context'], + "dependencies": [ + "ember-modifier", + "ember-provide-consume-context" + ] }, { - name: 'alert', - type: 'registry:ui', - files: [ + "name": "alert", + "type": "registry:ui", + "files": [ { - path: 'ui/alert.gts', - type: 'registry:ui', - }, - ], + "path": "ui/alert.gts", + "type": "registry:ui" + } + ] }, { - name: 'aspect-ratio', - type: 'registry:ui', - files: [ + "name": "aspect-ratio", + "type": "registry:ui", + "files": [ { - path: 'ui/aspect-ratio.gts', - type: 'registry:ui', - }, - ], + "path": "ui/aspect-ratio.gts", + "type": "registry:ui" + } + ] }, { - name: 'avatar', - type: 'registry:ui', - files: [ + "name": "avatar", + "type": "registry:ui", + "files": [ { - path: 'ui/avatar.gts', - type: 'registry:ui', - }, + "path": "ui/avatar.gts", + "type": "registry:ui" + } ], - dependencies: ['ember-truth-helpers'], + "dependencies": [ + "ember-truth-helpers" + ] }, { - name: 'badge', - type: 'registry:ui', - files: [ + "name": "badge", + "type": "registry:ui", + "files": [ { - path: 'ui/badge.gts', - type: 'registry:ui', - }, - ], + "path": "ui/badge.gts", + "type": "registry:ui" + } + ] }, { - name: 'breadcrumb', - type: 'registry:ui', - files: [ + "name": "breadcrumb", + "type": "registry:ui", + "files": [ { - path: 'ui/breadcrumb.gts', - type: 'registry:ui', - }, - ], + "path": "ui/breadcrumb.gts", + "type": "registry:ui" + } + ] }, { - name: 'button-group', - type: 'registry:ui', - files: [ + "name": "button-group", + "type": "registry:ui", + "files": [ { - path: 'ui/button-group.gts', - type: 'registry:ui', - }, + "path": "ui/button-group.gts", + "type": "registry:ui" + } ], - registryDependencies: ['separator'], + "registryDependencies": [ + "separator" + ] }, { - name: 'button', - type: 'registry:ui', - files: [ + "name": "button", + "type": "registry:ui", + "files": [ { - path: 'ui/button.gts', - type: 'registry:ui', - }, - ], + "path": "ui/button.gts", + "type": "registry:ui" + } + ] }, { - name: 'calendar', - type: 'registry:ui', - files: [ + "name": "calendar", + "type": "registry:ui", + "files": [ { - path: 'ui/calendar.gts', - type: 'registry:ui', - }, + "path": "ui/calendar.gts", + "type": "registry:ui" + } ], - registryDependencies: ['button'], + "registryDependencies": [ + "button" + ] }, { - name: 'card', - type: 'registry:ui', - files: [ + "name": "card", + "type": "registry:ui", + "files": [ { - path: 'ui/card.gts', - type: 'registry:ui', - }, - ], + "path": "ui/card.gts", + "type": "registry:ui" + } + ] }, { - name: 'checkbox', - type: 'registry:ui', - files: [ + "name": "checkbox", + "type": "registry:ui", + "files": [ { - path: 'ui/checkbox.gts', - type: 'registry:ui', - }, - ], + "path": "ui/checkbox.gts", + "type": "registry:ui" + } + ] }, { - name: 'collapsible', - type: 'registry:ui', - files: [ + "name": "collapsible", + "type": "registry:ui", + "files": [ { - path: 'ui/collapsible.gts', - type: 'registry:ui', - }, + "path": "ui/collapsible.gts", + "type": "registry:ui" + } ], - dependencies: ['ember-provide-consume-context'], + "dependencies": [ + "ember-provide-consume-context" + ] }, { - name: 'command', - type: 'registry:ui', - files: [ + "name": "command", + "type": "registry:ui", + "files": [ { - path: 'ui/command.gts', - type: 'registry:ui', - }, + "path": "ui/command.gts", + "type": "registry:ui" + } ], - registryDependencies: ['dialog'], - dependencies: [ - 'ember-modifier', - 'ember-provide-consume-context', - 'tracked-built-ins', + "registryDependencies": [ + "dialog" ], + "dependencies": [ + "ember-modifier", + "ember-provide-consume-context", + "tracked-built-ins" + ] }, { - name: 'context-menu', - type: 'registry:ui', - files: [ + "name": "context-menu", + "type": "registry:ui", + "files": [ { - path: 'ui/context-menu.gts', - type: 'registry:ui', - }, - ], - dependencies: [ - '@floating-ui/dom', - 'ember-click-outside', - 'ember-modifier', - 'ember-provide-consume-context', + "path": "ui/context-menu.gts", + "type": "registry:ui" + } ], + "dependencies": [ + "@floating-ui/dom", + "ember-click-outside", + "ember-modifier", + "ember-provide-consume-context" + ] }, { - name: 'dialog', - type: 'registry:ui', - files: [ + "name": "dialog", + "type": "registry:ui", + "files": [ { - path: 'ui/dialog.gts', - type: 'registry:ui', - }, + "path": "ui/dialog.gts", + "type": "registry:ui" + } ], - dependencies: ['ember-modifier', 'ember-provide-consume-context'], + "dependencies": [ + "ember-modifier", + "ember-provide-consume-context" + ] }, { - name: 'dropdown-menu', - type: 'registry:ui', - files: [ + "name": "drawer", + "type": "registry:ui", + "files": [ { - path: 'ui/dropdown-menu.gts', - type: 'registry:ui', - }, - ], - dependencies: [ - '@floating-ui/dom', - 'ember-click-outside', - 'ember-modifier', - 'ember-provide-consume-context', + "path": "ui/drawer.gts", + "type": "registry:ui" + } ], + "dependencies": [ + "ember-modifier", + "ember-provide-consume-context" + ] }, { - name: 'empty', - type: 'registry:ui', - files: [ + "name": "dropdown-menu", + "type": "registry:ui", + "files": [ { - path: 'ui/empty.gts', - type: 'registry:ui', - }, + "path": "ui/dropdown-menu.gts", + "type": "registry:ui" + } ], - dependencies: ['class-variance-authority'], + "dependencies": [ + "@floating-ui/dom", + "ember-click-outside", + "ember-modifier", + "ember-provide-consume-context" + ] }, { - name: 'field', - type: 'registry:ui', - files: [ + "name": "empty", + "type": "registry:ui", + "files": [ { - path: 'ui/field.gts', - type: 'registry:ui', - }, + "path": "ui/empty.gts", + "type": "registry:ui" + } ], - registryDependencies: ['label', 'separator'], + "dependencies": [ + "class-variance-authority" + ] }, { - name: 'hover-card', - type: 'registry:ui', - files: [ + "name": "field", + "type": "registry:ui", + "files": [ { - path: 'ui/hover-card.gts', - type: 'registry:ui', - }, - ], - dependencies: [ - '@floating-ui/dom', - 'ember-modifier', - 'ember-provide-consume-context', + "path": "ui/field.gts", + "type": "registry:ui" + } ], + "registryDependencies": [ + "label", + "separator" + ] }, { - name: 'input-group', - type: 'registry:ui', - files: [ + "name": "hover-card", + "type": "registry:ui", + "files": [ { - path: 'ui/input-group.gts', - type: 'registry:ui', - }, + "path": "ui/hover-card.gts", + "type": "registry:ui" + } ], - registryDependencies: ['button', 'input', 'textarea'], + "dependencies": [ + "@floating-ui/dom", + "ember-modifier", + "ember-provide-consume-context" + ] }, { - name: 'input-otp', - type: 'registry:ui', - files: [ + "name": "input-group", + "type": "registry:ui", + "files": [ { - path: 'ui/input-otp.gts', - type: 'registry:ui', - }, + "path": "ui/input-group.gts", + "type": "registry:ui" + } ], - dependencies: ['ember-modifier', 'ember-provide-consume-context'], + "registryDependencies": [ + "button", + "input", + "textarea" + ] }, { - name: 'input', - type: 'registry:ui', - files: [ + "name": "input-otp", + "type": "registry:ui", + "files": [ { - path: 'ui/input.gts', - type: 'registry:ui', - }, + "path": "ui/input-otp.gts", + "type": "registry:ui" + } ], + "dependencies": [ + "ember-modifier", + "ember-provide-consume-context" + ] }, { - name: 'item', - type: 'registry:ui', - files: [ + "name": "input", + "type": "registry:ui", + "files": [ { - path: 'ui/item.gts', - type: 'registry:ui', - }, - ], - registryDependencies: ['separator'], + "path": "ui/input.gts", + "type": "registry:ui" + } + ] }, { - name: 'kbd', - type: 'registry:ui', - files: [ + "name": "item", + "type": "registry:ui", + "files": [ { - path: 'ui/kbd.gts', - type: 'registry:ui', - }, + "path": "ui/item.gts", + "type": "registry:ui" + } ], + "registryDependencies": [ + "separator" + ] }, { - name: 'label', - type: 'registry:ui', - files: [ + "name": "kbd", + "type": "registry:ui", + "files": [ { - path: 'ui/label.gts', - type: 'registry:ui', - }, - ], + "path": "ui/kbd.gts", + "type": "registry:ui" + } + ] }, { - name: 'native-select', - type: 'registry:ui', - files: [ + "name": "label", + "type": "registry:ui", + "files": [ { - path: 'ui/native-select.gts', - type: 'registry:ui', - }, - ], + "path": "ui/label.gts", + "type": "registry:ui" + } + ] }, { - name: 'pagination', - type: 'registry:ui', - files: [ + "name": "native-select", + "type": "registry:ui", + "files": [ { - path: 'ui/pagination.gts', - type: 'registry:ui', - }, - ], + "path": "ui/native-select.gts", + "type": "registry:ui" + } + ] }, { - name: 'popover', - type: 'registry:ui', - files: [ + "name": "pagination", + "type": "registry:ui", + "files": [ { - path: 'ui/popover.gts', - type: 'registry:ui', - }, - ], - dependencies: [ - '@floating-ui/dom', - 'ember-click-outside', - 'ember-modifier', - 'ember-provide-consume-context', - ], + "path": "ui/pagination.gts", + "type": "registry:ui" + } + ] }, { - name: 'progress', - type: 'registry:ui', - files: [ + "name": "popover", + "type": "registry:ui", + "files": [ { - path: 'ui/progress.gts', - type: 'registry:ui', - }, + "path": "ui/popover.gts", + "type": "registry:ui" + } ], + "dependencies": [ + "@floating-ui/dom", + "ember-click-outside", + "ember-modifier", + "ember-provide-consume-context" + ] }, { - name: 'radio-group', - type: 'registry:ui', - files: [ + "name": "progress", + "type": "registry:ui", + "files": [ { - path: 'ui/radio-group.gts', - type: 'registry:ui', - }, - ], - dependencies: ['ember-provide-consume-context'], + "path": "ui/progress.gts", + "type": "registry:ui" + } + ] }, { - name: 'scroll-area', - type: 'registry:ui', - files: [ + "name": "radio-group", + "type": "registry:ui", + "files": [ { - path: 'ui/scroll-area.gts', - type: 'registry:ui', - }, + "path": "ui/radio-group.gts", + "type": "registry:ui" + } ], + "dependencies": [ + "ember-provide-consume-context" + ] }, { - name: 'select', - type: 'registry:ui', - files: [ + "name": "scroll-area", + "type": "registry:ui", + "files": [ { - path: 'ui/select.gts', - type: 'registry:ui', - }, - ], - dependencies: [ - '@floating-ui/dom', - 'ember-click-outside', - 'ember-modifier', - 'ember-provide-consume-context', - ], + "path": "ui/scroll-area.gts", + "type": "registry:ui" + } + ] }, { - name: 'separator', - type: 'registry:ui', - files: [ + "name": "select", + "type": "registry:ui", + "files": [ { - path: 'ui/separator.gts', - type: 'registry:ui', - }, + "path": "ui/select.gts", + "type": "registry:ui" + } ], + "dependencies": [ + "@floating-ui/dom", + "ember-click-outside", + "ember-modifier", + "ember-provide-consume-context" + ] }, { - name: 'sheet', - type: 'registry:ui', - files: [ + "name": "separator", + "type": "registry:ui", + "files": [ { - path: 'ui/sheet.gts', - type: 'registry:ui', - }, - ], - dependencies: ['ember-modifier', 'ember-provide-consume-context'], + "path": "ui/separator.gts", + "type": "registry:ui" + } + ] }, { - name: 'sidebar', - type: 'registry:ui', - files: [ + "name": "sheet", + "type": "registry:ui", + "files": [ { - path: 'ui/sidebar.gts', - type: 'registry:ui', - }, + "path": "ui/sheet.gts", + "type": "registry:ui" + } ], - registryDependencies: [ - 'button', - 'input', - 'separator', - 'sheet', - 'skeleton', - 'tooltip', + "dependencies": [ + "ember-modifier", + "ember-provide-consume-context" + ] + }, + { + "name": "sidebar", + "type": "registry:ui", + "files": [ + { + "path": "ui/sidebar.gts", + "type": "registry:ui" + } ], - dependencies: [ - 'ember-modifier', - 'ember-provide-consume-context', - 'ember-truth-helpers', + "registryDependencies": [ + "button", + "input", + "separator", + "sheet", + "skeleton", + "tooltip" ], + "dependencies": [ + "ember-modifier", + "ember-provide-consume-context", + "ember-truth-helpers" + ] }, { - name: 'skeleton', - type: 'registry:ui', - files: [ + "name": "skeleton", + "type": "registry:ui", + "files": [ { - path: 'ui/skeleton.gts', - type: 'registry:ui', - }, - ], + "path": "ui/skeleton.gts", + "type": "registry:ui" + } + ] }, { - name: 'slider', - type: 'registry:ui', - files: [ + "name": "slider", + "type": "registry:ui", + "files": [ { - path: 'ui/slider.gts', - type: 'registry:ui', - }, - ], + "path": "ui/slider.gts", + "type": "registry:ui" + } + ] }, { - name: 'sonner', - type: 'registry:ui', - files: [ + "name": "sonner", + "type": "registry:ui", + "files": [ { - path: 'ui/sonner.gts', - type: 'registry:ui', - }, + "path": "ui/sonner.gts", + "type": "registry:ui" + } ], - registryDependencies: ['toast'], - dependencies: [ - 'ember-click-outside', - 'ember-modifier', - 'ember-truth-helpers', - 'ember-cli-flash', + "registryDependencies": [ + "toast" ], + "dependencies": [ + "ember-click-outside", + "ember-modifier", + "ember-truth-helpers", + "ember-cli-flash" + ] }, { - name: 'spinner', - type: 'registry:ui', - files: [ + "name": "spinner", + "type": "registry:ui", + "files": [ { - path: 'ui/spinner.gts', - type: 'registry:ui', - }, - ], + "path": "ui/spinner.gts", + "type": "registry:ui" + } + ] }, { - name: 'switch', - type: 'registry:ui', - files: [ + "name": "switch", + "type": "registry:ui", + "files": [ { - path: 'ui/switch.gts', - type: 'registry:ui', - }, - ], + "path": "ui/switch.gts", + "type": "registry:ui" + } + ] }, { - name: 'table', - type: 'registry:ui', - files: [ + "name": "table", + "type": "registry:ui", + "files": [ { - path: 'ui/table.gts', - type: 'registry:ui', - }, - ], + "path": "ui/table.gts", + "type": "registry:ui" + } + ] }, { - name: 'tabs', - type: 'registry:ui', - files: [ + "name": "tabs", + "type": "registry:ui", + "files": [ { - path: 'ui/tabs.gts', - type: 'registry:ui', - }, + "path": "ui/tabs.gts", + "type": "registry:ui" + } ], - dependencies: ['ember-provide-consume-context'], + "dependencies": [ + "ember-provide-consume-context" + ] }, { - name: 'textarea', - type: 'registry:ui', - files: [ + "name": "textarea", + "type": "registry:ui", + "files": [ { - path: 'ui/textarea.gts', - type: 'registry:ui', - }, - ], + "path": "ui/textarea.gts", + "type": "registry:ui" + } + ] }, { - name: 'toggle-group', - type: 'registry:ui', - files: [ + "name": "toggle-group", + "type": "registry:ui", + "files": [ { - path: 'ui/toggle-group.gts', - type: 'registry:ui', - }, + "path": "ui/toggle-group.gts", + "type": "registry:ui" + } ], - registryDependencies: ['toggle'], - dependencies: ['ember-provide-consume-context'], + "registryDependencies": [ + "toggle" + ], + "dependencies": [ + "ember-provide-consume-context" + ] }, { - name: 'toggle', - type: 'registry:ui', - files: [ + "name": "toggle", + "type": "registry:ui", + "files": [ { - path: 'ui/toggle.gts', - type: 'registry:ui', - }, - ], + "path": "ui/toggle.gts", + "type": "registry:ui" + } + ] }, { - name: 'tooltip', - type: 'registry:ui', - files: [ + "name": "tooltip", + "type": "registry:ui", + "files": [ { - path: 'ui/tooltip.gts', - type: 'registry:ui', - }, + "path": "ui/tooltip.gts", + "type": "registry:ui" + } ], - dependencies: [ - '@floating-ui/dom', - 'ember-modifier', - 'ember-provide-consume-context', - ], - }, -]; + "dependencies": [ + "@floating-ui/dom", + "ember-modifier", + "ember-provide-consume-context" + ] + } +] From cac40b179977acebd2b00c109b671666cabe68b9 Mon Sep 17 00:00:00 2001 From: Ignace Maes <10243652+IgnaceMaes@users.noreply.github.com> Date: Mon, 25 May 2026 21:08:05 +0200 Subject: [PATCH 2/2] fix: lint --- .../docs/examples/drawer-dialog.gts | 3 +- apps/v4/public/r/index.json | 91 +- .../r/styles/new-york-v4/accordion.json | 7 +- .../r/styles/new-york-v4/alert-dialog.json | 7 +- .../v4/public/r/styles/new-york-v4/alert.json | 2 +- .../r/styles/new-york-v4/aspect-ratio.json | 2 +- .../public/r/styles/new-york-v4/avatar.json | 6 +- .../v4/public/r/styles/new-york-v4/badge.json | 2 +- .../r/styles/new-york-v4/breadcrumb.json | 2 +- .../r/styles/new-york-v4/button-group.json | 6 +- .../public/r/styles/new-york-v4/button.json | 2 +- .../public/r/styles/new-york-v4/calendar.json | 6 +- apps/v4/public/r/styles/new-york-v4/card.json | 2 +- .../public/r/styles/new-york-v4/checkbox.json | 2 +- .../r/styles/new-york-v4/collapsible.json | 6 +- .../public/r/styles/new-york-v4/command.json | 6 +- .../r/styles/new-york-v4/context-menu.json | 2 +- .../public/r/styles/new-york-v4/dialog.json | 7 +- .../public/r/styles/new-york-v4/drawer.json | 9 +- .../r/styles/new-york-v4/dropdown-menu.json | 2 +- .../v4/public/r/styles/new-york-v4/empty.json | 6 +- .../v4/public/r/styles/new-york-v4/field.json | 7 +- .../r/styles/new-york-v4/hover-card.json | 2 +- .../v4/public/r/styles/new-york-v4/index.json | 15 +- .../r/styles/new-york-v4/input-group.json | 8 +- .../r/styles/new-york-v4/input-otp.json | 7 +- .../v4/public/r/styles/new-york-v4/input.json | 2 +- apps/v4/public/r/styles/new-york-v4/item.json | 6 +- apps/v4/public/r/styles/new-york-v4/kbd.json | 2 +- .../v4/public/r/styles/new-york-v4/label.json | 2 +- .../r/styles/new-york-v4/native-select.json | 2 +- .../r/styles/new-york-v4/pagination.json | 2 +- .../public/r/styles/new-york-v4/popover.json | 2 +- .../public/r/styles/new-york-v4/progress.json | 2 +- .../r/styles/new-york-v4/radio-group.json | 6 +- .../public/r/styles/new-york-v4/registry.json | 126 +- .../r/styles/new-york-v4/scroll-area.json | 2 +- .../public/r/styles/new-york-v4/select.json | 2 +- .../r/styles/new-york-v4/separator.json | 2 +- .../v4/public/r/styles/new-york-v4/sheet.json | 7 +- .../public/r/styles/new-york-v4/sidebar.json | 2 +- .../public/r/styles/new-york-v4/skeleton.json | 2 +- .../public/r/styles/new-york-v4/slider.json | 2 +- .../public/r/styles/new-york-v4/sonner.json | 6 +- .../public/r/styles/new-york-v4/spinner.json | 2 +- .../v4/public/r/styles/new-york-v4/style.json | 15 +- .../public/r/styles/new-york-v4/switch.json | 2 +- .../v4/public/r/styles/new-york-v4/table.json | 2 +- apps/v4/public/r/styles/new-york-v4/tabs.json | 6 +- .../public/r/styles/new-york-v4/textarea.json | 2 +- .../r/styles/new-york-v4/theme-gray.json | 2 +- .../r/styles/new-york-v4/theme-neutral.json | 2 +- .../r/styles/new-york-v4/theme-slate.json | 2 +- .../r/styles/new-york-v4/theme-stone.json | 2 +- .../r/styles/new-york-v4/theme-zinc.json | 2 +- .../v4/public/r/styles/new-york-v4/toast.json | 6 +- .../r/styles/new-york-v4/toggle-group.json | 10 +- .../public/r/styles/new-york-v4/toggle.json | 2 +- .../public/r/styles/new-york-v4/tooltip.json | 2 +- .../v4/public/r/styles/new-york-v4/utils.json | 7 +- apps/v4/registry/__blocks__.json | 2 +- apps/v4/registry/__index__.ts | 1119 +++++++++-------- apps/v4/registry/new-york-v4/ui/drawer.gts | 15 +- apps/v4/registry/registry-blocks.ts | 4 +- apps/v4/registry/registry-charts.ts | 4 +- apps/v4/registry/registry-ui.ts | 827 ++++++------ 66 files changed, 1151 insertions(+), 1280 deletions(-) diff --git a/apps/v4/app/components/docs/examples/drawer-dialog.gts b/apps/v4/app/components/docs/examples/drawer-dialog.gts index 58c3cab..59dac15 100644 --- a/apps/v4/app/components/docs/examples/drawer-dialog.gts +++ b/apps/v4/app/components/docs/examples/drawer-dialog.gts @@ -25,12 +25,13 @@ import { Label } from '@/components/ui/label'; import { cn } from '@/lib/utils'; import type { TOC } from '@ember/component/template-only'; +import type Owner from '@ember/owner'; export default class DrawerDialogDemo extends Component { @tracked open = false; @tracked isDesktop = window.matchMedia('(min-width: 768px)').matches; - constructor(owner: unknown, args: Record) { + constructor(owner: Owner, args: Record) { super(owner, args); this.mediaQuery = window.matchMedia('(min-width: 768px)'); this.handleMediaChange(this.mediaQuery); diff --git a/apps/v4/public/r/index.json b/apps/v4/public/r/index.json index 12d62aa..5e0be86 100644 --- a/apps/v4/public/r/index.json +++ b/apps/v4/public/r/index.json @@ -8,10 +8,7 @@ "type": "registry:ui" } ], - "dependencies": [ - "ember-modifier", - "ember-provide-consume-context" - ] + "dependencies": ["ember-modifier", "ember-provide-consume-context"] }, { "name": "alert-dialog", @@ -22,10 +19,7 @@ "type": "registry:ui" } ], - "dependencies": [ - "ember-modifier", - "ember-provide-consume-context" - ] + "dependencies": ["ember-modifier", "ember-provide-consume-context"] }, { "name": "alert", @@ -56,9 +50,7 @@ "type": "registry:ui" } ], - "dependencies": [ - "ember-truth-helpers" - ] + "dependencies": ["ember-truth-helpers"] }, { "name": "badge", @@ -89,9 +81,7 @@ "type": "registry:ui" } ], - "registryDependencies": [ - "separator" - ] + "registryDependencies": ["separator"] }, { "name": "button", @@ -112,9 +102,7 @@ "type": "registry:ui" } ], - "registryDependencies": [ - "button" - ] + "registryDependencies": ["button"] }, { "name": "card", @@ -145,9 +133,7 @@ "type": "registry:ui" } ], - "dependencies": [ - "ember-provide-consume-context" - ] + "dependencies": ["ember-provide-consume-context"] }, { "name": "command", @@ -158,9 +144,7 @@ "type": "registry:ui" } ], - "registryDependencies": [ - "dialog" - ], + "registryDependencies": ["dialog"], "dependencies": [ "ember-modifier", "ember-provide-consume-context", @@ -192,10 +176,7 @@ "type": "registry:ui" } ], - "dependencies": [ - "ember-modifier", - "ember-provide-consume-context" - ] + "dependencies": ["ember-modifier", "ember-provide-consume-context"] }, { "name": "drawer", @@ -206,10 +187,7 @@ "type": "registry:ui" } ], - "dependencies": [ - "ember-modifier", - "ember-provide-consume-context" - ] + "dependencies": ["ember-modifier", "ember-provide-consume-context"] }, { "name": "dropdown-menu", @@ -236,9 +214,7 @@ "type": "registry:ui" } ], - "dependencies": [ - "class-variance-authority" - ] + "dependencies": ["class-variance-authority"] }, { "name": "field", @@ -249,10 +225,7 @@ "type": "registry:ui" } ], - "registryDependencies": [ - "label", - "separator" - ] + "registryDependencies": ["label", "separator"] }, { "name": "hover-card", @@ -278,11 +251,7 @@ "type": "registry:ui" } ], - "registryDependencies": [ - "button", - "input", - "textarea" - ] + "registryDependencies": ["button", "input", "textarea"] }, { "name": "input-otp", @@ -293,10 +262,7 @@ "type": "registry:ui" } ], - "dependencies": [ - "ember-modifier", - "ember-provide-consume-context" - ] + "dependencies": ["ember-modifier", "ember-provide-consume-context"] }, { "name": "input", @@ -317,9 +283,7 @@ "type": "registry:ui" } ], - "registryDependencies": [ - "separator" - ] + "registryDependencies": ["separator"] }, { "name": "kbd", @@ -396,9 +360,7 @@ "type": "registry:ui" } ], - "dependencies": [ - "ember-provide-consume-context" - ] + "dependencies": ["ember-provide-consume-context"] }, { "name": "scroll-area", @@ -445,10 +407,7 @@ "type": "registry:ui" } ], - "dependencies": [ - "ember-modifier", - "ember-provide-consume-context" - ] + "dependencies": ["ember-modifier", "ember-provide-consume-context"] }, { "name": "sidebar", @@ -502,9 +461,7 @@ "type": "registry:ui" } ], - "registryDependencies": [ - "toast" - ], + "registryDependencies": ["toast"], "dependencies": [ "ember-click-outside", "ember-modifier", @@ -551,9 +508,7 @@ "type": "registry:ui" } ], - "dependencies": [ - "ember-provide-consume-context" - ] + "dependencies": ["ember-provide-consume-context"] }, { "name": "textarea", @@ -574,12 +529,8 @@ "type": "registry:ui" } ], - "registryDependencies": [ - "toggle" - ], - "dependencies": [ - "ember-provide-consume-context" - ] + "registryDependencies": ["toggle"], + "dependencies": ["ember-provide-consume-context"] }, { "name": "toggle", @@ -606,4 +557,4 @@ "ember-provide-consume-context" ] } -] \ No newline at end of file +] diff --git a/apps/v4/public/r/styles/new-york-v4/accordion.json b/apps/v4/public/r/styles/new-york-v4/accordion.json index 0095243..59a4a5b 100644 --- a/apps/v4/public/r/styles/new-york-v4/accordion.json +++ b/apps/v4/public/r/styles/new-york-v4/accordion.json @@ -2,10 +2,7 @@ "$schema": "https://shadcn-ember.com/schema/registry-item.json", "name": "accordion", "type": "registry:ui", - "dependencies": [ - "ember-modifier", - "ember-provide-consume-context" - ], + "dependencies": ["ember-modifier", "ember-provide-consume-context"], "files": [ { "path": "registry/new-york-v4/ui/accordion.gts", @@ -13,4 +10,4 @@ "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/apps/v4/public/r/styles/new-york-v4/alert-dialog.json b/apps/v4/public/r/styles/new-york-v4/alert-dialog.json index 874f30f..a4db456 100644 --- a/apps/v4/public/r/styles/new-york-v4/alert-dialog.json +++ b/apps/v4/public/r/styles/new-york-v4/alert-dialog.json @@ -2,10 +2,7 @@ "$schema": "https://shadcn-ember.com/schema/registry-item.json", "name": "alert-dialog", "type": "registry:ui", - "dependencies": [ - "ember-modifier", - "ember-provide-consume-context" - ], + "dependencies": ["ember-modifier", "ember-provide-consume-context"], "files": [ { "path": "registry/new-york-v4/ui/alert-dialog.gts", @@ -13,4 +10,4 @@ "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/apps/v4/public/r/styles/new-york-v4/alert.json b/apps/v4/public/r/styles/new-york-v4/alert.json index a624fa1..3c2fd6c 100644 --- a/apps/v4/public/r/styles/new-york-v4/alert.json +++ b/apps/v4/public/r/styles/new-york-v4/alert.json @@ -9,4 +9,4 @@ "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/apps/v4/public/r/styles/new-york-v4/aspect-ratio.json b/apps/v4/public/r/styles/new-york-v4/aspect-ratio.json index 122319e..aa117eb 100644 --- a/apps/v4/public/r/styles/new-york-v4/aspect-ratio.json +++ b/apps/v4/public/r/styles/new-york-v4/aspect-ratio.json @@ -9,4 +9,4 @@ "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/apps/v4/public/r/styles/new-york-v4/avatar.json b/apps/v4/public/r/styles/new-york-v4/avatar.json index 9810bd8..b7de655 100644 --- a/apps/v4/public/r/styles/new-york-v4/avatar.json +++ b/apps/v4/public/r/styles/new-york-v4/avatar.json @@ -2,9 +2,7 @@ "$schema": "https://shadcn-ember.com/schema/registry-item.json", "name": "avatar", "type": "registry:ui", - "dependencies": [ - "ember-truth-helpers" - ], + "dependencies": ["ember-truth-helpers"], "files": [ { "path": "registry/new-york-v4/ui/avatar.gts", @@ -12,4 +10,4 @@ "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/apps/v4/public/r/styles/new-york-v4/badge.json b/apps/v4/public/r/styles/new-york-v4/badge.json index 7901199..61b2658 100644 --- a/apps/v4/public/r/styles/new-york-v4/badge.json +++ b/apps/v4/public/r/styles/new-york-v4/badge.json @@ -9,4 +9,4 @@ "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/apps/v4/public/r/styles/new-york-v4/breadcrumb.json b/apps/v4/public/r/styles/new-york-v4/breadcrumb.json index 8ae3fa7..fca77f2 100644 --- a/apps/v4/public/r/styles/new-york-v4/breadcrumb.json +++ b/apps/v4/public/r/styles/new-york-v4/breadcrumb.json @@ -9,4 +9,4 @@ "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/apps/v4/public/r/styles/new-york-v4/button-group.json b/apps/v4/public/r/styles/new-york-v4/button-group.json index 477a733..60674ea 100644 --- a/apps/v4/public/r/styles/new-york-v4/button-group.json +++ b/apps/v4/public/r/styles/new-york-v4/button-group.json @@ -2,9 +2,7 @@ "$schema": "https://shadcn-ember.com/schema/registry-item.json", "name": "button-group", "type": "registry:ui", - "registryDependencies": [ - "separator" - ], + "registryDependencies": ["separator"], "files": [ { "path": "registry/new-york-v4/ui/button-group.gts", @@ -12,4 +10,4 @@ "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/apps/v4/public/r/styles/new-york-v4/button.json b/apps/v4/public/r/styles/new-york-v4/button.json index 29bd800..7d0b3b5 100644 --- a/apps/v4/public/r/styles/new-york-v4/button.json +++ b/apps/v4/public/r/styles/new-york-v4/button.json @@ -9,4 +9,4 @@ "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/apps/v4/public/r/styles/new-york-v4/calendar.json b/apps/v4/public/r/styles/new-york-v4/calendar.json index 0b9ef3a..64ef469 100644 --- a/apps/v4/public/r/styles/new-york-v4/calendar.json +++ b/apps/v4/public/r/styles/new-york-v4/calendar.json @@ -2,9 +2,7 @@ "$schema": "https://shadcn-ember.com/schema/registry-item.json", "name": "calendar", "type": "registry:ui", - "registryDependencies": [ - "button" - ], + "registryDependencies": ["button"], "files": [ { "path": "registry/new-york-v4/ui/calendar.gts", @@ -12,4 +10,4 @@ "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/apps/v4/public/r/styles/new-york-v4/card.json b/apps/v4/public/r/styles/new-york-v4/card.json index 6677a51..26492be 100644 --- a/apps/v4/public/r/styles/new-york-v4/card.json +++ b/apps/v4/public/r/styles/new-york-v4/card.json @@ -9,4 +9,4 @@ "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/apps/v4/public/r/styles/new-york-v4/checkbox.json b/apps/v4/public/r/styles/new-york-v4/checkbox.json index 5da0507..e65a729 100644 --- a/apps/v4/public/r/styles/new-york-v4/checkbox.json +++ b/apps/v4/public/r/styles/new-york-v4/checkbox.json @@ -9,4 +9,4 @@ "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/apps/v4/public/r/styles/new-york-v4/collapsible.json b/apps/v4/public/r/styles/new-york-v4/collapsible.json index f26cc8d..957eb91 100644 --- a/apps/v4/public/r/styles/new-york-v4/collapsible.json +++ b/apps/v4/public/r/styles/new-york-v4/collapsible.json @@ -2,9 +2,7 @@ "$schema": "https://shadcn-ember.com/schema/registry-item.json", "name": "collapsible", "type": "registry:ui", - "dependencies": [ - "ember-provide-consume-context" - ], + "dependencies": ["ember-provide-consume-context"], "files": [ { "path": "registry/new-york-v4/ui/collapsible.gts", @@ -12,4 +10,4 @@ "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/apps/v4/public/r/styles/new-york-v4/command.json b/apps/v4/public/r/styles/new-york-v4/command.json index beea695..7b573cd 100644 --- a/apps/v4/public/r/styles/new-york-v4/command.json +++ b/apps/v4/public/r/styles/new-york-v4/command.json @@ -7,9 +7,7 @@ "ember-provide-consume-context", "tracked-built-ins" ], - "registryDependencies": [ - "dialog" - ], + "registryDependencies": ["dialog"], "files": [ { "path": "registry/new-york-v4/ui/command.gts", @@ -17,4 +15,4 @@ "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/apps/v4/public/r/styles/new-york-v4/context-menu.json b/apps/v4/public/r/styles/new-york-v4/context-menu.json index b185d43..2dd0a46 100644 --- a/apps/v4/public/r/styles/new-york-v4/context-menu.json +++ b/apps/v4/public/r/styles/new-york-v4/context-menu.json @@ -15,4 +15,4 @@ "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/apps/v4/public/r/styles/new-york-v4/dialog.json b/apps/v4/public/r/styles/new-york-v4/dialog.json index a112824..c02e1de 100644 --- a/apps/v4/public/r/styles/new-york-v4/dialog.json +++ b/apps/v4/public/r/styles/new-york-v4/dialog.json @@ -2,10 +2,7 @@ "$schema": "https://shadcn-ember.com/schema/registry-item.json", "name": "dialog", "type": "registry:ui", - "dependencies": [ - "ember-modifier", - "ember-provide-consume-context" - ], + "dependencies": ["ember-modifier", "ember-provide-consume-context"], "files": [ { "path": "registry/new-york-v4/ui/dialog.gts", @@ -13,4 +10,4 @@ "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/apps/v4/public/r/styles/new-york-v4/drawer.json b/apps/v4/public/r/styles/new-york-v4/drawer.json index 623fd8c..4c507ba 100644 --- a/apps/v4/public/r/styles/new-york-v4/drawer.json +++ b/apps/v4/public/r/styles/new-york-v4/drawer.json @@ -2,15 +2,12 @@ "$schema": "https://shadcn-ember.com/schema/registry-item.json", "name": "drawer", "type": "registry:ui", - "dependencies": [ - "ember-modifier", - "ember-provide-consume-context" - ], + "dependencies": ["ember-modifier", "ember-provide-consume-context"], "files": [ { "path": "registry/new-york-v4/ui/drawer.gts", - "content": "import { hash } from '@ember/helper';\nimport { on } from '@ember/modifier';\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { modifier } from 'ember-modifier';\nimport { provide, consume } from 'ember-provide-consume-context';\n\nimport { cn } from '@/lib/utils';\n\nimport type { TOC } from '@ember/component/template-only';\n\ntype Direction = 'top' | 'right' | 'bottom' | 'left';\n\nconst CLOSE_THRESHOLD = 0.25;\n\nconst DrawerContext = 'drawer-context' as const;\n\ninterface DrawerContextValue {\n open: boolean;\n isRendered: boolean;\n direction: Direction;\n isDragging: boolean;\n dragOffset: number;\n setOpen: (open: boolean) => void;\n finishClose: () => void;\n onDragStart: (event: PointerEvent) => void;\n}\n\ninterface ContextRegistry {\n [DrawerContext]: DrawerContextValue;\n}\n\ninterface DrawerSignature {\n Args: {\n open?: boolean;\n direction?: Direction;\n onOpenChange?: (open: boolean) => void;\n };\n Blocks: {\n default: [];\n };\n}\n\nclass Drawer extends Component {\n @tracked isOpen = false;\n @tracked isOpenOrClosing = false;\n @tracked isDragging = false;\n @tracked dragOffset = 0;\n\n get open() {\n return this.args.open ?? this.isOpen;\n }\n\n get isRendered() {\n return this.open || this.isOpenOrClosing;\n }\n\n get direction(): Direction {\n return this.args.direction ?? 'bottom';\n }\n\n setOpen = (open: boolean) => {\n if (open) {\n this.isOpenOrClosing = true;\n this.isOpen = true;\n } else {\n this.isOpen = false;\n }\n this.args.onOpenChange?.(open);\n };\n\n finishClose = () => {\n if (!this.open) {\n this.isOpenOrClosing = false;\n }\n };\n\n onDragStart = (event: PointerEvent) => {\n const startPos = { x: event.clientX, y: event.clientY };\n const direction = this.direction;\n\n const onPointerMove = (e: PointerEvent) => {\n const dx = e.clientX - startPos.x;\n const dy = e.clientY - startPos.y;\n\n let offset: number;\n switch (direction) {\n case 'bottom':\n offset = Math.max(0, dy);\n break;\n case 'top':\n offset = Math.max(0, -dy);\n break;\n case 'right':\n offset = Math.max(0, dx);\n break;\n case 'left':\n offset = Math.max(0, -dx);\n break;\n }\n\n this.isDragging = true;\n this.dragOffset = offset;\n };\n\n const onPointerUp = () => {\n document.removeEventListener('pointermove', onPointerMove);\n document.removeEventListener('pointerup', onPointerUp);\n\n const contentEl = document.querySelector(\n '[data-slot=\"drawer-content\"]',\n );\n\n if (contentEl) {\n const isVertical =\n direction === 'bottom' || direction === 'top';\n const size = isVertical\n ? contentEl.offsetHeight\n : contentEl.offsetWidth;\n\n if (this.dragOffset > size * CLOSE_THRESHOLD) {\n this.isDragging = false;\n this.dragOffset = 0;\n this.setOpen(false);\n } else {\n this.isDragging = false;\n this.dragOffset = 0;\n }\n } else {\n this.isDragging = false;\n this.dragOffset = 0;\n }\n };\n\n document.addEventListener('pointermove', onPointerMove);\n document.addEventListener('pointerup', onPointerUp);\n };\n\n @provide(DrawerContext)\n get context(): DrawerContextValue {\n return {\n open: this.open,\n isRendered: this.isRendered,\n direction: this.direction,\n isDragging: this.isDragging,\n dragOffset: this.dragOffset,\n setOpen: this.setOpen,\n finishClose: this.finishClose,\n onDragStart: this.onDragStart,\n };\n }\n\n \n}\n\ninterface DrawerTriggerSignature {\n Element: HTMLButtonElement;\n Args: {\n class?: string;\n asChild?: boolean;\n };\n Blocks: {\n default: [];\n };\n}\n\nclass DrawerTrigger extends Component {\n @consume(DrawerContext) context!: ContextRegistry[typeof DrawerContext];\n\n handleClick = () => {\n this.context.setOpen(true);\n };\n\n \n}\n\ninterface DrawerCloseSignature {\n Element: HTMLButtonElement;\n Args: {\n class?: string;\n asChild?: boolean;\n };\n Blocks: {\n default: [];\n };\n}\n\nclass DrawerClose extends Component {\n @consume(DrawerContext) context!: ContextRegistry[typeof DrawerContext];\n\n handleClick = () => {\n this.context.setOpen(false);\n };\n\n \n}\n\ninterface DrawerPortalSignature {\n Blocks: {\n default: [];\n };\n}\n\nconst DrawerPortal: TOC = ;\n\ninterface DrawerOverlaySignature {\n Element: HTMLDivElement;\n Args: {\n class?: string;\n };\n Blocks: {\n default: [];\n };\n}\n\nclass DrawerOverlay extends Component {\n @consume(DrawerContext) context!: ContextRegistry[typeof DrawerContext];\n\n handleClick = () => {\n this.context.setOpen(false);\n };\n\n handleAnimationEnd = (event: AnimationEvent) => {\n if (event.target === event.currentTarget && !this.context.open) {\n this.context.finishClose();\n }\n };\n\n get overlayStyle() {\n if (this.context.isDragging) {\n const contentEl = document.querySelector(\n '[data-slot=\"drawer-content\"]',\n );\n if (contentEl) {\n const isVertical =\n this.context.direction === 'bottom' ||\n this.context.direction === 'top';\n const size = isVertical\n ? contentEl.offsetHeight\n : contentEl.offsetWidth;\n const progress = Math.min(this.context.dragOffset / size, 1);\n const opacity = 1 - progress;\n return `opacity: ${opacity}; transition: none;`;\n }\n }\n return undefined;\n }\n\n \n}\n\ninterface DrawerContentSignature {\n Element: HTMLDivElement;\n Args: {\n class?: string;\n };\n Blocks: {\n default: [];\n };\n}\n\nclass DrawerContent extends Component {\n @consume(DrawerContext) context!: ContextRegistry[typeof DrawerContext];\n\n get destinationElement() {\n return document.body;\n }\n\n get classes() {\n return cn(\n 'group/drawer-content data-[state=open]:animate-in data-[state=closed]:animate-out fixed z-50 flex h-auto flex-col bg-popover text-sm text-popover-foreground data-[vaul-drawer-direction=bottom]:inset-x-0 data-[vaul-drawer-direction=bottom]:bottom-0 data-[vaul-drawer-direction=bottom]:mt-24 data-[vaul-drawer-direction=bottom]:max-h-[80vh] data-[vaul-drawer-direction=bottom]:rounded-t-xl data-[vaul-drawer-direction=bottom]:border-t data-[vaul-drawer-direction=left]:inset-y-0 data-[vaul-drawer-direction=left]:left-0 data-[vaul-drawer-direction=left]:w-3/4 data-[vaul-drawer-direction=left]:rounded-r-xl data-[vaul-drawer-direction=left]:border-r data-[vaul-drawer-direction=right]:inset-y-0 data-[vaul-drawer-direction=right]:right-0 data-[vaul-drawer-direction=right]:w-3/4 data-[vaul-drawer-direction=right]:rounded-l-xl data-[vaul-drawer-direction=right]:border-l data-[vaul-drawer-direction=top]:inset-x-0 data-[vaul-drawer-direction=top]:top-0 data-[vaul-drawer-direction=top]:mb-24 data-[vaul-drawer-direction=top]:max-h-[80vh] data-[vaul-drawer-direction=top]:rounded-b-xl data-[vaul-drawer-direction=top]:border-b data-[vaul-drawer-direction=left]:sm:max-w-sm data-[vaul-drawer-direction=right]:sm:max-w-sm data-[vaul-drawer-direction=bottom]:data-[state=closed]:slide-out-to-bottom data-[vaul-drawer-direction=bottom]:data-[state=open]:slide-in-from-bottom data-[vaul-drawer-direction=top]:data-[state=closed]:slide-out-to-top data-[vaul-drawer-direction=top]:data-[state=open]:slide-in-from-top data-[vaul-drawer-direction=left]:data-[state=closed]:slide-out-to-left data-[vaul-drawer-direction=left]:data-[state=open]:slide-in-from-left data-[vaul-drawer-direction=right]:data-[state=closed]:slide-out-to-right data-[vaul-drawer-direction=right]:data-[state=open]:slide-in-from-right',\n this.args.class,\n );\n }\n\n get contentStyle() {\n if (this.context.isDragging && this.context.dragOffset > 0) {\n const offset = this.context.dragOffset;\n let transform: string;\n switch (this.context.direction) {\n case 'bottom':\n transform = `translateY(${offset}px)`;\n break;\n case 'top':\n transform = `translateY(-${offset}px)`;\n break;\n case 'right':\n transform = `translateX(${offset}px)`;\n break;\n case 'left':\n transform = `translateX(-${offset}px)`;\n break;\n }\n return `transform: ${transform}; transition: none; animation: none;`;\n }\n return undefined;\n }\n\n handlePointerDown = (event: PointerEvent) => {\n this.context.onDragStart(event);\n };\n\n scrollLock = modifier(\n (_element, _positional, { enabled = true }: { enabled?: boolean } = {}) => {\n if (!enabled) {\n return;\n }\n\n document.body.classList.add('overflow-hidden');\n\n return () => {\n document.body.classList.remove('overflow-hidden');\n };\n }\n );\n\n handleAnimationEnd = (event: AnimationEvent) => {\n if (event.target === event.currentTarget && !this.context.open) {\n this.context.finishClose();\n }\n };\n\n handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n this.context.setOpen(false);\n }\n };\n\n \n}\n\ninterface DrawerHeaderSignature {\n Element: HTMLDivElement;\n Args: {\n class?: string;\n };\n Blocks: {\n default: [];\n };\n}\n\nconst DrawerHeader: TOC = ;\n\ninterface DrawerFooterSignature {\n Element: HTMLDivElement;\n Args: {\n class?: string;\n };\n Blocks: {\n default: [];\n };\n}\n\nconst DrawerFooter: TOC = ;\n\ninterface DrawerTitleSignature {\n Element: HTMLHeadingElement;\n Args: {\n class?: string;\n };\n Blocks: {\n default: [];\n };\n}\n\nconst DrawerTitle: TOC = ;\n\ninterface DrawerDescriptionSignature {\n Element: HTMLParagraphElement;\n Args: {\n class?: string;\n };\n Blocks: {\n default: [];\n };\n}\n\nconst DrawerDescription: TOC = ;\n\nexport {\n Drawer,\n DrawerPortal,\n DrawerOverlay,\n DrawerTrigger,\n DrawerClose,\n DrawerContent,\n DrawerHeader,\n DrawerFooter,\n DrawerTitle,\n DrawerDescription,\n};\n", + "content": "import { hash } from '@ember/helper';\nimport { on } from '@ember/modifier';\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { modifier } from 'ember-modifier';\nimport { provide, consume } from 'ember-provide-consume-context';\n\nimport { cn } from '@/lib/utils';\n\nimport type { TOC } from '@ember/component/template-only';\n\ntype Direction = 'top' | 'right' | 'bottom' | 'left';\n\nconst CLOSE_THRESHOLD = 0.25;\n\nconst DrawerContext = 'drawer-context' as const;\n\ninterface DrawerContextValue {\n open: boolean;\n isRendered: boolean;\n direction: Direction;\n isDragging: boolean;\n dragOffset: number;\n closingFromDrag: boolean;\n setOpen: (open: boolean) => void;\n finishClose: () => void;\n onDragStart: (event: PointerEvent) => void;\n}\n\ninterface ContextRegistry {\n [DrawerContext]: DrawerContextValue;\n}\n\ninterface DrawerSignature {\n Args: {\n open?: boolean;\n direction?: Direction;\n onOpenChange?: (open: boolean) => void;\n };\n Blocks: {\n default: [];\n };\n}\n\nclass Drawer extends Component {\n @tracked isOpen = false;\n @tracked isOpenOrClosing = false;\n @tracked isDragging = false;\n @tracked dragOffset = 0;\n @tracked closingFromDrag = false;\n\n get open() {\n return this.args.open ?? this.isOpen;\n }\n\n get isRendered() {\n return this.open || this.isOpenOrClosing;\n }\n\n get direction(): Direction {\n return this.args.direction ?? 'bottom';\n }\n\n setOpen = (open: boolean) => {\n if (open) {\n this.isOpenOrClosing = true;\n this.isOpen = true;\n } else {\n this.isOpen = false;\n }\n this.args.onOpenChange?.(open);\n };\n\n finishClose = () => {\n if (!this.open) {\n this.isOpenOrClosing = false;\n this.closingFromDrag = false;\n this.isDragging = false;\n this.dragOffset = 0;\n }\n };\n\n onDragStart = (event: PointerEvent) => {\n const startPos = { x: event.clientX, y: event.clientY };\n const direction = this.direction;\n\n const onPointerMove = (e: PointerEvent) => {\n const dx = e.clientX - startPos.x;\n const dy = e.clientY - startPos.y;\n\n let offset: number;\n switch (direction) {\n case 'bottom':\n offset = Math.max(0, dy);\n break;\n case 'top':\n offset = Math.max(0, -dy);\n break;\n case 'right':\n offset = Math.max(0, dx);\n break;\n case 'left':\n offset = Math.max(0, -dx);\n break;\n }\n\n this.isDragging = true;\n this.dragOffset = offset;\n };\n\n const onPointerUp = () => {\n document.removeEventListener('pointermove', onPointerMove);\n document.removeEventListener('pointerup', onPointerUp);\n\n const contentEl = document.querySelector(\n '[data-slot=\"drawer-content\"]'\n );\n\n if (contentEl) {\n const isVertical = direction === 'bottom' || direction === 'top';\n const size = isVertical\n ? contentEl.offsetHeight\n : contentEl.offsetWidth;\n\n if (this.dragOffset > size * CLOSE_THRESHOLD) {\n this.isDragging = false;\n this.closingFromDrag = true;\n this.dragOffset = size;\n this.setOpen(false);\n\n // Fallback: if transitionend doesn't fire, finishClose after timeout\n setTimeout(() => {\n if (this.closingFromDrag) {\n this.finishClose();\n }\n }, 300);\n } else {\n this.isDragging = false;\n this.dragOffset = 0;\n }\n } else {\n this.isDragging = false;\n this.dragOffset = 0;\n }\n };\n\n document.addEventListener('pointermove', onPointerMove);\n document.addEventListener('pointerup', onPointerUp);\n };\n\n @provide(DrawerContext)\n get context(): DrawerContextValue {\n return {\n open: this.open,\n isRendered: this.isRendered,\n direction: this.direction,\n isDragging: this.isDragging,\n dragOffset: this.dragOffset,\n closingFromDrag: this.closingFromDrag,\n setOpen: this.setOpen,\n finishClose: this.finishClose,\n onDragStart: this.onDragStart,\n };\n }\n\n \n}\n\ninterface DrawerTriggerSignature {\n Element: HTMLButtonElement;\n Args: {\n class?: string;\n asChild?: boolean;\n };\n Blocks: {\n default: [];\n };\n}\n\nclass DrawerTrigger extends Component {\n @consume(DrawerContext) context!: ContextRegistry[typeof DrawerContext];\n\n handleClick = () => {\n this.context.setOpen(true);\n };\n\n \n}\n\ninterface DrawerCloseSignature {\n Element: HTMLButtonElement;\n Args: {\n class?: string;\n asChild?: boolean;\n };\n Blocks: {\n default: [];\n };\n}\n\nclass DrawerClose extends Component {\n @consume(DrawerContext) context!: ContextRegistry[typeof DrawerContext];\n\n handleClick = () => {\n this.context.setOpen(false);\n };\n\n \n}\n\ninterface DrawerPortalSignature {\n Blocks: {\n default: [];\n };\n}\n\nconst DrawerPortal: TOC = ;\n\ninterface DrawerOverlaySignature {\n Element: HTMLDivElement;\n Args: {\n class?: string;\n };\n Blocks: {\n default: [];\n };\n}\n\nclass DrawerOverlay extends Component {\n @consume(DrawerContext) context!: ContextRegistry[typeof DrawerContext];\n\n handleClick = () => {\n this.context.setOpen(false);\n };\n\n handleAnimationEnd = (event: AnimationEvent) => {\n if (event.target === event.currentTarget && !this.context.open) {\n this.context.finishClose();\n }\n };\n\n get overlayStyle() {\n if (this.context.closingFromDrag) {\n return 'opacity: 0; transition: opacity 200ms ease-out; animation: none;';\n }\n if (this.context.isDragging) {\n const contentEl = document.querySelector(\n '[data-slot=\"drawer-content\"]'\n );\n if (contentEl) {\n const isVertical =\n this.context.direction === 'bottom' ||\n this.context.direction === 'top';\n const size = isVertical\n ? contentEl.offsetHeight\n : contentEl.offsetWidth;\n const progress = Math.min(this.context.dragOffset / size, 1);\n const opacity = 1 - progress;\n return `opacity: ${opacity}; transition: none;`;\n }\n }\n return undefined;\n }\n\n \n}\n\ninterface DrawerContentSignature {\n Element: HTMLDivElement;\n Args: {\n class?: string;\n };\n Blocks: {\n default: [];\n };\n}\n\nclass DrawerContent extends Component {\n @consume(DrawerContext) context!: ContextRegistry[typeof DrawerContext];\n\n get destinationElement() {\n return document.body;\n }\n\n get classes() {\n return cn(\n 'group/drawer-content data-[state=open]:animate-in data-[state=closed]:animate-out fixed z-50 flex h-auto flex-col bg-popover text-sm text-popover-foreground data-[vaul-drawer-direction=bottom]:inset-x-0 data-[vaul-drawer-direction=bottom]:bottom-0 data-[vaul-drawer-direction=bottom]:mt-24 data-[vaul-drawer-direction=bottom]:max-h-[80vh] data-[vaul-drawer-direction=bottom]:rounded-t-xl data-[vaul-drawer-direction=bottom]:border-t data-[vaul-drawer-direction=left]:inset-y-0 data-[vaul-drawer-direction=left]:left-0 data-[vaul-drawer-direction=left]:w-3/4 data-[vaul-drawer-direction=left]:rounded-r-xl data-[vaul-drawer-direction=left]:border-r data-[vaul-drawer-direction=right]:inset-y-0 data-[vaul-drawer-direction=right]:right-0 data-[vaul-drawer-direction=right]:w-3/4 data-[vaul-drawer-direction=right]:rounded-l-xl data-[vaul-drawer-direction=right]:border-l data-[vaul-drawer-direction=top]:inset-x-0 data-[vaul-drawer-direction=top]:top-0 data-[vaul-drawer-direction=top]:mb-24 data-[vaul-drawer-direction=top]:max-h-[80vh] data-[vaul-drawer-direction=top]:rounded-b-xl data-[vaul-drawer-direction=top]:border-b data-[vaul-drawer-direction=left]:sm:max-w-sm data-[vaul-drawer-direction=right]:sm:max-w-sm data-[vaul-drawer-direction=bottom]:data-[state=closed]:slide-out-to-bottom data-[vaul-drawer-direction=bottom]:data-[state=open]:slide-in-from-bottom data-[vaul-drawer-direction=top]:data-[state=closed]:slide-out-to-top data-[vaul-drawer-direction=top]:data-[state=open]:slide-in-from-top data-[vaul-drawer-direction=left]:data-[state=closed]:slide-out-to-left data-[vaul-drawer-direction=left]:data-[state=open]:slide-in-from-left data-[vaul-drawer-direction=right]:data-[state=closed]:slide-out-to-right data-[vaul-drawer-direction=right]:data-[state=open]:slide-in-from-right',\n this.args.class\n );\n }\n\n get contentStyle() {\n const offset = this.context.dragOffset;\n if (offset <= 0 && !this.context.closingFromDrag) {\n return undefined;\n }\n\n let transform: string;\n switch (this.context.direction) {\n case 'bottom':\n transform = `translateY(${offset}px)`;\n break;\n case 'top':\n transform = `translateY(-${offset}px)`;\n break;\n case 'right':\n transform = `translateX(${offset}px)`;\n break;\n case 'left':\n transform = `translateX(-${offset}px)`;\n break;\n }\n\n if (this.context.closingFromDrag) {\n return `transform: ${transform}; transition: transform 200ms ease-out; animation: none;`;\n }\n\n return `transform: ${transform}; transition: none; animation: none;`;\n }\n\n handlePointerDown = (event: PointerEvent) => {\n this.context.onDragStart(event);\n };\n\n scrollLock = modifier(\n (_element, _positional, { enabled = true }: { enabled?: boolean } = {}) => {\n if (!enabled) {\n return;\n }\n\n document.body.classList.add('overflow-hidden');\n\n return () => {\n document.body.classList.remove('overflow-hidden');\n };\n }\n );\n\n handleAnimationEnd = (event: AnimationEvent) => {\n if (event.target === event.currentTarget && !this.context.open) {\n this.context.finishClose();\n }\n };\n\n handleTransitionEnd = (event: TransitionEvent) => {\n if (event.target === event.currentTarget && this.context.closingFromDrag) {\n this.context.finishClose();\n }\n };\n\n handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n this.context.setOpen(false);\n }\n };\n\n \n}\n\ninterface DrawerHeaderSignature {\n Element: HTMLDivElement;\n Args: {\n class?: string;\n };\n Blocks: {\n default: [];\n };\n}\n\nconst DrawerHeader: TOC = ;\n\ninterface DrawerFooterSignature {\n Element: HTMLDivElement;\n Args: {\n class?: string;\n };\n Blocks: {\n default: [];\n };\n}\n\nconst DrawerFooter: TOC = ;\n\ninterface DrawerTitleSignature {\n Element: HTMLHeadingElement;\n Args: {\n class?: string;\n };\n Blocks: {\n default: [];\n };\n}\n\nconst DrawerTitle: TOC = ;\n\ninterface DrawerDescriptionSignature {\n Element: HTMLParagraphElement;\n Args: {\n class?: string;\n };\n Blocks: {\n default: [];\n };\n}\n\nconst DrawerDescription: TOC = ;\n\nexport {\n Drawer,\n DrawerPortal,\n DrawerOverlay,\n DrawerTrigger,\n DrawerClose,\n DrawerContent,\n DrawerHeader,\n DrawerFooter,\n DrawerTitle,\n DrawerDescription,\n};\n", "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/apps/v4/public/r/styles/new-york-v4/dropdown-menu.json b/apps/v4/public/r/styles/new-york-v4/dropdown-menu.json index fc51e3a..52758b7 100644 --- a/apps/v4/public/r/styles/new-york-v4/dropdown-menu.json +++ b/apps/v4/public/r/styles/new-york-v4/dropdown-menu.json @@ -15,4 +15,4 @@ "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/apps/v4/public/r/styles/new-york-v4/empty.json b/apps/v4/public/r/styles/new-york-v4/empty.json index 7c446e6..b691731 100644 --- a/apps/v4/public/r/styles/new-york-v4/empty.json +++ b/apps/v4/public/r/styles/new-york-v4/empty.json @@ -2,9 +2,7 @@ "$schema": "https://shadcn-ember.com/schema/registry-item.json", "name": "empty", "type": "registry:ui", - "dependencies": [ - "class-variance-authority" - ], + "dependencies": ["class-variance-authority"], "files": [ { "path": "registry/new-york-v4/ui/empty.gts", @@ -12,4 +10,4 @@ "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/apps/v4/public/r/styles/new-york-v4/field.json b/apps/v4/public/r/styles/new-york-v4/field.json index 2bfb253..1126d6e 100644 --- a/apps/v4/public/r/styles/new-york-v4/field.json +++ b/apps/v4/public/r/styles/new-york-v4/field.json @@ -2,10 +2,7 @@ "$schema": "https://shadcn-ember.com/schema/registry-item.json", "name": "field", "type": "registry:ui", - "registryDependencies": [ - "label", - "separator" - ], + "registryDependencies": ["label", "separator"], "files": [ { "path": "registry/new-york-v4/ui/field.gts", @@ -13,4 +10,4 @@ "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/apps/v4/public/r/styles/new-york-v4/hover-card.json b/apps/v4/public/r/styles/new-york-v4/hover-card.json index a6fcfc8..0838e76 100644 --- a/apps/v4/public/r/styles/new-york-v4/hover-card.json +++ b/apps/v4/public/r/styles/new-york-v4/hover-card.json @@ -14,4 +14,4 @@ "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/apps/v4/public/r/styles/new-york-v4/index.json b/apps/v4/public/r/styles/new-york-v4/index.json index eaa339e..2b0b94a 100644 --- a/apps/v4/public/r/styles/new-york-v4/index.json +++ b/apps/v4/public/r/styles/new-york-v4/index.json @@ -2,16 +2,9 @@ "$schema": "https://shadcn-ember.com/schema/registry-item.json", "name": "index", "type": "registry:style", - "dependencies": [ - "class-variance-authority", - "@iconify-json/lucide" - ], - "devDependencies": [ - "tw-animate-css" - ], - "registryDependencies": [ - "utils" - ], + "dependencies": ["class-variance-authority", "@iconify-json/lucide"], + "devDependencies": ["tw-animate-css"], + "registryDependencies": ["utils"], "files": [], "cssVars": {} -} \ No newline at end of file +} diff --git a/apps/v4/public/r/styles/new-york-v4/input-group.json b/apps/v4/public/r/styles/new-york-v4/input-group.json index 5a9f50d..90329a7 100644 --- a/apps/v4/public/r/styles/new-york-v4/input-group.json +++ b/apps/v4/public/r/styles/new-york-v4/input-group.json @@ -2,11 +2,7 @@ "$schema": "https://shadcn-ember.com/schema/registry-item.json", "name": "input-group", "type": "registry:ui", - "registryDependencies": [ - "button", - "input", - "textarea" - ], + "registryDependencies": ["button", "input", "textarea"], "files": [ { "path": "registry/new-york-v4/ui/input-group.gts", @@ -14,4 +10,4 @@ "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/apps/v4/public/r/styles/new-york-v4/input-otp.json b/apps/v4/public/r/styles/new-york-v4/input-otp.json index 2aeb275..79f4b0c 100644 --- a/apps/v4/public/r/styles/new-york-v4/input-otp.json +++ b/apps/v4/public/r/styles/new-york-v4/input-otp.json @@ -2,10 +2,7 @@ "$schema": "https://shadcn-ember.com/schema/registry-item.json", "name": "input-otp", "type": "registry:ui", - "dependencies": [ - "ember-modifier", - "ember-provide-consume-context" - ], + "dependencies": ["ember-modifier", "ember-provide-consume-context"], "files": [ { "path": "registry/new-york-v4/ui/input-otp.gts", @@ -13,4 +10,4 @@ "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/apps/v4/public/r/styles/new-york-v4/input.json b/apps/v4/public/r/styles/new-york-v4/input.json index cc6533a..7b016d3 100644 --- a/apps/v4/public/r/styles/new-york-v4/input.json +++ b/apps/v4/public/r/styles/new-york-v4/input.json @@ -9,4 +9,4 @@ "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/apps/v4/public/r/styles/new-york-v4/item.json b/apps/v4/public/r/styles/new-york-v4/item.json index 45f49fc..1aaf941 100644 --- a/apps/v4/public/r/styles/new-york-v4/item.json +++ b/apps/v4/public/r/styles/new-york-v4/item.json @@ -2,9 +2,7 @@ "$schema": "https://shadcn-ember.com/schema/registry-item.json", "name": "item", "type": "registry:ui", - "registryDependencies": [ - "separator" - ], + "registryDependencies": ["separator"], "files": [ { "path": "registry/new-york-v4/ui/item.gts", @@ -12,4 +10,4 @@ "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/apps/v4/public/r/styles/new-york-v4/kbd.json b/apps/v4/public/r/styles/new-york-v4/kbd.json index 010927c..036705d 100644 --- a/apps/v4/public/r/styles/new-york-v4/kbd.json +++ b/apps/v4/public/r/styles/new-york-v4/kbd.json @@ -9,4 +9,4 @@ "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/apps/v4/public/r/styles/new-york-v4/label.json b/apps/v4/public/r/styles/new-york-v4/label.json index a1ff02e..cea91db 100644 --- a/apps/v4/public/r/styles/new-york-v4/label.json +++ b/apps/v4/public/r/styles/new-york-v4/label.json @@ -9,4 +9,4 @@ "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/apps/v4/public/r/styles/new-york-v4/native-select.json b/apps/v4/public/r/styles/new-york-v4/native-select.json index 1dd6c8c..c84566e 100644 --- a/apps/v4/public/r/styles/new-york-v4/native-select.json +++ b/apps/v4/public/r/styles/new-york-v4/native-select.json @@ -9,4 +9,4 @@ "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/apps/v4/public/r/styles/new-york-v4/pagination.json b/apps/v4/public/r/styles/new-york-v4/pagination.json index 2aba081..0e3e0dc 100644 --- a/apps/v4/public/r/styles/new-york-v4/pagination.json +++ b/apps/v4/public/r/styles/new-york-v4/pagination.json @@ -9,4 +9,4 @@ "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/apps/v4/public/r/styles/new-york-v4/popover.json b/apps/v4/public/r/styles/new-york-v4/popover.json index deb87dd..82a031c 100644 --- a/apps/v4/public/r/styles/new-york-v4/popover.json +++ b/apps/v4/public/r/styles/new-york-v4/popover.json @@ -15,4 +15,4 @@ "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/apps/v4/public/r/styles/new-york-v4/progress.json b/apps/v4/public/r/styles/new-york-v4/progress.json index 079e7f2..5a2cf3e 100644 --- a/apps/v4/public/r/styles/new-york-v4/progress.json +++ b/apps/v4/public/r/styles/new-york-v4/progress.json @@ -9,4 +9,4 @@ "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/apps/v4/public/r/styles/new-york-v4/radio-group.json b/apps/v4/public/r/styles/new-york-v4/radio-group.json index 8c279e8..5ae122f 100644 --- a/apps/v4/public/r/styles/new-york-v4/radio-group.json +++ b/apps/v4/public/r/styles/new-york-v4/radio-group.json @@ -2,9 +2,7 @@ "$schema": "https://shadcn-ember.com/schema/registry-item.json", "name": "radio-group", "type": "registry:ui", - "dependencies": [ - "ember-provide-consume-context" - ], + "dependencies": ["ember-provide-consume-context"], "files": [ { "path": "registry/new-york-v4/ui/radio-group.gts", @@ -12,4 +10,4 @@ "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/apps/v4/public/r/styles/new-york-v4/registry.json b/apps/v4/public/r/styles/new-york-v4/registry.json index f1ddab4..6dff23b 100644 --- a/apps/v4/public/r/styles/new-york-v4/registry.json +++ b/apps/v4/public/r/styles/new-york-v4/registry.json @@ -5,42 +5,25 @@ { "name": "index", "type": "registry:style", - "dependencies": [ - "class-variance-authority", - "@iconify-json/lucide" - ], - "devDependencies": [ - "tw-animate-css" - ], - "registryDependencies": [ - "utils" - ], + "dependencies": ["class-variance-authority", "@iconify-json/lucide"], + "devDependencies": ["tw-animate-css"], + "registryDependencies": ["utils"], "files": [], "cssVars": {} }, { "name": "style", "type": "registry:style", - "dependencies": [ - "class-variance-authority", - "@iconify-json/lucide" - ], - "devDependencies": [ - "tw-animate-css" - ], - "registryDependencies": [ - "utils" - ], + "dependencies": ["class-variance-authority", "@iconify-json/lucide"], + "devDependencies": ["tw-animate-css"], + "registryDependencies": ["utils"], "files": [], "cssVars": {} }, { "name": "accordion", "type": "registry:ui", - "dependencies": [ - "ember-modifier", - "ember-provide-consume-context" - ], + "dependencies": ["ember-modifier", "ember-provide-consume-context"], "files": [ { "path": "registry/new-york-v4/ui/accordion.gts", @@ -51,10 +34,7 @@ { "name": "alert-dialog", "type": "registry:ui", - "dependencies": [ - "ember-modifier", - "ember-provide-consume-context" - ], + "dependencies": ["ember-modifier", "ember-provide-consume-context"], "files": [ { "path": "registry/new-york-v4/ui/alert-dialog.gts", @@ -85,9 +65,7 @@ { "name": "avatar", "type": "registry:ui", - "dependencies": [ - "ember-truth-helpers" - ], + "dependencies": ["ember-truth-helpers"], "files": [ { "path": "registry/new-york-v4/ui/avatar.gts", @@ -118,9 +96,7 @@ { "name": "button-group", "type": "registry:ui", - "registryDependencies": [ - "separator" - ], + "registryDependencies": ["separator"], "files": [ { "path": "registry/new-york-v4/ui/button-group.gts", @@ -141,9 +117,7 @@ { "name": "calendar", "type": "registry:ui", - "registryDependencies": [ - "button" - ], + "registryDependencies": ["button"], "files": [ { "path": "registry/new-york-v4/ui/calendar.gts", @@ -174,9 +148,7 @@ { "name": "collapsible", "type": "registry:ui", - "dependencies": [ - "ember-provide-consume-context" - ], + "dependencies": ["ember-provide-consume-context"], "files": [ { "path": "registry/new-york-v4/ui/collapsible.gts", @@ -192,9 +164,7 @@ "ember-provide-consume-context", "tracked-built-ins" ], - "registryDependencies": [ - "dialog" - ], + "registryDependencies": ["dialog"], "files": [ { "path": "registry/new-york-v4/ui/command.gts", @@ -221,10 +191,7 @@ { "name": "dialog", "type": "registry:ui", - "dependencies": [ - "ember-modifier", - "ember-provide-consume-context" - ], + "dependencies": ["ember-modifier", "ember-provide-consume-context"], "files": [ { "path": "registry/new-york-v4/ui/dialog.gts", @@ -235,10 +202,7 @@ { "name": "drawer", "type": "registry:ui", - "dependencies": [ - "ember-modifier", - "ember-provide-consume-context" - ], + "dependencies": ["ember-modifier", "ember-provide-consume-context"], "files": [ { "path": "registry/new-york-v4/ui/drawer.gts", @@ -265,9 +229,7 @@ { "name": "empty", "type": "registry:ui", - "dependencies": [ - "class-variance-authority" - ], + "dependencies": ["class-variance-authority"], "files": [ { "path": "registry/new-york-v4/ui/empty.gts", @@ -278,10 +240,7 @@ { "name": "field", "type": "registry:ui", - "registryDependencies": [ - "label", - "separator" - ], + "registryDependencies": ["label", "separator"], "files": [ { "path": "registry/new-york-v4/ui/field.gts", @@ -307,11 +266,7 @@ { "name": "input-group", "type": "registry:ui", - "registryDependencies": [ - "button", - "input", - "textarea" - ], + "registryDependencies": ["button", "input", "textarea"], "files": [ { "path": "registry/new-york-v4/ui/input-group.gts", @@ -322,10 +277,7 @@ { "name": "input-otp", "type": "registry:ui", - "dependencies": [ - "ember-modifier", - "ember-provide-consume-context" - ], + "dependencies": ["ember-modifier", "ember-provide-consume-context"], "files": [ { "path": "registry/new-york-v4/ui/input-otp.gts", @@ -346,9 +298,7 @@ { "name": "item", "type": "registry:ui", - "registryDependencies": [ - "separator" - ], + "registryDependencies": ["separator"], "files": [ { "path": "registry/new-york-v4/ui/item.gts", @@ -425,9 +375,7 @@ { "name": "radio-group", "type": "registry:ui", - "dependencies": [ - "ember-provide-consume-context" - ], + "dependencies": ["ember-provide-consume-context"], "files": [ { "path": "registry/new-york-v4/ui/radio-group.gts", @@ -474,10 +422,7 @@ { "name": "sheet", "type": "registry:ui", - "dependencies": [ - "ember-modifier", - "ember-provide-consume-context" - ], + "dependencies": ["ember-modifier", "ember-provide-consume-context"], "files": [ { "path": "registry/new-york-v4/ui/sheet.gts", @@ -537,9 +482,7 @@ "ember-truth-helpers", "ember-cli-flash" ], - "registryDependencies": [ - "toast" - ], + "registryDependencies": ["toast"], "files": [ { "path": "registry/new-york-v4/ui/sonner.gts", @@ -580,9 +523,7 @@ { "name": "tabs", "type": "registry:ui", - "dependencies": [ - "ember-provide-consume-context" - ], + "dependencies": ["ember-provide-consume-context"], "files": [ { "path": "registry/new-york-v4/ui/tabs.gts", @@ -603,12 +544,8 @@ { "name": "toggle-group", "type": "registry:ui", - "dependencies": [ - "ember-provide-consume-context" - ], - "registryDependencies": [ - "toggle" - ], + "dependencies": ["ember-provide-consume-context"], + "registryDependencies": ["toggle"], "files": [ { "path": "registry/new-york-v4/ui/toggle-group.gts", @@ -644,10 +581,7 @@ { "name": "utils", "type": "registry:lib", - "dependencies": [ - "clsx", - "tailwind-merge" - ], + "dependencies": ["clsx", "tailwind-merge"], "files": [ { "path": "registry/new-york-v4/lib/utils.ts", @@ -658,9 +592,7 @@ { "name": "toast", "type": "registry:composable", - "dependencies": [ - "ember-cli-flash" - ], + "dependencies": ["ember-cli-flash"], "files": [ { "path": "registry/new-york-v4/services/toast.ts", @@ -1035,4 +967,4 @@ } } ] -} \ No newline at end of file +} diff --git a/apps/v4/public/r/styles/new-york-v4/scroll-area.json b/apps/v4/public/r/styles/new-york-v4/scroll-area.json index 6692548..50c9e9b 100644 --- a/apps/v4/public/r/styles/new-york-v4/scroll-area.json +++ b/apps/v4/public/r/styles/new-york-v4/scroll-area.json @@ -9,4 +9,4 @@ "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/apps/v4/public/r/styles/new-york-v4/select.json b/apps/v4/public/r/styles/new-york-v4/select.json index c6253c5..49d1901 100644 --- a/apps/v4/public/r/styles/new-york-v4/select.json +++ b/apps/v4/public/r/styles/new-york-v4/select.json @@ -15,4 +15,4 @@ "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/apps/v4/public/r/styles/new-york-v4/separator.json b/apps/v4/public/r/styles/new-york-v4/separator.json index 43166b4..66be96b 100644 --- a/apps/v4/public/r/styles/new-york-v4/separator.json +++ b/apps/v4/public/r/styles/new-york-v4/separator.json @@ -9,4 +9,4 @@ "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/apps/v4/public/r/styles/new-york-v4/sheet.json b/apps/v4/public/r/styles/new-york-v4/sheet.json index a1dc436..599a55a 100644 --- a/apps/v4/public/r/styles/new-york-v4/sheet.json +++ b/apps/v4/public/r/styles/new-york-v4/sheet.json @@ -2,10 +2,7 @@ "$schema": "https://shadcn-ember.com/schema/registry-item.json", "name": "sheet", "type": "registry:ui", - "dependencies": [ - "ember-modifier", - "ember-provide-consume-context" - ], + "dependencies": ["ember-modifier", "ember-provide-consume-context"], "files": [ { "path": "registry/new-york-v4/ui/sheet.gts", @@ -13,4 +10,4 @@ "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/apps/v4/public/r/styles/new-york-v4/sidebar.json b/apps/v4/public/r/styles/new-york-v4/sidebar.json index 8575627..4c20397 100644 --- a/apps/v4/public/r/styles/new-york-v4/sidebar.json +++ b/apps/v4/public/r/styles/new-york-v4/sidebar.json @@ -22,4 +22,4 @@ "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/apps/v4/public/r/styles/new-york-v4/skeleton.json b/apps/v4/public/r/styles/new-york-v4/skeleton.json index 946a83c..30b9efe 100644 --- a/apps/v4/public/r/styles/new-york-v4/skeleton.json +++ b/apps/v4/public/r/styles/new-york-v4/skeleton.json @@ -9,4 +9,4 @@ "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/apps/v4/public/r/styles/new-york-v4/slider.json b/apps/v4/public/r/styles/new-york-v4/slider.json index 40ba5d6..a2e8141 100644 --- a/apps/v4/public/r/styles/new-york-v4/slider.json +++ b/apps/v4/public/r/styles/new-york-v4/slider.json @@ -9,4 +9,4 @@ "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/apps/v4/public/r/styles/new-york-v4/sonner.json b/apps/v4/public/r/styles/new-york-v4/sonner.json index c4d31a7..4b60eb6 100644 --- a/apps/v4/public/r/styles/new-york-v4/sonner.json +++ b/apps/v4/public/r/styles/new-york-v4/sonner.json @@ -8,9 +8,7 @@ "ember-truth-helpers", "ember-cli-flash" ], - "registryDependencies": [ - "toast" - ], + "registryDependencies": ["toast"], "files": [ { "path": "registry/new-york-v4/ui/sonner.gts", @@ -18,4 +16,4 @@ "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/apps/v4/public/r/styles/new-york-v4/spinner.json b/apps/v4/public/r/styles/new-york-v4/spinner.json index b293d6f..7bba77e 100644 --- a/apps/v4/public/r/styles/new-york-v4/spinner.json +++ b/apps/v4/public/r/styles/new-york-v4/spinner.json @@ -9,4 +9,4 @@ "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/apps/v4/public/r/styles/new-york-v4/style.json b/apps/v4/public/r/styles/new-york-v4/style.json index 38d8702..dfe44ad 100644 --- a/apps/v4/public/r/styles/new-york-v4/style.json +++ b/apps/v4/public/r/styles/new-york-v4/style.json @@ -2,16 +2,9 @@ "$schema": "https://shadcn-ember.com/schema/registry-item.json", "name": "style", "type": "registry:style", - "dependencies": [ - "class-variance-authority", - "@iconify-json/lucide" - ], - "devDependencies": [ - "tw-animate-css" - ], - "registryDependencies": [ - "utils" - ], + "dependencies": ["class-variance-authority", "@iconify-json/lucide"], + "devDependencies": ["tw-animate-css"], + "registryDependencies": ["utils"], "files": [], "cssVars": {} -} \ No newline at end of file +} diff --git a/apps/v4/public/r/styles/new-york-v4/switch.json b/apps/v4/public/r/styles/new-york-v4/switch.json index 195e1d0..acc3d28 100644 --- a/apps/v4/public/r/styles/new-york-v4/switch.json +++ b/apps/v4/public/r/styles/new-york-v4/switch.json @@ -9,4 +9,4 @@ "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/apps/v4/public/r/styles/new-york-v4/table.json b/apps/v4/public/r/styles/new-york-v4/table.json index 5636acd..ba9570a 100644 --- a/apps/v4/public/r/styles/new-york-v4/table.json +++ b/apps/v4/public/r/styles/new-york-v4/table.json @@ -9,4 +9,4 @@ "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/apps/v4/public/r/styles/new-york-v4/tabs.json b/apps/v4/public/r/styles/new-york-v4/tabs.json index c871cc7..9a1b91d 100644 --- a/apps/v4/public/r/styles/new-york-v4/tabs.json +++ b/apps/v4/public/r/styles/new-york-v4/tabs.json @@ -2,9 +2,7 @@ "$schema": "https://shadcn-ember.com/schema/registry-item.json", "name": "tabs", "type": "registry:ui", - "dependencies": [ - "ember-provide-consume-context" - ], + "dependencies": ["ember-provide-consume-context"], "files": [ { "path": "registry/new-york-v4/ui/tabs.gts", @@ -12,4 +10,4 @@ "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/apps/v4/public/r/styles/new-york-v4/textarea.json b/apps/v4/public/r/styles/new-york-v4/textarea.json index 8d8eec4..7182eb3 100644 --- a/apps/v4/public/r/styles/new-york-v4/textarea.json +++ b/apps/v4/public/r/styles/new-york-v4/textarea.json @@ -9,4 +9,4 @@ "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/apps/v4/public/r/styles/new-york-v4/theme-gray.json b/apps/v4/public/r/styles/new-york-v4/theme-gray.json index de8852f..312db88 100644 --- a/apps/v4/public/r/styles/new-york-v4/theme-gray.json +++ b/apps/v4/public/r/styles/new-york-v4/theme-gray.json @@ -71,4 +71,4 @@ "sidebar-ring": "oklch(0.551 0.027 264.364)" } } -} \ No newline at end of file +} diff --git a/apps/v4/public/r/styles/new-york-v4/theme-neutral.json b/apps/v4/public/r/styles/new-york-v4/theme-neutral.json index 7ef9fa1..552e02e 100644 --- a/apps/v4/public/r/styles/new-york-v4/theme-neutral.json +++ b/apps/v4/public/r/styles/new-york-v4/theme-neutral.json @@ -71,4 +71,4 @@ "sidebar-ring": "oklch(0.556 0 0)" } } -} \ No newline at end of file +} diff --git a/apps/v4/public/r/styles/new-york-v4/theme-slate.json b/apps/v4/public/r/styles/new-york-v4/theme-slate.json index 71f3747..52203af 100644 --- a/apps/v4/public/r/styles/new-york-v4/theme-slate.json +++ b/apps/v4/public/r/styles/new-york-v4/theme-slate.json @@ -71,4 +71,4 @@ "sidebar-ring": "oklch(0.551 0.027 264.364)" } } -} \ No newline at end of file +} diff --git a/apps/v4/public/r/styles/new-york-v4/theme-stone.json b/apps/v4/public/r/styles/new-york-v4/theme-stone.json index 092a053..de44b40 100644 --- a/apps/v4/public/r/styles/new-york-v4/theme-stone.json +++ b/apps/v4/public/r/styles/new-york-v4/theme-stone.json @@ -71,4 +71,4 @@ "sidebar-ring": "oklch(0.553 0.013 58.071)" } } -} \ No newline at end of file +} diff --git a/apps/v4/public/r/styles/new-york-v4/theme-zinc.json b/apps/v4/public/r/styles/new-york-v4/theme-zinc.json index 7a20cc6..abec732 100644 --- a/apps/v4/public/r/styles/new-york-v4/theme-zinc.json +++ b/apps/v4/public/r/styles/new-york-v4/theme-zinc.json @@ -71,4 +71,4 @@ "sidebar-ring": "oklch(0.552 0.016 285.938)" } } -} \ No newline at end of file +} diff --git a/apps/v4/public/r/styles/new-york-v4/toast.json b/apps/v4/public/r/styles/new-york-v4/toast.json index 8fa2a28..d1c8bb9 100644 --- a/apps/v4/public/r/styles/new-york-v4/toast.json +++ b/apps/v4/public/r/styles/new-york-v4/toast.json @@ -2,9 +2,7 @@ "$schema": "https://shadcn-ember.com/schema/registry-item.json", "name": "toast", "type": "registry:composable", - "dependencies": [ - "ember-cli-flash" - ], + "dependencies": ["ember-cli-flash"], "files": [ { "path": "registry/new-york-v4/services/toast.ts", @@ -13,4 +11,4 @@ "target": "app/services/toast.ts" } ] -} \ No newline at end of file +} diff --git a/apps/v4/public/r/styles/new-york-v4/toggle-group.json b/apps/v4/public/r/styles/new-york-v4/toggle-group.json index 3589f9c..3777e1d 100644 --- a/apps/v4/public/r/styles/new-york-v4/toggle-group.json +++ b/apps/v4/public/r/styles/new-york-v4/toggle-group.json @@ -2,12 +2,8 @@ "$schema": "https://shadcn-ember.com/schema/registry-item.json", "name": "toggle-group", "type": "registry:ui", - "dependencies": [ - "ember-provide-consume-context" - ], - "registryDependencies": [ - "toggle" - ], + "dependencies": ["ember-provide-consume-context"], + "registryDependencies": ["toggle"], "files": [ { "path": "registry/new-york-v4/ui/toggle-group.gts", @@ -15,4 +11,4 @@ "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/apps/v4/public/r/styles/new-york-v4/toggle.json b/apps/v4/public/r/styles/new-york-v4/toggle.json index 4cec8e0..23c4aa3 100644 --- a/apps/v4/public/r/styles/new-york-v4/toggle.json +++ b/apps/v4/public/r/styles/new-york-v4/toggle.json @@ -9,4 +9,4 @@ "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/apps/v4/public/r/styles/new-york-v4/tooltip.json b/apps/v4/public/r/styles/new-york-v4/tooltip.json index e6778be..5bde9f2 100644 --- a/apps/v4/public/r/styles/new-york-v4/tooltip.json +++ b/apps/v4/public/r/styles/new-york-v4/tooltip.json @@ -14,4 +14,4 @@ "type": "registry:ui" } ] -} \ No newline at end of file +} diff --git a/apps/v4/public/r/styles/new-york-v4/utils.json b/apps/v4/public/r/styles/new-york-v4/utils.json index 7324553..8e789dd 100644 --- a/apps/v4/public/r/styles/new-york-v4/utils.json +++ b/apps/v4/public/r/styles/new-york-v4/utils.json @@ -2,10 +2,7 @@ "$schema": "https://shadcn-ember.com/schema/registry-item.json", "name": "utils", "type": "registry:lib", - "dependencies": [ - "clsx", - "tailwind-merge" - ], + "dependencies": ["clsx", "tailwind-merge"], "files": [ { "path": "registry/new-york-v4/lib/utils.ts", @@ -13,4 +10,4 @@ "type": "registry:lib" } ] -} \ No newline at end of file +} diff --git a/apps/v4/registry/__blocks__.json b/apps/v4/registry/__blocks__.json index 0637a08..fe51488 100644 --- a/apps/v4/registry/__blocks__.json +++ b/apps/v4/registry/__blocks__.json @@ -1 +1 @@ -[] \ No newline at end of file +[] diff --git a/apps/v4/registry/__index__.ts b/apps/v4/registry/__index__.ts index b516adc..670e662 100644 --- a/apps/v4/registry/__index__.ts +++ b/apps/v4/registry/__index__.ts @@ -5,672 +5,779 @@ // Do not edit this file directly. export const Index: Record = { - "index": { - name: "index", - description: "", - type: "registry:style", - registryDependencies: ["utils"], + index: { + name: 'index', + description: '', + type: 'registry:style', + registryDependencies: ['utils'], files: [], categories: undefined, meta: undefined, }, - "style": { - name: "style", - description: "", - type: "registry:style", - registryDependencies: ["utils"], + style: { + name: 'style', + description: '', + type: 'registry:style', + registryDependencies: ['utils'], files: [], categories: undefined, meta: undefined, }, - "accordion": { - name: "accordion", - description: "", - type: "registry:ui", + accordion: { + name: 'accordion', + description: '', + type: 'registry:ui', registryDependencies: undefined, - files: [{ - path: "registry/new-york-v4/ui/accordion.gts", - type: "registry:ui", - target: "" - }], + files: [ + { + path: 'registry/new-york-v4/ui/accordion.gts', + type: 'registry:ui', + target: '', + }, + ], categories: undefined, meta: undefined, }, - "alert-dialog": { - name: "alert-dialog", - description: "", - type: "registry:ui", + 'alert-dialog': { + name: 'alert-dialog', + description: '', + type: 'registry:ui', registryDependencies: undefined, - files: [{ - path: "registry/new-york-v4/ui/alert-dialog.gts", - type: "registry:ui", - target: "" - }], + files: [ + { + path: 'registry/new-york-v4/ui/alert-dialog.gts', + type: 'registry:ui', + target: '', + }, + ], categories: undefined, meta: undefined, }, - "alert": { - name: "alert", - description: "", - type: "registry:ui", + alert: { + name: 'alert', + description: '', + type: 'registry:ui', registryDependencies: undefined, - files: [{ - path: "registry/new-york-v4/ui/alert.gts", - type: "registry:ui", - target: "" - }], + files: [ + { + path: 'registry/new-york-v4/ui/alert.gts', + type: 'registry:ui', + target: '', + }, + ], categories: undefined, meta: undefined, }, - "aspect-ratio": { - name: "aspect-ratio", - description: "", - type: "registry:ui", + 'aspect-ratio': { + name: 'aspect-ratio', + description: '', + type: 'registry:ui', registryDependencies: undefined, - files: [{ - path: "registry/new-york-v4/ui/aspect-ratio.gts", - type: "registry:ui", - target: "" - }], + files: [ + { + path: 'registry/new-york-v4/ui/aspect-ratio.gts', + type: 'registry:ui', + target: '', + }, + ], categories: undefined, meta: undefined, }, - "avatar": { - name: "avatar", - description: "", - type: "registry:ui", + avatar: { + name: 'avatar', + description: '', + type: 'registry:ui', registryDependencies: undefined, - files: [{ - path: "registry/new-york-v4/ui/avatar.gts", - type: "registry:ui", - target: "" - }], + files: [ + { + path: 'registry/new-york-v4/ui/avatar.gts', + type: 'registry:ui', + target: '', + }, + ], categories: undefined, meta: undefined, }, - "badge": { - name: "badge", - description: "", - type: "registry:ui", + badge: { + name: 'badge', + description: '', + type: 'registry:ui', registryDependencies: undefined, - files: [{ - path: "registry/new-york-v4/ui/badge.gts", - type: "registry:ui", - target: "" - }], + files: [ + { + path: 'registry/new-york-v4/ui/badge.gts', + type: 'registry:ui', + target: '', + }, + ], categories: undefined, meta: undefined, }, - "breadcrumb": { - name: "breadcrumb", - description: "", - type: "registry:ui", + breadcrumb: { + name: 'breadcrumb', + description: '', + type: 'registry:ui', registryDependencies: undefined, - files: [{ - path: "registry/new-york-v4/ui/breadcrumb.gts", - type: "registry:ui", - target: "" - }], + files: [ + { + path: 'registry/new-york-v4/ui/breadcrumb.gts', + type: 'registry:ui', + target: '', + }, + ], categories: undefined, meta: undefined, }, - "button-group": { - name: "button-group", - description: "", - type: "registry:ui", - registryDependencies: ["separator"], - files: [{ - path: "registry/new-york-v4/ui/button-group.gts", - type: "registry:ui", - target: "" - }], + 'button-group': { + name: 'button-group', + description: '', + type: 'registry:ui', + registryDependencies: ['separator'], + files: [ + { + path: 'registry/new-york-v4/ui/button-group.gts', + type: 'registry:ui', + target: '', + }, + ], categories: undefined, meta: undefined, }, - "button": { - name: "button", - description: "", - type: "registry:ui", + button: { + name: 'button', + description: '', + type: 'registry:ui', registryDependencies: undefined, - files: [{ - path: "registry/new-york-v4/ui/button.gts", - type: "registry:ui", - target: "" - }], + files: [ + { + path: 'registry/new-york-v4/ui/button.gts', + type: 'registry:ui', + target: '', + }, + ], categories: undefined, meta: undefined, }, - "calendar": { - name: "calendar", - description: "", - type: "registry:ui", - registryDependencies: ["button"], - files: [{ - path: "registry/new-york-v4/ui/calendar.gts", - type: "registry:ui", - target: "" - }], + calendar: { + name: 'calendar', + description: '', + type: 'registry:ui', + registryDependencies: ['button'], + files: [ + { + path: 'registry/new-york-v4/ui/calendar.gts', + type: 'registry:ui', + target: '', + }, + ], categories: undefined, meta: undefined, }, - "card": { - name: "card", - description: "", - type: "registry:ui", + card: { + name: 'card', + description: '', + type: 'registry:ui', registryDependencies: undefined, - files: [{ - path: "registry/new-york-v4/ui/card.gts", - type: "registry:ui", - target: "" - }], + files: [ + { + path: 'registry/new-york-v4/ui/card.gts', + type: 'registry:ui', + target: '', + }, + ], categories: undefined, meta: undefined, }, - "checkbox": { - name: "checkbox", - description: "", - type: "registry:ui", + checkbox: { + name: 'checkbox', + description: '', + type: 'registry:ui', registryDependencies: undefined, - files: [{ - path: "registry/new-york-v4/ui/checkbox.gts", - type: "registry:ui", - target: "" - }], + files: [ + { + path: 'registry/new-york-v4/ui/checkbox.gts', + type: 'registry:ui', + target: '', + }, + ], categories: undefined, meta: undefined, }, - "collapsible": { - name: "collapsible", - description: "", - type: "registry:ui", + collapsible: { + name: 'collapsible', + description: '', + type: 'registry:ui', registryDependencies: undefined, - files: [{ - path: "registry/new-york-v4/ui/collapsible.gts", - type: "registry:ui", - target: "" - }], - categories: undefined, - meta: undefined, - }, - "command": { - name: "command", - description: "", - type: "registry:ui", - registryDependencies: ["dialog"], - files: [{ - path: "registry/new-york-v4/ui/command.gts", - type: "registry:ui", - target: "" - }], - categories: undefined, - meta: undefined, - }, - "context-menu": { - name: "context-menu", - description: "", - type: "registry:ui", + files: [ + { + path: 'registry/new-york-v4/ui/collapsible.gts', + type: 'registry:ui', + target: '', + }, + ], + categories: undefined, + meta: undefined, + }, + command: { + name: 'command', + description: '', + type: 'registry:ui', + registryDependencies: ['dialog'], + files: [ + { + path: 'registry/new-york-v4/ui/command.gts', + type: 'registry:ui', + target: '', + }, + ], + categories: undefined, + meta: undefined, + }, + 'context-menu': { + name: 'context-menu', + description: '', + type: 'registry:ui', registryDependencies: undefined, - files: [{ - path: "registry/new-york-v4/ui/context-menu.gts", - type: "registry:ui", - target: "" - }], - categories: undefined, - meta: undefined, - }, - "dialog": { - name: "dialog", - description: "", - type: "registry:ui", + files: [ + { + path: 'registry/new-york-v4/ui/context-menu.gts', + type: 'registry:ui', + target: '', + }, + ], + categories: undefined, + meta: undefined, + }, + dialog: { + name: 'dialog', + description: '', + type: 'registry:ui', registryDependencies: undefined, - files: [{ - path: "registry/new-york-v4/ui/dialog.gts", - type: "registry:ui", - target: "" - }], - categories: undefined, - meta: undefined, - }, - "drawer": { - name: "drawer", - description: "", - type: "registry:ui", + files: [ + { + path: 'registry/new-york-v4/ui/dialog.gts', + type: 'registry:ui', + target: '', + }, + ], + categories: undefined, + meta: undefined, + }, + drawer: { + name: 'drawer', + description: '', + type: 'registry:ui', registryDependencies: undefined, - files: [{ - path: "registry/new-york-v4/ui/drawer.gts", - type: "registry:ui", - target: "" - }], + files: [ + { + path: 'registry/new-york-v4/ui/drawer.gts', + type: 'registry:ui', + target: '', + }, + ], categories: undefined, meta: undefined, }, - "dropdown-menu": { - name: "dropdown-menu", - description: "", - type: "registry:ui", + 'dropdown-menu': { + name: 'dropdown-menu', + description: '', + type: 'registry:ui', registryDependencies: undefined, - files: [{ - path: "registry/new-york-v4/ui/dropdown-menu.gts", - type: "registry:ui", - target: "" - }], - categories: undefined, - meta: undefined, - }, - "empty": { - name: "empty", - description: "", - type: "registry:ui", + files: [ + { + path: 'registry/new-york-v4/ui/dropdown-menu.gts', + type: 'registry:ui', + target: '', + }, + ], + categories: undefined, + meta: undefined, + }, + empty: { + name: 'empty', + description: '', + type: 'registry:ui', registryDependencies: undefined, - files: [{ - path: "registry/new-york-v4/ui/empty.gts", - type: "registry:ui", - target: "" - }], - categories: undefined, - meta: undefined, - }, - "field": { - name: "field", - description: "", - type: "registry:ui", - registryDependencies: ["label","separator"], - files: [{ - path: "registry/new-york-v4/ui/field.gts", - type: "registry:ui", - target: "" - }], - categories: undefined, - meta: undefined, - }, - "hover-card": { - name: "hover-card", - description: "", - type: "registry:ui", + files: [ + { + path: 'registry/new-york-v4/ui/empty.gts', + type: 'registry:ui', + target: '', + }, + ], + categories: undefined, + meta: undefined, + }, + field: { + name: 'field', + description: '', + type: 'registry:ui', + registryDependencies: ['label', 'separator'], + files: [ + { + path: 'registry/new-york-v4/ui/field.gts', + type: 'registry:ui', + target: '', + }, + ], + categories: undefined, + meta: undefined, + }, + 'hover-card': { + name: 'hover-card', + description: '', + type: 'registry:ui', registryDependencies: undefined, - files: [{ - path: "registry/new-york-v4/ui/hover-card.gts", - type: "registry:ui", - target: "" - }], + files: [ + { + path: 'registry/new-york-v4/ui/hover-card.gts', + type: 'registry:ui', + target: '', + }, + ], categories: undefined, meta: undefined, }, - "input-group": { - name: "input-group", - description: "", - type: "registry:ui", - registryDependencies: ["button","input","textarea"], - files: [{ - path: "registry/new-york-v4/ui/input-group.gts", - type: "registry:ui", - target: "" - }], + 'input-group': { + name: 'input-group', + description: '', + type: 'registry:ui', + registryDependencies: ['button', 'input', 'textarea'], + files: [ + { + path: 'registry/new-york-v4/ui/input-group.gts', + type: 'registry:ui', + target: '', + }, + ], categories: undefined, meta: undefined, }, - "input-otp": { - name: "input-otp", - description: "", - type: "registry:ui", + 'input-otp': { + name: 'input-otp', + description: '', + type: 'registry:ui', registryDependencies: undefined, - files: [{ - path: "registry/new-york-v4/ui/input-otp.gts", - type: "registry:ui", - target: "" - }], - categories: undefined, - meta: undefined, - }, - "input": { - name: "input", - description: "", - type: "registry:ui", - registryDependencies: undefined, - files: [{ - path: "registry/new-york-v4/ui/input.gts", - type: "registry:ui", - target: "" - }], - categories: undefined, - meta: undefined, - }, - "item": { - name: "item", - description: "", - type: "registry:ui", - registryDependencies: ["separator"], - files: [{ - path: "registry/new-york-v4/ui/item.gts", - type: "registry:ui", - target: "" - }], + files: [ + { + path: 'registry/new-york-v4/ui/input-otp.gts', + type: 'registry:ui', + target: '', + }, + ], categories: undefined, meta: undefined, }, - "kbd": { - name: "kbd", - description: "", - type: "registry:ui", + input: { + name: 'input', + description: '', + type: 'registry:ui', registryDependencies: undefined, - files: [{ - path: "registry/new-york-v4/ui/kbd.gts", - type: "registry:ui", - target: "" - }], + files: [ + { + path: 'registry/new-york-v4/ui/input.gts', + type: 'registry:ui', + target: '', + }, + ], categories: undefined, meta: undefined, }, - "label": { - name: "label", - description: "", - type: "registry:ui", - registryDependencies: undefined, - files: [{ - path: "registry/new-york-v4/ui/label.gts", - type: "registry:ui", - target: "" - }], + item: { + name: 'item', + description: '', + type: 'registry:ui', + registryDependencies: ['separator'], + files: [ + { + path: 'registry/new-york-v4/ui/item.gts', + type: 'registry:ui', + target: '', + }, + ], categories: undefined, meta: undefined, }, - "native-select": { - name: "native-select", - description: "", - type: "registry:ui", + kbd: { + name: 'kbd', + description: '', + type: 'registry:ui', registryDependencies: undefined, - files: [{ - path: "registry/new-york-v4/ui/native-select.gts", - type: "registry:ui", - target: "" - }], + files: [ + { + path: 'registry/new-york-v4/ui/kbd.gts', + type: 'registry:ui', + target: '', + }, + ], categories: undefined, meta: undefined, }, - "pagination": { - name: "pagination", - description: "", - type: "registry:ui", + label: { + name: 'label', + description: '', + type: 'registry:ui', registryDependencies: undefined, - files: [{ - path: "registry/new-york-v4/ui/pagination.gts", - type: "registry:ui", - target: "" - }], + files: [ + { + path: 'registry/new-york-v4/ui/label.gts', + type: 'registry:ui', + target: '', + }, + ], categories: undefined, meta: undefined, }, - "popover": { - name: "popover", - description: "", - type: "registry:ui", + 'native-select': { + name: 'native-select', + description: '', + type: 'registry:ui', registryDependencies: undefined, - files: [{ - path: "registry/new-york-v4/ui/popover.gts", - type: "registry:ui", - target: "" - }], + files: [ + { + path: 'registry/new-york-v4/ui/native-select.gts', + type: 'registry:ui', + target: '', + }, + ], categories: undefined, meta: undefined, }, - "progress": { - name: "progress", - description: "", - type: "registry:ui", + pagination: { + name: 'pagination', + description: '', + type: 'registry:ui', registryDependencies: undefined, - files: [{ - path: "registry/new-york-v4/ui/progress.gts", - type: "registry:ui", - target: "" - }], + files: [ + { + path: 'registry/new-york-v4/ui/pagination.gts', + type: 'registry:ui', + target: '', + }, + ], categories: undefined, meta: undefined, }, - "radio-group": { - name: "radio-group", - description: "", - type: "registry:ui", + popover: { + name: 'popover', + description: '', + type: 'registry:ui', registryDependencies: undefined, - files: [{ - path: "registry/new-york-v4/ui/radio-group.gts", - type: "registry:ui", - target: "" - }], + files: [ + { + path: 'registry/new-york-v4/ui/popover.gts', + type: 'registry:ui', + target: '', + }, + ], categories: undefined, meta: undefined, }, - "scroll-area": { - name: "scroll-area", - description: "", - type: "registry:ui", + progress: { + name: 'progress', + description: '', + type: 'registry:ui', registryDependencies: undefined, - files: [{ - path: "registry/new-york-v4/ui/scroll-area.gts", - type: "registry:ui", - target: "" - }], + files: [ + { + path: 'registry/new-york-v4/ui/progress.gts', + type: 'registry:ui', + target: '', + }, + ], categories: undefined, meta: undefined, }, - "select": { - name: "select", - description: "", - type: "registry:ui", + 'radio-group': { + name: 'radio-group', + description: '', + type: 'registry:ui', registryDependencies: undefined, - files: [{ - path: "registry/new-york-v4/ui/select.gts", - type: "registry:ui", - target: "" - }], + files: [ + { + path: 'registry/new-york-v4/ui/radio-group.gts', + type: 'registry:ui', + target: '', + }, + ], categories: undefined, meta: undefined, }, - "separator": { - name: "separator", - description: "", - type: "registry:ui", + 'scroll-area': { + name: 'scroll-area', + description: '', + type: 'registry:ui', registryDependencies: undefined, - files: [{ - path: "registry/new-york-v4/ui/separator.gts", - type: "registry:ui", - target: "" - }], + files: [ + { + path: 'registry/new-york-v4/ui/scroll-area.gts', + type: 'registry:ui', + target: '', + }, + ], categories: undefined, meta: undefined, }, - "sheet": { - name: "sheet", - description: "", - type: "registry:ui", + select: { + name: 'select', + description: '', + type: 'registry:ui', registryDependencies: undefined, - files: [{ - path: "registry/new-york-v4/ui/sheet.gts", - type: "registry:ui", - target: "" - }], - categories: undefined, - meta: undefined, - }, - "sidebar": { - name: "sidebar", - description: "", - type: "registry:ui", - registryDependencies: ["button","input","separator","sheet","skeleton","tooltip"], - files: [{ - path: "registry/new-york-v4/ui/sidebar.gts", - type: "registry:ui", - target: "" - }], + files: [ + { + path: 'registry/new-york-v4/ui/select.gts', + type: 'registry:ui', + target: '', + }, + ], categories: undefined, meta: undefined, }, - "skeleton": { - name: "skeleton", - description: "", - type: "registry:ui", + separator: { + name: 'separator', + description: '', + type: 'registry:ui', registryDependencies: undefined, - files: [{ - path: "registry/new-york-v4/ui/skeleton.gts", - type: "registry:ui", - target: "" - }], + files: [ + { + path: 'registry/new-york-v4/ui/separator.gts', + type: 'registry:ui', + target: '', + }, + ], categories: undefined, meta: undefined, }, - "slider": { - name: "slider", - description: "", - type: "registry:ui", + sheet: { + name: 'sheet', + description: '', + type: 'registry:ui', registryDependencies: undefined, - files: [{ - path: "registry/new-york-v4/ui/slider.gts", - type: "registry:ui", - target: "" - }], + files: [ + { + path: 'registry/new-york-v4/ui/sheet.gts', + type: 'registry:ui', + target: '', + }, + ], categories: undefined, meta: undefined, }, - "sonner": { - name: "sonner", - description: "", - type: "registry:ui", - registryDependencies: ["toast"], - files: [{ - path: "registry/new-york-v4/ui/sonner.gts", - type: "registry:ui", - target: "" - }], - categories: undefined, - meta: undefined, - }, - "spinner": { - name: "spinner", - description: "", - type: "registry:ui", - registryDependencies: undefined, - files: [{ - path: "registry/new-york-v4/ui/spinner.gts", - type: "registry:ui", - target: "" - }], + sidebar: { + name: 'sidebar', + description: '', + type: 'registry:ui', + registryDependencies: [ + 'button', + 'input', + 'separator', + 'sheet', + 'skeleton', + 'tooltip', + ], + files: [ + { + path: 'registry/new-york-v4/ui/sidebar.gts', + type: 'registry:ui', + target: '', + }, + ], categories: undefined, meta: undefined, }, - "switch": { - name: "switch", - description: "", - type: "registry:ui", + skeleton: { + name: 'skeleton', + description: '', + type: 'registry:ui', registryDependencies: undefined, - files: [{ - path: "registry/new-york-v4/ui/switch.gts", - type: "registry:ui", - target: "" - }], + files: [ + { + path: 'registry/new-york-v4/ui/skeleton.gts', + type: 'registry:ui', + target: '', + }, + ], categories: undefined, meta: undefined, }, - "table": { - name: "table", - description: "", - type: "registry:ui", + slider: { + name: 'slider', + description: '', + type: 'registry:ui', registryDependencies: undefined, - files: [{ - path: "registry/new-york-v4/ui/table.gts", - type: "registry:ui", - target: "" - }], + files: [ + { + path: 'registry/new-york-v4/ui/slider.gts', + type: 'registry:ui', + target: '', + }, + ], + categories: undefined, + meta: undefined, + }, + sonner: { + name: 'sonner', + description: '', + type: 'registry:ui', + registryDependencies: ['toast'], + files: [ + { + path: 'registry/new-york-v4/ui/sonner.gts', + type: 'registry:ui', + target: '', + }, + ], + categories: undefined, + meta: undefined, + }, + spinner: { + name: 'spinner', + description: '', + type: 'registry:ui', + registryDependencies: undefined, + files: [ + { + path: 'registry/new-york-v4/ui/spinner.gts', + type: 'registry:ui', + target: '', + }, + ], + categories: undefined, + meta: undefined, + }, + switch: { + name: 'switch', + description: '', + type: 'registry:ui', + registryDependencies: undefined, + files: [ + { + path: 'registry/new-york-v4/ui/switch.gts', + type: 'registry:ui', + target: '', + }, + ], + categories: undefined, + meta: undefined, + }, + table: { + name: 'table', + description: '', + type: 'registry:ui', + registryDependencies: undefined, + files: [ + { + path: 'registry/new-york-v4/ui/table.gts', + type: 'registry:ui', + target: '', + }, + ], categories: undefined, meta: undefined, }, - "tabs": { - name: "tabs", - description: "", - type: "registry:ui", + tabs: { + name: 'tabs', + description: '', + type: 'registry:ui', registryDependencies: undefined, - files: [{ - path: "registry/new-york-v4/ui/tabs.gts", - type: "registry:ui", - target: "" - }], + files: [ + { + path: 'registry/new-york-v4/ui/tabs.gts', + type: 'registry:ui', + target: '', + }, + ], categories: undefined, meta: undefined, }, - "textarea": { - name: "textarea", - description: "", - type: "registry:ui", + textarea: { + name: 'textarea', + description: '', + type: 'registry:ui', registryDependencies: undefined, - files: [{ - path: "registry/new-york-v4/ui/textarea.gts", - type: "registry:ui", - target: "" - }], + files: [ + { + path: 'registry/new-york-v4/ui/textarea.gts', + type: 'registry:ui', + target: '', + }, + ], categories: undefined, meta: undefined, }, - "toggle-group": { - name: "toggle-group", - description: "", - type: "registry:ui", - registryDependencies: ["toggle"], - files: [{ - path: "registry/new-york-v4/ui/toggle-group.gts", - type: "registry:ui", - target: "" - }], + 'toggle-group': { + name: 'toggle-group', + description: '', + type: 'registry:ui', + registryDependencies: ['toggle'], + files: [ + { + path: 'registry/new-york-v4/ui/toggle-group.gts', + type: 'registry:ui', + target: '', + }, + ], categories: undefined, meta: undefined, }, - "toggle": { - name: "toggle", - description: "", - type: "registry:ui", + toggle: { + name: 'toggle', + description: '', + type: 'registry:ui', registryDependencies: undefined, - files: [{ - path: "registry/new-york-v4/ui/toggle.gts", - type: "registry:ui", - target: "" - }], + files: [ + { + path: 'registry/new-york-v4/ui/toggle.gts', + type: 'registry:ui', + target: '', + }, + ], categories: undefined, meta: undefined, }, - "tooltip": { - name: "tooltip", - description: "", - type: "registry:ui", + tooltip: { + name: 'tooltip', + description: '', + type: 'registry:ui', registryDependencies: undefined, - files: [{ - path: "registry/new-york-v4/ui/tooltip.gts", - type: "registry:ui", - target: "" - }], + files: [ + { + path: 'registry/new-york-v4/ui/tooltip.gts', + type: 'registry:ui', + target: '', + }, + ], categories: undefined, meta: undefined, }, - "utils": { - name: "utils", - description: "", - type: "registry:lib", + utils: { + name: 'utils', + description: '', + type: 'registry:lib', registryDependencies: undefined, - files: [{ - path: "registry/new-york-v4/lib/utils.ts", - type: "registry:lib", - target: "" - }], + files: [ + { + path: 'registry/new-york-v4/lib/utils.ts', + type: 'registry:lib', + target: '', + }, + ], categories: undefined, meta: undefined, }, - "toast": { - name: "toast", - description: "", - type: "registry:composable", + toast: { + name: 'toast', + description: '', + type: 'registry:composable', registryDependencies: undefined, - files: [{ - path: "registry/new-york-v4/services/toast.ts", - type: "registry:composable", - target: "app/services/toast.ts" - }], + files: [ + { + path: 'registry/new-york-v4/services/toast.ts', + type: 'registry:composable', + target: 'app/services/toast.ts', + }, + ], categories: undefined, meta: undefined, }, - } \ No newline at end of file +}; diff --git a/apps/v4/registry/new-york-v4/ui/drawer.gts b/apps/v4/registry/new-york-v4/ui/drawer.gts index d925af8..cd6c912 100644 --- a/apps/v4/registry/new-york-v4/ui/drawer.gts +++ b/apps/v4/registry/new-york-v4/ui/drawer.gts @@ -113,12 +113,11 @@ class Drawer extends Component { document.removeEventListener('pointerup', onPointerUp); const contentEl = document.querySelector( - '[data-slot="drawer-content"]', + '[data-slot="drawer-content"]' ); if (contentEl) { - const isVertical = - direction === 'bottom' || direction === 'top'; + const isVertical = direction === 'bottom' || direction === 'top'; const size = isVertical ? contentEl.offsetHeight : contentEl.offsetWidth; @@ -302,7 +301,7 @@ class DrawerOverlay extends Component { } if (this.context.isDragging) { const contentEl = document.querySelector( - '[data-slot="drawer-content"]', + '[data-slot="drawer-content"]' ); if (contentEl) { const isVertical = @@ -356,7 +355,7 @@ class DrawerContent extends Component { get classes() { return cn( 'group/drawer-content data-[state=open]:animate-in data-[state=closed]:animate-out fixed z-50 flex h-auto flex-col bg-popover text-sm text-popover-foreground data-[vaul-drawer-direction=bottom]:inset-x-0 data-[vaul-drawer-direction=bottom]:bottom-0 data-[vaul-drawer-direction=bottom]:mt-24 data-[vaul-drawer-direction=bottom]:max-h-[80vh] data-[vaul-drawer-direction=bottom]:rounded-t-xl data-[vaul-drawer-direction=bottom]:border-t data-[vaul-drawer-direction=left]:inset-y-0 data-[vaul-drawer-direction=left]:left-0 data-[vaul-drawer-direction=left]:w-3/4 data-[vaul-drawer-direction=left]:rounded-r-xl data-[vaul-drawer-direction=left]:border-r data-[vaul-drawer-direction=right]:inset-y-0 data-[vaul-drawer-direction=right]:right-0 data-[vaul-drawer-direction=right]:w-3/4 data-[vaul-drawer-direction=right]:rounded-l-xl data-[vaul-drawer-direction=right]:border-l data-[vaul-drawer-direction=top]:inset-x-0 data-[vaul-drawer-direction=top]:top-0 data-[vaul-drawer-direction=top]:mb-24 data-[vaul-drawer-direction=top]:max-h-[80vh] data-[vaul-drawer-direction=top]:rounded-b-xl data-[vaul-drawer-direction=top]:border-b data-[vaul-drawer-direction=left]:sm:max-w-sm data-[vaul-drawer-direction=right]:sm:max-w-sm data-[vaul-drawer-direction=bottom]:data-[state=closed]:slide-out-to-bottom data-[vaul-drawer-direction=bottom]:data-[state=open]:slide-in-from-bottom data-[vaul-drawer-direction=top]:data-[state=closed]:slide-out-to-top data-[vaul-drawer-direction=top]:data-[state=open]:slide-in-from-top data-[vaul-drawer-direction=left]:data-[state=closed]:slide-out-to-left data-[vaul-drawer-direction=left]:data-[state=open]:slide-in-from-left data-[vaul-drawer-direction=right]:data-[state=closed]:slide-out-to-right data-[vaul-drawer-direction=right]:data-[state=open]:slide-in-from-right', - this.args.class, + this.args.class ); } @@ -414,10 +413,7 @@ class DrawerContent extends Component { }; handleTransitionEnd = (event: TransitionEvent) => { - if ( - event.target === event.currentTarget && - this.context.closingFromDrag - ) { + if (event.target === event.currentTarget && this.context.closingFromDrag) { this.context.finishClose(); } }; @@ -443,6 +439,7 @@ class DrawerContent extends Component { tabindex="-1" {{on "animationend" this.handleAnimationEnd}} {{on "keydown" this.handleKeyDown}} + {{! template-lint-disable no-pointer-down-event-binding }} {{on "pointerdown" this.handlePointerDown}} {{on "transitionend" this.handleTransitionEnd}} {{this.scrollLock enabled=this.context.open}} diff --git a/apps/v4/registry/registry-blocks.ts b/apps/v4/registry/registry-blocks.ts index 2450a92..74e9eeb 100644 --- a/apps/v4/registry/registry-blocks.ts +++ b/apps/v4/registry/registry-blocks.ts @@ -1,3 +1,3 @@ -import type { Registry } from "../../../packages/cli/src/registry/schema" +import type { Registry } from '../../../packages/cli/src/registry/schema'; -export const blocks: Registry["items"] = [] +export const blocks: Registry['items'] = []; diff --git a/apps/v4/registry/registry-charts.ts b/apps/v4/registry/registry-charts.ts index 25d21e4..eb271fa 100644 --- a/apps/v4/registry/registry-charts.ts +++ b/apps/v4/registry/registry-charts.ts @@ -1,3 +1,3 @@ -import type { Registry } from "../../../packages/cli/src/registry/schema" +import type { Registry } from '../../../packages/cli/src/registry/schema'; -export const charts: Registry["items"] = [] +export const charts: Registry['items'] = []; diff --git a/apps/v4/registry/registry-ui.ts b/apps/v4/registry/registry-ui.ts index 1a34ba8..1161da8 100644 --- a/apps/v4/registry/registry-ui.ts +++ b/apps/v4/registry/registry-ui.ts @@ -1,611 +1,562 @@ -import type { Registry } from "../../../packages/cli/src/registry/schema" +import type { Registry } from '../../../packages/cli/src/registry/schema'; -export const ui: Registry["items"] = [ +export const ui: Registry['items'] = [ { - "name": "accordion", - "type": "registry:ui", - "files": [ + name: 'accordion', + type: 'registry:ui', + files: [ { - "path": "ui/accordion.gts", - "type": "registry:ui" - } + path: 'ui/accordion.gts', + type: 'registry:ui', + }, ], - "dependencies": [ - "ember-modifier", - "ember-provide-consume-context" - ] + dependencies: ['ember-modifier', 'ember-provide-consume-context'], }, { - "name": "alert-dialog", - "type": "registry:ui", - "files": [ + name: 'alert-dialog', + type: 'registry:ui', + files: [ { - "path": "ui/alert-dialog.gts", - "type": "registry:ui" - } + path: 'ui/alert-dialog.gts', + type: 'registry:ui', + }, ], - "dependencies": [ - "ember-modifier", - "ember-provide-consume-context" - ] + dependencies: ['ember-modifier', 'ember-provide-consume-context'], }, { - "name": "alert", - "type": "registry:ui", - "files": [ + name: 'alert', + type: 'registry:ui', + files: [ { - "path": "ui/alert.gts", - "type": "registry:ui" - } - ] + path: 'ui/alert.gts', + type: 'registry:ui', + }, + ], }, { - "name": "aspect-ratio", - "type": "registry:ui", - "files": [ + name: 'aspect-ratio', + type: 'registry:ui', + files: [ { - "path": "ui/aspect-ratio.gts", - "type": "registry:ui" - } - ] + path: 'ui/aspect-ratio.gts', + type: 'registry:ui', + }, + ], }, { - "name": "avatar", - "type": "registry:ui", - "files": [ + name: 'avatar', + type: 'registry:ui', + files: [ { - "path": "ui/avatar.gts", - "type": "registry:ui" - } + path: 'ui/avatar.gts', + type: 'registry:ui', + }, ], - "dependencies": [ - "ember-truth-helpers" - ] + dependencies: ['ember-truth-helpers'], }, { - "name": "badge", - "type": "registry:ui", - "files": [ + name: 'badge', + type: 'registry:ui', + files: [ { - "path": "ui/badge.gts", - "type": "registry:ui" - } - ] + path: 'ui/badge.gts', + type: 'registry:ui', + }, + ], }, { - "name": "breadcrumb", - "type": "registry:ui", - "files": [ + name: 'breadcrumb', + type: 'registry:ui', + files: [ { - "path": "ui/breadcrumb.gts", - "type": "registry:ui" - } - ] + path: 'ui/breadcrumb.gts', + type: 'registry:ui', + }, + ], }, { - "name": "button-group", - "type": "registry:ui", - "files": [ + name: 'button-group', + type: 'registry:ui', + files: [ { - "path": "ui/button-group.gts", - "type": "registry:ui" - } + path: 'ui/button-group.gts', + type: 'registry:ui', + }, ], - "registryDependencies": [ - "separator" - ] + registryDependencies: ['separator'], }, { - "name": "button", - "type": "registry:ui", - "files": [ + name: 'button', + type: 'registry:ui', + files: [ { - "path": "ui/button.gts", - "type": "registry:ui" - } - ] + path: 'ui/button.gts', + type: 'registry:ui', + }, + ], }, { - "name": "calendar", - "type": "registry:ui", - "files": [ + name: 'calendar', + type: 'registry:ui', + files: [ { - "path": "ui/calendar.gts", - "type": "registry:ui" - } + path: 'ui/calendar.gts', + type: 'registry:ui', + }, ], - "registryDependencies": [ - "button" - ] + registryDependencies: ['button'], }, { - "name": "card", - "type": "registry:ui", - "files": [ + name: 'card', + type: 'registry:ui', + files: [ { - "path": "ui/card.gts", - "type": "registry:ui" - } - ] + path: 'ui/card.gts', + type: 'registry:ui', + }, + ], }, { - "name": "checkbox", - "type": "registry:ui", - "files": [ + name: 'checkbox', + type: 'registry:ui', + files: [ { - "path": "ui/checkbox.gts", - "type": "registry:ui" - } - ] + path: 'ui/checkbox.gts', + type: 'registry:ui', + }, + ], }, { - "name": "collapsible", - "type": "registry:ui", - "files": [ + name: 'collapsible', + type: 'registry:ui', + files: [ { - "path": "ui/collapsible.gts", - "type": "registry:ui" - } + path: 'ui/collapsible.gts', + type: 'registry:ui', + }, ], - "dependencies": [ - "ember-provide-consume-context" - ] + dependencies: ['ember-provide-consume-context'], }, { - "name": "command", - "type": "registry:ui", - "files": [ + name: 'command', + type: 'registry:ui', + files: [ { - "path": "ui/command.gts", - "type": "registry:ui" - } + path: 'ui/command.gts', + type: 'registry:ui', + }, ], - "registryDependencies": [ - "dialog" + registryDependencies: ['dialog'], + dependencies: [ + 'ember-modifier', + 'ember-provide-consume-context', + 'tracked-built-ins', ], - "dependencies": [ - "ember-modifier", - "ember-provide-consume-context", - "tracked-built-ins" - ] }, { - "name": "context-menu", - "type": "registry:ui", - "files": [ + name: 'context-menu', + type: 'registry:ui', + files: [ { - "path": "ui/context-menu.gts", - "type": "registry:ui" - } + path: 'ui/context-menu.gts', + type: 'registry:ui', + }, + ], + dependencies: [ + '@floating-ui/dom', + 'ember-click-outside', + 'ember-modifier', + 'ember-provide-consume-context', ], - "dependencies": [ - "@floating-ui/dom", - "ember-click-outside", - "ember-modifier", - "ember-provide-consume-context" - ] }, { - "name": "dialog", - "type": "registry:ui", - "files": [ + name: 'dialog', + type: 'registry:ui', + files: [ { - "path": "ui/dialog.gts", - "type": "registry:ui" - } + path: 'ui/dialog.gts', + type: 'registry:ui', + }, ], - "dependencies": [ - "ember-modifier", - "ember-provide-consume-context" - ] + dependencies: ['ember-modifier', 'ember-provide-consume-context'], }, { - "name": "drawer", - "type": "registry:ui", - "files": [ + name: 'drawer', + type: 'registry:ui', + files: [ { - "path": "ui/drawer.gts", - "type": "registry:ui" - } + path: 'ui/drawer.gts', + type: 'registry:ui', + }, ], - "dependencies": [ - "ember-modifier", - "ember-provide-consume-context" - ] + dependencies: ['ember-modifier', 'ember-provide-consume-context'], }, { - "name": "dropdown-menu", - "type": "registry:ui", - "files": [ + name: 'dropdown-menu', + type: 'registry:ui', + files: [ { - "path": "ui/dropdown-menu.gts", - "type": "registry:ui" - } + path: 'ui/dropdown-menu.gts', + type: 'registry:ui', + }, + ], + dependencies: [ + '@floating-ui/dom', + 'ember-click-outside', + 'ember-modifier', + 'ember-provide-consume-context', ], - "dependencies": [ - "@floating-ui/dom", - "ember-click-outside", - "ember-modifier", - "ember-provide-consume-context" - ] }, { - "name": "empty", - "type": "registry:ui", - "files": [ + name: 'empty', + type: 'registry:ui', + files: [ { - "path": "ui/empty.gts", - "type": "registry:ui" - } + path: 'ui/empty.gts', + type: 'registry:ui', + }, ], - "dependencies": [ - "class-variance-authority" - ] + dependencies: ['class-variance-authority'], }, { - "name": "field", - "type": "registry:ui", - "files": [ + name: 'field', + type: 'registry:ui', + files: [ { - "path": "ui/field.gts", - "type": "registry:ui" - } + path: 'ui/field.gts', + type: 'registry:ui', + }, ], - "registryDependencies": [ - "label", - "separator" - ] + registryDependencies: ['label', 'separator'], }, { - "name": "hover-card", - "type": "registry:ui", - "files": [ + name: 'hover-card', + type: 'registry:ui', + files: [ { - "path": "ui/hover-card.gts", - "type": "registry:ui" - } + path: 'ui/hover-card.gts', + type: 'registry:ui', + }, + ], + dependencies: [ + '@floating-ui/dom', + 'ember-modifier', + 'ember-provide-consume-context', ], - "dependencies": [ - "@floating-ui/dom", - "ember-modifier", - "ember-provide-consume-context" - ] }, { - "name": "input-group", - "type": "registry:ui", - "files": [ + name: 'input-group', + type: 'registry:ui', + files: [ { - "path": "ui/input-group.gts", - "type": "registry:ui" - } + path: 'ui/input-group.gts', + type: 'registry:ui', + }, ], - "registryDependencies": [ - "button", - "input", - "textarea" - ] + registryDependencies: ['button', 'input', 'textarea'], }, { - "name": "input-otp", - "type": "registry:ui", - "files": [ + name: 'input-otp', + type: 'registry:ui', + files: [ { - "path": "ui/input-otp.gts", - "type": "registry:ui" - } + path: 'ui/input-otp.gts', + type: 'registry:ui', + }, ], - "dependencies": [ - "ember-modifier", - "ember-provide-consume-context" - ] + dependencies: ['ember-modifier', 'ember-provide-consume-context'], }, { - "name": "input", - "type": "registry:ui", - "files": [ + name: 'input', + type: 'registry:ui', + files: [ { - "path": "ui/input.gts", - "type": "registry:ui" - } - ] + path: 'ui/input.gts', + type: 'registry:ui', + }, + ], }, { - "name": "item", - "type": "registry:ui", - "files": [ + name: 'item', + type: 'registry:ui', + files: [ { - "path": "ui/item.gts", - "type": "registry:ui" - } + path: 'ui/item.gts', + type: 'registry:ui', + }, ], - "registryDependencies": [ - "separator" - ] + registryDependencies: ['separator'], }, { - "name": "kbd", - "type": "registry:ui", - "files": [ + name: 'kbd', + type: 'registry:ui', + files: [ { - "path": "ui/kbd.gts", - "type": "registry:ui" - } - ] + path: 'ui/kbd.gts', + type: 'registry:ui', + }, + ], }, { - "name": "label", - "type": "registry:ui", - "files": [ + name: 'label', + type: 'registry:ui', + files: [ { - "path": "ui/label.gts", - "type": "registry:ui" - } - ] + path: 'ui/label.gts', + type: 'registry:ui', + }, + ], }, { - "name": "native-select", - "type": "registry:ui", - "files": [ + name: 'native-select', + type: 'registry:ui', + files: [ { - "path": "ui/native-select.gts", - "type": "registry:ui" - } - ] + path: 'ui/native-select.gts', + type: 'registry:ui', + }, + ], }, { - "name": "pagination", - "type": "registry:ui", - "files": [ + name: 'pagination', + type: 'registry:ui', + files: [ { - "path": "ui/pagination.gts", - "type": "registry:ui" - } - ] + path: 'ui/pagination.gts', + type: 'registry:ui', + }, + ], }, { - "name": "popover", - "type": "registry:ui", - "files": [ + name: 'popover', + type: 'registry:ui', + files: [ { - "path": "ui/popover.gts", - "type": "registry:ui" - } + path: 'ui/popover.gts', + type: 'registry:ui', + }, + ], + dependencies: [ + '@floating-ui/dom', + 'ember-click-outside', + 'ember-modifier', + 'ember-provide-consume-context', ], - "dependencies": [ - "@floating-ui/dom", - "ember-click-outside", - "ember-modifier", - "ember-provide-consume-context" - ] }, { - "name": "progress", - "type": "registry:ui", - "files": [ + name: 'progress', + type: 'registry:ui', + files: [ { - "path": "ui/progress.gts", - "type": "registry:ui" - } - ] + path: 'ui/progress.gts', + type: 'registry:ui', + }, + ], }, { - "name": "radio-group", - "type": "registry:ui", - "files": [ + name: 'radio-group', + type: 'registry:ui', + files: [ { - "path": "ui/radio-group.gts", - "type": "registry:ui" - } + path: 'ui/radio-group.gts', + type: 'registry:ui', + }, ], - "dependencies": [ - "ember-provide-consume-context" - ] + dependencies: ['ember-provide-consume-context'], }, { - "name": "scroll-area", - "type": "registry:ui", - "files": [ + name: 'scroll-area', + type: 'registry:ui', + files: [ { - "path": "ui/scroll-area.gts", - "type": "registry:ui" - } - ] + path: 'ui/scroll-area.gts', + type: 'registry:ui', + }, + ], }, { - "name": "select", - "type": "registry:ui", - "files": [ + name: 'select', + type: 'registry:ui', + files: [ { - "path": "ui/select.gts", - "type": "registry:ui" - } + path: 'ui/select.gts', + type: 'registry:ui', + }, + ], + dependencies: [ + '@floating-ui/dom', + 'ember-click-outside', + 'ember-modifier', + 'ember-provide-consume-context', ], - "dependencies": [ - "@floating-ui/dom", - "ember-click-outside", - "ember-modifier", - "ember-provide-consume-context" - ] }, { - "name": "separator", - "type": "registry:ui", - "files": [ + name: 'separator', + type: 'registry:ui', + files: [ { - "path": "ui/separator.gts", - "type": "registry:ui" - } - ] + path: 'ui/separator.gts', + type: 'registry:ui', + }, + ], }, { - "name": "sheet", - "type": "registry:ui", - "files": [ + name: 'sheet', + type: 'registry:ui', + files: [ { - "path": "ui/sheet.gts", - "type": "registry:ui" - } + path: 'ui/sheet.gts', + type: 'registry:ui', + }, ], - "dependencies": [ - "ember-modifier", - "ember-provide-consume-context" - ] + dependencies: ['ember-modifier', 'ember-provide-consume-context'], }, { - "name": "sidebar", - "type": "registry:ui", - "files": [ + name: 'sidebar', + type: 'registry:ui', + files: [ { - "path": "ui/sidebar.gts", - "type": "registry:ui" - } + path: 'ui/sidebar.gts', + type: 'registry:ui', + }, ], - "registryDependencies": [ - "button", - "input", - "separator", - "sheet", - "skeleton", - "tooltip" + registryDependencies: [ + 'button', + 'input', + 'separator', + 'sheet', + 'skeleton', + 'tooltip', + ], + dependencies: [ + 'ember-modifier', + 'ember-provide-consume-context', + 'ember-truth-helpers', ], - "dependencies": [ - "ember-modifier", - "ember-provide-consume-context", - "ember-truth-helpers" - ] }, { - "name": "skeleton", - "type": "registry:ui", - "files": [ + name: 'skeleton', + type: 'registry:ui', + files: [ { - "path": "ui/skeleton.gts", - "type": "registry:ui" - } - ] + path: 'ui/skeleton.gts', + type: 'registry:ui', + }, + ], }, { - "name": "slider", - "type": "registry:ui", - "files": [ + name: 'slider', + type: 'registry:ui', + files: [ { - "path": "ui/slider.gts", - "type": "registry:ui" - } - ] + path: 'ui/slider.gts', + type: 'registry:ui', + }, + ], }, { - "name": "sonner", - "type": "registry:ui", - "files": [ + name: 'sonner', + type: 'registry:ui', + files: [ { - "path": "ui/sonner.gts", - "type": "registry:ui" - } + path: 'ui/sonner.gts', + type: 'registry:ui', + }, ], - "registryDependencies": [ - "toast" + registryDependencies: ['toast'], + dependencies: [ + 'ember-click-outside', + 'ember-modifier', + 'ember-truth-helpers', + 'ember-cli-flash', ], - "dependencies": [ - "ember-click-outside", - "ember-modifier", - "ember-truth-helpers", - "ember-cli-flash" - ] }, { - "name": "spinner", - "type": "registry:ui", - "files": [ + name: 'spinner', + type: 'registry:ui', + files: [ { - "path": "ui/spinner.gts", - "type": "registry:ui" - } - ] + path: 'ui/spinner.gts', + type: 'registry:ui', + }, + ], }, { - "name": "switch", - "type": "registry:ui", - "files": [ + name: 'switch', + type: 'registry:ui', + files: [ { - "path": "ui/switch.gts", - "type": "registry:ui" - } - ] + path: 'ui/switch.gts', + type: 'registry:ui', + }, + ], }, { - "name": "table", - "type": "registry:ui", - "files": [ + name: 'table', + type: 'registry:ui', + files: [ { - "path": "ui/table.gts", - "type": "registry:ui" - } - ] + path: 'ui/table.gts', + type: 'registry:ui', + }, + ], }, { - "name": "tabs", - "type": "registry:ui", - "files": [ + name: 'tabs', + type: 'registry:ui', + files: [ { - "path": "ui/tabs.gts", - "type": "registry:ui" - } + path: 'ui/tabs.gts', + type: 'registry:ui', + }, ], - "dependencies": [ - "ember-provide-consume-context" - ] + dependencies: ['ember-provide-consume-context'], }, { - "name": "textarea", - "type": "registry:ui", - "files": [ + name: 'textarea', + type: 'registry:ui', + files: [ { - "path": "ui/textarea.gts", - "type": "registry:ui" - } - ] + path: 'ui/textarea.gts', + type: 'registry:ui', + }, + ], }, { - "name": "toggle-group", - "type": "registry:ui", - "files": [ + name: 'toggle-group', + type: 'registry:ui', + files: [ { - "path": "ui/toggle-group.gts", - "type": "registry:ui" - } - ], - "registryDependencies": [ - "toggle" + path: 'ui/toggle-group.gts', + type: 'registry:ui', + }, ], - "dependencies": [ - "ember-provide-consume-context" - ] + registryDependencies: ['toggle'], + dependencies: ['ember-provide-consume-context'], }, { - "name": "toggle", - "type": "registry:ui", - "files": [ + name: 'toggle', + type: 'registry:ui', + files: [ { - "path": "ui/toggle.gts", - "type": "registry:ui" - } - ] + path: 'ui/toggle.gts', + type: 'registry:ui', + }, + ], }, { - "name": "tooltip", - "type": "registry:ui", - "files": [ + name: 'tooltip', + type: 'registry:ui', + files: [ { - "path": "ui/tooltip.gts", - "type": "registry:ui" - } + path: 'ui/tooltip.gts', + type: 'registry:ui', + }, + ], + dependencies: [ + '@floating-ui/dom', + 'ember-modifier', + 'ember-provide-consume-context', ], - "dependencies": [ - "@floating-ui/dom", - "ember-modifier", - "ember-provide-consume-context" - ] - } -] + }, +];