@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
@@ -1 +1 @@
1
- {"version":3,"file":"RuiSwitch.vue2.js","sources":["../../../../src/components/forms/switch/RuiSwitch.vue"],"sourcesContent":["<script lang=\"ts\" setup>\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?: boolean;\n disabled?: boolean;\n color?: ContextColorsType;\n size?: 'sm';\n label?: string;\n hint?: string;\n errorMessages?: string | string[];\n successMessages?: string | string[];\n hideDetails?: boolean;\n required?: boolean;\n}\n\ndefineOptions({\n name: 'RuiSwitch',\n inheritAttrs: false,\n});\n\nconst props = withDefaults(defineProps<Props>(), {\n modelValue: false,\n disabled: false,\n color: undefined,\n size: undefined,\n label: '',\n hint: '',\n errorMessages: () => [],\n successMessages: () => [],\n hideDetails: false,\n required: false,\n});\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', modelValue: boolean): void;\n}>();\n\nconst { size, modelValue, errorMessages, successMessages } = toRefs(props);\n\nfunction input(event: Event) {\n const checked = (event.target as HTMLInputElement).checked;\n emit('update:modelValue', checked);\n}\n\nconst { hasError, hasSuccess } = useFormTextDetail(\n errorMessages,\n successMessages,\n);\n</script>\n\n<template>\n <div v-bind=\"getRootAttrs($attrs)\">\n <label\n :class=\"[\n $style.wrapper,\n $style[size ?? ''],\n $style[color ?? ''],\n {\n [$style.checked]: modelValue,\n [$style.disabled]: disabled,\n [$style['with-error']]: hasError,\n [$style['with-success']]: hasSuccess && !hasError,\n },\n ]\"\n >\n <div :class=\"$style.inner\">\n <input\n :checked=\"modelValue\"\n type=\"checkbox\"\n :class=\"$style.input\"\n :disabled=\"disabled\"\n v-bind=\"getNonRootAttrs($attrs)\"\n @input=\"input($event)\"\n />\n <div\n :class=\"$style.toggle\"\n />\n </div>\n <span\n v-if=\"label || $slots.default\"\n :class=\"$style.label\"\n class=\"text-body-1\"\n >\n <slot>{{ label }}</slot>\n <span\n v-if=\"required\"\n class=\"text-rui-error\"\n >\n ﹡\n </span>\n </span>\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.wrapper {\n @apply relative flex gap-2 items-start cursor-pointer;\n\n &.disabled {\n @apply cursor-not-allowed;\n\n .input {\n @apply bg-rui-grey-300 cursor-not-allowed;\n }\n\n .label {\n @apply text-rui-text-disabled;\n }\n\n .toggle {\n @apply bg-rui-grey-500;\n }\n }\n\n &:hover {\n &:not(.disabled) {\n .toggle {\n @apply shadow-1;\n }\n }\n }\n\n &.checked {\n &:not(.disabled) {\n .input {\n @apply bg-black;\n }\n }\n\n .toggle {\n @apply left-[21px];\n }\n }\n\n &.sm {\n .inner {\n @apply w-10 h-5 mt-0.5;\n }\n .toggle {\n @apply w-4 h-4;\n\n &:before {\n @apply w-6 h-6;\n }\n }\n\n &.checked {\n .toggle {\n @apply left-[22px];\n }\n }\n }\n\n &.checked {\n &:not(.disabled) {\n @each $color in c.$context-colors {\n &.#{$color} {\n .input {\n @apply bg-rui-#{$color};\n }\n }\n }\n }\n }\n\n &.with-error {\n .input {\n @apply bg-rui-error #{!important};\n }\n\n .label {\n @apply text-rui-error;\n }\n }\n\n &.with-success {\n .input {\n @apply bg-rui-success #{!important};\n }\n\n .label {\n @apply text-rui-success;\n }\n }\n\n .inner {\n @apply relative w-[43px] h-[24px] shrink-0;\n }\n\n .input {\n @apply appearance-none relative w-full h-full rounded-full bg-rui-grey-400 transition-all duration-75 ease-in-out cursor-pointer;\n\n &:active:not(:disabled) {\n + .toggle {\n &:before {\n @apply opacity-20;\n }\n }\n }\n }\n\n .toggle {\n @apply absolute w-5 h-5 transition-all duration-75 ease-in-out transform -translate-y-1/2 top-1/2 rounded-full pointer-events-none;\n @apply bg-white left-[2px];\n\n &:before {\n content: '';\n @apply absolute w-10 h-10 bg-black rounded-full top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2 transition-all ease-in-out opacity-0;\n }\n }\n}\n\n:global(.dark) {\n .wrapper {\n &.disabled {\n .input {\n @apply bg-rui-grey-800;\n }\n\n .toggle {\n @apply bg-rui-grey-600;\n }\n }\n\n &.checked {\n &:not(.disabled) {\n .input {\n @apply bg-white;\n }\n .toggle {\n @apply bg-black;\n }\n }\n }\n\n &.checked {\n &:not(.disabled) {\n @each $color in c.$context-colors {\n &.#{$color} {\n .input {\n @apply bg-rui-#{$color}/[0.5];\n }\n .toggle {\n @apply bg-rui-#{$color};\n }\n }\n }\n }\n }\n\n &.with-error {\n .input {\n @apply bg-rui-error/[0.5] #{!important};\n }\n .toggle {\n @apply bg-rui-error #{!important};\n }\n }\n\n &.with-success {\n .input {\n @apply bg-rui-success/[0.5] #{!important};\n }\n .toggle {\n @apply bg-rui-success #{!important};\n }\n }\n }\n\n .input {\n @apply bg-rui-grey-700;\n }\n\n .toggle {\n &:before {\n @apply bg-white;\n }\n }\n}\n</style>\n"],"names":["_createElementBlock","_normalizeProps","_guardReactiveProps","_unref","$attrs","_createElementVNode","_normalizeClass","$style","_mergeProps","$slots","_renderSlot","_createBlock","RuiFormTextDetail"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuBA,UAAM,QAAQ;AAad,UAAM,OAAO;AAIb,UAAM,EAAE,MAAM,YAAY,eAAe,gBAAA,IAAoB,OAAO,KAAK;AAEzE,aAAS,MAAM,OAAc;AAC3B,YAAM,UAAW,MAAM,OAA4B;AACnD,WAAK,qBAAqB,OAAO;AAAA,IACnC;AAEA,UAAM,EAAE,UAAU,WAAA,IAAe;AAAA,MAC/B;AAAA,MACA;AAAA,IAAA;;0BAKAA,mBAgDM,OAAAC,eAAAC,mBAhDOC,MAAA,YAAA,EAAaC,KAAAA,MAAM,CAAA,CAAA,GAAA;AAAA,QAC9BC,mBAuCQ,SAAA;AAAA,UAtCL,OAAKC,eAAA;AAAA,YAAYC,KAAAA,OAAO;AAAA,YAAiBA,KAAAA,OAAOJ,MAAA,IAAA,KAAI,EAAA;AAAA,YAAiBI,KAAAA,OAAO,QAAA,SAAK,EAAA;AAAA;eAA8BA,KAAAA,OAAO,OAAO,GAAGJ,MAAA,UAAA;AAAA,eAAuBI,KAAAA,OAAO,QAAQ,GAAG,QAAA;AAAA,cAAqBA,CAAAA,KAAAA,uBAAuBJ,MAAA,QAAA;AAAA,eAAqBI,KAAAA,OAAM,cAAA,CAAA,GAAmBJ,MAAA,UAAA,KAAU,CAAKA,MAAA,QAAA;AAAA,YAAA;AAAA;;UAYnRE,mBAYM,OAAA;AAAA,YAZA,OAAKC,eAAEC,KAAAA,OAAO,KAAK;AAAA,UAAA;YACvBF,mBAOE,SAPFG,WAOE;AAAA,cANC,SAASL,MAAA,UAAA;AAAA,cACV,MAAK;AAAA,cACJ,OAAOI,KAAAA,OAAO;AAAA,cACd,UAAU,QAAA;AAAA,YAAA,GACHJ,MAAA,eAAA,EAAgBC,KAAAA,MAAM,GAAA;AAAA,cAC7B,SAAK,OAAA,CAAA,MAAA,OAAA,CAAA,IAAA,CAAA,WAAE,MAAM,MAAM;AAAA,YAAA;YAEtBC,mBAEE,OAAA;AAAA,cADC,OAAKC,eAAEC,KAAAA,OAAO,MAAM;AAAA,YAAA;;UAIjB,QAAA,SAASE,KAAAA,OAAO,wBADxBT,mBAYO,QAAA;AAAA;YAVJ,OAAKM,eAAA,CAAEC,KAAAA,OAAO,OACT,aAAa,CAAA;AAAA,UAAA;YAEnBG,WAAwB,4BAAxB,MAAwB;AAAA,8CAAf,QAAA,KAAK,GAAA,CAAA;AAAA,YAAA;YAEN,QAAA,yBADRV,mBAKO,QALP,YAGC,KAED;;;SAIK,QAAA,4BADTW,YAMEC,aAAA;AAAA;UAJA,OAAM;AAAA,UACL,kBAAgBT,MAAA,aAAA;AAAA,UAChB,oBAAkBA,MAAA,eAAA;AAAA,UAClB,MAAM,QAAA;AAAA,QAAA;;;;;"}
1
+ {"version":3,"file":"RuiSwitch.vue2.js","sources":["../../../../src/components/forms/switch/RuiSwitch.vue"],"sourcesContent":["<script lang=\"ts\" setup>\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?: boolean;\n disabled?: boolean;\n color?: ContextColorsType;\n size?: 'sm';\n label?: string;\n hint?: string;\n errorMessages?: string | string[];\n successMessages?: string | string[];\n hideDetails?: boolean;\n required?: boolean;\n}\n\ndefineOptions({\n name: 'RuiSwitch',\n inheritAttrs: false,\n});\n\nconst props = withDefaults(defineProps<Props>(), {\n modelValue: false,\n disabled: false,\n color: undefined,\n size: undefined,\n label: '',\n hint: '',\n errorMessages: () => [],\n successMessages: () => [],\n hideDetails: false,\n required: false,\n});\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', modelValue: boolean): void;\n}>();\n\nconst { size, modelValue, errorMessages, successMessages } = toRefs(props);\n\nfunction input(event: Event) {\n const checked = (event.target as HTMLInputElement).checked;\n emit('update:modelValue', checked);\n}\n\nconst { hasError, hasSuccess } = useFormTextDetail(\n errorMessages,\n successMessages,\n);\n</script>\n\n<template>\n <div v-bind=\"getRootAttrs($attrs)\">\n <label\n :class=\"[\n $style.wrapper,\n $style[size ?? ''],\n $style[color ?? ''],\n {\n [$style.checked]: modelValue,\n [$style.disabled]: disabled,\n [$style['with-error']]: hasError,\n [$style['with-success']]: hasSuccess && !hasError,\n },\n ]\"\n :data-error=\"hasError ? '' : undefined\"\n >\n <div :class=\"$style.inner\">\n <input\n :checked=\"modelValue\"\n type=\"checkbox\"\n :class=\"$style.input\"\n :disabled=\"disabled\"\n :aria-invalid=\"hasError\"\n v-bind=\"getNonRootAttrs($attrs)\"\n @input=\"input($event)\"\n />\n <div\n :class=\"$style.toggle\"\n />\n </div>\n <span\n v-if=\"label || $slots.default\"\n :class=\"$style.label\"\n class=\"text-body-1\"\n >\n <slot>{{ label }}</slot>\n <span\n v-if=\"required\"\n class=\"text-rui-error\"\n >\n ﹡\n </span>\n </span>\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.wrapper {\n @apply relative flex gap-2 items-start cursor-pointer;\n\n &.disabled {\n @apply cursor-not-allowed;\n\n .input {\n @apply bg-rui-grey-300 cursor-not-allowed;\n }\n\n .label {\n @apply text-rui-text-disabled;\n }\n\n .toggle {\n @apply bg-rui-grey-500;\n }\n }\n\n &:hover {\n &:not(.disabled) {\n .toggle {\n @apply shadow-1;\n }\n }\n }\n\n &.checked {\n &:not(.disabled) {\n .input {\n @apply bg-black;\n }\n }\n\n .toggle {\n @apply left-[21px];\n }\n }\n\n &.sm {\n .inner {\n @apply w-10 h-5 mt-0.5;\n }\n .toggle {\n @apply w-4 h-4;\n\n &:before {\n @apply w-6 h-6;\n }\n }\n\n &.checked {\n .toggle {\n @apply left-[22px];\n }\n }\n }\n\n &.checked {\n &:not(.disabled) {\n @each $color in c.$context-colors {\n &.#{$color} {\n .input {\n @apply bg-rui-#{$color};\n }\n }\n }\n }\n }\n\n &.with-error {\n .input {\n @apply bg-rui-error #{!important};\n }\n\n .label {\n @apply text-rui-error;\n }\n }\n\n &.with-success {\n .input {\n @apply bg-rui-success #{!important};\n }\n\n .label {\n @apply text-rui-success;\n }\n }\n\n .inner {\n @apply relative w-[43px] h-[24px] shrink-0;\n }\n\n .input {\n @apply appearance-none relative w-full h-full rounded-full bg-rui-grey-400 transition-all duration-75 ease-in-out cursor-pointer;\n\n &:active:not(:disabled) {\n + .toggle {\n &:before {\n @apply opacity-20;\n }\n }\n }\n }\n\n .toggle {\n @apply absolute w-5 h-5 transition-all duration-75 ease-in-out transform -translate-y-1/2 top-1/2 rounded-full pointer-events-none;\n @apply bg-white left-[2px];\n\n &:before {\n content: '';\n @apply absolute w-10 h-10 bg-black rounded-full top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2 transition-all ease-in-out opacity-0;\n }\n }\n}\n\n:global(.dark) {\n .wrapper {\n &.disabled {\n .input {\n @apply bg-rui-grey-800;\n }\n\n .toggle {\n @apply bg-rui-grey-600;\n }\n }\n\n &.checked {\n &:not(.disabled) {\n .input {\n @apply bg-white;\n }\n .toggle {\n @apply bg-black;\n }\n }\n }\n\n &.checked {\n &:not(.disabled) {\n @each $color in c.$context-colors {\n &.#{$color} {\n .input {\n @apply bg-rui-#{$color}/[0.5];\n }\n .toggle {\n @apply bg-rui-#{$color};\n }\n }\n }\n }\n }\n\n &.with-error {\n .input {\n @apply bg-rui-error/[0.5] #{!important};\n }\n .toggle {\n @apply bg-rui-error #{!important};\n }\n }\n\n &.with-success {\n .input {\n @apply bg-rui-success/[0.5] #{!important};\n }\n .toggle {\n @apply bg-rui-success #{!important};\n }\n }\n }\n\n .input {\n @apply bg-rui-grey-700;\n }\n\n .toggle {\n &:before {\n @apply bg-white;\n }\n }\n}\n</style>\n"],"names":["_createElementBlock","_normalizeProps","_guardReactiveProps","_unref","$attrs","_createElementVNode","_normalizeClass","$style","_mergeProps","$slots","_renderSlot","_createBlock","RuiFormTextDetail"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuBA,UAAM,QAAQ;AAad,UAAM,OAAO;AAIb,UAAM,EAAE,MAAM,YAAY,eAAe,gBAAA,IAAoB,OAAO,KAAK;AAEzE,aAAS,MAAM,OAAc;AAC3B,YAAM,UAAW,MAAM,OAA4B;AACnD,WAAK,qBAAqB,OAAO;AAAA,IACnC;AAEA,UAAM,EAAE,UAAU,WAAA,IAAe;AAAA,MAC/B;AAAA,MACA;AAAA,IAAA;;0BAKAA,mBAkDM,OAAAC,eAAAC,mBAlDOC,MAAA,YAAA,EAAaC,KAAAA,MAAM,CAAA,CAAA,GAAA;AAAA,QAC9BC,mBAyCQ,SAAA;AAAA,UAxCL,OAAKC,eAAA;AAAA,YAAYC,KAAAA,OAAO;AAAA,YAAiBA,KAAAA,OAAOJ,MAAA,IAAA,KAAI,EAAA;AAAA,YAAiBI,KAAAA,OAAO,QAAA,SAAK,EAAA;AAAA;eAA8BA,KAAAA,OAAO,OAAO,GAAGJ,MAAA,UAAA;AAAA,eAAuBI,KAAAA,OAAO,QAAQ,GAAG,QAAA;AAAA,cAAqBA,CAAAA,KAAAA,uBAAuBJ,MAAA,QAAA;AAAA,eAAqBI,KAAAA,OAAM,cAAA,CAAA,GAAmBJ,MAAA,UAAA,KAAU,CAAKA,MAAA,QAAA;AAAA,YAAA;AAAA;UAWlR,cAAYA,MAAA,QAAA,IAAQ,KAAQ;AAAA,QAAA;UAE7BE,mBAaM,OAAA;AAAA,YAbA,OAAKC,eAAEC,KAAAA,OAAO,KAAK;AAAA,UAAA;YACvBF,mBAQE,SARFG,WAQE;AAAA,cAPC,SAASL,MAAA,UAAA;AAAA,cACV,MAAK;AAAA,cACJ,OAAOI,KAAAA,OAAO;AAAA,cACd,UAAU,QAAA;AAAA,cACV,gBAAcJ,MAAA,QAAA;AAAA,YAAA,GACPA,MAAA,eAAA,EAAgBC,KAAAA,MAAM,GAAA;AAAA,cAC7B,SAAK,OAAA,CAAA,MAAA,OAAA,CAAA,IAAA,CAAA,WAAE,MAAM,MAAM;AAAA,YAAA;YAEtBC,mBAEE,OAAA;AAAA,cADC,OAAKC,eAAEC,KAAAA,OAAO,MAAM;AAAA,YAAA;;UAIjB,QAAA,SAASE,KAAAA,OAAO,wBADxBT,mBAYO,QAAA;AAAA;YAVJ,OAAKM,eAAA,CAAEC,KAAAA,OAAO,OACT,aAAa,CAAA;AAAA,UAAA;YAEnBG,WAAwB,4BAAxB,MAAwB;AAAA,8CAAf,QAAA,KAAK,GAAA,CAAA;AAAA,YAAA;YAEN,QAAA,yBADRV,mBAKO,QALP,YAGC,KAED;;;SAIK,QAAA,4BADTW,YAMEC,aAAA;AAAA;UAJA,OAAM;AAAA,UACL,kBAAgBT,MAAA,aAAA;AAAA,UAChB,oBAAkBA,MAAA,eAAA;AAAA,UAClB,MAAM,QAAA;AAAA,QAAA;;;;;"}
@@ -28,11 +28,11 @@ type __VLS_ModelProps = {
28
28
  modelValue: string;
29
29
  };
30
30
  type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
31
- declare var __VLS_1: {}, __VLS_18: {};
31
+ declare var __VLS_1: {}, __VLS_21: {};
32
32
  type __VLS_Slots = {} & {
33
33
  prepend?: (props: typeof __VLS_1) => any;
34
34
  } & {
35
- append?: (props: typeof __VLS_18) => any;
35
+ append?: (props: typeof __VLS_21) => any;
36
36
  };
37
37
  declare const __VLS_base: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
38
38
  "update:modelValue": (value: string) => any;
@@ -48,12 +48,12 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_PublicProps, {}, {
48
48
  dense: boolean;
49
49
  readonly: boolean;
50
50
  variant: "default" | "filled" | "outlined";
51
- placeholder: string;
52
51
  errorMessages: string | string[];
53
52
  successMessages: string | string[];
54
53
  hint: string;
55
54
  required: boolean;
56
55
  hideDetails: boolean;
56
+ placeholder: string;
57
57
  textColor: ContextColorsType;
58
58
  prependIcon: RuiIcons;
59
59
  appendIcon: RuiIcons;
@@ -8,9 +8,10 @@ import { assert } from "../../../utils/assert.js";
8
8
  import { get, set } from "@vueuse/shared";
9
9
  import { useResizeObserver, useFocus, refDebounced } from "@vueuse/core";
10
10
  import { useFormTextDetail } from "../../../utils/form-text-detail.js";
11
- const _hoisted_1 = ["value"];
12
- const _hoisted_2 = ["placeholder", "disabled", "readonly"];
13
- const _hoisted_3 = {
11
+ const _hoisted_1 = ["data-error"];
12
+ const _hoisted_2 = ["value"];
13
+ const _hoisted_3 = ["placeholder", "disabled", "readonly", "aria-invalid"];
14
+ const _hoisted_4 = {
14
15
  key: 0,
15
16
  class: "text-rui-error"
16
17
  };
@@ -49,9 +50,9 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
49
50
  emits: /* @__PURE__ */ mergeModels(["click:clear"], ["update:modelValue"]),
50
51
  setup(__props, { emit: __emit }) {
51
52
  useCssVars((_ctx) => ({
52
- "v4d3744d2": unref(appendWidth),
53
- "v4f69756d": unref(prependWidth),
54
- "c33553d2": unref(labelWithQuote)
53
+ "v188749d2": unref(appendWidth),
54
+ "v16b7dedc": unref(prependWidth),
55
+ "v41348808": unref(labelWithQuote)
55
56
  }));
56
57
  const modelValue = useModel(__props, "modelValue");
57
58
  const props = __props;
@@ -159,7 +160,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
159
160
  [unref(css)["with-success"] ?? ""]: unref(hasSuccess) && !unref(hasError),
160
161
  [unref(css)[`text_${__props.textColor}`] ?? ""]: __props.textColor && !unref(hasMessages)
161
162
  }
162
- ])
163
+ ]),
164
+ "data-error": unref(hasError) ? "" : void 0
163
165
  }, [
164
166
  _ctx.$slots.prepend || __props.prependIcon ? (openBlock(), createElementBlock("div", {
165
167
  key: 0,
@@ -187,7 +189,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
187
189
  "aria-hidden": "true",
188
190
  disabled: "",
189
191
  readonly: ""
190
- }, null, 14, _hoisted_1)) : createCommentVNode("", true),
192
+ }, null, 14, _hoisted_2)) : createCommentVNode("", true),
191
193
  withDirectives(createElementVNode("textarea", mergeProps({
192
194
  ref_key: "textarea",
193
195
  ref: textarea,
@@ -196,15 +198,16 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
196
198
  class: [unref(css).textarea, unref(noResize) ? "resize-none" : "resize-y"],
197
199
  style: unref(fieldStyles),
198
200
  disabled: unref(disabled),
199
- readonly: unref(readonly)
200
- }, ("getNonRootAttrs" in _ctx ? _ctx.getNonRootAttrs : unref(getNonRootAttrs))(_ctx.$attrs)), null, 16, _hoisted_2), [
201
+ readonly: unref(readonly),
202
+ "aria-invalid": unref(hasError)
203
+ }, ("getNonRootAttrs" in _ctx ? _ctx.getNonRootAttrs : unref(getNonRootAttrs))(_ctx.$attrs)), null, 16, _hoisted_3), [
201
204
  [vModelText, modelValue.value]
202
205
  ]),
