@leaflink/stash 44.0.0-beta.7 → 44.0.0-beta.9

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 (148) hide show
  1. package/README.md +107 -39
  2. package/dist/ActionsDropdown.js +2 -2
  3. package/dist/ActionsDropdown.js.map +1 -1
  4. package/dist/AddressSelect.js +2 -2
  5. package/dist/AppNavigationItem.js +1 -1
  6. package/dist/AppSidebar.js +13 -13
  7. package/dist/AppSidebar.js.map +1 -1
  8. package/dist/Badge.vue.d.ts +1 -1
  9. package/dist/Button.js +1 -1
  10. package/dist/Button.js.map +1 -1
  11. package/dist/Button.vue_used_vue_type_style_index_0_lang.module-63d31dc0.js +17 -0
  12. package/dist/Button.vue_used_vue_type_style_index_0_lang.module-63d31dc0.js.map +1 -0
  13. package/dist/ButtonGroup.js +19 -19
  14. package/dist/ButtonGroup.js.map +1 -1
  15. package/dist/Checkbox.js +57 -46
  16. package/dist/Checkbox.js.map +1 -1
  17. package/dist/Checkbox.vue.d.ts +2 -0
  18. package/dist/Checkbox.vue_used_vue_type_style_index_0_lang.module-fa8d9c06.js +9 -0
  19. package/dist/Checkbox.vue_used_vue_type_style_index_0_lang.module-fa8d9c06.js.map +1 -0
  20. package/dist/ChevronToggle.js +1 -1
  21. package/dist/Copy.js +1 -1
  22. package/dist/CurrencyInput.js +2 -2
  23. package/dist/DataView.js +1 -1
  24. package/dist/DataViewFilters.js +4 -4
  25. package/dist/DataViewSortButton.js +47 -38
  26. package/dist/DataViewSortButton.js.map +1 -1
  27. package/dist/DataViewToolbar.js +2 -2
  28. package/dist/DatePicker.js +8 -8
  29. package/dist/DatePicker.js.map +1 -1
  30. package/dist/DescriptionListTerm.js +1 -1
  31. package/dist/DescriptionListTerm.js.map +1 -1
  32. package/dist/Dialog.js +33 -33
  33. package/dist/Dialog.js.map +1 -1
  34. package/dist/Divider.js +4 -4
  35. package/dist/Divider.js.map +1 -1
  36. package/dist/Expand.js +1 -1
  37. package/dist/{Expand.vue_vue_type_script_setup_true_lang-b6a57ae9.js → Expand.vue_vue_type_script_setup_true_lang-1751f4a6.js} +12 -13
  38. package/dist/Expand.vue_vue_type_script_setup_true_lang-1751f4a6.js.map +1 -0
  39. package/dist/Field.js +2 -2
  40. package/dist/Field.vue.d.ts +1 -1
  41. package/dist/{Field.vue_vue_type_script_setup_true_lang-4483019d.js → Field.vue_vue_type_script_setup_true_lang-42ba3c5a.js} +2 -2
  42. package/dist/Field.vue_vue_type_script_setup_true_lang-42ba3c5a.js.map +1 -0
  43. package/dist/FileUpload.js +7 -7
  44. package/dist/FileUpload.js.map +1 -1
  45. package/dist/FilterChip.js +30 -30
  46. package/dist/FilterChip.js.map +1 -1
  47. package/dist/FilterDropdown.js +2 -2
  48. package/dist/FilterSelect.js +2 -2
  49. package/dist/Filters.js +39 -39
  50. package/dist/Filters.js.map +1 -1
  51. package/dist/HttpError.js +6 -6
  52. package/dist/IconLabel.js +6 -6
  53. package/dist/IconLabel.js.map +1 -1
  54. package/dist/IconLabel.vue.d.ts +1 -1
  55. package/dist/Illustration.js +10 -60
  56. package/dist/Illustration.js.map +1 -1
  57. package/dist/Illustration.vue_vue_type_script_setup_true_lang-d6a94e17.js +56 -0
  58. package/dist/Illustration.vue_vue_type_script_setup_true_lang-d6a94e17.js.map +1 -0
  59. package/dist/Image.js +67 -72
  60. package/dist/Image.js.map +1 -1
  61. package/dist/InlineEdit.js +2 -2
  62. package/dist/Input.js +53 -53
  63. package/dist/Input.js.map +1 -1
  64. package/dist/InputOptions.js +2 -2
  65. package/dist/Label.js +1 -1
  66. package/dist/Label.vue.d.ts +13 -2
  67. package/dist/{Label.vue_vue_type_script_setup_true_lang-2de35913.js → Label.vue_vue_type_script_setup_true_lang-4b02087f.js} +12 -11
  68. package/dist/Label.vue_vue_type_script_setup_true_lang-4b02087f.js.map +1 -0
  69. package/dist/ListItem.js +11 -11
  70. package/dist/ListItem.js.map +1 -1
  71. package/dist/ListItemCell.js +9 -9
  72. package/dist/ListItemCell.js.map +1 -1
  73. package/dist/ListView.js +83 -80
  74. package/dist/ListView.js.map +1 -1
  75. package/dist/Loading.js +17 -10
  76. package/dist/Loading.js.map +1 -1
  77. package/dist/Loading.vue_used_vue_type_style_index_0_lang.module-ef5a3bc6.js +8 -0
  78. package/dist/Loading.vue_used_vue_type_style_index_0_lang.module-ef5a3bc6.js.map +1 -0
  79. package/dist/MenuItem.js +20 -14
  80. package/dist/MenuItem.js.map +1 -1
  81. package/dist/Modal.js +2 -2
  82. package/dist/Modal.js.map +1 -1
  83. package/dist/ObfuscateText.js +30 -32
  84. package/dist/ObfuscateText.js.map +1 -1
  85. package/dist/ObfuscateText.vue.d.ts +1 -1
  86. package/dist/PageContent.js +9 -9
  87. package/dist/PageContent.js.map +1 -1
  88. package/dist/PageHeader.js +22 -22
  89. package/dist/PageHeader.js.map +1 -1
  90. package/dist/Paginate.js +1 -1
  91. package/dist/Paginate.js.map +1 -1
  92. package/dist/Paginate.vue_used_vue_type_style_index_0_lang.module-18343da7.js +11 -0
  93. package/dist/Paginate.vue_used_vue_type_style_index_0_lang.module-18343da7.js.map +1 -0
  94. package/dist/Radio.js +24 -19
  95. package/dist/Radio.js.map +1 -1
  96. package/dist/RadioGroup.js +43 -43
  97. package/dist/RadioGroup.js.map +1 -1
  98. package/dist/SearchBar.js +32 -32
  99. package/dist/SearchBar.js.map +1 -1
  100. package/dist/Select.js +5 -5
  101. package/dist/Select.js.map +1 -1
  102. package/dist/SelectStatus.js +2 -2
  103. package/dist/Switch.js +41 -34
  104. package/dist/Switch.js.map +1 -1
  105. package/dist/Table.js +6 -6
  106. package/dist/Table.keys-cf93df19.js +27 -0
  107. package/dist/{Table.keys-75e99266.js.map → Table.keys-cf93df19.js.map} +1 -1
  108. package/dist/TableCell.js +5 -5
  109. package/dist/TableCell.js.map +1 -1
  110. package/dist/TableHeaderCell.js +32 -32
  111. package/dist/TableHeaderCell.js.map +1 -1
  112. package/dist/TableHeaderRow.js +10 -10
  113. package/dist/TableHeaderRow.js.map +1 -1
  114. package/dist/TableRow.js +6 -6
  115. package/dist/TableRow.js.map +1 -1
  116. package/dist/Textarea.js +49 -41
  117. package/dist/Textarea.js.map +1 -1
  118. package/dist/Toast.js +23 -23
  119. package/dist/Toast.js.map +1 -1
  120. package/dist/components.css +1 -1
  121. package/dist/constants.d.ts +26 -19
  122. package/dist/constants.js +41 -26
  123. package/dist/constants.js.map +1 -1
  124. package/dist/index.js +1 -1
  125. package/dist/tailwind-base.d.ts +16 -16
  126. package/dist/tailwind-base.js +7 -4
  127. package/dist/tailwind-base.js.map +1 -1
  128. package/package.json +1 -1
  129. package/styles/backwards-compat.css +41 -104
  130. package/styles/base.css +258 -112
  131. package/tailwind-base.ts +3 -0
  132. package/dist/Button.vue_used_vue_type_style_index_0_lang.module-b2ee90e6.js +0 -17
  133. package/dist/Button.vue_used_vue_type_style_index_0_lang.module-b2ee90e6.js.map +0 -1
  134. package/dist/Checkbox.vue_vue_type_style_index_0_scoped_dbd26d7f_lang-4ed993c7.js +0 -2
  135. package/dist/Checkbox.vue_vue_type_style_index_0_scoped_dbd26d7f_lang-4ed993c7.js.map +0 -1
  136. package/dist/Expand.vue_vue_type_script_setup_true_lang-b6a57ae9.js.map +0 -1
  137. package/dist/Field.vue_vue_type_script_setup_true_lang-4483019d.js.map +0 -1
  138. package/dist/Label.vue_vue_type_script_setup_true_lang-2de35913.js.map +0 -1
  139. package/dist/Loading.vue_vue_type_style_index_0_scoped_bb8d5f15_lang-4ed993c7.js +0 -2
  140. package/dist/Loading.vue_vue_type_style_index_0_scoped_bb8d5f15_lang-4ed993c7.js.map +0 -1
  141. package/dist/Paginate.vue_used_vue_type_style_index_0_lang.module-1a2084f9.js +0 -11
  142. package/dist/Paginate.vue_used_vue_type_style_index_0_lang.module-1a2084f9.js.map +0 -1
  143. package/dist/Table.keys-75e99266.js +0 -27
  144. package/styles/_base.scss +0 -493
  145. package/styles/elements/_links.scss +0 -32
  146. package/styles/elements/_lists.scss +0 -31
  147. package/styles/elements/_misc.scss +0 -16
  148. package/styles/main.scss +0 -38
