@eos-ui/vue 0.4.0 → 0.5.1

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 (98) hide show
  1. package/README.md +4 -4
  2. package/dist/component-names.js +1 -1
  3. package/dist/component-names.js.map +1 -1
  4. package/dist/components/Actions/EActions.js.map +1 -1
  5. package/dist/components/Actions/EActions.vue.d.ts +1 -1
  6. package/dist/components/Actions/EActions.vue_vue_type_script_setup_true_lang.js.map +1 -1
  7. package/dist/components/Avatar/EAvatar.js.map +1 -1
  8. package/dist/components/Avatar/EAvatar.vue.d.ts +1 -1
  9. package/dist/components/Avatar/EAvatar.vue_vue_type_script_setup_true_lang.js.map +1 -1
  10. package/dist/components/Button/EButton.js.map +1 -1
  11. package/dist/components/Button/EButton.vue.d.ts +2 -0
  12. package/dist/components/Button/EButton.vue_vue_type_script_setup_true_lang.js +64 -29
  13. package/dist/components/Button/EButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
  14. package/dist/components/Calendar/ECalendar.js.map +1 -1
  15. package/dist/components/Calendar/ECalendar.vue.d.ts +1 -1
  16. package/dist/components/Calendar/ECalendar.vue_vue_type_script_setup_true_lang.js.map +1 -1
  17. package/dist/components/Checkbox/ECheckbox.js.map +1 -1
  18. package/dist/components/Checkbox/ECheckbox.vue.d.ts +1 -1
  19. package/dist/components/Checkbox/ECheckbox.vue_vue_type_script_setup_true_lang.js.map +1 -1
  20. package/dist/components/Combobox/EComboboxBase.js.map +1 -1
  21. package/dist/components/Combobox/EComboboxBase.vue_vue_type_script_setup_true_lang.js +4 -8
  22. package/dist/components/Combobox/EComboboxBase.vue_vue_type_script_setup_true_lang.js.map +1 -1
  23. package/dist/components/Combobox/types.d.ts +2 -2
  24. package/dist/components/DataGrid/EDataGrid.js.map +1 -1
  25. package/dist/components/DataGrid/EDataGrid.vue.d.ts +1 -1
  26. package/dist/components/DataGrid/EDataGrid.vue_vue_type_script_setup_true_lang.js +1 -0
  27. package/dist/components/DataGrid/EDataGrid.vue_vue_type_script_setup_true_lang.js.map +1 -1
  28. package/dist/components/DescriptionList/EDescriptionList.js.map +1 -1
  29. package/dist/components/DescriptionList/EDescriptionList.vue_vue_type_script_setup_true_lang.js +2 -2
  30. package/dist/components/DescriptionList/EDescriptionList.vue_vue_type_script_setup_true_lang.js.map +1 -1
  31. package/dist/components/Dialog/EDialog.js.map +1 -1
  32. package/dist/components/Dialog/EDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  33. package/dist/components/Drawer/EDrawer.js.map +1 -1
  34. package/dist/components/Drawer/EDrawer.vue_vue_type_script_setup_true_lang.js.map +1 -1
  35. package/dist/components/EmptyState/EEmptyState.js.map +1 -1
  36. package/dist/components/EmptyState/EEmptyState.vue.d.ts +1 -1
  37. package/dist/components/EmptyState/EEmptyState.vue_vue_type_script_setup_true_lang.js.map +1 -1
  38. package/dist/components/Grid/EGrid.js.map +1 -1
  39. package/dist/components/Grid/EGrid.vue.d.ts +1 -1
  40. package/dist/components/Grid/EGrid.vue_vue_type_script_setup_true_lang.js.map +1 -1
  41. package/dist/components/IconButton/EIconButton.js.map +1 -1
  42. package/dist/components/IconButton/EIconButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
  43. package/dist/components/Inline/EInline.js.map +1 -1
  44. package/dist/components/Inline/EInline.vue.d.ts +1 -1
  45. package/dist/components/Inline/EInline.vue_vue_type_script_setup_true_lang.js.map +1 -1
  46. package/dist/components/Kbd/EKbd.js.map +1 -1
  47. package/dist/components/Kbd/EKbd.vue_vue_type_script_setup_true_lang.js.map +1 -1
  48. package/dist/components/NavList/ENavList.js.map +1 -1
  49. package/dist/components/NavList/ENavList.vue_vue_type_script_setup_true_lang.js.map +1 -1
  50. package/dist/components/Notice/ENotice.js.map +1 -1
  51. package/dist/components/Notice/ENotice.vue_vue_type_script_setup_true_lang.js.map +1 -1
  52. package/dist/components/OtpField/EOtpField.js.map +1 -1
  53. package/dist/components/OtpField/EOtpField.vue_vue_type_script_setup_true_lang.js.map +1 -1
  54. package/dist/components/PageHeader/EPageHeader.js.map +1 -1
  55. package/dist/components/PageHeader/EPageHeader.vue_vue_type_script_setup_true_lang.js.map +1 -1
  56. package/dist/components/Pagination/EPagination.js.map +1 -1
  57. package/dist/components/Pagination/EPagination.vue_vue_type_script_setup_true_lang.js.map +1 -1
  58. package/dist/components/PasswordField/EPasswordField.js.map +1 -1
  59. package/dist/components/PasswordField/EPasswordField.vue_vue_type_script_setup_true_lang.js.map +1 -1
  60. package/dist/components/SearchBar/ESearchBar.js.map +1 -1
  61. package/dist/components/SearchBar/ESearchBar.vue.d.ts +1 -1
  62. package/dist/components/SearchBar/ESearchBar.vue_vue_type_script_setup_true_lang.js.map +1 -1
  63. package/dist/components/Segmented/ESegmented.js.map +1 -1
  64. package/dist/components/Segmented/ESegmented.vue_vue_type_script_setup_true_lang.js.map +1 -1
  65. package/dist/components/Select/ESelectControl.js.map +1 -1
  66. package/dist/components/Select/ESelectControl.vue_vue_type_script_setup_true_lang.js.map +1 -1
  67. package/dist/components/SignaturePad/ESignaturePad.js.map +1 -1
  68. package/dist/components/SignaturePad/ESignaturePad.vue_vue_type_script_setup_true_lang.js.map +1 -1
  69. package/dist/components/Stack/EStack.js.map +1 -1
  70. package/dist/components/Stack/EStack.vue.d.ts +1 -1
  71. package/dist/components/Stack/EStack.vue_vue_type_script_setup_true_lang.js.map +1 -1
  72. package/dist/components/Stamp/EStamp.js.map +1 -1
  73. package/dist/components/Stamp/EStamp.vue.d.ts +2 -2
  74. package/dist/components/Stamp/EStamp.vue_vue_type_script_setup_true_lang.js +2 -2
  75. package/dist/components/Stamp/EStamp.vue_vue_type_script_setup_true_lang.js.map +1 -1
  76. package/dist/components/Stepper/EStepper.js.map +1 -1
  77. package/dist/components/Stepper/EStepper.vue_vue_type_script_setup_true_lang.js.map +1 -1
  78. package/dist/components/Surface/ESurface.js.map +1 -1
  79. package/dist/components/Surface/ESurface.vue.d.ts +1 -1
  80. package/dist/components/Surface/ESurface.vue_vue_type_script_setup_true_lang.js.map +1 -1
  81. package/dist/components/Switch/ESwitch.js.map +1 -1
  82. package/dist/components/Switch/ESwitch.vue_vue_type_script_setup_true_lang.js.map +1 -1
  83. package/dist/components/Table/ETable.js +8 -0
  84. package/dist/components/Table/ETable.js.map +1 -0
  85. package/dist/components/Table/ETable.vue.d.ts +25 -0
  86. package/dist/components/Table/ETable.vue_vue_type_script_setup_true_lang.js +28 -0
  87. package/dist/components/Table/ETable.vue_vue_type_script_setup_true_lang.js.map +1 -0
  88. package/dist/components/Table/index.d.ts +1 -0
  89. package/dist/components/Tabs/ETabs.js.map +1 -1
  90. package/dist/components/Tabs/ETabs.vue.d.ts +10 -2
  91. package/dist/components/Tabs/ETabs.vue_vue_type_script_setup_true_lang.js +11 -3
  92. package/dist/components/Tabs/ETabs.vue_vue_type_script_setup_true_lang.js.map +1 -1
  93. package/dist/components/Upload/EUpload.js.map +1 -1
  94. package/dist/components/Upload/EUpload.vue_vue_type_script_setup_true_lang.js.map +1 -1
  95. package/dist/index.d.ts +1 -0
  96. package/dist/index.js +10 -9
  97. package/dist/style.css +555 -179
  98. package/package.json +3 -2
