@alfakit/vue 0.1.9 → 0.1.10

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.
Files changed (122) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/app/components.d.ts.map +1 -1
  3. package/dist/app/components.js +1 -0
  4. package/dist/app/components.js.map +1 -1
  5. package/dist/components/dev-tools/DevToolsInspector.js.map +1 -1
  6. package/dist/components/dev-tools/DevToolsInspector.vue.d.ts.map +1 -1
  7. package/dist/components/dev-tools/DevToolsInspector.vue_vue_type_script_setup_true_lang.js +1 -1
  8. package/dist/components/dev-tools/DevToolsInspector.vue_vue_type_script_setup_true_lang.js.map +1 -1
  9. package/dist/components/fields/CheckboxListField.js.map +1 -1
  10. package/dist/components/fields/CheckboxListField.vue.d.ts.map +1 -1
  11. package/dist/components/fields/CheckboxListField.vue_vue_type_script_setup_true_lang.js +2 -2
  12. package/dist/components/fields/CheckboxListField.vue_vue_type_script_setup_true_lang.js.map +1 -1
  13. package/dist/components/fields/DatePickerField.js.map +1 -1
  14. package/dist/components/fields/DatePickerField.vue.d.ts.map +1 -1
  15. package/dist/components/fields/DatePickerField.vue_vue_type_script_setup_true_lang.js +34 -32
  16. package/dist/components/fields/DatePickerField.vue_vue_type_script_setup_true_lang.js.map +1 -1
  17. package/dist/components/fields/RichEditorSuggestions.js.map +1 -1
  18. package/dist/components/fields/RichEditorSuggestions.vue.d.ts +1 -1
  19. package/dist/components/fields/RichEditorSuggestions.vue.d.ts.map +1 -1
  20. package/dist/components/fields/RichEditorSuggestions.vue_vue_type_script_setup_true_lang.js +29 -23
  21. package/dist/components/fields/RichEditorSuggestions.vue_vue_type_script_setup_true_lang.js.map +1 -1
  22. package/dist/components/fields/RichEditorToolbarGroup.js.map +1 -1
  23. package/dist/components/fields/RichEditorToolbarGroup.vue.d.ts.map +1 -1
  24. package/dist/components/fields/RichEditorToolbarGroup.vue_vue_type_script_setup_true_lang.js +9 -4
  25. package/dist/components/fields/RichEditorToolbarGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
  26. package/dist/components/file-manager/FileManagerView.js.map +1 -1
  27. package/dist/components/file-manager/FileManagerView.vue.d.ts.map +1 -1
  28. package/dist/components/file-manager/FileManagerView.vue_vue_type_script_setup_true_lang.js +5 -1
  29. package/dist/components/file-manager/FileManagerView.vue_vue_type_script_setup_true_lang.js.map +1 -1
  30. package/dist/components/layout/CalloutComponent.js.map +1 -1
  31. package/dist/components/layout/CalloutComponent.vue.d.ts.map +1 -1
  32. package/dist/components/layout/CalloutComponent.vue_vue_type_script_setup_true_lang.js +43 -39
  33. package/dist/components/layout/CalloutComponent.vue_vue_type_script_setup_true_lang.js.map +1 -1
  34. package/dist/components/layout/EmptyStateComponent.js.map +1 -1
  35. package/dist/components/layout/EmptyStateComponent.vue.d.ts.map +1 -1
  36. package/dist/components/layout/EmptyStateComponent.vue_vue_type_script_setup_true_lang.js +29 -26
  37. package/dist/components/layout/EmptyStateComponent.vue_vue_type_script_setup_true_lang.js.map +1 -1
  38. package/dist/components/layout/MixedContent.js.map +1 -1
  39. package/dist/components/layout/MixedContent.vue.d.ts +5 -3
  40. package/dist/components/layout/MixedContent.vue.d.ts.map +1 -1
  41. package/dist/components/layout/MixedContent.vue_vue_type_script_setup_true_lang.js +5 -4
  42. package/dist/components/layout/MixedContent.vue_vue_type_script_setup_true_lang.js.map +1 -1
  43. package/dist/components/layout/SectionComponent.js.map +1 -1
  44. package/dist/components/layout/SectionComponent.vue.d.ts.map +1 -1
  45. package/dist/components/layout/SectionComponent.vue_vue_type_script_setup_true_lang.js +12 -8
  46. package/dist/components/layout/SectionComponent.vue_vue_type_script_setup_true_lang.js.map +1 -1
  47. package/dist/components/notifications/NotificationsMenu.js.map +1 -1
  48. package/dist/components/notifications/NotificationsMenu.vue.d.ts.map +1 -1
  49. package/dist/components/notifications/NotificationsMenu.vue_vue_type_script_setup_true_lang.js +133 -104
  50. package/dist/components/notifications/NotificationsMenu.vue_vue_type_script_setup_true_lang.js.map +1 -1
  51. package/dist/components/panel/ShortcutsOverlay.js.map +1 -1
  52. package/dist/components/panel/ShortcutsOverlay.vue.d.ts.map +1 -1
  53. package/dist/components/panel/ShortcutsOverlay.vue_vue_type_script_setup_true_lang.js +20 -19
  54. package/dist/components/panel/ShortcutsOverlay.vue_vue_type_script_setup_true_lang.js.map +1 -1
  55. package/dist/components/table/ColumnManager.js.map +1 -1
  56. package/dist/components/table/ColumnManager.vue.d.ts.map +1 -1
  57. package/dist/components/table/ColumnManager.vue_vue_type_script_setup_true_lang.js +6 -6
  58. package/dist/components/table/ColumnManager.vue_vue_type_script_setup_true_lang.js.map +1 -1
  59. package/dist/components/table/Spreadsheet.js.map +1 -1
  60. package/dist/components/table/Spreadsheet.vue.d.ts.map +1 -1
  61. package/dist/components/table/Spreadsheet.vue_vue_type_script_setup_true_lang.js +37 -33
  62. package/dist/components/table/Spreadsheet.vue_vue_type_script_setup_true_lang.js.map +1 -1
  63. package/dist/components/translation-manager/TranslationManagerView.js.map +1 -1
  64. package/dist/components/translation-manager/TranslationManagerView.vue.d.ts.map +1 -1
  65. package/dist/components/translation-manager/TranslationManagerView.vue_vue_type_script_setup_true_lang.js +1 -1
  66. package/dist/components/translation-manager/TranslationManagerView.vue_vue_type_script_setup_true_lang.js.map +1 -1
  67. package/dist/components/ui/SidebarMenuButton.js.map +1 -1
  68. package/dist/components/ui/SidebarMenuButton.vue.d.ts.map +1 -1
  69. package/dist/components/ui/SidebarMenuButton.vue_vue_type_script_setup_true_lang.js +12 -12
  70. package/dist/components/ui/SidebarMenuButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
  71. package/dist/components/widgets/StatCard.js.map +1 -1
  72. package/dist/components/widgets/StatCard.vue.d.ts.map +1 -1
  73. package/dist/components/widgets/StatCard.vue_vue_type_script_setup_true_lang.js +30 -30
  74. package/dist/components/widgets/StatCard.vue_vue_type_script_setup_true_lang.js.map +1 -1
  75. package/dist/eject-manifest.json +2 -2
  76. package/dist/pages/AlfakitPage.js.map +1 -1
  77. package/dist/pages/AlfakitPage.vue.d.ts.map +1 -1
  78. package/dist/pages/AlfakitPage.vue_vue_type_script_setup_true_lang.js +16 -19
  79. package/dist/pages/AlfakitPage.vue_vue_type_script_setup_true_lang.js.map +1 -1
  80. package/dist/standalone/AlfakitComponent.js.map +1 -1
  81. package/dist/standalone/AlfakitComponent.vue.d.ts.map +1 -1
  82. package/dist/standalone/AlfakitComponent.vue_vue_type_script_setup_true_lang.js +2 -2
  83. package/dist/standalone/AlfakitComponent.vue_vue_type_script_setup_true_lang.js.map +1 -1
  84. package/dist/standalone/runtime.d.ts.map +1 -1
  85. package/dist/standalone/runtime.js +25 -25
  86. package/dist/standalone/runtime.js.map +1 -1
  87. package/dist/standalone.css +2 -1
  88. package/dist/starter-kit/AlfakitStarterKitRoot.js.map +1 -1
  89. package/dist/starter-kit/AlfakitStarterKitRoot.vue.d.ts.map +1 -1
  90. package/dist/starter-kit/AlfakitStarterKitRoot.vue_vue_type_script_setup_true_lang.js +1 -1
  91. package/dist/starter-kit/AlfakitStarterKitRoot.vue_vue_type_script_setup_true_lang.js.map +1 -1
  92. package/dist/starter-kit/navigation.d.ts +6 -1
  93. package/dist/starter-kit/navigation.d.ts.map +1 -1
  94. package/dist/starter-kit/navigation.js +11 -10
  95. package/dist/starter-kit/navigation.js.map +1 -1
  96. package/dist/styles.css +2 -1
  97. package/dist/themes.css +4 -0
  98. package/package.json +2 -2
  99. package/src/app/components.ts +3 -0
  100. package/src/components/dev-tools/DevToolsInspector.vue +1 -1
  101. package/src/components/fields/CheckboxListField.vue +2 -2
  102. package/src/components/fields/DatePickerField.vue +1 -0
  103. package/src/components/fields/RichEditorSuggestions.vue +13 -6
  104. package/src/components/fields/RichEditorToolbarGroup.vue +16 -1
  105. package/src/components/file-manager/FileManagerView.vue +3 -1
  106. package/src/components/layout/CalloutComponent.vue +15 -2
  107. package/src/components/layout/EmptyStateComponent.vue +10 -1
  108. package/src/components/layout/MixedContent.vue +12 -4
  109. package/src/components/layout/SectionComponent.vue +20 -4
  110. package/src/components/notifications/NotificationsMenu.vue +45 -1
  111. package/src/components/panel/ShortcutsOverlay.vue +27 -22
  112. package/src/components/table/ColumnManager.vue +6 -4
  113. package/src/components/table/Spreadsheet.vue +9 -4
  114. package/src/components/translation-manager/TranslationManagerView.vue +1 -1
  115. package/src/components/ui/SidebarMenuButton.vue +6 -0
  116. package/src/components/widgets/StatCard.vue +6 -3
  117. package/src/pages/AlfakitPage.vue +13 -3
  118. package/src/standalone/AlfakitComponent.vue +8 -4
  119. package/src/standalone/runtime.ts +3 -0
  120. package/src/starter-kit/AlfakitStarterKitRoot.vue +3 -2
  121. package/src/starter-kit/navigation.ts +12 -1
  122. package/src/styles.css +2 -1
