@leaflink/stash 53.4.0 → 53.4.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 (178) hide show
  1. package/dist/Accordion.js +1 -1
  2. package/dist/Accordion.js.map +1 -1
  3. package/dist/ActionsDropdown.js +2 -2
  4. package/dist/ActionsDropdown.js.map +1 -1
  5. package/dist/AddressSelect.js.map +1 -1
  6. package/dist/AddressSelect.vue.d.ts +1 -1
  7. package/dist/Alert.js.map +1 -1
  8. package/dist/AppNavigationItem.js +1 -1
  9. package/dist/AppNavigationItem.js.map +1 -1
  10. package/dist/AppSidebar.js.map +1 -1
  11. package/dist/AppTopbar.js +1 -1
  12. package/dist/AppTopbar.js.map +1 -1
  13. package/dist/Avatar.js.map +1 -1
  14. package/dist/Badge.js.map +1 -1
  15. package/dist/Box.vue_vue_type_script_setup_true_lang-dFFZN40_.js.map +1 -1
  16. package/dist/Button.js.map +1 -1
  17. package/dist/ButtonGroup.js.map +1 -1
  18. package/dist/Card.js.map +1 -1
  19. package/dist/CardHeader.js.map +1 -1
  20. package/dist/CardMedia.js.map +1 -1
  21. package/dist/Carousel.js +169 -169
  22. package/dist/Carousel.js.map +1 -1
  23. package/dist/Checkbox.js +31 -31
  24. package/dist/Checkbox.js.map +1 -1
  25. package/dist/ChevronToggle.vue_vue_type_script_setup_true_lang-Ce_qOXfR.js.map +1 -1
  26. package/dist/Chip.js +21 -21
  27. package/dist/Chip.js.map +1 -1
  28. package/dist/Chip.vue.d.ts +1 -1
  29. package/dist/ConfirmationCodeInput.js +1 -1
  30. package/dist/ConfirmationCodeInput.js.map +1 -1
  31. package/dist/ContextSwitcher.js +28 -28
  32. package/dist/ContextSwitcher.js.map +1 -1
  33. package/dist/Copy.js +1 -1
  34. package/dist/Copy.js.map +1 -1
  35. package/dist/CurrencyInput.js +1 -1
  36. package/dist/CurrencyInput.js.map +1 -1
  37. package/dist/DataView.js +51 -51
  38. package/dist/DataView.js.map +1 -1
  39. package/dist/DataViewFilters.js.map +1 -1
  40. package/dist/DataViewSortButton.js +2 -2
  41. package/dist/DataViewSortButton.js.map +1 -1
  42. package/dist/DataViewToolbar.js +5 -5
  43. package/dist/DataViewToolbar.js.map +1 -1
  44. package/dist/DatePicker.js +237 -237
  45. package/dist/DatePicker.js.map +1 -1
  46. package/dist/DatePicker.vue.d.ts +1 -1
  47. package/dist/DescriptionList.js.map +1 -1
  48. package/dist/DescriptionListDetail.js.map +1 -1
  49. package/dist/DescriptionListGroup.js.map +1 -1
  50. package/dist/DescriptionListTerm.js.map +1 -1
  51. package/dist/Dialog.js.map +1 -1
  52. package/dist/Divider.js.map +1 -1
  53. package/dist/Dropdown.js +45 -45
  54. package/dist/Dropdown.js.map +1 -1
  55. package/dist/EmptyState.js.map +1 -1
  56. package/dist/Expand.js +1 -1
  57. package/dist/Expand.vue_vue_type_script_setup_true_lang-BmNJA0Xy.js +74 -0
  58. package/dist/{Expand.vue_vue_type_script_setup_true_lang-CiONJfAp.js.map → Expand.vue_vue_type_script_setup_true_lang-BmNJA0Xy.js.map} +1 -1
  59. package/dist/Field.js +1 -1
  60. package/dist/{Field.vue_vue_type_script_setup_true_lang-dAGKfjf5.js → Field.vue_vue_type_script_setup_true_lang-D2I8xDEW.js} +29 -29
  61. package/dist/{Field.vue_vue_type_script_setup_true_lang-dAGKfjf5.js.map → Field.vue_vue_type_script_setup_true_lang-D2I8xDEW.js.map} +1 -1
  62. package/dist/FileUpload.js +54 -54
  63. package/dist/FileUpload.js.map +1 -1
  64. package/dist/FilterChip.js.map +1 -1
  65. package/dist/FilterChip.vue.d.ts +1 -1
  66. package/dist/FilterDrawerItem.js.map +1 -1
  67. package/dist/FilterDropdown.js.map +1 -1
  68. package/dist/FilterSelect.js +1 -1
  69. package/dist/FilterSelect.js.map +1 -1
  70. package/dist/Filters.js +4 -6
  71. package/dist/Filters.js.map +1 -1
  72. package/dist/Filters.vue.d.ts +57 -57
  73. package/dist/HttpError.js +6 -6
  74. package/dist/HttpError.js.map +1 -1
  75. package/dist/Icon.js.map +1 -1
  76. package/dist/IconLabel.js +13 -13
  77. package/dist/IconLabel.js.map +1 -1
  78. package/dist/Illustration.vue_vue_type_script_setup_true_lang-C1bPkWZZ.js.map +1 -1
  79. package/dist/Image.vue_vue_type_script_setup_true_lang-CAj0FH9h.js.map +1 -1
  80. package/dist/InlineEdit.js.map +1 -1
  81. package/dist/InlineEdit.vue.d.ts +1 -1
  82. package/dist/Input.js +35 -35
  83. package/dist/Input.js.map +1 -1
  84. package/dist/InputOptions.js +35 -35
  85. package/dist/InputOptions.js.map +1 -1
  86. package/dist/InputOptions.vue.d.ts +1 -1
  87. package/dist/IntegrationIcon.js.map +1 -1
  88. package/dist/Label.vue_vue_type_script_setup_true_lang-xwY3X-iV.js.map +1 -1
  89. package/dist/LicenseChip.js +9 -9
  90. package/dist/LicenseChip.js.map +1 -1
  91. package/dist/ListItem.js.map +1 -1
  92. package/dist/ListItemCell.js.map +1 -1
  93. package/dist/ListView.js +1 -1
  94. package/dist/ListView.js.map +1 -1
  95. package/dist/ListView.vue.d.ts +69 -69
  96. package/dist/Loading.js +2 -2
  97. package/dist/Loading.js.map +1 -1
  98. package/dist/Logo.js +1 -1
  99. package/dist/{Logo.vue_vue_type_script_setup_true_lang-DghNC_k6.js → Logo.vue_vue_type_script_setup_true_lang-qiNaaWWV.js} +17 -17
  100. package/dist/Logo.vue_vue_type_script_setup_true_lang-qiNaaWWV.js.map +1 -0
  101. package/dist/MenuItem.js.map +1 -1
  102. package/dist/Metric.js +12 -12
  103. package/dist/Metric.js.map +1 -1
  104. package/dist/Modal.js.map +1 -1
  105. package/dist/Modals.js.map +1 -1
  106. package/dist/Module.js.map +1 -1
  107. package/dist/ModuleContent.js.map +1 -1
  108. package/dist/ModuleFooter.js.map +1 -1
  109. package/dist/ModuleHeader.js.map +1 -1
  110. package/dist/MoreActions.js +2 -2
  111. package/dist/MoreActions.js.map +1 -1
  112. package/dist/ObfuscateText.js.map +1 -1
  113. package/dist/PageContent.js.map +1 -1
  114. package/dist/PageHeader.js.map +1 -1
  115. package/dist/PageNavigation.js +1 -1
  116. package/dist/PageNavigation.js.map +1 -1
  117. package/dist/Paginate.js.map +1 -1
  118. package/dist/PlaidLink.js.map +1 -1
  119. package/dist/QuickAction.js.map +1 -1
  120. package/dist/Radio.js.map +1 -1
  121. package/dist/RadioGroup.js +1 -1
  122. package/dist/RadioGroup.js.map +1 -1
  123. package/dist/RadioNew.js.map +1 -1
  124. package/dist/RangeInput.js.map +1 -1
  125. package/dist/SearchBar.js.map +1 -1
  126. package/dist/SearchBar.vue.d.ts +1 -1
  127. package/dist/SectionHeader.js.map +1 -1
  128. package/dist/Select.js +2 -2
  129. package/dist/Select.js.map +1 -1
  130. package/dist/Select.vue.d.ts +1 -1
  131. package/dist/SelectStatus.js.map +1 -1
  132. package/dist/SelectStatus.vue.d.ts +1 -1
  133. package/dist/Skeleton.js.map +1 -1
  134. package/dist/Step.js +8 -8
  135. package/dist/Step.js.map +1 -1
  136. package/dist/Stepper.js.map +1 -1
  137. package/dist/Switch.js +15 -15
  138. package/dist/Switch.js.map +1 -1
  139. package/dist/Tab.js +1 -1
  140. package/dist/Tab.js.map +1 -1
  141. package/dist/TabPanel.js.map +1 -1
  142. package/dist/Table.js.map +1 -1
  143. package/dist/TableCell.js.map +1 -1
  144. package/dist/TableHeaderCell.js.map +1 -1
  145. package/dist/TableHeaderRow.js.map +1 -1
  146. package/dist/TableRow.js +18 -18
  147. package/dist/TableRow.js.map +1 -1
  148. package/dist/Tabs.js +2 -2
  149. package/dist/{Tabs.vue_vue_type_script_setup_true_lang-BFURXY_-.js → Tabs.vue_vue_type_script_setup_true_lang-B3FBaVP5.js} +48 -48
  150. package/dist/{Tabs.vue_vue_type_script_setup_true_lang-BFURXY_-.js.map → Tabs.vue_vue_type_script_setup_true_lang-B3FBaVP5.js.map} +1 -1
  151. package/dist/TextEditor.js +1 -1
  152. package/dist/TextEditor.js.map +1 -1
  153. package/dist/TextEditor.vue.d.ts +1 -1
  154. package/dist/Textarea.js +1 -1
  155. package/dist/Textarea.js.map +1 -1
  156. package/dist/Thumbnail.js +33 -33
  157. package/dist/Thumbnail.js.map +1 -1
  158. package/dist/Thumbnail.vue.d.ts +3 -3
  159. package/dist/ThumbnailEmpty.js.map +1 -1
  160. package/dist/ThumbnailGroup.js.map +1 -1
  161. package/dist/Timeline.js.map +1 -1
  162. package/dist/TimelineItem.js.map +1 -1
  163. package/dist/Toast.js +27 -27
  164. package/dist/Toast.js.map +1 -1
  165. package/dist/Toasts.js.map +1 -1
  166. package/dist/Tooltip.js +1 -1
  167. package/dist/{Tooltip.vue_vue_type_script_setup_true_lang-CF6sw2VC.js → Tooltip.vue_vue_type_script_setup_true_lang-WMPMxzO-.js} +13 -16
  168. package/dist/Tooltip.vue_vue_type_script_setup_true_lang-WMPMxzO-.js.map +1 -0
  169. package/dist/components.css +1 -1
  170. package/dist/directives/tooltip.js.map +1 -1
  171. package/dist/floating-ui.vue-CuGrC-z8.js.map +1 -1
  172. package/dist/index-B1Gkwuxd.js.map +1 -1
  173. package/dist/index-D6bxWkZ1.js.map +1 -1
  174. package/dist/index.js.map +1 -1
  175. package/package.json +4 -3
  176. package/dist/Expand.vue_vue_type_script_setup_true_lang-CiONJfAp.js +0 -74
  177. package/dist/Logo.vue_vue_type_script_setup_true_lang-DghNC_k6.js.map +0 -1
  178. package/dist/Tooltip.vue_vue_type_script_setup_true_lang-CF6sw2VC.js.map +0 -1
@@ -47,8 +47,8 @@ onBlur?: ((editor: default_3) => any) | undefined;
47
47
  onFocus?: ((editor: default_3) => any) | undefined;
48
48
  "onUpdate:model-value"?: ((value: string) => any) | undefined;
49
49
  }>, {
50
- controls: TextEditorControls;
51
50
  placeholder: string;
51
+ controls: TextEditorControls;
52
52
  modelValue: string;
53
53
  handlers: TextEditorControlHandlerMap;
54
54
  }, {}, {}, {}, string, ComponentProvideOptions, true, {}, any>;
package/dist/Textarea.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { defineComponent as k, useAttrs as E, useSlots as H, useCssModule as A, ref as x, computed as y, watch as I, onMounted as P, nextTick as V, onBeforeUnmount as $, createBlock as q, openBlock as D, mergeProps as b, unref as p, createSlots as L, withCtx as g, createElementVNode as j, renderSlot as F } from "vue";
2
- import { _ as N } from "./Field.vue_vue_type_script_setup_true_lang-dAGKfjf5.js";
2
+ import { _ as N } from "./Field.vue_vue_type_script_setup_true_lang-D2I8xDEW.js";
3
3
  import { _ as U } from "./_plugin-vue_export-helper-CHgC5LLL.js";
