@alfakit/vue 0.1.2 → 0.1.7
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/CHANGELOG.md +16 -0
- package/dist/AlfakitRoot.js.map +1 -1
- package/dist/AlfakitRoot.vue.d.ts.map +1 -1
- package/dist/AlfakitRoot.vue_vue_type_script_setup_true_lang.js +3 -1
- package/dist/AlfakitRoot.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/actions/ActionGroupMenu.js.map +1 -1
- package/dist/components/actions/ActionGroupMenu.vue.d.ts.map +1 -1
- package/dist/components/actions/ActionGroupMenu.vue_vue_type_script_setup_true_lang.js +69 -65
- package/dist/components/actions/ActionGroupMenu.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/actions/ActionModal.js.map +1 -1
- package/dist/components/actions/ActionModal.vue.d.ts.map +1 -1
- package/dist/components/actions/ActionModal.vue_vue_type_script_setup_true_lang.js +17 -15
- package/dist/components/actions/ActionModal.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/ai/AiCopilot.js.map +1 -1
- package/dist/components/ai/AiCopilot.vue.d.ts +2 -0
- package/dist/components/ai/AiCopilot.vue.d.ts.map +1 -1
- package/dist/components/ai/AiCopilot.vue_vue_type_script_setup_true_lang.js +7 -2
- package/dist/components/ai/AiCopilot.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/cms/CmsPage.vue_vue_type_script_setup_true_lang.js +19 -19
- package/dist/components/cms/CmsPage.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/cms/LivePreview.js.map +1 -1
- package/dist/components/cms/LivePreview.vue.d.ts.map +1 -1
- package/dist/components/cms/LivePreview.vue_vue_type_script_setup_true_lang.js +83 -83
- package/dist/components/cms/LivePreview.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/fields/BuilderField.js.map +1 -1
- package/dist/components/fields/BuilderField.vue.d.ts.map +1 -1
- package/dist/components/fields/BuilderField.vue_vue_type_script_setup_true_lang.js +162 -157
- package/dist/components/fields/BuilderField.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/fields/ImageEditorDialog.js.map +1 -1
- package/dist/components/fields/ImageEditorDialog.vue.d.ts.map +1 -1
- package/dist/components/fields/ImageEditorDialog.vue_vue_type_script_setup_true_lang.js +46 -46
- package/dist/components/fields/ImageEditorDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/fields/KeyValueField.js.map +1 -1
- package/dist/components/fields/KeyValueField.vue.d.ts.map +1 -1
- package/dist/components/fields/KeyValueField.vue_vue_type_script_setup_true_lang.js +66 -66
- package/dist/components/fields/KeyValueField.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/fields/ModalTablePicker.js.map +1 -1
- package/dist/components/fields/ModalTablePicker.vue.d.ts.map +1 -1
- package/dist/components/fields/ModalTablePicker.vue_vue_type_script_setup_true_lang.js +113 -113
- package/dist/components/fields/ModalTablePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/fields/RepeaterField.js.map +1 -1
- package/dist/components/fields/RepeaterField.vue.d.ts.map +1 -1
- package/dist/components/fields/RepeaterField.vue_vue_type_script_setup_true_lang.js +12 -12
- package/dist/components/fields/RepeaterField.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/fields/RichEditorInput.js.map +1 -1
- package/dist/components/fields/RichEditorInput.vue.d.ts.map +1 -1
- package/dist/components/fields/RichEditorInput.vue_vue_type_script_setup_true_lang.js +166 -165
- package/dist/components/fields/RichEditorInput.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/fields/SliderField.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/fields/item-actions.d.ts +2 -2
- package/dist/components/fields/item-actions.d.ts.map +1 -1
- package/dist/components/fields/item-actions.js +31 -31
- package/dist/components/fields/item-actions.js.map +1 -1
- package/dist/components/form/FormBlock.js.map +1 -1
- package/dist/components/form/FormBlock.vue.d.ts.map +1 -1
- package/dist/components/form/FormBlock.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/form/FormBlock.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/form/form-context.js +25 -25
- package/dist/components/form/form-context.js.map +1 -1
- package/dist/components/kanban/KanbanBoard.js.map +1 -1
- package/dist/components/kanban/KanbanBoard.vue.d.ts.map +1 -1
- package/dist/components/kanban/KanbanBoard.vue_vue_type_script_setup_true_lang.js +5 -2
- package/dist/components/kanban/KanbanBoard.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/kanban/KanbanColumnHeader.js.map +1 -1
- package/dist/components/kanban/KanbanColumnHeader.vue.d.ts.map +1 -1
- package/dist/components/kanban/KanbanColumnHeader.vue_vue_type_script_setup_true_lang.js +64 -64
- package/dist/components/kanban/KanbanColumnHeader.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/layout/SectionComponent.js.map +1 -1
- package/dist/components/layout/SectionComponent.vue.d.ts.map +1 -1
- package/dist/components/layout/SectionComponent.vue_vue_type_script_setup_true_lang.js +23 -23
- package/dist/components/layout/SectionComponent.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/panel/DebugPanel.vue_vue_type_script_setup_true_lang.js +8 -8
- package/dist/components/panel/DebugPanel.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/panel/GlobalSearchPalette.js.map +1 -1
- package/dist/components/panel/GlobalSearchPalette.vue.d.ts.map +1 -1
- package/dist/components/panel/GlobalSearchPalette.vue_vue_type_script_setup_true_lang.js +102 -96
- package/dist/components/panel/GlobalSearchPalette.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/panel/NavGroup.vue_vue_type_script_setup_true_lang.js +10 -10
- package/dist/components/panel/NavGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/panel/NavGroupFlyout.vue_vue_type_script_setup_true_lang.js +9 -9
- package/dist/components/panel/NavGroupFlyout.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/panel/NavItem.vue_vue_type_script_setup_true_lang.js +16 -16
- package/dist/components/panel/NavItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/panel/NavSubItem.vue_vue_type_script_setup_true_lang.js +10 -10
- package/dist/components/panel/NavSubItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/panel/TenantMenu.vue_vue_type_script_setup_true_lang.js +35 -35
- package/dist/components/panel/TenantMenu.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/panel/Topbar.vue_vue_type_script_setup_true_lang.js +11 -11
- package/dist/components/panel/Topbar.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/realtime/use-live-updates.d.ts.map +1 -1
- package/dist/components/realtime/use-live-updates.js +24 -23
- package/dist/components/realtime/use-live-updates.js.map +1 -1
- package/dist/components/table/BooleanCell.vue_vue_type_script_setup_true_lang.js +2 -1
- package/dist/components/table/BooleanCell.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/table/ColumnHeader.js.map +1 -1
- package/dist/components/table/ColumnHeader.vue.d.ts.map +1 -1
- package/dist/components/table/ColumnHeader.vue_vue_type_script_setup_true_lang.js +55 -49
- package/dist/components/table/ColumnHeader.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/table/ColumnManager.js.map +1 -1
- package/dist/components/table/ColumnManager.vue.d.ts.map +1 -1
- package/dist/components/table/ColumnManager.vue_vue_type_script_setup_true_lang.js +5 -4
- package/dist/components/table/ColumnManager.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/table/ContentLayoutSort.js.map +1 -1
- package/dist/components/table/ContentLayoutSort.vue.d.ts.map +1 -1
- package/dist/components/table/ContentLayoutSort.vue_vue_type_script_setup_true_lang.js +5 -5
- package/dist/components/table/ContentLayoutSort.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/table/SelectCell.vue_vue_type_script_setup_true_lang.js +2 -1
- package/dist/components/table/SelectCell.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/table/SelectComboboxCell.vue_vue_type_script_setup_true_lang.js +2 -1
- package/dist/components/table/SelectComboboxCell.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/table/TableCellContent.js.map +1 -1
- package/dist/components/table/TableCellContent.vue.d.ts.map +1 -1
- package/dist/components/table/TableCellContent.vue_vue_type_script_setup_true_lang.js +4 -3
- package/dist/components/table/TableCellContent.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/table/TablePagination.js.map +1 -1
- package/dist/components/table/TablePagination.vue.d.ts.map +1 -1
- package/dist/components/table/TablePagination.vue_vue_type_script_setup_true_lang.js +87 -87
- package/dist/components/table/TablePagination.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/table/TextInputCell.vue_vue_type_script_setup_true_lang.js +2 -1
- package/dist/components/table/TextInputCell.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/table/cell-update.d.ts +6 -0
- package/dist/components/table/cell-update.d.ts.map +1 -1
- package/dist/components/table/cell-update.js.map +1 -1
- package/dist/components/translation-manager/TranslationManagerView.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/translation-manager/TranslationManagerView.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/ui/CommandAutoHighlight.js +7 -0
- package/dist/components/ui/CommandAutoHighlight.js.map +1 -0
- package/dist/components/ui/CommandAutoHighlight.vue.d.ts +21 -0
- package/dist/components/ui/CommandAutoHighlight.vue.d.ts.map +1 -0
- package/dist/components/ui/CommandAutoHighlight.vue_vue_type_script_setup_true_lang.js +18 -0
- package/dist/components/ui/CommandAutoHighlight.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/ui/DialogContent.js.map +1 -1
- package/dist/components/ui/DialogContent.vue.d.ts.map +1 -1
- package/dist/components/ui/DialogContent.vue_vue_type_script_setup_true_lang.js +13 -12
- package/dist/components/ui/DialogContent.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/ui/PopoverContent.js.map +1 -1
- package/dist/components/ui/PopoverContent.vue.d.ts.map +1 -1
- package/dist/components/ui/PopoverContent.vue_vue_type_script_setup_true_lang.js +9 -8
- package/dist/components/ui/PopoverContent.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/ui/SheetContent.js.map +1 -1
- package/dist/components/ui/SheetContent.vue.d.ts.map +1 -1
- package/dist/components/ui/SheetContent.vue_vue_type_script_setup_true_lang.js +13 -12
- package/dist/components/ui/SheetContent.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/ui/TooltipContent.js.map +1 -1
- package/dist/components/ui/TooltipContent.vue.d.ts.map +1 -1
- package/dist/components/ui/TooltipContent.vue_vue_type_script_setup_true_lang.js +9 -8
- package/dist/components/ui/TooltipContent.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/context.d.ts +7 -0
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +29 -26
- package/dist/context.js.map +1 -1
- package/dist/create-alfakit.d.ts.map +1 -1
- package/dist/create-alfakit.js +33 -31
- package/dist/create-alfakit.js.map +1 -1
- package/dist/eject-manifest.json +11 -2
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +219 -217
- package/dist/layouts/AppLayout.vue_vue_type_script_setup_true_lang.js +8 -8
- package/dist/layouts/AppLayout.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/layouts/AuthLayout.vue_vue_type_script_setup_true_lang.js +9 -9
- package/dist/layouts/FullscreenLayout.vue_vue_type_script_setup_true_lang.js +8 -8
- package/dist/layouts/FullscreenLayout.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/layouts/TopNavLayout.vue_vue_type_script_setup_true_lang.js +15 -15
- package/dist/layouts/TopNavLayout.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/layouts/lazy-layouts.d.ts +10 -0
- package/dist/layouts/lazy-layouts.d.ts.map +1 -0
- package/dist/layouts/lazy-layouts.js +8 -0
- package/dist/layouts/lazy-layouts.js.map +1 -0
- package/dist/layouts/panel-layouts.d.ts +8 -0
- package/dist/layouts/panel-layouts.d.ts.map +1 -0
- package/dist/layouts/panel-layouts.js +15 -0
- package/dist/layouts/panel-layouts.js.map +1 -0
- package/dist/lib/lazy.d.ts.map +1 -1
- package/dist/lib/lazy.js +2 -2
- package/dist/lib/lazy.js.map +1 -1
- package/dist/pages/PageShell.js.map +1 -1
- package/dist/pages/PageShell.vue.d.ts.map +1 -1
- package/dist/pages/PageShell.vue_vue_type_script_setup_true_lang.js +39 -42
- package/dist/pages/PageShell.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/standalone/AlfakitComponent.js.map +1 -1
- package/dist/standalone/AlfakitComponent.vue.d.ts.map +1 -1
- package/dist/standalone/AlfakitComponent.vue_vue_type_script_setup_true_lang.js +56 -52
- package/dist/standalone/AlfakitComponent.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/standalone.css +7 -0
- package/dist/starter-kit/AlfakitStarterKitRoot.js.map +1 -1
- package/dist/starter-kit/AlfakitStarterKitRoot.vue.d.ts +2 -2
- package/dist/starter-kit/AlfakitStarterKitRoot.vue.d.ts.map +1 -1
- package/dist/starter-kit/AlfakitStarterKitRoot.vue_vue_type_script_setup_true_lang.js +17 -12
- package/dist/starter-kit/AlfakitStarterKitRoot.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/starter-kit/dashboard-widgets.d.ts +54 -0
- package/dist/starter-kit/dashboard-widgets.d.ts.map +1 -0
- package/dist/starter-kit/dashboard-widgets.js +54 -0
- package/dist/starter-kit/dashboard-widgets.js.map +1 -0
- package/dist/starter-kit/index.d.ts +2 -1
- package/dist/starter-kit/index.d.ts.map +1 -1
- package/dist/starter-kit/index.js +5 -4
- package/dist/starter-kit/runtime.d.ts +6 -0
- package/dist/starter-kit/runtime.d.ts.map +1 -1
- package/dist/starter-kit/runtime.js +19 -15
- package/dist/starter-kit/runtime.js.map +1 -1
- package/dist/starter-kit/starter-kit.d.ts.map +1 -1
- package/dist/starter-kit/starter-kit.js +8 -8
- package/dist/starter-kit/starter-kit.js.map +1 -1
- package/dist/starter-kit/widgets/CopilotTrigger.js +7 -0
- package/dist/starter-kit/widgets/CopilotTrigger.js.map +1 -0
- package/dist/starter-kit/widgets/CopilotTrigger.vue.d.ts +12 -0
- package/dist/starter-kit/widgets/CopilotTrigger.vue.d.ts.map +1 -0
- package/dist/starter-kit/widgets/CopilotTrigger.vue_vue_type_script_setup_true_lang.js +23 -0
- package/dist/starter-kit/widgets/CopilotTrigger.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/starter-kit/widgets/LoadedCopilot.js +7 -0
- package/dist/starter-kit/widgets/LoadedCopilot.js.map +1 -0
- package/dist/starter-kit/widgets/LoadedCopilot.vue.d.ts +8 -0
- package/dist/starter-kit/widgets/LoadedCopilot.vue.d.ts.map +1 -0
- package/dist/starter-kit/widgets/LoadedCopilot.vue_vue_type_script_setup_true_lang.js +31 -0
- package/dist/starter-kit/widgets/LoadedCopilot.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/starter-kit/widgets/StarterKitImpersonationBanner.js +7 -0
- package/dist/starter-kit/widgets/StarterKitImpersonationBanner.js.map +1 -0
- package/dist/starter-kit/widgets/StarterKitImpersonationBanner.vue.d.ts +8 -0
- package/dist/starter-kit/widgets/StarterKitImpersonationBanner.vue.d.ts.map +1 -0
- package/dist/starter-kit/widgets/StarterKitImpersonationBanner.vue_vue_type_script_setup_true_lang.js +34 -0
- package/dist/starter-kit/widgets/StarterKitImpersonationBanner.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/starter-kit/widgets/index.d.ts +40 -9
- package/dist/starter-kit/widgets/index.d.ts.map +1 -1
- package/dist/starter-kit/widgets/index.js +21 -18
- package/dist/starter-kit/widgets/index.js.map +1 -1
- package/dist/starter-kit/widgets/loaded.d.ts +10 -0
- package/dist/starter-kit/widgets/loaded.d.ts.map +1 -0
- package/dist/starter-kit/widgets/loaded.js +5 -0
- package/dist/styles.css +9 -2
- package/dist/themes.css +6 -1
- package/package.json +2 -2
- package/src/AlfakitRoot.vue +9 -1
- package/src/components/actions/ActionGroupMenu.vue +13 -1
- package/src/components/actions/ActionModal.vue +9 -0
- package/src/components/ai/AiCopilot.vue +7 -1
- package/src/components/cms/LivePreview.vue +8 -2
- package/src/components/fields/BuilderField.vue +15 -2
- package/src/components/fields/ImageEditorDialog.vue +7 -3
- package/src/components/fields/KeyValueField.vue +3 -2
- package/src/components/fields/ModalTablePicker.vue +7 -2
- package/src/components/fields/RepeaterField.vue +2 -3
- package/src/components/fields/RichEditorInput.vue +3 -0
- package/src/components/fields/item-actions.ts +31 -10
- package/src/components/form/FormBlock.vue +2 -1
- package/src/components/form/form-context.ts +2 -2
- package/src/components/kanban/KanbanBoard.vue +15 -3
- package/src/components/kanban/KanbanColumnHeader.vue +6 -4
- package/src/components/layout/SectionComponent.vue +10 -4
- package/src/components/panel/GlobalSearchPalette.vue +2 -0
- package/src/components/realtime/use-live-updates.ts +3 -1
- package/src/components/table/ColumnHeader.vue +23 -12
- package/src/components/table/ColumnManager.vue +12 -8
- package/src/components/table/ContentLayoutSort.vue +7 -1
- package/src/components/table/TableCellContent.vue +4 -2
- package/src/components/table/TablePagination.vue +12 -7
- package/src/components/table/cell-update.ts +6 -0
- package/src/components/ui/CommandAutoHighlight.vue +27 -0
- package/src/components/ui/DialogContent.vue +5 -1
- package/src/components/ui/PopoverContent.vue +5 -1
- package/src/components/ui/SheetContent.vue +5 -1
- package/src/components/ui/TooltipContent.vue +5 -1
- package/src/context.ts +10 -0
- package/src/create-alfakit.ts +5 -0
- package/src/index.ts +2 -0
- package/src/layouts/lazy-layouts.ts +14 -0
- package/src/layouts/panel-layouts.ts +17 -0
- package/src/lib/lazy.ts +11 -1
- package/src/pages/PageShell.vue +5 -6
- package/src/standalone/AlfakitComponent.vue +17 -6
- package/src/starter-kit/AlfakitStarterKitRoot.vue +12 -3
- package/src/starter-kit/dashboard-widgets.ts +93 -0
- package/src/starter-kit/index.ts +7 -1
- package/src/starter-kit/runtime.ts +17 -1
- package/src/starter-kit/starter-kit.ts +2 -1
- package/src/starter-kit/widgets/CopilotTrigger.vue +58 -0
- package/src/starter-kit/widgets/LoadedCopilot.vue +29 -0
- package/src/starter-kit/widgets/StarterKitImpersonationBanner.vue +57 -0
- package/src/starter-kit/widgets/index.ts +56 -11
- package/src/starter-kit/widgets/loaded.ts +9 -0
- package/src/styles.css +9 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TextInputCell.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createElementBlock","_withModifiers","_createElementVNode","_normalizeClass","_unref","_toDisplayString","_createCommentVNode","_createVNode","Icon","Input","_withKeys","Icon_default","Input_default","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","TextInputCell_vue_vue_type_script_setup_true_lang_default","props","__props","schema","computed","useCellUpdate","errorId","useId","initial","value","ref","grouped","openBlock","createElementBlock","_cache","withModifiers","createElementVNode","normalizeClass","unref","cn","error","toDisplayString","createCommentVNode","colorClass","textColorClasses","createVNode","saving","$event","update","withKeys"],"sources":["../../../src/components/table/TextInputCell.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { TextInputColumnSchema } from '@alfakit/core'\nimport { computed, ref, useId } from 'vue'\nimport { colorClass, textColorClasses } from '../../lib/colors'\nimport { Icon } from '../../lib/icons'\nimport { cn } from '../../lib/utils'\nimport Input from '../ui/Input.vue'\nimport { useCellUpdate, type CellProps } from './cell-update'\n\nconst props = defineProps<CellProps>()\nconst schema = computed(() => props.column as TextInputColumnSchema)\nconst { update, saving, error } = useCellUpdate(props)\nconst errorId = useId()\n// The saved value: follows the cell after the table reloads, so changing the input back to\n// an earlier value is saved too.\nconst initial = computed(() =>\n props.cell.state === null || props.cell.state === undefined ? '' : String(props.cell.state),\n)\nconst value = ref(initial.value)\n// `prefix()` / `suffix()`: text affixes around the input, like the TextInput field.\nconst grouped = computed(() => Boolean(props.cell.prefix || props.cell.suffix))\n</script>\n\n<template>\n <span @click.stop>\n <span\n :data-slot=\"grouped ? 'input-group' : undefined\"\n :class=\"\n grouped\n ? cn(\n 'border-input dark:bg-input/30 has-[input:focus-visible]:border-ring has-[input:focus-visible]:ring-ring/50 flex h-8 min-w-32 items-stretch overflow-hidden rounded-md border shadow-xs has-[input:focus-visible]:ring-[3px]',\n error && 'border-destructive',\n )\n : 'contents'\n \"\n >\n <span\n v-if=\"props.cell.prefix\"\n data-slot=\"input-prefix\"\n class=\"text-muted-foreground bg-muted/50 flex items-center border-e px-2 text-sm\"\n >{{ props.cell.prefix }}</span\n >\n <span :class=\"cn('relative block', grouped && 'min-w-0 flex-1')\">\n <span\n v-if=\"schema.prefixIcon\"\n data-slot=\"input-prefix-icon\"\n aria-hidden=\"true\"\n :class=\"\n cn(\n 'pointer-events-none absolute start-2.5 top-1/2 flex -translate-y-1/2',\n colorClass(textColorClasses, schema.prefixIconColor, 'gray'),\n )\n \"\n >\n <Icon :name=\"schema.prefixIcon\" class=\"size-4\" />\n </span>\n <Input\n :type=\"schema.inputType\"\n :model-value=\"value\"\n :placeholder=\"schema.placeholder\"\n :step=\"schema.step\"\n :inputmode=\"schema.inputMode\"\n :disabled=\"Boolean(props.cell.disabled) || saving\"\n :aria-label=\"props.column.label || props.column.name\"\n :aria-invalid=\"error ? true : undefined\"\n :aria-describedby=\"error ? errorId : undefined\"\n :class=\"\n cn(\n 'h-8 min-w-32',\n schema.prefixIcon && 'ps-8',\n schema.suffixIcon && 'pe-8',\n grouped &&\n 'h-full rounded-none border-0 bg-transparent shadow-none focus-visible:ring-0 dark:bg-transparent',\n )\n \"\n @update:model-value=\"value = $event\"\n @blur=\"value !== initial && void update(value)\"\n @keydown.enter=\"($event.target as HTMLInputElement).blur()\"\n />\n <span\n v-if=\"schema.suffixIcon\"\n data-slot=\"input-suffix-icon\"\n aria-hidden=\"true\"\n :class=\"\n cn(\n 'pointer-events-none absolute end-2.5 top-1/2 flex -translate-y-1/2',\n colorClass(textColorClasses, schema.suffixIconColor, 'gray'),\n )\n \"\n >\n <Icon :name=\"schema.suffixIcon\" class=\"size-4\" />\n </span>\n </span>\n <span\n v-if=\"props.cell.suffix\"\n data-slot=\"input-suffix\"\n class=\"text-muted-foreground bg-muted/50 flex items-center border-s px-2 text-sm\"\n >{{ props.cell.suffix }}</span\n >\n </span>\n <span v-if=\"error\" :id=\"errorId\" class=\"text-destructive block text-xs\">{{ error }}</span>\n </span>\n</template>\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"TextInputCell.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createElementBlock","_withModifiers","_createElementVNode","_normalizeClass","_unref","_toDisplayString","_createCommentVNode","_createVNode","Icon","Input","_withKeys","Icon_default","Input_default","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","TextInputCell_vue_vue_type_script_setup_true_lang_default","props","__props","schema","computed","useCellUpdate","errorId","useId","initial","value","ref","grouped","openBlock","createElementBlock","_cache","withModifiers","createElementVNode","normalizeClass","unref","cn","error","toDisplayString","createCommentVNode","colorClass","textColorClasses","createVNode","saving","$event","update","withKeys"],"sources":["../../../src/components/table/TextInputCell.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { TextInputColumnSchema } from '@alfakit/core'\nimport { computed, ref, useId } from 'vue'\nimport { colorClass, textColorClasses } from '../../lib/colors'\nimport { Icon } from '../../lib/icons'\nimport { cn } from '../../lib/utils'\nimport Input from '../ui/Input.vue'\nimport { useCellUpdate, type CellProps } from './cell-update'\n\nconst props = defineProps<CellProps>()\nconst schema = computed(() => props.column as TextInputColumnSchema)\nconst { update, saving, error } = useCellUpdate(props)\nconst errorId = useId()\n// The saved value: follows the cell after the table reloads, so changing the input back to\n// an earlier value is saved too.\nconst initial = computed(() =>\n props.cell.state === null || props.cell.state === undefined ? '' : String(props.cell.state),\n)\nconst value = ref(initial.value)\n// `prefix()` / `suffix()`: text affixes around the input, like the TextInput field.\nconst grouped = computed(() => Boolean(props.cell.prefix || props.cell.suffix))\n</script>\n\n<template>\n <span @click.stop>\n <span\n :data-slot=\"grouped ? 'input-group' : undefined\"\n :class=\"\n grouped\n ? cn(\n 'border-input dark:bg-input/30 has-[input:focus-visible]:border-ring has-[input:focus-visible]:ring-ring/50 flex h-8 min-w-32 items-stretch overflow-hidden rounded-md border shadow-xs has-[input:focus-visible]:ring-[3px]',\n error && 'border-destructive',\n )\n : 'contents'\n \"\n >\n <span\n v-if=\"props.cell.prefix\"\n data-slot=\"input-prefix\"\n class=\"text-muted-foreground bg-muted/50 flex items-center border-e px-2 text-sm\"\n >{{ props.cell.prefix }}</span\n >\n <span :class=\"cn('relative block', grouped && 'min-w-0 flex-1')\">\n <span\n v-if=\"schema.prefixIcon\"\n data-slot=\"input-prefix-icon\"\n aria-hidden=\"true\"\n :class=\"\n cn(\n 'pointer-events-none absolute start-2.5 top-1/2 flex -translate-y-1/2',\n colorClass(textColorClasses, schema.prefixIconColor, 'gray'),\n )\n \"\n >\n <Icon :name=\"schema.prefixIcon\" class=\"size-4\" />\n </span>\n <Input\n :type=\"schema.inputType\"\n :model-value=\"value\"\n :placeholder=\"schema.placeholder\"\n :step=\"schema.step\"\n :inputmode=\"schema.inputMode\"\n :disabled=\"Boolean(props.cell.disabled) || saving\"\n :aria-label=\"props.column.label || props.column.name\"\n :aria-invalid=\"error ? true : undefined\"\n :aria-describedby=\"error ? errorId : undefined\"\n :class=\"\n cn(\n 'h-8 min-w-32',\n schema.prefixIcon && 'ps-8',\n schema.suffixIcon && 'pe-8',\n grouped &&\n 'h-full rounded-none border-0 bg-transparent shadow-none focus-visible:ring-0 dark:bg-transparent',\n )\n \"\n @update:model-value=\"value = $event\"\n @blur=\"value !== initial && void update(value)\"\n @keydown.enter=\"($event.target as HTMLInputElement).blur()\"\n />\n <span\n v-if=\"schema.suffixIcon\"\n data-slot=\"input-suffix-icon\"\n aria-hidden=\"true\"\n :class=\"\n cn(\n 'pointer-events-none absolute end-2.5 top-1/2 flex -translate-y-1/2',\n colorClass(textColorClasses, schema.suffixIconColor, 'gray'),\n )\n \"\n >\n <Icon :name=\"schema.suffixIcon\" class=\"size-4\" />\n </span>\n </span>\n <span\n v-if=\"props.cell.suffix\"\n data-slot=\"input-suffix\"\n class=\"text-muted-foreground bg-muted/50 flex items-center border-s px-2 text-sm\"\n >{{ props.cell.suffix }}</span\n >\n </span>\n <span v-if=\"error\" :id=\"errorId\" class=\"text-destructive block text-xs\">{{ error }}</span>\n </span>\n</template>\n"],"mappings":"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"}
|
|
@@ -5,6 +5,12 @@ export interface CellProps {
|
|
|
5
5
|
recordKey: RecordKey;
|
|
6
6
|
token: string;
|
|
7
7
|
component: string;
|
|
8
|
+
/**
|
|
9
|
+
* Set when this renderer was picked from the registry (`column:<type>`): it then renders
|
|
10
|
+
* the built-in cell instead of looking itself up again, so an ejected `TableCellContent`
|
|
11
|
+
* registered for a column type doesn't render itself forever.
|
|
12
|
+
*/
|
|
13
|
+
fromRegistry?: boolean;
|
|
8
14
|
}
|
|
9
15
|
export declare function useCellUpdate(props: CellProps): {
|
|
10
16
|
update: (state: unknown) => Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cell-update.d.ts","sourceRoot":"","sources":["../../../src/components/table/cell-update.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAMxE,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,YAAY,CAAA;IACpB,IAAI,EAAE,UAAU,CAAA;IAChB,SAAS,EAAE,SAAS,CAAA;IACpB,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"cell-update.d.ts","sourceRoot":"","sources":["../../../src/components/table/cell-update.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAMxE,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,YAAY,CAAA;IACpB,IAAI,EAAE,UAAU,CAAA;IAChB,SAAS,EAAE,SAAS,CAAA;IACpB,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS;oBAKf,OAAO;;;EAyBrC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cell-update.js","names":["useCellUpdate","panel","usePanel","saving","ref","error","updateTableCell","props","state","router","resolvePartialProps","caught","errors"],"sources":["../../../src/components/table/cell-update.ts"],"sourcesContent":["import type { CellSchema, ColumnSchema, RecordKey } from '@alfakit/core'\nimport { resolvePartialProps, updateTableCell } from '@alfakit/core'\nimport { router } from '@inertiajs/vue3'\nimport { ref } from 'vue'\nimport { usePanel } from '../../context'\n\nexport interface CellProps {\n column: ColumnSchema\n cell: CellSchema\n recordKey: RecordKey\n token: string\n component: string\n}\n\nexport function useCellUpdate(props: CellProps) {\n const panel = usePanel()\n const saving = ref(false)\n const error = ref<string | null>(null)\n\n const update = async (state: unknown) => {\n if (!panel.value.endpoints.tableCell || !panel.value.endpoints.tableReorder) return\n\n saving.value = true\n error.value = null\n\n try {\n await updateTableCell(\n { cell: panel.value.endpoints.tableCell, reorder: panel.value.endpoints.tableReorder },\n props.token,\n props.component,\n props.recordKey,\n props.column.name,\n state,\n )\n router.reload({ only: resolvePartialProps(['page']) })\n } catch (caught) {\n const errors = (caught as { errors?: Record<string, string[]> }).errors\n error.value = errors?.state?.[0] ?? (caught as Error).message\n } finally {\n saving.value = false\n }\n }\n\n return { update, saving, error }\n}\n"],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"cell-update.js","names":["useCellUpdate","panel","usePanel","saving","ref","error","updateTableCell","props","state","router","resolvePartialProps","caught","errors"],"sources":["../../../src/components/table/cell-update.ts"],"sourcesContent":["import type { CellSchema, ColumnSchema, RecordKey } from '@alfakit/core'\nimport { resolvePartialProps, updateTableCell } from '@alfakit/core'\nimport { router } from '@inertiajs/vue3'\nimport { ref } from 'vue'\nimport { usePanel } from '../../context'\n\nexport interface CellProps {\n column: ColumnSchema\n cell: CellSchema\n recordKey: RecordKey\n token: string\n component: string\n /**\n * Set when this renderer was picked from the registry (`column:<type>`): it then renders\n * the built-in cell instead of looking itself up again, so an ejected `TableCellContent`\n * registered for a column type doesn't render itself forever.\n */\n fromRegistry?: boolean\n}\n\nexport function useCellUpdate(props: CellProps) {\n const panel = usePanel()\n const saving = ref(false)\n const error = ref<string | null>(null)\n\n const update = async (state: unknown) => {\n if (!panel.value.endpoints.tableCell || !panel.value.endpoints.tableReorder) return\n\n saving.value = true\n error.value = null\n\n try {\n await updateTableCell(\n { cell: panel.value.endpoints.tableCell, reorder: panel.value.endpoints.tableReorder },\n props.token,\n props.component,\n props.recordKey,\n props.column.name,\n state,\n )\n router.reload({ only: resolvePartialProps(['page']) })\n } catch (caught) {\n const errors = (caught as { errors?: Record<string, string[]> }).errors\n error.value = errors?.state?.[0] ?? (caught as Error).message\n } finally {\n saving.value = false\n }\n }\n\n return { update, saving, error }\n}\n"],"mappings":";;;;;AAoBA,SAAgBA,EAAc,GAAkB;CAC9C,IAAMC,IAAQC,EAAS,GACjBC,IAASC,EAAI,EAAK,GAClBC,IAAQD,EAAmB,IAAI;CA0BrC,OAAO;EAAE,eAxBa,MAAmB;GACvC,IAAKH,EAAM,MAAM,UAAU,aAAcA,EAAM,MAAM,UAAU,cAG/D;IADA,EAAO,QAAQ,IACf,EAAM,QAAQ;IAEd,IAAI;KASF,AARA,MAAMK,EACJ;MAAE,MAAML,EAAM,MAAM,UAAU;MAAW,SAASA,EAAM,MAAM,UAAU;KAAa,GACrFM,EAAM,OACNA,EAAM,WACNA,EAAM,WACNA,EAAM,OAAO,MACbC,CACF,GACAC,EAAO,OAAO,EAAE,MAAMC,EAAoB,CAAC,MAAM,CAAC,EAAE,CAAC;IACvD,SAASC,GAAQ;KACf,IAAMC,IAAUD,EAAiD;KACjE,EAAM,QAAQC,GAAQ,QAAQ,MAAOD,EAAiB;IACxD,UAAU;KACR,EAAO,QAAQ;IACjB;GAjBc;EAkBhB;EAEiB;EAAQ;CAAM;AACjC"}
|
|
@@ -11,8 +11,8 @@ import { showToast as s } from "../notifications/flash-toasts.js";
|
|
|
11
11
|
import ae from "../ui/Input.js";
|
|
12
12
|
import oe from "../ui/Card.js";
|
|
13
13
|
import se from "../ui/CardContent.js";
|
|
14
|
-
import ce from "../ui/CardHeader.js";
|
|
15
14
|
import c from "../ui/Textarea.js";
|
|
15
|
+
import ce from "../ui/CardHeader.js";
|
|
16
16
|
import le from "../ui/DropdownMenuCheckboxItem.js";
|
|
17
17
|
import { TranslationManagerController as ue, clientErrorNotification as de } from "@alfakit/core";
|
|
18
18
|
import { Fragment as l, computed as u, createBlock as d, createCommentVNode as f, createElementBlock as p, createElementVNode as m, createTextVNode as h, createVNode as g, defineComponent as _, nextTick as v, normalizeClass as y, normalizeStyle as fe, onBeforeUnmount as pe, openBlock as b, renderList as x, toDisplayString as S, toRaw as C, unref as w, useId as T, watch as E, withCtx as D, withModifiers as me } from "vue";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TranslationManagerView.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createBlock","Card","_withCtx","_createVNode","CardHeader","_createElementVNode","_unref","_toDisplayString","_createElementBlock","_Fragment","_renderList","_normalizeStyle","Input","_normalizeClass","DropdownMenu","DropdownMenuTrigger","Button","_createTextVNode","DropdownMenuContent","DropdownMenuCheckboxItem","_createCommentVNode","CardContent","Badge","_withModifiers","Textarea","Badge_default","Button_default","DropdownMenu_default","DropdownMenuContent_default","DropdownMenuTrigger_default","Input_default","Card_default","CardContent_default","CardHeader_default","Textarea_default","DropdownMenuCheckboxItem_default","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","_hoisted_19","_hoisted_20","_hoisted_21","_hoisted_22","_hoisted_23","_hoisted_24","_hoisted_25","_hoisted_26","_hoisted_27","_hoisted_28","_hoisted_29","_hoisted_30","_hoisted_31","_hoisted_32","_hoisted_33","_hoisted_34","_hoisted_35","_hoisted_36","_hoisted_37","_hoisted_38","_hoisted_39","_hoisted_40","_hoisted_41","_hoisted_42","_hoisted_43","_hoisted_44","_hoisted_45","_hoisted_46","_hoisted_47","_hoisted_48","_hoisted_49","_hoisted_50","_hoisted_51","_hoisted_52","_hoisted_53","_hoisted_54","_hoisted_55","_hoisted_56","_hoisted_57","_hoisted_58","_hoisted_59","_hoisted_60","_hoisted_61","_hoisted_62","_hoisted_63","_hoisted_64","_hoisted_65","_hoisted_66","_hoisted_67","_hoisted_68","SELECT","TranslationManagerView_vue_vue_type_script_setup_true_lang_default","props","__props","runner","useActionRunner","page","usePageActionContext","t","useT","direction","useDirection","formatter","useFormatter","labelId","useId","hintId","errorId","controller","TranslationManagerController","toRaw","notifications","showToast","notification","clientErrorNotification","message","state","useStore","cells","cellKey","ref","watch","schema","onBeforeUnmount","locales","computed","active","current","row","locale","range","suggestionLocales","activeRow","activeLocale","activeCell","isActive","isEditing","editable","setCell","element","focusCell","nextTick","editing","onCellKeyDown","event","result","onEditorKeyDown","onCellClick","wasActive","save","saved","cancel","editLabel","openBlock","createBlock","withCtx","createVNode","createElementVNode","unref","toDisplayString","createElementBlock","Fragment","renderList","normalizeStyle","SearchIcon","_cache","value","normalizeClass","$event","filter","group","LanguagesIcon","createTextVNode","checked","code","SparklesIcon","createCommentVNode","cn","withModifiers","index","form","CopyIcon","TriangleAlertIcon","ChevronLeftIcon","ChevronRightIcon","placeholder","warning","CheckIcon","XIcon","entry","HistoryIcon"],"sources":["../../../src/components/translation-manager/TranslationManagerView.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type {\n TranslationCellRef,\n TranslationFilter,\n TranslationManagerEnvironment,\n TranslationManagerSchema,\n} from '@alfakit/core'\nimport { TranslationManagerController, clientErrorNotification } from '@alfakit/core'\nimport {\n CheckIcon,\n ChevronLeftIcon,\n ChevronRightIcon,\n CopyIcon,\n HistoryIcon,\n LanguagesIcon,\n SearchIcon,\n SparklesIcon,\n TriangleAlertIcon,\n XIcon,\n} from '@lucide/vue'\nimport { computed, nextTick, onBeforeUnmount, toRaw, useId, watch } from 'vue'\nimport { useActionRunner, useDirection, useFormatter, useT } from '../../context'\nimport { useStore } from '../../composables/use-store'\nimport { cn } from '../../lib/utils'\nimport { usePageActionContext } from '../actions/action-context'\nimport { showToast } from '../notifications/flash-toasts'\nimport Badge from '../ui/Badge.vue'\nimport Button from '../ui/Button.vue'\nimport Card from '../ui/Card.vue'\nimport CardContent from '../ui/CardContent.vue'\nimport CardHeader from '../ui/CardHeader.vue'\nimport DropdownMenu from '../ui/DropdownMenu.vue'\nimport DropdownMenuCheckboxItem from '../ui/DropdownMenuCheckboxItem.vue'\nimport DropdownMenuContent from '../ui/DropdownMenuContent.vue'\nimport DropdownMenuTrigger from '../ui/DropdownMenuTrigger.vue'\nimport Input from '../ui/Input.vue'\nimport Textarea from '../ui/Textarea.vue'\n\n/**\n * Keys by locale with search, filters, inline editing (plural forms, right-to-left\n * inputs), keyboard navigation, AI suggestion review and history. Everything is computed\n * and saved by the server.\n */\nconst props = defineProps<{ schema: TranslationManagerSchema }>()\n\nconst SELECT =\n 'border-input focus-visible:border-ring focus-visible:ring-ring/50 h-9 min-w-0 rounded-md border bg-transparent px-2 text-sm shadow-xs outline-none focus-visible:ring-[3px]'\n\nconst runner = useActionRunner()\nconst page = usePageActionContext()\nconst t = useT()\nconst direction = useDirection()\nconst formatter = useFormatter()\nconst labelId = useId()\nconst hintId = useId()\nconst errorId = useId()\n\nconst environment = (): TranslationManagerEnvironment => ({\n runner,\n token: page.token,\n t,\n notify: (notifications) => notifications.forEach((notification) => showToast(notification)),\n error: (message) => showToast(clientErrorNotification('translation-manager', message)),\n})\n\nconst controller = new TranslationManagerController(toRaw(props.schema), environment())\nconst state = useStore(controller.store)\nconst cells = new Map<string, HTMLElement>()\nconst cellKey = (ref: TranslationCellRef) => `${ref.row}\\u0000${ref.locale}`\n\nwatch(\n () => props.schema,\n (schema) => controller.setSchema(toRaw(schema)),\n)\n\nonBeforeUnmount(() => controller.dispose())\n\nconst locales = computed(() => {\n void state.value.visibleLocales\n\n return controller.visibleLocales()\n})\nconst active = computed<TranslationCellRef | null>(() => {\n const current = state.value.active\n\n if (current && state.value.rows.some((row) => row.id === current.row)) return current\n\n const row = state.value.rows[0]\n const locale = locales.value[0]\n\n return row && locale ? { row: row.id, locale: locale.code } : null\n})\nconst range = computed(() => {\n void state.value.rows\n\n return controller.range()\n})\nconst suggestionLocales = computed(() => {\n void state.value.rows\n\n return controller.suggestionLocales()\n})\nconst activeRow = computed(() =>\n active.value ? state.value.rows.find((row) => row.id === active.value?.row) : undefined,\n)\nconst activeLocale = computed(() =>\n active.value ? controller.locale(active.value.locale) : undefined,\n)\nconst activeCell = computed(() =>\n activeRow.value && activeLocale.value\n ? activeRow.value.cells[activeLocale.value.code]\n : undefined,\n)\n\nconst isActive = (ref: TranslationCellRef) =>\n active.value?.row === ref.row && active.value.locale === ref.locale\nconst isEditing = (ref: TranslationCellRef) =>\n state.value.editing?.row === ref.row && state.value.editing.locale === ref.locale\nconst editable = (ref: TranslationCellRef) => {\n void state.value.rows\n\n return controller.isEditable(ref)\n}\n\nconst setCell = (ref: TranslationCellRef) => (element: unknown) => {\n if (element instanceof HTMLElement) cells.set(cellKey(ref), element)\n else cells.delete(cellKey(ref))\n}\n\nconst focusCell = (ref: TranslationCellRef | undefined) => {\n if (!ref) return\n controller.focus(ref)\n void nextTick(() => cells.get(cellKey(ref))?.focus())\n}\n\nwatch(\n () => state.value.editing,\n (editing) => {\n if (editing) {\n void nextTick(() => cells.get(cellKey(editing))?.querySelector('textarea')?.focus())\n }\n },\n)\n\nconst onCellKeyDown = (ref: TranslationCellRef, event: KeyboardEvent) => {\n if (event.target !== event.currentTarget) return\n\n const result = controller.handleCellKey(ref, event, direction.value)\n\n if (result.handled) {\n event.preventDefault()\n if (!controller.state.editing) focusCell(result.focus)\n }\n}\n\nconst onEditorKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape' || (event.key === 'Enter' && !event.shiftKey) || event.key === 'Tab') {\n event.preventDefault()\n void controller\n .handleEditorKey({ key: event.key, shiftKey: event.shiftKey, isComposing: event.isComposing })\n .then((result) => focusCell(result.focus))\n }\n}\n\nconst onCellClick = (ref: TranslationCellRef) => {\n if (isEditing(ref)) return\n const wasActive = isActive(ref)\n controller.focus(ref)\n if (wasActive) controller.startEdit(ref)\n}\n\nconst save = (ref: TranslationCellRef) => {\n void controller.save().then((saved) => saved && focusCell(ref))\n}\n\nconst cancel = (ref: TranslationCellRef) => {\n controller.cancelEdit()\n focusCell(ref)\n}\n\nconst editLabel = (key: string, locale: string) =>\n t('translation-manager.edit', { key, locale }, 'Edit :key in :locale')\n</script>\n\n<template>\n <Card class=\"gap-4 py-4\" data-slot=\"translation-manager\">\n <CardHeader class=\"flex flex-col gap-4 px-5\">\n <span :id=\"labelId\" class=\"sr-only\">{{\n t('translation-manager.label', {}, 'Translations')\n }}</span>\n <ul\n class=\"grid grid-cols-2 gap-2 sm:grid-cols-3 lg:grid-cols-6\"\n data-slot=\"translation-progress\"\n >\n <li\n v-for=\"locale in schema.locales\"\n :key=\"locale.code\"\n class=\"flex min-w-0 flex-col gap-1 rounded-md border px-3 py-2\"\n >\n <div class=\"flex items-center justify-between gap-2 text-sm\">\n <span class=\"truncate font-medium\" :lang=\"locale.code\">{{ locale.label }}</span>\n <span class=\"text-muted-foreground font-mono text-xs\">{{ locale.code }}</span>\n </div>\n <div\n role=\"progressbar\"\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n :aria-valuenow=\"Math.round((state.progress[locale.code]?.percent ?? 0) * 100)\"\n :aria-label=\"\n t(\n 'translation-manager.progress_label',\n {\n locale: locale.label,\n translated: state.progress[locale.code]?.translated ?? 0,\n total: state.progress[locale.code]?.total ?? 0,\n },\n ':locale: :translated of :total translated',\n )\n \"\n class=\"bg-muted h-1.5 overflow-hidden rounded-full\"\n >\n <div\n class=\"bg-primary h-full rounded-full transition-[width]\"\n :style=\"{ width: `${(state.progress[locale.code]?.percent ?? 0) * 100}%` }\"\n />\n </div>\n <span class=\"text-muted-foreground text-xs\">\n {{\n t(\n 'translation-manager.progress',\n { percent: formatter.percent(state.progress[locale.code]?.percent ?? 0) },\n ':percent translated',\n )\n }}\n </span>\n </li>\n </ul>\n <div class=\"flex flex-wrap items-center gap-2\" data-slot=\"translation-toolbar\">\n <div class=\"relative min-w-48 flex-1\">\n <SearchIcon\n class=\"text-muted-foreground pointer-events-none absolute start-2.5 top-1/2 size-4 -translate-y-1/2\"\n aria-hidden=\"true\"\n />\n <Input\n type=\"search\"\n :model-value=\"state.search\"\n :placeholder=\"t('translation-manager.search', {}, 'Search keys and texts…')\"\n :aria-label=\"t('translation-manager.search_label', {}, 'Search translations')\"\n class=\"ps-8\"\n @update:model-value=\"(value: string) => controller.setSearch(value)\"\n />\n </div>\n <label class=\"flex items-center gap-2 text-sm\">\n <span class=\"sr-only\">{{ t('translation-manager.filter_label', {}, 'Show') }}</span>\n <select\n :class=\"SELECT\"\n :value=\"state.filter\"\n @change=\"\n controller.setFilter(($event.target as HTMLSelectElement).value as TranslationFilter)\n \"\n >\n <option v-for=\"filter in schema.filters\" :key=\"filter\" :value=\"filter\">\n {{ t(`translation-manager.filters.${filter}`, {}, filter) }}\n </option>\n </select>\n </label>\n <label class=\"flex items-center gap-2 text-sm\">\n <span class=\"sr-only\">{{ t('translation-manager.group_label', {}, 'Group') }}</span>\n <select\n :class=\"SELECT\"\n :value=\"state.group\"\n @change=\"controller.setGroup(($event.target as HTMLSelectElement).value)\"\n >\n <option value=\"\">{{ t('translation-manager.all_groups', {}, 'All groups') }}</option>\n <option v-for=\"group in schema.groups\" :key=\"group.value\" :value=\"group.value\">\n {{ group.label }}\n </option>\n </select>\n </label>\n <DropdownMenu :dir=\"direction\">\n <DropdownMenuTrigger as-child>\n <Button type=\"button\" variant=\"outline\" size=\"sm\" class=\"h-9\">\n <LanguagesIcon aria-hidden=\"true\" />\n {{ t('translation-manager.locales_label', {}, 'Languages') }}\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n <DropdownMenuCheckboxItem\n v-for=\"locale in schema.locales\"\n :key=\"locale.code\"\n :model-value=\"state.visibleLocales.includes(locale.code)\"\n @update:model-value=\"\n (checked: boolean) => controller.toggleLocale(locale.code, checked)\n \"\n @select=\"(event: Event) => event.preventDefault()\"\n >\n {{ locale.label }}\n <span class=\"text-muted-foreground ms-auto font-mono text-xs\">{{ locale.code }}</span>\n </DropdownMenuCheckboxItem>\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n <div\n v-if=\"suggestionLocales.length > 0\"\n class=\"bg-muted/50 flex flex-col gap-2 rounded-md border px-3 py-2 text-sm\"\n data-slot=\"translation-suggestions\"\n >\n <div\n v-for=\"code in suggestionLocales\"\n :key=\"code\"\n class=\"flex flex-wrap items-center gap-2\"\n >\n <SparklesIcon class=\"text-primary size-4\" aria-hidden=\"true\" />\n <span class=\"flex-1 font-medium\">\n {{ t('translation-manager.suggestion', {}, 'AI suggestion') }} ·\n {{ controller.locale(code)?.label }}\n </span>\n <Button\n type=\"button\"\n size=\"sm\"\n variant=\"outline\"\n @click=\"controller.decideAll(code, 'reject')\"\n >\n {{ t('translation-manager.reject_all', {}, 'Reject all') }}\n </Button>\n <Button type=\"button\" size=\"sm\" @click=\"controller.decideAll(code, 'accept')\">\n {{ t('translation-manager.accept_all', {}, 'Accept all without warnings') }}\n </Button>\n </div>\n </div>\n </CardHeader>\n <CardContent class=\"flex flex-col gap-4 px-5\">\n <p :id=\"hintId\" class=\"text-muted-foreground text-xs\">\n {{\n t(\n 'translation-manager.keyboard',\n {},\n 'Arrow keys move between texts. Enter edits and saves, Shift + Enter adds a line break, Escape cancels.',\n )\n }}\n </p>\n <p v-if=\"state.rows.length === 0\" class=\"text-muted-foreground py-10 text-center text-sm\">\n {{ t('translation-manager.empty', {}, 'No translations match your search.') }}\n </p>\n <div v-else class=\"overflow-x-auto rounded-md border\" data-slot=\"translation-grid-scroll\">\n <table\n role=\"grid\"\n :aria-labelledby=\"labelId\"\n :aria-describedby=\"hintId\"\n :aria-busy=\"state.loading || undefined\"\n :aria-rowcount=\"state.total + 1\"\n :class=\"cn('w-full border-collapse text-sm', state.loading && 'opacity-60')\"\n data-slot=\"translation-grid\"\n >\n <thead class=\"bg-muted/50\">\n <tr>\n <th\n scope=\"col\"\n class=\"bg-muted sticky start-0 z-10 min-w-56 border-b px-3 py-2 text-start font-medium\"\n >\n {{ t('translation-manager.key', {}, 'Key') }}\n </th>\n <th\n v-for=\"locale in locales\"\n :key=\"locale.code\"\n scope=\"col\"\n class=\"min-w-64 border-s border-b px-3 py-2 text-start font-medium\"\n >\n <span class=\"flex items-center gap-2\">\n <span :lang=\"locale.code\">{{ locale.label }}</span>\n <span class=\"text-muted-foreground font-mono text-xs\">{{ locale.code }}</span>\n <Badge v-if=\"locale.base\" variant=\"secondary\">\n {{ t('translation-manager.base', {}, 'Base') }}\n </Badge>\n <Badge v-if=\"!locale.editable\" variant=\"outline\">\n {{ t('translation-manager.read_only', {}, 'Read only') }}\n </Badge>\n </span>\n </th>\n </tr>\n </thead>\n <tbody>\n <tr\n v-for=\"row in state.rows\"\n :key=\"row.id\"\n class=\"border-b last:border-b-0\"\n data-slot=\"translation-row\"\n >\n <th\n scope=\"row\"\n class=\"bg-card sticky start-0 z-10 px-3 py-2 text-start align-top font-normal\"\n >\n <div class=\"flex flex-col gap-1\">\n <code class=\"font-mono text-xs break-all\">{{ row.key }}</code>\n <div class=\"flex flex-wrap gap-1\">\n <span class=\"text-muted-foreground text-xs\">{{ row.groupLabel }}</span>\n <Badge v-if=\"row.undefined\" variant=\"destructive\">\n {{ t('translation-manager.undefined', {}, 'Not defined') }}\n </Badge>\n <Badge v-if=\"row.unused\" variant=\"outline\">\n {{ t('translation-manager.unused', {}, 'Unused') }}\n </Badge>\n </div>\n </div>\n </th>\n <td\n v-for=\"locale in locales\"\n :key=\"locale.code\"\n :ref=\"setCell({ row: row.id, locale: locale.code })\"\n role=\"gridcell\"\n :tabindex=\"\n isActive({ row: row.id, locale: locale.code }) &&\n !isEditing({ row: row.id, locale: locale.code })\n ? 0\n : -1\n \"\n :aria-selected=\"isActive({ row: row.id, locale: locale.code })\"\n :aria-readonly=\"!editable({ row: row.id, locale: locale.code }) || undefined\"\n :aria-label=\"\n isEditing({ row: row.id, locale: locale.code })\n ? undefined\n : editLabel(row.key, locale.label)\n \"\n data-slot=\"translation-cell\"\n :data-missing=\"row.cells[locale.code]?.value ? undefined : ''\"\n :data-changed=\"row.cells[locale.code]?.changed ? '' : undefined\"\n :data-active=\"isActive({ row: row.id, locale: locale.code }) ? '' : undefined\"\n :class=\"\n cn(\n 'hover:bg-accent/40 border-s px-3 py-2 align-top outline-none',\n isActive({ row: row.id, locale: locale.code }) &&\n 'ring-ring/50 ring-2 ring-inset',\n editable({ row: row.id, locale: locale.code }) && 'cursor-text',\n )\n \"\n @focus=\"\n $event.target === $event.currentTarget &&\n controller.focus({ row: row.id, locale: locale.code })\n \"\n @click=\"onCellClick({ row: row.id, locale: locale.code })\"\n @dblclick=\"controller.startEdit({ row: row.id, locale: locale.code })\"\n @keydown=\"onCellKeyDown({ row: row.id, locale: locale.code }, $event)\"\n >\n <div\n v-if=\"isEditing({ row: row.id, locale: locale.code })\"\n class=\"flex flex-col gap-2\"\n data-slot=\"translation-editor\"\n @click.stop\n >\n <template v-if=\"state.draftForms\">\n <label\n v-for=\"(form, index) in state.draftForms\"\n :key=\"index\"\n class=\"flex flex-col gap-1\"\n >\n <span class=\"text-muted-foreground text-xs\">\n {{\n t(\n 'translation-manager.plural_form',\n {\n numbers:\n row.cells[locale.code]?.formLabels?.[index] ?? String(index + 1),\n },\n 'For :numbers',\n )\n }}\n </span>\n <Textarea\n :model-value=\"form\"\n rows=\"1\"\n :dir=\"locale.direction\"\n :lang=\"locale.code\"\n :aria-label=\"`${editLabel(row.key, locale.label)} (${row.cells[locale.code]?.formLabels?.[index] ?? index + 1})`\"\n :aria-invalid=\"state.error ? true : undefined\"\n :aria-describedby=\"state.error ? errorId : undefined\"\n class=\"min-h-9\"\n @update:model-value=\"\n (value: string) => controller.setDraftForm(index, value)\n \"\n @keydown=\"onEditorKeyDown\"\n />\n </label>\n </template>\n <Textarea\n v-else\n :model-value=\"state.draft\"\n :rows=\"Math.min(8, Math.max(2, state.draft.split('\\n').length))\"\n :dir=\"locale.direction\"\n :lang=\"locale.code\"\n :aria-label=\"editLabel(row.key, locale.label)\"\n :aria-invalid=\"state.error ? true : undefined\"\n :aria-describedby=\"state.error ? errorId : undefined\"\n @update:model-value=\"(value: string) => controller.setDraft(value)\"\n @keydown=\"onEditorKeyDown\"\n />\n <p v-if=\"state.error\" :id=\"errorId\" class=\"text-destructive text-xs\">\n {{ state.error }}\n </p>\n <div class=\"flex flex-wrap items-center gap-1\">\n <Button\n type=\"button\"\n size=\"sm\"\n :disabled=\"state.saving\"\n @click=\"save({ row: row.id, locale: locale.code })\"\n >\n {{\n state.saving\n ? t('translation-manager.saving', {}, 'Saving…')\n : t('translation-manager.save', {}, 'Save')\n }}\n </Button>\n <Button\n type=\"button\"\n size=\"sm\"\n variant=\"ghost\"\n :disabled=\"state.saving\"\n @click=\"cancel({ row: row.id, locale: locale.code })\"\n >\n {{ t('translation-manager.cancel', {}, 'Cancel') }}\n </Button>\n <Button\n v-if=\"!locale.base\"\n type=\"button\"\n size=\"sm\"\n variant=\"ghost\"\n class=\"ms-auto\"\n :disabled=\"state.saving\"\n @click=\"controller.copyBase()\"\n >\n <CopyIcon aria-hidden=\"true\" />\n {{ t('translation-manager.copy_base', {}, 'Copy the base text') }}\n </Button>\n </div>\n </div>\n <div v-else class=\"flex flex-col gap-1\">\n <span\n v-if=\"row.cells[locale.code]?.value\"\n class=\"line-clamp-4 whitespace-pre-wrap\"\n :dir=\"locale.direction\"\n :lang=\"locale.code\"\n >{{ row.cells[locale.code]?.value }}</span\n >\n <span v-else class=\"text-muted-foreground italic\">\n {{ t('translation-manager.missing', {}, 'Missing') }}\n </span>\n <span\n v-if=\"\n row.cells[locale.code]?.changed ||\n row.cells[locale.code]?.warnings ||\n row.cells[locale.code]?.suggestion\n \"\n class=\"flex flex-wrap gap-1\"\n >\n <Badge v-if=\"row.cells[locale.code]?.changed\" variant=\"secondary\">\n {{ t('translation-manager.changed', {}, 'Changed in the panel') }}\n </Badge>\n <Badge\n v-if=\"row.cells[locale.code]?.warnings\"\n variant=\"destructive\"\n :title=\"row.cells[locale.code]?.warnings?.join('\\n')\"\n >\n <TriangleAlertIcon aria-hidden=\"true\" />\n {{ t('translation-manager.warnings', {}, 'Warnings') }}\n </Badge>\n <Badge v-if=\"row.cells[locale.code]?.suggestion\" variant=\"outline\">\n <SparklesIcon aria-hidden=\"true\" />\n {{ t('translation-manager.suggestion', {}, 'AI suggestion') }}\n </Badge>\n </span>\n </div>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n <div\n class=\"flex flex-wrap items-center justify-between gap-2 text-sm\"\n data-slot=\"translation-pagination\"\n >\n <span class=\"text-muted-foreground\">\n {{\n t(\n 'translation-manager.pagination',\n { ...range, total: formatter.number(state.total) },\n ':from–:to of :total',\n )\n }}\n </span>\n <div class=\"flex items-center gap-1\">\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"icon-sm\"\n :aria-label=\"t('translation-manager.previous', {}, 'Previous page')\"\n :disabled=\"state.page <= 1 || state.loading\"\n @click=\"controller.goToPage(state.page - 1)\"\n >\n <ChevronLeftIcon class=\"rtl:rotate-180\" aria-hidden=\"true\" />\n </Button>\n <span class=\"px-2 tabular-nums\">\n {{\n t(\n 'translation-manager.page',\n { page: state.page, pages: state.lastPage },\n 'Page :page of :pages',\n )\n }}\n </span>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"icon-sm\"\n :aria-label=\"t('translation-manager.next', {}, 'Next page')\"\n :disabled=\"state.page >= state.lastPage || state.loading\"\n @click=\"controller.goToPage(state.page + 1)\"\n >\n <ChevronRightIcon class=\"rtl:rotate-180\" aria-hidden=\"true\" />\n </Button>\n </div>\n </div>\n <section\n v-if=\"activeRow && activeLocale\"\n class=\"flex flex-col gap-3 rounded-md border p-4 text-sm\"\n data-slot=\"translation-details\"\n :aria-label=\"t('translation-manager.details', {}, 'Details')\"\n >\n <div class=\"flex flex-wrap items-baseline gap-2\">\n <code class=\"font-mono text-xs break-all\">{{ activeRow.key }}</code>\n <span class=\"text-muted-foreground\">· {{ activeLocale.label }}</span>\n </div>\n <div v-if=\"activeRow.placeholders?.length\" class=\"flex flex-wrap items-center gap-1\">\n <span class=\"text-muted-foreground me-1\">\n {{ t('translation-manager.placeholders', {}, 'Placeholders') }}\n </span>\n <Badge\n v-for=\"placeholder in activeRow.placeholders\"\n :key=\"placeholder\"\n variant=\"outline\"\n class=\"font-mono\"\n >\n {{ placeholder }}\n </Badge>\n </div>\n <p v-if=\"activeRow.files?.length\" class=\"text-muted-foreground\">\n {{ t('translation-manager.used_in', {}, 'Used in') }}:\n <span class=\"font-mono text-xs\">{{ activeRow.files.join(', ') }}</span>\n </p>\n <p\n v-for=\"warning in activeCell?.warnings ?? []\"\n :key=\"warning\"\n class=\"text-destructive flex items-start gap-2\"\n >\n <TriangleAlertIcon class=\"mt-0.5 size-4 shrink-0\" aria-hidden=\"true\" />\n {{ warning }}\n </p>\n <div\n v-if=\"activeCell?.suggestion\"\n class=\"bg-muted/50 flex flex-col gap-2 rounded-md p-3\"\n data-slot=\"translation-suggestion\"\n >\n <span class=\"flex items-center gap-2 font-medium\">\n <SparklesIcon class=\"text-primary size-4\" aria-hidden=\"true\" />\n {{ t('translation-manager.suggestion', {}, 'AI suggestion') }}\n </span>\n <p class=\"whitespace-pre-wrap\" :dir=\"activeLocale.direction\" :lang=\"activeLocale.code\">\n {{ activeCell.suggestion.value }}\n </p>\n <p\n v-for=\"warning in activeCell.suggestion.warnings ?? []\"\n :key=\"warning\"\n class=\"text-destructive text-xs\"\n >\n {{ warning }}\n </p>\n <div v-if=\"activeLocale.editable\" class=\"flex gap-2\">\n <Button\n type=\"button\"\n size=\"sm\"\n @click=\"controller.decide({ row: activeRow.id, locale: activeLocale.code }, 'accept')\"\n >\n <CheckIcon aria-hidden=\"true\" />\n {{ t('translation-manager.accept', {}, 'Accept') }}\n </Button>\n <Button\n type=\"button\"\n size=\"sm\"\n variant=\"outline\"\n @click=\"controller.decide({ row: activeRow.id, locale: activeLocale.code }, 'reject')\"\n >\n <XIcon aria-hidden=\"true\" />\n {{ t('translation-manager.reject', {}, 'Reject') }}\n </Button>\n </div>\n </div>\n <div\n v-if=\"state.history?.row === activeRow.id && state.history.locale === activeLocale.code\"\n class=\"flex flex-col gap-2\"\n data-slot=\"translation-history\"\n >\n <span class=\"font-medium\">{{ t('translation-manager.history', {}, 'History') }}</span>\n <p v-if=\"state.history.entries?.length === 0\" class=\"text-muted-foreground\">\n {{ t('translation-manager.history_empty', {}, 'No changes yet.') }}\n </p>\n <ol class=\"flex flex-col gap-2\">\n <li\n v-for=\"entry in state.history.entries ?? []\"\n :key=\"entry.id\"\n class=\"border-s-2 ps-3\"\n >\n <span class=\"text-muted-foreground text-xs\">\n {{ t(`translation-manager.sources.${entry.source}`, {}, entry.source) }}\n <template v-if=\"entry.user\">\n · {{ t('translation-manager.by', { name: entry.user }, 'by :name') }}\n </template>\n <template v-if=\"entry.at\"> · {{ formatter.relative(entry.at) }}</template>\n </span>\n <p\n class=\"whitespace-pre-wrap\"\n :dir=\"activeLocale.direction\"\n :lang=\"activeLocale.code\"\n >\n <template v-if=\"entry.new !== null\">{{ entry.new }}</template>\n <em v-else class=\"text-muted-foreground\">\n {{ t('translation-manager.empty_value', {}, 'Empty') }}\n </em>\n </p>\n </li>\n </ol>\n </div>\n <div v-else>\n <Button\n type=\"button\"\n size=\"sm\"\n variant=\"ghost\"\n @click=\"controller.loadHistory({ row: activeRow.id, locale: activeLocale.code })\"\n >\n <HistoryIcon aria-hidden=\"true\" />\n {{ t('translation-manager.show_history', {}, 'Show history') }}\n </Button>\n </div>\n </section>\n <div class=\"sr-only\" role=\"status\" aria-live=\"polite\">{{ state.announcement }}</div>\n </CardContent>\n </Card>\n</template>\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TranslationManagerView.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createBlock","Card","_withCtx","_createVNode","CardHeader","_createElementVNode","_unref","_toDisplayString","_createElementBlock","_Fragment","_renderList","_normalizeStyle","Input","_normalizeClass","DropdownMenu","DropdownMenuTrigger","Button","_createTextVNode","DropdownMenuContent","DropdownMenuCheckboxItem","_createCommentVNode","CardContent","Badge","_withModifiers","Textarea","Badge_default","Button_default","DropdownMenu_default","DropdownMenuContent_default","DropdownMenuTrigger_default","Input_default","Card_default","CardContent_default","Textarea_default","CardHeader_default","DropdownMenuCheckboxItem_default","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","_hoisted_19","_hoisted_20","_hoisted_21","_hoisted_22","_hoisted_23","_hoisted_24","_hoisted_25","_hoisted_26","_hoisted_27","_hoisted_28","_hoisted_29","_hoisted_30","_hoisted_31","_hoisted_32","_hoisted_33","_hoisted_34","_hoisted_35","_hoisted_36","_hoisted_37","_hoisted_38","_hoisted_39","_hoisted_40","_hoisted_41","_hoisted_42","_hoisted_43","_hoisted_44","_hoisted_45","_hoisted_46","_hoisted_47","_hoisted_48","_hoisted_49","_hoisted_50","_hoisted_51","_hoisted_52","_hoisted_53","_hoisted_54","_hoisted_55","_hoisted_56","_hoisted_57","_hoisted_58","_hoisted_59","_hoisted_60","_hoisted_61","_hoisted_62","_hoisted_63","_hoisted_64","_hoisted_65","_hoisted_66","_hoisted_67","_hoisted_68","SELECT","TranslationManagerView_vue_vue_type_script_setup_true_lang_default","props","__props","runner","useActionRunner","page","usePageActionContext","t","useT","direction","useDirection","formatter","useFormatter","labelId","useId","hintId","errorId","controller","TranslationManagerController","toRaw","notifications","showToast","notification","clientErrorNotification","message","state","useStore","cells","cellKey","ref","watch","schema","onBeforeUnmount","locales","computed","active","current","row","locale","range","suggestionLocales","activeRow","activeLocale","activeCell","isActive","isEditing","editable","setCell","element","focusCell","nextTick","editing","onCellKeyDown","event","result","onEditorKeyDown","onCellClick","wasActive","save","saved","cancel","editLabel","openBlock","createBlock","withCtx","createVNode","createElementVNode","unref","toDisplayString","createElementBlock","Fragment","renderList","normalizeStyle","SearchIcon","_cache","value","normalizeClass","$event","filter","group","LanguagesIcon","createTextVNode","checked","code","SparklesIcon","createCommentVNode","cn","withModifiers","index","form","CopyIcon","TriangleAlertIcon","ChevronLeftIcon","ChevronRightIcon","placeholder","warning","CheckIcon","XIcon","entry","HistoryIcon"],"sources":["../../../src/components/translation-manager/TranslationManagerView.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type {\n TranslationCellRef,\n TranslationFilter,\n TranslationManagerEnvironment,\n TranslationManagerSchema,\n} from '@alfakit/core'\nimport { TranslationManagerController, clientErrorNotification } from '@alfakit/core'\nimport {\n CheckIcon,\n ChevronLeftIcon,\n ChevronRightIcon,\n CopyIcon,\n HistoryIcon,\n LanguagesIcon,\n SearchIcon,\n SparklesIcon,\n TriangleAlertIcon,\n XIcon,\n} from '@lucide/vue'\nimport { computed, nextTick, onBeforeUnmount, toRaw, useId, watch } from 'vue'\nimport { useActionRunner, useDirection, useFormatter, useT } from '../../context'\nimport { useStore } from '../../composables/use-store'\nimport { cn } from '../../lib/utils'\nimport { usePageActionContext } from '../actions/action-context'\nimport { showToast } from '../notifications/flash-toasts'\nimport Badge from '../ui/Badge.vue'\nimport Button from '../ui/Button.vue'\nimport Card from '../ui/Card.vue'\nimport CardContent from '../ui/CardContent.vue'\nimport CardHeader from '../ui/CardHeader.vue'\nimport DropdownMenu from '../ui/DropdownMenu.vue'\nimport DropdownMenuCheckboxItem from '../ui/DropdownMenuCheckboxItem.vue'\nimport DropdownMenuContent from '../ui/DropdownMenuContent.vue'\nimport DropdownMenuTrigger from '../ui/DropdownMenuTrigger.vue'\nimport Input from '../ui/Input.vue'\nimport Textarea from '../ui/Textarea.vue'\n\n/**\n * Keys by locale with search, filters, inline editing (plural forms, right-to-left\n * inputs), keyboard navigation, AI suggestion review and history. Everything is computed\n * and saved by the server.\n */\nconst props = defineProps<{ schema: TranslationManagerSchema }>()\n\nconst SELECT =\n 'border-input focus-visible:border-ring focus-visible:ring-ring/50 h-9 min-w-0 rounded-md border bg-transparent px-2 text-sm shadow-xs outline-none focus-visible:ring-[3px]'\n\nconst runner = useActionRunner()\nconst page = usePageActionContext()\nconst t = useT()\nconst direction = useDirection()\nconst formatter = useFormatter()\nconst labelId = useId()\nconst hintId = useId()\nconst errorId = useId()\n\nconst environment = (): TranslationManagerEnvironment => ({\n runner,\n token: page.token,\n t,\n notify: (notifications) => notifications.forEach((notification) => showToast(notification)),\n error: (message) => showToast(clientErrorNotification('translation-manager', message)),\n})\n\nconst controller = new TranslationManagerController(toRaw(props.schema), environment())\nconst state = useStore(controller.store)\nconst cells = new Map<string, HTMLElement>()\nconst cellKey = (ref: TranslationCellRef) => `${ref.row}\\u0000${ref.locale}`\n\nwatch(\n () => props.schema,\n (schema) => controller.setSchema(toRaw(schema)),\n)\n\nonBeforeUnmount(() => controller.dispose())\n\nconst locales = computed(() => {\n void state.value.visibleLocales\n\n return controller.visibleLocales()\n})\nconst active = computed<TranslationCellRef | null>(() => {\n const current = state.value.active\n\n if (current && state.value.rows.some((row) => row.id === current.row)) return current\n\n const row = state.value.rows[0]\n const locale = locales.value[0]\n\n return row && locale ? { row: row.id, locale: locale.code } : null\n})\nconst range = computed(() => {\n void state.value.rows\n\n return controller.range()\n})\nconst suggestionLocales = computed(() => {\n void state.value.rows\n\n return controller.suggestionLocales()\n})\nconst activeRow = computed(() =>\n active.value ? state.value.rows.find((row) => row.id === active.value?.row) : undefined,\n)\nconst activeLocale = computed(() =>\n active.value ? controller.locale(active.value.locale) : undefined,\n)\nconst activeCell = computed(() =>\n activeRow.value && activeLocale.value\n ? activeRow.value.cells[activeLocale.value.code]\n : undefined,\n)\n\nconst isActive = (ref: TranslationCellRef) =>\n active.value?.row === ref.row && active.value.locale === ref.locale\nconst isEditing = (ref: TranslationCellRef) =>\n state.value.editing?.row === ref.row && state.value.editing.locale === ref.locale\nconst editable = (ref: TranslationCellRef) => {\n void state.value.rows\n\n return controller.isEditable(ref)\n}\n\nconst setCell = (ref: TranslationCellRef) => (element: unknown) => {\n if (element instanceof HTMLElement) cells.set(cellKey(ref), element)\n else cells.delete(cellKey(ref))\n}\n\nconst focusCell = (ref: TranslationCellRef | undefined) => {\n if (!ref) return\n controller.focus(ref)\n void nextTick(() => cells.get(cellKey(ref))?.focus())\n}\n\nwatch(\n () => state.value.editing,\n (editing) => {\n if (editing) {\n void nextTick(() => cells.get(cellKey(editing))?.querySelector('textarea')?.focus())\n }\n },\n)\n\nconst onCellKeyDown = (ref: TranslationCellRef, event: KeyboardEvent) => {\n if (event.target !== event.currentTarget) return\n\n const result = controller.handleCellKey(ref, event, direction.value)\n\n if (result.handled) {\n event.preventDefault()\n if (!controller.state.editing) focusCell(result.focus)\n }\n}\n\nconst onEditorKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape' || (event.key === 'Enter' && !event.shiftKey) || event.key === 'Tab') {\n event.preventDefault()\n void controller\n .handleEditorKey({ key: event.key, shiftKey: event.shiftKey, isComposing: event.isComposing })\n .then((result) => focusCell(result.focus))\n }\n}\n\nconst onCellClick = (ref: TranslationCellRef) => {\n if (isEditing(ref)) return\n const wasActive = isActive(ref)\n controller.focus(ref)\n if (wasActive) controller.startEdit(ref)\n}\n\nconst save = (ref: TranslationCellRef) => {\n void controller.save().then((saved) => saved && focusCell(ref))\n}\n\nconst cancel = (ref: TranslationCellRef) => {\n controller.cancelEdit()\n focusCell(ref)\n}\n\nconst editLabel = (key: string, locale: string) =>\n t('translation-manager.edit', { key, locale }, 'Edit :key in :locale')\n</script>\n\n<template>\n <Card class=\"gap-4 py-4\" data-slot=\"translation-manager\">\n <CardHeader class=\"flex flex-col gap-4 px-5\">\n <span :id=\"labelId\" class=\"sr-only\">{{\n t('translation-manager.label', {}, 'Translations')\n }}</span>\n <ul\n class=\"grid grid-cols-2 gap-2 sm:grid-cols-3 lg:grid-cols-6\"\n data-slot=\"translation-progress\"\n >\n <li\n v-for=\"locale in schema.locales\"\n :key=\"locale.code\"\n class=\"flex min-w-0 flex-col gap-1 rounded-md border px-3 py-2\"\n >\n <div class=\"flex items-center justify-between gap-2 text-sm\">\n <span class=\"truncate font-medium\" :lang=\"locale.code\">{{ locale.label }}</span>\n <span class=\"text-muted-foreground font-mono text-xs\">{{ locale.code }}</span>\n </div>\n <div\n role=\"progressbar\"\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n :aria-valuenow=\"Math.round((state.progress[locale.code]?.percent ?? 0) * 100)\"\n :aria-label=\"\n t(\n 'translation-manager.progress_label',\n {\n locale: locale.label,\n translated: state.progress[locale.code]?.translated ?? 0,\n total: state.progress[locale.code]?.total ?? 0,\n },\n ':locale: :translated of :total translated',\n )\n \"\n class=\"bg-muted h-1.5 overflow-hidden rounded-full\"\n >\n <div\n class=\"bg-primary h-full rounded-full transition-[width]\"\n :style=\"{ width: `${(state.progress[locale.code]?.percent ?? 0) * 100}%` }\"\n />\n </div>\n <span class=\"text-muted-foreground text-xs\">\n {{\n t(\n 'translation-manager.progress',\n { percent: formatter.percent(state.progress[locale.code]?.percent ?? 0) },\n ':percent translated',\n )\n }}\n </span>\n </li>\n </ul>\n <div class=\"flex flex-wrap items-center gap-2\" data-slot=\"translation-toolbar\">\n <div class=\"relative min-w-48 flex-1\">\n <SearchIcon\n class=\"text-muted-foreground pointer-events-none absolute start-2.5 top-1/2 size-4 -translate-y-1/2\"\n aria-hidden=\"true\"\n />\n <Input\n type=\"search\"\n :model-value=\"state.search\"\n :placeholder=\"t('translation-manager.search', {}, 'Search keys and texts…')\"\n :aria-label=\"t('translation-manager.search_label', {}, 'Search translations')\"\n class=\"ps-8\"\n @update:model-value=\"(value: string) => controller.setSearch(value)\"\n />\n </div>\n <label class=\"flex items-center gap-2 text-sm\">\n <span class=\"sr-only\">{{ t('translation-manager.filter_label', {}, 'Show') }}</span>\n <select\n :class=\"SELECT\"\n :value=\"state.filter\"\n @change=\"\n controller.setFilter(($event.target as HTMLSelectElement).value as TranslationFilter)\n \"\n >\n <option v-for=\"filter in schema.filters\" :key=\"filter\" :value=\"filter\">\n {{ t(`translation-manager.filters.${filter}`, {}, filter) }}\n </option>\n </select>\n </label>\n <label class=\"flex items-center gap-2 text-sm\">\n <span class=\"sr-only\">{{ t('translation-manager.group_label', {}, 'Group') }}</span>\n <select\n :class=\"SELECT\"\n :value=\"state.group\"\n @change=\"controller.setGroup(($event.target as HTMLSelectElement).value)\"\n >\n <option value=\"\">{{ t('translation-manager.all_groups', {}, 'All groups') }}</option>\n <option v-for=\"group in schema.groups\" :key=\"group.value\" :value=\"group.value\">\n {{ group.label }}\n </option>\n </select>\n </label>\n <DropdownMenu :dir=\"direction\">\n <DropdownMenuTrigger as-child>\n <Button type=\"button\" variant=\"outline\" size=\"sm\" class=\"h-9\">\n <LanguagesIcon aria-hidden=\"true\" />\n {{ t('translation-manager.locales_label', {}, 'Languages') }}\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n <DropdownMenuCheckboxItem\n v-for=\"locale in schema.locales\"\n :key=\"locale.code\"\n :model-value=\"state.visibleLocales.includes(locale.code)\"\n @update:model-value=\"\n (checked: boolean) => controller.toggleLocale(locale.code, checked)\n \"\n @select=\"(event: Event) => event.preventDefault()\"\n >\n {{ locale.label }}\n <span class=\"text-muted-foreground ms-auto font-mono text-xs\">{{ locale.code }}</span>\n </DropdownMenuCheckboxItem>\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n <div\n v-if=\"suggestionLocales.length > 0\"\n class=\"bg-muted/50 flex flex-col gap-2 rounded-md border px-3 py-2 text-sm\"\n data-slot=\"translation-suggestions\"\n >\n <div\n v-for=\"code in suggestionLocales\"\n :key=\"code\"\n class=\"flex flex-wrap items-center gap-2\"\n >\n <SparklesIcon class=\"text-primary size-4\" aria-hidden=\"true\" />\n <span class=\"flex-1 font-medium\">\n {{ t('translation-manager.suggestion', {}, 'AI suggestion') }} ·\n {{ controller.locale(code)?.label }}\n </span>\n <Button\n type=\"button\"\n size=\"sm\"\n variant=\"outline\"\n @click=\"controller.decideAll(code, 'reject')\"\n >\n {{ t('translation-manager.reject_all', {}, 'Reject all') }}\n </Button>\n <Button type=\"button\" size=\"sm\" @click=\"controller.decideAll(code, 'accept')\">\n {{ t('translation-manager.accept_all', {}, 'Accept all without warnings') }}\n </Button>\n </div>\n </div>\n </CardHeader>\n <CardContent class=\"flex flex-col gap-4 px-5\">\n <p :id=\"hintId\" class=\"text-muted-foreground text-xs\">\n {{\n t(\n 'translation-manager.keyboard',\n {},\n 'Arrow keys move between texts. Enter edits and saves, Shift + Enter adds a line break, Escape cancels.',\n )\n }}\n </p>\n <p v-if=\"state.rows.length === 0\" class=\"text-muted-foreground py-10 text-center text-sm\">\n {{ t('translation-manager.empty', {}, 'No translations match your search.') }}\n </p>\n <div v-else class=\"overflow-x-auto rounded-md border\" data-slot=\"translation-grid-scroll\">\n <table\n role=\"grid\"\n :aria-labelledby=\"labelId\"\n :aria-describedby=\"hintId\"\n :aria-busy=\"state.loading || undefined\"\n :aria-rowcount=\"state.total + 1\"\n :class=\"cn('w-full border-collapse text-sm', state.loading && 'opacity-60')\"\n data-slot=\"translation-grid\"\n >\n <thead class=\"bg-muted/50\">\n <tr>\n <th\n scope=\"col\"\n class=\"bg-muted sticky start-0 z-10 min-w-56 border-b px-3 py-2 text-start font-medium\"\n >\n {{ t('translation-manager.key', {}, 'Key') }}\n </th>\n <th\n v-for=\"locale in locales\"\n :key=\"locale.code\"\n scope=\"col\"\n class=\"min-w-64 border-s border-b px-3 py-2 text-start font-medium\"\n >\n <span class=\"flex items-center gap-2\">\n <span :lang=\"locale.code\">{{ locale.label }}</span>\n <span class=\"text-muted-foreground font-mono text-xs\">{{ locale.code }}</span>\n <Badge v-if=\"locale.base\" variant=\"secondary\">\n {{ t('translation-manager.base', {}, 'Base') }}\n </Badge>\n <Badge v-if=\"!locale.editable\" variant=\"outline\">\n {{ t('translation-manager.read_only', {}, 'Read only') }}\n </Badge>\n </span>\n </th>\n </tr>\n </thead>\n <tbody>\n <tr\n v-for=\"row in state.rows\"\n :key=\"row.id\"\n class=\"border-b last:border-b-0\"\n data-slot=\"translation-row\"\n >\n <th\n scope=\"row\"\n class=\"bg-card sticky start-0 z-10 px-3 py-2 text-start align-top font-normal\"\n >\n <div class=\"flex flex-col gap-1\">\n <code class=\"font-mono text-xs break-all\">{{ row.key }}</code>\n <div class=\"flex flex-wrap gap-1\">\n <span class=\"text-muted-foreground text-xs\">{{ row.groupLabel }}</span>\n <Badge v-if=\"row.undefined\" variant=\"destructive\">\n {{ t('translation-manager.undefined', {}, 'Not defined') }}\n </Badge>\n <Badge v-if=\"row.unused\" variant=\"outline\">\n {{ t('translation-manager.unused', {}, 'Unused') }}\n </Badge>\n </div>\n </div>\n </th>\n <td\n v-for=\"locale in locales\"\n :key=\"locale.code\"\n :ref=\"setCell({ row: row.id, locale: locale.code })\"\n role=\"gridcell\"\n :tabindex=\"\n isActive({ row: row.id, locale: locale.code }) &&\n !isEditing({ row: row.id, locale: locale.code })\n ? 0\n : -1\n \"\n :aria-selected=\"isActive({ row: row.id, locale: locale.code })\"\n :aria-readonly=\"!editable({ row: row.id, locale: locale.code }) || undefined\"\n :aria-label=\"\n isEditing({ row: row.id, locale: locale.code })\n ? undefined\n : editLabel(row.key, locale.label)\n \"\n data-slot=\"translation-cell\"\n :data-missing=\"row.cells[locale.code]?.value ? undefined : ''\"\n :data-changed=\"row.cells[locale.code]?.changed ? '' : undefined\"\n :data-active=\"isActive({ row: row.id, locale: locale.code }) ? '' : undefined\"\n :class=\"\n cn(\n 'hover:bg-accent/40 border-s px-3 py-2 align-top outline-none',\n isActive({ row: row.id, locale: locale.code }) &&\n 'ring-ring/50 ring-2 ring-inset',\n editable({ row: row.id, locale: locale.code }) && 'cursor-text',\n )\n \"\n @focus=\"\n $event.target === $event.currentTarget &&\n controller.focus({ row: row.id, locale: locale.code })\n \"\n @click=\"onCellClick({ row: row.id, locale: locale.code })\"\n @dblclick=\"controller.startEdit({ row: row.id, locale: locale.code })\"\n @keydown=\"onCellKeyDown({ row: row.id, locale: locale.code }, $event)\"\n >\n <div\n v-if=\"isEditing({ row: row.id, locale: locale.code })\"\n class=\"flex flex-col gap-2\"\n data-slot=\"translation-editor\"\n @click.stop\n >\n <template v-if=\"state.draftForms\">\n <label\n v-for=\"(form, index) in state.draftForms\"\n :key=\"index\"\n class=\"flex flex-col gap-1\"\n >\n <span class=\"text-muted-foreground text-xs\">\n {{\n t(\n 'translation-manager.plural_form',\n {\n numbers:\n row.cells[locale.code]?.formLabels?.[index] ?? String(index + 1),\n },\n 'For :numbers',\n )\n }}\n </span>\n <Textarea\n :model-value=\"form\"\n rows=\"1\"\n :dir=\"locale.direction\"\n :lang=\"locale.code\"\n :aria-label=\"`${editLabel(row.key, locale.label)} (${row.cells[locale.code]?.formLabels?.[index] ?? index + 1})`\"\n :aria-invalid=\"state.error ? true : undefined\"\n :aria-describedby=\"state.error ? errorId : undefined\"\n class=\"min-h-9\"\n @update:model-value=\"\n (value: string) => controller.setDraftForm(index, value)\n \"\n @keydown=\"onEditorKeyDown\"\n />\n </label>\n </template>\n <Textarea\n v-else\n :model-value=\"state.draft\"\n :rows=\"Math.min(8, Math.max(2, state.draft.split('\\n').length))\"\n :dir=\"locale.direction\"\n :lang=\"locale.code\"\n :aria-label=\"editLabel(row.key, locale.label)\"\n :aria-invalid=\"state.error ? true : undefined\"\n :aria-describedby=\"state.error ? errorId : undefined\"\n @update:model-value=\"(value: string) => controller.setDraft(value)\"\n @keydown=\"onEditorKeyDown\"\n />\n <p v-if=\"state.error\" :id=\"errorId\" class=\"text-destructive text-xs\">\n {{ state.error }}\n </p>\n <div class=\"flex flex-wrap items-center gap-1\">\n <Button\n type=\"button\"\n size=\"sm\"\n :disabled=\"state.saving\"\n @click=\"save({ row: row.id, locale: locale.code })\"\n >\n {{\n state.saving\n ? t('translation-manager.saving', {}, 'Saving…')\n : t('translation-manager.save', {}, 'Save')\n }}\n </Button>\n <Button\n type=\"button\"\n size=\"sm\"\n variant=\"ghost\"\n :disabled=\"state.saving\"\n @click=\"cancel({ row: row.id, locale: locale.code })\"\n >\n {{ t('translation-manager.cancel', {}, 'Cancel') }}\n </Button>\n <Button\n v-if=\"!locale.base\"\n type=\"button\"\n size=\"sm\"\n variant=\"ghost\"\n class=\"ms-auto\"\n :disabled=\"state.saving\"\n @click=\"controller.copyBase()\"\n >\n <CopyIcon aria-hidden=\"true\" />\n {{ t('translation-manager.copy_base', {}, 'Copy the base text') }}\n </Button>\n </div>\n </div>\n <div v-else class=\"flex flex-col gap-1\">\n <span\n v-if=\"row.cells[locale.code]?.value\"\n class=\"line-clamp-4 whitespace-pre-wrap\"\n :dir=\"locale.direction\"\n :lang=\"locale.code\"\n >{{ row.cells[locale.code]?.value }}</span\n >\n <span v-else class=\"text-muted-foreground italic\">\n {{ t('translation-manager.missing', {}, 'Missing') }}\n </span>\n <span\n v-if=\"\n row.cells[locale.code]?.changed ||\n row.cells[locale.code]?.warnings ||\n row.cells[locale.code]?.suggestion\n \"\n class=\"flex flex-wrap gap-1\"\n >\n <Badge v-if=\"row.cells[locale.code]?.changed\" variant=\"secondary\">\n {{ t('translation-manager.changed', {}, 'Changed in the panel') }}\n </Badge>\n <Badge\n v-if=\"row.cells[locale.code]?.warnings\"\n variant=\"destructive\"\n :title=\"row.cells[locale.code]?.warnings?.join('\\n')\"\n >\n <TriangleAlertIcon aria-hidden=\"true\" />\n {{ t('translation-manager.warnings', {}, 'Warnings') }}\n </Badge>\n <Badge v-if=\"row.cells[locale.code]?.suggestion\" variant=\"outline\">\n <SparklesIcon aria-hidden=\"true\" />\n {{ t('translation-manager.suggestion', {}, 'AI suggestion') }}\n </Badge>\n </span>\n </div>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n <div\n class=\"flex flex-wrap items-center justify-between gap-2 text-sm\"\n data-slot=\"translation-pagination\"\n >\n <span class=\"text-muted-foreground\">\n {{\n t(\n 'translation-manager.pagination',\n { ...range, total: formatter.number(state.total) },\n ':from–:to of :total',\n )\n }}\n </span>\n <div class=\"flex items-center gap-1\">\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"icon-sm\"\n :aria-label=\"t('translation-manager.previous', {}, 'Previous page')\"\n :disabled=\"state.page <= 1 || state.loading\"\n @click=\"controller.goToPage(state.page - 1)\"\n >\n <ChevronLeftIcon class=\"rtl:rotate-180\" aria-hidden=\"true\" />\n </Button>\n <span class=\"px-2 tabular-nums\">\n {{\n t(\n 'translation-manager.page',\n { page: state.page, pages: state.lastPage },\n 'Page :page of :pages',\n )\n }}\n </span>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"icon-sm\"\n :aria-label=\"t('translation-manager.next', {}, 'Next page')\"\n :disabled=\"state.page >= state.lastPage || state.loading\"\n @click=\"controller.goToPage(state.page + 1)\"\n >\n <ChevronRightIcon class=\"rtl:rotate-180\" aria-hidden=\"true\" />\n </Button>\n </div>\n </div>\n <section\n v-if=\"activeRow && activeLocale\"\n class=\"flex flex-col gap-3 rounded-md border p-4 text-sm\"\n data-slot=\"translation-details\"\n :aria-label=\"t('translation-manager.details', {}, 'Details')\"\n >\n <div class=\"flex flex-wrap items-baseline gap-2\">\n <code class=\"font-mono text-xs break-all\">{{ activeRow.key }}</code>\n <span class=\"text-muted-foreground\">· {{ activeLocale.label }}</span>\n </div>\n <div v-if=\"activeRow.placeholders?.length\" class=\"flex flex-wrap items-center gap-1\">\n <span class=\"text-muted-foreground me-1\">\n {{ t('translation-manager.placeholders', {}, 'Placeholders') }}\n </span>\n <Badge\n v-for=\"placeholder in activeRow.placeholders\"\n :key=\"placeholder\"\n variant=\"outline\"\n class=\"font-mono\"\n >\n {{ placeholder }}\n </Badge>\n </div>\n <p v-if=\"activeRow.files?.length\" class=\"text-muted-foreground\">\n {{ t('translation-manager.used_in', {}, 'Used in') }}:\n <span class=\"font-mono text-xs\">{{ activeRow.files.join(', ') }}</span>\n </p>\n <p\n v-for=\"warning in activeCell?.warnings ?? []\"\n :key=\"warning\"\n class=\"text-destructive flex items-start gap-2\"\n >\n <TriangleAlertIcon class=\"mt-0.5 size-4 shrink-0\" aria-hidden=\"true\" />\n {{ warning }}\n </p>\n <div\n v-if=\"activeCell?.suggestion\"\n class=\"bg-muted/50 flex flex-col gap-2 rounded-md p-3\"\n data-slot=\"translation-suggestion\"\n >\n <span class=\"flex items-center gap-2 font-medium\">\n <SparklesIcon class=\"text-primary size-4\" aria-hidden=\"true\" />\n {{ t('translation-manager.suggestion', {}, 'AI suggestion') }}\n </span>\n <p class=\"whitespace-pre-wrap\" :dir=\"activeLocale.direction\" :lang=\"activeLocale.code\">\n {{ activeCell.suggestion.value }}\n </p>\n <p\n v-for=\"warning in activeCell.suggestion.warnings ?? []\"\n :key=\"warning\"\n class=\"text-destructive text-xs\"\n >\n {{ warning }}\n </p>\n <div v-if=\"activeLocale.editable\" class=\"flex gap-2\">\n <Button\n type=\"button\"\n size=\"sm\"\n @click=\"controller.decide({ row: activeRow.id, locale: activeLocale.code }, 'accept')\"\n >\n <CheckIcon aria-hidden=\"true\" />\n {{ t('translation-manager.accept', {}, 'Accept') }}\n </Button>\n <Button\n type=\"button\"\n size=\"sm\"\n variant=\"outline\"\n @click=\"controller.decide({ row: activeRow.id, locale: activeLocale.code }, 'reject')\"\n >\n <XIcon aria-hidden=\"true\" />\n {{ t('translation-manager.reject', {}, 'Reject') }}\n </Button>\n </div>\n </div>\n <div\n v-if=\"state.history?.row === activeRow.id && state.history.locale === activeLocale.code\"\n class=\"flex flex-col gap-2\"\n data-slot=\"translation-history\"\n >\n <span class=\"font-medium\">{{ t('translation-manager.history', {}, 'History') }}</span>\n <p v-if=\"state.history.entries?.length === 0\" class=\"text-muted-foreground\">\n {{ t('translation-manager.history_empty', {}, 'No changes yet.') }}\n </p>\n <ol class=\"flex flex-col gap-2\">\n <li\n v-for=\"entry in state.history.entries ?? []\"\n :key=\"entry.id\"\n class=\"border-s-2 ps-3\"\n >\n <span class=\"text-muted-foreground text-xs\">\n {{ t(`translation-manager.sources.${entry.source}`, {}, entry.source) }}\n <template v-if=\"entry.user\">\n · {{ t('translation-manager.by', { name: entry.user }, 'by :name') }}\n </template>\n <template v-if=\"entry.at\"> · {{ formatter.relative(entry.at) }}</template>\n </span>\n <p\n class=\"whitespace-pre-wrap\"\n :dir=\"activeLocale.direction\"\n :lang=\"activeLocale.code\"\n >\n <template v-if=\"entry.new !== null\">{{ entry.new }}</template>\n <em v-else class=\"text-muted-foreground\">\n {{ t('translation-manager.empty_value', {}, 'Empty') }}\n </em>\n </p>\n </li>\n </ol>\n </div>\n <div v-else>\n <Button\n type=\"button\"\n size=\"sm\"\n variant=\"ghost\"\n @click=\"controller.loadHistory({ row: activeRow.id, locale: activeLocale.code })\"\n >\n <HistoryIcon aria-hidden=\"true\" />\n {{ t('translation-manager.show_history', {}, 'Show history') }}\n </Button>\n </div>\n </section>\n <div class=\"sr-only\" role=\"status\" aria-live=\"polite\">{{ state.announcement }}</div>\n </CardContent>\n </Card>\n</template>\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CommandAutoHighlight.js","names":["_sfc_main","CommandAutoHighlight_vue_vue_type_script_setup_true_lang_default","CommandAutoHighlight_default"],"sources":["../../../src/components/ui/CommandAutoHighlight.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { injectListboxRootContext } from 'reka-ui'\nimport { nextTick, watch } from 'vue'\n\n/**\n * Inside a `Command`: highlights the first item when `items` change and nothing (still on\n * the page) is highlighted, as cmdk does in React. Results that arrive after typing (a\n * server search) would otherwise leave Enter with nothing to select.\n */\nconst props = defineProps<{ items: unknown }>()\nconst root = injectListboxRootContext()\n\nwatch(\n () => props.items,\n () =>\n nextTick(() => {\n const highlighted = root.highlightedElement.value\n\n if (!highlighted || !highlighted.isConnected) root.highlightFirstItem()\n }),\n { deep: true },\n)\n</script>\n\n<template>\n <slot />\n</template>\n"],"mappings":""}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Inside a `Command`: highlights the first item when `items` change and nothing (still on
|
|
3
|
+
* the page) is highlighted, as cmdk does in React. Results that arrive after typing (a
|
|
4
|
+
* server search) would otherwise leave Enter with nothing to select.
|
|
5
|
+
*/
|
|
6
|
+
type __VLS_Props = {
|
|
7
|
+
items: unknown;
|
|
8
|
+
};
|
|
9
|
+
declare var __VLS_1: {};
|
|
10
|
+
type __VLS_Slots = {} & {
|
|
11
|
+
default?: (props: typeof __VLS_1) => any;
|
|
12
|
+
};
|
|
13
|
+
declare const __VLS_component: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
14
|
+
declare const _default: __VLS_WithSlots<typeof __VLS_component, __VLS_Slots>;
|
|
15
|
+
export default _default;
|
|
16
|
+
type __VLS_WithSlots<T, S> = T & {
|
|
17
|
+
new (): {
|
|
18
|
+
$slots: S;
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=CommandAutoHighlight.vue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CommandAutoHighlight.vue.d.ts","sourceRoot":"","sources":["../../../src/components/ui/CommandAutoHighlight.vue"],"names":[],"mappings":"AAgCA;;;;GAIG;AACH,KAAK,WAAW,GAAG;IAAE,KAAK,EAAE,OAAO,CAAA;CAAE,CAAC;AA0BtC,QAAA,IAAI,OAAO,IAAW,CAAE;AACxB,KAAK,WAAW,GAAG,EAAE,GACnB;IAAE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,OAAO,KAAK,GAAG,CAAA;CAAE,CAAC;AAkB/C,QAAA,MAAM,eAAe,kSAMnB,CAAC;wBACkB,eAAe,CAAC,OAAO,eAAe,EAAE,WAAW,CAAC;AAAzE,wBAA0E;AAQ1E,KAAK,eAAe,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IAChC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KAEV,CAAA;CACD,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { defineComponent as e, nextTick as t, renderSlot as n, watch as r } from "vue";
|
|
2
|
+
import { injectListboxRootContext as i } from "reka-ui";
|
|
3
|
+
//#region src/components/ui/CommandAutoHighlight.vue?vue&type=script&setup=true&lang.ts
|
|
4
|
+
var a = /*@__PURE__*/ e({
|
|
5
|
+
__name: "CommandAutoHighlight",
|
|
6
|
+
props: { items: {} },
|
|
7
|
+
setup(e) {
|
|
8
|
+
let a = e, o = i();
|
|
9
|
+
return r(() => a.items, () => t(() => {
|
|
10
|
+
let e = o.highlightedElement.value;
|
|
11
|
+
(!e || !e.isConnected) && o.highlightFirstItem();
|
|
12
|
+
}), { deep: !0 }), (e, t) => n(e.$slots, "default");
|
|
13
|
+
}
|
|
14
|
+
});
|
|
15
|
+
//#endregion
|
|
16
|
+
export { a as default };
|
|
17
|
+
|
|
18
|
+
//# sourceMappingURL=CommandAutoHighlight.vue_vue_type_script_setup_true_lang.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CommandAutoHighlight.vue_vue_type_script_setup_true_lang.js","names":["_renderSlot","CommandAutoHighlight_vue_vue_type_script_setup_true_lang_default","props","__props","root","injectListboxRootContext","watch","nextTick","highlighted","renderSlot","_ctx"],"sources":["../../../src/components/ui/CommandAutoHighlight.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { injectListboxRootContext } from 'reka-ui'\nimport { nextTick, watch } from 'vue'\n\n/**\n * Inside a `Command`: highlights the first item when `items` change and nothing (still on\n * the page) is highlighted, as cmdk does in React. Results that arrive after typing (a\n * server search) would otherwise leave Enter with nothing to select.\n */\nconst props = defineProps<{ items: unknown }>()\nconst root = injectListboxRootContext()\n\nwatch(\n () => props.items,\n () =>\n nextTick(() => {\n const highlighted = root.highlightedElement.value\n\n if (!highlighted || !highlighted.isConnected) root.highlightFirstItem()\n }),\n { deep: true },\n)\n</script>\n\n<template>\n <slot />\n</template>\n"],"mappings":";;;;;;;EASA,IAAME,IAAQC,GACRC,IAAOC,EAAyB;SAEtCC,QACQJ,EAAM,aAEVK,QAAe;GACb,IAAMC,IAAcJ,EAAK,mBAAmB;GAE5C,CAAI,CAACI,KAAe,CAACA,EAAY,gBAAaJ,EAAK,mBAAmB;EACxE,CAAC,GACH,EAAE,MAAM,GAAK,CACf,aAIEJ,EAAQU,EAAA,QAAA,SAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DialogContent.js","names":["_sfc_main","DialogContent_vue_vue_type_script_setup_true_lang_default","DialogContent_default"],"sources":["../../../src/components/ui/DialogContent.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { XIcon } from '@lucide/vue'\nimport { reactiveOmit } from '@vueuse/core'\nimport {\n DialogClose,\n DialogContent,\n DialogOverlay,\n DialogPortal,\n useForwardPropsEmits,\n type DialogContentEmits,\n type DialogContentProps,\n} from 'reka-ui'\nimport type { HTMLAttributes } from 'vue'\nimport { Icon } from '../../lib/icons'\nimport { cn } from '../../lib/utils'\nimport { useT } from '../../context'\n\nconst props = withDefaults(\n defineProps<\n DialogContentProps & { class?: HTMLAttributes['class']; showCloseButton?: boolean }\n >(),\n { showCloseButton: true },\n)\n// The root is the portal, so extra attributes (data-slot, role, data-*) would be lost:\n// forward them to the content element like the React and Svelte wrappers. `class` is a prop\n// and is merged below, never replaced.\ndefineOptions({ inheritAttrs: false })\n\nconst emits = defineEmits<DialogContentEmits>()\nconst forwarded = useForwardPropsEmits(reactiveOmit(props, 'class', 'showCloseButton'), emits)\nconst t = useT()\n</script>\n\n<template>\n <DialogPortal data-slot=\"dialog-portal\">\n <DialogOverlay\n data-slot=\"dialog-overlay\"\n class=\"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50\"\n />\n <DialogContent\n data-slot=\"dialog-content\"\n v-bind=\"{ ...forwarded, ...$attrs }\"\n :class=\"\n cn(\n 'bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg',\n props.class,\n )\n \"\n >\n <slot />\n <DialogClose\n v-if=\"props.showCloseButton\"\n data-slot=\"dialog-close\"\n class=\"ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute end-4 top-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\"\n >\n <Icon name=\"alfakit::support.modal.close-button\" :fallback=\"XIcon\" />\n <span class=\"sr-only\">{{ t('close', {}, 'Close') }}</span>\n </DialogClose>\n </DialogContent>\n </DialogPortal>\n</template>\n"],"mappings":""}
|
|
1
|
+
{"version":3,"file":"DialogContent.js","names":["_sfc_main","DialogContent_vue_vue_type_script_setup_true_lang_default","DialogContent_default"],"sources":["../../../src/components/ui/DialogContent.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { XIcon } from '@lucide/vue'\nimport { reactiveOmit } from '@vueuse/core'\nimport {\n DialogClose,\n DialogContent,\n DialogOverlay,\n DialogPortal,\n useDirection,\n useForwardPropsEmits,\n type DialogContentEmits,\n type DialogContentProps,\n} from 'reka-ui'\nimport type { HTMLAttributes } from 'vue'\nimport { Icon } from '../../lib/icons'\nimport { cn } from '../../lib/utils'\nimport { useT } from '../../context'\n\nconst props = withDefaults(\n defineProps<\n DialogContentProps & { class?: HTMLAttributes['class']; showCloseButton?: boolean }\n >(),\n { showCloseButton: true },\n)\n// The root is the portal, so extra attributes (data-slot, role, data-*) would be lost:\n// forward them to the content element like the React and Svelte wrappers. `class` is a prop\n// and is merged below, never replaced.\ndefineOptions({ inheritAttrs: false })\n\nconst emits = defineEmits<DialogContentEmits>()\nconst forwarded = useForwardPropsEmits(reactiveOmit(props, 'class', 'showCloseButton'), emits)\n// Portaled outside Alfakit's root: carry the reading direction (starter kit pages and\n// standalone components leave <html dir> to the host).\nconst dir = useDirection()\nconst t = useT()\n</script>\n\n<template>\n <DialogPortal data-slot=\"dialog-portal\">\n <DialogOverlay\n data-slot=\"dialog-overlay\"\n class=\"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50\"\n />\n <DialogContent\n data-slot=\"dialog-content\"\n v-bind=\"{ dir, ...forwarded, ...$attrs }\"\n :class=\"\n cn(\n 'bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg',\n props.class,\n )\n \"\n >\n <slot />\n <DialogClose\n v-if=\"props.showCloseButton\"\n data-slot=\"dialog-close\"\n class=\"ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute end-4 top-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\"\n >\n <Icon name=\"alfakit::support.modal.close-button\" :fallback=\"XIcon\" />\n <span class=\"sr-only\">{{ t('close', {}, 'Close') }}</span>\n </DialogClose>\n </DialogContent>\n </DialogPortal>\n</template>\n"],"mappings":""}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DialogContent.vue.d.ts","sourceRoot":"","sources":["../../../src/components/ui/DialogContent.vue"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"DialogContent.vue.d.ts","sourceRoot":"","sources":["../../../src/components/ui/DialogContent.vue"],"names":[],"mappings":"AAqEA,OAAO,EAQL,KAAK,kBAAkB,EACxB,MAAM,SAAS,CAAA;AAChB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,KAAK,CAAA;AAKzC,KAAK,WAAW,GAAG,kBAAkB,GAAG;IAAE,KAAK,CAAC,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC;IAAC,eAAe,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAyIvG,QAAA,IAAI,QAAQ,IAAY,CAAE;AAC1B,KAAK,WAAW,GAAG,EAAE,GACnB;IAAE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,QAAQ,KAAK,GAAG,CAAA;CAAE,CAAC;AA+BhD,QAAA,MAAM,eAAe;;;;;;;;;;;;;;;qBA1KwE,OAAO;6EAkLlG,CAAC;wBACkB,eAAe,CAAC,OAAO,eAAe,EAAE,WAAW,CAAC;AAAzE,wBAA0E;AAa1E,KAAK,eAAe,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IAChC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KAEV,CAAA;CACD,CAAC"}
|
|
@@ -2,11 +2,11 @@ import { useT as e } from "../../context.js";
|
|
|
2
2
|
import { cn as t } from "../../lib/utils.js";
|
|
3
3
|
import n from "../../lib/Icon.js";
|
|
4
4
|
import { createBlock as r, createCommentVNode as i, createElementVNode as a, createVNode as o, defineComponent as s, mergeProps as c, openBlock as l, renderSlot as u, toDisplayString as d, unref as f, withCtx as p } from "vue";
|
|
5
|
-
import { DialogClose as m, DialogContent as h, DialogOverlay as g, DialogPortal as _,
|
|
6
|
-
import { XIcon as
|
|
7
|
-
import { reactiveOmit as
|
|
5
|
+
import { DialogClose as m, DialogContent as h, DialogOverlay as g, DialogPortal as _, useDirection as v, useForwardPropsEmits as y } from "reka-ui";
|
|
6
|
+
import { XIcon as b } from "@lucide/vue";
|
|
7
|
+
import { reactiveOmit as x } from "@vueuse/core";
|
|
8
8
|
//#region src/components/ui/DialogContent.vue?vue&type=script&setup=true&lang.ts
|
|
9
|
-
var
|
|
9
|
+
var S = { class: "sr-only" }, C = /*@__PURE__*/ s({
|
|
10
10
|
inheritAttrs: !1,
|
|
11
11
|
__name: "DialogContent",
|
|
12
12
|
props: {
|
|
@@ -34,25 +34,26 @@ var x = { class: "sr-only" }, S = /*@__PURE__*/ s({
|
|
|
34
34
|
"openAutoFocus",
|
|
35
35
|
"closeAutoFocus"
|
|
36
36
|
],
|
|
37
|
-
setup(s, { emit:
|
|
38
|
-
let
|
|
37
|
+
setup(s, { emit: C }) {
|
|
38
|
+
let w = s, T = C, E = y(x(w, "class", "showCloseButton"), T), D = v(), O = e();
|
|
39
39
|
return (e, s) => (l(), r(f(_), { "data-slot": "dialog-portal" }, {
|
|
40
40
|
default: p(() => [o(f(g), {
|
|
41
41
|
"data-slot": "dialog-overlay",
|
|
42
42
|
class: "data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50"
|
|
43
43
|
}), o(f(h), c({ "data-slot": "dialog-content" }, {
|
|
44
|
-
|
|
44
|
+
dir: f(D),
|
|
45
|
+
...f(E),
|
|
45
46
|
...e.$attrs
|
|
46
|
-
}, { class: f(t)("bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg",
|
|
47
|
-
default: p(() => [u(e.$slots, "default"),
|
|
47
|
+
}, { class: f(t)("bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg", w.class) }), {
|
|
48
|
+
default: p(() => [u(e.$slots, "default"), w.showCloseButton ? (l(), r(f(m), {
|
|
48
49
|
key: 0,
|
|
49
50
|
"data-slot": "dialog-close",
|
|
50
51
|
class: "ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute end-4 top-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4"
|
|
51
52
|
}, {
|
|
52
53
|
default: p(() => [o(f(n), {
|
|
53
54
|
name: "alfakit::support.modal.close-button",
|
|
54
|
-
fallback: f(
|
|
55
|
-
}, null, 8, ["fallback"]), a("span",
|
|
55
|
+
fallback: f(b)
|
|
56
|
+
}, null, 8, ["fallback"]), a("span", S, d(f(O)("close", {}, "Close")), 1)]),
|
|
56
57
|
_: 1
|
|
57
58
|
})) : i("", !0)]),
|
|
58
59
|
_: 3
|
|
@@ -62,6 +63,6 @@ var x = { class: "sr-only" }, S = /*@__PURE__*/ s({
|
|
|
62
63
|
}
|
|
63
64
|
});
|
|
64
65
|
//#endregion
|
|
65
|
-
export {
|
|
66
|
+
export { C as default };
|
|
66
67
|
|
|
67
68
|
//# sourceMappingURL=DialogContent.vue_vue_type_script_setup_true_lang.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DialogContent.vue_vue_type_script_setup_true_lang.js","names":["$attrs","_openBlock","_createBlock","_unref","_withCtx","_createVNode","_mergeProps","_renderSlot","Icon","_createElementVNode","_toDisplayString","_createCommentVNode","Icon_default","_hoisted_1","DialogContent_vue_vue_type_script_setup_true_lang_default","__emit","props","__props","emits","forwarded","useForwardPropsEmits","reactiveOmit","t","useT","openBlock","createBlock","unref","DialogPortal","withCtx","createVNode","DialogOverlay","DialogContent","mergeProps","_ctx","cn","renderSlot","DialogClose","XIcon","createElementVNode","toDisplayString","createCommentVNode"],"sources":["../../../src/components/ui/DialogContent.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { XIcon } from '@lucide/vue'\nimport { reactiveOmit } from '@vueuse/core'\nimport {\n DialogClose,\n DialogContent,\n DialogOverlay,\n DialogPortal,\n useForwardPropsEmits,\n type DialogContentEmits,\n type DialogContentProps,\n} from 'reka-ui'\nimport type { HTMLAttributes } from 'vue'\nimport { Icon } from '../../lib/icons'\nimport { cn } from '../../lib/utils'\nimport { useT } from '../../context'\n\nconst props = withDefaults(\n defineProps<\n DialogContentProps & { class?: HTMLAttributes['class']; showCloseButton?: boolean }\n >(),\n { showCloseButton: true },\n)\n// The root is the portal, so extra attributes (data-slot, role, data-*) would be lost:\n// forward them to the content element like the React and Svelte wrappers. `class` is a prop\n// and is merged below, never replaced.\ndefineOptions({ inheritAttrs: false })\n\nconst emits = defineEmits<DialogContentEmits>()\nconst forwarded = useForwardPropsEmits(reactiveOmit(props, 'class', 'showCloseButton'), emits)\nconst t = useT()\n</script>\n\n<template>\n <DialogPortal data-slot=\"dialog-portal\">\n <DialogOverlay\n data-slot=\"dialog-overlay\"\n class=\"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50\"\n />\n <DialogContent\n data-slot=\"dialog-content\"\n v-bind=\"{ ...forwarded, ...$attrs }\"\n :class=\"\n cn(\n 'bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg',\n props.class,\n )\n \"\n >\n <slot />\n <DialogClose\n v-if=\"props.showCloseButton\"\n data-slot=\"dialog-close\"\n class=\"ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute end-4 top-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\"\n >\n <Icon name=\"alfakit::support.modal.close-button\" :fallback=\"XIcon\" />\n <span class=\"sr-only\">{{ t('close', {}, 'Close') }}</span>\n </DialogClose>\n </DialogContent>\n </DialogPortal>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"DialogContent.vue_vue_type_script_setup_true_lang.js","names":["$attrs","_openBlock","_createBlock","_unref","_withCtx","_createVNode","_mergeProps","_renderSlot","Icon","_createElementVNode","_toDisplayString","_createCommentVNode","Icon_default","_hoisted_1","DialogContent_vue_vue_type_script_setup_true_lang_default","__emit","props","__props","emits","forwarded","useForwardPropsEmits","reactiveOmit","dir","useDirection","t","useT","openBlock","createBlock","unref","DialogPortal","withCtx","createVNode","DialogOverlay","DialogContent","mergeProps","_ctx","cn","renderSlot","DialogClose","XIcon","createElementVNode","toDisplayString","createCommentVNode"],"sources":["../../../src/components/ui/DialogContent.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { XIcon } from '@lucide/vue'\nimport { reactiveOmit } from '@vueuse/core'\nimport {\n DialogClose,\n DialogContent,\n DialogOverlay,\n DialogPortal,\n useDirection,\n useForwardPropsEmits,\n type DialogContentEmits,\n type DialogContentProps,\n} from 'reka-ui'\nimport type { HTMLAttributes } from 'vue'\nimport { Icon } from '../../lib/icons'\nimport { cn } from '../../lib/utils'\nimport { useT } from '../../context'\n\nconst props = withDefaults(\n defineProps<\n DialogContentProps & { class?: HTMLAttributes['class']; showCloseButton?: boolean }\n >(),\n { showCloseButton: true },\n)\n// The root is the portal, so extra attributes (data-slot, role, data-*) would be lost:\n// forward them to the content element like the React and Svelte wrappers. `class` is a prop\n// and is merged below, never replaced.\ndefineOptions({ inheritAttrs: false })\n\nconst emits = defineEmits<DialogContentEmits>()\nconst forwarded = useForwardPropsEmits(reactiveOmit(props, 'class', 'showCloseButton'), emits)\n// Portaled outside Alfakit's root: carry the reading direction (starter kit pages and\n// standalone components leave <html dir> to the host).\nconst dir = useDirection()\nconst t = useT()\n</script>\n\n<template>\n <DialogPortal data-slot=\"dialog-portal\">\n <DialogOverlay\n data-slot=\"dialog-overlay\"\n class=\"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50\"\n />\n <DialogContent\n data-slot=\"dialog-content\"\n v-bind=\"{ dir, ...forwarded, ...$attrs }\"\n :class=\"\n cn(\n 'bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg',\n props.class,\n )\n \"\n >\n <slot />\n <DialogClose\n v-if=\"props.showCloseButton\"\n data-slot=\"dialog-close\"\n class=\"ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute end-4 top-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\"\n >\n <Icon name=\"alfakit::support.modal.close-button\" :fallback=\"XIcon\" />\n <span class=\"sr-only\">{{ t('close', {}, 'Close') }}</span>\n </DialogClose>\n </DialogContent>\n </DialogPortal>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkBA,IAAMgB,IAAQC,GAWRC,IAAQH,GACRI,IAAYC,EAAqBC,EAAaL,GAAO,SAAS,iBAAiB,GAAGE,CAAK,GAGvFI,IAAMC,EAAa,GACnBC,IAAIC,EAAK;oBAIbxB,EAAA,GAAAC,EAyBeC,EAAA0B,CAAA,GAAA,EAzBD,aAAU,gBAAe,GAAA;GACrC,SAAAzB,QAGE,CAHFC,EAGEF,EAAA6B,CAAA,GAAA;IAFA,aAAU;IACV,OAAM;GAER3B,CAAAA,GAAAA,EAmBgBF,EAAA8B,CAAA,GAnBhB3B,EAmBgB,EAlBd,aAAU,iBAAgB,GAAA;IAAA,KAChBH,EAAAmB,CAAA;IAAG,GAAKnB,EAAAgB,CAAA;IAAS,GAAKnB,EAAAA;GAAM,GAAA,EACrC,OAAgBG,EAAAiC,CAAA,CAAE,CAAA,+WAAqYpB,EAAM,KAAA,EAAA,CAAA,GAAA;IAO9Z,SAAAZ,QAAQ,CAARG,EAAQ4B,EAAA,QAAA,SAAA,GAEAnB,EAAM,mBADdf,EAAA,GAAAC,EAOcC,EAAAmC,CAAA,GAAA;;KALZ,aAAU;KACV,OAAM;;KAEN,SAAAlC,QAAqE,CAArEC,EAAqEF,EAAAK,CAAA,GAAA;MAA/D,MAAK;MAAuC,UAAUL,EAAAoC,CAAA;KAC5D9B,GAAAA,MAAAA,GAAAA,CAAAA,UAAAA,CAAAA,GAAAA,EAA0D,QAA1DI,GAA0DH,EAAjCP,EAAAqB,CAAA,CAAC,CAAA,SAAA,CAAA,GAAA,OAAA,CAAA,GAAA,CAAA,CAAA,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PopoverContent.js","names":["_sfc_main","PopoverContent_vue_vue_type_script_setup_true_lang_default","PopoverContent_default"],"sources":["../../../src/components/ui/PopoverContent.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { reactiveOmit } from '@vueuse/core'\nimport {\n PopoverContent,\n PopoverPortal,\n useForwardPropsEmits,\n type PopoverContentEmits,\n type PopoverContentProps,\n} from 'reka-ui'\nimport type { HTMLAttributes } from 'vue'\nimport { cn } from '../../lib/utils'\n\nconst props = withDefaults(\n defineProps<PopoverContentProps & { class?: HTMLAttributes['class'] }>(),\n { align: 'center', sideOffset: 4 },\n)\n// The root is the portal, so extra attributes (data-slot, role, data-*) would be lost:\n// forward them to the content element. `class` is a prop and is merged, never replaced.\ndefineOptions({ inheritAttrs: false })\n\nconst emits = defineEmits<PopoverContentEmits>()\nconst forwarded = useForwardPropsEmits(reactiveOmit(props, 'class'), emits)\n</script>\n\n<template>\n <PopoverPortal>\n <PopoverContent\n data-slot=\"popover-content\"\n v-bind=\"{ ...forwarded, ...$attrs }\"\n :class=\"\n cn(\n 'bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-72 origin-(--reka-popover-content-transform-origin) rounded-md border p-4 shadow-md outline-hidden',\n props.class,\n )\n \"\n >\n <slot />\n </PopoverContent>\n </PopoverPortal>\n</template>\n"],"mappings":""}
|
|
1
|
+
{"version":3,"file":"PopoverContent.js","names":["_sfc_main","PopoverContent_vue_vue_type_script_setup_true_lang_default","PopoverContent_default"],"sources":["../../../src/components/ui/PopoverContent.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { reactiveOmit } from '@vueuse/core'\nimport {\n PopoverContent,\n PopoverPortal,\n useDirection,\n useForwardPropsEmits,\n type PopoverContentEmits,\n type PopoverContentProps,\n} from 'reka-ui'\nimport type { HTMLAttributes } from 'vue'\nimport { cn } from '../../lib/utils'\n\nconst props = withDefaults(\n defineProps<PopoverContentProps & { class?: HTMLAttributes['class'] }>(),\n { align: 'center', sideOffset: 4 },\n)\n// The root is the portal, so extra attributes (data-slot, role, data-*) would be lost:\n// forward them to the content element. `class` is a prop and is merged, never replaced.\ndefineOptions({ inheritAttrs: false })\n\nconst emits = defineEmits<PopoverContentEmits>()\nconst forwarded = useForwardPropsEmits(reactiveOmit(props, 'class'), emits)\n// Portaled outside Alfakit's root: carry the reading direction (starter kit pages and\n// standalone components leave <html dir> to the host).\nconst dir = useDirection()\n</script>\n\n<template>\n <PopoverPortal>\n <PopoverContent\n data-slot=\"popover-content\"\n v-bind=\"{ ...forwarded, dir: forwarded.dir ?? dir, ...$attrs }\"\n :class=\"\n cn(\n 'bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-72 origin-(--reka-popover-content-transform-origin) rounded-md border p-4 shadow-md outline-hidden',\n props.class,\n )\n \"\n >\n <slot />\n </PopoverContent>\n </PopoverPortal>\n</template>\n"],"mappings":""}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PopoverContent.vue.d.ts","sourceRoot":"","sources":["../../../src/components/ui/PopoverContent.vue"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"PopoverContent.vue.d.ts","sourceRoot":"","sources":["../../../src/components/ui/PopoverContent.vue"],"names":[],"mappings":"AA+CA,OAAO,EAML,KAAK,mBAAmB,EACzB,MAAM,SAAS,CAAA;AAChB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,KAAK,CAAA;AAGzC,KAAK,WAAW,GAAG,mBAAmB,GAAG;IAAE,KAAK,CAAC,EAAE,cAAc,CAAC,OAAO,CAAC,CAAA;CAAE,CAAC;AA+D7E,QAAA,IAAI,QAAQ,IAAW,CAAE;AACzB,KAAK,WAAW,GAAG,EAAE,GACnB;IAAE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,QAAQ,KAAK,GAAG,CAAA;CAAE,CAAC;AA0BhD,QAAA,MAAM,eAAe;;;;;;;;;;;;;;;;;6EAQnB,CAAC;wBACkB,eAAe,CAAC,OAAO,eAAe,EAAE,WAAW,CAAC;AAAzE,wBAA0E;AAa1E,KAAK,eAAe,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IAChC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KAEV,CAAA;CACD,CAAC"}
|