@rotki/ui-library 2.9.1 → 2.11.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.
Files changed (77) hide show
  1. package/dist/components/accordions/accordion/RuiAccordion.vue.d.ts +3 -3
  2. package/dist/components/accordions/accordion/RuiAccordion.vue.js +87 -8
  3. package/dist/components/accordions/accordion/RuiAccordion.vue.js.map +1 -1
  4. package/dist/components/accordions/accordion/RuiAccordion.vue2.js +1 -62
  5. package/dist/components/accordions/accordion/RuiAccordion.vue2.js.map +1 -1
  6. package/dist/components/alerts/RuiAlert.vue.d.ts +3 -3
  7. package/dist/components/buttons/button/RuiButton.vue.d.ts +9 -5
  8. package/dist/components/buttons/button-group/RuiButtonGroup.vue.d.ts +9 -5
  9. package/dist/components/calendar/RuiCalendar.vue.js +12 -0
  10. package/dist/components/calendar/RuiCalendar.vue.js.map +1 -1
  11. package/dist/components/calendar/RuiCalendarMenu.vue.js +1 -1
  12. package/dist/components/calendar/RuiCalendarMenu.vue2.js +2 -2
  13. package/dist/components/calendar/RuiCalendarMenu.vue2.js.map +1 -1
  14. package/dist/components/calendar/state.js +1 -1
  15. package/dist/components/calendar/state.js.map +1 -1
  16. package/dist/components/cards/RuiCard.vue.d.ts +6 -6
  17. package/dist/components/date-time-picker/RuiDateTimePicker.vue.d.ts +3 -4
  18. package/dist/components/date-time-picker/RuiDateTimePicker.vue2.js +70 -251
  19. package/dist/components/date-time-picker/RuiDateTimePicker.vue2.js.map +1 -1
  20. package/dist/components/date-time-picker/use-date-time-selection.d.ts +38 -0
  21. package/dist/components/date-time-picker/use-date-time-selection.js +286 -0
  22. package/dist/components/date-time-picker/use-date-time-selection.js.map +1 -0
  23. package/dist/components/date-time-picker/use-keyboard-handler.d.ts +2 -0
  24. package/dist/components/date-time-picker/use-keyboard-handler.js +71 -60
  25. package/dist/components/date-time-picker/use-keyboard-handler.js.map +1 -1
  26. package/dist/components/forms/auto-complete/RuiAutoComplete.vue.d.ts +29 -25
  27. package/dist/components/forms/auto-complete/RuiAutoComplete.vue2.js +5 -3
  28. package/dist/components/forms/auto-complete/RuiAutoComplete.vue2.js.map +1 -1
  29. package/dist/components/forms/checkbox/RuiCheckbox.vue.d.ts +2 -2
  30. package/dist/components/forms/checkbox/RuiCheckbox.vue2.js +13 -8
  31. package/dist/components/forms/checkbox/RuiCheckbox.vue2.js.map +1 -1
  32. package/dist/components/forms/radio-button/radio/RuiRadio.vue.d.ts +9 -5
  33. package/dist/components/forms/radio-button/radio/RuiRadio.vue2.js +12 -8
  34. package/dist/components/forms/radio-button/radio/RuiRadio.vue2.js.map +1 -1
  35. package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.vue.d.ts +9 -5
  36. package/dist/components/forms/revealable-text-field/RuiRevealableTextField.vue.d.ts +4 -4
  37. package/dist/components/forms/select/RuiMenuSelect.vue.d.ts +29 -25
  38. package/dist/components/forms/select/RuiMenuSelect.vue2.js +4 -2
  39. package/dist/components/forms/select/RuiMenuSelect.vue2.js.map +1 -1
  40. package/dist/components/forms/slider/RuiSlider.vue2.js +14 -11
  41. package/dist/components/forms/slider/RuiSlider.vue2.js.map +1 -1
  42. package/dist/components/forms/switch/RuiSwitch.vue2.js +10 -7
  43. package/dist/components/forms/switch/RuiSwitch.vue2.js.map +1 -1
  44. package/dist/components/forms/text-area/RuiTextArea.vue.d.ts +3 -3
  45. package/dist/components/forms/text-area/RuiTextArea.vue2.js +15 -12
  46. package/dist/components/forms/text-area/RuiTextArea.vue2.js.map +1 -1
  47. package/dist/components/forms/text-field/RuiTextField.vue.d.ts +3 -3
  48. package/dist/components/forms/text-field/RuiTextField.vue2.js +13 -10
  49. package/dist/components/forms/text-field/RuiTextField.vue2.js.map +1 -1
  50. package/dist/components/icons/IconBrowser.vue.d.ts +3 -0
  51. package/dist/components/icons/LazyIcon.vue.d.ts +10 -0
  52. package/dist/components/overlays/badge/RuiBadge.vue.d.ts +3 -3
  53. package/dist/components/overlays/bottom-sheet/RuiBottomSheet.vue.d.ts +2 -2
  54. package/dist/components/overlays/dialog/RuiDialog.vue.d.ts +2 -2
  55. package/dist/components/overlays/menu/RuiMenu.vue.d.ts +2 -2
  56. package/dist/components/overlays/navigation-drawer/RuiNavigationDrawer.vue.d.ts +2 -2
  57. package/dist/components/overlays/notification/RuiNotification.vue.d.ts +2 -2
  58. package/dist/components/overlays/tooltip/RuiTooltip.vue.d.ts +2 -2
  59. package/dist/components/tables/RuiDataTable.vue.d.ts +9 -5
  60. package/dist/components/tables/RuiExpandButton.vue.d.ts +2 -2
  61. package/dist/components/tables/RuiTableHead.vue.d.ts +9 -5
  62. package/dist/components/tabs/tab/RuiTab.vue.d.ts +1 -1
  63. package/dist/components/tabs/tab-item/RuiTabItem.vue.d.ts +3 -3
  64. package/dist/components/tabs/tab-items/RuiTabItems.vue.d.ts +9 -5
  65. package/dist/components/time-picker/RuiTimePicker.vue2.js +0 -1
  66. package/dist/components/time-picker/RuiTimePicker.vue2.js.map +1 -1
  67. package/dist/composables/defaults/table.js +1 -1
  68. package/dist/composables/defaults/table.js.map +1 -1
  69. package/dist/composables/icons.js +1 -1
  70. package/dist/composables/icons.js.map +1 -1
  71. package/dist/composables/use-rui-i18n.js +1 -1
  72. package/dist/composables/use-rui-i18n.js.map +1 -1
  73. package/dist/style.css +98 -61
  74. package/dist/web-types.json +116 -72
  75. package/package.json +31 -40
  76. package/dist/components/accordions/accordion/RuiAccordion.vue3.js +0 -18
  77. package/dist/components/accordions/accordion/RuiAccordion.vue3.js.map +0 -1
@@ -27,17 +27,19 @@ export interface Props<TValue, TItem> {
27
27
  noDataText?: string;
28
28
  required?: boolean;
29
29
  }