package/dist/Textarea.js CHANGED
@@ -1,11 +1,11 @@
1
- import { defineComponent as R, useAttrs as C, useSlots as S, ref as h, computed as k, watch as H, onMounted as I, nextTick as O, onBeforeUnmount as A, openBlock as M, createBlock as P, mergeProps as _, unref as p, createSlots as V, withCtx as x, createElementVNode as q, renderSlot as $ } from "vue";
2
- import j from "lodash-es/uniqueId";
3
- import { _ as D } from "./Field.vue_vue_type_script_setup_true_lang-4483019d.js";
4
- import { _ as F } from "./_plugin-vue_export-helper-dad06003.js";
5
- import "./Label.vue_vue_type_script_setup_true_lang-2de35913.js";
1
+ import { defineComponent as R, useAttrs as M, useSlots as S, useCssModule as k, ref as h, computed as H, watch as O, onMounted as A, nextTick as I, onBeforeUnmount as P, openBlock as V, createBlock as $, mergeProps as x, unref as f, createSlots as q, withCtx as _, createElementVNode as j, renderSlot as D } from "vue";
2
+ import F from "lodash-es/uniqueId";
3
+ import { _ as L } from "./Field.vue_vue_type_script_setup_true_lang-42ba3c5a.js";
4
+ import { _ as N } from "./_plugin-vue_export-helper-dad06003.js";
5
+ import "./Label.vue_vue_type_script_setup_true_lang-4b02087f.js";
6
6
  import "./locale.js";
