@ecoma-io/loom 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +54 -57
- package/dist/blocks/AppHeader/AppHeader.js.map +1 -1
- package/dist/blocks/AppHeader/AppHeader.vue.d.ts +5 -6
- package/dist/blocks/AppHeader/AppHeader.vue.d.ts.map +1 -1
- package/dist/blocks/AppHeader/AppHeader.vue_vue_type_script_setup_true_lang.js +6 -7
- package/dist/blocks/AppHeader/AppHeader.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/blocks/DashboardGrid/DashboardGrid.vue.d.ts +1 -1
- package/dist/blocks/DashboardGrid/DashboardGrid.vue.d.ts.map +1 -1
- package/dist/blocks/DesktopAppShell/DesktopAppShell.js +7 -0
- package/dist/blocks/DesktopAppShell/DesktopAppShell.js.map +1 -0
- package/dist/blocks/DesktopAppShell/DesktopAppShell.vue.d.ts +102 -0
- package/dist/blocks/DesktopAppShell/DesktopAppShell.vue.d.ts.map +1 -0
- package/dist/blocks/DesktopAppShell/DesktopAppShell.vue_vue_type_script_setup_true_lang.js +74 -0
- package/dist/blocks/DesktopAppShell/DesktopAppShell.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/blocks/ErrorState/ErrorState.js +7 -0
- package/dist/blocks/ErrorState/ErrorState.js.map +1 -0
- package/dist/blocks/ErrorState/ErrorState.vue.d.ts +44 -0
- package/dist/blocks/ErrorState/ErrorState.vue.d.ts.map +1 -0
- package/dist/blocks/ErrorState/ErrorState.vue_vue_type_script_setup_true_lang.js +60 -0
- package/dist/blocks/ErrorState/ErrorState.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/blocks/FormActions/FormActions.js +7 -0
- package/dist/blocks/FormActions/FormActions.js.map +1 -0
- package/dist/blocks/FormActions/FormActions.vue.d.ts +51 -0
- package/dist/blocks/FormActions/FormActions.vue.d.ts.map +1 -0
- package/dist/blocks/FormActions/FormActions.vue_vue_type_script_setup_true_lang.js +21 -0
- package/dist/blocks/FormActions/FormActions.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/blocks/FormSection/FormSection.js +7 -0
- package/dist/blocks/FormSection/FormSection.js.map +1 -0
- package/dist/blocks/FormSection/FormSection.vue.d.ts +85 -0
- package/dist/blocks/FormSection/FormSection.vue.d.ts.map +1 -0
- package/dist/blocks/FormSection/FormSection.vue_vue_type_script_setup_true_lang.js +62 -0
- package/dist/blocks/FormSection/FormSection.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/blocks/LoadingState/LoadingState.js +7 -0
- package/dist/blocks/LoadingState/LoadingState.js.map +1 -0
- package/dist/blocks/LoadingState/LoadingState.vue.d.ts +22 -0
- package/dist/blocks/LoadingState/LoadingState.vue.d.ts.map +1 -0
- package/dist/blocks/LoadingState/LoadingState.vue_vue_type_script_setup_true_lang.js +57 -0
- package/dist/blocks/LoadingState/LoadingState.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/blocks/MetricCard/MetricCard.js +7 -0
- package/dist/blocks/MetricCard/MetricCard.js.map +1 -0
- package/dist/blocks/MetricCard/MetricCard.vue.d.ts +59 -0
- package/dist/blocks/MetricCard/MetricCard.vue.d.ts.map +1 -0
- package/dist/blocks/MetricCard/MetricCard.vue_vue_type_script_setup_true_lang.js +63 -0
- package/dist/blocks/MetricCard/MetricCard.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/blocks/SidebarNav/SidebarNav.js.map +1 -1
- package/dist/blocks/SidebarNav/SidebarNav.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/blocks/TitleBar/TitleBar.js.map +1 -1
- package/dist/blocks/TitleBar/TitleBar.vue.d.ts +37 -3
- package/dist/blocks/TitleBar/TitleBar.vue.d.ts.map +1 -1
- package/dist/blocks/TitleBar/TitleBar.vue_vue_type_script_setup_true_lang.js +14 -14
- package/dist/blocks/TitleBar/TitleBar.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/blocks/ToastStack/ToastStack.js.map +1 -1
- package/dist/blocks/ToastStack/ToastStack.vue.d.ts +20 -0
- package/dist/blocks/ToastStack/ToastStack.vue.d.ts.map +1 -1
- package/dist/blocks/ToastStack/ToastStack.vue_vue_type_script_setup_true_lang.js +16 -5
- package/dist/blocks/ToastStack/ToastStack.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/composition/Center/Center.js +7 -0
- package/dist/composition/Center/Center.js.map +1 -0
- package/dist/composition/Center/Center.vue.d.ts +40 -0
- package/dist/composition/Center/Center.vue.d.ts.map +1 -0
- package/dist/composition/Center/Center.vue_vue_type_script_setup_true_lang.js +29 -0
- package/dist/composition/Center/Center.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/composition/Frame/Frame.js +7 -0
- package/dist/composition/Frame/Frame.js.map +1 -0
- package/dist/composition/Frame/Frame.vue.d.ts +35 -0
- package/dist/composition/Frame/Frame.vue.d.ts.map +1 -0
- package/dist/composition/Frame/Frame.vue_vue_type_script_setup_true_lang.js +29 -0
- package/dist/composition/Frame/Frame.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/composition/Grid/Grid.js +7 -0
- package/dist/composition/Grid/Grid.js.map +1 -0
- package/dist/composition/Grid/Grid.vue.d.ts +41 -0
- package/dist/composition/Grid/Grid.vue.d.ts.map +1 -0
- package/dist/composition/Grid/Grid.vue_vue_type_script_setup_true_lang.js +27 -0
- package/dist/composition/Grid/Grid.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/composition/Inline/Inline.js +7 -0
- package/dist/composition/Inline/Inline.js.map +1 -0
- package/dist/composition/Inline/Inline.vue.d.ts +46 -0
- package/dist/composition/Inline/Inline.vue.d.ts.map +1 -0
- package/dist/composition/Inline/Inline.vue_vue_type_script_setup_true_lang.js +35 -0
- package/dist/composition/Inline/Inline.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/composition/ScrollReel/ScrollReel.js +7 -0
- package/dist/composition/ScrollReel/ScrollReel.js.map +1 -0
- package/dist/composition/ScrollReel/ScrollReel.vue.d.ts +42 -0
- package/dist/composition/ScrollReel/ScrollReel.vue.d.ts.map +1 -0
- package/dist/composition/ScrollReel/ScrollReel.vue_vue_type_script_setup_true_lang.js +79 -0
- package/dist/composition/ScrollReel/ScrollReel.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/composition/Sidebar/Sidebar.js +7 -0
- package/dist/composition/Sidebar/Sidebar.js.map +1 -0
- package/dist/composition/Sidebar/Sidebar.vue.d.ts +52 -0
- package/dist/composition/Sidebar/Sidebar.vue.d.ts.map +1 -0
- package/dist/composition/Sidebar/Sidebar.vue_vue_type_script_setup_true_lang.js +36 -0
- package/dist/composition/Sidebar/Sidebar.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/composition/Split/Split.js +7 -0
- package/dist/composition/Split/Split.js.map +1 -0
- package/dist/composition/Split/Split.vue.d.ts +58 -0
- package/dist/composition/Split/Split.vue.d.ts.map +1 -0
- package/dist/composition/Split/Split.vue_vue_type_script_setup_true_lang.js +40 -0
- package/dist/composition/Split/Split.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/composition/Stack/Stack.js +7 -0
- package/dist/composition/Stack/Stack.js.map +1 -0
- package/dist/composition/Stack/Stack.vue.d.ts +43 -0
- package/dist/composition/Stack/Stack.vue.d.ts.map +1 -0
- package/dist/composition/Stack/Stack.vue_vue_type_script_setup_true_lang.js +30 -0
- package/dist/composition/Stack/Stack.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/index.d.ts +119 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +83 -5
- package/dist/layouts/AppShell/AppShell.js +7 -0
- package/dist/layouts/AppShell/AppShell.js.map +1 -0
- package/dist/layouts/AppShell/AppShell.vue.d.ts +51 -0
- package/dist/layouts/AppShell/AppShell.vue.d.ts.map +1 -0
- package/dist/layouts/AppShell/AppShell.vue_vue_type_script_setup_true_lang.js +47 -0
- package/dist/layouts/AppShell/AppShell.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/layouts/Centered/Centered.js +7 -0
- package/dist/layouts/Centered/Centered.js.map +1 -0
- package/dist/layouts/Centered/Centered.vue.d.ts +48 -0
- package/dist/layouts/Centered/Centered.vue.d.ts.map +1 -0
- package/dist/layouts/Centered/Centered.vue_vue_type_script_setup_true_lang.js +35 -0
- package/dist/layouts/Centered/Centered.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/layouts/Dashboard/Dashboard.js +7 -0
- package/dist/layouts/Dashboard/Dashboard.js.map +1 -0
- package/dist/layouts/Dashboard/Dashboard.vue.d.ts +60 -0
- package/dist/layouts/Dashboard/Dashboard.vue.d.ts.map +1 -0
- package/dist/layouts/Dashboard/Dashboard.vue_vue_type_script_setup_true_lang.js +64 -0
- package/dist/layouts/Dashboard/Dashboard.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/layouts/FormLayout/FormLayout.js +7 -0
- package/dist/layouts/FormLayout/FormLayout.js.map +1 -0
- package/dist/layouts/FormLayout/FormLayout.vue.d.ts +46 -0
- package/dist/layouts/FormLayout/FormLayout.vue.d.ts.map +1 -0
- package/dist/layouts/FormLayout/FormLayout.vue_vue_type_script_setup_true_lang.js +28 -0
- package/dist/layouts/FormLayout/FormLayout.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/layouts/MasterDetail/MasterDetail.js +7 -0
- package/dist/layouts/MasterDetail/MasterDetail.js.map +1 -0
- package/dist/layouts/MasterDetail/MasterDetail.vue.d.ts +49 -0
- package/dist/layouts/MasterDetail/MasterDetail.vue.d.ts.map +1 -0
- package/dist/layouts/MasterDetail/MasterDetail.vue_vue_type_script_setup_true_lang.js +42 -0
- package/dist/layouts/MasterDetail/MasterDetail.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/layouts/Reading/Reading.js +7 -0
- package/dist/layouts/Reading/Reading.js.map +1 -0
- package/dist/layouts/Reading/Reading.vue.d.ts +24 -0
- package/dist/layouts/Reading/Reading.vue.d.ts.map +1 -0
- package/dist/layouts/Reading/Reading.vue_vue_type_script_setup_true_lang.js +29 -0
- package/dist/layouts/Reading/Reading.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/layouts/Settings/Settings.js +7 -0
- package/dist/layouts/Settings/Settings.js.map +1 -0
- package/dist/layouts/Settings/Settings.vue.d.ts +39 -0
- package/dist/layouts/Settings/Settings.vue.d.ts.map +1 -0
- package/dist/layouts/Settings/Settings.vue_vue_type_script_setup_true_lang.js +35 -0
- package/dist/layouts/Settings/Settings.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/layouts/SplitLayout/SplitLayout.js +7 -0
- package/dist/layouts/SplitLayout/SplitLayout.js.map +1 -0
- package/dist/layouts/SplitLayout/SplitLayout.vue.d.ts +63 -0
- package/dist/layouts/SplitLayout/SplitLayout.vue.d.ts.map +1 -0
- package/dist/layouts/SplitLayout/SplitLayout.vue_vue_type_script_setup_true_lang.js +46 -0
- package/dist/layouts/SplitLayout/SplitLayout.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/lib/ancestor-disabled.d.ts +35 -0
- package/dist/lib/ancestor-disabled.d.ts.map +1 -0
- package/dist/lib/ancestor-disabled.js +86 -0
- package/dist/lib/ancestor-disabled.js.map +1 -0
- package/dist/lib/cn.d.ts.map +1 -1
- package/dist/lib/cn.js +46 -1
- package/dist/lib/cn.js.map +1 -1
- package/dist/lib/count-labels.d.ts +78 -0
- package/dist/lib/count-labels.d.ts.map +1 -0
- package/dist/lib/count-labels.js +29 -0
- package/dist/lib/count-labels.js.map +1 -0
- package/dist/lib/date-labels.d.ts +278 -0
- package/dist/lib/date-labels.d.ts.map +1 -0
- package/dist/lib/date-labels.js +157 -0
- package/dist/lib/date-labels.js.map +1 -0
- package/dist/lib/field-context.d.ts +178 -0
- package/dist/lib/field-context.d.ts.map +1 -0
- package/dist/lib/field-context.js +106 -0
- package/dist/lib/field-context.js.map +1 -0
- package/dist/lib/label-registry.d.ts +75 -0
- package/dist/lib/label-registry.d.ts.map +1 -0
- package/dist/lib/labels.d.ts +116 -0
- package/dist/lib/labels.d.ts.map +1 -0
- package/dist/lib/labels.js +84 -0
- package/dist/lib/labels.js.map +1 -0
- package/dist/lib/theme.d.ts +68 -0
- package/dist/lib/theme.d.ts.map +1 -0
- package/dist/node_modules/.pnpm/@internationalized_date@3.12.3/node_modules/@internationalized/date/dist/private/CalendarDate.js +236 -0
- package/dist/node_modules/.pnpm/@internationalized_date@3.12.3/node_modules/@internationalized/date/dist/private/CalendarDate.js.map +1 -0
- package/dist/node_modules/.pnpm/@internationalized_date@3.12.3/node_modules/@internationalized/date/dist/private/calendars/GregorianCalendar.js +117 -0
- package/dist/node_modules/.pnpm/@internationalized_date@3.12.3/node_modules/@internationalized/date/dist/private/calendars/GregorianCalendar.js.map +1 -0
- package/dist/node_modules/.pnpm/@internationalized_date@3.12.3/node_modules/@internationalized/date/dist/private/conversion.js +142 -0
- package/dist/node_modules/.pnpm/@internationalized_date@3.12.3/node_modules/@internationalized/date/dist/private/conversion.js.map +1 -0
- package/dist/node_modules/.pnpm/@internationalized_date@3.12.3/node_modules/@internationalized/date/dist/private/manipulation.js +280 -0
- package/dist/node_modules/.pnpm/@internationalized_date@3.12.3/node_modules/@internationalized/date/dist/private/manipulation.js.map +1 -0
- package/dist/node_modules/.pnpm/@internationalized_date@3.12.3/node_modules/@internationalized/date/dist/private/queries.js +40 -0
- package/dist/node_modules/.pnpm/@internationalized_date@3.12.3/node_modules/@internationalized/date/dist/private/queries.js.map +1 -0
- package/dist/node_modules/.pnpm/@internationalized_date@3.12.3/node_modules/@internationalized/date/dist/private/string.js +69 -0
- package/dist/node_modules/.pnpm/@internationalized_date@3.12.3/node_modules/@internationalized/date/dist/private/string.js.map +1 -0
- package/dist/node_modules/.pnpm/@internationalized_date@3.12.3/node_modules/@internationalized/date/dist/private/utils.js +8 -0
- package/dist/node_modules/.pnpm/@internationalized_date@3.12.3/node_modules/@internationalized/date/dist/private/utils.js.map +1 -0
- package/dist/primitives/Accordion/Accordion.js +7 -0
- package/dist/primitives/Accordion/Accordion.js.map +1 -0
- package/dist/primitives/Accordion/Accordion.vue.d.ts +68 -0
- package/dist/primitives/Accordion/Accordion.vue.d.ts.map +1 -0
- package/dist/primitives/Accordion/Accordion.vue_vue_type_script_setup_true_lang.js +67 -0
- package/dist/primitives/Accordion/Accordion.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/primitives/AlertDialog/AlertDialog.js +7 -0
- package/dist/primitives/AlertDialog/AlertDialog.js.map +1 -0
- package/dist/primitives/AlertDialog/AlertDialog.vue.d.ts +94 -0
- package/dist/primitives/AlertDialog/AlertDialog.vue.d.ts.map +1 -0
- package/dist/primitives/AlertDialog/AlertDialog.vue_vue_type_script_setup_true_lang.js +99 -0
- package/dist/primitives/AlertDialog/AlertDialog.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/primitives/Avatar/Avatar.js +2 -2
- package/dist/primitives/Avatar/Avatar.js.map +1 -1
- package/dist/primitives/Avatar/Avatar.vue.d.ts +30 -3
- package/dist/primitives/Avatar/Avatar.vue.d.ts.map +1 -1
- package/dist/primitives/Avatar/Avatar.vue_vue_type_script_setup_true_lang.js +95 -14
- package/dist/primitives/Avatar/Avatar.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/primitives/AvatarGroup/AvatarGroup.js +7 -0
- package/dist/primitives/AvatarGroup/AvatarGroup.js.map +1 -0
- package/dist/primitives/AvatarGroup/AvatarGroup.vue.d.ts +104 -0
- package/dist/primitives/AvatarGroup/AvatarGroup.vue.d.ts.map +1 -0
- package/dist/primitives/AvatarGroup/AvatarGroup.vue_vue_type_script_setup_true_lang.js +139 -0
- package/dist/primitives/AvatarGroup/AvatarGroup.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/primitives/Badge/Badge.js.map +1 -1
- package/dist/primitives/Badge/Badge.vue.d.ts +6 -6
- package/dist/primitives/Badge/Badge.vue.d.ts.map +1 -1
- package/dist/primitives/Badge/Badge.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/primitives/Badge/Badge.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/primitives/Breadcrumb/Breadcrumb.js +7 -0
- package/dist/primitives/Breadcrumb/Breadcrumb.js.map +1 -0
- package/dist/primitives/Breadcrumb/Breadcrumb.vue.d.ts +25 -0
- package/dist/primitives/Breadcrumb/Breadcrumb.vue.d.ts.map +1 -0
- package/dist/primitives/Breadcrumb/Breadcrumb.vue_vue_type_script_setup_true_lang.js +48 -0
- package/dist/primitives/Breadcrumb/Breadcrumb.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/primitives/Button/Button.js +2 -2
- package/dist/primitives/Button/Button.js.map +1 -1
- package/dist/primitives/Button/Button.vue.d.ts +31 -8
- package/dist/primitives/Button/Button.vue.d.ts.map +1 -1
- package/dist/primitives/Button/Button.vue_vue_type_script_setup_true_lang.js +32 -16
- package/dist/primitives/Button/Button.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/primitives/Checkbox/Checkbox.js.map +1 -1
- package/dist/primitives/Checkbox/Checkbox.vue.d.ts +18 -3
- package/dist/primitives/Checkbox/Checkbox.vue.d.ts.map +1 -1
- package/dist/primitives/Checkbox/Checkbox.vue_vue_type_script_setup_true_lang.js +46 -7
- package/dist/primitives/Checkbox/Checkbox.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/primitives/Chip/Chip.js +7 -0
- package/dist/primitives/Chip/Chip.js.map +1 -0
- package/dist/primitives/Chip/Chip.vue.d.ts +79 -0
- package/dist/primitives/Chip/Chip.vue.d.ts.map +1 -0
- package/dist/primitives/Chip/Chip.vue_vue_type_script_setup_true_lang.js +139 -0
- package/dist/primitives/Chip/Chip.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/primitives/ColorPicker/ColorPicker.js +7 -0
- package/dist/primitives/ColorPicker/ColorPicker.js.map +1 -0
- package/dist/primitives/ColorPicker/ColorPicker.vue.d.ts +125 -0
- package/dist/primitives/ColorPicker/ColorPicker.vue.d.ts.map +1 -0
- package/dist/primitives/ColorPicker/ColorPicker.vue_vue_type_script_setup_true_lang.js +301 -0
- package/dist/primitives/ColorPicker/ColorPicker.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/primitives/Combobox/Combobox.js +7 -0
- package/dist/primitives/Combobox/Combobox.js.map +1 -0
- package/dist/primitives/Combobox/Combobox.vue.d.ts +205 -0
- package/dist/primitives/Combobox/Combobox.vue.d.ts.map +1 -0
- package/dist/primitives/Combobox/Combobox.vue_vue_type_script_setup_true_lang.js +345 -0
- package/dist/primitives/Combobox/Combobox.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/primitives/ContextMenu/ContextMenu.js +7 -0
- package/dist/primitives/ContextMenu/ContextMenu.js.map +1 -0
- package/dist/primitives/ContextMenu/ContextMenu.vue.d.ts +55 -0
- package/dist/primitives/ContextMenu/ContextMenu.vue.d.ts.map +1 -0
- package/dist/primitives/ContextMenu/ContextMenu.vue_vue_type_script_setup_true_lang.js +82 -0
- package/dist/primitives/ContextMenu/ContextMenu.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/primitives/DatePicker/DatePicker.js +7 -0
- package/dist/primitives/DatePicker/DatePicker.js.map +1 -0
- package/dist/primitives/DatePicker/DatePicker.vue.d.ts +102 -0
- package/dist/primitives/DatePicker/DatePicker.vue.d.ts.map +1 -0
- package/dist/primitives/DatePicker/DatePicker.vue_vue_type_script_setup_true_lang.js +292 -0
- package/dist/primitives/DatePicker/DatePicker.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/primitives/DateRangePicker/DateRangePicker.js +7 -0
- package/dist/primitives/DateRangePicker/DateRangePicker.js.map +1 -0
- package/dist/primitives/DateRangePicker/DateRangePicker.vue.d.ts +173 -0
- package/dist/primitives/DateRangePicker/DateRangePicker.vue.d.ts.map +1 -0
- package/dist/primitives/DateRangePicker/DateRangePicker.vue_vue_type_script_setup_true_lang.js +412 -0
- package/dist/primitives/DateRangePicker/DateRangePicker.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/primitives/DateTimePicker/DateTimePicker.js +7 -0
- package/dist/primitives/DateTimePicker/DateTimePicker.js.map +1 -0
- package/dist/primitives/DateTimePicker/DateTimePicker.vue.d.ts +113 -0
- package/dist/primitives/DateTimePicker/DateTimePicker.vue.d.ts.map +1 -0
- package/dist/primitives/DateTimePicker/DateTimePicker.vue_vue_type_script_setup_true_lang.js +358 -0
- package/dist/primitives/DateTimePicker/DateTimePicker.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/primitives/DateTimeRangePicker/DateTimeRangePicker.js +7 -0
- package/dist/primitives/DateTimeRangePicker/DateTimeRangePicker.js.map +1 -0
- package/dist/primitives/DateTimeRangePicker/DateTimeRangePicker.vue.d.ts +181 -0
- package/dist/primitives/DateTimeRangePicker/DateTimeRangePicker.vue.d.ts.map +1 -0
- package/dist/primitives/DateTimeRangePicker/DateTimeRangePicker.vue_vue_type_script_setup_true_lang.js +562 -0
- package/dist/primitives/DateTimeRangePicker/DateTimeRangePicker.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/primitives/Dialog/Dialog.js +2 -2
- package/dist/primitives/Dialog/Dialog.js.map +1 -1
- package/dist/primitives/Dialog/Dialog.vue.d.ts +39 -0
- package/dist/primitives/Dialog/Dialog.vue.d.ts.map +1 -1
- package/dist/primitives/Dialog/Dialog.vue_vue_type_script_setup_true_lang.js +14 -5
- package/dist/primitives/Dialog/Dialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/primitives/Drawer/Drawer.js +7 -0
- package/dist/primitives/Drawer/Drawer.js.map +1 -0
- package/dist/primitives/Drawer/Drawer.vue.d.ts +110 -0
- package/dist/primitives/Drawer/Drawer.vue.d.ts.map +1 -0
- package/dist/primitives/Drawer/Drawer.vue_vue_type_script_setup_true_lang.js +223 -0
- package/dist/primitives/Drawer/Drawer.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/primitives/DropdownMenu/DropdownMenu.js.map +1 -1
- package/dist/primitives/DropdownMenu/DropdownMenu.vue.d.ts.map +1 -1
- package/dist/primitives/DropdownMenu/DropdownMenu.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/primitives/DropdownMenu/DropdownMenu.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/primitives/Editable/Editable.js +7 -0
- package/dist/primitives/Editable/Editable.js.map +1 -0
- package/dist/primitives/Editable/Editable.vue.d.ts +200 -0
- package/dist/primitives/Editable/Editable.vue.d.ts.map +1 -0
- package/dist/primitives/Editable/Editable.vue_vue_type_script_setup_true_lang.js +275 -0
- package/dist/primitives/Editable/Editable.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/primitives/Field/Field.js.map +1 -1
- package/dist/primitives/Field/Field.vue.d.ts +32 -17
- package/dist/primitives/Field/Field.vue.d.ts.map +1 -1
- package/dist/primitives/Field/Field.vue_vue_type_script_setup_true_lang.js +51 -18
- package/dist/primitives/Field/Field.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/primitives/Fieldset/Fieldset.js +7 -0
- package/dist/primitives/Fieldset/Fieldset.js.map +1 -0
- package/dist/primitives/Fieldset/Fieldset.vue.d.ts +91 -0
- package/dist/primitives/Fieldset/Fieldset.vue.d.ts.map +1 -0
- package/dist/primitives/Fieldset/Fieldset.vue_vue_type_script_setup_true_lang.js +138 -0
- package/dist/primitives/Fieldset/Fieldset.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/primitives/FileUpload/FileUpload.js +7 -0
- package/dist/primitives/FileUpload/FileUpload.js.map +1 -0
- package/dist/primitives/FileUpload/FileUpload.vue.d.ts +132 -0
- package/dist/primitives/FileUpload/FileUpload.vue.d.ts.map +1 -0
- package/dist/primitives/FileUpload/FileUpload.vue_vue_type_script_setup_true_lang.js +359 -0
- package/dist/primitives/FileUpload/FileUpload.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/primitives/HoverCard/HoverCard.js +7 -0
- package/dist/primitives/HoverCard/HoverCard.js.map +1 -0
- package/dist/primitives/HoverCard/HoverCard.vue.d.ts +68 -0
- package/dist/primitives/HoverCard/HoverCard.vue.d.ts.map +1 -0
- package/dist/primitives/HoverCard/HoverCard.vue_vue_type_script_setup_true_lang.js +62 -0
- package/dist/primitives/HoverCard/HoverCard.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/primitives/IconButton/IconButton.js +7 -0
- package/dist/primitives/IconButton/IconButton.js.map +1 -0
- package/dist/primitives/IconButton/IconButton.vue.d.ts +45 -0
- package/dist/primitives/IconButton/IconButton.vue.d.ts.map +1 -0
- package/dist/primitives/IconButton/IconButton.vue_vue_type_script_setup_true_lang.js +58 -0
- package/dist/primitives/IconButton/IconButton.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/primitives/Indicator/Indicator.js +7 -0
- package/dist/primitives/Indicator/Indicator.js.map +1 -0
- package/dist/primitives/Indicator/Indicator.vue.d.ts +144 -0
- package/dist/primitives/Indicator/Indicator.vue.d.ts.map +1 -0
- package/dist/primitives/Indicator/Indicator.vue_vue_type_script_setup_true_lang.js +198 -0
- package/dist/primitives/Indicator/Indicator.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/primitives/Link/Link.js +7 -0
- package/dist/primitives/Link/Link.js.map +1 -0
- package/dist/primitives/Link/Link.vue.d.ts +46 -0
- package/dist/primitives/Link/Link.vue.d.ts.map +1 -0
- package/dist/primitives/Link/Link.vue_vue_type_script_setup_true_lang.js +85 -0
- package/dist/primitives/Link/Link.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/primitives/Menubar/Menubar.js.map +1 -1
- package/dist/primitives/Menubar/Menubar.vue.d.ts.map +1 -1
- package/dist/primitives/Menubar/Menubar.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/primitives/Menubar/Menubar.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/primitives/NumberField/NumberField.js +2 -2
- package/dist/primitives/NumberField/NumberField.js.map +1 -1
- package/dist/primitives/NumberField/NumberField.vue.d.ts +86 -25
- package/dist/primitives/NumberField/NumberField.vue.d.ts.map +1 -1
- package/dist/primitives/NumberField/NumberField.vue_vue_type_script_setup_true_lang.js +83 -39
- package/dist/primitives/NumberField/NumberField.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/primitives/OtpInput/OtpInput.js +7 -0
- package/dist/primitives/OtpInput/OtpInput.js.map +1 -0
- package/dist/primitives/OtpInput/OtpInput.vue.d.ts +110 -0
- package/dist/primitives/OtpInput/OtpInput.vue.d.ts.map +1 -0
- package/dist/primitives/OtpInput/OtpInput.vue_vue_type_script_setup_true_lang.js +130 -0
- package/dist/primitives/OtpInput/OtpInput.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/primitives/Pagination/Pagination.js +7 -0
- package/dist/primitives/Pagination/Pagination.js.map +1 -0
- package/dist/primitives/Pagination/Pagination.vue.d.ts +143 -0
- package/dist/primitives/Pagination/Pagination.vue.d.ts.map +1 -0
- package/dist/primitives/Pagination/Pagination.vue_vue_type_script_setup_true_lang.js +231 -0
- package/dist/primitives/Pagination/Pagination.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/primitives/Progress/Progress.js +2 -2
- package/dist/primitives/Progress/Progress.js.map +1 -1
- package/dist/primitives/Progress/Progress.vue.d.ts +81 -15
- package/dist/primitives/Progress/Progress.vue.d.ts.map +1 -1
- package/dist/primitives/Progress/Progress.vue_vue_type_script_setup_true_lang.js +88 -22
- package/dist/primitives/Progress/Progress.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/primitives/RadialProgress/RadialProgress.js +7 -0
- package/dist/primitives/RadialProgress/RadialProgress.js.map +1 -0
- package/dist/primitives/RadialProgress/RadialProgress.vue.d.ts +96 -0
- package/dist/primitives/RadialProgress/RadialProgress.vue.d.ts.map +1 -0
- package/dist/primitives/RadialProgress/RadialProgress.vue_vue_type_script_setup_true_lang.js +189 -0
- package/dist/primitives/RadialProgress/RadialProgress.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/primitives/RadioGroup/RadioGroup.js.map +1 -1
- package/dist/primitives/RadioGroup/RadioGroup.vue.d.ts +7 -7
- package/dist/primitives/RadioGroup/RadioGroup.vue.d.ts.map +1 -1
- package/dist/primitives/RadioGroup/RadioGroup.vue_vue_type_script_setup_true_lang.js +26 -9
- package/dist/primitives/RadioGroup/RadioGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/primitives/Rating/Rating.js +7 -0
- package/dist/primitives/Rating/Rating.js.map +1 -0
- package/dist/primitives/Rating/Rating.vue.d.ts +113 -0
- package/dist/primitives/Rating/Rating.vue.d.ts.map +1 -0
- package/dist/primitives/Rating/Rating.vue_vue_type_script_setup_true_lang.js +282 -0
- package/dist/primitives/Rating/Rating.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/primitives/ScrollArea/ScrollArea.js +7 -0
- package/dist/primitives/ScrollArea/ScrollArea.js.map +1 -0
- package/dist/primitives/ScrollArea/ScrollArea.vue.d.ts +25 -0
- package/dist/primitives/ScrollArea/ScrollArea.vue.d.ts.map +1 -0
- package/dist/primitives/ScrollArea/ScrollArea.vue_vue_type_script_setup_true_lang.js +45 -0
- package/dist/primitives/ScrollArea/ScrollArea.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/primitives/SegmentedControl/SegmentedControl.js.map +1 -1
- package/dist/primitives/SegmentedControl/SegmentedControl.vue.d.ts +5 -5
- package/dist/primitives/SegmentedControl/SegmentedControl.vue.d.ts.map +1 -1
- package/dist/primitives/SegmentedControl/SegmentedControl.vue_vue_type_script_setup_true_lang.js +51 -8
- package/dist/primitives/SegmentedControl/SegmentedControl.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/primitives/Select/Select.js.map +1 -1
- package/dist/primitives/Select/Select.vue.d.ts +10 -10
- package/dist/primitives/Select/Select.vue.d.ts.map +1 -1
- package/dist/primitives/Select/Select.vue_vue_type_script_setup_true_lang.js +105 -52
- package/dist/primitives/Select/Select.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/primitives/Skeleton/Skeleton.vue.d.ts +1 -1
- package/dist/primitives/Slider/Slider.js.map +1 -1
- package/dist/primitives/Slider/Slider.vue.d.ts +24 -4
- package/dist/primitives/Slider/Slider.vue.d.ts.map +1 -1
- package/dist/primitives/Slider/Slider.vue_vue_type_script_setup_true_lang.js +79 -9
- package/dist/primitives/Slider/Slider.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/primitives/SpeedDial/SpeedDial.js +7 -0
- package/dist/primitives/SpeedDial/SpeedDial.js.map +1 -0
- package/dist/primitives/SpeedDial/SpeedDial.vue.d.ts +58 -0
- package/dist/primitives/SpeedDial/SpeedDial.vue.d.ts.map +1 -0
- package/dist/primitives/SpeedDial/SpeedDial.vue_vue_type_script_setup_true_lang.js +175 -0
- package/dist/primitives/SpeedDial/SpeedDial.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/primitives/Stepper/Stepper.js +7 -0
- package/dist/primitives/Stepper/Stepper.js.map +1 -0
- package/dist/primitives/Stepper/Stepper.vue.d.ts +119 -0
- package/dist/primitives/Stepper/Stepper.vue.d.ts.map +1 -0
- package/dist/primitives/Stepper/Stepper.vue_vue_type_script_setup_true_lang.js +202 -0
- package/dist/primitives/Stepper/Stepper.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/primitives/Switch/Switch.js.map +1 -1
- package/dist/primitives/Switch/Switch.vue.d.ts +13 -3
- package/dist/primitives/Switch/Switch.vue.d.ts.map +1 -1
- package/dist/primitives/Switch/Switch.vue_vue_type_script_setup_true_lang.js +34 -5
- package/dist/primitives/Switch/Switch.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/primitives/Tabs/Tabs.js.map +1 -1
- package/dist/primitives/Tabs/Tabs.vue.d.ts.map +1 -1
- package/dist/primitives/Tabs/Tabs.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/primitives/Tabs/Tabs.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/primitives/TagsInput/TagsInput.js +7 -0
- package/dist/primitives/TagsInput/TagsInput.js.map +1 -0
- package/dist/primitives/TagsInput/TagsInput.vue.d.ts +156 -0
- package/dist/primitives/TagsInput/TagsInput.vue.d.ts.map +1 -0
- package/dist/primitives/TagsInput/TagsInput.vue_vue_type_script_setup_true_lang.js +387 -0
- package/dist/primitives/TagsInput/TagsInput.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/primitives/TextField/TextField.js +2 -2
- package/dist/primitives/TextField/TextField.js.map +1 -1
- package/dist/primitives/TextField/TextField.vue.d.ts +119 -10
- package/dist/primitives/TextField/TextField.vue.d.ts.map +1 -1
- package/dist/primitives/TextField/TextField.vue_vue_type_script_setup_true_lang.js +270 -21
- package/dist/primitives/TextField/TextField.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/primitives/Textarea/Textarea.js +2 -2
- package/dist/primitives/Textarea/Textarea.js.map +1 -1
- package/dist/primitives/Textarea/Textarea.vue.d.ts +114 -14
- package/dist/primitives/Textarea/Textarea.vue.d.ts.map +1 -1
- package/dist/primitives/Textarea/Textarea.vue_vue_type_script_setup_true_lang.js +216 -20
- package/dist/primitives/Textarea/Textarea.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/primitives/TimePicker/TimePicker.js +7 -0
- package/dist/primitives/TimePicker/TimePicker.js.map +1 -0
- package/dist/primitives/TimePicker/TimePicker.vue.d.ts +111 -0
- package/dist/primitives/TimePicker/TimePicker.vue.d.ts.map +1 -0
- package/dist/primitives/TimePicker/TimePicker.vue_vue_type_script_setup_true_lang.js +185 -0
- package/dist/primitives/TimePicker/TimePicker.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/primitives/Toast/Toast.js +2 -1
- package/dist/primitives/Toast/Toast.js.map +1 -1
- package/dist/primitives/Toast/Toast.vue.d.ts +29 -3
- package/dist/primitives/Toast/Toast.vue.d.ts.map +1 -1
- package/dist/primitives/Toast/Toast.vue_vue_type_script_setup_true_lang.js +17 -7
- package/dist/primitives/Toast/Toast.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/primitives/Toast/ToastItem.js +2 -2
- package/dist/primitives/Toast/ToastItem.js.map +1 -1
- package/dist/primitives/Toast/ToastItem.vue.d.ts +69 -12
- package/dist/primitives/Toast/ToastItem.vue.d.ts.map +1 -1
- package/dist/primitives/Toast/ToastItem.vue_vue_type_script_setup_true_lang.js +23 -23
- package/dist/primitives/Toast/ToastItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/primitives/Tooltip/Tooltip.vue.d.ts +1 -1
- package/dist/primitives/Tooltip/Tooltip.vue.d.ts.map +1 -1
- package/dist/primitives/WindowControls/WindowControls.js +2 -2
- package/dist/primitives/WindowControls/WindowControls.js.map +1 -1
- package/dist/primitives/WindowControls/WindowControls.vue.d.ts +66 -10
- package/dist/primitives/WindowControls/WindowControls.vue.d.ts.map +1 -1
- package/dist/primitives/WindowControls/WindowControls.vue_vue_type_script_setup_true_lang.js +23 -13
- package/dist/primitives/WindowControls/WindowControls.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/styles/global.css +116 -17
- package/dist/styles/theme.contrast.test.ts +460 -0
- package/dist/styles/theme.css +239 -41
- package/dist/theme.js +171 -0
- package/dist/theme.js.map +1 -0
- package/package.json +14 -4
- package/dist/icons/BrandMark.d.ts +0 -18
- package/dist/icons/BrandMark.d.ts.map +0 -1
- package/dist/icons/BrandMark.js +0 -47
- package/dist/icons/BrandMark.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Center.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/composition/Center/Center.vue"],"sourcesContent":["<script lang=\"ts\">\n/**\n * Center — centered content with a max-width constraint.\n *\n * A horizontally centered block that caps its own width and widens its\n * gutters at wider breakpoints. Critical for ultra-wide viewports, where\n * content that stretches to infinity is unreadable: the extra viewport goes\n * to intentional whitespace, never to stretching lines of text or card grids.\n *\n * A Center is a component, not `mx-auto max-w-3xl px-4`, because the\n * gutters step up at breakpoints (the component's job, not every call\n * site's) and the `maxWidth` prop names readable intent rather than a\n * Tailwind size.\n */\nexport type CenterMaxWidth = \"sm\" | \"md\" | \"lg\" | \"xl\" | \"prose\";\n\nconst maxWidthClass: Record<CenterMaxWidth, string> = {\n sm: \"max-w-sm\",\n md: \"max-w-md\",\n lg: \"max-w-lg\",\n xl: \"max-w-xl\",\n prose: \"max-w-prose\",\n} as const;\n\nexport { maxWidthClass };\n</script>\n\n<script setup lang=\"ts\">\nimport { cn } from \"../../lib/cn\";\n\nwithDefaults(\n defineProps<{\n /** Maximum content width — names intent rather than a pixel value. */\n maxWidth?: CenterMaxWidth;\n /** Whether to add horizontal gutters that widen at wider breakpoints. */\n gutter?: boolean;\n }>(),\n { maxWidth: \"lg\", gutter: true },\n);\n</script>\n\n<template>\n <!--\n Gutters step up at `sm` and `3xl`: narrow viewports need less margin\n because the viewport itself is margin, and ultra-wide viewports need more\n so the gap between content and screen edge stays proportional.\n -->\n <div\n :class=\"cn(maxWidthClass[maxWidth], 'mx-auto', gutter ? 'px-4 sm:px-6 3xl:px-8' : undefined)\"\n >\n <slot />\n </div>\n</template>\n"],"mappings":";;;AAgBA,IAAM,gBAAgD;CACpD,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,OAAO;AACT;;;;;;;;;;;;GAyBE,OAAA,UAAA,GAAA,mBAIM,OAAA,EAHH,OAAK,eAAE,MAAA,EAAA,CAAE,CAAC,cAAc,QAAA,WAAQ,WAAc,QAAA,SAAM,0BAA6B,KAAA,CAAS,CAAA,EAAA,GAAA,CAE3F,WAAQ,KAAA,QAAA,SAAA,CAAA,GAAA,CAAA"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import Frame_vue_vue_type_script_setup_true_lang_default, { aspectRatioValue } from "./Frame.vue_vue_type_script_setup_true_lang.js";
|
|
2
|
+
//#region src/composition/Frame/Frame.vue
|
|
3
|
+
var Frame_default = Frame_vue_vue_type_script_setup_true_lang_default;
|
|
4
|
+
//#endregion
|
|
5
|
+
export { aspectRatioValue, Frame_default as default };
|
|
6
|
+
|
|
7
|
+
//# sourceMappingURL=Frame.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Frame.js","names":[],"sources":["../../../src/composition/Frame/Frame.vue"],"sourcesContent":["<script lang=\"ts\">\n/**\n * Frame — fixed-ratio container.\n *\n * A container that maintains a consistent aspect ratio regardless of its\n * width, using CSS `aspect-ratio`. Useful for media embeds, image thumbnails,\n * and any content that needs a fixed ratio (video players, avatar crops,\n * card illustrations).\n *\n * A Frame is a component, not `aspect-video`, because the `ratio` prop\n * names the intent (\"16:9\", \"1:1\") rather than requiring the caller to\n * compute the `aspect-ratio` value, and the component handles the\n * `overflow: hidden` that prevents content from distorting the frame.\n */\nexport type FrameRatio = \"16:9\" | \"4:3\" | \"1:1\" | \"3:4\";\n\nconst aspectRatioValue: Record<FrameRatio, string> = {\n \"16:9\": \"16 / 9\",\n \"4:3\": \"4 / 3\",\n \"1:1\": \"1 / 1\",\n \"3:4\": \"3 / 4\",\n} as const;\n\nexport { aspectRatioValue };\n</script>\n\n<script setup lang=\"ts\">\nimport { cn } from \"../../lib/cn\";\n\nwithDefaults(\n defineProps<{\n /** The aspect ratio to maintain. Named ratios or any valid CSS `aspect-ratio` value (e.g. \"21 / 9\"). */\n ratio?: FrameRatio | string;\n }>(),\n { ratio: \"16:9\" },\n);\n\n/** Resolve a named ratio or pass through a raw CSS value. */\nfunction resolveRatio(r: FrameRatio | string): string {\n return r in aspectRatioValue ? aspectRatioValue[r as FrameRatio] : r;\n}\n</script>\n\n<template>\n <div :class=\"cn('relative overflow-hidden w-full')\" :style=\"{ aspectRatio: resolveRatio(ratio) }\">\n <slot />\n </div>\n</template>\n"],"mappings":""}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Frame — fixed-ratio container.
|
|
3
|
+
*
|
|
4
|
+
* A container that maintains a consistent aspect ratio regardless of its
|
|
5
|
+
* width, using CSS `aspect-ratio`. Useful for media embeds, image thumbnails,
|
|
6
|
+
* and any content that needs a fixed ratio (video players, avatar crops,
|
|
7
|
+
* card illustrations).
|
|
8
|
+
*
|
|
9
|
+
* A Frame is a component, not `aspect-video`, because the `ratio` prop
|
|
10
|
+
* names the intent ("16:9", "1:1") rather than requiring the caller to
|
|
11
|
+
* compute the `aspect-ratio` value, and the component handles the
|
|
12
|
+
* `overflow: hidden` that prevents content from distorting the frame.
|
|
13
|
+
*/
|
|
14
|
+
export type FrameRatio = "16:9" | "4:3" | "1:1" | "3:4";
|
|
15
|
+
declare const aspectRatioValue: Record<FrameRatio, string>;
|
|
16
|
+
export { aspectRatioValue };
|
|
17
|
+
declare const _default: typeof __VLS_export;
|
|
18
|
+
export default _default;
|
|
19
|
+
declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<{
|
|
20
|
+
/** The aspect ratio to maintain. Named ratios or any valid CSS `aspect-ratio` value (e.g. "21 / 9"). */
|
|
21
|
+
ratio?: FrameRatio | string;
|
|
22
|
+
}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{
|
|
23
|
+
/** The aspect ratio to maintain. Named ratios or any valid CSS `aspect-ratio` value (e.g. "21 / 9"). */
|
|
24
|
+
ratio?: FrameRatio | string;
|
|
25
|
+
}> & Readonly<{}>, {
|
|
26
|
+
ratio: FrameRatio | string;
|
|
27
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, {
|
|
28
|
+
default?: (props: {}) => any;
|
|
29
|
+
}>;
|
|
30
|
+
type __VLS_WithSlots<T, S> = T & {
|
|
31
|
+
new (): {
|
|
32
|
+
$slots: S;
|
|
33
|
+
};
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=Frame.vue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Frame.vue.d.ts","sourceRoot":"","sources":["../../../src/composition/Frame/Frame.vue"],"names":[],"mappings":"AAsDA;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;AAExD,QAAA,MAAM,gBAAgB,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAKvC,CAAC;AAEX,OAAO,EAAE,gBAAgB,EAAE,CAAC;wBACP,OAAO,YAAY;AAAxC,wBAAyC;AACzC,QAAA,MAAM,YAAY;IAEd,wGAAwG;YAChG,UAAU,GAAG,MAAM;;IAD3B,wGAAwG;YAChG,UAAU,GAAG,MAAM;;WAAnB,UAAU,GAAG,MAAM;;cAwCjB,CAAC,KAAK,IAAgB,KAAK,GAAG;EAUxC,CAAC;AAWL,KAAK,eAAe,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IAChC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KACV,CAAA;CACD,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { cn } from "../../lib/cn.js";
|
|
2
|
+
import { createElementBlock, defineComponent, normalizeClass, normalizeStyle, openBlock, renderSlot, unref } from "vue";
|
|
3
|
+
//#region src/composition/Frame/Frame.vue?vue&type=script&setup=true&lang.ts
|
|
4
|
+
var aspectRatioValue = {
|
|
5
|
+
"16:9": "16 / 9",
|
|
6
|
+
"4:3": "4 / 3",
|
|
7
|
+
"1:1": "1 / 1",
|
|
8
|
+
"3:4": "3 / 4"
|
|
9
|
+
};
|
|
10
|
+
var Frame_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
|
|
11
|
+
__name: "Frame",
|
|
12
|
+
props: { ratio: { default: "16:9" } },
|
|
13
|
+
setup(__props) {
|
|
14
|
+
/** Resolve a named ratio or pass through a raw CSS value. */
|
|
15
|
+
function resolveRatio(r) {
|
|
16
|
+
return r in aspectRatioValue ? aspectRatioValue[r] : r;
|
|
17
|
+
}
|
|
18
|
+
return (_ctx, _cache) => {
|
|
19
|
+
return openBlock(), createElementBlock("div", {
|
|
20
|
+
class: normalizeClass(unref(cn)("relative overflow-hidden w-full")),
|
|
21
|
+
style: normalizeStyle({ aspectRatio: resolveRatio(__props.ratio) })
|
|
22
|
+
}, [renderSlot(_ctx.$slots, "default")], 6);
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
//#endregion
|
|
27
|
+
export { aspectRatioValue, Frame_vue_vue_type_script_setup_true_lang_default as default };
|
|
28
|
+
|
|
29
|
+
//# sourceMappingURL=Frame.vue_vue_type_script_setup_true_lang.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Frame.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/composition/Frame/Frame.vue"],"sourcesContent":["<script lang=\"ts\">\n/**\n * Frame — fixed-ratio container.\n *\n * A container that maintains a consistent aspect ratio regardless of its\n * width, using CSS `aspect-ratio`. Useful for media embeds, image thumbnails,\n * and any content that needs a fixed ratio (video players, avatar crops,\n * card illustrations).\n *\n * A Frame is a component, not `aspect-video`, because the `ratio` prop\n * names the intent (\"16:9\", \"1:1\") rather than requiring the caller to\n * compute the `aspect-ratio` value, and the component handles the\n * `overflow: hidden` that prevents content from distorting the frame.\n */\nexport type FrameRatio = \"16:9\" | \"4:3\" | \"1:1\" | \"3:4\";\n\nconst aspectRatioValue: Record<FrameRatio, string> = {\n \"16:9\": \"16 / 9\",\n \"4:3\": \"4 / 3\",\n \"1:1\": \"1 / 1\",\n \"3:4\": \"3 / 4\",\n} as const;\n\nexport { aspectRatioValue };\n</script>\n\n<script setup lang=\"ts\">\nimport { cn } from \"../../lib/cn\";\n\nwithDefaults(\n defineProps<{\n /** The aspect ratio to maintain. Named ratios or any valid CSS `aspect-ratio` value (e.g. \"21 / 9\"). */\n ratio?: FrameRatio | string;\n }>(),\n { ratio: \"16:9\" },\n);\n\n/** Resolve a named ratio or pass through a raw CSS value. */\nfunction resolveRatio(r: FrameRatio | string): string {\n return r in aspectRatioValue ? aspectRatioValue[r as FrameRatio] : r;\n}\n</script>\n\n<template>\n <div :class=\"cn('relative overflow-hidden w-full')\" :style=\"{ aspectRatio: resolveRatio(ratio) }\">\n <slot />\n </div>\n</template>\n"],"mappings":";;;AAgBA,IAAM,mBAA+C;CACnD,QAAQ;CACR,OAAO;CACP,OAAO;CACP,OAAO;AACT;;;;;;EAiBA,SAAS,aAAa,GAAgC;GACpD,OAAO,KAAK,mBAAmB,iBAAiB,KAAmB;EACrE;;GAIE,OAAA,UAAA,GAAA,mBAEM,OAAA;IAFA,OAAK,eAAE,MAAA,EAAA,CAAE,CAAA,iCAAA,CAAA;IAAsC,OAAK,eAAA,EAAA,aAAiB,aAAa,QAAA,KAAK,EAAA,CAAA;GAC3F,GAAA,CAAA,WAAQ,KAAA,QAAA,SAAA,CAAA,GAAA,CAAA"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import Grid_vue_vue_type_script_setup_true_lang_default, { gapClass } from "./Grid.vue_vue_type_script_setup_true_lang.js";
|
|
2
|
+
//#region src/composition/Grid/Grid.vue
|
|
3
|
+
var Grid_default = Grid_vue_vue_type_script_setup_true_lang_default;
|
|
4
|
+
//#endregion
|
|
5
|
+
export { Grid_default as default, gapClass };
|
|
6
|
+
|
|
7
|
+
//# sourceMappingURL=Grid.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Grid.js","names":[],"sources":["../../../src/composition/Grid/Grid.vue"],"sourcesContent":["<script lang=\"ts\">\n/**\n * Grid — CSS Grid with responsive column count.\n *\n * A grid that derives its column count from the container's own width\n * (`auto-fit` + `minmax`, never fixed `grid-cols-N` breakpoints), so the same\n * grid reflows inside a sidebar-narrowed workspace and full-bleed on an\n * ultra-wide monitor alike.\n *\n * A Grid is a component, not `grid grid-cols-3 gap-4`, because the responsive\n * column count is the component's job (a fixed count needs one breakpoint per\n * viewport and is already wrong the moment the grid sits in a sidebar narrower\n * than the viewport), and the gap tightens one step below `sm` like Stack and\n * DashboardGrid.\n */\nexport type GridGap = \"sm\" | \"md\" | \"lg\";\n\nconst gapClass: Record<GridGap, string> = {\n sm: \"gap-2 sm:gap-3\",\n md: \"gap-3 sm:gap-4\",\n lg: \"gap-4 sm:gap-6\",\n} as const;\n\nexport { gapClass };\n</script>\n\n<script setup lang=\"ts\">\nimport { cn } from \"../../lib/cn\";\n\nwithDefaults(\n defineProps<{\n /** Narrowest a column may get before the grid drops to fewer columns. Any valid CSS length (e.g. \"14rem\"). */\n minColWidth?: string;\n /** Column/row gap step — mirrors Stack's scale. Tightens one notch below `sm`. */\n gap?: GridGap;\n }>(),\n { minColWidth: \"16rem\", gap: \"md\" },\n);\n</script>\n\n<template>\n <div\n class=\"grid\"\n :class=\"cn(gapClass[gap])\"\n :style=\"{ gridTemplateColumns: `repeat(auto-fit, minmax(min(100%, ${minColWidth}), 1fr))` }\"\n >\n <slot />\n </div>\n</template>\n"],"mappings":""}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Grid — CSS Grid with responsive column count.
|
|
3
|
+
*
|
|
4
|
+
* A grid that derives its column count from the container's own width
|
|
5
|
+
* (`auto-fit` + `minmax`, never fixed `grid-cols-N` breakpoints), so the same
|
|
6
|
+
* grid reflows inside a sidebar-narrowed workspace and full-bleed on an
|
|
7
|
+
* ultra-wide monitor alike.
|
|
8
|
+
*
|
|
9
|
+
* A Grid is a component, not `grid grid-cols-3 gap-4`, because the responsive
|
|
10
|
+
* column count is the component's job (a fixed count needs one breakpoint per
|
|
11
|
+
* viewport and is already wrong the moment the grid sits in a sidebar narrower
|
|
12
|
+
* than the viewport), and the gap tightens one step below `sm` like Stack and
|
|
13
|
+
* DashboardGrid.
|
|
14
|
+
*/
|
|
15
|
+
export type GridGap = "sm" | "md" | "lg";
|
|
16
|
+
declare const gapClass: Record<GridGap, string>;
|
|
17
|
+
export { gapClass };
|
|
18
|
+
declare const _default: typeof __VLS_export;
|
|
19
|
+
export default _default;
|
|
20
|
+
declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<{
|
|
21
|
+
/** Narrowest a column may get before the grid drops to fewer columns. Any valid CSS length (e.g. "14rem"). */
|
|
22
|
+
minColWidth?: string;
|
|
23
|
+
/** Column/row gap step — mirrors Stack's scale. Tightens one notch below `sm`. */
|
|
24
|
+
gap?: GridGap;
|
|
25
|
+
}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{
|
|
26
|
+
/** Narrowest a column may get before the grid drops to fewer columns. Any valid CSS length (e.g. "14rem"). */
|
|
27
|
+
minColWidth?: string;
|
|
28
|
+
/** Column/row gap step — mirrors Stack's scale. Tightens one notch below `sm`. */
|
|
29
|
+
gap?: GridGap;
|
|
30
|
+
}> & Readonly<{}>, {
|
|
31
|
+
gap: GridGap;
|
|
32
|
+
minColWidth: string;
|
|
33
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, {
|
|
34
|
+
default?: (props: {}) => any;
|
|
35
|
+
}>;
|
|
36
|
+
type __VLS_WithSlots<T, S> = T & {
|
|
37
|
+
new (): {
|
|
38
|
+
$slots: S;
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
//# sourceMappingURL=Grid.vue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Grid.vue.d.ts","sourceRoot":"","sources":["../../../src/composition/Grid/Grid.vue"],"names":[],"mappings":"AAuDA;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,OAAO,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAEzC,QAAA,MAAM,QAAQ,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAI5B,CAAC;AAEX,OAAO,EAAE,QAAQ,EAAE,CAAC;wBACC,OAAO,YAAY;AAAxC,wBAAyC;AACzC,QAAA,MAAM,YAAY;IAEd,8GAA8G;kBAChG,MAAM;IACpB,kFAAkF;UAC5E,OAAO;;IAHb,8GAA8G;kBAChG,MAAM;IACpB,kFAAkF;UAC5E,OAAO;;SAAP,OAAO;iBAFC,MAAM;;cAuCV,CAAC,KAAK,IAAgB,KAAK,GAAG;EAUxC,CAAC;AAWL,KAAK,eAAe,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IAChC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KACV,CAAA;CACD,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { cn } from "../../lib/cn.js";
|
|
2
|
+
import { createElementBlock, defineComponent, normalizeClass, normalizeStyle, openBlock, renderSlot, unref } from "vue";
|
|
3
|
+
//#region src/composition/Grid/Grid.vue?vue&type=script&setup=true&lang.ts
|
|
4
|
+
var gapClass = {
|
|
5
|
+
sm: "gap-2 sm:gap-3",
|
|
6
|
+
md: "gap-3 sm:gap-4",
|
|
7
|
+
lg: "gap-4 sm:gap-6"
|
|
8
|
+
};
|
|
9
|
+
var Grid_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
|
|
10
|
+
__name: "Grid",
|
|
11
|
+
props: {
|
|
12
|
+
minColWidth: { default: "16rem" },
|
|
13
|
+
gap: { default: "md" }
|
|
14
|
+
},
|
|
15
|
+
setup(__props) {
|
|
16
|
+
return (_ctx, _cache) => {
|
|
17
|
+
return openBlock(), createElementBlock("div", {
|
|
18
|
+
class: normalizeClass(["grid", unref(cn)(gapClass[__props.gap])]),
|
|
19
|
+
style: normalizeStyle({ gridTemplateColumns: `repeat(auto-fit, minmax(min(100%, ${__props.minColWidth}), 1fr))` })
|
|
20
|
+
}, [renderSlot(_ctx.$slots, "default")], 6);
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
//#endregion
|
|
25
|
+
export { Grid_vue_vue_type_script_setup_true_lang_default as default, gapClass };
|
|
26
|
+
|
|
27
|
+
//# sourceMappingURL=Grid.vue_vue_type_script_setup_true_lang.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Grid.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/composition/Grid/Grid.vue"],"sourcesContent":["<script lang=\"ts\">\n/**\n * Grid — CSS Grid with responsive column count.\n *\n * A grid that derives its column count from the container's own width\n * (`auto-fit` + `minmax`, never fixed `grid-cols-N` breakpoints), so the same\n * grid reflows inside a sidebar-narrowed workspace and full-bleed on an\n * ultra-wide monitor alike.\n *\n * A Grid is a component, not `grid grid-cols-3 gap-4`, because the responsive\n * column count is the component's job (a fixed count needs one breakpoint per\n * viewport and is already wrong the moment the grid sits in a sidebar narrower\n * than the viewport), and the gap tightens one step below `sm` like Stack and\n * DashboardGrid.\n */\nexport type GridGap = \"sm\" | \"md\" | \"lg\";\n\nconst gapClass: Record<GridGap, string> = {\n sm: \"gap-2 sm:gap-3\",\n md: \"gap-3 sm:gap-4\",\n lg: \"gap-4 sm:gap-6\",\n} as const;\n\nexport { gapClass };\n</script>\n\n<script setup lang=\"ts\">\nimport { cn } from \"../../lib/cn\";\n\nwithDefaults(\n defineProps<{\n /** Narrowest a column may get before the grid drops to fewer columns. Any valid CSS length (e.g. \"14rem\"). */\n minColWidth?: string;\n /** Column/row gap step — mirrors Stack's scale. Tightens one notch below `sm`. */\n gap?: GridGap;\n }>(),\n { minColWidth: \"16rem\", gap: \"md\" },\n);\n</script>\n\n<template>\n <div\n class=\"grid\"\n :class=\"cn(gapClass[gap])\"\n :style=\"{ gridTemplateColumns: `repeat(auto-fit, minmax(min(100%, ${minColWidth}), 1fr))` }\"\n >\n <slot />\n </div>\n</template>\n"],"mappings":";;;AAiBA,IAAM,WAAoC;CACxC,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;;;;;;;;;GAoBE,OAAA,UAAA,GAAA,mBAMM,OAAA;IALJ,OAAK,eAAA,CAAC,QACE,MAAA,EAAA,CAAE,CAAC,SAAS,QAAA,IAAG,CAAA,CAAA;IACtB,OAAK,eAAA,EAAA,qBAAA,qCAA8D,QAAA,YAAW,UAAA,CAAA;GAE/E,GAAA,CAAA,WAAQ,KAAA,QAAA,SAAA,CAAA,GAAA,CAAA"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import Inline_vue_vue_type_script_setup_true_lang_default, { alignClass, gapClass } from "./Inline.vue_vue_type_script_setup_true_lang.js";
|
|
2
|
+
//#region src/composition/Inline/Inline.vue
|
|
3
|
+
var Inline_default = Inline_vue_vue_type_script_setup_true_lang_default;
|
|
4
|
+
//#endregion
|
|
5
|
+
export { alignClass, Inline_default as default, gapClass };
|
|
6
|
+
|
|
7
|
+
//# sourceMappingURL=Inline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Inline.js","names":[],"sources":["../../../src/composition/Inline/Inline.vue"],"sourcesContent":["<script lang=\"ts\">\n/**\n * Inline — horizontal flow with wrap, consistent gap.\n *\n * A flex row that wraps naturally at the container edge and tightens its gutter\n * one step below the `sm` breakpoint. The gap steps mirror Stack's and\n * DashboardGrid's: the value each step names applies from `sm` up, and drops\n * one notch below it.\n *\n * An Inline is a component, not `flex flex-row flex-wrap gap-4`, because the\n * responsive gap is the component's job, the `align` prop maps cross-axis\n * intent to a class, and the `wrap` prop controls line-wrapping behaviour.\n */\nexport type InlineGap = \"sm\" | \"md\" | \"lg\";\n\nexport type InlineAlign = \"start\" | \"center\" | \"end\" | \"stretch\" | \"baseline\";\n\nconst gapClass: Record<InlineGap, string> = {\n sm: \"gap-2 sm:gap-3\",\n md: \"gap-3 sm:gap-4\",\n lg: \"gap-4 sm:gap-6\",\n} as const;\n\nconst alignClass: Record<InlineAlign, string> = {\n start: \"items-start\",\n center: \"items-center\",\n end: \"items-end\",\n stretch: \"items-stretch\",\n baseline: \"items-baseline\",\n} as const;\n\nexport { gapClass, alignClass };\n</script>\n\n<script setup lang=\"ts\">\nimport { cn } from \"../../lib/cn\";\n\nwithDefaults(\n defineProps<{\n /** Horizontal gap step — mirrors Stack's scale. Tightens one notch below `sm`. */\n gap?: InlineGap;\n /** Cross-axis alignment of children. */\n align?: InlineAlign;\n /** Whether items wrap to new lines when they exceed the container width. */\n wrap?: boolean;\n }>(),\n { gap: \"md\", align: \"stretch\", wrap: true },\n);\n</script>\n\n<template>\n <div\n :class=\"\n cn('flex flex-row', gapClass[gap], alignClass[align], wrap ? 'flex-wrap' : 'flex-nowrap')\n \"\n >\n <slot />\n </div>\n</template>\n"],"mappings":""}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Inline — horizontal flow with wrap, consistent gap.
|
|
3
|
+
*
|
|
4
|
+
* A flex row that wraps naturally at the container edge and tightens its gutter
|
|
5
|
+
* one step below the `sm` breakpoint. The gap steps mirror Stack's and
|
|
6
|
+
* DashboardGrid's: the value each step names applies from `sm` up, and drops
|
|
7
|
+
* one notch below it.
|
|
8
|
+
*
|
|
9
|
+
* An Inline is a component, not `flex flex-row flex-wrap gap-4`, because the
|
|
10
|
+
* responsive gap is the component's job, the `align` prop maps cross-axis
|
|
11
|
+
* intent to a class, and the `wrap` prop controls line-wrapping behaviour.
|
|
12
|
+
*/
|
|
13
|
+
export type InlineGap = "sm" | "md" | "lg";
|
|
14
|
+
export type InlineAlign = "start" | "center" | "end" | "stretch" | "baseline";
|
|
15
|
+
declare const gapClass: Record<InlineGap, string>;
|
|
16
|
+
declare const alignClass: Record<InlineAlign, string>;
|
|
17
|
+
export { gapClass, alignClass };
|
|
18
|
+
declare const _default: typeof __VLS_export;
|
|
19
|
+
export default _default;
|
|
20
|
+
declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<{
|
|
21
|
+
/** Horizontal gap step — mirrors Stack's scale. Tightens one notch below `sm`. */
|
|
22
|
+
gap?: InlineGap;
|
|
23
|
+
/** Cross-axis alignment of children. */
|
|
24
|
+
align?: InlineAlign;
|
|
25
|
+
/** Whether items wrap to new lines when they exceed the container width. */
|
|
26
|
+
wrap?: boolean;
|
|
27
|
+
}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{
|
|
28
|
+
/** Horizontal gap step — mirrors Stack's scale. Tightens one notch below `sm`. */
|
|
29
|
+
gap?: InlineGap;
|
|
30
|
+
/** Cross-axis alignment of children. */
|
|
31
|
+
align?: InlineAlign;
|
|
32
|
+
/** Whether items wrap to new lines when they exceed the container width. */
|
|
33
|
+
wrap?: boolean;
|
|
34
|
+
}> & Readonly<{}>, {
|
|
35
|
+
gap: InlineGap;
|
|
36
|
+
wrap: boolean;
|
|
37
|
+
align: InlineAlign;
|
|
38
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, {
|
|
39
|
+
default?: (props: {}) => any;
|
|
40
|
+
}>;
|
|
41
|
+
type __VLS_WithSlots<T, S> = T & {
|
|
42
|
+
new (): {
|
|
43
|
+
$slots: S;
|
|
44
|
+
};
|
|
45
|
+
};
|
|
46
|
+
//# sourceMappingURL=Inline.vue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Inline.vue.d.ts","sourceRoot":"","sources":["../../../src/composition/Inline/Inline.vue"],"names":[],"mappings":"AAiEA;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,SAAS,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE3C,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,QAAQ,GAAG,KAAK,GAAG,SAAS,GAAG,UAAU,CAAC;AAE9E,QAAA,MAAM,QAAQ,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAI9B,CAAC;AAEX,QAAA,MAAM,UAAU,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAMlC,CAAC;AAEX,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;wBACX,OAAO,YAAY;AAAxC,wBAAyC;AACzC,QAAA,MAAM,YAAY;IAEd,kFAAkF;UAC5E,SAAS;IACf,wCAAwC;YAChC,WAAW;IACnB,4EAA4E;WACrE,OAAO;;IALd,kFAAkF;UAC5E,SAAS;IACf,wCAAwC;YAChC,WAAW;IACnB,4EAA4E;WACrE,OAAO;;SAJR,SAAS;UAIR,OAAO;WAFN,WAAW;;cAuCT,CAAC,KAAK,IAAgB,KAAK,GAAG;EAUxC,CAAC;AAWL,KAAK,eAAe,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IAChC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KACV,CAAA;CACD,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { cn } from "../../lib/cn.js";
|
|
2
|
+
import { createElementBlock, defineComponent, normalizeClass, openBlock, renderSlot, unref } from "vue";
|
|
3
|
+
//#region src/composition/Inline/Inline.vue?vue&type=script&setup=true&lang.ts
|
|
4
|
+
var gapClass = {
|
|
5
|
+
sm: "gap-2 sm:gap-3",
|
|
6
|
+
md: "gap-3 sm:gap-4",
|
|
7
|
+
lg: "gap-4 sm:gap-6"
|
|
8
|
+
};
|
|
9
|
+
var alignClass = {
|
|
10
|
+
start: "items-start",
|
|
11
|
+
center: "items-center",
|
|
12
|
+
end: "items-end",
|
|
13
|
+
stretch: "items-stretch",
|
|
14
|
+
baseline: "items-baseline"
|
|
15
|
+
};
|
|
16
|
+
var Inline_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
|
|
17
|
+
__name: "Inline",
|
|
18
|
+
props: {
|
|
19
|
+
gap: { default: "md" },
|
|
20
|
+
align: { default: "stretch" },
|
|
21
|
+
wrap: {
|
|
22
|
+
type: Boolean,
|
|
23
|
+
default: true
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
setup(__props) {
|
|
27
|
+
return (_ctx, _cache) => {
|
|
28
|
+
return openBlock(), createElementBlock("div", { class: normalizeClass(unref(cn)("flex flex-row", gapClass[__props.gap], alignClass[__props.align], __props.wrap ? "flex-wrap" : "flex-nowrap")) }, [renderSlot(_ctx.$slots, "default")], 2);
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
//#endregion
|
|
33
|
+
export { alignClass, Inline_vue_vue_type_script_setup_true_lang_default as default, gapClass };
|
|
34
|
+
|
|
35
|
+
//# sourceMappingURL=Inline.vue_vue_type_script_setup_true_lang.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Inline.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/composition/Inline/Inline.vue"],"sourcesContent":["<script lang=\"ts\">\n/**\n * Inline — horizontal flow with wrap, consistent gap.\n *\n * A flex row that wraps naturally at the container edge and tightens its gutter\n * one step below the `sm` breakpoint. The gap steps mirror Stack's and\n * DashboardGrid's: the value each step names applies from `sm` up, and drops\n * one notch below it.\n *\n * An Inline is a component, not `flex flex-row flex-wrap gap-4`, because the\n * responsive gap is the component's job, the `align` prop maps cross-axis\n * intent to a class, and the `wrap` prop controls line-wrapping behaviour.\n */\nexport type InlineGap = \"sm\" | \"md\" | \"lg\";\n\nexport type InlineAlign = \"start\" | \"center\" | \"end\" | \"stretch\" | \"baseline\";\n\nconst gapClass: Record<InlineGap, string> = {\n sm: \"gap-2 sm:gap-3\",\n md: \"gap-3 sm:gap-4\",\n lg: \"gap-4 sm:gap-6\",\n} as const;\n\nconst alignClass: Record<InlineAlign, string> = {\n start: \"items-start\",\n center: \"items-center\",\n end: \"items-end\",\n stretch: \"items-stretch\",\n baseline: \"items-baseline\",\n} as const;\n\nexport { gapClass, alignClass };\n</script>\n\n<script setup lang=\"ts\">\nimport { cn } from \"../../lib/cn\";\n\nwithDefaults(\n defineProps<{\n /** Horizontal gap step — mirrors Stack's scale. Tightens one notch below `sm`. */\n gap?: InlineGap;\n /** Cross-axis alignment of children. */\n align?: InlineAlign;\n /** Whether items wrap to new lines when they exceed the container width. */\n wrap?: boolean;\n }>(),\n { gap: \"md\", align: \"stretch\", wrap: true },\n);\n</script>\n\n<template>\n <div\n :class=\"\n cn('flex flex-row', gapClass[gap], alignClass[align], wrap ? 'flex-wrap' : 'flex-nowrap')\n \"\n >\n <slot />\n </div>\n</template>\n"],"mappings":";;;AAiBA,IAAM,WAAsC;CAC1C,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;AAEA,IAAM,aAA0C;CAC9C,OAAO;CACP,QAAQ;CACR,KAAK;CACL,SAAS;CACT,UAAU;AACZ;;;;;;;;;;;;;GAsBE,OAAA,UAAA,GAAA,mBAMM,OAAA,EALH,OAAK,eAAS,MAAA,EAAA,CAAE,CAAA,iBAAkB,SAAS,QAAA,MAAM,WAAW,QAAA,QAAQ,QAAA,OAAI,cAAA,aAAA,CAAA,EAAA,GAAA,CAIzE,WAAQ,KAAA,QAAA,SAAA,CAAA,GAAA,CAAA"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import ScrollReel_vue_vue_type_script_setup_true_lang_default, { gapClass, snapClass } from "./ScrollReel.vue_vue_type_script_setup_true_lang.js";
|
|
2
|
+
//#region src/composition/ScrollReel/ScrollReel.vue
|
|
3
|
+
var ScrollReel_default = ScrollReel_vue_vue_type_script_setup_true_lang_default;
|
|
4
|
+
//#endregion
|
|
5
|
+
export { ScrollReel_default as default, gapClass, snapClass };
|
|
6
|
+
|
|
7
|
+
//# sourceMappingURL=ScrollReel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ScrollReel.js","names":[],"sources":["../../../src/composition/ScrollReel/ScrollReel.vue"],"sourcesContent":["<script lang=\"ts\">\n/**\n * ScrollReel — horizontal scrolling strip with scroll-snap.\n *\n * A touch-friendly, keyboard-navigable horizontal scroll container with\n * optional scroll-snap alignment. Arrow keys scroll to the next or previous\n * snap point; the `Home` and `End` keys jump to the start or end of the\n * strip.\n *\n * A ScrollReel is a component, not `overflow-x-auto snap-x snap-mandatory`,\n * because keyboard accessibility for scroll-snap requires JavaScript (arrow\n * keys must find the next snap-aligned child and scroll it into view), and\n * the gap tightens one step below `sm` like Stack and DashboardGrid.\n */\nexport type ScrollReelSnap = \"start\" | \"center\" | \"end\" | \"none\";\n\nexport type ScrollReelGap = \"sm\" | \"md\" | \"lg\";\n\nconst snapClass: Record<ScrollReelSnap, string> = {\n start: \"snap-x snap-mandatory snap-start\",\n center: \"snap-x snap-mandatory snap-center\",\n end: \"snap-x snap-mandatory snap-end\",\n // `none` means no snap alignment — items scroll freely.\n none: \"\",\n} as const;\n\nconst gapClass: Record<ScrollReelGap, string> = {\n sm: \"gap-2 sm:gap-3\",\n md: \"gap-3 sm:gap-4\",\n lg: \"gap-4 sm:gap-6\",\n} as const;\n\nexport { snapClass, gapClass };\n</script>\n\n<script setup lang=\"ts\">\nimport { ref } from \"vue\";\nimport { cn } from \"../../lib/cn\";\n\nwithDefaults(\n defineProps<{\n /** Scroll-snap alignment. \"none\" disables snap entirely. */\n snap?: ScrollReelSnap;\n /** Gap between items — mirrors Stack's scale. Tightens one notch below `sm`. */\n gap?: ScrollReelGap;\n }>(),\n { snap: \"start\", gap: \"md\" },\n);\n\nconst reel = ref<HTMLDivElement | null>(null);\n\n/**\n * Keyboard navigation for scroll-snap: arrow keys scroll to the next or\n * previous snap-aligned child. Without this, the browser's default arrow-key\n * behaviour scrolls by a fixed pixel amount that rarely aligns with snap\n * points, leaving the strip between two items.\n */\nfunction onKeydown(event: KeyboardEvent) {\n const el = reel.value;\n if (!el) return;\n\n const direction = event.key === \"ArrowRight\" ? 1 : event.key === \"ArrowLeft\" ? -1 : 0;\n if (direction === 0 && event.key !== \"Home\" && event.key !== \"End\") return;\n\n event.preventDefault();\n\n if (event.key === \"Home\") {\n el.scrollTo({ left: 0, behavior: \"smooth\" });\n return;\n }\n if (event.key === \"End\") {\n el.scrollTo({ left: el.scrollWidth, behavior: \"smooth\" });\n return;\n }\n\n // Find the next snap-aligned child in the scroll direction.\n const children = [...el.children] as HTMLElement[];\n const scrollEdge = direction === 1 ? el.scrollLeft + el.clientWidth : el.scrollLeft;\n\n for (const child of direction === 1 ? children : children.reverse()) {\n const childEdge = direction === 1 ? child.offsetLeft : child.offsetLeft + child.offsetWidth;\n const isNext = direction === 1 ? childEdge > scrollEdge - 1 : childEdge < scrollEdge + 1;\n if (isNext) {\n child.scrollIntoView({ behavior: \"smooth\", block: \"nearest\", inline: \"start\" });\n break;\n }\n }\n}\n</script>\n\n<template>\n <!-- `role=\"region\"` + `tabindex=\"0\"` + `aria-label` make this a named,\n focusable landmark region. The keyboard handler is what makes the\n scroll-snap strip navigable by arrow keys — a genuine interaction on\n a genuinely interactive element. The rule does not account for\n non-interactive ARIA roles with an explicit tabindex. -->\n <!-- eslint-disable-next-line vuejs-accessibility/no-static-element-interactions -->\n <div\n ref=\"reel\"\n class=\"overflow-x-auto\"\n :class=\"cn('flex flex-row', snapClass[snap], gapClass[gap])\"\n tabindex=\"0\"\n role=\"region\"\n aria-label=\"Scrollable content\"\n @keydown=\"onKeydown\"\n >\n <slot />\n </div>\n</template>\n"],"mappings":""}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ScrollReel — horizontal scrolling strip with scroll-snap.
|
|
3
|
+
*
|
|
4
|
+
* A touch-friendly, keyboard-navigable horizontal scroll container with
|
|
5
|
+
* optional scroll-snap alignment. Arrow keys scroll to the next or previous
|
|
6
|
+
* snap point; the `Home` and `End` keys jump to the start or end of the
|
|
7
|
+
* strip.
|
|
8
|
+
*
|
|
9
|
+
* A ScrollReel is a component, not `overflow-x-auto snap-x snap-mandatory`,
|
|
10
|
+
* because keyboard accessibility for scroll-snap requires JavaScript (arrow
|
|
11
|
+
* keys must find the next snap-aligned child and scroll it into view), and
|
|
12
|
+
* the gap tightens one step below `sm` like Stack and DashboardGrid.
|
|
13
|
+
*/
|
|
14
|
+
export type ScrollReelSnap = "start" | "center" | "end" | "none";
|
|
15
|
+
export type ScrollReelGap = "sm" | "md" | "lg";
|
|
16
|
+
declare const snapClass: Record<ScrollReelSnap, string>;
|
|
17
|
+
declare const gapClass: Record<ScrollReelGap, string>;
|
|
18
|
+
export { snapClass, gapClass };
|
|
19
|
+
declare const _default: typeof __VLS_export;
|
|
20
|
+
export default _default;
|
|
21
|
+
declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<{
|
|
22
|
+
/** Scroll-snap alignment. "none" disables snap entirely. */
|
|
23
|
+
snap?: ScrollReelSnap;
|
|
24
|
+
/** Gap between items — mirrors Stack's scale. Tightens one notch below `sm`. */
|
|
25
|
+
gap?: ScrollReelGap;
|
|
26
|
+
}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{
|
|
27
|
+
/** Scroll-snap alignment. "none" disables snap entirely. */
|
|
28
|
+
snap?: ScrollReelSnap;
|
|
29
|
+
/** Gap between items — mirrors Stack's scale. Tightens one notch below `sm`. */
|
|
30
|
+
gap?: ScrollReelGap;
|
|
31
|
+
}> & Readonly<{}>, {
|
|
32
|
+
gap: ScrollReelGap;
|
|
33
|
+
snap: ScrollReelSnap;
|
|
34
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, {
|
|
35
|
+
default?: (props: {}) => any;
|
|
36
|
+
}>;
|
|
37
|
+
type __VLS_WithSlots<T, S> = T & {
|
|
38
|
+
new (): {
|
|
39
|
+
$slots: S;
|
|
40
|
+
};
|
|
41
|
+
};
|
|
42
|
+
//# sourceMappingURL=ScrollReel.vue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ScrollReel.vue.d.ts","sourceRoot":"","sources":["../../../src/composition/ScrollReel/ScrollReel.vue"],"names":[],"mappings":"AAoHA;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;AAEjE,MAAM,MAAM,aAAa,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE/C,QAAA,MAAM,SAAS,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,CAMpC,CAAC;AAEX,QAAA,MAAM,QAAQ,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAIlC,CAAC;AAEX,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;wBACV,OAAO,YAAY;AAAxC,wBAAyC;AACzC,QAAA,MAAM,YAAY;IAEd,4DAA4D;WACrD,cAAc;IACrB,gFAAgF;UAC1E,aAAa;;IAHnB,4DAA4D;WACrD,cAAc;IACrB,gFAAgF;UAC1E,aAAa;;SAAb,aAAa;UAFZ,cAAc;;cAqFX,CAAC,KAAK,IAAgB,KAAK,GAAG;EAYxC,CAAC;AAWL,KAAK,eAAe,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IAChC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KACV,CAAA;CACD,CAAC"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { cn } from "../../lib/cn.js";
|
|
2
|
+
import { createElementBlock, defineComponent, normalizeClass, openBlock, ref, renderSlot, unref } from "vue";
|
|
3
|
+
//#region src/composition/ScrollReel/ScrollReel.vue?vue&type=script&setup=true&lang.ts
|
|
4
|
+
var snapClass = {
|
|
5
|
+
start: "snap-x snap-mandatory snap-start",
|
|
6
|
+
center: "snap-x snap-mandatory snap-center",
|
|
7
|
+
end: "snap-x snap-mandatory snap-end",
|
|
8
|
+
none: ""
|
|
9
|
+
};
|
|
10
|
+
var gapClass = {
|
|
11
|
+
sm: "gap-2 sm:gap-3",
|
|
12
|
+
md: "gap-3 sm:gap-4",
|
|
13
|
+
lg: "gap-4 sm:gap-6"
|
|
14
|
+
};
|
|
15
|
+
var ScrollReel_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
|
|
16
|
+
__name: "ScrollReel",
|
|
17
|
+
props: {
|
|
18
|
+
snap: { default: "start" },
|
|
19
|
+
gap: { default: "md" }
|
|
20
|
+
},
|
|
21
|
+
setup(__props) {
|
|
22
|
+
const reel = ref(null);
|
|
23
|
+
/**
|
|
24
|
+
* Keyboard navigation for scroll-snap: arrow keys scroll to the next or
|
|
25
|
+
* previous snap-aligned child. Without this, the browser's default arrow-key
|
|
26
|
+
* behaviour scrolls by a fixed pixel amount that rarely aligns with snap
|
|
27
|
+
* points, leaving the strip between two items.
|
|
28
|
+
*/
|
|
29
|
+
function onKeydown(event) {
|
|
30
|
+
const el = reel.value;
|
|
31
|
+
if (!el) return;
|
|
32
|
+
const direction = event.key === "ArrowRight" ? 1 : event.key === "ArrowLeft" ? -1 : 0;
|
|
33
|
+
if (direction === 0 && event.key !== "Home" && event.key !== "End") return;
|
|
34
|
+
event.preventDefault();
|
|
35
|
+
if (event.key === "Home") {
|
|
36
|
+
el.scrollTo({
|
|
37
|
+
left: 0,
|
|
38
|
+
behavior: "smooth"
|
|
39
|
+
});
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
if (event.key === "End") {
|
|
43
|
+
el.scrollTo({
|
|
44
|
+
left: el.scrollWidth,
|
|
45
|
+
behavior: "smooth"
|
|
46
|
+
});
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
const children = [...el.children];
|
|
50
|
+
const scrollEdge = direction === 1 ? el.scrollLeft + el.clientWidth : el.scrollLeft;
|
|
51
|
+
for (const child of direction === 1 ? children : children.reverse()) {
|
|
52
|
+
const childEdge = direction === 1 ? child.offsetLeft : child.offsetLeft + child.offsetWidth;
|
|
53
|
+
if (direction === 1 ? childEdge > scrollEdge - 1 : childEdge < scrollEdge + 1) {
|
|
54
|
+
child.scrollIntoView({
|
|
55
|
+
behavior: "smooth",
|
|
56
|
+
block: "nearest",
|
|
57
|
+
inline: "start"
|
|
58
|
+
});
|
|
59
|
+
break;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return (_ctx, _cache) => {
|
|
64
|
+
return openBlock(), createElementBlock("div", {
|
|
65
|
+
ref_key: "reel",
|
|
66
|
+
ref: reel,
|
|
67
|
+
class: normalizeClass(["overflow-x-auto", unref(cn)("flex flex-row", snapClass[__props.snap], gapClass[__props.gap])]),
|
|
68
|
+
tabindex: "0",
|
|
69
|
+
role: "region",
|
|
70
|
+
"aria-label": "Scrollable content",
|
|
71
|
+
onKeydown
|
|
72
|
+
}, [renderSlot(_ctx.$slots, "default")], 34);
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
//#endregion
|
|
77
|
+
export { ScrollReel_vue_vue_type_script_setup_true_lang_default as default, gapClass, snapClass };
|
|
78
|
+
|
|
79
|
+
//# sourceMappingURL=ScrollReel.vue_vue_type_script_setup_true_lang.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ScrollReel.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/composition/ScrollReel/ScrollReel.vue"],"sourcesContent":["<script lang=\"ts\">\n/**\n * ScrollReel — horizontal scrolling strip with scroll-snap.\n *\n * A touch-friendly, keyboard-navigable horizontal scroll container with\n * optional scroll-snap alignment. Arrow keys scroll to the next or previous\n * snap point; the `Home` and `End` keys jump to the start or end of the\n * strip.\n *\n * A ScrollReel is a component, not `overflow-x-auto snap-x snap-mandatory`,\n * because keyboard accessibility for scroll-snap requires JavaScript (arrow\n * keys must find the next snap-aligned child and scroll it into view), and\n * the gap tightens one step below `sm` like Stack and DashboardGrid.\n */\nexport type ScrollReelSnap = \"start\" | \"center\" | \"end\" | \"none\";\n\nexport type ScrollReelGap = \"sm\" | \"md\" | \"lg\";\n\nconst snapClass: Record<ScrollReelSnap, string> = {\n start: \"snap-x snap-mandatory snap-start\",\n center: \"snap-x snap-mandatory snap-center\",\n end: \"snap-x snap-mandatory snap-end\",\n // `none` means no snap alignment — items scroll freely.\n none: \"\",\n} as const;\n\nconst gapClass: Record<ScrollReelGap, string> = {\n sm: \"gap-2 sm:gap-3\",\n md: \"gap-3 sm:gap-4\",\n lg: \"gap-4 sm:gap-6\",\n} as const;\n\nexport { snapClass, gapClass };\n</script>\n\n<script setup lang=\"ts\">\nimport { ref } from \"vue\";\nimport { cn } from \"../../lib/cn\";\n\nwithDefaults(\n defineProps<{\n /** Scroll-snap alignment. \"none\" disables snap entirely. */\n snap?: ScrollReelSnap;\n /** Gap between items — mirrors Stack's scale. Tightens one notch below `sm`. */\n gap?: ScrollReelGap;\n }>(),\n { snap: \"start\", gap: \"md\" },\n);\n\nconst reel = ref<HTMLDivElement | null>(null);\n\n/**\n * Keyboard navigation for scroll-snap: arrow keys scroll to the next or\n * previous snap-aligned child. Without this, the browser's default arrow-key\n * behaviour scrolls by a fixed pixel amount that rarely aligns with snap\n * points, leaving the strip between two items.\n */\nfunction onKeydown(event: KeyboardEvent) {\n const el = reel.value;\n if (!el) return;\n\n const direction = event.key === \"ArrowRight\" ? 1 : event.key === \"ArrowLeft\" ? -1 : 0;\n if (direction === 0 && event.key !== \"Home\" && event.key !== \"End\") return;\n\n event.preventDefault();\n\n if (event.key === \"Home\") {\n el.scrollTo({ left: 0, behavior: \"smooth\" });\n return;\n }\n if (event.key === \"End\") {\n el.scrollTo({ left: el.scrollWidth, behavior: \"smooth\" });\n return;\n }\n\n // Find the next snap-aligned child in the scroll direction.\n const children = [...el.children] as HTMLElement[];\n const scrollEdge = direction === 1 ? el.scrollLeft + el.clientWidth : el.scrollLeft;\n\n for (const child of direction === 1 ? children : children.reverse()) {\n const childEdge = direction === 1 ? child.offsetLeft : child.offsetLeft + child.offsetWidth;\n const isNext = direction === 1 ? childEdge > scrollEdge - 1 : childEdge < scrollEdge + 1;\n if (isNext) {\n child.scrollIntoView({ behavior: \"smooth\", block: \"nearest\", inline: \"start\" });\n break;\n }\n }\n}\n</script>\n\n<template>\n <!-- `role=\"region\"` + `tabindex=\"0\"` + `aria-label` make this a named,\n focusable landmark region. The keyboard handler is what makes the\n scroll-snap strip navigable by arrow keys — a genuine interaction on\n a genuinely interactive element. The rule does not account for\n non-interactive ARIA roles with an explicit tabindex. -->\n <!-- eslint-disable-next-line vuejs-accessibility/no-static-element-interactions -->\n <div\n ref=\"reel\"\n class=\"overflow-x-auto\"\n :class=\"cn('flex flex-row', snapClass[snap], gapClass[gap])\"\n tabindex=\"0\"\n role=\"region\"\n aria-label=\"Scrollable content\"\n @keydown=\"onKeydown\"\n >\n <slot />\n </div>\n</template>\n"],"mappings":";;;AAkBA,IAAM,YAA4C;CAChD,OAAO;CACP,QAAQ;CACR,KAAK;CAEL,MAAM;AACR;AAEA,IAAM,WAA0C;CAC9C,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;;;;;;;;EAmBA,MAAM,OAAO,IAA2B,IAAI;;;;;;;EAQ5C,SAAS,UAAU,OAAsB;GACvC,MAAM,KAAK,KAAK;GAChB,IAAI,CAAC,IAAI;GAET,MAAM,YAAY,MAAM,QAAQ,eAAe,IAAI,MAAM,QAAQ,cAAc,KAAK;GACpF,IAAI,cAAc,KAAK,MAAM,QAAQ,UAAU,MAAM,QAAQ,OAAO;GAEpE,MAAM,eAAe;GAErB,IAAI,MAAM,QAAQ,QAAQ;IACxB,GAAG,SAAS;KAAE,MAAM;KAAG,UAAU;IAAS,CAAC;IAC3C;GACF;GACA,IAAI,MAAM,QAAQ,OAAO;IACvB,GAAG,SAAS;KAAE,MAAM,GAAG;KAAa,UAAU;IAAS,CAAC;IACxD;GACF;GAGA,MAAM,WAAW,CAAC,GAAG,GAAG,QAAQ;GAChC,MAAM,aAAa,cAAc,IAAI,GAAG,aAAa,GAAG,cAAc,GAAG;GAEzE,KAAK,MAAM,SAAS,cAAc,IAAI,WAAW,SAAS,QAAQ,GAAG;IACnE,MAAM,YAAY,cAAc,IAAI,MAAM,aAAa,MAAM,aAAa,MAAM;IAEhF,IADe,cAAc,IAAI,YAAY,aAAa,IAAI,YAAY,aAAa,GAC3E;KACV,MAAM,eAAe;MAAE,UAAU;MAAU,OAAO;MAAW,QAAQ;KAAQ,CAAC;KAC9E;IACF;GACF;EACF;;GAUE,OAAA,UAAA,GAAA,mBAUM,OAAA;IATA,SAAA;IAAJ,KAAI;IACJ,OAAK,eAAA,CAAC,mBACE,MAAA,EAAA,CAAE,CAAA,iBAAkB,UAAU,QAAA,OAAO,SAAS,QAAA,IAAG,CAAA,CAAA;IACzD,UAAS;IACT,MAAK;IACL,cAAW;IACD;GAEV,GAAA,CAAA,WAAQ,KAAA,QAAA,SAAA,CAAA,GAAA,EAAA"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import Sidebar_vue_vue_type_script_setup_true_lang_default from "./Sidebar.vue_vue_type_script_setup_true_lang.js";
|
|
2
|
+
//#region src/composition/Sidebar/Sidebar.vue
|
|
3
|
+
var Sidebar_default = Sidebar_vue_vue_type_script_setup_true_lang_default;
|
|
4
|
+
//#endregion
|
|
5
|
+
export { Sidebar_default as default };
|
|
6
|
+
|
|
7
|
+
//# sourceMappingURL=Sidebar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Sidebar.js","names":[],"sources":["../../../src/composition/Sidebar/Sidebar.vue"],"sourcesContent":["<script lang=\"ts\">\n/**\n * Sidebar — content + sidebar with intrinsic CSS collapse.\n *\n * The Every Layout \"Sidebar\" pattern: the sidebar gets a fixed `flex-basis`\n * and the content gets `flex-grow: 999`, so the layout wraps and both panels\n * go full-width the moment the content can't fit its `contentMin` percentage.\n * No media query, no JavaScript — the layout derives its own breakpoint from\n * the container's width.\n *\n * A Sidebar is a component because the `calc()` technique for intrinsic\n * sidebar width is non-obvious and easy to get wrong, and Loom wrapping it\n * prevents footguns. It differs from Split in that the content area is the\n * star — it grows to fill all available space — and the sidebar has a\n * preferred, not a minimum, width.\n */\nexport type SidebarSide = \"left\" | \"right\";\n</script>\n\n<script setup lang=\"ts\">\nimport { cn } from \"../../lib/cn\";\n\nwithDefaults(\n defineProps<{\n /** Which side the sidebar sits on. Controls flex direction and stacking order. */\n side?: SidebarSide;\n /** Preferred width for the sidebar (e.g. \"16rem\"). The sidebar does not grow. */\n sideWidth?: string;\n /** Minimum percentage of the container the content demands before the layout wraps. Default: `\"50%\"`. */\n contentMin?: string;\n /** Whether to add a gap between the two panels. Default: `true`. */\n gap?: boolean;\n }>(),\n { side: \"left\", sideWidth: \"16rem\", contentMin: \"50%\", gap: true },\n);\n</script>\n\n<template>\n <!--\n `flex-wrap: wrap` is the intrinsic collapse mechanism. When the content\n can't fit its `contentMin`, it wraps to a new line and both panels take\n full width — the sidebar becomes a full-width section above or below the\n content, depending on `side`.\n\n The sidebar's `flex-basis` is its preferred width. The content's\n `flex-grow: 999` ensures it takes all remaining space when there is room,\n but its `flex-basis: 0` and `min-width: contentMin` trigger wrapping\n when there isn't.\n -->\n <div\n :class=\"\n cn(\n 'flex',\n side === 'right' ? 'flex-row-reverse' : 'flex-row',\n gap ? 'gap-3 sm:gap-4' : undefined,\n )\n \"\n :style=\"{ flexWrap: 'wrap' }\"\n >\n <div\n :style=\"{\n flexBasis: sideWidth,\n flexGrow: 0,\n flexShrink: 1,\n }\"\n >\n <slot name=\"side\" />\n </div>\n\n <div\n :style=\"{\n flexBasis: 0,\n flexGrow: 999,\n flexShrink: 1,\n minWidth: contentMin,\n }\"\n >\n <slot />\n </div>\n </div>\n</template>\n"],"mappings":""}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sidebar — content + sidebar with intrinsic CSS collapse.
|
|
3
|
+
*
|
|
4
|
+
* The Every Layout "Sidebar" pattern: the sidebar gets a fixed `flex-basis`
|
|
5
|
+
* and the content gets `flex-grow: 999`, so the layout wraps and both panels
|
|
6
|
+
* go full-width the moment the content can't fit its `contentMin` percentage.
|
|
7
|
+
* No media query, no JavaScript — the layout derives its own breakpoint from
|
|
8
|
+
* the container's width.
|
|
9
|
+
*
|
|
10
|
+
* A Sidebar is a component because the `calc()` technique for intrinsic
|
|
11
|
+
* sidebar width is non-obvious and easy to get wrong, and Loom wrapping it
|
|
12
|
+
* prevents footguns. It differs from Split in that the content area is the
|
|
13
|
+
* star — it grows to fill all available space — and the sidebar has a
|
|
14
|
+
* preferred, not a minimum, width.
|
|
15
|
+
*/
|
|
16
|
+
export type SidebarSide = "left" | "right";
|
|
17
|
+
declare const _default: typeof __VLS_export;
|
|
18
|
+
export default _default;
|
|
19
|
+
declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<{
|
|
20
|
+
/** Which side the sidebar sits on. Controls flex direction and stacking order. */
|
|
21
|
+
side?: SidebarSide;
|
|
22
|
+
/** Preferred width for the sidebar (e.g. "16rem"). The sidebar does not grow. */
|
|
23
|
+
sideWidth?: string;
|
|
24
|
+
/** Minimum percentage of the container the content demands before the layout wraps. Default: `"50%"`. */
|
|
25
|
+
contentMin?: string;
|
|
26
|
+
/** Whether to add a gap between the two panels. Default: `true`. */
|
|
27
|
+
gap?: boolean;
|
|
28
|
+
}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{
|
|
29
|
+
/** Which side the sidebar sits on. Controls flex direction and stacking order. */
|
|
30
|
+
side?: SidebarSide;
|
|
31
|
+
/** Preferred width for the sidebar (e.g. "16rem"). The sidebar does not grow. */
|
|
32
|
+
sideWidth?: string;
|
|
33
|
+
/** Minimum percentage of the container the content demands before the layout wraps. Default: `"50%"`. */
|
|
34
|
+
contentMin?: string;
|
|
35
|
+
/** Whether to add a gap between the two panels. Default: `true`. */
|
|
36
|
+
gap?: boolean;
|
|
37
|
+
}> & Readonly<{}>, {
|
|
38
|
+
gap: boolean;
|
|
39
|
+
side: SidebarSide;
|
|
40
|
+
sideWidth: string;
|
|
41
|
+
contentMin: string;
|
|
42
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, {
|
|
43
|
+
side?: (props: {}) => any;
|
|
44
|
+
} & {
|
|
45
|
+
default?: (props: {}) => any;
|
|
46
|
+
}>;
|
|
47
|
+
type __VLS_WithSlots<T, S> = T & {
|
|
48
|
+
new (): {
|
|
49
|
+
$slots: S;
|
|
50
|
+
};
|
|
51
|
+
};
|
|
52
|
+
//# sourceMappingURL=Sidebar.vue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Sidebar.vue.d.ts","sourceRoot":"","sources":["../../../src/composition/Sidebar/Sidebar.vue"],"names":[],"mappings":"AAuFA;;;;;;;;;;;;;;GAcG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,OAAO,CAAC;wBACtB,OAAO,YAAY;AAAxC,wBAAyC;AACzC,QAAA,MAAM,YAAY;IAEd,kFAAkF;WAC3E,WAAW;IAClB,iFAAiF;gBACrE,MAAM;IAClB,yGAAyG;iBAC5F,MAAM;IACnB,oEAAoE;UAC9D,OAAO;;IAPb,kFAAkF;WAC3E,WAAW;IAClB,iFAAiF;gBACrE,MAAM;IAClB,yGAAyG;iBAC5F,MAAM;IACnB,oEAAoE;UAC9D,OAAO;;SAAP,OAAO;UANN,WAAW;eAEN,MAAM;gBAEL,MAAM;;WA2DZ,CAAC,KAAK,IAAgB,KAAK,GAAG;;cAC3B,CAAC,KAAK,IAAgB,KAAK,GAAG;EAUxC,CAAC;AAWL,KAAK,eAAe,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IAChC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KACV,CAAA;CACD,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { cn } from "../../lib/cn.js";
|
|
2
|
+
import { createElementBlock, createElementVNode, defineComponent, normalizeClass, normalizeStyle, openBlock, renderSlot, unref } from "vue";
|
|
3
|
+
//#region src/composition/Sidebar/Sidebar.vue?vue&type=script&setup=true&lang.ts
|
|
4
|
+
var Sidebar_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
|
|
5
|
+
__name: "Sidebar",
|
|
6
|
+
props: {
|
|
7
|
+
side: { default: "left" },
|
|
8
|
+
sideWidth: { default: "16rem" },
|
|
9
|
+
contentMin: { default: "50%" },
|
|
10
|
+
gap: {
|
|
11
|
+
type: Boolean,
|
|
12
|
+
default: true
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
setup(__props) {
|
|
16
|
+
return (_ctx, _cache) => {
|
|
17
|
+
return openBlock(), createElementBlock("div", {
|
|
18
|
+
class: normalizeClass(unref(cn)("flex", __props.side === "right" ? "flex-row-reverse" : "flex-row", __props.gap ? "gap-3 sm:gap-4" : void 0)),
|
|
19
|
+
style: { flexWrap: "wrap" }
|
|
20
|
+
}, [createElementVNode("div", { style: normalizeStyle({
|
|
21
|
+
flexBasis: __props.sideWidth,
|
|
22
|
+
flexGrow: 0,
|
|
23
|
+
flexShrink: 1
|
|
24
|
+
}) }, [renderSlot(_ctx.$slots, "side")], 4), createElementVNode("div", { style: normalizeStyle({
|
|
25
|
+
flexBasis: 0,
|
|
26
|
+
flexGrow: 999,
|
|
27
|
+
flexShrink: 1,
|
|
28
|
+
minWidth: __props.contentMin
|
|
29
|
+
}) }, [renderSlot(_ctx.$slots, "default")], 4)], 2);
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
//#endregion
|
|
34
|
+
export { Sidebar_vue_vue_type_script_setup_true_lang_default as default };
|
|
35
|
+
|
|
36
|
+
//# sourceMappingURL=Sidebar.vue_vue_type_script_setup_true_lang.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Sidebar.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/composition/Sidebar/Sidebar.vue"],"sourcesContent":["<script lang=\"ts\">\n/**\n * Sidebar — content + sidebar with intrinsic CSS collapse.\n *\n * The Every Layout \"Sidebar\" pattern: the sidebar gets a fixed `flex-basis`\n * and the content gets `flex-grow: 999`, so the layout wraps and both panels\n * go full-width the moment the content can't fit its `contentMin` percentage.\n * No media query, no JavaScript — the layout derives its own breakpoint from\n * the container's width.\n *\n * A Sidebar is a component because the `calc()` technique for intrinsic\n * sidebar width is non-obvious and easy to get wrong, and Loom wrapping it\n * prevents footguns. It differs from Split in that the content area is the\n * star — it grows to fill all available space — and the sidebar has a\n * preferred, not a minimum, width.\n */\nexport type SidebarSide = \"left\" | \"right\";\n</script>\n\n<script setup lang=\"ts\">\nimport { cn } from \"../../lib/cn\";\n\nwithDefaults(\n defineProps<{\n /** Which side the sidebar sits on. Controls flex direction and stacking order. */\n side?: SidebarSide;\n /** Preferred width for the sidebar (e.g. \"16rem\"). The sidebar does not grow. */\n sideWidth?: string;\n /** Minimum percentage of the container the content demands before the layout wraps. Default: `\"50%\"`. */\n contentMin?: string;\n /** Whether to add a gap between the two panels. Default: `true`. */\n gap?: boolean;\n }>(),\n { side: \"left\", sideWidth: \"16rem\", contentMin: \"50%\", gap: true },\n);\n</script>\n\n<template>\n <!--\n `flex-wrap: wrap` is the intrinsic collapse mechanism. When the content\n can't fit its `contentMin`, it wraps to a new line and both panels take\n full width — the sidebar becomes a full-width section above or below the\n content, depending on `side`.\n\n The sidebar's `flex-basis` is its preferred width. The content's\n `flex-grow: 999` ensures it takes all remaining space when there is room,\n but its `flex-basis: 0` and `min-width: contentMin` trigger wrapping\n when there isn't.\n -->\n <div\n :class=\"\n cn(\n 'flex',\n side === 'right' ? 'flex-row-reverse' : 'flex-row',\n gap ? 'gap-3 sm:gap-4' : undefined,\n )\n \"\n :style=\"{ flexWrap: 'wrap' }\"\n >\n <div\n :style=\"{\n flexBasis: sideWidth,\n flexGrow: 0,\n flexShrink: 1,\n }\"\n >\n <slot name=\"side\" />\n </div>\n\n <div\n :style=\"{\n flexBasis: 0,\n flexGrow: 999,\n flexShrink: 1,\n minWidth: contentMin,\n }\"\n >\n <slot />\n </div>\n </div>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;GAiDE,OAAA,UAAA,GAAA,mBA8BM,OAAA;IA7BH,OAAK,eAAS,MAAA,EAAA,CAAE,CAAA,QAA0B,QAAA,SAAI,UAAA,qBAAA,YAAwD,QAAA,MAAG,mBAAsB,KAAA,CAAA,CAAA;IAO/H,OAAO,EAAA,UAAA,OAAA;GAER,GAAA,CAAA,mBAQM,OAAA,EAPH,OAAK,eAAA;IAAuB,WAAA,QAAA;;;GAM7B,CAAA,EAAA,GAAA,CAAA,WAAoB,KAAA,QAAA,MAAA,CAAA,GAAA,CAAA,GAGtB,mBASM,OAAA,EARH,OAAK,eAAA;;;;IAA0F,UAAA,QAAA;GAOhG,CAAA,EAAA,GAAA,CAAA,WAAQ,KAAA,QAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,CAAA"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import Split_vue_vue_type_script_setup_true_lang_default, { gapClass } from "./Split.vue_vue_type_script_setup_true_lang.js";
|
|
2
|
+
//#region src/composition/Split/Split.vue
|
|
3
|
+
var Split_default = Split_vue_vue_type_script_setup_true_lang_default;
|
|
4
|
+
//#endregion
|
|
5
|
+
export { Split_default as default, gapClass };
|
|
6
|
+
|
|
7
|
+
//# sourceMappingURL=Split.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Split.js","names":[],"sources":["../../../src/composition/Split/Split.vue"],"sourcesContent":["<script lang=\"ts\">\n/**\n * Split — two-panel layout with intrinsic collapse.\n *\n * A flex row that places a side panel and a content area side by side above\n * a `collapseAt` width, and stacks them vertically below it. The side panel\n * gets a fixed minimum width; the content area grows to fill the remaining\n * space.\n *\n * This is the Every Layout \"Sidebar\" pattern, simplified for the common\n * two-panel case. The intrinsic collapse — panels stack when the container is\n * too narrow — avoids a breakpoint per viewport, and works identically inside\n * a sidebar-narrowed workspace and full-bleed on an ultra-wide monitor.\n *\n * A Split is a component, not a hand-rolled flex row with a media query,\n * because the collapse width is a layout decision the call site should name\n * rather than compute, and the stacking order (side above or below) is an\n * intent the `side` prop expresses.\n */\nexport type SplitSide = \"left\" | \"right\";\n\nexport type SplitGap = \"sm\" | \"md\" | \"lg\" | \"none\";\n\nconst gapClass: Record<Exclude<SplitGap, \"none\">, string> = {\n sm: \"gap-2 sm:gap-3\",\n md: \"gap-3 sm:gap-4\",\n lg: \"gap-4 sm:gap-6\",\n} as const;\n\nexport { gapClass };\n</script>\n\n<script setup lang=\"ts\">\nimport { cn } from \"../../lib/cn\";\n\nwithDefaults(\n defineProps<{\n /** The side the panel sits on. Controls stacking order when collapsed: \"left\" stacks the panel above, \"right\" stacks it below. */\n side?: SplitSide;\n /** Below this CSS width the two panels stack vertically instead of sitting side by side. Default: `\"48rem\"`. */\n collapseAt?: string;\n /** Minimum width for the side panel (e.g. \"16rem\"). The content area takes the rest. */\n minSideWidth?: string;\n /** Gap between the two panels. Tightens one notch below `sm` (except \"none\"). */\n gap?: SplitGap;\n }>(),\n { side: \"left\", collapseAt: \"48rem\", minSideWidth: \"16rem\", gap: \"md\" },\n);\n</script>\n\n<template>\n <!--\n `flex-wrap` is the intrinsic collapse mechanism: when the combined\n `min-width` of both panels exceeds the container, the second panel wraps\n to a new line. The `collapseAt` prop sets the breakpoint that controls\n when `flex-wrap` is active.\n -->\n <div\n :class=\"\n cn(\n 'flex',\n side === 'right' ? 'flex-row-reverse' : 'flex-row',\n gap !== 'none' ? gapClass[gap] : undefined,\n )\n \"\n :style=\"{\n flexWrap: 'wrap',\n }\"\n >\n <!-- Side panel: fixed minimum width, does not grow. When collapsed the\n panel takes full width (flex-basis: 100%). -->\n <div\n :style=\"{\n flexBasis: minSideWidth,\n flexGrow: 0,\n flexShrink: 0,\n minWidth: minSideWidth,\n }\"\n >\n <slot name=\"side\" />\n </div>\n\n <!-- Content area: fills remaining space, but demands at least 50% of\n the container before wrapping. When collapsed it also takes full\n width. -->\n <div\n :style=\"{\n flexBasis: 0,\n flexGrow: 999,\n flexShrink: 1,\n minWidth: '50%',\n }\"\n >\n <slot />\n </div>\n </div>\n</template>\n"],"mappings":""}
|