@leaflink/stash 42.4.4 → 42.5.1

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 (225) hide show
  1. package/README.md +27 -3
  2. package/dist/ActionsDropdown.js +15 -20
  3. package/dist/ActionsDropdown.js.map +1 -1
  4. package/dist/AddressSelect.js +34 -45
  5. package/dist/AddressSelect.js.map +1 -1
  6. package/dist/Alert.js +58 -57
  7. package/dist/Alert.js.map +1 -1
  8. package/dist/AppNavigationItem.js +4 -6
  9. package/dist/AppNavigationItem.js.map +1 -1
  10. package/dist/AppTopbar.js +13 -15
  11. package/dist/AppTopbar.js.map +1 -1
  12. package/dist/ButtonGroup.js +12 -14
  13. package/dist/ButtonGroup.js.map +1 -1
  14. package/dist/CardMedia.js +9 -11
  15. package/dist/CardMedia.js.map +1 -1
  16. package/dist/Carousel.js +41 -44
  17. package/dist/Carousel.js.map +1 -1
  18. package/dist/Checkbox.js +9 -11
  19. package/dist/Checkbox.js.map +1 -1
  20. package/dist/ChevronToggle.js +2 -4
  21. package/dist/ChevronToggle.js.map +1 -1
  22. package/dist/Chip.js +4 -6
  23. package/dist/Chip.js.map +1 -1
  24. package/dist/ContextSwitcher.js +12 -17
  25. package/dist/ContextSwitcher.js.map +1 -1
  26. package/dist/Copy.js +19 -24
  27. package/dist/Copy.js.map +1 -1
  28. package/dist/CurrencyInput.js +8 -13
  29. package/dist/CurrencyInput.js.map +1 -1
  30. package/dist/DataView.js +48 -59
  31. package/dist/DataView.js.map +1 -1
  32. package/dist/DataViewFilters.js +87 -97
  33. package/dist/DataViewFilters.js.map +1 -1
  34. package/dist/DataViewSortButton.js +14 -18
  35. package/dist/DataViewSortButton.js.map +1 -1
  36. package/dist/DataViewToolbar.js +12 -14
  37. package/dist/DataViewToolbar.js.map +1 -1
  38. package/dist/DatePicker.js +2624 -2581
  39. package/dist/DatePicker.js.map +1 -1
  40. package/dist/DatePicker.vue.d.ts +19 -0
  41. package/dist/Dialog.js +6 -9
  42. package/dist/Dialog.js.map +1 -1
  43. package/dist/Dropdown.js +15 -20
  44. package/dist/Dropdown.js.map +1 -1
  45. package/dist/EmptyState.js +10 -13
  46. package/dist/EmptyState.js.map +1 -1
  47. package/dist/Field.js +3 -6
  48. package/dist/Field.js.map +1 -1
  49. package/dist/{Field.vue_vue_type_script_setup_true_lang-c864abd3.js → Field.vue_vue_type_script_setup_true_lang-475832fe.js} +2 -2
  50. package/dist/{Field.vue_vue_type_script_setup_true_lang-c864abd3.js.map → Field.vue_vue_type_script_setup_true_lang-475832fe.js.map} +1 -1
  51. package/dist/FileUpload.js +27 -30
  52. package/dist/FileUpload.js.map +1 -1
  53. package/dist/FilterChip.js +10 -13
  54. package/dist/FilterChip.js.map +1 -1
  55. package/dist/FilterDrawerItem.js +5 -8
  56. package/dist/FilterDrawerItem.js.map +1 -1
  57. package/dist/FilterDropdown.js +73 -88
  58. package/dist/FilterDropdown.js.map +1 -1
  59. package/dist/FilterSelect.js +15 -18
  60. package/dist/FilterSelect.js.map +1 -1
  61. package/dist/Filters.js +67 -78
  62. package/dist/Filters.js.map +1 -1
  63. package/dist/HttpError.js +4 -7
  64. package/dist/HttpError.js.map +1 -1
  65. package/dist/Icon.js +236 -14
  66. package/dist/Icon.js.map +1 -1
  67. package/dist/Icon.vue.d.ts +2 -2
  68. package/dist/Icon.vue_used_vue_type_style_index_0_lang.module-eb359559.js +11 -0
  69. package/dist/Icon.vue_used_vue_type_style_index_0_lang.module-eb359559.js.map +1 -0
  70. package/dist/IconLabel.js +4 -6
  71. package/dist/IconLabel.js.map +1 -1
  72. package/dist/Illustration.js +6 -8
  73. package/dist/Illustration.js.map +1 -1
  74. package/dist/Image.js +39 -49
  75. package/dist/Image.js.map +1 -1
  76. package/dist/InlineEdit.js +10 -12
  77. package/dist/InlineEdit.js.map +1 -1
  78. package/dist/Input.js +50 -55
  79. package/dist/Input.js.map +1 -1
  80. package/dist/InputOptions.js +20 -29
  81. package/dist/InputOptions.js.map +1 -1
  82. package/dist/Label.js +1 -4
  83. package/dist/Label.js.map +1 -1
  84. package/dist/LicenseChip.js +7 -9
  85. package/dist/LicenseChip.js.map +1 -1
  86. package/dist/ListItem.js +11 -13
  87. package/dist/ListItem.js.map +1 -1
  88. package/dist/ListView.js +47 -58
  89. package/dist/ListView.js.map +1 -1
  90. package/dist/Metric.js +43 -45
  91. package/dist/Metric.js.map +1 -1
  92. package/dist/Metric.vue.d.ts +24 -15
  93. package/dist/Modal.js +16 -19
  94. package/dist/Modal.js.map +1 -1
  95. package/dist/Modals.js +16 -26
  96. package/dist/Modals.js.map +1 -1
  97. package/dist/ModalsPlugin.js +12 -22
  98. package/dist/ModalsPlugin.js.map +1 -1
  99. package/dist/ObfuscateText.js +7 -9
  100. package/dist/ObfuscateText.js.map +1 -1
  101. package/dist/PageNavigation.js +25 -29
  102. package/dist/PageNavigation.js.map +1 -1
  103. package/dist/Paginate.js +29 -31
  104. package/dist/Paginate.js.map +1 -1
  105. package/dist/QuickAction.js +13 -15
  106. package/dist/QuickAction.js.map +1 -1
  107. package/dist/RadioGroup.js +86 -89
  108. package/dist/RadioGroup.js.map +1 -1
  109. package/dist/SearchBar.js +18 -20
  110. package/dist/SearchBar.js.map +1 -1
  111. package/dist/Select.js +13 -23
  112. package/dist/Select.js.map +1 -1
  113. package/dist/SelectStatus.js +26 -36
  114. package/dist/SelectStatus.js.map +1 -1
  115. package/dist/Step.js +19 -21
  116. package/dist/Step.js.map +1 -1
  117. package/dist/Switch.js +8 -10
  118. package/dist/Switch.js.map +1 -1
  119. package/dist/Tab.js +25 -30
  120. package/dist/Tab.js.map +1 -1
  121. package/dist/Table.js +19 -21
  122. package/dist/Table.js.map +1 -1
  123. package/dist/TableCell.js +21 -22
  124. package/dist/TableCell.js.map +1 -1
  125. package/dist/TableHeaderCell.js +4 -4
  126. package/dist/TableHeaderRow.js +7 -9
  127. package/dist/TableHeaderRow.js.map +1 -1
  128. package/dist/TableRow.js +22 -24
  129. package/dist/TableRow.js.map +1 -1
  130. package/dist/Tabs.js +11 -16
  131. package/dist/Tabs.js.map +1 -1
  132. package/dist/{Tabs.vue_vue_type_script_setup_true_lang-ba383fda.js → Tabs.vue_vue_type_script_setup_true_lang-aca4f8b8.js} +3 -3
  133. package/dist/{Tabs.vue_vue_type_script_setup_true_lang-ba383fda.js.map → Tabs.vue_vue_type_script_setup_true_lang-aca4f8b8.js.map} +1 -1
  134. package/dist/Textarea.js +10 -13
  135. package/dist/Textarea.js.map +1 -1
  136. package/dist/Toast.js +8 -10
  137. package/dist/Toast.js.map +1 -1
  138. package/dist/Toasts.js +14 -25
  139. package/dist/Toasts.js.map +1 -1
  140. package/dist/ToastsPlugin.js +14 -25
  141. package/dist/ToastsPlugin.js.map +1 -1
  142. package/dist/components.css +1 -1
  143. package/dist/index.js +53 -62
  144. package/dist/index.js.map +1 -1
  145. package/dist/locale.js +12 -15
  146. package/dist/locale.js.map +1 -1
  147. package/dist/{searchFuzzy-13c124f8.js → searchFuzzy-74a7de1c.js} +2 -2
  148. package/dist/{searchFuzzy-13c124f8.js.map → searchFuzzy-74a7de1c.js.map} +1 -1
  149. package/dist/storage.js +6 -11
  150. package/dist/storage.js.map +1 -1
  151. package/dist/tooltip.js +21 -26
  152. package/dist/tooltip.js.map +1 -1
  153. package/dist/useGoogleMaps.js +91 -226
  154. package/dist/useGoogleMaps.js.map +1 -1
  155. package/dist/useModals.js +21 -31
  156. package/dist/useModals.js.map +1 -1
  157. package/dist/useSearch.js +17 -22
  158. package/dist/useSearch.js.map +1 -1
  159. package/dist/useToasts.js +25 -36
  160. package/dist/useToasts.js.map +1 -1
  161. package/dist/useValidation.js +79 -108
  162. package/dist/useValidation.js.map +1 -1
  163. package/dist/utils/calculateElementOverflow.js +9 -14
  164. package/dist/utils/calculateElementOverflow.js.map +1 -1
  165. package/dist/utils/createQueryString.js +9 -15
  166. package/dist/utils/createQueryString.js.map +1 -1
  167. package/dist/utils/helpers.js +46 -59
  168. package/dist/utils/helpers.js.map +1 -1
  169. package/dist/utils/i18n.js +17 -20
  170. package/dist/utils/i18n.js.map +1 -1
  171. package/dist/utils/searchFuzzy.js +7 -12
  172. package/dist/utils/searchFuzzy.js.map +1 -1
  173. package/dist/utils/storage.js +10 -15
  174. package/dist/utils/storage.js.map +1 -1
  175. package/dist/viewable.js +26 -34
  176. package/dist/viewable.js.map +1 -1
  177. package/package.json +4 -6
  178. package/dist/Icon.vue_used_vue_type_style_index_0_lang.module-d2507af3.js +0 -243
  179. package/dist/Icon.vue_used_vue_type_style_index_0_lang.module-d2507af3.js.map +0 -1
  180. package/dist/_MapCache-65811284.js +0 -188
  181. package/dist/_MapCache-65811284.js.map +0 -1
  182. package/dist/_Uint8Array-06e4d083.js +0 -66
  183. package/dist/_Uint8Array-06e4d083.js.map +0 -1
  184. package/dist/_baseAssignValue-dd1499b4.js +0 -22
  185. package/dist/_baseAssignValue-dd1499b4.js.map +0 -1
  186. package/dist/_baseIsEqual-d594c87f.js +0 -171
  187. package/dist/_baseIsEqual-d594c87f.js.map +0 -1
  188. package/dist/_createCompounder-ae01a723.js +0 -245
  189. package/dist/_createCompounder-ae01a723.js.map +0 -1
  190. package/dist/_getAllKeys-5e735d41.js +0 -44
  191. package/dist/_getAllKeys-5e735d41.js.map +0 -1
  192. package/dist/_getPrototype-3e6fccd6.js +0 -7
  193. package/dist/_getPrototype-3e6fccd6.js.map +0 -1
  194. package/dist/_getTag-4db47fa6.js +0 -47
  195. package/dist/_getTag-4db47fa6.js.map +0 -1
  196. package/dist/_initCloneObject-161353b9.js +0 -88
  197. package/dist/_initCloneObject-161353b9.js.map +0 -1
  198. package/dist/_overArg-6d920d99.js +0 -9
  199. package/dist/_overArg-6d920d99.js.map +0 -1
  200. package/dist/capitalize-667d9f60.js +0 -42
  201. package/dist/capitalize-667d9f60.js.map +0 -1
  202. package/dist/cloneDeep-5bc375b0.js +0 -146
  203. package/dist/cloneDeep-5bc375b0.js.map +0 -1
  204. package/dist/debounce-6aca1ca9.js +0 -86
  205. package/dist/debounce-6aca1ca9.js.map +0 -1
  206. package/dist/get-27d90892.js +0 -66
  207. package/dist/get-27d90892.js.map +0 -1
  208. package/dist/identity-452d03fd.js +0 -20
  209. package/dist/identity-452d03fd.js.map +0 -1
  210. package/dist/isArrayLike-09233e52.js +0 -61
  211. package/dist/isArrayLike-09233e52.js.map +0 -1
  212. package/dist/isEmpty-2fbad344.js +0 -23
  213. package/dist/isEmpty-2fbad344.js.map +0 -1
  214. package/dist/isEqual-fca467fb.js +0 -8
  215. package/dist/isEqual-fca467fb.js.map +0 -1
  216. package/dist/isObjectLike-54341556.js +0 -39
  217. package/dist/isObjectLike-54341556.js.map +0 -1
  218. package/dist/isPlainObject-55c7f916.js +0 -16
  219. package/dist/isPlainObject-55c7f916.js.map +0 -1
  220. package/dist/merge-b14fad9d.js +0 -124
  221. package/dist/merge-b14fad9d.js.map +0 -1
  222. package/dist/toString-7d5bf363.js +0 -29
  223. package/dist/toString-7d5bf363.js.map +0 -1
  224. package/dist/uniqueId-847efe53.js +0 -10
  225. package/dist/uniqueId-847efe53.js.map +0 -1
