@alfakit/vue 0.1.0 → 0.1.2

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 (136) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/dist/components/actions/ActionButton.js.map +1 -1
  3. package/dist/components/actions/ActionButton.vue.d.ts.map +1 -1
  4. package/dist/components/actions/ActionButton.vue_vue_type_script_setup_true_lang.js +160 -159
  5. package/dist/components/actions/ActionButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
  6. package/dist/components/actions/ActionModal.js.map +1 -1
  7. package/dist/components/actions/ActionModal.vue.d.ts.map +1 -1
  8. package/dist/components/actions/ActionModal.vue_vue_type_script_setup_true_lang.js +214 -214
  9. package/dist/components/actions/ActionModal.vue_vue_type_script_setup_true_lang.js.map +1 -1
  10. package/dist/components/cms/CmsLinkButton.vue.d.ts +1 -1
  11. package/dist/components/fields/ColorPickerField.js.map +1 -1
  12. package/dist/components/fields/ColorPickerField.vue.d.ts.map +1 -1
  13. package/dist/components/fields/ColorPickerField.vue_vue_type_script_setup_true_lang.js +1 -0
  14. package/dist/components/fields/ColorPickerField.vue_vue_type_script_setup_true_lang.js.map +1 -1
  15. package/dist/components/fields/ComboboxSelect.js.map +1 -1
  16. package/dist/components/fields/ComboboxSelect.vue.d.ts.map +1 -1
  17. package/dist/components/fields/ComboboxSelect.vue_vue_type_script_setup_true_lang.js +1 -1
  18. package/dist/components/fields/ComboboxSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
  19. package/dist/components/fields/FileUploadField.js.map +1 -1
  20. package/dist/components/fields/FileUploadField.vue.d.ts.map +1 -1
  21. package/dist/components/fields/FileUploadField.vue_vue_type_script_setup_true_lang.js +183 -183
  22. package/dist/components/fields/FileUploadField.vue_vue_type_script_setup_true_lang.js.map +1 -1
  23. package/dist/components/fields/OneTimeCodeInputField.js.map +1 -1
  24. package/dist/components/fields/OneTimeCodeInputField.vue_vue_type_script_setup_true_lang.js +1 -2
  25. package/dist/components/fields/OneTimeCodeInputField.vue_vue_type_script_setup_true_lang.js.map +1 -1
  26. package/dist/components/fields/SelectField.js.map +1 -1
  27. package/dist/components/fields/SelectField.vue.d.ts.map +1 -1
  28. package/dist/components/fields/SelectField.vue_vue_type_script_setup_true_lang.js +2 -2
  29. package/dist/components/fields/SelectField.vue_vue_type_script_setup_true_lang.js.map +1 -1
  30. package/dist/components/fields/TableColumnHeaders.js.map +1 -1
  31. package/dist/components/fields/TableColumnHeaders.vue.d.ts.map +1 -1
  32. package/dist/components/fields/TableColumnHeaders.vue_vue_type_script_setup_true_lang.js +6 -3
  33. package/dist/components/fields/TableColumnHeaders.vue_vue_type_script_setup_true_lang.js.map +1 -1
  34. package/dist/components/file-manager/FileManagerView.js.map +1 -1
  35. package/dist/components/file-manager/FileManagerView.vue_vue_type_script_setup_true_lang.js +1 -1
  36. package/dist/components/file-manager/FileManagerView.vue_vue_type_script_setup_true_lang.js.map +1 -1
  37. package/dist/components/form/FormBlock.js.map +1 -1
  38. package/dist/components/form/FormBlock.vue.d.ts.map +1 -1
  39. package/dist/components/form/FormBlock.vue_vue_type_script_setup_true_lang.js +81 -77
  40. package/dist/components/form/FormBlock.vue_vue_type_script_setup_true_lang.js.map +1 -1
  41. package/dist/components/form/form-context.js +25 -25
  42. package/dist/components/form/form-context.js.map +1 -1
  43. package/dist/components/layout/FusedGroupComponent.js.map +1 -1
  44. package/dist/components/layout/FusedGroupComponent.vue.d.ts.map +1 -1
  45. package/dist/components/layout/FusedGroupComponent.vue_vue_type_script_setup_true_lang.js +1 -0
  46. package/dist/components/layout/FusedGroupComponent.vue_vue_type_script_setup_true_lang.js.map +1 -1
  47. package/dist/components/layout/TabsComponent.js.map +1 -1
  48. package/dist/components/layout/TabsComponent.vue.d.ts.map +1 -1
  49. package/dist/components/layout/TabsComponent.vue_vue_type_script_setup_true_lang.js +76 -55
  50. package/dist/components/layout/TabsComponent.vue_vue_type_script_setup_true_lang.js.map +1 -1
  51. package/dist/components/notifications/NotificationsMenu.js.map +1 -1
  52. package/dist/components/notifications/NotificationsMenu.vue.d.ts.map +1 -1
  53. package/dist/components/notifications/NotificationsMenu.vue_vue_type_script_setup_true_lang.js +44 -42
  54. package/dist/components/notifications/NotificationsMenu.vue_vue_type_script_setup_true_lang.js.map +1 -1
  55. package/dist/components/panel/GlobalSearch.js.map +1 -1
  56. package/dist/components/panel/GlobalSearch.vue.d.ts.map +1 -1
  57. package/dist/components/panel/GlobalSearch.vue_vue_type_script_setup_true_lang.js +1 -0
  58. package/dist/components/panel/GlobalSearch.vue_vue_type_script_setup_true_lang.js.map +1 -1
  59. package/dist/components/panel/ShortcutKeys.js.map +1 -1
  60. package/dist/components/panel/ShortcutKeys.vue.d.ts.map +1 -1
  61. package/dist/components/panel/ShortcutKeys.vue_vue_type_script_setup_true_lang.js +4 -1
  62. package/dist/components/panel/ShortcutKeys.vue_vue_type_script_setup_true_lang.js.map +1 -1
  63. package/dist/components/panel/TenantMenu.js.map +1 -1
  64. package/dist/components/panel/TenantMenu.vue_vue_type_script_setup_true_lang.js +2 -2
  65. package/dist/components/panel/TenantMenu.vue_vue_type_script_setup_true_lang.js.map +1 -1
  66. package/dist/components/table/GroupHeaderRow.js.map +1 -1
  67. package/dist/components/table/GroupHeaderRow.vue.d.ts.map +1 -1
  68. package/dist/components/table/GroupHeaderRow.vue_vue_type_script_setup_true_lang.js +55 -34
  69. package/dist/components/table/GroupHeaderRow.vue_vue_type_script_setup_true_lang.js.map +1 -1
  70. package/dist/components/table/SelectCell.js.map +1 -1
  71. package/dist/components/table/SelectCell.vue.d.ts.map +1 -1
  72. package/dist/components/table/SelectCell.vue_vue_type_script_setup_true_lang.js +24 -19
  73. package/dist/components/table/SelectCell.vue_vue_type_script_setup_true_lang.js.map +1 -1
  74. package/dist/components/table/TextInputCell.js.map +1 -1
  75. package/dist/components/table/TextInputCell.vue.d.ts.map +1 -1
  76. package/dist/components/table/TextInputCell.vue_vue_type_script_setup_true_lang.js +38 -33
  77. package/dist/components/table/TextInputCell.vue_vue_type_script_setup_true_lang.js.map +1 -1
  78. package/dist/components.css +347 -0
  79. package/dist/eject-manifest.json +2 -2
  80. package/dist/lib/Icon.js.map +1 -1
  81. package/dist/lib/Icon.vue.d.ts.map +1 -1
  82. package/dist/lib/Icon.vue_vue_type_script_setup_true_lang.js +18 -19
  83. package/dist/lib/Icon.vue_vue_type_script_setup_true_lang.js.map +1 -1
  84. package/dist/lib/hydration.d.ts +9 -0
  85. package/dist/lib/hydration.d.ts.map +1 -0
  86. package/dist/lib/hydration.js +17 -0
  87. package/dist/lib/hydration.js.map +1 -0
  88. package/dist/lib/icons.d.ts +3 -5
  89. package/dist/lib/icons.d.ts.map +1 -1
  90. package/dist/lib/icons.js +19 -22
  91. package/dist/lib/icons.js.map +1 -1
  92. package/dist/lib/lazy.d.ts +1 -1
  93. package/dist/lib/lazy.d.ts.map +1 -1
  94. package/dist/lib/lazy.js +12 -11
  95. package/dist/lib/lazy.js.map +1 -1
  96. package/dist/standalone/AlfakitToaster.js.map +1 -1
  97. package/dist/standalone/AlfakitToaster.vue.d.ts.map +1 -1
  98. package/dist/standalone/AlfakitToaster.vue_vue_type_script_setup_true_lang.js +23 -15
  99. package/dist/standalone/AlfakitToaster.vue_vue_type_script_setup_true_lang.js.map +1 -1
  100. package/dist/standalone.css +47 -0
  101. package/dist/starter-kit/widgets/SearchTrigger.js.map +1 -1
  102. package/dist/starter-kit/widgets/SearchTrigger.vue.d.ts.map +1 -1
  103. package/dist/starter-kit/widgets/SearchTrigger.vue_vue_type_script_setup_true_lang.js +1 -0
  104. package/dist/starter-kit/widgets/SearchTrigger.vue_vue_type_script_setup_true_lang.js.map +1 -1
  105. package/dist/starter-kit/widgets/TenantChooser.js.map +1 -1
  106. package/dist/starter-kit/widgets/TenantChooser.vue_vue_type_script_setup_true_lang.js +1 -1
  107. package/dist/starter-kit/widgets/TenantChooser.vue_vue_type_script_setup_true_lang.js.map +1 -1
  108. package/dist/themes.css +2 -334
  109. package/package.json +3 -3
  110. package/src/components/actions/ActionButton.vue +14 -6
  111. package/src/components/actions/ActionModal.vue +3 -1
  112. package/src/components/fields/ColorPickerField.vue +1 -0
  113. package/src/components/fields/ComboboxSelect.vue +1 -1
  114. package/src/components/fields/FileUploadField.vue +14 -11
  115. package/src/components/fields/OneTimeCodeInputField.vue +1 -1
  116. package/src/components/fields/SelectField.vue +4 -2
  117. package/src/components/fields/TableColumnHeaders.vue +6 -1
  118. package/src/components/file-manager/FileManagerView.vue +1 -1
  119. package/src/components/form/FormBlock.vue +24 -0
  120. package/src/components/form/form-context.ts +2 -2
  121. package/src/components/layout/FusedGroupComponent.vue +1 -0
  122. package/src/components/layout/TabsComponent.vue +61 -5
  123. package/src/components/notifications/NotificationsMenu.vue +11 -0
  124. package/src/components/panel/GlobalSearch.vue +1 -0
  125. package/src/components/panel/ShortcutKeys.vue +1 -0
  126. package/src/components/panel/TenantMenu.vue +2 -2
  127. package/src/components/table/GroupHeaderRow.vue +27 -0
  128. package/src/components/table/SelectCell.vue +5 -2
  129. package/src/components/table/TextInputCell.vue +11 -5
  130. package/src/lib/Icon.vue +6 -5
  131. package/src/lib/hydration.ts +35 -0
  132. package/src/lib/icons.ts +6 -11
  133. package/src/lib/lazy.ts +5 -6
  134. package/src/standalone/AlfakitToaster.vue +12 -2
  135. package/src/starter-kit/widgets/SearchTrigger.vue +1 -0
  136. package/src/starter-kit/widgets/TenantChooser.vue +1 -1