203
206
  createElementVNode("label", {
204
207
  class: normalizeClass(unref(css).label)
205
208
  }, [
206
209
  createTextVNode(toDisplayString(unref(label)) + " ", 1),
207
- unref(required) ? (openBlock(), createElementBlock("span", _hoisted_3, " ﹡ ")) : createCommentVNode("", true)
210
+ unref(required) ? (openBlock(), createElementBlock("span", _hoisted_4, " ﹡ ")) : createCommentVNode("", true)
208
211
  ], 2),
209
212
  __props.variant === "outlined" ? (openBlock(), createElementBlock("fieldset", {
210
213
  key: 1,
@@ -244,7 +247,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
244
247
  createVNode(RuiIcon, { name: __props.appendIcon }, null, 8, ["name"])
245
248
  ], 2)) : createCommentVNode("", true)
246
249
  ], 2)) : createCommentVNode("", true)
247
- ], 2),
250
+ ], 10, _hoisted_1),
248
251
  !__props.hideDetails ? (openBlock(), createBlock(_sfc_main$1, {
249
252
  key: 0,
250
253
  class: "pt-1 px-3",
@@ -1 +1 @@
1
- {"version":3,"file":"RuiTextArea.vue2.js","sources":["../../../../src/components/forms/text-area/RuiTextArea.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type { ContextColorsType } from '@/consts/colors';\nimport type { RuiIcons } from '@/icons';\nimport { logicAnd, logicNot } from '@vueuse/math';\nimport RuiButton from '@/components/buttons/button/RuiButton.vue';\nimport RuiFormTextDetail from '@/components/helpers/RuiFormTextDetail.vue';\nimport RuiIcon from '@/components/icons/RuiIcon.vue';\nimport { assert } from '@/utils/assert';\n\nexport interface Props {\n label?: string;\n placeholder?: string;\n disabled?: boolean;\n variant?: 'default' | 'filled' | 'outlined';\n color?: ContextColorsType;\n textColor?: ContextColorsType;\n dense?: boolean;\n hint?: string;\n errorMessages?: string | string[];\n successMessages?: string | string[];\n hideDetails?: boolean;\n prependIcon?: RuiIcons;\n appendIcon?: RuiIcons;\n readonly?: boolean;\n clearable?: boolean;\n noResize?: boolean;\n minRows?: number | string;\n maxRows?: number | string;\n rowHeight?: number | string;\n autoGrow?: boolean;\n required?: boolean;\n}\n\ndefineOptions({\n name: 'RuiTextArea',\n inheritAttrs: false,\n});\n\nconst modelValue = defineModel<string>({ required: true });\n\nconst props = withDefaults(defineProps<Props>(), {\n label: '',\n placeholder: '',\n disabled: false,\n variant: 'default',\n color: undefined,\n textColor: undefined,\n dense: false,\n hint: '',\n errorMessages: () => [],\n successMessages: () => [],\n hideDetails: false,\n prependIcon: undefined,\n appendIcon: undefined,\n readonly: false,\n clearable: false,\n noResize: false,\n minRows: 2,\n rowHeight: 1.5, // in rems\n maxRows: undefined,\n autoGrow: false,\n required: false,\n});\n\nconst emit = defineEmits<{\n (e: 'click:clear'): void;\n}>();\n\nconst {\n label,\n autoGrow,\n clearable,\n disabled,\n readonly,\n minRows,\n maxRows,\n noResize,\n rowHeight,\n errorMessages,\n successMessages,\n required,\n} = toRefs(props);\n\nconst prepend = ref<HTMLDivElement>();\nconst append = ref<HTMLDivElement>();\nconst textarea = ref<HTMLTextAreaElement>();\nconst textareaSizer = ref<HTMLTextAreaElement>();\n\nconst css = useCssModule();\n\nconst labelWithQuote = computed<string>(() => {\n const labelVal = get(label);\n if (!labelVal)\n return '\"\\\\200B\"';\n\n const asterisk = get(required) ? '﹡' : '';\n return `' ${labelVal}${asterisk} '`;\n});\n\nconst fieldStyles = computed(() => {\n const height = Number(get(rowHeight));\n const min = Number(get(minRows));\n const max = Number(get(maxRows));\n const value: { minHeight: string; maxHeight?: string } = {\n minHeight: `${min * height + 0.75}rem`,\n };\n if (max)\n value.maxHeight = `${max * height + 0.75}rem`;\n\n return value;\n});\n\nconst prependWidth = ref('0px');\nconst appendWidth = ref('0px');\n\nuseResizeObserver(prepend, (entries) => {\n const [entry] = entries;\n assert(entry);\n const { width, left } = entry.contentRect;\n set(prependWidth, `${width + left + 24}px`);\n});\n\nuseResizeObserver(append, (entries) => {\n const [entry] = entries;\n assert(entry);\n const { width, right } = entry.contentRect;\n set(appendWidth, `${width + right + 24}px`);\n});\n\nconst colorClass = computed(() => (props.color ? css[props.color] : undefined));\n\nconst showClearIcon = logicAnd(\n clearable,\n modelValue,\n logicNot(disabled),\n logicNot(readonly),\n);\n\nconst { hasError, hasSuccess, hasMessages } = useFormTextDetail(\n errorMessages,\n successMessages,\n);\n\nfunction clearIconClicked() {\n set(modelValue, '');\n emit('click:clear');\n}\n\nfunction computeFieldHeight(newVal?: string, oldVal?: string) {\n if (!get(autoGrow))\n return;\n\n const field = get(textarea);\n const fieldValue = newVal ?? get(modelValue);\n const fieldSizer = get(textareaSizer);\n if (!(field && fieldSizer))\n return;\n\n nextTick(() => {\n field.style.minHeight = get(fieldStyles).minHeight;\n const sizerHeight = fieldSizer.scrollHeight;\n const fieldHeight = field.scrollHeight;\n let height = `${Math.max(sizerHeight, fieldHeight) / 16}rem`;\n if (oldVal && oldVal.length > fieldValue.length)\n height = `${Math.min(sizerHeight, fieldHeight) / 16}rem`;\n\n field.style.height = height;\n });\n}\n\nconst { focused } = useFocus(textarea);\nconst focusedDebounced = refDebounced(focused, 500);\n\nwatch(modelValue, computeFieldHeight);\nonMounted(computeFieldHeight);\n</script>\n\n<template>\n <div v-bind=\"getRootAttrs($attrs)\">\n <div\n :class=\"[\n css.wrapper,\n colorClass,\n css[variant ?? ''],\n {\n [css.dense]: dense,\n [css.disabled]: disabled,\n [css['no-label']]: !label,\n [css['with-error'] ?? '']: hasError,\n [css['with-success'] ?? '']: hasSuccess && !hasError,\n [css[`text_${textColor}`] ?? '']: textColor && !hasMessages,\n },\n ]\"\n >\n <div\n v-if=\"$slots.prepend || prependIcon\"\n ref=\"prepend\"\n class=\"flex items-center gap-1 shrink-0\"\n :class=\"css.prepend\"\n >\n <slot\n v-if=\"$slots.prepend\"\n name=\"prepend\"\n />\n <div\n v-else-if=\"prependIcon\"\n :class=\"[css.icon]\"\n >\n <RuiIcon :name=\"prependIcon\" />\n </div>\n </div>\n <div :class=\"css.inner_wrapper\">\n <textarea\n v-if=\"autoGrow\"\n ref=\"textareaSizer\"\n :value=\"modelValue\"\n :class=\"[css.textarea_sizer]\"\n :style=\"fieldStyles\"\n aria-hidden=\"true\"\n disabled\n readonly\n />\n <textarea\n ref=\"textarea\"\n v-model=\"modelValue\"\n :placeholder=\"placeholder || ' '\"\n :class=\"[css.textarea, noResize ? 'resize-none' : 'resize-y']\"\n :style=\"fieldStyles\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n v-bind=\"getNonRootAttrs($attrs)\"\n />\n <label :class=\"css.label\">\n {{ label }}\n <span\n v-if=\"required\"\n class=\"text-rui-error\"\n >\n ﹡\n </span>\n </label>\n <fieldset\n v-if=\"variant === 'outlined'\"\n :class=\"css.fieldset\"\n >\n <legend />\n </fieldset>\n </div>\n <div\n v-if=\"$slots.append || appendIcon || showClearIcon\"\n ref=\"append\"\n class=\"flex items-center gap-1 shrink-0\"\n :class=\"css.append\"\n >\n <RuiButton\n v-if=\"showClearIcon\"\n :class=\"{ hidden: !focusedDebounced }\"\n variant=\"text\"\n type=\"button\"\n icon\n class=\"!p-2 clear-btn\"\n color=\"error\"\n tabindex=\"-1\"\n @click.stop=\"clearIconClicked()\"\n >\n <RuiIcon\n name=\"lu-x\"\n size=\"20\"\n />\n </RuiButton>\n <slot\n v-if=\"$slots.append\"\n name=\"append\"\n />\n <div\n v-else-if=\"appendIcon\"\n :class=\"[css.icon]\"\n >\n <RuiIcon :name=\"appendIcon\" />\n </div>\n </div>\n </div>\n <RuiFormTextDetail\n v-if=\"!hideDetails\"\n class=\"pt-1 px-3\"\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 .label {\n @apply border-white/[0.42];\n\n &:after {\n @apply border-white;\n }\n }\n\n .icon {\n @apply text-white/[0.56];\n }\n\n &:hover {\n .label {\n @apply border-white;\n }\n }\n\n &.filled {\n .textarea {\n &:focus {\n + .label {\n @apply bg-white/[0.13];\n }\n }\n }\n\n .label {\n @apply bg-white/[0.09];\n }\n }\n\n &.outlined {\n .fieldset {\n @apply border-white/[0.23];\n }\n\n &:not(.disabled) {\n .textarea {\n &:hover,\n &:focus {\n ~ .fieldset {\n @apply border-white;\n }\n }\n }\n }\n }\n }\n}\n\n.wrapper {\n @apply relative w-full min-w-[12.5rem] flex items-start;\n\n .inner_wrapper {\n @apply flex flex-1 pt-4;\n }\n\n .append {\n @apply absolute right-0;\n }\n\n .textarea {\n @apply leading-6 text-rui-text w-full bg-transparent pb-2 pt-0;\n @apply outline-0 outline-none placeholder:opacity-0 focus:placeholder:opacity-100;\n\n --x-padding: 0.75rem;\n padding-right: calc(var(--x-padding) + v-bind(appendWidth)) !important;\n\n &_sizer {\n @apply invisible absolute top-0 left-0 w-full h-0 -z-10 pointer-events-none py-2 px-3 #{!important};\n\n padding-right: calc(var(--x-padding) + v-bind(appendWidth)) !important;\n }\n\n &:focus {\n @apply outline-0;\n + .label {\n @apply after:scale-x-100;\n }\n }\n\n &:not(:placeholder-shown),\n &:autofill,\n &:-webkit-autofill,\n &[data-has-value='true'],\n &:focus {\n + .label {\n @apply text-xs leading-tight;\n padding-left: var(--x-padding);\n padding-right: var(--x-padding);\n }\n }\n\n &:disabled {\n @apply border-dotted;\n\n &,\n + .label {\n @apply text-rui-text-disabled;\n }\n\n ~ .fieldset {\n @apply border-dotted;\n }\n }\n }\n\n .label {\n @apply left-0 text-base leading-[3.2] text-rui-text-secondary pointer-events-none absolute top-0 flex h-full w-full select-none transition-all border-b border-black/[0.42];\n\n --x-padding: 0rem;\n\n padding-left: calc(var(--x-padding) + v-bind(prependWidth));\n padding-right: calc(var(--x-padding) + v-bind(appendWidth));\n\n &:after {\n content: '';\n @apply absolute bottom-0 left-0 block w-full scale-x-0 border-b-2 mb-[-1px] transition-transform duration-300 border-black;\n }\n }\n\n &:hover {\n .label {\n @apply border-black;\n }\n }\n\n .icon {\n @apply text-black/[0.54];\n }\n\n .prepend,\n .append {\n @apply mt-4 mx-3;\n\n .textarea {\n --x-padding: 0rem;\n }\n }\n\n @each $color in c.$context-colors {\n &.#{$color} {\n .textarea {\n &:focus {\n + .label {\n @apply text-rui-#{$color};\n }\n }\n }\n\n .label {\n @apply after:border-rui-#{$color};\n }\n\n &.outlined {\n &:not(.disabled) {\n .textarea {\n &:focus {\n ~ .fieldset {\n @apply border-rui-#{$color};\n }\n }\n }\n }\n }\n }\n\n &.text_#{$color},\n &.with-#{$color} {\n .prepend,\n .append,\n .textarea {\n @apply text-rui-#{$color};\n }\n\n &:not(.disabled) .prepend svg,\n &:not(.disabled) .append svg {\n @apply text-rui-#{$color};\n }\n }\n }\n\n @each $color in 'error', 'success' {\n &.with-#{$color} {\n .textarea {\n @apply border-rui-#{$color} #{!important};\n }\n\n .label {\n @apply text-rui-#{$color} after:border-rui-#{$color} #{!important};\n }\n\n .fieldset {\n @apply border-rui-#{$color} #{!important};\n }\n }\n }\n\n &.dense {\n .inner_wrapper {\n @apply pt-2;\n\n .textarea {\n @apply py-1;\n &_sizer {\n @apply py-1;\n }\n }\n }\n }\n\n &.filled,\n &.outlined {\n .textarea {\n @apply px-3;\n }\n\n .prepend {\n @apply mr-0;\n\n + .inner_wrapper .textarea {\n &:not(:placeholder-shown),\n &:autofill,\n &:-webkit-autofill,\n &[data-has-value='true'],\n &:focus {\n + .label {\n --x-padding: 0.75rem;\n }\n }\n }\n }\n\n .append {\n @apply ml-0;\n }\n\n .prepend,\n .append {\n + .inner_wrapper > .label {\n --x-padding: 0rem;\n }\n }\n\n .label {\n --x-padding: 0.75rem;\n }\n }\n\n &.filled {\n .label {\n @apply rounded-t bg-black/[0.06];\n }\n\n &.no-label {\n .textarea {\n @apply py-4;\n &_sizer {\n @apply py-4;\n }\n }\n\n &.dense {\n .textarea {\n @apply py-3;\n }\n }\n }\n }\n\n &.outlined {\n .textarea {\n &:not(:placeholder-shown),\n &:autofill,\n &:-webkit-autofill,\n &[data-has-value='true'],\n &:focus {\n @apply border-t-transparent;\n\n + .label {\n @apply leading-[0] pl-4;\n }\n\n ~ .fieldset {\n legend {\n &:after {\n content: v-bind(labelWithQuote);\n }\n }\n }\n }\n }\n\n .fieldset {\n @apply absolute w-full h-[calc(100%+0.5rem)] top-0 left-0 pointer-events-none rounded border border-black/[0.23] px-2 transition-all -mt-2;\n\n legend {\n @apply opacity-0 text-xs;\n\n &:after {\n @apply whitespace-break-spaces;\n content: '\\200B';\n }\n }\n }\n\n &:not(.disabled) {\n .textarea {\n &:hover,\n &:focus {\n ~ .fieldset {\n @apply border border-black;\n }\n }\n\n &:focus {\n ~ .fieldset {\n @apply border-2;\n }\n }\n }\n }\n\n .label {\n @apply border-0 border-transparent;\n\n &:after {\n content: none !important;\n }\n }\n\n &.dense {\n .label {\n @apply leading-[2.5];\n }\n }\n }\n}\n</style>\n"],"names":["_useModel","_createElementBlock","_normalizeProps","_guardReactiveProps","getRootAttrs","$attrs","_createElementVNode","_normalizeClass","_unref","$slots","_renderSlot","_createVNode","_withDirectives","_mergeProps","getNonRootAttrs","_createTextVNode","_toDisplayString","_createBlock","RuiFormTextDetail"],"mappings":"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"}
1
+ {"version":3,"file":"RuiTextArea.vue2.js","sources":["../../../../src/components/forms/text-area/RuiTextArea.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type { ContextColorsType } from '@/consts/colors';\nimport type { RuiIcons } from '@/icons';\nimport { logicAnd, logicNot } from '@vueuse/math';\nimport RuiButton from '@/components/buttons/button/RuiButton.vue';\nimport RuiFormTextDetail from '@/components/helpers/RuiFormTextDetail.vue';\nimport RuiIcon from '@/components/icons/RuiIcon.vue';\nimport { assert } from '@/utils/assert';\n\nexport interface Props {\n label?: string;\n placeholder?: string;\n disabled?: boolean;\n variant?: 'default' | 'filled' | 'outlined';\n color?: ContextColorsType;\n textColor?: ContextColorsType;\n dense?: boolean;\n hint?: string;\n errorMessages?: string | string[];\n successMessages?: string | string[];\n hideDetails?: boolean;\n prependIcon?: RuiIcons;\n appendIcon?: RuiIcons;\n readonly?: boolean;\n clearable?: boolean;\n noResize?: boolean;\n minRows?: number | string;\n maxRows?: number | string;\n rowHeight?: number | string;\n autoGrow?: boolean;\n required?: boolean;\n}\n\ndefineOptions({\n name: 'RuiTextArea',\n inheritAttrs: false,\n});\n\nconst modelValue = defineModel<string>({ required: true });\n\nconst props = withDefaults(defineProps<Props>(), {\n label: '',\n placeholder: '',\n disabled: false,\n variant: 'default',\n color: undefined,\n textColor: undefined,\n dense: false,\n hint: '',\n errorMessages: () => [],\n successMessages: () => [],\n hideDetails: false,\n prependIcon: undefined,\n appendIcon: undefined,\n readonly: false,\n clearable: false,\n noResize: false,\n minRows: 2,\n rowHeight: 1.5, // in rems\n maxRows: undefined,\n autoGrow: false,\n required: false,\n});\n\nconst emit = defineEmits<{\n (e: 'click:clear'): void;\n}>();\n\nconst {\n label,\n autoGrow,\n clearable,\n disabled,\n readonly,\n minRows,\n maxRows,\n noResize,\n rowHeight,\n errorMessages,\n successMessages,\n required,\n} = toRefs(props);\n\nconst prepend = ref<HTMLDivElement>();\nconst append = ref<HTMLDivElement>();\nconst textarea = ref<HTMLTextAreaElement>();\nconst textareaSizer = ref<HTMLTextAreaElement>();\n\nconst css = useCssModule();\n\nconst labelWithQuote = computed<string>(() => {\n const labelVal = get(label);\n if (!labelVal)\n return '\"\\\\200B\"';\n\n const asterisk = get(required) ? '﹡' : '';\n return `' ${labelVal}${asterisk} '`;\n});\n\nconst fieldStyles = computed(() => {\n const height = Number(get(rowHeight));\n const min = Number(get(minRows));\n const max = Number(get(maxRows));\n const value: { minHeight: string; maxHeight?: string } = {\n minHeight: `${min * height + 0.75}rem`,\n };\n if (max)\n value.maxHeight = `${max * height + 0.75}rem`;\n\n return value;\n});\n\nconst prependWidth = ref('0px');\nconst appendWidth = ref('0px');\n\nuseResizeObserver(prepend, (entries) => {\n const [entry] = entries;\n assert(entry);\n const { width, left } = entry.contentRect;\n set(prependWidth, `${width + left + 24}px`);\n});\n\nuseResizeObserver(append, (entries) => {\n const [entry] = entries;\n assert(entry);\n const { width, right } = entry.contentRect;\n set(appendWidth, `${width + right + 24}px`);\n});\n\nconst colorClass = computed(() => (props.color ? css[props.color] : undefined));\n\nconst showClearIcon = logicAnd(\n clearable,\n modelValue,\n logicNot(disabled),\n logicNot(readonly),\n);\n\nconst { hasError, hasSuccess, hasMessages } = useFormTextDetail(\n errorMessages,\n successMessages,\n);\n\nfunction clearIconClicked() {\n set(modelValue, '');\n emit('click:clear');\n}\n\nfunction computeFieldHeight(newVal?: string, oldVal?: string) {\n if (!get(autoGrow))\n return;\n\n const field = get(textarea);\n const fieldValue = newVal ?? get(modelValue);\n const fieldSizer = get(textareaSizer);\n if (!(field && fieldSizer))\n return;\n\n nextTick(() => {\n field.style.minHeight = get(fieldStyles).minHeight;\n const sizerHeight = fieldSizer.scrollHeight;\n const fieldHeight = field.scrollHeight;\n let height = `${Math.max(sizerHeight, fieldHeight) / 16}rem`;\n if (oldVal && oldVal.length > fieldValue.length)\n height = `${Math.min(sizerHeight, fieldHeight) / 16}rem`;\n\n field.style.height = height;\n });\n}\n\nconst { focused } = useFocus(textarea);\nconst focusedDebounced = refDebounced(focused, 500);\n\nwatch(modelValue, computeFieldHeight);\nonMounted(computeFieldHeight);\n</script>\n\n<template>\n <div v-bind=\"getRootAttrs($attrs)\">\n <div\n :class=\"[\n css.wrapper,\n colorClass,\n css[variant ?? ''],\n {\n [css.dense]: dense,\n [css.disabled]: disabled,\n [css['no-label']]: !label,\n [css['with-error'] ?? '']: hasError,\n [css['with-success'] ?? '']: hasSuccess && !hasError,\n [css[`text_${textColor}`] ?? '']: textColor && !hasMessages,\n },\n ]\"\n :data-error=\"hasError ? '' : undefined\"\n >\n <div\n v-if=\"$slots.prepend || prependIcon\"\n ref=\"prepend\"\n class=\"flex items-center gap-1 shrink-0\"\n :class=\"css.prepend\"\n >\n <slot\n v-if=\"$slots.prepend\"\n name=\"prepend\"\n />\n <div\n v-else-if=\"prependIcon\"\n :class=\"[css.icon]\"\n >\n <RuiIcon :name=\"prependIcon\" />\n </div>\n </div>\n <div :class=\"css.inner_wrapper\">\n <textarea\n v-if=\"autoGrow\"\n ref=\"textareaSizer\"\n :value=\"modelValue\"\n :class=\"[css.textarea_sizer]\"\n :style=\"fieldStyles\"\n aria-hidden=\"true\"\n disabled\n readonly\n />\n <textarea\n ref=\"textarea\"\n v-model=\"modelValue\"\n :placeholder=\"placeholder || ' '\"\n :class=\"[css.textarea, noResize ? 'resize-none' : 'resize-y']\"\n :style=\"fieldStyles\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n :aria-invalid=\"hasError\"\n v-bind=\"getNonRootAttrs($attrs)\"\n />\n <label :class=\"css.label\">\n {{ label }}\n <span\n v-if=\"required\"\n class=\"text-rui-error\"\n >\n ﹡\n </span>\n </label>\n <fieldset\n v-if=\"variant === 'outlined'\"\n :class=\"css.fieldset\"\n >\n <legend />\n </fieldset>\n </div>\n <div\n v-if=\"$slots.append || appendIcon || showClearIcon\"\n ref=\"append\"\n class=\"flex items-center gap-1 shrink-0\"\n :class=\"css.append\"\n >\n <RuiButton\n v-if=\"showClearIcon\"\n :class=\"{ hidden: !focusedDebounced }\"\n variant=\"text\"\n type=\"button\"\n icon\n class=\"!p-2 clear-btn\"\n color=\"error\"\n tabindex=\"-1\"\n @click.stop=\"clearIconClicked()\"\n >\n <RuiIcon\n name=\"lu-x\"\n size=\"20\"\n />\n </RuiButton>\n <slot\n v-if=\"$slots.append\"\n name=\"append\"\n />\n <div\n v-else-if=\"appendIcon\"\n :class=\"[css.icon]\"\n >\n <RuiIcon :name=\"appendIcon\" />\n </div>\n </div>\n </div>\n <RuiFormTextDetail\n v-if=\"!hideDetails\"\n class=\"pt-1 px-3\"\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 .label {\n @apply border-white/[0.42];\n\n &:after {\n @apply border-white;\n }\n }\n\n .icon {\n @apply text-white/[0.56];\n }\n\n &:hover {\n .label {\n @apply border-white;\n }\n }\n\n &.filled {\n .textarea {\n &:focus {\n + .label {\n @apply bg-white/[0.13];\n }\n }\n }\n\n .label {\n @apply bg-white/[0.09];\n }\n }\n\n &.outlined {\n .fieldset {\n @apply border-white/[0.23];\n }\n\n &:not(.disabled) {\n .textarea {\n &:hover,\n &:focus {\n ~ .fieldset {\n @apply border-white;\n }\n }\n }\n }\n }\n }\n}\n\n.wrapper {\n @apply relative w-full min-w-[12.5rem] flex items-start;\n\n .inner_wrapper {\n @apply flex flex-1 pt-4;\n }\n\n .append {\n @apply absolute right-0;\n }\n\n .textarea {\n @apply leading-6 text-rui-text w-full bg-transparent pb-2 pt-0;\n @apply outline-0 outline-none placeholder:opacity-0 focus:placeholder:opacity-100;\n\n --x-padding: 0.75rem;\n padding-right: calc(var(--x-padding) + v-bind(appendWidth)) !important;\n\n &_sizer {\n @apply invisible absolute top-0 left-0 w-full h-0 -z-10 pointer-events-none py-2 px-3 #{!important};\n\n padding-right: calc(var(--x-padding) + v-bind(appendWidth)) !important;\n }\n\n &:focus {\n @apply outline-0;\n + .label {\n @apply after:scale-x-100;\n }\n }\n\n &:not(:placeholder-shown),\n &:autofill,\n &:-webkit-autofill,\n &[data-has-value='true'],\n &:focus {\n + .label {\n @apply text-xs leading-tight;\n padding-left: var(--x-padding);\n padding-right: var(--x-padding);\n }\n }\n\n &:disabled {\n @apply border-dotted;\n\n &,\n + .label {\n @apply text-rui-text-disabled;\n }\n\n ~ .fieldset {\n @apply border-dotted;\n }\n }\n }\n\n .label {\n @apply left-0 text-base leading-[3.2] text-rui-text-secondary pointer-events-none absolute top-0 flex h-full w-full select-none transition-all border-b border-black/[0.42];\n\n --x-padding: 0rem;\n\n padding-left: calc(var(--x-padding) + v-bind(prependWidth));\n padding-right: calc(var(--x-padding) + v-bind(appendWidth));\n\n &:after {\n content: '';\n @apply absolute bottom-0 left-0 block w-full scale-x-0 border-b-2 mb-[-1px] transition-transform duration-300 border-black;\n }\n }\n\n &:hover {\n .label {\n @apply border-black;\n }\n }\n\n .icon {\n @apply text-black/[0.54];\n }\n\n .prepend,\n .append {\n @apply mt-4 mx-3;\n\n .textarea {\n --x-padding: 0rem;\n }\n }\n\n @each $color in c.$context-colors {\n &.#{$color} {\n .textarea {\n &:focus {\n + .label {\n @apply text-rui-#{$color};\n }\n }\n }\n\n .label {\n @apply after:border-rui-#{$color};\n }\n\n &.outlined {\n &:not(.disabled) {\n .textarea {\n &:focus {\n ~ .fieldset {\n @apply border-rui-#{$color};\n }\n }\n }\n }\n }\n }\n\n &.text_#{$color},\n &.with-#{$color} {\n .prepend,\n .append,\n .textarea {\n @apply text-rui-#{$color};\n }\n\n &:not(.disabled) .prepend svg,\n &:not(.disabled) .append svg {\n @apply text-rui-#{$color};\n }\n }\n }\n\n @each $color in 'error', 'success' {\n &.with-#{$color} {\n .textarea {\n @apply border-rui-#{$color} #{!important};\n }\n\n .label {\n @apply text-rui-#{$color} after:border-rui-#{$color} #{!important};\n }\n\n .fieldset {\n @apply border-rui-#{$color} #{!important};\n }\n }\n }\n\n &.dense {\n .inner_wrapper {\n @apply pt-2;\n\n .textarea {\n @apply py-1;\n &_sizer {\n @apply py-1;\n }\n }\n }\n }\n\n &.filled,\n &.outlined {\n .textarea {\n @apply px-3;\n }\n\n .prepend {\n @apply mr-0;\n\n + .inner_wrapper .textarea {\n &:not(:placeholder-shown),\n &:autofill,\n &:-webkit-autofill,\n &[data-has-value='true'],\n &:focus {\n + .label {\n --x-padding: 0.75rem;\n }\n }\n }\n }\n\n .append {\n @apply ml-0;\n }\n\n .prepend,\n .append {\n + .inner_wrapper > .label {\n --x-padding: 0rem;\n }\n }\n\n .label {\n --x-padding: 0.75rem;\n }\n }\n\n &.filled {\n .label {\n @apply rounded-t bg-black/[0.06];\n }\n\n &.no-label {\n .textarea {\n @apply py-4;\n &_sizer {\n @apply py-4;\n }\n }\n\n &.dense {\n .textarea {\n @apply py-3;\n }\n }\n }\n }\n\n &.outlined {\n .textarea {\n &:not(:placeholder-shown),\n &:autofill,\n &:-webkit-autofill,\n &[data-has-value='true'],\n &:focus {\n @apply border-t-transparent;\n\n + .label {\n @apply leading-[0] pl-4;\n }\n\n ~ .fieldset {\n legend {\n &:after {\n content: v-bind(labelWithQuote);\n }\n }\n }\n }\n }\n\n .fieldset {\n @apply absolute w-full h-[calc(100%+0.5rem)] top-0 left-0 pointer-events-none rounded border border-black/[0.23] px-2 transition-all -mt-2;\n\n legend {\n @apply opacity-0 text-xs;\n\n &:after {\n @apply whitespace-break-spaces;\n content: '\\200B';\n }\n }\n }\n\n &:not(.disabled) {\n .textarea {\n &:hover,\n &:focus {\n ~ .fieldset {\n @apply border border-black;\n }\n }\n\n &:focus {\n ~ .fieldset {\n @apply border-2;\n }\n }\n }\n }\n\n .label {\n @apply border-0 border-transparent;\n\n &:after {\n content: none !important;\n }\n }\n\n &.dense {\n .label {\n @apply leading-[2.5];\n }\n }\n }\n}\n</style>\n"],"names":["_useModel","_createElementBlock","_normalizeProps","_guardReactiveProps","getRootAttrs","$attrs","_createElementVNode","_normalizeClass","_unref","$slots","_renderSlot","_createVNode","_withDirectives","_mergeProps","getNonRootAttrs","_createTextVNode","_toDisplayString","_createBlock","RuiFormTextDetail"],"mappings":"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"}
@@ -23,11 +23,11 @@ type __VLS_ModelProps = {
23
23
  modelValue: string;
24
24
  };
25
25
  type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
26
- declare var __VLS_1: {}, __VLS_18: {};
26
+ declare var __VLS_1: {}, __VLS_21: {};
27
27
  type __VLS_Slots = {} & {
28
28
  prepend?: (props: typeof __VLS_1) => any;
29
29
  } & {
30
- append?: (props: typeof __VLS_18) => any;
30
+ append?: (props: typeof __VLS_21) => any;
31
31
  };
32
32
  declare const __VLS_base: import("vue").DefineComponent<__VLS_PublicProps, {
33
33
  setSelectionRange: (start: number, end: number) => void;
@@ -53,12 +53,12 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_PublicProps, {
53
53
  dense: boolean;
54
54
  readonly: boolean;
55
55
  variant: "default" | "filled" | "outlined";
56
- placeholder: string;
57
56
  errorMessages: string | string[];
58
57
  successMessages: string | string[];
59
58
  hint: string;
60
59
  required: boolean;
61
60
  hideDetails: boolean;
61
+ placeholder: string;
62
62
  textColor: ContextColorsType;
63
63
  prependIcon: RuiIcons;
64
64
  appendIcon: RuiIcons;
@@ -8,8 +8,9 @@ import { getRootAttrs, getNonRootAttrs } from "../../../utils/helpers.js";
8
8
  import { get, set } from "@vueuse/shared";
9
9
  import { useElementBounding, useResizeObserver, useFocus, refDebounced } from "@vueuse/core";
10
10
  import { useFormTextDetail } from "../../../utils/form-text-detail.js";
11
- const _hoisted_1 = ["value", "placeholder", "disabled", "dense", "variant", "readonly", "wrapper-width"];
12
- const _hoisted_2 = {
11
+ const _hoisted_1 = ["data-error"];
12
+ const _hoisted_2 = ["value", "placeholder", "disabled", "dense", "variant", "readonly", "wrapper-width", "aria-invalid"];
13
+ const _hoisted_3 = {
13
14
  key: 0,
14
15
  class: "text-rui-error"
15
16
  };
@@ -43,9 +44,9 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
43
44
  emits: /* @__PURE__ */ mergeModels(["focus-input", "blur", "remove", "clear"], ["update:modelValue"]),
44
45
  setup(__props, { expose: __expose, emit: __emit }) {
45
46
  useCssVars((_ctx) => ({
46
- "v2bf2f1ca": unref(prependWidth),
47
- "v11b143ae": unref(appendWidth),
48
- "v0604b445": unref(labelWithQuote)
47
+ "ee029486": unref(prependWidth),
48
+ "v5a045972": unref(appendWidth),
49
+ "v70a87b32": unref(labelWithQuote)
49
50
  }));
50
51
  const modelValue = useModel(__props, "modelValue");
51
52
  const props = __props;
@@ -127,7 +128,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
127
128
  [_ctx.$style["with-success"] ?? ""]: unref(hasSuccess) && !unref(hasError),
128
129
  [_ctx.$style[`text_${__props.textColor}`] ?? ""]: __props.textColor && !unref(hasMessages)
129
130
  }
130
- ])
131
+ ]),
132
+ "data-error": unref(hasError) ? "" : void 0
131
133
  }, [
132
134
  _ctx.$slots.prepend || __props.prependIcon ? (openBlock(), createElementBlock("div", {
133
135
  key: 0,
@@ -158,18 +160,19 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
158
160
  dense: __props.dense,
159
161
  variant: __props.variant,
160
162
  readonly: unref(readonly),
161
- "wrapper-width": unref(width)
163
+ "wrapper-width": unref(width),
164
+ "aria-invalid": unref(hasError)
162
165
  }, unref(getNonRootAttrs)(_ctx.$attrs), {
163
166
  onInput: _cache[0] || (_cache[0] = ($event) => input($event)),
164
167
  onBlur: _cache[1] || (_cache[1] = ($event) => emit("blur", $event)),
165
168
  onRemove: _cache[2] || (_cache[2] = ($event) => emit("remove", $event))
166
- }), null, 16, _hoisted_1),
169
+ }), null, 16, _hoisted_2),
167
170
  createElementVNode("label", {
168
171
  class: normalizeClass(_ctx.$style.label)
169
172
  }, [
170
173
  createElementVNode("span", null, [
171
174
  createTextVNode(toDisplayString(unref(label)) + " ", 1),
172
- unref(required) ? (openBlock(), createElementBlock("span", _hoisted_2, " ﹡ ")) : createCommentVNode("", true)
175
+ unref(required) ? (openBlock(), createElementBlock("span", _hoisted_3, " ﹡ ")) : createCommentVNode("", true)
173
176
  ])
174
177
  ], 2),