30
- declare const __VLS_export: <TValue, TItem>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_expose?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
31
- props: __VLS_PrettifyLocal<(Props<TValue, TItem> & {
30
+ declare const __VLS_export: <TValue, TItem>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
31
+ props: import("vue").PublicProps & __VLS_PrettifyLocal<(Props<TValue, TItem> & {
32
32
  modelValue: TValue | undefined;
33
33
  }) & {
34
34
  "onUpdate:modelValue"?: ((value: TValue | undefined) => any) | undefined;
35
- }> & import("vue").PublicProps;
35
+ }> & (typeof globalThis extends {
36
+ __VLS_PROPS_FALLBACK: infer P;
37
+ } ? P : {});
36
38
  expose: (exposed: {}) => void;
37
39
  attrs: any;
38
40
  slots: {
39
41
  activator?: (props: {
40
- disabled: import("@vue/reactivity").DistributeRef<[(Readonly<{
42
+ disabled: boolean & import("@vue/reactivity").DistributeRef<[(Readonly<{
41
43
  options: TItem[];
42
44
  menuOptions: MenuProps;
43
45
  labelClass: string;
@@ -64,7 +66,7 @@ declare const __VLS_export: <TValue, TItem>(__VLS_props: NonNullable<Awaited<typ
64
66
  readonly hideNoData: boolean;
65
67
  readonly noDataText: string;
66
68
  readonly required: boolean;
67
- } & ("disabled" | "autoSelectFirst" | "dense" | "loading" | "required" | "hideDetails" | "clearable" | "readOnly" | "hideNoData" | ([KeyOfType<TItem, TValue extends (infer U)[] ? U : TValue> | undefined] extends [boolean | undefined] ? "keyAttr" : never) | ([keyof TItem | undefined] extends [boolean | undefined] ? "textAttr" : never) extends infer T extends keyof T_1 ? { readonly [K in T]-?: K extends "label" | "disabled" | "keyAttr" | "textAttr" | "appendWidth" | "autoSelectFirst" | "dense" | "itemHeight" | "prependWidth" | "variant" | "loading" | "errorMessages" | "successMessages" | "hint" | "required" | "hideDetails" | "clearable" | "readOnly" | "hideNoData" | "noDataText" ? {
69
+ } & ("disabled" | "autoSelectFirst" | "dense" | "loading" | "required" | "hideDetails" | "clearable" | "readOnly" | "hideNoData" | (KeyOfType<TItem, TValue extends (infer U)[] ? U : TValue> | undefined extends boolean | undefined ? (boolean & KeyOfType<TItem, TValue extends (infer U)[] ? U : TValue>) | undefined extends undefined ? never : "keyAttr" : never) | (keyof TItem | undefined extends boolean | undefined ? (boolean & keyof TItem) | undefined extends undefined ? never : "textAttr" : never) extends infer T extends keyof T_1 ? { readonly [K in T]-?: K extends "label" | "disabled" | "keyAttr" | "textAttr" | "appendWidth" | "autoSelectFirst" | "dense" | "itemHeight" | "prependWidth" | "variant" | "loading" | "errorMessages" | "successMessages" | "hint" | "required" | "hideDetails" | "clearable" | "readOnly" | "hideNoData" | "noDataText" ? {
68
70
  disabled: false;
69
71
  loading: false;
70
72
  readOnly: false;
@@ -112,7 +114,7 @@ declare const __VLS_export: <TValue, TItem>(__VLS_props: NonNullable<Awaited<typ
112
114
  readonly hideNoData: boolean;
113
115
  readonly noDataText: string;
114
116
  readonly required: boolean;
115
- } & ("disabled" | "autoSelectFirst" | "dense" | "loading" | "required" | "hideDetails" | "clearable" | "readOnly" | "hideNoData" | ([KeyOfType<TItem, TValue extends (infer U)[] ? U : TValue> | undefined] extends [boolean | undefined] ? "keyAttr" : never) | ([keyof TItem | undefined] extends [boolean | undefined] ? "textAttr" : never) extends infer T_2 extends keyof T_1 ? { readonly [K in T_2]-?: K extends "label" | "disabled" | "keyAttr" | "textAttr" | "appendWidth" | "autoSelectFirst" | "dense" | "itemHeight" | "prependWidth" | "variant" | "loading" | "errorMessages" | "successMessages" | "hint" | "required" | "hideDetails" | "clearable" | "readOnly" | "hideNoData" | "noDataText" ? {
117
+ } & ("disabled" | "autoSelectFirst" | "dense" | "loading" | "required" | "hideDetails" | "clearable" | "readOnly" | "hideNoData" | (KeyOfType<TItem, TValue extends (infer U)[] ? U : TValue> | undefined extends boolean | undefined ? (boolean & KeyOfType<TItem, TValue extends (infer U)[] ? U : TValue>) | undefined extends undefined ? never : "keyAttr" : never) | (keyof TItem | undefined extends boolean | undefined ? (boolean & keyof TItem) | undefined extends undefined ? never : "textAttr" : never) extends infer T_2 extends keyof T_1 ? { readonly [K in T_2]-?: K extends "label" | "disabled" | "keyAttr" | "textAttr" | "appendWidth" | "autoSelectFirst" | "dense" | "itemHeight" | "prependWidth" | "variant" | "loading" | "errorMessages" | "successMessages" | "hint" | "required" | "hideDetails" | "clearable" | "readOnly" | "hideNoData" | "noDataText" ? {
116
118
  disabled: false;
117
119
  loading: false;
118
120
  readOnly: false;
@@ -160,7 +162,7 @@ declare const __VLS_export: <TValue, TItem>(__VLS_props: NonNullable<Awaited<typ
160
162
  readonly hideNoData: boolean;
161
163
  readonly noDataText: string;
162
164
  readonly required: boolean;
163
- } & ("disabled" | "autoSelectFirst" | "dense" | "loading" | "required" | "hideDetails" | "clearable" | "readOnly" | "hideNoData" | ([KeyOfType<TItem, TValue extends (infer U)[] ? U : TValue> | undefined] extends [boolean | undefined] ? "keyAttr" : never) | ([keyof TItem | undefined] extends [boolean | undefined] ? "textAttr" : never) extends infer T_3 extends keyof T_1 ? { readonly [K in T_3]-?: K extends "label" | "disabled" | "keyAttr" | "textAttr" | "appendWidth" | "autoSelectFirst" | "dense" | "itemHeight" | "prependWidth" | "variant" | "loading" | "errorMessages" | "successMessages" | "hint" | "required" | "hideDetails" | "clearable" | "readOnly" | "hideNoData" | "noDataText" ? {
165
+ } & ("disabled" | "autoSelectFirst" | "dense" | "loading" | "required" | "hideDetails" | "clearable" | "readOnly" | "hideNoData" | (KeyOfType<TItem, TValue extends (infer U)[] ? U : TValue> | undefined extends boolean | undefined ? (boolean & KeyOfType<TItem, TValue extends (infer U)[] ? U : TValue>) | undefined extends undefined ? never : "keyAttr" : never) | (keyof TItem | undefined extends boolean | undefined ? (boolean & keyof TItem) | undefined extends undefined ? never : "textAttr" : never) extends infer T_3 extends keyof T_1 ? { readonly [K in T_3]-?: K extends "label" | "disabled" | "keyAttr" | "textAttr" | "appendWidth" | "autoSelectFirst" | "dense" | "itemHeight" | "prependWidth" | "variant" | "loading" | "errorMessages" | "successMessages" | "hint" | "required" | "hideDetails" | "clearable" | "readOnly" | "hideNoData" | "noDataText" ? {
164
166
  disabled: false;
165
167
  loading: false;
166
168
  readOnly: false;
@@ -208,7 +210,7 @@ declare const __VLS_export: <TValue, TItem>(__VLS_props: NonNullable<Awaited<typ
208
210
  readonly hideNoData: boolean;
209
211
  readonly noDataText: string;
210
212
  readonly required: boolean;
211
- } & ("disabled" | "autoSelectFirst" | "dense" | "loading" | "required" | "hideDetails" | "clearable" | "readOnly" | "hideNoData" | ([KeyOfType<TItem, TValue extends (infer U)[] ? U : TValue> | undefined] extends [boolean | undefined] ? "keyAttr" : never) | ([keyof TItem | undefined] extends [boolean | undefined] ? "textAttr" : never) extends infer T_4 extends keyof T_1 ? { readonly [K in T_4]-?: K extends "label" | "disabled" | "keyAttr" | "textAttr" | "appendWidth" | "autoSelectFirst" | "dense" | "itemHeight" | "prependWidth" | "variant" | "loading" | "errorMessages" | "successMessages" | "hint" | "required" | "hideDetails" | "clearable" | "readOnly" | "hideNoData" | "noDataText" ? {
213
+ } & ("disabled" | "autoSelectFirst" | "dense" | "loading" | "required" | "hideDetails" | "clearable" | "readOnly" | "hideNoData" | (KeyOfType<TItem, TValue extends (infer U)[] ? U : TValue> | undefined extends boolean | undefined ? (boolean & KeyOfType<TItem, TValue extends (infer U)[] ? U : TValue>) | undefined extends undefined ? never : "keyAttr" : never) | (keyof TItem | undefined extends boolean | undefined ? (boolean & keyof TItem) | undefined extends undefined ? never : "textAttr" : never) extends infer T_4 extends keyof T_1 ? { readonly [K in T_4]-?: K extends "label" | "disabled" | "keyAttr" | "textAttr" | "appendWidth" | "autoSelectFirst" | "dense" | "itemHeight" | "prependWidth" | "variant" | "loading" | "errorMessages" | "successMessages" | "hint" | "required" | "hideDetails" | "clearable" | "readOnly" | "hideNoData" | "noDataText" ? {
212
214
  disabled: false;
213
215
  loading: false;
214
216
  readOnly: false;
@@ -252,7 +254,7 @@ declare const __VLS_export: <TValue, TItem>(__VLS_props: NonNullable<Awaited<typ
252
254
  }) => any;
253
255
  } & {
254
256
  'item.prepend'?: (props: {
255
- disabled: import("@vue/reactivity").DistributeRef<[(Readonly<{
257
+ disabled: boolean & import("@vue/reactivity").DistributeRef<[(Readonly<{
256
258
  options: TItem[];
257
259
  menuOptions: MenuProps;
258
260
  labelClass: string;
@@ -279,7 +281,7 @@ declare const __VLS_export: <TValue, TItem>(__VLS_props: NonNullable<Awaited<typ
279
281
  readonly hideNoData: boolean;
280
282
  readonly noDataText: string;
281
283
  readonly required: boolean;
282
- } & ("disabled" | "autoSelectFirst" | "dense" | "loading" | "required" | "hideDetails" | "clearable" | "readOnly" | "hideNoData" | ([KeyOfType<TItem, TValue extends (infer U)[] ? U : TValue> | undefined] extends [boolean | undefined] ? "keyAttr" : never) | ([keyof TItem | undefined] extends [boolean | undefined] ? "textAttr" : never) extends infer T extends keyof T_1 ? { readonly [K in T]-?: K extends "label" | "disabled" | "keyAttr" | "textAttr" | "appendWidth" | "autoSelectFirst" | "dense" | "itemHeight" | "prependWidth" | "variant" | "loading" | "errorMessages" | "successMessages" | "hint" | "required" | "hideDetails" | "clearable" | "readOnly" | "hideNoData" | "noDataText" ? {
284
+ } & ("disabled" | "autoSelectFirst" | "dense" | "loading" | "required" | "hideDetails" | "clearable" | "readOnly" | "hideNoData" | (KeyOfType<TItem, TValue extends (infer U)[] ? U : TValue> | undefined extends boolean | undefined ? (boolean & KeyOfType<TItem, TValue extends (infer U)[] ? U : TValue>) | undefined extends undefined ? never : "keyAttr" : never) | (keyof TItem | undefined extends boolean | undefined ? (boolean & keyof TItem) | undefined extends undefined ? never : "textAttr" : never) extends infer T extends keyof T_1 ? { readonly [K in T]-?: K extends "label" | "disabled" | "keyAttr" | "textAttr" | "appendWidth" | "autoSelectFirst" | "dense" | "itemHeight" | "prependWidth" | "variant" | "loading" | "errorMessages" | "successMessages" | "hint" | "required" | "hideDetails" | "clearable" | "readOnly" | "hideNoData" | "noDataText" ? {
283
285
  disabled: false;
284
286
  loading: false;
285
287
  readOnly: false;
@@ -327,7 +329,7 @@ declare const __VLS_export: <TValue, TItem>(__VLS_props: NonNullable<Awaited<typ
327
329
  readonly hideNoData: boolean;
328
330
  readonly noDataText: string;
329
331
  readonly required: boolean;
330
- } & ("disabled" | "autoSelectFirst" | "dense" | "loading" | "required" | "hideDetails" | "clearable" | "readOnly" | "hideNoData" | ([KeyOfType<TItem, TValue extends (infer U)[] ? U : TValue> | undefined] extends [boolean | undefined] ? "keyAttr" : never) | ([keyof TItem | undefined] extends [boolean | undefined] ? "textAttr" : never) extends infer T_2 extends keyof T_1 ? { readonly [K in T_2]-?: K extends "label" | "disabled" | "keyAttr" | "textAttr" | "appendWidth" | "autoSelectFirst" | "dense" | "itemHeight" | "prependWidth" | "variant" | "loading" | "errorMessages" | "successMessages" | "hint" | "required" | "hideDetails" | "clearable" | "readOnly" | "hideNoData" | "noDataText" ? {
332
+ } & ("disabled" | "autoSelectFirst" | "dense" | "loading" | "required" | "hideDetails" | "clearable" | "readOnly" | "hideNoData" | (KeyOfType<TItem, TValue extends (infer U)[] ? U : TValue> | undefined extends boolean | undefined ? (boolean & KeyOfType<TItem, TValue extends (infer U)[] ? U : TValue>) | undefined extends undefined ? never : "keyAttr" : never) | (keyof TItem | undefined extends boolean | undefined ? (boolean & keyof TItem) | undefined extends undefined ? never : "textAttr" : never) extends infer T_2 extends keyof T_1 ? { readonly [K in T_2]-?: K extends "label" | "disabled" | "keyAttr" | "textAttr" | "appendWidth" | "autoSelectFirst" | "dense" | "itemHeight" | "prependWidth" | "variant" | "loading" | "errorMessages" | "successMessages" | "hint" | "required" | "hideDetails" | "clearable" | "readOnly" | "hideNoData" | "noDataText" ? {
331
333
  disabled: false;
332
334
  loading: false;
333
335
  readOnly: false;
@@ -375,7 +377,7 @@ declare const __VLS_export: <TValue, TItem>(__VLS_props: NonNullable<Awaited<typ
375
377
  readonly hideNoData: boolean;
376
378
  readonly noDataText: string;
377
379
  readonly required: boolean;
378
- } & ("disabled" | "autoSelectFirst" | "dense" | "loading" | "required" | "hideDetails" | "clearable" | "readOnly" | "hideNoData" | ([KeyOfType<TItem, TValue extends (infer U)[] ? U : TValue> | undefined] extends [boolean | undefined] ? "keyAttr" : never) | ([keyof TItem | undefined] extends [boolean | undefined] ? "textAttr" : never) extends infer T_3 extends keyof T_1 ? { readonly [K in T_3]-?: K extends "label" | "disabled" | "keyAttr" | "textAttr" | "appendWidth" | "autoSelectFirst" | "dense" | "itemHeight" | "prependWidth" | "variant" | "loading" | "errorMessages" | "successMessages" | "hint" | "required" | "hideDetails" | "clearable" | "readOnly" | "hideNoData" | "noDataText" ? {
380
+ } & ("disabled" | "autoSelectFirst" | "dense" | "loading" | "required" | "hideDetails" | "clearable" | "readOnly" | "hideNoData" | (KeyOfType<TItem, TValue extends (infer U)[] ? U : TValue> | undefined extends boolean | undefined ? (boolean & KeyOfType<TItem, TValue extends (infer U)[] ? U : TValue>) | undefined extends undefined ? never : "keyAttr" : never) | (keyof TItem | undefined extends boolean | undefined ? (boolean & keyof TItem) | undefined extends undefined ? never : "textAttr" : never) extends infer T_3 extends keyof T_1 ? { readonly [K in T_3]-?: K extends "label" | "disabled" | "keyAttr" | "textAttr" | "appendWidth" | "autoSelectFirst" | "dense" | "itemHeight" | "prependWidth" | "variant" | "loading" | "errorMessages" | "successMessages" | "hint" | "required" | "hideDetails" | "clearable" | "readOnly" | "hideNoData" | "noDataText" ? {
379
381
  disabled: false;
380
382
  loading: false;
381
383
  readOnly: false;
@@ -423,7 +425,7 @@ declare const __VLS_export: <TValue, TItem>(__VLS_props: NonNullable<Awaited<typ
423
425
  readonly hideNoData: boolean;
424
426
  readonly noDataText: string;
425
427
  readonly required: boolean;
426
- } & ("disabled" | "autoSelectFirst" | "dense" | "loading" | "required" | "hideDetails" | "clearable" | "readOnly" | "hideNoData" | ([KeyOfType<TItem, TValue extends (infer U)[] ? U : TValue> | undefined] extends [boolean | undefined] ? "keyAttr" : never) | ([keyof TItem | undefined] extends [boolean | undefined] ? "textAttr" : never) extends infer T_4 extends keyof T_1 ? { readonly [K in T_4]-?: K extends "label" | "disabled" | "keyAttr" | "textAttr" | "appendWidth" | "autoSelectFirst" | "dense" | "itemHeight" | "prependWidth" | "variant" | "loading" | "errorMessages" | "successMessages" | "hint" | "required" | "hideDetails" | "clearable" | "readOnly" | "hideNoData" | "noDataText" ? {
428
+ } & ("disabled" | "autoSelectFirst" | "dense" | "loading" | "required" | "hideDetails" | "clearable" | "readOnly" | "hideNoData" | (KeyOfType<TItem, TValue extends (infer U)[] ? U : TValue> | undefined extends boolean | undefined ? (boolean & KeyOfType<TItem, TValue extends (infer U)[] ? U : TValue>) | undefined extends undefined ? never : "keyAttr" : never) | (keyof TItem | undefined extends boolean | undefined ? (boolean & keyof TItem) | undefined extends undefined ? never : "textAttr" : never) extends infer T_4 extends keyof T_1 ? { readonly [K in T_4]-?: K extends "label" | "disabled" | "keyAttr" | "textAttr" | "appendWidth" | "autoSelectFirst" | "dense" | "itemHeight" | "prependWidth" | "variant" | "loading" | "errorMessages" | "successMessages" | "hint" | "required" | "hideDetails" | "clearable" | "readOnly" | "hideNoData" | "noDataText" ? {
427
429
  disabled: false;
428
430
  loading: false;
429
431
  readOnly: false;
@@ -450,7 +452,7 @@ declare const __VLS_export: <TValue, TItem>(__VLS_props: NonNullable<Awaited<typ
450
452
  }) => any;
451
453
  } & {
452
454
  item?: (props: {
453
- disabled: import("@vue/reactivity").DistributeRef<[(Readonly<{
455
+ disabled: boolean & import("@vue/reactivity").DistributeRef<[(Readonly<{
454
456
  options: TItem[];
455
457
  menuOptions: MenuProps;
456
458
  labelClass: string;
@@ -477,7 +479,7 @@ declare const __VLS_export: <TValue, TItem>(__VLS_props: NonNullable<Awaited<typ
477
479
  readonly hideNoData: boolean;
478
480
  readonly noDataText: string;
479
481
  readonly required: boolean;
480
- } & ("disabled" | "autoSelectFirst" | "dense" | "loading" | "required" | "hideDetails" | "clearable" | "readOnly" | "hideNoData" | ([KeyOfType<TItem, TValue extends (infer U)[] ? U : TValue> | undefined] extends [boolean | undefined] ? "keyAttr" : never) | ([keyof TItem | undefined] extends [boolean | undefined] ? "textAttr" : never) extends infer T extends keyof T_1 ? { readonly [K in T]-?: K extends "label" | "disabled" | "keyAttr" | "textAttr" | "appendWidth" | "autoSelectFirst" | "dense" | "itemHeight" | "prependWidth" | "variant" | "loading" | "errorMessages" | "successMessages" | "hint" | "required" | "hideDetails" | "clearable" | "readOnly" | "hideNoData" | "noDataText" ? {
482
+ } & ("disabled" | "autoSelectFirst" | "dense" | "loading" | "required" | "hideDetails" | "clearable" | "readOnly" | "hideNoData" | (KeyOfType<TItem, TValue extends (infer U)[] ? U : TValue> | undefined extends boolean | undefined ? (boolean & KeyOfType<TItem, TValue extends (infer U)[] ? U : TValue>) | undefined extends undefined ? never : "keyAttr" : never) | (keyof TItem | undefined extends boolean | undefined ? (boolean & keyof TItem) | undefined extends undefined ? never : "textAttr" : never) extends infer T extends keyof T_1 ? { readonly [K in T]-?: K extends "label" | "disabled" | "keyAttr" | "textAttr" | "appendWidth" | "autoSelectFirst" | "dense" | "itemHeight" | "prependWidth" | "variant" | "loading" | "errorMessages" | "successMessages" | "hint" | "required" | "hideDetails" | "clearable" | "readOnly" | "hideNoData" | "noDataText" ? {
481
483
  disabled: false;
482
484
  loading: false;
483
485
  readOnly: false;
@@ -525,7 +527,7 @@ declare const __VLS_export: <TValue, TItem>(__VLS_props: NonNullable<Awaited<typ
525
527
  readonly hideNoData: boolean;
526
528
  readonly noDataText: string;
527
529
  readonly required: boolean;
528
- } & ("disabled" | "autoSelectFirst" | "dense" | "loading" | "required" | "hideDetails" | "clearable" | "readOnly" | "hideNoData" | ([KeyOfType<TItem, TValue extends (infer U)[] ? U : TValue> | undefined] extends [boolean | undefined] ? "keyAttr" : never) | ([keyof TItem | undefined] extends [boolean | undefined] ? "textAttr" : never) extends infer T_2 extends keyof T_1 ? { readonly [K in T_2]-?: K extends "label" | "disabled" | "keyAttr" | "textAttr" | "appendWidth" | "autoSelectFirst" | "dense" | "itemHeight" | "prependWidth" | "variant" | "loading" | "errorMessages" | "successMessages" | "hint" | "required" | "hideDetails" | "clearable" | "readOnly" | "hideNoData" | "noDataText" ? {
530
+ } & ("disabled" | "autoSelectFirst" | "dense" | "loading" | "required" | "hideDetails" | "clearable" | "readOnly" | "hideNoData" | (KeyOfType<TItem, TValue extends (infer U)[] ? U : TValue> | undefined extends boolean | undefined ? (boolean & KeyOfType<TItem, TValue extends (infer U)[] ? U : TValue>) | undefined extends undefined ? never : "keyAttr" : never) | (keyof TItem | undefined extends boolean | undefined ? (boolean & keyof TItem) | undefined extends undefined ? never : "textAttr" : never) extends infer T_2 extends keyof T_1 ? { readonly [K in T_2]-?: K extends "label" | "disabled" | "keyAttr" | "textAttr" | "appendWidth" | "autoSelectFirst" | "dense" | "itemHeight" | "prependWidth" | "variant" | "loading" | "errorMessages" | "successMessages" | "hint" | "required" | "hideDetails" | "clearable" | "readOnly" | "hideNoData" | "noDataText" ? {
529
531
  disabled: false;
530
532
  loading: false;
531
533
  readOnly: false;
@@ -573,7 +575,7 @@ declare const __VLS_export: <TValue, TItem>(__VLS_props: NonNullable<Awaited<typ
573
575
  readonly hideNoData: boolean;
574
576
  readonly noDataText: string;
575
577
  readonly required: boolean;
576
- } & ("disabled" | "autoSelectFirst" | "dense" | "loading" | "required" | "hideDetails" | "clearable" | "readOnly" | "hideNoData" | ([KeyOfType<TItem, TValue extends (infer U)[] ? U : TValue> | undefined] extends [boolean | undefined] ? "keyAttr" : never) | ([keyof TItem | undefined] extends [boolean | undefined] ? "textAttr" : never) extends infer T_3 extends keyof T_1 ? { readonly [K in T_3]-?: K extends "label" | "disabled" | "keyAttr" | "textAttr" | "appendWidth" | "autoSelectFirst" | "dense" | "itemHeight" | "prependWidth" | "variant" | "loading" | "errorMessages" | "successMessages" | "hint" | "required" | "hideDetails" | "clearable" | "readOnly" | "hideNoData" | "noDataText" ? {
578
+ } & ("disabled" | "autoSelectFirst" | "dense" | "loading" | "required" | "hideDetails" | "clearable" | "readOnly" | "hideNoData" | (KeyOfType<TItem, TValue extends (infer U)[] ? U : TValue> | undefined extends boolean | undefined ? (boolean & KeyOfType<TItem, TValue extends (infer U)[] ? U : TValue>) | undefined extends undefined ? never : "keyAttr" : never) | (keyof TItem | undefined extends boolean | undefined ? (boolean & keyof TItem) | undefined extends undefined ? never : "textAttr" : never) extends infer T_3 extends keyof T_1 ? { readonly [K in T_3]-?: K extends "label" | "disabled" | "keyAttr" | "textAttr" | "appendWidth" | "autoSelectFirst" | "dense" | "itemHeight" | "prependWidth" | "variant" | "loading" | "errorMessages" | "successMessages" | "hint" | "required" | "hideDetails" | "clearable" | "readOnly" | "hideNoData" | "noDataText" ? {
577
579
  disabled: false;
578
580
  loading: false;
579
581
  readOnly: false;
@@ -621,7 +623,7 @@ declare const __VLS_export: <TValue, TItem>(__VLS_props: NonNullable<Awaited<typ
621
623
  readonly hideNoData: boolean;
622
624
  readonly noDataText: string;
623
625
  readonly required: boolean;
624
- } & ("disabled" | "autoSelectFirst" | "dense" | "loading" | "required" | "hideDetails" | "clearable" | "readOnly" | "hideNoData" | ([KeyOfType<TItem, TValue extends (infer U)[] ? U : TValue> | undefined] extends [boolean | undefined] ? "keyAttr" : never) | ([keyof TItem | undefined] extends [boolean | undefined] ? "textAttr" : never) extends infer T_4 extends keyof T_1 ? { readonly [K in T_4]-?: K extends "label" | "disabled" | "keyAttr" | "textAttr" | "appendWidth" | "autoSelectFirst" | "dense" | "itemHeight" | "prependWidth" | "variant" | "loading" | "errorMessages" | "successMessages" | "hint" | "required" | "hideDetails" | "clearable" | "readOnly" | "hideNoData" | "noDataText" ? {
626
+ } & ("disabled" | "autoSelectFirst" | "dense" | "loading" | "required" | "hideDetails" | "clearable" | "readOnly" | "hideNoData" | (KeyOfType<TItem, TValue extends (infer U)[] ? U : TValue> | undefined extends boolean | undefined ? (boolean & KeyOfType<TItem, TValue extends (infer U)[] ? U : TValue>) | undefined extends undefined ? never : "keyAttr" : never) | (keyof TItem | undefined extends boolean | undefined ? (boolean & keyof TItem) | undefined extends undefined ? never : "textAttr" : never) extends infer T_4 extends keyof T_1 ? { readonly [K in T_4]-?: K extends "label" | "disabled" | "keyAttr" | "textAttr" | "appendWidth" | "autoSelectFirst" | "dense" | "itemHeight" | "prependWidth" | "variant" | "loading" | "errorMessages" | "successMessages" | "hint" | "required" | "hideDetails" | "clearable" | "readOnly" | "hideNoData" | "noDataText" ? {
625
627
  disabled: false;
626
628
  loading: false;
627
629
  readOnly: false;
@@ -648,7 +650,7 @@ declare const __VLS_export: <TValue, TItem>(__VLS_props: NonNullable<Awaited<typ
648
650
  }) => any;
649
651
  } & {
650
652
  'item.append'?: (props: {
651
- disabled: import("@vue/reactivity").DistributeRef<[(Readonly<{
653
+ disabled: boolean & import("@vue/reactivity").DistributeRef<[(Readonly<{
652
654
  options: TItem[];
653
655
  menuOptions: MenuProps;
654
656
  labelClass: string;
@@ -675,7 +677,7 @@ declare const __VLS_export: <TValue, TItem>(__VLS_props: NonNullable<Awaited<typ
675
677
  readonly hideNoData: boolean;
676
678
  readonly noDataText: string;
677
679
  readonly required: boolean;
678
- } & ("disabled" | "autoSelectFirst" | "dense" | "loading" | "required" | "hideDetails" | "clearable" | "readOnly" | "hideNoData" | ([KeyOfType<TItem, TValue extends (infer U)[] ? U : TValue> | undefined] extends [boolean | undefined] ? "keyAttr" : never) | ([keyof TItem | undefined] extends [boolean | undefined] ? "textAttr" : never) extends infer T extends keyof T_1 ? { readonly [K in T]-?: K extends "label" | "disabled" | "keyAttr" | "textAttr" | "appendWidth" | "autoSelectFirst" | "dense" | "itemHeight" | "prependWidth" | "variant" | "loading" | "errorMessages" | "successMessages" | "hint" | "required" | "hideDetails" | "clearable" | "readOnly" | "hideNoData" | "noDataText" ? {
680
+ } & ("disabled" | "autoSelectFirst" | "dense" | "loading" | "required" | "hideDetails" | "clearable" | "readOnly" | "hideNoData" | (KeyOfType<TItem, TValue extends (infer U)[] ? U : TValue> | undefined extends boolean | undefined ? (boolean & KeyOfType<TItem, TValue extends (infer U)[] ? U : TValue>) | undefined extends undefined ? never : "keyAttr" : never) | (keyof TItem | undefined extends boolean | undefined ? (boolean & keyof TItem) | undefined extends undefined ? never : "textAttr" : never) extends infer T extends keyof T_1 ? { readonly [K in T]-?: K extends "label" | "disabled" | "keyAttr" | "textAttr" | "appendWidth" | "autoSelectFirst" | "dense" | "itemHeight" | "prependWidth" | "variant" | "loading" | "errorMessages" | "successMessages" | "hint" | "required" | "hideDetails" | "clearable" | "readOnly" | "hideNoData" | "noDataText" ? {
679
681
  disabled: false;
680
682
  loading: false;
681
683
  readOnly: false;
@@ -723,7 +725,7 @@ declare const __VLS_export: <TValue, TItem>(__VLS_props: NonNullable<Awaited<typ
723
725
  readonly hideNoData: boolean;
724
726
  readonly noDataText: string;
725
727
  readonly required: boolean;
726
- } & ("disabled" | "autoSelectFirst" | "dense" | "loading" | "required" | "hideDetails" | "clearable" | "readOnly" | "hideNoData" | ([KeyOfType<TItem, TValue extends (infer U)[] ? U : TValue> | undefined] extends [boolean | undefined] ? "keyAttr" : never) | ([keyof TItem | undefined] extends [boolean | undefined] ? "textAttr" : never) extends infer T_2 extends keyof T_1 ? { readonly [K in T_2]-?: K extends "label" | "disabled" | "keyAttr" | "textAttr" | "appendWidth" | "autoSelectFirst" | "dense" | "itemHeight" | "prependWidth" | "variant" | "loading" | "errorMessages" | "successMessages" | "hint" | "required" | "hideDetails" | "clearable" | "readOnly" | "hideNoData" | "noDataText" ? {
728
+ } & ("disabled" | "autoSelectFirst" | "dense" | "loading" | "required" | "hideDetails" | "clearable" | "readOnly" | "hideNoData" | (KeyOfType<TItem, TValue extends (infer U)[] ? U : TValue> | undefined extends boolean | undefined ? (boolean & KeyOfType<TItem, TValue extends (infer U)[] ? U : TValue>) | undefined extends undefined ? never : "keyAttr" : never) | (keyof TItem | undefined extends boolean | undefined ? (boolean & keyof TItem) | undefined extends undefined ? never : "textAttr" : never) extends infer T_2 extends keyof T_1 ? { readonly [K in T_2]-?: K extends "label" | "disabled" | "keyAttr" | "textAttr" | "appendWidth" | "autoSelectFirst" | "dense" | "itemHeight" | "prependWidth" | "variant" | "loading" | "errorMessages" | "successMessages" | "hint" | "required" | "hideDetails" | "clearable" | "readOnly" | "hideNoData" | "noDataText" ? {
727
729
  disabled: false;
728
730
  loading: false;
729
731
  readOnly: false;
@@ -771,7 +773,7 @@ declare const __VLS_export: <TValue, TItem>(__VLS_props: NonNullable<Awaited<typ
771
773
  readonly hideNoData: boolean;
772
774
  readonly noDataText: string;
773
775
  readonly required: boolean;
774
- } & ("disabled" | "autoSelectFirst" | "dense" | "loading" | "required" | "hideDetails" | "clearable" | "readOnly" | "hideNoData" | ([KeyOfType<TItem, TValue extends (infer U)[] ? U : TValue> | undefined] extends [boolean | undefined] ? "keyAttr" : never) | ([keyof TItem | undefined] extends [boolean | undefined] ? "textAttr" : never) extends infer T_3 extends keyof T_1 ? { readonly [K in T_3]-?: K extends "label" | "disabled" | "keyAttr" | "textAttr" | "appendWidth" | "autoSelectFirst" | "dense" | "itemHeight" | "prependWidth" | "variant" | "loading" | "errorMessages" | "successMessages" | "hint" | "required" | "hideDetails" | "clearable" | "readOnly" | "hideNoData" | "noDataText" ? {
776
+ } & ("disabled" | "autoSelectFirst" | "dense" | "loading" | "required" | "hideDetails" | "clearable" | "readOnly" | "hideNoData" | (KeyOfType<TItem, TValue extends (infer U)[] ? U : TValue> | undefined extends boolean | undefined ? (boolean & KeyOfType<TItem, TValue extends (infer U)[] ? U : TValue>) | undefined extends undefined ? never : "keyAttr" : never) | (keyof TItem | undefined extends boolean | undefined ? (boolean & keyof TItem) | undefined extends undefined ? never : "textAttr" : never) extends infer T_3 extends keyof T_1 ? { readonly [K in T_3]-?: K extends "label" | "disabled" | "keyAttr" | "textAttr" | "appendWidth" | "autoSelectFirst" | "dense" | "itemHeight" | "prependWidth" | "variant" | "loading" | "errorMessages" | "successMessages" | "hint" | "required" | "hideDetails" | "clearable" | "readOnly" | "hideNoData" | "noDataText" ? {
775
777
  disabled: false;
776
778
  loading: false;
777
779
  readOnly: false;
@@ -819,7 +821,7 @@ declare const __VLS_export: <TValue, TItem>(__VLS_props: NonNullable<Awaited<typ
819
821
  readonly hideNoData: boolean;
820
822
  readonly noDataText: string;
821
823
  readonly required: boolean;
822
- } & ("disabled" | "autoSelectFirst" | "dense" | "loading" | "required" | "hideDetails" | "clearable" | "readOnly" | "hideNoData" | ([KeyOfType<TItem, TValue extends (infer U)[] ? U : TValue> | undefined] extends [boolean | undefined] ? "keyAttr" : never) | ([keyof TItem | undefined] extends [boolean | undefined] ? "textAttr" : never) extends infer T_4 extends keyof T_1 ? { readonly [K in T_4]-?: K extends "label" | "disabled" | "keyAttr" | "textAttr" | "appendWidth" | "autoSelectFirst" | "dense" | "itemHeight" | "prependWidth" | "variant" | "loading" | "errorMessages" | "successMessages" | "hint" | "required" | "hideDetails" | "clearable" | "readOnly" | "hideNoData" | "noDataText" ? {
824
+ } & ("disabled" | "autoSelectFirst" | "dense" | "loading" | "required" | "hideDetails" | "clearable" | "readOnly" | "hideNoData" | (KeyOfType<TItem, TValue extends (infer U)[] ? U : TValue> | undefined extends boolean | undefined ? (boolean & KeyOfType<TItem, TValue extends (infer U)[] ? U : TValue>) | undefined extends undefined ? never : "keyAttr" : never) | (keyof TItem | undefined extends boolean | undefined ? (boolean & keyof TItem) | undefined extends undefined ? never : "textAttr" : never) extends infer T_4 extends keyof T_1 ? { readonly [K in T_4]-?: K extends "label" | "disabled" | "keyAttr" | "textAttr" | "appendWidth" | "autoSelectFirst" | "dense" | "itemHeight" | "prependWidth" | "variant" | "loading" | "errorMessages" | "successMessages" | "hint" | "required" | "hideDetails" | "clearable" | "readOnly" | "hideNoData" | "noDataText" ? {
823
825
  disabled: false;
824
826
  loading: false;
825
827
  readOnly: false;
@@ -853,6 +855,8 @@ declare const __VLS_export: <TValue, TItem>(__VLS_props: NonNullable<Awaited<typ
853
855
  };
854
856
  declare const _default: typeof __VLS_export;
855
857
  export default _default;
856
- type __VLS_PrettifyLocal<T> = {
858
+ type __VLS_PrettifyLocal<T> = (T extends any ? {
859
+ [K in keyof T]: T[K];
860
+ } : {
857
861
  [K in keyof T as K]: T[K];
858
- } & {};
862
+ }) & {};
@@ -7,7 +7,7 @@ import RuiProgress from "../../progress/RuiProgress.vue.js";
7
7
  import { useDropdownMenu } from "../../../composables/dropdown-menu.js";
8
8
  import { useFocus, isDefined } from "@vueuse/core";
9
9
  import { set, get } from "@vueuse/shared";
10
- const _hoisted_1 = ["disabled", "aria-disabled", "tabindex"];
10
+ const _hoisted_1 = ["disabled", "aria-disabled", "tabindex", "data-error", "aria-invalid"];
11
11
  const _hoisted_2 = {
12
12
  key: 0,
13
13
  class: "text-rui-error"
@@ -53,7 +53,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
53
53
  emits: ["update:modelValue"],
54
54
  setup(__props) {
55
55
  useCssVars((_ctx) => ({
56
- "v2e36bd88": unref(labelWithQuote)
56
+ "ef71cdca": unref(labelWithQuote)
57
57
  }));
58
58
  const modelValue = useModel(__props, "modelValue");
59
59
  const props = __props;
@@ -165,6 +165,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
165
165
  ]]
166
166
  }, { ...("getNonRootAttrs" in _ctx ? _ctx.getNonRootAttrs : unref(getNonRootAttrs))(_ctx.$attrs), ...__props.readOnly ? {} : attrs }, {
167
167
  "data-id": "activator",
168
+ "data-error": hasError ? "" : void 0,
169
+ "aria-invalid": hasError,
168
170
  onKeydown: [
169
171
  _cache[1] || (_cache[1] = withKeys(withModifiers(($event) => unref(moveHighlight)(true), ["prevent"]), ["up"])),
170
172
  _cache[2] || (_cache[2] = withKeys(withModifiers(($event) => unref(moveHighlight)(false), ["prevent"]), ["down"]))
@@ -1 +1 @@
1
- {"version":3,"file":"RuiMenuSelect.vue2.js","sources":["../../../../src/components/forms/select/RuiMenuSelect.vue"],"sourcesContent":["<script lang=\"ts\" setup generic=\"TValue, TItem\">\nimport RuiButton from '@/components/buttons/button/RuiButton.vue';\nimport RuiIcon from '@/components/icons/RuiIcon.vue';\nimport RuiMenu, { type MenuProps } from '@/components/overlays/menu/RuiMenu.vue';\nimport RuiProgress from '@/components/progress/RuiProgress.vue';\nimport { type KeyOfType, useDropdownMenu } from '@/composables/dropdown-menu';\n\nexport interface Props<TValue, TItem> {\n options: TItem[];\n keyAttr?: KeyOfType<TItem, TValue extends Array<infer U> ? U : TValue>;\n textAttr?: keyof TItem;\n disabled?: boolean;\n loading?: boolean;\n readOnly?: boolean;\n dense?: boolean;\n clearable?: boolean;\n label?: string;\n menuOptions?: MenuProps;\n labelClass?: string;\n menuClass?: string;\n optionClass?: string;\n prependWidth?: number; // in rem\n appendWidth?: number; // in rem\n itemHeight?: number; // in px\n variant?: 'default' | 'filled' | 'outlined';\n hint?: string;\n errorMessages?: string | string[];\n successMessages?: string | string[];\n hideDetails?: boolean;\n autoSelectFirst?: boolean;\n hideNoData?: boolean;\n noDataText?: string;\n required?: boolean;\n}\n\ndefineOptions({\n name: 'RuiMenuSelect',\n inheritAttrs: false,\n});\n\nconst modelValue = defineModel<TValue | undefined>({ required: true });\n\nconst props = withDefaults(defineProps<Props<TValue, TItem>>(), {\n disabled: false,\n loading: false,\n readOnly: false,\n dense: false,\n clearable: false,\n hideDetails: false,\n label: 'Select',\n prependWidth: 0,\n appendWidth: 0,\n variant: 'default',\n hint: undefined,\n keyAttr: undefined,\n textAttr: undefined,\n itemHeight: undefined,\n errorMessages: () => [],\n successMessages: () => [],\n autoSelectFirst: false,\n hideNoData: false,\n noDataText: 'No data available',\n required: false,\n});\n\nconst { dense, options, disabled } = toRefs(props);\n\nconst menuRef = ref();\nconst activator = ref();\nconst { focused } = useFocus(activator);\n\nconst value = computed<TItem | undefined>({\n get: () => {\n const keyAttr = props.keyAttr;\n const value = get(modelValue);\n if (keyAttr)\n return props.options.find(option => option[keyAttr] === value);\n return value as unknown as TItem;\n },\n set: (selected?: TItem) => {\n const keyAttr = props.keyAttr;\n const selection = keyAttr && selected ? selected[keyAttr] : selected;\n set(modelValue, selection as TValue);\n },\n});\n\nconst labelWithQuote = computed<string>(() => {\n if (!props.label)\n return '\"\\\\200B\"';\n\n const asterisk = props.required ? '﹡' : '';\n return `' ${props.label}${asterisk} '`;\n});\n\nconst {\n containerProps,\n wrapperProps,\n renderedData,\n isOpen,\n menuWidth,\n getText,\n getIdentifier,\n isActiveItem,\n highlightedIndex,\n moveHighlight,\n valueKey,\n} = useDropdownMenu<TValue, TItem>({\n itemHeight: props.itemHeight ?? (props.dense ? 30 : 48),\n keyAttr: props.keyAttr,\n textAttr: props.textAttr,\n options,\n autoFocus: true,\n dense,\n value,\n menuRef,\n disabled,\n autoSelectFirst: props.autoSelectFirst,\n});\n\nconst outlined = computed(() => props.variant === 'outlined');\n\nconst float = computed(() => (get(isOpen) || !!get(value)) && get(outlined));\n\nconst virtualContainerProps = computed(() => ({\n style: containerProps.style as any,\n ref: containerProps.ref as any,\n}));\n\nfunction setValue(val: TItem, index?: number) {\n if (isDefined(index))\n set(highlightedIndex, index);\n\n set(value, val);\n set(focused, true);\n}\n\nfunction clear() {\n set(modelValue, undefined);\n}\n</script>\n\n<template>\n <RuiMenu\n v-model=\"isOpen\"\n :class=\"$style.wrapper\"\n disable-auto-focus\n v-bind=\"{\n ...getRootAttrs($attrs),\n placement: 'bottom-start',\n closeOnContentClick: true,\n fullWidth: true,\n ...menuOptions,\n errorMessages,\n successMessages,\n hint,\n dense,\n showDetails: !hideDetails,\n disabled,\n }\"\n >\n <template #activator=\"{ attrs, open, hasError, hasSuccess }\">\n <slot\n name=\"activator\"\n v-bind=\"{ disabled, value, variant, readOnly, attrs, open, hasError, hasSuccess }\"\n >\n <button\n ref=\"activator\"\n :disabled=\"disabled\"\n :aria-disabled=\"disabled\"\n type=\"button\"\n :tabindex=\"disabled || readOnly ? -1 : 0\"\n class=\"group\"\n :class=\"[\n $style.activator,\n labelClass,\n {\n [$style.disabled]: disabled,\n [$style.readonly]: readOnly,\n [$style.outlined]: outlined,\n [$style.dense]: dense,\n [$style.float]: float,\n [$style.opened]: open,\n [$style['with-value']]: !!value,\n [$style['with-error']]: hasError,\n [$style['with-success']]: hasSuccess && !hasError,\n },\n ]\"\n v-bind=\"{ ...getNonRootAttrs($attrs), ...(readOnly ? {} : attrs) }\"\n data-id=\"activator\"\n @keydown.up.prevent=\"moveHighlight(true)\"\n @keydown.down.prevent=\"moveHighlight(false)\"\n >\n <span\n v-if=\"outlined || !value\"\n :class=\"[\n $style.label,\n {\n 'absolute': outlined,\n 'pr-2': !value && !open && outlined,\n },\n ]\"\n >\n <slot\n name=\"activator.label\"\n v-bind=\"{ value }\"\n >\n {{ label }}\n </slot>\n <span\n v-if=\"required\"\n class=\"text-rui-error\"\n >\n ﹡\n </span>\n </span>\n <span\n v-if=\"value\"\n class=\"w-full\"\n :class=\"$style.value\"\n >\n <slot\n name=\"selection.prepend\"\n v-bind=\"{ item: value }\"\n />\n <slot\n name=\"selection\"\n v-bind=\"{ item: value }\"\n >\n {{ getText(value) }}\n </slot>\n </span>\n\n <span\n v-if=\"clearable && value && !disabled\"\n class=\"group-hover:!visible\"\n :class=\"[$style.clear, focused && '!visible']\"\n @click.stop.prevent=\"clear()\"\n >\n <RuiIcon\n color=\"error\"\n name=\"lu-x\"\n size=\"18\"\n />\n </span>\n\n <span :class=\"$style.icon__wrapper\">\n <RuiIcon\n :class=\"[$style.icon, { 'rotate-180': open }]\"\n :size=\"dense ? 16 : 24\"\n name=\"lu-chevron-down\"\n />\n </span>\n\n <RuiProgress\n v-if=\"loading\"\n class=\"absolute left-0 bottom-0 w-full\"\n color=\"primary\"\n thickness=\"3\"\n variant=\"indeterminate\"\n />\n </button>\n <fieldset\n v-if=\"outlined\"\n :class=\"$style.fieldset\"\n >\n <legend :class=\"{ 'px-2': float }\" />\n </fieldset>\n </slot>\n <input\n :value=\"valueKey\"\n class=\"hidden\"\n type=\"hidden\"\n />\n </template>\n <template #default=\"{ width }\">\n <div\n v-if=\"options.length > 0\"\n :class=\"[$style.menu, menuClass]\"\n :style=\"{ width: `${width}px`, minWidth: menuWidth }\"\n v-bind=\"virtualContainerProps\"\n @scroll=\"containerProps.onScroll\"\n @keydown.up.prevent=\"moveHighlight(true)\"\n @keydown.down.prevent=\"moveHighlight(false)\"\n >\n <div\n v-bind=\"wrapperProps\"\n ref=\"menuRef\"\n >\n <RuiButton\n v-for=\"({ item, _index }) in renderedData\"\n :key=\"_index\"\n :active=\"isActiveItem(item)\"\n :size=\"dense ? 'sm' : undefined\"\n :model-value=\"getIdentifier(item)\"\n variant=\"list\"\n :class=\"{\n highlighted: highlightedIndex === _index,\n [$style.highlighted]: !isActiveItem(item) && highlightedIndex === _index,\n }\"\n @update:model-value=\"setValue(item, _index)\"\n @mousedown=\"highlightedIndex = _index\"\n >\n <template #prepend>\n <slot\n name=\"item.prepend\"\n v-bind=\"{ disabled, item, active: isActiveItem(item) }\"\n />\n </template>\n <slot\n name=\"item\"\n v-bind=\"{ disabled, item, active: isActiveItem(item) }\"\n >\n {{ getText(item) }}\n </slot>\n <template #append>\n <slot\n name=\"item.append\"\n v-bind=\"{ disabled, item, active: isActiveItem(item) }\"\n />\n </template>\n </RuiButton>\n </div>\n </div>\n\n <div\n v-else-if=\"!hideNoData\"\n :style=\"{ width: `${width}px`, minWidth: menuWidth }\"\n :class=\"menuClass\"\n >\n <slot name=\"no-data\">\n <div class=\"p-4\">\n {{ noDataText }}\n </div>\n </slot>\n </div>\n </template>\n </RuiMenu>\n</template>\n\n<style lang=\"scss\" module>\n.wrapper {\n @apply w-full inline-flex flex-col;\n\n .activator {\n @apply relative inline-flex items-center w-full;\n @apply outline-none focus:outline-none cursor-pointer min-h-14 pl-3 py-2 pr-8 rounded;\n @apply m-0 bg-white transition-all text-body-1 text-left hover:border-black;\n\n &:not(.outlined) {\n @apply hover:bg-gray-100 focus-within:bg-gray-100;\n }\n\n &.dense {\n @apply py-1.5 min-h-10;\n\n ~ .fieldset {\n @apply px-2;\n }\n }\n\n &.disabled {\n @apply opacity-65 text-rui-text-disabled active:text-rui-text-disabled cursor-default pointer-events-none;\n }\n\n &.readonly {\n @apply opacity-80 pointer-events-none cursor-default bg-gray-50;\n }\n\n &.outlined {\n @apply border-none hover:border-none;\n\n &.opened,\n &:focus {\n @apply border-rui-primary;\n\n ~ .fieldset {\n @apply border-rui-primary #{!important};\n @apply border-2 #{!important};\n }\n }\n\n ~ .fieldset {\n @apply border border-black/[0.23];\n }\n\n &:hover {\n ~ .fieldset {\n @apply border-black;\n }\n }\n\n &.disabled {\n ~ .fieldset {\n @apply border-dotted;\n @apply border-black/[0.23] #{!important};\n }\n }\n\n &.with-success {\n .label {\n @apply text-rui-success #{!important};\n }\n\n ~ .fieldset {\n @apply border-rui-success #{!important};\n }\n }\n\n &.with-error {\n .label {\n @apply text-rui-error #{!important};\n }\n\n ~ .fieldset {\n @apply border-rui-error #{!important};\n }\n }\n }\n\n .label {\n @apply text-rui-text-secondary;\n max-width: calc(100% - 2.5rem);\n }\n\n .label,\n .value {\n @apply block truncate transition-all duration-75;\n }\n\n .clear {\n @apply ml-auto shrink-0 invisible;\n }\n\n .icon {\n @apply text-rui-text transition;\n\n &__wrapper {\n @apply flex items-center justify-end;\n @apply absolute right-3 top-px bottom-0;\n }\n }\n\n &.float {\n .label {\n @apply -translate-y-2 top-0 text-xs px-1;\n }\n\n ~ .fieldset {\n legend {\n &:after {\n content: v-bind(labelWithQuote);\n }\n }\n }\n\n &.opened,\n &.opened.with-value,\n &:focus,\n &:focus.with-value {\n .label {\n @apply text-rui-primary;\n }\n\n ~ .fieldset {\n @apply border-rui-primary;\n @apply border-2 #{!important};\n }\n }\n }\n }\n\n .fieldset {\n @apply absolute w-full min-w-0 h-[calc(100%+0.5rem)] top-0 left-0 rounded pointer-events-none px-2 transition-all -mt-2;\n\n legend {\n @apply opacity-0 text-xs truncate;\n max-width: calc(100% - 1rem);\n\n &:before {\n content: ' ';\n }\n\n &:after {\n @apply truncate max-w-full leading-[0];\n content: '\\200B';\n }\n }\n }\n}\n\n.menu {\n @apply overflow-y-auto max-h-60 min-w-[2.5rem];\n}\n\n.highlighted {\n @apply bg-rui-grey-200 #{!important};\n\n &.active {\n @apply bg-rui-grey-300 #{!important};\n }\n}\n\n:global(.dark) {\n .wrapper {\n .activator {\n @apply bg-transparent text-rui-text;\n\n &:not(.outlined) {\n @apply hover:bg-white/10 focus-within:bg-white/10;\n\n &.disabled {\n @apply bg-white/10;\n }\n }\n\n &.readonly {\n @apply bg-white/10;\n }\n\n &.outlined {\n ~ .fieldset {\n @apply border-white/[0.23];\n }\n\n &.disabled {\n ~ .fieldset {\n @apply border-white/[0.23] #{!important};\n }\n }\n\n &:hover {\n ~ .fieldset {\n @apply border-white;\n }\n }\n }\n }\n }\n\n .highlighted {\n @apply bg-rui-grey-800 #{!important};\n\n &.active {\n @apply bg-rui-grey-700 #{!important};\n }\n }\n}\n</style>\n"],"names":["_useModel","value","_openBlock","_createBlock","_mergeProps","_unref","$style","getRootAttrs","$attrs","_withCtx","_renderSlot","_createElementVNode","getNonRootAttrs","_createElementBlock","_normalizeClass","_normalizeProps","_guardReactiveProps","_createTextVNode","_toDisplayString","_createVNode","_Fragment","_renderList","_normalizeStyle"],"mappings":"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"}
1
+ {"version":3,"file":"RuiMenuSelect.vue2.js","sources":["../../../../src/components/forms/select/RuiMenuSelect.vue"],"sourcesContent":["<script lang=\"ts\" setup generic=\"TValue, TItem\">\nimport RuiButton from '@/components/buttons/button/RuiButton.vue';\nimport RuiIcon from '@/components/icons/RuiIcon.vue';\nimport RuiMenu, { type MenuProps } from '@/components/overlays/menu/RuiMenu.vue';\nimport RuiProgress from '@/components/progress/RuiProgress.vue';\nimport { type KeyOfType, useDropdownMenu } from '@/composables/dropdown-menu';\n\nexport interface Props<TValue, TItem> {\n options: TItem[];\n keyAttr?: KeyOfType<TItem, TValue extends Array<infer U> ? U : TValue>;\n textAttr?: keyof TItem;\n disabled?: boolean;\n loading?: boolean;\n readOnly?: boolean;\n dense?: boolean;\n clearable?: boolean;\n label?: string;\n menuOptions?: MenuProps;\n labelClass?: string;\n menuClass?: string;\n optionClass?: string;\n prependWidth?: number; // in rem\n appendWidth?: number; // in rem\n itemHeight?: number; // in px\n variant?: 'default' | 'filled' | 'outlined';\n hint?: string;\n errorMessages?: string | string[];\n successMessages?: string | string[];\n hideDetails?: boolean;\n autoSelectFirst?: boolean;\n hideNoData?: boolean;\n noDataText?: string;\n required?: boolean;\n}\n\ndefineOptions({\n name: 'RuiMenuSelect',\n inheritAttrs: false,\n});\n\nconst modelValue = defineModel<TValue | undefined>({ required: true });\n\nconst props = withDefaults(defineProps<Props<TValue, TItem>>(), {\n disabled: false,\n loading: false,\n readOnly: false,\n dense: false,\n clearable: false,\n hideDetails: false,\n label: 'Select',\n prependWidth: 0,\n appendWidth: 0,\n variant: 'default',\n hint: undefined,\n keyAttr: undefined,\n textAttr: undefined,\n itemHeight: undefined,\n errorMessages: () => [],\n successMessages: () => [],\n autoSelectFirst: false,\n hideNoData: false,\n noDataText: 'No data available',\n required: false,\n});\n\nconst { dense, options, disabled } = toRefs(props);\n\nconst menuRef = ref();\nconst activator = ref();\nconst { focused } = useFocus(activator);\n\nconst value = computed<TItem | undefined>({\n get: () => {\n const keyAttr = props.keyAttr;\n const value = get(modelValue);\n if (keyAttr)\n return props.options.find(option => option[keyAttr] === value);\n return value as unknown as TItem;\n },\n set: (selected?: TItem) => {\n const keyAttr = props.keyAttr;\n const selection = keyAttr && selected ? selected[keyAttr] : selected;\n set(modelValue, selection as TValue);\n },\n});\n\nconst labelWithQuote = computed<string>(() => {\n if (!props.label)\n return '\"\\\\200B\"';\n\n const asterisk = props.required ? '﹡' : '';\n return `' ${props.label}${asterisk} '`;\n});\n\nconst {\n containerProps,\n wrapperProps,\n renderedData,\n isOpen,\n menuWidth,\n getText,\n getIdentifier,\n isActiveItem,\n highlightedIndex,\n moveHighlight,\n valueKey,\n} = useDropdownMenu<TValue, TItem>({\n itemHeight: props.itemHeight ?? (props.dense ? 30 : 48),\n keyAttr: props.keyAttr,\n textAttr: props.textAttr,\n options,\n autoFocus: true,\n dense,\n value,\n menuRef,\n disabled,\n autoSelectFirst: props.autoSelectFirst,\n});\n\nconst outlined = computed(() => props.variant === 'outlined');\n\nconst float = computed(() => (get(isOpen) || !!get(value)) && get(outlined));\n\nconst virtualContainerProps = computed(() => ({\n style: containerProps.style as any,\n ref: containerProps.ref as any,\n}));\n\nfunction setValue(val: TItem, index?: number) {\n if (isDefined(index))\n set(highlightedIndex, index);\n\n set(value, val);\n set(focused, true);\n}\n\nfunction clear() {\n set(modelValue, undefined);\n}\n</script>\n\n<template>\n <RuiMenu\n v-model=\"isOpen\"\n :class=\"$style.wrapper\"\n disable-auto-focus\n v-bind=\"{\n ...getRootAttrs($attrs),\n placement: 'bottom-start',\n closeOnContentClick: true,\n fullWidth: true,\n ...menuOptions,\n errorMessages,\n successMessages,\n hint,\n dense,\n showDetails: !hideDetails,\n disabled,\n }\"\n >\n <template #activator=\"{ attrs, open, hasError, hasSuccess }\">\n <slot\n name=\"activator\"\n v-bind=\"{ disabled, value, variant, readOnly, attrs, open, hasError, hasSuccess }\"\n >\n <button\n ref=\"activator\"\n :disabled=\"disabled\"\n :aria-disabled=\"disabled\"\n type=\"button\"\n :tabindex=\"disabled || readOnly ? -1 : 0\"\n class=\"group\"\n :class=\"[\n $style.activator,\n labelClass,\n {\n [$style.disabled]: disabled,\n [$style.readonly]: readOnly,\n [$style.outlined]: outlined,\n [$style.dense]: dense,\n [$style.float]: float,\n [$style.opened]: open,\n [$style['with-value']]: !!value,\n [$style['with-error']]: hasError,\n [$style['with-success']]: hasSuccess && !hasError,\n },\n ]\"\n v-bind=\"{ ...getNonRootAttrs($attrs), ...(readOnly ? {} : attrs) }\"\n data-id=\"activator\"\n :data-error=\"hasError ? '' : undefined\"\n :aria-invalid=\"hasError\"\n @keydown.up.prevent=\"moveHighlight(true)\"\n @keydown.down.prevent=\"moveHighlight(false)\"\n >\n <span\n v-if=\"outlined || !value\"\n :class=\"[\n $style.label,\n {\n 'absolute': outlined,\n 'pr-2': !value && !open && outlined,\n },\n ]\"\n >\n <slot\n name=\"activator.label\"\n v-bind=\"{ value }\"\n >\n {{ label }}\n </slot>\n <span\n v-if=\"required\"\n class=\"text-rui-error\"\n >\n ﹡\n </span>\n </span>\n <span\n v-if=\"value\"\n class=\"w-full\"\n :class=\"$style.value\"\n >\n <slot\n name=\"selection.prepend\"\n v-bind=\"{ item: value }\"\n />\n <slot\n name=\"selection\"\n v-bind=\"{ item: value }\"\n >\n {{ getText(value) }}\n </slot>\n </span>\n\n <span\n v-if=\"clearable && value && !disabled\"\n class=\"group-hover:!visible\"\n :class=\"[$style.clear, focused && '!visible']\"\n @click.stop.prevent=\"clear()\"\n >\n <RuiIcon\n color=\"error\"\n name=\"lu-x\"\n size=\"18\"\n />\n </span>\n\n <span :class=\"$style.icon__wrapper\">\n <RuiIcon\n :class=\"[$style.icon, { 'rotate-180': open }]\"\n :size=\"dense ? 16 : 24\"\n name=\"lu-chevron-down\"\n />\n </span>\n\n <RuiProgress\n v-if=\"loading\"\n class=\"absolute left-0 bottom-0 w-full\"\n color=\"primary\"\n thickness=\"3\"\n variant=\"indeterminate\"\n />\n </button>\n <fieldset\n v-if=\"outlined\"\n :class=\"$style.fieldset\"\n >\n <legend :class=\"{ 'px-2': float }\" />\n </fieldset>\n </slot>\n <input\n :value=\"valueKey\"\n class=\"hidden\"\n type=\"hidden\"\n />\n </template>\n <template #default=\"{ width }\">\n <div\n v-if=\"options.length > 0\"\n :class=\"[$style.menu, menuClass]\"\n :style=\"{ width: `${width}px`, minWidth: menuWidth }\"\n v-bind=\"virtualContainerProps\"\n @scroll=\"containerProps.onScroll\"\n @keydown.up.prevent=\"moveHighlight(true)\"\n @keydown.down.prevent=\"moveHighlight(false)\"\n >\n <div\n v-bind=\"wrapperProps\"\n ref=\"menuRef\"\n >\n <RuiButton\n v-for=\"({ item, _index }) in renderedData\"\n :key=\"_index\"\n :active=\"isActiveItem(item)\"\n :size=\"dense ? 'sm' : undefined\"\n :model-value=\"getIdentifier(item)\"\n variant=\"list\"\n :class=\"{\n highlighted: highlightedIndex === _index,\n [$style.highlighted]: !isActiveItem(item) && highlightedIndex === _index,\n }\"\n @update:model-value=\"setValue(item, _index)\"\n @mousedown=\"highlightedIndex = _index\"\n >\n <template #prepend>\n <slot\n name=\"item.prepend\"\n v-bind=\"{ disabled, item, active: isActiveItem(item) }\"\n />\n </template>\n <slot\n name=\"item\"\n v-bind=\"{ disabled, item, active: isActiveItem(item) }\"\n >\n {{ getText(item) }}\n </slot>\n <template #append>\n <slot\n name=\"item.append\"\n v-bind=\"{ disabled, item, active: isActiveItem(item) }\"\n />\n </template>\n </RuiButton>\n </div>\n </div>\n\n <div\n v-else-if=\"!hideNoData\"\n :style=\"{ width: `${width}px`, minWidth: menuWidth }\"\n :class=\"menuClass\"\n >\n <slot name=\"no-data\">\n <div class=\"p-4\">\n {{ noDataText }}\n </div>\n </slot>\n </div>\n </template>\n </RuiMenu>\n</template>\n\n<style lang=\"scss\" module>\n.wrapper {\n @apply w-full inline-flex flex-col;\n\n .activator {\n @apply relative inline-flex items-center w-full;\n @apply outline-none focus:outline-none cursor-pointer min-h-14 pl-3 py-2 pr-8 rounded;\n @apply m-0 bg-white transition-all text-body-1 text-left hover:border-black;\n\n &:not(.outlined) {\n @apply hover:bg-gray-100 focus-within:bg-gray-100;\n }\n\n &.dense {\n @apply py-1.5 min-h-10;\n\n ~ .fieldset {\n @apply px-2;\n }\n }\n\n &.disabled {\n @apply opacity-65 text-rui-text-disabled active:text-rui-text-disabled cursor-default pointer-events-none;\n }\n\n &.readonly {\n @apply opacity-80 pointer-events-none cursor-default bg-gray-50;\n }\n\n &.outlined {\n @apply border-none hover:border-none;\n\n &.opened,\n &:focus {\n @apply border-rui-primary;\n\n ~ .fieldset {\n @apply border-rui-primary #{!important};\n @apply border-2 #{!important};\n }\n }\n\n ~ .fieldset {\n @apply border border-black/[0.23];\n }\n\n &:hover {\n ~ .fieldset {\n @apply border-black;\n }\n }\n\n &.disabled {\n ~ .fieldset {\n @apply border-dotted;\n @apply border-black/[0.23] #{!important};\n }\n }\n\n &.with-success {\n .label {\n @apply text-rui-success #{!important};\n }\n\n ~ .fieldset {\n @apply border-rui-success #{!important};\n }\n }\n\n &.with-error {\n .label {\n @apply text-rui-error #{!important};\n }\n\n ~ .fieldset {\n @apply border-rui-error #{!important};\n }\n }\n }\n\n .label {\n @apply text-rui-text-secondary;\n max-width: calc(100% - 2.5rem);\n }\n\n .label,\n .value {\n @apply block truncate transition-all duration-75;\n }\n\n .clear {\n @apply ml-auto shrink-0 invisible;\n }\n\n .icon {\n @apply text-rui-text transition;\n\n &__wrapper {\n @apply flex items-center justify-end;\n @apply absolute right-3 top-px bottom-0;\n }\n }\n\n &.float {\n .label {\n @apply -translate-y-2 top-0 text-xs px-1;\n }\n\n ~ .fieldset {\n legend {\n &:after {\n content: v-bind(labelWithQuote);\n }\n }\n }\n\n &.opened,\n &.opened.with-value,\n &:focus,\n &:focus.with-value {\n .label {\n @apply text-rui-primary;\n }\n\n ~ .fieldset {\n @apply border-rui-primary;\n @apply border-2 #{!important};\n }\n }\n }\n }\n\n .fieldset {\n @apply absolute w-full min-w-0 h-[calc(100%+0.5rem)] top-0 left-0 rounded pointer-events-none px-2 transition-all -mt-2;\n\n legend {\n @apply opacity-0 text-xs truncate;\n max-width: calc(100% - 1rem);\n\n &:before {\n content: ' ';\n }\n\n &:after {\n @apply truncate max-w-full leading-[0];\n content: '\\200B';\n }\n }\n }\n}\n\n.menu {\n @apply overflow-y-auto max-h-60 min-w-[2.5rem];\n}\n\n.highlighted {\n @apply bg-rui-grey-200 #{!important};\n\n &.active {\n @apply bg-rui-grey-300 #{!important};\n }\n}\n\n:global(.dark) {\n .wrapper {\n .activator {\n @apply bg-transparent text-rui-text;\n\n &:not(.outlined) {\n @apply hover:bg-white/10 focus-within:bg-white/10;\n\n &.disabled {\n @apply bg-white/10;\n }\n }\n\n &.readonly {\n @apply bg-white/10;\n }\n\n &.outlined {\n ~ .fieldset {\n @apply border-white/[0.23];\n }\n\n &.disabled {\n ~ .fieldset {\n @apply border-white/[0.23] #{!important};\n }\n }\n\n &:hover {\n ~ .fieldset {\n @apply border-white;\n }\n }\n }\n }\n }\n\n .highlighted {\n @apply bg-rui-grey-800 #{!important};\n\n &.active {\n @apply bg-rui-grey-700 #{!important};\n }\n }\n}\n</style>\n"],"names":["_useModel","value","_openBlock","_createBlock","_mergeProps","_unref","$style","getRootAttrs","$attrs","_withCtx","_renderSlot","_createElementVNode","getNonRootAttrs","_createElementBlock","_normalizeClass","_normalizeProps","_guardReactiveProps","_createTextVNode","_toDisplayString","_createVNode","_Fragment","_renderList","_normalizeStyle"],"mappings":"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"}
@@ -4,11 +4,12 @@ import { getRootAttrs, getNonRootAttrs } from "../../../utils/helpers.js";
4
4
  import { get } from "@vueuse/shared";
5
5
  import { useFormTextDetail } from "../../../utils/form-text-detail.js";
6
6
  import { useElementBounding } from "@vueuse/core";
7
- const _hoisted_1 = {
7
+ const _hoisted_1 = ["data-error"];
8
+ const _hoisted_2 = {
8
9
  key: 0,
9
10
  class: "text-rui-error"
10
11
  };
11
- const _hoisted_2 = ["max", "min", "step", "disabled"];
12
+ const _hoisted_3 = ["max", "min", "step", "disabled", "aria-invalid"];
12
13
  const _sfc_main = /* @__PURE__ */ defineComponent({
13
14
  ...{
14
15
  name: "RuiSlider",
@@ -39,10 +40,10 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
39
40
  emits: ["update:model-value"],
40
41
  setup(__props, { emit: __emit }) {
41
42
  useCssVars((_ctx) => ({
42
- "v4f7b4c22": unref(sliderHeight),
43
- "cfeab12a": unref(sliderWidth),
44
- "v95dfe716": unref(trackWidth),
45
- "v17fbd925": unref(tickSizeInPx)
43
+ "v5a3a992e": unref(sliderHeight),
44
+ "ae30ee42": unref(sliderWidth),
45
+ "b5d1a6fe": unref(trackWidth),
46
+ "v22bb2631": unref(tickSizeInPx)
46
47
  }));
47
48
  const props = __props;
48
49
  const emit = __emit;
@@ -91,14 +92,15 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
91
92
  [_ctx.$style["with-error"] ?? ""]: unref(hasError),
92
93
  [_ctx.$style["with-success"] ?? ""]: unref(hasSuccess) && !unref(hasError)
93
94
  }
94
- ])
95
+ ]),
96
+ "data-error": unref(hasError) ? "" : void 0
95
97
  }, [
96
98
  __props.label ? (openBlock(), createElementBlock("div", {
97
99
  key: 0,
98
100
  class: normalizeClass([_ctx.$style.label, "text-body-1"])
99
101
  }, [
100
102
  createTextVNode(toDisplayString(__props.label) + " ", 1),
101
- __props.required ? (openBlock(), createElementBlock("span", _hoisted_1, " ﹡ ")) : createCommentVNode("", true)
103
+ __props.required ? (openBlock(), createElementBlock("span", _hoisted_2, " ﹡ ")) : createCommentVNode("", true)
102
104
  ], 2)) : createCommentVNode("", true),
103
105
  createElementVNode("div", {
104
106
  ref_key: "outer",
@@ -115,8 +117,9 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
115
117
  max: unref(max),
116
118
  min: unref(min),
117
119
  step: unref(step),
118
- disabled: __props.disabled
119
- }, unref(getNonRootAttrs)(_ctx.$attrs)), null, 16, _hoisted_2), [
120
+ disabled: __props.disabled,
121
+ "aria-invalid": unref(hasError)
122
+ }, unref(getNonRootAttrs)(_ctx.$attrs)), null, 16, _hoisted_3), [
120
123
  [vModelText, unref(vModel)]
121
124
  ]),
122
125
  createElementVNode("div", {
@@ -155,7 +158,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
155
158
  ], 2)
156
159
  ], 2)
157
160
  ], 2)
158
- ], 2),
161
+ ], 10, _hoisted_1),
159
162
  !__props.hideDetails ? (openBlock(), createBlock(_sfc_main$1, {
160
163
  key: 0,
161
164
  class: "pt-1",
@@ -1 +1 @@
1
- {"version":3,"file":"RuiSlider.vue2.js","sources":["../../../../src/components/forms/slider/RuiSlider.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { ContextColorsType } from '@/consts/colors';\nimport RuiFormTextDetail from '@/components/helpers/RuiFormTextDetail.vue';\nimport { getNonRootAttrs, getRootAttrs } from '@/utils/helpers';\n\nexport interface Props {\n modelValue?: number;\n min?: number;\n max?: number;\n step?: number;\n disabled?: boolean;\n showThumbLabel?: boolean;\n showTicks?: boolean;\n hideTrack?: boolean;\n tickSize?: number;\n vertical?: boolean;\n color?: ContextColorsType;\n label?: string;\n hint?: string;\n errorMessages?: string | string[];\n successMessages?: string | string[];\n hideDetails?: boolean;\n sliderClass?: string;\n tickClass?: string;\n required?: boolean;\n}\n\ndefineOptions({\n name: 'RuiSlider',\n inheritAttrs: false,\n});\n\nconst props = withDefaults(defineProps<Props>(), {\n modelValue: 0,\n min: 0,\n max: 100,\n step: 1,\n disabled: false,\n showThumbLabel: false,\n showTicks: false,\n hideTrack: false,\n vertical: false,\n tickSize: 2,\n color: 'primary',\n label: '',\n hint: '',\n errorMessages: () => [],\n successMessages: () => [],\n hideDetails: false,\n sliderClass: '',\n tickClass: '',\n required: false,\n});\n\nconst emit = defineEmits<{\n (e: 'update:model-value', value: number): void;\n}>();\n\nconst { modelValue, max, min, step, errorMessages, successMessages, vertical, tickSize } = toRefs(props);\n\nconst vModel = computed({\n get() {\n return get(modelValue);\n },\n set(value: number) {\n emit('update:model-value', value);\n },\n});\n\nconst ticksData = computed<[number, number]>(() => {\n const minVal = get(min);\n const stepVal = get(step);\n const range = get(max) - minVal;\n const total = range / stepVal;\n const current = Math.round((get(modelValue) - minVal) / stepVal);\n\n return [current, total];\n});\n\nconst trackWidth = computed(() => {\n const [current, total] = get(ticksData);\n const percentage = Math.min(100, Math.max(0, Math.round(current / total * 100)));\n return `${percentage}%`;\n});\n\nconst { hasError, hasSuccess } = useFormTextDetail(\n errorMessages,\n successMessages,\n);\n\nconst outer = ref<HTMLDivElement>();\nconst { width, height } = useElementBounding(outer);\n\nconst sliderWidth = computed(() => `${get(width)}px`);\nconst sliderHeight = computed(() => `${get(height)}px`);\nconst tickSizeInPx = computed(() => `${get(tickSize)}px`);\n</script>\n\n<template>\n <div v-bind=\"getRootAttrs($attrs)\">\n <label\n :class=\"[\n $style.wrapper,\n {\n [$style.disabled ?? '']: disabled,\n [$style.vertical ?? '']: vertical,\n [$style[color] ?? '']: color,\n [$style['hide-track'] ?? '']: hideTrack,\n [$style['big-tick'] ?? '']: tickSize > 4,\n [$style['with-error'] ?? '']: hasError,\n [$style['with-success'] ?? '']: hasSuccess && !hasError,\n },\n ]\"\n >\n <div\n v-if=\"label\"\n :class=\"$style.label\"\n class=\"text-body-1\"\n >\n {{ label }}\n <span\n v-if=\"required\"\n class=\"text-rui-error\"\n >\n ﹡\n </span>\n </div>\n <div\n ref=\"outer\"\n :class=\"$style.outer\"\n >\n <div :class=\"$style.inner\">\n <input\n v-model=\"vModel\"\n :class=\"$style.input\"\n type=\"range\"\n :max=\"max\"\n :min=\"min\"\n :step=\"step\"\n :disabled=\"disabled\"\n v-bind=\"getNonRootAttrs($attrs)\"\n />\n <div :class=\"$style.slider\">\n <div :class=\"$style.slider__inner\">\n <div :class=\"[$style.slider__container, sliderClass]\">\n <div\n v-if=\"!hideTrack\"\n :class=\"$style.slider__container__track\"\n />\n <div\n v-if=\"showTicks && !disabled\"\n :class=\"$style.slider__ticks\"\n >\n <span\n v-for=\"i in (ticksData[1] + 1)\"\n :key=\"i\"\n :class=\"hideTrack ? [tickClass] : { [$style.highlighted]: i - 1 <= ticksData[0], [tickClass]: i - 1 > ticksData[0] }\"\n />\n </div>\n </div>\n <div :class=\"$style.slider__thumb\" />\n <div\n v-if=\"showThumbLabel && !disabled\"\n :class=\"$style.slider__thumb_label\"\n >\n {{ modelValue }}\n </div>\n </div>\n </div>\n </div>\n </div>\n </label>\n <RuiFormTextDetail\n v-if=\"!hideDetails\"\n class=\"pt-1\"\n :error-messages=\"errorMessages\"\n :success-messages=\"successMessages\"\n :hint=\"hint\"\n />\n </div>\n</template>\n\n<style lang=\"scss\" module>\n@use '@/styles/colors.scss' as c;\n\n:global(.dark) {\n .wrapper {\n &.disabled {\n .inner {\n .slider {\n &__container {\n @apply bg-rui-grey-800 #{!important};\n\n &__track {\n @apply bg-rui-grey-700 #{!important};\n }\n }\n\n &__thumb {\n @apply bg-rui-grey-700 #{!important};\n }\n }\n }\n }\n\n .inner {\n .slider {\n &__ticks {\n span {\n &.highlighted {\n @apply bg-[#121212];\n }\n }\n }\n }\n }\n }\n}\n\n.wrapper {\n @apply flex items-start gap-3;\n\n &.disabled {\n .label {\n @apply text-rui-text-disabled;\n }\n .inner {\n .slider {\n &__container {\n @apply bg-rui-grey-300 #{!important};\n\n &__track {\n @apply bg-rui-grey-400 #{!important};\n }\n }\n\n &__thumb {\n @apply bg-rui-grey-400 #{!important};\n }\n }\n }\n }\n\n @each $color in c.$context-colors {\n &.#{$color},\n &.with-#{$color} {\n .inner {\n .slider {\n &__container {\n @apply bg-rui-#{$color} bg-opacity-40;\n\n &__track {\n @apply bg-rui-#{$color};\n }\n }\n\n &__thumb {\n @apply bg-rui-#{$color};\n\n &:before {\n @apply bg-rui-#{$color};\n }\n }\n\n &__ticks {\n span {\n @apply bg-rui-#{$color};\n }\n }\n }\n }\n\n &.big-tick {\n .inner {\n .slider {\n &__ticks {\n span {\n @apply bg-rui-#{$color}-lighter;\n\n &.highlighted {\n @apply bg-rui-#{$color};\n }\n }\n }\n }\n }\n }\n }\n }\n\n @each $color in ('error', 'success') {\n &.with-#{$color} {\n .label {\n @apply text-rui-#{$color};\n }\n }\n }\n\n &.vertical {\n @apply flex-col-reverse items-center h-full;\n\n .label {\n @apply mb-2 text-center;\n }\n\n .outer {\n @apply min-w-0 min-h-[120px] w-8;\n }\n\n .inner {\n width: v-bind(sliderHeight);\n height: v-bind(sliderWidth);\n @apply -rotate-90;\n transform-origin: 0 0;\n --tw-translate-y: v-bind(sliderHeight);\n\n .slider {\n &__thumb {\n &_label {\n @apply mt-6;\n @apply rotate-90 translate-x-0;\n transform-origin: 0 50%;\n }\n }\n }\n }\n }\n\n .label {\n @apply mt-1 text-rui-text;\n }\n\n .outer {\n @apply relative h-8 flex-1 min-w-[120px];\n }\n\n .inner {\n width: v-bind(sliderWidth);\n height: v-bind(sliderHeight);\n @apply relative;\n\n .input {\n @apply h-full w-full opacity-0 cursor-pointer;\n\n &:not(:disabled) {\n &:hover {\n ~ .slider {\n .slider {\n &__thumb {\n &:before {\n @apply scale-100;\n }\n }\n }\n }\n }\n\n &:focus {\n ~ .slider {\n .slider {\n &__thumb {\n &:before {\n @apply scale-100 opacity-15;\n }\n }\n }\n }\n }\n\n &:active {\n ~ .slider {\n .slider {\n &__thumb {\n &:before {\n @apply scale-100 opacity-30;\n }\n\n &_label {\n @apply opacity-100 visible;\n }\n }\n }\n }\n }\n }\n }\n\n .slider {\n @apply absolute h-full w-full top-0 px-2 pointer-events-none;\n\n &__inner {\n @apply relative h-full w-full cursor-pointer;\n }\n\n &__container {\n @apply absolute top-1/2 transform -translate-y-1/2;\n @apply w-full h-1 rounded-full;\n\n &__track {\n width: v-bind(trackWidth);\n @apply transition-all ease-linear duration-75 delay-0;\n @apply h-full rounded-full;\n }\n }\n\n &__ticks {\n @apply h-full absolute top-0;\n @apply flex justify-between items-center;\n margin: 0 calc(v-bind(tickSizeInPx) / -2);\n width: calc(100% + v-bind(tickSizeInPx));\n\n span {\n @apply rounded-full;\n width: calc(v-bind(tickSizeInPx));\n height: calc(v-bind(tickSizeInPx));\n\n &.highlighted {\n @apply bg-rui-grey-100;\n }\n }\n }\n\n &__thumb {\n @apply absolute top-1/2 transition-all ease-linear duration-75 delay-0 transform -translate-y-1/2 -translate-x-1/2;\n @apply w-3 h-3 rounded-full shadow-2;\n left: v-bind(trackWidth);\n\n &:before {\n @apply w-8 h-8 rounded-full absolute top-1/2 left-1/2;\n @apply opacity-10;\n @apply transition transform -translate-x-1/2 -translate-y-1/2 scale-0;\n content: '';\n }\n\n &_label {\n left: v-bind(trackWidth);\n @apply invisible opacity-0;\n @apply absolute -mt-7 transition-all ease-linear duration-75 delay-0 transform -translate-x-1/2;\n @apply px-2 py-1 text-xs font-normal;\n @apply bg-rui-grey-700/90 text-white rounded shadow;\n }\n }\n }\n }\n}\n</style>\n"],"names":["_createElementBlock","_normalizeProps","_guardReactiveProps","_unref","$attrs","_createElementVNode","_normalizeClass","$style","_createTextVNode","_toDisplayString","_withDirectives","_mergeProps","_Fragment","_renderList","_createBlock","RuiFormTextDetail"],"mappings":"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"}
1
+ {"version":3,"file":"RuiSlider.vue2.js","sources":["../../../../src/components/forms/slider/RuiSlider.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { ContextColorsType } from '@/consts/colors';\nimport RuiFormTextDetail from '@/components/helpers/RuiFormTextDetail.vue';\nimport { getNonRootAttrs, getRootAttrs } from '@/utils/helpers';\n\nexport interface Props {\n modelValue?: number;\n min?: number;\n max?: number;\n step?: number;\n disabled?: boolean;\n showThumbLabel?: boolean;\n showTicks?: boolean;\n hideTrack?: boolean;\n tickSize?: number;\n vertical?: boolean;\n color?: ContextColorsType;\n label?: string;\n hint?: string;\n errorMessages?: string | string[];\n successMessages?: string | string[];\n hideDetails?: boolean;\n sliderClass?: string;\n tickClass?: string;\n required?: boolean;\n}\n\ndefineOptions({\n name: 'RuiSlider',\n inheritAttrs: false,\n});\n\nconst props = withDefaults(defineProps<Props>(), {\n modelValue: 0,\n min: 0,\n max: 100,\n step: 1,\n disabled: false,\n showThumbLabel: false,\n showTicks: false,\n hideTrack: false,\n vertical: false,\n tickSize: 2,\n color: 'primary',\n label: '',\n hint: '',\n errorMessages: () => [],\n successMessages: () => [],\n hideDetails: false,\n sliderClass: '',\n tickClass: '',\n required: false,\n});\n\nconst emit = defineEmits<{\n (e: 'update:model-value', value: number): void;\n}>();\n\nconst { modelValue, max, min, step, errorMessages, successMessages, vertical, tickSize } = toRefs(props);\n\nconst vModel = computed({\n get() {\n return get(modelValue);\n },\n set(value: number) {\n emit('update:model-value', value);\n },\n});\n\nconst ticksData = computed<[number, number]>(() => {\n const minVal = get(min);\n const stepVal = get(step);\n const range = get(max) - minVal;\n const total = range / stepVal;\n const current = Math.round((get(modelValue) - minVal) / stepVal);\n\n return [current, total];\n});\n\nconst trackWidth = computed(() => {\n const [current, total] = get(ticksData);\n const percentage = Math.min(100, Math.max(0, Math.round(current / total * 100)));\n return `${percentage}%`;\n});\n\nconst { hasError, hasSuccess } = useFormTextDetail(\n errorMessages,\n successMessages,\n);\n\nconst outer = ref<HTMLDivElement>();\nconst { width, height } = useElementBounding(outer);\n\nconst sliderWidth = computed(() => `${get(width)}px`);\nconst sliderHeight = computed(() => `${get(height)}px`);\nconst tickSizeInPx = computed(() => `${get(tickSize)}px`);\n</script>\n\n<template>\n <div v-bind=\"getRootAttrs($attrs)\">\n <label\n :class=\"[\n $style.wrapper,\n {\n [$style.disabled ?? '']: disabled,\n [$style.vertical ?? '']: vertical,\n [$style[color] ?? '']: color,\n [$style['hide-track'] ?? '']: hideTrack,\n [$style['big-tick'] ?? '']: tickSize > 4,\n [$style['with-error'] ?? '']: hasError,\n [$style['with-success'] ?? '']: hasSuccess && !hasError,\n },\n ]\"\n :data-error=\"hasError ? '' : undefined\"\n >\n <div\n v-if=\"label\"\n :class=\"$style.label\"\n class=\"text-body-1\"\n >\n {{ label }}\n <span\n v-if=\"required\"\n class=\"text-rui-error\"\n >\n ﹡\n </span>\n </div>\n <div\n ref=\"outer\"\n :class=\"$style.outer\"\n >\n <div :class=\"$style.inner\">\n <input\n v-model=\"vModel\"\n :class=\"$style.input\"\n type=\"range\"\n :max=\"max\"\n :min=\"min\"\n :step=\"step\"\n :disabled=\"disabled\"\n :aria-invalid=\"hasError\"\n v-bind=\"getNonRootAttrs($attrs)\"\n />\n <div :class=\"$style.slider\">\n <div :class=\"$style.slider__inner\">\n <div :class=\"[$style.slider__container, sliderClass]\">\n <div\n v-if=\"!hideTrack\"\n :class=\"$style.slider__container__track\"\n />\n <div\n v-if=\"showTicks && !disabled\"\n :class=\"$style.slider__ticks\"\n >\n <span\n v-for=\"i in (ticksData[1] + 1)\"\n :key=\"i\"\n :class=\"hideTrack ? [tickClass] : { [$style.highlighted]: i - 1 <= ticksData[0], [tickClass]: i - 1 > ticksData[0] }\"\n />\n </div>\n </div>\n <div :class=\"$style.slider__thumb\" />\n <div\n v-if=\"showThumbLabel && !disabled\"\n :class=\"$style.slider__thumb_label\"\n >\n {{ modelValue }}\n </div>\n </div>\n </div>\n </div>\n </div>\n </label>\n <RuiFormTextDetail\n v-if=\"!hideDetails\"\n class=\"pt-1\"\n :error-messages=\"errorMessages\"\n :success-messages=\"successMessages\"\n :hint=\"hint\"\n />\n </div>\n</template>\n\n<style lang=\"scss\" module>\n@use '@/styles/colors.scss' as c;\n\n:global(.dark) {\n .wrapper {\n &.disabled {\n .inner {\n .slider {\n &__container {\n @apply bg-rui-grey-800 #{!important};\n\n &__track {\n @apply bg-rui-grey-700 #{!important};\n }\n }\n\n &__thumb {\n @apply bg-rui-grey-700 #{!important};\n }\n }\n }\n }\n\n .inner {\n .slider {\n &__ticks {\n span {\n &.highlighted {\n @apply bg-[#121212];\n }\n }\n }\n }\n }\n }\n}\n\n.wrapper {\n @apply flex items-start gap-3;\n\n &.disabled {\n .label {\n @apply text-rui-text-disabled;\n }\n .inner {\n .slider {\n &__container {\n @apply bg-rui-grey-300 #{!important};\n\n &__track {\n @apply bg-rui-grey-400 #{!important};\n }\n }\n\n &__thumb {\n @apply bg-rui-grey-400 #{!important};\n }\n }\n }\n }\n\n @each $color in c.$context-colors {\n &.#{$color},\n &.with-#{$color} {\n .inner {\n .slider {\n &__container {\n @apply bg-rui-#{$color} bg-opacity-40;\n\n &__track {\n @apply bg-rui-#{$color};\n }\n }\n\n &__thumb {\n @apply bg-rui-#{$color};\n\n &:before {\n @apply bg-rui-#{$color};\n }\n }\n\n &__ticks {\n span {\n @apply bg-rui-#{$color};\n }\n }\n }\n }\n\n &.big-tick {\n .inner {\n .slider {\n &__ticks {\n span {\n @apply bg-rui-#{$color}-lighter;\n\n &.highlighted {\n @apply bg-rui-#{$color};\n }\n }\n }\n }\n }\n }\n }\n }\n\n @each $color in ('error', 'success') {\n &.with-#{$color} {\n .label {\n @apply text-rui-#{$color};\n }\n }\n }\n\n &.vertical {\n @apply flex-col-reverse items-center h-full;\n\n .label {\n @apply mb-2 text-center;\n }\n\n .outer {\n @apply min-w-0 min-h-[120px] w-8;\n }\n\n .inner {\n width: v-bind(sliderHeight);\n height: v-bind(sliderWidth);\n @apply -rotate-90;\n transform-origin: 0 0;\n --tw-translate-y: v-bind(sliderHeight);\n\n .slider {\n &__thumb {\n &_label {\n @apply mt-6;\n @apply rotate-90 translate-x-0;\n transform-origin: 0 50%;\n }\n }\n }\n }\n }\n\n .label {\n @apply mt-1 text-rui-text;\n }\n\n .outer {\n @apply relative h-8 flex-1 min-w-[120px];\n }\n\n .inner {\n width: v-bind(sliderWidth);\n height: v-bind(sliderHeight);\n @apply relative;\n\n .input {\n @apply h-full w-full opacity-0 cursor-pointer;\n\n &:not(:disabled) {\n &:hover {\n ~ .slider {\n .slider {\n &__thumb {\n &:before {\n @apply scale-100;\n }\n }\n }\n }\n }\n\n &:focus {\n ~ .slider {\n .slider {\n &__thumb {\n &:before {\n @apply scale-100 opacity-15;\n }\n }\n }\n }\n }\n\n &:active {\n ~ .slider {\n .slider {\n &__thumb {\n &:before {\n @apply scale-100 opacity-30;\n }\n\n &_label {\n @apply opacity-100 visible;\n }\n }\n }\n }\n }\n }\n }\n\n .slider {\n @apply absolute h-full w-full top-0 px-2 pointer-events-none;\n\n &__inner {\n @apply relative h-full w-full cursor-pointer;\n }\n\n &__container {\n @apply absolute top-1/2 transform -translate-y-1/2;\n @apply w-full h-1 rounded-full;\n\n &__track {\n width: v-bind(trackWidth);\n @apply transition-all ease-linear duration-75 delay-0;\n @apply h-full rounded-full;\n }\n }\n\n &__ticks {\n @apply h-full absolute top-0;\n @apply flex justify-between items-center;\n margin: 0 calc(v-bind(tickSizeInPx) / -2);\n width: calc(100% + v-bind(tickSizeInPx));\n\n span {\n @apply rounded-full;\n width: calc(v-bind(tickSizeInPx));\n height: calc(v-bind(tickSizeInPx));\n\n &.highlighted {\n @apply bg-rui-grey-100;\n }\n }\n }\n\n &__thumb {\n @apply absolute top-1/2 transition-all ease-linear duration-75 delay-0 transform -translate-y-1/2 -translate-x-1/2;\n @apply w-3 h-3 rounded-full shadow-2;\n left: v-bind(trackWidth);\n\n &:before {\n @apply w-8 h-8 rounded-full absolute top-1/2 left-1/2;\n @apply opacity-10;\n @apply transition transform -translate-x-1/2 -translate-y-1/2 scale-0;\n content: '';\n }\n\n &_label {\n left: v-bind(trackWidth);\n @apply invisible opacity-0;\n @apply absolute -mt-7 transition-all ease-linear duration-75 delay-0 transform -translate-x-1/2;\n @apply px-2 py-1 text-xs font-normal;\n @apply bg-rui-grey-700/90 text-white rounded shadow;\n }\n }\n }\n }\n}\n</style>\n"],"names":["_createElementBlock","_normalizeProps","_guardReactiveProps","_unref","$attrs","_createElementVNode","_normalizeClass","$style","_createTextVNode","_toDisplayString","_withDirectives","_mergeProps","_Fragment","_renderList","_createBlock","RuiFormTextDetail"],"mappings":"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"}
@@ -2,8 +2,9 @@ import { defineComponent, toRefs, createElementBlock, openBlock, normalizeProps,
2
2
  import _sfc_main$1 from "../../helpers/RuiFormTextDetail.vue.js";
3
3
  import { getRootAttrs, getNonRootAttrs } from "../../../utils/helpers.js";
4
4
  import { useFormTextDetail } from "../../../utils/form-text-detail.js";
5
- const _hoisted_1 = ["checked", "disabled"];
6
- const _hoisted_2 = {
5
+ const _hoisted_1 = ["data-error"];
6
+ const _hoisted_2 = ["checked", "disabled", "aria-invalid"];
7
+ const _hoisted_3 = {
7
8
  key: 0,
8
9
  class: "text-rui-error"
9
10
  };
@@ -51,7 +52,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
51
52
  [_ctx.$style["with-error"]]: unref(hasError),
52
53
  [_ctx.$style["with-success"]]: unref(hasSuccess) && !unref(hasError)
53
54
  }
54
- ])
55
+ ]),
56
+ "data-error": unref(hasError) ? "" : void 0
55
57
  }, [
56
58
  createElementVNode("div", {
57
59
  class: normalizeClass(_ctx.$style.inner)
@@ -60,10 +62,11 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
60
62
  checked: unref(modelValue),
61
63
  type: "checkbox",
62
64
  class: _ctx.$style.input,
63
- disabled: __props.disabled
65
+ disabled: __props.disabled,
66
+ "aria-invalid": unref(hasError)
64
67
  }, unref(getNonRootAttrs)(_ctx.$attrs), {
65
68
  onInput: _cache[0] || (_cache[0] = ($event) => input($event))
66
- }), null, 16, _hoisted_1),
69
+ }), null, 16, _hoisted_2),
67
70
  createElementVNode("div", {
68
71
  class: normalizeClass(_ctx.$style.toggle)
69
72
  }, null, 2)
@@ -75,9 +78,9 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
75
78
  renderSlot(_ctx.$slots, "default", {}, () => [
76
79
  createTextVNode(toDisplayString(__props.label), 1)
77
80
  ]),
78
- __props.required ? (openBlock(), createElementBlock("span", _hoisted_2, " ﹡ ")) : createCommentVNode("", true)
81
+ __props.required ? (openBlock(), createElementBlock("span", _hoisted_3, " ﹡ ")) : createCommentVNode("", true)
79
82
  ], 2)) : createCommentVNode("", true)
80
- ], 2),
83
+ ], 10, _hoisted_1),
81
84
  !__props.hideDetails ? (openBlock(), createBlock(_sfc_main$1, {
82
85
  key: 0,
83
86
  class: "pt-1",