package/CHANGELOG.md ADDED
@@ -0,0 +1,17 @@
1
+ # @alfakit/vue
2
+
3
+ ## 0.1.2
4
+
5
+ ### Patch Changes
6
+
7
+ - Fixes from end-to-end QA in React, Vue and Svelte: modal field ids, errors in hidden tabs, per-row action spinners, one-time-code paste, RTL fixes (colours, key bindings, calendar), localised file sizes and named upload buttons, select placeholders, single toasts in starter kits, readable tab query values, enum group titles, tenant menu labels, Svelte hydration gate, plugin styles in starter-kit mode, and more (see the AlfaKit changelog for 0.1.2).
8
+ - Updated dependencies
9
+ - @alfakit/core@0.1.2
10
+
11
+ ## 0.1.1
12
+
13
+ ### Patch Changes
14
+
15
+ - Vue: icons and lazily loaded components no longer cause hydration mismatches when another app on the page already loaded them. Package READMEs show the Alfa Six logo on npm.
16
+ - Updated dependencies
17
+ - @alfakit/core@0.1.1
@@ -1 +1 @@
1
- {"version":3,"file":"ActionButton.js","names":["_sfc_main","ActionButton_vue_vue_type_script_setup_true_lang_default","ActionButton_default"],"sources":["../../../src/components/actions/ActionButton.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { ActionContext, ActionSchema } from '@alfakit/core'\nimport {\n bindsKeyBindings,\n formatKeyBinding,\n iconButtonSize,\n registerKeyBindings,\n resolveActionSize,\n} from '@alfakit/core'\nimport { Link } from '@inertiajs/vue3'\nimport { computed, watchEffect, type HTMLAttributes } from 'vue'\nimport { useStoreSelector } from '../../composables/use-store'\nimport { useActionRunner, useT } from '../../context'\nimport {\n badgeColorClasses,\n colorClass,\n ghostButtonColorClasses,\n outlineButtonColorClasses,\n solidButtonColorClasses,\n textColorClasses,\n} from '../../lib/colors'\nimport { Icon } from '../../lib/icons'\nimport { cn } from '../../lib/utils'\nimport Badge from '../ui/Badge.vue'\nimport Button from '../ui/Button.vue'\nimport Spinner from '../ui/Spinner.vue'\nimport Tooltip from '../ui/Tooltip.vue'\nimport TooltipContent from '../ui/TooltipContent.vue'\nimport TooltipTrigger from '../ui/TooltipTrigger.vue'\n\nexport interface ActionButtonProps {\n action: ActionSchema\n context: ActionContext\n size?: 'xs' | 'sm' | 'default' | 'lg'\n class?: HTMLAttributes['class']\n /** Force a variant (e.g. menu items render as plain rows). */\n variant?: ActionSchema['variant']\n /** Bind the action's key bindings globally while mounted. */\n withKeyBindings?: boolean\n /** Override how the action runs (e.g. a form submits its values). */\n onTrigger?: (action: ActionSchema, context: ActionContext) => void | Promise<void>\n}\n\nconst props = withDefaults(defineProps<ActionButtonProps>(), {\n size: 'default',\n withKeyBindings: true,\n})\n\nconst runner = useActionRunner()\nconst loading = useStoreSelector(runner.store, (state) => state.loading === props.action.name)\nconst processing = useStoreSelector(runner.store, (state) =>\n state.modals.some((modal) => modal.action.name === props.action.name && modal.processing),\n)\n\nconst variant = computed(\n () =>\n props.variant ??\n (props.action.outlined\n ? 'outline'\n : (props.action.variant ??\n (props.action.hasAction || props.action.hasModal || props.action.url ? 'link' : 'button'))),\n)\nconst isIconOnly = computed(() => variant.value === 'icon-button' || !props.action.label)\nconst busy = computed(() => loading.value || processing.value)\n// A disabled link renders as a disabled button so it cannot navigate.\nconst isPlainLink = computed(() =>\n Boolean(\n props.action.url && !props.action.hasAction && !props.action.hasModal && !props.action.disabled,\n ),\n)\n// Record actions repeat per row: a global shortcut would run them for every record.\nconst bindsKeys = computed(\n () => props.withKeyBindings && bindsKeyBindings(props.action, props.context),\n)\n\n/** The badge trigger style (`badge()` without an argument). */\nconst BADGE_TRIGGER_CLASSES =\n \"h-auto min-h-6 gap-1 rounded-md border px-2 py-0.5 text-xs font-medium [&_svg:not([class*='size-'])]:size-3.5\"\n\nfunction buttonClasses(action: ActionSchema, kind: ActionSchema['variant']): string {\n const color = action.color ?? 'primary'\n\n switch (kind) {\n case 'outline':\n return cn('bg-background border', colorClass(outlineButtonColorClasses, color, 'gray'))\n case 'ghost':\n return colorClass(ghostButtonColorClasses, color, 'gray')\n case 'link':\n return cn(\n 'h-auto p-0 underline-offset-4 hover:underline',\n colorClass(textColorClasses, color, 'primary'),\n )\n case 'icon-button':\n return colorClass(ghostButtonColorClasses, color, 'gray')\n case 'badge':\n // `badge()`: a tinted pill in the action's colour.\n return cn(BADGE_TRIGGER_CLASSES, colorClass(badgeColorClasses, color, 'primary'))\n default:\n return colorClass(solidButtonColorClasses, color, 'primary')\n }\n}\n\nconst run = () =>\n void (props.onTrigger\n ? props.onTrigger(props.action, props.context)\n : runner.trigger(props.action, props.context))\n\nwatchEffect((onCleanup) => {\n if (!bindsKeys.value || !props.action.keyBindings) {\n return\n }\n\n onCleanup(registerKeyBindings([{ keys: props.action.keyBindings, handler: run }]))\n})\n\nconst onClick = (event: MouseEvent) => {\n if (isPlainLink.value) {\n return // Plain link: let Inertia Link / anchor handle it.\n }\n\n event.preventDefault()\n run()\n}\n\nconst sizeProp = computed(() => {\n const size = variant.value === 'badge' ? 'xs' : resolveActionSize(props.action.size, props.size)\n\n return isIconOnly.value ? iconButtonSize(size) : size\n})\n// `labeledFrom()`: icon only below the breakpoint; the label stays the accessible name.\nconst LABEL_FROM: Record<string, string> = {\n sm: 'hidden sm:inline',\n md: 'hidden md:inline',\n lg: 'hidden lg:inline',\n xl: 'hidden xl:inline',\n '2xl': 'hidden 2xl:inline',\n}\nconst ICON_ONLY_BELOW: Record<string, string> = {\n sm: 'max-sm:aspect-square max-sm:px-0',\n md: 'max-md:aspect-square max-md:px-0',\n lg: 'max-lg:aspect-square max-lg:px-0',\n xl: 'max-xl:aspect-square max-xl:px-0',\n '2xl': 'max-2xl:aspect-square max-2xl:px-0',\n}\nconst labeledFrom = computed(() =>\n !isIconOnly.value && props.action.icon && props.action.labeledFrom\n ? props.action.labeledFrom\n : null,\n)\nconst labelClass = computed(() => (labeledFrom.value ? LABEL_FROM[labeledFrom.value] : undefined))\nconst classes = computed(() =>\n cn(\n buttonClasses(props.action, variant.value),\n labeledFrom.value && ICON_ONLY_BELOW[labeledFrom.value],\n props.class,\n ),\n)\nconst t = useT()\nconst newTabHint = computed(() => t('opens_in_new_tab', {}, '(opens in a new tab)'))\nconst ariaLabel = computed(() => {\n if (!isIconOnly.value && !labeledFrom.value) return undefined\n\n const name = props.action.label ?? props.action.tooltip ?? props.action.name\n\n return isPlainLink.value && props.action.openUrlInNewTab ? `${name} ${newTabHint.value}` : name\n})\nconst tooltip = computed(\n () => props.action.tooltip ?? (isIconOnly.value ? props.action.label : undefined),\n)\nconst shortcut = computed(() => (bindsKeys.value ? props.action.keyBindings?.[0] : undefined))\nconst disabledTooltip = computed(() => Boolean(props.action.disabled && tooltip.value))\n</script>\n\n<template>\n <Tooltip v-if=\"tooltip || shortcut\">\n <!-- A disabled button gets no pointer or focus events: a focusable span carries the\n tooltip (e.g. the reason from `authorizationTooltip()`). -->\n <TooltipTrigger\n :as-child=\"!disabledTooltip\"\n :as=\"disabledTooltip ? 'span' : undefined\"\n :tabindex=\"disabledTooltip ? 0 : undefined\"\n :class=\"disabledTooltip ? 'inline-flex' : undefined\"\n :data-disabled-tooltip=\"disabledTooltip ? '' : undefined\"\n >\n <Button\n v-if=\"isPlainLink && props.action.openUrlInNewTab\"\n as-child\n variant=\"plain\"\n :size=\"sizeProp\"\n :class=\"classes\"\n :disabled=\"props.action.disabled\"\n :aria-label=\"ariaLabel\"\n v-bind=\"props.action.extraAttributes\"\n >\n <a :href=\"props.action.url\" target=\"_blank\" rel=\"noopener noreferrer\">\n <Spinner v-if=\"busy\" />\n <Icon\n v-else-if=\"props.action.icon && props.action.iconPosition !== 'after'\"\n :name=\"props.action.icon\"\n />\n <span v-if=\"!isIconOnly\" :class=\"labelClass\">{{ props.action.label }}</span>\n <span v-if=\"!isIconOnly\" class=\"sr-only\"> {{ newTabHint }}</span>\n <Icon\n v-if=\"props.action.icon && props.action.iconPosition === 'after' && !busy\"\n :name=\"props.action.icon\"\n />\n <Badge\n v-if=\"props.action.badge !== undefined && props.action.badge !== null\"\n variant=\"outline\"\n :class=\"\n cn('ms-1 px-1.5 py-0', colorClass(badgeColorClasses, props.action.badgeColor, 'gray'))\n \"\n >{{ props.action.badge }}</Badge\n >\n </a>\n </Button>\n <Button\n v-else-if=\"isPlainLink\"\n as-child\n variant=\"plain\"\n :size=\"sizeProp\"\n :class=\"classes\"\n :disabled=\"props.action.disabled\"\n :aria-label=\"ariaLabel\"\n v-bind=\"props.action.extraAttributes\"\n >\n <Link :href=\"props.action.url ?? '#'\">\n <Spinner v-if=\"busy\" />\n <Icon\n v-else-if=\"props.action.icon && props.action.iconPosition !== 'after'\"\n :name=\"props.action.icon\"\n />\n <span v-if=\"!isIconOnly\" :class=\"labelClass\">{{ props.action.label }}</span>\n <Icon\n v-if=\"props.action.icon && props.action.iconPosition === 'after' && !busy\"\n :name=\"props.action.icon\"\n />\n <Badge\n v-if=\"props.action.badge !== undefined && props.action.badge !== null\"\n variant=\"outline\"\n :class=\"\n cn('ms-1 px-1.5 py-0', colorClass(badgeColorClasses, props.action.badgeColor, 'gray'))\n \"\n >{{ props.action.badge }}</Badge\n >\n </Link>\n </Button>\n <Button\n v-else\n type=\"button\"\n variant=\"plain\"\n :size=\"sizeProp\"\n :class=\"classes\"\n :disabled=\"props.action.disabled || busy\"\n :aria-label=\"ariaLabel\"\n v-bind=\"props.action.extraAttributes\"\n @click=\"onClick\"\n >\n <Spinner v-if=\"busy\" />\n <Icon\n v-else-if=\"props.action.icon && props.action.iconPosition !== 'after'\"\n :name=\"props.action.icon\"\n />\n <span v-if=\"!isIconOnly\" :class=\"labelClass\">{{ props.action.label }}</span>\n <Icon\n v-if=\"props.action.icon && props.action.iconPosition === 'after' && !busy\"\n :name=\"props.action.icon\"\n />\n <Badge\n v-if=\"props.action.badge !== undefined && props.action.badge !== null\"\n variant=\"outline\"\n :class=\"\n cn('ms-1 px-1.5 py-0', colorClass(badgeColorClasses, props.action.badgeColor, 'gray'))\n \"\n >{{ props.action.badge }}</Badge\n >\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n {{ tooltip }}\n <kbd v-if=\"shortcut\" class=\"ms-2 rounded border border-white/20 px-1 font-mono text-[10px]\">{{\n formatKeyBinding(shortcut)\n }}</kbd>\n </TooltipContent>\n </Tooltip>\n <template v-else>\n <Button\n v-if=\"isPlainLink && props.action.openUrlInNewTab\"\n as-child\n variant=\"plain\"\n :size=\"sizeProp\"\n :class=\"classes\"\n :disabled=\"props.action.disabled\"\n :aria-label=\"ariaLabel\"\n v-bind=\"props.action.extraAttributes\"\n >\n <a :href=\"props.action.url\" target=\"_blank\" rel=\"noopener noreferrer\">\n <Spinner v-if=\"busy\" />\n <Icon\n v-else-if=\"props.action.icon && props.action.iconPosition !== 'after'\"\n :name=\"props.action.icon\"\n />\n <span v-if=\"!isIconOnly\" :class=\"labelClass\">{{ props.action.label }}</span>\n <span v-if=\"!isIconOnly\" class=\"sr-only\"> {{ newTabHint }}</span>\n <Icon\n v-if=\"props.action.icon && props.action.iconPosition === 'after' && !busy\"\n :name=\"props.action.icon\"\n />\n <Badge\n v-if=\"props.action.badge !== undefined && props.action.badge !== null\"\n variant=\"outline\"\n :class=\"\n cn('ms-1 px-1.5 py-0', colorClass(badgeColorClasses, props.action.badgeColor, 'gray'))\n \"\n >{{ props.action.badge }}</Badge\n >\n </a>\n </Button>\n <Button\n v-else-if=\"isPlainLink\"\n as-child\n variant=\"plain\"\n :size=\"sizeProp\"\n :class=\"classes\"\n :disabled=\"props.action.disabled\"\n :aria-label=\"ariaLabel\"\n v-bind=\"props.action.extraAttributes\"\n >\n <Link :href=\"props.action.url ?? '#'\">\n <Spinner v-if=\"busy\" />\n <Icon\n v-else-if=\"props.action.icon && props.action.iconPosition !== 'after'\"\n :name=\"props.action.icon\"\n />\n <span v-if=\"!isIconOnly\" :class=\"labelClass\">{{ props.action.label }}</span>\n <Icon\n v-if=\"props.action.icon && props.action.iconPosition === 'after' && !busy\"\n :name=\"props.action.icon\"\n />\n <Badge\n v-if=\"props.action.badge !== undefined && props.action.badge !== null\"\n variant=\"outline\"\n :class=\"\n cn('ms-1 px-1.5 py-0', colorClass(badgeColorClasses, props.action.badgeColor, 'gray'))\n \"\n >{{ props.action.badge }}</Badge\n >\n </Link>\n </Button>\n <Button\n v-else\n type=\"button\"\n variant=\"plain\"\n :size=\"sizeProp\"\n :class=\"classes\"\n :disabled=\"props.action.disabled || busy\"\n :aria-label=\"ariaLabel\"\n v-bind=\"props.action.extraAttributes\"\n @click=\"onClick\"\n >\n <Spinner v-if=\"busy\" />\n <Icon\n v-else-if=\"props.action.icon && props.action.iconPosition !== 'after'\"\n :name=\"props.action.icon\"\n />\n <span v-if=\"!isIconOnly\" :class=\"labelClass\">{{ props.action.label }}</span>\n <Icon\n v-if=\"props.action.icon && props.action.iconPosition === 'after' && !busy\"\n :name=\"props.action.icon\"\n />\n <Badge\n v-if=\"props.action.badge !== undefined && props.action.badge !== null\"\n variant=\"outline\"\n :class=\"\n cn('ms-1 px-1.5 py-0', colorClass(badgeColorClasses, props.action.badgeColor, 'gray'))\n \"\n >{{ props.action.badge }}</Badge\n >\n </Button>\n </template>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"ActionButton.js","names":["_sfc_main","ActionButton_vue_vue_type_script_setup_true_lang_default","ActionButton_default"],"sources":["../../../src/components/actions/ActionButton.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { ActionContext, ActionSchema } from '@alfakit/core'\nimport {\n bindsKeyBindings,\n formatKeyBinding,\n iconButtonSize,\n isActionLoading,\n isActionProcessing,\n registerKeyBindings,\n resolveActionSize,\n} from '@alfakit/core'\nimport { Link } from '@inertiajs/vue3'\nimport { computed, watchEffect, type HTMLAttributes } from 'vue'\nimport { useStoreSelector } from '../../composables/use-store'\nimport { useActionRunner, useT } from '../../context'\nimport {\n badgeColorClasses,\n colorClass,\n ghostButtonColorClasses,\n outlineButtonColorClasses,\n solidButtonColorClasses,\n textColorClasses,\n} from '../../lib/colors'\nimport { Icon } from '../../lib/icons'\nimport { cn } from '../../lib/utils'\nimport Badge from '../ui/Badge.vue'\nimport Button from '../ui/Button.vue'\nimport Spinner from '../ui/Spinner.vue'\nimport Tooltip from '../ui/Tooltip.vue'\nimport TooltipContent from '../ui/TooltipContent.vue'\nimport TooltipTrigger from '../ui/TooltipTrigger.vue'\n\nexport interface ActionButtonProps {\n action: ActionSchema\n context: ActionContext\n size?: 'xs' | 'sm' | 'default' | 'lg'\n class?: HTMLAttributes['class']\n /** Force a variant (e.g. menu items render as plain rows). */\n variant?: ActionSchema['variant']\n /** Bind the action's key bindings globally while mounted. */\n withKeyBindings?: boolean\n /** Override how the action runs (e.g. a form submits its values). */\n onTrigger?: (action: ActionSchema, context: ActionContext) => void | Promise<void>\n}\n\nconst props = withDefaults(defineProps<ActionButtonProps>(), {\n size: 'default',\n withKeyBindings: true,\n})\n\nconst runner = useActionRunner()\n// Only this run (this record's button), not the same action in every table row.\nconst loading = useStoreSelector(runner.store, (state) =>\n isActionLoading(state, props.action, props.context),\n)\nconst processing = useStoreSelector(runner.store, (state) =>\n isActionProcessing(state, props.action, props.context),\n)\n\nconst variant = computed(\n () =>\n props.variant ??\n (props.action.outlined\n ? 'outline'\n : (props.action.variant ??\n (props.action.hasAction || props.action.hasModal || props.action.url ? 'link' : 'button'))),\n)\nconst isIconOnly = computed(() => variant.value === 'icon-button' || !props.action.label)\nconst busy = computed(() => loading.value || processing.value)\n// A disabled link renders as a disabled button so it cannot navigate.\nconst isPlainLink = computed(() =>\n Boolean(\n props.action.url && !props.action.hasAction && !props.action.hasModal && !props.action.disabled,\n ),\n)\n// Record actions repeat per row: a global shortcut would run them for every record.\nconst bindsKeys = computed(\n () => props.withKeyBindings && bindsKeyBindings(props.action, props.context),\n)\n\n/** The badge trigger style (`badge()` without an argument). */\nconst BADGE_TRIGGER_CLASSES =\n \"h-auto min-h-6 gap-1 rounded-md border px-2 py-0.5 text-xs font-medium [&_svg:not([class*='size-'])]:size-3.5\"\n\nfunction buttonClasses(action: ActionSchema, kind: ActionSchema['variant']): string {\n const color = action.color ?? 'primary'\n\n switch (kind) {\n case 'outline':\n return cn('bg-background border', colorClass(outlineButtonColorClasses, color, 'gray'))\n case 'ghost':\n return colorClass(ghostButtonColorClasses, color, 'gray')\n case 'link':\n return cn(\n 'h-auto p-0 underline-offset-4 hover:underline has-[>svg]:px-0',\n colorClass(textColorClasses, color, 'primary'),\n )\n case 'icon-button':\n return colorClass(ghostButtonColorClasses, color, 'gray')\n case 'badge':\n // `badge()`: a tinted pill in the action's colour.\n return cn(BADGE_TRIGGER_CLASSES, colorClass(badgeColorClasses, color, 'primary'))\n default:\n return colorClass(solidButtonColorClasses, color, 'primary')\n }\n}\n\nconst run = () =>\n void (props.onTrigger\n ? props.onTrigger(props.action, props.context)\n : runner.trigger(props.action, props.context))\n\nwatchEffect((onCleanup) => {\n if (!bindsKeys.value || !props.action.keyBindings) {\n return\n }\n\n onCleanup(registerKeyBindings([{ keys: props.action.keyBindings, handler: run }]))\n})\n\nconst onClick = (event: MouseEvent) => {\n if (isPlainLink.value) {\n return // Plain link: let Inertia Link / anchor handle it.\n }\n\n event.preventDefault()\n run()\n}\n\nconst sizeProp = computed(() => {\n const size = variant.value === 'badge' ? 'xs' : resolveActionSize(props.action.size, props.size)\n\n return isIconOnly.value ? iconButtonSize(size) : size\n})\n// `labeledFrom()`: icon only below the breakpoint; the label stays the accessible name.\nconst LABEL_FROM: Record<string, string> = {\n sm: 'hidden sm:inline',\n md: 'hidden md:inline',\n lg: 'hidden lg:inline',\n xl: 'hidden xl:inline',\n '2xl': 'hidden 2xl:inline',\n}\nconst ICON_ONLY_BELOW: Record<string, string> = {\n sm: 'max-sm:aspect-square max-sm:px-0',\n md: 'max-md:aspect-square max-md:px-0',\n lg: 'max-lg:aspect-square max-lg:px-0',\n xl: 'max-xl:aspect-square max-xl:px-0',\n '2xl': 'max-2xl:aspect-square max-2xl:px-0',\n}\nconst labeledFrom = computed(() =>\n !isIconOnly.value && props.action.icon && props.action.labeledFrom\n ? props.action.labeledFrom\n : null,\n)\nconst labelClass = computed(() => (labeledFrom.value ? LABEL_FROM[labeledFrom.value] : undefined))\nconst classes = computed(() =>\n cn(\n buttonClasses(props.action, variant.value),\n labeledFrom.value && ICON_ONLY_BELOW[labeledFrom.value],\n props.class,\n ),\n)\nconst t = useT()\nconst newTabHint = computed(() => t('opens_in_new_tab', {}, '(opens in a new tab)'))\nconst ariaLabel = computed(() => {\n if (!isIconOnly.value && !labeledFrom.value) return undefined\n\n const name = props.action.label ?? props.action.tooltip ?? props.action.name\n\n return isPlainLink.value && props.action.openUrlInNewTab ? `${name} ${newTabHint.value}` : name\n})\nconst tooltip = computed(\n () => props.action.tooltip ?? (isIconOnly.value ? props.action.label : undefined),\n)\nconst shortcut = computed(() => (bindsKeys.value ? props.action.keyBindings?.[0] : undefined))\nconst disabledTooltip = computed(() => Boolean(props.action.disabled && tooltip.value))\n</script>\n\n<template>\n <Tooltip v-if=\"tooltip || shortcut\">\n <!-- A disabled button gets no pointer or focus events: a focusable span carries the\n tooltip (e.g. the reason from `authorizationTooltip()`). -->\n <TooltipTrigger\n :as-child=\"!disabledTooltip\"\n :as=\"disabledTooltip ? 'span' : undefined\"\n :tabindex=\"disabledTooltip ? 0 : undefined\"\n :class=\"disabledTooltip ? 'inline-flex' : undefined\"\n :data-disabled-tooltip=\"disabledTooltip ? '' : undefined\"\n >\n <Button\n v-if=\"isPlainLink && props.action.openUrlInNewTab\"\n as-child\n variant=\"plain\"\n :size=\"sizeProp\"\n :class=\"classes\"\n :disabled=\"props.action.disabled\"\n :aria-label=\"ariaLabel\"\n v-bind=\"props.action.extraAttributes\"\n >\n <a :href=\"props.action.url\" target=\"_blank\" rel=\"noopener noreferrer\">\n <Spinner v-if=\"busy\" />\n <Icon\n v-else-if=\"props.action.icon && props.action.iconPosition !== 'after'\"\n :name=\"props.action.icon\"\n />\n <span v-if=\"!isIconOnly\" :class=\"labelClass\">{{ props.action.label }}</span>\n <span v-if=\"!isIconOnly\" class=\"sr-only\"> {{ newTabHint }}</span>\n <Icon\n v-if=\"props.action.icon && props.action.iconPosition === 'after' && !busy\"\n :name=\"props.action.icon\"\n />\n <Badge\n v-if=\"props.action.badge !== undefined && props.action.badge !== null\"\n variant=\"outline\"\n :class=\"\n cn('ms-1 px-1.5 py-0', colorClass(badgeColorClasses, props.action.badgeColor, 'gray'))\n \"\n >{{ props.action.badge }}</Badge\n >\n </a>\n </Button>\n <Button\n v-else-if=\"isPlainLink\"\n as-child\n variant=\"plain\"\n :size=\"sizeProp\"\n :class=\"classes\"\n :disabled=\"props.action.disabled\"\n :aria-label=\"ariaLabel\"\n v-bind=\"props.action.extraAttributes\"\n >\n <Link :href=\"props.action.url ?? '#'\">\n <Spinner v-if=\"busy\" />\n <Icon\n v-else-if=\"props.action.icon && props.action.iconPosition !== 'after'\"\n :name=\"props.action.icon\"\n />\n <span v-if=\"!isIconOnly\" :class=\"labelClass\">{{ props.action.label }}</span>\n <Icon\n v-if=\"props.action.icon && props.action.iconPosition === 'after' && !busy\"\n :name=\"props.action.icon\"\n />\n <Badge\n v-if=\"props.action.badge !== undefined && props.action.badge !== null\"\n variant=\"outline\"\n :class=\"\n cn('ms-1 px-1.5 py-0', colorClass(badgeColorClasses, props.action.badgeColor, 'gray'))\n \"\n >{{ props.action.badge }}</Badge\n >\n </Link>\n </Button>\n <Button\n v-else\n type=\"button\"\n variant=\"plain\"\n :size=\"sizeProp\"\n :class=\"classes\"\n :disabled=\"props.action.disabled || busy\"\n :aria-label=\"ariaLabel\"\n v-bind=\"props.action.extraAttributes\"\n @click=\"onClick\"\n >\n <Spinner v-if=\"busy\" />\n <Icon\n v-else-if=\"props.action.icon && props.action.iconPosition !== 'after'\"\n :name=\"props.action.icon\"\n />\n <span v-if=\"!isIconOnly\" :class=\"labelClass\">{{ props.action.label }}</span>\n <Icon\n v-if=\"props.action.icon && props.action.iconPosition === 'after' && !busy\"\n :name=\"props.action.icon\"\n />\n <Badge\n v-if=\"props.action.badge !== undefined && props.action.badge !== null\"\n variant=\"outline\"\n :class=\"\n cn('ms-1 px-1.5 py-0', colorClass(badgeColorClasses, props.action.badgeColor, 'gray'))\n \"\n >{{ props.action.badge }}</Badge\n >\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n {{ tooltip }}\n <kbd\n v-if=\"shortcut\"\n dir=\"ltr\"\n class=\"ms-2 rounded border border-white/20 px-1 font-mono text-[10px]\"\n >{{ formatKeyBinding(shortcut) }}</kbd\n >\n </TooltipContent>\n </Tooltip>\n <template v-else>\n <Button\n v-if=\"isPlainLink && props.action.openUrlInNewTab\"\n as-child\n variant=\"plain\"\n :size=\"sizeProp\"\n :class=\"classes\"\n :disabled=\"props.action.disabled\"\n :aria-label=\"ariaLabel\"\n v-bind=\"props.action.extraAttributes\"\n >\n <a :href=\"props.action.url\" target=\"_blank\" rel=\"noopener noreferrer\">\n <Spinner v-if=\"busy\" />\n <Icon\n v-else-if=\"props.action.icon && props.action.iconPosition !== 'after'\"\n :name=\"props.action.icon\"\n />\n <span v-if=\"!isIconOnly\" :class=\"labelClass\">{{ props.action.label }}</span>\n <span v-if=\"!isIconOnly\" class=\"sr-only\"> {{ newTabHint }}</span>\n <Icon\n v-if=\"props.action.icon && props.action.iconPosition === 'after' && !busy\"\n :name=\"props.action.icon\"\n />\n <Badge\n v-if=\"props.action.badge !== undefined && props.action.badge !== null\"\n variant=\"outline\"\n :class=\"\n cn('ms-1 px-1.5 py-0', colorClass(badgeColorClasses, props.action.badgeColor, 'gray'))\n \"\n >{{ props.action.badge }}</Badge\n >\n </a>\n </Button>\n <Button\n v-else-if=\"isPlainLink\"\n as-child\n variant=\"plain\"\n :size=\"sizeProp\"\n :class=\"classes\"\n :disabled=\"props.action.disabled\"\n :aria-label=\"ariaLabel\"\n v-bind=\"props.action.extraAttributes\"\n >\n <Link :href=\"props.action.url ?? '#'\">\n <Spinner v-if=\"busy\" />\n <Icon\n v-else-if=\"props.action.icon && props.action.iconPosition !== 'after'\"\n :name=\"props.action.icon\"\n />\n <span v-if=\"!isIconOnly\" :class=\"labelClass\">{{ props.action.label }}</span>\n <Icon\n v-if=\"props.action.icon && props.action.iconPosition === 'after' && !busy\"\n :name=\"props.action.icon\"\n />\n <Badge\n v-if=\"props.action.badge !== undefined && props.action.badge !== null\"\n variant=\"outline\"\n :class=\"\n cn('ms-1 px-1.5 py-0', colorClass(badgeColorClasses, props.action.badgeColor, 'gray'))\n \"\n >{{ props.action.badge }}</Badge\n >\n </Link>\n </Button>\n <Button\n v-else\n type=\"button\"\n variant=\"plain\"\n :size=\"sizeProp\"\n :class=\"classes\"\n :disabled=\"props.action.disabled || busy\"\n :aria-label=\"ariaLabel\"\n v-bind=\"props.action.extraAttributes\"\n @click=\"onClick\"\n >\n <Spinner v-if=\"busy\" />\n <Icon\n v-else-if=\"props.action.icon && props.action.iconPosition !== 'after'\"\n :name=\"props.action.icon\"\n />\n <span v-if=\"!isIconOnly\" :class=\"labelClass\">{{ props.action.label }}</span>\n <Icon\n v-if=\"props.action.icon && props.action.iconPosition === 'after' && !busy\"\n :name=\"props.action.icon\"\n />\n <Badge\n v-if=\"props.action.badge !== undefined && props.action.badge !== null\"\n variant=\"outline\"\n :class=\"\n cn('ms-1 px-1.5 py-0', colorClass(badgeColorClasses, props.action.badgeColor, 'gray'))\n \"\n >{{ props.action.badge }}</Badge\n >\n </Button>\n </template>\n</template>\n"],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"ActionButton.vue.d.ts","sourceRoot":"","sources":["../../../src/components/actions/ActionButton.vue"],"names":[],"mappings":"AA+XA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAShE,OAAO,EAAyB,KAAK,cAAc,EAAE,MAAM,KAAK,CAAA;AAoBhE,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,YAAY,CAAA;IACpB,OAAO,EAAE,aAAa,CAAA;IACtB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,CAAA;IACrC,KAAK,CAAC,EAAE,cAAc,CAAC,OAAO,CAAC,CAAA;IAC/B,8DAA8D;IAC9D,OAAO,CAAC,EAAE,YAAY,CAAC,SAAS,CAAC,CAAA;IACjC,6DAA6D;IAC7D,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,qEAAqE;IACrE,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,aAAa,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACnF;;UARQ,IAAI,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI;qBAKnB,OAAO;;AAkxB3B,wBAOG"}
1
+ {"version":3,"file":"ActionButton.vue.d.ts","sourceRoot":"","sources":["../../../src/components/actions/ActionButton.vue"],"names":[],"mappings":"AAuYA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAWhE,OAAO,EAAyB,KAAK,cAAc,EAAE,MAAM,KAAK,CAAA;AAoBhE,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,YAAY,CAAA;IACpB,OAAO,EAAE,aAAa,CAAA;IACtB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,CAAA;IACrC,KAAK,CAAC,EAAE,cAAc,CAAC,OAAO,CAAC,CAAA;IAC/B,8DAA8D;IAC9D,OAAO,CAAC,EAAE,YAAY,CAAC,SAAS,CAAC,CAAA;IACjC,6DAA6D;IAC7D,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,qEAAqE;IACrE,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,aAAa,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACnF;;UARQ,IAAI,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI;qBAKnB,OAAO;;AAoxB3B,wBAOG"}
@@ -1,28 +1,29 @@
1
1
  import { useActionRunner as e, useT as t } from "../../context.js";
2
2
  import { cn as n } from "../../lib/utils.js";
3
3
  import { useStoreSelector as r } from "../../composables/use-store.js";
4
- import { badgeColorClasses as i, colorClass as a, ghostButtonColorClasses as o, outlineButtonColorClasses as ee, solidButtonColorClasses as te, textColorClasses as s } from "../../lib/colors.js";
5
- import c from "../../lib/Icon.js";
6
- import l from "../ui/Badge2.js";
7
- import u from "../ui/Button2.js";
8
- import d from "../ui/Spinner.js";
9
- import ne from "../ui/Tooltip.js";
10
- import re from "../ui/TooltipContent.js";
11
- import ie from "../ui/TooltipTrigger.js";
12
- import { bindsKeyBindings as f, formatKeyBinding as p, iconButtonSize as ae, registerKeyBindings as oe, resolveActionSize as m } from "@alfakit/core";
13
- import { Link as h } from "@inertiajs/vue3";
14
- import { Fragment as se, computed as g, createBlock as _, createCommentVNode as v, createElementBlock as y, createElementVNode as b, createTextVNode as x, createVNode as S, defineComponent as C, mergeProps as w, normalizeClass as T, openBlock as E, toDisplayString as D, unref as O, watchEffect as ce, withCtx as k } from "vue";
4
+ import { badgeColorClasses as i, colorClass as a, ghostButtonColorClasses as o, outlineButtonColorClasses as ee, solidButtonColorClasses as te, textColorClasses as ne } from "../../lib/colors.js";
5
+ import s from "../../lib/Icon.js";
6
+ import c from "../ui/Badge2.js";
7
+ import l from "../ui/Button2.js";
8
+ import u from "../ui/Spinner.js";
9
+ import re from "../ui/Tooltip.js";
10
+ import ie from "../ui/TooltipContent.js";
11
+ import d from "../ui/TooltipTrigger.js";
12
+ import { bindsKeyBindings as f, formatKeyBinding as p, iconButtonSize as ae, isActionLoading as oe, isActionProcessing as se, registerKeyBindings as m, resolveActionSize as h } from "@alfakit/core";
13
+ import { Link as g } from "@inertiajs/vue3";
14
+ import { Fragment as ce, computed as _, createBlock as v, createCommentVNode as y, createElementBlock as b, createElementVNode as x, createTextVNode as S, createVNode as C, defineComponent as w, mergeProps as T, normalizeClass as E, openBlock as D, toDisplayString as O, unref as k, watchEffect as le, withCtx as A } from "vue";
15
15
  //#region src/components/actions/ActionButton.vue?vue&type=script&setup=true&lang.ts
16
- var A = ["href"], j = {
16
+ var ue = ["href"], de = {
17
17
  key: 3,
18
18
  class: "sr-only"
19
- }, M = {
19
+ }, fe = {
20
20
  key: 0,
21
+ dir: "ltr",
21
22
  class: "ms-2 rounded border border-white/20 px-1 font-mono text-[10px]"
22
- }, N = ["href"], P = {
23
+ }, pe = ["href"], j = {
23
24
  key: 3,
24
25
  class: "sr-only"
25
- }, F = "h-auto min-h-6 gap-1 rounded-md border px-2 py-0.5 text-xs font-medium [&_svg:not([class*='size-'])]:size-3.5", I = /*@__PURE__*/ C({
26
+ }, M = "h-auto min-h-6 gap-1 rounded-md border px-2 py-0.5 text-xs font-medium [&_svg:not([class*='size-'])]:size-3.5", N = /*@__PURE__*/ w({
26
27
  __name: "ActionButton",
27
28
  props: {
28
29
  action: {},
@@ -42,129 +43,129 @@ var A = ["href"], j = {
42
43
  },
43
44
  onTrigger: {}
44
45
  },
45
- setup(C) {
46
- let I = C, L = e(), le = r(L.store, (e) => e.loading === I.action.name), ue = r(L.store, (e) => e.modals.some((e) => e.action.name === I.action.name && e.processing)), R = g(() => I.variant ?? (I.action.outlined ? "outline" : I.action.variant ?? (I.action.hasAction || I.action.hasModal || I.action.url ? "link" : "button"))), z = g(() => R.value === "icon-button" || !I.action.label), B = g(() => le.value || ue.value), V = g(() => !(!I.action.url || I.action.hasAction || I.action.hasModal || I.action.disabled)), H = g(() => I.withKeyBindings && f(I.action, I.context));
47
- function de(e, t) {
46
+ setup(w) {
47
+ let N = w, P = e(), F = r(P.store, (e) => oe(e, N.action, N.context)), I = r(P.store, (e) => se(e, N.action, N.context)), L = _(() => N.variant ?? (N.action.outlined ? "outline" : N.action.variant ?? (N.action.hasAction || N.action.hasModal || N.action.url ? "link" : "button"))), R = _(() => L.value === "icon-button" || !N.action.label), z = _(() => F.value || I.value), B = _(() => !(!N.action.url || N.action.hasAction || N.action.hasModal || N.action.disabled)), V = _(() => N.withKeyBindings && f(N.action, N.context));
48
+ function me(e, t) {
48
49
  let r = e.color ?? "primary";
49
50
  switch (t) {
50
51
  case "outline": return n("bg-background border", a(ee, r, "gray"));
51
52
  case "ghost": return a(o, r, "gray");
52
- case "link": return n("h-auto p-0 underline-offset-4 hover:underline", a(s, r, "primary"));
53
+ case "link": return n("h-auto p-0 underline-offset-4 hover:underline has-[>svg]:px-0", a(ne, r, "primary"));
53
54
  case "icon-button": return a(o, r, "gray");
54
- case "badge": return n(F, a(i, r, "primary"));
55
+ case "badge": return n(M, a(i, r, "primary"));
55
56
  default: return a(te, r, "primary");
56
57
  }
57
58
  }
58
- let U = () => void (I.onTrigger ? I.onTrigger(I.action, I.context) : L.trigger(I.action, I.context));
59
- ce((e) => {
60
- H.value && I.action.keyBindings && e(oe([{
61
- keys: I.action.keyBindings,
62
- handler: U
59
+ let H = () => void (N.onTrigger ? N.onTrigger(N.action, N.context) : P.trigger(N.action, N.context));
60
+ le((e) => {
61
+ V.value && N.action.keyBindings && e(m([{
62
+ keys: N.action.keyBindings,
63
+ handler: H
63
64
  }]));
64
65
  });
65
- let W = (e) => {
66
- V.value || (e.preventDefault(), U());
67
- }, G = g(() => {
68
- let e = R.value === "badge" ? "xs" : m(I.action.size, I.size);
69
- return z.value ? ae(e) : e;
70
- }), fe = {
66
+ let U = (e) => {
67
+ B.value || (e.preventDefault(), H());
68
+ }, W = _(() => {
69
+ let e = L.value === "badge" ? "xs" : h(N.action.size, N.size);
70
+ return R.value ? ae(e) : e;
71
+ }), G = {
71
72
  sm: "hidden sm:inline",
72
73
  md: "hidden md:inline",
73
74
  lg: "hidden lg:inline",
74
75
  xl: "hidden xl:inline",
75
76
  "2xl": "hidden 2xl:inline"
76
- }, pe = {
77
+ }, he = {
77
78
  sm: "max-sm:aspect-square max-sm:px-0",
78
79
  md: "max-md:aspect-square max-md:px-0",
79
80
  lg: "max-lg:aspect-square max-lg:px-0",
80
81
  xl: "max-xl:aspect-square max-xl:px-0",
81
82
  "2xl": "max-2xl:aspect-square max-2xl:px-0"
82
- }, K = g(() => !z.value && I.action.icon && I.action.labeledFrom ? I.action.labeledFrom : null), q = g(() => K.value ? fe[K.value] : void 0), J = g(() => n(de(I.action, R.value), K.value && pe[K.value], I.class)), me = t(), Y = g(() => me("opens_in_new_tab", {}, "(opens in a new tab)")), X = g(() => {
83
- if (!z.value && !K.value) return;
84
- let e = I.action.label ?? I.action.tooltip ?? I.action.name;
85
- return V.value && I.action.openUrlInNewTab ? `${e} ${Y.value}` : e;
86
- }), Z = g(() => I.action.tooltip ?? (z.value ? I.action.label : void 0)), Q = g(() => H.value ? I.action.keyBindings?.[0] : void 0), $ = g(() => !!(I.action.disabled && Z.value));
87
- return (e, t) => Z.value || Q.value ? (E(), _(ne, { key: 0 }, {
88
- default: k(() => [S(ie, {
83
+ }, K = _(() => !R.value && N.action.icon && N.action.labeledFrom ? N.action.labeledFrom : null), q = _(() => K.value ? G[K.value] : void 0), J = _(() => n(me(N.action, L.value), K.value && he[K.value], N.class)), ge = t(), Y = _(() => ge("opens_in_new_tab", {}, "(opens in a new tab)")), X = _(() => {
84
+ if (!R.value && !K.value) return;
85
+ let e = N.action.label ?? N.action.tooltip ?? N.action.name;
86
+ return B.value && N.action.openUrlInNewTab ? `${e} ${Y.value}` : e;
87
+ }), Z = _(() => N.action.tooltip ?? (R.value ? N.action.label : void 0)), Q = _(() => V.value ? N.action.keyBindings?.[0] : void 0), $ = _(() => !!(N.action.disabled && Z.value));
88
+ return (e, t) => Z.value || Q.value ? (D(), v(re, { key: 0 }, {
89
+ default: A(() => [C(d, {
89
90
  "as-child": !$.value,
90
91
  as: $.value ? "span" : void 0,
91
92
  tabindex: $.value ? 0 : void 0,
92
- class: T($.value ? "inline-flex" : void 0),
93
+ class: E($.value ? "inline-flex" : void 0),
93
94
  "data-disabled-tooltip": $.value ? "" : void 0
94
95
  }, {
95
- default: k(() => [V.value && I.action.openUrlInNewTab ? (E(), _(u, w({
96
+ default: A(() => [B.value && N.action.openUrlInNewTab ? (D(), v(l, T({
96
97
  key: 0,
97
98
  "as-child": "",
98
99
  variant: "plain",
99
- size: G.value,
100
+ size: W.value,
100
101
  class: J.value,
101
- disabled: I.action.disabled,
102
+ disabled: N.action.disabled,
102
103
  "aria-label": X.value
103
- }, I.action.extraAttributes), {
104
- default: k(() => [b("a", {
105
- href: I.action.url,
104
+ }, N.action.extraAttributes), {
105
+ default: A(() => [x("a", {
106
+ href: N.action.url,
106
107
  target: "_blank",
107
108
  rel: "noopener noreferrer"
108
109
  }, [
109
- B.value ? (E(), _(d, { key: 0 })) : I.action.icon && I.action.iconPosition !== "after" ? (E(), _(O(c), {
110
+ z.value ? (D(), v(u, { key: 0 })) : N.action.icon && N.action.iconPosition !== "after" ? (D(), v(k(s), {
110
111
  key: 1,
111
- name: I.action.icon
112
- }, null, 8, ["name"])) : v("", !0),
113
- z.value ? v("", !0) : (E(), y("span", {
112
+ name: N.action.icon
113
+ }, null, 8, ["name"])) : y("", !0),
114
+ R.value ? y("", !0) : (D(), b("span", {
114
115
  key: 2,
115
- class: T(q.value)
116
- }, D(I.action.label), 3)),
117
- z.value ? v("", !0) : (E(), y("span", j, D(Y.value), 1)),
118
- I.action.icon && I.action.iconPosition === "after" && !B.value ? (E(), _(O(c), {
116
+ class: E(q.value)
117
+ }, O(N.action.label), 3)),
118
+ R.value ? y("", !0) : (D(), b("span", de, O(Y.value), 1)),
119
+ N.action.icon && N.action.iconPosition === "after" && !z.value ? (D(), v(k(s), {
119
120
  key: 4,
120
- name: I.action.icon
121
- }, null, 8, ["name"])) : v("", !0),
122
- I.action.badge !== void 0 && I.action.badge !== null ? (E(), _(l, {
121
+ name: N.action.icon
122
+ }, null, 8, ["name"])) : y("", !0),
123
+ N.action.badge !== void 0 && N.action.badge !== null ? (D(), v(c, {
123
124
  key: 5,
124
125
  variant: "outline",
125
- class: T(O(n)("ms-1 px-1.5 py-0", O(a)(O(i), I.action.badgeColor, "gray")))
126
+ class: E(k(n)("ms-1 px-1.5 py-0", k(a)(k(i), N.action.badgeColor, "gray")))
126
127
  }, {
127
- default: k(() => [x(D(I.action.badge), 1)]),
128
+ default: A(() => [S(O(N.action.badge), 1)]),
128
129
  _: 1
129
- }, 8, ["class"])) : v("", !0)
130
- ], 8, A)]),
130
+ }, 8, ["class"])) : y("", !0)
131
+ ], 8, ue)]),
131
132
  _: 1
132
133
  }, 16, [
133
134
  "size",
134
135
  "class",
135
136
  "disabled",
136
137
  "aria-label"
137
- ])) : V.value ? (E(), _(u, w({
138
+ ])) : B.value ? (D(), v(l, T({
138
139
  key: 1,
139
140
  "as-child": "",
140
141
  variant: "plain",
141
- size: G.value,
142
+ size: W.value,
142
143
  class: J.value,
143
- disabled: I.action.disabled,
144
+ disabled: N.action.disabled,
144
145
  "aria-label": X.value
145
- }, I.action.extraAttributes), {
146
- default: k(() => [S(O(h), { href: I.action.url ?? "#" }, {
147
- default: k(() => [
148
- B.value ? (E(), _(d, { key: 0 })) : I.action.icon && I.action.iconPosition !== "after" ? (E(), _(O(c), {
146
+ }, N.action.extraAttributes), {
147
+ default: A(() => [C(k(g), { href: N.action.url ?? "#" }, {
148
+ default: A(() => [
149
+ z.value ? (D(), v(u, { key: 0 })) : N.action.icon && N.action.iconPosition !== "after" ? (D(), v(k(s), {
149
150
  key: 1,
150
- name: I.action.icon
151
- }, null, 8, ["name"])) : v("", !0),
152
- z.value ? v("", !0) : (E(), y("span", {
151
+ name: N.action.icon
152
+ }, null, 8, ["name"])) : y("", !0),
153
+ R.value ? y("", !0) : (D(), b("span", {
153
154
  key: 2,
154
- class: T(q.value)
155
- }, D(I.action.label), 3)),
156
- I.action.icon && I.action.iconPosition === "after" && !B.value ? (E(), _(O(c), {
155
+ class: E(q.value)
156
+ }, O(N.action.label), 3)),
157
+ N.action.icon && N.action.iconPosition === "after" && !z.value ? (D(), v(k(s), {
157
158
  key: 3,
158
- name: I.action.icon
159
- }, null, 8, ["name"])) : v("", !0),
160
- I.action.badge !== void 0 && I.action.badge !== null ? (E(), _(l, {
159
+ name: N.action.icon
160
+ }, null, 8, ["name"])) : y("", !0),
161
+ N.action.badge !== void 0 && N.action.badge !== null ? (D(), v(c, {
161
162
  key: 4,
162
163
  variant: "outline",
163
- class: T(O(n)("ms-1 px-1.5 py-0", O(a)(O(i), I.action.badgeColor, "gray")))
164
+ class: E(k(n)("ms-1 px-1.5 py-0", k(a)(k(i), N.action.badgeColor, "gray")))
164
165
  }, {
165
- default: k(() => [x(D(I.action.badge), 1)]),
166
+ default: A(() => [S(O(N.action.badge), 1)]),
166
167
  _: 1
167
- }, 8, ["class"])) : v("", !0)
168
+ }, 8, ["class"])) : y("", !0)
168
169
  ]),
169
170
  _: 1
170
171
  }, 8, ["href"])]),
@@ -174,36 +175,36 @@ var A = ["href"], j = {
174
175
  "class",
175
176
  "disabled",
176
177
  "aria-label"
177
- ])) : (E(), _(u, w({
178
+ ])) : (D(), v(l, T({
178
179
  key: 2,
179
180
  type: "button",
180
181
  variant: "plain",
181
- size: G.value,
182
+ size: W.value,
182
183
  class: J.value,
183
- disabled: I.action.disabled || B.value,
184
+ disabled: N.action.disabled || z.value,
184
185
  "aria-label": X.value
185
- }, I.action.extraAttributes, { onClick: W }), {
186
- default: k(() => [
187
- B.value ? (E(), _(d, { key: 0 })) : I.action.icon && I.action.iconPosition !== "after" ? (E(), _(O(c), {
186
+ }, N.action.extraAttributes, { onClick: U }), {
187
+ default: A(() => [
188
+ z.value ? (D(), v(u, { key: 0 })) : N.action.icon && N.action.iconPosition !== "after" ? (D(), v(k(s), {
188
189
  key: 1,
189
- name: I.action.icon
190
- }, null, 8, ["name"])) : v("", !0),
191
- z.value ? v("", !0) : (E(), y("span", {
190
+ name: N.action.icon
191
+ }, null, 8, ["name"])) : y("", !0),
192
+ R.value ? y("", !0) : (D(), b("span", {
192
193
  key: 2,
193
- class: T(q.value)
194
- }, D(I.action.label), 3)),
195
- I.action.icon && I.action.iconPosition === "after" && !B.value ? (E(), _(O(c), {
194
+ class: E(q.value)
195
+ }, O(N.action.label), 3)),
196
+ N.action.icon && N.action.iconPosition === "after" && !z.value ? (D(), v(k(s), {
196
197
  key: 3,
197
- name: I.action.icon
198
- }, null, 8, ["name"])) : v("", !0),
199
- I.action.badge !== void 0 && I.action.badge !== null ? (E(), _(l, {
198
+ name: N.action.icon
199
+ }, null, 8, ["name"])) : y("", !0),
200
+ N.action.badge !== void 0 && N.action.badge !== null ? (D(), v(c, {
200
201
  key: 4,
201
202
  variant: "outline",
202
- class: T(O(n)("ms-1 px-1.5 py-0", O(a)(O(i), I.action.badgeColor, "gray")))
203
+ class: E(k(n)("ms-1 px-1.5 py-0", k(a)(k(i), N.action.badgeColor, "gray")))
203
204
  }, {
204
- default: k(() => [x(D(I.action.badge), 1)]),
205
+ default: A(() => [S(O(N.action.badge), 1)]),
205
206
  _: 1
206
- }, 8, ["class"])) : v("", !0)
207
+ }, 8, ["class"])) : y("", !0)
207
208
  ]),
208
209
  _: 1
209
210
  }, 16, [
@@ -219,84 +220,84 @@ var A = ["href"], j = {
219
220
  "tabindex",
220
221
  "class",
221
222
  "data-disabled-tooltip"
222
- ]), S(re, null, {
223
- default: k(() => [x(D(Z.value) + " ", 1), Q.value ? (E(), y("kbd", M, D(O(p)(Q.value)), 1)) : v("", !0)]),
223
+ ]), C(ie, null, {
224
+ default: A(() => [S(O(Z.value) + " ", 1), Q.value ? (D(), b("kbd", fe, O(k(p)(Q.value)), 1)) : y("", !0)]),
224
225
  _: 1
225
226
  })]),
226
227
  _: 1
227
- })) : (E(), y(se, { key: 1 }, [V.value && I.action.openUrlInNewTab ? (E(), _(u, w({
228
+ })) : (D(), b(ce, { key: 1 }, [B.value && N.action.openUrlInNewTab ? (D(), v(l, T({
228
229
  key: 0,
229
230
  "as-child": "",
230
231
  variant: "plain",
231
- size: G.value,
232
+ size: W.value,
232
233
  class: J.value,
233
- disabled: I.action.disabled,
234
+ disabled: N.action.disabled,
234
235
  "aria-label": X.value
235
- }, I.action.extraAttributes), {
236
- default: k(() => [b("a", {
237
- href: I.action.url,
236
+ }, N.action.extraAttributes), {
237
+ default: A(() => [x("a", {
238
+ href: N.action.url,
238
239
  target: "_blank",
239
240
  rel: "noopener noreferrer"
240
241
  }, [
241
- B.value ? (E(), _(d, { key: 0 })) : I.action.icon && I.action.iconPosition !== "after" ? (E(), _(O(c), {
242
+ z.value ? (D(), v(u, { key: 0 })) : N.action.icon && N.action.iconPosition !== "after" ? (D(), v(k(s), {
242
243
  key: 1,
243
- name: I.action.icon
244
- }, null, 8, ["name"])) : v("", !0),
245
- z.value ? v("", !0) : (E(), y("span", {
244
+ name: N.action.icon
245
+ }, null, 8, ["name"])) : y("", !0),
246
+ R.value ? y("", !0) : (D(), b("span", {
246
247
  key: 2,
247
- class: T(q.value)
248
- }, D(I.action.label), 3)),
249
- z.value ? v("", !0) : (E(), y("span", P, D(Y.value), 1)),
250
- I.action.icon && I.action.iconPosition === "after" && !B.value ? (E(), _(O(c), {
248
+ class: E(q.value)
249
+ }, O(N.action.label), 3)),
250
+ R.value ? y("", !0) : (D(), b("span", j, O(Y.value), 1)),
251
+ N.action.icon && N.action.iconPosition === "after" && !z.value ? (D(), v(k(s), {
251
252
  key: 4,
252
- name: I.action.icon
253
- }, null, 8, ["name"])) : v("", !0),
254
- I.action.badge !== void 0 && I.action.badge !== null ? (E(), _(l, {
253
+ name: N.action.icon
254
+ }, null, 8, ["name"])) : y("", !0),
255
+ N.action.badge !== void 0 && N.action.badge !== null ? (D(), v(c, {
255
256
  key: 5,
256
257
  variant: "outline",
257
- class: T(O(n)("ms-1 px-1.5 py-0", O(a)(O(i), I.action.badgeColor, "gray")))
258
+ class: E(k(n)("ms-1 px-1.5 py-0", k(a)(k(i), N.action.badgeColor, "gray")))
258
259
  }, {
259
- default: k(() => [x(D(I.action.badge), 1)]),
260
+ default: A(() => [S(O(N.action.badge), 1)]),
260
261
  _: 1
261
- }, 8, ["class"])) : v("", !0)
262
- ], 8, N)]),
262
+ }, 8, ["class"])) : y("", !0)
263
+ ], 8, pe)]),
263
264
  _: 1
264
265
  }, 16, [
265
266
  "size",
266
267
  "class",
267
268
  "disabled",
268
269
  "aria-label"
269
- ])) : V.value ? (E(), _(u, w({
270
+ ])) : B.value ? (D(), v(l, T({
270
271
  key: 1,
271
272
  "as-child": "",
272
273
  variant: "plain",
273
- size: G.value,
274
+ size: W.value,
274
275
  class: J.value,
275
- disabled: I.action.disabled,
276
+ disabled: N.action.disabled,
276
277
  "aria-label": X.value
277
- }, I.action.extraAttributes), {
278
- default: k(() => [S(O(h), { href: I.action.url ?? "#" }, {
279
- default: k(() => [
280
- B.value ? (E(), _(d, { key: 0 })) : I.action.icon && I.action.iconPosition !== "after" ? (E(), _(O(c), {
278
+ }, N.action.extraAttributes), {
279
+ default: A(() => [C(k(g), { href: N.action.url ?? "#" }, {
280
+ default: A(() => [
281
+ z.value ? (D(), v(u, { key: 0 })) : N.action.icon && N.action.iconPosition !== "after" ? (D(), v(k(s), {
281
282
  key: 1,
282
- name: I.action.icon
283
- }, null, 8, ["name"])) : v("", !0),
284
- z.value ? v("", !0) : (E(), y("span", {
283
+ name: N.action.icon
284
+ }, null, 8, ["name"])) : y("", !0),
285
+ R.value ? y("", !0) : (D(), b("span", {
285
286
  key: 2,
286
- class: T(q.value)
287
- }, D(I.action.label), 3)),
288
- I.action.icon && I.action.iconPosition === "after" && !B.value ? (E(), _(O(c), {
287
+ class: E(q.value)
288
+ }, O(N.action.label), 3)),
289
+ N.action.icon && N.action.iconPosition === "after" && !z.value ? (D(), v(k(s), {
289
290
  key: 3,
290
- name: I.action.icon
291
- }, null, 8, ["name"])) : v("", !0),
292
- I.action.badge !== void 0 && I.action.badge !== null ? (E(), _(l, {
291
+ name: N.action.icon
292
+ }, null, 8, ["name"])) : y("", !0),
293
+ N.action.badge !== void 0 && N.action.badge !== null ? (D(), v(c, {
293
294
  key: 4,
294
295
  variant: "outline",
295
- class: T(O(n)("ms-1 px-1.5 py-0", O(a)(O(i), I.action.badgeColor, "gray")))
296
+ class: E(k(n)("ms-1 px-1.5 py-0", k(a)(k(i), N.action.badgeColor, "gray")))
296
297
  }, {
297
- default: k(() => [x(D(I.action.badge), 1)]),
298
+ default: A(() => [S(O(N.action.badge), 1)]),
298
299
  _: 1
299
- }, 8, ["class"])) : v("", !0)
300
+ }, 8, ["class"])) : y("", !0)
300
301
  ]),
301
302
  _: 1
302
303
  }, 8, ["href"])]),
@@ -306,36 +307,36 @@ var A = ["href"], j = {
306
307
  "class",
307
308
  "disabled",
308
309
  "aria-label"
309
- ])) : (E(), _(u, w({
310
+ ])) : (D(), v(l, T({
310
311
  key: 2,
311
312
  type: "button",
312
313
  variant: "plain",
313
- size: G.value,
314
+ size: W.value,
314
315
  class: J.value,
315
- disabled: I.action.disabled || B.value,
316
+ disabled: N.action.disabled || z.value,
316
317
  "aria-label": X.value
317
- }, I.action.extraAttributes, { onClick: W }), {
318
- default: k(() => [
319
- B.value ? (E(), _(d, { key: 0 })) : I.action.icon && I.action.iconPosition !== "after" ? (E(), _(O(c), {
318
+ }, N.action.extraAttributes, { onClick: U }), {
319
+ default: A(() => [
320
+ z.value ? (D(), v(u, { key: 0 })) : N.action.icon && N.action.iconPosition !== "after" ? (D(), v(k(s), {
320
321
  key: 1,
321
- name: I.action.icon
322
- }, null, 8, ["name"])) : v("", !0),
323
- z.value ? v("", !0) : (E(), y("span", {
322
+ name: N.action.icon
323
+ }, null, 8, ["name"])) : y("", !0),
324
+ R.value ? y("", !0) : (D(), b("span", {
324
325
  key: 2,
325
- class: T(q.value)
326
- }, D(I.action.label), 3)),
327
- I.action.icon && I.action.iconPosition === "after" && !B.value ? (E(), _(O(c), {
326
+ class: E(q.value)
327
+ }, O(N.action.label), 3)),
328
+ N.action.icon && N.action.iconPosition === "after" && !z.value ? (D(), v(k(s), {
328
329
  key: 3,
329
- name: I.action.icon
330
- }, null, 8, ["name"])) : v("", !0),
331
- I.action.badge !== void 0 && I.action.badge !== null ? (E(), _(l, {
330
+ name: N.action.icon
331
+ }, null, 8, ["name"])) : y("", !0),
332
+ N.action.badge !== void 0 && N.action.badge !== null ? (D(), v(c, {
332
333
  key: 4,
333
334
  variant: "outline",
334
- class: T(O(n)("ms-1 px-1.5 py-0", O(a)(O(i), I.action.badgeColor, "gray")))
335
+ class: E(k(n)("ms-1 px-1.5 py-0", k(a)(k(i), N.action.badgeColor, "gray")))
335
336
  }, {
336
- default: k(() => [x(D(I.action.badge), 1)]),
337
+ default: A(() => [S(O(N.action.badge), 1)]),
337
338
  _: 1
338
- }, 8, ["class"])) : v("", !0)
339
+ }, 8, ["class"])) : y("", !0)
339
340
  ]),
340
341
  _: 1
341
342
  }, 16, [
@@ -347,6 +348,6 @@ var A = ["href"], j = {
347
348
  }
348
349
  });
349
350
  //#endregion
350
- export { I as default };
351
+ export { N as default };
351
352
 
352
353
  //# sourceMappingURL=ActionButton.vue_vue_type_script_setup_true_lang.js.map