cisse-vue-ui 0.5.22 → 0.5.23
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/{Button.vue_vue_type_script_setup_true_lang-DKE8elsf.js → Button.vue_vue_type_script_setup_true_lang-CD9QPOeU.js} +13 -4
- package/dist/Button.vue_vue_type_script_setup_true_lang-CD9QPOeU.js.map +1 -0
- package/dist/{Button.vue_vue_type_script_setup_true_lang-DrGM65ny.cjs → Button.vue_vue_type_script_setup_true_lang-Cev21KGJ.cjs} +13 -4
- package/dist/Button.vue_vue_type_script_setup_true_lang-Cev21KGJ.cjs.map +1 -0
- package/dist/{Combobox.vue_vue_type_script_setup_true_lang-FdUrjmSG.cjs → Combobox.vue_vue_type_script_setup_true_lang-D9TIId4E.cjs} +233 -101
- package/dist/Combobox.vue_vue_type_script_setup_true_lang-D9TIId4E.cjs.map +1 -0
- package/dist/{Combobox.vue_vue_type_script_setup_true_lang-DhcLb6DX.js → Combobox.vue_vue_type_script_setup_true_lang-DCLKWzhc.js} +234 -102
- package/dist/Combobox.vue_vue_type_script_setup_true_lang-DCLKWzhc.js.map +1 -0
- package/dist/{ConfirmDialog.vue_vue_type_script_setup_true_lang-DXb9wQQv.cjs → ConfirmDialog.vue_vue_type_script_setup_true_lang-CwHYxBhR.cjs} +76 -29
- package/dist/ConfirmDialog.vue_vue_type_script_setup_true_lang-CwHYxBhR.cjs.map +1 -0
- package/dist/{ConfirmDialog.vue_vue_type_script_setup_true_lang-CNucAMQg.js → ConfirmDialog.vue_vue_type_script_setup_true_lang-Dm4kLAnr.js} +77 -30
- package/dist/ConfirmDialog.vue_vue_type_script_setup_true_lang-Dm4kLAnr.js.map +1 -0
- package/dist/{DarkModeToggle.vue_vue_type_script_setup_true_lang-BoB48313.cjs → DarkModeToggle.vue_vue_type_script_setup_true_lang-CSxGvdSP.cjs} +76 -44
- package/dist/DarkModeToggle.vue_vue_type_script_setup_true_lang-CSxGvdSP.cjs.map +1 -0
- package/dist/{DarkModeToggle.vue_vue_type_script_setup_true_lang-43fxlbro.js → DarkModeToggle.vue_vue_type_script_setup_true_lang-D1Q43mhJ.js} +76 -44
- package/dist/DarkModeToggle.vue_vue_type_script_setup_true_lang-D1Q43mhJ.js.map +1 -0
- package/dist/{Dropdown.vue_vue_type_script_setup_true_lang-DKxcVBKu.cjs → Dropdown.vue_vue_type_script_setup_true_lang-DNeh9Gi-.cjs} +32 -15
- package/dist/Dropdown.vue_vue_type_script_setup_true_lang-DNeh9Gi-.cjs.map +1 -0
- package/dist/{Dropdown.vue_vue_type_script_setup_true_lang-C3pr8BwC.js → Dropdown.vue_vue_type_script_setup_true_lang-DXV811zB.js} +32 -15
- package/dist/Dropdown.vue_vue_type_script_setup_true_lang-DXV811zB.js.map +1 -0
- package/dist/{PageLayout.vue_vue_type_script_setup_true_lang-D22uNeS1.cjs → PageLayout.vue_vue_type_script_setup_true_lang-C0YzyJnK.cjs} +2 -2
- package/dist/{PageLayout.vue_vue_type_script_setup_true_lang-D22uNeS1.cjs.map → PageLayout.vue_vue_type_script_setup_true_lang-C0YzyJnK.cjs.map} +1 -1
- package/dist/{PageLayout.vue_vue_type_script_setup_true_lang-kT7np2ir.js → PageLayout.vue_vue_type_script_setup_true_lang-ClzYGS8h.js} +2 -2
- package/dist/{PageLayout.vue_vue_type_script_setup_true_lang-kT7np2ir.js.map → PageLayout.vue_vue_type_script_setup_true_lang-ClzYGS8h.js.map} +1 -1
- package/dist/components/core/AccordionItem.vue.d.ts +2 -0
- package/dist/components/core/Dropdown.vue.d.ts +2 -0
- package/dist/components/core/Popover.vue.d.ts +2 -0
- package/dist/components/core/Tooltip.vue.d.ts +2 -0
- package/dist/components/core/index.cjs +3 -3
- package/dist/components/core/index.js +3 -3
- package/dist/components/core/index.test.d.ts +1 -0
- package/dist/components/feedback/LoadingSpinner.vue.d.ts +6 -1
- package/dist/components/feedback/Modal.vue.d.ts +8 -2
- package/dist/components/feedback/index.cjs +2 -2
- package/dist/components/feedback/index.js +2 -2
- package/dist/components/feedback/index.test.d.ts +1 -0
- package/dist/components/form/Checkbox.vue.d.ts +2 -0
- package/dist/components/form/DatePicker.vue.d.ts +2 -0
- package/dist/components/form/FormHelp.vue.d.ts +2 -0
- package/dist/components/form/Switch.vue.d.ts +2 -0
- package/dist/components/form/index.cjs +2 -2
- package/dist/components/form/index.js +2 -2
- package/dist/components/form/index.test.d.ts +1 -0
- package/dist/components/index.cjs +7 -7
- package/dist/components/index.js +7 -7
- package/dist/components/index.test.d.ts +1 -0
- package/dist/components/layout/index.cjs +1 -1
- package/dist/components/layout/index.js +1 -1
- package/dist/components/layout/index.test.d.ts +1 -0
- package/dist/components/type/index.test.d.ts +1 -0
- package/dist/composables/index.cjs +6 -0
- package/dist/composables/index.cjs.map +1 -1
- package/dist/composables/index.d.ts +2 -0
- package/dist/composables/index.js +6 -0
- package/dist/composables/index.js.map +1 -1
- package/dist/composables/index.test.d.ts +1 -0
- package/dist/composables/useDarkMode.test.d.ts +1 -0
- package/dist/composables/useDropdown.test.d.ts +1 -0
- package/dist/composables/useExportCSV.test.d.ts +1 -0
- package/dist/composables/useFocusTrap.d.ts +41 -0
- package/dist/composables/useFocusTrap.test.d.ts +1 -0
- package/dist/composables/useId.d.ts +42 -0
- package/dist/composables/useId.test.d.ts +1 -0
- package/dist/composables/useModal.d.ts +1 -1
- package/dist/composables/useModal.test.d.ts +1 -0
- package/dist/{index-DZYqrXV0.js → index-BMoLBt6A.js} +8 -8
- package/dist/index-BMoLBt6A.js.map +1 -0
- package/dist/{index-Dghdw1yo.js → index-CJwlO351.js} +18 -9
- package/dist/index-CJwlO351.js.map +1 -0
- package/dist/{index-D7HVSFi2.cjs → index-CUNU12xk.cjs} +17 -8
- package/dist/index-CUNU12xk.cjs.map +1 -0
- package/dist/{index-DjEv91o4.cjs → index-DwFvFW-3.cjs} +8 -8
- package/dist/index-DwFvFW-3.cjs.map +1 -0
- package/dist/index.cjs +14 -8
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +14 -8
- package/dist/index.js.map +1 -1
- package/dist/index.test.d.ts +1 -0
- package/dist/types/form.d.ts +4 -0
- package/dist/types/index.test.d.ts +1 -0
- package/dist/useFocusTrap-AnlJsihM.js +120 -0
- package/dist/useFocusTrap-AnlJsihM.js.map +1 -0
- package/dist/useFocusTrap-kcxO8AeU.cjs +119 -0
- package/dist/useFocusTrap-kcxO8AeU.cjs.map +1 -0
- package/dist/useId-nxrBaIC9.cjs +25 -0
- package/dist/useId-nxrBaIC9.cjs.map +1 -0
- package/dist/useId-xeHj7rkg.js +26 -0
- package/dist/useId-xeHj7rkg.js.map +1 -0
- package/dist/useToast-Bk60GArg.cjs.map +1 -1
- package/dist/useToast-ina5g3mj.js.map +1 -1
- package/package.json +9 -8
- package/dist/Button.vue_vue_type_script_setup_true_lang-DKE8elsf.js.map +0 -1
- package/dist/Button.vue_vue_type_script_setup_true_lang-DrGM65ny.cjs.map +0 -1
- package/dist/Combobox.vue_vue_type_script_setup_true_lang-DhcLb6DX.js.map +0 -1
- package/dist/Combobox.vue_vue_type_script_setup_true_lang-FdUrjmSG.cjs.map +0 -1
- package/dist/ConfirmDialog.vue_vue_type_script_setup_true_lang-CNucAMQg.js.map +0 -1
- package/dist/ConfirmDialog.vue_vue_type_script_setup_true_lang-DXb9wQQv.cjs.map +0 -1
- package/dist/DarkModeToggle.vue_vue_type_script_setup_true_lang-43fxlbro.js.map +0 -1
- package/dist/DarkModeToggle.vue_vue_type_script_setup_true_lang-BoB48313.cjs.map +0 -1
- package/dist/Dropdown.vue_vue_type_script_setup_true_lang-C3pr8BwC.js.map +0 -1
- package/dist/Dropdown.vue_vue_type_script_setup_true_lang-DKxcVBKu.cjs.map +0 -1
- package/dist/index-D7HVSFi2.cjs.map +0 -1
- package/dist/index-DZYqrXV0.js.map +0 -1
- package/dist/index-Dghdw1yo.js.map +0 -1
- package/dist/index-DjEv91o4.cjs.map +0 -1
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
const vue = require("vue");
|
|
3
|
+
const useId = require("./useId-nxrBaIC9.cjs");
|
|
3
4
|
const vue$1 = require("@iconify/vue");
|
|
4
5
|
const useDropdown = require("./useDropdown-DHFnd259.cjs");
|
|
5
6
|
const _pluginVue_exportHelper = require("./_plugin-vue_export-helper-DM9IkUGy.cjs");
|
|
6
|
-
const index = require("./index-
|
|
7
|
+
const index = require("./index-CUNU12xk.cjs");
|
|
7
8
|
const _hoisted_1$d = ["data-error", "for"];
|
|
8
9
|
const _sfc_main$d = /* @__PURE__ */ vue.defineComponent({
|
|
9
10
|
__name: "FormLabel",
|
|
@@ -23,17 +24,21 @@ const _sfc_main$d = /* @__PURE__ */ vue.defineComponent({
|
|
|
23
24
|
};
|
|
24
25
|
}
|
|
25
26
|
});
|
|
26
|
-
const _hoisted_1$c = ["data-error"];
|
|
27
|
+
const _hoisted_1$c = ["id", "data-error", "role", "aria-live"];
|
|
27
28
|
const _sfc_main$c = /* @__PURE__ */ vue.defineComponent({
|
|
28
29
|
__name: "FormHelp",
|
|
29
30
|
props: {
|
|
31
|
+
id: {},
|
|
30
32
|
error: { type: Boolean },
|
|
31
33
|
text: {}
|
|
32
34
|
},
|
|
33
35
|
setup(__props) {
|
|
34
36
|
return (_ctx, _cache) => {
|
|
35
37
|
return vue.openBlock(), vue.createElementBlock("p", {
|
|
38
|
+
id: __props.id,
|
|
36
39
|
"data-error": __props.error,
|
|
40
|
+
role: __props.error ? "alert" : void 0,
|
|
41
|
+
"aria-live": __props.error ? "polite" : void 0,
|
|
37
42
|
class: "mt-2 text-sm text-gray-400 peer-user-invalid:visible data-[error=true]:text-red-500 dark:text-gray-500"
|
|
38
43
|
}, [
|
|
39
44
|
vue.renderSlot(_ctx.$slots, "default", {}, () => [
|
|
@@ -43,7 +48,7 @@ const _sfc_main$c = /* @__PURE__ */ vue.defineComponent({
|
|
|
43
48
|
};
|
|
44
49
|
}
|
|
45
50
|
});
|
|
46
|
-
const _hoisted_1$b = ["id", "disabled", "name", "placeholder", "type"];
|
|
51
|
+
const _hoisted_1$b = ["id", "disabled", "name", "placeholder", "type", "required", "aria-invalid", "aria-required", "aria-describedby"];
|
|
47
52
|
const _sfc_main$b = /* @__PURE__ */ vue.defineComponent({
|
|
48
53
|
__name: "FormInput",
|
|
49
54
|
props: /* @__PURE__ */ vue.mergeModels({
|
|
@@ -53,22 +58,29 @@ const _sfc_main$b = /* @__PURE__ */ vue.defineComponent({
|
|
|
53
58
|
disabled: { type: Boolean },
|
|
54
59
|
invalid: { type: Boolean },
|
|
55
60
|
id: {},
|
|
56
|
-
name: {}
|
|
61
|
+
name: {},
|
|
62
|
+
required: { type: Boolean },
|
|
63
|
+
describedBy: {}
|
|
57
64
|
}, {
|
|
58
65
|
"modelValue": {},
|
|
59
66
|
"modelModifiers": {}
|
|
60
67
|
}),
|
|
61
68
|
emits: ["update:modelValue"],
|
|
62
69
|
setup(__props) {
|
|
70
|
+
const props = __props;
|
|
63
71
|
const modelValue = vue.useModel(__props, "modelValue");
|
|
64
72
|
return (_ctx, _cache) => {
|
|
65
73
|
return vue.withDirectives((vue.openBlock(), vue.createElementBlock("input", vue.mergeProps({
|
|
66
|
-
id:
|
|
74
|
+
id: props.id ?? props.name ?? "",
|
|
67
75
|
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => modelValue.value = $event),
|
|
68
|
-
disabled:
|
|
69
|
-
name:
|
|
70
|
-
placeholder:
|
|
71
|
-
type:
|
|
76
|
+
disabled: props.disabled,
|
|
77
|
+
name: props.name ?? "",
|
|
78
|
+
placeholder: props.placeholder,
|
|
79
|
+
type: props.type,
|
|
80
|
+
required: props.required,
|
|
81
|
+
"aria-invalid": props.invalid || void 0,
|
|
82
|
+
"aria-required": props.required || void 0,
|
|
83
|
+
"aria-describedby": props.describedBy || void 0,
|
|
72
84
|
class: "mt-1 block w-full rounded-md border border-gray-300 bg-white px-3 py-2 text-sm text-gray-800 placeholder-gray-400 shadow-sm user-invalid:border-red-500 user-invalid:text-red-600 focus:border-primary focus:ring-1 focus:ring-primary focus:outline-none focus:user-invalid:border-red-500 focus:user-invalid:ring-red-500 disabled:border-gray-200 disabled:bg-gray-50 disabled:text-gray-500 disabled:shadow-none dark:border-gray-700 dark:bg-gray-900 dark:text-gray-200 dark:placeholder-gray-500 dark:focus:border-primary dark:focus:ring-primary dark:disabled:border-gray-800 dark:disabled:bg-gray-950 dark:disabled:text-gray-500"
|
|
73
85
|
}, _ctx.$attrs), null, 16, _hoisted_1$b)), [
|
|
74
86
|
[vue.vModelDynamic, modelValue.value]
|
|
@@ -77,24 +89,27 @@ const _sfc_main$b = /* @__PURE__ */ vue.defineComponent({
|
|
|
77
89
|
}
|
|
78
90
|
});
|
|
79
91
|
const _hoisted_1$a = { class: "relative" };
|
|
80
|
-
const _hoisted_2$9 = ["id", "disabled"];
|
|
92
|
+
const _hoisted_2$9 = ["id", "disabled", "aria-expanded", "aria-controls", "aria-invalid", "aria-describedby"];
|
|
81
93
|
const _hoisted_3$8 = { class: "flex-1 truncate" };
|
|
82
|
-
const _hoisted_4$6 =
|
|
94
|
+
const _hoisted_4$6 = ["id", "aria-label"];
|
|
95
|
+
const _hoisted_5$5 = {
|
|
83
96
|
key: 0,
|
|
84
97
|
class: "sticky top-0 border-b border-gray-200 bg-white p-2 dark:border-gray-700 dark:bg-gray-800"
|
|
85
98
|
};
|
|
86
|
-
const
|
|
87
|
-
const
|
|
99
|
+
const _hoisted_6$5 = { class: "flex items-center gap-2 rounded-md border border-gray-300 bg-gray-50 px-2 py-1.5 dark:border-gray-600 dark:bg-gray-900" };
|
|
100
|
+
const _hoisted_7$5 = {
|
|
88
101
|
key: 1,
|
|
89
|
-
class: "px-4 py-3 text-sm text-gray-500 dark:text-gray-400"
|
|
102
|
+
class: "px-4 py-3 text-sm text-gray-500 dark:text-gray-400",
|
|
103
|
+
role: "status"
|
|
90
104
|
};
|
|
91
|
-
const
|
|
92
|
-
const
|
|
93
|
-
const
|
|
105
|
+
const _hoisted_8$4 = { class: "py-1" };
|
|
106
|
+
const _hoisted_9$2 = ["aria-selected", "data-index", "onClick", "onMouseenter"];
|
|
107
|
+
const _hoisted_10$2 = {
|
|
94
108
|
key: 1,
|
|
95
|
-
class: "size-4 shrink-0"
|
|
109
|
+
class: "size-4 shrink-0",
|
|
110
|
+
"aria-hidden": "true"
|
|
96
111
|
};
|
|
97
|
-
const
|
|
112
|
+
const _hoisted_11$2 = { class: "flex-1" };
|
|
98
113
|
const _sfc_main$a = /* @__PURE__ */ vue.defineComponent({
|
|
99
114
|
__name: "FormSelect",
|
|
100
115
|
props: /* @__PURE__ */ vue.mergeModels({
|
|
@@ -106,6 +121,8 @@ const _sfc_main$a = /* @__PURE__ */ vue.defineComponent({
|
|
|
106
121
|
invalid: { type: Boolean },
|
|
107
122
|
id: {},
|
|
108
123
|
name: {},
|
|
124
|
+
required: { type: Boolean },
|
|
125
|
+
describedBy: {},
|
|
109
126
|
teleport: { type: Boolean, default: true },
|
|
110
127
|
searchable: { type: Boolean, default: false },
|
|
111
128
|
noResultsText: { default: "No results found" },
|
|
@@ -117,6 +134,9 @@ const _sfc_main$a = /* @__PURE__ */ vue.defineComponent({
|
|
|
117
134
|
emits: ["update:modelValue"],
|
|
118
135
|
setup(__props) {
|
|
119
136
|
const props = __props;
|
|
137
|
+
const { id: generatedId, related } = useId.useId({ prefix: "select", id: props.id });
|
|
138
|
+
const triggerId = vue.computed(() => props.id ?? props.name ?? generatedId.value);
|
|
139
|
+
const listboxId = vue.computed(() => related("listbox"));
|
|
120
140
|
const modelValue = vue.useModel(__props, "modelValue");
|
|
121
141
|
const searchQuery = vue.ref("");
|
|
122
142
|
const triggerRef = vue.ref();
|
|
@@ -210,12 +230,17 @@ const _sfc_main$a = /* @__PURE__ */ vue.defineComponent({
|
|
|
210
230
|
return (_ctx, _cache) => {
|
|
211
231
|
return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$a, [
|
|
212
232
|
vue.createElementVNode("button", {
|
|
213
|
-
id:
|
|
233
|
+
id: triggerId.value,
|
|
214
234
|
ref_key: "triggerRef",
|
|
215
235
|
ref: triggerRef,
|
|
216
236
|
type: "button",
|
|
217
237
|
disabled: __props.disabled,
|
|
218
238
|
class: vue.normalizeClass(triggerClasses.value),
|
|
239
|
+
"aria-haspopup": "listbox",
|
|
240
|
+
"aria-expanded": vue.unref(isOpen),
|
|
241
|
+
"aria-controls": listboxId.value,
|
|
242
|
+
"aria-invalid": __props.invalid || void 0,
|
|
243
|
+
"aria-describedby": __props.describedBy || void 0,
|
|
219
244
|
onClick: toggle,
|
|
220
245
|
onKeydown: handleKeydown
|
|
221
246
|
}, [
|
|
@@ -227,7 +252,8 @@ const _sfc_main$a = /* @__PURE__ */ vue.defineComponent({
|
|
|
227
252
|
]),
|
|
228
253
|
vue.createVNode(vue.unref(vue$1.Icon), {
|
|
229
254
|
icon: "lucide:chevron-down",
|
|
230
|
-
class: vue.normalizeClass(["size-4 shrink-0 text-gray-400 transition-transform", vue.unref(isOpen) && "rotate-180"])
|
|
255
|
+
class: vue.normalizeClass(["size-4 shrink-0 text-gray-400 transition-transform", vue.unref(isOpen) && "rotate-180"]),
|
|
256
|
+
"aria-hidden": "true"
|
|
231
257
|
}, null, 8, ["class"])
|
|
232
258
|
], 42, _hoisted_2$9),
|
|
233
259
|
(vue.openBlock(), vue.createBlock(vue.Teleport, {
|
|
@@ -245,19 +271,23 @@ const _sfc_main$a = /* @__PURE__ */ vue.defineComponent({
|
|
|
245
271
|
default: vue.withCtx(() => [
|
|
246
272
|
vue.unref(isOpen) ? (vue.openBlock(), vue.createElementBlock("div", {
|
|
247
273
|
key: 0,
|
|
274
|
+
id: listboxId.value,
|
|
248
275
|
ref_key: "dropdownRef",
|
|
249
276
|
ref: dropdownRef,
|
|
277
|
+
role: "listbox",
|
|
278
|
+
"aria-label": __props.placeholder || "Select an option",
|
|
250
279
|
style: vue.normalizeStyle(vue.unref(dropdownStyle)),
|
|
251
280
|
class: vue.normalizeClass([
|
|
252
281
|
"z-[9999] max-h-60 overflow-auto rounded-lg border border-gray-200 bg-white shadow-lg dark:border-gray-700 dark:bg-gray-800",
|
|
253
282
|
!__props.teleport && "absolute mt-1 w-full"
|
|
254
283
|
])
|
|
255
284
|
}, [
|
|
256
|
-
__props.searchable ? (vue.openBlock(), vue.createElementBlock("div",
|
|
257
|
-
vue.createElementVNode("div",
|
|
285
|
+
__props.searchable ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_5$5, [
|
|
286
|
+
vue.createElementVNode("div", _hoisted_6$5, [
|
|
258
287
|
vue.createVNode(vue.unref(vue$1.Icon), {
|
|
259
288
|
icon: "lucide:search",
|
|
260
|
-
class: "size-4 text-gray-400"
|
|
289
|
+
class: "size-4 text-gray-400",
|
|
290
|
+
"aria-hidden": "true"
|
|
261
291
|
}),
|
|
262
292
|
vue.withDirectives(vue.createElementVNode("input", {
|
|
263
293
|
ref_key: "searchInputRef",
|
|
@@ -266,18 +296,21 @@ const _sfc_main$a = /* @__PURE__ */ vue.defineComponent({
|
|
|
266
296
|
type: "text",
|
|
267
297
|
class: "flex-1 bg-transparent text-sm outline-none dark:text-white",
|
|
268
298
|
placeholder: "Search...",
|
|
299
|
+
"aria-label": "Search options",
|
|
269
300
|
onKeydown: handleKeydown
|
|
270
301
|
}, null, 544), [
|
|
271
302
|
[vue.vModelText, searchQuery.value]
|
|
272
303
|
])
|
|
273
304
|
])
|
|
274
305
|
])) : vue.createCommentVNode("", true),
|
|
275
|
-
filteredOptions.value.length === 0 ? (vue.openBlock(), vue.createElementBlock("div",
|
|
276
|
-
vue.createElementVNode("div",
|
|
306
|
+
filteredOptions.value.length === 0 ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_7$5, vue.toDisplayString(__props.noResultsText), 1)) : vue.createCommentVNode("", true),
|
|
307
|
+
vue.createElementVNode("div", _hoisted_8$4, [
|
|
277
308
|
(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(filteredOptions.value, (option, index2) => {
|
|
278
309
|
return vue.openBlock(), vue.createElementBlock("button", {
|
|
279
310
|
key: String(option.value),
|
|
280
311
|
type: "button",
|
|
312
|
+
role: "option",
|
|
313
|
+
"aria-selected": modelValue.value === option.value,
|
|
281
314
|
"data-index": index2,
|
|
282
315
|
class: vue.normalizeClass([
|
|
283
316
|
"flex w-full items-center gap-2 px-3 py-2 text-left text-sm transition-colors",
|
|
@@ -296,14 +329,15 @@ const _sfc_main$a = /* @__PURE__ */ vue.defineComponent({
|
|
|
296
329
|
modelValue.value === option.value ? (vue.openBlock(), vue.createBlock(vue.unref(vue$1.Icon), {
|
|
297
330
|
key: 0,
|
|
298
331
|
icon: "lucide:check",
|
|
299
|
-
class: "size-4 shrink-0 text-primary"
|
|
300
|
-
|
|
301
|
-
vue.
|
|
332
|
+
class: "size-4 shrink-0 text-primary",
|
|
333
|
+
"aria-hidden": "true"
|
|
334
|
+
})) : (vue.openBlock(), vue.createElementBlock("span", _hoisted_10$2)),
|
|
335
|
+
vue.createElementVNode("span", _hoisted_11$2, vue.toDisplayString(option.label), 1)
|
|
302
336
|
])
|
|
303
|
-
], 42,
|
|
337
|
+
], 42, _hoisted_9$2);
|
|
304
338
|
}), 128))
|
|
305
339
|
])
|
|
306
|
-
], 6)) : vue.createCommentVNode("", true)
|
|
340
|
+
], 14, _hoisted_4$6)) : vue.createCommentVNode("", true)
|
|
307
341
|
]),
|
|
308
342
|
_: 3
|
|
309
343
|
})
|
|
@@ -328,6 +362,8 @@ const _sfc_main$9 = /* @__PURE__ */ vue.defineComponent({
|
|
|
328
362
|
invalid: { type: Boolean },
|
|
329
363
|
id: {},
|
|
330
364
|
name: {},
|
|
365
|
+
required: { type: Boolean },
|
|
366
|
+
describedBy: {},
|
|
331
367
|
options: {}
|
|
332
368
|
}, {
|
|
333
369
|
"modelValue": {},
|
|
@@ -337,8 +373,12 @@ const _sfc_main$9 = /* @__PURE__ */ vue.defineComponent({
|
|
|
337
373
|
setup(__props) {
|
|
338
374
|
const props = __props;
|
|
339
375
|
const modelValue = vue.useModel(__props, "modelValue");
|
|
376
|
+
const { id: generatedId, related } = useId.useId({ prefix: "field", id: props.id });
|
|
377
|
+
const inputId = vue.computed(() => props.id ?? props.name ?? generatedId.value);
|
|
378
|
+
const helpId = vue.computed(() => related("help"));
|
|
340
379
|
const computedCols = vue.computed(() => `span ${props.cols} / span ${props.cols}`);
|
|
341
380
|
const isSelect = vue.computed(() => props.select === true);
|
|
381
|
+
const hasError = vue.computed(() => props.error && typeof props.error === "string");
|
|
342
382
|
return (_ctx, _cache) => {
|
|
343
383
|
return vue.openBlock(), vue.createElementBlock("div", {
|
|
344
384
|
style: vue.normalizeStyle({ gridColumn: computedCols.value }),
|
|
@@ -348,7 +388,7 @@ const _sfc_main$9 = /* @__PURE__ */ vue.defineComponent({
|
|
|
348
388
|
vue.renderSlot(_ctx.$slots, "label", {}, () => [
|
|
349
389
|
__props.label ? (vue.openBlock(), vue.createBlock(_sfc_main$d, {
|
|
350
390
|
key: 0,
|
|
351
|
-
"html-for":
|
|
391
|
+
"html-for": inputId.value,
|
|
352
392
|
error: __props.error
|
|
353
393
|
}, {
|
|
354
394
|
default: vue.withCtx(() => [
|
|
@@ -362,21 +402,30 @@ const _sfc_main$9 = /* @__PURE__ */ vue.defineComponent({
|
|
|
362
402
|
key: 0,
|
|
363
403
|
modelValue: modelValue.value,
|
|
364
404
|
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => modelValue.value = $event)
|
|
365
|
-
}, { ..._ctx.$attrs, ..._ctx.$props }
|
|
405
|
+
}, { ..._ctx.$attrs, ..._ctx.$props }, {
|
|
406
|
+
id: inputId.value,
|
|
407
|
+
invalid: Boolean(__props.error),
|
|
408
|
+
"described-by": hasError.value ? helpId.value : void 0
|
|
409
|
+
}), null, 16, ["modelValue", "id", "invalid", "described-by"])) : (vue.openBlock(), vue.createBlock(_sfc_main$b, vue.mergeProps({
|
|
366
410
|
key: 1,
|
|
367
411
|
modelValue: modelValue.value,
|
|
368
412
|
"onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => modelValue.value = $event)
|
|
369
|
-
}, { ..._ctx.$attrs, ..._ctx.$props }
|
|
413
|
+
}, { ..._ctx.$attrs, ..._ctx.$props }, {
|
|
414
|
+
id: inputId.value,
|
|
415
|
+
invalid: Boolean(__props.error),
|
|
416
|
+
"described-by": hasError.value ? helpId.value : void 0
|
|
417
|
+
}), null, 16, ["modelValue", "id", "invalid", "described-by"]))
|
|
370
418
|
]),
|
|
371
|
-
|
|
419
|
+
hasError.value ? (vue.openBlock(), vue.createBlock(_sfc_main$c, {
|
|
372
420
|
key: 0,
|
|
421
|
+
id: helpId.value,
|
|
373
422
|
error: true
|
|
374
423
|
}, {
|
|
375
424
|
default: vue.withCtx(() => [
|
|
376
425
|
vue.createTextVNode(vue.toDisplayString(__props.error), 1)
|
|
377
426
|
]),
|
|
378
427
|
_: 1
|
|
379
|
-
})) : vue.createCommentVNode("", true)
|
|
428
|
+
}, 8, ["id"])) : vue.createCommentVNode("", true)
|
|
380
429
|
])
|
|
381
430
|
], 12, _hoisted_1$9);
|
|
382
431
|
};
|
|
@@ -417,19 +466,13 @@ const _sfc_main$8 = /* @__PURE__ */ vue.defineComponent({
|
|
|
417
466
|
};
|
|
418
467
|
}
|
|
419
468
|
});
|
|
420
|
-
const _hoisted_1$7 = ["aria-checked", "disabled"];
|
|
469
|
+
const _hoisted_1$7 = ["id", "aria-checked", "aria-labelledby", "aria-describedby", "disabled"];
|
|
421
470
|
const _hoisted_2$7 = {
|
|
422
471
|
key: 0,
|
|
423
472
|
class: "flex flex-col"
|
|
424
473
|
};
|
|
425
|
-
const _hoisted_3$7 =
|
|
426
|
-
|
|
427
|
-
class: "text-sm font-medium text-gray-900 dark:text-white"
|
|
428
|
-
};
|
|
429
|
-
const _hoisted_4$5 = {
|
|
430
|
-
key: 1,
|
|
431
|
-
class: "text-sm text-gray-500 dark:text-gray-400"
|
|
432
|
-
};
|
|
474
|
+
const _hoisted_3$7 = ["id"];
|
|
475
|
+
const _hoisted_4$5 = ["id"];
|
|
433
476
|
const _sfc_main$7 = /* @__PURE__ */ vue.defineComponent({
|
|
434
477
|
__name: "Switch",
|
|
435
478
|
props: {
|
|
@@ -437,12 +480,17 @@ const _sfc_main$7 = /* @__PURE__ */ vue.defineComponent({
|
|
|
437
480
|
label: {},
|
|
438
481
|
description: {},
|
|
439
482
|
disabled: { type: Boolean },
|
|
440
|
-
size: { default: "md" }
|
|
483
|
+
size: { default: "md" },
|
|
484
|
+
id: {}
|
|
441
485
|
},
|
|
442
486
|
emits: ["update:modelValue"],
|
|
443
487
|
setup(__props, { emit: __emit }) {
|
|
444
488
|
const props = __props;
|
|
445
489
|
const emit = __emit;
|
|
490
|
+
const { id: generatedId, related } = useId.useId({ prefix: "switch", id: props.id });
|
|
491
|
+
const switchId = vue.computed(() => props.id ?? generatedId.value);
|
|
492
|
+
const labelId = vue.computed(() => related("label"));
|
|
493
|
+
const descriptionId = vue.computed(() => related("description"));
|
|
446
494
|
const toggle = () => {
|
|
447
495
|
if (props.disabled) return;
|
|
448
496
|
emit("update:modelValue", !props.modelValue);
|
|
@@ -467,9 +515,12 @@ const _sfc_main$7 = /* @__PURE__ */ vue.defineComponent({
|
|
|
467
515
|
class: vue.normalizeClass(["inline-flex items-start gap-3", __props.disabled ? "cursor-not-allowed opacity-50" : "cursor-pointer"])
|
|
468
516
|
}, [
|
|
469
517
|
vue.createElementVNode("button", {
|
|
518
|
+
id: switchId.value,
|
|
470
519
|
type: "button",
|
|
471
520
|
role: "switch",
|
|
472
521
|
"aria-checked": __props.modelValue,
|
|
522
|
+
"aria-labelledby": __props.label ? labelId.value : void 0,
|
|
523
|
+
"aria-describedby": __props.description ? descriptionId.value : void 0,
|
|
473
524
|
disabled: __props.disabled,
|
|
474
525
|
class: vue.normalizeClass([
|
|
475
526
|
"relative inline-flex shrink-0 items-center rounded-full transition-colors focus:outline-none focus:ring-2 focus:ring-primary focus:ring-offset-2",
|
|
@@ -483,12 +534,21 @@ const _sfc_main$7 = /* @__PURE__ */ vue.defineComponent({
|
|
|
483
534
|
"inline-block transform rounded-full bg-white shadow-sm transition-transform",
|
|
484
535
|
dotSizes[__props.size],
|
|
485
536
|
__props.modelValue ? translateSizes[__props.size] : "translate-x-1"
|
|
486
|
-
])
|
|
537
|
+
]),
|
|
538
|
+
"aria-hidden": "true"
|
|
487
539
|
}, null, 2)
|
|
488
540
|
], 10, _hoisted_1$7),
|
|
489
541
|
__props.label || __props.description ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$7, [
|
|
490
|
-
__props.label ? (vue.openBlock(), vue.createElementBlock("span",
|
|
491
|
-
|
|
542
|
+
__props.label ? (vue.openBlock(), vue.createElementBlock("span", {
|
|
543
|
+
key: 0,
|
|
544
|
+
id: labelId.value,
|
|
545
|
+
class: "text-sm font-medium text-gray-900 dark:text-white"
|
|
546
|
+
}, vue.toDisplayString(__props.label), 9, _hoisted_3$7)) : vue.createCommentVNode("", true),
|
|
547
|
+
__props.description ? (vue.openBlock(), vue.createElementBlock("span", {
|
|
548
|
+
key: 1,
|
|
549
|
+
id: descriptionId.value,
|
|
550
|
+
class: "text-sm text-gray-500 dark:text-gray-400"
|
|
551
|
+
}, vue.toDisplayString(__props.description), 9, _hoisted_4$5)) : vue.createCommentVNode("", true)
|
|
492
552
|
])) : vue.createCommentVNode("", true)
|
|
493
553
|
], 2);
|
|
494
554
|
};
|
|
@@ -503,7 +563,7 @@ const _hoisted_3$6 = { class: "text-gray-600 dark:text-gray-400" };
|
|
|
503
563
|
const _hoisted_4$4 = { class: "font-medium text-gray-900 dark:text-white" };
|
|
504
564
|
const _hoisted_5$4 = { class: "text-gray-600 dark:text-gray-400" };
|
|
505
565
|
const _hoisted_6$4 = { class: "relative" };
|
|
506
|
-
const _hoisted_7$
|
|
566
|
+
const _hoisted_7$4 = ["value", "min", "max", "step", "disabled"];
|
|
507
567
|
const _hoisted_8$3 = { class: "pointer-events-none absolute inset-y-0 left-0 flex items-center" };
|
|
508
568
|
const _sfc_main$6 = /* @__PURE__ */ vue.defineComponent({
|
|
509
569
|
__name: "Slider",
|
|
@@ -552,7 +612,7 @@ const _sfc_main$6 = /* @__PURE__ */ vue.defineComponent({
|
|
|
552
612
|
disabled: __props.disabled,
|
|
553
613
|
class: "slider-input w-full cursor-pointer appearance-none bg-transparent disabled:cursor-not-allowed disabled:opacity-50",
|
|
554
614
|
onInput: handleInput
|
|
555
|
-
}, null, 40, _hoisted_7$
|
|
615
|
+
}, null, 40, _hoisted_7$4),
|
|
556
616
|
vue.createElementVNode("div", _hoisted_8$3, [
|
|
557
617
|
vue.createElementVNode("div", {
|
|
558
618
|
class: "h-2 rounded-full bg-primary",
|
|
@@ -566,15 +626,24 @@ const _sfc_main$6 = /* @__PURE__ */ vue.defineComponent({
|
|
|
566
626
|
});
|
|
567
627
|
const Slider = /* @__PURE__ */ _pluginVue_exportHelper._export_sfc(_sfc_main$6, [["__scopeId", "data-v-a411f1b4"]]);
|
|
568
628
|
const _hoisted_1$5 = { class: "relative" };
|
|
569
|
-
const _hoisted_2$5 = ["disabled"];
|
|
629
|
+
const _hoisted_2$5 = ["id", "disabled", "aria-expanded", "aria-controls"];
|
|
570
630
|
const _hoisted_3$5 = { class: "flex-1 truncate" };
|
|
571
631
|
const _hoisted_4$3 = { class: "flex items-center gap-1" };
|
|
572
|
-
const _hoisted_5$3 =
|
|
573
|
-
const _hoisted_6$3 = { class: "
|
|
574
|
-
const _hoisted_7$
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
632
|
+
const _hoisted_5$3 = ["id", "aria-label"];
|
|
633
|
+
const _hoisted_6$3 = { class: "mb-4 flex items-center justify-between" };
|
|
634
|
+
const _hoisted_7$3 = {
|
|
635
|
+
class: "font-medium text-gray-900 dark:text-white",
|
|
636
|
+
"aria-live": "polite",
|
|
637
|
+
"aria-atomic": "true"
|
|
638
|
+
};
|
|
639
|
+
const _hoisted_8$2 = {
|
|
640
|
+
class: "mb-2 grid grid-cols-7 gap-1",
|
|
641
|
+
role: "row"
|
|
642
|
+
};
|
|
643
|
+
const _hoisted_9$1 = ["abbr"];
|
|
644
|
+
const _hoisted_10$1 = ["id", "aria-label"];
|
|
645
|
+
const _hoisted_11$1 = ["aria-label", "aria-selected", "aria-disabled", "disabled", "onClick"];
|
|
646
|
+
const _hoisted_12 = { class: "mt-4 border-t border-gray-200 pt-3 dark:border-gray-700" };
|
|
578
647
|
const _sfc_main$5 = /* @__PURE__ */ vue.defineComponent({
|
|
579
648
|
__name: "DatePicker",
|
|
580
649
|
props: /* @__PURE__ */ vue.mergeModels({
|
|
@@ -584,7 +653,8 @@ const _sfc_main$5 = /* @__PURE__ */ vue.defineComponent({
|
|
|
584
653
|
disabled: { type: Boolean, default: false },
|
|
585
654
|
minDate: {},
|
|
586
655
|
maxDate: {},
|
|
587
|
-
teleport: { type: Boolean, default: true }
|
|
656
|
+
teleport: { type: Boolean, default: true },
|
|
657
|
+
id: {}
|
|
588
658
|
}, {
|
|
589
659
|
"modelValue": { default: null },
|
|
590
660
|
"modelModifiers": {}
|
|
@@ -592,6 +662,10 @@ const _sfc_main$5 = /* @__PURE__ */ vue.defineComponent({
|
|
|
592
662
|
emits: ["update:modelValue"],
|
|
593
663
|
setup(__props) {
|
|
594
664
|
const props = __props;
|
|
665
|
+
const { related } = useId.useId({ prefix: "datepicker", id: props.id });
|
|
666
|
+
const triggerId = vue.computed(() => related("trigger"));
|
|
667
|
+
const calendarId = vue.computed(() => related("calendar"));
|
|
668
|
+
const gridId = vue.computed(() => related("grid"));
|
|
595
669
|
const modelValue = vue.useModel(__props, "modelValue");
|
|
596
670
|
const triggerRef = vue.ref();
|
|
597
671
|
const calendarRef = vue.ref();
|
|
@@ -684,13 +758,26 @@ const _sfc_main$5 = /* @__PURE__ */ vue.defineComponent({
|
|
|
684
758
|
const clear = () => {
|
|
685
759
|
modelValue.value = null;
|
|
686
760
|
};
|
|
761
|
+
const getDateLabel = (date) => {
|
|
762
|
+
const formatter = new Intl.DateTimeFormat(props.locale, {
|
|
763
|
+
weekday: "long",
|
|
764
|
+
year: "numeric",
|
|
765
|
+
month: "long",
|
|
766
|
+
day: "numeric"
|
|
767
|
+
});
|
|
768
|
+
return formatter.format(date);
|
|
769
|
+
};
|
|
687
770
|
return (_ctx, _cache) => {
|
|
688
771
|
return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$5, [
|
|
689
772
|
vue.createElementVNode("button", {
|
|
773
|
+
id: triggerId.value,
|
|
690
774
|
ref_key: "triggerRef",
|
|
691
775
|
ref: triggerRef,
|
|
692
776
|
type: "button",
|
|
693
777
|
disabled: __props.disabled,
|
|
778
|
+
"aria-expanded": vue.unref(isOpen),
|
|
779
|
+
"aria-haspopup": "dialog",
|
|
780
|
+
"aria-controls": calendarId.value,
|
|
694
781
|
class: vue.normalizeClass([
|
|
695
782
|
"flex w-full items-center justify-between gap-2 rounded-md border px-3 py-2 text-sm text-left transition",
|
|
696
783
|
__props.disabled ? "cursor-not-allowed border-gray-200 bg-gray-50 text-gray-500 dark:border-gray-800 dark:bg-gray-950" : vue.unref(isOpen) ? "border-primary ring-2 ring-primary/20 bg-white dark:bg-gray-900" : "border-gray-300 bg-white hover:border-gray-400 dark:border-gray-700 dark:bg-gray-900",
|
|
@@ -705,16 +792,19 @@ const _sfc_main$5 = /* @__PURE__ */ vue.defineComponent({
|
|
|
705
792
|
key: 0,
|
|
706
793
|
type: "button",
|
|
707
794
|
class: "rounded p-0.5 hover:bg-gray-100 dark:hover:bg-gray-800",
|
|
795
|
+
"aria-label": "Clear date",
|
|
708
796
|
onClick: vue.withModifiers(clear, ["stop"])
|
|
709
797
|
}, [
|
|
710
798
|
vue.createVNode(vue.unref(vue$1.Icon), {
|
|
711
799
|
icon: "lucide:x",
|
|
712
|
-
class: "size-4 text-gray-400"
|
|
800
|
+
class: "size-4 text-gray-400",
|
|
801
|
+
"aria-hidden": "true"
|
|
713
802
|
})
|
|
714
803
|
])) : vue.createCommentVNode("", true),
|
|
715
804
|
vue.createVNode(vue.unref(vue$1.Icon), {
|
|
716
805
|
icon: "lucide:calendar",
|
|
717
|
-
class: "size-4 text-gray-400"
|
|
806
|
+
class: "size-4 text-gray-400",
|
|
807
|
+
"aria-hidden": "true"
|
|
718
808
|
})
|
|
719
809
|
])
|
|
720
810
|
], 10, _hoisted_2$5),
|
|
@@ -733,47 +823,66 @@ const _sfc_main$5 = /* @__PURE__ */ vue.defineComponent({
|
|
|
733
823
|
default: vue.withCtx(() => [
|
|
734
824
|
vue.unref(isOpen) ? (vue.openBlock(), vue.createElementBlock("div", {
|
|
735
825
|
key: 0,
|
|
826
|
+
id: calendarId.value,
|
|
736
827
|
ref_key: "calendarRef",
|
|
737
828
|
ref: calendarRef,
|
|
829
|
+
role: "dialog",
|
|
830
|
+
"aria-modal": "true",
|
|
831
|
+
"aria-label": `Choose date, ${monthYear.value}`,
|
|
738
832
|
style: vue.normalizeStyle(vue.unref(dropdownStyle)),
|
|
739
833
|
class: "z-[9999] w-72 rounded-lg border border-gray-200 bg-white p-4 shadow-lg dark:border-gray-700 dark:bg-gray-800"
|
|
740
834
|
}, [
|
|
741
|
-
vue.createElementVNode("div",
|
|
835
|
+
vue.createElementVNode("div", _hoisted_6$3, [
|
|
742
836
|
vue.createElementVNode("button", {
|
|
743
837
|
type: "button",
|
|
744
838
|
class: "rounded p-1 hover:bg-gray-100 dark:hover:bg-gray-700",
|
|
839
|
+
"aria-label": "Previous month",
|
|
745
840
|
onClick: prevMonth
|
|
746
841
|
}, [
|
|
747
842
|
vue.createVNode(vue.unref(vue$1.Icon), {
|
|
748
843
|
icon: "lucide:chevron-left",
|
|
749
|
-
class: "size-5 text-gray-600 dark:text-gray-400"
|
|
844
|
+
class: "size-5 text-gray-600 dark:text-gray-400",
|
|
845
|
+
"aria-hidden": "true"
|
|
750
846
|
})
|
|
751
847
|
]),
|
|
752
|
-
vue.createElementVNode("span",
|
|
848
|
+
vue.createElementVNode("span", _hoisted_7$3, vue.toDisplayString(monthYear.value), 1),
|
|
753
849
|
vue.createElementVNode("button", {
|
|
754
850
|
type: "button",
|
|
755
851
|
class: "rounded p-1 hover:bg-gray-100 dark:hover:bg-gray-700",
|
|
852
|
+
"aria-label": "Next month",
|
|
756
853
|
onClick: nextMonth
|
|
757
854
|
}, [
|
|
758
855
|
vue.createVNode(vue.unref(vue$1.Icon), {
|
|
759
856
|
icon: "lucide:chevron-right",
|
|
760
|
-
class: "size-5 text-gray-600 dark:text-gray-400"
|
|
857
|
+
class: "size-5 text-gray-600 dark:text-gray-400",
|
|
858
|
+
"aria-hidden": "true"
|
|
761
859
|
})
|
|
762
860
|
])
|
|
763
861
|
]),
|
|
764
|
-
vue.createElementVNode("div",
|
|
862
|
+
vue.createElementVNode("div", _hoisted_8$2, [
|
|
765
863
|
(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(weekDays.value, (day) => {
|
|
766
864
|
return vue.openBlock(), vue.createElementBlock("div", {
|
|
767
865
|
key: day,
|
|
768
|
-
class: "text-center text-xs font-medium text-gray-500 dark:text-gray-400"
|
|
769
|
-
|
|
866
|
+
class: "text-center text-xs font-medium text-gray-500 dark:text-gray-400",
|
|
867
|
+
role: "columnheader",
|
|
868
|
+
abbr: day
|
|
869
|
+
}, vue.toDisplayString(day), 9, _hoisted_9$1);
|
|
770
870
|
}), 128))
|
|
771
871
|
]),
|
|
772
|
-
vue.createElementVNode("div",
|
|
872
|
+
vue.createElementVNode("div", {
|
|
873
|
+
id: gridId.value,
|
|
874
|
+
class: "grid grid-cols-7 gap-1",
|
|
875
|
+
role: "grid",
|
|
876
|
+
"aria-label": monthYear.value
|
|
877
|
+
}, [
|
|
773
878
|
(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(calendarDays.value, (day, index2) => {
|
|
774
879
|
return vue.openBlock(), vue.createElementBlock("button", {
|
|
775
880
|
key: index2,
|
|
776
881
|
type: "button",
|
|
882
|
+
role: "gridcell",
|
|
883
|
+
"aria-label": getDateLabel(day.date),
|
|
884
|
+
"aria-selected": day.isSelected,
|
|
885
|
+
"aria-disabled": day.isDisabled || void 0,
|
|
777
886
|
disabled: day.isDisabled,
|
|
778
887
|
class: vue.normalizeClass([
|
|
779
888
|
"h-8 w-8 rounded text-sm transition",
|
|
@@ -784,17 +893,17 @@ const _sfc_main$5 = /* @__PURE__ */ vue.defineComponent({
|
|
|
784
893
|
day.isSelected && "bg-primary text-white font-semibold"
|
|
785
894
|
]),
|
|
786
895
|
onClick: ($event) => selectDate(day)
|
|
787
|
-
}, vue.toDisplayString(day.date.getDate()), 11,
|
|
896
|
+
}, vue.toDisplayString(day.date.getDate()), 11, _hoisted_11$1);
|
|
788
897
|
}), 128))
|
|
789
|
-
]),
|
|
790
|
-
vue.createElementVNode("div",
|
|
898
|
+
], 8, _hoisted_10$1),
|
|
899
|
+
vue.createElementVNode("div", _hoisted_12, [
|
|
791
900
|
vue.createElementVNode("button", {
|
|
792
901
|
type: "button",
|
|
793
902
|
class: "w-full rounded py-1.5 text-sm font-medium text-primary hover:bg-primary/10",
|
|
794
903
|
onClick: _cache[1] || (_cache[1] = ($event) => selectDate({ date: /* @__PURE__ */ new Date(), isDisabled: false }))
|
|
795
904
|
}, " Today ")
|
|
796
905
|
])
|
|
797
|
-
],
|
|
906
|
+
], 12, _hoisted_5$3)) : vue.createCommentVNode("", true)
|
|
798
907
|
]),
|
|
799
908
|
_: 1
|
|
800
909
|
})
|
|
@@ -815,7 +924,7 @@ const _hoisted_6$2 = {
|
|
|
815
924
|
key: 1,
|
|
816
925
|
class: "text-xs text-gray-500 dark:text-gray-400"
|
|
817
926
|
};
|
|
818
|
-
const _hoisted_7$
|
|
927
|
+
const _hoisted_7$2 = {
|
|
819
928
|
key: 0,
|
|
820
929
|
class: "space-y-2"
|
|
821
930
|
};
|
|
@@ -979,7 +1088,7 @@ const _sfc_main$4 = /* @__PURE__ */ vue.defineComponent({
|
|
|
979
1088
|
__props.maxSize ? (vue.openBlock(), vue.createElementBlock("p", _hoisted_6$2, " Max size: " + vue.toDisplayString(formatSize(__props.maxSize)), 1)) : vue.createCommentVNode("", true)
|
|
980
1089
|
])
|
|
981
1090
|
], 34),
|
|
982
|
-
files.value.length > 0 ? (vue.openBlock(), vue.createElementBlock("ul", _hoisted_7$
|
|
1091
|
+
files.value.length > 0 ? (vue.openBlock(), vue.createElementBlock("ul", _hoisted_7$2, [
|
|
983
1092
|
(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(files.value, (uploadedFile) => {
|
|
984
1093
|
return vue.openBlock(), vue.createElementBlock("li", {
|
|
985
1094
|
key: uploadedFile.id,
|
|
@@ -1128,7 +1237,7 @@ const _hoisted_3$2 = ["disabled"];
|
|
|
1128
1237
|
const _hoisted_4$1 = { class: "text-sm font-mono text-gray-700 dark:text-gray-300" };
|
|
1129
1238
|
const _hoisted_5$1 = { class: "grid grid-cols-5 gap-2 mb-3" };
|
|
1130
1239
|
const _hoisted_6$1 = ["title", "onClick"];
|
|
1131
|
-
const _hoisted_7 = {
|
|
1240
|
+
const _hoisted_7$1 = {
|
|
1132
1241
|
key: 0,
|
|
1133
1242
|
class: "flex items-center gap-2 pt-3 border-t border-gray-200 dark:border-gray-700"
|
|
1134
1243
|
};
|
|
@@ -1261,7 +1370,7 @@ const _sfc_main$2 = /* @__PURE__ */ vue.defineComponent({
|
|
|
1261
1370
|
], 14, _hoisted_6$1);
|
|
1262
1371
|
}), 128))
|
|
1263
1372
|
]),
|
|
1264
|
-
__props.showInput ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_7, [
|
|
1373
|
+
__props.showInput ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_7$1, [
|
|
1265
1374
|
vue.createElementVNode("input", {
|
|
1266
1375
|
type: "color",
|
|
1267
1376
|
value: __props.modelValue,
|
|
@@ -1422,17 +1531,16 @@ const _sfc_main$1 = /* @__PURE__ */ vue.defineComponent({
|
|
|
1422
1531
|
};
|
|
1423
1532
|
}
|
|
1424
1533
|
});
|
|
1425
|
-
const _hoisted_1 = ["
|
|
1426
|
-
const _hoisted_2 =
|
|
1427
|
-
const _hoisted_3 = {
|
|
1428
|
-
|
|
1429
|
-
|
|
1430
|
-
};
|
|
1431
|
-
const
|
|
1432
|
-
const _hoisted_5 = { class: "flex-1" };
|
|
1433
|
-
const _hoisted_6 = {
|
|
1534
|
+
const _hoisted_1 = ["aria-expanded", "aria-controls"];
|
|
1535
|
+
const _hoisted_2 = ["id", "name", "placeholder", "disabled", "aria-controls"];
|
|
1536
|
+
const _hoisted_3 = { class: "flex items-center gap-1" };
|
|
1537
|
+
const _hoisted_4 = ["id", "aria-label", "aria-multiselectable"];
|
|
1538
|
+
const _hoisted_5 = ["aria-selected", "aria-disabled", "disabled", "onClick"];
|
|
1539
|
+
const _hoisted_6 = { class: "flex-1" };
|
|
1540
|
+
const _hoisted_7 = {
|
|
1434
1541
|
key: 1,
|
|
1435
|
-
class: "px-3 py-2 text-center text-sm text-gray-500 dark:text-gray-400"
|
|
1542
|
+
class: "px-3 py-2 text-center text-sm text-gray-500 dark:text-gray-400",
|
|
1543
|
+
role: "status"
|
|
1436
1544
|
};
|
|
1437
1545
|
const _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
1438
1546
|
__name: "Combobox",
|
|
@@ -1452,6 +1560,9 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
|
1452
1560
|
emits: ["update:modelValue"],
|
|
1453
1561
|
setup(__props, { emit: __emit }) {
|
|
1454
1562
|
const props = __props;
|
|
1563
|
+
const { id: generatedId, related } = useId.useId({ prefix: "combobox", id: props.id });
|
|
1564
|
+
const inputId = vue.computed(() => props.id ?? generatedId.value);
|
|
1565
|
+
const listboxId = vue.computed(() => related("listbox"));
|
|
1455
1566
|
const teleportDisabled = vue.computed(() => props.teleport === false);
|
|
1456
1567
|
const teleportTarget = vue.computed(() => props.teleport === false ? "body" : props.teleport);
|
|
1457
1568
|
const emit = __emit;
|
|
@@ -1530,6 +1641,10 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
|
1530
1641
|
class: "relative"
|
|
1531
1642
|
}, [
|
|
1532
1643
|
vue.createElementVNode("div", {
|
|
1644
|
+
role: "combobox",
|
|
1645
|
+
"aria-expanded": isOpen.value,
|
|
1646
|
+
"aria-haspopup": "listbox",
|
|
1647
|
+
"aria-controls": listboxId.value,
|
|
1533
1648
|
class: vue.normalizeClass([
|
|
1534
1649
|
"flex min-h-[42px] w-full cursor-pointer items-center rounded-lg border bg-white px-3 py-2 transition-colors",
|
|
1535
1650
|
"dark:bg-gray-900",
|
|
@@ -1545,7 +1660,7 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
|
1545
1660
|
])
|
|
1546
1661
|
}, vue.toDisplayString(displayValue.value || __props.placeholder), 3)) : vue.withDirectives((vue.openBlock(), vue.createElementBlock("input", {
|
|
1547
1662
|
key: 1,
|
|
1548
|
-
id:
|
|
1663
|
+
id: inputId.value,
|
|
1549
1664
|
ref_key: "inputRef",
|
|
1550
1665
|
ref: inputRef,
|
|
1551
1666
|
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => search.value = $event),
|
|
@@ -1553,22 +1668,26 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
|
1553
1668
|
name: __props.name,
|
|
1554
1669
|
placeholder: __props.searchPlaceholder,
|
|
1555
1670
|
disabled: __props.disabled,
|
|
1671
|
+
"aria-autocomplete": "list",
|
|
1672
|
+
"aria-controls": listboxId.value,
|
|
1556
1673
|
class: "flex-1 border-none bg-transparent text-sm text-gray-900 outline-none placeholder:text-gray-400 dark:text-gray-100 dark:placeholder:text-gray-500",
|
|
1557
1674
|
onClick: _cache[1] || (_cache[1] = vue.withModifiers(() => {
|
|
1558
1675
|
}, ["stop"]))
|
|
1559
|
-
}, null, 8,
|
|
1676
|
+
}, null, 8, _hoisted_2)), [
|
|
1560
1677
|
[vue.vModelText, search.value]
|
|
1561
1678
|
]),
|
|
1562
|
-
vue.createElementVNode("div",
|
|
1679
|
+
vue.createElementVNode("div", _hoisted_3, [
|
|
1563
1680
|
__props.clearable && selectedOptions.value.length > 0 && !__props.disabled ? (vue.openBlock(), vue.createElementBlock("button", {
|
|
1564
1681
|
key: 0,
|
|
1565
1682
|
type: "button",
|
|
1566
1683
|
class: "rounded p-0.5 text-gray-400 hover:text-gray-600 dark:hover:text-gray-300",
|
|
1684
|
+
"aria-label": "Clear selection",
|
|
1567
1685
|
onClick: vue.withModifiers(clear, ["stop"])
|
|
1568
1686
|
}, [
|
|
1569
1687
|
vue.createVNode(vue.unref(vue$1.Icon), {
|
|
1570
1688
|
icon: "lucide:x",
|
|
1571
|
-
class: "h-4 w-4"
|
|
1689
|
+
class: "h-4 w-4",
|
|
1690
|
+
"aria-hidden": "true"
|
|
1572
1691
|
})
|
|
1573
1692
|
])) : vue.createCommentVNode("", true),
|
|
1574
1693
|
vue.createVNode(vue.unref(vue$1.Icon), {
|
|
@@ -1576,10 +1695,11 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
|
1576
1695
|
class: vue.normalizeClass([
|
|
1577
1696
|
"h-4 w-4 text-gray-400 transition-transform",
|
|
1578
1697
|
isOpen.value && "rotate-180"
|
|
1579
|
-
])
|
|
1698
|
+
]),
|
|
1699
|
+
"aria-hidden": "true"
|
|
1580
1700
|
}, null, 8, ["class"])
|
|
1581
1701
|
])
|
|
1582
|
-
],
|
|
1702
|
+
], 10, _hoisted_1),
|
|
1583
1703
|
(vue.openBlock(), vue.createBlock(vue.Teleport, {
|
|
1584
1704
|
to: teleportTarget.value,
|
|
1585
1705
|
disabled: teleportDisabled.value
|
|
@@ -1593,11 +1713,21 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
|
1593
1713
|
"leave-to-class": "transform scale-95 opacity-0"
|
|
1594
1714
|
}, {
|
|
1595
1715
|
default: vue.withCtx(() => [
|
|
1596
|
-
isOpen.value ? (vue.openBlock(), vue.createElementBlock("div",
|
|
1716
|
+
isOpen.value ? (vue.openBlock(), vue.createElementBlock("div", {
|
|
1717
|
+
key: 0,
|
|
1718
|
+
id: listboxId.value,
|
|
1719
|
+
role: "listbox",
|
|
1720
|
+
"aria-label": __props.placeholder,
|
|
1721
|
+
"aria-multiselectable": __props.multiple || void 0,
|
|
1722
|
+
class: "absolute z-50 mt-1 max-h-60 w-full overflow-auto rounded-lg border border-gray-200 bg-white py-1 shadow-lg dark:border-gray-700 dark:bg-gray-900"
|
|
1723
|
+
}, [
|
|
1597
1724
|
filteredOptions.value.length ? (vue.openBlock(true), vue.createElementBlock(vue.Fragment, { key: 0 }, vue.renderList(filteredOptions.value, (option) => {
|
|
1598
1725
|
return vue.openBlock(), vue.createElementBlock("button", {
|
|
1599
1726
|
key: option.value,
|
|
1600
1727
|
type: "button",
|
|
1728
|
+
role: "option",
|
|
1729
|
+
"aria-selected": isSelected(option),
|
|
1730
|
+
"aria-disabled": option.disabled || void 0,
|
|
1601
1731
|
disabled: option.disabled,
|
|
1602
1732
|
class: vue.normalizeClass([
|
|
1603
1733
|
"flex w-full items-center gap-2 px-3 py-2 text-left text-sm transition-colors",
|
|
@@ -1610,7 +1740,8 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
|
1610
1740
|
class: vue.normalizeClass([
|
|
1611
1741
|
"flex h-4 w-4 items-center justify-center rounded border",
|
|
1612
1742
|
isSelected(option) ? "border-primary bg-primary text-white" : "border-gray-300 dark:border-gray-600"
|
|
1613
|
-
])
|
|
1743
|
+
]),
|
|
1744
|
+
"aria-hidden": "true"
|
|
1614
1745
|
}, [
|
|
1615
1746
|
isSelected(option) ? (vue.openBlock(), vue.createBlock(vue.unref(vue$1.Icon), {
|
|
1616
1747
|
key: 0,
|
|
@@ -1618,15 +1749,16 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
|
1618
1749
|
class: "h-3 w-3"
|
|
1619
1750
|
})) : vue.createCommentVNode("", true)
|
|
1620
1751
|
], 2)) : vue.createCommentVNode("", true),
|
|
1621
|
-
vue.createElementVNode("span",
|
|
1752
|
+
vue.createElementVNode("span", _hoisted_6, vue.toDisplayString(option.label), 1),
|
|
1622
1753
|
!__props.multiple && isSelected(option) ? (vue.openBlock(), vue.createBlock(vue.unref(vue$1.Icon), {
|
|
1623
1754
|
key: 1,
|
|
1624
1755
|
icon: "lucide:check",
|
|
1625
|
-
class: "h-4 w-4 text-primary"
|
|
1756
|
+
class: "h-4 w-4 text-primary",
|
|
1757
|
+
"aria-hidden": "true"
|
|
1626
1758
|
})) : vue.createCommentVNode("", true)
|
|
1627
|
-
], 10,
|
|
1628
|
-
}), 128)) : (vue.openBlock(), vue.createElementBlock("div",
|
|
1629
|
-
])) : vue.createCommentVNode("", true)
|
|
1759
|
+
], 10, _hoisted_5);
|
|
1760
|
+
}), 128)) : (vue.openBlock(), vue.createElementBlock("div", _hoisted_7, vue.toDisplayString(__props.noResultsText), 1))
|
|
1761
|
+
], 8, _hoisted_4)) : vue.createCommentVNode("", true)
|
|
1630
1762
|
]),
|
|
1631
1763
|
_: 1
|
|
1632
1764
|
})
|
|
@@ -1649,4 +1781,4 @@ exports._sfc_main$6 = _sfc_main$7;
|
|
|
1649
1781
|
exports._sfc_main$7 = _sfc_main$5;
|
|
1650
1782
|
exports._sfc_main$8 = _sfc_main$4;
|
|
1651
1783
|
exports._sfc_main$9 = _sfc_main$3;
|
|
1652
|
-
//# sourceMappingURL=Combobox.vue_vue_type_script_setup_true_lang-
|
|
1784
|
+
//# sourceMappingURL=Combobox.vue_vue_type_script_setup_true_lang-D9TIId4E.cjs.map
|