@leaflink/stash 42.6.0 → 42.8.0
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.
- package/dist/Alert.js +5 -5
- package/dist/Dialog.js +1 -1
- package/dist/SelectStatus.js +58 -48
- package/dist/SelectStatus.js.map +1 -1
- package/dist/Textarea.js +77 -28
- package/dist/Textarea.js.map +1 -1
- package/dist/Textarea.vue.d.ts +15 -0
- package/dist/Toast.js +1 -1
- package/dist/Toasts.js +1 -1
- package/dist/ToastsPlugin.js +1 -1
- package/dist/components.css +1 -1
- package/dist/index.d.ts +6 -0
- package/dist/index.js +212 -123
- package/dist/index.js.map +1 -1
- package/dist/{statusLevels-2c64f4f8.js → statusLevels-aabf1e3c.js} +3 -3
- package/dist/{statusLevels-2c64f4f8.js.map → statusLevels-aabf1e3c.js.map} +1 -1
- package/package.json +1 -1
package/dist/Alert.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { defineComponent as x, useSlots as $, useCssModule as C, ref as I, computed as s, withDirectives as
|
|
1
|
+
import { defineComponent as x, useSlots as $, useCssModule as C, ref as I, computed as s, withDirectives as S, openBlock as i, createElementBlock as l, normalizeClass as r, createVNode as w, unref as t, createElementVNode as f, renderSlot as m, createCommentVNode as o } from "vue";
|
|
2
2
|
import y from "lodash-es/capitalize";
|
|
3
|
-
import
|
|
4
|
-
import {
|
|
3
|
+
import B from "lodash-es/uniqueId";
|
|
4
|
+
import { S as M, a as N } from "./statusLevels-aabf1e3c.js";
|
|
5
5
|
import V from "./sticky.js";
|
|
6
6
|
import p from "./Icon.js";
|
|
7
7
|
import { _ as j } from "./_plugin-vue_export-helper-dad06003.js";
|
|
@@ -19,8 +19,8 @@ const z = { class: "tw-m-0" }, A = /* @__PURE__ */ x({
|
|
|
19
19
|
variant: { default: "outlined" }
|
|
20
20
|
},
|
|
21
21
|
setup(b) {
|
|
22
|
-
const e = b, g =
|
|
23
|
-
return (u, v) => c.value ?
|
|
22
|
+
const e = b, g = B("close-icon"), _ = $(), a = C(), c = I(!0), d = s(() => M[y(e.severity)]), h = s(() => N[y(e.severity)]), k = s(() => e.variant === "filled" && ["warning", "success"].includes(e.severity) ? "tw-text-ice-900" : e.variant === "filled" && ["info", "error"].includes(e.severity) ? "tw-text-white" : `tw-text-${h.value}`), n = s(() => e.variant === "filled" && ["info", "error"].includes(e.severity) ? "tw-text-white" : "tw-text-ice-900");
|
|
23
|
+
return (u, v) => c.value ? S((i(), l("div", {
|
|
24
24
|
key: 0,
|
|
25
25
|
class: r(["stash-alert tw-items-center tw-flex tw-p-3 tw-relative tw-leading-6 tw-border tw-border-solid", [
|
|
26
26
|
`stash-alert--${e.severity}`,
|
package/dist/Dialog.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { defineComponent as V, useSlots as $, useAttrs as K, useCssModule as Z, ref as C, computed as n, watchEffect as z, nextTick as A, openBlock as s, createBlock as f, Transition as H, withCtx as m, createElementBlock as p, mergeProps as L, unref as e, withKeys as P, createElementVNode as a, normalizeClass as o, createCommentVNode as r, toDisplayString as _, renderSlot as Y, createTextVNode as T, createVNode as F } from "vue";
|
|
2
2
|
import S from "lodash-es/capitalize";
|
|
3
3
|
import G from "lodash-es/uniqueId";
|
|
4
|
-
import {
|
|
4
|
+
import { S as B, a as I, b as J } from "./statusLevels-aabf1e3c.js";
|
|
5
5
|
import { t as c } from "./locale.js";
|
|
6
6
|
import q from "./Button.js";
|
|
7
7
|
import O from "./Icon.js";
|
package/dist/SelectStatus.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { defineComponent as
|
|
1
|
+
import { defineComponent as k, useAttrs as S, useCssModule as b, computed as n, openBlock as o, createBlock as C, normalizeClass as l, unref as g, withCtx as d, createElementBlock as i, createElementVNode as a, toDisplayString as c, createVNode as u, normalizeStyle as m } from "vue";
|
|
2
2
|
import p from "./Icon.js";
|
|
3
|
-
import
|
|
4
|
-
import { _ as
|
|
3
|
+
import O from "./Select.js";
|
|
4
|
+
import { _ as V } from "./_plugin-vue_export-helper-dad06003.js";
|
|
5
5
|
import "lodash-es/uniqueId";
|
|
6
6
|
import "./index-79ce320f.js";
|
|
7
7
|
import "./Icon.vue_used_vue_type_style_index_0_lang.module-eb359559.js";
|
|
@@ -25,11 +25,11 @@ import "./utils/colorScheme.js";
|
|
|
25
25
|
import "./Field.vue_vue_type_script_setup_true_lang-475832fe.js";
|
|
26
26
|
import "./Label.vue_vue_type_script_setup_true_lang-1d29d98a.js";
|
|
27
27
|
import "./locale.js";
|
|
28
|
-
const
|
|
28
|
+
const E = { class: "tw-truncate tw-mr-6" }, N = {
|
|
29
29
|
key: 1,
|
|
30
30
|
class: "tw-flex tw-items-center",
|
|
31
31
|
"data-test": "select-status|value"
|
|
32
|
-
},
|
|
32
|
+
}, $ = { class: "tw-truncate tw-ml-1.5 tw-mr-6" }, D = { class: "tw-flex tw-min-w-0" }, I = /* @__PURE__ */ k({
|
|
33
33
|
name: "ll-select-status",
|
|
34
34
|
__name: "SelectStatus",
|
|
35
35
|
props: {
|
|
@@ -44,79 +44,89 @@ const V = { class: "tw-truncate tw-mr-6" }, E = {
|
|
|
44
44
|
value: { type: [Number, String, Boolean, null], default: null }
|
|
45
45
|
},
|
|
46
46
|
emits: ["update:model-value"],
|
|
47
|
-
setup(
|
|
48
|
-
const
|
|
49
|
-
if (
|
|
47
|
+
setup(f, { emit: w }) {
|
|
48
|
+
const t = f, y = ["green", "teal", "ice", "yellow", "seafoam", "seafoam-700"], _ = S(), h = b();
|
|
49
|
+
if (t.value)
|
|
50
50
|
throw new Error("ll-select-status: use :model-value or v-model instead of :value.");
|
|
51
|
-
if (
|
|
51
|
+
if (_.onInput)
|
|
52
52
|
throw new Error("ll-select-status: use the @update:model-value event instead of @input");
|
|
53
|
-
const
|
|
54
|
-
|
|
55
|
-
return
|
|
56
|
-
}
|
|
53
|
+
const r = n(() => t.statusOptions.find((s) => s[t.trackBy] === t.modelValue)), v = n(() => {
|
|
54
|
+
const { color: s = "" } = r.value || {};
|
|
55
|
+
return y.includes(s);
|
|
56
|
+
});
|
|
57
57
|
function B(s) {
|
|
58
|
-
|
|
58
|
+
return `tw-bg-${s}`;
|
|
59
|
+
}
|
|
60
|
+
function x(s) {
|
|
61
|
+
w("update:model-value", (s == null ? void 0 : s[t.trackBy]) ?? "");
|
|
59
62
|
}
|
|
60
|
-
return (s,
|
|
63
|
+
return (s, A) => (o(), C(O, {
|
|
61
64
|
ref: "select",
|
|
62
65
|
"hide-search": "",
|
|
63
66
|
single: "",
|
|
64
|
-
class: l([[
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
"
|
|
67
|
+
class: l([[
|
|
68
|
+
g(h).select,
|
|
69
|
+
{
|
|
70
|
+
"stash-select-status--filled": t.secondary,
|
|
71
|
+
"stash-select-status--filled-dark": t.secondary && v.value
|
|
72
|
+
}
|
|
73
|
+
], "stash-select-status"]),
|
|
74
|
+
disabled: t.disabled,
|
|
75
|
+
icon: !t.disabled && "caret-down",
|
|
76
|
+
options: t.statusOptions,
|
|
77
|
+
placeholder: t.placeholder,
|
|
78
|
+
"track-by": t.trackBy,
|
|
79
|
+
"model-value": r.value,
|
|
71
80
|
"data-test": "stash-select-status",
|
|
72
|
-
"onUpdate:modelValue":
|
|
81
|
+
"onUpdate:modelValue": x
|
|
73
82
|
}, {
|
|
74
|
-
selected: d(({ option:
|
|
75
|
-
|
|
83
|
+
selected: d(({ option: e }) => [
|
|
84
|
+
t.secondary ? (o(), i("div", {
|
|
76
85
|
key: 0,
|
|
77
|
-
class: l(["tw-absolute tw-flex tw-items-center tw-pl-3 tw-rounded tw-h-full tw-inset-0 tw-w-full", [
|
|
86
|
+
class: l(["stash-select-status--selected tw-absolute tw-flex tw-items-center tw-pl-3 tw-rounded tw-h-full tw-inset-0 tw-w-full", [B(e.color)]]),
|
|
78
87
|
"data-test": "select-status|value"
|
|
79
88
|
}, [
|
|
80
|
-
a("span",
|
|
81
|
-
], 2)) : (o(), i("div",
|
|
89
|
+
a("span", E, c(e[t.displayBy]), 1)
|
|
90
|
+
], 2)) : (o(), i("div", N, [
|
|
82
91
|
u(p, {
|
|
83
|
-
|
|
92
|
+
"data-test": "select-status|value-icon",
|
|
93
|
+
name: e.icon || "circle-status",
|
|
84
94
|
class: l([
|
|
85
|
-
{ [`tw-text-${
|
|
86
|
-
{ "tw-text-ice-700": !
|
|
95
|
+
{ [`tw-text-${e.color}`]: e.color },
|
|
96
|
+
{ "tw-text-ice-700": !e.color && !e.hexCode }
|
|
87
97
|
]),
|
|
88
|
-
style: m({ color:
|
|
98
|
+
style: m({ color: e.hexCode })
|
|
89
99
|
}, null, 8, ["name", "class", "style"]),
|
|
90
|
-
a("span",
|
|
100
|
+
a("span", $, c(e[t.displayBy]), 1)
|
|
91
101
|
]))
|
|
92
102
|
]),
|
|
93
|
-
option: d(({ option:
|
|
94
|
-
a("div",
|
|
103
|
+
option: d(({ option: e }) => [
|
|
104
|
+
a("div", D, [
|
|
95
105
|
u(p, {
|
|
96
106
|
"data-test": "svg|status-color",
|
|
97
|
-
name:
|
|
107
|
+
name: e.icon || "circle-status",
|
|
98
108
|
class: l([[
|
|
99
|
-
{ [`tw-text-${
|
|
100
|
-
{ "tw-text-ice-700": !
|
|
109
|
+
{ [`tw-text-${e.color}`]: e.color },
|
|
110
|
+
{ "tw-text-ice-700": !e.color && !e.hexCode }
|
|
101
111
|
], "!tw-shrink-0"]),
|
|
102
|
-
style: m({ color:
|
|
112
|
+
style: m({ color: e.hexCode })
|
|
103
113
|
}, null, 8, ["name", "class", "style"]),
|
|
104
114
|
a("span", {
|
|
105
115
|
"data-test": "span|option-text",
|
|
106
|
-
class: l(["tw-ml-1.5", !
|
|
107
|
-
}, c(t
|
|
116
|
+
class: l(["tw-ml-1.5", !t.noTruncate && "tw-truncate"])
|
|
117
|
+
}, c(e[t.displayBy]), 3)
|
|
108
118
|
])
|
|
109
119
|
]),
|
|
110
120
|
_: 1
|
|
111
121
|
}, 8, ["class", "disabled", "icon", "options", "placeholder", "track-by", "model-value"]));
|
|
112
122
|
}
|
|
113
|
-
}),
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
},
|
|
117
|
-
$style:
|
|
118
|
-
},
|
|
123
|
+
}), L = "_select_1wypi_25", M = {
|
|
124
|
+
select: L,
|
|
125
|
+
"stash-select__chips": "_stash-select__chips_1wypi_30"
|
|
126
|
+
}, z = {
|
|
127
|
+
$style: M
|
|
128
|
+
}, ut = /* @__PURE__ */ V(I, [["__cssModules", z]]);
|
|
119
129
|
export {
|
|
120
|
-
|
|
130
|
+
ut as default
|
|
121
131
|
};
|
|
122
132
|
//# sourceMappingURL=SelectStatus.js.map
|
package/dist/SelectStatus.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectStatus.js","sources":["../src/components/SelectStatus/SelectStatus.vue"],"sourcesContent":["<script setup lang=\"ts\">\n import { computed, useAttrs, useCssModule } from 'vue';\n\n import Icon from '../Icon/Icon.vue';\n import Select from '../Select/Select.vue';\n\n defineOptions({\n name: 'll-select-status',\n });\n\n
|
|
1
|
+
{"version":3,"file":"SelectStatus.js","sources":["../src/components/SelectStatus/SelectStatus.vue"],"sourcesContent":["<script setup lang=\"ts\">\n import { computed, useAttrs, useCssModule } from 'vue';\n\n import Icon from '../Icon/Icon.vue';\n import Select from '../Select/Select.vue';\n\n defineOptions({\n name: 'll-select-status',\n });\n\n export type SelectStatusOption = {\n id: number | string;\n name: string;\n color?: string;\n };\n\n export interface SelectStatusProps {\n /**\n * Disables the component, if true\n */\n disabled?: boolean;\n /**\n * Which key of the prop option to use for display\n */\n displayBy?: string;\n /**\n * Sets the background color of the component to the color of the selected option\n */\n secondary?: boolean;\n /**\n * Allows option text to wrap to next line when set to true\n */\n noTruncate?: boolean;\n /**\n * Placeholder text\n */\n placeholder?: string;\n /**\n * The list of all options to select the status from\n * each object must have the following structure: { id: number | string, name: string, color?: string }\n */\n statusOptions: Array<SelectStatusOption>;\n /**\n * Default field to track the selected status by\n */\n trackBy?: string;\n /**\n * Sets the currently-selected option for the component\n */\n modelValue: number | string | boolean;\n /**\n * @deprecated Use `:model-value` or `v-model` instead of `:value`.\n */\n value?: number | string | boolean | null;\n }\n\n /**\n * Array containing the available dark fill colors that need a different text color.\n */\n const DARK_FILL_COLORS = ['green', 'teal', 'ice', 'yellow', 'seafoam', 'seafoam-700'];\n\n const attrs = useAttrs();\n const classes = useCssModule();\n\n const props = withDefaults(defineProps<SelectStatusProps>(), {\n disabled: false,\n displayBy: 'name',\n secondary: false,\n noTruncate: false,\n placeholder: 'Select Status',\n trackBy: 'id',\n value: null,\n });\n\n if (props.value) {\n throw new Error('ll-select-status: use :model-value or v-model instead of :value.');\n }\n\n if (attrs.onInput) {\n throw new Error('ll-select-status: use the @update:model-value event instead of @input');\n }\n\n const emit =\n defineEmits<{\n /**\n * Emitted when the model value changes\n */\n (e: 'update:model-value', value: unknown): void;\n }>();\n\n const valueOption = computed(() => {\n return props.statusOptions.find((status) => status[props.trackBy] === props.modelValue);\n });\n\n const hasDarkFill = computed(() => {\n const { color = '' } = valueOption.value || {};\n return DARK_FILL_COLORS.includes(color);\n });\n\n /**\n * @param {string} color Valid color name\n * @return {string} tailwind class for given color\n */\n function getBgColor(color: string): string {\n return `tw-bg-${color}`;\n }\n\n function onSelect(value?: SelectStatusOption): void {\n emit('update:model-value', value?.[props.trackBy] ?? '');\n }\n</script>\n\n<template>\n <Select\n ref=\"select\"\n hide-search\n single\n :class=\"[\n classes.select,\n {\n 'stash-select-status--filled': props.secondary,\n 'stash-select-status--filled-dark': props.secondary && hasDarkFill,\n },\n ]\"\n :disabled=\"props.disabled\"\n :icon=\"!props.disabled && 'caret-down'\"\n :options=\"props.statusOptions\"\n :placeholder=\"props.placeholder\"\n :track-by=\"props.trackBy\"\n :model-value=\"valueOption\"\n data-test=\"stash-select-status\"\n class=\"stash-select-status\"\n @update:model-value=\"onSelect\"\n >\n <template #selected=\"{ option }\">\n <div\n v-if=\"props.secondary\"\n class=\"\n stash-select-status--selected\n tw-absolute tw-flex tw-items-center tw-pl-3 tw-rounded tw-h-full tw-inset-0 tw-w-full\n \"\n data-test=\"select-status|value\"\n :class=\"[getBgColor(option.color)]\"\n >\n <span class=\"tw-truncate tw-mr-6\">{{ option[props.displayBy] }}</span>\n </div>\n\n <div v-else class=\"tw-flex tw-items-center\" data-test=\"select-status|value\">\n <Icon\n data-test=\"select-status|value-icon\"\n :name=\"option.icon || 'circle-status'\"\n :class=\"[\n { [`tw-text-${option.color}`]: option.color },\n { 'tw-text-ice-700': !option.color && !option.hexCode },\n ]\"\n :style=\"{ color: option.hexCode }\"\n />\n <span class=\"tw-truncate tw-ml-1.5 tw-mr-6\">{{ option[props.displayBy] }}</span>\n </div>\n </template>\n\n <template #option=\"{ option }\">\n <div class=\"tw-flex tw-min-w-0\">\n <Icon\n data-test=\"svg|status-color\"\n :name=\"option.icon || 'circle-status'\"\n :class=\"[\n { [`tw-text-${option.color}`]: option.color },\n { 'tw-text-ice-700': !option.color && !option.hexCode },\n ]\"\n class=\"!tw-shrink-0\"\n :style=\"{ color: option.hexCode }\"\n />\n <span data-test=\"span|option-text\" class=\"tw-ml-1.5\" :class=\"!props.noTruncate && 'tw-truncate'\">\n {{ option[props.displayBy] }}\n </span>\n </div>\n </template>\n </Select>\n</template>\n\n<style module>\n :global(.stash-select-status--filled .stash-select__content) {\n border: none;\n padding: 0;\n }\n\n :global(.stash-select-status--filled\n .stash-select--active\n .stash-select__content:focus-within\n .stash-select__border-selector) {\n box-sizing: content-box;\n max-width: calc(100% - 2px);\n }\n\n :global(.stash-select-status--filled .stash-select-status--selected),\n :global(.stash-select-status--filled :has(.stash-select-status--selected) .icon--caret-down) {\n color: theme('colors.white');\n }\n\n :global(.stash-select-status--filled-dark .stash-select-status--selected),\n :global(.stash-select-status--filled-dark :has(.stash-select-status--selected) .icon--caret-down) {\n color: theme('colors.ice.900');\n }\n\n .select :global(.stash-select--disabled > .stash-select__content) {\n background-color: transparent;\n border-color: transparent;\n }\n\n .select :deep(.stash-select__chips) {\n margin: 0;\n }\n\n .select :global(.stash-select__options) {\n margin: 0;\n padding: 0;\n }\n\n .select ul {\n position: relative;\n }\n</style>\n"],"names":["DARK_FILL_COLORS","attrs","useAttrs","classes","useCssModule","props","valueOption","computed","status","hasDarkFill","color","getBgColor","onSelect","value","emit"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA2DQA,IAAmB,CAAC,SAAS,QAAQ,OAAO,UAAU,WAAW,aAAa,GAE9EC,IAAQC,KACRC,IAAUC;AAYhB,QAAIC,EAAM;AACF,YAAA,IAAI,MAAM,kEAAkE;AAGpF,QAAIJ,EAAM;AACF,YAAA,IAAI,MAAM,uEAAuE;AAWnF,UAAAK,IAAcC,EAAS,MACpBF,EAAM,cAAc,KAAK,CAACG,MAAWA,EAAOH,EAAM,OAAO,MAAMA,EAAM,UAAU,CACvF,GAEKI,IAAcF,EAAS,MAAM;AACjC,YAAM,EAAE,OAAAG,IAAQ,GAAA,IAAOJ,EAAY,SAAS,CAAA;AACrC,aAAAN,EAAiB,SAASU,CAAK;AAAA,IAAA,CACvC;AAMD,aAASC,EAAWD,GAAuB;AACzC,aAAO,SAASA,CAAK;AAAA,IACvB;AAEA,aAASE,EAASC,GAAkC;AAClD,MAAAC,EAAK,uBAAsBD,KAAA,gBAAAA,EAAQR,EAAM,aAAY,EAAE;AAAA,IACzD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/dist/Textarea.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { defineComponent as
|
|
2
|
-
import
|
|
3
|
-
import { _ as
|
|
4
|
-
import { _ as
|
|
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-475832fe.js";
|
|
4
|
+
import { _ as F } from "./_plugin-vue_export-helper-dad06003.js";
|
|
5
5
|
import "./Label.vue_vue_type_script_setup_true_lang-1d29d98a.js";
|
|
6
6
|
import "./locale.js";
|
|
7
7
|
import "lodash-es/get";
|
|
8
|
-
const
|
|
8
|
+
const L = ["id", "value"], N = /* @__PURE__ */ R({
|
|
9
9
|
name: "ll-textarea",
|
|
10
10
|
__name: "Textarea",
|
|
11
11
|
props: {
|
|
@@ -14,48 +14,97 @@ const B = ["id", "value"], E = /* @__PURE__ */ _({
|
|
|
14
14
|
value: { default: null },
|
|
15
15
|
errorText: { default: "" },
|
|
16
16
|
hintText: { default: "" },
|
|
17
|
-
showOptionalInLabel: { type: Boolean, default: !1 }
|
|
17
|
+
showOptionalInLabel: { type: Boolean, default: !1 },
|
|
18
|
+
resize: { type: [Boolean, Object], default: !1 }
|
|
18
19
|
},
|
|
19
20
|
emits: ["update:model-value"],
|
|
20
|
-
setup(
|
|
21
|
-
const
|
|
22
|
-
const e = { ...
|
|
21
|
+
setup(g, { emit: w }) {
|
|
22
|
+
const s = g, b = j("textarea-"), f = C(), y = S(), c = h(), l = h(), z = k(() => {
|
|
23
|
+
const e = { ...f };
|
|
23
24
|
return delete e["data-test"], delete e.class, e;
|
|
24
|
-
})
|
|
25
|
-
|
|
25
|
+
});
|
|
26
|
+
H(
|
|
27
|
+
() => s.resize,
|
|
28
|
+
(e) => {
|
|
29
|
+
var t;
|
|
30
|
+
e ? m() : (t = l.value) == null || t.disconnect();
|
|
31
|
+
}
|
|
32
|
+
);
|
|
33
|
+
const T = (e) => {
|
|
34
|
+
w("update:model-value", e.target.value);
|
|
35
|
+
}, m = () => {
|
|
36
|
+
l.value || !c.value || (l.value = new ResizeObserver(([e]) => {
|
|
37
|
+
const { target: t } = e, o = v(c.value) || document.documentElement, { scrollTop: n } = o;
|
|
38
|
+
let a = 0;
|
|
39
|
+
if (o === document.documentElement) {
|
|
40
|
+
const { top: r, height: i } = B(t), { innerHeight: u } = window;
|
|
41
|
+
a = Math.max(r + i - (u + n), 0);
|
|
42
|
+
} else {
|
|
43
|
+
const { top: r, height: i } = t.getBoundingClientRect(), { top: u } = o.getBoundingClientRect(), { offsetHeight: d } = o, E = r - u;
|
|
44
|
+
a = Math.max(E + i - d, 0);
|
|
45
|
+
}
|
|
46
|
+
a && requestAnimationFrame(() => {
|
|
47
|
+
o.scrollTop = n + a;
|
|
48
|
+
});
|
|
49
|
+
}), l.value.observe(c.value));
|
|
50
|
+
}, v = (e) => {
|
|
51
|
+
const t = e.parentElement;
|
|
52
|
+
if (!t)
|
|
53
|
+
return null;
|
|
54
|
+
const { overflowY: o } = getComputedStyle(t);
|
|
55
|
+
return o !== "visible" ? t : t === document.body ? document.documentElement : v(t);
|
|
56
|
+
}, B = (e) => {
|
|
57
|
+
const { offsetWidth: t, offsetHeight: o } = e;
|
|
58
|
+
let n = 0, a = 0;
|
|
59
|
+
const r = function({ offsetLeft: i, offsetTop: u, offsetParent: d }) {
|
|
60
|
+
n += i, a += u, d && r(d);
|
|
61
|
+
};
|
|
62
|
+
return r(e), {
|
|
63
|
+
top: a,
|
|
64
|
+
left: n,
|
|
65
|
+
width: t,
|
|
66
|
+
height: o
|
|
67
|
+
};
|
|
26
68
|
};
|
|
27
|
-
return
|
|
28
|
-
|
|
69
|
+
return I(async () => {
|
|
70
|
+
var e;
|
|
71
|
+
if (s.value !== null)
|
|
29
72
|
throw new Error("ll-input: use :model-value or v-model instead of :value.");
|
|
30
|
-
if (
|
|
73
|
+
if (f.onInput)
|
|
31
74
|
throw new Error("ll-input: use the @update:model-value event instead of @input");
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
75
|
+
(typeof s.resize == "boolean" && s.resize || (e = s.resize) != null && e.forceBrowserScroll) && (await O(), m());
|
|
76
|
+
}), A(() => {
|
|
77
|
+
var e;
|
|
78
|
+
(e = l.value) == null || e.disconnect();
|
|
79
|
+
}), (e, t) => (M(), P(D, _(s, {
|
|
80
|
+
id: p(b),
|
|
81
|
+
class: ["stash-textarea", [p(f).class]],
|
|
35
82
|
"data-test": "stash-textarea"
|
|
36
|
-
}),
|
|
37
|
-
default:
|
|
38
|
-
|
|
39
|
-
id:
|
|
40
|
-
|
|
83
|
+
}), V({
|
|
84
|
+
default: x(({ fieldId: o, hasError: n }) => [
|
|
85
|
+
q("textarea", _({
|
|
86
|
+
id: o,
|
|
87
|
+
ref_key: "textareaRef",
|
|
88
|
+
ref: c,
|
|
89
|
+
class: { "stash-textarea--error": n, "tw-resize-y": e.resize, "tw-resize-none": !e.resize },
|
|
41
90
|
value: e.modelValue,
|
|
42
91
|
"data-test": "stash-textarea|textarea"
|
|
43
|
-
},
|
|
92
|
+
}, z.value, { onInput: T }), null, 16, L)
|
|
44
93
|
]),
|
|
45
94
|
_: 2
|
|
46
95
|
}, [
|
|
47
|
-
|
|
96
|
+
p(y).hint ? {
|
|
48
97
|
name: "hint",
|
|
49
|
-
fn:
|
|
50
|
-
|
|
98
|
+
fn: x(() => [
|
|
99
|
+
$(e.$slots, "hint", {}, void 0, !0)
|
|
51
100
|
]),
|
|
52
101
|
key: "0"
|
|
53
102
|
} : void 0
|
|
54
103
|
]), 1040, ["id", "class"]));
|
|
55
104
|
}
|
|
56
105
|
});
|
|
57
|
-
const
|
|
106
|
+
const X = /* @__PURE__ */ F(N, [["__scopeId", "data-v-59ed175b"]]);
|
|
58
107
|
export {
|
|
59
|
-
|
|
108
|
+
X as default
|
|
60
109
|
};
|
|
61
110
|
//# sourceMappingURL=Textarea.js.map
|
package/dist/Textarea.js.map
CHANGED
|
@@ -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, onMounted, useAttrs, useSlots } from 'vue';\n\n import Field from '../Field/Field.vue';\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\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 });\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 inputAttrs = computed(() => {\n const allAttrs = { ...attrs };\n\n delete allAttrs['data-test'];\n delete allAttrs.class;\n\n return allAttrs;\n });\n\n const onInput = (event: Event) => {\n emits('update:model-value', (event.target as HTMLTextAreaElement).value);\n };\n\n onMounted(() => {\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</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 :class=\"{ 'stash-textarea--error': hasError }\"\n :value=\"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: theme(colors.white);\n border: 1px solid;\n border-color: theme(colors.ice.DEFAULT);\n border-radius: theme(borderRadius.DEFAULT);\n color: theme(colors.ice.700);\n display: block;\n min-height: 100px;\n
|
|
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': resize, 'tw-resize-none': !resize }\"\n :value=\"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: theme(colors.white);\n border: 1px solid;\n border-color: theme(colors.ice.DEFAULT);\n border-radius: theme(borderRadius.DEFAULT);\n color: theme(colors.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: theme(colors.ice.DEFAULT);\n }\n\n &:focus,\n &:active {\n border-color: theme(colors.blue.DEFAULT);\n }\n\n &.stash-textarea--error {\n border-color: theme(colors.red.DEFAULT);\n color: theme(colors.red.DEFAULT);\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":"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"}
|
package/dist/Textarea.vue.d.ts
CHANGED
|
@@ -40,6 +40,7 @@ declare const _default: __VLS_WithTemplateSlots<DefineComponent<__VLS_WithDefaul
|
|
|
40
40
|
errorText: string;
|
|
41
41
|
hintText: string;
|
|
42
42
|
showOptionalInLabel: boolean;
|
|
43
|
+
resize: boolean;
|
|
43
44
|
}>, {}, unknown, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
|
|
44
45
|
"update:model-value": (value: string) => void;
|
|
45
46
|
}, string, VNodeProps & AllowedComponentProps & ComponentCustomProps, Readonly<ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<TextAreaProps>, {
|
|
@@ -49,10 +50,12 @@ declare const _default: __VLS_WithTemplateSlots<DefineComponent<__VLS_WithDefaul
|
|
|
49
50
|
errorText: string;
|
|
50
51
|
hintText: string;
|
|
51
52
|
showOptionalInLabel: boolean;
|
|
53
|
+
resize: boolean;
|
|
52
54
|
}>>> & {
|
|
53
55
|
"onUpdate:model-value"?: ((value: string) => any) | undefined;
|
|
54
56
|
}, {
|
|
55
57
|
label: string;
|
|
58
|
+
resize: boolean | TextareaResizeOptions;
|
|
56
59
|
value: string | number | null;
|
|
57
60
|
errorText: string;
|
|
58
61
|
hintText: string;
|
|
@@ -89,6 +92,18 @@ export declare interface TextAreaProps {
|
|
|
89
92
|
* Render "(optional)" to the right of the label text
|
|
90
93
|
*/
|
|
91
94
|
showOptionalInLabel?: boolean;
|
|
95
|
+
/**
|
|
96
|
+
* Allow textarea to be resizable vertically.
|
|
97
|
+
* Alternatively if you want to disable automatic scroll when resizing, you can set `{ forceBrowserScroll: false }`
|
|
98
|
+
*/
|
|
99
|
+
resize?: boolean | TextareaResizeOptions;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
export declare interface TextareaResizeOptions {
|
|
103
|
+
/**
|
|
104
|
+
* It will automatically scroll the page down when it reaches the bottom of the viewport/element
|
|
105
|
+
*/
|
|
106
|
+
forceBrowserScroll: boolean;
|
|
92
107
|
}
|
|
93
108
|
|
|
94
109
|
export { }
|
package/dist/Toast.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
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
2
|
import y from "lodash-es/capitalize";
|
|
3
|
-
import {
|
|
3
|
+
import { S as a, b as q } from "./statusLevels-aabf1e3c.js";
|
|
4
4
|
import x from "./Icon.js";
|
|
5
5
|
import { _ as S } from "./_plugin-vue_export-helper-dad06003.js";
|
|
6
6
|
import "lodash-es/uniqueId";
|
package/dist/Toasts.js
CHANGED
|
@@ -5,7 +5,7 @@ import { _ as x } from "./_plugin-vue_export-helper-dad06003.js";
|
|
|
5
5
|
import "lodash-es/merge";
|
|
6
6
|
import "lodash-es/uniqueId";
|
|
7
7
|
import "lodash-es/capitalize";
|
|
8
|
-
import "./statusLevels-
|
|
8
|
+
import "./statusLevels-aabf1e3c.js";
|
|
9
9
|
import "./Icon.js";
|
|
10
10
|
import "./index-79ce320f.js";
|
|
11
11
|
import "./Icon.vue_used_vue_type_style_index_0_lang.module-eb359559.js";
|
package/dist/ToastsPlugin.js
CHANGED
|
@@ -5,7 +5,7 @@ import "lodash-es/merge";
|
|
|
5
5
|
import "lodash-es/uniqueId";
|
|
6
6
|
import "./Toast.js";
|
|
7
7
|
import "lodash-es/capitalize";
|
|
8
|
-
import "./statusLevels-
|
|
8
|
+
import "./statusLevels-aabf1e3c.js";
|
|
9
9
|
import "./Icon.js";
|
|
10
10
|
import "./index-79ce320f.js";
|
|
11
11
|
import "./Icon.vue_used_vue_type_style_index_0_lang.module-eb359559.js";
|