4
4
  const W = ["id", "aria-errormessage", "aria-invalid", "maxlength", "value", "placeholder", "disabled", "readonly", "rows"], Y = /* @__PURE__ */ k({
5
5
  name: "ll-textarea",
@@ -1 +1 @@
1
- {"version":3,"file":"Textarea.js","sources":["../src/components/Textarea/Textarea.vue"],"sourcesContent":["<script lang=\"ts\" setup>\n import { computed, nextTick, onBeforeUnmount, onMounted, ref, useAttrs, useCssModule, useSlots, watch } from 'vue';\n\n import { FieldProps } from '../Field/Field.types';\n import Field from '../Field/Field.vue';\n\n export interface TextareaResizeOptions {\n /**\n * It will automatically scroll the page down when it reaches the bottom of the viewport/element\n */\n forceBrowserScroll: boolean;\n }\n\n export interface TextAreaProps extends FieldProps {\n /**\n * Value for the textarea element.\n */\n modelValue?: string;\n\n /**\n * Deprecated. Use :model-value or v-model instead of :value.\n * @deprecated Use :model-value or v-model instead of :value.\n */\n value?: string | number | null;\n\n /**\n * Allow textarea to be resizable vertically.\n * Alternatively if you want to disable automatic scroll when resizing, you can set `{ forceBrowserScroll: false }`\n */\n resize?: boolean | TextareaResizeOptions;\n\n /**\n * Placeholder text for the textarea element.\n * **Note:** placeholders should be used to display examples; they should not be used as labels because they are not accessible as labels. If a real label cannot be used, use the `aria-label` attribute.\n */\n placeholder?: string;\n\n /**\n * Number of rows to display in the textarea.\n */\n rows?: number;\n\n /**\n * Maximum number of characters allowed in the textarea.\n */\n maxlength?: number;\n }\n\n defineOptions({\n name: 'll-textarea',\n });\n\n const attrs = useAttrs();\n const slots = useSlots();\n const classes = useCssModule();\n\n const props = withDefaults(defineProps<TextAreaProps>(), {\n modelValue: '',\n value: null,\n resize: false,\n maxlength: undefined,\n rows: undefined,\n placeholder: undefined,\n });\n\n const emits = defineEmits<{\n /**\n * Emitted when the model value changes.\n */\n (e: 'update:model-value', value: string): void;\n }>();\n\n const textareaRef = ref<HTMLTextAreaElement>();\n const observer = ref<ResizeObserver>();\n const isReadOnly = computed(() => props.isReadOnly || ('readonly' in attrs && attrs.readonly !== false));\n\n const inputAttrs = computed(() => {\n const allAttrs = { ...attrs };\n\n delete allAttrs['data-test'];\n delete allAttrs.class;\n\n return allAttrs;\n });\n\n watch(\n () => props.resize,\n (v) => {\n if (v) {\n setupResizeObserver();\n } else {\n observer.value?.disconnect();\n }\n },\n );\n\n const onInput = (event: Event) => {\n emits('update:model-value', (event.target as HTMLTextAreaElement).value);\n };\n\n const setupResizeObserver = () => {\n if (observer.value || !textareaRef.value) {\n return;\n }\n\n // the ResizeObserver will be in charge to detect if page needs to scroll when resizing the component\n observer.value = new ResizeObserver((entries) => {\n const entry = entries[0];\n\n if (!entry) {\n return;\n }\n\n const { target } = entry;\n const parent = findParentScrollable(textareaRef.value as HTMLTextAreaElement) || document.documentElement;\n\n const { scrollTop: scrollPosition } = parent;\n let offsetDiff = 0;\n\n // checks if the closest parent element scrollable is the document page\n if (parent === document.documentElement) {\n const { top, height } = getOffsetClipRect(target as HTMLElement);\n const { innerHeight: viewportHeight } = window;\n\n offsetDiff = Math.max(top + height - (viewportHeight + scrollPosition), 0);\n } else {\n const { top, height } = (target as HTMLElement).getBoundingClientRect();\n const { top: parentTop } = parent.getBoundingClientRect();\n const { offsetHeight: parentHeight } = parent;\n const offsetTop = top - parentTop;\n\n offsetDiff = Math.max(offsetTop + height - parentHeight, 0);\n }\n\n if (offsetDiff) {\n requestAnimationFrame(() => {\n parent.scrollTop = scrollPosition + offsetDiff;\n });\n }\n });\n\n observer.value.observe(textareaRef.value);\n };\n\n /**\n * Retrieve the closest parent that has a scroll. Defaults to the document page.\n */\n const findParentScrollable = (el: HTMLElement): HTMLElement | null => {\n const parent = el.parentElement as HTMLElement;\n if (!parent) {\n return null;\n }\n\n const { overflowY } = getComputedStyle(parent);\n if (overflowY !== 'visible') {\n return parent;\n }\n\n if (parent === document.body) {\n return document.documentElement;\n }\n\n return findParentScrollable(parent);\n };\n\n /**\n * Retrieve element absolute positioning relative to the page.\n */\n const getOffsetClipRect = (el: HTMLElement) => {\n const { offsetWidth: width, offsetHeight: height } = el;\n\n let left = 0;\n let top = 0;\n\n const findPos = function ({ offsetLeft, offsetTop, offsetParent }: HTMLElement) {\n left += offsetLeft;\n top += offsetTop;\n\n if (offsetParent) {\n findPos(offsetParent as HTMLElement);\n }\n };\n\n findPos(el);\n\n return {\n top,\n left,\n width,\n height,\n };\n };\n\n onMounted(async () => {\n if (props.value !== null) {\n throw new Error('ll-input: use :model-value or v-model instead of :value.');\n }\n\n if (attrs.onInput) {\n throw new Error('ll-input: use the @update:model-value event instead of @input');\n }\n\n if (\n (typeof props.resize === 'boolean' && props.resize) ||\n (props.resize as TextareaResizeOptions)?.forceBrowserScroll\n ) {\n await nextTick();\n setupResizeObserver();\n }\n });\n\n onBeforeUnmount(() => {\n observer.value?.disconnect();\n });\n</script>\n\n<template>\n <Field v-bind=\"props\" class=\"stash-textarea\" :class=\"[classes.root]\" data-test=\"stash-textarea\">\n <template #default=\"{ fieldId, fieldErrorId, hasError }\">\n <textarea\n :id=\"fieldId\"\n ref=\"textareaRef\"\n :aria-errormessage=\"fieldErrorId\"\n :aria-invalid=\"hasError\"\n :class=\"[\n classes.textarea,\n 'border border-ice-500',\n {\n 'stash-textarea--error border-red-500 text-red-500': hasError,\n 'text-ice-700 hover:border-ice-500 focus:border-blue-500 active:border-blue-500':\n !hasError && !props.disabled,\n 'resize-y': props.resize,\n 'min-h-[100px]': !props.rows,\n 'resize-none': !props.resize,\n },\n ]\"\n :maxlength=\"props.maxlength\"\n :value=\"props.modelValue\"\n data-test=\"stash-textarea|textarea\"\n :placeholder=\"props.placeholder\"\n v-bind=\"inputAttrs\"\n :disabled=\"props.disabled\"\n :readonly=\"isReadOnly\"\n :rows=\"props.rows\"\n @input=\"onInput\"\n ></textarea>\n </template>\n <template v-if=\"slots.hint\" #hint>\n <!-- @slot Hint content -->\n <slot name=\"hint\"></slot>\n </template>\n </Field>\n</template>\n\n<style module>\n @reference \"../../../styles/main.css\";\n\n @layer utilities {\n .root {\n position: relative;\n width: 100%;\n }\n\n .textarea {\n background: var(--color-white);\n border-radius: var(--radius-sm);\n display: block;\n outline: none;\n padding: --spacing(1.5);\n width: 100%;\n\n &::placeholder {\n color: var(--color-ice-500);\n opacity: 1;\n }\n\n &[disabled] {\n background-color: var(--color-ice-100);\n border-color: var(--color-ice-500);\n color: var(--color-ice-500);\n pointer-events: none;\n }\n\n &[disabled]:active,\n &[disabled]:focus {\n box-shadow: none;\n }\n\n &[disabled]::placeholder {\n text-transform: none;\n color: var(--color-ice-500);\n }\n\n &[readonly] {\n border-color: transparent;\n background-color: transparent;\n padding-left: 0;\n padding-right: 0;\n min-height: unset;\n }\n }\n }\n</style>\n"],"names":["attrs","useAttrs","slots","useSlots","classes","useCssModule","props","__props","emits","__emit","textareaRef","ref","observer","isReadOnly","computed","inputAttrs","allAttrs","watch","v","setupResizeObserver","_a","onInput","event","entries","entry","target","parent","findParentScrollable","scrollPosition","offsetDiff","top","height","getOffsetClipRect","viewportHeight","parentTop","parentHeight","offsetTop","el","overflowY","width","left","findPos","offsetLeft","offsetParent","onMounted","nextTick","onBeforeUnmount"],"mappings":"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"}
1
+ {"version":3,"file":"Textarea.js","sources":["../src/components/Textarea/Textarea.vue"],"sourcesContent":["<script lang=\"ts\" setup>\n import { computed, nextTick, onBeforeUnmount, onMounted, ref, useAttrs, useCssModule, useSlots, watch } from 'vue';\n\n import { FieldProps } from '../Field/Field.types';\n import Field from '../Field/Field.vue';\n\n export interface TextareaResizeOptions {\n /**\n * It will automatically scroll the page down when it reaches the bottom of the viewport/element\n */\n forceBrowserScroll: boolean;\n }\n\n export interface TextAreaProps extends FieldProps {\n /**\n * Value for the textarea element.\n */\n modelValue?: string;\n\n /**\n * Deprecated. Use :model-value or v-model instead of :value.\n * @deprecated Use :model-value or v-model instead of :value.\n */\n value?: string | number | null;\n\n /**\n * Allow textarea to be resizable vertically.\n * Alternatively if you want to disable automatic scroll when resizing, you can set `{ forceBrowserScroll: false }`\n */\n resize?: boolean | TextareaResizeOptions;\n\n /**\n * Placeholder text for the textarea element.\n * **Note:** placeholders should be used to display examples; they should not be used as labels because they are not accessible as labels. If a real label cannot be used, use the `aria-label` attribute.\n */\n placeholder?: string;\n\n /**\n * Number of rows to display in the textarea.\n */\n rows?: number;\n\n /**\n * Maximum number of characters allowed in the textarea.\n */\n maxlength?: number;\n }\n\n defineOptions({\n name: 'll-textarea',\n });\n\n const attrs = useAttrs();\n const slots = useSlots();\n const classes = useCssModule();\n\n const props = withDefaults(defineProps<TextAreaProps>(), {\n modelValue: '',\n value: null,\n resize: false,\n maxlength: undefined,\n rows: undefined,\n placeholder: undefined,\n });\n\n const emits = defineEmits<{\n /**\n * Emitted when the model value changes.\n */\n (e: 'update:model-value', value: string): void;\n }>();\n\n const textareaRef = ref<HTMLTextAreaElement>();\n const observer = ref<ResizeObserver>();\n const isReadOnly = computed(() => props.isReadOnly || ('readonly' in attrs && attrs.readonly !== false));\n\n const inputAttrs = computed(() => {\n const allAttrs = { ...attrs };\n\n delete allAttrs['data-test'];\n delete allAttrs.class;\n\n return allAttrs;\n });\n\n watch(\n () => props.resize,\n (v) => {\n if (v) {\n setupResizeObserver();\n } else {\n observer.value?.disconnect();\n }\n },\n );\n\n const onInput = (event: Event) => {\n emits('update:model-value', (event.target as HTMLTextAreaElement).value);\n };\n\n const setupResizeObserver = () => {\n if (observer.value || !textareaRef.value) {\n return;\n }\n\n // the ResizeObserver will be in charge to detect if page needs to scroll when resizing the component\n observer.value = new ResizeObserver((entries) => {\n const entry = entries[0];\n\n if (!entry) {\n return;\n }\n\n const { target } = entry;\n const parent = findParentScrollable(textareaRef.value as HTMLTextAreaElement) || document.documentElement;\n\n const { scrollTop: scrollPosition } = parent;\n let offsetDiff = 0;\n\n // checks if the closest parent element scrollable is the document page\n if (parent === document.documentElement) {\n const { top, height } = getOffsetClipRect(target as HTMLElement);\n const { innerHeight: viewportHeight } = window;\n\n offsetDiff = Math.max(top + height - (viewportHeight + scrollPosition), 0);\n } else {\n const { top, height } = (target as HTMLElement).getBoundingClientRect();\n const { top: parentTop } = parent.getBoundingClientRect();\n const { offsetHeight: parentHeight } = parent;\n const offsetTop = top - parentTop;\n\n offsetDiff = Math.max(offsetTop + height - parentHeight, 0);\n }\n\n if (offsetDiff) {\n requestAnimationFrame(() => {\n parent.scrollTop = scrollPosition + offsetDiff;\n });\n }\n });\n\n observer.value.observe(textareaRef.value);\n };\n\n /**\n * Retrieve the closest parent that has a scroll. Defaults to the document page.\n */\n const findParentScrollable = (el: HTMLElement): HTMLElement | null => {\n const parent = el.parentElement as HTMLElement;\n if (!parent) {\n return null;\n }\n\n const { overflowY } = getComputedStyle(parent);\n if (overflowY !== 'visible') {\n return parent;\n }\n\n if (parent === document.body) {\n return document.documentElement;\n }\n\n return findParentScrollable(parent);\n };\n\n /**\n * Retrieve element absolute positioning relative to the page.\n */\n const getOffsetClipRect = (el: HTMLElement) => {\n const { offsetWidth: width, offsetHeight: height } = el;\n\n let left = 0;\n let top = 0;\n\n const findPos = function ({ offsetLeft, offsetTop, offsetParent }: HTMLElement) {\n left += offsetLeft;\n top += offsetTop;\n\n if (offsetParent) {\n findPos(offsetParent as HTMLElement);\n }\n };\n\n findPos(el);\n\n return {\n top,\n left,\n width,\n height,\n };\n };\n\n onMounted(async () => {\n if (props.value !== null) {\n throw new Error('ll-input: use :model-value or v-model instead of :value.');\n }\n\n if (attrs.onInput) {\n throw new Error('ll-input: use the @update:model-value event instead of @input');\n }\n\n if (\n (typeof props.resize === 'boolean' && props.resize) ||\n (props.resize as TextareaResizeOptions)?.forceBrowserScroll\n ) {\n await nextTick();\n setupResizeObserver();\n }\n });\n\n onBeforeUnmount(() => {\n observer.value?.disconnect();\n });\n</script>\n\n<template>\n <Field v-bind=\"props\" class=\"stash-textarea\" :class=\"[classes.root]\" data-test=\"stash-textarea\">\n <template #default=\"{ fieldId, fieldErrorId, hasError }\">\n <textarea\n :id=\"fieldId\"\n ref=\"textareaRef\"\n :aria-errormessage=\"fieldErrorId\"\n :aria-invalid=\"hasError\"\n :class=\"[\n classes.textarea,\n 'border border-ice-500',\n {\n 'stash-textarea--error border-red-500 text-red-500': hasError,\n 'text-ice-700 hover:border-ice-500 focus:border-blue-500 active:border-blue-500':\n !hasError && !props.disabled,\n 'resize-y': props.resize,\n 'min-h-[100px]': !props.rows,\n 'resize-none': !props.resize,\n },\n ]\"\n :maxlength=\"props.maxlength\"\n :value=\"props.modelValue\"\n data-test=\"stash-textarea|textarea\"\n :placeholder=\"props.placeholder\"\n v-bind=\"inputAttrs\"\n :disabled=\"props.disabled\"\n :readonly=\"isReadOnly\"\n :rows=\"props.rows\"\n @input=\"onInput\"\n ></textarea>\n </template>\n <template v-if=\"slots.hint\" #hint>\n <!-- @slot Hint content -->\n <slot name=\"hint\"></slot>\n </template>\n </Field>\n</template>\n\n<style module>\n @reference \"../../../styles/main.css\";\n\n @layer utilities {\n .root {\n position: relative;\n width: 100%;\n }\n\n .textarea {\n background: var(--color-white);\n border-radius: var(--radius-sm);\n display: block;\n outline: none;\n padding: --spacing(1.5);\n width: 100%;\n\n &::placeholder {\n color: var(--color-ice-500);\n opacity: 1;\n }\n\n &[disabled] {\n background-color: var(--color-ice-100);\n border-color: var(--color-ice-500);\n color: var(--color-ice-500);\n pointer-events: none;\n }\n\n &[disabled]:active,\n &[disabled]:focus {\n box-shadow: none;\n }\n\n &[disabled]::placeholder {\n text-transform: none;\n color: var(--color-ice-500);\n }\n\n &[readonly] {\n border-color: transparent;\n background-color: transparent;\n padding-left: 0;\n padding-right: 0;\n min-height: unset;\n }\n }\n }\n</style>\n"],"names":["attrs","useAttrs","slots","useSlots","classes","useCssModule","props","__props","emits","__emit","textareaRef","ref","observer","isReadOnly","computed","inputAttrs","allAttrs","watch","v","setupResizeObserver","_a","onInput","event","entries","entry","target","parent","findParentScrollable","scrollPosition","offsetDiff","top","height","getOffsetClipRect","viewportHeight","parentTop","parentHeight","offsetTop","el","overflowY","width","left","findPos","offsetLeft","offsetParent","onMounted","nextTick","onBeforeUnmount","_createBlock","Field","_mergeProps","_unref","fieldId","fieldErrorId","hasError","_createElementVNode","_renderSlot","_ctx"],"mappings":"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"}
package/dist/Thumbnail.js CHANGED
@@ -1,9 +1,9 @@
1
- import { defineComponent as k, useCssModule as C, inject as T, computed as B, toValue as I, createElementBlock as y, openBlock as b, unref as e, normalizeClass as m, createVNode as h, createBlock as M, createCommentVNode as N, renderSlot as $, withModifiers as q, withCtx as V } from "vue";
1
+ import { defineComponent as k, useCssModule as C, inject as T, computed as B, toValue as I, createElementBlock as y, openBlock as h, unref as t, normalizeClass as s, createVNode as d, createBlock as M, createCommentVNode as N, renderSlot as $, withModifiers as q, withCtx as V } from "vue";
2
2
  import { t as w } from "./locale.js";
3
3
  import z from "./Button.js";
4
4
  import E from "./Icon.js";
5
5
  import { _ as U } from "./Image.vue_vue_type_script_setup_true_lang-CAj0FH9h.js";
6
- import { T as d } from "./ThumbnailGroup.keys-EJ4qFNhx.js";
6
+ import { T as _ } from "./ThumbnailGroup.keys-EJ4qFNhx.js";
7
7
  import { _ as j } from "./_plugin-vue_export-helper-CHgC5LLL.js";
8
8
  const A = ["aria-current", "draggable"], D = /* @__PURE__ */ k({
9
9
  __name: "Thumbnail",
@@ -13,65 +13,65 @@ const A = ["aria-current", "draggable"], D = /* @__PURE__ */ k({
13
13
  variant: { default: "opaque" }
14
14
  },
15
15
  emits: ["remove", "click"],
16
- setup(_, { emit: p }) {
17
- const o = _, s = p, t = C(), { thumbnails: v, activeThumbnail: i, draggable: f, isDragging: r, radius: n, removable: u } = T(
18
- d.key,
19
- d.defaults
20
- ), a = B(() => I(v).findIndex((l) => l === o.thumbnail));
16
+ setup(n, { emit: v }) {
17
+ const u = n, r = v, e = C(), { thumbnails: p, activeThumbnail: l, draggable: f, isDragging: c, radius: i, removable: o } = T(
18
+ _.key,
19
+ _.defaults
20
+ ), a = B(() => I(p).findIndex((m) => m === u.thumbnail));
21
21
  function g() {
22
- i.value = a.value, s("click", a.value);
22
+ l.value = a.value, r("click", a.value);
23
23
  }
24
24
  function x() {
25
- s("remove", a.value), i.value = -1;
25
+ r("remove", a.value), l.value = -1;
26
26
  }
27
- return (l, c) => (b(), y("li", {
28
- class: m(["stash-thumbnail focus-visible:outline-hidden group relative cursor-pointer", [
27
+ return (m, b) => (h(), y("li", {
28
+ class: s(["stash-thumbnail focus-visible:outline-hidden group relative cursor-pointer", [
29
29
  {
30
- [e(t)["thumbnail-translucent"]]: o.variant === "translucent",
31
- [e(t)["thumbnail-opaque"]]: o.variant === "opaque",
32
- [e(t)["thumbnail-removable"]]: e(u),
33
- [e(t)["thumbnail-circle"]]: e(n) === "circle",
34
- [e(t)["thumbnail-rounded"]]: e(n) === "rounded"
30
+ [t(e)["thumbnail-translucent"]]: u.variant === "translucent",
31
+ [t(e)["thumbnail-opaque"]]: u.variant === "opaque",
32
+ [t(e)["thumbnail-removable"]]: t(o),
33
+ [t(e)["thumbnail-circle"]]: t(i) === "circle",
34
+ [t(e)["thumbnail-rounded"]]: t(i) === "rounded"
35
35
  }
36
36
  ]]),
37
- "aria-current": e(i) === a.value,
38
- draggable: e(f),
37
+ "aria-current": t(l) === a.value,
38
+ draggable: t(f),
39
39
  "data-test": "stash-thumbnail",
40
40
  tabindex: "0",
41
- onClick: c[0] || (c[0] = (L) => g())
41
+ onClick: b[0] || (b[0] = (L) => g())
42
42
  }, [
43
- h(U, {
44
- class: m(["stash-thumbnail__img border-ice-200 outline-blue-500/15 transition-colors", [
45
- e(t)["thumbnail-img"],
43
+ d(U, {
44
+ class: s(["stash-thumbnail__img border-ice-200 outline-blue-500/15 transition-colors", [
45
+ t(e)["thumbnail-img"],
46
46
  {
47
- [e(t)["thumbnail-mask"]]: e(u) && e(n) !== "circle",
48
- [e(t)["thumbnail-active"]]: e(i) === a.value && !e(r),
49
- "group-hover:border-blue-500 group-focus-visible:border-blue-500 group-focus-visible:outline": !e(r)
47
+ [t(e)["thumbnail-mask"]]: t(o) && t(i) !== "circle",
48
+ [t(e)["thumbnail-active"]]: t(l) === a.value && !t(c),
49
+ "group-hover:border-blue-500 group-focus-visible:border-blue-500 group-focus-visible:outline": !t(c)
50
50
  }
51
51
  ]]),
52
52
  "data-test": "stash-thumbnail|img",
53
- radius: e(n),
54
- src: l.thumbnail.imageUrl,
55
- alt: l.altText
53
+ radius: t(i),
54
+ src: n.thumbnail.imageUrl,
55
+ alt: n.altText
56
56
  }, null, 8, ["class", "radius", "src", "alt"]),
57
- e(u) ? (b(), M(z, {
57
+ t(o) ? (h(), M(z, {
58
58
  key: 0,
59
- class: m(["stash-thumbnail__remove", [e(t)["thumbnail-remove"]]]),
59
+ class: s(["stash-thumbnail__remove", [t(e)["thumbnail-remove"]]]),
60
60
  "data-test": "stash-thumbnail|remove",
61
- "aria-label": e(w)("ll.thumbnail.removeButton", { index: a.value + 1 }),
61
+ "aria-label": t(w)("ll.thumbnail.removeButton", { index: a.value + 1 }),
62
62
  type: "button",
63
63
  icon: "",
64
64
  onClick: q(x, ["stop", "prevent"])
65
65
  }, {
66
66
  default: V(() => [
67
- h(E, {
67
+ d(E, {
68
68
  name: "close",
69
69
  size: "small"
70
70
  })
71
71
  ]),
72
72
  _: 1
73
73
  }, 8, ["class", "aria-label"])) : N("", !0),
74
- $(l.$slots, "hint")
74
+ $(m.$slots, "hint")
75
75
  ], 10, A));
76
76
  }
77
77
  }), H = {
@@ -1 +1 @@
1
- {"version":3,"file":"Thumbnail.js","sources":["../src/components/Thumbnail/Thumbnail.vue"],"sourcesContent":["<script lang=\"ts\">\n import { ThumbnailDefinition, ThumbnailVariant } from './Thumbnail.types';\n\n export * from './Thumbnail.types';\n</script>\n\n<script setup lang=\"ts\" generic=\"ThumbnailItem extends ThumbnailDefinition\">\n import { computed, inject, toValue, useCssModule } from 'vue';\n\n import { t } from '../../locale';\n import Button from '../Button/Button.vue';\n import Icon from '../Icon/Icon.vue';\n import Image from '../Image/Image.vue';\n import { THUMBNAIL_INJECTION } from '../ThumbnailGroup/ThumbnailGroup.keys';\n\n const props = withDefaults(\n defineProps<{\n /**\n * Thumbnail data containing and id and the image url\n */\n thumbnail: ThumbnailItem;\n\n /**\n * Thumbnail alt text for the image\n * @default ''\n */\n altText?: string;\n\n /**\n * Whether the thumbnail has some transparency or is fully opaque\n * @default 'opaque'\n */\n variant?: ThumbnailVariant;\n }>(),\n {\n variant: 'opaque',\n altText: '',\n },\n );\n\n const emit = defineEmits<{\n /**\n * Emits when a thumbnail is removed\n */\n remove: [index: number];\n\n /**\n * Emits when a thumbnail is clicked\n */\n click: [index: number];\n }>();\n\n const classes = useCssModule();\n\n const { thumbnails, activeThumbnail, draggable, isDragging, radius, removable } = inject(\n THUMBNAIL_INJECTION.key,\n THUMBNAIL_INJECTION.defaults,\n );\n\n const thumbnailIndex = computed(() => toValue(thumbnails).findIndex((t) => t === props.thumbnail));\n\n function handleThumbnailClick() {\n activeThumbnail.value = thumbnailIndex.value;\n emit('click', thumbnailIndex.value);\n }\n\n function handleRemove() {\n emit('remove', thumbnailIndex.value);\n activeThumbnail.value = -1;\n }\n</script>\n\n<template>\n <li\n class=\"stash-thumbnail focus-visible:outline-hidden group relative cursor-pointer\"\n :class=\"[\n {\n [classes['thumbnail-translucent']]: props.variant === 'translucent',\n [classes['thumbnail-opaque']]: props.variant === 'opaque',\n [classes['thumbnail-removable']]: removable,\n [classes['thumbnail-circle']]: radius === 'circle',\n [classes['thumbnail-rounded']]: radius === 'rounded',\n },\n ]\"\n :aria-current=\"activeThumbnail === thumbnailIndex\"\n :draggable=\"draggable\"\n data-test=\"stash-thumbnail\"\n tabindex=\"0\"\n @click=\"handleThumbnailClick()\"\n >\n <Image\n class=\"stash-thumbnail__img border-ice-200 outline-blue-500/15 transition-colors\"\n :class=\"[\n classes['thumbnail-img'],\n {\n [classes['thumbnail-mask']]: removable && radius !== 'circle',\n [classes['thumbnail-active']]: activeThumbnail === thumbnailIndex && !isDragging,\n 'group-hover:border-blue-500 group-focus-visible:border-blue-500 group-focus-visible:outline': !isDragging,\n },\n ]\"\n data-test=\"stash-thumbnail|img\"\n :radius=\"radius\"\n :src=\"thumbnail.imageUrl\"\n :alt=\"altText\"\n />\n\n <Button\n v-if=\"removable\"\n class=\"stash-thumbnail__remove\"\n :class=\"[classes['thumbnail-remove']]\"\n data-test=\"stash-thumbnail|remove\"\n :aria-label=\"t('ll.thumbnail.removeButton', { index: thumbnailIndex + 1 })\"\n type=\"button\"\n icon\n @click.stop.prevent=\"handleRemove\"\n >\n <Icon name=\"close\" size=\"small\" />\n </Button>\n\n <!-- @slot: Slot to add a hint below the image -->\n <slot name=\"hint\" />\n </li>\n</template>\n\n<style module>\n @reference \"../../../styles/main.css\";\n\n @layer utilities {\n .thumbnail-remove {\n position: absolute;\n top: calc(--spacing(1.5) * -1);\n right: calc(--spacing(1.5) * -1);\n padding: 1px;\n height: auto;\n width: auto !important;\n min-width: auto;\n border-radius: calc(infinity * 1px);\n background: var(--color-blue-500);\n color: white;\n\n &:hover,\n &:focus {\n background: var(--color-blue-600);\n }\n\n &:focus {\n outline: none;\n }\n }\n\n .thumbnail-img {\n border-style: solid;\n object-fit: cover;\n height: --spacing(12);\n width: --spacing(12);\n border-width: 1px;\n outline-width: --spacing(1);\n\n .thumbnail-translucent & {\n opacity: var(--opacity-40);\n\n &:hover,\n &.thumbnail-active {\n opacity: var(--opacity-100);\n }\n }\n }\n\n .thumbnail-active {\n border: 1px solid var(--color-ice-500);\n }\n\n .thumbnail-mask {\n mask-image: radial-gradient(circle at top right, transparent 20%, white 20.5%);\n }\n\n .thumbnail-full {\n border-radius: calc(infinity * 1px);\n }\n\n .thumbnail-rounded {\n border-radius: var(--radius-sm);\n }\n }\n</style>\n"],"names":["props","__props","emit","__emit","classes","useCssModule","thumbnails","activeThumbnail","draggable","isDragging","radius","removable","inject","THUMBNAIL_INJECTION","thumbnailIndex","computed","toValue","t","handleThumbnailClick","handleRemove"],"mappings":";;;;;;;;;;;;;;;;AAeE,UAAMA,IAAQC,GAyBRC,IAAOC,GAYPC,IAAUC,EAAA,GAEV,EAAE,YAAAC,GAAY,iBAAAC,GAAiB,WAAAC,GAAW,YAAAC,GAAY,QAAAC,GAAQ,WAAAC,MAAcC;AAAA,MAChFC,EAAoB;AAAA,MACpBA,EAAoB;AAAA,IAAA,GAGhBC,IAAiBC,EAAS,MAAMC,EAAQV,CAAU,EAAE,UAAU,CAACW,MAAMA,MAAMjB,EAAM,SAAS,CAAC;AAEjG,aAASkB,IAAuB;AAC9B,MAAAX,EAAgB,QAAQO,EAAe,OACvCZ,EAAK,SAASY,EAAe,KAAK;AAAA,IACpC;AAEA,aAASK,IAAe;AACtB,MAAAjB,EAAK,UAAUY,EAAe,KAAK,GACnCP,EAAgB,QAAQ;AAAA,IAC1B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"Thumbnail.js","sources":["../src/components/Thumbnail/Thumbnail.vue"],"sourcesContent":["<script lang=\"ts\">\n import { ThumbnailDefinition, ThumbnailVariant } from './Thumbnail.types';\n\n export * from './Thumbnail.types';\n</script>\n\n<script setup lang=\"ts\" generic=\"ThumbnailItem extends ThumbnailDefinition\">\n import { computed, inject, toValue, useCssModule } from 'vue';\n\n import { t } from '../../locale';\n import Button from '../Button/Button.vue';\n import Icon from '../Icon/Icon.vue';\n import Image from '../Image/Image.vue';\n import { THUMBNAIL_INJECTION } from '../ThumbnailGroup/ThumbnailGroup.keys';\n\n const props = withDefaults(\n defineProps<{\n /**\n * Thumbnail data containing and id and the image url\n */\n thumbnail: ThumbnailItem;\n\n /**\n * Thumbnail alt text for the image\n * @default ''\n */\n altText?: string;\n\n /**\n * Whether the thumbnail has some transparency or is fully opaque\n * @default 'opaque'\n */\n variant?: ThumbnailVariant;\n }>(),\n {\n variant: 'opaque',\n altText: '',\n },\n );\n\n const emit = defineEmits<{\n /**\n * Emits when a thumbnail is removed\n */\n remove: [index: number];\n\n /**\n * Emits when a thumbnail is clicked\n */\n click: [index: number];\n }>();\n\n const classes = useCssModule();\n\n const { thumbnails, activeThumbnail, draggable, isDragging, radius, removable } = inject(\n THUMBNAIL_INJECTION.key,\n THUMBNAIL_INJECTION.defaults,\n );\n\n const thumbnailIndex = computed(() => toValue(thumbnails).findIndex((t) => t === props.thumbnail));\n\n function handleThumbnailClick() {\n activeThumbnail.value = thumbnailIndex.value;\n emit('click', thumbnailIndex.value);\n }\n\n function handleRemove() {\n emit('remove', thumbnailIndex.value);\n activeThumbnail.value = -1;\n }\n</script>\n\n<template>\n <li\n class=\"stash-thumbnail focus-visible:outline-hidden group relative cursor-pointer\"\n :class=\"[\n {\n [classes['thumbnail-translucent']]: props.variant === 'translucent',\n [classes['thumbnail-opaque']]: props.variant === 'opaque',\n [classes['thumbnail-removable']]: removable,\n [classes['thumbnail-circle']]: radius === 'circle',\n [classes['thumbnail-rounded']]: radius === 'rounded',\n },\n ]\"\n :aria-current=\"activeThumbnail === thumbnailIndex\"\n :draggable=\"draggable\"\n data-test=\"stash-thumbnail\"\n tabindex=\"0\"\n @click=\"handleThumbnailClick()\"\n >\n <Image\n class=\"stash-thumbnail__img border-ice-200 outline-blue-500/15 transition-colors\"\n :class=\"[\n classes['thumbnail-img'],\n {\n [classes['thumbnail-mask']]: removable && radius !== 'circle',\n [classes['thumbnail-active']]: activeThumbnail === thumbnailIndex && !isDragging,\n 'group-hover:border-blue-500 group-focus-visible:border-blue-500 group-focus-visible:outline': !isDragging,\n },\n ]\"\n data-test=\"stash-thumbnail|img\"\n :radius=\"radius\"\n :src=\"thumbnail.imageUrl\"\n :alt=\"altText\"\n />\n\n <Button\n v-if=\"removable\"\n class=\"stash-thumbnail__remove\"\n :class=\"[classes['thumbnail-remove']]\"\n data-test=\"stash-thumbnail|remove\"\n :aria-label=\"t('ll.thumbnail.removeButton', { index: thumbnailIndex + 1 })\"\n type=\"button\"\n icon\n @click.stop.prevent=\"handleRemove\"\n >\n <Icon name=\"close\" size=\"small\" />\n </Button>\n\n <!-- @slot: Slot to add a hint below the image -->\n <slot name=\"hint\" />\n </li>\n</template>\n\n<style module>\n @reference \"../../../styles/main.css\";\n\n @layer utilities {\n .thumbnail-remove {\n position: absolute;\n top: calc(--spacing(1.5) * -1);\n right: calc(--spacing(1.5) * -1);\n padding: 1px;\n height: auto;\n width: auto !important;\n min-width: auto;\n border-radius: calc(infinity * 1px);\n background: var(--color-blue-500);\n color: white;\n\n &:hover,\n &:focus {\n background: var(--color-blue-600);\n }\n\n &:focus {\n outline: none;\n }\n }\n\n .thumbnail-img {\n border-style: solid;\n object-fit: cover;\n height: --spacing(12);\n width: --spacing(12);\n border-width: 1px;\n outline-width: --spacing(1);\n\n .thumbnail-translucent & {\n opacity: var(--opacity-40);\n\n &:hover,\n &.thumbnail-active {\n opacity: var(--opacity-100);\n }\n }\n }\n\n .thumbnail-active {\n border: 1px solid var(--color-ice-500);\n }\n\n .thumbnail-mask {\n mask-image: radial-gradient(circle at top right, transparent 20%, white 20.5%);\n }\n\n .thumbnail-full {\n border-radius: calc(infinity * 1px);\n }\n\n .thumbnail-rounded {\n border-radius: var(--radius-sm);\n }\n }\n</style>\n"],"names":["props","__props","emit","__emit","classes","useCssModule","thumbnails","activeThumbnail","draggable","isDragging","radius","removable","inject","THUMBNAIL_INJECTION","thumbnailIndex","computed","toValue","t","handleThumbnailClick","handleRemove","_createElementBlock","_unref","_createVNode","Image","_createBlock","Button","_normalizeClass","Icon","_renderSlot","_ctx"],"mappings":";;;;;;;;;;;;;;;;AAeE,UAAMA,IAAQC,GAyBRC,IAAOC,GAYPC,IAAUC,EAAA,GAEV,EAAE,YAAAC,GAAY,iBAAAC,GAAiB,WAAAC,GAAW,YAAAC,GAAY,QAAAC,GAAQ,WAAAC,MAAcC;AAAA,MAChFC,EAAoB;AAAA,MACpBA,EAAoB;AAAA,IAAA,GAGhBC,IAAiBC,EAAS,MAAMC,EAAQV,CAAU,EAAE,UAAU,CAACW,MAAMA,MAAMjB,EAAM,SAAS,CAAC;AAEjG,aAASkB,IAAuB;AAC9B,MAAAX,EAAgB,QAAQO,EAAe,OACvCZ,EAAK,SAASY,EAAe,KAAK;AAAA,IACpC;AAEA,aAASK,IAAe;AACtB,MAAAjB,EAAK,UAAUY,EAAe,KAAK,GACnCP,EAAgB,QAAQ;AAAA,IAC1B;2BAIAa,EAgDK,MAAA;AAAA,MA/CH,UAAM,8EAA4E;AAAA;WACvDC,EAAAjB,CAAA,EAAO,uBAAA,CAAA,GAA4BJ,EAAM,YAAO;AAAA,WAA6BqB,EAAAjB,CAAA,EAAO,kBAAA,CAAA,GAAuBJ,EAAM,YAAO;AAAA,UAAwB,CAAAqB,EAAAjB,CAAA,2BAAiCiB,EAAAV,CAAA;AAAA,UAAoB,CAAAU,EAAAjB,CAAA,wBAA8BiB,EAAAX,CAAA,MAAM;AAAA,UAAwB,CAAAW,EAAAjB,CAAA,yBAA+BiB,EAAAX,CAAA,MAAM;AAAA,QAAA;AAAA;MAShU,gBAAcW,EAAAd,CAAA,MAAoBO,EAAA;AAAA,MAClC,WAAWO,EAAAb,CAAA;AAAA,MACZ,aAAU;AAAA,MACV,UAAS;AAAA,MACR,gCAAOU,EAAA;AAAA,IAAoB;MAE5BI,EAcEC,GAAA;AAAA,QAbA,UAAM,6EAA2E;AAAA,UAC/DF,EAAAjB,CAAA,EAAO,eAAA;AAAA;aAAwCiB,EAAAjB,CAAA,EAAO,gBAAA,CAAA,GAAqBiB,EAAAV,CAAA,KAAaU,EAAAX,CAAA,MAAM;AAAA,YAA0B,CAAAW,EAAAjB,CAAA,EAAO,kBAAA,CAAA,GAAuBiB,EAAAd,CAAA,MAAoBO,EAAA,UAAmBO,EAAAZ,CAAA;AAAA,4GAAsHY,EAAAZ,CAAA;AAAA,UAAA;AAAA;QAQrU,aAAU;AAAA,QACT,QAAQY,EAAAX,CAAA;AAAA,QACR,KAAKT,EAAA,UAAU;AAAA,QACf,KAAKA,EAAA;AAAA,MAAA;MAIAoB,EAAAV,CAAA,UADRa,EAWSC,GAAA;AAAA;QATP,OAAKC,EAAA,CAAC,2BAAyB,CACtBL,EAAAjB,CAAA,EAAO,kBAAA,CAAA,CAAA,CAAA;AAAA,QAChB,aAAU;AAAA,QACT,cAAYiB,EAAAJ,CAAA,EAAC,6BAAA,EAAA,OAAuCH,EAAA,QAAc,GAAA;AAAA,QACnE,MAAK;AAAA,QACL,MAAA;AAAA,QACC,WAAoBK,GAAY,CAAA,QAAA,SAAA,CAAA;AAAA,MAAA;mBAEjC,MAAkC;AAAA,UAAlCG,EAAkCK,GAAA;AAAA,YAA5B,MAAK;AAAA,YAAQ,MAAK;AAAA,UAAA;;;;MAI1BC,EAAoBC,EAAA,QAAA,MAAA;AAAA,IAAA;;;;;;;;;;;;;"}
@@ -17,7 +17,7 @@ declare const _default: <ThumbnailItem extends ThumbnailDefinition>(__VLS_props:
17
17
  slots: {
18
18
  hint?(_: {}): any;
19
19
  };
20
- emit: ((evt: "click", index: number) => void) & ((evt: "remove", index: number) => void);
20
+ emit: ((evt: "remove", index: number) => void) & ((evt: "click", index: number) => void);
21
21
  } | undefined, __VLS_expose?: ((exposed: ShallowUnwrapRef< {}>) => void) | undefined, __VLS_setup?: Promise<{
22
22
  props: {
23
23
  readonly onClick?: ((index: number) => any) | undefined;
@@ -31,7 +31,7 @@ declare const _default: <ThumbnailItem extends ThumbnailDefinition>(__VLS_props:
31
31
  slots: {
32
32
  hint?(_: {}): any;
33
33
  };
34
- emit: ((evt: "click", index: number) => void) & ((evt: "remove", index: number) => void);
34
+ emit: ((evt: "remove", index: number) => void) & ((evt: "click", index: number) => void);
35
35
  }>) => VNode<RendererNode, RendererElement, {
36
36
  [key: string]: any;
37
37
  }> & {
@@ -48,7 +48,7 @@ declare const _default: <ThumbnailItem extends ThumbnailDefinition>(__VLS_props:
48
48
  slots: {
49
49
  hint?(_: {}): any;
50
50
  };
51
- emit: ((evt: "click", index: number) => void) & ((evt: "remove", index: number) => void);
51
+ emit: ((evt: "remove", index: number) => void) & ((evt: "click", index: number) => void);
52
52
  } | undefined;
53
53
  };
54
54
  export default _default;
@@ -1 +1 @@
1
- {"version":3,"file":"ThumbnailEmpty.js","sources":["../src/components/ThumbnailEmpty/ThumbnailEmpty.vue"],"sourcesContent":["<script setup lang=\"ts\">\n import { inject, useCssModule } from 'vue';\n\n import Icon from '../Icon/Icon.vue';\n import { THUMBNAIL_INJECTION } from '../ThumbnailGroup/ThumbnailGroup.keys';\n\n const classes = useCssModule();\n\n const { radius } = inject(THUMBNAIL_INJECTION.key, THUMBNAIL_INJECTION.defaults);\n</script>\n\n<template>\n <li\n class=\"stash-thumbnail-empty\"\n :class=\"[\n classes['thumbnail-empty'],\n {\n 'rounded-full': radius === 'circle',\n rounded: radius === 'rounded',\n },\n ]\"\n data-test=\"stash-thumbnail-empty\"\n >\n <Icon name=\"image\" data-test=\"stash-thumbnail-empty|icon\" />\n </li>\n</template>\n\n<style module>\n @reference \"../../../styles/main.css\";\n\n @layer utilities {\n .thumbnail-empty {\n height: --spacing(12);\n width: --spacing(12);\n border-width: 1px;\n outline-width: --spacing(1);\n border-style: dashed;\n border-color: var(--colors-ice-500);\n background-color: var(--colors-ice-100);\n color: var(--colors-ice-700);\n display: flex;\n justify-content: center;\n align-items: center;\n }\n }\n</style>\n"],"names":["classes","useCssModule","radius","inject","THUMBNAIL_INJECTION"],"mappings":";;;;;;;AAME,UAAMA,IAAUC,EAAA,GAEV,EAAE,QAAAC,EAAA,IAAWC,EAAOC,EAAoB,KAAKA,EAAoB,QAAQ;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"ThumbnailEmpty.js","sources":["../src/components/ThumbnailEmpty/ThumbnailEmpty.vue"],"sourcesContent":["<script setup lang=\"ts\">\n import { inject, useCssModule } from 'vue';\n\n import Icon from '../Icon/Icon.vue';\n import { THUMBNAIL_INJECTION } from '../ThumbnailGroup/ThumbnailGroup.keys';\n\n const classes = useCssModule();\n\n const { radius } = inject(THUMBNAIL_INJECTION.key, THUMBNAIL_INJECTION.defaults);\n</script>\n\n<template>\n <li\n class=\"stash-thumbnail-empty\"\n :class=\"[\n classes['thumbnail-empty'],\n {\n 'rounded-full': radius === 'circle',\n rounded: radius === 'rounded',\n },\n ]\"\n data-test=\"stash-thumbnail-empty\"\n >\n <Icon name=\"image\" data-test=\"stash-thumbnail-empty|icon\" />\n </li>\n</template>\n\n<style module>\n @reference \"../../../styles/main.css\";\n\n @layer utilities {\n .thumbnail-empty {\n height: --spacing(12);\n width: --spacing(12);\n border-width: 1px;\n outline-width: --spacing(1);\n border-style: dashed;\n border-color: var(--colors-ice-500);\n background-color: var(--colors-ice-100);\n color: var(--colors-ice-700);\n display: flex;\n justify-content: center;\n align-items: center;\n }\n }\n</style>\n"],"names":["classes","useCssModule","radius","inject","THUMBNAIL_INJECTION","_createElementBlock","_unref","_createVNode","Icon"],"mappings":";;;;;;;AAME,UAAMA,IAAUC,EAAA,GAEV,EAAE,QAAAC,EAAA,IAAWC,EAAOC,EAAoB,KAAKA,EAAoB,QAAQ;2BAI/EC,EAYK,MAAA;AAAA,MAXH,UAAM,yBAAuB;AAAA,QACbC,EAAAN,CAAA,EAAO,iBAAA;AAAA;0BAAqDM,EAAAJ,CAAA,MAAM;AAAA,mBAAgCI,EAAAJ,CAAA,MAAM;AAAA,QAAA;AAAA;MAOxH,aAAU;AAAA,IAAA;MAEVK,EAA4DC,GAAA;AAAA,QAAtD,MAAK;AAAA,QAAQ,aAAU;AAAA,MAAA;;;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"ThumbnailGroup.js","sources":["../src/components/ThumbnailGroup/ThumbnailGroup.vue"],"sourcesContent":["<script lang=\"ts\">\n import type { ThumbnailEmptyOptions, ThumbnailRadius } from './ThumbnailGroup.types';\n\n export * from '../../composables/useSortable/useSortable';\n export * from './ThumbnailGroup.types';\n</script>\n\n<script setup lang=\"ts\" generic=\"Thumbnail extends ThumbnailDefinition\">\n import { computed, provide, ref } from 'vue';\n\n import useSortable, {\n moveSortableElements,\n type SortableOnDragEndEvent,\n type SortableOnDragStartEvent,\n } from '../../composables/useSortable/useSortable';\n import { ThumbnailDefinition } from '../Thumbnail/Thumbnail.types';\n import ThumbnailEmpty from '../ThumbnailEmpty/ThumbnailEmpty.vue';\n import { THUMBNAIL_INJECTION } from './ThumbnailGroup.keys';\n\n const emit = defineEmits<{\n /**\n * Emits when a thumbnail starts dragging\n */\n dragStart: [event: SortableOnDragStartEvent];\n\n /**\n * Emits when a thumbnail stops dragging\n */\n dragEnd: [event: SortableOnDragEndEvent];\n\n /**\n * Emits when the thumbnails are updated\n */\n 'update:thumbnails': [thumbnails: Thumbnail[]];\n }>();\n\n const props = withDefaults(\n defineProps<{\n /**\n * Enable drag and drop functionality\n * @default false\n */\n draggable?: boolean;\n\n /**\n * Thumbnail radius. Can be 'rounded' or 'circle'\n * @default 'rounded'\n */\n radius?: ThumbnailRadius;\n\n /**\n * Shows a close button on the thumbnail when set to true\n * @default false\n */\n removable?: boolean;\n\n /**\n * Shows empty thumbnails when set to true\n */\n showEmpty?: boolean;\n\n /**\n * Empty thumbnail options. Only applicable when `showEmpty` is true\n * @default { max: 6 }\n */\n emptyOptions?: ThumbnailEmptyOptions;\n\n /**\n * List of thumbnails to display\n * @default []\n */\n thumbnails?: Thumbnail[];\n }>(),\n {\n thumbnails: () => [],\n draggable: false,\n radius: 'rounded',\n variant: 'opaque',\n removable: false,\n showEmpty: false,\n emptyOptions: () => ({ max: 6 }),\n },\n );\n\n /**\n * The active thumbnail index\n */\n const activeThumbnail = defineModel<number>('activeThumbnail', {\n default: -1,\n });\n\n const internalThumbnails = computed({\n get() {\n return props.thumbnails;\n },\n set(value) {\n emit('update:thumbnails', value);\n },\n });\n\n const thumbnailRef = ref<HTMLElement | null>(null);\n const { isDragging } = useSortable({\n ref: thumbnailRef,\n list: internalThumbnails,\n isEnabled: props.draggable,\n ghostClass: 'thumbnail-ghost',\n chosenClass: 'thumbnail-chosen',\n sortInPlace: false,\n onDragStart: (e) => emit('dragStart', e),\n onDragEnd: (e) => {\n activeThumbnail.value = e.newIndex;\n moveSortableElements({ list: internalThumbnails, from: e.oldIndex, to: e.newIndex });\n emit('dragEnd', e);\n },\n });\n\n const emptyThumbnailsCount = computed(() => {\n if (!props.showEmpty) return 0;\n\n const { max } = props.emptyOptions || {};\n\n return internalThumbnails.value.length < max ? max - internalThumbnails.value.length : 0;\n });\n\n provide(\n THUMBNAIL_INJECTION.key,\n Object.freeze({\n draggable: computed(() => props.draggable),\n removable: computed(() => props.removable),\n thumbnails: internalThumbnails,\n radius: props.radius,\n activeThumbnail,\n isDragging,\n }),\n );\n</script>\n\n<template>\n <ul ref=\"thumbnailRef\" class=\"stash-thumbnail-group flex flex-wrap gap-3\" data-test=\"stash-thumbnail-group\">\n <slot v-bind=\"{ activeThumbnail, isDragging }\"></slot>\n\n <ThumbnailEmpty v-for=\"(_, index) in emptyThumbnailsCount\" :key=\"`empty_thumb_${index}`\" />\n </ul>\n</template>\n\n<style>\n @layer utilities {\n .thumbnail-ghost {\n .stash-thumbnail-item__img {\n border: 1px solid var(--color-blue-500);\n mask-image: none !important;\n box-shadow: var(--shadow-sm);\n }\n\n .stash-thumbnail-item__remove {\n opacity: 0;\n }\n }\n }\n</style>\n\n<style scoped>\n @layer utilities {\n :deep(.thumbnail-chosen) {\n opacity: 0 !important;\n }\n }\n</style>\n"],"names":["emit","__emit","props","__props","activeThumbnail","_useModel","internalThumbnails","computed","value","thumbnailRef","ref","isDragging","useSortable","moveSortableElements","emptyThumbnailsCount","max","provide","THUMBNAIL_INJECTION"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAmBE,UAAMA,IAAOC,GAiBPC,IAAQC,GAmDRC,IAAkBC,EAAmBF,GAAC,iBAE3C,GAEKG,IAAqBC,EAAS;AAAA,MAClC,MAAM;AACJ,eAAOL,EAAM;AAAA,MACf;AAAA,MACA,IAAIM,GAAO;AACT,QAAAR,EAAK,qBAAqBQ,CAAK;AAAA,MACjC;AAAA,IAAA,CACD,GAEKC,IAAeC,EAAwB,IAAI,GAC3C,EAAE,YAAAC,EAAA,IAAeC,EAAY;AAAA,MACjC,KAAKH;AAAA,MACL,MAAMH;AAAA,MACN,WAAWJ,EAAM;AAAA,MACjB,YAAY;AAAA,MACZ,aAAa;AAAA,MACb,aAAa;AAAA,MACb,aAAa,CAAC,MAAMF,EAAK,aAAa,CAAC;AAAA,MACvC,WAAW,CAAC,MAAM;AAChB,QAAAI,EAAgB,QAAQ,EAAE,UAC1BS,EAAqB,EAAE,MAAMP,GAAoB,MAAM,EAAE,UAAU,IAAI,EAAE,UAAU,GACnFN,EAAK,WAAW,CAAC;AAAA,MACnB;AAAA,IAAA,CACD,GAEKc,IAAuBP,EAAS,MAAM;AAC1C,UAAI,CAACL,EAAM,UAAW,QAAO;AAE7B,YAAM,EAAE,KAAAa,EAAA,IAAQb,EAAM,gBAAgB,CAAA;AAEtC,aAAOI,EAAmB,MAAM,SAASS,IAAMA,IAAMT,EAAmB,MAAM,SAAS;AAAA,IACzF,CAAC;AAED,WAAAU;AAAA,MACEC,EAAoB;AAAA,MACpB,OAAO,OAAO;AAAA,QACZ,WAAWV,EAAS,MAAML,EAAM,SAAS;AAAA,QACzC,WAAWK,EAAS,MAAML,EAAM,SAAS;AAAA,QACzC,YAAYI;AAAA,QACZ,QAAQJ,EAAM;AAAA,QACd,iBAAAE;AAAA,QACA,YAAAO;AAAA,MAAA,CACD;AAAA,IAAA;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"ThumbnailGroup.js","sources":["../src/components/ThumbnailGroup/ThumbnailGroup.vue"],"sourcesContent":["<script lang=\"ts\">\n import type { ThumbnailEmptyOptions, ThumbnailRadius } from './ThumbnailGroup.types';\n\n export * from '../../composables/useSortable/useSortable';\n export * from './ThumbnailGroup.types';\n</script>\n\n<script setup lang=\"ts\" generic=\"Thumbnail extends ThumbnailDefinition\">\n import { computed, provide, ref } from 'vue';\n\n import useSortable, {\n moveSortableElements,\n type SortableOnDragEndEvent,\n type SortableOnDragStartEvent,\n } from '../../composables/useSortable/useSortable';\n import { ThumbnailDefinition } from '../Thumbnail/Thumbnail.types';\n import ThumbnailEmpty from '../ThumbnailEmpty/ThumbnailEmpty.vue';\n import { THUMBNAIL_INJECTION } from './ThumbnailGroup.keys';\n\n const emit = defineEmits<{\n /**\n * Emits when a thumbnail starts dragging\n */\n dragStart: [event: SortableOnDragStartEvent];\n\n /**\n * Emits when a thumbnail stops dragging\n */\n dragEnd: [event: SortableOnDragEndEvent];\n\n /**\n * Emits when the thumbnails are updated\n */\n 'update:thumbnails': [thumbnails: Thumbnail[]];\n }>();\n\n const props = withDefaults(\n defineProps<{\n /**\n * Enable drag and drop functionality\n * @default false\n */\n draggable?: boolean;\n\n /**\n * Thumbnail radius. Can be 'rounded' or 'circle'\n * @default 'rounded'\n */\n radius?: ThumbnailRadius;\n\n /**\n * Shows a close button on the thumbnail when set to true\n * @default false\n */\n removable?: boolean;\n\n /**\n * Shows empty thumbnails when set to true\n */\n showEmpty?: boolean;\n\n /**\n * Empty thumbnail options. Only applicable when `showEmpty` is true\n * @default { max: 6 }\n */\n emptyOptions?: ThumbnailEmptyOptions;\n\n /**\n * List of thumbnails to display\n * @default []\n */\n thumbnails?: Thumbnail[];\n }>(),\n {\n thumbnails: () => [],\n draggable: false,\n radius: 'rounded',\n variant: 'opaque',\n removable: false,\n showEmpty: false,\n emptyOptions: () => ({ max: 6 }),\n },\n );\n\n /**\n * The active thumbnail index\n */\n const activeThumbnail = defineModel<number>('activeThumbnail', {\n default: -1,\n });\n\n const internalThumbnails = computed({\n get() {\n return props.thumbnails;\n },\n set(value) {\n emit('update:thumbnails', value);\n },\n });\n\n const thumbnailRef = ref<HTMLElement | null>(null);\n const { isDragging } = useSortable({\n ref: thumbnailRef,\n list: internalThumbnails,\n isEnabled: props.draggable,\n ghostClass: 'thumbnail-ghost',\n chosenClass: 'thumbnail-chosen',\n sortInPlace: false,\n onDragStart: (e) => emit('dragStart', e),\n onDragEnd: (e) => {\n activeThumbnail.value = e.newIndex;\n moveSortableElements({ list: internalThumbnails, from: e.oldIndex, to: e.newIndex });\n emit('dragEnd', e);\n },\n });\n\n const emptyThumbnailsCount = computed(() => {\n if (!props.showEmpty) return 0;\n\n const { max } = props.emptyOptions || {};\n\n return internalThumbnails.value.length < max ? max - internalThumbnails.value.length : 0;\n });\n\n provide(\n THUMBNAIL_INJECTION.key,\n Object.freeze({\n draggable: computed(() => props.draggable),\n removable: computed(() => props.removable),\n thumbnails: internalThumbnails,\n radius: props.radius,\n activeThumbnail,\n isDragging,\n }),\n );\n</script>\n\n<template>\n <ul ref=\"thumbnailRef\" class=\"stash-thumbnail-group flex flex-wrap gap-3\" data-test=\"stash-thumbnail-group\">\n <slot v-bind=\"{ activeThumbnail, isDragging }\"></slot>\n\n <ThumbnailEmpty v-for=\"(_, index) in emptyThumbnailsCount\" :key=\"`empty_thumb_${index}`\" />\n </ul>\n</template>\n\n<style>\n @layer utilities {\n .thumbnail-ghost {\n .stash-thumbnail-item__img {\n border: 1px solid var(--color-blue-500);\n mask-image: none !important;\n box-shadow: var(--shadow-sm);\n }\n\n .stash-thumbnail-item__remove {\n opacity: 0;\n }\n }\n }\n</style>\n\n<style scoped>\n @layer utilities {\n :deep(.thumbnail-chosen) {\n opacity: 0 !important;\n }\n }\n</style>\n"],"names":["emit","__emit","props","__props","activeThumbnail","_useModel","internalThumbnails","computed","value","thumbnailRef","ref","isDragging","useSortable","moveSortableElements","emptyThumbnailsCount","max","provide","THUMBNAIL_INJECTION","_createElementBlock","_renderSlot","_ctx","_normalizeProps","_guardReactiveProps","_unref","_openBlock","_Fragment","_renderList","_","index","_createBlock","ThumbnailEmpty"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAmBE,UAAMA,IAAOC,GAiBPC,IAAQC,GAmDRC,IAAkBC,EAAmBF,GAAC,iBAE3C,GAEKG,IAAqBC,EAAS;AAAA,MAClC,MAAM;AACJ,eAAOL,EAAM;AAAA,MACf;AAAA,MACA,IAAIM,GAAO;AACT,QAAAR,EAAK,qBAAqBQ,CAAK;AAAA,MACjC;AAAA,IAAA,CACD,GAEKC,IAAeC,EAAwB,IAAI,GAC3C,EAAE,YAAAC,EAAA,IAAeC,EAAY;AAAA,MACjC,KAAKH;AAAA,MACL,MAAMH;AAAA,MACN,WAAWJ,EAAM;AAAA,MACjB,YAAY;AAAA,MACZ,aAAa;AAAA,MACb,aAAa;AAAA,MACb,aAAa,CAAC,MAAMF,EAAK,aAAa,CAAC;AAAA,MACvC,WAAW,CAAC,MAAM;AAChB,QAAAI,EAAgB,QAAQ,EAAE,UAC1BS,EAAqB,EAAE,MAAMP,GAAoB,MAAM,EAAE,UAAU,IAAI,EAAE,UAAU,GACnFN,EAAK,WAAW,CAAC;AAAA,MACnB;AAAA,IAAA,CACD,GAEKc,IAAuBP,EAAS,MAAM;AAC1C,UAAI,CAACL,EAAM,UAAW,QAAO;AAE7B,YAAM,EAAE,KAAAa,EAAA,IAAQb,EAAM,gBAAgB,CAAA;AAEtC,aAAOI,EAAmB,MAAM,SAASS,IAAMA,IAAMT,EAAmB,MAAM,SAAS;AAAA,IACzF,CAAC;AAED,WAAAU;AAAA,MACEC,EAAoB;AAAA,MACpB,OAAO,OAAO;AAAA,QACZ,WAAWV,EAAS,MAAML,EAAM,SAAS;AAAA,QACzC,WAAWK,EAAS,MAAML,EAAM,SAAS;AAAA,QACzC,YAAYI;AAAA,QACZ,QAAQJ,EAAM;AAAA,QACd,iBAAAE;AAAA,QACA,YAAAO;AAAA,MAAA,CACD;AAAA,IAAA,mBAKHO,EAIK,MAAA;AAAA,eAJG;AAAA,MAAJ,KAAIT;AAAA,MAAe,OAAM;AAAA,MAA6C,aAAU;AAAA,IAAA;MAClFU,EAAsDC,EAAA,QAAA,WAAAC,EAAAC,EAAA,EAAA,iBAAtClB,EAAA,OAAe,YAAEmB,EAAAZ,CAAA,EAAA,CAAU,CAAA,GAAA,QAAA,EAAA;AAAA,OAE3Ca,EAAA,EAAA,GAAAN,EAA2FO,GAAA,MAAAC,EAAtDZ,EAAA,OAAoB,CAAjCa,GAAGC,YAA3BC,EAA2FC,GAAA;AAAA,QAA/B,oBAAoBF,CAAK;AAAA,MAAA;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"Timeline.js","sources":["../src/components/Timeline/Timeline.vue"],"sourcesContent":["<script setup lang=\"ts\">\n import { computed, provide } from 'vue';\n\n import { SpacingDensities } from '../../../types/misc';\n import { TIMELINE_INJECTION } from './keys';\n\n export interface TimelineProps {\n /**\n * Sets which side of the timeline the main and opposed content is going to be displayed.\n */\n side?: 'start' | 'end';\n\n /**\n * Sets the size of each timeline item.\n */\n density?: SpacingDensities;\n }\n\n const props = withDefaults(defineProps<TimelineProps>(), {\n side: 'end',\n density: 'comfortable',\n });\n\n provide(TIMELINE_INJECTION.key, {\n side: computed(() => props.side),\n density: computed(() => props.density),\n });\n</script>\n\n<template>\n <ol\n class=\"stash-timeline grid grid-flow-dense items-start justify-center gap-x-3 gap-y-1.5\"\n :class=\"[`stash-timeline--${props.side}`, `stash-timeline--${props.density}`]\"\n data-test=\"stash-timeline\"\n >\n <slot></slot>\n </ol>\n</template>\n\n<style scoped>\n @layer utilities {\n .stash-timeline {\n grid-template-columns: auto min-content auto;\n }\n }\n</style>\n"],"names":["props","__props","provide","TIMELINE_INJECTION","computed"],"mappings":";;;;;;;;;;AAkBE,UAAMA,IAAQC;AAKd,WAAAC,EAAQC,EAAmB,KAAK;AAAA,MAC9B,MAAMC,EAAS,MAAMJ,EAAM,IAAI;AAAA,MAC/B,SAASI,EAAS,MAAMJ,EAAM,OAAO;AAAA,IAAA,CACtC;;;;;;;;"}
1
+ {"version":3,"file":"Timeline.js","sources":["../src/components/Timeline/Timeline.vue"],"sourcesContent":["<script setup lang=\"ts\">\n import { computed, provide } from 'vue';\n\n import { SpacingDensities } from '../../../types/misc';\n import { TIMELINE_INJECTION } from './keys';\n\n export interface TimelineProps {\n /**\n * Sets which side of the timeline the main and opposed content is going to be displayed.\n */\n side?: 'start' | 'end';\n\n /**\n * Sets the size of each timeline item.\n */\n density?: SpacingDensities;\n }\n\n const props = withDefaults(defineProps<TimelineProps>(), {\n side: 'end',\n density: 'comfortable',\n });\n\n provide(TIMELINE_INJECTION.key, {\n side: computed(() => props.side),\n density: computed(() => props.density),\n });\n</script>\n\n<template>\n <ol\n class=\"stash-timeline grid grid-flow-dense items-start justify-center gap-x-3 gap-y-1.5\"\n :class=\"[`stash-timeline--${props.side}`, `stash-timeline--${props.density}`]\"\n data-test=\"stash-timeline\"\n >\n <slot></slot>\n </ol>\n</template>\n\n<style scoped>\n @layer utilities {\n .stash-timeline {\n grid-template-columns: auto min-content auto;\n }\n }\n</style>\n"],"names":["props","__props","provide","TIMELINE_INJECTION","computed","_createElementBlock","_normalizeClass","_renderSlot","_ctx"],"mappings":";;;;;;;;;;AAkBE,UAAMA,IAAQC;AAKd,WAAAC,EAAQC,EAAmB,KAAK;AAAA,MAC9B,MAAMC,EAAS,MAAMJ,EAAM,IAAI;AAAA,MAC/B,SAASI,EAAS,MAAMJ,EAAM,OAAO;AAAA,IAAA,CACtC,mBAIDK,EAMK,MAAA;AAAA,MALH,OAAKC,EAAA,CAAC,oFAAkF,CAAA,mBAC5DN,EAAM,IAAI,IAAA,mBAAuBA,EAAM,OAAO,EAAA,CAAA,CAAA;AAAA,MAC1E,aAAU;AAAA,IAAA;MAEVO,EAAaC,EAAA,QAAA,WAAA,CAAA,GAAA,QAAA,EAAA;AAAA,IAAA;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"TimelineItem.js","sources":["../src/components/TimelineItem/TimelineItem.vue"],"sourcesContent":["<script setup lang=\"ts\">\n import { computed, inject } from 'vue';\n\n import { TIMELINE_INJECTION } from '../Timeline/keys';\n\n const slots = defineSlots<{\n /**\n * The opposite content of the timeline item.\n */\n opposite?: () => Record<string, never>;\n\n /**\n * The default content of the timeline item.\n */\n default: () => Record<string, never>;\n }>();\n\n const timelineInjection = inject(TIMELINE_INJECTION.key);\n\n if (!timelineInjection) {\n throw Error('The TimelineItem component must be a child of the Timeline component.');\n }\n\n const { density, side } = timelineInjection;\n\n const sideClasses = computed(() => {\n return {\n main: {\n 'col-start-3': side.value === 'end',\n 'col-end-2': side.value === 'start',\n },\n opposite: {\n 'col-end-2': side.value === 'end',\n 'col-start-3': side.value === 'start',\n },\n };\n });\n\n const contentDensity = computed(() => ({\n 'mb-3': density.value === 'compact',\n 'mb-6': density.value === 'comfortable',\n }));\n</script>\n\n<template>\n <li class=\"stash-timeline-item group contents list-none\" data-test=\"stash-timeline-item\">\n <div\n class=\"stash-timeline-item__main-content\"\n :class=\"[sideClasses.main, contentDensity]\"\n data-test=\"stash-timeline-item|content\"\n >\n <slot></slot>\n </div>\n\n <div\n class=\"stash-timeline-separator col-start-2 col-end-3 flex h-full flex-col items-center\"\n data-test=\"stash-timeline-separator\"\n >\n <div class=\"mt-[5px] rounded-full bg-ice-500 p-1.5\"></div>\n <div class=\"w-[2px] flex-1 bg-ice-500\"></div>\n </div>\n\n <div\n v-if=\"slots.opposite\"\n class=\"stash-timeline-item__opposite-content\"\n :class=\"[sideClasses.opposite, contentDensity]\"\n data-test=\"stash-timeline-item|opposite-content\"\n >\n <slot name=\"opposite\"></slot>\n </div>\n </li>\n</template>\n"],"names":["slots","_useSlots","timelineInjection","inject","TIMELINE_INJECTION","density","side","sideClasses","computed","contentDensity"],"mappings":";;;;;;;;AAKE,UAAMA,IAAQC,EAAA,GAYRC,IAAoBC,EAAOC,EAAmB,GAAG;AAEvD,QAAI,CAACF;AACH,YAAM,MAAM,uEAAuE;AAGrF,UAAM,EAAE,SAAAG,GAAS,MAAAC,EAAA,IAASJ,GAEpBK,IAAcC,EAAS,OACpB;AAAA,MACL,MAAM;AAAA,QACJ,eAAeF,EAAK,UAAU;AAAA,QAC9B,aAAaA,EAAK,UAAU;AAAA,MAAA;AAAA,MAE9B,UAAU;AAAA,QACR,aAAaA,EAAK,UAAU;AAAA,QAC5B,eAAeA,EAAK,UAAU;AAAA,MAAA;AAAA,IAChC,EAEH,GAEKG,IAAiBD,EAAS,OAAO;AAAA,MACrC,QAAQH,EAAQ,UAAU;AAAA,MAC1B,QAAQA,EAAQ,UAAU;AAAA,IAAA,EAC1B;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"TimelineItem.js","sources":["../src/components/TimelineItem/TimelineItem.vue"],"sourcesContent":["<script setup lang=\"ts\">\n import { computed, inject } from 'vue';\n\n import { TIMELINE_INJECTION } from '../Timeline/keys';\n\n const slots = defineSlots<{\n /**\n * The opposite content of the timeline item.\n */\n opposite?: () => Record<string, never>;\n\n /**\n * The default content of the timeline item.\n */\n default: () => Record<string, never>;\n }>();\n\n const timelineInjection = inject(TIMELINE_INJECTION.key);\n\n if (!timelineInjection) {\n throw Error('The TimelineItem component must be a child of the Timeline component.');\n }\n\n const { density, side } = timelineInjection;\n\n const sideClasses = computed(() => {\n return {\n main: {\n 'col-start-3': side.value === 'end',\n 'col-end-2': side.value === 'start',\n },\n opposite: {\n 'col-end-2': side.value === 'end',\n 'col-start-3': side.value === 'start',\n },\n };\n });\n\n const contentDensity = computed(() => ({\n 'mb-3': density.value === 'compact',\n 'mb-6': density.value === 'comfortable',\n }));\n</script>\n\n<template>\n <li class=\"stash-timeline-item group contents list-none\" data-test=\"stash-timeline-item\">\n <div\n class=\"stash-timeline-item__main-content\"\n :class=\"[sideClasses.main, contentDensity]\"\n data-test=\"stash-timeline-item|content\"\n >\n <slot></slot>\n </div>\n\n <div\n class=\"stash-timeline-separator col-start-2 col-end-3 flex h-full flex-col items-center\"\n data-test=\"stash-timeline-separator\"\n >\n <div class=\"mt-[5px] rounded-full bg-ice-500 p-1.5\"></div>\n <div class=\"w-[2px] flex-1 bg-ice-500\"></div>\n </div>\n\n <div\n v-if=\"slots.opposite\"\n class=\"stash-timeline-item__opposite-content\"\n :class=\"[sideClasses.opposite, contentDensity]\"\n data-test=\"stash-timeline-item|opposite-content\"\n >\n <slot name=\"opposite\"></slot>\n </div>\n </li>\n</template>\n"],"names":["slots","_useSlots","timelineInjection","inject","TIMELINE_INJECTION","density","side","sideClasses","computed","contentDensity","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_renderSlot","_ctx"],"mappings":";;;;;;;;AAKE,UAAMA,IAAQC,EAAA,GAYRC,IAAoBC,EAAOC,EAAmB,GAAG;AAEvD,QAAI,CAACF;AACH,YAAM,MAAM,uEAAuE;AAGrF,UAAM,EAAE,SAAAG,GAAS,MAAAC,EAAA,IAASJ,GAEpBK,IAAcC,EAAS,OACpB;AAAA,MACL,MAAM;AAAA,QACJ,eAAeF,EAAK,UAAU;AAAA,QAC9B,aAAaA,EAAK,UAAU;AAAA,MAAA;AAAA,MAE9B,UAAU;AAAA,QACR,aAAaA,EAAK,UAAU;AAAA,QAC5B,eAAeA,EAAK,UAAU;AAAA,MAAA;AAAA,IAChC,EAEH,GAEKG,IAAiBD,EAAS,OAAO;AAAA,MACrC,QAAQH,EAAQ,UAAU;AAAA,MAC1B,QAAQA,EAAQ,UAAU;AAAA,IAAA,EAC1B;sBAIFK,EAAA,GAAAC,EAyBK,MAzBLC,GAyBK;AAAA,MAxBHC,EAMM,OAAA;AAAA,QALJ,UAAM,qCAAmC,CAChCN,QAAY,MAAME,EAAA,KAAc,CAAA,CAAA;AAAA,QACzC,aAAU;AAAA,MAAA;QAEVK,EAAaC,EAAA,QAAA,SAAA;AAAA,MAAA;sBAGfF,EAMM,OAAA;AAAA,QALJ,OAAM;AAAA,QACN,aAAU;AAAA,MAAA;QAEVA,EAA0D,OAAA,EAArD,OAAM,0CAAwC;AAAA,QACnDA,EAA6C,OAAA,EAAxC,OAAM,6BAA2B;AAAA,MAAA;MAIhCb,EAAM,iBADdW,EAOM,OAAA;AAAA;QALJ,UAAM,yCAAuC,CACpCJ,QAAY,UAAUE,EAAA,KAAc,CAAA,CAAA;AAAA,QAC7C,aAAU;AAAA,MAAA;QAEVK,EAA6BC,EAAA,QAAA,UAAA;AAAA,MAAA;;;;"}
package/dist/Toast.js CHANGED
@@ -15,7 +15,7 @@ const {
15
15
  } = Object;
16
16
  let {
17
17
  freeze: S,
18
- seal: L,
18
+ seal: O,
19
19
  create: Rt
20
20
  } = Object, {
21
21
  apply: ve,
@@ -24,7 +24,7 @@ let {
24
24
  S || (S = function(n) {
25
25
  return n;
26
26
  });
27
- L || (L = function(n) {
27
+ O || (O = function(n) {
28
28
  return n;
29
29
  });
30
30
  ve || (ve = function(n, r, s) {
@@ -55,8 +55,8 @@ function l(a, n) {
55
55
  for (; s--; ) {
56
56
  let u = n[s];
57
57
  if (typeof u == "string") {
58
- const N = r(u);
59
- N !== u && (an(n) || (n[s] = N), u = N);
58
+ const L = r(u);
59
+ L !== u && (an(n) || (n[s] = L), u = L);
60
60
  }
61
61
  a[u] = !0;
62
62
  }
@@ -89,13 +89,13 @@ function K(a, n) {
89
89
  }
90
90
  return r;
91
91
  }
92
- const _t = S(["a", "abbr", "acronym", "address", "area", "article", "aside", "audio", "b", "bdi", "bdo", "big", "blink", "blockquote", "body", "br", "button", "canvas", "caption", "center", "cite", "code", "col", "colgroup", "content", "data", "datalist", "dd", "decorator", "del", "details", "dfn", "dialog", "dir", "div", "dl", "dt", "element", "em", "fieldset", "figcaption", "figure", "font", "footer", "form", "h1", "h2", "h3", "h4", "h5", "h6", "head", "header", "hgroup", "hr", "html", "i", "img", "input", "ins", "kbd", "label", "legend", "li", "main", "map", "mark", "marquee", "menu", "menuitem", "meter", "nav", "nobr", "ol", "optgroup", "option", "output", "p", "picture", "pre", "progress", "q", "rp", "rt", "ruby", "s", "samp", "section", "select", "shadow", "small", "source", "spacer", "span", "strike", "strong", "style", "sub", "summary", "sup", "table", "tbody", "td", "template", "textarea", "tfoot", "th", "thead", "time", "tr", "track", "tt", "u", "ul", "var", "video", "wbr"]), Me = S(["svg", "a", "altglyph", "altglyphdef", "altglyphitem", "animatecolor", "animatemotion", "animatetransform", "circle", "clippath", "defs", "desc", "ellipse", "filter", "font", "g", "glyph", "glyphref", "hkern", "image", "line", "lineargradient", "marker", "mask", "metadata", "mpath", "path", "pattern", "polygon", "polyline", "radialgradient", "rect", "stop", "style", "switch", "symbol", "text", "textpath", "title", "tref", "tspan", "view", "vkern"]), Ce = S(["feBlend", "feColorMatrix", "feComponentTransfer", "feComposite", "feConvolveMatrix", "feDiffuseLighting", "feDisplacementMap", "feDistantLight", "feDropShadow", "feFlood", "feFuncA", "feFuncB", "feFuncG", "feFuncR", "feGaussianBlur", "feImage", "feMerge", "feMergeNode", "feMorphology", "feOffset", "fePointLight", "feSpecularLighting", "feSpotLight", "feTile", "feTurbulence"]), _n = S(["animate", "color-profile", "cursor", "discard", "font-face", "font-face-format", "font-face-name", "font-face-src", "font-face-uri", "foreignobject", "hatch", "hatchpath", "mesh", "meshgradient", "meshpatch", "meshrow", "missing-glyph", "script", "set", "solidcolor", "unknown", "use"]), we = S(["math", "menclose", "merror", "mfenced", "mfrac", "mglyph", "mi", "mlabeledtr", "mmultiscripts", "mn", "mo", "mover", "mpadded", "mphantom", "mroot", "mrow", "ms", "mspace", "msqrt", "mstyle", "msub", "msup", "msubsup", "mtable", "mtd", "mtext", "mtr", "munder", "munderover", "mprescripts"]), Tn = S(["maction", "maligngroup", "malignmark", "mlongdiv", "mscarries", "mscarry", "msgroup", "mstack", "msline", "msrow", "semantics", "annotation", "annotation-xml", "mprescripts", "none"]), Tt = S(["#text"]), Et = S(["accept", "action", "align", "alt", "autocapitalize", "autocomplete", "autopictureinpicture", "autoplay", "background", "bgcolor", "border", "capture", "cellpadding", "cellspacing", "checked", "cite", "class", "clear", "color", "cols", "colspan", "controls", "controlslist", "coords", "crossorigin", "datetime", "decoding", "default", "dir", "disabled", "disablepictureinpicture", "disableremoteplayback", "download", "draggable", "enctype", "enterkeyhint", "face", "for", "headers", "height", "hidden", "high", "href", "hreflang", "id", "inputmode", "integrity", "ismap", "kind", "label", "lang", "list", "loading", "loop", "low", "max", "maxlength", "media", "method", "min", "minlength", "multiple", "muted", "name", "nonce", "noshade", "novalidate", "nowrap", "open", "optimum", "pattern", "placeholder", "playsinline", "popover", "popovertarget", "popovertargetaction", "poster", "preload", "pubdate", "radiogroup", "readonly", "rel", "required", "rev", "reversed", "role", "rows", "rowspan", "spellcheck", "scope", "selected", "shape", "size", "sizes", "span", "srclang", "start", "src", "srcset", "step", "style", "summary", "tabindex", "title", "translate", "type", "usemap", "valign", "value", "width", "wrap", "xmlns", "slot"]), xe = S(["accent-height", "accumulate", "additive", "alignment-baseline", "amplitude", "ascent", "attributename", "attributetype", "azimuth", "basefrequency", "baseline-shift", "begin", "bias", "by", "class", "clip", "clippathunits", "clip-path", "clip-rule", "color", "color-interpolation", "color-interpolation-filters", "color-profile", "color-rendering", "cx", "cy", "d", "dx", "dy", "diffuseconstant", "direction", "display", "divisor", "dur", "edgemode", "elevation", "end", "exponent", "fill", "fill-opacity", "fill-rule", "filter", "filterunits", "flood-color", "flood-opacity", "font-family", "font-size", "font-size-adjust", "font-stretch", "font-style", "font-variant", "font-weight", "fx", "fy", "g1", "g2", "glyph-name", "glyphref", "gradientunits", "gradienttransform", "height", "href", "id", "image-rendering", "in", "in2", "intercept", "k", "k1", "k2", "k3", "k4", "kerning", "keypoints", "keysplines", "keytimes", "lang", "lengthadjust", "letter-spacing", "kernelmatrix", "kernelunitlength", "lighting-color", "local", "marker-end", "marker-mid", "marker-start", "markerheight", "markerunits", "markerwidth", "maskcontentunits", "maskunits", "max", "mask", "media", "method", "mode", "min", "name", "numoctaves", "offset", "operator", "opacity", "order", "orient", "orientation", "origin", "overflow", "paint-order", "path", "pathlength", "patterncontentunits", "patterntransform", "patternunits", "points", "preservealpha", "preserveaspectratio", "primitiveunits", "r", "rx", "ry", "radius", "refx", "refy", "repeatcount", "repeatdur", "restart", "result", "rotate", "scale", "seed", "shape-rendering", "slope", "specularconstant", "specularexponent", "spreadmethod", "startoffset", "stddeviation", "stitchtiles", "stop-color", "stop-opacity", "stroke-dasharray", "stroke-dashoffset", "stroke-linecap", "stroke-linejoin", "stroke-miterlimit", "stroke-opacity", "stroke", "stroke-width", "style", "surfacescale", "systemlanguage", "tabindex", "tablevalues", "targetx", "targety", "transform", "transform-origin", "text-anchor", "text-decoration", "text-rendering", "textlength", "type", "u1", "u2", "unicode", "values", "viewbox", "visibility", "version", "vert-adv-y", "vert-origin-x", "vert-origin-y", "width", "word-spacing", "wrap", "writing-mode", "xchannelselector", "ychannelselector", "x", "x1", "x2", "xmlns", "y", "y1", "y2", "z", "zoomandpan"]), gt = S(["accent", "accentunder", "align", "bevelled", "close", "columnsalign", "columnlines", "columnspan", "denomalign", "depth", "dir", "display", "displaystyle", "encoding", "fence", "frame", "height", "href", "id", "largeop", "length", "linethickness", "lspace", "lquote", "mathbackground", "mathcolor", "mathsize", "mathvariant", "maxsize", "minsize", "movablelimits", "notation", "numalign", "open", "rowalign", "rowlines", "rowspacing", "rowspan", "rspace", "rquote", "scriptlevel", "scriptminsize", "scriptsizemultiplier", "selection", "separator", "separators", "stretchy", "subscriptshift", "supscriptshift", "symmetric", "voffset", "width", "xmlns"]), fe = S(["xlink:href", "xml:id", "xlink:title", "xml:space", "xmlns:xlink"]), En = L(/\{\{[\w\W]*|[\w\W]*\}\}/gm), gn = L(/<%[\w\W]*|[\w\W]*%>/gm), hn = L(/\$\{[\w\W]*/gm), An = L(/^data-[\-\w.\u00B7-\uFFFF]+$/), Sn = L(/^aria-[\-\w]+$/), yt = L(
92
+ const _t = S(["a", "abbr", "acronym", "address", "area", "article", "aside", "audio", "b", "bdi", "bdo", "big", "blink", "blockquote", "body", "br", "button", "canvas", "caption", "center", "cite", "code", "col", "colgroup", "content", "data", "datalist", "dd", "decorator", "del", "details", "dfn", "dialog", "dir", "div", "dl", "dt", "element", "em", "fieldset", "figcaption", "figure", "font", "footer", "form", "h1", "h2", "h3", "h4", "h5", "h6", "head", "header", "hgroup", "hr", "html", "i", "img", "input", "ins", "kbd", "label", "legend", "li", "main", "map", "mark", "marquee", "menu", "menuitem", "meter", "nav", "nobr", "ol", "optgroup", "option", "output", "p", "picture", "pre", "progress", "q", "rp", "rt", "ruby", "s", "samp", "section", "select", "shadow", "small", "source", "spacer", "span", "strike", "strong", "style", "sub", "summary", "sup", "table", "tbody", "td", "template", "textarea", "tfoot", "th", "thead", "time", "tr", "track", "tt", "u", "ul", "var", "video", "wbr"]), Me = S(["svg", "a", "altglyph", "altglyphdef", "altglyphitem", "animatecolor", "animatemotion", "animatetransform", "circle", "clippath", "defs", "desc", "ellipse", "filter", "font", "g", "glyph", "glyphref", "hkern", "image", "line", "lineargradient", "marker", "mask", "metadata", "mpath", "path", "pattern", "polygon", "polyline", "radialgradient", "rect", "stop", "style", "switch", "symbol", "text", "textpath", "title", "tref", "tspan", "view", "vkern"]), Ce = S(["feBlend", "feColorMatrix", "feComponentTransfer", "feComposite", "feConvolveMatrix", "feDiffuseLighting", "feDisplacementMap", "feDistantLight", "feDropShadow", "feFlood", "feFuncA", "feFuncB", "feFuncG", "feFuncR", "feGaussianBlur", "feImage", "feMerge", "feMergeNode", "feMorphology", "feOffset", "fePointLight", "feSpecularLighting", "feSpotLight", "feTile", "feTurbulence"]), _n = S(["animate", "color-profile", "cursor", "discard", "font-face", "font-face-format", "font-face-name", "font-face-src", "font-face-uri", "foreignobject", "hatch", "hatchpath", "mesh", "meshgradient", "meshpatch", "meshrow", "missing-glyph", "script", "set", "solidcolor", "unknown", "use"]), we = S(["math", "menclose", "merror", "mfenced", "mfrac", "mglyph", "mi", "mlabeledtr", "mmultiscripts", "mn", "mo", "mover", "mpadded", "mphantom", "mroot", "mrow", "ms", "mspace", "msqrt", "mstyle", "msub", "msup", "msubsup", "mtable", "mtd", "mtext", "mtr", "munder", "munderover", "mprescripts"]), Tn = S(["maction", "maligngroup", "malignmark", "mlongdiv", "mscarries", "mscarry", "msgroup", "mstack", "msline", "msrow", "semantics", "annotation", "annotation-xml", "mprescripts", "none"]), Tt = S(["#text"]), Et = S(["accept", "action", "align", "alt", "autocapitalize", "autocomplete", "autopictureinpicture", "autoplay", "background", "bgcolor", "border", "capture", "cellpadding", "cellspacing", "checked", "cite", "class", "clear", "color", "cols", "colspan", "controls", "controlslist", "coords", "crossorigin", "datetime", "decoding", "default", "dir", "disabled", "disablepictureinpicture", "disableremoteplayback", "download", "draggable", "enctype", "enterkeyhint", "face", "for", "headers", "height", "hidden", "high", "href", "hreflang", "id", "inputmode", "integrity", "ismap", "kind", "label", "lang", "list", "loading", "loop", "low", "max", "maxlength", "media", "method", "min", "minlength", "multiple", "muted", "name", "nonce", "noshade", "novalidate", "nowrap", "open", "optimum", "pattern", "placeholder", "playsinline", "popover", "popovertarget", "popovertargetaction", "poster", "preload", "pubdate", "radiogroup", "readonly", "rel", "required", "rev", "reversed", "role", "rows", "rowspan", "spellcheck", "scope", "selected", "shape", "size", "sizes", "span", "srclang", "start", "src", "srcset", "step", "style", "summary", "tabindex", "title", "translate", "type", "usemap", "valign", "value", "width", "wrap", "xmlns", "slot"]), xe = S(["accent-height", "accumulate", "additive", "alignment-baseline", "amplitude", "ascent", "attributename", "attributetype", "azimuth", "basefrequency", "baseline-shift", "begin", "bias", "by", "class", "clip", "clippathunits", "clip-path", "clip-rule", "color", "color-interpolation", "color-interpolation-filters", "color-profile", "color-rendering", "cx", "cy", "d", "dx", "dy", "diffuseconstant", "direction", "display", "divisor", "dur", "edgemode", "elevation", "end", "exponent", "fill", "fill-opacity", "fill-rule", "filter", "filterunits", "flood-color", "flood-opacity", "font-family", "font-size", "font-size-adjust", "font-stretch", "font-style", "font-variant", "font-weight", "fx", "fy", "g1", "g2", "glyph-name", "glyphref", "gradientunits", "gradienttransform", "height", "href", "id", "image-rendering", "in", "in2", "intercept", "k", "k1", "k2", "k3", "k4", "kerning", "keypoints", "keysplines", "keytimes", "lang", "lengthadjust", "letter-spacing", "kernelmatrix", "kernelunitlength", "lighting-color", "local", "marker-end", "marker-mid", "marker-start", "markerheight", "markerunits", "markerwidth", "maskcontentunits", "maskunits", "max", "mask", "media", "method", "mode", "min", "name", "numoctaves", "offset", "operator", "opacity", "order", "orient", "orientation", "origin", "overflow", "paint-order", "path", "pathlength", "patterncontentunits", "patterntransform", "patternunits", "points", "preservealpha", "preserveaspectratio", "primitiveunits", "r", "rx", "ry", "radius", "refx", "refy", "repeatcount", "repeatdur", "restart", "result", "rotate", "scale", "seed", "shape-rendering", "slope", "specularconstant", "specularexponent", "spreadmethod", "startoffset", "stddeviation", "stitchtiles", "stop-color", "stop-opacity", "stroke-dasharray", "stroke-dashoffset", "stroke-linecap", "stroke-linejoin", "stroke-miterlimit", "stroke-opacity", "stroke", "stroke-width", "style", "surfacescale", "systemlanguage", "tabindex", "tablevalues", "targetx", "targety", "transform", "transform-origin", "text-anchor", "text-decoration", "text-rendering", "textlength", "type", "u1", "u2", "unicode", "values", "viewbox", "visibility", "version", "vert-adv-y", "vert-origin-x", "vert-origin-y", "width", "word-spacing", "wrap", "writing-mode", "xchannelselector", "ychannelselector", "x", "x1", "x2", "xmlns", "y", "y1", "y2", "z", "zoomandpan"]), gt = S(["accent", "accentunder", "align", "bevelled", "close", "columnsalign", "columnlines", "columnspan", "denomalign", "depth", "dir", "display", "displaystyle", "encoding", "fence", "frame", "height", "href", "id", "largeop", "length", "linethickness", "lspace", "lquote", "mathbackground", "mathcolor", "mathsize", "mathvariant", "maxsize", "minsize", "movablelimits", "notation", "numalign", "open", "rowalign", "rowlines", "rowspacing", "rowspan", "rspace", "rquote", "scriptlevel", "scriptminsize", "scriptsizemultiplier", "selection", "separator", "separators", "stretchy", "subscriptshift", "supscriptshift", "symmetric", "voffset", "width", "xmlns"]), fe = S(["xlink:href", "xml:id", "xlink:title", "xml:space", "xmlns:xlink"]), En = O(/\{\{[\w\W]*|[\w\W]*\}\}/gm), gn = O(/<%[\w\W]*|[\w\W]*%>/gm), hn = O(/\$\{[\w\W]*/gm), An = O(/^data-[\-\w.\u00B7-\uFFFF]+$/), Sn = O(/^aria-[\-\w]+$/), yt = O(
93
93
  /^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i
94
94
  // eslint-disable-line no-useless-escape
95
- ), Rn = L(/^(?:\w+script|data):/i), yn = L(
95
+ ), Rn = O(/^(?:\w+script|data):/i), yn = O(
96
96
  /[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g
97
97
  // eslint-disable-line no-control-regex
98
- ), Ot = L(/^html$/i), On = L(/^[a-z][.\w]*(-[.\w]+)+$/i);
98
+ ), Ot = O(/^html$/i), On = O(/^[a-z][.\w]*(-[.\w]+)+$/i);
99
99
  var ht = /* @__PURE__ */ Object.freeze({
100
100
  __proto__: null,
101
101
  ARIA_ATTR: Sn,
@@ -124,18 +124,18 @@ const Z = {
124
124
  let s = null;
125
125
  const u = "data-tt-policy-suffix";
126
126
  r && r.hasAttribute(u) && (s = r.getAttribute(u));
127
- const N = "dompurify" + (s ? "#" + s : "");
127
+ const L = "dompurify" + (s ? "#" + s : "");
128
128
  try {
129
- return n.createPolicy(N, {
130
- createHTML(O) {
131
- return O;
129
+ return n.createPolicy(L, {
130
+ createHTML(N) {
131
+ return N;
132
132
  },
133
- createScriptURL(O) {
134
- return O;
133
+ createScriptURL(N) {
134
+ return N;
135
135
  }
136
136
  });
137
137
  } catch {
138
- return console.warn("TrustedTypes policy " + N + " could not be created."), null;
138
+ return console.warn("TrustedTypes policy " + L + " could not be created."), null;
139
139
  }
140
140
  }, At = function() {
141
141
  return {
@@ -159,8 +159,8 @@ function Lt() {
159
159
  document: r
160
160
  } = a;
161
161
  const s = r, u = s.currentScript, {
162
- DocumentFragment: N,
163
- HTMLTemplateElement: O,
162
+ DocumentFragment: L,
163
+ HTMLTemplateElement: N,
164
164
  Node: J,
165
165
  Element: ke,
166
166
  NodeFilter: z,
@@ -169,7 +169,7 @@ function Lt() {
169
169
  DOMParser: Dt,
170
170
  trustedTypes: Q
171
171
  } = a, G = ke.prototype, It = K(G, "cloneNode"), Mt = K(G, "remove"), Ct = K(G, "nextSibling"), wt = K(G, "childNodes"), ee = K(G, "parentNode");
172
- if (typeof O == "function") {
172
+ if (typeof N == "function") {
173
173
  const i = r.createElement("template");
174
174
  i.content && i.content.ownerDocument && (r = i.content.ownerDocument);
175
175
  }
@@ -450,7 +450,7 @@ function Lt() {
450
450
  let t = null;
451
451
  const o = et(e);
452
452
  for (C(g.beforeSanitizeShadowDOM, e, null); t = o.nextNode(); )
453
- C(g.uponSanitizeShadowNode, t, null), nt(t), rt(t), t.content instanceof N && i(t.content);
453
+ C(g.uponSanitizeShadowNode, t, null), nt(t), rt(t), t.content instanceof L && i(t.content);
454
454
  C(g.afterSanitizeShadowDOM, e, null);
455
455
  };
456
456
  return n.sanitize = function(i) {
@@ -481,7 +481,7 @@ function Lt() {
481
481
  t && Ae && D(t.firstChild);
482
482
  const _ = et(Y ? i : t);
483
483
  for (; c = _.nextNode(); )
484
- nt(c), rt(c), c.content instanceof N && jt(c.content);
484
+ nt(c), rt(c), c.content instanceof L && jt(c.content);
485
485
  if (Y)
486
486
  return i;
487
487
  if (P) {
@@ -529,20 +529,20 @@ const Dn = ["role"], In = ["innerHTML"], Mn = { key: 1 }, Cn = /* @__PURE__ */ q
529
529
  offsetTop: { default: void 0 }
530
530
  },
531
531
  setup(a) {
532
- Kt((O) => ({
533
- "8a96e6c8": r.offsetTop
532
+ Kt((N) => ({
533
+ v8a96e6c8: r.offsetTop
534
534
  }));
535
535
  const n = Zt(), r = a, s = lt(
536
536
  () => r.status ? ut[en(r.status)] : ut.Info
537
- ), u = lt(() => r.status === tn.Error ? "alert" : "status"), N = () => {
537
+ ), u = lt(() => r.status === tn.Error ? "alert" : "status"), L = () => {
538
538
  if (typeof r.text != "function")
539
539
  return ft.error(
540
540
  `Toast: ${r.text} is not a valid text prop value. Must be either a render function or a string.`
541
541
  ), null;
542
- const O = r.text();
543
- return Qt(O) ? O : (ft.error("Toast: The text prop must return a VNode."), null);
542
+ const N = r.text();
543
+ return Qt(N) ? N : (ft.error("Toast: The text prop must return a VNode."), null);
544
544
  };
545
- return (O, J) => (De(), be("li", {
545
+ return (N, J) => (De(), be("li", {
546
546
  role: u.value,
547
547
  class: Jt([[le(n).root, le(n)[`status--${r.status}`], { [le(n)["custom-offset-top"]]: r.offsetTop }], "stash-toast"]),
548
548
  "data-test": "stash-toast"
@@ -550,9 +550,9 @@ const Dn = ["role"], In = ["innerHTML"], Mn = { key: 1 }, Cn = /* @__PURE__ */ q
550
550
  ct(on, { name: s.value }, null, 8, ["name"]),
551
551
  typeof r.text == "string" ? (De(), be("div", {
552
552
  key: 0,
553
- innerHTML: le(bn).sanitize(O.text)
553
+ innerHTML: le(bn).sanitize(a.text)
554
554
  }, null, 8, In)) : (De(), be("div", Mn, [
555
- ct(nn, { render: N })
555
+ ct(nn, { render: L })
556
556
  ]))
557
557
  ], 10, Dn));
558
558
  }