175
178
  __props.variant === "outlined" ? (openBlock(), createElementBlock("fieldset", {
@@ -212,7 +215,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
212
215
  createVNode(RuiIcon, { name: __props.appendIcon }, null, 8, ["name"])
213
216
  ], 2)) : createCommentVNode("", true)
214
217
  ], 2)) : createCommentVNode("", true)
215
- ], 2),
218
+ ], 10, _hoisted_1),
216
219
  !__props.hideDetails ? (openBlock(), createBlock(_sfc_main$1, {
217
220
  key: 0,
218
221
  class: "pt-1 px-3",
@@ -1 +1 @@
1
- {"version":3,"file":"RuiTextField.vue2.js","sources":["../../../../src/components/forms/text-field/RuiTextField.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type { ContextColorsType } from '@/consts/colors';\nimport type { RuiIcons } from '@/icons';\nimport { logicAnd, logicNot } from '@vueuse/math';\nimport RuiButton from '@/components/buttons/button/RuiButton.vue';\nimport RuiFormTextDetail from '@/components/helpers/RuiFormTextDetail.vue';\nimport RuiIcon from '@/components/icons/RuiIcon.vue';\nimport { assert } from '@/utils/assert';\nimport { getNonRootAttrs, getRootAttrs } from '@/utils/helpers';\n\nexport interface TextFieldProps {\n label?: string;\n placeholder?: string;\n disabled?: boolean;\n variant?: 'default' | 'filled' | 'outlined';\n color?: ContextColorsType;\n textColor?: ContextColorsType;\n dense?: boolean;\n hint?: string;\n errorMessages?: string | string[];\n successMessages?: string | string[];\n hideDetails?: boolean;\n prependIcon?: RuiIcons;\n appendIcon?: RuiIcons;\n readonly?: boolean;\n clearable?: boolean;\n required?: boolean;\n}\n\ndefineOptions({\n name: 'RuiTextField',\n inheritAttrs: false,\n});\n\nconst modelValue = defineModel<string>({ required: true });\n\nconst props = withDefaults(defineProps<TextFieldProps>(), {\n label: '',\n placeholder: '',\n disabled: false,\n variant: 'default',\n color: undefined,\n textColor: undefined,\n dense: false,\n hint: '',\n as: 'input',\n errorMessages: () => [],\n successMessages: () => [],\n hideDetails: false,\n prependIcon: undefined,\n appendIcon: undefined,\n readonly: false,\n clearable: false,\n required: false,\n});\n\nconst emit = defineEmits<{\n (e: 'focus-input', event: Event): void;\n (e: 'blur', event: Event): void;\n (e: 'remove', value: unknown): void;\n (e: 'clear'): void;\n}>();\n\nconst {\n label,\n clearable,\n disabled,\n readonly,\n errorMessages,\n successMessages,\n required,\n} = toRefs(props);\n\nfunction input(event: Event) {\n const value = (event.target as HTMLInputElement).value;\n set(modelValue, value);\n}\n\nconst labelWithQuote = computed<string>(() => {\n const labelVal = get(label);\n if (!labelVal)\n return '\"\\\\200B\"';\n\n const asterisk = get(required) ? '﹡' : '';\n return `' ${labelVal}${asterisk} '`;\n});\n\nconst prepend = ref<HTMLDivElement>();\nconst append = ref<HTMLDivElement>();\nconst innerWrapper = ref<HTMLDivElement>();\nconst inputRef = ref<HTMLInputElement>();\n\nconst prependWidth = ref('0px');\nconst appendWidth = ref('0px');\n\nconst { width } = useElementBounding(innerWrapper);\n\nuseResizeObserver(prepend, (entries) => {\n const [entry] = entries;\n assert(entry);\n const { width, left } = entry.contentRect;\n set(prependWidth, `${width + left}px`);\n});\n\nuseResizeObserver(append, (entries) => {\n const [entry] = entries;\n assert(entry);\n const { width, right } = entry.contentRect;\n set(appendWidth, `${width + right}px`);\n});\n\nconst { hasError, hasSuccess, hasMessages } = useFormTextDetail(\n errorMessages,\n successMessages,\n);\n\nconst { focused } = useFocus(inputRef);\nconst focusedDebounced = refDebounced(focused, 500);\n\nconst showClearIcon = logicAnd(\n clearable,\n modelValue,\n logicNot(disabled),\n logicNot(readonly),\n);\n\nfunction clearIconClicked() {\n set(modelValue, '');\n emit('clear');\n}\n\ndefineExpose({\n setSelectionRange: (start: number, end: number) => {\n get(inputRef)?.setSelectionRange(start, end);\n },\n focus: () => get(inputRef)?.focus(),\n element: inputRef,\n});\n</script>\n\n<template>\n <div v-bind=\"getRootAttrs($attrs)\">\n <div\n :class=\"[\n $style.wrapper,\n $style[color ?? ''],\n $style[variant ?? ''],\n {\n [$style.dense]: dense,\n [$style.disabled]: disabled,\n [$style['no-label']]: !label,\n [$style['with-error'] ?? '']: hasError,\n [$style['with-success'] ?? '']: hasSuccess && !hasError,\n [$style[`text_${textColor}`] ?? '']: textColor && !hasMessages,\n },\n ]\"\n >\n <div\n v-if=\"$slots.prepend || prependIcon\"\n ref=\"prepend\"\n class=\"flex items-center gap-1 shrink-0\"\n :class=\"$style.prepend\"\n >\n <slot\n v-if=\"$slots.prepend\"\n name=\"prepend\"\n />\n <div\n v-else-if=\"prependIcon\"\n :class=\"[$style.icon]\"\n >\n <RuiIcon :name=\"prependIcon\" />\n </div>\n </div>\n <div\n ref=\"innerWrapper\"\n class=\"flex flex-1 overflow-hidden\"\n @click=\"emit('focus-input', $event)\"\n >\n <input\n ref=\"inputRef\"\n :value=\"modelValue\"\n :placeholder=\"placeholder || ' '\"\n :class=\"$style.input\"\n :disabled=\"disabled\"\n :dense=\"dense\"\n :variant=\"variant\"\n :readonly=\"readonly\"\n :wrapper-width=\"width\"\n v-bind=\"getNonRootAttrs($attrs)\"\n @input=\"input($event)\"\n @blur=\"emit('blur', $event)\"\n @remove=\"emit('remove', $event)\"\n />\n <label :class=\"$style.label\">\n <span>\n {{ label }}\n <span\n v-if=\"required\"\n class=\"text-rui-error\"\n >\n ﹡\n </span>\n </span>\n </label>\n <fieldset\n v-if=\"variant === 'outlined'\"\n :class=\"$style.fieldset\"\n >\n <legend :class=\"{ [$style.show]: label }\" />\n </fieldset>\n </div>\n <div\n v-if=\"$slots.append || appendIcon || showClearIcon\"\n ref=\"append\"\n class=\"flex items-center gap-1 shrink-0\"\n :class=\"$style.append\"\n >\n <RuiButton\n v-if=\"showClearIcon\"\n :class=\"{ hidden: !focusedDebounced }\"\n variant=\"text\"\n type=\"button\"\n icon\n class=\"!p-2 clear-btn\"\n color=\"error\"\n tabindex=\"-1\"\n @click.stop=\"clearIconClicked()\"\n >\n <RuiIcon\n name=\"lu-x\"\n size=\"20\"\n />\n </RuiButton>\n <slot\n v-if=\"$slots.append\"\n name=\"append\"\n />\n <div\n v-else-if=\"appendIcon\"\n :class=\"[$style.icon]\"\n >\n <RuiIcon :name=\"appendIcon\" />\n </div>\n </div>\n </div>\n <RuiFormTextDetail\n v-if=\"!hideDetails\"\n class=\"pt-1 px-3\"\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 @apply bg-transparent;\n\n .label {\n @apply border-white/[0.42];\n\n &:after {\n @apply border-white;\n }\n }\n\n .icon {\n @apply text-white/[0.56];\n }\n\n &:hover {\n .label {\n @apply border-white;\n }\n }\n\n &.filled {\n .input {\n &:focus {\n + .label {\n @apply bg-white/[0.13];\n }\n }\n }\n\n .label {\n @apply bg-white/[0.09];\n }\n }\n\n &.outlined {\n .fieldset {\n @apply border-white/[0.23];\n }\n\n &:not(.disabled) {\n .input {\n &:hover,\n &:focus {\n ~ .fieldset {\n @apply border-white;\n }\n }\n }\n }\n }\n }\n}\n\n.wrapper {\n @apply relative w-full flex items-center pt-3 rounded bg-white;\n\n .input {\n @apply leading-6 text-rui-text w-full bg-transparent py-1.5 pr-3 outline-0 outline-none transition-all placeholder:opacity-0 focus:placeholder:opacity-100;\n\n &:focus {\n @apply outline-0;\n + .label {\n @apply after:scale-x-100;\n }\n }\n\n &:not(:placeholder-shown),\n &:autofill,\n &:-webkit-autofill,\n &[data-has-value='true'],\n &:focus {\n + .label {\n @apply text-xs leading-tight;\n padding-left: var(--x-padding);\n padding-right: var(--x-padding);\n }\n }\n\n &:disabled {\n @apply border-dotted;\n\n &,\n + .label {\n @apply text-rui-text-disabled;\n }\n\n ~ .fieldset {\n @apply border-dotted;\n }\n }\n }\n\n .label {\n @apply left-0 text-base leading-[3.75] text-rui-text-secondary pointer-events-none absolute top-0 flex h-full w-full select-none transition-all duration-75 border-b border-black/[0.42];\n\n --x-padding: 0px;\n --prepend-width: v-bind(prependWidth);\n --append-width: v-bind(appendWidth);\n\n padding-left: calc(var(--x-padding) + var(--prepend-width, 0px));\n padding-right: calc(var(--x-padding) + var(--append-width, 0px));\n\n span {\n @apply truncate transition-all duration-75;\n content: v-bind(labelWithQuote);\n }\n\n &:after {\n content: '';\n @apply absolute bottom-0 left-0 block w-full scale-x-0 border-b-2 mb-[-1px] transition-transform duration-300 border-black;\n }\n }\n\n &:hover {\n .label {\n @apply border-black;\n }\n }\n\n .icon {\n @apply text-black/[0.54];\n }\n\n .prepend {\n &:not(:empty) {\n @apply pr-2;\n }\n }\n\n .append {\n &:not(:empty) {\n @apply pl-2;\n }\n }\n\n @each $color in c.$context-colors {\n &.#{$color} {\n .input {\n &:focus {\n + .label {\n @apply text-rui-#{$color};\n }\n }\n }\n\n .label {\n @apply after:border-rui-#{$color};\n }\n\n &.outlined {\n &:not(.disabled) {\n .input {\n &:focus {\n ~ .fieldset {\n @apply border-rui-#{$color};\n }\n }\n }\n }\n }\n }\n\n &.text_#{$color},\n &.with-#{$color} {\n .prepend,\n .append,\n .input {\n @apply text-rui-#{$color};\n }\n\n &:not(.disabled) .prepend svg,\n &:not(.disabled) .append svg {\n @apply text-rui-#{$color};\n }\n }\n }\n\n @each $color in 'error', 'success' {\n &.with-#{$color} {\n .input {\n @apply border-rui-#{$color} #{!important};\n }\n\n .label {\n @apply text-rui-#{$color} after:border-rui-#{$color} #{!important};\n }\n\n .fieldset {\n @apply border-rui-#{$color} #{!important};\n }\n }\n }\n\n &.dense {\n .input {\n @apply py-1;\n }\n\n .label {\n @apply leading-[3.5];\n }\n }\n\n &.filled,\n &.outlined {\n @apply pt-0;\n\n .prepend {\n &:not(:empty) {\n @apply pl-3 pr-0;\n }\n }\n\n .append {\n &:not(:empty) {\n @apply pr-3 pl-0;\n }\n }\n\n .input {\n @apply px-3;\n }\n\n .label {\n @apply leading-[3.5];\n --x-padding: 0.75rem;\n }\n }\n\n &.filled {\n .input {\n @apply py-4;\n\n &:focus {\n + .label {\n @apply bg-black/[0.09];\n }\n }\n\n &:not(:placeholder-shown),\n &:autofill,\n &:-webkit-autofill,\n &[data-has-value='true'],\n &:focus {\n + .label {\n @apply leading-[1.5] pl-4;\n\n padding-left: calc(var(--x-padding));\n padding-right: calc(var(--x-padding));\n }\n }\n }\n\n .label {\n @apply rounded-t bg-black/[0.06];\n }\n\n &.dense {\n .input {\n @apply pt-5 pb-1;\n }\n\n .label {\n @apply leading-[3];\n }\n\n &:not(:placeholder-shown),\n &:autofill,\n &:-webkit-autofill,\n &[data-has-value='true'],\n &:focus {\n + .label {\n @apply leading-[2.25];\n }\n }\n }\n\n &.no-label {\n .input {\n @apply py-4;\n }\n\n &.dense {\n .input {\n @apply py-3;\n }\n }\n }\n }\n\n &.outlined {\n .input {\n @apply py-4 border-b-0;\n\n &:not(:placeholder-shown),\n &:autofill,\n &:-webkit-autofill,\n &[data-has-value='true'],\n &:focus {\n @apply border-t-transparent;\n\n + .label {\n @apply leading-[0] pl-4 -mt-3;\n\n span {\n @apply pt-3;\n }\n }\n\n ~ .fieldset {\n legend {\n &.show {\n @apply px-2;\n }\n &:after {\n content: v-bind(labelWithQuote);\n }\n }\n }\n }\n }\n\n .fieldset {\n @apply absolute w-full min-w-0 h-[calc(100%+0.5rem)] top-0 left-0 pointer-events-none rounded border border-black/[0.23] px-2 transition-all -mt-2;\n\n legend {\n @apply opacity-0 text-xs max-w-full truncate;\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 &:not(.disabled) {\n .input {\n &:hover,\n &:focus {\n ~ .fieldset {\n @apply border border-black;\n }\n }\n\n &:focus {\n ~ .fieldset {\n @apply border-2;\n }\n }\n }\n }\n\n .label {\n @apply border-0 border-transparent;\n\n &:after {\n content: none !important;\n }\n }\n\n &.dense {\n .input {\n @apply py-2;\n }\n\n .label {\n @apply leading-[2.5];\n }\n }\n }\n}\n</style>\n"],"names":["_useModel","width","_createElementBlock","_normalizeProps","_guardReactiveProps","_unref","$attrs","_createElementVNode","_normalizeClass","$style","$slots","_renderSlot","_createVNode","_mergeProps","_createTextVNode","_toDisplayString","_createBlock","RuiFormTextDetail"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkCA,UAAM,aAAaA,SAAmB,SAAA,YAAmB;AAEzD,UAAM,QAAQ;AAoBd,UAAM,OAAO;AAOb,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA,IACE,OAAO,KAAK;AAEhB,aAAS,MAAM,OAAc;AAC3B,YAAM,QAAS,MAAM,OAA4B;AACjD,UAAI,YAAY,KAAK;AAAA,IACvB;AAEA,UAAM,iBAAiB,SAAiB,MAAM;AAC5C,YAAM,WAAW,IAAI,KAAK;AAC1B,UAAI,CAAC;AACH,eAAO;AAET,YAAM,WAAW,IAAI,QAAQ,IAAI,MAAM;AACvC,aAAO,MAAM,QAAQ,GAAG,QAAQ;AAAA,IAClC,CAAC;AAED,UAAM,UAAU,IAAA;AAChB,UAAM,SAAS,IAAA;AACf,UAAM,eAAe,IAAA;AACrB,UAAM,WAAW,IAAA;AAEjB,UAAM,eAAe,IAAI,KAAK;AAC9B,UAAM,cAAc,IAAI,KAAK;AAE7B,UAAM,EAAE,MAAA,IAAU,mBAAmB,YAAY;AAEjD,sBAAkB,SAAS,CAAC,YAAY;AACtC,YAAM,CAAC,KAAK,IAAI;AAChB,aAAO,KAAK;AACZ,YAAM,EAAE,OAAAC,QAAO,KAAA,IAAS,MAAM;AAC9B,UAAI,cAAc,GAAGA,SAAQ,IAAI,IAAI;AAAA,IACvC,CAAC;AAED,sBAAkB,QAAQ,CAAC,YAAY;AACrC,YAAM,CAAC,KAAK,IAAI;AAChB,aAAO,KAAK;AACZ,YAAM,EAAE,OAAAA,QAAO,MAAA,IAAU,MAAM;AAC/B,UAAI,aAAa,GAAGA,SAAQ,KAAK,IAAI;AAAA,IACvC,CAAC;AAED,UAAM,EAAE,UAAU,YAAY,YAAA,IAAgB;AAAA,MAC5C;AAAA,MACA;AAAA,IAAA;AAGF,UAAM,EAAE,QAAA,IAAY,SAAS,QAAQ;AACrC,UAAM,mBAAmB,aAAa,SAAS,GAAG;AAElD,UAAM,gBAAgB;AAAA,MACpB;AAAA,MACA;AAAA,MACA,SAAS,QAAQ;AAAA,MACjB,SAAS,QAAQ;AAAA,IAAA;AAGnB,aAAS,mBAAmB;AAC1B,UAAI,YAAY,EAAE;AAClB,WAAK,OAAO;AAAA,IACd;AAEA,aAAa;AAAA,MACX,mBAAmB,CAAC,OAAe,QAAgB;AACjD,YAAI,QAAQ,GAAG,kBAAkB,OAAO,GAAG;AAAA,MAC7C;AAAA,MACA,OAAO,MAAM,IAAI,QAAQ,GAAG,MAAA;AAAA,MAC5B,SAAS;AAAA,IAAA,CACV;;0BAICC,mBAgHM,OAAAC,eAAAC,mBAhHOC,MAAA,YAAA,EAAaC,KAAAA,MAAM,CAAA,CAAA,GAAA;AAAA,QAC9BC,mBAuGM,OAAA;AAAA,UAtGH,OAAKC,eAAA;AAAA,YAAYC,KAAAA,OAAO;AAAA,YAAiBA,KAAAA,OAAO,QAAA,SAAK,EAAA;AAAA,YAAiBA,KAAAA,OAAO,QAAA,WAAO,EAAA;AAAA;eAA8BA,KAAAA,OAAO,KAAK,GAAG,QAAA;AAAA,eAAkBA,KAAAA,OAAO,QAAQ,GAAGJ,MAAA,QAAA;AAAA,cAAqBI,CAAAA,KAAAA,sBAAsBJ,MAAA,KAAA;AAAA,cAAkBI,CAAAA,KAAAA,6BAA6BJ,MAAA,QAAA;AAAA,eAAqBI,KAAAA,OAAM,cAAA,KAAA,EAAA,GAAyBJ,MAAA,UAAA,KAAU,CAAKA,MAAA,QAAA;AAAA,cAAqBI,CAAAA,KAAAA,OAAM,QAAS,QAAA,SAAS,EAAA,KAAA,EAAA,GAAY,QAAA,cAAcJ,MAAA,WAAA;AAAA,YAAA;AAAA;;UAelYK,KAAAA,OAAO,WAAW,QAAA,4BAD1BR,mBAgBM,OAAA;AAAA;qBAdA;AAAA,YAAJ,KAAI;AAAA,YACJ,OAAKM,eAAA,CAAC,oCACEC,KAAAA,OAAO,OAAO,CAAA;AAAA,UAAA;YAGdC,KAAAA,OAAO,UADfC,WAGE,KAAA,QAAA,WAAA,EAAA,KAAA,EAAA,CAAA,IAEW,QAAA,4BADbT,mBAKM,OAAA;AAAA;cAHH,OAAKM,eAAA,CAAGC,KAAAA,OAAO,IAAI,CAAA;AAAA,YAAA;cAEpBG,YAA+B,SAAA,EAArB,MAAM,QAAA,YAAA,GAAW,MAAA,GAAA,CAAA,MAAA,CAAA;AAAA,YAAA;;UAG/BL,mBAqCM,OAAA;AAAA,qBApCA;AAAA,YAAJ,KAAI;AAAA,YACJ,OAAM;AAAA,YACL,SAAK,OAAA,CAAA,MAAA,OAAA,CAAA,IAAA,CAAA,WAAE,KAAI,eAAgB,MAAM;AAAA,UAAA;YAElCA,mBAcE,SAdFM,WAcE;AAAA,uBAbI;AAAA,cAAJ,KAAI;AAAA,cACH,OAAO,WAAA;AAAA,cACP,aAAa,QAAA,eAAW;AAAA,cACxB,OAAOJ,KAAAA,OAAO;AAAA,cACd,UAAUJ,MAAA,QAAA;AAAA,cACV,OAAO,QAAA;AAAA,cACP,SAAS,QAAA;AAAA,cACT,UAAUA,MAAA,QAAA;AAAA,cACV,iBAAeA,MAAA,KAAA;AAAA,YAAA,GACRA,MAAA,eAAA,EAAgBC,KAAAA,MAAM,GAAA;AAAA,cAC7B,SAAK,OAAA,CAAA,MAAA,OAAA,CAAA,IAAA,CAAA,WAAE,MAAM,MAAM;AAAA,cACnB,QAAI,OAAA,CAAA,MAAA,OAAA,CAAA,IAAA,CAAA,WAAE,KAAI,QAAS,MAAM;AAAA,cACzB,UAAM,OAAA,CAAA,MAAA,OAAA,CAAA,IAAA,CAAA,WAAE,KAAI,UAAW,MAAM;AAAA,YAAA;YAEhCC,mBAUQ,SAAA;AAAA,cAVA,OAAKC,eAAEC,KAAAA,OAAO,KAAK;AAAA,YAAA;cACzBF,mBAQO,QAAA,MAAA;AAAA,gBAPFO,gBAAAC,gBAAAV,MAAA,KAAA,CAAK,IAAG,KACX,CAAA;AAAA,gBACQA,MAAA,QAAA,kBADRH,mBAKO,QALP,YAGC,KAED;;;YAII,QAAA,YAAO,2BADfA,mBAKW,YAAA;AAAA;cAHR,OAAKM,eAAEC,KAAAA,OAAO,QAAQ;AAAA,YAAA;cAEvBF,mBAA4C,UAAA;AAAA,gBAAnC,OAAKC,eAAA,EAAA,CAAKC,KAAAA,OAAO,IAAI,GAAGJ,MAAA,KAAA,EAAA,CAAK;AAAA,cAAA;;;UAIlCK,KAAAA,OAAO,UAAU,QAAA,cAAcL,MAAA,aAAA,kBADvCH,mBAgCM,OAAA;AAAA;qBA9BA;AAAA,YAAJ,KAAI;AAAA,YACJ,OAAKM,eAAA,CAAC,oCACEC,KAAAA,OAAO,MAAM,CAAA;AAAA,UAAA;YAGbJ,MAAA,aAAA,kBADRW,YAeY,WAAA;AAAA;cAbT,OAAKR,eAAA,CAAA,EAAA,QAAA,CAAaH,MAAA,gBAAA,KAIb,gBAAgB,CAAA;AAAA,cAHtB,SAAQ;AAAA,cACR,MAAK;AAAA,cACL,MAAA;AAAA,cAEA,OAAM;AAAA,cACN,UAAS;AAAA,cACR,6DAAY,oBAAgB,CAAA,MAAA,CAAA;AAAA,YAAA;+BAE7B,MAGE;AAAA,gBAHFO,YAGE,SAAA;AAAA,kBAFA,MAAK;AAAA,kBACL,MAAK;AAAA,gBAAA;;;;YAIDF,KAAAA,OAAO,SADfC,WAGE,KAAA,QAAA,UAAA,EAAA,KAAA,EAAA,CAAA,IAEW,QAAA,2BADbT,mBAKM,OAAA;AAAA;cAHH,OAAKM,eAAA,CAAGC,KAAAA,OAAO,IAAI,CAAA;AAAA,YAAA;cAEpBG,YAA8B,SAAA,EAApB,MAAM,QAAA,WAAA,GAAU,MAAA,GAAA,CAAA,MAAA,CAAA;AAAA,YAAA;;;SAKvB,QAAA,4BADTI,YAMEC,aAAA;AAAA;UAJA,OAAM;AAAA,UACL,kBAAgBZ,MAAA,aAAA;AAAA,UAChB,oBAAkBA,MAAA,eAAA;AAAA,UAClB,MAAM,QAAA;AAAA,QAAA;;;;;"}
1
+ {"version":3,"file":"RuiTextField.vue2.js","sources":["../../../../src/components/forms/text-field/RuiTextField.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type { ContextColorsType } from '@/consts/colors';\nimport type { RuiIcons } from '@/icons';\nimport { logicAnd, logicNot } from '@vueuse/math';\nimport RuiButton from '@/components/buttons/button/RuiButton.vue';\nimport RuiFormTextDetail from '@/components/helpers/RuiFormTextDetail.vue';\nimport RuiIcon from '@/components/icons/RuiIcon.vue';\nimport { assert } from '@/utils/assert';\nimport { getNonRootAttrs, getRootAttrs } from '@/utils/helpers';\n\nexport interface TextFieldProps {\n label?: string;\n placeholder?: string;\n disabled?: boolean;\n variant?: 'default' | 'filled' | 'outlined';\n color?: ContextColorsType;\n textColor?: ContextColorsType;\n dense?: boolean;\n hint?: string;\n errorMessages?: string | string[];\n successMessages?: string | string[];\n hideDetails?: boolean;\n prependIcon?: RuiIcons;\n appendIcon?: RuiIcons;\n readonly?: boolean;\n clearable?: boolean;\n required?: boolean;\n}\n\ndefineOptions({\n name: 'RuiTextField',\n inheritAttrs: false,\n});\n\nconst modelValue = defineModel<string>({ required: true });\n\nconst props = withDefaults(defineProps<TextFieldProps>(), {\n label: '',\n placeholder: '',\n disabled: false,\n variant: 'default',\n color: undefined,\n textColor: undefined,\n dense: false,\n hint: '',\n as: 'input',\n errorMessages: () => [],\n successMessages: () => [],\n hideDetails: false,\n prependIcon: undefined,\n appendIcon: undefined,\n readonly: false,\n clearable: false,\n required: false,\n});\n\nconst emit = defineEmits<{\n (e: 'focus-input', event: Event): void;\n (e: 'blur', event: Event): void;\n (e: 'remove', value: unknown): void;\n (e: 'clear'): void;\n}>();\n\nconst {\n label,\n clearable,\n disabled,\n readonly,\n errorMessages,\n successMessages,\n required,\n} = toRefs(props);\n\nfunction input(event: Event) {\n const value = (event.target as HTMLInputElement).value;\n set(modelValue, value);\n}\n\nconst labelWithQuote = computed<string>(() => {\n const labelVal = get(label);\n if (!labelVal)\n return '\"\\\\200B\"';\n\n const asterisk = get(required) ? '﹡' : '';\n return `' ${labelVal}${asterisk} '`;\n});\n\nconst prepend = ref<HTMLDivElement>();\nconst append = ref<HTMLDivElement>();\nconst innerWrapper = ref<HTMLDivElement>();\nconst inputRef = ref<HTMLInputElement>();\n\nconst prependWidth = ref('0px');\nconst appendWidth = ref('0px');\n\nconst { width } = useElementBounding(innerWrapper);\n\nuseResizeObserver(prepend, (entries) => {\n const [entry] = entries;\n assert(entry);\n const { width, left } = entry.contentRect;\n set(prependWidth, `${width + left}px`);\n});\n\nuseResizeObserver(append, (entries) => {\n const [entry] = entries;\n assert(entry);\n const { width, right } = entry.contentRect;\n set(appendWidth, `${width + right}px`);\n});\n\nconst { hasError, hasSuccess, hasMessages } = useFormTextDetail(\n errorMessages,\n successMessages,\n);\n\nconst { focused } = useFocus(inputRef);\nconst focusedDebounced = refDebounced(focused, 500);\n\nconst showClearIcon = logicAnd(\n clearable,\n modelValue,\n logicNot(disabled),\n logicNot(readonly),\n);\n\nfunction clearIconClicked() {\n set(modelValue, '');\n emit('clear');\n}\n\ndefineExpose({\n setSelectionRange: (start: number, end: number) => {\n get(inputRef)?.setSelectionRange(start, end);\n },\n focus: () => get(inputRef)?.focus(),\n element: inputRef,\n});\n</script>\n\n<template>\n <div v-bind=\"getRootAttrs($attrs)\">\n <div\n :class=\"[\n $style.wrapper,\n $style[color ?? ''],\n $style[variant ?? ''],\n {\n [$style.dense]: dense,\n [$style.disabled]: disabled,\n [$style['no-label']]: !label,\n [$style['with-error'] ?? '']: hasError,\n [$style['with-success'] ?? '']: hasSuccess && !hasError,\n [$style[`text_${textColor}`] ?? '']: textColor && !hasMessages,\n },\n ]\"\n :data-error=\"hasError ? '' : undefined\"\n >\n <div\n v-if=\"$slots.prepend || prependIcon\"\n ref=\"prepend\"\n class=\"flex items-center gap-1 shrink-0\"\n :class=\"$style.prepend\"\n >\n <slot\n v-if=\"$slots.prepend\"\n name=\"prepend\"\n />\n <div\n v-else-if=\"prependIcon\"\n :class=\"[$style.icon]\"\n >\n <RuiIcon :name=\"prependIcon\" />\n </div>\n </div>\n <div\n ref=\"innerWrapper\"\n class=\"flex flex-1 overflow-hidden\"\n @click=\"emit('focus-input', $event)\"\n >\n <input\n ref=\"inputRef\"\n :value=\"modelValue\"\n :placeholder=\"placeholder || ' '\"\n :class=\"$style.input\"\n :disabled=\"disabled\"\n :dense=\"dense\"\n :variant=\"variant\"\n :readonly=\"readonly\"\n :wrapper-width=\"width\"\n :aria-invalid=\"hasError\"\n v-bind=\"getNonRootAttrs($attrs)\"\n @input=\"input($event)\"\n @blur=\"emit('blur', $event)\"\n @remove=\"emit('remove', $event)\"\n />\n <label :class=\"$style.label\">\n <span>\n {{ label }}\n <span\n v-if=\"required\"\n class=\"text-rui-error\"\n >\n ﹡\n </span>\n </span>\n </label>\n <fieldset\n v-if=\"variant === 'outlined'\"\n :class=\"$style.fieldset\"\n >\n <legend :class=\"{ [$style.show]: label }\" />\n </fieldset>\n </div>\n <div\n v-if=\"$slots.append || appendIcon || showClearIcon\"\n ref=\"append\"\n class=\"flex items-center gap-1 shrink-0\"\n :class=\"$style.append\"\n >\n <RuiButton\n v-if=\"showClearIcon\"\n :class=\"{ hidden: !focusedDebounced }\"\n variant=\"text\"\n type=\"button\"\n icon\n class=\"!p-2 clear-btn\"\n color=\"error\"\n tabindex=\"-1\"\n @click.stop=\"clearIconClicked()\"\n >\n <RuiIcon\n name=\"lu-x\"\n size=\"20\"\n />\n </RuiButton>\n <slot\n v-if=\"$slots.append\"\n name=\"append\"\n />\n <div\n v-else-if=\"appendIcon\"\n :class=\"[$style.icon]\"\n >\n <RuiIcon :name=\"appendIcon\" />\n </div>\n </div>\n </div>\n <RuiFormTextDetail\n v-if=\"!hideDetails\"\n class=\"pt-1 px-3\"\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 @apply bg-transparent;\n\n .label {\n @apply border-white/[0.42];\n\n &:after {\n @apply border-white;\n }\n }\n\n .icon {\n @apply text-white/[0.56];\n }\n\n &:hover {\n .label {\n @apply border-white;\n }\n }\n\n &.filled {\n .input {\n &:focus {\n + .label {\n @apply bg-white/[0.13];\n }\n }\n }\n\n .label {\n @apply bg-white/[0.09];\n }\n }\n\n &.outlined {\n .fieldset {\n @apply border-white/[0.23];\n }\n\n &:not(.disabled) {\n .input {\n &:hover,\n &:focus {\n ~ .fieldset {\n @apply border-white;\n }\n }\n }\n }\n }\n }\n}\n\n.wrapper {\n @apply relative w-full flex items-center pt-3 rounded bg-white;\n\n .input {\n @apply leading-6 text-rui-text w-full bg-transparent py-1.5 pr-3 outline-0 outline-none transition-all placeholder:opacity-0 focus:placeholder:opacity-100;\n\n &:focus {\n @apply outline-0;\n + .label {\n @apply after:scale-x-100;\n }\n }\n\n &:not(:placeholder-shown),\n &:autofill,\n &:-webkit-autofill,\n &[data-has-value='true'],\n &:focus {\n + .label {\n @apply text-xs leading-tight;\n padding-left: var(--x-padding);\n padding-right: var(--x-padding);\n }\n }\n\n &:disabled {\n @apply border-dotted;\n\n &,\n + .label {\n @apply text-rui-text-disabled;\n }\n\n ~ .fieldset {\n @apply border-dotted;\n }\n }\n }\n\n .label {\n @apply left-0 text-base leading-[3.75] text-rui-text-secondary pointer-events-none absolute top-0 flex h-full w-full select-none transition-all duration-75 border-b border-black/[0.42];\n\n --x-padding: 0px;\n --prepend-width: v-bind(prependWidth);\n --append-width: v-bind(appendWidth);\n\n padding-left: calc(var(--x-padding) + var(--prepend-width, 0px));\n padding-right: calc(var(--x-padding) + var(--append-width, 0px));\n\n span {\n @apply truncate transition-all duration-75;\n content: v-bind(labelWithQuote);\n }\n\n &:after {\n content: '';\n @apply absolute bottom-0 left-0 block w-full scale-x-0 border-b-2 mb-[-1px] transition-transform duration-300 border-black;\n }\n }\n\n &:hover {\n .label {\n @apply border-black;\n }\n }\n\n .icon {\n @apply text-black/[0.54];\n }\n\n .prepend {\n &:not(:empty) {\n @apply pr-2;\n }\n }\n\n .append {\n &:not(:empty) {\n @apply pl-2;\n }\n }\n\n @each $color in c.$context-colors {\n &.#{$color} {\n .input {\n &:focus {\n + .label {\n @apply text-rui-#{$color};\n }\n }\n }\n\n .label {\n @apply after:border-rui-#{$color};\n }\n\n &.outlined {\n &:not(.disabled) {\n .input {\n &:focus {\n ~ .fieldset {\n @apply border-rui-#{$color};\n }\n }\n }\n }\n }\n }\n\n &.text_#{$color},\n &.with-#{$color} {\n .prepend,\n .append,\n .input {\n @apply text-rui-#{$color};\n }\n\n &:not(.disabled) .prepend svg,\n &:not(.disabled) .append svg {\n @apply text-rui-#{$color};\n }\n }\n }\n\n @each $color in 'error', 'success' {\n &.with-#{$color} {\n .input {\n @apply border-rui-#{$color} #{!important};\n }\n\n .label {\n @apply text-rui-#{$color} after:border-rui-#{$color} #{!important};\n }\n\n .fieldset {\n @apply border-rui-#{$color} #{!important};\n }\n }\n }\n\n &.dense {\n .input {\n @apply py-1;\n }\n\n .label {\n @apply leading-[3.5];\n }\n }\n\n &.filled,\n &.outlined {\n @apply pt-0;\n\n .prepend {\n &:not(:empty) {\n @apply pl-3 pr-0;\n }\n }\n\n .append {\n &:not(:empty) {\n @apply pr-3 pl-0;\n }\n }\n\n .input {\n @apply px-3;\n }\n\n .label {\n @apply leading-[3.5];\n --x-padding: 0.75rem;\n }\n }\n\n &.filled {\n .input {\n @apply py-4;\n\n &:focus {\n + .label {\n @apply bg-black/[0.09];\n }\n }\n\n &:not(:placeholder-shown),\n &:autofill,\n &:-webkit-autofill,\n &[data-has-value='true'],\n &:focus {\n + .label {\n @apply leading-[1.5] pl-4;\n\n padding-left: calc(var(--x-padding));\n padding-right: calc(var(--x-padding));\n }\n }\n }\n\n .label {\n @apply rounded-t bg-black/[0.06];\n }\n\n &.dense {\n .input {\n @apply pt-5 pb-1;\n }\n\n .label {\n @apply leading-[3];\n }\n\n &:not(:placeholder-shown),\n &:autofill,\n &:-webkit-autofill,\n &[data-has-value='true'],\n &:focus {\n + .label {\n @apply leading-[2.25];\n }\n }\n }\n\n &.no-label {\n .input {\n @apply py-4;\n }\n\n &.dense {\n .input {\n @apply py-3;\n }\n }\n }\n }\n\n &.outlined {\n .input {\n @apply py-4 border-b-0;\n\n &:not(:placeholder-shown),\n &:autofill,\n &:-webkit-autofill,\n &[data-has-value='true'],\n &:focus {\n @apply border-t-transparent;\n\n + .label {\n @apply leading-[0] pl-4 -mt-3;\n\n span {\n @apply pt-3;\n }\n }\n\n ~ .fieldset {\n legend {\n &.show {\n @apply px-2;\n }\n &:after {\n content: v-bind(labelWithQuote);\n }\n }\n }\n }\n }\n\n .fieldset {\n @apply absolute w-full min-w-0 h-[calc(100%+0.5rem)] top-0 left-0 pointer-events-none rounded border border-black/[0.23] px-2 transition-all -mt-2;\n\n legend {\n @apply opacity-0 text-xs max-w-full truncate;\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 &:not(.disabled) {\n .input {\n &:hover,\n &:focus {\n ~ .fieldset {\n @apply border border-black;\n }\n }\n\n &:focus {\n ~ .fieldset {\n @apply border-2;\n }\n }\n }\n }\n\n .label {\n @apply border-0 border-transparent;\n\n &:after {\n content: none !important;\n }\n }\n\n &.dense {\n .input {\n @apply py-2;\n }\n\n .label {\n @apply leading-[2.5];\n }\n }\n }\n}\n</style>\n"],"names":["_useModel","width","_createElementBlock","_normalizeProps","_guardReactiveProps","_unref","$attrs","_createElementVNode","_normalizeClass","$style","$slots","_renderSlot","_createVNode","_mergeProps","_createTextVNode","_toDisplayString","_createBlock","RuiFormTextDetail"],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ declare const __VLS_export: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
2
+ declare const _default: typeof __VLS_export;
3
+ export default _default;
@@ -0,0 +1,10 @@
1
+ import type { RuiIcons } from '../../icons/index.js';
2
+ export interface LazyIconProps {
3
+ name: RuiIcons;
4
+ size?: number | string;
5
+ }
6
+ declare const __VLS_export: import("vue").DefineComponent<LazyIconProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<LazyIconProps> & Readonly<{}>, {
7
+ size: number | string;
8
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
9
+ declare const _default: typeof __VLS_export;
10
+ export default _default;
@@ -13,13 +13,13 @@ export interface Props {
13
13
  rounded?: 'sm' | 'md' | 'lg' | 'full';
14
14
  color?: 'default' | ContextColorsType;
15
15
  }
16
- declare var __VLS_1: {}, __VLS_8: {}, __VLS_10: {};
16
+ declare var __VLS_1: {}, __VLS_9: {}, __VLS_11: {};
17
17
  type __VLS_Slots = {} & {
18
18
  default?: (props: typeof __VLS_1) => any;
19
19
  } & {
20
- badge?: (props: typeof __VLS_8) => any;
20
+ badge?: (props: typeof __VLS_9) => any;
21
21
  } & {
22
- icon?: (props: typeof __VLS_10) => any;
22
+ icon?: (props: typeof __VLS_11) => any;
23
23
  };
24
24
  declare const __VLS_base: import("vue").DefineComponent<Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<Props> & Readonly<{}>, {
25
25
  left: boolean;
@@ -4,9 +4,9 @@ export interface BottomSheetProps {
4
4
  width?: string | number;
5
5
  maxWidth?: string | number;
6
6
  }
7
- declare var __VLS_8: string, __VLS_9: any;
7
+ declare var __VLS_10: string, __VLS_11: any;
8
8
  type __VLS_Slots = {} & {
9
- [K in NonNullable<typeof __VLS_8>]?: (props: typeof __VLS_9) => any;
9
+ [K in NonNullable<typeof __VLS_10>]?: (props: typeof __VLS_11) => any;
10
10
  };
11
11
  declare const __VLS_base: import("vue").DefineComponent<BottomSheetProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<BottomSheetProps> & Readonly<{}>, {
12
12
  modelValue: boolean;
@@ -13,14 +13,14 @@ declare var __VLS_1: {
13
13
  onClick: () => void;
14
14
  };
15
15
  isOpen: boolean;
16
- }, __VLS_18: {
16
+ }, __VLS_21: {
17
17
  isOpen: true;
18
18
  close: typeof close;
19
19
  };
20
20
  type __VLS_Slots = {} & {
21
21
  activator?: (props: typeof __VLS_1) => any;
22
22
  } & {
23
- default?: (props: typeof __VLS_18) => any;
23
+ default?: (props: typeof __VLS_21) => any;
24
24
  };
25
25
  declare const __VLS_base: import("vue").DefineComponent<DialogProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
26
26
  closed: () => any;
@@ -25,13 +25,13 @@ declare var __VLS_1: {
25
25
  disabled: boolean;
26
26
  hasError: boolean;
27
27
  hasSuccess: boolean;
28
- }, __VLS_18: {
28
+ }, __VLS_19: {
29
29
  width: number;
30
30
  };
31
31
  type __VLS_Slots = {} & {
32
32
  activator?: (props: typeof __VLS_1) => any;
33
33
  } & {
34
- default?: (props: typeof __VLS_18) => any;
34
+ default?: (props: typeof __VLS_19) => any;
35
35
  };
36
36
  declare const __VLS_base: import("vue").DefineComponent<MenuProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
37
37
  "update:model-value": (value: boolean) => any;
@@ -14,7 +14,7 @@ declare var __VLS_1: {
14
14
  attrs: {
15
15
  onClick: () => void;
16
16
  };
17
- }, __VLS_13: {
17
+ }, __VLS_15: {
18
18
  attrs: {
19
19
  onClick: () => void;
20
20
  };
@@ -23,7 +23,7 @@ declare var __VLS_1: {
23
23
  type __VLS_Slots = {} & {
24
24
  activator?: (props: typeof __VLS_1) => any;
25
25
  } & {
26
- default?: (props: typeof __VLS_13) => any;
26
+ default?: (props: typeof __VLS_15) => any;
27
27
  };
28
28
  declare const __VLS_base: import("vue").DefineComponent<NavigationDrawerProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
29
29
  closed: () => any;
@@ -4,9 +4,9 @@ export interface NotificationProps {
4
4
  width?: number | string;
5
5
  theme?: 'light' | 'dark';
6
6
  }
7
- declare var __VLS_11: {};
7
+ declare var __VLS_13: {};
8
8
  type __VLS_Slots = {} & {
9
- default?: (props: typeof __VLS_11) => any;
9
+ default?: (props: typeof __VLS_13) => any;
10
10
  };
11
11
  declare const __VLS_base: import("vue").DefineComponent<NotificationProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
12
12
  "update:model-value": (value: boolean) => any;
@@ -12,11 +12,11 @@ export interface Props {
12
12
  declare var __VLS_1: {
13
13
  open: boolean;
14
14
  close: (immediate?: boolean) => void;
15
- }, __VLS_17: {};
15
+ }, __VLS_18: {};
16
16
  type __VLS_Slots = {} & {
17
17
  activator?: (props: typeof __VLS_1) => any;
18
18
  } & {
19
- default?: (props: typeof __VLS_17) => any;
19
+ default?: (props: typeof __VLS_18) => any;
20
20
  };
21
21
  declare const __VLS_base: import("vue").DefineComponent<Props, {
22
22
  onOpen: (immediate?: boolean) => void;
@@ -141,8 +141,8 @@ export interface Props<T, K extends keyof T> {
141
141
  scroller?: HTMLElement | null;
142
142
  itemClass?: ((item: T) => string) | string;
143
143
  }
144
- declare const __VLS_export: <T extends object, IdType extends keyof T = keyof T>(__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<{
145
- props: __VLS_PrettifyLocal<Props<T, IdType> & {
144
+ declare const __VLS_export: <T extends object, IdType extends keyof T = keyof T>(__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<{
145
+ props: import("vue").PublicProps & __VLS_PrettifyLocal<Props<T, IdType> & {
146
146
  "onUpdate:model-value"?: ((value?: T[IdType][] | undefined) => any) | undefined;
147
147
  "onUpdate:expanded"?: ((value: T[]) => any) | undefined;
148
148
  "onUpdate:pagination"?: ((value: TablePaginationData) => any) | undefined;
@@ -151,7 +151,9 @@ declare const __VLS_export: <T extends object, IdType extends keyof T = keyof T>
151
151
  "onUpdate:group"?: ((value?: GroupKeys<T>) => any) | undefined;
152
152
  "onUpdate:collapsed"?: ((value?: T[] | undefined) => any) | undefined;
153
153
  "onCopy:group"?: ((value: GroupData<T>) => any) | undefined;
154
- }> & import("vue").PublicProps;
154
+ }> & (typeof globalThis extends {
155
+ __VLS_PROPS_FALLBACK: infer P;
156
+ } ? P : {});
155
157
  expose: (exposed: {}) => void;
156
158
  attrs: any;
157
159
  slots: Partial<Record<`header.${string}`, (props: {
@@ -200,6 +202,8 @@ declare const __VLS_export: <T extends object, IdType extends keyof T = keyof T>
200
202
  };
201
203
  declare const _default: typeof __VLS_export;
202
204
  export default _default;
203
- type __VLS_PrettifyLocal<T> = {
205
+ type __VLS_PrettifyLocal<T> = (T extends any ? {
206
+ [K in keyof T]: T[K];
207
+ } : {
204
208
  [K in keyof T as K]: T[K];
205
- } & {};
209
+ }) & {};
@@ -3,9 +3,9 @@ export interface Props {
3
3
  expanded: boolean;
4
4
  icon?: RuiIcons;
5
5
  }
6
- declare var __VLS_6: {};
6
+ declare var __VLS_8: {};
7
7
  type __VLS_Slots = {} & {
8
- default?: (props: typeof __VLS_6) => any;
8
+ default?: (props: typeof __VLS_8) => any;
9
9
  };
10
10
  declare const __VLS_base: import("vue").DefineComponent<Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<Props> & Readonly<{}>, {
11
11
  icon: RuiIcons;