7
7
  import "lodash-es/get";
8
- const L = ["id", "value"], N = /* @__PURE__ */ R({
8
+ const U = ["id", "value"], W = /* @__PURE__ */ R({
9
9
  name: "ll-textarea",
10
10
  __name: "Textarea",
11
11
  props: {
@@ -19,32 +19,32 @@ const L = ["id", "value"], N = /* @__PURE__ */ R({
19
19
  },
20
20
  emits: ["update:model-value"],
21
21
  setup(g, { emit: w }) {
22
- const n = g, b = j("textarea-"), f = C(), y = S(), c = h(), l = h(), z = k(() => {
23
- const e = { ...f };
22
+ const s = g, b = F("textarea-"), p = M(), y = S(), z = k(), c = h(), l = h(), T = H(() => {
23
+ const e = { ...p };
24
24
  return delete e["data-test"], delete e.class, e;
25
25
  });
26
- H(
27
- () => n.resize,
26
+ O(
27
+ () => s.resize,
28
28
  (e) => {
29
29
  var t;
30
30
  e ? m() : (t = l.value) == null || t.disconnect();
31
31
  }
32
32
  );
33
- const T = (e) => {
33
+ const B = (e) => {
34
34
  w("update:model-value", e.target.value);
35
35
  }, m = () => {
36
36
  l.value || !c.value || (l.value = new ResizeObserver(([e]) => {
37
37
  const { target: t } = e, o = v(c.value) || document.documentElement, { scrollTop: a } = o;
38
- let s = 0;
38
+ let n = 0;
39
39
  if (o === document.documentElement) {
40
- const { top: r, height: i } = B(t), { innerHeight: u } = window;
41
- s = Math.max(r + i - (u + a), 0);
40
+ const { top: r, height: i } = C(t), { innerHeight: u } = window;
41
+ n = Math.max(r + i - (u + a), 0);
42
42
  } else {
43
43
  const { top: r, height: i } = t.getBoundingClientRect(), { top: u } = o.getBoundingClientRect(), { offsetHeight: d } = o, E = r - u;
44
- s = Math.max(E + i - d, 0);
44
+ n = Math.max(E + i - d, 0);
45
45
  }
46
- s && requestAnimationFrame(() => {
47
- o.scrollTop = a + s;
46
+ n && requestAnimationFrame(() => {
47
+ o.scrollTop = a + n;
48
48
  });
49
49
  }), l.value.observe(c.value));
50
50
  }, v = (e) => {
@@ -53,58 +53,66 @@ const L = ["id", "value"], N = /* @__PURE__ */ R({
53
53
  return null;
54
54
  const { overflowY: o } = getComputedStyle(t);
55
55
  return o !== "visible" ? t : t === document.body ? document.documentElement : v(t);
56
- }, B = (e) => {
56
+ }, C = (e) => {
57
57
  const { offsetWidth: t, offsetHeight: o } = e;
58
- let a = 0, s = 0;
58
+ let a = 0, n = 0;
59
59
  const r = function({ offsetLeft: i, offsetTop: u, offsetParent: d }) {
60
- a += i, s += u, d && r(d);
60
+ a += i, n += u, d && r(d);
61
61
  };
62
62
  return r(e), {
63
- top: s,
63
+ top: n,
64
64
  left: a,
65
65
  width: t,
66
66
  height: o
67
67
  };
68
68
  };
69
- return I(async () => {
69
+ return A(async () => {
70
70
  var e;
71
- if (n.value !== null)
71
+ if (s.value !== null)
72
72
  throw new Error("ll-input: use :model-value or v-model instead of :value.");
73
- if (f.onInput)
73
+ if (p.onInput)
74
74
  throw new Error("ll-input: use the @update:model-value event instead of @input");
75
- (typeof n.resize == "boolean" && n.resize || (e = n.resize) != null && e.forceBrowserScroll) && (await O(), m());
76
- }), A(() => {
75
+ (typeof s.resize == "boolean" && s.resize || (e = s.resize) != null && e.forceBrowserScroll) && (await I(), m());
76
+ }), P(() => {
77
77
  var e;
78
78
  (e = l.value) == null || e.disconnect();
79
- }), (e, t) => (M(), P(D, _(n, {
80
- id: p(b),
81
- class: ["stash-textarea", [p(f).class]],
79
+ }), (e, t) => (V(), $(L, x(s, {
80
+ id: f(b),
81
+ class: ["stash-textarea", f(p).root],
82
82
  "data-test": "stash-textarea"
83
- }), V({
84
- default: x(({ fieldId: o, hasError: a }) => [
85
- q("textarea", _({
83
+ }), q({
84
+ default: _(({ fieldId: o, hasError: a }) => [
85
+ j("textarea", x({
86
86
  id: o,
87
87
  ref_key: "textareaRef",
88
88
  ref: c,
89
- class: { "stash-textarea--error": a, "tw-resize-y": n.resize, "tw-resize-none": !n.resize },
90
- value: n.modelValue,
89
+ class: [
90
+ f(z).textarea,
91
+ { "stash-textarea--error": a, "tw-resize-y": s.resize, "tw-resize-none": !s.resize }
92
+ ],
93
+ value: s.modelValue,
91
94
  "data-test": "stash-textarea|textarea"
92
- }, z.value, { onInput: T }), null, 16, L)
95
+ }, T.value, { onInput: B }), null, 16, U)
93
96
  ]),
94
97
  _: 2
95
98
  }, [
96
- p(y).hint ? {
99
+ f(y).hint ? {
97
100
  name: "hint",
98
- fn: x(() => [
99
- $(e.$slots, "hint", {}, void 0, !0)
101
+ fn: _(() => [
102
+ D(e.$slots, "hint")
100
103
  ]),
101
104
  key: "0"
102
105
  } : void 0
103
106
  ]), 1040, ["id", "class"]));
104
107
  }
105
- });
106
- const X = /* @__PURE__ */ F(N, [["__scopeId", "data-v-ffd4d28e"]]);
108
+ }), Y = "_root_1bv4v_2", G = "_textarea_1bv4v_7", J = {
109
+ root: Y,
110
+ textarea: G,
111
+ "stash-textarea--error": "_stash-textarea--error_1bv4v_28"
112
+ }, K = {
113
+ $style: J
114
+ }, ae = /* @__PURE__ */ N(W, [["__cssModules", K]]);
107
115
  export {
108
- X as default
116
+ ae as default
109
117
  };
110
118
  //# sourceMappingURL=Textarea.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Textarea.js","sources":["../src/components/Textarea/Textarea.vue"],"sourcesContent":["<script lang=\"ts\" setup>\n import uniqueId from 'lodash-es/uniqueId';\n import { computed, nextTick, onBeforeUnmount, onMounted, ref, useAttrs, useSlots, watch } from 'vue';\n\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 {\n /**\n * Label text for the textarea element.\n */\n label?: string;\n /**\n * Value for the textarea element.\n */\n modelValue?: string;\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 * Error text for the textarea element.\n */\n errorText?: string;\n /**\n * Hint text for the textarea element.\n */\n hintText?: string;\n /**\n * Render \"(optional)\" to the right of the label text\n */\n showOptionalInLabel?: boolean;\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 defineOptions({\n name: 'll-textarea',\n });\n\n /**\n * Unique ID for the textarea, required for accessibility purposes\n */\n const id = uniqueId('textarea-');\n\n const attrs = useAttrs();\n const slots = useSlots();\n\n const props = withDefaults(defineProps<TextAreaProps>(), {\n label: ' ',\n modelValue: '',\n value: null,\n errorText: '',\n hintText: '',\n showOptionalInLabel: false,\n resize: false,\n });\n\n const emits =\n 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\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 v ? setupResizeObserver() : observer.value?.disconnect();\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(([entry]) => {\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\" :id=\"id\" class=\"stash-textarea\" :class=\"[attrs.class]\" data-test=\"stash-textarea\">\n <template #default=\"{ fieldId, hasError }\">\n <textarea\n :id=\"fieldId\"\n ref=\"textareaRef\"\n :class=\"{ 'stash-textarea--error': hasError, 'tw-resize-y': props.resize, 'tw-resize-none': !props.resize }\"\n :value=\"props.modelValue\"\n data-test=\"stash-textarea|textarea\"\n v-bind=\"inputAttrs\"\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 scoped>\n .stash-textarea {\n position: relative;\n width: 100%;\n\n textarea {\n background: var(--color-white);\n border: 1px solid;\n border-color: var(--color-ice-500);\n border-radius: theme('borderRadius.DEFAULT');\n color: var(--color-ice-700);\n display: block;\n min-height: 100px;\n outline: none;\n padding: theme('spacing[1.5]');\n width: 100%;\n\n &:hover {\n border-color: var(--color-ice-500);\n }\n\n &:focus,\n &:active {\n border-color: var(--color-blue-500);\n }\n\n &.stash-textarea--error {\n border-color: var(--color-red-500);\n color: var(--color-red-500);\n }\n\n &::placeholder {\n color: var(--color-ice-500);\n opacity: 1;\n }\n\n &[disabled],\n &[readonly] {\n background-color: var(--color-ice-200);\n border-color: var(--color-ice-500);\n color: var(--color-ice-700);\n pointer-events: none;\n }\n\n &[disabled]:active,\n &[readonly]:active,\n &[disabled]:focus,\n &[readonly]:focus {\n box-shadow: none;\n }\n\n &[disabled]::placeholder,\n &[readonly]::placeholder {\n text-transform: none;\n }\n }\n }\n</style>\n"],"names":["id","uniqueId","attrs","useAttrs","slots","useSlots","textareaRef","ref","observer","inputAttrs","computed","allAttrs","watch","props","v","setupResizeObserver","_a","onInput","event","emits","entry","target","parent","findParentScrollable","scrollPosition","offsetDiff","top","height","getOffsetClipRect","viewportHeight","parentTop","parentHeight","offsetTop","el","overflowY","width","left","findPos","offsetLeft","offsetParent","onMounted","nextTick","onBeforeUnmount"],"mappings":";;;;;;;;;;;;;;;;;;;;;iBAqDQA,IAAKC,EAAS,WAAW,GAEzBC,IAAQC,KACRC,IAAQC,KAoBRC,IAAcC,KACdC,IAAWD,KAEXE,IAAaC,EAAS,MAAM;AAC1B,YAAAC,IAAW,EAAE,GAAGT;AAEtB,oBAAOS,EAAS,WAAW,GAC3B,OAAOA,EAAS,OAETA;AAAA,IAAA,CACR;AAED,IAAAC;AAAA,MACE,MAAMC,EAAM;AAAA,MACZ,CAACC,MAAM;;AACL,QAAAA,IAAIC,EAAoB,KAAIC,IAAAR,EAAS,UAAT,QAAAQ,EAAgB;AAAA,MAC9C;AAAA,IAAA;AAGI,UAAAC,IAAU,CAACC,MAAiB;AAC1B,MAAAC,EAAA,sBAAuBD,EAAM,OAA+B,KAAK;AAAA,IAAA,GAGnEH,IAAsB,MAAM;AAChC,MAAIP,EAAS,SAAS,CAACF,EAAY,UAKnCE,EAAS,QAAQ,IAAI,eAAe,CAAC,CAACY,CAAK,MAAM;AACzC,cAAA,EAAE,QAAAC,EAAW,IAAAD,GACbE,IAASC,EAAqBjB,EAAY,KAA4B,KAAK,SAAS,iBAEpF,EAAE,WAAWkB,EAAmB,IAAAF;AACtC,YAAIG,IAAa;AAGb,YAAAH,MAAW,SAAS,iBAAiB;AACvC,gBAAM,EAAE,KAAAI,GAAK,QAAAC,EAAO,IAAIC,EAAkBP,CAAqB,GACzD,EAAE,aAAaQ,EAAmB,IAAA;AAExC,UAAAJ,IAAa,KAAK,IAAIC,IAAMC,KAAUE,IAAiBL,IAAiB,CAAC;AAAA,QAAA,OACpE;AACL,gBAAM,EAAE,KAAAE,GAAK,QAAAC,EAAO,IAAKN,EAAuB,sBAAsB,GAChE,EAAE,KAAKS,EAAU,IAAIR,EAAO,sBAAsB,GAClD,EAAE,cAAcS,EAAiB,IAAAT,GACjCU,IAAYN,IAAMI;AAExB,UAAAL,IAAa,KAAK,IAAIO,IAAYL,IAASI,GAAc,CAAC;AAAA,QAC5D;AAEA,QAAIN,KACF,sBAAsB,MAAM;AAC1B,UAAAH,EAAO,YAAYE,IAAiBC;AAAA,QAAA,CACrC;AAAA,MACH,CACD,GAEQjB,EAAA,MAAM,QAAQF,EAAY,KAAK;AAAA,IAAA,GAMpCiB,IAAuB,CAACU,MAAwC;AACpE,YAAMX,IAASW,EAAG;AAClB,UAAI,CAACX;AACI,eAAA;AAGT,YAAM,EAAE,WAAAY,EAAA,IAAc,iBAAiBZ,CAAM;AAC7C,aAAIY,MAAc,YACTZ,IAGLA,MAAW,SAAS,OACf,SAAS,kBAGXC,EAAqBD,CAAM;AAAA,IAAA,GAM9BM,IAAoB,CAACK,MAAoB;AAC7C,YAAM,EAAE,aAAaE,GAAO,cAAcR,MAAWM;AAErD,UAAIG,IAAO,GACPV,IAAM;AAEV,YAAMW,IAAU,SAAU,EAAE,YAAAC,GAAY,WAAAN,GAAW,cAAAO,KAA6B;AACtE,QAAAH,KAAAE,GACDZ,KAAAM,GAEHO,KACFF,EAAQE,CAA2B;AAAA,MACrC;AAGF,aAAAF,EAAQJ,CAAE,GAEH;AAAA,QACL,KAAAP;AAAA,QACA,MAAAU;AAAA,QACA,OAAAD;AAAA,QACA,QAAAR;AAAA,MAAA;AAAA,IACF;AAGF,WAAAa,EAAU,YAAY;;AAChB,UAAA3B,EAAM,UAAU;AACZ,cAAA,IAAI,MAAM,0DAA0D;AAG5E,UAAIX,EAAM;AACF,cAAA,IAAI,MAAM,+DAA+D;AAI9E,OAAA,OAAOW,EAAM,UAAW,aAAaA,EAAM,WAC3CG,IAAAH,EAAM,WAAN,QAAAG,EAAwC,wBAEzC,MAAMyB,EAAS,GACK1B;IACtB,CACD,GAED2B,EAAgB,MAAM;;AACpB,OAAA1B,IAAAR,EAAS,UAAT,QAAAQ,EAAgB;AAAA,IAAW,CAC5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"Textarea.js","sources":["../src/components/Textarea/Textarea.vue"],"sourcesContent":["<script lang=\"ts\" setup>\n import uniqueId from 'lodash-es/uniqueId';\n import { computed, nextTick, onBeforeUnmount, onMounted, ref, useAttrs, useCssModule, useSlots, watch } from 'vue';\n\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 {\n /**\n * Label text for the textarea element.\n */\n label?: string;\n\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 * Error text for the textarea element.\n */\n errorText?: string;\n\n /**\n * Hint text for the textarea element.\n */\n hintText?: string;\n\n /**\n * Render \"(optional)\" to the right of the label text\n */\n showOptionalInLabel?: boolean;\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 defineOptions({\n name: 'll-textarea',\n });\n\n /**\n * Unique ID for the textarea, required for accessibility purposes\n */\n const id = uniqueId('textarea-');\n\n const attrs = useAttrs();\n const slots = useSlots();\n const classes = useCssModule();\n\n const props = withDefaults(defineProps<TextAreaProps>(), {\n label: ' ',\n modelValue: '',\n value: null,\n errorText: '',\n hintText: '',\n showOptionalInLabel: false,\n resize: false,\n });\n\n const emits =\n 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\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 v ? setupResizeObserver() : observer.value?.disconnect();\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(([entry]) => {\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\" :id=\"id\" class=\"stash-textarea\" :class=\"attrs.root\" data-test=\"stash-textarea\">\n <template #default=\"{ fieldId, hasError }\">\n <textarea\n :id=\"fieldId\"\n ref=\"textareaRef\"\n :class=\"[\n classes.textarea,\n { 'stash-textarea--error': hasError, 'tw-resize-y': props.resize, 'tw-resize-none': !props.resize },\n ]\"\n :value=\"props.modelValue\"\n data-test=\"stash-textarea|textarea\"\n v-bind=\"inputAttrs\"\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 .root {\n position: relative;\n width: 100%;\n }\n\n .textarea {\n background: var(--color-white);\n border: 1px solid;\n border-color: var(--color-ice-500);\n border-radius: theme('borderRadius.DEFAULT');\n color: var(--color-ice-700);\n display: block;\n min-height: 100px;\n outline: none;\n padding: theme('spacing[1.5]');\n width: 100%;\n\n &:hover {\n border-color: var(--color-ice-500);\n }\n\n &:focus,\n &:active {\n border-color: var(--color-blue-500);\n }\n\n &.stash-textarea--error {\n border-color: var(--color-red-500);\n color: var(--color-red-500);\n }\n\n &::placeholder {\n color: var(--color-ice-500);\n opacity: 1;\n }\n\n &[disabled],\n &[readonly] {\n background-color: var(--color-ice-200);\n border-color: var(--color-ice-500);\n color: var(--color-ice-700);\n pointer-events: none;\n }\n\n &[disabled]:active,\n &[readonly]:active,\n &[disabled]:focus,\n &[readonly]:focus {\n box-shadow: none;\n }\n\n &[disabled]::placeholder,\n &[readonly]::placeholder {\n text-transform: none;\n }\n }\n</style>\n"],"names":["id","uniqueId","attrs","useAttrs","slots","useSlots","classes","useCssModule","textareaRef","ref","observer","inputAttrs","computed","allAttrs","watch","props","v","setupResizeObserver","_a","onInput","event","emits","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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"}
package/dist/Toast.js CHANGED
@@ -1,12 +1,12 @@
1
- import { defineComponent as c, useCssModule as l, computed as o, openBlock as _, createElementBlock as i, normalizeClass as p, unref as e, createVNode as m, createElementVNode as f, toDisplayString as d } from "vue";
2
- import y from "lodash-es/capitalize";
3
- import { S as a, b as q } from "./statusLevels-a8b041f4.js";
4
- import x from "./Icon.js";
5
- import { _ as S } from "./_plugin-vue_export-helper-dad06003.js";
1
+ import { defineComponent as c, useCssModule as l, computed as o, openBlock as _, createElementBlock as i, normalizeClass as m, unref as e, createVNode as p, createElementVNode as d, toDisplayString as f } from "vue";
2
+ import x from "lodash-es/capitalize";
3
+ import { S as a, b as S } from "./statusLevels-a8b041f4.js";
4
+ import h from "./Icon.js";
5
+ import { _ as I } from "./_plugin-vue_export-helper-dad06003.js";
6
6
  import "lodash-es/uniqueId";
7
7
  import "./index-79ce320f.js";
8
8
  import "./Icon.vue_used_vue_type_style_index_0_lang.module-eb359559.js";
9
- const h = ["role"], I = /* @__PURE__ */ c({
9
+ const g = ["role"], v = /* @__PURE__ */ c({
10
10
  __name: "Toast",
11
11
  props: {
12
12
  text: {},
@@ -14,27 +14,27 @@ const h = ["role"], I = /* @__PURE__ */ c({
14
14
  },
15
15
  setup(r) {
16
16
  const t = r, s = l(), n = o(
17
- () => t.status ? a[y(t.status)] : a.Info
18
- ), u = o(() => t.status === q.Error ? "alert" : "status");
19
- return (E, M) => (_(), i("li", {
17
+ () => t.status ? a[x(t.status)] : a.Info
18
+ ), u = o(() => t.status === S.Error ? "alert" : "status");
19
+ return (M, k) => (_(), i("li", {
20
20
  role: u.value,
21
- class: p([[e(s).root, e(s)[`status--${t.status}`]], "stash-toast"]),
21
+ class: m([[e(s).root, e(s)[`status--${t.status}`]], "stash-toast"]),
22
22
  "data-test": "stash-toast"
23
23
  }, [
24
- m(x, { name: n.value }, null, 8, ["name"]),
25
- f("p", null, d(t.text), 1)
26
- ], 10, h));
24
+ p(h, { name: n.value }, null, 8, ["name"]),
25
+ d("p", null, f(t.text), 1)
26
+ ], 10, g));
27
27
  }
28
- }), g = "_root_spyoq_2", v = {
29
- root: g,
30
- "status--success": "_status--success_spyoq_22",
31
- "status--error": "_status--error_spyoq_31",
32
- "status--info": "_status--info_spyoq_40",
33
- "status--warning": "_status--warning_spyoq_49"
34
- }, C = {
35
- $style: v
36
- }, b = /* @__PURE__ */ S(I, [["__cssModules", C]]);
28
+ }), y = "_root_19dn9_2", C = {
29
+ root: y,
30
+ "status--success": "_status--success_19dn9_22",
31
+ "status--error": "_status--error_19dn9_31",
32
+ "status--info": "_status--info_19dn9_40",
33
+ "status--warning": "_status--warning_19dn9_49"
34
+ }, E = {
35
+ $style: C
36
+ }, D = /* @__PURE__ */ I(v, [["__cssModules", E]]);
37
37
  export {
38
- b as default
38
+ D as default
39
39
  };
40
40
  //# sourceMappingURL=Toast.js.map
package/dist/Toast.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Toast.js","sources":["../src/components/Toast/Toast.vue"],"sourcesContent":["<script setup lang=\"ts\">\n import capitalize from 'lodash-es/capitalize';\n import { computed, useCssModule } from 'vue';\n\n import { StatusIcon, StatusIcons, StatusSeverities, StatusSeverity } from '../../../types/statusLevels';\n import Icon from '../Icon/Icon.vue';\n\n export interface ToastProps {\n /**\n * The toast text.\n */\n text: string;\n /**\n * The toast status.\n */\n status?: StatusSeverity;\n }\n\n const classes = useCssModule();\n\n const props = withDefaults(defineProps<ToastProps>(), {\n status: 'info',\n });\n\n const statusIcon = computed<StatusIcon>(() =>\n props.status ? StatusIcons[capitalize(props.status)] : StatusIcons.Info,\n );\n\n const ariaRole = computed<string>(() => {\n if (props.status === StatusSeverities.Error) {\n return 'alert';\n } else {\n return 'status';\n }\n });\n</script>\n\n<template>\n <li\n :role=\"ariaRole\"\n :class=\"[classes.root, classes[`status--${props.status}`]]\"\n class=\"stash-toast\"\n data-test=\"stash-toast\"\n >\n <Icon :name=\"statusIcon\" />\n <p>{{ props.text }}</p>\n </li>\n</template>\n\n<style module>\n .root {\n display: flex;\n align-items: center;\n width: 100%;\n border-width: 1px var(--ll-space-1) 1px 1px;\n border-radius: var(--border-radius);\n padding: calc(var(--ll-space-1) * 3) var(--ll-space-2);\n cursor: pointer;\n }\n\n .root > * + * {\n margin-left: var(--ll-space-2);\n }\n\n .root p {\n margin-bottom: 0;\n color: var(--color-ice-900);\n font-size: 1rem;\n }\n\n .status--success {\n background-color: var(--color-green-100);\n border-color: var(--color-green-500);\n }\n\n .status--success svg {\n color: var(--color-green-500);\n }\n\n .status--error {\n background-color: var(--color-red-100);\n border-color: var(--color-red-500);\n }\n\n .status--error svg {\n color: var(--color-red-500);\n }\n\n .status--info {\n background-color: var(--color-blue-100);\n border-color: var(--color-blue-500);\n }\n\n .status--info svg {\n color: var(--color-blue-500);\n }\n\n .status--warning {\n background-color: var(--color-orange-100);\n border-color: var(--color-orange-500);\n }\n\n .status--warning svg {\n color: var(--color-orange-500);\n }\n</style>\n"],"names":["classes","useCssModule","statusIcon","computed","props","StatusIcons","capitalize","ariaRole","StatusSeverities"],"mappings":";;;;;;;;;;;;;;;iBAkBQA,IAAUC,KAMVC,IAAaC;AAAA,MAAqB,MACtCC,EAAM,SAASC,EAAYC,EAAWF,EAAM,MAAM,CAAC,IAAIC,EAAY;AAAA,IAAA,GAG/DE,IAAWJ,EAAiB,MAC5BC,EAAM,WAAWI,EAAiB,QAC7B,UAEA,QAEV;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"Toast.js","sources":["../src/components/Toast/Toast.vue"],"sourcesContent":["<script setup lang=\"ts\">\n import capitalize from 'lodash-es/capitalize';\n import { computed, useCssModule } from 'vue';\n\n import { StatusIcon, StatusIcons, StatusSeverities, StatusSeverity } from '../../../types/statusLevels';\n import Icon from '../Icon/Icon.vue';\n\n export interface ToastProps {\n /**\n * The toast text.\n */\n text: string;\n /**\n * The toast status.\n */\n status?: StatusSeverity;\n }\n\n const classes = useCssModule();\n\n const props = withDefaults(defineProps<ToastProps>(), {\n status: 'info',\n });\n\n const statusIcon = computed<StatusIcon>(() =>\n props.status ? StatusIcons[capitalize(props.status)] : StatusIcons.Info,\n );\n\n const ariaRole = computed<string>(() => {\n if (props.status === StatusSeverities.Error) {\n return 'alert';\n } else {\n return 'status';\n }\n });\n</script>\n\n<template>\n <li\n :role=\"ariaRole\"\n :class=\"[classes.root, classes[`status--${props.status}`]]\"\n class=\"stash-toast\"\n data-test=\"stash-toast\"\n >\n <Icon :name=\"statusIcon\" />\n <p>{{ props.text }}</p>\n </li>\n</template>\n\n<style module>\n .root {\n display: flex;\n align-items: center;\n width: 100%;\n border-width: 1px theme('spacing[1.5]') 1px 1px;\n border-radius: theme('borderRadius.DEFAULT');\n padding: calc(theme('spacing[1.5]') * 3) theme('spacing.3');\n cursor: pointer;\n }\n\n .root > * + * {\n margin-left: theme('spacing.3');\n }\n\n .root p {\n margin-bottom: 0;\n color: var(--color-ice-900);\n font-size: 1rem;\n }\n\n .status--success {\n background-color: var(--color-green-100);\n border-color: var(--color-green-500);\n }\n\n .status--success svg {\n color: var(--color-green-500);\n }\n\n .status--error {\n background-color: var(--color-red-100);\n border-color: var(--color-red-500);\n }\n\n .status--error svg {\n color: var(--color-red-500);\n }\n\n .status--info {\n background-color: var(--color-blue-100);\n border-color: var(--color-blue-500);\n }\n\n .status--info svg {\n color: var(--color-blue-500);\n }\n\n .status--warning {\n background-color: var(--color-orange-100);\n border-color: var(--color-orange-500);\n }\n\n .status--warning svg {\n color: var(--color-orange-500);\n }\n</style>\n"],"names":["classes","useCssModule","statusIcon","computed","props","StatusIcons","capitalize","ariaRole","StatusSeverities"],"mappings":";;;;;;;;;;;;;;;iBAkBQA,IAAUC,KAMVC,IAAaC;AAAA,MAAqB,MACtCC,EAAM,SAASC,EAAYC,EAAWF,EAAM,MAAM,CAAC,IAAIC,EAAY;AAAA,IAAA,GAG/DE,IAAWJ,EAAiB,MAC5BC,EAAM,WAAWI,EAAiB,QAC7B,UAEA,QAEV;;;;;;;;;;;;;;;;;;;"}