package/dist/Modal.js CHANGED
@@ -1,19 +1,16 @@
1
1
  import { defineComponent as H, useSlots as I, ref as d, computed as x, watch as $, onBeforeUnmount as K, openBlock as a, createElementBlock as w, normalizeClass as s, withKeys as R, createVNode as C, withModifiers as j, createElementVNode as g, unref as f, renderSlot as m, toDisplayString as T, createCommentVNode as i, createBlock as F, withCtx as L } from "vue";
2
- import { u as V } from "./uniqueId-847efe53.js";
2
+ import V from "lodash-es/uniqueId";
3
3
  import { FOCUS_ELEMENTS_SELECTOR as A } from "./constants.js";
4
4
  import { t as M } from "./locale.js";
5
5
  import q from "./Backdrop.js";
6
6
  import N from "./Button.js";
7
7
  import D from "./Icon.js";
8
8
  import { _ as P } from "./_plugin-vue_export-helper-dad06003.js";
9
- import "./toString-7d5bf363.js";
10
- import "./isObjectLike-54341556.js";
11
- import "./get-27d90892.js";
12
- import "./_MapCache-65811284.js";
9
+ import "lodash-es/get";
13
10
  import "./Button.vue_used_vue_type_style_index_0_lang.module-b77978d6.js";
14
- import "./Icon.vue_used_vue_type_style_index_0_lang.module-d2507af3.js";
15
11
  import "./index-79ce320f.js";