@@ -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","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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"}
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-card sticky start-0 z-10 min-w-56 border-b [background-image:linear-gradient(var(--muted),var(--muted))] 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 +1 @@
1
- {"version":3,"file":"SidebarMenuButton.js","names":["_sfc_main","SidebarMenuButton_vue_vue_type_script_setup_true_lang_default","SidebarMenuButton_default"],"sources":["../../../src/components/ui/SidebarMenuButton.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { Primitive, type PrimitiveProps } from 'reka-ui'\nimport type { HTMLAttributes } from 'vue'\nimport { cn } from '../../lib/utils'\nimport { sidebarMenuButtonVariants, type SidebarMenuButtonVariants } from './sidebar-menu-button'\nimport Tooltip from './Tooltip.vue'\nimport TooltipContent from './TooltipContent.vue'\nimport TooltipTrigger from './TooltipTrigger.vue'\nimport { useSidebar } from './use-sidebar'\n\nconst props = withDefaults(\n defineProps<\n PrimitiveProps & {\n isActive?: boolean\n variant?: SidebarMenuButtonVariants['variant']\n size?: SidebarMenuButtonVariants['size']\n tooltip?: string\n class?: HTMLAttributes['class']\n }\n >(),\n { as: 'button', isActive: false, variant: 'default', size: 'default' },\n)\nconst { isMobile, state } = useSidebar()\n</script>\n\n<template>\n <Tooltip v-if=\"props.tooltip\">\n <TooltipTrigger as-child>\n <Primitive\n data-slot=\"sidebar-menu-button\"\n data-sidebar=\"menu-button\"\n :data-size=\"props.size\"\n :data-active=\"props.isActive\"\n :as=\"props.as\"\n :as-child=\"props.asChild\"\n :class=\"\n cn(sidebarMenuButtonVariants({ variant: props.variant, size: props.size }), props.class)\n \"\n >\n <slot />\n </Primitive>\n </TooltipTrigger>\n <TooltipContent side=\"right\" align=\"center\" :hidden=\"state !== 'collapsed' || isMobile\">{{\n props.tooltip\n }}</TooltipContent>\n </Tooltip>\n <Primitive\n v-else\n data-slot=\"sidebar-menu-button\"\n data-sidebar=\"menu-button\"\n :data-size=\"props.size\"\n :data-active=\"props.isActive\"\n :as=\"props.as\"\n :as-child=\"props.asChild\"\n :class=\"\n cn(sidebarMenuButtonVariants({ variant: props.variant, size: props.size }), props.class)\n \"\n >\n <slot />\n </Primitive>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"SidebarMenuButton.js","names":["_sfc_main","SidebarMenuButton_vue_vue_type_script_setup_true_lang_default","SidebarMenuButton_default"],"sources":["../../../src/components/ui/SidebarMenuButton.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { Primitive, type PrimitiveProps } from 'reka-ui'\nimport type { HTMLAttributes } from 'vue'\nimport { cn } from '../../lib/utils'\nimport { sidebarMenuButtonVariants, type SidebarMenuButtonVariants } from './sidebar-menu-button'\nimport Tooltip from './Tooltip.vue'\nimport TooltipContent from './TooltipContent.vue'\nimport TooltipTrigger from './TooltipTrigger.vue'\nimport { useSidebar } from './use-sidebar'\n\n// Attributes from an `as-child` parent (CollapsibleTrigger's click handler and ARIA state,\n// a nav item's extra attributes) go on the button, not on the renderless Tooltip root.\ndefineOptions({ inheritAttrs: false })\n\nconst props = withDefaults(\n defineProps<\n PrimitiveProps & {\n isActive?: boolean\n variant?: SidebarMenuButtonVariants['variant']\n size?: SidebarMenuButtonVariants['size']\n tooltip?: string\n class?: HTMLAttributes['class']\n }\n >(),\n { as: 'button', isActive: false, variant: 'default', size: 'default' },\n)\nconst { isMobile, state } = useSidebar()\n</script>\n\n<template>\n <Tooltip v-if=\"props.tooltip\">\n <TooltipTrigger as-child>\n <Primitive\n v-bind=\"$attrs\"\n data-slot=\"sidebar-menu-button\"\n data-sidebar=\"menu-button\"\n :data-size=\"props.size\"\n :data-active=\"props.isActive\"\n :as=\"props.as\"\n :as-child=\"props.asChild\"\n :class=\"\n cn(sidebarMenuButtonVariants({ variant: props.variant, size: props.size }), props.class)\n \"\n >\n <slot />\n </Primitive>\n </TooltipTrigger>\n <TooltipContent side=\"right\" align=\"center\" :hidden=\"state !== 'collapsed' || isMobile\">{{\n props.tooltip\n }}</TooltipContent>\n </Tooltip>\n <Primitive\n v-else\n v-bind=\"$attrs\"\n data-slot=\"sidebar-menu-button\"\n data-sidebar=\"menu-button\"\n :data-size=\"props.size\"\n :data-active=\"props.isActive\"\n :as=\"props.as\"\n :as-child=\"props.asChild\"\n :class=\"\n cn(sidebarMenuButtonVariants({ variant: props.variant, size: props.size }), props.class)\n \"\n >\n <slot />\n </Primitive>\n</template>\n"],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"SidebarMenuButton.vue.d.ts","sourceRoot":"","sources":["../../../src/components/ui/SidebarMenuButton.vue"],"names":[],"mappings":"AA+DA,OAAO,EAAa,KAAK,cAAc,EAAE,MAAM,SAAS,CAAA;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,KAAK,CAAA;AAEzC,OAAO,EAA6B,KAAK,yBAAyB,EAAE,MAAM,uBAAuB,CAAA;AAMjG,KAAK,WAAW,GAAG,cAAc,GAAG;IAC9B,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,OAAO,CAAC,EAAE,yBAAyB,CAAC,SAAS,CAAC,CAAA;IAC9C,IAAI,CAAC,EAAE,yBAAyB,CAAC,MAAM,CAAC,CAAA;IACxC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,cAAc,CAAC,OAAO,CAAC,CAAA;CAChC,CAAC;AAsHN,QAAA,IAAI,QAAQ,IAAW,EAAE,QAAQ,IAAY,CAAE;AAC/C,KAAK,WAAW,GAAG,EAAE,GACnB;IAAE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,QAAQ,KAAK,GAAG,CAAA;CAAE,GAC7C;IAAE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,QAAQ,KAAK,GAAG,CAAA;CAAE,CAAC;AA6BhD,QAAA,MAAM,eAAe;;;;cA3JJ,OAAO;6EAkKtB,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"}
1
+ {"version":3,"file":"SidebarMenuButton.vue.d.ts","sourceRoot":"","sources":["../../../src/components/ui/SidebarMenuButton.vue"],"names":[],"mappings":"AAqEA,OAAO,EAAa,KAAK,cAAc,EAAE,MAAM,SAAS,CAAA;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,KAAK,CAAA;AAEzC,OAAO,EAA6B,KAAK,yBAAyB,EAAE,MAAM,uBAAuB,CAAA;AAUjG,KAAK,WAAW,GAAG,cAAc,GAAG;IAC9B,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,OAAO,CAAC,EAAE,yBAAyB,CAAC,SAAS,CAAC,CAAA;IAC9C,IAAI,CAAC,EAAE,yBAAyB,CAAC,MAAM,CAAC,CAAA;IACxC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,cAAc,CAAC,OAAO,CAAC,CAAA;CAChC,CAAC;AAsHN,QAAA,IAAI,QAAQ,IAAW,EAAE,QAAQ,IAAY,CAAE;AAC/C,KAAK,WAAW,GAAG,EAAE,GACnB;IAAE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,QAAQ,KAAK,GAAG,CAAA;CAAE,GAC7C;IAAE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,QAAQ,KAAK,GAAG,CAAA;CAAE,CAAC;AA8BhD,QAAA,MAAM,eAAe;;;;cA5JJ,OAAO;6EAmKtB,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"}
@@ -4,10 +4,11 @@ import n from "./TooltipContent.js";
4
4
  import r from "./TooltipTrigger.js";
5
5
  import { useSidebar as i } from "./use-sidebar.js";
6
6
  import { sidebarMenuButtonVariants as a } from "./sidebar-menu-button.js";
7
- import { createBlock as o, createTextVNode as s, createVNode as c, defineComponent as l, normalizeClass as u, openBlock as d, renderSlot as f, toDisplayString as p, unref as m, withCtx as h } from "vue";
7
+ import { createBlock as o, createTextVNode as s, createVNode as c, defineComponent as l, mergeProps as u, openBlock as d, renderSlot as f, toDisplayString as p, unref as m, withCtx as h } from "vue";
8
8
  import { Primitive as g } from "reka-ui";
9
9
  //#region src/components/ui/SidebarMenuButton.vue?vue&type=script&setup=true&lang.ts
10
10
  var _ = /*@__PURE__*/ l({
11
+ inheritAttrs: !1,
11
12
  __name: "SidebarMenuButton",
12
13
  props: {
13
14
  asChild: { type: Boolean },
@@ -31,21 +32,21 @@ var _ = /*@__PURE__*/ l({
31
32
  let _ = l, { isMobile: v, state: y } = i();
32
33
  return (i, l) => _.tooltip ? (d(), o(t, { key: 0 }, {
33
34
  default: h(() => [c(r, { "as-child": "" }, {
34
- default: h(() => [c(m(g), {
35
+ default: h(() => [c(m(g), u(i.$attrs, {
35
36
  "data-slot": "sidebar-menu-button",
36
37
  "data-sidebar": "menu-button",
37
38
  "data-size": _.size,
38
39
  "data-active": _.isActive,
39
40
  as: _.as,
40
41
  "as-child": _.asChild,
41
- class: u(m(e)(m(a)({
42
+ class: m(e)(m(a)({
42
43
  variant: _.variant,
43
44
  size: _.size
44
- }), _.class))
45
- }, {
45
+ }), _.class)
46
+ }), {
46
47
  default: h(() => [f(i.$slots, "default")]),
47
48
  _: 3
48
- }, 8, [
49
+ }, 16, [
49
50
  "data-size",
50
51
  "data-active",
51
52
  "as",
@@ -62,22 +63,21 @@ var _ = /*@__PURE__*/ l({
62
63
  _: 1
63
64
  }, 8, ["hidden"])]),
64
65
  _: 3
65
- })) : (d(), o(m(g), {
66
- key: 1,
66
+ })) : (d(), o(m(g), u({ key: 1 }, i.$attrs, {
67
67
  "data-slot": "sidebar-menu-button",
68
68
  "data-sidebar": "menu-button",
69
69
  "data-size": _.size,
70
70
  "data-active": _.isActive,
71
71
  as: _.as,
72
72
  "as-child": _.asChild,
73
- class: u(m(e)(m(a)({
73
+ class: m(e)(m(a)({
74
74
  variant: _.variant,
75
75
  size: _.size
76
- }), _.class))
77
- }, {
76
+ }), _.class)
77
+ }), {
78
78
  default: h(() => [f(i.$slots, "default")]),
79
79
  _: 3
80
- }, 8, [
80
+ }, 16, [
81
81
  "data-size",
82
82
  "data-active",
83
83
  "as",
@@ -1 +1 @@
1
- {"version":3,"file":"SidebarMenuButton.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createBlock","Tooltip","_withCtx","_createVNode","TooltipTrigger","_unref","_normalizeClass","_renderSlot","TooltipContent","_createTextVNode","_toDisplayString","Tooltip_default","TooltipContent_default","TooltipTrigger_default","SidebarMenuButton_vue_vue_type_script_setup_true_lang_default","props","__props","useSidebar","openBlock","createBlock","withCtx","createVNode","unref","Primitive","normalizeClass","cn","sidebarMenuButtonVariants","renderSlot","_ctx","state","isMobile","createTextVNode","toDisplayString"],"sources":["../../../src/components/ui/SidebarMenuButton.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { Primitive, type PrimitiveProps } from 'reka-ui'\nimport type { HTMLAttributes } from 'vue'\nimport { cn } from '../../lib/utils'\nimport { sidebarMenuButtonVariants, type SidebarMenuButtonVariants } from './sidebar-menu-button'\nimport Tooltip from './Tooltip.vue'\nimport TooltipContent from './TooltipContent.vue'\nimport TooltipTrigger from './TooltipTrigger.vue'\nimport { useSidebar } from './use-sidebar'\n\nconst props = withDefaults(\n defineProps<\n PrimitiveProps & {\n isActive?: boolean\n variant?: SidebarMenuButtonVariants['variant']\n size?: SidebarMenuButtonVariants['size']\n tooltip?: string\n class?: HTMLAttributes['class']\n }\n >(),\n { as: 'button', isActive: false, variant: 'default', size: 'default' },\n)\nconst { isMobile, state } = useSidebar()\n</script>\n\n<template>\n <Tooltip v-if=\"props.tooltip\">\n <TooltipTrigger as-child>\n <Primitive\n data-slot=\"sidebar-menu-button\"\n data-sidebar=\"menu-button\"\n :data-size=\"props.size\"\n :data-active=\"props.isActive\"\n :as=\"props.as\"\n :as-child=\"props.asChild\"\n :class=\"\n cn(sidebarMenuButtonVariants({ variant: props.variant, size: props.size }), props.class)\n \"\n >\n <slot />\n </Primitive>\n </TooltipTrigger>\n <TooltipContent side=\"right\" align=\"center\" :hidden=\"state !== 'collapsed' || isMobile\">{{\n props.tooltip\n }}</TooltipContent>\n </Tooltip>\n <Primitive\n v-else\n data-slot=\"sidebar-menu-button\"\n data-sidebar=\"menu-button\"\n :data-size=\"props.size\"\n :data-active=\"props.isActive\"\n :as=\"props.as\"\n :as-child=\"props.asChild\"\n :class=\"\n cn(sidebarMenuButtonVariants({ variant: props.variant, size: props.size }), props.class)\n \"\n >\n <slot />\n </Primitive>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAUA,IAAMgB,IAAQC,GAYR,EAAE,aAAU,aAAUC,EAAW;mBAItBF,EAAM,WAArBhB,EAAA,GAAAC,EAmBUC,GAAA,EAAA,KAAA,EAAA,GAAA;GAlBR,SAAAC,QAciB,CAdjBC,EAciBC,GAAA,EAdD,YAAA,GAAQ,GAAA;IACtB,SAAAF,QAYY,CAZZC,EAYYE,EAAAkB,CAAA,GAAA;KAXV,aAAU;KACV,gBAAa;KACZ,aAAWR,EAAM;KACjB,eAAaA,EAAM;KACnB,IAAIA,EAAM;KACV,YAAUA,EAAM;KAChB,OAAKT,EAAaD,EAAAoB,CAAA,CAAE,CAACpB,EAAAqB,CAAA,CAAyB,CAAA;MAAA,SAAYX,EAAM;MAAO,MAAQA,EAAM;KAAI,CAAA,GAAKA,EAAM,KAAK,CAAA;;KAI1G,SAAAb,QAAQ,CAARK,EAAQqB,EAAA,QAAA,SAAA,CAAA,CAAA;;;;;;;;;;GAGZzB,CAAAA,GAAAA,EAEmBK,GAAA;IAFH,MAAK;IAAQ,OAAM;IAAU,QAAQH,EAAAwB,CAAA,MAAK,eAAoBxB,EAAAyB,CAAA;;IAAU,SAAA5B,QAEtF,CADAO,EAAAC,EAAAK,EAAM,OAAO,GAAA,CAAA,CAAA,CAAA;;;;EAGjBhB,CAAAA,MAAAA,EAAA,GAAAC,EAaYK,EAAAkB,CAAA,GAAA;;GAXV,aAAU;GACV,gBAAa;GACZ,aAAWR,EAAM;GACjB,eAAaA,EAAM;GACnB,IAAIA,EAAM;GACV,YAAUA,EAAM;GAChB,OAAKT,EAASD,EAAAoB,CAAA,CAAE,CAACpB,EAAAqB,CAAA,CAAyB,CAAA;IAAA,SAAYX,EAAM;IAAO,MAAQA,EAAM;GAAI,CAAA,GAAKA,EAAM,KAAK,CAAA;;GAItG,SAAAb,QAAQ,CAARK,EAAQqB,EAAA,QAAA,SAAA,CAAA,CAAA"}
1
+ {"version":3,"file":"SidebarMenuButton.vue_vue_type_script_setup_true_lang.js","names":["$attrs","_openBlock","_createBlock","Tooltip","_withCtx","_createVNode","TooltipTrigger","_unref","_mergeProps","_renderSlot","TooltipContent","_createTextVNode","_toDisplayString","Tooltip_default","TooltipContent_default","TooltipTrigger_default","SidebarMenuButton_vue_vue_type_script_setup_true_lang_default","props","__props","useSidebar","openBlock","createBlock","withCtx","createVNode","unref","Primitive","mergeProps","_ctx","cn","sidebarMenuButtonVariants","renderSlot","state","isMobile","createTextVNode","toDisplayString"],"sources":["../../../src/components/ui/SidebarMenuButton.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { Primitive, type PrimitiveProps } from 'reka-ui'\nimport type { HTMLAttributes } from 'vue'\nimport { cn } from '../../lib/utils'\nimport { sidebarMenuButtonVariants, type SidebarMenuButtonVariants } from './sidebar-menu-button'\nimport Tooltip from './Tooltip.vue'\nimport TooltipContent from './TooltipContent.vue'\nimport TooltipTrigger from './TooltipTrigger.vue'\nimport { useSidebar } from './use-sidebar'\n\n// Attributes from an `as-child` parent (CollapsibleTrigger's click handler and ARIA state,\n// a nav item's extra attributes) go on the button, not on the renderless Tooltip root.\ndefineOptions({ inheritAttrs: false })\n\nconst props = withDefaults(\n defineProps<\n PrimitiveProps & {\n isActive?: boolean\n variant?: SidebarMenuButtonVariants['variant']\n size?: SidebarMenuButtonVariants['size']\n tooltip?: string\n class?: HTMLAttributes['class']\n }\n >(),\n { as: 'button', isActive: false, variant: 'default', size: 'default' },\n)\nconst { isMobile, state } = useSidebar()\n</script>\n\n<template>\n <Tooltip v-if=\"props.tooltip\">\n <TooltipTrigger as-child>\n <Primitive\n v-bind=\"$attrs\"\n data-slot=\"sidebar-menu-button\"\n data-sidebar=\"menu-button\"\n :data-size=\"props.size\"\n :data-active=\"props.isActive\"\n :as=\"props.as\"\n :as-child=\"props.asChild\"\n :class=\"\n cn(sidebarMenuButtonVariants({ variant: props.variant, size: props.size }), props.class)\n \"\n >\n <slot />\n </Primitive>\n </TooltipTrigger>\n <TooltipContent side=\"right\" align=\"center\" :hidden=\"state !== 'collapsed' || isMobile\">{{\n props.tooltip\n }}</TooltipContent>\n </Tooltip>\n <Primitive\n v-else\n v-bind=\"$attrs\"\n data-slot=\"sidebar-menu-button\"\n data-sidebar=\"menu-button\"\n :data-size=\"props.size\"\n :data-active=\"props.isActive\"\n :as=\"props.as\"\n :as-child=\"props.asChild\"\n :class=\"\n cn(sidebarMenuButtonVariants({ variant: props.variant, size: props.size }), props.class)\n \"\n >\n <slot />\n </Primitive>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAcA,IAAMiB,IAAQC,GAYR,EAAE,aAAU,aAAUC,EAAW;mBAItBF,EAAM,WAArBhB,EAAA,GAAAC,EAoBUC,GAAA,EAAA,KAAA,EAAA,GAAA;GAnBR,SAAAC,QAeiB,CAfjBC,EAeiBC,GAAA,EAfD,YAAA,GAAQ,GAAA;IACtB,SAAAF,QAaY,CAbZC,EAaYE,EAAAkB,CAAA,GAbZjB,EACUR,EAYE,QAZI;KACd,aAAU;KACV,gBAAa;KACZ,aAAWiB,EAAM;KACjB,eAAaA,EAAM;KACnB,IAAIA,EAAM;KACV,YAAUA,EAAM;KAChB,OAAkBV,EAAAqB,CAAA,CAAE,CAACrB,EAAAsB,CAAA,CAAyB,CAAA;MAAA,SAAYZ,EAAM;MAAO,MAAQA,EAAM;KAAI,CAAA,GAAKA,EAAM,KAAK;;KAI1G,SAAAb,QAAQ,CAARK,EAAQkB,EAAA,QAAA,SAAA,CAAA,CAAA;;;;;;;;;;GAGZtB,CAAAA,GAAAA,EAEmBK,GAAA;IAFH,MAAK;IAAQ,OAAM;IAAU,QAAQH,EAAAwB,CAAA,MAAK,eAAoBxB,EAAAyB,CAAA;;IAAU,SAAA5B,QAEtF,CADAO,EAAAC,EAAAK,EAAM,OAAO,GAAA,CAAA,CAAA,CAAA;;;;EAGjBhB,CAAAA,MAAAA,EAAA,GAAAC,EAcYK,EAAAkB,CAAA,GAdZjB,EAcY,EAAA,KAAA,EAAA,GAZFR,EAAAA,QAAM;GACd,aAAU;GACV,gBAAa;GACZ,aAAWiB,EAAM;GACjB,eAAaA,EAAM;GACnB,IAAIA,EAAM;GACV,YAAUA,EAAM;GAChB,OAAcV,EAAAqB,CAAA,CAAE,CAACrB,EAAAsB,CAAA,CAAyB,CAAA;IAAA,SAAYZ,EAAM;IAAO,MAAQA,EAAM;GAAI,CAAA,GAAKA,EAAM,KAAK;;GAItG,SAAAb,QAAQ,CAARK,EAAQkB,EAAA,QAAA,SAAA,CAAA,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"StatCard.js","names":["_sfc_main","StatCard_vue_vue_type_script_setup_true_lang_default","StatCard_default"],"sources":["../../../src/components/widgets/StatCard.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { StatSchema } from '@alfakit/core'\nimport { Link } from '@inertiajs/vue3'\nimport {\n colorClass,\n cssColor,\n iconBackgroundColorClasses,\n textColorClasses,\n} from '../../lib/colors'\nimport { Icon } from '../../lib/icons'\nimport { cn } from '../../lib/utils'\nimport Card from '../ui/Card.vue'\nimport Sparkline from './Sparkline.vue'\nimport NewTabHint from '../../lib/NewTabHint.vue'\n\nconst props = defineProps<{ stat: StatSchema }>()\n</script>\n\n<template>\n <component\n :is=\"props.stat.url ? (props.stat.openUrlInNewTab ? 'a' : Link) : 'div'\"\n v-bind=\"\n props.stat.url\n ? props.stat.openUrlInNewTab\n ? { href: props.stat.url, target: '_blank', rel: 'noopener noreferrer' }\n : { href: props.stat.url }\n : {}\n \"\n class=\"contents\"\n >\n <Card\n :class=\"\n cn(\n 'relative gap-2 overflow-hidden px-5 py-4',\n props.stat.url && 'hover:bg-accent/40 transition-colors',\n )\n \"\n v-bind=\"props.stat.extraAttributes\"\n >\n <div class=\"flex items-start justify-between gap-3\">\n <div class=\"flex flex-col gap-1\">\n <span class=\"text-muted-foreground text-sm font-medium\">{{ props.stat.label }}</span>\n <span\n v-if=\"(props.stat.value === null || props.stat.value === '') && props.stat.placeholder\"\n class=\"text-muted-foreground text-2xl font-semibold tracking-tight\"\n data-slot=\"stat-placeholder\"\n >{{ props.stat.placeholder }}</span\n >\n <span\n v-else\n :class=\"\n cn(\n 'text-2xl font-semibold tracking-tight',\n props.stat.color && textColorClasses[props.stat.color],\n )\n \"\n >{{ props.stat.value }}</span\n >\n <span\n v-if=\"props.stat.description\"\n :class=\"\n cn(\n 'inline-flex items-center gap-1 text-xs',\n props.stat.descriptionColor\n ? textColorClasses[props.stat.descriptionColor]\n : 'text-muted-foreground',\n )\n \"\n >\n <Icon\n v-if=\"props.stat.descriptionIcon && props.stat.descriptionIconPosition !== 'after'\"\n :name=\"props.stat.descriptionIcon\"\n class=\"size-3.5\"\n />\n {{ props.stat.description }}\n <Icon\n v-if=\"props.stat.descriptionIcon && props.stat.descriptionIconPosition === 'after'\"\n :name=\"props.stat.descriptionIcon\"\n class=\"size-3.5\"\n />\n </span>\n </div>\n <span\n v-if=\"props.stat.icon\"\n :class=\"\n cn(\n 'flex size-9 shrink-0 items-center justify-center rounded-md',\n colorClass(iconBackgroundColorClasses, props.stat.color, 'gray'),\n )\n \"\n >\n <Icon :name=\"props.stat.icon\" class=\"size-5\" />\n </span>\n </div>\n <Sparkline\n v-if=\"props.stat.chart && props.stat.chart.length > 1\"\n :data=\"props.stat.chart\"\n :color=\"cssColor(props.stat.chartColor ?? props.stat.color)\"\n />\n </Card>\n <NewTabHint v-if=\"props.stat.url && props.stat.openUrlInNewTab\" />\n </component>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"StatCard.js","names":["_sfc_main","StatCard_vue_vue_type_script_setup_true_lang_default","StatCard_default"],"sources":["../../../src/components/widgets/StatCard.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { StatSchema } from '@alfakit/core'\nimport { Link } from '@inertiajs/vue3'\nimport {\n colorClass,\n cssColor,\n iconBackgroundColorClasses,\n textColorClasses,\n} from '../../lib/colors'\nimport { Icon } from '../../lib/icons'\nimport { cn } from '../../lib/utils'\nimport Card from '../ui/Card.vue'\nimport Sparkline from './Sparkline.vue'\nimport NewTabHint from '../../lib/NewTabHint.vue'\n\nconst props = defineProps<{ stat: StatSchema }>()\n</script>\n\n<template>\n <component\n :is=\"props.stat.url ? (props.stat.openUrlInNewTab ? 'a' : Link) : 'div'\"\n v-bind=\"\n props.stat.url\n ? props.stat.openUrlInNewTab\n ? { href: props.stat.url, target: '_blank', rel: 'noopener noreferrer' }\n : { href: props.stat.url }\n : {}\n \"\n class=\"contents\"\n >\n <Card\n :class=\"\n cn(\n 'relative gap-2 overflow-hidden px-5 py-4',\n props.stat.url && 'hover:bg-accent/40 transition-colors',\n )\n \"\n v-bind=\"props.stat.extraAttributes\"\n >\n <div class=\"flex items-start justify-between gap-3\">\n <div class=\"flex flex-col gap-1\">\n <span class=\"text-muted-foreground text-sm font-medium\"\n ><bdi>{{ props.stat.label }}</bdi></span\n >\n <span\n v-if=\"(props.stat.value === null || props.stat.value === '') && props.stat.placeholder\"\n class=\"text-muted-foreground text-2xl font-semibold tracking-tight\"\n data-slot=\"stat-placeholder\"\n >{{ props.stat.placeholder }}</span\n >\n <span\n v-else\n :class=\"\n cn(\n 'text-2xl font-semibold tracking-tight',\n props.stat.color && textColorClasses[props.stat.color],\n )\n \"\n ><bdi>{{ props.stat.value }}</bdi></span\n >\n <span\n v-if=\"props.stat.description\"\n :class=\"\n cn(\n 'inline-flex items-center gap-1 text-xs',\n props.stat.descriptionColor\n ? textColorClasses[props.stat.descriptionColor]\n : 'text-muted-foreground',\n )\n \"\n >\n <Icon\n v-if=\"props.stat.descriptionIcon && props.stat.descriptionIconPosition !== 'after'\"\n :name=\"props.stat.descriptionIcon\"\n class=\"size-3.5\"\n />\n <!-- Mixed-direction text (a Latin \"-3% this month\" in Arabic) keeps its order. -->\n <bdi>{{ props.stat.description }}</bdi>\n <Icon\n v-if=\"props.stat.descriptionIcon && props.stat.descriptionIconPosition === 'after'\"\n :name=\"props.stat.descriptionIcon\"\n class=\"size-3.5\"\n />\n </span>\n </div>\n <span\n v-if=\"props.stat.icon\"\n :class=\"\n cn(\n 'flex size-9 shrink-0 items-center justify-center rounded-md',\n colorClass(iconBackgroundColorClasses, props.stat.color, 'gray'),\n )\n \"\n >\n <Icon :name=\"props.stat.icon\" class=\"size-5\" />\n </span>\n </div>\n <Sparkline\n v-if=\"props.stat.chart && props.stat.chart.length > 1\"\n :data=\"props.stat.chart\"\n :color=\"cssColor(props.stat.chartColor ?? props.stat.color)\"\n />\n </Card>\n <NewTabHint v-if=\"props.stat.url && props.stat.openUrlInNewTab\" />\n </component>\n</template>\n"],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"StatCard.vue.d.ts","sourceRoot":"","sources":["../../../src/components/widgets/StatCard.vue"],"names":[],"mappings":"AAyGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAc/C,KAAK,WAAW,GAAG;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,CAAC;;AAqNxC,wBAMG"}
1
+ {"version":3,"file":"StatCard.vue.d.ts","sourceRoot":"","sources":["../../../src/components/widgets/StatCard.vue"],"names":[],"mappings":"AA4GA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAc/C,KAAK,WAAW,GAAG;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,CAAC;;AA2NxC,wBAMG"}
@@ -5,63 +5,63 @@ import o from "../../lib/NewTabHint.js";
5
5
  import s from "../ui/Card.js";
6
6
  import c from "./Sparkline.js";
7
7
  import { Link as l } from "@inertiajs/vue3";
8
- import { createBlock as u, createCommentVNode as d, createElementBlock as f, createElementVNode as p, createTextVNode as m, createVNode as h, defineComponent as g, mergeProps as _, normalizeClass as v, openBlock as y, resolveDynamicComponent as b, toDisplayString as x, unref as S, withCtx as C } from "vue";
8
+ import { createBlock as u, createCommentVNode as d, createElementBlock as f, createElementVNode as p, createVNode as m, defineComponent as h, mergeProps as g, normalizeClass as _, openBlock as v, resolveDynamicComponent as y, toDisplayString as b, unref as x, withCtx as S } from "vue";
9
9
  //#region src/components/widgets/StatCard.vue?vue&type=script&setup=true&lang.ts
10
- var w = { class: "flex items-start justify-between gap-3" }, T = { class: "flex flex-col gap-1" }, E = { class: "text-muted-foreground text-sm font-medium" }, D = {
10
+ var C = { class: "flex items-start justify-between gap-3" }, w = { class: "flex flex-col gap-1" }, T = { class: "text-muted-foreground text-sm font-medium" }, E = {
11
11
  key: 0,
12
12
  class: "text-muted-foreground text-2xl font-semibold tracking-tight",
13
13
  "data-slot": "stat-placeholder"
14
- }, O = /*@__PURE__*/ g({
14
+ }, D = /*@__PURE__*/ h({
15
15
  __name: "StatCard",
16
16
  props: { stat: {} },
17
- setup(g) {
18
- let O = g;
19
- return (g, k) => (y(), u(b(O.stat.url ? O.stat.openUrlInNewTab ? "a" : S(l) : "div"), _(O.stat.url ? O.stat.openUrlInNewTab ? {
20
- href: O.stat.url,
17
+ setup(h) {
18
+ let D = h;
19
+ return (h, O) => (v(), u(y(D.stat.url ? D.stat.openUrlInNewTab ? "a" : x(l) : "div"), g(D.stat.url ? D.stat.openUrlInNewTab ? {
20
+ href: D.stat.url,
21
21
  target: "_blank",
22
22
  rel: "noopener noreferrer"
23
- } : { href: O.stat.url } : {}, { class: "contents" }), {
24
- default: C(() => [h(s, _({ class: S(e)("relative gap-2 overflow-hidden px-5 py-4", O.stat.url && "hover:bg-accent/40 transition-colors") }, O.stat.extraAttributes), {
25
- default: C(() => [p("div", w, [p("div", T, [
26
- p("span", E, x(O.stat.label), 1),
27
- (O.stat.value === null || O.stat.value === "") && O.stat.placeholder ? (y(), f("span", D, x(O.stat.placeholder), 1)) : (y(), f("span", {
23
+ } : { href: D.stat.url } : {}, { class: "contents" }), {
24
+ default: S(() => [m(s, g({ class: x(e)("relative gap-2 overflow-hidden px-5 py-4", D.stat.url && "hover:bg-accent/40 transition-colors") }, D.stat.extraAttributes), {
25
+ default: S(() => [p("div", C, [p("div", w, [
26
+ p("span", T, [p("bdi", null, b(D.stat.label), 1)]),
27
+ (D.stat.value === null || D.stat.value === "") && D.stat.placeholder ? (v(), f("span", E, b(D.stat.placeholder), 1)) : (v(), f("span", {
28
28
  key: 1,
29
- class: v(S(e)("text-2xl font-semibold tracking-tight", O.stat.color && S(i)[O.stat.color]))
30
- }, x(O.stat.value), 3)),
31
- O.stat.description ? (y(), f("span", {
29
+ class: _(x(e)("text-2xl font-semibold tracking-tight", D.stat.color && x(i)[D.stat.color]))
30
+ }, [p("bdi", null, b(D.stat.value), 1)], 2)),
31
+ D.stat.description ? (v(), f("span", {
32
32
  key: 2,
33
- class: v(S(e)("inline-flex items-center gap-1 text-xs", O.stat.descriptionColor ? S(i)[O.stat.descriptionColor] : "text-muted-foreground"))
33
+ class: _(x(e)("inline-flex items-center gap-1 text-xs", D.stat.descriptionColor ? x(i)[D.stat.descriptionColor] : "text-muted-foreground"))
34
34
  }, [
35
- O.stat.descriptionIcon && O.stat.descriptionIconPosition !== "after" ? (y(), u(S(a), {
35
+ D.stat.descriptionIcon && D.stat.descriptionIconPosition !== "after" ? (v(), u(x(a), {
36
36
  key: 0,
37
- name: O.stat.descriptionIcon,
37
+ name: D.stat.descriptionIcon,
38
38
  class: "size-3.5"
39
39
  }, null, 8, ["name"])) : d("", !0),
40
- m(" " + x(O.stat.description) + " ", 1),
41
- O.stat.descriptionIcon && O.stat.descriptionIconPosition === "after" ? (y(), u(S(a), {
40
+ p("bdi", null, b(D.stat.description), 1),
41
+ D.stat.descriptionIcon && D.stat.descriptionIconPosition === "after" ? (v(), u(x(a), {
42
42
  key: 1,
43
- name: O.stat.descriptionIcon,
43
+ name: D.stat.descriptionIcon,
44
44
  class: "size-3.5"
45
45
  }, null, 8, ["name"])) : d("", !0)
46
46
  ], 2)) : d("", !0)
47
- ]), O.stat.icon ? (y(), f("span", {
47
+ ]), D.stat.icon ? (v(), f("span", {
48
48
  key: 0,
49
- class: v(S(e)("flex size-9 shrink-0 items-center justify-center rounded-md", S(t)(S(r), O.stat.color, "gray")))
50
- }, [h(S(a), {
51
- name: O.stat.icon,
49
+ class: _(x(e)("flex size-9 shrink-0 items-center justify-center rounded-md", x(t)(x(r), D.stat.color, "gray")))
50
+ }, [m(x(a), {
51
+ name: D.stat.icon,
52
52
  class: "size-5"
53
- }, null, 8, ["name"])], 2)) : d("", !0)]), O.stat.chart && O.stat.chart.length > 1 ? (y(), u(c, {
53
+ }, null, 8, ["name"])], 2)) : d("", !0)]), D.stat.chart && D.stat.chart.length > 1 ? (v(), u(c, {
54
54
  key: 0,
55
- data: O.stat.chart,
56
- color: S(n)(O.stat.chartColor ?? O.stat.color)
55
+ data: D.stat.chart,
56
+ color: x(n)(D.stat.chartColor ?? D.stat.color)
57
57
  }, null, 8, ["data", "color"])) : d("", !0)]),
58
58
  _: 1
59
- }, 16, ["class"]), O.stat.url && O.stat.openUrlInNewTab ? (y(), u(o, { key: 0 })) : d("", !0)]),
59
+ }, 16, ["class"]), D.stat.url && D.stat.openUrlInNewTab ? (v(), u(o, { key: 0 })) : d("", !0)]),
60
60
  _: 1
61
61
  }, 16));
62
62
  }
63
63
  });
64
64
  //#endregion
65
- export { O as default };
65
+ export { D as default };
66
66
 
67
67
  //# sourceMappingURL=StatCard.vue_vue_type_script_setup_true_lang.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"StatCard.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createBlock","_resolveDynamicComponent","_unref","_mergeProps","_withCtx","_createVNode","Card","_createElementVNode","_toDisplayString","_createElementBlock","_normalizeClass","Icon","_createCommentVNode","_createTextVNode","Sparkline","NewTabHint","Icon_default","NewTabHint_default","Card_default","Sparkline_default","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","StatCard_vue_vue_type_script_setup_true_lang_default","props","__props","openBlock","createBlock","resolveDynamicComponent","unref","Link","mergeProps","withCtx","createVNode","cn","createElementVNode","toDisplayString","createElementBlock","normalizeClass","textColorClasses","createCommentVNode","createTextVNode","colorClass","iconBackgroundColorClasses","cssColor"],"sources":["../../../src/components/widgets/StatCard.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { StatSchema } from '@alfakit/core'\nimport { Link } from '@inertiajs/vue3'\nimport {\n colorClass,\n cssColor,\n iconBackgroundColorClasses,\n textColorClasses,\n} from '../../lib/colors'\nimport { Icon } from '../../lib/icons'\nimport { cn } from '../../lib/utils'\nimport Card from '../ui/Card.vue'\nimport Sparkline from './Sparkline.vue'\nimport NewTabHint from '../../lib/NewTabHint.vue'\n\nconst props = defineProps<{ stat: StatSchema }>()\n</script>\n\n<template>\n <component\n :is=\"props.stat.url ? (props.stat.openUrlInNewTab ? 'a' : Link) : 'div'\"\n v-bind=\"\n props.stat.url\n ? props.stat.openUrlInNewTab\n ? { href: props.stat.url, target: '_blank', rel: 'noopener noreferrer' }\n : { href: props.stat.url }\n : {}\n \"\n class=\"contents\"\n >\n <Card\n :class=\"\n cn(\n 'relative gap-2 overflow-hidden px-5 py-4',\n props.stat.url && 'hover:bg-accent/40 transition-colors',\n )\n \"\n v-bind=\"props.stat.extraAttributes\"\n >\n <div class=\"flex items-start justify-between gap-3\">\n <div class=\"flex flex-col gap-1\">\n <span class=\"text-muted-foreground text-sm font-medium\">{{ props.stat.label }}</span>\n <span\n v-if=\"(props.stat.value === null || props.stat.value === '') && props.stat.placeholder\"\n class=\"text-muted-foreground text-2xl font-semibold tracking-tight\"\n data-slot=\"stat-placeholder\"\n >{{ props.stat.placeholder }}</span\n >\n <span\n v-else\n :class=\"\n cn(\n 'text-2xl font-semibold tracking-tight',\n props.stat.color && textColorClasses[props.stat.color],\n )\n \"\n >{{ props.stat.value }}</span\n >\n <span\n v-if=\"props.stat.description\"\n :class=\"\n cn(\n 'inline-flex items-center gap-1 text-xs',\n props.stat.descriptionColor\n ? textColorClasses[props.stat.descriptionColor]\n : 'text-muted-foreground',\n )\n \"\n >\n <Icon\n v-if=\"props.stat.descriptionIcon && props.stat.descriptionIconPosition !== 'after'\"\n :name=\"props.stat.descriptionIcon\"\n class=\"size-3.5\"\n />\n {{ props.stat.description }}\n <Icon\n v-if=\"props.stat.descriptionIcon && props.stat.descriptionIconPosition === 'after'\"\n :name=\"props.stat.descriptionIcon\"\n class=\"size-3.5\"\n />\n </span>\n </div>\n <span\n v-if=\"props.stat.icon\"\n :class=\"\n cn(\n 'flex size-9 shrink-0 items-center justify-center rounded-md',\n colorClass(iconBackgroundColorClasses, props.stat.color, 'gray'),\n )\n \"\n >\n <Icon :name=\"props.stat.icon\" class=\"size-5\" />\n </span>\n </div>\n <Sparkline\n v-if=\"props.stat.chart && props.stat.chart.length > 1\"\n :data=\"props.stat.chart\"\n :color=\"cssColor(props.stat.chartColor ?? props.stat.color)\"\n />\n </Card>\n <NewTabHint v-if=\"props.stat.url && props.stat.openUrlInNewTab\" />\n </component>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;EAeA,IAAM0B,IAAQC;oBAIZ3B,EAAA,GAAAC,EAkFYC,EAjFLwB,EAAM,KAAK,MAAOA,EAAM,KAAK,kBAAe,MAASvB,EAAA6B,CAAA,IAAI,KAAA,GADhE5B,EAEiBsB,EAAM,KAAK,MAAcA,EAAM,KAAK,kBAAoC;GAAA,MAAAA,EAAM,KAAK;GAAG,QAAA;GAAA,KAAA;EAAA,IAAqE,EAAA,MAAAA,EAAM,KAAK,IAAG,IAAA,CAAA,GAOxL,EAAA,OAAM,WAAU,CAAA,GAAA;GAEhB,SAAArB,QAqEO,CArEPC,EAqEOC,GArEPH,EAqEO,EApEJ,OAAgBD,EAAAiC,CAAA,CAAE,CAAA,4CAAkEV,EAAM,KAAK,OAAG,sCAAA,EAM3F,GAAAA,EAAM,KAAK,eAAe,GAAA;IAElC,SAAArB,QAsDM,CAtDNG,EAsDM,OAtDNa,GAsDM,CArDJb,EAyCM,OAzCNc,GAyCM;KAxCJd,EAAqF,QAArFe,GAAqFd,EAA1BiB,EAAM,KAAK,KAAK,GAAA,CAAA;MAElEA,EAAM,KAAK,UAAK,QAAaA,EAAM,KAAK,UAAK,OAAYA,EAAM,KAAK,eAD7E1B,EAAA,GAAAU,EAKC,QALDc,GAKCf,EADKiB,EAAM,KAAK,WAAW,GAAA,CAAA,MAE5B1B,EAAA,GAAAU,EASC,QAAA;;MAPE,OAAKC,EAAiBR,EAAAiC,CAAA,CAAE,CAAA,yCAA2EV,EAAM,KAAK,SAASvB,EAAAsC,CAAA,CAAgB,CAACf,EAAM,KAAK,MAAA,CAAA;KAMhJ,GAAAjB,EAAAiB,EAAM,KAAK,KAAK,GAAA,CAAA;KAGdA,EAAM,KAAK,eADnB1B,EAAA,GAAAU,EAsBO,QAAA;;MApBJ,OAAKC,EAAiBR,EAAAiC,CAAA,CAAE,CAAA,0CAA4EV,EAAM,KAAK,mBAAqCvB,EAAAsC,CAAA,CAAgB,CAACf,EAAM,KAAK,oBAAA,uBAAA,CAAA;;MAUzKA,EAAM,KAAK,mBAAmBA,EAAM,KAAK,4BAAuB,WADxE1B,EAAA,GAAAC,EAIEE,EAAAS,CAAA,GAAA;;OAFC,MAAMc,EAAM,KAAK;OAClB,OAAM;;MACNZ,EAAA,MACFL,EAAGiB,EAAM,KAAK,WAAW,IAAG,KAC5B,CAAA;MACQA,EAAM,KAAK,mBAAmBA,EAAM,KAAK,4BAAuB,WADxE1B,EAAA,GAAAC,EAIEE,EAAAS,CAAA,GAAA;;OAFC,MAAMc,EAAM,KAAK;OAClB,OAAM;;;IAKJ,CAAA,GAAAA,EAAM,KAAK,QADnB1B,EAAA,GAAAU,EAUO,QAAA;;KARJ,OAAKC,EAAeR,EAAAiC,CAAA,CAAE,CAAA,+DAA6FjC,EAAAyC,CAAA,CAAU,CAACzC,EAAA0C,CAAA,GAA4BnB,EAAM,KAAK,OAAK,MAAA,CAAA,CAAA;IAO3KpB,GAAAA,CAAAA,EAA+CH,EAAAS,CAAA,GAAA;KAAxC,MAAMc,EAAM,KAAK;KAAM,OAAM;IAIhC,GAAA,MAAA,GAAA,CAAA,MAAA,CAAA,CAAA,GAAA,CAAA,KAAAgB,EAAA,IAAA,EAAA,CAAA,CAAA,GAAAhB,EAAM,KAAK,SAASA,EAAM,KAAK,MAAM,SAAM,KADnD1B,EAAA,GAAAC,EAIEc,GAAA;;KAFC,MAAMW,EAAM,KAAK;KACjB,OAAOvB,EAAA2C,CAAA,CAAQ,CAACpB,EAAM,KAAK,cAAcA,EAAM,KAAK,KAAK;;;GAG5C,GAAA,IAAA,CAAA,OAAA,CAAA,GAAAA,EAAM,KAAK,OAAOA,EAAM,KAAK,mBAA/C1B,EAAA,GAAAC,EAAkEe,GAAA,EAAA,KAAA,EAAA,CAAA,KAAA0B,EAAA,IAAA,EAAA,CAAA,CAAA"}
1
+ {"version":3,"file":"StatCard.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createBlock","_resolveDynamicComponent","_unref","_mergeProps","_withCtx","_createVNode","Card","_createElementVNode","_toDisplayString","_createElementBlock","_normalizeClass","Icon","_createCommentVNode","Sparkline","NewTabHint","Icon_default","NewTabHint_default","Card_default","Sparkline_default","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","StatCard_vue_vue_type_script_setup_true_lang_default","props","__props","openBlock","createBlock","resolveDynamicComponent","unref","Link","mergeProps","withCtx","createVNode","cn","createElementVNode","toDisplayString","createElementBlock","normalizeClass","textColorClasses","createCommentVNode","colorClass","iconBackgroundColorClasses","cssColor"],"sources":["../../../src/components/widgets/StatCard.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { StatSchema } from '@alfakit/core'\nimport { Link } from '@inertiajs/vue3'\nimport {\n colorClass,\n cssColor,\n iconBackgroundColorClasses,\n textColorClasses,\n} from '../../lib/colors'\nimport { Icon } from '../../lib/icons'\nimport { cn } from '../../lib/utils'\nimport Card from '../ui/Card.vue'\nimport Sparkline from './Sparkline.vue'\nimport NewTabHint from '../../lib/NewTabHint.vue'\n\nconst props = defineProps<{ stat: StatSchema }>()\n</script>\n\n<template>\n <component\n :is=\"props.stat.url ? (props.stat.openUrlInNewTab ? 'a' : Link) : 'div'\"\n v-bind=\"\n props.stat.url\n ? props.stat.openUrlInNewTab\n ? { href: props.stat.url, target: '_blank', rel: 'noopener noreferrer' }\n : { href: props.stat.url }\n : {}\n \"\n class=\"contents\"\n >\n <Card\n :class=\"\n cn(\n 'relative gap-2 overflow-hidden px-5 py-4',\n props.stat.url && 'hover:bg-accent/40 transition-colors',\n )\n \"\n v-bind=\"props.stat.extraAttributes\"\n >\n <div class=\"flex items-start justify-between gap-3\">\n <div class=\"flex flex-col gap-1\">\n <span class=\"text-muted-foreground text-sm font-medium\"\n ><bdi>{{ props.stat.label }}</bdi></span\n >\n <span\n v-if=\"(props.stat.value === null || props.stat.value === '') && props.stat.placeholder\"\n class=\"text-muted-foreground text-2xl font-semibold tracking-tight\"\n data-slot=\"stat-placeholder\"\n >{{ props.stat.placeholder }}</span\n >\n <span\n v-else\n :class=\"\n cn(\n 'text-2xl font-semibold tracking-tight',\n props.stat.color && textColorClasses[props.stat.color],\n )\n \"\n ><bdi>{{ props.stat.value }}</bdi></span\n >\n <span\n v-if=\"props.stat.description\"\n :class=\"\n cn(\n 'inline-flex items-center gap-1 text-xs',\n props.stat.descriptionColor\n ? textColorClasses[props.stat.descriptionColor]\n : 'text-muted-foreground',\n )\n \"\n >\n <Icon\n v-if=\"props.stat.descriptionIcon && props.stat.descriptionIconPosition !== 'after'\"\n :name=\"props.stat.descriptionIcon\"\n class=\"size-3.5\"\n />\n <!-- Mixed-direction text (a Latin \"-3% this month\" in Arabic) keeps its order. -->\n <bdi>{{ props.stat.description }}</bdi>\n <Icon\n v-if=\"props.stat.descriptionIcon && props.stat.descriptionIconPosition === 'after'\"\n :name=\"props.stat.descriptionIcon\"\n class=\"size-3.5\"\n />\n </span>\n </div>\n <span\n v-if=\"props.stat.icon\"\n :class=\"\n cn(\n 'flex size-9 shrink-0 items-center justify-center rounded-md',\n colorClass(iconBackgroundColorClasses, props.stat.color, 'gray'),\n )\n \"\n >\n <Icon :name=\"props.stat.icon\" class=\"size-5\" />\n </span>\n </div>\n <Sparkline\n v-if=\"props.stat.chart && props.stat.chart.length > 1\"\n :data=\"props.stat.chart\"\n :color=\"cssColor(props.stat.chartColor ?? props.stat.color)\"\n />\n </Card>\n <NewTabHint v-if=\"props.stat.url && props.stat.openUrlInNewTab\" />\n </component>\n</template>\n"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "package": "@alfakit/vue",
3
- "version": "0.1.9",
3
+ "version": "0.1.10",
4
4
  "adapter": "vue",
5
- "generatedAt": "2026-10-25T05:36:02.409Z",
5
+ "generatedAt": "2026-10-25T11:21:46.780Z",
6
6
  "components": {
7
7
  "TextInput": {
8
8
  "file": "src/components/fields/TextInputField.vue",