@@ -1 +1 @@
1
- {"version":3,"file":"ECalendar.vue_vue_type_script_setup_true_lang.js","names":["_useModel","_openBlock","_createElementBlock","_unref","_createElementVNode","_createBlock","EIconButton","_toDisplayString","_createTextVNode","_createVNode","EIcon","_Fragment","_renderList","_normalizeClass","_createCommentVNode","EActions","_withCtx","EButton","EActions_default","EIcon_default","EButton_default","EIconButton_default","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","ECalendar_vue_vue_type_script_setup_true_lang_default","\"modelValue\"","\"modelModifiers\"","\"start\"","\"startModifiers\"","\"end\"","\"endModifiers\"","__expose","__emit","props","__props","emit","value","useModel","start","end","t","useMessages","config","useConfig","loc","useLocale","uid","useUid","root","ref","range","computed","instance","getCurrentInstance","hasClear","today","startOfDay","focus","hover","view","pick","cy","cm","yearLow","yearHigh","years","i","off","compareDays","d","isMarked","m","sameDay","x","monthOff","y","yearOff","clamp","settle","addDays","step","withMonthYear","last","want","focusWanted","nextTick","el","focusId","id","dayId","dayKey","watch","chosen","weeks","first","from","w","columns","k","rangeEnd","isSelected","inRange","dayLabel","marked","pickDay","s","clickDay","openView","v","backToDays","back","chooseMonth","nd","chooseYear","addMonths","n","sign","onDayKey","f","dow","next","walk","target","onPickKey","months","lo","hi","onRootKey","goToday","tc","shortDate","help","picking","prevOff","nextOff","nowYear","nowMonth","openBlock","createElementBlock","unref","createElementVNode","createBlock","_cache","toDisplayString","createTextVNode","createVNode","Fragment","renderList","ix","row","normalizeClass","name","createCommentVNode","withCtx"],"sources":["../../../src/components/Calendar/ECalendar.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, getCurrentInstance, nextTick, ref, watch } from \"vue\";\nimport EActions from \"../Actions/EActions.vue\";\nimport EButton from \"../Button/EButton.vue\";\nimport EIcon from \"../Icon/EIcon.vue\";\nimport EIconButton from \"../IconButton/EIconButton.vue\";\nimport { useConfig, useMessages } from \"../../config.js\";\nimport { useLocale } from \"../../composables/useLocale.js\";\nimport { useUid } from \"../../composables/useUid.js\";\nimport { addDays, addMonths, compareDays, dayKey, sameDay, startOfDay } from \"./dates.js\";\nimport \"../../styles/base.css\";\n\nexport interface CalendarRange {\n start: Date | null;\n end: Date | null;\n}\n\nconst props = withDefaults(\n defineProps<{\n /** `single` chooses one day (`v-model`); `range` chooses a span (`v-model:start` and `v-model:end`): the first click sets the start, the second the end, and a click before the start restarts. */\n mode?: \"single\" | \"range\";\n /** Days that cannot be chosen or focused, such as days with nothing to book. Arrow keys skip them. */\n disabledDate?: (date: Date) => boolean;\n /** Days that get a dot: a list of dates or a function. Screen readers hear `markLabel`. */\n marked?: Date[] | ((date: Date) => boolean);\n /** What screen readers hear on a marked day. @default times available */\n markLabel?: string;\n /** The earliest day that can be chosen. Earlier days cannot be focused or chosen; navigation stops there. */\n min?: Date;\n /** The latest day that can be chosen. Later days cannot be focused or chosen; navigation stops there. */\n max?: Date;\n /** The month to open on, when nothing is chosen. Changing it moves the view. */\n month?: Date;\n /** `false` hides the Today and Clear buttons. */\n footer?: boolean;\n /** Forces the Clear button on or off. Left out, it shows when a `@clear` listener is attached. */\n clearable?: boolean;\n }>(),\n { mode: \"single\", footer: true, clearable: undefined },\n);\n\nconst emit = defineEmits<{\n /** In range mode, after every click that changes the span. */\n rangeChange: [range: CalendarRange];\n /** The Clear button. It is only shown when a `@clear` listener is attached. */\n clear: [];\n}>();\n\n/** The chosen day (`single` mode). */\nconst value = defineModel<Date | null>({ default: null });\n/** The first day of the span (`range` mode). */\nconst start = defineModel<Date | null>(\"start\", { default: null });\n/** The last day of the span (`range` mode). */\nconst end = defineModel<Date | null>(\"end\", { default: null });\n\ntype View = \"days\" | \"months\" | \"years\";\n\nconst t = useMessages();\nconst config = useConfig();\nconst loc = useLocale();\nconst uid = useUid();\nconst root = ref<HTMLElement | null>(null);\nconst range = computed(() => props.mode === \"range\");\nconst instance = getCurrentInstance();\nconst hasClear = () => props.clearable ?? !!instance?.vnode.props?.onClear;\n\nconst today = startOfDay(new Date());\nconst focus = ref(startOfDay((range.value ? start.value : value.value) || props.month || new Date()));\nconst hover = ref<Date | null>(null);\nconst view = ref<View>(\"days\");\nconst pick = ref(0);\n\nconst cy = computed(() => focus.value.getFullYear());\nconst cm = computed(() => focus.value.getMonth());\nconst yearLow = computed(() => Math.min(cy.value, props.min ? props.min.getFullYear() : today.getFullYear() - 120));\nconst yearHigh = computed(() => Math.max(cy.value, props.max ? props.max.getFullYear() : today.getFullYear() + 20));\nconst years = computed(() => Array.from({ length: yearHigh.value - yearLow.value + 1 }, (_, i) => yearLow.value + i));\n\nfunction off(d: Date): boolean {\n return (\n (!!props.min && compareDays(d, props.min) < 0) ||\n (!!props.max && compareDays(d, props.max) > 0) ||\n !!props.disabledDate?.(d)\n );\n}\nfunction isMarked(d: Date): boolean {\n const m = props.marked;\n if (!m) return false;\n return typeof m === \"function\" ? !!m(d) : m.some((x) => sameDay(x, d));\n}\nfunction monthOff(y: number, m: number): boolean {\n return (\n (!!props.min && compareDays(new Date(y, m + 1, 0, 12), props.min) < 0) ||\n (!!props.max && compareDays(new Date(y, m, 1, 12), props.max) > 0)\n );\n}\nconst yearOff = (y: number) =>\n (!!props.min && y < props.min.getFullYear()) || (!!props.max && y > props.max.getFullYear());\nfunction clamp(d: Date): Date {\n if (props.min && compareDays(d, props.min) < 0) return startOfDay(props.min);\n if (props.max && compareDays(d, props.max) > 0) return startOfDay(props.max);\n return d;\n}\nfunction settle(d: Date, step: number): Date | null {\n let n = d;\n for (let i = 0; i < 400 && off(n); i++) n = addDays(n, step);\n return off(n) ? null : n;\n}\nfunction withMonthYear(y: number, m: number): Date {\n const last = new Date(y, m + 1, 0, 12).getDate();\n return clamp(new Date(y, m, Math.min(focus.value.getDate(), last), 12));\n}\n\nif (off(focus.value)) focus.value = settle(focus.value, 1) ?? settle(focus.value, -1) ?? focus.value;\n\nlet want: string | null = null;\nasync function focusWanted() {\n await nextTick();\n if (!want) return;\n const el = root.value?.querySelector<HTMLElement>(`[id=\"${want}\"]`);\n if (!el) return;\n el.focus();\n if (want.includes(\"-y-\")) el.scrollIntoView?.({ block: \"center\" });\n want = null;\n}\nfunction focusId(id: string) {\n want = id;\n void focusWanted();\n}\nconst dayId = (d: Date) => `${uid.value}-${dayKey(d)}`;\n\nwatch(\n () => props.month?.getTime(),\n () => {\n if (props.month) focus.value = clamp(startOfDay(props.month));\n },\n);\nwatch(\n () => (range.value ? start.value : value.value)?.getTime(),\n () => {\n const chosen = range.value ? start.value : value.value;\n if (chosen && !sameDay(chosen, focus.value)) focus.value = startOfDay(chosen);\n },\n);\n\nconst weeks = computed(() => {\n const first = new Date(cy.value, cm.value, 1, 12);\n const from = addDays(first, -((first.getDay() - loc.weekStart.value + 7) % 7));\n return Array.from({ length: 6 }, (_, w) => Array.from({ length: 7 }, (_, i) => addDays(from, w * 7 + i)));\n});\nconst columns = computed(() => Array.from({ length: 7 }, (_, k) => (loc.weekStart.value + k) % 7));\nconst rangeEnd = computed(() => {\n if (!range.value) return null;\n return end.value || (start.value && hover.value && compareDays(hover.value, start.value) >= 0 ? hover.value : null);\n});\n\nfunction isSelected(d: Date): boolean {\n return range.value ? sameDay(d, start.value) || sameDay(d, end.value) : sameDay(d, value.value);\n}\nfunction inRange(d: Date): boolean {\n return !!(\n range.value &&\n start.value &&\n rangeEnd.value &&\n compareDays(d, start.value) > 0 &&\n compareDays(d, rangeEnd.value) < 0\n );\n}\nfunction dayLabel(d: Date, marked: boolean): string {\n return (\n loc.formatLong(d) +\n (sameDay(d, today) ? \", \" + t(\"todaySuffix\") : \"\") +\n (marked ? \", \" + (props.markLabel || t(\"timesAvailable\")) : \"\")\n );\n}\n\nfunction pickDay(d: Date) {\n if (off(d)) return;\n if (!range.value) {\n value.value = d;\n return;\n }\n const s = start.value;\n if (!s || end.value || compareDays(d, s) < 0) {\n start.value = d;\n end.value = null;\n emit(\"rangeChange\", { start: d, end: null });\n } else {\n end.value = d;\n emit(\"rangeChange\", { start: s, end: d });\n }\n}\nfunction clickDay(d: Date) {\n focus.value = d;\n focusId(dayId(d));\n pickDay(d);\n}\n\nfunction openView(v: \"months\" | \"years\") {\n view.value = v;\n if (v === \"months\") {\n pick.value = cm.value;\n focusId(`${uid.value}-m-${cm.value}`);\n } else {\n pick.value = cy.value;\n focusId(`${uid.value}-y-${cy.value}`);\n }\n}\nfunction backToDays() {\n view.value = \"days\";\n focusId(dayId(focus.value));\n}\nfunction back() {\n if (view.value === \"months\") openView(\"years\");\n else backToDays();\n}\nfunction chooseMonth(m: number) {\n if (monthOff(cy.value, m)) return;\n const nd = withMonthYear(cy.value, m);\n focus.value = nd;\n view.value = \"days\";\n focusId(dayId(nd));\n}\nfunction chooseYear(y: number) {\n if (yearOff(y)) return;\n const nd = withMonthYear(y, cm.value);\n focus.value = nd;\n view.value = \"months\";\n pick.value = nd.getMonth();\n focusId(`${uid.value}-m-${nd.getMonth()}`);\n}\nfunction step(n: number) {\n focus.value = clamp(addMonths(focus.value, n));\n}\n\nfunction sign(): number {\n if (config.dir) return config.dir === \"rtl\" ? -1 : 1;\n return root.value && getComputedStyle(root.value).direction === \"rtl\" ? -1 : 1;\n}\n\nfunction onDayKey(e: KeyboardEvent) {\n const f = focus.value;\n const dow = (f.getDay() - loc.weekStart.value + 7) % 7;\n const s = sign();\n let next: Date;\n let walk: number;\n switch (e.key) {\n case \"ArrowLeft\":\n walk = -s;\n next = addDays(f, walk);\n break;\n case \"ArrowRight\":\n walk = s;\n next = addDays(f, walk);\n break;\n case \"ArrowUp\":\n walk = -7;\n next = addDays(f, walk);\n break;\n case \"ArrowDown\":\n walk = 7;\n next = addDays(f, walk);\n break;\n case \"Home\":\n walk = 1;\n next = addDays(f, -dow);\n break;\n case \"End\":\n walk = -1;\n next = addDays(f, 6 - dow);\n break;\n case \"PageUp\":\n walk = -1;\n next = addMonths(f, e.shiftKey ? -12 : -1);\n break;\n case \"PageDown\":\n walk = 1;\n next = addMonths(f, e.shiftKey ? 12 : 1);\n break;\n default:\n return;\n }\n e.preventDefault();\n const target = settle(next, walk);\n if (!target) return;\n focus.value = target;\n focusId(dayId(target));\n if (range.value && start.value && !end.value) hover.value = target;\n}\n\nfunction onPickKey(e: KeyboardEvent) {\n const months = view.value === \"months\";\n const lo = months ? 0 : yearLow.value;\n const hi = months ? 11 : yearHigh.value;\n const s = sign();\n let next: number | null = null;\n switch (e.key) {\n case \"ArrowLeft\":\n next = pick.value - s;\n break;\n case \"ArrowRight\":\n next = pick.value + s;\n break;\n case \"ArrowUp\":\n next = pick.value - 3;\n break;\n case \"ArrowDown\":\n next = pick.value + 3;\n break;\n case \"Home\":\n next = lo;\n break;\n case \"End\":\n next = hi;\n break;\n case \"PageUp\":\n if (!months) next = pick.value - 12;\n break;\n case \"PageDown\":\n if (!months) next = pick.value + 12;\n break;\n }\n if (next === null) return;\n e.preventDefault();\n next = Math.max(lo, Math.min(hi, next));\n pick.value = next;\n focusId(`${uid.value}-${months ? \"m\" : \"y\"}-${next}`);\n}\n\nfunction onRootKey(e: KeyboardEvent) {\n if (e.key !== \"Escape\" || view.value === \"days\") return;\n e.preventDefault();\n e.stopPropagation();\n backToDays();\n}\n\nfunction goToday() {\n const tc = clamp(today);\n focus.value = tc;\n focusId(dayId(tc));\n if (!range.value && !off(today)) pickDay(today);\n}\n\nconst shortDate = (d: Date) => `${loc.monthsShort.value[d.getMonth()]} ${d.getDate()}`;\nconst help = computed(() => {\n if (!range.value || view.value !== \"days\") return \"\";\n if (!start.value) return t(\"rangeStart\");\n if (!end.value) return t(\"rangeEnd\", { start: shortDate(start.value) });\n return t(\"rangeDone\", {\n start: shortDate(start.value),\n end: shortDate(end.value),\n days: Math.round(compareDays(end.value, start.value) / 864e5) + 1,\n });\n});\n\nconst picking = computed(() => view.value !== \"days\");\nconst prevOff = computed(() => !!props.min && compareDays(new Date(cy.value, cm.value, 0, 12), props.min) < 0);\nconst nextOff = computed(() => !!props.max && compareDays(new Date(cy.value, cm.value + 1, 1, 12), props.max) > 0);\nconst nowYear = today.getFullYear();\nconst nowMonth = today.getMonth();\n\ndefineExpose({\n view,\n focusDay: () => focusId(dayId(focus.value)),\n});\n</script>\n\n<template>\n <!-- eslint-disable-next-line vuejs-accessibility/no-static-element-interactions -->\n <div ref=\"root\" class=\"e-cal\" :dir=\"config.dir ?? undefined\" @keydown=\"onRootKey\">\n <div class=\"e-cal-head\">\n <EIconButton\n v-if=\"picking\"\n icon=\"chevron-left\"\n :label=\"t(view === 'months' ? 'backToYears' : 'backToDays')\"\n @click=\"back\"\n />\n <EIconButton v-else icon=\"chevron-left\" :label=\"t('prevMonth')\" :disabled=\"prevOff\" @click=\"step(-1)\" />\n <div class=\"e-cal-title\" aria-live=\"polite\">\n <span v-if=\"picking\" class=\"e-cal-range\">{{\n t(view === \"months\" ? \"chooseAMonth\" : \"chooseAYear\", { year: cy })\n }}</span>\n <button\n v-else\n type=\"button\"\n class=\"e-cal-pick\"\n aria-expanded=\"false\"\n :aria-label=\"t('chooseDateNow', { month: loc.months.value[cm] ?? '', year: cy })\"\n @click=\"openView('years')\"\n >\n {{ loc.months.value[cm] }} {{ cy }}\n <EIcon name=\"chevron-down\" small />\n </button>\n </div>\n <span v-if=\"picking\" class=\"e-cal-gap\" />\n <EIconButton v-else icon=\"chevron-right\" :label=\"t('nextMonth')\" :disabled=\"nextOff\" @click=\"step(1)\" />\n </div>\n\n <!-- eslint-disable-next-line vuejs-accessibility/interactive-supports-focus -- the day buttons carry the roving tabindex -->\n <table\n v-if=\"view === 'days'\"\n class=\"e-cal-grid\"\n role=\"grid\"\n :aria-label=\"`${loc.months.value[cm]} ${cy}`\"\n @keydown=\"onDayKey\"\n >\n <thead>\n <tr>\n <th v-for=\"ix in columns\" :key=\"ix\" scope=\"col\" :abbr=\"loc.weekdays.value[ix]\">\n {{ loc.weekdaysShort.value[ix] }}\n </th>\n </tr>\n </thead>\n <tbody>\n <tr v-for=\"(row, w) in weeks\" :key=\"w\">\n <td\n v-for=\"d in row\"\n :key=\"dayKey(d)\"\n role=\"gridcell\"\n :aria-selected=\"isSelected(d) || inRange(d) ? 'true' : 'false'\"\n :class=\"inRange(d) && 'e-cal-in'\"\n >\n <button\n :id=\"dayId(d)\"\n type=\"button\"\n class=\"e-day\"\n :class=\"[\n d.getMonth() !== cm && 'e-day--out',\n sameDay(d, today) && 'e-day--today',\n isSelected(d) && 'e-day--sel',\n !off(d) && isMarked(d) && 'e-day--mark',\n ]\"\n :tabindex=\"sameDay(d, focus) ? 0 : -1\"\n :disabled=\"off(d)\"\n :aria-label=\"dayLabel(d, !off(d) && isMarked(d))\"\n @click=\"clickDay(d)\"\n @mouseenter=\"range && start && !end && (hover = d)\"\n @focus=\"range && start && !end && (hover = d)\"\n >\n {{ d.getDate() }}\n </button>\n </td>\n </tr>\n </tbody>\n </table>\n\n <!-- eslint-disable-next-line vuejs-accessibility/no-static-element-interactions -->\n <div\n v-else-if=\"view === 'months'\"\n class=\"e-cal-cells\"\n role=\"group\"\n :aria-label=\"t('monthsOf', { year: cy })\"\n @keydown=\"onPickKey\"\n >\n <button\n v-for=\"(name, m) in loc.months.value\"\n :id=\"`${uid}-m-${m}`\"\n :key=\"m\"\n type=\"button\"\n class=\"e-cal-cell\"\n :class=\"[m === cm && 'e-day--sel', cy === nowYear && m === nowMonth && 'e-day--today']\"\n :tabindex=\"m === pick ? 0 : -1\"\n :disabled=\"monthOff(cy, m)\"\n :aria-pressed=\"m === cm ? 'true' : 'false'\"\n :aria-current=\"cy === nowYear && m === nowMonth ? 'date' : undefined\"\n @click=\"chooseMonth(m)\"\n >\n <span aria-hidden=\"true\">{{ loc.monthsShort.value[m] }}</span>\n <span class=\"e-sr\">{{ name }} {{ cy }}</span>\n </button>\n </div>\n\n <!-- eslint-disable-next-line vuejs-accessibility/no-static-element-interactions -->\n <div\n v-else\n class=\"e-cal-cells e-cal-years\"\n role=\"group\"\n :aria-label=\"t('yearsRange', { from: yearLow, to: yearHigh })\"\n @keydown=\"onPickKey\"\n >\n <button\n v-for=\"y in years\"\n :id=\"`${uid}-y-${y}`\"\n :key=\"y\"\n type=\"button\"\n class=\"e-cal-cell\"\n :class=\"[y === cy && 'e-day--sel', y === nowYear && 'e-day--today']\"\n :tabindex=\"y === pick ? 0 : -1\"\n :disabled=\"yearOff(y)\"\n :aria-pressed=\"y === cy ? 'true' : 'false'\"\n :aria-current=\"y === nowYear ? 'date' : undefined\"\n @click=\"chooseYear(y)\"\n >\n {{ y }}\n </button>\n </div>\n\n <p v-if=\"range\" class=\"e-cal-help\" aria-live=\"polite\">{{ help }}</p>\n\n <EActions v-if=\"footer\" class=\"e-cal-foot\" :class=\"view !== 'days' && 'e-cal-foot--idle'\" :inert=\"view !== 'days'\">\n <EButton variant=\"quiet\" @click=\"goToday\">{{ t(\"today\") }}</EButton>\n <EButton v-if=\"hasClear()\" variant=\"quiet\" @click=\"emit('clear')\">{{ t(\"clear\") }}</EButton>\n </EActions>\n </div>\n</template>\n\n<style>\n@layer e.composites {\n .e-cal {\n width: 20.5rem;\n max-width: 100%;\n font-family: var(--e-font-sans);\n }\n\n .e-cal-head {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--e-space-2);\n margin-bottom: var(--e-space-2);\n padding-bottom: var(--e-space-2);\n border-bottom: var(--e-stroke-hair) solid var(--e-border);\n }\n\n .e-cal-title {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--e-space-1);\n flex: 1;\n min-width: 0;\n margin: 0;\n font: 600 var(--e-text-lg) / 1.2 var(--e-font-sans);\n text-align: center;\n }\n\n .e-cal-pick {\n display: inline-flex;\n align-items: center;\n gap: var(--e-space-1);\n height: var(--e-control-height);\n padding: 0 var(--e-space-2);\n border: var(--e-stroke-edge) solid transparent;\n border-radius: var(--e-radius-md);\n background: transparent;\n color: var(--e-ink);\n font: 600 var(--e-text-lg) / 1 var(--e-font-sans);\n cursor: pointer;\n transition: background-color var(--e-duration-tap) var(--e-easing-out);\n }\n\n .e-cal-pick:hover {\n background: var(--e-surface-hover);\n border-color: var(--e-border-strong);\n\n }\n\n .e-cal-pick:focus-visible {\n outline: var(--e-stroke-focus) solid var(--e-focus-ring);\n outline-offset: var(--e-focus-gap);\n }\n\n .e-cal-pick .e-icon {\n transition: transform var(--e-duration-tap) var(--e-easing-out);\n }\n\n .e-cal-pick[aria-expanded=\"true\"] .e-icon {\n transform: rotate(180deg);\n }\n\n .e-cal-range {\n font: 600 var(--e-text-lg) / 1.2 var(--e-font-sans);\n font-variant-numeric: tabular-nums;\n }\n\n .e-cal-gap {\n display: block;\n width: var(--e-tap);\n height: var(--e-tap);\n }\n\n .e-cal-head .e-icon-btn:disabled {\n color: var(--e-muted);\n cursor: not-allowed;\n }\n\n .e-cal-head .e-icon-btn:disabled:hover {\n background: transparent;\n box-shadow: none;\n }\n\n .e-cal-grid {\n width: 100%;\n height: calc(6 * var(--e-tap) + var(--e-space-8) + var(--e-space-4));\n border-collapse: collapse;\n table-layout: fixed;\n }\n\n .e-cal-grid th {\n height: var(--e-space-8);\n font: 600 var(--e-text-sm) / 1 var(--e-font-sans);\n color: var(--e-muted);\n text-align: center;\n }\n\n .e-cal-grid td {\n padding: 1px 3px;\n text-align: center;\n }\n\n .e-cal-in {\n background: color-mix(in srgb, var(--e-primary) 12%, var(--e-surface));\n }\n\n .e-day {\n position: relative;\n width: 100%;\n height: var(--e-tap);\n padding: 0;\n border: var(--e-stroke-edge) solid transparent;\n border-radius: var(--e-radius-md);\n background: transparent;\n color: var(--e-ink);\n font: 500 var(--e-text-sm) / 1 var(--e-font-mono);\n font-variant-numeric: tabular-nums;\n cursor: pointer;\n transition: background-color var(--e-duration-tap) var(--e-easing-out);\n }\n\n /* stylelint-disable-next-line selector-not-notation -- the selector stays in this form */\n .e-day:hover:not(:disabled):not(.e-day--sel) {\n background: var(--e-surface-hover);\n border-color: var(--e-border-strong);\n\n }\n\n .e-day:focus-visible {\n outline: var(--e-stroke-focus) solid var(--e-focus-ring);\n outline-offset: calc(-1 * var(--e-stroke-focus));\n }\n\n .e-day--out {\n color: var(--e-muted);\n font-weight: 400;\n }\n\n .e-day--today {\n box-shadow: inset 0 0 0 var(--e-stroke-edge) var(--e-primary);\n }\n\n .e-day--sel {\n background: var(--e-primary);\n border-color: var(--e-primary);\n font-weight: 700;\n color: var(--e-on-primary);\n }\n\n .e-day:disabled {\n color: var(--e-border-strong);\n font-weight: 400;\n cursor: not-allowed;\n opacity: 1;\n }\n\n .e-day--mark::after {\n content: \"\";\n position: absolute;\n inset-inline-start: 50%;\n bottom: 5px;\n width: 5px;\n height: 5px;\n margin-inline-start: -2.5px;\n border-radius: 50%;\n background: var(--e-primary);\n }\n\n .e-day--sel.e-day--mark::after {\n background: var(--e-on-primary);\n }\n\n .e-cal-cells {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n grid-auto-rows: 1fr;\n gap: 6px;\n height: calc(6 * var(--e-tap) + var(--e-space-8) + var(--e-space-4));\n padding-top: var(--e-space-1);\n }\n\n .e-cal-years {\n overflow-y: auto;\n grid-auto-rows: var(--e-tap);\n padding-inline-end: 2px;\n align-content: start;\n }\n\n .e-cal-cell {\n width: 100%;\n height: 100%;\n min-height: var(--e-tap);\n padding: 0;\n border: var(--e-stroke-edge) solid transparent;\n border-radius: var(--e-radius-md);\n background: transparent;\n color: var(--e-ink);\n font: 500 var(--e-text-md) / 1 var(--e-font-mono);\n font-variant-numeric: tabular-nums;\n cursor: pointer;\n transition: background-color var(--e-duration-tap) var(--e-easing-out);\n }\n\n .e-cal-years .e-cal-cell {\n height: var(--e-tap);\n }\n\n /* stylelint-disable-next-line selector-not-notation -- the selector stays in this form */\n .e-cal-cell:hover:not(:disabled):not(.e-day--sel) {\n background: var(--e-surface-hover);\n border-color: var(--e-border-strong);\n\n }\n\n .e-cal-cell:focus-visible {\n outline: var(--e-stroke-focus) solid var(--e-focus-ring);\n outline-offset: calc(-1 * var(--e-stroke-focus));\n }\n\n .e-cal-cell:disabled {\n color: var(--e-border-strong);\n font-weight: 400;\n cursor: not-allowed;\n }\n\n .e-cal-cell.e-day--sel {\n background: var(--e-primary);\n border-color: var(--e-primary);\n font-weight: 700;\n color: var(--e-on-primary);\n }\n\n .e-cal-help {\n min-height: calc(var(--e-text-sm) * 1.4);\n margin: var(--e-space-2) 0 0;\n font: 500 var(--e-text-sm) / 1.4 var(--e-font-sans);\n color: var(--e-muted);\n text-align: center;\n }\n\n .e-cal-foot {\n display: flex;\n align-items: center;\n justify-content: flex-start;\n gap: var(--e-space-2);\n margin-top: var(--e-space-2);\n padding-top: var(--e-space-2);\n border-top: var(--e-stroke-hair) solid var(--e-border);\n }\n\n .e-cal-foot--idle {\n visibility: hidden;\n }\n\n @media (prefers-reduced-motion: reduce) {\n .e-day,\n .e-cal-pick,\n .e-cal-cell,\n .e-cal-pick .e-icon {\n transition: none;\n }\n }\n\n @media (forced-colors: active) {\n .e-day--sel,\n .e-cal-cell.e-day--sel {\n forced-color-adjust: none;\n background: Highlight;\n color: HighlightText;\n }\n\n .e-day--mark::after {\n background: CanvasText;\n }\n\n .e-day--sel.e-day--mark::after {\n background: HighlightText;\n }\n }\n}\n</style>\n"],"mappings":"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"}
1
+ {"version":3,"file":"ECalendar.vue_vue_type_script_setup_true_lang.js","names":["_useModel","_openBlock","_createElementBlock","_unref","_createElementVNode","_createBlock","EIconButton","_toDisplayString","_createTextVNode","_createVNode","EIcon","_Fragment","_renderList","_normalizeClass","_createCommentVNode","EActions","_withCtx","EButton","EActions_default","EIcon_default","EButton_default","EIconButton_default","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","ECalendar_vue_vue_type_script_setup_true_lang_default","\"modelValue\"","\"modelModifiers\"","\"start\"","\"startModifiers\"","\"end\"","\"endModifiers\"","__expose","__emit","props","__props","emit","value","useModel","start","end","t","useMessages","config","useConfig","loc","useLocale","uid","useUid","root","ref","range","computed","instance","getCurrentInstance","hasClear","today","startOfDay","focus","hover","view","pick","cy","cm","yearLow","yearHigh","years","i","off","compareDays","d","isMarked","m","sameDay","x","monthOff","y","yearOff","clamp","settle","addDays","step","withMonthYear","last","want","focusWanted","nextTick","el","focusId","id","dayId","dayKey","watch","chosen","weeks","first","from","w","columns","k","rangeEnd","isSelected","inRange","dayLabel","marked","pickDay","s","clickDay","openView","v","backToDays","back","chooseMonth","nd","chooseYear","addMonths","n","sign","onDayKey","f","dow","next","walk","target","onPickKey","months","lo","hi","onRootKey","goToday","tc","shortDate","help","picking","prevOff","nextOff","nowYear","nowMonth","openBlock","createElementBlock","unref","createElementVNode","createBlock","_cache","toDisplayString","createTextVNode","createVNode","Fragment","renderList","ix","row","normalizeClass","name","createCommentVNode","withCtx"],"sources":["../../../src/components/Calendar/ECalendar.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, getCurrentInstance, nextTick, ref, watch } from \"vue\";\nimport EActions from \"../Actions/EActions.vue\";\nimport EButton from \"../Button/EButton.vue\";\nimport EIcon from \"../Icon/EIcon.vue\";\nimport EIconButton from \"../IconButton/EIconButton.vue\";\nimport { useConfig, useMessages } from \"../../config.js\";\nimport { useLocale } from \"../../composables/useLocale.js\";\nimport { useUid } from \"../../composables/useUid.js\";\nimport { addDays, addMonths, compareDays, dayKey, sameDay, startOfDay } from \"./dates.js\";\nimport \"../../styles/base.css\";\n\nexport interface CalendarRange {\n start: Date | null;\n end: Date | null;\n}\n\nconst props = withDefaults(\n defineProps<{\n /** `single` chooses one day (`v-model`); `range` chooses a span (`v-model:start` and `v-model:end`): the first click sets the start, the second the end, and a click before the start restarts. */\n mode?: \"single\" | \"range\";\n /** Days that cannot be chosen or focused, such as days with nothing to book. Arrow keys skip them. */\n disabledDate?: (date: Date) => boolean;\n /** Days that get a dot: a list of dates or a function. Screen readers hear `markLabel`. */\n marked?: Date[] | ((date: Date) => boolean);\n /** What screen readers hear on a marked day. @default \"times available\" */\n markLabel?: string;\n /** The earliest day that can be chosen. Earlier days cannot be focused or chosen; navigation stops there. */\n min?: Date;\n /** The latest day that can be chosen. Later days cannot be focused or chosen; navigation stops there. */\n max?: Date;\n /** The month to open on, when nothing is chosen. Changing it moves the view. */\n month?: Date;\n /** `false` hides the Today and Clear buttons. */\n footer?: boolean;\n /** Forces the Clear button on or off. Left out, it shows when a `@clear` listener is attached. */\n clearable?: boolean;\n }>(),\n { mode: \"single\", footer: true, clearable: undefined },\n);\n\nconst emit = defineEmits<{\n /** In range mode, after every click that changes the span. */\n rangeChange: [range: CalendarRange];\n /** The Clear button. It is only shown when a `@clear` listener is attached. */\n clear: [];\n}>();\n\n/** The chosen day (`single` mode). */\nconst value = defineModel<Date | null>({ default: null });\n/** The first day of the span (`range` mode). */\nconst start = defineModel<Date | null>(\"start\", { default: null });\n/** The last day of the span (`range` mode). */\nconst end = defineModel<Date | null>(\"end\", { default: null });\n\ntype View = \"days\" | \"months\" | \"years\";\n\nconst t = useMessages();\nconst config = useConfig();\nconst loc = useLocale();\nconst uid = useUid();\nconst root = ref<HTMLElement | null>(null);\nconst range = computed(() => props.mode === \"range\");\nconst instance = getCurrentInstance();\nconst hasClear = () => props.clearable ?? !!instance?.vnode.props?.onClear;\n\nconst today = startOfDay(new Date());\nconst focus = ref(startOfDay((range.value ? start.value : value.value) || props.month || new Date()));\nconst hover = ref<Date | null>(null);\nconst view = ref<View>(\"days\");\nconst pick = ref(0);\n\nconst cy = computed(() => focus.value.getFullYear());\nconst cm = computed(() => focus.value.getMonth());\nconst yearLow = computed(() => Math.min(cy.value, props.min ? props.min.getFullYear() : today.getFullYear() - 120));\nconst yearHigh = computed(() => Math.max(cy.value, props.max ? props.max.getFullYear() : today.getFullYear() + 20));\nconst years = computed(() => Array.from({ length: yearHigh.value - yearLow.value + 1 }, (_, i) => yearLow.value + i));\n\nfunction off(d: Date): boolean {\n return (\n (!!props.min && compareDays(d, props.min) < 0) ||\n (!!props.max && compareDays(d, props.max) > 0) ||\n !!props.disabledDate?.(d)\n );\n}\nfunction isMarked(d: Date): boolean {\n const m = props.marked;\n if (!m) return false;\n return typeof m === \"function\" ? !!m(d) : m.some((x) => sameDay(x, d));\n}\nfunction monthOff(y: number, m: number): boolean {\n return (\n (!!props.min && compareDays(new Date(y, m + 1, 0, 12), props.min) < 0) ||\n (!!props.max && compareDays(new Date(y, m, 1, 12), props.max) > 0)\n );\n}\nconst yearOff = (y: number) =>\n (!!props.min && y < props.min.getFullYear()) || (!!props.max && y > props.max.getFullYear());\nfunction clamp(d: Date): Date {\n if (props.min && compareDays(d, props.min) < 0) return startOfDay(props.min);\n if (props.max && compareDays(d, props.max) > 0) return startOfDay(props.max);\n return d;\n}\nfunction settle(d: Date, step: number): Date | null {\n let n = d;\n for (let i = 0; i < 400 && off(n); i++) n = addDays(n, step);\n return off(n) ? null : n;\n}\nfunction withMonthYear(y: number, m: number): Date {\n const last = new Date(y, m + 1, 0, 12).getDate();\n return clamp(new Date(y, m, Math.min(focus.value.getDate(), last), 12));\n}\n\nif (off(focus.value)) focus.value = settle(focus.value, 1) ?? settle(focus.value, -1) ?? focus.value;\n\nlet want: string | null = null;\nasync function focusWanted() {\n await nextTick();\n if (!want) return;\n const el = root.value?.querySelector<HTMLElement>(`[id=\"${want}\"]`);\n if (!el) return;\n el.focus();\n if (want.includes(\"-y-\")) el.scrollIntoView?.({ block: \"center\" });\n want = null;\n}\nfunction focusId(id: string) {\n want = id;\n void focusWanted();\n}\nconst dayId = (d: Date) => `${uid.value}-${dayKey(d)}`;\n\nwatch(\n () => props.month?.getTime(),\n () => {\n if (props.month) focus.value = clamp(startOfDay(props.month));\n },\n);\nwatch(\n () => (range.value ? start.value : value.value)?.getTime(),\n () => {\n const chosen = range.value ? start.value : value.value;\n if (chosen && !sameDay(chosen, focus.value)) focus.value = startOfDay(chosen);\n },\n);\n\nconst weeks = computed(() => {\n const first = new Date(cy.value, cm.value, 1, 12);\n const from = addDays(first, -((first.getDay() - loc.weekStart.value + 7) % 7));\n return Array.from({ length: 6 }, (_, w) => Array.from({ length: 7 }, (_, i) => addDays(from, w * 7 + i)));\n});\nconst columns = computed(() => Array.from({ length: 7 }, (_, k) => (loc.weekStart.value + k) % 7));\nconst rangeEnd = computed(() => {\n if (!range.value) return null;\n return end.value || (start.value && hover.value && compareDays(hover.value, start.value) >= 0 ? hover.value : null);\n});\n\nfunction isSelected(d: Date): boolean {\n return range.value ? sameDay(d, start.value) || sameDay(d, end.value) : sameDay(d, value.value);\n}\nfunction inRange(d: Date): boolean {\n return !!(\n range.value &&\n start.value &&\n rangeEnd.value &&\n compareDays(d, start.value) > 0 &&\n compareDays(d, rangeEnd.value) < 0\n );\n}\nfunction dayLabel(d: Date, marked: boolean): string {\n return (\n loc.formatLong(d) +\n (sameDay(d, today) ? \", \" + t(\"todaySuffix\") : \"\") +\n (marked ? \", \" + (props.markLabel || t(\"timesAvailable\")) : \"\")\n );\n}\n\nfunction pickDay(d: Date) {\n if (off(d)) return;\n if (!range.value) {\n value.value = d;\n return;\n }\n const s = start.value;\n if (!s || end.value || compareDays(d, s) < 0) {\n start.value = d;\n end.value = null;\n emit(\"rangeChange\", { start: d, end: null });\n } else {\n end.value = d;\n emit(\"rangeChange\", { start: s, end: d });\n }\n}\nfunction clickDay(d: Date) {\n focus.value = d;\n focusId(dayId(d));\n pickDay(d);\n}\n\nfunction openView(v: \"months\" | \"years\") {\n view.value = v;\n if (v === \"months\") {\n pick.value = cm.value;\n focusId(`${uid.value}-m-${cm.value}`);\n } else {\n pick.value = cy.value;\n focusId(`${uid.value}-y-${cy.value}`);\n }\n}\nfunction backToDays() {\n view.value = \"days\";\n focusId(dayId(focus.value));\n}\nfunction back() {\n if (view.value === \"months\") openView(\"years\");\n else backToDays();\n}\nfunction chooseMonth(m: number) {\n if (monthOff(cy.value, m)) return;\n const nd = withMonthYear(cy.value, m);\n focus.value = nd;\n view.value = \"days\";\n focusId(dayId(nd));\n}\nfunction chooseYear(y: number) {\n if (yearOff(y)) return;\n const nd = withMonthYear(y, cm.value);\n focus.value = nd;\n view.value = \"months\";\n pick.value = nd.getMonth();\n focusId(`${uid.value}-m-${nd.getMonth()}`);\n}\nfunction step(n: number) {\n focus.value = clamp(addMonths(focus.value, n));\n}\n\nfunction sign(): number {\n if (config.dir) return config.dir === \"rtl\" ? -1 : 1;\n return root.value && getComputedStyle(root.value).direction === \"rtl\" ? -1 : 1;\n}\n\nfunction onDayKey(e: KeyboardEvent) {\n const f = focus.value;\n const dow = (f.getDay() - loc.weekStart.value + 7) % 7;\n const s = sign();\n let next: Date;\n let walk: number;\n switch (e.key) {\n case \"ArrowLeft\":\n walk = -s;\n next = addDays(f, walk);\n break;\n case \"ArrowRight\":\n walk = s;\n next = addDays(f, walk);\n break;\n case \"ArrowUp\":\n walk = -7;\n next = addDays(f, walk);\n break;\n case \"ArrowDown\":\n walk = 7;\n next = addDays(f, walk);\n break;\n case \"Home\":\n walk = 1;\n next = addDays(f, -dow);\n break;\n case \"End\":\n walk = -1;\n next = addDays(f, 6 - dow);\n break;\n case \"PageUp\":\n walk = -1;\n next = addMonths(f, e.shiftKey ? -12 : -1);\n break;\n case \"PageDown\":\n walk = 1;\n next = addMonths(f, e.shiftKey ? 12 : 1);\n break;\n default:\n return;\n }\n e.preventDefault();\n const target = settle(next, walk);\n if (!target) return;\n focus.value = target;\n focusId(dayId(target));\n if (range.value && start.value && !end.value) hover.value = target;\n}\n\nfunction onPickKey(e: KeyboardEvent) {\n const months = view.value === \"months\";\n const lo = months ? 0 : yearLow.value;\n const hi = months ? 11 : yearHigh.value;\n const s = sign();\n let next: number | null = null;\n switch (e.key) {\n case \"ArrowLeft\":\n next = pick.value - s;\n break;\n case \"ArrowRight\":\n next = pick.value + s;\n break;\n case \"ArrowUp\":\n next = pick.value - 3;\n break;\n case \"ArrowDown\":\n next = pick.value + 3;\n break;\n case \"Home\":\n next = lo;\n break;\n case \"End\":\n next = hi;\n break;\n case \"PageUp\":\n if (!months) next = pick.value - 12;\n break;\n case \"PageDown\":\n if (!months) next = pick.value + 12;\n break;\n }\n if (next === null) return;\n e.preventDefault();\n next = Math.max(lo, Math.min(hi, next));\n pick.value = next;\n focusId(`${uid.value}-${months ? \"m\" : \"y\"}-${next}`);\n}\n\nfunction onRootKey(e: KeyboardEvent) {\n if (e.key !== \"Escape\" || view.value === \"days\") return;\n e.preventDefault();\n e.stopPropagation();\n backToDays();\n}\n\nfunction goToday() {\n const tc = clamp(today);\n focus.value = tc;\n focusId(dayId(tc));\n if (!range.value && !off(today)) pickDay(today);\n}\n\nconst shortDate = (d: Date) => `${loc.monthsShort.value[d.getMonth()]} ${d.getDate()}`;\nconst help = computed(() => {\n if (!range.value || view.value !== \"days\") return \"\";\n if (!start.value) return t(\"rangeStart\");\n if (!end.value) return t(\"rangeEnd\", { start: shortDate(start.value) });\n return t(\"rangeDone\", {\n start: shortDate(start.value),\n end: shortDate(end.value),\n days: Math.round(compareDays(end.value, start.value) / 864e5) + 1,\n });\n});\n\nconst picking = computed(() => view.value !== \"days\");\nconst prevOff = computed(() => !!props.min && compareDays(new Date(cy.value, cm.value, 0, 12), props.min) < 0);\nconst nextOff = computed(() => !!props.max && compareDays(new Date(cy.value, cm.value + 1, 1, 12), props.max) > 0);\nconst nowYear = today.getFullYear();\nconst nowMonth = today.getMonth();\n\ndefineExpose({\n view,\n focusDay: () => focusId(dayId(focus.value)),\n});\n</script>\n\n<template>\n <!-- eslint-disable-next-line vuejs-accessibility/no-static-element-interactions -->\n <div ref=\"root\" class=\"e-cal\" :dir=\"config.dir ?? undefined\" @keydown=\"onRootKey\">\n <div class=\"e-cal-head\">\n <EIconButton\n v-if=\"picking\"\n icon=\"chevron-left\"\n :label=\"t(view === 'months' ? 'backToYears' : 'backToDays')\"\n @click=\"back\"\n />\n <EIconButton v-else icon=\"chevron-left\" :label=\"t('prevMonth')\" :disabled=\"prevOff\" @click=\"step(-1)\" />\n <div class=\"e-cal-title\" aria-live=\"polite\">\n <span v-if=\"picking\" class=\"e-cal-range\">{{\n t(view === \"months\" ? \"chooseAMonth\" : \"chooseAYear\", { year: cy })\n }}</span>\n <button\n v-else\n type=\"button\"\n class=\"e-cal-pick\"\n aria-expanded=\"false\"\n :aria-label=\"t('chooseDateNow', { month: loc.months.value[cm] ?? '', year: cy })\"\n @click=\"openView('years')\"\n >\n {{ loc.months.value[cm] }} {{ cy }}\n <EIcon name=\"chevron-down\" small />\n </button>\n </div>\n <span v-if=\"picking\" class=\"e-cal-gap\" />\n <EIconButton v-else icon=\"chevron-right\" :label=\"t('nextMonth')\" :disabled=\"nextOff\" @click=\"step(1)\" />\n </div>\n\n <!-- eslint-disable-next-line vuejs-accessibility/interactive-supports-focus -- the day buttons carry the roving tabindex -->\n <table\n v-if=\"view === 'days'\"\n class=\"e-cal-grid\"\n role=\"grid\"\n :aria-label=\"`${loc.months.value[cm]} ${cy}`\"\n @keydown=\"onDayKey\"\n >\n <thead>\n <tr>\n <th v-for=\"ix in columns\" :key=\"ix\" scope=\"col\" :abbr=\"loc.weekdays.value[ix]\">\n {{ loc.weekdaysShort.value[ix] }}\n </th>\n </tr>\n </thead>\n <tbody>\n <tr v-for=\"(row, w) in weeks\" :key=\"w\">\n <td\n v-for=\"d in row\"\n :key=\"dayKey(d)\"\n role=\"gridcell\"\n :aria-selected=\"isSelected(d) || inRange(d) ? 'true' : 'false'\"\n :class=\"inRange(d) && 'e-cal-in'\"\n >\n <button\n :id=\"dayId(d)\"\n type=\"button\"\n class=\"e-day\"\n :class=\"[\n d.getMonth() !== cm && 'e-day--out',\n sameDay(d, today) && 'e-day--today',\n isSelected(d) && 'e-day--sel',\n !off(d) && isMarked(d) && 'e-day--mark',\n ]\"\n :tabindex=\"sameDay(d, focus) ? 0 : -1\"\n :disabled=\"off(d)\"\n :aria-label=\"dayLabel(d, !off(d) && isMarked(d))\"\n @click=\"clickDay(d)\"\n @mouseenter=\"range && start && !end && (hover = d)\"\n @focus=\"range && start && !end && (hover = d)\"\n >\n {{ d.getDate() }}\n </button>\n </td>\n </tr>\n </tbody>\n </table>\n\n <!-- eslint-disable-next-line vuejs-accessibility/no-static-element-interactions -->\n <div\n v-else-if=\"view === 'months'\"\n class=\"e-cal-cells\"\n role=\"group\"\n :aria-label=\"t('monthsOf', { year: cy })\"\n @keydown=\"onPickKey\"\n >\n <button\n v-for=\"(name, m) in loc.months.value\"\n :id=\"`${uid}-m-${m}`\"\n :key=\"m\"\n type=\"button\"\n class=\"e-cal-cell\"\n :class=\"[m === cm && 'e-day--sel', cy === nowYear && m === nowMonth && 'e-day--today']\"\n :tabindex=\"m === pick ? 0 : -1\"\n :disabled=\"monthOff(cy, m)\"\n :aria-pressed=\"m === cm ? 'true' : 'false'\"\n :aria-current=\"cy === nowYear && m === nowMonth ? 'date' : undefined\"\n @click=\"chooseMonth(m)\"\n >\n <span aria-hidden=\"true\">{{ loc.monthsShort.value[m] }}</span>\n <span class=\"e-sr\">{{ name }} {{ cy }}</span>\n </button>\n </div>\n\n <!-- eslint-disable-next-line vuejs-accessibility/no-static-element-interactions -->\n <div\n v-else\n class=\"e-cal-cells e-cal-years\"\n role=\"group\"\n :aria-label=\"t('yearsRange', { from: yearLow, to: yearHigh })\"\n @keydown=\"onPickKey\"\n >\n <button\n v-for=\"y in years\"\n :id=\"`${uid}-y-${y}`\"\n :key=\"y\"\n type=\"button\"\n class=\"e-cal-cell\"\n :class=\"[y === cy && 'e-day--sel', y === nowYear && 'e-day--today']\"\n :tabindex=\"y === pick ? 0 : -1\"\n :disabled=\"yearOff(y)\"\n :aria-pressed=\"y === cy ? 'true' : 'false'\"\n :aria-current=\"y === nowYear ? 'date' : undefined\"\n @click=\"chooseYear(y)\"\n >\n {{ y }}\n </button>\n </div>\n\n <p v-if=\"range\" class=\"e-cal-help\" aria-live=\"polite\">{{ help }}</p>\n\n <EActions v-if=\"footer\" class=\"e-cal-foot\" :class=\"view !== 'days' && 'e-cal-foot--idle'\" :inert=\"view !== 'days'\">\n <EButton variant=\"quiet\" @click=\"goToday\">{{ t(\"today\") }}</EButton>\n <EButton v-if=\"hasClear()\" variant=\"quiet\" @click=\"emit('clear')\">{{ t(\"clear\") }}</EButton>\n </EActions>\n </div>\n</template>\n\n<style>\n@layer e.composites {\n .e-cal {\n width: 20.5rem;\n max-width: 100%;\n font-family: var(--e-font-sans);\n }\n\n .e-cal-head {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--e-space-2);\n margin-bottom: var(--e-space-2);\n padding-bottom: var(--e-space-2);\n border-bottom: var(--e-stroke-hair) solid var(--e-border);\n }\n\n .e-cal-title {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--e-space-1);\n flex: 1;\n min-width: 0;\n margin: 0;\n font: 600 var(--e-text-lg) / 1.2 var(--e-font-sans);\n text-align: center;\n }\n\n .e-cal-pick {\n display: inline-flex;\n align-items: center;\n gap: var(--e-space-1);\n height: var(--e-control-height);\n padding: 0 var(--e-space-2);\n border: 0;\n border-radius: var(--e-radius-md);\n background: transparent;\n color: var(--e-ink);\n font: 600 var(--e-text-lg) / 1 var(--e-font-sans);\n cursor: pointer;\n transition: background-color var(--e-duration-tap) var(--e-easing-out);\n }\n\n .e-cal-pick:hover {\n background: var(--e-surface-hover);\n box-shadow: inset 0 0 0 var(--e-stroke-edge) var(--e-border-strong);\n }\n\n .e-cal-pick:focus-visible {\n outline: var(--e-stroke-focus) solid var(--e-focus-ring);\n outline-offset: var(--e-focus-gap);\n }\n\n .e-cal-pick .e-icon {\n transition: transform var(--e-duration-tap) var(--e-easing-out);\n }\n\n .e-cal-pick[aria-expanded=\"true\"] .e-icon {\n transform: rotate(180deg);\n }\n\n .e-cal-range {\n font: 600 var(--e-text-lg) / 1.2 var(--e-font-sans);\n font-variant-numeric: tabular-nums;\n }\n\n .e-cal-gap {\n display: block;\n width: var(--e-tap);\n height: var(--e-tap);\n }\n\n .e-cal-head .e-icon-btn:disabled {\n color: var(--e-muted);\n cursor: not-allowed;\n }\n\n .e-cal-head .e-icon-btn:disabled:hover {\n background: transparent;\n box-shadow: none;\n }\n\n .e-cal-grid {\n width: 100%;\n height: calc(6 * var(--e-tap) + var(--e-space-8) + var(--e-space-4));\n border-collapse: collapse;\n table-layout: fixed;\n }\n\n .e-cal-grid th {\n height: var(--e-space-8);\n font: 600 var(--e-text-sm) / 1 var(--e-font-sans);\n color: var(--e-muted);\n text-align: center;\n }\n\n .e-cal-grid td {\n padding: 1px 3px;\n text-align: center;\n }\n\n .e-cal-in {\n background: color-mix(in srgb, var(--e-primary) 12%, var(--e-surface));\n }\n\n .e-day {\n position: relative;\n width: 100%;\n height: var(--e-tap);\n padding: 0;\n border: 0;\n border-radius: var(--e-radius-md);\n background: transparent;\n color: var(--e-ink);\n font: 500 var(--e-text-sm) / 1 var(--e-font-mono);\n font-variant-numeric: tabular-nums;\n cursor: pointer;\n transition: background-color var(--e-duration-tap) var(--e-easing-out);\n }\n\n /* stylelint-disable-next-line selector-not-notation -- the selector stays in this form */\n .e-day:hover:not(:disabled):not(.e-day--sel) {\n background: var(--e-surface-hover);\n box-shadow: inset 0 0 0 var(--e-stroke-edge) var(--e-border-strong);\n }\n\n .e-day:focus-visible {\n outline: var(--e-stroke-focus) solid var(--e-focus-ring);\n outline-offset: calc(-1 * var(--e-stroke-focus));\n }\n\n .e-day--out {\n color: var(--e-muted);\n font-weight: 400;\n }\n\n .e-day--today {\n box-shadow: inset 0 0 0 var(--e-stroke-edge) var(--e-primary);\n }\n\n .e-day--sel {\n background: var(--e-primary);\n box-shadow: none;\n font-weight: 700;\n color: var(--e-on-primary);\n }\n\n .e-day:disabled {\n color: var(--e-border-strong);\n font-weight: 400;\n cursor: not-allowed;\n opacity: 1;\n }\n\n .e-day--mark::after {\n content: \"\";\n position: absolute;\n inset-inline-start: 50%;\n bottom: 5px;\n width: 5px;\n height: 5px;\n margin-inline-start: -2.5px;\n border-radius: 50%;\n background: var(--e-primary);\n }\n\n .e-day--sel.e-day--mark::after {\n background: var(--e-on-primary);\n }\n\n .e-cal-cells {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n grid-auto-rows: 1fr;\n gap: 6px;\n height: calc(6 * var(--e-tap) + var(--e-space-8) + var(--e-space-4));\n padding-top: var(--e-space-1);\n }\n\n .e-cal-years {\n overflow-y: auto;\n grid-auto-rows: var(--e-tap);\n padding-inline-end: 2px;\n align-content: start;\n }\n\n .e-cal-cell {\n width: 100%;\n height: 100%;\n min-height: var(--e-tap);\n padding: 0;\n border: 0;\n border-radius: var(--e-radius-md);\n background: transparent;\n color: var(--e-ink);\n font: 500 var(--e-text-md) / 1 var(--e-font-mono);\n font-variant-numeric: tabular-nums;\n cursor: pointer;\n transition: background-color var(--e-duration-tap) var(--e-easing-out);\n }\n\n .e-cal-years .e-cal-cell {\n height: var(--e-tap);\n }\n\n /* stylelint-disable-next-line selector-not-notation -- the selector stays in this form */\n .e-cal-cell:hover:not(:disabled):not(.e-day--sel) {\n background: var(--e-surface-hover);\n box-shadow: inset 0 0 0 var(--e-stroke-edge) var(--e-border-strong);\n }\n\n .e-cal-cell:focus-visible {\n outline: var(--e-stroke-focus) solid var(--e-focus-ring);\n outline-offset: calc(-1 * var(--e-stroke-focus));\n }\n\n .e-cal-cell:disabled {\n color: var(--e-border-strong);\n font-weight: 400;\n cursor: not-allowed;\n }\n\n .e-cal-cell.e-day--sel {\n background: var(--e-primary);\n box-shadow: none;\n font-weight: 700;\n color: var(--e-on-primary);\n }\n\n .e-cal-help {\n min-height: calc(var(--e-text-sm) * 1.4);\n margin: var(--e-space-2) 0 0;\n font: 500 var(--e-text-sm) / 1.4 var(--e-font-sans);\n color: var(--e-muted);\n text-align: center;\n }\n\n .e-cal-foot {\n display: flex;\n align-items: center;\n justify-content: flex-start;\n gap: var(--e-space-2);\n margin-top: var(--e-space-2);\n padding-top: var(--e-space-2);\n border-top: var(--e-stroke-hair) solid var(--e-border);\n }\n\n .e-cal-foot--idle {\n visibility: hidden;\n }\n\n @media (prefers-reduced-motion: reduce) {\n .e-day,\n .e-cal-pick,\n .e-cal-cell,\n .e-cal-pick .e-icon {\n transition: none;\n }\n }\n\n @media (forced-colors: active) {\n .e-day--sel,\n .e-cal-cell.e-day--sel {\n forced-color-adjust: none;\n background: Highlight;\n color: HighlightText;\n }\n\n .e-day--mark::after {\n background: CanvasText;\n }\n\n .e-day--sel.e-day--mark::after {\n background: HighlightText;\n }\n }\n}\n</style>\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ECheckbox.js","names":["_sfc_main","ECheckbox_vue_vue_type_script_setup_true_lang_default","ECheckbox_default"],"sources":["../../../src/components/Checkbox/ECheckbox.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, ref, watch } from \"vue\";\nimport EFieldMessage from \"../Field/EFieldMessage.vue\";\nimport { useFieldAttrs } from \"../../composables/useFieldAttrs.js\";\nimport { useUid } from \"../../composables/useUid.js\";\nimport \"../../styles/base.css\";\nimport \"./choice.css\";\n\ndefineOptions({ inheritAttrs: false });\n\nconst props = defineProps<{\n /** What the person agrees to or turns on. */\n label: string;\n /** A line of detail under the label. */\n description?: string;\n /** A mixed state, such as select-all with some rows chosen. */\n indeterminate?: boolean;\n /** Hide the label visually but keep it for screen readers, for a table cell. No error text. */\n bare?: boolean;\n /** Disables the checkbox. */\n disabled?: boolean;\n /** The `required` attribute. */\n required?: boolean;\n /** What to fix. Shown under the row; sets `aria-invalid`. */\n error?: string;\n /** The name submitted with a form. */\n name?: string;\n /** The value submitted with a form when checked. */\n value?: string;\n /** The id of the input; the label points at it. @default generated */\n id?: string;\n}>();\n\n/** Whether it is checked. */\nconst model = defineModel<boolean>({ default: false });\n\nconst id = useUid(() => props.id);\nconst errorId = computed(() => `${id.value}-hint`);\nconst wrapped = computed(() => !!props.error && !props.bare);\nconst input = ref<HTMLInputElement | null>(null);\nconst attrs = useFieldAttrs();\n\nwatch(\n () => [props.indeterminate, input.value] as const,\n ([mixed, el]) => {\n if (el) el.indeterminate = !!mixed;\n },\n { flush: \"post\", immediate: true },\n);\n\nconst inputBind = () => ({\n id: id.value,\n type: \"checkbox\" as const,\n class: \"e-check\",\n checked: model.value,\n value: props.value,\n required: props.required,\n disabled: props.disabled,\n name: props.name,\n \"aria-invalid\": props.error ? (\"true\" as const) : undefined,\n ...attrs.input(wrapped.value ? errorId.value : undefined),\n});\nconst onChange = (e: Event) => (model.value = (e.target as HTMLInputElement).checked);\n\ndefineExpose({\n input,\n focus: () => input.value?.focus(),\n});\n</script>\n\n<template>\n <div v-if=\"wrapped\" class=\"e-choice-wrap\" :class=\"attrs.wrapper().class\" :style=\"attrs.wrapper().style\">\n <label class=\"e-choice\" :class=\"{ 'e-choice--disabled': disabled }\" :for=\"id\">\n <input ref=\"input\" v-bind=\"inputBind()\" @change=\"onChange\" />\n <span class=\"e-choice-text\">\n {{ label }}\n <span v-if=\"description\" class=\"e-choice-desc\">{{ description }}</span>\n </span>\n </label>\n <EFieldMessage :id=\"errorId\" :error=\"error\" />\n </div>\n <label\n v-else\n class=\"e-choice\"\n :class=\"[{ 'e-choice--bare': bare, 'e-choice--disabled': disabled }, attrs.wrapper().class]\"\n :style=\"attrs.wrapper().style\"\n :for=\"id\"\n >\n <input ref=\"input\" v-bind=\"inputBind()\" @change=\"onChange\" />\n <span v-if=\"bare\" class=\"e-sr\">{{ label }}</span>\n <span v-else class=\"e-choice-text\">\n {{ label }}\n <span v-if=\"description\" class=\"e-choice-desc\">{{ description }}</span>\n </span>\n </label>\n</template>\n\n<style>\n@layer e.controls {\n .e-choice--bare {\n min-height: 0;\n padding: 0;\n gap: 0;\n justify-content: center;\n }\n\n .e-choice-wrap {\n display: grid;\n }\n\n .e-choice-wrap > .e-field-error {\n margin-top: calc(var(--e-space-1) - var(--e-space-2) - var(--e-focus-gap));\n }\n}\n</style>\n"],"mappings":""}
1
+ {"version":3,"file":"ECheckbox.js","names":["_sfc_main","ECheckbox_vue_vue_type_script_setup_true_lang_default","ECheckbox_default"],"sources":["../../../src/components/Checkbox/ECheckbox.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, ref, watch } from \"vue\";\nimport EFieldMessage from \"../Field/EFieldMessage.vue\";\nimport { useFieldAttrs } from \"../../composables/useFieldAttrs.js\";\nimport { useUid } from \"../../composables/useUid.js\";\nimport \"../../styles/base.css\";\nimport \"./choice.css\";\n\ndefineOptions({ inheritAttrs: false });\n\nconst props = defineProps<{\n /** What the person agrees to or turns on. */\n label: string;\n /** A line of detail under the label. */\n description?: string;\n /** A mixed state, such as select-all with some rows chosen. */\n indeterminate?: boolean;\n /** Hide the label visually but keep it for screen readers, for a table cell. No error text. */\n bare?: boolean;\n /** Not focusable and not submitted. */\n disabled?: boolean;\n /** The `required` attribute. */\n required?: boolean;\n /** What to fix. Shown under the row; sets `aria-invalid`. */\n error?: string;\n /** The name submitted with a form. */\n name?: string;\n /** The value submitted with a form when checked. */\n value?: string;\n /** The id of the input; the label points at it. @default generated */\n id?: string;\n}>();\n\n/** Whether it is checked. */\nconst model = defineModel<boolean>({ default: false });\n\nconst id = useUid(() => props.id);\nconst errorId = computed(() => `${id.value}-hint`);\nconst wrapped = computed(() => !!props.error && !props.bare);\nconst input = ref<HTMLInputElement | null>(null);\nconst attrs = useFieldAttrs();\n\nwatch(\n () => [props.indeterminate, input.value] as const,\n ([mixed, el]) => {\n if (el) el.indeterminate = !!mixed;\n },\n { flush: \"post\", immediate: true },\n);\n\nconst inputBind = () => ({\n id: id.value,\n type: \"checkbox\" as const,\n class: \"e-check\",\n checked: model.value,\n value: props.value,\n required: props.required,\n disabled: props.disabled,\n name: props.name,\n \"aria-invalid\": props.error ? (\"true\" as const) : undefined,\n ...attrs.input(wrapped.value ? errorId.value : undefined),\n});\nconst onChange = (e: Event) => (model.value = (e.target as HTMLInputElement).checked);\n\ndefineExpose({\n input,\n focus: () => input.value?.focus(),\n});\n</script>\n\n<template>\n <div v-if=\"wrapped\" class=\"e-choice-wrap\" :class=\"attrs.wrapper().class\" :style=\"attrs.wrapper().style\">\n <label class=\"e-choice\" :class=\"{ 'e-choice--disabled': disabled }\" :for=\"id\">\n <input ref=\"input\" v-bind=\"inputBind()\" @change=\"onChange\" />\n <span class=\"e-choice-text\">\n {{ label }}\n <span v-if=\"description\" class=\"e-choice-desc\">{{ description }}</span>\n </span>\n </label>\n <EFieldMessage :id=\"errorId\" :error=\"error\" />\n </div>\n <label\n v-else\n class=\"e-choice\"\n :class=\"[{ 'e-choice--bare': bare, 'e-choice--disabled': disabled }, attrs.wrapper().class]\"\n :style=\"attrs.wrapper().style\"\n :for=\"id\"\n >\n <input ref=\"input\" v-bind=\"inputBind()\" @change=\"onChange\" />\n <span v-if=\"bare\" class=\"e-sr\">{{ label }}</span>\n <span v-else class=\"e-choice-text\">\n {{ label }}\n <span v-if=\"description\" class=\"e-choice-desc\">{{ description }}</span>\n </span>\n </label>\n</template>\n\n<style>\n@layer e.controls {\n .e-choice--bare {\n min-height: 0;\n padding: 0;\n gap: 0;\n justify-content: center;\n }\n\n .e-choice-wrap {\n display: grid;\n }\n\n .e-choice-wrap > .e-field-error {\n margin-top: calc(var(--e-space-1) - var(--e-space-2) - var(--e-focus-gap));\n }\n}\n</style>\n"],"mappings":""}
@@ -7,7 +7,7 @@ type __VLS_Props = {
7
7
  indeterminate?: boolean;
8
8
  /** Hide the label visually but keep it for screen readers, for a table cell. No error text. */
9
9
  bare?: boolean;
10
- /** Disables the checkbox. */
10
+ /** Not focusable and not submitted. */
11
11
  disabled?: boolean;
12
12
  /** The `required` attribute. */
13
13
  required?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"ECheckbox.vue_vue_type_script_setup_true_lang.js","names":["_useModel","_openBlock","_createElementBlock","_normalizeClass","_unref","_normalizeStyle","_createElementVNode","_mergeProps","_createTextVNode","_toDisplayString","_createCommentVNode","_createVNode","EFieldMessage","EFieldMessage_default","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","ECheckbox_vue_vue_type_script_setup_true_lang_default","\"modelValue\"","\"modelModifiers\"","__expose","props","__props","model","useModel","id","useUid","errorId","computed","wrapped","input","ref","attrs","useFieldAttrs","mixed","el","inputBind","onChange","openBlock","createElementBlock","normalizeClass","unref","normalizeStyle","createElementVNode","mergeProps","createTextVNode","toDisplayString","createCommentVNode","createVNode"],"sources":["../../../src/components/Checkbox/ECheckbox.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, ref, watch } from \"vue\";\nimport EFieldMessage from \"../Field/EFieldMessage.vue\";\nimport { useFieldAttrs } from \"../../composables/useFieldAttrs.js\";\nimport { useUid } from \"../../composables/useUid.js\";\nimport \"../../styles/base.css\";\nimport \"./choice.css\";\n\ndefineOptions({ inheritAttrs: false });\n\nconst props = defineProps<{\n /** What the person agrees to or turns on. */\n label: string;\n /** A line of detail under the label. */\n description?: string;\n /** A mixed state, such as select-all with some rows chosen. */\n indeterminate?: boolean;\n /** Hide the label visually but keep it for screen readers, for a table cell. No error text. */\n bare?: boolean;\n /** Disables the checkbox. */\n disabled?: boolean;\n /** The `required` attribute. */\n required?: boolean;\n /** What to fix. Shown under the row; sets `aria-invalid`. */\n error?: string;\n /** The name submitted with a form. */\n name?: string;\n /** The value submitted with a form when checked. */\n value?: string;\n /** The id of the input; the label points at it. @default generated */\n id?: string;\n}>();\n\n/** Whether it is checked. */\nconst model = defineModel<boolean>({ default: false });\n\nconst id = useUid(() => props.id);\nconst errorId = computed(() => `${id.value}-hint`);\nconst wrapped = computed(() => !!props.error && !props.bare);\nconst input = ref<HTMLInputElement | null>(null);\nconst attrs = useFieldAttrs();\n\nwatch(\n () => [props.indeterminate, input.value] as const,\n ([mixed, el]) => {\n if (el) el.indeterminate = !!mixed;\n },\n { flush: \"post\", immediate: true },\n);\n\nconst inputBind = () => ({\n id: id.value,\n type: \"checkbox\" as const,\n class: \"e-check\",\n checked: model.value,\n value: props.value,\n required: props.required,\n disabled: props.disabled,\n name: props.name,\n \"aria-invalid\": props.error ? (\"true\" as const) : undefined,\n ...attrs.input(wrapped.value ? errorId.value : undefined),\n});\nconst onChange = (e: Event) => (model.value = (e.target as HTMLInputElement).checked);\n\ndefineExpose({\n input,\n focus: () => input.value?.focus(),\n});\n</script>\n\n<template>\n <div v-if=\"wrapped\" class=\"e-choice-wrap\" :class=\"attrs.wrapper().class\" :style=\"attrs.wrapper().style\">\n <label class=\"e-choice\" :class=\"{ 'e-choice--disabled': disabled }\" :for=\"id\">\n <input ref=\"input\" v-bind=\"inputBind()\" @change=\"onChange\" />\n <span class=\"e-choice-text\">\n {{ label }}\n <span v-if=\"description\" class=\"e-choice-desc\">{{ description }}</span>\n </span>\n </label>\n <EFieldMessage :id=\"errorId\" :error=\"error\" />\n </div>\n <label\n v-else\n class=\"e-choice\"\n :class=\"[{ 'e-choice--bare': bare, 'e-choice--disabled': disabled }, attrs.wrapper().class]\"\n :style=\"attrs.wrapper().style\"\n :for=\"id\"\n >\n <input ref=\"input\" v-bind=\"inputBind()\" @change=\"onChange\" />\n <span v-if=\"bare\" class=\"e-sr\">{{ label }}</span>\n <span v-else class=\"e-choice-text\">\n {{ label }}\n <span v-if=\"description\" class=\"e-choice-desc\">{{ description }}</span>\n </span>\n </label>\n</template>\n\n<style>\n@layer e.controls {\n .e-choice--bare {\n min-height: 0;\n padding: 0;\n gap: 0;\n justify-content: center;\n }\n\n .e-choice-wrap {\n display: grid;\n }\n\n .e-choice-wrap > .e-field-error {\n margin-top: calc(var(--e-space-1) - var(--e-space-2) - var(--e-focus-gap));\n }\n}\n</style>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAUA,IAAMyB,IAAQC,GAwBRC,IAAQ3B,EAAoB0B,GAAA,YAAmB,GAE/CG,IAAKC,QAAaL,EAAM,EAAE,GAC1BM,IAAUC,QAAe,GAAGH,EAAG,MAAM,MAAM,GAC3CI,IAAUD,QAAe,CAAC,CAACP,EAAM,SAAS,CAACA,EAAM,IAAI,GACrDS,IAAQC,EAA6B,IAAI,GACzCC,IAAQC,EAAc;EAE5B,QACQ,CAACZ,EAAM,eAAeS,EAAM,KAAK,IACtC,CAACI,GAAOC,OAAQ;GACf,AAAIA,MAAI,EAAG,gBAAgB,CAAC,CAACD;EAC/B,GACA;GAAE,OAAO;GAAQ,WAAW;EAAK,CACnC;EAEA,IAAME,WAAmB;GACvB,IAAIX,EAAG;GACP,MAAM;GACN,OAAO;GACP,SAASF,EAAM;GACf,OAAOF,EAAM;GACb,UAAUA,EAAM;GAChB,UAAUA,EAAM;GAChB,MAAMA,EAAM;GACZ,gBAAgBA,EAAM,QAAS,SAAmB,KAAA;GAClD,GAAGW,EAAM,MAAMH,EAAQ,QAAQF,EAAQ,QAAQ,KAAA,CAAS;EAC1D,IACMU,KAAY,MAAc,EAAM,QAAS,EAAE,OAA4B;E,OAE7EjB,EAAa;GACX;GACA,aAAaU,EAAM,OAAO,MAAM;EAClC,CAAC,I,SAIYD,EAAA,SAAXhC,EAAA,GAAAC,EASM,OAAA;;GATc,OAAKC,EAAA,CAAC,iBAAwBC,EAAAgC,CAAA,CAAK,CAAC,QAAO,CAAA,CAAG,KAAK,CAAA;GAAG,OAAK/B,EAAED,EAAAgC,CAAA,CAAK,CAAC,QAAO,CAAA,CAAG,KAAK;E,IACpG9B,EAMQ,SAAA;GAND,OAAKH,EAAA,CAAC,YAAU,EAAA,sBAAiCuB,EAAA,SAAQ,CAAA,CAAA;GAAK,KAAKtB,EAAAyB,CAAA;E,IACxEvB,EAA6D,SAA7DC,EAA6D;GAAlD,SAAA;GAAJ,KAAI2B;EAAgB,GAAAM,EAAS,GAAA,EAAa,YAAQ,CAAA,GAAA,MAAA,EAAA,GACzDlC,EAGO,QAHPS,GAGO,CAFFP,EAAAC,EAAAiB,EAAA,KAAK,IAAG,KACX,CAAA,GAAYA,EAAA,eAAZzB,EAAA,GAAAC,EAAuE,QAAvEc,GAAuEP,EAArBiB,EAAA,WAAW,GAAA,CAAA,K,sBAGjEf,EAA8CC,GAAA;GAA9B,IAAImB,EAAA;GAAU,OAAOL,EAAA;E,sCAEvCzB,EAAA,GAAAC,EAaQ,SAAA;;GAXN,OAAKC,EAAA,CAAC,YAAU,CAAA;IAAA,kBACauB,EAAA;IAAI,sBAAwBA,EAAA;GAAQ,GAAItB,EAAAgC,CAAA,CAAK,CAAC,QAAO,CAAA,CAAG,KAAK,CAAA,CAAA;GACzF,OAAK/B,EAAED,EAAAgC,CAAA,CAAK,CAAC,QAAO,CAAA,CAAG,KAAK;GAC5B,KAAKhC,EAAAyB,CAAA;E,IAENvB,EAA6D,SAA7DC,EAA6D;GAAlD,SAAA;GAAJ,KAAI2B;EAAgB,GAAAM,EAAS,GAAA,EAAa,YAAQ,CAAA,GAAA,MAAA,EAAA,GAC7Cd,EAAA,QAAZzB,EAAA,GAAAC,EAAiD,QAAjDgB,GAAiDT,EAAfiB,EAAA,KAAK,GAAA,CAAA,MACvCzB,EAAA,GAAAC,EAGO,QAHPiB,GAGO,CAFFX,EAAAC,EAAAiB,EAAA,KAAK,IAAG,KACX,CAAA,GAAYA,EAAA,eAAZzB,EAAA,GAAAC,EAAuE,QAAvEkB,GAAuEX,EAArBiB,EAAA,WAAW,GAAA,CAAA,K"}
1
+ {"version":3,"file":"ECheckbox.vue_vue_type_script_setup_true_lang.js","names":["_useModel","_openBlock","_createElementBlock","_normalizeClass","_unref","_normalizeStyle","_createElementVNode","_mergeProps","_createTextVNode","_toDisplayString","_createCommentVNode","_createVNode","EFieldMessage","EFieldMessage_default","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","ECheckbox_vue_vue_type_script_setup_true_lang_default","\"modelValue\"","\"modelModifiers\"","__expose","props","__props","model","useModel","id","useUid","errorId","computed","wrapped","input","ref","attrs","useFieldAttrs","mixed","el","inputBind","onChange","openBlock","createElementBlock","normalizeClass","unref","normalizeStyle","createElementVNode","mergeProps","createTextVNode","toDisplayString","createCommentVNode","createVNode"],"sources":["../../../src/components/Checkbox/ECheckbox.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, ref, watch } from \"vue\";\nimport EFieldMessage from \"../Field/EFieldMessage.vue\";\nimport { useFieldAttrs } from \"../../composables/useFieldAttrs.js\";\nimport { useUid } from \"../../composables/useUid.js\";\nimport \"../../styles/base.css\";\nimport \"./choice.css\";\n\ndefineOptions({ inheritAttrs: false });\n\nconst props = defineProps<{\n /** What the person agrees to or turns on. */\n label: string;\n /** A line of detail under the label. */\n description?: string;\n /** A mixed state, such as select-all with some rows chosen. */\n indeterminate?: boolean;\n /** Hide the label visually but keep it for screen readers, for a table cell. No error text. */\n bare?: boolean;\n /** Not focusable and not submitted. */\n disabled?: boolean;\n /** The `required` attribute. */\n required?: boolean;\n /** What to fix. Shown under the row; sets `aria-invalid`. */\n error?: string;\n /** The name submitted with a form. */\n name?: string;\n /** The value submitted with a form when checked. */\n value?: string;\n /** The id of the input; the label points at it. @default generated */\n id?: string;\n}>();\n\n/** Whether it is checked. */\nconst model = defineModel<boolean>({ default: false });\n\nconst id = useUid(() => props.id);\nconst errorId = computed(() => `${id.value}-hint`);\nconst wrapped = computed(() => !!props.error && !props.bare);\nconst input = ref<HTMLInputElement | null>(null);\nconst attrs = useFieldAttrs();\n\nwatch(\n () => [props.indeterminate, input.value] as const,\n ([mixed, el]) => {\n if (el) el.indeterminate = !!mixed;\n },\n { flush: \"post\", immediate: true },\n);\n\nconst inputBind = () => ({\n id: id.value,\n type: \"checkbox\" as const,\n class: \"e-check\",\n checked: model.value,\n value: props.value,\n required: props.required,\n disabled: props.disabled,\n name: props.name,\n \"aria-invalid\": props.error ? (\"true\" as const) : undefined,\n ...attrs.input(wrapped.value ? errorId.value : undefined),\n});\nconst onChange = (e: Event) => (model.value = (e.target as HTMLInputElement).checked);\n\ndefineExpose({\n input,\n focus: () => input.value?.focus(),\n});\n</script>\n\n<template>\n <div v-if=\"wrapped\" class=\"e-choice-wrap\" :class=\"attrs.wrapper().class\" :style=\"attrs.wrapper().style\">\n <label class=\"e-choice\" :class=\"{ 'e-choice--disabled': disabled }\" :for=\"id\">\n <input ref=\"input\" v-bind=\"inputBind()\" @change=\"onChange\" />\n <span class=\"e-choice-text\">\n {{ label }}\n <span v-if=\"description\" class=\"e-choice-desc\">{{ description }}</span>\n </span>\n </label>\n <EFieldMessage :id=\"errorId\" :error=\"error\" />\n </div>\n <label\n v-else\n class=\"e-choice\"\n :class=\"[{ 'e-choice--bare': bare, 'e-choice--disabled': disabled }, attrs.wrapper().class]\"\n :style=\"attrs.wrapper().style\"\n :for=\"id\"\n >\n <input ref=\"input\" v-bind=\"inputBind()\" @change=\"onChange\" />\n <span v-if=\"bare\" class=\"e-sr\">{{ label }}</span>\n <span v-else class=\"e-choice-text\">\n {{ label }}\n <span v-if=\"description\" class=\"e-choice-desc\">{{ description }}</span>\n </span>\n </label>\n</template>\n\n<style>\n@layer e.controls {\n .e-choice--bare {\n min-height: 0;\n padding: 0;\n gap: 0;\n justify-content: center;\n }\n\n .e-choice-wrap {\n display: grid;\n }\n\n .e-choice-wrap > .e-field-error {\n margin-top: calc(var(--e-space-1) - var(--e-space-2) - var(--e-focus-gap));\n }\n}\n</style>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAUA,IAAMyB,IAAQC,GAwBRC,IAAQ3B,EAAoB0B,GAAA,YAAmB,GAE/CG,IAAKC,QAAaL,EAAM,EAAE,GAC1BM,IAAUC,QAAe,GAAGH,EAAG,MAAM,MAAM,GAC3CI,IAAUD,QAAe,CAAC,CAACP,EAAM,SAAS,CAACA,EAAM,IAAI,GACrDS,IAAQC,EAA6B,IAAI,GACzCC,IAAQC,EAAc;EAE5B,QACQ,CAACZ,EAAM,eAAeS,EAAM,KAAK,IACtC,CAACI,GAAOC,OAAQ;GACf,AAAIA,MAAI,EAAG,gBAAgB,CAAC,CAACD;EAC/B,GACA;GAAE,OAAO;GAAQ,WAAW;EAAK,CACnC;EAEA,IAAME,WAAmB;GACvB,IAAIX,EAAG;GACP,MAAM;GACN,OAAO;GACP,SAASF,EAAM;GACf,OAAOF,EAAM;GACb,UAAUA,EAAM;GAChB,UAAUA,EAAM;GAChB,MAAMA,EAAM;GACZ,gBAAgBA,EAAM,QAAS,SAAmB,KAAA;GAClD,GAAGW,EAAM,MAAMH,EAAQ,QAAQF,EAAQ,QAAQ,KAAA,CAAS;EAC1D,IACMU,KAAY,MAAc,EAAM,QAAS,EAAE,OAA4B;E,OAE7EjB,EAAa;GACX;GACA,aAAaU,EAAM,OAAO,MAAM;EAClC,CAAC,I,SAIYD,EAAA,SAAXhC,EAAA,GAAAC,EASM,OAAA;;GATc,OAAKC,EAAA,CAAC,iBAAwBC,EAAAgC,CAAA,CAAK,CAAC,QAAO,CAAA,CAAG,KAAK,CAAA;GAAG,OAAK/B,EAAED,EAAAgC,CAAA,CAAK,CAAC,QAAO,CAAA,CAAG,KAAK;E,IACpG9B,EAMQ,SAAA;GAND,OAAKH,EAAA,CAAC,YAAU,EAAA,sBAAiCuB,EAAA,SAAQ,CAAA,CAAA;GAAK,KAAKtB,EAAAyB,CAAA;E,IACxEvB,EAA6D,SAA7DC,EAA6D;GAAlD,SAAA;GAAJ,KAAI2B;EAAgB,GAAAM,EAAS,GAAA,EAAa,YAAQ,CAAA,GAAA,MAAA,EAAA,GACzDlC,EAGO,QAHPS,GAGO,CAFFP,EAAAC,EAAAiB,EAAA,KAAK,IAAG,KACX,CAAA,GAAYA,EAAA,eAAZzB,EAAA,GAAAC,EAAuE,QAAvEc,GAAuEP,EAArBiB,EAAA,WAAW,GAAA,CAAA,K,sBAGjEf,EAA8CC,GAAA;GAA9B,IAAImB,EAAA;GAAU,OAAOL,EAAA;E,sCAEvCzB,EAAA,GAAAC,EAaQ,SAAA;;GAXN,OAAKC,EAAA,CAAC,YAAU,CAAA;IAAA,kBACauB,EAAA;IAAI,sBAAwBA,EAAA;GAAQ,GAAItB,EAAAgC,CAAA,CAAK,CAAC,QAAO,CAAA,CAAG,KAAK,CAAA,CAAA;GACzF,OAAK/B,EAAED,EAAAgC,CAAA,CAAK,CAAC,QAAO,CAAA,CAAG,KAAK;GAC5B,KAAKhC,EAAAyB,CAAA;E,IAENvB,EAA6D,SAA7DC,EAA6D;GAAlD,SAAA;GAAJ,KAAI2B;EAAgB,GAAAM,EAAS,GAAA,EAAa,YAAQ,CAAA,GAAA,MAAA,EAAA,GAC7Cd,EAAA,QAAZzB,EAAA,GAAAC,EAAiD,QAAjDgB,GAAiDT,EAAfiB,EAAA,KAAK,GAAA,CAAA,MACvCzB,EAAA,GAAAC,EAGO,QAHPiB,GAGO,CAFFX,EAAAC,EAAAiB,EAAA,KAAK,IAAG,KACX,CAAA,GAAYA,EAAA,eAAZzB,EAAA,GAAAC,EAAuE,QAAvEkB,GAAuEX,EAArBiB,EAAA,WAAW,GAAA,CAAA,K"}
@@ -1 +1 @@
1
- {"version":3,"file":"EComboboxBase.js","names":["_sfc_main","EComboboxBase_vue_vue_type_script_setup_true_lang_default","EComboboxBase_default"],"sources":["../../../src/components/Combobox/EComboboxBase.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, h, nextTick, onMounted, ref, watch, type FunctionalComponent } from \"vue\";\nimport {\n ComboboxAnchor,\n ComboboxContent,\n ComboboxInput,\n ComboboxPortal,\n ComboboxRoot,\n ComboboxTrigger,\n ComboboxViewport,\n} from \"reka-ui\";\nimport EField from \"../Field/EField.vue\";\nimport EIcon from \"../Icon/EIcon.vue\";\nimport ESpinner from \"../Spinner/ESpinner.vue\";\nimport EComboboxOption from \"./EComboboxOption.vue\";\nimport { normalizeOptions, sectionOptions } from \"../Select/options.js\";\nimport type { EComboboxProps } from \"./types.js\";\nimport { useMessages, usePortalTarget } from \"../../config.js\";\nimport { useFieldAttrs } from \"../../composables/useFieldAttrs.js\";\nimport { useUid } from \"../../composables/useUid.js\";\nimport \"../../styles/base.css\";\nimport \"../TextField/input.css\";\nimport \"../Select/panel.css\";\nimport \"./combo.css\";\n\ndefineOptions({ inheritAttrs: false });\n\nconst props = withDefaults(defineProps<EComboboxProps>(), {\n clearable: true,\n});\n\nconst emit = defineEmits<{\n /** The text in the input changed, by typing or by choosing. Use it to fetch options from a server. */\n inputChange: [text: string];\n}>();\n\nconst model = defineModel<string | string[]>();\n\nconst t = useMessages();\nconst portal = usePortalTarget();\nconst attrs = useFieldAttrs();\nconst groupId = useUid();\nconst bareId = useUid(() => props.id);\n\nconst Bare: FunctionalComponent = (_, { slots }) =>\n h(\"div\", attrs.wrapper(), slots.default?.({ id: bareId.value, ariaInvalid: undefined, ariaDescribedby: undefined }));\nconst frame = computed(() =>\n props.bare\n ? {}\n : {\n id: props.id,\n label: props.label,\n hideLabel: props.hideLabel,\n hint: props.hint,\n error: props.error,\n required: props.required,\n optional: props.optional,\n },\n);\nconst listName = computed(() => (props.bare ? (props.ariaLabel ?? props.label) : props.label));\n\nconst multiple = computed(() => props.multiple);\n// Free text is for one value; with `multiple` it is ignored.\nconst free = computed(() => props.freeform && !props.multiple);\nconst all = computed(() => normalizeOptions(props.options));\nconst values = computed<string[]>(() => (multiple.value && Array.isArray(model.value) ? model.value : []));\nconst single = computed(() => (typeof model.value === \"string\" ? model.value : \"\"));\nconst rootValue = computed(() => (multiple.value ? values.value : single.value));\n\nfunction labelOf(v: string): string {\n return all.value.find((o) => o.value === v)?.label ?? (free.value ? v : \"\");\n}\nconst resting = () => (multiple.value ? \"\" : labelOf(single.value));\n\nconst text = ref(resting());\nconst typing = ref(false);\nconst wantOpen = defineModel<boolean>(\"open\", { default: false });\nconst anchor = ref<{ $el: HTMLElement } | null>(null);\nconst query = computed(() => (typing.value ? text.value.trim().toLowerCase() : \"\"));\n\nconst shown = computed(() => {\n const q = query.value;\n if (props.filter) return all.value.filter((o) => props.filter!(o, q));\n return all.value.filter(\n (o) => !q || o.label.toLowerCase().includes(q) || (o.description ?? \"\").toLowerCase().includes(q),\n );\n});\nconst sections = computed(() => sectionOptions(shown.value));\nconst hasList = computed(() => shown.value.length > 0 || !!props.loading || !free.value);\nconst open = computed(() => wantOpen.value && hasList.value && !props.disabled);\nconst announce = computed(() =>\n open.value && !shown.value.length ? (props.loading ? t(\"searching\") : props.emptyText || t(\"noMatches\")) : \"\",\n);\nconst hasValue = computed(() => (multiple.value ? values.value.length > 0 : !!text.value));\n\nwatch(rootValue, () => {\n const rest = resting();\n if (rest !== text.value) {\n text.value = rest;\n typing.value = false;\n }\n});\nwatch(all, () => {\n if (!typing.value && !open.value) text.value = resting();\n});\n\nconst listId = ref<string | undefined>();\nconst content = ref<{ $el: HTMLElement } | null>(null);\nonMounted(() => {\n if (!open.value) return;\n let tries = 0;\n const read = () => {\n listId.value = content.value?.$el?.id || undefined;\n if (!listId.value && tries++ < 10) requestAnimationFrame(read);\n };\n void nextTick(read);\n});\n\nconst inputEl = () => anchor.value?.$el?.querySelector(\"input\") ?? null;\nconst focusInput = () => inputEl()?.focus();\n\nfunction isSelected(value: string): boolean {\n return multiple.value ? values.value.includes(value) : free.value ? single.value === value : single.value === value;\n}\nconst itemValue = (o: { value: string; label: string }) => (free.value ? o.label : o.value);\n\nfunction onPick(v: unknown) {\n typing.value = false;\n if (multiple.value) {\n model.value = Array.isArray(v) ? (v as string[]) : [];\n text.value = \"\";\n emit(\"inputChange\", \"\");\n return;\n }\n const next = typeof v === \"string\" ? v : \"\";\n model.value = next;\n text.value = free.value ? next : labelOf(next);\n emit(\"inputChange\", text.value);\n}\n\nfunction onInput(e: Event) {\n const v = (e.target as HTMLInputElement).value;\n text.value = v;\n typing.value = true;\n wantOpen.value = true;\n emit(\"inputChange\", v);\n if (free.value) model.value = v;\n}\n\nfunction remove(v: string) {\n model.value = values.value.filter((x) => x !== v);\n}\n\nfunction clear() {\n model.value = multiple.value ? [] : \"\";\n text.value = \"\";\n typing.value = false;\n emit(\"inputChange\", \"\");\n focusInput();\n}\n\nfunction onKeydown(e: KeyboardEvent) {\n if (e.key === \"Escape\" && !open.value && text.value) {\n e.preventDefault();\n clear();\n } else if (e.key === \"Backspace\" && multiple.value && !text.value && values.value.length) {\n remove(values.value[values.value.length - 1]!);\n }\n}\n\nfunction keepCaretKeys(e: KeyboardEvent) {\n if (e.key === \"Home\" || e.key === \"End\") e.stopImmediatePropagation();\n}\n\nfunction onBlur(e: FocusEvent) {\n const next = e.relatedTarget as Element | null;\n if (next && (anchor.value?.$el?.contains(next) || next.closest?.(\".e-popover\"))) return;\n wantOpen.value = false;\n typing.value = false;\n if (!free.value) text.value = resting();\n}\n\nfunction onWrapDown(e: MouseEvent) {\n if (e.target === e.currentTarget && !props.disabled) {\n e.preventDefault();\n focusInput();\n }\n}\n\ntype FieldSlot = { id: string; ariaInvalid: \"true\" | undefined; ariaDescribedby: string | undefined };\nfunction inputBind(field: FieldSlot) {\n return {\n id: field.id,\n required: props.required && !(multiple.value && values.value.length) ? true : undefined,\n placeholder: multiple.value && values.value.length ? \"\" : props.placeholder,\n \"aria-invalid\": field.ariaInvalid,\n \"aria-label\": props.bare ? listName.value : undefined,\n autocomplete: \"off\",\n ...(listId.value ? { \"aria-controls\": listId.value } : {}),\n ...(shown.value.length ? {} : { \"aria-activedescendant\": undefined }),\n ...attrs.input(field.ariaDescribedby),\n };\n}\n\ndefineExpose({\n input: computed(() => inputEl()),\n focus: focusInput,\n});\n</script>\n\n<template>\n <component :is=\"bare ? Bare : EField\" v-bind=\"{ ...attrs.wrapper(), ...frame }\">\n <template #default=\"field\">\n <ComboboxRoot\n class=\"e-combo-root\"\n :model-value=\"rootValue\"\n :multiple=\"multiple\"\n :open=\"open\"\n :disabled=\"disabled\"\n ignore-filter\n @update:model-value=\"onPick\"\n @update:open=\"wantOpen = $event\"\n >\n <ComboboxAnchor\n ref=\"anchor\"\n class=\"e-input-wrap e-combo\"\n :class=\"{ 'e-combo--multi': multiple }\"\n :data-invalid=\"error && !bare ? '' : undefined\"\n :data-disabled=\"disabled ? '' : undefined\"\n @mousedown=\"onWrapDown\"\n @focusout=\"onBlur\"\n >\n <div class=\"e-combo-main\">\n <template v-if=\"multiple\">\n <span v-for=\"v in values\" :key=\"v\" class=\"e-tag\">\n {{ labelOf(v) }}\n <button\n type=\"button\"\n class=\"e-tag-x\"\n :aria-label=\"t('removeItem', { label: labelOf(v) })\"\n :disabled=\"disabled\"\n @click=\"remove(v)\"\n >\n <EIcon name=\"x\" small />\n </button>\n </span>\n </template>\n <ComboboxInput\n class=\"e-input e-combo-input\"\n :model-value=\"text\"\n :display-value=\"(v: unknown) => (typeof v === 'string' ? (free ? v : labelOf(v)) : '')\"\n :disabled=\"disabled\"\n v-bind=\"inputBind(field)\"\n @update:model-value=\"text = $event\"\n @input=\"onInput\"\n @keydown=\"onKeydown\"\n @keydown.capture=\"keepCaretKeys\"\n />\n </div>\n <template v-if=\"name\">\n <input v-for=\"(v, k) in multiple ? values : [single]\" :key=\"k\" type=\"hidden\" :name=\"name\" :value=\"v\" />\n </template>\n <div class=\"e-combo-tail\">\n <button\n v-if=\"hasValue && clearable && !disabled\"\n type=\"button\"\n class=\"e-combo-btn\"\n :aria-label=\"t('clear')\"\n @mousedown.prevent\n @click=\"clear\"\n >\n <EIcon name=\"x\" />\n </button>\n <ComboboxTrigger\n v-if=\"!free\"\n class=\"e-combo-btn\"\n :aria-label=\"t('showOptions')\"\n :disabled=\"disabled\"\n @mousedown.prevent\n >\n <EIcon name=\"chevron-down\" bold />\n </ComboboxTrigger>\n </div>\n </ComboboxAnchor>\n <span class=\"e-sr\" role=\"status\">{{ announce }}</span>\n <ComboboxPortal :to=\"portal\">\n <ComboboxContent\n ref=\"content\"\n position=\"popper\"\n align=\"start\"\n :side-offset=\"6\"\n :collision-padding=\"8\"\n class=\"e-popover e-listpanel e-root\"\n :aria-label=\"listName\"\n :aria-busy=\"loading ? 'true' : undefined\"\n >\n <ComboboxViewport>\n <template v-if=\"shown.length\">\n <template v-for=\"(section, i) in sections\" :key=\"i\">\n <div v-if=\"section.group\" class=\"e-opt-set\" role=\"group\" :aria-labelledby=\"`${groupId}-g${i}`\">\n <div :id=\"`${groupId}-g${i}`\" class=\"e-opt-group\">{{ section.group }}</div>\n <EComboboxOption\n v-for=\"o in section.options\"\n :key=\"o.value\"\n :option=\"o\"\n :value=\"itemValue(o)\"\n :selected=\"isSelected(itemValue(o))\"\n :query=\"query\"\n />\n </div>\n <template v-else>\n <EComboboxOption\n v-for=\"o in section.options\"\n :key=\"o.value\"\n :option=\"o\"\n :value=\"itemValue(o)\"\n :selected=\"isSelected(itemValue(o))\"\n :query=\"query\"\n />\n </template>\n </template>\n </template>\n <div v-else class=\"e-opt-status\" role=\"option\" aria-disabled=\"true\" aria-selected=\"false\">\n <ESpinner v-if=\"loading\" :label=\"t('searching')\" />\n <template v-else>{{ emptyText || t(\"noMatches\") }}</template>\n </div>\n </ComboboxViewport>\n </ComboboxContent>\n </ComboboxPortal>\n </ComboboxRoot>\n </template>\n </component>\n</template>\n\n<style>\n@layer e.controls {\n .e-combo-main {\n display: flex;\n flex: 1;\n flex-wrap: wrap;\n align-items: center;\n align-self: stretch;\n gap: var(--e-space-1);\n min-width: 0;\n }\n\n .e-combo-tail {\n display: flex;\n flex: none;\n align-items: center;\n align-self: center;\n }\n\n .e-combo--multi {\n padding: 3px var(--e-space-1) 3px var(--e-space-2);\n gap: var(--e-space-1);\n }\n\n .e-combo--multi .e-input {\n height: calc(var(--e-control-height) - 9px);\n align-self: center;\n padding-inline: var(--e-space-2);\n }\n\n .e-tag {\n display: inline-flex;\n align-items: center;\n gap: var(--e-space-1);\n height: var(--e-space-8);\n padding: 0 var(--e-space-1) 0 var(--e-space-3);\n border-radius: var(--e-radius-pill);\n background: var(--e-surface-tint);\n box-shadow: inset 0 0 0 var(--e-stroke-card) var(--e-primary);\n color: var(--e-ink);\n font: 500 var(--e-text-sm)/1 var(--e-font-sans);\n }\n\n .e-tag-x::after {\n content: \"\";\n position: absolute;\n inset: calc((var(--e-tap) - var(--e-space-6)) / -2);\n }\n\n .e-tag-x {\n position: relative;\n display: inline-grid;\n place-items: center;\n width: var(--e-space-6);\n height: var(--e-space-6);\n padding: 0;\n border: 0;\n border-radius: 50%;\n background: transparent;\n color: var(--e-primary);\n cursor: pointer;\n }\n\n .e-tag-x:hover {\n background: var(--e-wash-hover);\n box-shadow: inset 0 0 0 var(--e-stroke-card) var(--e-primary);\n }\n\n .e-tag-x:active {\n background: var(--e-wash-press);\n }\n\n .e-tag-x:focus-visible {\n outline: var(--e-stroke-focus) solid var(--e-focus-ring);\n outline-offset: var(--e-focus-gap);\n }\n\n @media (forced-colors: active) {\n .e-tag {\n outline: var(--e-stroke-card) solid CanvasText;\n }\n }\n}\n</style>\n"],"mappings":""}
1
+ {"version":3,"file":"EComboboxBase.js","names":["_sfc_main","EComboboxBase_vue_vue_type_script_setup_true_lang_default","EComboboxBase_default"],"sources":["../../../src/components/Combobox/EComboboxBase.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, h, nextTick, onMounted, ref, watch, type FunctionalComponent } from \"vue\";\nimport {\n ComboboxAnchor,\n ComboboxContent,\n ComboboxInput,\n ComboboxPortal,\n ComboboxRoot,\n ComboboxTrigger,\n ComboboxViewport,\n} from \"reka-ui\";\nimport EField from \"../Field/EField.vue\";\nimport EIcon from \"../Icon/EIcon.vue\";\nimport ESpinner from \"../Spinner/ESpinner.vue\";\nimport EComboboxOption from \"./EComboboxOption.vue\";\nimport { normalizeOptions, sectionOptions } from \"../Select/options.js\";\nimport type { EComboboxProps } from \"./types.js\";\nimport { useMessages, usePortalTarget } from \"../../config.js\";\nimport { useFieldAttrs } from \"../../composables/useFieldAttrs.js\";\nimport { useUid } from \"../../composables/useUid.js\";\nimport \"../../styles/base.css\";\nimport \"../TextField/input.css\";\nimport \"../Select/panel.css\";\nimport \"./combo.css\";\n\ndefineOptions({ inheritAttrs: false });\n\nconst props = withDefaults(defineProps<EComboboxProps>(), {\n clearable: true,\n});\n\nconst emit = defineEmits<{\n /** The text in the input changed, by typing or by choosing. Use it to fetch options from a server. */\n inputChange: [text: string];\n}>();\n\nconst model = defineModel<string | string[]>();\n\nconst t = useMessages();\nconst portal = usePortalTarget();\nconst attrs = useFieldAttrs();\nconst groupId = useUid();\nconst bareId = useUid(() => props.id);\n\nconst Bare: FunctionalComponent = (_, { slots }) =>\n h(\"div\", attrs.wrapper(), slots.default?.({ id: bareId.value, ariaInvalid: undefined, ariaDescribedby: undefined }));\nconst frame = computed(() =>\n props.bare\n ? {}\n : {\n id: props.id,\n label: props.label,\n hideLabel: props.hideLabel,\n hint: props.hint,\n error: props.error,\n required: props.required,\n optional: props.optional,\n },\n);\nconst listName = computed(() => (props.bare ? (props.ariaLabel ?? props.label) : props.label));\n\nconst multiple = computed(() => props.multiple);\n// Free text is for one value; with `multiple` it is ignored.\nconst free = computed(() => props.freeform && !props.multiple);\nconst all = computed(() => normalizeOptions(props.options));\nconst values = computed<string[]>(() => (multiple.value && Array.isArray(model.value) ? model.value : []));\nconst single = computed(() => (typeof model.value === \"string\" ? model.value : \"\"));\nconst rootValue = computed(() => (multiple.value ? values.value : single.value));\n\nfunction labelOf(v: string): string {\n return all.value.find((o) => o.value === v)?.label ?? (free.value ? v : \"\");\n}\nconst resting = () => (multiple.value ? \"\" : labelOf(single.value));\n\nconst text = ref(resting());\nconst typing = ref(false);\nconst wantOpen = defineModel<boolean>(\"open\", { default: false });\nconst anchor = ref<{ $el: HTMLElement } | null>(null);\nconst query = computed(() => (typing.value ? text.value.trim().toLowerCase() : \"\"));\n\nconst shown = computed(() => {\n const q = query.value;\n if (props.filter) return all.value.filter((o) => props.filter!(o, q));\n return all.value.filter(\n (o) => !q || o.label.toLowerCase().includes(q) || (o.description ?? \"\").toLowerCase().includes(q),\n );\n});\nconst sections = computed(() => sectionOptions(shown.value));\nconst hasList = computed(() => shown.value.length > 0 || !!props.loading || !free.value);\nconst open = computed(() => wantOpen.value && hasList.value && !props.disabled);\nconst announce = computed(() =>\n open.value && !shown.value.length ? (props.loading ? t(\"searching\") : props.emptyText || t(\"noMatches\")) : \"\",\n);\nconst hasValue = computed(() => (multiple.value ? values.value.length > 0 : !!text.value));\n\nwatch(rootValue, () => {\n const rest = resting();\n if (rest !== text.value) {\n text.value = rest;\n typing.value = false;\n }\n});\nwatch(all, () => {\n if (!typing.value && !open.value) text.value = resting();\n});\n\nconst listId = ref<string | undefined>();\nconst content = ref<{ $el: HTMLElement } | null>(null);\nonMounted(() => {\n if (!open.value) return;\n let tries = 0;\n const read = () => {\n listId.value = content.value?.$el?.id || undefined;\n if (!listId.value && tries++ < 10) requestAnimationFrame(read);\n };\n void nextTick(read);\n});\n\nconst inputEl = () => anchor.value?.$el?.querySelector(\"input\") ?? null;\nconst focusInput = () => inputEl()?.focus();\n\nfunction isSelected(value: string): boolean {\n return multiple.value ? values.value.includes(value) : free.value ? single.value === value : single.value === value;\n}\nconst itemValue = (o: { value: string; label: string }) => (free.value ? o.label : o.value);\n\nfunction onPick(v: unknown) {\n typing.value = false;\n if (multiple.value) {\n model.value = Array.isArray(v) ? (v as string[]) : [];\n text.value = \"\";\n emit(\"inputChange\", \"\");\n return;\n }\n const next = typeof v === \"string\" ? v : \"\";\n model.value = next;\n text.value = free.value ? next : labelOf(next);\n emit(\"inputChange\", text.value);\n}\n\nfunction onInput(e: Event) {\n const v = (e.target as HTMLInputElement).value;\n text.value = v;\n typing.value = true;\n wantOpen.value = true;\n emit(\"inputChange\", v);\n if (free.value) model.value = v;\n}\n\nfunction remove(v: string) {\n model.value = values.value.filter((x) => x !== v);\n}\n\nfunction clear() {\n model.value = multiple.value ? [] : \"\";\n text.value = \"\";\n typing.value = false;\n emit(\"inputChange\", \"\");\n focusInput();\n}\n\nfunction onKeydown(e: KeyboardEvent) {\n if (e.key === \"Escape\" && !open.value && text.value) {\n e.preventDefault();\n clear();\n } else if (e.key === \"Backspace\" && multiple.value && !text.value && values.value.length) {\n remove(values.value[values.value.length - 1]!);\n }\n}\n\nfunction keepCaretKeys(e: KeyboardEvent) {\n if (e.key === \"Home\" || e.key === \"End\") e.stopImmediatePropagation();\n}\n\nfunction onBlur(e: FocusEvent) {\n const next = e.relatedTarget as Element | null;\n if (next && (anchor.value?.$el?.contains(next) || next.closest?.(\".e-popover\"))) return;\n wantOpen.value = false;\n typing.value = false;\n if (!free.value) text.value = resting();\n}\n\nfunction onWrapDown(e: MouseEvent) {\n if (e.target === e.currentTarget && !props.disabled) {\n e.preventDefault();\n focusInput();\n }\n}\n\ntype FieldSlot = { id: string; ariaInvalid: \"true\" | undefined; ariaDescribedby: string | undefined };\nfunction inputBind(field: FieldSlot) {\n return {\n id: field.id,\n required: props.required && !(multiple.value && values.value.length) ? true : undefined,\n placeholder: multiple.value && values.value.length ? \"\" : props.placeholder,\n \"aria-invalid\": field.ariaInvalid,\n \"aria-label\": props.bare ? listName.value : undefined,\n autocomplete: \"off\",\n ...(listId.value ? { \"aria-controls\": listId.value } : {}),\n ...(shown.value.length ? {} : { \"aria-activedescendant\": undefined }),\n ...attrs.input(field.ariaDescribedby),\n };\n}\n\ndefineExpose({\n input: computed(() => inputEl()),\n focus: focusInput,\n});\n</script>\n\n<template>\n <component :is=\"bare ? Bare : EField\" v-bind=\"{ ...attrs.wrapper(), ...frame }\">\n <template #default=\"field\">\n <ComboboxRoot\n class=\"e-combo-root\"\n :model-value=\"rootValue\"\n :multiple=\"multiple\"\n :open=\"open\"\n :disabled=\"disabled\"\n ignore-filter\n @update:model-value=\"onPick\"\n @update:open=\"wantOpen = $event\"\n >\n <ComboboxAnchor\n ref=\"anchor\"\n class=\"e-input-wrap e-combo\"\n :class=\"{ 'e-combo--multi': multiple }\"\n :data-invalid=\"error && !bare ? '' : undefined\"\n :data-disabled=\"disabled ? '' : undefined\"\n @mousedown=\"onWrapDown\"\n @focusout=\"onBlur\"\n >\n <div class=\"e-combo-main\">\n <template v-if=\"multiple\">\n <span v-for=\"v in values\" :key=\"v\" class=\"e-tag\">\n {{ labelOf(v) }}\n <button\n v-if=\"!disabled\"\n type=\"button\"\n class=\"e-tag-x\"\n :aria-label=\"t('removeItem', { label: labelOf(v) })\"\n @click=\"remove(v)\"\n >\n <EIcon name=\"x\" small />\n </button>\n </span>\n </template>\n <ComboboxInput\n class=\"e-input e-combo-input\"\n :model-value=\"text\"\n :display-value=\"(v: unknown) => (typeof v === 'string' ? (free ? v : labelOf(v)) : '')\"\n :disabled=\"disabled\"\n v-bind=\"inputBind(field)\"\n @update:model-value=\"text = $event\"\n @input=\"onInput\"\n @keydown=\"onKeydown\"\n @keydown.capture=\"keepCaretKeys\"\n />\n </div>\n <template v-if=\"name\">\n <input v-for=\"(v, k) in multiple ? values : [single]\" :key=\"k\" type=\"hidden\" :name=\"name\" :value=\"v\" />\n </template>\n <div class=\"e-combo-tail\">\n <button\n v-if=\"hasValue && clearable && !disabled\"\n type=\"button\"\n class=\"e-combo-btn\"\n :aria-label=\"t('clear')\"\n @mousedown.prevent\n @click=\"clear\"\n >\n <EIcon name=\"x\" />\n </button>\n <ComboboxTrigger\n v-if=\"!free\"\n class=\"e-combo-btn\"\n :aria-label=\"t('showOptions')\"\n :disabled=\"disabled\"\n @mousedown.prevent\n >\n <EIcon name=\"chevron-down\" bold />\n </ComboboxTrigger>\n </div>\n </ComboboxAnchor>\n <span class=\"e-sr\" role=\"status\">{{ announce }}</span>\n <ComboboxPortal :to=\"portal\">\n <ComboboxContent\n ref=\"content\"\n position=\"popper\"\n align=\"start\"\n :side-offset=\"6\"\n :collision-padding=\"8\"\n class=\"e-popover e-listpanel e-root\"\n :aria-label=\"listName\"\n :aria-busy=\"loading ? 'true' : undefined\"\n >\n <ComboboxViewport>\n <template v-if=\"shown.length\">\n <template v-for=\"(section, i) in sections\" :key=\"i\">\n <div v-if=\"section.group\" class=\"e-opt-set\" role=\"group\" :aria-labelledby=\"`${groupId}-g${i}`\">\n <div :id=\"`${groupId}-g${i}`\" class=\"e-opt-group\">{{ section.group }}</div>\n <EComboboxOption\n v-for=\"o in section.options\"\n :key=\"o.value\"\n :option=\"o\"\n :value=\"itemValue(o)\"\n :selected=\"isSelected(itemValue(o))\"\n :query=\"query\"\n />\n </div>\n <template v-else>\n <EComboboxOption\n v-for=\"o in section.options\"\n :key=\"o.value\"\n :option=\"o\"\n :value=\"itemValue(o)\"\n :selected=\"isSelected(itemValue(o))\"\n :query=\"query\"\n />\n </template>\n </template>\n </template>\n <div v-else class=\"e-opt-status\" role=\"option\" aria-disabled=\"true\" aria-selected=\"false\">\n <ESpinner v-if=\"loading\" :label=\"t('searching')\" />\n <template v-else>{{ emptyText || t(\"noMatches\") }}</template>\n </div>\n </ComboboxViewport>\n </ComboboxContent>\n </ComboboxPortal>\n </ComboboxRoot>\n </template>\n </component>\n</template>\n\n<style>\n@layer e.controls {\n .e-combo-main {\n display: flex;\n flex: 1;\n flex-wrap: wrap;\n align-items: center;\n align-self: stretch;\n gap: var(--e-space-1);\n min-width: 0;\n }\n\n .e-combo-tail {\n display: flex;\n flex: none;\n align-items: center;\n align-self: center;\n }\n\n .e-combo--multi {\n padding: 3px var(--e-space-1) 3px var(--e-space-2);\n gap: var(--e-space-1);\n }\n\n .e-combo--multi .e-input {\n height: calc(var(--e-control-height) - 9px);\n align-self: center;\n padding-inline: var(--e-space-2);\n }\n\n .e-combo-main .e-tag:not(:has(.e-tag-x)) {\n padding-inline-end: var(--e-space-3);\n }\n\n .e-tag {\n display: inline-flex;\n align-items: center;\n gap: var(--e-space-1);\n height: var(--e-space-8);\n padding: 0 var(--e-space-1) 0 var(--e-space-3);\n border-radius: var(--e-radius-pill);\n background: var(--e-surface-tint);\n box-shadow: inset 0 0 0 var(--e-stroke-card) var(--e-primary);\n color: var(--e-ink);\n font: 500 var(--e-text-sm)/1 var(--e-font-sans);\n }\n\n .e-tag-x::after {\n content: \"\";\n position: absolute;\n inset: calc((var(--e-tap) - var(--e-space-6)) / -2);\n }\n\n .e-tag-x {\n position: relative;\n display: inline-grid;\n place-items: center;\n width: var(--e-space-6);\n height: var(--e-space-6);\n padding: 0;\n border: 0;\n border-radius: 50%;\n background: transparent;\n color: var(--e-primary);\n cursor: pointer;\n }\n\n .e-tag-x:hover {\n background: var(--e-wash-hover);\n box-shadow: inset 0 0 0 var(--e-stroke-card) var(--e-primary);\n }\n\n .e-tag-x:active {\n background: var(--e-wash-press);\n }\n\n .e-tag-x:focus-visible {\n outline: var(--e-stroke-focus) solid var(--e-focus-ring);\n outline-offset: var(--e-focus-gap);\n }\n\n @media (forced-colors: active) {\n .e-tag {\n outline: var(--e-stroke-card) solid CanvasText;\n }\n }\n}\n</style>\n"],"mappings":""}
@@ -13,11 +13,7 @@ import { normalizeOptions as re, sectionOptions as ie } from "../Select/options.
13
13
  import { Fragment as a, computed as o, createBlock as s, createCommentVNode as c, createElementBlock as l, createElementVNode as u, createTextVNode as d, createVNode as f, defineComponent as p, guardReactiveProps as ae, h as oe, mergeModels as m, mergeProps as se, nextTick as ce, normalizeClass as le, normalizeProps as ue, onMounted as de, openBlock as h, ref as g, renderList as _, resolveDynamicComponent as fe, toDisplayString as v, unref as y, useModel as b, watch as x, withCtx as S, withModifiers as C } from "vue";
14
14
  import { ComboboxAnchor as pe, ComboboxContent as me, ComboboxInput as he, ComboboxPortal as ge, ComboboxRoot as _e, ComboboxTrigger as ve, ComboboxViewport as ye } from "reka-ui";
15
15
  //#region src/components/Combobox/EComboboxBase.vue?vue&type=script&setup=true&lang.ts
16
- var be = { class: "e-combo-main" }, xe = [
17
- "aria-label",
18
- "disabled",
19
- "onClick"
20
- ], Se = ["name", "value"], Ce = { class: "e-combo-tail" }, we = ["aria-label"], Te = {
16
+ var be = { class: "e-combo-main" }, xe = ["aria-label", "onClick"], Se = ["name", "value"], Ce = { class: "e-combo-tail" }, we = ["aria-label"], Te = {
21
17
  class: "e-sr",
22
18
  role: "status"
23
19
  }, Ee = ["aria-labelledby"], De = ["id"], Oe = {
@@ -177,16 +173,16 @@ var be = { class: "e-combo-main" }, xe = [
177
173
  u("div", be, [M.value ? (h(!0), l(a, { key: 0 }, _(F.value, (e) => (h(), l("span", {
178
174
  key: e,
179
175
  class: "e-tag"
180
- }, [d(v(R(e)) + " ", 1), u("button", {
176
+ }, [d(v(R(e)) + " ", 1), p.disabled ? c("", !0) : (h(), l("button", {
177
+ key: 0,
181
178
  type: "button",
182
179
  class: "e-tag-x",
183
180
  "aria-label": y(O)("removeItem", { label: R(e) }),
184
- disabled: p.disabled,
185
181
  onClick: (t) => ze(e)
186
182
  }, [f(r, {
187
183
  name: "x",
188
184
  small: ""
189
- })], 8, xe)]))), 128)) : c("", !0), f(y(he), se({
185
+ })], 8, xe))]))), 128)) : c("", !0), f(y(he), se({
190
186
  class: "e-input e-combo-input",
191
187
  "model-value": B.value,
192
188
  "display-value": (e) => typeof e == "string" ? N.value ? e : R(e) : "",
@@ -1 +1 @@
1
- {"version":3,"file":"EComboboxBase.vue_vue_type_script_setup_true_lang.js","names":["_useModel","_openBlock","_createBlock","_resolveDynamicComponent","EField","_normalizeProps","_guardReactiveProps","_unref","_withCtx","_createVNode","_normalizeClass","_createElementVNode","_createElementBlock","_Fragment","_renderList","_createTextVNode","_toDisplayString","EIcon","_createCommentVNode","_mergeProps","_withModifiers","EComboboxOption","ESpinner","EIcon_default","EField_default","ESpinner_default","EComboboxOption_default","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","EComboboxBase_vue_vue_type_script_setup_true_lang_default","\"modelValue\"","\"modelModifiers\"","\"open\"","\"openModifiers\"","__expose","__emit","props","__props","emit","model","useModel","t","useMessages","portal","usePortalTarget","attrs","useFieldAttrs","groupId","useUid","bareId","Bare","h","slots","frame","computed","listName","multiple","free","all","normalizeOptions","values","single","rootValue","labelOf","o","v","resting","text","ref","typing","wantOpen","anchor","query","shown","q","sections","sectionOptions","hasList","open","announce","hasValue","watch","rest","listId","content","tries","read","inputEl","focusInput","isSelected","value","itemValue","onPick","next","onInput","remove","x","clear","onKeydown","keepCaretKeys","onBlur","onWrapDown","inputBind","field","openBlock","createBlock","resolveDynamicComponent","normalizeProps","guardReactiveProps","unref","withCtx","createVNode","ComboboxRoot","_cache","$event","ComboboxAnchor","normalizeClass","createElementVNode","createElementBlock","Fragment","renderList","createTextVNode","toDisplayString","createCommentVNode","ComboboxInput","mergeProps","k","withModifiers","ComboboxTrigger","ComboboxPortal","ComboboxContent","ComboboxViewport","i","section"],"sources":["../../../src/components/Combobox/EComboboxBase.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, h, nextTick, onMounted, ref, watch, type FunctionalComponent } from \"vue\";\nimport {\n ComboboxAnchor,\n ComboboxContent,\n ComboboxInput,\n ComboboxPortal,\n ComboboxRoot,\n ComboboxTrigger,\n ComboboxViewport,\n} from \"reka-ui\";\nimport EField from \"../Field/EField.vue\";\nimport EIcon from \"../Icon/EIcon.vue\";\nimport ESpinner from \"../Spinner/ESpinner.vue\";\nimport EComboboxOption from \"./EComboboxOption.vue\";\nimport { normalizeOptions, sectionOptions } from \"../Select/options.js\";\nimport type { EComboboxProps } from \"./types.js\";\nimport { useMessages, usePortalTarget } from \"../../config.js\";\nimport { useFieldAttrs } from \"../../composables/useFieldAttrs.js\";\nimport { useUid } from \"../../composables/useUid.js\";\nimport \"../../styles/base.css\";\nimport \"../TextField/input.css\";\nimport \"../Select/panel.css\";\nimport \"./combo.css\";\n\ndefineOptions({ inheritAttrs: false });\n\nconst props = withDefaults(defineProps<EComboboxProps>(), {\n clearable: true,\n});\n\nconst emit = defineEmits<{\n /** The text in the input changed, by typing or by choosing. Use it to fetch options from a server. */\n inputChange: [text: string];\n}>();\n\nconst model = defineModel<string | string[]>();\n\nconst t = useMessages();\nconst portal = usePortalTarget();\nconst attrs = useFieldAttrs();\nconst groupId = useUid();\nconst bareId = useUid(() => props.id);\n\nconst Bare: FunctionalComponent = (_, { slots }) =>\n h(\"div\", attrs.wrapper(), slots.default?.({ id: bareId.value, ariaInvalid: undefined, ariaDescribedby: undefined }));\nconst frame = computed(() =>\n props.bare\n ? {}\n : {\n id: props.id,\n label: props.label,\n hideLabel: props.hideLabel,\n hint: props.hint,\n error: props.error,\n required: props.required,\n optional: props.optional,\n },\n);\nconst listName = computed(() => (props.bare ? (props.ariaLabel ?? props.label) : props.label));\n\nconst multiple = computed(() => props.multiple);\n// Free text is for one value; with `multiple` it is ignored.\nconst free = computed(() => props.freeform && !props.multiple);\nconst all = computed(() => normalizeOptions(props.options));\nconst values = computed<string[]>(() => (multiple.value && Array.isArray(model.value) ? model.value : []));\nconst single = computed(() => (typeof model.value === \"string\" ? model.value : \"\"));\nconst rootValue = computed(() => (multiple.value ? values.value : single.value));\n\nfunction labelOf(v: string): string {\n return all.value.find((o) => o.value === v)?.label ?? (free.value ? v : \"\");\n}\nconst resting = () => (multiple.value ? \"\" : labelOf(single.value));\n\nconst text = ref(resting());\nconst typing = ref(false);\nconst wantOpen = defineModel<boolean>(\"open\", { default: false });\nconst anchor = ref<{ $el: HTMLElement } | null>(null);\nconst query = computed(() => (typing.value ? text.value.trim().toLowerCase() : \"\"));\n\nconst shown = computed(() => {\n const q = query.value;\n if (props.filter) return all.value.filter((o) => props.filter!(o, q));\n return all.value.filter(\n (o) => !q || o.label.toLowerCase().includes(q) || (o.description ?? \"\").toLowerCase().includes(q),\n );\n});\nconst sections = computed(() => sectionOptions(shown.value));\nconst hasList = computed(() => shown.value.length > 0 || !!props.loading || !free.value);\nconst open = computed(() => wantOpen.value && hasList.value && !props.disabled);\nconst announce = computed(() =>\n open.value && !shown.value.length ? (props.loading ? t(\"searching\") : props.emptyText || t(\"noMatches\")) : \"\",\n);\nconst hasValue = computed(() => (multiple.value ? values.value.length > 0 : !!text.value));\n\nwatch(rootValue, () => {\n const rest = resting();\n if (rest !== text.value) {\n text.value = rest;\n typing.value = false;\n }\n});\nwatch(all, () => {\n if (!typing.value && !open.value) text.value = resting();\n});\n\nconst listId = ref<string | undefined>();\nconst content = ref<{ $el: HTMLElement } | null>(null);\nonMounted(() => {\n if (!open.value) return;\n let tries = 0;\n const read = () => {\n listId.value = content.value?.$el?.id || undefined;\n if (!listId.value && tries++ < 10) requestAnimationFrame(read);\n };\n void nextTick(read);\n});\n\nconst inputEl = () => anchor.value?.$el?.querySelector(\"input\") ?? null;\nconst focusInput = () => inputEl()?.focus();\n\nfunction isSelected(value: string): boolean {\n return multiple.value ? values.value.includes(value) : free.value ? single.value === value : single.value === value;\n}\nconst itemValue = (o: { value: string; label: string }) => (free.value ? o.label : o.value);\n\nfunction onPick(v: unknown) {\n typing.value = false;\n if (multiple.value) {\n model.value = Array.isArray(v) ? (v as string[]) : [];\n text.value = \"\";\n emit(\"inputChange\", \"\");\n return;\n }\n const next = typeof v === \"string\" ? v : \"\";\n model.value = next;\n text.value = free.value ? next : labelOf(next);\n emit(\"inputChange\", text.value);\n}\n\nfunction onInput(e: Event) {\n const v = (e.target as HTMLInputElement).value;\n text.value = v;\n typing.value = true;\n wantOpen.value = true;\n emit(\"inputChange\", v);\n if (free.value) model.value = v;\n}\n\nfunction remove(v: string) {\n model.value = values.value.filter((x) => x !== v);\n}\n\nfunction clear() {\n model.value = multiple.value ? [] : \"\";\n text.value = \"\";\n typing.value = false;\n emit(\"inputChange\", \"\");\n focusInput();\n}\n\nfunction onKeydown(e: KeyboardEvent) {\n if (e.key === \"Escape\" && !open.value && text.value) {\n e.preventDefault();\n clear();\n } else if (e.key === \"Backspace\" && multiple.value && !text.value && values.value.length) {\n remove(values.value[values.value.length - 1]!);\n }\n}\n\nfunction keepCaretKeys(e: KeyboardEvent) {\n if (e.key === \"Home\" || e.key === \"End\") e.stopImmediatePropagation();\n}\n\nfunction onBlur(e: FocusEvent) {\n const next = e.relatedTarget as Element | null;\n if (next && (anchor.value?.$el?.contains(next) || next.closest?.(\".e-popover\"))) return;\n wantOpen.value = false;\n typing.value = false;\n if (!free.value) text.value = resting();\n}\n\nfunction onWrapDown(e: MouseEvent) {\n if (e.target === e.currentTarget && !props.disabled) {\n e.preventDefault();\n focusInput();\n }\n}\n\ntype FieldSlot = { id: string; ariaInvalid: \"true\" | undefined; ariaDescribedby: string | undefined };\nfunction inputBind(field: FieldSlot) {\n return {\n id: field.id,\n required: props.required && !(multiple.value && values.value.length) ? true : undefined,\n placeholder: multiple.value && values.value.length ? \"\" : props.placeholder,\n \"aria-invalid\": field.ariaInvalid,\n \"aria-label\": props.bare ? listName.value : undefined,\n autocomplete: \"off\",\n ...(listId.value ? { \"aria-controls\": listId.value } : {}),\n ...(shown.value.length ? {} : { \"aria-activedescendant\": undefined }),\n ...attrs.input(field.ariaDescribedby),\n };\n}\n\ndefineExpose({\n input: computed(() => inputEl()),\n focus: focusInput,\n});\n</script>\n\n<template>\n <component :is=\"bare ? Bare : EField\" v-bind=\"{ ...attrs.wrapper(), ...frame }\">\n <template #default=\"field\">\n <ComboboxRoot\n class=\"e-combo-root\"\n :model-value=\"rootValue\"\n :multiple=\"multiple\"\n :open=\"open\"\n :disabled=\"disabled\"\n ignore-filter\n @update:model-value=\"onPick\"\n @update:open=\"wantOpen = $event\"\n >\n <ComboboxAnchor\n ref=\"anchor\"\n class=\"e-input-wrap e-combo\"\n :class=\"{ 'e-combo--multi': multiple }\"\n :data-invalid=\"error && !bare ? '' : undefined\"\n :data-disabled=\"disabled ? '' : undefined\"\n @mousedown=\"onWrapDown\"\n @focusout=\"onBlur\"\n >\n <div class=\"e-combo-main\">\n <template v-if=\"multiple\">\n <span v-for=\"v in values\" :key=\"v\" class=\"e-tag\">\n {{ labelOf(v) }}\n <button\n type=\"button\"\n class=\"e-tag-x\"\n :aria-label=\"t('removeItem', { label: labelOf(v) })\"\n :disabled=\"disabled\"\n @click=\"remove(v)\"\n >\n <EIcon name=\"x\" small />\n </button>\n </span>\n </template>\n <ComboboxInput\n class=\"e-input e-combo-input\"\n :model-value=\"text\"\n :display-value=\"(v: unknown) => (typeof v === 'string' ? (free ? v : labelOf(v)) : '')\"\n :disabled=\"disabled\"\n v-bind=\"inputBind(field)\"\n @update:model-value=\"text = $event\"\n @input=\"onInput\"\n @keydown=\"onKeydown\"\n @keydown.capture=\"keepCaretKeys\"\n />\n </div>\n <template v-if=\"name\">\n <input v-for=\"(v, k) in multiple ? values : [single]\" :key=\"k\" type=\"hidden\" :name=\"name\" :value=\"v\" />\n </template>\n <div class=\"e-combo-tail\">\n <button\n v-if=\"hasValue && clearable && !disabled\"\n type=\"button\"\n class=\"e-combo-btn\"\n :aria-label=\"t('clear')\"\n @mousedown.prevent\n @click=\"clear\"\n >\n <EIcon name=\"x\" />\n </button>\n <ComboboxTrigger\n v-if=\"!free\"\n class=\"e-combo-btn\"\n :aria-label=\"t('showOptions')\"\n :disabled=\"disabled\"\n @mousedown.prevent\n >\n <EIcon name=\"chevron-down\" bold />\n </ComboboxTrigger>\n </div>\n </ComboboxAnchor>\n <span class=\"e-sr\" role=\"status\">{{ announce }}</span>\n <ComboboxPortal :to=\"portal\">\n <ComboboxContent\n ref=\"content\"\n position=\"popper\"\n align=\"start\"\n :side-offset=\"6\"\n :collision-padding=\"8\"\n class=\"e-popover e-listpanel e-root\"\n :aria-label=\"listName\"\n :aria-busy=\"loading ? 'true' : undefined\"\n >\n <ComboboxViewport>\n <template v-if=\"shown.length\">\n <template v-for=\"(section, i) in sections\" :key=\"i\">\n <div v-if=\"section.group\" class=\"e-opt-set\" role=\"group\" :aria-labelledby=\"`${groupId}-g${i}`\">\n <div :id=\"`${groupId}-g${i}`\" class=\"e-opt-group\">{{ section.group }}</div>\n <EComboboxOption\n v-for=\"o in section.options\"\n :key=\"o.value\"\n :option=\"o\"\n :value=\"itemValue(o)\"\n :selected=\"isSelected(itemValue(o))\"\n :query=\"query\"\n />\n </div>\n <template v-else>\n <EComboboxOption\n v-for=\"o in section.options\"\n :key=\"o.value\"\n :option=\"o\"\n :value=\"itemValue(o)\"\n :selected=\"isSelected(itemValue(o))\"\n :query=\"query\"\n />\n </template>\n </template>\n </template>\n <div v-else class=\"e-opt-status\" role=\"option\" aria-disabled=\"true\" aria-selected=\"false\">\n <ESpinner v-if=\"loading\" :label=\"t('searching')\" />\n <template v-else>{{ emptyText || t(\"noMatches\") }}</template>\n </div>\n </ComboboxViewport>\n </ComboboxContent>\n </ComboboxPortal>\n </ComboboxRoot>\n </template>\n </component>\n</template>\n\n<style>\n@layer e.controls {\n .e-combo-main {\n display: flex;\n flex: 1;\n flex-wrap: wrap;\n align-items: center;\n align-self: stretch;\n gap: var(--e-space-1);\n min-width: 0;\n }\n\n .e-combo-tail {\n display: flex;\n flex: none;\n align-items: center;\n align-self: center;\n }\n\n .e-combo--multi {\n padding: 3px var(--e-space-1) 3px var(--e-space-2);\n gap: var(--e-space-1);\n }\n\n .e-combo--multi .e-input {\n height: calc(var(--e-control-height) - 9px);\n align-self: center;\n padding-inline: var(--e-space-2);\n }\n\n .e-tag {\n display: inline-flex;\n align-items: center;\n gap: var(--e-space-1);\n height: var(--e-space-8);\n padding: 0 var(--e-space-1) 0 var(--e-space-3);\n border-radius: var(--e-radius-pill);\n background: var(--e-surface-tint);\n box-shadow: inset 0 0 0 var(--e-stroke-card) var(--e-primary);\n color: var(--e-ink);\n font: 500 var(--e-text-sm)/1 var(--e-font-sans);\n }\n\n .e-tag-x::after {\n content: \"\";\n position: absolute;\n inset: calc((var(--e-tap) - var(--e-space-6)) / -2);\n }\n\n .e-tag-x {\n position: relative;\n display: inline-grid;\n place-items: center;\n width: var(--e-space-6);\n height: var(--e-space-6);\n padding: 0;\n border: 0;\n border-radius: 50%;\n background: transparent;\n color: var(--e-primary);\n cursor: pointer;\n }\n\n .e-tag-x:hover {\n background: var(--e-wash-hover);\n box-shadow: inset 0 0 0 var(--e-stroke-card) var(--e-primary);\n }\n\n .e-tag-x:active {\n background: var(--e-wash-press);\n }\n\n .e-tag-x:focus-visible {\n outline: var(--e-stroke-focus) solid var(--e-focus-ring);\n outline-offset: var(--e-focus-gap);\n }\n\n @media (forced-colors: active) {\n .e-tag {\n outline: var(--e-stroke-card) solid CanvasText;\n }\n }\n}\n</style>\n"],"mappings":"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"}
1
+ {"version":3,"file":"EComboboxBase.vue_vue_type_script_setup_true_lang.js","names":["_useModel","_openBlock","_createBlock","_resolveDynamicComponent","EField","_normalizeProps","_guardReactiveProps","_unref","_withCtx","_createVNode","_normalizeClass","_createElementVNode","_createElementBlock","_Fragment","_renderList","_createTextVNode","_toDisplayString","EIcon","_createCommentVNode","_mergeProps","_withModifiers","EComboboxOption","ESpinner","EIcon_default","EField_default","ESpinner_default","EComboboxOption_default","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","EComboboxBase_vue_vue_type_script_setup_true_lang_default","\"modelValue\"","\"modelModifiers\"","\"open\"","\"openModifiers\"","__expose","__emit","props","__props","emit","model","useModel","t","useMessages","portal","usePortalTarget","attrs","useFieldAttrs","groupId","useUid","bareId","Bare","h","slots","frame","computed","listName","multiple","free","all","normalizeOptions","values","single","rootValue","labelOf","o","v","resting","text","ref","typing","wantOpen","anchor","query","shown","q","sections","sectionOptions","hasList","open","announce","hasValue","watch","rest","listId","content","tries","read","inputEl","focusInput","isSelected","value","itemValue","onPick","next","onInput","remove","x","clear","onKeydown","keepCaretKeys","onBlur","onWrapDown","inputBind","field","openBlock","createBlock","resolveDynamicComponent","normalizeProps","guardReactiveProps","unref","withCtx","createVNode","ComboboxRoot","_cache","$event","ComboboxAnchor","normalizeClass","createElementVNode","createElementBlock","Fragment","renderList","createTextVNode","toDisplayString","createCommentVNode","ComboboxInput","mergeProps","k","withModifiers","ComboboxTrigger","ComboboxPortal","ComboboxContent","ComboboxViewport","i","section"],"sources":["../../../src/components/Combobox/EComboboxBase.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, h, nextTick, onMounted, ref, watch, type FunctionalComponent } from \"vue\";\nimport {\n ComboboxAnchor,\n ComboboxContent,\n ComboboxInput,\n ComboboxPortal,\n ComboboxRoot,\n ComboboxTrigger,\n ComboboxViewport,\n} from \"reka-ui\";\nimport EField from \"../Field/EField.vue\";\nimport EIcon from \"../Icon/EIcon.vue\";\nimport ESpinner from \"../Spinner/ESpinner.vue\";\nimport EComboboxOption from \"./EComboboxOption.vue\";\nimport { normalizeOptions, sectionOptions } from \"../Select/options.js\";\nimport type { EComboboxProps } from \"./types.js\";\nimport { useMessages, usePortalTarget } from \"../../config.js\";\nimport { useFieldAttrs } from \"../../composables/useFieldAttrs.js\";\nimport { useUid } from \"../../composables/useUid.js\";\nimport \"../../styles/base.css\";\nimport \"../TextField/input.css\";\nimport \"../Select/panel.css\";\nimport \"./combo.css\";\n\ndefineOptions({ inheritAttrs: false });\n\nconst props = withDefaults(defineProps<EComboboxProps>(), {\n clearable: true,\n});\n\nconst emit = defineEmits<{\n /** The text in the input changed, by typing or by choosing. Use it to fetch options from a server. */\n inputChange: [text: string];\n}>();\n\nconst model = defineModel<string | string[]>();\n\nconst t = useMessages();\nconst portal = usePortalTarget();\nconst attrs = useFieldAttrs();\nconst groupId = useUid();\nconst bareId = useUid(() => props.id);\n\nconst Bare: FunctionalComponent = (_, { slots }) =>\n h(\"div\", attrs.wrapper(), slots.default?.({ id: bareId.value, ariaInvalid: undefined, ariaDescribedby: undefined }));\nconst frame = computed(() =>\n props.bare\n ? {}\n : {\n id: props.id,\n label: props.label,\n hideLabel: props.hideLabel,\n hint: props.hint,\n error: props.error,\n required: props.required,\n optional: props.optional,\n },\n);\nconst listName = computed(() => (props.bare ? (props.ariaLabel ?? props.label) : props.label));\n\nconst multiple = computed(() => props.multiple);\n// Free text is for one value; with `multiple` it is ignored.\nconst free = computed(() => props.freeform && !props.multiple);\nconst all = computed(() => normalizeOptions(props.options));\nconst values = computed<string[]>(() => (multiple.value && Array.isArray(model.value) ? model.value : []));\nconst single = computed(() => (typeof model.value === \"string\" ? model.value : \"\"));\nconst rootValue = computed(() => (multiple.value ? values.value : single.value));\n\nfunction labelOf(v: string): string {\n return all.value.find((o) => o.value === v)?.label ?? (free.value ? v : \"\");\n}\nconst resting = () => (multiple.value ? \"\" : labelOf(single.value));\n\nconst text = ref(resting());\nconst typing = ref(false);\nconst wantOpen = defineModel<boolean>(\"open\", { default: false });\nconst anchor = ref<{ $el: HTMLElement } | null>(null);\nconst query = computed(() => (typing.value ? text.value.trim().toLowerCase() : \"\"));\n\nconst shown = computed(() => {\n const q = query.value;\n if (props.filter) return all.value.filter((o) => props.filter!(o, q));\n return all.value.filter(\n (o) => !q || o.label.toLowerCase().includes(q) || (o.description ?? \"\").toLowerCase().includes(q),\n );\n});\nconst sections = computed(() => sectionOptions(shown.value));\nconst hasList = computed(() => shown.value.length > 0 || !!props.loading || !free.value);\nconst open = computed(() => wantOpen.value && hasList.value && !props.disabled);\nconst announce = computed(() =>\n open.value && !shown.value.length ? (props.loading ? t(\"searching\") : props.emptyText || t(\"noMatches\")) : \"\",\n);\nconst hasValue = computed(() => (multiple.value ? values.value.length > 0 : !!text.value));\n\nwatch(rootValue, () => {\n const rest = resting();\n if (rest !== text.value) {\n text.value = rest;\n typing.value = false;\n }\n});\nwatch(all, () => {\n if (!typing.value && !open.value) text.value = resting();\n});\n\nconst listId = ref<string | undefined>();\nconst content = ref<{ $el: HTMLElement } | null>(null);\nonMounted(() => {\n if (!open.value) return;\n let tries = 0;\n const read = () => {\n listId.value = content.value?.$el?.id || undefined;\n if (!listId.value && tries++ < 10) requestAnimationFrame(read);\n };\n void nextTick(read);\n});\n\nconst inputEl = () => anchor.value?.$el?.querySelector(\"input\") ?? null;\nconst focusInput = () => inputEl()?.focus();\n\nfunction isSelected(value: string): boolean {\n return multiple.value ? values.value.includes(value) : free.value ? single.value === value : single.value === value;\n}\nconst itemValue = (o: { value: string; label: string }) => (free.value ? o.label : o.value);\n\nfunction onPick(v: unknown) {\n typing.value = false;\n if (multiple.value) {\n model.value = Array.isArray(v) ? (v as string[]) : [];\n text.value = \"\";\n emit(\"inputChange\", \"\");\n return;\n }\n const next = typeof v === \"string\" ? v : \"\";\n model.value = next;\n text.value = free.value ? next : labelOf(next);\n emit(\"inputChange\", text.value);\n}\n\nfunction onInput(e: Event) {\n const v = (e.target as HTMLInputElement).value;\n text.value = v;\n typing.value = true;\n wantOpen.value = true;\n emit(\"inputChange\", v);\n if (free.value) model.value = v;\n}\n\nfunction remove(v: string) {\n model.value = values.value.filter((x) => x !== v);\n}\n\nfunction clear() {\n model.value = multiple.value ? [] : \"\";\n text.value = \"\";\n typing.value = false;\n emit(\"inputChange\", \"\");\n focusInput();\n}\n\nfunction onKeydown(e: KeyboardEvent) {\n if (e.key === \"Escape\" && !open.value && text.value) {\n e.preventDefault();\n clear();\n } else if (e.key === \"Backspace\" && multiple.value && !text.value && values.value.length) {\n remove(values.value[values.value.length - 1]!);\n }\n}\n\nfunction keepCaretKeys(e: KeyboardEvent) {\n if (e.key === \"Home\" || e.key === \"End\") e.stopImmediatePropagation();\n}\n\nfunction onBlur(e: FocusEvent) {\n const next = e.relatedTarget as Element | null;\n if (next && (anchor.value?.$el?.contains(next) || next.closest?.(\".e-popover\"))) return;\n wantOpen.value = false;\n typing.value = false;\n if (!free.value) text.value = resting();\n}\n\nfunction onWrapDown(e: MouseEvent) {\n if (e.target === e.currentTarget && !props.disabled) {\n e.preventDefault();\n focusInput();\n }\n}\n\ntype FieldSlot = { id: string; ariaInvalid: \"true\" | undefined; ariaDescribedby: string | undefined };\nfunction inputBind(field: FieldSlot) {\n return {\n id: field.id,\n required: props.required && !(multiple.value && values.value.length) ? true : undefined,\n placeholder: multiple.value && values.value.length ? \"\" : props.placeholder,\n \"aria-invalid\": field.ariaInvalid,\n \"aria-label\": props.bare ? listName.value : undefined,\n autocomplete: \"off\",\n ...(listId.value ? { \"aria-controls\": listId.value } : {}),\n ...(shown.value.length ? {} : { \"aria-activedescendant\": undefined }),\n ...attrs.input(field.ariaDescribedby),\n };\n}\n\ndefineExpose({\n input: computed(() => inputEl()),\n focus: focusInput,\n});\n</script>\n\n<template>\n <component :is=\"bare ? Bare : EField\" v-bind=\"{ ...attrs.wrapper(), ...frame }\">\n <template #default=\"field\">\n <ComboboxRoot\n class=\"e-combo-root\"\n :model-value=\"rootValue\"\n :multiple=\"multiple\"\n :open=\"open\"\n :disabled=\"disabled\"\n ignore-filter\n @update:model-value=\"onPick\"\n @update:open=\"wantOpen = $event\"\n >\n <ComboboxAnchor\n ref=\"anchor\"\n class=\"e-input-wrap e-combo\"\n :class=\"{ 'e-combo--multi': multiple }\"\n :data-invalid=\"error && !bare ? '' : undefined\"\n :data-disabled=\"disabled ? '' : undefined\"\n @mousedown=\"onWrapDown\"\n @focusout=\"onBlur\"\n >\n <div class=\"e-combo-main\">\n <template v-if=\"multiple\">\n <span v-for=\"v in values\" :key=\"v\" class=\"e-tag\">\n {{ labelOf(v) }}\n <button\n v-if=\"!disabled\"\n type=\"button\"\n class=\"e-tag-x\"\n :aria-label=\"t('removeItem', { label: labelOf(v) })\"\n @click=\"remove(v)\"\n >\n <EIcon name=\"x\" small />\n </button>\n </span>\n </template>\n <ComboboxInput\n class=\"e-input e-combo-input\"\n :model-value=\"text\"\n :display-value=\"(v: unknown) => (typeof v === 'string' ? (free ? v : labelOf(v)) : '')\"\n :disabled=\"disabled\"\n v-bind=\"inputBind(field)\"\n @update:model-value=\"text = $event\"\n @input=\"onInput\"\n @keydown=\"onKeydown\"\n @keydown.capture=\"keepCaretKeys\"\n />\n </div>\n <template v-if=\"name\">\n <input v-for=\"(v, k) in multiple ? values : [single]\" :key=\"k\" type=\"hidden\" :name=\"name\" :value=\"v\" />\n </template>\n <div class=\"e-combo-tail\">\n <button\n v-if=\"hasValue && clearable && !disabled\"\n type=\"button\"\n class=\"e-combo-btn\"\n :aria-label=\"t('clear')\"\n @mousedown.prevent\n @click=\"clear\"\n >\n <EIcon name=\"x\" />\n </button>\n <ComboboxTrigger\n v-if=\"!free\"\n class=\"e-combo-btn\"\n :aria-label=\"t('showOptions')\"\n :disabled=\"disabled\"\n @mousedown.prevent\n >\n <EIcon name=\"chevron-down\" bold />\n </ComboboxTrigger>\n </div>\n </ComboboxAnchor>\n <span class=\"e-sr\" role=\"status\">{{ announce }}</span>\n <ComboboxPortal :to=\"portal\">\n <ComboboxContent\n ref=\"content\"\n position=\"popper\"\n align=\"start\"\n :side-offset=\"6\"\n :collision-padding=\"8\"\n class=\"e-popover e-listpanel e-root\"\n :aria-label=\"listName\"\n :aria-busy=\"loading ? 'true' : undefined\"\n >\n <ComboboxViewport>\n <template v-if=\"shown.length\">\n <template v-for=\"(section, i) in sections\" :key=\"i\">\n <div v-if=\"section.group\" class=\"e-opt-set\" role=\"group\" :aria-labelledby=\"`${groupId}-g${i}`\">\n <div :id=\"`${groupId}-g${i}`\" class=\"e-opt-group\">{{ section.group }}</div>\n <EComboboxOption\n v-for=\"o in section.options\"\n :key=\"o.value\"\n :option=\"o\"\n :value=\"itemValue(o)\"\n :selected=\"isSelected(itemValue(o))\"\n :query=\"query\"\n />\n </div>\n <template v-else>\n <EComboboxOption\n v-for=\"o in section.options\"\n :key=\"o.value\"\n :option=\"o\"\n :value=\"itemValue(o)\"\n :selected=\"isSelected(itemValue(o))\"\n :query=\"query\"\n />\n </template>\n </template>\n </template>\n <div v-else class=\"e-opt-status\" role=\"option\" aria-disabled=\"true\" aria-selected=\"false\">\n <ESpinner v-if=\"loading\" :label=\"t('searching')\" />\n <template v-else>{{ emptyText || t(\"noMatches\") }}</template>\n </div>\n </ComboboxViewport>\n </ComboboxContent>\n </ComboboxPortal>\n </ComboboxRoot>\n </template>\n </component>\n</template>\n\n<style>\n@layer e.controls {\n .e-combo-main {\n display: flex;\n flex: 1;\n flex-wrap: wrap;\n align-items: center;\n align-self: stretch;\n gap: var(--e-space-1);\n min-width: 0;\n }\n\n .e-combo-tail {\n display: flex;\n flex: none;\n align-items: center;\n align-self: center;\n }\n\n .e-combo--multi {\n padding: 3px var(--e-space-1) 3px var(--e-space-2);\n gap: var(--e-space-1);\n }\n\n .e-combo--multi .e-input {\n height: calc(var(--e-control-height) - 9px);\n align-self: center;\n padding-inline: var(--e-space-2);\n }\n\n .e-combo-main .e-tag:not(:has(.e-tag-x)) {\n padding-inline-end: var(--e-space-3);\n }\n\n .e-tag {\n display: inline-flex;\n align-items: center;\n gap: var(--e-space-1);\n height: var(--e-space-8);\n padding: 0 var(--e-space-1) 0 var(--e-space-3);\n border-radius: var(--e-radius-pill);\n background: var(--e-surface-tint);\n box-shadow: inset 0 0 0 var(--e-stroke-card) var(--e-primary);\n color: var(--e-ink);\n font: 500 var(--e-text-sm)/1 var(--e-font-sans);\n }\n\n .e-tag-x::after {\n content: \"\";\n position: absolute;\n inset: calc((var(--e-tap) - var(--e-space-6)) / -2);\n }\n\n .e-tag-x {\n position: relative;\n display: inline-grid;\n place-items: center;\n width: var(--e-space-6);\n height: var(--e-space-6);\n padding: 0;\n border: 0;\n border-radius: 50%;\n background: transparent;\n color: var(--e-primary);\n cursor: pointer;\n }\n\n .e-tag-x:hover {\n background: var(--e-wash-hover);\n box-shadow: inset 0 0 0 var(--e-stroke-card) var(--e-primary);\n }\n\n .e-tag-x:active {\n background: var(--e-wash-press);\n }\n\n .e-tag-x:focus-visible {\n outline: var(--e-stroke-focus) solid var(--e-focus-ring);\n outline-offset: var(--e-focus-gap);\n }\n\n @media (forced-colors: active) {\n .e-tag {\n outline: var(--e-stroke-card) solid CanvasText;\n }\n }\n}\n</style>\n"],"mappings":"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"}
@@ -21,13 +21,13 @@ export interface EComboboxFields {
21
21
  optional?: boolean;
22
22
  /** Disables the field; a disabled field never opens. */
23
23
  disabled?: boolean;
24
- /** Submits the value with a form, through a hidden input (hidden inputs carry it, one per chosen value). */
24
+ /** Submits the value with a form, through a hidden input. */
25
25
  name?: string;
26
26
  /** Show the Searching spinner in the list instead of the options, while a server answers. */
27
27
  loading?: boolean;
28
28
  /** What the list says when nothing matches. @default "No matches" */
29
29
  emptyText?: string;
30
- /** The clear button, shown when there is something to clear. On by default. */
30
+ /** The clear button, shown when there is something to clear. */
31
31
  clearable?: boolean;
32
32
  /** Replaces the default match (the typed text appears in the label or description). `query` is trimmed and lower case. Return `true` when the server filters. @default label or description contains query */
33
33
  filter?: (option: EOption, query: string) => boolean;