16
- var U = /* @__PURE__ */ ((o) => (o.Narrow = "narrow", o.Medium = "medium", o.Wide = "wide", o))(U || {}), W = /* @__PURE__ */ ((o) => (o.Center = "center", o.Left = "left", o.Right = "right", o))(W || {});
12
+ import "./Icon.vue_used_vue_type_style_index_0_lang.module-eb359559.js";
13
+ var U = /* @__PURE__ */ ((l) => (l.Narrow = "narrow", l.Medium = "medium", l.Wide = "wide", l))(U || {}), W = /* @__PURE__ */ ((l) => (l.Center = "center", l.Left = "left", l.Right = "right", l))(W || {});
17
14
  const G = ["onKeydown"], J = ["aria-labelledby"], Q = { class: "tw-flex tw-place-items-center" }, X = ["id"], Y = { class: "stash-modal__footer__actions tw-flex tw-flex-col tw-justify-end lg:tw-flex-row" }, Z = /* @__PURE__ */ H({
18
15
  name: "ll-modal",
19
16
  __name: "Modal",
@@ -32,21 +29,21 @@ const G = ["onKeydown"], J = ["aria-labelledby"], Q = { class: "tw-flex tw-place
32
29
  closeButtonColorClass: { default: "tw-text-white/50" }
33
30
  },
34
31
  emits: ["update:open", "update:is-open", "dismiss"],
35
- setup(o, { emit: _ }) {
36
- const e = o, y = I(), r = d(), E = d(), p = d([]), b = d(), k = d(), u = d({ height: "", overflow: "" }), B = V("modal-header-"), z = x(() => !!y.actions || !!y.footer), l = x(() => e.open || e.isOpen), n = x(() => e.position === "left" || e.position === "right");
32
+ setup(l, { emit: _ }) {
33
+ const e = l, y = I(), r = d(), E = d(), p = d([]), b = d(), k = d(), u = d({ height: "", overflow: "" }), B = V("modal-header-"), z = x(() => !!y.actions || !!y.footer), o = x(() => e.open || e.isOpen), n = x(() => e.position === "left" || e.position === "right");
37
34
  function h() {
38
35
  return document.scrollingElement || document.body;
39
36
  }
40
37
  $(
41
- l,
38
+ o,
42
39
  () => {
43
- l.value && Object.assign(u.value, {
40
+ o.value && Object.assign(u.value, {
44
41
  height: h().style.height,
45
42
  overflow: h().style.overflow
46
43
  }), Object.assign(h().style, {
47
- overflow: l.value ? "hidden" : u.value.overflow,
44
+ overflow: o.value ? "hidden" : u.value.overflow,
48
45
  // Prevents page from scrolling when modal is open
49
- height: l.value ? "100%" : u.value.height
46
+ height: o.value ? "100%" : u.value.height
50
47
  // Ensures the backdrop covers the entire page when modal is open; see https://github.com/LeafLink/stash/pull/713#issuecomment-1184602535
51
48
  });
52
49
  },
@@ -68,13 +65,13 @@ const G = ["onKeydown"], J = ["aria-labelledby"], Q = { class: "tw-flex tw-place
68
65
  var c, S;
69
66
  t.key === "Tab" && (t.shiftKey && document.activeElement === b.value ? ((c = k.value) == null || c.focus(), t.preventDefault()) : document.activeElement === k.value && ((S = b.value) == null || S.focus(), t.preventDefault()));
70
67
  }
71
- return (t, c) => l.value ? (a(), w("div", {
68
+ return (t, c) => o.value ? (a(), w("div", {
72
69
  key: 0,
73
70
  ref_key: "rootRef",
74
71
  ref: r,
75
72
  class: s(["stash-modal tw-fixed tw-inset-0 tw-overflow-y-auto", {
76
- "tw-invisible tw-z-behind": !l.value,
77
- "tw-visible tw-z-modal": l.value,
73
+ "tw-invisible tw-z-behind": !o.value,
74
+ "tw-visible tw-z-modal": o.value,
78
75
  "lg:tw-flex lg:tw-flex-col lg:tw-justify-center lg:tw-items-center": e.position === "center"
79
76
  }]),
80
77
  "data-test": "ll-modal",
@@ -93,7 +90,7 @@ const G = ["onKeydown"], J = ["aria-labelledby"], Q = { class: "tw-flex tw-place
93
90
  `stash-modal__dialog--size-${e.size}`,
94
91
  `stash-modal__dialog--position-${e.position}`,
95
92
  {
96
- "stash-modal__dialog--is-open": l.value,
93
+ "stash-modal__dialog--is-open": o.value,
97
94
  "stash-modal__dialog--is-drawer": n.value,
98
95
  "stash-modal__dialog--is-contrast": e.contrast,
99
96
  "stash-modal__dialog--is-scrollable": e.scrollable,
@@ -192,10 +189,10 @@ const G = ["onKeydown"], J = ["aria-labelledby"], Q = { class: "tw-flex tw-place
192
189
  ], 42, G)) : i("", !0);
193
190
  }
194
191
  });
195
- const pe = /* @__PURE__ */ P(Z, [["__scopeId", "data-v-c53d57a8"]]);
192
+ const we = /* @__PURE__ */ P(Z, [["__scopeId", "data-v-c53d57a8"]]);
196
193
  export {
197
194
  W as ModalPosition,
198
195
  U as ModalSize,
199
- pe as default
196
+ we as default
200
197
  };
201
198
  //# sourceMappingURL=Modal.js.map
package/dist/Modal.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Modal.js","sources":["../src/components/Modal/Modal.types.ts","../src/components/Modal/Modal.vue"],"sourcesContent":["export enum ModalSize {\n Narrow = 'narrow',\n Medium = 'medium',\n Wide = 'wide',\n}\n\nexport type ModalSizes = `${ModalSize}`;\n\nexport enum ModalPosition {\n Center = 'center',\n Left = 'left',\n Right = 'right',\n}\n\nexport type ModalPositions = `${ModalPosition}`;\n","<script lang=\"ts\">\n import { ModalPositions, ModalSizes } from './Modal.types';\n\n export * from './Modal.types';\n\n export interface ModalProps {\n /**\n * Hides the \"close\" button\n */\n hideClose?: boolean;\n\n /**\n * Opens the modal when truthy; hides the modal when falsy.\n * @deprecated Use `isOpen` instead\n */\n open?: boolean;\n\n /**\n * Opens the modal when truthy; hides the modal when falsy.\n */\n isOpen?: boolean;\n\n /**\n * Use v-model:is-open or :is-open instead of :model-value and v-model.\n * @deprecated\n */\n modelValue?: boolean;\n\n /**\n * Sets a preset max-width on the modal.\n * Options: default (648px), narrow (360px), wide (960px)\n */\n size?: ModalSizes;\n\n /**\n * Should the modal be scrollable within the content area. This prop is treated as `true` when the `position` prop is set to \"left\" or \"right\".\n */\n scrollable?: boolean;\n\n /**\n * Gives the modal body have a light gray background\n */\n contrast?: boolean;\n\n /**\n * Text to display in the modal header\n */\n title?: string;\n\n /**\n * Disables the default padding in the modal body.\n */\n disableBodyPadding?: boolean;\n\n /**\n * The position on the screen to display the modal.\n */\n position?: ModalPositions;\n\n /**\n * Hide the header. Typically used with the featuredContent slot to display a graphic and create a \"promo\" modal.\n */\n hideHeader?: boolean;\n\n /**\n * Add classes to the close button. This can be used with the hideHeader prop and featuredContent slot to\n * accommodate images with different color backgrounds.\n */\n closeButtonColorClass?: string;\n }\n</script>\n\n<script setup lang=\"ts\">\n import uniqueId from 'lodash-es/uniqueId';\n import { computed, onBeforeUnmount, ref, useSlots, watch } from 'vue';\n\n import { FOCUS_ELEMENTS_SELECTOR } from '../../constants';\n import { t } from '../../locale';\n import Backdrop from '../Backdrop/Backdrop.vue';\n import Button from '../Button/Button.vue';\n import Icon from '../Icon/Icon.vue';\n\n defineOptions({ name: 'll-modal' });\n\n const props = withDefaults(defineProps<ModalProps>(), {\n hideClose: false,\n open: false,\n isOpen: false,\n modelValue: false,\n size: 'medium',\n scrollable: false,\n contrast: false,\n title: '',\n position: 'center',\n hideHeader: false,\n closeButtonColorClass: 'tw-text-white/50',\n });\n\n const emit =\n defineEmits<{\n /**\n * @deprecated Use the `update:is-open` event instead\n */\n (e: 'update:open', isOpen?: boolean): void;\n (e: 'update:is-open', isOpen?: boolean): void;\n (e: 'dismiss'): void;\n }>();\n\n const slots = useSlots();\n\n const rootRef = ref<HTMLElement>();\n const lastExternalFocusedElement = ref<HTMLElement>();\n const focusElements = ref<HTMLElement[]>([]);\n const firstFocusElement = ref<HTMLElement>();\n const lastFocusElement = ref<HTMLElement>();\n const initialPageScrollingElementStyle = ref({ height: '', overflow: '' });\n const headerId = uniqueId('modal-header-');\n const hasFooterContent = computed(() => !!slots.actions || !!slots.footer);\n const isModalOpen = computed(() => props.open || props.isOpen);\n const isDrawer = computed(() => props.position === 'left' || props.position === 'right');\n\n function getPageScrollingElement() {\n return (document.scrollingElement || document.body) as HTMLElement;\n }\n\n watch(\n isModalOpen,\n () => {\n if (isModalOpen.value) {\n Object.assign(initialPageScrollingElementStyle.value, {\n height: getPageScrollingElement().style.height,\n overflow: getPageScrollingElement().style.overflow,\n });\n }\n\n Object.assign(getPageScrollingElement().style, {\n overflow: isModalOpen.value ? 'hidden' : initialPageScrollingElementStyle.value.overflow, // Prevents page from scrolling when modal is open\n height: isModalOpen.value ? '100%' : initialPageScrollingElementStyle.value.height, // Ensures the backdrop covers the entire page when modal is open; see https://github.com/LeafLink/stash/pull/713#issuecomment-1184602535\n });\n },\n { immediate: true },\n );\n\n onBeforeUnmount(() => {\n // In cases where the watchEffect for isModalOpen isn't triggered while closing/nagivating away from modal, this ensures scrolling returns to normal\n Object.assign(getPageScrollingElement().style, {\n overflow: initialPageScrollingElementStyle.value.overflow,\n height: initialPageScrollingElementStyle.value.height,\n });\n\n // Clear focus trap tab listener\n document.removeEventListener('keydown', handleTab);\n lastExternalFocusedElement.value?.focus();\n });\n\n function dismiss() {\n emit('update:open', false);\n emit('update:is-open', false);\n emit('dismiss');\n }\n\n // This watcher ensures the Tab key cycles through focusable elements within the modal.\n watch(rootRef, () => {\n if (!rootRef.value) {\n return;\n }\n\n lastExternalFocusedElement.value = document.activeElement as HTMLElement;\n rootRef.value.focus();\n\n focusElements.value = Array.from(rootRef.value.querySelectorAll<HTMLElement>(FOCUS_ELEMENTS_SELECTOR));\n firstFocusElement.value = focusElements.value[0];\n lastFocusElement.value = focusElements.value[focusElements.value.length - 1];\n document.addEventListener('keydown', handleTab);\n });\n\n function handleTab(e) {\n if (e.key === 'Tab') {\n if (e.shiftKey && document.activeElement === firstFocusElement.value) {\n lastFocusElement.value?.focus();\n e.preventDefault();\n } else if (document.activeElement === lastFocusElement.value) {\n firstFocusElement.value?.focus();\n e.preventDefault();\n }\n }\n }\n</script>\n\n<template>\n <div\n v-if=\"isModalOpen\"\n ref=\"rootRef\"\n class=\"stash-modal tw-fixed tw-inset-0 tw-overflow-y-auto\"\n :class=\"{\n 'tw-invisible tw-z-behind': !isModalOpen,\n 'tw-visible tw-z-modal': isModalOpen,\n 'lg:tw-flex lg:tw-flex-col lg:tw-justify-center lg:tw-items-center': props.position === 'center',\n }\"\n data-test=\"ll-modal\"\n tabindex=\"0\"\n @keydown.esc=\"dismiss\"\n >\n <Backdrop class=\"stash-modal__backdrop\" @click.stop=\"dismiss\" />\n <div\n aria-modal=\"true\"\n role=\"dialog\"\n :aria-labelledby=\"headerId\"\n class=\"stash-modal__dialog tw-flex tw-flex-col tw-h-screen tw-w-full lg:tw-shadow tw-relative\"\n :class=\"[\n `stash-modal__dialog--size-${props.size}`,\n `stash-modal__dialog--position-${props.position}`,\n {\n 'stash-modal__dialog--is-open': isModalOpen,\n 'stash-modal__dialog--is-drawer': isDrawer,\n 'stash-modal__dialog--is-contrast': props.contrast,\n 'stash-modal__dialog--is-scrollable': props.scrollable,\n 'lg:tw-w-[360px]': props.size === 'narrow',\n 'lg:tw-w-[648px]': props.size === 'medium',\n 'lg:tw-w-[960px]': props.size === 'wide',\n 'lg:tw-h-auto lg:tw-my-0 lg:tw-max-h-[90vh]': props.position === 'center',\n 'lg:tw-h-screen lg:tw-absolute': isDrawer,\n 'lg:tw-left-0': props.position === 'left',\n 'lg:tw-right-0': props.position === 'right',\n },\n ]\"\n @click.stop\n >\n <header\n v-if=\"!props.hideHeader\"\n data-test=\"stash-modal__header\"\n class=\"stash-modal__header tw-bg-purple tw-h-12 tw-grid tw-place-items-center\"\n :class=\"{ 'lg:tw-rounded-t': !isDrawer }\"\n >\n <div class=\"tw-flex tw-place-items-center\">\n <!-- @slot Adds an action to the left side of the header bar. An example usage is a modal with multiple pages and a back button can be inserted here -->\n <slot name=\"headerAction\"></slot>\n </div>\n\n <h3 v-if=\"props.title\" :id=\"headerId\" class=\"tw-text-white tw-flex-1 tw-leading-6 tw-m-0\">\n {{ props.title }}\n </h3>\n\n <Button\n v-if=\"!props.hideClose\"\n icon\n data-test=\"ll-modal-close\"\n :title=\"t('ll.closeModal')\"\n type=\"button\"\n @click=\"dismiss\"\n >\n <Icon class=\"tw-text-white\" name=\"close\" />\n </Button>\n </header>\n\n <Button\n v-if=\"!props.hideClose && props.hideHeader\"\n class=\"tw-absolute tw-right-0 tw-top-0 tw-z-10\"\n icon\n data-test=\"ll-modal-close\"\n type=\"button\"\n :title=\"t('ll.closeModal')\"\n @click=\"dismiss\"\n >\n <Icon class=\"tw-drop-shadow-md\" name=\"close\" :class=\"[props.closeButtonColorClass]\" />\n </Button>\n\n <div\n v-if=\"!!slots['featured-content']\"\n class=\"tw-relative stash-modal__featured-content\"\n :class=\"{\n 'tw-rounded-t': props.hideHeader,\n }\"\n >\n <slot name=\"featured-content\"></slot>\n </div>\n\n <div\n class=\"stash-modal__body tw-flex-1 tw-overflow-y-auto\"\n :class=\"[\n {\n 'tw-p-3 lg:tw-p-6': !props.disableBodyPadding,\n 'lg:tw-overflow-y-visible': !props.scrollable && !isDrawer,\n 'lg:tw-rounded-b': !hasFooterContent && !isDrawer,\n 'tw-bg-white': !props.contrast,\n 'tw-bg-ice-200': props.contrast,\n },\n ]\"\n data-test=\"stash-modal__body\"\n >\n <slot></slot>\n </div>\n\n <footer\n v-if=\"hasFooterContent\"\n class=\"stash-modal__footer tw-bg-ice-100 tw-border-ice-500 tw-p-3 lg:tw-p-6\"\n :class=\"{ 'lg:tw-rounded-b': !isDrawer }\"\n >\n <!-- @slot Overrides the whole footer section. Used for rendering custom footers with more than 2 actions. If defined, \"actions\" slot will get ignored. -->\n <slot name=\"footer\">\n <div class=\"stash-modal__footer__actions tw-flex tw-flex-col tw-justify-end lg:tw-flex-row\">\n <!-- @slot Modal footer actions, supports rendering up to 2 `<Button>` children -->\n <slot name=\"actions\"></slot>\n </div>\n </slot>\n </footer>\n </div>\n </div>\n</template>\n\n<style scoped>\n .stash-modal__header {\n grid-template-columns: 48px 1fr 48px;\n }\n\n .stash-modal__footer__actions > :deep(.stash-button):nth-of-type(1) {\n order: 2;\n }\n\n .stash-modal__footer__actions > :deep(.stash-button):nth-of-type(2) {\n margin-bottom: var(--ll-space-2);\n order: 1;\n }\n\n @media screen and (width >= 961px) {\n .stash-modal__footer__actions > :deep(.stash-button):nth-of-type(1) {\n order: 1;\n }\n\n .stash-modal__footer__actions > :deep(.stash-button):nth-of-type(2) {\n margin-bottom: 0;\n order: 2;\n }\n\n .stash-modal__footer__actions > :deep(.stash-button + .stash-button) {\n margin-left: var(--grid-gutter);\n }\n }\n\n .stash-modal__featured-content > :deep(*) {\n border-radius: inherit;\n }\n</style>\n"],"names":["ModalSize","ModalPosition","slots","useSlots","rootRef","ref","lastExternalFocusedElement","focusElements","firstFocusElement","lastFocusElement","initialPageScrollingElementStyle","headerId","uniqueId","hasFooterContent","computed","isModalOpen","props","isDrawer","getPageScrollingElement","watch","onBeforeUnmount","handleTab","_a","dismiss","emit","FOCUS_ELEMENTS_SELECTOR","e","_b"],"mappings":";;;;;;;;;;;;;;;AAAY,IAAAA,sBAAAA,OACVA,EAAA,SAAS,UACTA,EAAA,SAAS,UACTA,EAAA,OAAO,QAHGA,IAAAA,KAAA,CAAA,CAAA,GAQAC,sBAAAA,OACVA,EAAA,SAAS,UACTA,EAAA,OAAO,QACPA,EAAA,QAAQ,SAHEA,IAAAA,KAAA,CAAA,CAAA;;;;;;;;;;;;;;;;;;;;iBCoGJC,IAAQC,KAERC,IAAUC,KACVC,IAA6BD,KAC7BE,IAAgBF,EAAmB,CAAA,CAAE,GACrCG,IAAoBH,KACpBI,IAAmBJ,KACnBK,IAAmCL,EAAI,EAAE,QAAQ,IAAI,UAAU,IAAI,GACnEM,IAAWC,EAAS,eAAe,GACnCC,IAAmBC,EAAS,MAAM,CAAC,CAACZ,EAAM,WAAW,CAAC,CAACA,EAAM,MAAM,GACnEa,IAAcD,EAAS,MAAME,EAAM,QAAQA,EAAM,MAAM,GACvDC,IAAWH,EAAS,MAAME,EAAM,aAAa,UAAUA,EAAM,aAAa,OAAO;AAEvF,aAASE,IAA0B;AACzB,aAAA,SAAS,oBAAoB,SAAS;AAAA,IAChD;AAEA,IAAAC;AAAA,MACEJ;AAAA,MACA,MAAM;AACJ,QAAIA,EAAY,SACP,OAAA,OAAOL,EAAiC,OAAO;AAAA,UACpD,QAAQQ,IAA0B,MAAM;AAAA,UACxC,UAAUA,IAA0B,MAAM;AAAA,QAAA,CAC3C,GAGI,OAAA,OAAOA,EAAwB,EAAE,OAAO;AAAA,UAC7C,UAAUH,EAAY,QAAQ,WAAWL,EAAiC,MAAM;AAAA;AAAA,UAChF,QAAQK,EAAY,QAAQ,SAASL,EAAiC,MAAM;AAAA;AAAA,QAAA,CAC7E;AAAA,MACH;AAAA,MACA,EAAE,WAAW,GAAK;AAAA,IAAA,GAGpBU,EAAgB,MAAM;;AAEb,aAAA,OAAOF,EAAwB,EAAE,OAAO;AAAA,QAC7C,UAAUR,EAAiC,MAAM;AAAA,QACjD,QAAQA,EAAiC,MAAM;AAAA,MAAA,CAChD,GAGQ,SAAA,oBAAoB,WAAWW,CAAS,IACjDC,IAAAhB,EAA2B,UAA3B,QAAAgB,EAAkC;AAAA,IAAM,CACzC;AAED,aAASC,IAAU;AACjB,MAAAC,EAAK,eAAe,EAAK,GACzBA,EAAK,kBAAkB,EAAK,GAC5BA,EAAK,SAAS;AAAA,IAChB;AAGA,IAAAL,EAAMf,GAAS,MAAM;AACf,MAACA,EAAQ,UAIbE,EAA2B,QAAQ,SAAS,eAC5CF,EAAQ,MAAM,SAEdG,EAAc,QAAQ,MAAM,KAAKH,EAAQ,MAAM,iBAA8BqB,CAAuB,CAAC,GACnFjB,EAAA,QAAQD,EAAc,MAAM,CAAC,GAC/CE,EAAiB,QAAQF,EAAc,MAAMA,EAAc,MAAM,SAAS,CAAC,GAClE,SAAA,iBAAiB,WAAWc,CAAS;AAAA,IAAA,CAC/C;AAED,aAASA,EAAUK,GAAG;;AAChB,MAAAA,EAAE,QAAQ,UACRA,EAAE,YAAY,SAAS,kBAAkBlB,EAAkB,UAC7Dc,IAAAb,EAAiB,UAAjB,QAAAa,EAAwB,SACxBI,EAAE,eAAe,KACR,SAAS,kBAAkBjB,EAAiB,WACrDkB,IAAAnB,EAAkB,UAAlB,QAAAmB,EAAyB,SACzBD,EAAE,eAAe;AAAA,IAGvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"Modal.js","sources":["../src/components/Modal/Modal.types.ts","../src/components/Modal/Modal.vue"],"sourcesContent":["export enum ModalSize {\n Narrow = 'narrow',\n Medium = 'medium',\n Wide = 'wide',\n}\n\nexport type ModalSizes = `${ModalSize}`;\n\nexport enum ModalPosition {\n Center = 'center',\n Left = 'left',\n Right = 'right',\n}\n\nexport type ModalPositions = `${ModalPosition}`;\n","<script lang=\"ts\">\n import { ModalPositions, ModalSizes } from './Modal.types';\n\n export * from './Modal.types';\n\n export interface ModalProps {\n /**\n * Hides the \"close\" button\n */\n hideClose?: boolean;\n\n /**\n * Opens the modal when truthy; hides the modal when falsy.\n * @deprecated Use `isOpen` instead\n */\n open?: boolean;\n\n /**\n * Opens the modal when truthy; hides the modal when falsy.\n */\n isOpen?: boolean;\n\n /**\n * Use v-model:is-open or :is-open instead of :model-value and v-model.\n * @deprecated\n */\n modelValue?: boolean;\n\n /**\n * Sets a preset max-width on the modal.\n * Options: default (648px), narrow (360px), wide (960px)\n */\n size?: ModalSizes;\n\n /**\n * Should the modal be scrollable within the content area. This prop is treated as `true` when the `position` prop is set to \"left\" or \"right\".\n */\n scrollable?: boolean;\n\n /**\n * Gives the modal body have a light gray background\n */\n contrast?: boolean;\n\n /**\n * Text to display in the modal header\n */\n title?: string;\n\n /**\n * Disables the default padding in the modal body.\n */\n disableBodyPadding?: boolean;\n\n /**\n * The position on the screen to display the modal.\n */\n position?: ModalPositions;\n\n /**\n * Hide the header. Typically used with the featuredContent slot to display a graphic and create a \"promo\" modal.\n */\n hideHeader?: boolean;\n\n /**\n * Add classes to the close button. This can be used with the hideHeader prop and featuredContent slot to\n * accommodate images with different color backgrounds.\n */\n closeButtonColorClass?: string;\n }\n</script>\n\n<script setup lang=\"ts\">\n import uniqueId from 'lodash-es/uniqueId';\n import { computed, onBeforeUnmount, ref, useSlots, watch } from 'vue';\n\n import { FOCUS_ELEMENTS_SELECTOR } from '../../constants';\n import { t } from '../../locale';\n import Backdrop from '../Backdrop/Backdrop.vue';\n import Button from '../Button/Button.vue';\n import Icon from '../Icon/Icon.vue';\n\n defineOptions({ name: 'll-modal' });\n\n const props = withDefaults(defineProps<ModalProps>(), {\n hideClose: false,\n open: false,\n isOpen: false,\n modelValue: false,\n size: 'medium',\n scrollable: false,\n contrast: false,\n title: '',\n position: 'center',\n hideHeader: false,\n closeButtonColorClass: 'tw-text-white/50',\n });\n\n const emit =\n defineEmits<{\n /**\n * @deprecated Use the `update:is-open` event instead\n */\n (e: 'update:open', isOpen?: boolean): void;\n (e: 'update:is-open', isOpen?: boolean): void;\n (e: 'dismiss'): void;\n }>();\n\n const slots = useSlots();\n\n const rootRef = ref<HTMLElement>();\n const lastExternalFocusedElement = ref<HTMLElement>();\n const focusElements = ref<HTMLElement[]>([]);\n const firstFocusElement = ref<HTMLElement>();\n const lastFocusElement = ref<HTMLElement>();\n const initialPageScrollingElementStyle = ref({ height: '', overflow: '' });\n const headerId = uniqueId('modal-header-');\n const hasFooterContent = computed(() => !!slots.actions || !!slots.footer);\n const isModalOpen = computed(() => props.open || props.isOpen);\n const isDrawer = computed(() => props.position === 'left' || props.position === 'right');\n\n function getPageScrollingElement() {\n return (document.scrollingElement || document.body) as HTMLElement;\n }\n\n watch(\n isModalOpen,\n () => {\n if (isModalOpen.value) {\n Object.assign(initialPageScrollingElementStyle.value, {\n height: getPageScrollingElement().style.height,\n overflow: getPageScrollingElement().style.overflow,\n });\n }\n\n Object.assign(getPageScrollingElement().style, {\n overflow: isModalOpen.value ? 'hidden' : initialPageScrollingElementStyle.value.overflow, // Prevents page from scrolling when modal is open\n height: isModalOpen.value ? '100%' : initialPageScrollingElementStyle.value.height, // Ensures the backdrop covers the entire page when modal is open; see https://github.com/LeafLink/stash/pull/713#issuecomment-1184602535\n });\n },\n { immediate: true },\n );\n\n onBeforeUnmount(() => {\n // In cases where the watchEffect for isModalOpen isn't triggered while closing/nagivating away from modal, this ensures scrolling returns to normal\n Object.assign(getPageScrollingElement().style, {\n overflow: initialPageScrollingElementStyle.value.overflow,\n height: initialPageScrollingElementStyle.value.height,\n });\n\n // Clear focus trap tab listener\n document.removeEventListener('keydown', handleTab);\n lastExternalFocusedElement.value?.focus();\n });\n\n function dismiss() {\n emit('update:open', false);\n emit('update:is-open', false);\n emit('dismiss');\n }\n\n // This watcher ensures the Tab key cycles through focusable elements within the modal.\n watch(rootRef, () => {\n if (!rootRef.value) {\n return;\n }\n\n lastExternalFocusedElement.value = document.activeElement as HTMLElement;\n rootRef.value.focus();\n\n focusElements.value = Array.from(rootRef.value.querySelectorAll<HTMLElement>(FOCUS_ELEMENTS_SELECTOR));\n firstFocusElement.value = focusElements.value[0];\n lastFocusElement.value = focusElements.value[focusElements.value.length - 1];\n document.addEventListener('keydown', handleTab);\n });\n\n function handleTab(e) {\n if (e.key === 'Tab') {\n if (e.shiftKey && document.activeElement === firstFocusElement.value) {\n lastFocusElement.value?.focus();\n e.preventDefault();\n } else if (document.activeElement === lastFocusElement.value) {\n firstFocusElement.value?.focus();\n e.preventDefault();\n }\n }\n }\n</script>\n\n<template>\n <div\n v-if=\"isModalOpen\"\n ref=\"rootRef\"\n class=\"stash-modal tw-fixed tw-inset-0 tw-overflow-y-auto\"\n :class=\"{\n 'tw-invisible tw-z-behind': !isModalOpen,\n 'tw-visible tw-z-modal': isModalOpen,\n 'lg:tw-flex lg:tw-flex-col lg:tw-justify-center lg:tw-items-center': props.position === 'center',\n }\"\n data-test=\"ll-modal\"\n tabindex=\"0\"\n @keydown.esc=\"dismiss\"\n >\n <Backdrop class=\"stash-modal__backdrop\" @click.stop=\"dismiss\" />\n <div\n aria-modal=\"true\"\n role=\"dialog\"\n :aria-labelledby=\"headerId\"\n class=\"stash-modal__dialog tw-flex tw-flex-col tw-h-screen tw-w-full lg:tw-shadow tw-relative\"\n :class=\"[\n `stash-modal__dialog--size-${props.size}`,\n `stash-modal__dialog--position-${props.position}`,\n {\n 'stash-modal__dialog--is-open': isModalOpen,\n 'stash-modal__dialog--is-drawer': isDrawer,\n 'stash-modal__dialog--is-contrast': props.contrast,\n 'stash-modal__dialog--is-scrollable': props.scrollable,\n 'lg:tw-w-[360px]': props.size === 'narrow',\n 'lg:tw-w-[648px]': props.size === 'medium',\n 'lg:tw-w-[960px]': props.size === 'wide',\n 'lg:tw-h-auto lg:tw-my-0 lg:tw-max-h-[90vh]': props.position === 'center',\n 'lg:tw-h-screen lg:tw-absolute': isDrawer,\n 'lg:tw-left-0': props.position === 'left',\n 'lg:tw-right-0': props.position === 'right',\n },\n ]\"\n @click.stop\n >\n <header\n v-if=\"!props.hideHeader\"\n data-test=\"stash-modal__header\"\n class=\"stash-modal__header tw-bg-purple tw-h-12 tw-grid tw-place-items-center\"\n :class=\"{ 'lg:tw-rounded-t': !isDrawer }\"\n >\n <div class=\"tw-flex tw-place-items-center\">\n <!-- @slot Adds an action to the left side of the header bar. An example usage is a modal with multiple pages and a back button can be inserted here -->\n <slot name=\"headerAction\"></slot>\n </div>\n\n <h3 v-if=\"props.title\" :id=\"headerId\" class=\"tw-text-white tw-flex-1 tw-leading-6 tw-m-0\">\n {{ props.title }}\n </h3>\n\n <Button\n v-if=\"!props.hideClose\"\n icon\n data-test=\"ll-modal-close\"\n :title=\"t('ll.closeModal')\"\n type=\"button\"\n @click=\"dismiss\"\n >\n <Icon class=\"tw-text-white\" name=\"close\" />\n </Button>\n </header>\n\n <Button\n v-if=\"!props.hideClose && props.hideHeader\"\n class=\"tw-absolute tw-right-0 tw-top-0 tw-z-10\"\n icon\n data-test=\"ll-modal-close\"\n type=\"button\"\n :title=\"t('ll.closeModal')\"\n @click=\"dismiss\"\n >\n <Icon class=\"tw-drop-shadow-md\" name=\"close\" :class=\"[props.closeButtonColorClass]\" />\n </Button>\n\n <div\n v-if=\"!!slots['featured-content']\"\n class=\"tw-relative stash-modal__featured-content\"\n :class=\"{\n 'tw-rounded-t': props.hideHeader,\n }\"\n >\n <slot name=\"featured-content\"></slot>\n </div>\n\n <div\n class=\"stash-modal__body tw-flex-1 tw-overflow-y-auto\"\n :class=\"[\n {\n 'tw-p-3 lg:tw-p-6': !props.disableBodyPadding,\n 'lg:tw-overflow-y-visible': !props.scrollable && !isDrawer,\n 'lg:tw-rounded-b': !hasFooterContent && !isDrawer,\n 'tw-bg-white': !props.contrast,\n 'tw-bg-ice-200': props.contrast,\n },\n ]\"\n data-test=\"stash-modal__body\"\n >\n <slot></slot>\n </div>\n\n <footer\n v-if=\"hasFooterContent\"\n class=\"stash-modal__footer tw-bg-ice-100 tw-border-ice-500 tw-p-3 lg:tw-p-6\"\n :class=\"{ 'lg:tw-rounded-b': !isDrawer }\"\n >\n <!-- @slot Overrides the whole footer section. Used for rendering custom footers with more than 2 actions. If defined, \"actions\" slot will get ignored. -->\n <slot name=\"footer\">\n <div class=\"stash-modal__footer__actions tw-flex tw-flex-col tw-justify-end lg:tw-flex-row\">\n <!-- @slot Modal footer actions, supports rendering up to 2 `<Button>` children -->\n <slot name=\"actions\"></slot>\n </div>\n </slot>\n </footer>\n </div>\n </div>\n</template>\n\n<style scoped>\n .stash-modal__header {\n grid-template-columns: 48px 1fr 48px;\n }\n\n .stash-modal__footer__actions > :deep(.stash-button):nth-of-type(1) {\n order: 2;\n }\n\n .stash-modal__footer__actions > :deep(.stash-button):nth-of-type(2) {\n margin-bottom: var(--ll-space-2);\n order: 1;\n }\n\n @media screen and (width >= 961px) {\n .stash-modal__footer__actions > :deep(.stash-button):nth-of-type(1) {\n order: 1;\n }\n\n .stash-modal__footer__actions > :deep(.stash-button):nth-of-type(2) {\n margin-bottom: 0;\n order: 2;\n }\n\n .stash-modal__footer__actions > :deep(.stash-button + .stash-button) {\n margin-left: var(--grid-gutter);\n }\n }\n\n .stash-modal__featured-content > :deep(*) {\n border-radius: inherit;\n }\n</style>\n"],"names":["ModalSize","ModalPosition","slots","useSlots","rootRef","ref","lastExternalFocusedElement","focusElements","firstFocusElement","lastFocusElement","initialPageScrollingElementStyle","headerId","uniqueId","hasFooterContent","computed","isModalOpen","props","isDrawer","getPageScrollingElement","watch","onBeforeUnmount","handleTab","_a","dismiss","emit","FOCUS_ELEMENTS_SELECTOR","e","_b"],"mappings":";;;;;;;;;;;;AAAY,IAAAA,sBAAAA,OACVA,EAAA,SAAS,UACTA,EAAA,SAAS,UACTA,EAAA,OAAO,QAHGA,IAAAA,KAAA,CAAA,CAAA,GAQAC,sBAAAA,OACVA,EAAA,SAAS,UACTA,EAAA,OAAO,QACPA,EAAA,QAAQ,SAHEA,IAAAA,KAAA,CAAA,CAAA;;;;;;;;;;;;;;;;;;;;iBCoGJC,IAAQC,KAERC,IAAUC,KACVC,IAA6BD,KAC7BE,IAAgBF,EAAmB,CAAA,CAAE,GACrCG,IAAoBH,KACpBI,IAAmBJ,KACnBK,IAAmCL,EAAI,EAAE,QAAQ,IAAI,UAAU,IAAI,GACnEM,IAAWC,EAAS,eAAe,GACnCC,IAAmBC,EAAS,MAAM,CAAC,CAACZ,EAAM,WAAW,CAAC,CAACA,EAAM,MAAM,GACnEa,IAAcD,EAAS,MAAME,EAAM,QAAQA,EAAM,MAAM,GACvDC,IAAWH,EAAS,MAAME,EAAM,aAAa,UAAUA,EAAM,aAAa,OAAO;AAEvF,aAASE,IAA0B;AACzB,aAAA,SAAS,oBAAoB,SAAS;AAAA,IAChD;AAEA,IAAAC;AAAA,MACEJ;AAAA,MACA,MAAM;AACJ,QAAIA,EAAY,SACP,OAAA,OAAOL,EAAiC,OAAO;AAAA,UACpD,QAAQQ,IAA0B,MAAM;AAAA,UACxC,UAAUA,IAA0B,MAAM;AAAA,QAAA,CAC3C,GAGI,OAAA,OAAOA,EAAwB,EAAE,OAAO;AAAA,UAC7C,UAAUH,EAAY,QAAQ,WAAWL,EAAiC,MAAM;AAAA;AAAA,UAChF,QAAQK,EAAY,QAAQ,SAASL,EAAiC,MAAM;AAAA;AAAA,QAAA,CAC7E;AAAA,MACH;AAAA,MACA,EAAE,WAAW,GAAK;AAAA,IAAA,GAGpBU,EAAgB,MAAM;;AAEb,aAAA,OAAOF,EAAwB,EAAE,OAAO;AAAA,QAC7C,UAAUR,EAAiC,MAAM;AAAA,QACjD,QAAQA,EAAiC,MAAM;AAAA,MAAA,CAChD,GAGQ,SAAA,oBAAoB,WAAWW,CAAS,IACjDC,IAAAhB,EAA2B,UAA3B,QAAAgB,EAAkC;AAAA,IAAM,CACzC;AAED,aAASC,IAAU;AACjB,MAAAC,EAAK,eAAe,EAAK,GACzBA,EAAK,kBAAkB,EAAK,GAC5BA,EAAK,SAAS;AAAA,IAChB;AAGA,IAAAL,EAAMf,GAAS,MAAM;AACf,MAACA,EAAQ,UAIbE,EAA2B,QAAQ,SAAS,eAC5CF,EAAQ,MAAM,SAEdG,EAAc,QAAQ,MAAM,KAAKH,EAAQ,MAAM,iBAA8BqB,CAAuB,CAAC,GACnFjB,EAAA,QAAQD,EAAc,MAAM,CAAC,GAC/CE,EAAiB,QAAQF,EAAc,MAAMA,EAAc,MAAM,SAAS,CAAC,GAClE,SAAA,iBAAiB,WAAWc,CAAS;AAAA,IAAA,CAC/C;AAED,aAASA,EAAUK,GAAG;;AAChB,MAAAA,EAAE,QAAQ,UACRA,EAAE,YAAY,SAAS,kBAAkBlB,EAAkB,UAC7Dc,IAAAb,EAAiB,UAAjB,QAAAa,EAAwB,SACxBI,EAAE,eAAe,KACR,SAAS,kBAAkBjB,EAAiB,WACrDkB,IAAAnB,EAAkB,UAAlB,QAAAmB,EAAyB,SACzBD,EAAE,eAAe;AAAA,IAGvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
package/dist/Modals.js CHANGED
@@ -1,38 +1,28 @@
1
- import { defineComponent as _, openBlock as r, createBlock as i, TransitionGroup as u, withCtx as p, createElementBlock as d, Fragment as f, renderList as c, unref as v, resolveDynamicComponent as M, mergeProps as L, toHandlers as g, createSlots as k, createElementVNode as y } from "vue";
1
+ import { defineComponent as p, openBlock as s, createBlock as c, TransitionGroup as d, withCtx as a, createElementBlock as m, Fragment as f, renderList as l, unref as v, resolveDynamicComponent as M, mergeProps as L, toHandlers as g, createSlots as k, createElementVNode as y } from "vue";
2
2
  import h from "./useModals.js";
3
3
  import { _ as B } from "./_plugin-vue_export-helper-dad06003.js";
4
- import "./merge-b14fad9d.js";
5
- import "./_Uint8Array-06e4d083.js";
6
- import "./isArrayLike-09233e52.js";
7
- import "./isObjectLike-54341556.js";
8
- import "./_MapCache-65811284.js";
9
- import "./_baseAssignValue-dd1499b4.js";
10
- import "./identity-452d03fd.js";
11
- import "./_initCloneObject-161353b9.js";
12
- import "./_getPrototype-3e6fccd6.js";
13
- import "./_overArg-6d920d99.js";
14
- import "./isPlainObject-55c7f916.js";
15
- const C = ["innerHTML"], H = /* @__PURE__ */ _({
4
+ import "lodash-es/merge";
5
+ const C = ["innerHTML"], H = /* @__PURE__ */ p({
16
6
  __name: "Modals",
17
7
  setup(T) {
18
8
  const t = h();
19
- function m(s, o) {
9
+ function _(n, o) {
20
10
  var e;
21
- return (e = s.options) != null && e.disableDefaultListeners ? {} : {
11
+ return (e = n.options) != null && e.disableDefaultListeners ? {} : {
22
12
  dismiss: () => t.close({ index: o }),
23
13
  close: () => t.close({ index: o }),
24
14
  cancel: () => t.close({ index: o })
25
15
  };
26
16
  }
27
- return (s, o) => (r(), i(u, { name: "modals" }, {
28
- default: p(() => [
29
- (r(!0), d(f, null, c(v(t).active, (e, n) => (r(), i(M(e.component), L({
30
- key: `modal-${n}`
31
- }, e.attributes, { "is-open": !0 }, g(m(e, n))), k({ _: 2 }, [
32
- c(e.slots, (a, l) => ({
33
- name: l,
34
- fn: p(() => [
35
- y("div", { innerHTML: a }, null, 8, C)
17
+ return (n, o) => (s(), c(d, { name: "modals" }, {
18
+ default: a(() => [
19
+ (s(!0), m(f, null, l(v(t).active, (e, r) => (s(), c(M(e.component), L({
20
+ key: `modal-${r}`
21
+ }, e.attributes, { "is-open": !0 }, g(_(e, r))), k({ _: 2 }, [
22
+ l(e.slots, (i, u) => ({
23
+ name: u,
24
+ fn: a(() => [
25
+ y("div", { innerHTML: i }, null, 8, C)
36
26
  ])
37
27
  }))
38
28
  ]), 1040))), 128))
@@ -41,8 +31,8 @@ const C = ["innerHTML"], H = /* @__PURE__ */ _({
41
31
  }));
42
32
  }
43
33
  });
44
- const q = /* @__PURE__ */ B(H, [["__scopeId", "data-v-d5d094e6"]]);
34
+ const w = /* @__PURE__ */ B(H, [["__scopeId", "data-v-d5d094e6"]]);
45
35
  export {
46
- q as default
36
+ w as default
47
37
  };
48
38
  //# sourceMappingURL=Modals.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Modals.js","sources":["../src/components/Modals/Modals.vue"],"sourcesContent":["<script lang=\"ts\" setup>\n import { DeepReadonly } from 'vue';\n\n import useModals, { type Modal } from '../../composables/useModals/useModals';\n\n const modals = useModals();\n\n function getListeners(modal: DeepReadonly<Modal>, index: number) {\n if (modal.options?.disableDefaultListeners) {\n return {};\n }\n\n return {\n dismiss: () => modals.close({ index }),\n close: () => modals.close({ index }),\n cancel: () => modals.close({ index }),\n };\n }\n</script>\n\n<template>\n <TransitionGroup name=\"modals\">\n <component\n :is=\"modal.component\"\n v-for=\"(modal, index) in modals.active\"\n :key=\"`modal-${index}`\"\n v-bind=\"modal.attributes\"\n :is-open=\"true\"\n v-on=\"getListeners(modal, index)\"\n >\n <template v-for=\"(value, name) in modal.slots\" :key=\"name\" #[name]>\n <div v-html=\"value\" />\n </template>\n </component>\n </TransitionGroup>\n</template>\n\n<style scoped>\n .modals-enter-active,\n .modals-leave-active {\n --swing-timing-function: cubic-bezier(0.25, 0.8, 0.5, 1); /* \"swing\" from the $transition sass map */\n transition: opacity 165ms var(--swing-timing-function);\n }\n\n .modals-enter-from,\n .modals-leave-to {\n opacity: 0;\n }\n\n .modals-enter-active :deep(.stash-modal__dialog--position-center),\n .modals-leave-active :deep(.stash-modal__dialog--position-center) {\n transition: transform 165ms var(--swing-timing-function);\n }\n\n .modals-enter-from :deep(.stash-modal__dialog--position-center),\n .modals-leave-to :deep(.stash-modal__dialog--position-center) {\n transform: translateY(20px);\n }\n\n .modals-enter-active :deep(.stash-modal__dialog--is-drawer),\n .modals-leave-active :deep(.stash-modal__dialog--is-drawer) {\n transition: transform 165ms var(--swing-timing-function);\n }\n\n .modals-enter-from :deep(.stash-modal__dialog--position-left),\n .modals-leave-to :deep(.stash-modal__dialog--position-left) {\n transform: translateX(-50px);\n }\n\n .modals-enter-from :deep(.stash-modal__dialog--position-right),\n .modals-leave-to :deep(.stash-modal__dialog--position-right) {\n transform: translateX(50px);\n }\n</style>\n"],"names":["modals","useModals","getListeners","modal","index","_a"],"mappings":";;;;;;;;;;;;;;;;;AAKE,UAAMA,IAASC;AAEN,aAAAC,EAAaC,GAA4BC,GAAe;;AAC3D,cAAAC,IAAAF,EAAM,YAAN,QAAAE,EAAe,0BACV,KAGF;AAAA,QACL,SAAS,MAAML,EAAO,MAAM,EAAE,OAAAI,GAAO;AAAA,QACrC,OAAO,MAAMJ,EAAO,MAAM,EAAE,OAAAI,GAAO;AAAA,QACnC,QAAQ,MAAMJ,EAAO,MAAM,EAAE,OAAAI,GAAO;AAAA,MAAA;AAAA,IAExC;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"Modals.js","sources":["../src/components/Modals/Modals.vue"],"sourcesContent":["<script lang=\"ts\" setup>\n import { DeepReadonly } from 'vue';\n\n import useModals, { type Modal } from '../../composables/useModals/useModals';\n\n const modals = useModals();\n\n function getListeners(modal: DeepReadonly<Modal>, index: number) {\n if (modal.options?.disableDefaultListeners) {\n return {};\n }\n\n return {\n dismiss: () => modals.close({ index }),\n close: () => modals.close({ index }),\n cancel: () => modals.close({ index }),\n };\n }\n</script>\n\n<template>\n <TransitionGroup name=\"modals\">\n <component\n :is=\"modal.component\"\n v-for=\"(modal, index) in modals.active\"\n :key=\"`modal-${index}`\"\n v-bind=\"modal.attributes\"\n :is-open=\"true\"\n v-on=\"getListeners(modal, index)\"\n >\n <template v-for=\"(value, name) in modal.slots\" :key=\"name\" #[name]>\n <div v-html=\"value\" />\n </template>\n </component>\n </TransitionGroup>\n</template>\n\n<style scoped>\n .modals-enter-active,\n .modals-leave-active {\n --swing-timing-function: cubic-bezier(0.25, 0.8, 0.5, 1); /* \"swing\" from the $transition sass map */\n transition: opacity 165ms var(--swing-timing-function);\n }\n\n .modals-enter-from,\n .modals-leave-to {\n opacity: 0;\n }\n\n .modals-enter-active :deep(.stash-modal__dialog--position-center),\n .modals-leave-active :deep(.stash-modal__dialog--position-center) {\n transition: transform 165ms var(--swing-timing-function);\n }\n\n .modals-enter-from :deep(.stash-modal__dialog--position-center),\n .modals-leave-to :deep(.stash-modal__dialog--position-center) {\n transform: translateY(20px);\n }\n\n .modals-enter-active :deep(.stash-modal__dialog--is-drawer),\n .modals-leave-active :deep(.stash-modal__dialog--is-drawer) {\n transition: transform 165ms var(--swing-timing-function);\n }\n\n .modals-enter-from :deep(.stash-modal__dialog--position-left),\n .modals-leave-to :deep(.stash-modal__dialog--position-left) {\n transform: translateX(-50px);\n }\n\n .modals-enter-from :deep(.stash-modal__dialog--position-right),\n .modals-leave-to :deep(.stash-modal__dialog--position-right) {\n transform: translateX(50px);\n }\n</style>\n"],"names":["modals","useModals","getListeners","modal","index","_a"],"mappings":";;;;;;;AAKE,UAAMA,IAASC;AAEN,aAAAC,EAAaC,GAA4BC,GAAe;;AAC3D,cAAAC,IAAAF,EAAM,YAAN,QAAAE,EAAe,0BACV,KAGF;AAAA,QACL,SAAS,MAAML,EAAO,MAAM,EAAE,OAAAI,GAAO;AAAA,QACrC,OAAO,MAAMJ,EAAO,MAAM,EAAE,OAAAI,GAAO;AAAA,QACnC,QAAQ,MAAMJ,EAAO,MAAM,EAAE,OAAAI,GAAO;AAAA,MAAA;AAAA,IAExC;;;;;;;;;;;;;;;;;;;"}
@@ -1,30 +1,20 @@
1
- import { createVNode as r, h as a, render as l } from "vue";
2
- import i from "./Modals.js";
1
+ import { createVNode as l, h as o, render as r } from "vue";
2
+ import n from "./Modals.js";
3
3
  import "./useModals.js";
4
- import "./merge-b14fad9d.js";
5
- import "./_Uint8Array-06e4d083.js";
6
- import "./isArrayLike-09233e52.js";
7
- import "./isObjectLike-54341556.js";
8
- import "./_MapCache-65811284.js";
9
- import "./_baseAssignValue-dd1499b4.js";
10
- import "./identity-452d03fd.js";
11
- import "./_initCloneObject-161353b9.js";
12
- import "./_getPrototype-3e6fccd6.js";
13
- import "./_overArg-6d920d99.js";
14
- import "./isPlainObject-55c7f916.js";
4
+ import "lodash-es/merge";
15
5
  import "./_plugin-vue_export-helper-dad06003.js";
16
- const M = {
17
- install(o, t) {
18
- const e = (t == null ? void 0 : t.mountNodeId) || "stash-modals-mount-node";
19
- let m = document.getElementById(e);
20
- if (!m) {
21
- m = document.createElement("div"), m.id = e, t != null && t.mountNodeClass && m.classList.add(t.mountNodeClass);
22
- const d = r(a(i));
23
- document.body.appendChild(m), d.appContext = o._context, l(d, m);
6
+ const C = {
7
+ install(a, e) {
8
+ const t = (e == null ? void 0 : e.mountNodeId) || "stash-modals-mount-node";
9
+ let d = document.getElementById(t);
10
+ if (!d) {
11
+ d = document.createElement("div"), d.id = t, e != null && e.mountNodeClass && d.classList.add(e.mountNodeClass);
12
+ const m = l(o(n));
13
+ document.body.appendChild(d), m.appContext = a._context, r(m, d);
24
14
  }
25
15
  }
26
16
  };
27
17
  export {
28
- M as default
18
+ C as default
29
19
  };
30
20
  //# sourceMappingURL=ModalsPlugin.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ModalsPlugin.js","sources":["../src/plugins/ModalsPlugin.ts"],"sourcesContent":["import { App, createVNode, h, Plugin, render } from 'vue';\n\nimport Modals from '../components/Modals/Modals.vue';\n\nexport interface ModalsPluginOptions {\n mountNodeClass?: string;\n mountNodeId?: string;\n}\n\nexport default <Plugin>{\n install(app: App, options?: ModalsPluginOptions) {\n const mountNodeId = options?.mountNodeId || 'stash-modals-mount-node';\n let mountNode = document.getElementById(mountNodeId);\n\n if (!mountNode) {\n mountNode = document.createElement('div');\n mountNode.id = mountNodeId;\n\n if (options?.mountNodeClass) {\n mountNode.classList.add(options.mountNodeClass);\n }\n\n const vNode = createVNode(h(Modals));\n document.body.appendChild(mountNode);\n vNode.appContext = app._context;\n\n render(vNode, mountNode);\n }\n },\n};\n"],"names":["ModalsPlugin","app","options","mountNodeId","mountNode","vNode","createVNode","h","Modals","render"],"mappings":";;;;;;;;;;;;;;;AASA,MAAuBA,IAAA;AAAA,EACrB,QAAQC,GAAUC,GAA+B;AACzC,UAAAC,KAAcD,KAAA,gBAAAA,EAAS,gBAAe;AACxC,QAAAE,IAAY,SAAS,eAAeD,CAAW;AAEnD,QAAI,CAACC,GAAW;AACF,MAAAA,IAAA,SAAS,cAAc,KAAK,GACxCA,EAAU,KAAKD,GAEXD,KAAA,QAAAA,EAAS,kBACDE,EAAA,UAAU,IAAIF,EAAQ,cAAc;AAGhD,YAAMG,IAAQC,EAAYC,EAAEC,CAAM,CAAC;AAC1B,eAAA,KAAK,YAAYJ,CAAS,GACnCC,EAAM,aAAaJ,EAAI,UAEvBQ,EAAOJ,GAAOD,CAAS;AAAA,IACzB;AAAA,EACF;AACF;"}
1
+ {"version":3,"file":"ModalsPlugin.js","sources":["../src/plugins/ModalsPlugin.ts"],"sourcesContent":["import { App, createVNode, h, Plugin, render } from 'vue';\n\nimport Modals from '../components/Modals/Modals.vue';\n\nexport interface ModalsPluginOptions {\n mountNodeClass?: string;\n mountNodeId?: string;\n}\n\nexport default <Plugin>{\n install(app: App, options?: ModalsPluginOptions) {\n const mountNodeId = options?.mountNodeId || 'stash-modals-mount-node';\n let mountNode = document.getElementById(mountNodeId);\n\n if (!mountNode) {\n mountNode = document.createElement('div');\n mountNode.id = mountNodeId;\n\n if (options?.mountNodeClass) {\n mountNode.classList.add(options.mountNodeClass);\n }\n\n const vNode = createVNode(h(Modals));\n document.body.appendChild(mountNode);\n vNode.appContext = app._context;\n\n render(vNode, mountNode);\n }\n },\n};\n"],"names":["ModalsPlugin","app","options","mountNodeId","mountNode","vNode","createVNode","h","Modals","render"],"mappings":";;;;;AASA,MAAuBA,IAAA;AAAA,EACrB,QAAQC,GAAUC,GAA+B;AACzC,UAAAC,KAAcD,KAAA,gBAAAA,EAAS,gBAAe;AACxC,QAAAE,IAAY,SAAS,eAAeD,CAAW;AAEnD,QAAI,CAACC,GAAW;AACF,MAAAA,IAAA,SAAS,cAAc,KAAK,GACxCA,EAAU,KAAKD,GAEXD,KAAA,QAAAA,EAAS,kBACDE,EAAA,UAAU,IAAIF,EAAQ,cAAc;AAGhD,YAAMG,IAAQC,EAAYC,EAAEC,CAAM,CAAC;AAC1B,eAAA,KAAK,YAAYJ,CAAS,GACnCC,EAAM,aAAaJ,EAAI,UAEvBQ,EAAOJ,GAAOD,CAAS;AAAA,IACzB;AAAA,EACF;AACF;"}
@@ -3,11 +3,9 @@ import V from "./Button.js";
3
3
  import K from "./Icon.js";
4
4
  import { _ as M } from "./_plugin-vue_export-helper-dad06003.js";
5
5
  import "./Button.vue_used_vue_type_style_index_0_lang.module-b77978d6.js";
6
- import "./Icon.vue_used_vue_type_style_index_0_lang.module-d2507af3.js";
7
- import "./uniqueId-847efe53.js";
8
- import "./toString-7d5bf363.js";
9
- import "./isObjectLike-54341556.js";
6
+ import "lodash-es/uniqueId";
10
7
  import "./index-79ce320f.js";
8
+ import "./Icon.vue_used_vue_type_style_index_0_lang.module-eb359559.js";
11
9
  const N = /* @__PURE__ */ g({
12
10
  name: "ll-obfuscate-text",
13
11
  __name: "ObfuscateText",
@@ -21,7 +19,7 @@ const N = /* @__PURE__ */ g({
21
19
  showToggle: { type: Boolean, default: !1 }
22
20
  },
23
21
  setup(c) {
24
- const i = c, t = d(!1), p = b(), f = h(() => {
22
+ const i = c, t = d(!1), f = b(), p = h(() => {
25
23
  const { showToggle: s, text: e, obfuscateAll: r, lengthToKeep: a, maskChar: l, maskCharCount: n, position: m } = i;
26
24
  if (s && t.value)
27
25
  return e;
@@ -31,10 +29,10 @@ const N = /* @__PURE__ */ g({
31
29
  return m === "end" ? (o = e.substring(0, a), o + l.repeat(n)) : (o = e.substring(e.length - a), l.repeat(n) + o);
32
30
  });
33
31
  return (s, e) => (u(), C("span", null, [
34
- _(x(f.value) + " ", 1),
32
+ _(x(p.value) + " ", 1),
35
33
  s.showToggle ? (u(), T(V, {
36
34
  key: 0,
37
- class: k(v(p)["obfuscation-toggle-button"]),
35
+ class: k(v(f)["obfuscation-toggle-button"]),
38
36
  icon: "",
39
37
  type: "button",
40
38
  onClick: e[0] || (e[0] = (r) => t.value = !t.value)
@@ -54,8 +52,8 @@ const N = /* @__PURE__ */ g({
54
52
  "obfuscation-toggle-button": "_obfuscation-toggle-button_16egb_2"
55
53
  }, O = {
56
54
  $style: A
57
- }, H = /* @__PURE__ */ M(N, [["__cssModules", O]]);
55
+ }, q = /* @__PURE__ */ M(N, [["__cssModules", O]]);
58
56
  export {
59
- H as default
57
+ q as default
60
58
  };
61
59
  //# sourceMappingURL=ObfuscateText.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ObfuscateText.js","sources":["../src/components/ObfuscateText/ObfuscateText.vue"],"sourcesContent":["<script setup lang=\"ts\">\n import { computed, ref, useCssModule } from 'vue';\n\n import Button from '../Button/Button.vue';\n import Icon from '../Icon/Icon.vue';\n\n defineOptions({ name: 'll-obfuscate-text' });\n\n export interface ObfuscateTextProps {\n /**\n * The full text\n */\n text: string;\n\n /**\n * Character to obfuscate text with\n */\n maskChar?: string;\n\n /**\n * The number of masked characters to display\n */\n maskCharCount?: number;\n\n /**\n * Num of characters to keep revealed.\n * Default will obfuscate entire string\n * with length of maskCharCount.\n */\n lengthToKeep?: number;\n\n /**\n * Position to start obfuscating text\n */\n position?: 'start' | 'end';\n /**\n * Whether or not to obfuscate all characters.\n * @deprecated omit the lengthToKeep prop to achieve the same result\n */\n obfuscateAll?: boolean;\n /**\n * Displays a button for toggling text visibility\n */\n showToggle?: boolean;\n }\n\n const isFullTextVisible = ref(false);\n const classes = useCssModule();\n\n const props = withDefaults(defineProps<ObfuscateTextProps>(), {\n maskChar: '•',\n maskCharCount: 10,\n lengthToKeep: 0,\n position: 'start',\n obfuscateAll: false,\n showToggle: false,\n });\n\n const obfuscatedText = computed(() => {\n const { showToggle, text, obfuscateAll, lengthToKeep, maskChar, maskCharCount, position } = props;\n\n if (showToggle && isFullTextVisible.value) {\n return text;\n }\n\n if (obfuscateAll || !lengthToKeep) {\n return maskChar.repeat(maskCharCount);\n }\n\n let charsToKeep;\n\n if (position === 'end') {\n charsToKeep = text.substring(0, lengthToKeep);\n\n return charsToKeep + maskChar.repeat(maskCharCount);\n } else {\n charsToKeep = text.substring(text.length - lengthToKeep);\n\n return maskChar.repeat(maskCharCount) + charsToKeep;\n }\n });\n</script>\n\n<template>\n <span\n >{{ obfuscatedText }}\n <Button\n v-if=\"showToggle\"\n :class=\"classes['obfuscation-toggle-button']\"\n icon\n type=\"button\"\n @click=\"isFullTextVisible = !isFullTextVisible\"\n >\n <Icon\n :name=\"isFullTextVisible ? 'hide' : 'show'\"\n class=\"cursor-pointer\"\n :data-test=\"isFullTextVisible ? 'hide-toggle-icon' : 'show-toggle-icon'\"\n />\n </Button>\n </span>\n</template>\n\n<style module>\n .obfuscation-toggle-button {\n height: auto;\n width: auto;\n padding: 0;\n margin-left: 4px;\n }\n</style>\n"],"names":["isFullTextVisible","ref","classes","useCssModule","obfuscatedText","computed","showToggle","text","obfuscateAll","lengthToKeep","maskChar","maskCharCount","position","props","charsToKeep"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;iBA8CQA,IAAoBC,EAAI,EAAK,GAC7BC,IAAUC,KAWVC,IAAiBC,EAAS,MAAM;AAC9B,YAAA,EAAE,YAAAC,GAAY,MAAAC,GAAM,cAAAC,GAAc,cAAAC,GAAc,UAAAC,GAAU,eAAAC,GAAe,UAAAC,EAAa,IAAAC;AAExF,UAAAP,KAAcN,EAAkB;AAC3B,eAAAO;AAGL,UAAAC,KAAgB,CAACC;AACZ,eAAAC,EAAS,OAAOC,CAAa;AAGlC,UAAAG;AAEJ,aAAIF,MAAa,SACDE,IAAAP,EAAK,UAAU,GAAGE,CAAY,GAErCK,IAAcJ,EAAS,OAAOC,CAAa,MAElDG,IAAcP,EAAK,UAAUA,EAAK,SAASE,CAAY,GAEhDC,EAAS,OAAOC,CAAa,IAAIG;AAAA,IAC1C,CACD;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"ObfuscateText.js","sources":["../src/components/ObfuscateText/ObfuscateText.vue"],"sourcesContent":["<script setup lang=\"ts\">\n import { computed, ref, useCssModule } from 'vue';\n\n import Button from '../Button/Button.vue';\n import Icon from '../Icon/Icon.vue';\n\n defineOptions({ name: 'll-obfuscate-text' });\n\n export interface ObfuscateTextProps {\n /**\n * The full text\n */\n text: string;\n\n /**\n * Character to obfuscate text with\n */\n maskChar?: string;\n\n /**\n * The number of masked characters to display\n */\n maskCharCount?: number;\n\n /**\n * Num of characters to keep revealed.\n * Default will obfuscate entire string\n * with length of maskCharCount.\n */\n lengthToKeep?: number;\n\n /**\n * Position to start obfuscating text\n */\n position?: 'start' | 'end';\n /**\n * Whether or not to obfuscate all characters.\n * @deprecated omit the lengthToKeep prop to achieve the same result\n */\n obfuscateAll?: boolean;\n /**\n * Displays a button for toggling text visibility\n */\n showToggle?: boolean;\n }\n\n const isFullTextVisible = ref(false);\n const classes = useCssModule();\n\n const props = withDefaults(defineProps<ObfuscateTextProps>(), {\n maskChar: '•',\n maskCharCount: 10,\n lengthToKeep: 0,\n position: 'start',\n obfuscateAll: false,\n showToggle: false,\n });\n\n const obfuscatedText = computed(() => {\n const { showToggle, text, obfuscateAll, lengthToKeep, maskChar, maskCharCount, position } = props;\n\n if (showToggle && isFullTextVisible.value) {\n return text;\n }\n\n if (obfuscateAll || !lengthToKeep) {\n return maskChar.repeat(maskCharCount);\n }\n\n let charsToKeep;\n\n if (position === 'end') {\n charsToKeep = text.substring(0, lengthToKeep);\n\n return charsToKeep + maskChar.repeat(maskCharCount);\n } else {\n charsToKeep = text.substring(text.length - lengthToKeep);\n\n return maskChar.repeat(maskCharCount) + charsToKeep;\n }\n });\n</script>\n\n<template>\n <span\n >{{ obfuscatedText }}\n <Button\n v-if=\"showToggle\"\n :class=\"classes['obfuscation-toggle-button']\"\n icon\n type=\"button\"\n @click=\"isFullTextVisible = !isFullTextVisible\"\n >\n <Icon\n :name=\"isFullTextVisible ? 'hide' : 'show'\"\n class=\"cursor-pointer\"\n :data-test=\"isFullTextVisible ? 'hide-toggle-icon' : 'show-toggle-icon'\"\n />\n </Button>\n </span>\n</template>\n\n<style module>\n .obfuscation-toggle-button {\n height: auto;\n width: auto;\n padding: 0;\n margin-left: 4px;\n }\n</style>\n"],"names":["isFullTextVisible","ref","classes","useCssModule","obfuscatedText","computed","showToggle","text","obfuscateAll","lengthToKeep","maskChar","maskCharCount","position","props","charsToKeep"],"mappings":";;;;;;;;;;;;;;;;;;;;;iBA8CQA,IAAoBC,EAAI,EAAK,GAC7BC,IAAUC,KAWVC,IAAiBC,EAAS,MAAM;AAC9B,YAAA,EAAE,YAAAC,GAAY,MAAAC,GAAM,cAAAC,GAAc,cAAAC,GAAc,UAAAC,GAAU,eAAAC,GAAe,UAAAC,EAAa,IAAAC;AAExF,UAAAP,KAAcN,EAAkB;AAC3B,eAAAO;AAGL,UAAAC,KAAgB,CAACC;AACZ,eAAAC,EAAS,OAAOC,CAAa;AAGlC,UAAAG;AAEJ,aAAIF,MAAa,SACDE,IAAAP,EAAK,UAAU,GAAGE,CAAY,GAErCK,IAAcJ,EAAS,OAAOC,CAAa,MAElDG,IAAcP,EAAK,UAAUA,EAAK,SAASE,CAAY,GAEhDC,EAAS,OAAOC,CAAa,IAAIG;AAAA,IAC1C,CACD;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,25 +1,21 @@
1
1
  import { t as N } from "./locale.js";
2
2
  import O from "./Dropdown.js";
3
3
  import A from "./Icon.js";
4
- import { a as D } from "./_MapCache-65811284.js";
4
+ import D from "lodash-es/isFunction";
5
5
  import B from "./Chip.js";
6
- import { resolveComponent as _, openBlock as r, createElementBlock as b, mergeProps as y, createElementVNode as n, normalizeClass as i, toDisplayString as c, Fragment as w, createBlock as m, withCtx as v, createTextVNode as u, createCommentVNode as k, normalizeStyle as S, renderList as I, createVNode as $ } from "vue";
6
+ import { resolveComponent as _, openBlock as r, createElementBlock as b, mergeProps as y, createElementVNode as n, normalizeClass as i, toDisplayString as c, Fragment as w, createBlock as v, withCtx as m, createTextVNode as u, createCommentVNode as k, normalizeStyle as S, renderList as I, createVNode as $ } from "vue";
7
7
  import { _ as C } from "./_plugin-vue_export-helper-dad06003.js";
8
- import "./get-27d90892.js";
9
- import "./isObjectLike-54341556.js";
10
- import "./toString-7d5bf363.js";
8
+ import "lodash-es/get";
11
9
  import "./constants.js";
12
10
  import "./clickoutside.js";
13
11
  import "./utils/calculateElementOverflow.js";
14
12
  import "./utils/helpers.js";
15
- import "./capitalize-667d9f60.js";
16
- import "./_createCompounder-ae01a723.js";
17
- import "./isPlainObject-55c7f916.js";
18
- import "./_getPrototype-3e6fccd6.js";
19
- import "./_overArg-6d920d99.js";
20
- import "./Icon.vue_used_vue_type_style_index_0_lang.module-d2507af3.js";
21
- import "./uniqueId-847efe53.js";
13
+ import "lodash-es/camelCase";
14
+ import "lodash-es/isFinite";
15
+ import "lodash-es/isPlainObject";
16
+ import "lodash-es/uniqueId";
22
17
  import "./index-79ce320f.js";
18
+ import "./Icon.vue_used_vue_type_style_index_0_lang.module-eb359559.js";
23
19
  import "./colors-13e95ebf.js";
24
20
  import "./utils/colorScheme.js";
25
21
  const M = "_link_5hoi4_176", z = "_badge_5hoi4_225", E = {
@@ -119,7 +115,7 @@ const M = "_link_5hoi4_176", z = "_badge_5hoi4_225", E = {
119
115
  }
120
116
  }, V = ["data-id"], F = ["data-id", "onClick"], P = ["href"], T = ["aria-selected", "data-id"], W = ["href"];
121
117
  function R(e, h, t, d, l, a) {
122
- const f = _("ll-chip"), p = _("router-link");
118
+ const f = _("ll-chip"), g = _("router-link");
123
119
  return a.isDisabled ? (r(), b("li", y({
124
120
  key: 0,
125
121
  "aria-disabled": "true",
@@ -129,25 +125,25 @@ function R(e, h, t, d, l, a) {
129
125
  class: i([e.$style.link, { [e.$style["dropdown-link"]]: t.isDropdown }, e.$style["is-disabled"]])
130
126
  }, c(t.label), 3)
131
127
  ], 16, V)) : (r(), b(w, { key: 1 }, [
132
- t.to ? (r(), m(p, {
128
+ t.to ? (r(), v(g, {
133
129
  key: 0,
134
130
  custom: "",
135
131
  to: t.to
136
132
  }, {
137
- default: v(({ route: g, navigate: s }) => {
133
+ default: m(({ route: p, navigate: s }) => {
138
134
  var o;
139
135
  return [
140
136
  n("li", y({
141
137
  role: "tab",
142
138
  "data-id": t.index,
143
- class: [{ [e.$style["is-active"]]: a.hasActiveClass(g.path) }, "cursor-pointer"]
139
+ class: [{ [e.$style["is-active"]]: a.hasActiveClass(p.path) }, "cursor-pointer"]
144
140
  }, e.$attrs, { onClick: s }), [
145
141
  n("a", {
146
142
  class: i([e.$style.link, { [e.$style["dropdown-link"]]: t.isDropdown }]),
147
143
  href: ((o = t.to) == null ? void 0 : o.name) || t.to
148
144
  }, [
149
145
  u(c(t.label) + " ", 1),
150
- t.badge ? (r(), m(f, {
146
+ t.badge ? (r(), v(f, {
151
147
  key: 0,
152
148
  radius: "pill",
153
149
  shade: "main",
@@ -155,7 +151,7 @@ function R(e, h, t, d, l, a) {
155
151
  class: i(e.$style.badge),
156
152
  color: t.badgeColor
157
153
  }, {
158
- default: v(() => [
154
+ default: m(() => [
159
155
  u(c(t.badge), 1)
160
156
  ]),
161
157
  _: 1
@@ -177,7 +173,7 @@ function R(e, h, t, d, l, a) {
177
173
  href: t.href
178
174
  }, [
179
175
  u(c(t.label) + " ", 1),
180
- t.badge ? (r(), m(f, {
176
+ t.badge ? (r(), v(f, {
181
177
  key: 0,
182
178
  radius: "pill",
183
179
  shade: "main",
@@ -185,7 +181,7 @@ function R(e, h, t, d, l, a) {
185
181
  class: i(e.$style.badge),
186
182
  color: t.badgeColor
187
183
  }, {
188
- default: v(() => [
184
+ default: m(() => [
189
185
  u(c(t.badge), 1)
190
186
  ]),
191
187
  _: 1
@@ -288,7 +284,7 @@ const j = {
288
284
  }
289
285
  }, Y = { class: "container" }, Z = ["onClick"];
290
286
  function x(e, h, t, d, l, a) {
291
- const f = _("NavItem"), p = _("ll-icon"), g = _("ll-dropdown");
287
+ const f = _("NavItem"), g = _("ll-icon"), p = _("ll-dropdown");
292
288
  return r(), b("div", Y, [
293
289
  n("nav", {
294
290
  class: i([e.$style.tabs, { [e.$style["is-scrollable"]]: !l.hasIntersectionObserver }])
@@ -300,7 +296,7 @@ function x(e, h, t, d, l, a) {
300
296
  width: `calc(100% - ${l.toggleWidth}px)`
301
297
  })
302
298
  }, [
303
- (r(!0), b(w, null, I(t.items, (s, o) => (r(), m(f, {
299
+ (r(!0), b(w, null, I(t.items, (s, o) => (r(), v(f, {
304
300
  key: o,
305
301
  class: i([e.$style.item, { [e.$style["is-invisible"]]: l.overflowIds.includes(`${o}`) }]),
306
302
  badge: s.badge,
@@ -314,12 +310,12 @@ function x(e, h, t, d, l, a) {
314
310
  disabled: s.disabled
315
311
  }, null, 8, ["class", "badge", "badge-color", "data-id", "href", "index", "is-active", "label", "to", "disabled"]))), 128))
316
312
  ], 6),
317
- $(g, {
313
+ $(p, {
318
314
  ref: "toggle",
319
315
  class: i([e.$style.dropdown, { [e.$style["is-visible"]]: l.overflowIds.length }]),
320
316
  offset: { x: -1 }
321
317
  }, {
322
- toggle: v(({ toggle: s }) => [
318
+ toggle: m(({ toggle: s }) => [
323
319
  n("button", {
324
320
  "aria-haspopup": "true",
325
321
  class: i([e.$style.link, e.$style["dropdown-toggle"]]),
@@ -328,17 +324,17 @@ function x(e, h, t, d, l, a) {
328
324
  onClick: s
329
325
  }, [
330
326
  u(c(l.moreText) + " ", 1),
331
- $(p, {
327
+ $(g, {
332
328
  name: "caret-down",
333
329
  class: i(e.$style["dropdown-icon"])
334
330
  }, null, 8, ["class"])
335
331
  ], 10, Z)
336
332
  ]),
337
- default: v(() => [
333
+ default: m(() => [
338
334
  n("ul", {
339
335
  class: i(e.$style["dropdown-list"])
340
336
  }, [
341
- (r(!0), b(w, null, I(t.items, (s, o) => (r(), m(f, {
337
+ (r(!0), b(w, null, I(t.items, (s, o) => (r(), v(f, {
342
338
  key: o,
343
339
  class: i({ hidden: !l.overflowIds.includes(`${o}`) }),
344
340
  href: s.href,
@@ -358,9 +354,9 @@ function x(e, h, t, d, l, a) {
358
354
  }
359
355
  const ee = {
360
356
  $style: Q
361
- }, Ce = /* @__PURE__ */ C(X, [["render", x], ["__cssModules", ee]]);
357
+ }, we = /* @__PURE__ */ C(X, [["render", x], ["__cssModules", ee]]);
362
358
  export {
363
359
  q as NavItem,
364
- Ce as default
360
+ we as default
365
361
  };
366
362
  //# sourceMappingURL=PageNavigation.js.map