@kazee-ds/vue 0.5.2 → 0.5.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_hoisted_1","_openBlock","_createElementBlock","_normalizeClass","_renderSlot","_sfc_main","Button","$attrs","_unref","_openBlock","_createBlock","_mergeProps","_withCtx","_renderSlot","_sfc_main","_hoisted_1","_openBlock","_createBlock","_unref","_normalizeClass","_withCtx","_createElementVNode","_renderSlot","_sfc_main","_sfc_main","_hoisted_1","_sfc_render","_openBlock","_createElementBlock","_createElementVNode","_sfc_main","_hoisted_1","_sfc_render","_openBlock","_createElementBlock","_createElementVNode","_hoisted_1","_openBlock","_createElementBlock","_createElementVNode","_hoisted_1","_hoisted_2","_hoisted_3","_openBlock","_createElementBlock","_toDisplayString","_createCommentVNode","_sfc_main","_hoisted_1","_openBlock","_createElementBlock","_withModifiers","_sfc_main","$slots","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_openBlock","_createElementBlock","_normalizeClass","_createElementVNode","_unref","_createTextVNode","_toDisplayString","_createCommentVNode","_createVNode","_withCtx","_renderSlot","_Fragment","ChevronIcon","CloseIcon","_renderList","_createBlock","CheckIcon","FieldFeedback","SelectionValidation","_sfc_main","Select","$slots","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_useModel","_openBlock","_createElementBlock","_normalizeClass","_createVNode","_unref","_withCtx","_createTextVNode","_toDisplayString","_createElementVNode","_renderSlot","_createCommentVNode","_sfc_main","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_useModel","_openBlock","_createElementBlock","_createVNode","_unref","_withCtx","_createTextVNode","_toDisplayString","_createElementVNode","_createCommentVNode","_sfc_main","_openBlock","_createBlock","_unref","RekaLabel","_withCtx","_renderSlot","_sfc_main","_hoisted_1","_hoisted_2","_hoisted_3","_openBlock","_createElementBlock","_createElementVNode","_createVNode","_unref","_withCtx","CheckIcon","_createTextVNode","_toDisplayString","_createCommentVNode","FieldFeedback","_sfc_main","_hoisted_1","_hoisted_2","_hoisted_3","_useModel","_openBlock","_createBlock","_unref","_withCtx","_createElementVNode","_toDisplayString","_createElementBlock","_Fragment","_renderList","_createVNode","_createTextVNode","FieldFeedback","_sfc_main","_hoisted_1","_hoisted_2","_openBlock","_createElementBlock","_createElementVNode","_createVNode","_unref","_withCtx","_createTextVNode","_toDisplayString","FieldFeedback","_sfc_main","_hoisted_1","_openBlock","_createElementBlock","_createVNode","_unref","_withCtx","_createTextVNode","_toDisplayString","_renderSlot","FieldFeedback","_sfc_main","_hoisted_1","_openBlock","_createElementBlock","_renderSlot","_sfc_main","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_openBlock","_createElementBlock","_createElementVNode","_toDisplayString","_createVNode","_unref","_withCtx","_Fragment","_renderList","_createBlock","CheckIcon","_createCommentVNode","FieldFeedback","_sfc_main","_hoisted_1","_hoisted_2","_hoisted_3","_openBlock","_createElementBlock","_createVNode","_unref","_withCtx","_createTextVNode","_toDisplayString","_createElementVNode","FieldFeedback","_createCommentVNode","_sfc_main","$slots","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_openBlock","_createElementBlock","_renderSlot","_createBlock","_resolveDynamicComponent","_withCtx","_createTextVNode","_toDisplayString","_createCommentVNode","_createElementVNode","_sfc_main","_hoisted_1","_openBlock","_createElementBlock","_renderSlot","_sfc_main","$attrs","_hoisted_1","_openBlock","_createElementBlock","_mergeProps","_sfc_main","$attrs","_hoisted_1","_openBlock","_createElementBlock","_mergeProps","_sfc_main","$slots","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_openBlock","_createElementBlock","_createElementVNode","_createVNode","_unref","_withCtx","_Fragment","_renderList","_createBlock","_createCommentVNode","_renderSlot","_toDisplayString","_sfc_main","$slots","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_openBlock","_createBlock","_unref","_normalizeClass","_withCtx","_createElementBlock","_createElementVNode","TabsListView","_createSlots","_renderSlot","_createCommentVNode","_Fragment","_renderList","_sfc_main","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_openBlock","_createElementBlock","_createElementVNode","_toDisplayString","_Fragment","_renderList","_sfc_main","$attrs","_hoisted_1","_hoisted_2","_openBlock","_createElementBlock","_createElementVNode","_mergeProps","_toDisplayString","_renderSlot","_sfc_main","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_openBlock","_createElementBlock","_createVNode","Table","_withCtx","_createElementVNode","_Fragment","_renderList","_createTextVNode","_toDisplayString","_renderSlot","_createCommentVNode","_sfc_main","$slots","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_openBlock","_createElementBlock","_createElementVNode","_toDisplayString","_createCommentVNode","_renderSlot","_sfc_main","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_openBlock","_createElementBlock","_Fragment","_createVNode","_unref","_withCtx","_createElementVNode","_normalizeStyle","_renderSlot","_createTextVNode","_toDisplayString","_createBlock","_createCommentVNode","RekaToastAction","_sfc_main","$slots","_hoisted_1","_openBlock","_createBlock","_unref","RekaToastProvider","_withCtx","_renderSlot","_createElementVNode","_createVNode","_createElementBlock","_Fragment","_renderList","Toast","_createSlots","_mergeProps","_sfc_main","$slots","_hoisted_1","_hoisted_2","_hoisted_3","_openBlock","_createElementBlock","_createBlock","_resolveDynamicComponent","_withCtx","_createTextVNode","_toDisplayString","_createCommentVNode","_renderSlot","_sfc_main","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_openBlock","_createElementBlock","_createElementVNode","_Fragment","_renderList","_createCommentVNode","_toDisplayString","_sfc_main","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_openBlock","_createElementBlock","_createElementVNode","_toDisplayString","_unref","_Fragment","_renderList","_sfc_main","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","_openBlock","_createElementBlock","_createElementVNode","_toDisplayString","_createCommentVNode","_Fragment","_renderList","_createVNode","Table","_withCtx","_createBlock","Empty","_sfc_main","$slots","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_openBlock","_createBlock","_unref","_withCtx","_createVNode","_normalizeClass","_renderSlot","_createTextVNode","_toDisplayString","_mergeProps","_createElementVNode","_createCommentVNode","CloseIcon","_createElementBlock","_sfc_main","$slots","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_openBlock","_createElementBlock","_Fragment","_createBlock","CheckIcon","_createCommentVNode","_renderSlot","_createElementVNode","_toDisplayString","ChevronIcon","_sfc_main","$slots","_resolveComponent","_openBlock","_createBlock","_unref","_withCtx","_createElementBlock","_Fragment","_renderList","_createCommentVNode","_createVNode","_createTextVNode","_toDisplayString","MenuItemContent","_createSlots","_renderSlot","_mergeProps","_sfc_main","$slots","_openBlock","_createBlock","_unref","_withCtx","_createVNode","_normalizeClass","_renderSlot","_createTextVNode","_toDisplayString","DropdownMenuBranch","_createSlots","_normalizeProps","_guardReactiveProps","_sfc_main","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_openBlock","_createBlock","_unref","_withCtx","_createVNode","_createTextVNode","_toDisplayString","_createElementVNode","_createElementBlock","_createCommentVNode","_renderSlot","_sfc_main","_openBlock","_createBlock","_unref","_withCtx","_createVNode","_normalizeClass","_renderSlot","_createTextVNode","_toDisplayString","_sfc_main","_hoisted_1","_hoisted_2","_openBlock","_createElementBlock","_normalizeClass","_createElementVNode","_toDisplayString","_createCommentVNode","_sfc_main","$slots","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_openBlock","_createElementBlock","_createElementVNode","_unref","_createTextVNode","_toDisplayString","_createCommentVNode","_createVNode","_withCtx","_renderSlot","CloseIcon","ChevronIcon","_Fragment","_renderList","_createBlock","CheckIcon","FieldFeedback","SelectionValidation","_sfc_main","$slots","_hoisted_1","_hoisted_2","_openBlock","_createBlock","_unref","_withCtx","_createElementBlock","_Fragment","_renderList","RekaItem","_renderSlot","_createCommentVNode","_toDisplayString","_sfc_main","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_openBlock","_createElementBlock","_createElementVNode","_toDisplayString","_unref","_Fragment","_renderList","_createCommentVNode","_createVNode","_withCtx","ChevronIcon","_createBlock","_createTextVNode","_sfc_main","_openBlock","_createElementBlock","_normalizeClass","_createElementVNode","_unref","_createTextVNode","_toDisplayString","_createCommentVNode","_createVNode","DateRangePanel","_createBlock","_withCtx","ChevronIcon","_Fragment","SelectionValidation","_sfc_main"],"sources":["../src/Button.vue","../src/Button.vue","../src/ButtonGroup.ts","../src/ButtonGroupSeparator.ts","../src/button-family-context.ts","../src/ToggleButton.vue","../src/ToggleButton.vue","../src/ToggleButtonGroup.vue","../src/ToggleButtonGroup.vue","../src/CheckIcon.vue","../src/ChevronIcon.vue","../src/CloseIcon.vue","../src/FieldFeedback.vue","../src/FieldFeedback.vue","../src/SelectionValidation.vue","../src/SelectionValidation.vue","../src/useFeedback.ts","../src/selection-options.ts","../src/Select.vue","../src/Select.vue","../src/SelectGroup.ts","../src/Input.vue","../src/Input.vue","../src/Textarea.vue","../src/Textarea.vue","../src/Label.vue","../src/Label.vue","../src/Checkbox.vue","../src/Checkbox.vue","../src/RadioGroup.vue","../src/RadioGroup.vue","../src/Switch.vue","../src/Switch.vue","../src/form-context.ts","../src/Field.vue","../src/Field.vue","../src/Form.vue","../src/Form.vue","../src/listbox-selection.ts","../src/Listbox.vue","../src/Listbox.vue","../src/NumberField.vue","../src/NumberField.vue","../src/Card.vue","../src/Card.vue","../src/Badge.vue","../src/Badge.vue","../src/Skeleton.vue","../src/Skeleton.vue","../src/Separator.vue","../src/Separator.vue","../src/tabs-indicator.ts","../src/TabsListView.vue","../src/TabsListView.vue","../src/Tabs.vue","../src/Tabs.vue","../src/pagination-model.ts","../src/Pagination.vue","../src/Pagination.vue","../src/Table.vue","../src/Table.vue","../src/DataTable.vue","../src/DataTable.vue","../src/Alert.vue","../src/Alert.vue","../src/useToast.ts","../src/Toast.vue","../src/Toast.vue","../src/toast-model.ts","../src/ToastProvider.vue","../src/ToastProvider.vue","../src/Empty.vue","../src/Empty.vue","../src/Breadcrumb.vue","../src/Breadcrumb.vue","../src/useDisclosure.ts","../src/Sidebar.vue","../src/Sidebar.vue","../src/chart-model.ts","../src/Chart.vue","../src/Chart.vue","../src/Dialog.vue","../src/Dialog.vue","../src/MenuItemContent.vue","../src/MenuItemContent.vue","../src/overlay-model.ts","../src/DropdownMenuBranch.vue","../src/DropdownMenuBranch.vue","../src/DropdownMenu.vue","../src/DropdownMenu.vue","../src/Popover.vue","../src/Popover.vue","../src/Tooltip.vue","../src/Tooltip.vue","../src/Spinner.vue","../src/Spinner.vue","../src/Combobox.vue","../src/Combobox.vue","../src/toggle-group-model.ts","../src/ToggleGroup.vue","../src/ToggleGroup.vue","../src/date-range-model.ts","../src/DateRangePanel.vue","../src/DateRangePanel.vue","../src/DateRangePicker.vue","../src/DateRangePicker.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, ref, watch } from 'vue';\nimport type { ButtonSize, ButtonVariant } from './types.js';\n\nconst props = withDefaults(\n defineProps<{\n /** Visual style. Use `danger` for destructive actions such as delete. */\n variant?: ButtonVariant;\n /** Accessible name for icon-only buttons. */\n ariaLabel?: string;\n /** ID of an element supplying the accessible name. */\n ariaLabelledby?: string;\n /** Size of the button. */\n size?: ButtonSize;\n /** Fill the container width. Icon-only buttons retain their square shape. */\n fullWidth?: boolean;\n /** Button type inside a form. Defaults to `button`. */\n type?: 'button' | 'submit' | 'reset';\n /** Disables the button. Vue uses `disabled`, where the React package uses `isDisabled`. */\n disabled?: boolean;\n /** Square icon button; supply aria-label or aria-labelledby. */\n iconOnly?: boolean;\n /** Blocks actions while retaining keyboard focus. */\n pending?: boolean;\n }>(),\n {\n ariaLabel: undefined,\n ariaLabelledby: undefined,\n variant: 'primary',\n size: 'md',\n fullWidth: false,\n type: 'button',\n disabled: false,\n iconOnly: false,\n pending: false,\n },\n);\n\ndefineSlots<{\n default?: (state: {\n pending: boolean;\n disabled: boolean;\n hovered: boolean;\n pressed: boolean;\n focused: boolean;\n focusVisible: boolean;\n }) => unknown;\n}>();\n\nconst hovered = ref(false),\n pressed = ref(false),\n focused = ref(false),\n focusVisible = ref(false);\nwatch(\n () => [props.disabled, props.pending],\n ([disabled, pending]) => {\n if (disabled || pending) {\n hovered.value = false;\n pressed.value = false;\n }\n if (props.disabled) {\n focused.value = false;\n focusVisible.value = false;\n }\n },\n);\nfunction hover(event: PointerEvent) {\n if (!props.disabled && !props.pending && event.pointerType !== 'touch') hovered.value = true;\n}\nfunction pointerdown(event: PointerEvent) {\n focusVisible.value = false;\n if (!props.disabled && !props.pending && event.button === 0) pressed.value = true;\n}\nfunction leave() {\n hovered.value = false;\n pressed.value = false;\n}\nfunction focus(event: FocusEvent) {\n focused.value = true;\n focusVisible.value = (event.target as HTMLButtonElement).matches(':focus-visible');\n}\nfunction blur() {\n focused.value = false;\n focusVisible.value = false;\n pressed.value = false;\n}\n\nconst emit = defineEmits<{\n /** Emitted when the button is clicked. Listen with `@press`, where React uses `onPress`. */\n press: [event: MouseEvent];\n}>();\n\nconst classes = computed(() => [\n 'button',\n `button--${props.variant}`,\n props.size !== 'md' && `button--${props.size}`,\n props.iconOnly && 'button--icon-only',\n props.fullWidth && !props.iconOnly && 'button--full-width',\n]);\nfunction press(event: MouseEvent) {\n if (props.disabled || props.pending) {\n event.preventDefault();\n event.stopImmediatePropagation();\n return;\n }\n emit('press', event);\n}\nfunction keydown(event: KeyboardEvent) {\n if (focused.value) focusVisible.value = true;\n if (props.pending && (event.key === 'Enter' || event.key === ' ')) {\n event.preventDefault();\n event.stopImmediatePropagation();\n return;\n }\n if (!props.disabled && (event.key === 'Enter' || event.key === ' ')) pressed.value = true;\n}\n</script>\n\n<template>\n <button\n :class=\"classes\"\n :aria-label=\"ariaLabel\"\n :aria-labelledby=\"ariaLabelledby\"\n :type=\"pending ? 'button' : type\"\n :disabled=\"disabled\"\n :aria-disabled=\"pending || undefined\"\n :data-pending=\"pending || undefined\"\n @click=\"press\"\n @keydown=\"keydown\"\n @keyup=\"pressed = false\"\n @pointerenter=\"hover\"\n @pointerleave=\"leave\"\n @pointerdown=\"pointerdown\"\n @pointerup=\"pressed = false\"\n @pointercancel=\"pressed = false\"\n @focus=\"focus\"\n @blur=\"blur\"\n >\n <slot\n :pending=\"pending\"\n :disabled=\"disabled\"\n :hovered=\"hovered\"\n :pressed=\"pressed\"\n :focused=\"focused\"\n :focus-visible=\"focusVisible\"\n />\n </button>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref, watch } from 'vue';\nimport type { ButtonSize, ButtonVariant } from './types.js';\n\nconst props = withDefaults(\n defineProps<{\n /** Visual style. Use `danger` for destructive actions such as delete. */\n variant?: ButtonVariant;\n /** Accessible name for icon-only buttons. */\n ariaLabel?: string;\n /** ID of an element supplying the accessible name. */\n ariaLabelledby?: string;\n /** Size of the button. */\n size?: ButtonSize;\n /** Fill the container width. Icon-only buttons retain their square shape. */\n fullWidth?: boolean;\n /** Button type inside a form. Defaults to `button`. */\n type?: 'button' | 'submit' | 'reset';\n /** Disables the button. Vue uses `disabled`, where the React package uses `isDisabled`. */\n disabled?: boolean;\n /** Square icon button; supply aria-label or aria-labelledby. */\n iconOnly?: boolean;\n /** Blocks actions while retaining keyboard focus. */\n pending?: boolean;\n }>(),\n {\n ariaLabel: undefined,\n ariaLabelledby: undefined,\n variant: 'primary',\n size: 'md',\n fullWidth: false,\n type: 'button',\n disabled: false,\n iconOnly: false,\n pending: false,\n },\n);\n\ndefineSlots<{\n default?: (state: {\n pending: boolean;\n disabled: boolean;\n hovered: boolean;\n pressed: boolean;\n focused: boolean;\n focusVisible: boolean;\n }) => unknown;\n}>();\n\nconst hovered = ref(false),\n pressed = ref(false),\n focused = ref(false),\n focusVisible = ref(false);\nwatch(\n () => [props.disabled, props.pending],\n ([disabled, pending]) => {\n if (disabled || pending) {\n hovered.value = false;\n pressed.value = false;\n }\n if (props.disabled) {\n focused.value = false;\n focusVisible.value = false;\n }\n },\n);\nfunction hover(event: PointerEvent) {\n if (!props.disabled && !props.pending && event.pointerType !== 'touch') hovered.value = true;\n}\nfunction pointerdown(event: PointerEvent) {\n focusVisible.value = false;\n if (!props.disabled && !props.pending && event.button === 0) pressed.value = true;\n}\nfunction leave() {\n hovered.value = false;\n pressed.value = false;\n}\nfunction focus(event: FocusEvent) {\n focused.value = true;\n focusVisible.value = (event.target as HTMLButtonElement).matches(':focus-visible');\n}\nfunction blur() {\n focused.value = false;\n focusVisible.value = false;\n pressed.value = false;\n}\n\nconst emit = defineEmits<{\n /** Emitted when the button is clicked. Listen with `@press`, where React uses `onPress`. */\n press: [event: MouseEvent];\n}>();\n\nconst classes = computed(() => [\n 'button',\n `button--${props.variant}`,\n props.size !== 'md' && `button--${props.size}`,\n props.iconOnly && 'button--icon-only',\n props.fullWidth && !props.iconOnly && 'button--full-width',\n]);\nfunction press(event: MouseEvent) {\n if (props.disabled || props.pending) {\n event.preventDefault();\n event.stopImmediatePropagation();\n return;\n }\n emit('press', event);\n}\nfunction keydown(event: KeyboardEvent) {\n if (focused.value) focusVisible.value = true;\n if (props.pending && (event.key === 'Enter' || event.key === ' ')) {\n event.preventDefault();\n event.stopImmediatePropagation();\n return;\n }\n if (!props.disabled && (event.key === 'Enter' || event.key === ' ')) pressed.value = true;\n}\n</script>\n\n<template>\n <button\n :class=\"classes\"\n :aria-label=\"ariaLabel\"\n :aria-labelledby=\"ariaLabelledby\"\n :type=\"pending ? 'button' : type\"\n :disabled=\"disabled\"\n :aria-disabled=\"pending || undefined\"\n :data-pending=\"pending || undefined\"\n @click=\"press\"\n @keydown=\"keydown\"\n @keyup=\"pressed = false\"\n @pointerenter=\"hover\"\n @pointerleave=\"leave\"\n @pointerdown=\"pointerdown\"\n @pointerup=\"pressed = false\"\n @pointercancel=\"pressed = false\"\n @focus=\"focus\"\n @blur=\"blur\"\n >\n <slot\n :pending=\"pending\"\n :disabled=\"disabled\"\n :hovered=\"hovered\"\n :pressed=\"pressed\"\n :focused=\"focused\"\n :focus-visible=\"focusVisible\"\n />\n </button>\n</template>\n","import { cloneVNode, defineComponent, Fragment, h, type PropType, type VNode } from 'vue';\nimport Button from './Button.vue';\nimport type { ButtonSize, ButtonVariant } from './types.js';\n\nexport default /* @__PURE__ */ defineComponent({\n name: 'ButtonGroup',\n inheritAttrs: false,\n props: {\n label: { type: String, required: true },\n variant: { type: String as PropType<ButtonVariant>, default: undefined },\n size: { type: String as PropType<ButtonSize>, default: undefined },\n disabled: { type: Boolean, default: undefined },\n fullWidth: Boolean,\n orientation: { type: String as PropType<'horizontal' | 'vertical'>, default: 'horizontal' },\n dir: { type: String as PropType<'ltr' | 'rtl'>, default: undefined },\n },\n setup(props, { slots, attrs }) {\n function defaults(nodes: VNode[]): VNode[] {\n return nodes.map((child) => {\n if (child.type === Fragment && Array.isArray(child.children)) {\n const fragment = cloneVNode(child);\n fragment.children = defaults(child.children as VNode[]);\n return fragment;\n }\n if (child.type !== Button) return child;\n return cloneVNode(child, {\n variant: child.props?.variant ?? props.variant,\n size: child.props?.size ?? props.size,\n disabled: child.props?.disabled ?? props.disabled,\n });\n });\n }\n return () =>\n h(\n 'div',\n {\n ...attrs,\n role: 'group',\n 'aria-label': props.label,\n dir: props.dir,\n 'data-orientation': props.orientation,\n class: ['button-group', props.fullWidth && 'button-group--full-width'],\n },\n defaults(slots.default?.() ?? []),\n );\n },\n});\n","import { defineComponent, h } from 'vue';\nexport default /* @__PURE__ */ defineComponent({\n name: 'ButtonGroupSeparator',\n setup: () => () => h('span', { class: 'button-group__separator', 'aria-hidden': 'true' }),\n});\n","import type { ComputedRef, InjectionKey } from 'vue';\nimport type { ButtonSize } from './types.js';\nexport const toggleButtonGroupKey: InjectionKey<\n ComputedRef<{\n size: ButtonSize;\n radio: boolean;\n selectedIds: string[];\n disabled: boolean;\n }>\n> = Symbol('KazeeToggleButtonGroup');\n","<script setup lang=\"ts\">\nimport { computed, getCurrentInstance, inject, ref } from 'vue';\nimport { Toggle, ToggleGroupItem } from 'reka-ui';\nimport { toggleButtonGroupKey } from './button-family-context.js';\nimport type { ButtonSize } from './types.js';\ndefineOptions({ inheritAttrs: false });\nconst props = withDefaults(\n defineProps<{\n id?: string;\n variant?: 'default' | 'ghost';\n size?: ButtonSize;\n iconOnly?: boolean;\n modelValue?: boolean;\n defaultSelected?: boolean;\n disabled?: boolean;\n }>(),\n { id: undefined, size: undefined, variant: 'default', modelValue: undefined },\n);\nconst emit = defineEmits<{\n 'update:modelValue': [selected: boolean];\n press: [event: MouseEvent];\n}>();\ndefineSlots<{ default?: (state: { selected: boolean; disabled: boolean }) => unknown }>();\nconst group = inject(toggleButtonGroupKey, undefined);\nif (group && !props.id) throw new Error('A grouped ToggleButton requires a unique nonempty id.');\nconst instance = getCurrentInstance();\nconst local = ref(props.defaultSelected ?? false);\nconst controlled = () =>\n Object.prototype.hasOwnProperty.call(instance?.vnode.props ?? {}, 'modelValue');\nconst selected = computed(() => (controlled() ? !!props.modelValue : local.value));\nconst classes = computed(() => {\n const size = props.size ?? group?.value.size ?? 'md';\n return [\n 'button',\n 'toggle-button',\n `toggle-button--${props.variant}`,\n size !== 'md' && `button--${size}`,\n props.iconOnly && 'button--icon-only',\n ];\n});\nfunction update(value: boolean) {\n if (props.disabled) return;\n if (!controlled()) local.value = value;\n emit('update:modelValue', value);\n}\nfunction press(event: MouseEvent) {\n if (!props.disabled && !group?.value.disabled) emit('press', event);\n}\n</script>\n<template>\n <ToggleGroupItem\n v-if=\"group\"\n v-bind=\"$attrs\"\n :id=\"id\"\n :value=\"id ?? ''\"\n :class=\"classes\"\n :disabled=\"disabled\"\n :role=\"group.radio ? 'radio' : undefined\"\n :aria-checked=\"group.radio ? group.selectedIds.includes(id ?? '') : undefined\"\n :aria-pressed=\"group.radio ? undefined : group.selectedIds.includes(id ?? '')\"\n @click=\"press\"\n >\n <template #default=\"state\"\n ><slot :selected=\"!!state.modelValue\" :disabled=\"state.disabled\"\n /></template>\n </ToggleGroupItem>\n <Toggle\n v-else\n v-bind=\"$attrs\"\n :id=\"id\"\n :class=\"classes\"\n :model-value=\"selected\"\n :disabled=\"disabled\"\n @update:model-value=\"update\"\n @click=\"press\"\n >\n <slot :selected=\"selected\" :disabled=\"!!disabled\" />\n </Toggle>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, getCurrentInstance, inject, ref } from 'vue';\nimport { Toggle, ToggleGroupItem } from 'reka-ui';\nimport { toggleButtonGroupKey } from './button-family-context.js';\nimport type { ButtonSize } from './types.js';\ndefineOptions({ inheritAttrs: false });\nconst props = withDefaults(\n defineProps<{\n id?: string;\n variant?: 'default' | 'ghost';\n size?: ButtonSize;\n iconOnly?: boolean;\n modelValue?: boolean;\n defaultSelected?: boolean;\n disabled?: boolean;\n }>(),\n { id: undefined, size: undefined, variant: 'default', modelValue: undefined },\n);\nconst emit = defineEmits<{\n 'update:modelValue': [selected: boolean];\n press: [event: MouseEvent];\n}>();\ndefineSlots<{ default?: (state: { selected: boolean; disabled: boolean }) => unknown }>();\nconst group = inject(toggleButtonGroupKey, undefined);\nif (group && !props.id) throw new Error('A grouped ToggleButton requires a unique nonempty id.');\nconst instance = getCurrentInstance();\nconst local = ref(props.defaultSelected ?? false);\nconst controlled = () =>\n Object.prototype.hasOwnProperty.call(instance?.vnode.props ?? {}, 'modelValue');\nconst selected = computed(() => (controlled() ? !!props.modelValue : local.value));\nconst classes = computed(() => {\n const size = props.size ?? group?.value.size ?? 'md';\n return [\n 'button',\n 'toggle-button',\n `toggle-button--${props.variant}`,\n size !== 'md' && `button--${size}`,\n props.iconOnly && 'button--icon-only',\n ];\n});\nfunction update(value: boolean) {\n if (props.disabled) return;\n if (!controlled()) local.value = value;\n emit('update:modelValue', value);\n}\nfunction press(event: MouseEvent) {\n if (!props.disabled && !group?.value.disabled) emit('press', event);\n}\n</script>\n<template>\n <ToggleGroupItem\n v-if=\"group\"\n v-bind=\"$attrs\"\n :id=\"id\"\n :value=\"id ?? ''\"\n :class=\"classes\"\n :disabled=\"disabled\"\n :role=\"group.radio ? 'radio' : undefined\"\n :aria-checked=\"group.radio ? group.selectedIds.includes(id ?? '') : undefined\"\n :aria-pressed=\"group.radio ? undefined : group.selectedIds.includes(id ?? '')\"\n @click=\"press\"\n >\n <template #default=\"state\"\n ><slot :selected=\"!!state.modelValue\" :disabled=\"state.disabled\"\n /></template>\n </ToggleGroupItem>\n <Toggle\n v-else\n v-bind=\"$attrs\"\n :id=\"id\"\n :class=\"classes\"\n :model-value=\"selected\"\n :disabled=\"disabled\"\n @update:model-value=\"update\"\n @click=\"press\"\n >\n <slot :selected=\"selected\" :disabled=\"!!disabled\" />\n </Toggle>\n</template>\n","<script setup lang=\"ts\" generic=\"M extends 'single' | 'multiple' = 'single'\">\nimport { computed, getCurrentInstance, provide, ref } from 'vue';\nimport { ToggleGroupRoot } from 'reka-ui';\nimport { toggleButtonGroupKey } from './button-family-context.js';\nimport type { ButtonSize } from './types.js';\ntype Value = M extends 'multiple' ? string[] : string | null;\nconst props = defineProps<{\n label: string;\n selectionMode?: M;\n modelValue?: Value;\n defaultValue?: Value;\n disabled?: boolean;\n detached?: boolean;\n fullWidth?: boolean;\n size?: ButtonSize;\n orientation?: 'horizontal' | 'vertical';\n dir?: 'ltr' | 'rtl';\n disallowEmptySelection?: boolean;\n}>();\nconst emit = defineEmits<{ 'update:modelValue': [value: Value] }>();\ndefineSlots<{ default?: () => unknown }>();\nconst instance = getCurrentInstance();\nconst controlled = () =>\n Object.prototype.hasOwnProperty.call(instance?.vnode.props ?? {}, 'modelValue');\nconst local = ref<unknown>(props.defaultValue);\nconst multiple = computed(() => props.selectionMode === 'multiple');\nconst ids = computed(() => {\n const value = controlled() ? props.modelValue : local.value;\n return Array.isArray(value) ? value : typeof value === 'string' && value ? [value] : [];\n});\nfunction update(value: unknown) {\n if (props.disabled) return;\n const next = Array.isArray(value) ? value : typeof value === 'string' && value ? [value] : [];\n if (next.length === ids.value.length && next.every((id, index) => id === ids.value[index]))\n return;\n if (props.disallowEmptySelection && ids.value.length && !next.length) return;\n const result = (multiple.value ? next : (next[0] ?? null)) as Value;\n if (!controlled()) local.value = result;\n emit('update:modelValue', result);\n}\nconst radio = computed(() => !multiple.value);\nprovide(\n toggleButtonGroupKey,\n computed(() => ({\n size: props.size ?? 'md',\n radio: radio.value,\n selectedIds: ids.value,\n disabled: !!props.disabled,\n })),\n);\n</script>\n<template>\n <ToggleGroupRoot\n as-child\n class=\"button-group toggle-button-group\"\n :class=\"{ 'button-group--detached': detached, 'button-group--full-width': fullWidth }\"\n :aria-label=\"label\"\n :aria-orientation=\"orientation ?? 'horizontal'\"\n :aria-disabled=\"disabled || undefined\"\n :type=\"multiple ? 'multiple' : 'single'\"\n :model-value=\"multiple ? ids : (ids[0] ?? '')\"\n :disabled=\"disabled\"\n :orientation=\"orientation ?? 'horizontal'\"\n :data-orientation=\"orientation ?? 'horizontal'\"\n :dir=\"dir\"\n @update:model-value=\"update\"\n >\n <div :role=\"radio ? 'radiogroup' : 'toolbar'\"><slot /></div>\n </ToggleGroupRoot>\n</template>\n","<script setup lang=\"ts\" generic=\"M extends 'single' | 'multiple' = 'single'\">\nimport { computed, getCurrentInstance, provide, ref } from 'vue';\nimport { ToggleGroupRoot } from 'reka-ui';\nimport { toggleButtonGroupKey } from './button-family-context.js';\nimport type { ButtonSize } from './types.js';\ntype Value = M extends 'multiple' ? string[] : string | null;\nconst props = defineProps<{\n label: string;\n selectionMode?: M;\n modelValue?: Value;\n defaultValue?: Value;\n disabled?: boolean;\n detached?: boolean;\n fullWidth?: boolean;\n size?: ButtonSize;\n orientation?: 'horizontal' | 'vertical';\n dir?: 'ltr' | 'rtl';\n disallowEmptySelection?: boolean;\n}>();\nconst emit = defineEmits<{ 'update:modelValue': [value: Value] }>();\ndefineSlots<{ default?: () => unknown }>();\nconst instance = getCurrentInstance();\nconst controlled = () =>\n Object.prototype.hasOwnProperty.call(instance?.vnode.props ?? {}, 'modelValue');\nconst local = ref<unknown>(props.defaultValue);\nconst multiple = computed(() => props.selectionMode === 'multiple');\nconst ids = computed(() => {\n const value = controlled() ? props.modelValue : local.value;\n return Array.isArray(value) ? value : typeof value === 'string' && value ? [value] : [];\n});\nfunction update(value: unknown) {\n if (props.disabled) return;\n const next = Array.isArray(value) ? value : typeof value === 'string' && value ? [value] : [];\n if (next.length === ids.value.length && next.every((id, index) => id === ids.value[index]))\n return;\n if (props.disallowEmptySelection && ids.value.length && !next.length) return;\n const result = (multiple.value ? next : (next[0] ?? null)) as Value;\n if (!controlled()) local.value = result;\n emit('update:modelValue', result);\n}\nconst radio = computed(() => !multiple.value);\nprovide(\n toggleButtonGroupKey,\n computed(() => ({\n size: props.size ?? 'md',\n radio: radio.value,\n selectedIds: ids.value,\n disabled: !!props.disabled,\n })),\n);\n</script>\n<template>\n <ToggleGroupRoot\n as-child\n class=\"button-group toggle-button-group\"\n :class=\"{ 'button-group--detached': detached, 'button-group--full-width': fullWidth }\"\n :aria-label=\"label\"\n :aria-orientation=\"orientation ?? 'horizontal'\"\n :aria-disabled=\"disabled || undefined\"\n :type=\"multiple ? 'multiple' : 'single'\"\n :model-value=\"multiple ? ids : (ids[0] ?? '')\"\n :disabled=\"disabled\"\n :orientation=\"orientation ?? 'horizontal'\"\n :data-orientation=\"orientation ?? 'horizontal'\"\n :dir=\"dir\"\n @update:model-value=\"update\"\n >\n <div :role=\"radio ? 'radiogroup' : 'toolbar'\"><slot /></div>\n </ToggleGroupRoot>\n</template>\n","<template>\n <svg\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M3.5 8.5l3 3 6-6.5\" />\n </svg>\n</template>\n","<template>\n <svg\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M4 6l4 4 4-4\" />\n </svg>\n</template>\n","<template>\n <svg\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M4 4l8 8M12 4l-8 8\" />\n </svg>\n</template>\n","<script setup lang=\"ts\">\nwithDefaults(\n defineProps<{\n controlId: string;\n description?: string;\n errorMessage?: string;\n showError: boolean;\n }>(),\n { description: undefined, errorMessage: undefined },\n);\n</script>\n<template>\n <div v-if=\"description || showError\" class=\"field-feedback\">\n <span v-if=\"description\" :id=\"`${controlId}-description`\" class=\"input__description\">{{\n description\n }}</span>\n <span v-if=\"showError\" :id=\"`${controlId}-error`\" class=\"input__error\">{{ errorMessage }}</span>\n </div>\n</template>\n","<script setup lang=\"ts\">\nwithDefaults(\n defineProps<{\n controlId: string;\n description?: string;\n errorMessage?: string;\n showError: boolean;\n }>(),\n { description: undefined, errorMessage: undefined },\n);\n</script>\n<template>\n <div v-if=\"description || showError\" class=\"field-feedback\">\n <span v-if=\"description\" :id=\"`${controlId}-description`\" class=\"input__description\">{{\n description\n }}</span>\n <span v-if=\"showError\" :id=\"`${controlId}-error`\" class=\"input__error\">{{ errorMessage }}</span>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { ref, onMounted, onBeforeUnmount } from 'vue';\ndefineProps<{ hasValue: boolean; required?: boolean; disabled?: boolean }>();\nconst emit = defineEmits<{ invalid: []; reset: [cancelled: boolean] }>();\nconst input = ref<HTMLInputElement>();\nlet form: HTMLFormElement | null | undefined;\nconst reset = (event: Event) => setTimeout(() => emit('reset', event.defaultPrevented), 0);\nonMounted(() => {\n form = input.value?.form;\n form?.addEventListener('reset', reset);\n});\nonBeforeUnmount(() => form?.removeEventListener('reset', reset));\n</script>\n<template>\n <input\n ref=\"input\"\n class=\"selection__validation\"\n type=\"text\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n autocomplete=\"off\"\n :required=\"required\"\n :disabled=\"disabled\"\n :value=\"hasValue ? 'selected' : ''\"\n @invalid.prevent=\"emit('invalid')\"\n />\n</template>\n","<script setup lang=\"ts\">\nimport { ref, onMounted, onBeforeUnmount } from 'vue';\ndefineProps<{ hasValue: boolean; required?: boolean; disabled?: boolean }>();\nconst emit = defineEmits<{ invalid: []; reset: [cancelled: boolean] }>();\nconst input = ref<HTMLInputElement>();\nlet form: HTMLFormElement | null | undefined;\nconst reset = (event: Event) => setTimeout(() => emit('reset', event.defaultPrevented), 0);\nonMounted(() => {\n form = input.value?.form;\n form?.addEventListener('reset', reset);\n});\nonBeforeUnmount(() => form?.removeEventListener('reset', reset));\n</script>\n<template>\n <input\n ref=\"input\"\n class=\"selection__validation\"\n type=\"text\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n autocomplete=\"off\"\n :required=\"required\"\n :disabled=\"disabled\"\n :value=\"hasValue ? 'selected' : ''\"\n @invalid.prevent=\"emit('invalid')\"\n />\n</template>\n","import { computed } from 'vue';\nimport { useId } from 'reka-ui';\nexport function useFeedback(props: {\n id?: string;\n description?: string;\n errorMessage?: string;\n invalid?: boolean;\n}) {\n const generated = useId();\n const controlId = computed(() => props.id ?? generated);\n const showError = computed(() => !!(props.invalid && props.errorMessage));\n const describedBy = computed(\n () =>\n [\n props.description && `${controlId.value}-description`,\n showError.value && `${controlId.value}-error`,\n ]\n .filter(Boolean)\n .join(' ') || undefined,\n );\n return { controlId, showError, describedBy };\n}\n","export interface SelectOption {\n id: string;\n label: string;\n description?: string;\n isDisabled?: boolean;\n}\nexport function selectionIds(value: unknown, options: SelectOption[], multiple: boolean): string[] {\n const requested = new Set(\n Array.isArray(value) ? value : typeof value === 'string' ? [value] : [],\n );\n const ids = [\n ...new Set(options.filter((o) => o.id !== '' && requested.has(o.id)).map((o) => o.id)),\n ];\n return multiple ? ids : ids.slice(0, 1);\n}\nexport function filterOptions(options: SelectOption[], query: string): SelectOption[] {\n const fold = (text: string) => text.normalize('NFD').replace(/\\p{M}/gu, '').toLowerCase();\n const search = fold(query.trim());\n return options.filter((o) => fold(`${o.label} ${o.description ?? ''}`).includes(search));\n}\n","<script setup lang=\"ts\" generic=\"M extends 'single' | 'multiple' = 'single'\">\nimport { computed, ref, getCurrentInstance } from 'vue';\nimport {\n SelectContent,\n SelectItem,\n SelectItemText,\n SelectPortal,\n SelectRoot,\n SelectTrigger,\n SelectValue,\n SelectViewport,\n} from 'reka-ui';\nimport CheckIcon from './CheckIcon.vue';\nimport ChevronIcon from './ChevronIcon.vue';\nimport CloseIcon from './CloseIcon.vue';\nimport FieldFeedback from './FieldFeedback.vue';\nimport SelectionValidation from './SelectionValidation.vue';\nimport { useFeedback } from './useFeedback.js';\nimport { selectionIds, type SelectOption } from './selection-options.js';\nimport type { SelectSize, SelectVariant } from './types.js';\ntype Value = M extends 'multiple' ? string[] : string | undefined;\nconst props = withDefaults(\n defineProps<{\n label: string;\n options: SelectOption[];\n size?: SelectSize;\n variant?: SelectVariant;\n hideLabel?: boolean;\n fullWidth?: boolean;\n placeholder?: string;\n selectionMode?: M;\n modelValue?: Value;\n defaultValue?: Value;\n disabled?: boolean;\n required?: boolean;\n invalid?: boolean;\n description?: string;\n errorMessage?: string;\n requiredMessage?: string;\n name?: string;\n dir?: 'ltr' | 'rtl';\n clearable?: boolean;\n clearLabel?: string;\n }>(),\n {\n fullWidth: true,\n size: 'md',\n variant: 'primary',\n placeholder: undefined,\n selectionMode: undefined,\n modelValue: undefined,\n defaultValue: undefined,\n description: undefined,\n errorMessage: undefined,\n requiredMessage: undefined,\n name: undefined,\n dir: undefined,\n clearLabel: undefined,\n },\n);\nconst emit = defineEmits<{ 'update:modelValue': [value: Value]; clear: []; close: [] }>();\nfunction afterClose() {\n queueMicrotask(() => emit('close'));\n}\ndefineSlots<{\n start?: () => unknown;\n option?: (props: { option: SelectOption }) => unknown;\n value?: (props: { selected: SelectOption[] }) => unknown;\n}>();\nconst instance = getCurrentInstance();\nconst controlled = () =>\n Object.prototype.hasOwnProperty.call(instance?.vnode.props ?? {}, 'modelValue');\nconst local = ref<unknown>(props.defaultValue);\nconst tried = ref(false);\nconst wrapper = ref<HTMLDivElement>();\nconst multiple = computed(() => props.selectionMode === 'multiple');\nconst ids = computed(() =>\n selectionIds(controlled() ? props.modelValue : local.value, props.options, multiple.value),\n);\nconst selected = computed(() => props.options.filter((o) => ids.value.includes(o.id)));\nconst invalid = computed(\n () => props.invalid || (tried.value && props.required && ids.value.length === 0),\n);\nconst error = computed(\n () =>\n props.errorMessage ??\n (props.required && ids.value.length === 0\n ? (props.requiredMessage ?? 'Pilihan wajib diisi.')\n : undefined),\n);\nconst { controlId, describedBy, showError } = useFeedback({\n get description() {\n return props.description;\n },\n get invalid() {\n return invalid.value;\n },\n get errorMessage() {\n return error.value;\n },\n});\nfunction focus() {\n wrapper.value?.querySelector<HTMLButtonElement>('.select__trigger')?.focus();\n}\nfunction update(value: unknown) {\n if (props.disabled) return;\n const next = selectionIds(value, props.options, multiple.value);\n const result = (multiple.value ? next : next[0]) as Value;\n local.value = result;\n emit('update:modelValue', result);\n}\nfunction clear() {\n update(multiple.value ? [] : undefined);\n emit('clear');\n focus();\n}\nfunction reset(cancelled: boolean) {\n if (!cancelled) {\n tried.value = false;\n if (!controlled()) local.value = props.defaultValue;\n }\n}\n</script>\n<template>\n <div\n ref=\"wrapper\"\n :class=\"[\n 'select',\n `select--${size ?? 'md'}`,\n `select--${variant ?? 'primary'}`,\n hideLabel && 'select--label-hidden',\n fullWidth === false && 'select--fit',\n ]\"\n :data-multiple=\"multiple || undefined\"\n :dir=\"dir\"\n >\n <label class=\"select__label\" :for=\"controlId\"\n >{{ label\n }}<span v-if=\"required\" class=\"selection__required\" aria-hidden=\"true\"> *</span></label\n >\n <SelectRoot\n :model-value=\"multiple ? ids : (ids[0] ?? '')\"\n :multiple=\"multiple\"\n :disabled=\"disabled\"\n :dir=\"dir\"\n @update:model-value=\"update\"\n >\n <div class=\"select__control\" :data-clearable=\"clearable || undefined\">\n <SelectTrigger\n :id=\"controlId\"\n class=\"select__trigger\"\n :aria-required=\"required || undefined\"\n :aria-invalid=\"invalid || undefined\"\n :aria-describedby=\"describedBy\"\n >\n <span v-if=\"$slots.start\" class=\"selection__leading\" aria-hidden=\"true\"\n ><slot name=\"start\"\n /></span>\n <SelectValue class=\"select__value\" :placeholder=\"placeholder\"\n ><slot v-if=\"selected.length\" name=\"value\" :selected=\"selected\">{{\n selected.map((o) => o.label).join(', ')\n }}</slot\n ><template v-else>{{ placeholder }}</template></SelectValue\n >\n <ChevronIcon class=\"select__icon\" />\n </SelectTrigger>\n <button\n v-if=\"clearable\"\n type=\"button\"\n class=\"selection__clear\"\n :data-empty=\"ids.length === 0 || undefined\"\n :aria-hidden=\"ids.length === 0 || undefined\"\n :tabindex=\"ids.length === 0 ? -1 : undefined\"\n :aria-label=\"clearLabel ?? 'Hapus pilihan'\"\n :disabled=\"disabled || ids.length === 0\"\n @click=\"clear\"\n >\n <CloseIcon class=\"selection__close-icon\" />\n </button>\n </div>\n <SelectPortal\n ><SelectContent\n class=\"select__popover\"\n position=\"popper\"\n :side-offset=\"4\"\n @close-auto-focus=\"afterClose\"\n ><SelectViewport class=\"select__list\">\n <SelectItem\n v-for=\"option in options\"\n :key=\"option.id\"\n :value=\"option.id\"\n :text-value=\"option.label\"\n :disabled=\"option.isDisabled\"\n class=\"select__item\"\n >\n <SelectItemText class=\"select__item-label\"\n ><slot name=\"option\" :option=\"option\"\n >{{ option.label\n }}<span v-if=\"option.description\" class=\"selection__description\">{{\n option.description\n }}</span></slot\n ></SelectItemText\n ><CheckIcon class=\"select__check\" />\n </SelectItem> </SelectViewport></SelectContent\n ></SelectPortal>\n </SelectRoot>\n <FieldFeedback\n :control-id=\"controlId\"\n :description=\"description\"\n :error-message=\"error\"\n :show-error=\"showError\"\n />\n <template v-if=\"name\"\n ><input\n v-for=\"(id, i) in multiple ? ids : [ids[0] ?? '']\"\n :key=\"i\"\n type=\"hidden\"\n :name=\"name\"\n :value=\"id\"\n :disabled=\"disabled\"\n /></template>\n <SelectionValidation\n :has-value=\"ids.length > 0\"\n :required=\"required\"\n :disabled=\"disabled\"\n @invalid=\"\n tried = true;\n focus();\n \"\n @reset=\"reset\"\n />\n </div>\n</template>\n","<script setup lang=\"ts\" generic=\"M extends 'single' | 'multiple' = 'single'\">\nimport { computed, ref, getCurrentInstance } from 'vue';\nimport {\n SelectContent,\n SelectItem,\n SelectItemText,\n SelectPortal,\n SelectRoot,\n SelectTrigger,\n SelectValue,\n SelectViewport,\n} from 'reka-ui';\nimport CheckIcon from './CheckIcon.vue';\nimport ChevronIcon from './ChevronIcon.vue';\nimport CloseIcon from './CloseIcon.vue';\nimport FieldFeedback from './FieldFeedback.vue';\nimport SelectionValidation from './SelectionValidation.vue';\nimport { useFeedback } from './useFeedback.js';\nimport { selectionIds, type SelectOption } from './selection-options.js';\nimport type { SelectSize, SelectVariant } from './types.js';\ntype Value = M extends 'multiple' ? string[] : string | undefined;\nconst props = withDefaults(\n defineProps<{\n label: string;\n options: SelectOption[];\n size?: SelectSize;\n variant?: SelectVariant;\n hideLabel?: boolean;\n fullWidth?: boolean;\n placeholder?: string;\n selectionMode?: M;\n modelValue?: Value;\n defaultValue?: Value;\n disabled?: boolean;\n required?: boolean;\n invalid?: boolean;\n description?: string;\n errorMessage?: string;\n requiredMessage?: string;\n name?: string;\n dir?: 'ltr' | 'rtl';\n clearable?: boolean;\n clearLabel?: string;\n }>(),\n {\n fullWidth: true,\n size: 'md',\n variant: 'primary',\n placeholder: undefined,\n selectionMode: undefined,\n modelValue: undefined,\n defaultValue: undefined,\n description: undefined,\n errorMessage: undefined,\n requiredMessage: undefined,\n name: undefined,\n dir: undefined,\n clearLabel: undefined,\n },\n);\nconst emit = defineEmits<{ 'update:modelValue': [value: Value]; clear: []; close: [] }>();\nfunction afterClose() {\n queueMicrotask(() => emit('close'));\n}\ndefineSlots<{\n start?: () => unknown;\n option?: (props: { option: SelectOption }) => unknown;\n value?: (props: { selected: SelectOption[] }) => unknown;\n}>();\nconst instance = getCurrentInstance();\nconst controlled = () =>\n Object.prototype.hasOwnProperty.call(instance?.vnode.props ?? {}, 'modelValue');\nconst local = ref<unknown>(props.defaultValue);\nconst tried = ref(false);\nconst wrapper = ref<HTMLDivElement>();\nconst multiple = computed(() => props.selectionMode === 'multiple');\nconst ids = computed(() =>\n selectionIds(controlled() ? props.modelValue : local.value, props.options, multiple.value),\n);\nconst selected = computed(() => props.options.filter((o) => ids.value.includes(o.id)));\nconst invalid = computed(\n () => props.invalid || (tried.value && props.required && ids.value.length === 0),\n);\nconst error = computed(\n () =>\n props.errorMessage ??\n (props.required && ids.value.length === 0\n ? (props.requiredMessage ?? 'Pilihan wajib diisi.')\n : undefined),\n);\nconst { controlId, describedBy, showError } = useFeedback({\n get description() {\n return props.description;\n },\n get invalid() {\n return invalid.value;\n },\n get errorMessage() {\n return error.value;\n },\n});\nfunction focus() {\n wrapper.value?.querySelector<HTMLButtonElement>('.select__trigger')?.focus();\n}\nfunction update(value: unknown) {\n if (props.disabled) return;\n const next = selectionIds(value, props.options, multiple.value);\n const result = (multiple.value ? next : next[0]) as Value;\n local.value = result;\n emit('update:modelValue', result);\n}\nfunction clear() {\n update(multiple.value ? [] : undefined);\n emit('clear');\n focus();\n}\nfunction reset(cancelled: boolean) {\n if (!cancelled) {\n tried.value = false;\n if (!controlled()) local.value = props.defaultValue;\n }\n}\n</script>\n<template>\n <div\n ref=\"wrapper\"\n :class=\"[\n 'select',\n `select--${size ?? 'md'}`,\n `select--${variant ?? 'primary'}`,\n hideLabel && 'select--label-hidden',\n fullWidth === false && 'select--fit',\n ]\"\n :data-multiple=\"multiple || undefined\"\n :dir=\"dir\"\n >\n <label class=\"select__label\" :for=\"controlId\"\n >{{ label\n }}<span v-if=\"required\" class=\"selection__required\" aria-hidden=\"true\"> *</span></label\n >\n <SelectRoot\n :model-value=\"multiple ? ids : (ids[0] ?? '')\"\n :multiple=\"multiple\"\n :disabled=\"disabled\"\n :dir=\"dir\"\n @update:model-value=\"update\"\n >\n <div class=\"select__control\" :data-clearable=\"clearable || undefined\">\n <SelectTrigger\n :id=\"controlId\"\n class=\"select__trigger\"\n :aria-required=\"required || undefined\"\n :aria-invalid=\"invalid || undefined\"\n :aria-describedby=\"describedBy\"\n >\n <span v-if=\"$slots.start\" class=\"selection__leading\" aria-hidden=\"true\"\n ><slot name=\"start\"\n /></span>\n <SelectValue class=\"select__value\" :placeholder=\"placeholder\"\n ><slot v-if=\"selected.length\" name=\"value\" :selected=\"selected\">{{\n selected.map((o) => o.label).join(', ')\n }}</slot\n ><template v-else>{{ placeholder }}</template></SelectValue\n >\n <ChevronIcon class=\"select__icon\" />\n </SelectTrigger>\n <button\n v-if=\"clearable\"\n type=\"button\"\n class=\"selection__clear\"\n :data-empty=\"ids.length === 0 || undefined\"\n :aria-hidden=\"ids.length === 0 || undefined\"\n :tabindex=\"ids.length === 0 ? -1 : undefined\"\n :aria-label=\"clearLabel ?? 'Hapus pilihan'\"\n :disabled=\"disabled || ids.length === 0\"\n @click=\"clear\"\n >\n <CloseIcon class=\"selection__close-icon\" />\n </button>\n </div>\n <SelectPortal\n ><SelectContent\n class=\"select__popover\"\n position=\"popper\"\n :side-offset=\"4\"\n @close-auto-focus=\"afterClose\"\n ><SelectViewport class=\"select__list\">\n <SelectItem\n v-for=\"option in options\"\n :key=\"option.id\"\n :value=\"option.id\"\n :text-value=\"option.label\"\n :disabled=\"option.isDisabled\"\n class=\"select__item\"\n >\n <SelectItemText class=\"select__item-label\"\n ><slot name=\"option\" :option=\"option\"\n >{{ option.label\n }}<span v-if=\"option.description\" class=\"selection__description\">{{\n option.description\n }}</span></slot\n ></SelectItemText\n ><CheckIcon class=\"select__check\" />\n </SelectItem> </SelectViewport></SelectContent\n ></SelectPortal>\n </SelectRoot>\n <FieldFeedback\n :control-id=\"controlId\"\n :description=\"description\"\n :error-message=\"error\"\n :show-error=\"showError\"\n />\n <template v-if=\"name\"\n ><input\n v-for=\"(id, i) in multiple ? ids : [ids[0] ?? '']\"\n :key=\"i\"\n type=\"hidden\"\n :name=\"name\"\n :value=\"id\"\n :disabled=\"disabled\"\n /></template>\n <SelectionValidation\n :has-value=\"ids.length > 0\"\n :required=\"required\"\n :disabled=\"disabled\"\n @invalid=\"\n tried = true;\n focus();\n \"\n @reset=\"reset\"\n />\n </div>\n</template>\n","import { cloneVNode, defineComponent, Fragment, h, type PropType, type VNode } from 'vue';\nimport Select from './Select.vue';\nimport type { SelectSize, SelectVariant } from './types.js';\nexport default /* @__PURE__ */ defineComponent({\n name: 'SelectGroup',\n inheritAttrs: false,\n props: {\n label: { type: String, required: true },\n size: { type: String as PropType<SelectSize>, default: undefined },\n variant: { type: String as PropType<SelectVariant>, default: undefined },\n fullWidth: { type: Boolean, default: true },\n disabled: Boolean,\n dir: { type: String as PropType<'ltr' | 'rtl'>, default: undefined },\n },\n setup(props, { slots }) {\n function defaults(nodes: VNode[]): VNode[] {\n return nodes.map((child) => {\n if (child.type === Fragment && Array.isArray(child.children)) {\n const fragment = cloneVNode(child);\n fragment.children = defaults(child.children as VNode[]);\n return fragment;\n }\n if (child.type !== Select) return child;\n return cloneVNode(child, {\n size: child.props?.size ?? props.size,\n variant: child.props?.variant ?? props.variant,\n hideLabel: child.props?.hideLabel ?? child.props?.['hide-label'] ?? true,\n fullWidth: child.props?.fullWidth ?? child.props?.['full-width'] ?? props.fullWidth,\n disabled: props.disabled || child.props?.disabled,\n dir: child.props?.dir ?? props.dir,\n });\n });\n }\n return () =>\n h(\n 'fieldset',\n {\n class: ['select-group', !props.fullWidth && 'select-group--fit'],\n disabled: props.disabled,\n dir: props.dir,\n },\n [\n h('legend', { class: 'select-group__legend' }, props.label),\n h('div', { class: 'select-group__controls' }, defaults(slots.default?.() ?? [])),\n ],\n );\n },\n});\n","<script setup lang=\"ts\">\nimport { computed, onMounted, ref } from 'vue';\nimport { Label, useId } from 'reka-ui';\nimport type { InputSize, InputType, InputVariant, InputMode, InputEnterKeyHint } from './types.js';\n\ndefineOptions({ inheritAttrs: false });\n\nconst props = withDefaults(\n defineProps<{\n label: string;\n defaultValue?: string;\n description?: string;\n /** Shown only when invalid is true; the application owns validation. */\n errorMessage?: string;\n invalid?: boolean;\n disabled?: boolean;\n readonly?: boolean;\n required?: boolean;\n placeholder?: string;\n type?: InputType;\n size?: InputSize;\n variant?: InputVariant;\n fullWidth?: boolean;\n name?: string;\n id?: string;\n autoComplete?: string;\n maxLength?: number;\n minLength?: number;\n pattern?: string;\n inputMode?: InputMode;\n enterKeyHint?: InputEnterKeyHint;\n autoFocus?: boolean;\n spellCheck?: boolean;\n form?: string;\n dir?: 'ltr' | 'rtl';\n }>(),\n {\n type: 'text',\n size: 'md',\n variant: 'primary',\n fullWidth: true,\n invalid: false,\n disabled: false,\n readonly: false,\n required: false,\n defaultValue: '',\n description: undefined,\n errorMessage: undefined,\n placeholder: undefined,\n name: undefined,\n id: undefined,\n autoComplete: undefined,\n maxLength: undefined,\n minLength: undefined,\n pattern: undefined,\n inputMode: undefined,\n enterKeyHint: undefined,\n spellCheck: undefined,\n form: undefined,\n dir: undefined,\n },\n);\ndefineSlots<{ prefix?: () => unknown; suffix?: () => unknown }>();\nconst emit = defineEmits<{\n focus: [event: FocusEvent];\n blur: [event: FocusEvent];\n keydown: [event: KeyboardEvent];\n keyup: [event: KeyboardEvent];\n}>();\nconst control = ref<HTMLInputElement>();\nfunction focus() {\n if (!props.disabled) control.value?.focus();\n}\nfunction select() {\n if (!props.disabled) control.value?.select();\n}\ndefineExpose({ focus, select, element: control });\nonMounted(() => {\n if (props.autoFocus) focus();\n});\nfunction pointerdown(event: PointerEvent) {\n if (\n !props.disabled &&\n !(event.target as Element).closest(\n 'input,button,a,select,textarea,[tabindex],[contenteditable]',\n )\n ) {\n event.preventDefault();\n focus();\n }\n}\n\n/** Controlled v-model values are strings; clear with an empty string. */\nconst model = defineModel<string>();\nconst local = ref(props.defaultValue ?? '');\nconst value = computed(() => model.value ?? local.value);\nconst generatedId = useId();\nconst controlId = computed(() => props.id ?? generatedId);\nconst showError = computed(() => props.invalid && !!props.errorMessage);\nconst describedBy = computed(\n () =>\n [\n props.description && `${controlId.value}-description`,\n showError.value && `${controlId.value}-error`,\n ]\n .filter(Boolean)\n .join(' ') || undefined,\n);\n\nfunction onInput(event: Event) {\n if (props.disabled || props.readonly) return;\n const next = (event.target as HTMLInputElement).value;\n local.value = next;\n model.value = next;\n}\n</script>\n\n<template>\n <div\n :class=\"['input', `input--${size}`, `input--${variant}`, !fullWidth && 'input--fit']\"\n :dir=\"dir\"\n >\n <Label class=\"input__label\" :for=\"controlId\">{{ label }}</Label>\n <fieldset class=\"input__boundary\" role=\"presentation\" :disabled=\"disabled\">\n <div\n :class=\"$slots.prefix || $slots.suffix ? 'input__group' : 'input__plain'\"\n :data-invalid=\"invalid || undefined\"\n :data-readonly=\"readonly || undefined\"\n @pointerdown=\"pointerdown\"\n >\n <span v-if=\"$slots.prefix\" class=\"input__prefix\"><slot name=\"prefix\" /></span>\n <input\n :id=\"controlId\"\n ref=\"control\"\n class=\"input__control\"\n :type=\"type\"\n :name=\"name\"\n :value=\"value\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n :required=\"required\"\n :aria-required=\"required || undefined\"\n :aria-invalid=\"invalid || undefined\"\n :aria-describedby=\"describedBy\"\n :autocomplete=\"autoComplete\"\n :maxlength=\"maxLength\"\n :minlength=\"minLength\"\n :pattern=\"pattern\"\n :inputmode=\"inputMode\"\n :enterkeyhint=\"enterKeyHint\"\n :autofocus=\"autoFocus\"\n :spellcheck=\"spellCheck\"\n :form=\"form\"\n @input=\"onInput\"\n @focus=\"emit('focus', $event)\"\n @blur=\"emit('blur', $event)\"\n @keydown=\"emit('keydown', $event)\"\n @keyup=\"emit('keyup', $event)\"\n />\n <span v-if=\"$slots.suffix\" class=\"input__suffix\"><slot name=\"suffix\" /></span>\n </div>\n </fieldset>\n <span v-if=\"description\" :id=\"`${controlId}-description`\" class=\"input__description\">{{\n description\n }}</span>\n <div v-if=\"showError\" :id=\"`${controlId}-error`\" class=\"input__error\">{{ errorMessage }}</div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, onMounted, ref } from 'vue';\nimport { Label, useId } from 'reka-ui';\nimport type { InputSize, InputType, InputVariant, InputMode, InputEnterKeyHint } from './types.js';\n\ndefineOptions({ inheritAttrs: false });\n\nconst props = withDefaults(\n defineProps<{\n label: string;\n defaultValue?: string;\n description?: string;\n /** Shown only when invalid is true; the application owns validation. */\n errorMessage?: string;\n invalid?: boolean;\n disabled?: boolean;\n readonly?: boolean;\n required?: boolean;\n placeholder?: string;\n type?: InputType;\n size?: InputSize;\n variant?: InputVariant;\n fullWidth?: boolean;\n name?: string;\n id?: string;\n autoComplete?: string;\n maxLength?: number;\n minLength?: number;\n pattern?: string;\n inputMode?: InputMode;\n enterKeyHint?: InputEnterKeyHint;\n autoFocus?: boolean;\n spellCheck?: boolean;\n form?: string;\n dir?: 'ltr' | 'rtl';\n }>(),\n {\n type: 'text',\n size: 'md',\n variant: 'primary',\n fullWidth: true,\n invalid: false,\n disabled: false,\n readonly: false,\n required: false,\n defaultValue: '',\n description: undefined,\n errorMessage: undefined,\n placeholder: undefined,\n name: undefined,\n id: undefined,\n autoComplete: undefined,\n maxLength: undefined,\n minLength: undefined,\n pattern: undefined,\n inputMode: undefined,\n enterKeyHint: undefined,\n spellCheck: undefined,\n form: undefined,\n dir: undefined,\n },\n);\ndefineSlots<{ prefix?: () => unknown; suffix?: () => unknown }>();\nconst emit = defineEmits<{\n focus: [event: FocusEvent];\n blur: [event: FocusEvent];\n keydown: [event: KeyboardEvent];\n keyup: [event: KeyboardEvent];\n}>();\nconst control = ref<HTMLInputElement>();\nfunction focus() {\n if (!props.disabled) control.value?.focus();\n}\nfunction select() {\n if (!props.disabled) control.value?.select();\n}\ndefineExpose({ focus, select, element: control });\nonMounted(() => {\n if (props.autoFocus) focus();\n});\nfunction pointerdown(event: PointerEvent) {\n if (\n !props.disabled &&\n !(event.target as Element).closest(\n 'input,button,a,select,textarea,[tabindex],[contenteditable]',\n )\n ) {\n event.preventDefault();\n focus();\n }\n}\n\n/** Controlled v-model values are strings; clear with an empty string. */\nconst model = defineModel<string>();\nconst local = ref(props.defaultValue ?? '');\nconst value = computed(() => model.value ?? local.value);\nconst generatedId = useId();\nconst controlId = computed(() => props.id ?? generatedId);\nconst showError = computed(() => props.invalid && !!props.errorMessage);\nconst describedBy = computed(\n () =>\n [\n props.description && `${controlId.value}-description`,\n showError.value && `${controlId.value}-error`,\n ]\n .filter(Boolean)\n .join(' ') || undefined,\n);\n\nfunction onInput(event: Event) {\n if (props.disabled || props.readonly) return;\n const next = (event.target as HTMLInputElement).value;\n local.value = next;\n model.value = next;\n}\n</script>\n\n<template>\n <div\n :class=\"['input', `input--${size}`, `input--${variant}`, !fullWidth && 'input--fit']\"\n :dir=\"dir\"\n >\n <Label class=\"input__label\" :for=\"controlId\">{{ label }}</Label>\n <fieldset class=\"input__boundary\" role=\"presentation\" :disabled=\"disabled\">\n <div\n :class=\"$slots.prefix || $slots.suffix ? 'input__group' : 'input__plain'\"\n :data-invalid=\"invalid || undefined\"\n :data-readonly=\"readonly || undefined\"\n @pointerdown=\"pointerdown\"\n >\n <span v-if=\"$slots.prefix\" class=\"input__prefix\"><slot name=\"prefix\" /></span>\n <input\n :id=\"controlId\"\n ref=\"control\"\n class=\"input__control\"\n :type=\"type\"\n :name=\"name\"\n :value=\"value\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n :required=\"required\"\n :aria-required=\"required || undefined\"\n :aria-invalid=\"invalid || undefined\"\n :aria-describedby=\"describedBy\"\n :autocomplete=\"autoComplete\"\n :maxlength=\"maxLength\"\n :minlength=\"minLength\"\n :pattern=\"pattern\"\n :inputmode=\"inputMode\"\n :enterkeyhint=\"enterKeyHint\"\n :autofocus=\"autoFocus\"\n :spellcheck=\"spellCheck\"\n :form=\"form\"\n @input=\"onInput\"\n @focus=\"emit('focus', $event)\"\n @blur=\"emit('blur', $event)\"\n @keydown=\"emit('keydown', $event)\"\n @keyup=\"emit('keyup', $event)\"\n />\n <span v-if=\"$slots.suffix\" class=\"input__suffix\"><slot name=\"suffix\" /></span>\n </div>\n </fieldset>\n <span v-if=\"description\" :id=\"`${controlId}-description`\" class=\"input__description\">{{\n description\n }}</span>\n <div v-if=\"showError\" :id=\"`${controlId}-error`\" class=\"input__error\">{{ errorMessage }}</div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport { Label, useId } from 'reka-ui';\n\ndefineOptions({ inheritAttrs: false });\n\nconst props = withDefaults(\n defineProps<{\n label: string;\n defaultValue?: string;\n description?: string;\n /** Shown only when invalid is true; the application owns validation. */\n errorMessage?: string;\n invalid?: boolean;\n disabled?: boolean;\n readonly?: boolean;\n required?: boolean;\n placeholder?: string;\n rows?: number;\n resize?: 'vertical' | 'none';\n name?: string;\n id?: string;\n autoComplete?: string;\n maxLength?: number;\n dir?: 'ltr' | 'rtl';\n }>(),\n {\n rows: 3,\n resize: 'vertical',\n invalid: false,\n disabled: false,\n readonly: false,\n required: false,\n defaultValue: '',\n description: undefined,\n errorMessage: undefined,\n placeholder: undefined,\n name: undefined,\n id: undefined,\n autoComplete: undefined,\n maxLength: undefined,\n dir: undefined,\n },\n);\n\n/** Controlled v-model values are strings; clear with an empty string. */\nconst model = defineModel<string>();\nconst local = ref(props.defaultValue ?? '');\nconst value = computed(() => model.value ?? local.value);\nconst generatedId = useId();\nconst controlId = computed(() => props.id ?? generatedId);\nconst showError = computed(() => props.invalid && !!props.errorMessage);\nconst describedBy = computed(\n () =>\n [\n props.description && `${controlId.value}-description`,\n showError.value && `${controlId.value}-error`,\n ]\n .filter(Boolean)\n .join(' ') || undefined,\n);\n\nfunction onInput(event: Event) {\n if (props.disabled || props.readonly) return;\n const next = (event.target as HTMLTextAreaElement).value;\n local.value = next;\n model.value = next;\n}\n</script>\n\n<template>\n <div class=\"input textarea\" :data-resize=\"resize\" :dir=\"dir\">\n <Label class=\"input__label\" :for=\"controlId\">{{ label }}</Label>\n <textarea\n :id=\"controlId\"\n class=\"input__control textarea__control\"\n :rows=\"rows\"\n :name=\"name\"\n :value=\"value\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n :required=\"required\"\n :aria-required=\"required || undefined\"\n :aria-invalid=\"invalid || undefined\"\n :aria-describedby=\"describedBy\"\n :autocomplete=\"autoComplete\"\n :maxlength=\"maxLength\"\n @input=\"onInput\"\n />\n <span v-if=\"description\" :id=\"`${controlId}-description`\" class=\"input__description\">{{\n description\n }}</span>\n <div v-if=\"showError\" :id=\"`${controlId}-error`\" class=\"input__error\">{{ errorMessage }}</div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport { Label, useId } from 'reka-ui';\n\ndefineOptions({ inheritAttrs: false });\n\nconst props = withDefaults(\n defineProps<{\n label: string;\n defaultValue?: string;\n description?: string;\n /** Shown only when invalid is true; the application owns validation. */\n errorMessage?: string;\n invalid?: boolean;\n disabled?: boolean;\n readonly?: boolean;\n required?: boolean;\n placeholder?: string;\n rows?: number;\n resize?: 'vertical' | 'none';\n name?: string;\n id?: string;\n autoComplete?: string;\n maxLength?: number;\n dir?: 'ltr' | 'rtl';\n }>(),\n {\n rows: 3,\n resize: 'vertical',\n invalid: false,\n disabled: false,\n readonly: false,\n required: false,\n defaultValue: '',\n description: undefined,\n errorMessage: undefined,\n placeholder: undefined,\n name: undefined,\n id: undefined,\n autoComplete: undefined,\n maxLength: undefined,\n dir: undefined,\n },\n);\n\n/** Controlled v-model values are strings; clear with an empty string. */\nconst model = defineModel<string>();\nconst local = ref(props.defaultValue ?? '');\nconst value = computed(() => model.value ?? local.value);\nconst generatedId = useId();\nconst controlId = computed(() => props.id ?? generatedId);\nconst showError = computed(() => props.invalid && !!props.errorMessage);\nconst describedBy = computed(\n () =>\n [\n props.description && `${controlId.value}-description`,\n showError.value && `${controlId.value}-error`,\n ]\n .filter(Boolean)\n .join(' ') || undefined,\n);\n\nfunction onInput(event: Event) {\n if (props.disabled || props.readonly) return;\n const next = (event.target as HTMLTextAreaElement).value;\n local.value = next;\n model.value = next;\n}\n</script>\n\n<template>\n <div class=\"input textarea\" :data-resize=\"resize\" :dir=\"dir\">\n <Label class=\"input__label\" :for=\"controlId\">{{ label }}</Label>\n <textarea\n :id=\"controlId\"\n class=\"input__control textarea__control\"\n :rows=\"rows\"\n :name=\"name\"\n :value=\"value\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n :required=\"required\"\n :aria-required=\"required || undefined\"\n :aria-invalid=\"invalid || undefined\"\n :aria-describedby=\"describedBy\"\n :autocomplete=\"autoComplete\"\n :maxlength=\"maxLength\"\n @input=\"onInput\"\n />\n <span v-if=\"description\" :id=\"`${controlId}-description`\" class=\"input__description\">{{\n description\n }}</span>\n <div v-if=\"showError\" :id=\"`${controlId}-error`\" class=\"input__error\">{{ errorMessage }}</div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { Label as RekaLabel } from 'reka-ui';\ndefineOptions({ inheritAttrs: false });\nconst props = withDefaults(defineProps<{ for?: string; id?: string }>(), {\n for: undefined,\n id: undefined,\n});\n</script>\n<template>\n <RekaLabel :id=\"id\" class=\"label\" :for=\"props.for\"><slot /></RekaLabel>\n</template>\n","<script setup lang=\"ts\">\nimport { Label as RekaLabel } from 'reka-ui';\ndefineOptions({ inheritAttrs: false });\nconst props = withDefaults(defineProps<{ for?: string; id?: string }>(), {\n for: undefined,\n id: undefined,\n});\n</script>\n<template>\n <RekaLabel :id=\"id\" class=\"label\" :for=\"props.for\"><slot /></RekaLabel>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport { CheckboxRoot, Label } from 'reka-ui';\nimport CheckIcon from './CheckIcon.vue';\nimport FieldFeedback from './FieldFeedback.vue';\nimport { useFeedback } from './useFeedback.js';\ndefineOptions({ inheritAttrs: false });\nconst props = withDefaults(\n defineProps<{\n label: string;\n modelValue?: boolean;\n defaultValue?: boolean;\n indeterminate?: boolean;\n disabled?: boolean;\n required?: boolean;\n invalid?: boolean;\n description?: string;\n errorMessage?: string;\n name?: string;\n value?: string;\n id?: string;\n dir?: 'ltr' | 'rtl';\n }>(),\n {\n modelValue: undefined,\n defaultValue: false,\n disabled: false,\n required: false,\n invalid: false,\n indeterminate: false,\n description: undefined,\n errorMessage: undefined,\n name: undefined,\n value: 'on',\n id: undefined,\n dir: undefined,\n },\n);\nconst emit = defineEmits<{ 'update:modelValue': [value: boolean] }>();\nconst local = ref(props.defaultValue);\nconst selected = computed(() => props.modelValue ?? local.value);\nconst state = computed(() => (props.indeterminate ? 'indeterminate' : selected.value));\nconst { controlId, showError, describedBy } = useFeedback(props);\nfunction update(value: boolean | 'indeterminate') {\n if (props.disabled) return;\n const next = props.indeterminate ? !selected.value : value === true;\n local.value = next;\n emit('update:modelValue', next);\n}\n</script>\n<template>\n <div class=\"input\" :dir=\"dir\">\n <div class=\"choice\" :data-disabled=\"disabled || undefined\">\n <CheckboxRoot\n :id=\"controlId\"\n class=\"checkbox__control\"\n :model-value=\"state\"\n :disabled=\"disabled\"\n :required=\"required\"\n :name=\"indeterminate ? undefined : name\"\n :value=\"value\"\n :aria-describedby=\"describedBy\"\n :aria-invalid=\"invalid || undefined\"\n :data-invalid=\"invalid || undefined\"\n @update:model-value=\"update\"\n >\n <CheckIcon class=\"checkbox__check\" /><span class=\"checkbox__dash\" />\n </CheckboxRoot>\n <Label class=\"choice__label\" :for=\"controlId\">{{ label }}</Label>\n </div>\n <!-- Keep mixed presentation separate from the boolean form value. -->\n <input\n v-if=\"indeterminate && selected && name && !disabled\"\n type=\"hidden\"\n :name=\"name\"\n :value=\"value\"\n />\n <FieldFeedback\n :control-id=\"controlId\"\n :description=\"description\"\n :error-message=\"errorMessage\"\n :show-error=\"showError\"\n />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport { CheckboxRoot, Label } from 'reka-ui';\nimport CheckIcon from './CheckIcon.vue';\nimport FieldFeedback from './FieldFeedback.vue';\nimport { useFeedback } from './useFeedback.js';\ndefineOptions({ inheritAttrs: false });\nconst props = withDefaults(\n defineProps<{\n label: string;\n modelValue?: boolean;\n defaultValue?: boolean;\n indeterminate?: boolean;\n disabled?: boolean;\n required?: boolean;\n invalid?: boolean;\n description?: string;\n errorMessage?: string;\n name?: string;\n value?: string;\n id?: string;\n dir?: 'ltr' | 'rtl';\n }>(),\n {\n modelValue: undefined,\n defaultValue: false,\n disabled: false,\n required: false,\n invalid: false,\n indeterminate: false,\n description: undefined,\n errorMessage: undefined,\n name: undefined,\n value: 'on',\n id: undefined,\n dir: undefined,\n },\n);\nconst emit = defineEmits<{ 'update:modelValue': [value: boolean] }>();\nconst local = ref(props.defaultValue);\nconst selected = computed(() => props.modelValue ?? local.value);\nconst state = computed(() => (props.indeterminate ? 'indeterminate' : selected.value));\nconst { controlId, showError, describedBy } = useFeedback(props);\nfunction update(value: boolean | 'indeterminate') {\n if (props.disabled) return;\n const next = props.indeterminate ? !selected.value : value === true;\n local.value = next;\n emit('update:modelValue', next);\n}\n</script>\n<template>\n <div class=\"input\" :dir=\"dir\">\n <div class=\"choice\" :data-disabled=\"disabled || undefined\">\n <CheckboxRoot\n :id=\"controlId\"\n class=\"checkbox__control\"\n :model-value=\"state\"\n :disabled=\"disabled\"\n :required=\"required\"\n :name=\"indeterminate ? undefined : name\"\n :value=\"value\"\n :aria-describedby=\"describedBy\"\n :aria-invalid=\"invalid || undefined\"\n :data-invalid=\"invalid || undefined\"\n @update:model-value=\"update\"\n >\n <CheckIcon class=\"checkbox__check\" /><span class=\"checkbox__dash\" />\n </CheckboxRoot>\n <Label class=\"choice__label\" :for=\"controlId\">{{ label }}</Label>\n </div>\n <!-- Keep mixed presentation separate from the boolean form value. -->\n <input\n v-if=\"indeterminate && selected && name && !disabled\"\n type=\"hidden\"\n :name=\"name\"\n :value=\"value\"\n />\n <FieldFeedback\n :control-id=\"controlId\"\n :description=\"description\"\n :error-message=\"errorMessage\"\n :show-error=\"showError\"\n />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport { RadioGroupRoot, RadioGroupItem, Label } from 'reka-ui';\nimport type { RadioOption } from './types.js';\nimport FieldFeedback from './FieldFeedback.vue';\nimport { useFeedback } from './useFeedback.js';\ndefineOptions({ inheritAttrs: false });\nconst props = withDefaults(\n defineProps<{\n label: string;\n options: RadioOption[];\n defaultValue?: string;\n disabled?: boolean;\n required?: boolean;\n invalid?: boolean;\n description?: string;\n errorMessage?: string;\n name?: string;\n id?: string;\n orientation?: 'vertical' | 'horizontal';\n dir?: 'ltr' | 'rtl';\n }>(),\n {\n defaultValue: '',\n disabled: false,\n required: false,\n invalid: false,\n description: undefined,\n errorMessage: undefined,\n name: undefined,\n id: undefined,\n orientation: 'vertical',\n dir: undefined,\n },\n);\nconst model = defineModel<string>();\nconst local = ref(props.defaultValue);\nconst value = computed(() => model.value ?? local.value);\nconst { controlId, describedBy, showError } = useFeedback(props);\nfunction update(next: unknown) {\n if (props.disabled || typeof next !== 'string') return;\n local.value = next;\n model.value = next;\n}\n</script>\n<template>\n <RadioGroupRoot\n :id=\"controlId\"\n class=\"input radio-group\"\n :model-value=\"value\"\n :disabled=\"disabled\"\n :required=\"required\"\n :name=\"name\"\n :orientation=\"orientation\"\n :dir=\"dir\"\n :aria-labelledby=\"`${controlId}-label`\"\n :aria-describedby=\"describedBy\"\n :aria-invalid=\"invalid || undefined\"\n @update:model-value=\"update\"\n >\n <span :id=\"`${controlId}-label`\" class=\"label\">{{ label }}</span>\n <div class=\"radio-group__items\" :data-orientation=\"orientation\">\n <div\n v-for=\"(option, index) in options\"\n :key=\"option.id\"\n class=\"choice\"\n :data-disabled=\"disabled || option.isDisabled || undefined\"\n >\n <RadioGroupItem\n :id=\"`${controlId}-option-${index}`\"\n class=\"radio__control\"\n :value=\"option.id\"\n :disabled=\"option.isDisabled\"\n :data-invalid=\"invalid || undefined\"\n ><span class=\"radio__dot\"\n /></RadioGroupItem>\n <Label class=\"choice__label\" :for=\"`${controlId}-option-${index}`\">{{\n option.label\n }}</Label>\n </div>\n </div>\n <FieldFeedback\n :control-id=\"controlId\"\n :description=\"description\"\n :error-message=\"errorMessage\"\n :show-error=\"showError\"\n />\n </RadioGroupRoot>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport { RadioGroupRoot, RadioGroupItem, Label } from 'reka-ui';\nimport type { RadioOption } from './types.js';\nimport FieldFeedback from './FieldFeedback.vue';\nimport { useFeedback } from './useFeedback.js';\ndefineOptions({ inheritAttrs: false });\nconst props = withDefaults(\n defineProps<{\n label: string;\n options: RadioOption[];\n defaultValue?: string;\n disabled?: boolean;\n required?: boolean;\n invalid?: boolean;\n description?: string;\n errorMessage?: string;\n name?: string;\n id?: string;\n orientation?: 'vertical' | 'horizontal';\n dir?: 'ltr' | 'rtl';\n }>(),\n {\n defaultValue: '',\n disabled: false,\n required: false,\n invalid: false,\n description: undefined,\n errorMessage: undefined,\n name: undefined,\n id: undefined,\n orientation: 'vertical',\n dir: undefined,\n },\n);\nconst model = defineModel<string>();\nconst local = ref(props.defaultValue);\nconst value = computed(() => model.value ?? local.value);\nconst { controlId, describedBy, showError } = useFeedback(props);\nfunction update(next: unknown) {\n if (props.disabled || typeof next !== 'string') return;\n local.value = next;\n model.value = next;\n}\n</script>\n<template>\n <RadioGroupRoot\n :id=\"controlId\"\n class=\"input radio-group\"\n :model-value=\"value\"\n :disabled=\"disabled\"\n :required=\"required\"\n :name=\"name\"\n :orientation=\"orientation\"\n :dir=\"dir\"\n :aria-labelledby=\"`${controlId}-label`\"\n :aria-describedby=\"describedBy\"\n :aria-invalid=\"invalid || undefined\"\n @update:model-value=\"update\"\n >\n <span :id=\"`${controlId}-label`\" class=\"label\">{{ label }}</span>\n <div class=\"radio-group__items\" :data-orientation=\"orientation\">\n <div\n v-for=\"(option, index) in options\"\n :key=\"option.id\"\n class=\"choice\"\n :data-disabled=\"disabled || option.isDisabled || undefined\"\n >\n <RadioGroupItem\n :id=\"`${controlId}-option-${index}`\"\n class=\"radio__control\"\n :value=\"option.id\"\n :disabled=\"option.isDisabled\"\n :data-invalid=\"invalid || undefined\"\n ><span class=\"radio__dot\"\n /></RadioGroupItem>\n <Label class=\"choice__label\" :for=\"`${controlId}-option-${index}`\">{{\n option.label\n }}</Label>\n </div>\n </div>\n <FieldFeedback\n :control-id=\"controlId\"\n :description=\"description\"\n :error-message=\"errorMessage\"\n :show-error=\"showError\"\n />\n </RadioGroupRoot>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport { SwitchRoot, Label } from 'reka-ui';\n\nimport FieldFeedback from './FieldFeedback.vue';\nimport { useFeedback } from './useFeedback.js';\ndefineOptions({ inheritAttrs: false });\nconst props = withDefaults(\n defineProps<{\n label: string;\n modelValue?: boolean;\n defaultValue?: boolean;\n\n disabled?: boolean;\n invalid?: boolean;\n description?: string;\n errorMessage?: string;\n name?: string;\n value?: string;\n id?: string;\n dir?: 'ltr' | 'rtl';\n }>(),\n {\n modelValue: undefined,\n defaultValue: false,\n disabled: false,\n invalid: false,\n description: undefined,\n errorMessage: undefined,\n name: undefined,\n value: 'on',\n id: undefined,\n dir: undefined,\n },\n);\nconst emit = defineEmits<{ 'update:modelValue': [value: boolean] }>();\nconst local = ref(props.defaultValue);\nconst selected = computed(() => props.modelValue ?? local.value);\nconst state = computed(() => selected.value);\nconst { controlId, showError, describedBy } = useFeedback(props);\nfunction update(value: boolean) {\n if (props.disabled) return;\n const next = value;\n local.value = next;\n emit('update:modelValue', next);\n}\n</script>\n<template>\n <div class=\"input\" :dir=\"dir\">\n <div class=\"choice\" :data-disabled=\"disabled || undefined\">\n <SwitchRoot\n :id=\"controlId\"\n class=\"switch__control\"\n :model-value=\"state\"\n :disabled=\"disabled\"\n :name=\"name\"\n :value=\"value\"\n :aria-describedby=\"describedBy\"\n :aria-invalid=\"invalid || undefined\"\n :data-invalid=\"invalid || undefined\"\n @update:model-value=\"update\"\n >\n <span class=\"switch__thumb\" />\n </SwitchRoot>\n <Label class=\"choice__label\" :for=\"controlId\">{{ label }}</Label>\n </div>\n <FieldFeedback\n :control-id=\"controlId\"\n :description=\"description\"\n :error-message=\"errorMessage\"\n :show-error=\"showError\"\n />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport { SwitchRoot, Label } from 'reka-ui';\n\nimport FieldFeedback from './FieldFeedback.vue';\nimport { useFeedback } from './useFeedback.js';\ndefineOptions({ inheritAttrs: false });\nconst props = withDefaults(\n defineProps<{\n label: string;\n modelValue?: boolean;\n defaultValue?: boolean;\n\n disabled?: boolean;\n invalid?: boolean;\n description?: string;\n errorMessage?: string;\n name?: string;\n value?: string;\n id?: string;\n dir?: 'ltr' | 'rtl';\n }>(),\n {\n modelValue: undefined,\n defaultValue: false,\n disabled: false,\n invalid: false,\n description: undefined,\n errorMessage: undefined,\n name: undefined,\n value: 'on',\n id: undefined,\n dir: undefined,\n },\n);\nconst emit = defineEmits<{ 'update:modelValue': [value: boolean] }>();\nconst local = ref(props.defaultValue);\nconst selected = computed(() => props.modelValue ?? local.value);\nconst state = computed(() => selected.value);\nconst { controlId, showError, describedBy } = useFeedback(props);\nfunction update(value: boolean) {\n if (props.disabled) return;\n const next = value;\n local.value = next;\n emit('update:modelValue', next);\n}\n</script>\n<template>\n <div class=\"input\" :dir=\"dir\">\n <div class=\"choice\" :data-disabled=\"disabled || undefined\">\n <SwitchRoot\n :id=\"controlId\"\n class=\"switch__control\"\n :model-value=\"state\"\n :disabled=\"disabled\"\n :name=\"name\"\n :value=\"value\"\n :aria-describedby=\"describedBy\"\n :aria-invalid=\"invalid || undefined\"\n :data-invalid=\"invalid || undefined\"\n @update:model-value=\"update\"\n >\n <span class=\"switch__thumb\" />\n </SwitchRoot>\n <Label class=\"choice__label\" :for=\"controlId\">{{ label }}</Label>\n </div>\n <FieldFeedback\n :control-id=\"controlId\"\n :description=\"description\"\n :error-message=\"errorMessage\"\n :show-error=\"showError\"\n />\n </div>\n</template>\n","import type { ComputedRef, InjectionKey } from 'vue';\nimport type { ValidationErrors } from './types.js';\nexport const formErrorsKey: InjectionKey<ComputedRef<ValidationErrors>> =\n /* @__PURE__ */ Symbol('KazeeFormErrors');\n","<script setup lang=\"ts\">\nimport { computed, inject } from 'vue';\nimport { Label } from 'reka-ui';\nimport FieldFeedback from './FieldFeedback.vue';\nimport { useFeedback } from './useFeedback.js';\nimport { formErrorsKey } from './form-context.js';\nimport type { FieldControlProps, FieldSlotProps, ValidationErrors } from './types.js';\n\ndefineOptions({ inheritAttrs: false });\nconst props = withDefaults(\n defineProps<{\n label: string;\n name: string;\n id?: string;\n description?: string;\n errorMessage?: string;\n invalid?: boolean;\n disabled?: boolean;\n readonly?: boolean;\n required?: boolean;\n dir?: 'ltr' | 'rtl';\n }>(),\n {\n id: undefined,\n description: undefined,\n errorMessage: undefined,\n invalid: false,\n disabled: false,\n readonly: false,\n required: false,\n dir: undefined,\n },\n);\ndefineSlots<{ default(props: FieldSlotProps): unknown }>();\nconst errors = inject(\n formErrorsKey,\n computed<ValidationErrors>(() => ({})),\n);\nconst error = computed(() => {\n const map = errors.value;\n return Object.hasOwn(map, props.name) && typeof map[props.name] === 'string'\n ? map[props.name] || undefined\n : undefined;\n});\nconst invalidState = computed(() => props.invalid || !!error.value);\nconst message = computed(() => (props.invalid && props.errorMessage) || error.value || undefined);\nconst { controlId, showError, describedBy } = useFeedback({\n get id() {\n return props.id;\n },\n get description() {\n return props.description;\n },\n get invalid() {\n return invalidState.value;\n },\n get errorMessage() {\n return message.value;\n },\n});\nconst controlProps = computed<FieldControlProps>(() => ({\n id: controlId.value,\n name: props.name,\n class: 'input__control field__control',\n disabled: props.disabled,\n readonly: props.readonly,\n required: props.required,\n 'aria-required': props.required || undefined,\n 'aria-invalid': invalidState.value || undefined,\n 'aria-describedby': describedBy.value,\n}));\n</script>\n<template>\n <div class=\"input field\" :dir=\"dir\">\n <Label class=\"label\" :for=\"controlId\">{{ label }}</Label>\n <slot :control-props=\"controlProps\" :invalid=\"invalidState\" :error-message=\"message\" />\n <FieldFeedback\n :control-id=\"controlId\"\n :description=\"description\"\n :error-message=\"message\"\n :show-error=\"showError\"\n />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, inject } from 'vue';\nimport { Label } from 'reka-ui';\nimport FieldFeedback from './FieldFeedback.vue';\nimport { useFeedback } from './useFeedback.js';\nimport { formErrorsKey } from './form-context.js';\nimport type { FieldControlProps, FieldSlotProps, ValidationErrors } from './types.js';\n\ndefineOptions({ inheritAttrs: false });\nconst props = withDefaults(\n defineProps<{\n label: string;\n name: string;\n id?: string;\n description?: string;\n errorMessage?: string;\n invalid?: boolean;\n disabled?: boolean;\n readonly?: boolean;\n required?: boolean;\n dir?: 'ltr' | 'rtl';\n }>(),\n {\n id: undefined,\n description: undefined,\n errorMessage: undefined,\n invalid: false,\n disabled: false,\n readonly: false,\n required: false,\n dir: undefined,\n },\n);\ndefineSlots<{ default(props: FieldSlotProps): unknown }>();\nconst errors = inject(\n formErrorsKey,\n computed<ValidationErrors>(() => ({})),\n);\nconst error = computed(() => {\n const map = errors.value;\n return Object.hasOwn(map, props.name) && typeof map[props.name] === 'string'\n ? map[props.name] || undefined\n : undefined;\n});\nconst invalidState = computed(() => props.invalid || !!error.value);\nconst message = computed(() => (props.invalid && props.errorMessage) || error.value || undefined);\nconst { controlId, showError, describedBy } = useFeedback({\n get id() {\n return props.id;\n },\n get description() {\n return props.description;\n },\n get invalid() {\n return invalidState.value;\n },\n get errorMessage() {\n return message.value;\n },\n});\nconst controlProps = computed<FieldControlProps>(() => ({\n id: controlId.value,\n name: props.name,\n class: 'input__control field__control',\n disabled: props.disabled,\n readonly: props.readonly,\n required: props.required,\n 'aria-required': props.required || undefined,\n 'aria-invalid': invalidState.value || undefined,\n 'aria-describedby': describedBy.value,\n}));\n</script>\n<template>\n <div class=\"input field\" :dir=\"dir\">\n <Label class=\"label\" :for=\"controlId\">{{ label }}</Label>\n <slot :control-props=\"controlProps\" :invalid=\"invalidState\" :error-message=\"message\" />\n <FieldFeedback\n :control-id=\"controlId\"\n :description=\"description\"\n :error-message=\"message\"\n :show-error=\"showError\"\n />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, provide } from 'vue';\nimport { formErrorsKey } from './form-context.js';\nimport type { ValidationErrors } from './types.js';\ndefineOptions({ inheritAttrs: false });\nconst props = withDefaults(\n defineProps<{\n validationErrors?: ValidationErrors;\n noValidate?: boolean;\n id?: string;\n ariaLabel?: string;\n ariaLabelledby?: string;\n dir?: 'ltr' | 'rtl';\n }>(),\n {\n validationErrors: () => ({}),\n noValidate: false,\n id: undefined,\n ariaLabel: undefined,\n ariaLabelledby: undefined,\n dir: undefined,\n },\n);\nconst emit = defineEmits<{ submit: [data: FormData, event: SubmitEvent]; reset: [event: Event] }>();\nprovide(\n formErrorsKey,\n computed(() => props.validationErrors),\n);\nfunction submit(event: SubmitEvent) {\n event.preventDefault();\n const form = event.currentTarget as HTMLFormElement;\n const noValidate = props.noValidate;\n if (!noValidate && !form.checkValidity()) {\n form.reportValidity();\n return;\n }\n // ARIA validation is application-owned and also applies to labeled Kazee controls.\n for (const element of form.querySelectorAll<HTMLElement>('[aria-invalid=\"true\"]')) {\n const selector = 'input:not([type=\"hidden\"]), textarea, select, button, [role=\"listbox\"]';\n const controls = element.matches(selector)\n ? [element]\n : [...element.querySelectorAll<HTMLElement>(selector)];\n const invalid = controls.find(\n (control) => !control.matches(':disabled, [aria-disabled=\"true\"]'),\n );\n if (invalid) {\n invalid.focus();\n return;\n }\n }\n emit('submit', new FormData(form, event.submitter), event);\n}\n</script>\n<template>\n <form\n :id=\"id\"\n class=\"form\"\n :dir=\"dir\"\n :aria-label=\"ariaLabel\"\n :aria-labelledby=\"ariaLabelledby\"\n :novalidate=\"noValidate\"\n @submit=\"submit\"\n @reset=\"emit('reset', $event)\"\n >\n <slot />\n </form>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, provide } from 'vue';\nimport { formErrorsKey } from './form-context.js';\nimport type { ValidationErrors } from './types.js';\ndefineOptions({ inheritAttrs: false });\nconst props = withDefaults(\n defineProps<{\n validationErrors?: ValidationErrors;\n noValidate?: boolean;\n id?: string;\n ariaLabel?: string;\n ariaLabelledby?: string;\n dir?: 'ltr' | 'rtl';\n }>(),\n {\n validationErrors: () => ({}),\n noValidate: false,\n id: undefined,\n ariaLabel: undefined,\n ariaLabelledby: undefined,\n dir: undefined,\n },\n);\nconst emit = defineEmits<{ submit: [data: FormData, event: SubmitEvent]; reset: [event: Event] }>();\nprovide(\n formErrorsKey,\n computed(() => props.validationErrors),\n);\nfunction submit(event: SubmitEvent) {\n event.preventDefault();\n const form = event.currentTarget as HTMLFormElement;\n const noValidate = props.noValidate;\n if (!noValidate && !form.checkValidity()) {\n form.reportValidity();\n return;\n }\n // ARIA validation is application-owned and also applies to labeled Kazee controls.\n for (const element of form.querySelectorAll<HTMLElement>('[aria-invalid=\"true\"]')) {\n const selector = 'input:not([type=\"hidden\"]), textarea, select, button, [role=\"listbox\"]';\n const controls = element.matches(selector)\n ? [element]\n : [...element.querySelectorAll<HTMLElement>(selector)];\n const invalid = controls.find(\n (control) => !control.matches(':disabled, [aria-disabled=\"true\"]'),\n );\n if (invalid) {\n invalid.focus();\n return;\n }\n }\n emit('submit', new FormData(form, event.submitter), event);\n}\n</script>\n<template>\n <form\n :id=\"id\"\n class=\"form\"\n :dir=\"dir\"\n :aria-label=\"ariaLabel\"\n :aria-labelledby=\"ariaLabelledby\"\n :novalidate=\"noValidate\"\n @submit=\"submit\"\n @reset=\"emit('reset', $event)\"\n >\n <slot />\n </form>\n</template>\n","export interface ListboxOption {\n id: string;\n label: string;\n isDisabled?: boolean;\n}\nexport type ListboxSelectionMode = 'single' | 'multiple';\n/** Stable option order, unique enabled IDs, and at most one ID in single mode. */\nexport function listboxSelection(\n value: readonly string[],\n options: ListboxOption[],\n mode: ListboxSelectionMode,\n): string[] {\n const requested = new Set(value);\n const seen = new Set<string>();\n const result: string[] = [];\n for (const option of options) {\n if (option.id && !option.isDisabled && requested.has(option.id) && !seen.has(option.id)) {\n seen.add(option.id);\n result.push(option.id);\n if (mode === 'single') break;\n }\n }\n return result;\n}\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport { ListboxRoot, ListboxContent, ListboxItem, useId } from 'reka-ui';\nimport CheckIcon from './CheckIcon.vue';\nimport FieldFeedback from './FieldFeedback.vue';\nimport { useFeedback } from './useFeedback.js';\nimport {\n listboxSelection,\n type ListboxOption,\n type ListboxSelectionMode,\n} from './listbox-selection.js';\ndefineOptions({ inheritAttrs: false });\nconst props = withDefaults(\n defineProps<{\n label: string;\n options: ListboxOption[];\n modelValue?: string[];\n defaultValue?: string[];\n selectionMode?: ListboxSelectionMode;\n disabled?: boolean;\n description?: string;\n errorMessage?: string;\n invalid?: boolean;\n name?: string;\n id?: string;\n dir?: 'ltr' | 'rtl';\n emptyMessage?: string;\n }>(),\n {\n modelValue: undefined,\n defaultValue: () => [],\n selectionMode: 'single',\n disabled: false,\n invalid: false,\n description: undefined,\n errorMessage: undefined,\n name: undefined,\n id: undefined,\n dir: undefined,\n emptyMessage: 'Tidak ada pilihan.',\n },\n);\nconst emit = defineEmits<{ 'update:modelValue': [value: string[]] }>();\nconst local = ref(props.defaultValue);\nconst selected = computed(() =>\n listboxSelection(props.modelValue ?? local.value, props.options, props.selectionMode),\n);\nconst model = computed(() =>\n props.selectionMode === 'multiple' ? selected.value : (selected.value[0] ?? null),\n);\nconst generated = useId();\nconst labelId = computed(() => `${props.id ?? generated}-label`);\nconst { controlId, showError, describedBy } = useFeedback(props);\nfunction update(value: unknown) {\n if (props.disabled) return;\n const values = Array.isArray(value)\n ? value.filter((id): id is string => typeof id === 'string')\n : typeof value === 'string'\n ? [value]\n : [];\n const next = listboxSelection(values, props.options, props.selectionMode);\n if (\n next.length === selected.value.length &&\n next.every((key, index) => key === selected.value[index])\n )\n return;\n local.value = next;\n emit('update:modelValue', next);\n}\n</script>\n<template>\n <div class=\"input listbox\" :dir=\"dir\">\n <span :id=\"labelId\" class=\"label\">{{ label }}</span>\n <ListboxRoot\n :model-value=\"model\"\n :multiple=\"selectionMode === 'multiple'\"\n :disabled=\"disabled\"\n :dir=\"dir\"\n :selection-behavior=\"selectionMode === 'single' ? 'replace' : 'toggle'\"\n highlight-on-hover\n @update:model-value=\"update\"\n >\n <ListboxContent\n :id=\"id\"\n class=\"listbox__list\"\n :aria-labelledby=\"labelId\"\n :aria-describedby=\"describedBy\"\n :aria-invalid=\"invalid || undefined\"\n :aria-disabled=\"disabled || undefined\"\n :tabindex=\"disabled ? -1 : undefined\"\n >\n <ListboxItem\n v-for=\"option in options\"\n :key=\"option.id\"\n :value=\"option.id\"\n :disabled=\"disabled || option.isDisabled\"\n :aria-disabled=\"disabled || option.isDisabled || undefined\"\n class=\"listbox__item\"\n >\n <span class=\"listbox__text\">{{ option.label }}</span\n ><CheckIcon class=\"listbox__check\" />\n </ListboxItem>\n <span\n v-if=\"!options.length\"\n class=\"listbox__empty\"\n role=\"option\"\n aria-disabled=\"true\"\n aria-selected=\"false\"\n >{{ emptyMessage }}</span\n >\n </ListboxContent>\n </ListboxRoot>\n <FieldFeedback\n :control-id=\"controlId\"\n :description=\"description\"\n :error-message=\"errorMessage\"\n :show-error=\"showError\"\n />\n <template v-if=\"name\"\n ><input\n v-for=\"key in selected\"\n :key=\"key\"\n type=\"hidden\"\n :name=\"name\"\n :value=\"key\"\n :disabled=\"disabled\"\n /></template>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport { ListboxRoot, ListboxContent, ListboxItem, useId } from 'reka-ui';\nimport CheckIcon from './CheckIcon.vue';\nimport FieldFeedback from './FieldFeedback.vue';\nimport { useFeedback } from './useFeedback.js';\nimport {\n listboxSelection,\n type ListboxOption,\n type ListboxSelectionMode,\n} from './listbox-selection.js';\ndefineOptions({ inheritAttrs: false });\nconst props = withDefaults(\n defineProps<{\n label: string;\n options: ListboxOption[];\n modelValue?: string[];\n defaultValue?: string[];\n selectionMode?: ListboxSelectionMode;\n disabled?: boolean;\n description?: string;\n errorMessage?: string;\n invalid?: boolean;\n name?: string;\n id?: string;\n dir?: 'ltr' | 'rtl';\n emptyMessage?: string;\n }>(),\n {\n modelValue: undefined,\n defaultValue: () => [],\n selectionMode: 'single',\n disabled: false,\n invalid: false,\n description: undefined,\n errorMessage: undefined,\n name: undefined,\n id: undefined,\n dir: undefined,\n emptyMessage: 'Tidak ada pilihan.',\n },\n);\nconst emit = defineEmits<{ 'update:modelValue': [value: string[]] }>();\nconst local = ref(props.defaultValue);\nconst selected = computed(() =>\n listboxSelection(props.modelValue ?? local.value, props.options, props.selectionMode),\n);\nconst model = computed(() =>\n props.selectionMode === 'multiple' ? selected.value : (selected.value[0] ?? null),\n);\nconst generated = useId();\nconst labelId = computed(() => `${props.id ?? generated}-label`);\nconst { controlId, showError, describedBy } = useFeedback(props);\nfunction update(value: unknown) {\n if (props.disabled) return;\n const values = Array.isArray(value)\n ? value.filter((id): id is string => typeof id === 'string')\n : typeof value === 'string'\n ? [value]\n : [];\n const next = listboxSelection(values, props.options, props.selectionMode);\n if (\n next.length === selected.value.length &&\n next.every((key, index) => key === selected.value[index])\n )\n return;\n local.value = next;\n emit('update:modelValue', next);\n}\n</script>\n<template>\n <div class=\"input listbox\" :dir=\"dir\">\n <span :id=\"labelId\" class=\"label\">{{ label }}</span>\n <ListboxRoot\n :model-value=\"model\"\n :multiple=\"selectionMode === 'multiple'\"\n :disabled=\"disabled\"\n :dir=\"dir\"\n :selection-behavior=\"selectionMode === 'single' ? 'replace' : 'toggle'\"\n highlight-on-hover\n @update:model-value=\"update\"\n >\n <ListboxContent\n :id=\"id\"\n class=\"listbox__list\"\n :aria-labelledby=\"labelId\"\n :aria-describedby=\"describedBy\"\n :aria-invalid=\"invalid || undefined\"\n :aria-disabled=\"disabled || undefined\"\n :tabindex=\"disabled ? -1 : undefined\"\n >\n <ListboxItem\n v-for=\"option in options\"\n :key=\"option.id\"\n :value=\"option.id\"\n :disabled=\"disabled || option.isDisabled\"\n :aria-disabled=\"disabled || option.isDisabled || undefined\"\n class=\"listbox__item\"\n >\n <span class=\"listbox__text\">{{ option.label }}</span\n ><CheckIcon class=\"listbox__check\" />\n </ListboxItem>\n <span\n v-if=\"!options.length\"\n class=\"listbox__empty\"\n role=\"option\"\n aria-disabled=\"true\"\n aria-selected=\"false\"\n >{{ emptyMessage }}</span\n >\n </ListboxContent>\n </ListboxRoot>\n <FieldFeedback\n :control-id=\"controlId\"\n :description=\"description\"\n :error-message=\"errorMessage\"\n :show-error=\"showError\"\n />\n <template v-if=\"name\"\n ><input\n v-for=\"key in selected\"\n :key=\"key\"\n type=\"hidden\"\n :name=\"name\"\n :value=\"key\"\n :disabled=\"disabled\"\n /></template>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport {\n NumberFieldRoot,\n NumberFieldInput,\n NumberFieldIncrement,\n NumberFieldDecrement,\n Label,\n} from 'reka-ui';\nimport FieldFeedback from './FieldFeedback.vue';\nimport { useFeedback } from './useFeedback.js';\ndefineOptions({ inheritAttrs: false });\nconst props = withDefaults(\n defineProps<{\n label: string;\n modelValue?: number | null;\n defaultValue?: number | null;\n min?: number;\n max?: number;\n step?: number;\n locale?: string;\n formatOptions?: Intl.NumberFormatOptions;\n description?: string;\n errorMessage?: string;\n invalid?: boolean;\n disabled?: boolean;\n readonly?: boolean;\n required?: boolean;\n name?: string;\n id?: string;\n dir?: 'ltr' | 'rtl';\n incrementLabel?: string;\n decrementLabel?: string;\n }>(),\n {\n modelValue: undefined,\n defaultValue: null,\n min: undefined,\n max: undefined,\n step: 1,\n locale: 'id-ID',\n formatOptions: undefined,\n description: undefined,\n errorMessage: undefined,\n invalid: false,\n disabled: false,\n readonly: false,\n required: false,\n name: undefined,\n id: undefined,\n dir: undefined,\n incrementLabel: undefined,\n decrementLabel: undefined,\n },\n);\nconst emit = defineEmits<{ 'update:modelValue': [value: number | null] }>();\nfunction finite(value: number | null | undefined): number | null {\n return typeof value === 'number' && Number.isFinite(value) ? value : null;\n}\nconst local = ref(finite(props.defaultValue));\nconst selected = computed(() =>\n finite(props.modelValue === undefined ? local.value : props.modelValue),\n);\nconst { controlId, showError, describedBy } = useFeedback(props);\nfunction update(value: number | undefined) {\n if (props.disabled || props.readonly) return;\n const next = finite(value);\n local.value = next;\n emit('update:modelValue', next);\n}\n</script>\n<template>\n <div class=\"input number-field\" :dir=\"dir\">\n <Label class=\"label\" :for=\"controlId\">{{ label }}</Label>\n <NumberFieldRoot\n :id=\"controlId\"\n :model-value=\"selected\"\n :min=\"min\"\n :max=\"max\"\n :step=\"step\"\n :locale=\"locale\"\n :format-options=\"formatOptions\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n :required=\"required\"\n disable-wheel-change\n @update:model-value=\"update\"\n >\n <div class=\"number-field__group\">\n <NumberFieldDecrement\n class=\"number-field__step\"\n :aria-label=\"decrementLabel ?? `Kurangi ${label}`\"\n >&#8722;</NumberFieldDecrement\n >\n <NumberFieldInput\n class=\"number-field__control\"\n :required=\"required\"\n :aria-required=\"required || undefined\"\n :aria-invalid=\"invalid || undefined\"\n :aria-describedby=\"describedBy\"\n />\n <NumberFieldIncrement\n class=\"number-field__step\"\n :aria-label=\"incrementLabel ?? `Tambah ${label}`\"\n >+</NumberFieldIncrement\n >\n </div>\n </NumberFieldRoot>\n <FieldFeedback\n :control-id=\"controlId\"\n :description=\"description\"\n :error-message=\"errorMessage\"\n :show-error=\"showError\"\n />\n <input\n v-if=\"name\"\n type=\"hidden\"\n :name=\"name\"\n :value=\"selected === null ? '' : String(selected)\"\n :disabled=\"disabled\"\n />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport {\n NumberFieldRoot,\n NumberFieldInput,\n NumberFieldIncrement,\n NumberFieldDecrement,\n Label,\n} from 'reka-ui';\nimport FieldFeedback from './FieldFeedback.vue';\nimport { useFeedback } from './useFeedback.js';\ndefineOptions({ inheritAttrs: false });\nconst props = withDefaults(\n defineProps<{\n label: string;\n modelValue?: number | null;\n defaultValue?: number | null;\n min?: number;\n max?: number;\n step?: number;\n locale?: string;\n formatOptions?: Intl.NumberFormatOptions;\n description?: string;\n errorMessage?: string;\n invalid?: boolean;\n disabled?: boolean;\n readonly?: boolean;\n required?: boolean;\n name?: string;\n id?: string;\n dir?: 'ltr' | 'rtl';\n incrementLabel?: string;\n decrementLabel?: string;\n }>(),\n {\n modelValue: undefined,\n defaultValue: null,\n min: undefined,\n max: undefined,\n step: 1,\n locale: 'id-ID',\n formatOptions: undefined,\n description: undefined,\n errorMessage: undefined,\n invalid: false,\n disabled: false,\n readonly: false,\n required: false,\n name: undefined,\n id: undefined,\n dir: undefined,\n incrementLabel: undefined,\n decrementLabel: undefined,\n },\n);\nconst emit = defineEmits<{ 'update:modelValue': [value: number | null] }>();\nfunction finite(value: number | null | undefined): number | null {\n return typeof value === 'number' && Number.isFinite(value) ? value : null;\n}\nconst local = ref(finite(props.defaultValue));\nconst selected = computed(() =>\n finite(props.modelValue === undefined ? local.value : props.modelValue),\n);\nconst { controlId, showError, describedBy } = useFeedback(props);\nfunction update(value: number | undefined) {\n if (props.disabled || props.readonly) return;\n const next = finite(value);\n local.value = next;\n emit('update:modelValue', next);\n}\n</script>\n<template>\n <div class=\"input number-field\" :dir=\"dir\">\n <Label class=\"label\" :for=\"controlId\">{{ label }}</Label>\n <NumberFieldRoot\n :id=\"controlId\"\n :model-value=\"selected\"\n :min=\"min\"\n :max=\"max\"\n :step=\"step\"\n :locale=\"locale\"\n :format-options=\"formatOptions\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n :required=\"required\"\n disable-wheel-change\n @update:model-value=\"update\"\n >\n <div class=\"number-field__group\">\n <NumberFieldDecrement\n class=\"number-field__step\"\n :aria-label=\"decrementLabel ?? `Kurangi ${label}`\"\n >&#8722;</NumberFieldDecrement\n >\n <NumberFieldInput\n class=\"number-field__control\"\n :required=\"required\"\n :aria-required=\"required || undefined\"\n :aria-invalid=\"invalid || undefined\"\n :aria-describedby=\"describedBy\"\n />\n <NumberFieldIncrement\n class=\"number-field__step\"\n :aria-label=\"incrementLabel ?? `Tambah ${label}`\"\n >+</NumberFieldIncrement\n >\n </div>\n </NumberFieldRoot>\n <FieldFeedback\n :control-id=\"controlId\"\n :description=\"description\"\n :error-message=\"errorMessage\"\n :show-error=\"showError\"\n />\n <input\n v-if=\"name\"\n type=\"hidden\"\n :name=\"name\"\n :value=\"selected === null ? '' : String(selected)\"\n :disabled=\"disabled\"\n />\n </div>\n</template>\n","<script setup lang=\"ts\">\nwithDefaults(\n defineProps<{ title?: string; description?: string; headingLevel?: 2 | 3 | 4 | 5 | 6 }>(),\n { title: undefined, description: undefined, headingLevel: 3 },\n);\ndefineSlots<{\n default?: () => unknown;\n header?: () => unknown;\n 'title-extras'?: () => unknown;\n actions?: () => unknown;\n footer?: () => unknown;\n}>();\n</script>\n<template>\n <div class=\"card\">\n <div\n v-if=\"title || description || $slots.actions || $slots.header || $slots['title-extras']\"\n class=\"card__header\"\n >\n <div\n v-if=\"title || description || $slots.header || $slots['title-extras']\"\n class=\"card__heading\"\n >\n <slot name=\"header\">\n <div v-if=\"$slots['title-extras']\" class=\"card__title-row\">\n <component :is=\"`h${headingLevel}`\" v-if=\"title\" class=\"card__title\">{{\n title\n }}</component\n ><slot name=\"title-extras\" />\n </div>\n <component :is=\"`h${headingLevel}`\" v-else-if=\"title\" class=\"card__title\">{{\n title\n }}</component>\n <p v-if=\"description\" class=\"card__description\">{{ description }}</p>\n </slot>\n </div>\n <div v-if=\"$slots.actions\" class=\"card__actions\"><slot name=\"actions\" /></div>\n </div>\n <div class=\"card__content\"><slot /></div>\n <div v-if=\"$slots.footer\" class=\"card__footer\"><slot name=\"footer\" /></div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nwithDefaults(\n defineProps<{ title?: string; description?: string; headingLevel?: 2 | 3 | 4 | 5 | 6 }>(),\n { title: undefined, description: undefined, headingLevel: 3 },\n);\ndefineSlots<{\n default?: () => unknown;\n header?: () => unknown;\n 'title-extras'?: () => unknown;\n actions?: () => unknown;\n footer?: () => unknown;\n}>();\n</script>\n<template>\n <div class=\"card\">\n <div\n v-if=\"title || description || $slots.actions || $slots.header || $slots['title-extras']\"\n class=\"card__header\"\n >\n <div\n v-if=\"title || description || $slots.header || $slots['title-extras']\"\n class=\"card__heading\"\n >\n <slot name=\"header\">\n <div v-if=\"$slots['title-extras']\" class=\"card__title-row\">\n <component :is=\"`h${headingLevel}`\" v-if=\"title\" class=\"card__title\">{{\n title\n }}</component\n ><slot name=\"title-extras\" />\n </div>\n <component :is=\"`h${headingLevel}`\" v-else-if=\"title\" class=\"card__title\">{{\n title\n }}</component>\n <p v-if=\"description\" class=\"card__description\">{{ description }}</p>\n </slot>\n </div>\n <div v-if=\"$slots.actions\" class=\"card__actions\"><slot name=\"actions\" /></div>\n </div>\n <div class=\"card__content\"><slot /></div>\n <div v-if=\"$slots.footer\" class=\"card__footer\"><slot name=\"footer\" /></div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type { BadgeTone } from './types.js';\nwithDefaults(defineProps<{ tone?: BadgeTone }>(), { tone: 'neutral' });\n</script>\n<template>\n <span class=\"badge\" :data-tone=\"tone\"><slot /></span>\n</template>\n","<script setup lang=\"ts\">\nimport type { BadgeTone } from './types.js';\nwithDefaults(defineProps<{ tone?: BadgeTone }>(), { tone: 'neutral' });\n</script>\n<template>\n <span class=\"badge\" :data-tone=\"tone\"><slot /></span>\n</template>\n","<script setup lang=\"ts\">\ndefineOptions({ inheritAttrs: false });\nwithDefaults(defineProps<{ shape?: 'rectangle' | 'circle'; animated?: boolean }>(), {\n shape: 'rectangle',\n animated: true,\n});\n</script>\n<template>\n <span\n v-bind=\"$attrs\"\n class=\"skeleton\"\n :data-shape=\"shape\"\n :data-animated=\"animated ? 'true' : undefined\"\n aria-hidden=\"true\"\n />\n</template>\n","<script setup lang=\"ts\">\ndefineOptions({ inheritAttrs: false });\nwithDefaults(defineProps<{ shape?: 'rectangle' | 'circle'; animated?: boolean }>(), {\n shape: 'rectangle',\n animated: true,\n});\n</script>\n<template>\n <span\n v-bind=\"$attrs\"\n class=\"skeleton\"\n :data-shape=\"shape\"\n :data-animated=\"animated ? 'true' : undefined\"\n aria-hidden=\"true\"\n />\n</template>\n","<script setup lang=\"ts\">\ndefineOptions({ inheritAttrs: false });\nwithDefaults(defineProps<{ orientation?: 'horizontal' | 'vertical'; decorative?: boolean }>(), {\n orientation: 'horizontal',\n decorative: true,\n});\n</script>\n<template>\n <div\n v-bind=\"$attrs\"\n class=\"separator\"\n :data-orientation=\"orientation\"\n :role=\"decorative ? 'presentation' : 'separator'\"\n :aria-hidden=\"decorative ? 'true' : undefined\"\n :aria-orientation=\"decorative ? undefined : orientation\"\n />\n</template>\n","<script setup lang=\"ts\">\ndefineOptions({ inheritAttrs: false });\nwithDefaults(defineProps<{ orientation?: 'horizontal' | 'vertical'; decorative?: boolean }>(), {\n orientation: 'horizontal',\n decorative: true,\n});\n</script>\n<template>\n <div\n v-bind=\"$attrs\"\n class=\"separator\"\n :data-orientation=\"orientation\"\n :role=\"decorative ? 'presentation' : 'separator'\"\n :aria-hidden=\"decorative ? 'true' : undefined\"\n :aria-orientation=\"decorative ? undefined : orientation\"\n />\n</template>\n","// Framework-neutral DOM behavior. Keep in sync with packages/vue/src/tabs-indicator.ts.\nexport function mountTabsIndicator(container: HTMLElement): () => void {\n const list = container.querySelector<HTMLElement>('[role=\"tablist\"]');\n if (!list) return () => {};\n let frame = 0,\n disposed = false,\n previous: Element | null = null,\n armed = false;\n const prev = container.querySelector<HTMLButtonElement>('[data-tabs-scroll=\"prev\"]');\n const next = container.querySelector<HTMLButtonElement>('[data-tabs-scroll=\"next\"]');\n const vertical = () => list.getAttribute('aria-orientation') === 'vertical';\n const reduced = () => window.matchMedia?.('(prefers-reduced-motion: reduce)').matches ?? false;\n function measure() {\n if (disposed) return;\n const selected = list!.querySelector<HTMLElement>('[role=\"tab\"][aria-selected=\"true\"]');\n const rect = list!.getBoundingClientRect();\n if (selected && rect.width > 0 && rect.height > 0) {\n const tab = selected.getBoundingClientRect();\n const border = getComputedStyle(list!);\n list!.style.setProperty(\n '--tabs-indicator-x',\n `${tab.left - rect.left + list!.scrollLeft - (parseFloat(border.borderLeftWidth) || 0)}px`,\n );\n list!.style.setProperty(\n '--tabs-indicator-y',\n `${tab.top - rect.top + list!.scrollTop - (parseFloat(border.borderTopWidth) || 0)}px`,\n );\n list!.style.setProperty('--tabs-indicator-width', `${tab.width}px`);\n list!.style.setProperty('--tabs-indicator-height', `${tab.height}px`);\n list!.dataset.indicatorReady = 'true';\n if (!armed) {\n armed = true;\n requestAnimationFrame(() => {\n if (!disposed) list!.dataset.indicatorAnimated = 'true';\n });\n }\n if (selected !== previous && previous && typeof list!.scrollBy === 'function') {\n const delta = vertical()\n ? tab.top < rect.top\n ? tab.top - rect.top\n : tab.bottom > rect.bottom\n ? tab.bottom - rect.bottom\n : 0\n : tab.left < rect.left\n ? tab.left - rect.left\n : tab.right > rect.right\n ? tab.right - rect.right\n : 0;\n if (delta)\n list!.scrollBy({\n [vertical() ? 'top' : 'left']: delta,\n behavior: reduced() ? 'instant' : 'smooth',\n });\n }\n } else list!.dataset.indicatorReady = 'false';\n previous = selected;\n const max = vertical()\n ? list!.scrollHeight - list!.clientHeight\n : list!.scrollWidth - list!.clientWidth;\n const position = Math.abs(vertical() ? list!.scrollTop : list!.scrollLeft);\n list!.dataset.overflow = String(max > 1);\n if (prev) {\n prev.hidden = max <= 1;\n prev.disabled = position <= 1;\n }\n if (next) {\n next.hidden = max <= 1;\n next.disabled = position >= max - 1;\n }\n }\n function schedule() {\n if (disposed) return;\n cancelAnimationFrame(frame);\n frame = requestAnimationFrame(measure);\n }\n function scroll(direction: number) {\n if (typeof list!.scrollBy !== 'function') return;\n const rtl = !vertical() && getComputedStyle(list!).direction === 'rtl';\n const amount =\n (vertical() ? list!.clientHeight : list!.clientWidth) * 0.7 * direction * (rtl ? -1 : 1);\n list!.scrollBy({\n [vertical() ? 'top' : 'left']: amount,\n behavior: reduced() ? 'instant' : 'smooth',\n });\n }\n const backward = () => scroll(-1),\n forward = () => scroll(1);\n prev?.addEventListener('click', backward);\n next?.addEventListener('click', forward);\n list.addEventListener('scroll', schedule, { passive: true });\n window.addEventListener('resize', schedule);\n const observer = new MutationObserver(schedule);\n observer.observe(list, {\n subtree: true,\n childList: true,\n characterData: true,\n attributes: true,\n attributeFilter: ['aria-selected', 'aria-orientation', 'aria-disabled', 'disabled'],\n });\n const resize = typeof ResizeObserver === 'undefined' ? undefined : new ResizeObserver(schedule);\n resize?.observe(list);\n for (const tab of list.querySelectorAll('[role=\"tab\"]')) resize?.observe(tab);\n void document.fonts?.ready.then(schedule);\n schedule();\n return () => {\n disposed = true;\n cancelAnimationFrame(frame);\n observer.disconnect();\n resize?.disconnect();\n prev?.removeEventListener('click', backward);\n next?.removeEventListener('click', forward);\n list.removeEventListener('scroll', schedule);\n window.removeEventListener('resize', schedule);\n };\n}\n","<script setup lang=\"ts\">\nimport { onBeforeUnmount, onMounted, ref } from 'vue';\nimport { TabsList, TabsTrigger } from 'reka-ui';\nimport type { TabItem } from './types.js';\nimport { mountTabsIndicator } from './tabs-indicator.js';\ndefineProps<{\n label: string;\n items: TabItem[];\n showSeparators: boolean;\n previousLabel: string;\n nextLabel: string;\n}>();\ndefineSlots<{ icon?: (props: { item: TabItem }) => unknown }>();\nconst container = ref<HTMLDivElement>();\nlet cleanup: (() => void) | undefined;\nonMounted(() => {\n if (container.value) cleanup = mountTabsIndicator(container.value);\n});\nonBeforeUnmount(() => cleanup?.());\n</script>\n<template>\n <div ref=\"container\" class=\"tabs__list-container\">\n <button\n type=\"button\"\n class=\"tabs__scroll-button tabs__scroll-button--prev\"\n data-tabs-scroll=\"prev\"\n hidden\n :aria-label=\"previousLabel\"\n >\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"m14 6-6 6 6 6\" /></svg>\n </button>\n <TabsList class=\"tabs__list\" :aria-label=\"label\">\n <TabsTrigger\n v-for=\"(item, index) in items\"\n :key=\"item.id\"\n class=\"tabs__trigger\"\n :value=\"item.id\"\n :disabled=\"item.isDisabled\"\n >\n <span v-if=\"showSeparators && index > 0\" class=\"tabs__separator\" aria-hidden=\"true\" />\n <span v-if=\"$slots.icon\" class=\"tabs__icon\" aria-hidden=\"true\"\n ><slot name=\"icon\" :item=\"item\"\n /></span>\n <span class=\"tabs__label\">{{ item.label }}</span>\n </TabsTrigger>\n </TabsList>\n <button\n type=\"button\"\n class=\"tabs__scroll-button tabs__scroll-button--next\"\n data-tabs-scroll=\"next\"\n hidden\n :aria-label=\"nextLabel\"\n >\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"m10 6 6 6-6 6\" /></svg>\n </button>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { onBeforeUnmount, onMounted, ref } from 'vue';\nimport { TabsList, TabsTrigger } from 'reka-ui';\nimport type { TabItem } from './types.js';\nimport { mountTabsIndicator } from './tabs-indicator.js';\ndefineProps<{\n label: string;\n items: TabItem[];\n showSeparators: boolean;\n previousLabel: string;\n nextLabel: string;\n}>();\ndefineSlots<{ icon?: (props: { item: TabItem }) => unknown }>();\nconst container = ref<HTMLDivElement>();\nlet cleanup: (() => void) | undefined;\nonMounted(() => {\n if (container.value) cleanup = mountTabsIndicator(container.value);\n});\nonBeforeUnmount(() => cleanup?.());\n</script>\n<template>\n <div ref=\"container\" class=\"tabs__list-container\">\n <button\n type=\"button\"\n class=\"tabs__scroll-button tabs__scroll-button--prev\"\n data-tabs-scroll=\"prev\"\n hidden\n :aria-label=\"previousLabel\"\n >\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"m14 6-6 6 6 6\" /></svg>\n </button>\n <TabsList class=\"tabs__list\" :aria-label=\"label\">\n <TabsTrigger\n v-for=\"(item, index) in items\"\n :key=\"item.id\"\n class=\"tabs__trigger\"\n :value=\"item.id\"\n :disabled=\"item.isDisabled\"\n >\n <span v-if=\"showSeparators && index > 0\" class=\"tabs__separator\" aria-hidden=\"true\" />\n <span v-if=\"$slots.icon\" class=\"tabs__icon\" aria-hidden=\"true\"\n ><slot name=\"icon\" :item=\"item\"\n /></span>\n <span class=\"tabs__label\">{{ item.label }}</span>\n </TabsTrigger>\n </TabsList>\n <button\n type=\"button\"\n class=\"tabs__scroll-button tabs__scroll-button--next\"\n data-tabs-scroll=\"next\"\n hidden\n :aria-label=\"nextLabel\"\n >\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"m10 6 6 6-6 6\" /></svg>\n </button>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport { TabsRoot, TabsContent } from 'reka-ui';\nimport TabsListView from './TabsListView.vue';\nimport type { TabItem, ButtonSize, TabsVariant } from './types.js';\ndefineOptions({ inheritAttrs: false });\nconst props = withDefaults(\n defineProps<{\n label: string;\n variant?: TabsVariant;\n size?: ButtonSize;\n orientation?: 'horizontal' | 'vertical';\n align?: 'start' | 'center' | 'end';\n fullWidth?: boolean;\n /** Remove track inset and gaps; pill uses an outlined track. */\n inset?: 'default' | 'none';\n showSeparators?: boolean;\n previousLabel?: string;\n nextLabel?: string;\n items: TabItem[];\n modelValue?: string;\n defaultValue?: string;\n activationMode?: 'automatic' | 'manual';\n dir?: 'ltr' | 'rtl';\n id?: string;\n }>(),\n {\n modelValue: undefined,\n defaultValue: undefined,\n activationMode: 'manual',\n variant: 'primary',\n size: 'md',\n orientation: 'horizontal',\n align: 'center',\n fullWidth: false,\n inset: 'default',\n showSeparators: false,\n previousLabel: 'Tab sebelumnya / Previous tabs',\n nextLabel: 'Tab berikutnya / Next tabs',\n dir: undefined,\n id: undefined,\n },\n);\ndefineSlots<{\n default?: (props: { item: TabItem }) => unknown;\n extras?: () => unknown;\n actions?: () => unknown;\n icon?: (props: { item: TabItem }) => unknown;\n}>();\nconst emit = defineEmits<{ 'update:modelValue': [value: string] }>();\nconst local = ref(props.defaultValue);\nconst selected = computed(\n () =>\n props.items.find((item) => item.id === (props.modelValue ?? local.value) && !item.isDisabled)\n ?.id ?? props.items.find((item) => !item.isDisabled)?.id,\n);\nfunction update(value: string | number) {\n const next = String(value);\n if (next !== selected.value && props.items.some((item) => item.id === next && !item.isDisabled)) {\n local.value = next;\n emit('update:modelValue', next);\n }\n}\n</script>\n<template>\n <TabsRoot\n :id=\"id\"\n :class=\"[\n 'tabs',\n `tabs--${variant === 'default' ? 'primary' : variant}`,\n `tabs--align-${align}`,\n fullWidth && 'tabs--full-width',\n inset === 'none' && 'tabs--flush',\n size !== 'md' && `tabs--${size}`,\n ]\"\n :model-value=\"selected ?? ''\"\n :activation-mode=\"activationMode\"\n :dir=\"dir\"\n :orientation=\"orientation\"\n :data-orientation=\"orientation\"\n @update:model-value=\"update\"\n >\n <div v-if=\"$slots.extras || $slots.actions\" class=\"tabs__toolbar\">\n <div class=\"tabs__navigation\">\n <TabsListView\n v-if=\"items.length\"\n :label=\"label\"\n :items=\"items\"\n :show-separators=\"showSeparators\"\n :previous-label=\"previousLabel\"\n :next-label=\"nextLabel\"\n >\n <template v-if=\"$slots.icon\" #icon=\"{ item }\"><slot name=\"icon\" :item=\"item\" /></template>\n </TabsListView>\n <div v-if=\"$slots.extras\" class=\"tabs__extras\"><slot name=\"extras\" /></div>\n </div>\n <div v-if=\"$slots.actions\" class=\"tabs__actions\"><slot name=\"actions\" /></div>\n </div>\n <TabsListView\n v-else-if=\"items.length\"\n :label=\"label\"\n :items=\"items\"\n :show-separators=\"showSeparators\"\n :previous-label=\"previousLabel\"\n :next-label=\"nextLabel\"\n >\n <template v-if=\"$slots.icon\" #icon=\"{ item }\"><slot name=\"icon\" :item=\"item\" /></template>\n </TabsListView>\n <TabsContent v-for=\"item in items\" :key=\"item.id\" class=\"tabs__panel\" :value=\"item.id\"\n ><slot :item=\"item\"\n /></TabsContent>\n </TabsRoot>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport { TabsRoot, TabsContent } from 'reka-ui';\nimport TabsListView from './TabsListView.vue';\nimport type { TabItem, ButtonSize, TabsVariant } from './types.js';\ndefineOptions({ inheritAttrs: false });\nconst props = withDefaults(\n defineProps<{\n label: string;\n variant?: TabsVariant;\n size?: ButtonSize;\n orientation?: 'horizontal' | 'vertical';\n align?: 'start' | 'center' | 'end';\n fullWidth?: boolean;\n /** Remove track inset and gaps; pill uses an outlined track. */\n inset?: 'default' | 'none';\n showSeparators?: boolean;\n previousLabel?: string;\n nextLabel?: string;\n items: TabItem[];\n modelValue?: string;\n defaultValue?: string;\n activationMode?: 'automatic' | 'manual';\n dir?: 'ltr' | 'rtl';\n id?: string;\n }>(),\n {\n modelValue: undefined,\n defaultValue: undefined,\n activationMode: 'manual',\n variant: 'primary',\n size: 'md',\n orientation: 'horizontal',\n align: 'center',\n fullWidth: false,\n inset: 'default',\n showSeparators: false,\n previousLabel: 'Tab sebelumnya / Previous tabs',\n nextLabel: 'Tab berikutnya / Next tabs',\n dir: undefined,\n id: undefined,\n },\n);\ndefineSlots<{\n default?: (props: { item: TabItem }) => unknown;\n extras?: () => unknown;\n actions?: () => unknown;\n icon?: (props: { item: TabItem }) => unknown;\n}>();\nconst emit = defineEmits<{ 'update:modelValue': [value: string] }>();\nconst local = ref(props.defaultValue);\nconst selected = computed(\n () =>\n props.items.find((item) => item.id === (props.modelValue ?? local.value) && !item.isDisabled)\n ?.id ?? props.items.find((item) => !item.isDisabled)?.id,\n);\nfunction update(value: string | number) {\n const next = String(value);\n if (next !== selected.value && props.items.some((item) => item.id === next && !item.isDisabled)) {\n local.value = next;\n emit('update:modelValue', next);\n }\n}\n</script>\n<template>\n <TabsRoot\n :id=\"id\"\n :class=\"[\n 'tabs',\n `tabs--${variant === 'default' ? 'primary' : variant}`,\n `tabs--align-${align}`,\n fullWidth && 'tabs--full-width',\n inset === 'none' && 'tabs--flush',\n size !== 'md' && `tabs--${size}`,\n ]\"\n :model-value=\"selected ?? ''\"\n :activation-mode=\"activationMode\"\n :dir=\"dir\"\n :orientation=\"orientation\"\n :data-orientation=\"orientation\"\n @update:model-value=\"update\"\n >\n <div v-if=\"$slots.extras || $slots.actions\" class=\"tabs__toolbar\">\n <div class=\"tabs__navigation\">\n <TabsListView\n v-if=\"items.length\"\n :label=\"label\"\n :items=\"items\"\n :show-separators=\"showSeparators\"\n :previous-label=\"previousLabel\"\n :next-label=\"nextLabel\"\n >\n <template v-if=\"$slots.icon\" #icon=\"{ item }\"><slot name=\"icon\" :item=\"item\" /></template>\n </TabsListView>\n <div v-if=\"$slots.extras\" class=\"tabs__extras\"><slot name=\"extras\" /></div>\n </div>\n <div v-if=\"$slots.actions\" class=\"tabs__actions\"><slot name=\"actions\" /></div>\n </div>\n <TabsListView\n v-else-if=\"items.length\"\n :label=\"label\"\n :items=\"items\"\n :show-separators=\"showSeparators\"\n :previous-label=\"previousLabel\"\n :next-label=\"nextLabel\"\n >\n <template v-if=\"$slots.icon\" #icon=\"{ item }\"><slot name=\"icon\" :item=\"item\" /></template>\n </TabsListView>\n <TabsContent v-for=\"item in items\" :key=\"item.id\" class=\"tabs__panel\" :value=\"item.id\"\n ><slot :item=\"item\"\n /></TabsContent>\n </TabsRoot>\n</template>\n","export function paginationModel(\n totalItems: number,\n pageSize: number,\n value: number,\n siblingCount = 1,\n) {\n const total = Number.isFinite(totalItems)\n ? Math.min(Number.MAX_SAFE_INTEGER, Math.max(0, Math.floor(totalItems)))\n : 0;\n const size = Number.isFinite(pageSize) ? Math.max(1, Math.floor(pageSize)) : 10;\n const count = Math.max(1, Math.ceil(total / size));\n const current = Math.min(count, Math.max(1, Number.isFinite(value) ? Math.floor(value) : 1));\n const siblings = Number.isFinite(siblingCount)\n ? Math.min(2, Math.max(0, Math.floor(siblingCount)))\n : 1;\n const pages = new Set([1, count, current]);\n for (let offset = 1; offset <= siblings; offset++) {\n if (current - offset > 1) pages.add(current - offset);\n if (current + offset < count) pages.add(current + offset);\n }\n const ordered = [...pages].sort((a, b) => a - b);\n const entries: (number | string)[] = [];\n ordered.forEach((page, index) => {\n if (index && page - ordered[index - 1] > 1) entries.push(`gap-${page}`);\n entries.push(page);\n });\n return { current, count, entries };\n}\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport { paginationModel } from './pagination-model.js';\ndefineOptions({ inheritAttrs: false });\nconst props = withDefaults(\n defineProps<{\n totalItems: number;\n pageSize?: number;\n modelValue?: number;\n defaultValue?: number;\n disabled?: boolean;\n siblingCount?: number;\n label?: string;\n previousLabel?: string;\n nextLabel?: string;\n pageLabel?: string;\n dir?: 'ltr' | 'rtl';\n id?: string;\n }>(),\n {\n pageSize: 10,\n modelValue: undefined,\n defaultValue: 1,\n disabled: false,\n siblingCount: 1,\n label: 'Navigasi halaman',\n previousLabel: 'Sebelumnya',\n nextLabel: 'Berikutnya',\n pageLabel: 'Halaman',\n dir: undefined,\n id: undefined,\n },\n);\nconst emit = defineEmits<{ 'update:modelValue': [page: number] }>();\nconst local = ref(props.defaultValue);\nconst model = computed(() =>\n paginationModel(\n props.totalItems,\n props.pageSize,\n props.modelValue ?? local.value,\n props.siblingCount,\n ),\n);\nfunction change(next: number) {\n if (props.disabled || next === model.value.current || next < 1 || next > model.value.count)\n return;\n local.value = next;\n emit('update:modelValue', next);\n}\n</script>\n<template>\n <nav :id=\"id\" class=\"pagination\" :aria-label=\"label\" :dir=\"dir\">\n <button\n type=\"button\"\n class=\"pagination__button\"\n :disabled=\"disabled || model.current === 1\"\n @click=\"change(model.current - 1)\"\n >\n {{ previousLabel }}\n </button>\n <template v-for=\"entry in model.entries\" :key=\"entry\">\n <span v-if=\"typeof entry === 'string'\" class=\"pagination__gap\" aria-hidden=\"true\">...</span>\n <button\n v-else\n type=\"button\"\n class=\"pagination__button\"\n :aria-label=\"`${pageLabel} ${entry}`\"\n :aria-current=\"entry === model.current ? 'page' : undefined\"\n :disabled=\"disabled\"\n @click=\"change(entry)\"\n >\n {{ entry }}\n </button>\n </template>\n <button\n type=\"button\"\n class=\"pagination__button\"\n :disabled=\"disabled || model.current === model.count\"\n @click=\"change(model.current + 1)\"\n >\n {{ nextLabel }}\n </button>\n <span class=\"pagination__summary\" aria-live=\"polite\"\n >{{ model.current }} / {{ model.count }}</span\n >\n </nav>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport { paginationModel } from './pagination-model.js';\ndefineOptions({ inheritAttrs: false });\nconst props = withDefaults(\n defineProps<{\n totalItems: number;\n pageSize?: number;\n modelValue?: number;\n defaultValue?: number;\n disabled?: boolean;\n siblingCount?: number;\n label?: string;\n previousLabel?: string;\n nextLabel?: string;\n pageLabel?: string;\n dir?: 'ltr' | 'rtl';\n id?: string;\n }>(),\n {\n pageSize: 10,\n modelValue: undefined,\n defaultValue: 1,\n disabled: false,\n siblingCount: 1,\n label: 'Navigasi halaman',\n previousLabel: 'Sebelumnya',\n nextLabel: 'Berikutnya',\n pageLabel: 'Halaman',\n dir: undefined,\n id: undefined,\n },\n);\nconst emit = defineEmits<{ 'update:modelValue': [page: number] }>();\nconst local = ref(props.defaultValue);\nconst model = computed(() =>\n paginationModel(\n props.totalItems,\n props.pageSize,\n props.modelValue ?? local.value,\n props.siblingCount,\n ),\n);\nfunction change(next: number) {\n if (props.disabled || next === model.value.current || next < 1 || next > model.value.count)\n return;\n local.value = next;\n emit('update:modelValue', next);\n}\n</script>\n<template>\n <nav :id=\"id\" class=\"pagination\" :aria-label=\"label\" :dir=\"dir\">\n <button\n type=\"button\"\n class=\"pagination__button\"\n :disabled=\"disabled || model.current === 1\"\n @click=\"change(model.current - 1)\"\n >\n {{ previousLabel }}\n </button>\n <template v-for=\"entry in model.entries\" :key=\"entry\">\n <span v-if=\"typeof entry === 'string'\" class=\"pagination__gap\" aria-hidden=\"true\">...</span>\n <button\n v-else\n type=\"button\"\n class=\"pagination__button\"\n :aria-label=\"`${pageLabel} ${entry}`\"\n :aria-current=\"entry === model.current ? 'page' : undefined\"\n :disabled=\"disabled\"\n @click=\"change(entry)\"\n >\n {{ entry }}\n </button>\n </template>\n <button\n type=\"button\"\n class=\"pagination__button\"\n :disabled=\"disabled || model.current === model.count\"\n @click=\"change(model.current + 1)\"\n >\n {{ nextLabel }}\n </button>\n <span class=\"pagination__summary\" aria-live=\"polite\"\n >{{ model.current }} / {{ model.count }}</span\n >\n </nav>\n</template>\n","<script setup lang=\"ts\">\ndefineOptions({ inheritAttrs: false });\ndefineProps<{ caption: string }>();\n</script>\n<template>\n <div class=\"table__scroll\" role=\"region\" :aria-label=\"caption\" tabindex=\"0\">\n <table v-bind=\"$attrs\" class=\"table\">\n <caption class=\"table__caption\">\n {{\n caption\n }}\n </caption>\n <slot />\n </table>\n </div>\n</template>\n","<script setup lang=\"ts\">\ndefineOptions({ inheritAttrs: false });\ndefineProps<{ caption: string }>();\n</script>\n<template>\n <div class=\"table__scroll\" role=\"region\" :aria-label=\"caption\" tabindex=\"0\">\n <table v-bind=\"$attrs\" class=\"table\">\n <caption class=\"table__caption\">\n {{\n caption\n }}\n </caption>\n <slot />\n </table>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport Table from './Table.vue';\nimport type { DataTableColumn, DataTableRow, TableSort } from './data-table-types.js';\ndefineOptions({ inheritAttrs: false });\nconst props = withDefaults(\n defineProps<{\n caption: string;\n columns: DataTableColumn[];\n rows: DataTableRow[];\n sort?: TableSort | null;\n loading?: boolean;\n disabled?: boolean;\n emptyMessage?: string;\n loadingMessage?: string;\n errorMessage?: string;\n dir?: 'ltr' | 'rtl';\n id?: string;\n }>(),\n {\n sort: null,\n loading: false,\n disabled: false,\n emptyMessage: 'Tidak ada data.',\n loadingMessage: 'Memuat data...',\n errorMessage: undefined,\n dir: undefined,\n id: undefined,\n },\n);\nconst emit = defineEmits<{ 'update:sort': [sort: TableSort] }>();\nfunction requestSort(column: DataTableColumn) {\n if (props.loading || props.disabled || !column.sortable) return;\n emit('update:sort', {\n columnId: column.id,\n direction:\n props.sort?.columnId === column.id && props.sort.direction === 'ascending'\n ? 'descending'\n : 'ascending',\n });\n}\n</script>\n<template>\n <div :id=\"id\" class=\"data-table\" :dir=\"dir\">\n <Table :caption=\"caption\" :aria-busy=\"loading || undefined\">\n <thead>\n <tr>\n <th\n v-for=\"column in columns\"\n :key=\"column.id\"\n scope=\"col\"\n :aria-sort=\"\n column.sortable ? (sort?.columnId === column.id ? sort.direction : 'none') : undefined\n \"\n >\n <button\n v-if=\"column.sortable\"\n type=\"button\"\n class=\"table__sort\"\n :disabled=\"loading || disabled\"\n @click=\"requestSort(column)\"\n >\n {{ column.label\n }}<span aria-hidden=\"true\">{{\n sort?.columnId === column.id\n ? sort.direction === 'ascending'\n ? '\\u2191'\n : '\\u2193'\n : '\\u2195'\n }}</span></button\n ><template v-else>{{ column.label }}</template>\n </th>\n </tr>\n </thead>\n <tbody>\n <tr v-for=\"row in rows\" :key=\"row.id\">\n <td v-for=\"column in columns\" :key=\"column.id\">\n <slot name=\"cell\" :row=\"row\" :column=\"column\" :value=\"row.cells[column.id]\">{{\n row.cells[column.id] ?? ''\n }}</slot>\n </td>\n </tr>\n <tr v-if=\"!rows.length\">\n <td :colspan=\"Math.max(1, columns.length)\" class=\"table__empty\">\n {{ loading ? loadingMessage : errorMessage || emptyMessage }}\n </td>\n </tr>\n </tbody>\n </Table>\n <p v-if=\"loading\" class=\"data-table__status\" role=\"status\">{{ loadingMessage }}</p>\n <p v-if=\"errorMessage && !loading\" class=\"input__error\" role=\"alert\">{{ errorMessage }}</p>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport Table from './Table.vue';\nimport type { DataTableColumn, DataTableRow, TableSort } from './data-table-types.js';\ndefineOptions({ inheritAttrs: false });\nconst props = withDefaults(\n defineProps<{\n caption: string;\n columns: DataTableColumn[];\n rows: DataTableRow[];\n sort?: TableSort | null;\n loading?: boolean;\n disabled?: boolean;\n emptyMessage?: string;\n loadingMessage?: string;\n errorMessage?: string;\n dir?: 'ltr' | 'rtl';\n id?: string;\n }>(),\n {\n sort: null,\n loading: false,\n disabled: false,\n emptyMessage: 'Tidak ada data.',\n loadingMessage: 'Memuat data...',\n errorMessage: undefined,\n dir: undefined,\n id: undefined,\n },\n);\nconst emit = defineEmits<{ 'update:sort': [sort: TableSort] }>();\nfunction requestSort(column: DataTableColumn) {\n if (props.loading || props.disabled || !column.sortable) return;\n emit('update:sort', {\n columnId: column.id,\n direction:\n props.sort?.columnId === column.id && props.sort.direction === 'ascending'\n ? 'descending'\n : 'ascending',\n });\n}\n</script>\n<template>\n <div :id=\"id\" class=\"data-table\" :dir=\"dir\">\n <Table :caption=\"caption\" :aria-busy=\"loading || undefined\">\n <thead>\n <tr>\n <th\n v-for=\"column in columns\"\n :key=\"column.id\"\n scope=\"col\"\n :aria-sort=\"\n column.sortable ? (sort?.columnId === column.id ? sort.direction : 'none') : undefined\n \"\n >\n <button\n v-if=\"column.sortable\"\n type=\"button\"\n class=\"table__sort\"\n :disabled=\"loading || disabled\"\n @click=\"requestSort(column)\"\n >\n {{ column.label\n }}<span aria-hidden=\"true\">{{\n sort?.columnId === column.id\n ? sort.direction === 'ascending'\n ? '\\u2191'\n : '\\u2193'\n : '\\u2195'\n }}</span></button\n ><template v-else>{{ column.label }}</template>\n </th>\n </tr>\n </thead>\n <tbody>\n <tr v-for=\"row in rows\" :key=\"row.id\">\n <td v-for=\"column in columns\" :key=\"column.id\">\n <slot name=\"cell\" :row=\"row\" :column=\"column\" :value=\"row.cells[column.id]\">{{\n row.cells[column.id] ?? ''\n }}</slot>\n </td>\n </tr>\n <tr v-if=\"!rows.length\">\n <td :colspan=\"Math.max(1, columns.length)\" class=\"table__empty\">\n {{ loading ? loadingMessage : errorMessage || emptyMessage }}\n </td>\n </tr>\n </tbody>\n </Table>\n <p v-if=\"loading\" class=\"data-table__status\" role=\"status\">{{ loadingMessage }}</p>\n <p v-if=\"errorMessage && !loading\" class=\"input__error\" role=\"alert\">{{ errorMessage }}</p>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type { BadgeTone } from './types.js';\ndefineOptions({ inheritAttrs: false });\nwithDefaults(\n defineProps<{\n title: string;\n description?: string;\n tone?: BadgeTone;\n announcement?: 'off' | 'polite' | 'assertive';\n id?: string;\n }>(),\n { description: undefined, tone: 'info', announcement: 'off', id: undefined },\n);\n</script>\n<template>\n <div\n :id=\"id\"\n class=\"alert\"\n :data-tone=\"tone\"\n :role=\"\n announcement === 'polite' ? 'status' : announcement === 'assertive' ? 'alert' : undefined\n \"\n >\n <p class=\"alert__title\">{{ title }}</p>\n <p v-if=\"description\" class=\"alert__description\">{{ description }}</p>\n <slot />\n <div v-if=\"$slots.actions\" class=\"alert__actions\"><slot name=\"actions\" /></div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type { BadgeTone } from './types.js';\ndefineOptions({ inheritAttrs: false });\nwithDefaults(\n defineProps<{\n title: string;\n description?: string;\n tone?: BadgeTone;\n announcement?: 'off' | 'polite' | 'assertive';\n id?: string;\n }>(),\n { description: undefined, tone: 'info', announcement: 'off', id: undefined },\n);\n</script>\n<template>\n <div\n :id=\"id\"\n class=\"alert\"\n :data-tone=\"tone\"\n :role=\"\n announcement === 'polite' ? 'status' : announcement === 'assertive' ? 'alert' : undefined\n \"\n >\n <p class=\"alert__title\">{{ title }}</p>\n <p v-if=\"description\" class=\"alert__description\">{{ description }}</p>\n <slot />\n <div v-if=\"$slots.actions\" class=\"alert__actions\"><slot name=\"actions\" /></div>\n </div>\n</template>\n","import { inject, type InjectionKey } from 'vue';\nimport type { ToastManager } from './toast-model.js';\n\nexport const toastManagerKey: InjectionKey<ToastManager> = Symbol('KazeeToastManager');\n\n/** Access the nearest provider's manager. Create imperative managers per application. */\nexport function useToast(): ToastManager {\n const manager = inject(toastManagerKey);\n if (!manager) throw new Error('useToast must be used inside ToastProvider.');\n return manager;\n}\n","<script setup lang=\"ts\">\nimport { computed, ref, watch } from 'vue';\nimport {\n ToastRoot,\n ToastTitle,\n ToastDescription,\n ToastAction as RekaToastAction,\n ToastClose,\n} from 'reka-ui';\nimport type { ToastAction, ToastEntry, ToastManager, ToastPlacement } from './toast-model.js';\nimport { useToast } from './useToast.js';\n\ndefineOptions({ inheritAttrs: false });\nconst props = withDefaults(\n defineProps<{\n entry: ToastEntry;\n manager?: ToastManager;\n placement?: ToastPlacement;\n closeLabel?: string;\n dir?: 'ltr' | 'rtl';\n showProgress?: boolean;\n showCloseButton?: boolean;\n swipeThreshold?: number;\n }>(),\n {\n manager: undefined,\n placement: 'bottom-end',\n closeLabel: 'Tutup',\n dir: undefined,\n showProgress: false,\n showCloseButton: false,\n swipeThreshold: 50,\n },\n);\ndefineSlots<{\n default?: (props: { entry: ToastEntry; dismiss: () => void }) => unknown;\n indicator?: (props: { entry: ToastEntry }) => unknown;\n}>();\nconst manager = props.manager ?? useToast();\nconst closing = computed(() => props.entry.state === 'closing');\nconst swipe = ref<'start' | 'move' | 'cancel' | 'end'>();\nconst delta = ref(0);\nconst announcement = ref('');\nwatch(\n () => [props.entry.title, props.entry.description, props.entry.isLoading],\n () => {\n if (!closing.value)\n announcement.value = [props.entry.title, props.entry.description].filter(Boolean).join('. ');\n },\n);\nconst style = computed(() => ({\n touchAction: 'pan-y',\n '--toast-progress': props.entry.duration > 0 ? props.entry.remaining / props.entry.duration : 0,\n '--toast-remaining': `${props.entry.remaining}ms`,\n '--toast-duration': `${props.entry.duration}ms`,\n '--toast-swipe-x': `${delta.value}px`,\n '--reka-toast-swipe-move-x': `${delta.value}px`,\n '--reka-toast-swipe-end-x': `${delta.value}px`,\n}));\nfunction viewport(element: Element | null) {\n return element?.closest('.toast-list') as HTMLElement | null;\n}\nfunction dismiss() {\n const element = document.activeElement;\n if (\n element instanceof HTMLElement &&\n element.closest('[data-toast-id]')?.getAttribute('data-toast-id') === props.entry.id\n )\n viewport(element)?.focus({ preventScroll: true });\n manager.dismiss(props.entry.id);\n}\nfunction action(value: ToastAction, reason: 'action' | 'cancel', event: MouseEvent) {\n // Prevent native primitive close; only a successful application action closes.\n event.preventDefault();\n value.onAction();\n if (value.dismiss !== false) {\n viewport(event.currentTarget as Element)?.focus({ preventScroll: true });\n manager.dismiss(props.entry.id, reason);\n }\n}\nlet pointer: { id: number; x: number; y: number; direction: number; started: boolean } | undefined;\nfunction pointerDown(event: PointerEvent) {\n if (closing.value || event.button !== 0 || event.isPrimary === false) return;\n if (\n (event.target as Element).closest(\n 'button,a,input,textarea,select,[role=\"button\"],[contenteditable]:not([contenteditable=\"false\"]),[data-no-swipe]',\n )\n )\n return;\n const rtl =\n props.dir === 'rtl' ||\n (!props.dir && getComputedStyle(event.currentTarget as Element).direction === 'rtl');\n const start = props.placement.endsWith('start');\n pointer = {\n id: event.pointerId,\n x: event.clientX,\n y: event.clientY,\n direction: start !== rtl ? -1 : 1,\n started: false,\n };\n}\nfunction pointerMove(event: PointerEvent) {\n if (!pointer || pointer.id !== event.pointerId) return;\n const x = event.clientX - pointer.x;\n const y = event.clientY - pointer.y;\n if (!pointer.started) {\n if (Math.abs(y) > Math.abs(x) && Math.abs(y) > 8) {\n pointer = undefined;\n return;\n }\n if (Math.abs(x) < 8) return;\n if (x * pointer.direction < 0) {\n pointer = undefined;\n return;\n }\n pointer.started = true;\n (event.currentTarget as HTMLElement).setPointerCapture?.(event.pointerId);\n swipe.value = 'start';\n }\n delta.value = Math.max(0, x * pointer.direction) * pointer.direction;\n swipe.value = 'move';\n}\nfunction pointerEnd(event: PointerEvent, cancel = false) {\n if (!pointer || pointer.id !== event.pointerId) return;\n const started = pointer.started;\n pointer = undefined;\n const node = event.currentTarget as HTMLElement;\n if (node.hasPointerCapture?.(event.pointerId)) node.releasePointerCapture(event.pointerId);\n if (!started) return;\n if (!cancel && Math.abs(delta.value) >= props.swipeThreshold) {\n swipe.value = 'end';\n manager.dismiss(props.entry.id, 'swipe');\n } else {\n swipe.value = 'cancel';\n delta.value = 0;\n }\n node.addEventListener(\n 'click',\n (click) => {\n click.preventDefault();\n click.stopPropagation();\n },\n { once: true },\n );\n}\n</script>\n\n<template>\n <!-- asChild lets Kazee closing/inert attributes override the primitive's native open/limited attributes. -->\n <ToastRoot :open=\"!closing\" :force-mount=\"true\" :duration=\"Infinity\" type=\"background\" as-child>\n <li\n class=\"toast\"\n :data-toast-id=\"entry.id\"\n :data-tone=\"entry.tone\"\n :data-has-close=\"showCloseButton || undefined\"\n :data-loading=\"entry.isLoading || undefined\"\n :data-state=\"entry.state\"\n :data-placement=\"placement\"\n :data-paused=\"entry.paused || undefined\"\n :data-swipe=\"swipe\"\n :dir=\"dir\"\n :inert=\"closing || undefined\"\n :aria-hidden=\"closing || undefined\"\n :tabindex=\"closing ? -1 : 0\"\n :style=\"style\"\n @pointerdown=\"pointerDown\"\n @pointermove=\"pointerMove\"\n @pointerup=\"pointerEnd($event)\"\n @pointercancel=\"pointerEnd($event, true)\"\n >\n <span class=\"toast__indicator\" aria-hidden=\"true\">\n <slot name=\"indicator\" :entry=\"entry\">\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.8\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <template v-if=\"entry.isLoading\">\n <circle cx=\"12\" cy=\"12\" r=\"9\" opacity=\".25\" />\n <path d=\"M12 3a9 9 0 0 1 9 9\" />\n </template>\n <template v-else-if=\"entry.tone === 'success'\">\n <circle cx=\"12\" cy=\"12\" r=\"9\" />\n <path d=\"m8 12 3 3 5-6\" />\n </template>\n <template v-else-if=\"entry.tone === 'warning'\">\n <path d=\"m12 3 10 18H2L12 3Z\" />\n <path d=\"M12 9v4m0 4h.01\" />\n </template>\n <template v-else-if=\"entry.tone === 'danger'\">\n <circle cx=\"12\" cy=\"12\" r=\"9\" />\n <path d=\"m9 9 6 6m0-6-6 6\" />\n </template>\n <template v-else>\n <circle cx=\"12\" cy=\"12\" r=\"9\" />\n <path d=\"M12 11v6m0-10h.01\" />\n </template>\n </svg>\n </slot>\n </span>\n <div class=\"toast__body\">\n <slot :entry=\"entry\" :dismiss=\"dismiss\">\n <ToastTitle class=\"toast__title\">{{ entry.title }}</ToastTitle>\n <ToastDescription v-if=\"entry.description\" class=\"toast__description\">{{\n entry.description\n }}</ToastDescription>\n <div v-if=\"entry.action || entry.cancel\" class=\"toast__actions\">\n <RekaToastAction\n v-if=\"entry.action\"\n class=\"toast__action\"\n :alt-text=\"entry.action.altText\"\n :close-on-click=\"false\"\n :disabled=\"closing\"\n @click=\"action(entry.action, 'action', $event)\"\n >{{ entry.action.label }}</RekaToastAction\n >\n <RekaToastAction\n v-if=\"entry.cancel\"\n class=\"toast__action\"\n data-cancel\n :alt-text=\"entry.cancel.altText\"\n :close-on-click=\"false\"\n :disabled=\"closing\"\n @click=\"action(entry.cancel, 'cancel', $event)\"\n >{{ entry.cancel.label }}</RekaToastAction\n >\n </div>\n </slot>\n </div>\n <ToastClose\n v-if=\"showCloseButton\"\n class=\"toast__close\"\n :aria-label=\"closeLabel\"\n :disabled=\"closing\"\n @click=\"dismiss\"\n >\n <svg\n aria-hidden=\"true\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.8\"\n stroke-linecap=\"round\"\n >\n <path d=\"m6 6 12 12M6 18 18 6\" />\n </svg>\n </ToastClose>\n <span\n v-if=\"showProgress && entry.duration > 0 && !entry.isLoading\"\n :key=\"`${entry.generation}-${entry.remaining}-${entry.paused}`\"\n class=\"toast__progress\"\n aria-hidden=\"true\"\n />\n </li>\n </ToastRoot>\n <span\n role=\"status\"\n aria-live=\"polite\"\n aria-atomic=\"true\"\n style=\"\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n \"\n >{{ announcement }}</span\n >\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref, watch } from 'vue';\nimport {\n ToastRoot,\n ToastTitle,\n ToastDescription,\n ToastAction as RekaToastAction,\n ToastClose,\n} from 'reka-ui';\nimport type { ToastAction, ToastEntry, ToastManager, ToastPlacement } from './toast-model.js';\nimport { useToast } from './useToast.js';\n\ndefineOptions({ inheritAttrs: false });\nconst props = withDefaults(\n defineProps<{\n entry: ToastEntry;\n manager?: ToastManager;\n placement?: ToastPlacement;\n closeLabel?: string;\n dir?: 'ltr' | 'rtl';\n showProgress?: boolean;\n showCloseButton?: boolean;\n swipeThreshold?: number;\n }>(),\n {\n manager: undefined,\n placement: 'bottom-end',\n closeLabel: 'Tutup',\n dir: undefined,\n showProgress: false,\n showCloseButton: false,\n swipeThreshold: 50,\n },\n);\ndefineSlots<{\n default?: (props: { entry: ToastEntry; dismiss: () => void }) => unknown;\n indicator?: (props: { entry: ToastEntry }) => unknown;\n}>();\nconst manager = props.manager ?? useToast();\nconst closing = computed(() => props.entry.state === 'closing');\nconst swipe = ref<'start' | 'move' | 'cancel' | 'end'>();\nconst delta = ref(0);\nconst announcement = ref('');\nwatch(\n () => [props.entry.title, props.entry.description, props.entry.isLoading],\n () => {\n if (!closing.value)\n announcement.value = [props.entry.title, props.entry.description].filter(Boolean).join('. ');\n },\n);\nconst style = computed(() => ({\n touchAction: 'pan-y',\n '--toast-progress': props.entry.duration > 0 ? props.entry.remaining / props.entry.duration : 0,\n '--toast-remaining': `${props.entry.remaining}ms`,\n '--toast-duration': `${props.entry.duration}ms`,\n '--toast-swipe-x': `${delta.value}px`,\n '--reka-toast-swipe-move-x': `${delta.value}px`,\n '--reka-toast-swipe-end-x': `${delta.value}px`,\n}));\nfunction viewport(element: Element | null) {\n return element?.closest('.toast-list') as HTMLElement | null;\n}\nfunction dismiss() {\n const element = document.activeElement;\n if (\n element instanceof HTMLElement &&\n element.closest('[data-toast-id]')?.getAttribute('data-toast-id') === props.entry.id\n )\n viewport(element)?.focus({ preventScroll: true });\n manager.dismiss(props.entry.id);\n}\nfunction action(value: ToastAction, reason: 'action' | 'cancel', event: MouseEvent) {\n // Prevent native primitive close; only a successful application action closes.\n event.preventDefault();\n value.onAction();\n if (value.dismiss !== false) {\n viewport(event.currentTarget as Element)?.focus({ preventScroll: true });\n manager.dismiss(props.entry.id, reason);\n }\n}\nlet pointer: { id: number; x: number; y: number; direction: number; started: boolean } | undefined;\nfunction pointerDown(event: PointerEvent) {\n if (closing.value || event.button !== 0 || event.isPrimary === false) return;\n if (\n (event.target as Element).closest(\n 'button,a,input,textarea,select,[role=\"button\"],[contenteditable]:not([contenteditable=\"false\"]),[data-no-swipe]',\n )\n )\n return;\n const rtl =\n props.dir === 'rtl' ||\n (!props.dir && getComputedStyle(event.currentTarget as Element).direction === 'rtl');\n const start = props.placement.endsWith('start');\n pointer = {\n id: event.pointerId,\n x: event.clientX,\n y: event.clientY,\n direction: start !== rtl ? -1 : 1,\n started: false,\n };\n}\nfunction pointerMove(event: PointerEvent) {\n if (!pointer || pointer.id !== event.pointerId) return;\n const x = event.clientX - pointer.x;\n const y = event.clientY - pointer.y;\n if (!pointer.started) {\n if (Math.abs(y) > Math.abs(x) && Math.abs(y) > 8) {\n pointer = undefined;\n return;\n }\n if (Math.abs(x) < 8) return;\n if (x * pointer.direction < 0) {\n pointer = undefined;\n return;\n }\n pointer.started = true;\n (event.currentTarget as HTMLElement).setPointerCapture?.(event.pointerId);\n swipe.value = 'start';\n }\n delta.value = Math.max(0, x * pointer.direction) * pointer.direction;\n swipe.value = 'move';\n}\nfunction pointerEnd(event: PointerEvent, cancel = false) {\n if (!pointer || pointer.id !== event.pointerId) return;\n const started = pointer.started;\n pointer = undefined;\n const node = event.currentTarget as HTMLElement;\n if (node.hasPointerCapture?.(event.pointerId)) node.releasePointerCapture(event.pointerId);\n if (!started) return;\n if (!cancel && Math.abs(delta.value) >= props.swipeThreshold) {\n swipe.value = 'end';\n manager.dismiss(props.entry.id, 'swipe');\n } else {\n swipe.value = 'cancel';\n delta.value = 0;\n }\n node.addEventListener(\n 'click',\n (click) => {\n click.preventDefault();\n click.stopPropagation();\n },\n { once: true },\n );\n}\n</script>\n\n<template>\n <!-- asChild lets Kazee closing/inert attributes override the primitive's native open/limited attributes. -->\n <ToastRoot :open=\"!closing\" :force-mount=\"true\" :duration=\"Infinity\" type=\"background\" as-child>\n <li\n class=\"toast\"\n :data-toast-id=\"entry.id\"\n :data-tone=\"entry.tone\"\n :data-has-close=\"showCloseButton || undefined\"\n :data-loading=\"entry.isLoading || undefined\"\n :data-state=\"entry.state\"\n :data-placement=\"placement\"\n :data-paused=\"entry.paused || undefined\"\n :data-swipe=\"swipe\"\n :dir=\"dir\"\n :inert=\"closing || undefined\"\n :aria-hidden=\"closing || undefined\"\n :tabindex=\"closing ? -1 : 0\"\n :style=\"style\"\n @pointerdown=\"pointerDown\"\n @pointermove=\"pointerMove\"\n @pointerup=\"pointerEnd($event)\"\n @pointercancel=\"pointerEnd($event, true)\"\n >\n <span class=\"toast__indicator\" aria-hidden=\"true\">\n <slot name=\"indicator\" :entry=\"entry\">\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.8\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <template v-if=\"entry.isLoading\">\n <circle cx=\"12\" cy=\"12\" r=\"9\" opacity=\".25\" />\n <path d=\"M12 3a9 9 0 0 1 9 9\" />\n </template>\n <template v-else-if=\"entry.tone === 'success'\">\n <circle cx=\"12\" cy=\"12\" r=\"9\" />\n <path d=\"m8 12 3 3 5-6\" />\n </template>\n <template v-else-if=\"entry.tone === 'warning'\">\n <path d=\"m12 3 10 18H2L12 3Z\" />\n <path d=\"M12 9v4m0 4h.01\" />\n </template>\n <template v-else-if=\"entry.tone === 'danger'\">\n <circle cx=\"12\" cy=\"12\" r=\"9\" />\n <path d=\"m9 9 6 6m0-6-6 6\" />\n </template>\n <template v-else>\n <circle cx=\"12\" cy=\"12\" r=\"9\" />\n <path d=\"M12 11v6m0-10h.01\" />\n </template>\n </svg>\n </slot>\n </span>\n <div class=\"toast__body\">\n <slot :entry=\"entry\" :dismiss=\"dismiss\">\n <ToastTitle class=\"toast__title\">{{ entry.title }}</ToastTitle>\n <ToastDescription v-if=\"entry.description\" class=\"toast__description\">{{\n entry.description\n }}</ToastDescription>\n <div v-if=\"entry.action || entry.cancel\" class=\"toast__actions\">\n <RekaToastAction\n v-if=\"entry.action\"\n class=\"toast__action\"\n :alt-text=\"entry.action.altText\"\n :close-on-click=\"false\"\n :disabled=\"closing\"\n @click=\"action(entry.action, 'action', $event)\"\n >{{ entry.action.label }}</RekaToastAction\n >\n <RekaToastAction\n v-if=\"entry.cancel\"\n class=\"toast__action\"\n data-cancel\n :alt-text=\"entry.cancel.altText\"\n :close-on-click=\"false\"\n :disabled=\"closing\"\n @click=\"action(entry.cancel, 'cancel', $event)\"\n >{{ entry.cancel.label }}</RekaToastAction\n >\n </div>\n </slot>\n </div>\n <ToastClose\n v-if=\"showCloseButton\"\n class=\"toast__close\"\n :aria-label=\"closeLabel\"\n :disabled=\"closing\"\n @click=\"dismiss\"\n >\n <svg\n aria-hidden=\"true\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.8\"\n stroke-linecap=\"round\"\n >\n <path d=\"m6 6 12 12M6 18 18 6\" />\n </svg>\n </ToastClose>\n <span\n v-if=\"showProgress && entry.duration > 0 && !entry.isLoading\"\n :key=\"`${entry.generation}-${entry.remaining}-${entry.paused}`\"\n class=\"toast__progress\"\n aria-hidden=\"true\"\n />\n </li>\n </ToastRoot>\n <span\n role=\"status\"\n aria-live=\"polite\"\n aria-atomic=\"true\"\n style=\"\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n \"\n >{{ announcement }}</span\n >\n</template>\n","export type ToastTone = 'neutral' | 'info' | 'success' | 'warning' | 'danger';\nexport type ToastPlacement =\n 'top-start' | 'top-center' | 'top-end' | 'bottom-start' | 'bottom-center' | 'bottom-end';\nexport type ToastCloseReason =\n 'timeout' | 'dismiss' | 'action' | 'cancel' | 'swipe' | 'clear' | 'unmount';\nexport interface ToastAction {\n label: string;\n altText: string;\n onAction: () => void;\n dismiss?: boolean;\n}\nexport interface ToastOptions {\n id?: string;\n title: string;\n description?: string;\n tone?: ToastTone;\n duration?: number;\n isLoading?: boolean;\n action?: ToastAction;\n cancel?: ToastAction;\n onClose?: (reason: ToastCloseReason) => void;\n}\nexport interface ToastEntry extends Readonly<ToastOptions> {\n readonly id: string;\n readonly tone: ToastTone;\n readonly duration: number;\n readonly isLoading: boolean;\n readonly generation: number;\n readonly state: 'open' | 'closing';\n readonly createdAt: number;\n readonly visibleAt: number | null;\n readonly remaining: number;\n readonly paused: boolean;\n}\nexport interface ToastManagerOptions {\n maxVisible?: number;\n maxPending?: number;\n duration?: number;\n exitDuration?: number;\n}\ntype ToastMessage = string | ToastOptions;\nexport interface ToastPromiseMessages<T> {\n loading: ToastMessage;\n success: ToastMessage | ((value: T) => ToastMessage);\n error: ToastMessage | ((error: unknown) => ToastMessage);\n}\nexport interface ToastManager {\n add(options: ToastOptions): string | null;\n update(id: string, options: Partial<ToastOptions>): boolean;\n dismiss(id: string, reason?: ToastCloseReason): void;\n clear(reason?: ToastCloseReason): void;\n pause(reason: string): void;\n resume(reason: string): void;\n attach(): () => void;\n dispose(): void;\n subscribe(listener: () => void): () => void;\n getSnapshot(): readonly ToastEntry[];\n getServerSnapshot(): readonly ToastEntry[];\n promise<T>(\n promise: Promise<T>,\n messages: ToastPromiseMessages<T>,\n options?: Partial<ToastOptions>,\n ): { id: string | null; promise: Promise<T> };\n}\n\ninterface RecordState {\n entry: ToastEntry;\n timer?: ReturnType<typeof setTimeout>;\n startedAt: number | null;\n exitRemaining: number;\n}\nconst EMPTY: readonly ToastEntry[] = Object.freeze([]);\nconst messageOptions = (message: ToastMessage): ToastOptions =>\n typeof message === 'string' ? { title: message } : message;\nconst milliseconds = (value: number, fallback: number) =>\n Number.isFinite(value) && value >= 0 ? value : fallback;\n\n/** Complete required notifications/cleanup before reporting user callback failures. */\nconst complete = (operations: readonly (() => void)[]) => {\n const errors: unknown[] = [];\n for (const operation of operations) {\n try {\n operation();\n } catch (error) {\n errors.push(error);\n }\n }\n if (errors.length === 1) throw errors[0];\n if (errors.length > 1) throw new AggregateError(errors, 'Toast lifecycle callbacks failed.');\n};\n\n/** Create per application/provider; no browser globals or timers are used until attached. */\nexport function createToastManager(options: ToastManagerOptions = {}): ToastManager {\n const maxVisible = Math.max(1, Math.floor(options.maxVisible ?? 3));\n const maxPending = Math.max(0, Math.floor(options.maxPending ?? 50));\n const duration = milliseconds(options.duration ?? 5000, 5000);\n const exitDuration = milliseconds(options.exitDuration ?? 200, 200);\n const records = new Map<string, RecordState>();\n const visible: string[] = [];\n const pending: string[] = [];\n const listeners = new Set<() => void>();\n const pauses = new Map<string, number>();\n let snapshot = EMPTY;\n let attached = false;\n let disposed = false;\n let sequence = 0;\n let generation = 0;\n const paused = () => !attached || pauses.size > 0;\n const freeze = (entry: ToastEntry): ToastEntry =>\n Object.freeze({\n ...entry,\n action: entry.action ? Object.freeze({ ...entry.action }) : undefined,\n cancel: entry.cancel ? Object.freeze({ ...entry.cancel }) : undefined,\n });\n const publish = () => {\n const next = visible.map((id) => records.get(id)!.entry);\n if (next.length === snapshot.length && next.every((entry, index) => entry === snapshot[index]))\n return;\n snapshot = Object.freeze(next);\n complete([...listeners]);\n };\n const stop = (record: RecordState) => {\n if (record.timer !== undefined) clearTimeout(record.timer);\n record.timer = undefined;\n if (record.startedAt !== null) {\n const elapsed = Math.max(0, Date.now() - record.startedAt);\n if (record.entry.state === 'closing')\n record.exitRemaining = Math.max(0, record.exitRemaining - elapsed);\n else\n record.entry = freeze({\n ...record.entry,\n remaining: Math.max(0, record.entry.remaining - elapsed),\n });\n }\n record.startedAt = null;\n };\n const promote = () => {\n while (visible.length < maxVisible && pending.length) {\n const id = pending.shift()!;\n const record = records.get(id)!;\n visible.push(id);\n record.entry = freeze({ ...record.entry, visibleAt: Date.now(), paused: paused() });\n start(record);\n }\n };\n const remove = (id: string) => {\n const record = records.get(id);\n if (!record) return;\n stop(record);\n records.delete(id);\n const index = visible.indexOf(id);\n if (index >= 0) visible.splice(index, 1);\n const waiting = pending.indexOf(id);\n if (waiting >= 0) pending.splice(waiting, 1);\n promote();\n publish();\n };\n const start = (record: RecordState) => {\n if (!attached || record.entry.visibleAt === null || record.timer !== undefined) return;\n const closing = record.entry.state === 'closing';\n if (!closing && (paused() || record.entry.isLoading || record.entry.duration === 0)) return;\n record.startedAt = Date.now();\n record.timer = setTimeout(\n () => {\n record.timer = undefined;\n record.startedAt = null;\n if (closing) remove(record.entry.id);\n else manager.dismiss(record.entry.id, 'timeout');\n },\n closing ? record.exitRemaining : record.entry.remaining,\n );\n };\n const refreshPause = () => {\n for (const id of visible) {\n const record = records.get(id)!;\n stop(record);\n record.entry = freeze({\n ...record.entry,\n paused: paused() || record.entry.state === 'closing',\n });\n start(record);\n }\n publish();\n };\n const update = (\n id: string,\n changes: Partial<ToastOptions>,\n invalidate: boolean,\n onGeneration?: (value: number) => void,\n ) => {\n const record = records.get(id);\n if (!record || record.entry.state === 'closing' || disposed) return false;\n stop(record);\n const before = record.entry;\n const settled = before.isLoading && changes.isLoading === false;\n const nextDuration =\n changes.duration !== undefined\n ? milliseconds(changes.duration, duration)\n : settled\n ? duration\n : before.duration;\n record.entry = freeze({\n ...before,\n ...changes,\n id,\n tone: changes.tone ?? before.tone,\n duration: nextDuration,\n isLoading: changes.isLoading ?? before.isLoading,\n remaining: changes.duration !== undefined || settled ? nextDuration : before.remaining,\n generation: invalidate ? ++generation : before.generation,\n });\n onGeneration?.(record.entry.generation);\n start(record);\n publish();\n return true;\n };\n const add = (value: ToastOptions, onGeneration?: (value: number) => void): string | null => {\n if (disposed) return null;\n if (value.id !== undefined && records.has(value.id))\n return update(value.id, value, true, onGeneration) ? value.id : null;\n if (visible.length >= maxVisible && pending.length >= maxPending) return null;\n let id = value.id;\n if (id === undefined) {\n do {\n id = `toast-${++sequence}`;\n } while (records.has(id));\n }\n const entry = freeze({\n ...value,\n id,\n tone: value.tone ?? 'neutral',\n duration: milliseconds(value.duration ?? duration, duration),\n isLoading: value.isLoading ?? false,\n generation: ++generation,\n state: 'open',\n createdAt: Date.now(),\n visibleAt: visible.length < maxVisible ? Date.now() : null,\n remaining: milliseconds(value.duration ?? duration, duration),\n paused: paused(),\n });\n const record: RecordState = { entry, startedAt: null, exitRemaining: exitDuration };\n records.set(id, record);\n if (visible.length < maxVisible) {\n visible.push(id);\n start(record);\n } else pending.push(id);\n onGeneration?.(entry.generation);\n publish();\n return id;\n };\n const manager: ToastManager = {\n add,\n update: (id, changes) => update(id, changes, true),\n dismiss(id, reason = 'dismiss') {\n const record = records.get(id);\n if (!record || record.entry.state === 'closing') return;\n stop(record);\n record.entry = freeze({\n ...record.entry,\n state: 'closing',\n paused: true,\n remaining: reason === 'timeout' ? 0 : record.entry.remaining,\n });\n complete([\n () => {\n if (record.entry.visibleAt === null) remove(id);\n else {\n start(record);\n publish();\n }\n },\n () => record.entry.onClose?.(reason),\n ]);\n },\n clear(reason = 'clear') {\n // Remove waiting entries first so visible exits cannot promote cleared work.\n complete([...pending, ...visible].map((id) => () => manager.dismiss(id, reason)));\n },\n pause(reason) {\n if (disposed) return;\n pauses.set(reason, (pauses.get(reason) ?? 0) + 1);\n if (pauses.size === 1 && pauses.get(reason) === 1) refreshPause();\n },\n resume(reason) {\n const count = pauses.get(reason);\n if (!count || disposed) return;\n if (count === 1) pauses.delete(reason);\n else pauses.set(reason, count - 1);\n if (!pauses.size) refreshPause();\n },\n attach() {\n if (disposed) throw new Error('Cannot attach a disposed ToastManager.');\n if (attached) throw new Error('A ToastManager may attach to only one provider.');\n attached = true;\n try {\n refreshPause();\n } catch (error) {\n attached = false;\n // Rollback also publishes the detached snapshot; report all subscriber failures.\n complete([\n () => {\n throw error;\n },\n refreshPause,\n ]);\n }\n let detached = false;\n return () => {\n if (detached || disposed) return;\n detached = true;\n attached = false;\n refreshPause();\n };\n },\n dispose() {\n if (disposed) return;\n disposed = true;\n attached = false;\n const closing = [...records.values()].filter((record) => record.entry.state === 'open');\n for (const record of records.values()) stop(record);\n records.clear();\n visible.length = 0;\n pending.length = 0;\n pauses.clear();\n complete([\n publish,\n () => listeners.clear(),\n ...closing.map((record) => () => record.entry.onClose?.('unmount')),\n ]);\n },\n subscribe(listener) {\n if (!disposed) listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n getSnapshot: () => snapshot,\n getServerSnapshot: () => EMPTY,\n promise(task, messages, promiseOptions = {}) {\n let expected: number | undefined;\n const id = add(\n {\n ...promiseOptions,\n ...messageOptions(messages.loading),\n isLoading: true,\n },\n (value) => {\n expected = value;\n },\n );\n const settle = (message: ToastMessage | (() => ToastMessage), tone: ToastTone) => {\n if (\n id === null ||\n records.get(id)?.entry.generation !== expected ||\n records.get(id)?.entry.state !== 'open'\n )\n return;\n const content = typeof message === 'function' ? message() : message;\n // Result factories may reentrantly update, dismiss, dispose, or reuse this ID.\n if (\n records.get(id)?.entry.generation !== expected ||\n records.get(id)?.entry.state !== 'open'\n )\n return;\n update(\n id,\n {\n tone,\n duration: promiseOptions.duration ?? duration,\n ...messageOptions(content),\n isLoading: false,\n },\n false,\n );\n };\n return {\n id,\n promise: task.then(\n (value) => {\n const message = messages.success;\n settle(typeof message === 'function' ? () => message(value) : message, 'success');\n return value;\n },\n (error: unknown) => {\n const message = messages.error;\n settle(typeof message === 'function' ? () => message(error) : message, 'danger');\n throw error;\n },\n ),\n };\n },\n };\n return manager;\n}\n","<script setup lang=\"ts\">\nimport { computed, nextTick, onBeforeUnmount, onMounted, provide, ref, shallowRef } from 'vue';\nimport { ToastProvider as RekaToastProvider, ToastViewport } from 'reka-ui';\nimport Toast from './Toast.vue';\nimport {\n createToastManager,\n type ToastEntry,\n type ToastManager,\n type ToastPlacement,\n} from './toast-model.js';\nimport { toastManagerKey } from './useToast.js';\n\ndefineOptions({ inheritAttrs: false });\nconst props = withDefaults(\n defineProps<{\n manager?: ToastManager;\n placement?: ToastPlacement;\n label?: string;\n closeLabel?: string;\n hotkey?: string[];\n dir?: 'ltr' | 'rtl';\n showProgress?: boolean;\n showCloseButton?: boolean;\n swipeThreshold?: number;\n }>(),\n {\n manager: undefined,\n placement: 'bottom-end',\n label: 'Notifikasi',\n closeLabel: 'Tutup',\n hotkey: () => ['altKey', 'KeyT'],\n dir: undefined,\n showProgress: false,\n showCloseButton: false,\n swipeThreshold: 50,\n },\n);\ndefineSlots<{\n default?: (props: { toast: ToastManager }) => unknown;\n toast?: (props: { entry: ToastEntry; dismiss: () => void }) => unknown;\n indicator?: (props: { entry: ToastEntry }) => unknown;\n}>();\n// Capture ownership at setup; replacing a mounted provider's manager is unsupported.\nconst manager = props.manager ?? createToastManager();\nconst owned = !props.manager;\nprovide(toastManagerKey, manager);\nconst entries = shallowRef<readonly ToastEntry[]>(manager.getServerSnapshot());\nconst region = ref<HTMLElement>();\nconst active = ref(false);\nconst causes = new Set<string>();\nlet unsubscribe: (() => void) | undefined;\nlet detach: (() => void) | undefined;\nlet previousFocus: HTMLElement | undefined;\nconst positions = new Map<string, { x: number; y: number }>();\nconst movements = new Map<HTMLElement, Animation>();\nlet reflowQueued = false;\nconst hotkeyText = computed(() =>\n props.hotkey\n .map(\n (key) =>\n ({ altKey: 'Alt', ctrlKey: 'Ctrl', metaKey: 'Meta', shiftKey: 'Shift' })[key] ??\n key.replace(/^Key|^Digit/, ''),\n )\n .join('+'),\n);\nconst viewportLabel = computed(() =>\n hotkeyText.value ? `${props.label} (${hotkeyText.value})` : props.label,\n);\nfunction pause(cause: string) {\n if (!causes.has(cause)) {\n causes.add(cause);\n manager.pause(`vue:${cause}`);\n }\n}\nfunction resume(cause: string) {\n if (causes.delete(cause)) manager.resume(`vue:${cause}`);\n}\nfunction focusOut(event: FocusEvent) {\n if (!region.value?.contains(event.relatedTarget as Node | null)) resume('focus');\n}\nfunction focusIn(event: FocusEvent) {\n if (event.relatedTarget instanceof HTMLElement && !region.value?.contains(event.relatedTarget)) {\n previousFocus = event.relatedTarget;\n }\n pause('focus');\n}\nfunction windowBlur() {\n pause('window');\n}\nfunction windowFocus() {\n resume('window');\n}\nfunction visibility() {\n if (document.hidden) pause('document');\n else resume('document');\n}\nfunction list() {\n return region.value?.querySelector<HTMLElement>('.toast-list');\n}\nfunction restoreIfEmpty() {\n const focused = document.activeElement;\n if (!region.value?.contains(focused)) return;\n if (!entries.value.some((entry) => entry.state === 'open')) {\n if (previousFocus?.isConnected) previousFocus.focus({ preventScroll: true });\n else if (focused instanceof HTMLElement) focused.blur();\n return;\n }\n const id =\n focused instanceof Element\n ? focused.closest<HTMLElement>('[data-toast-id]')?.dataset.toastId\n : undefined;\n if (id && !entries.value.some((entry) => entry.id === id && entry.state === 'open')) {\n list()?.focus({ preventScroll: true });\n }\n}\nfunction keyboard(event: KeyboardEvent) {\n if (\n !props.hotkey.length ||\n event.defaultPrevented ||\n !entries.value.some((entry) => entry.state === 'open')\n )\n return;\n const modifiers = ['altKey', 'ctrlKey', 'metaKey', 'shiftKey'] as const;\n const matches = props.hotkey.every((key) =>\n modifiers.includes(key as (typeof modifiers)[number])\n ? event[key as (typeof modifiers)[number]]\n : event.code === key || event.key.toLowerCase() === key.toLowerCase(),\n );\n if (!matches || modifiers.some((key) => event[key] !== props.hotkey.includes(key))) return;\n previousFocus =\n document.activeElement instanceof HTMLElement ? document.activeElement : undefined;\n list()?.focus({ preventScroll: true });\n event.preventDefault();\n}\nfunction escape(event: KeyboardEvent) {\n if (event.key !== 'Escape' || event.defaultPrevented) return;\n const target =\n event.target instanceof Element ? event.target.closest<HTMLElement>('[data-toast-id]') : null;\n const entry = target\n ? entries.value.find((item) => item.id === target.dataset.toastId && item.state === 'open')\n : [...entries.value].reverse().find((item) => item.state === 'open');\n if (!entry) return;\n event.preventDefault();\n event.stopPropagation();\n list()?.focus({ preventScroll: true });\n manager.dismiss(entry.id);\n restoreIfEmpty();\n}\nfunction capturePositions() {\n positions.clear();\n if (!active.value || window.matchMedia('(prefers-reduced-motion: reduce)').matches) return;\n const origin = region.value?.getBoundingClientRect();\n region.value?.querySelectorAll<HTMLElement>('.toast').forEach((element) => {\n // Layout offsets exclude the CSS entry/swipe transform and any current FLIP translation.\n if (element.dataset.toastId)\n positions.set(element.dataset.toastId, {\n x: element.offsetLeft + (origin?.left ?? 0),\n y: element.offsetTop + (origin?.top ?? 0),\n });\n });\n}\nfunction animateMovement(previous: Map<string, { x: number; y: number }>) {\n if (!active.value) return;\n const reduced = window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n if (reduced) {\n for (const animation of movements.values()) animation.cancel();\n movements.clear();\n return;\n }\n const origin = region.value?.getBoundingClientRect();\n region.value?.querySelectorAll<HTMLElement>('.toast').forEach((element) => {\n const before = previous.get(element.dataset.toastId ?? '');\n if (!before || element.dataset.state !== 'open' || !element.animate) return;\n const x = before.x - element.offsetLeft - (origin?.left ?? 0);\n const y = before.y - element.offsetTop - (origin?.top ?? 0);\n if (!x && !y) return;\n movements.get(element)?.cancel();\n const css = getComputedStyle(element);\n const token = css.getPropertyValue('--ds-motion-duration-normal').trim();\n const parsed = Number.parseFloat(token);\n const duration = Number.isFinite(parsed) ? parsed * (token.endsWith('ms') ? 1 : 1000) : 200;\n const animation = element.animate([{ translate: `${x}px ${y}px` }, { translate: '0px 0px' }], {\n duration,\n easing: css.getPropertyValue('--ds-motion-ease-standard').trim() || 'ease',\n });\n movements.set(element, animation);\n const remove = () => {\n if (movements.get(element) === animation) movements.delete(element);\n };\n void animation.finished.then(remove, remove);\n });\n for (const [element, animation] of movements) {\n if (!element.isConnected) {\n animation.cancel();\n movements.delete(element);\n }\n }\n}\nonMounted(() => {\n // attach throws before any subscriptions/listeners on duplicate ownership.\n detach = manager.attach();\n active.value = true;\n entries.value = manager.getSnapshot();\n unsubscribe = manager.subscribe(() => {\n if (!reflowQueued) {\n capturePositions();\n const previous = new Map(positions);\n reflowQueued = true;\n entries.value = manager.getSnapshot();\n void nextTick(() => {\n reflowQueued = false;\n animateMovement(previous);\n });\n }\n entries.value = manager.getSnapshot();\n restoreIfEmpty();\n });\n window.addEventListener('blur', windowBlur);\n window.addEventListener('focus', windowFocus);\n document.addEventListener('visibilitychange', visibility);\n document.addEventListener('keydown', keyboard);\n visibility();\n if (!document.hasFocus()) pause('window');\n});\nonBeforeUnmount(() => {\n for (const animation of movements.values()) animation.cancel();\n movements.clear();\n if (!active.value) return;\n active.value = false;\n const errors: unknown[] = [];\n const cleanup = (operation: (() => void) | undefined) => {\n try {\n operation?.();\n } catch (error) {\n errors.push(error);\n }\n };\n cleanup(unsubscribe);\n cleanup(detach);\n // Detach first to prevent a briefly resumed external timer while clearing our pause causes.\n [...causes].forEach((cause) => cleanup(() => resume(cause)));\n if (owned) cleanup(() => manager.dispose());\n window.removeEventListener('blur', windowBlur);\n window.removeEventListener('focus', windowFocus);\n document.removeEventListener('visibilitychange', visibility);\n document.removeEventListener('keydown', keyboard);\n if (errors.length === 1) throw errors[0];\n if (errors.length > 1) throw new AggregateError(errors, 'Toast provider cleanup failed.');\n});\n</script>\n\n<template>\n <RekaToastProvider :duration=\"Infinity\" :disable-swipe=\"true\" :label=\"label\">\n <slot :toast=\"manager\" />\n <div\n ref=\"region\"\n class=\"toast-region\"\n :data-placement=\"placement\"\n :dir=\"dir\"\n @pointerenter=\"pause('hover')\"\n @pointerleave=\"resume('hover')\"\n @focusin=\"focusIn\"\n @focusout=\"focusOut\"\n @keydown.capture=\"escape\"\n >\n <!-- Reka's native array matches keys individually; Kazee handles the complete chord. -->\n <ToastViewport\n class=\"toast-list\"\n :hotkey=\"[]\"\n :label=\"viewportLabel\"\n :data-placement=\"placement\"\n :dir=\"dir\"\n />\n </div>\n <Toast\n v-for=\"entry in entries\"\n :key=\"entry.generation\"\n :entry=\"entry\"\n :manager=\"manager\"\n :placement=\"placement\"\n :dir=\"dir\"\n :close-label=\"closeLabel\"\n :show-progress=\"showProgress\"\n :show-close-button=\"showCloseButton\"\n :swipe-threshold=\"swipeThreshold\"\n >\n <template v-if=\"$slots.toast\" #default=\"slotProps\"\n ><slot name=\"toast\" v-bind=\"slotProps\"\n /></template>\n <template v-if=\"$slots.indicator\" #indicator=\"slotProps\"\n ><slot name=\"indicator\" v-bind=\"slotProps\"\n /></template>\n </Toast>\n </RekaToastProvider>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, nextTick, onBeforeUnmount, onMounted, provide, ref, shallowRef } from 'vue';\nimport { ToastProvider as RekaToastProvider, ToastViewport } from 'reka-ui';\nimport Toast from './Toast.vue';\nimport {\n createToastManager,\n type ToastEntry,\n type ToastManager,\n type ToastPlacement,\n} from './toast-model.js';\nimport { toastManagerKey } from './useToast.js';\n\ndefineOptions({ inheritAttrs: false });\nconst props = withDefaults(\n defineProps<{\n manager?: ToastManager;\n placement?: ToastPlacement;\n label?: string;\n closeLabel?: string;\n hotkey?: string[];\n dir?: 'ltr' | 'rtl';\n showProgress?: boolean;\n showCloseButton?: boolean;\n swipeThreshold?: number;\n }>(),\n {\n manager: undefined,\n placement: 'bottom-end',\n label: 'Notifikasi',\n closeLabel: 'Tutup',\n hotkey: () => ['altKey', 'KeyT'],\n dir: undefined,\n showProgress: false,\n showCloseButton: false,\n swipeThreshold: 50,\n },\n);\ndefineSlots<{\n default?: (props: { toast: ToastManager }) => unknown;\n toast?: (props: { entry: ToastEntry; dismiss: () => void }) => unknown;\n indicator?: (props: { entry: ToastEntry }) => unknown;\n}>();\n// Capture ownership at setup; replacing a mounted provider's manager is unsupported.\nconst manager = props.manager ?? createToastManager();\nconst owned = !props.manager;\nprovide(toastManagerKey, manager);\nconst entries = shallowRef<readonly ToastEntry[]>(manager.getServerSnapshot());\nconst region = ref<HTMLElement>();\nconst active = ref(false);\nconst causes = new Set<string>();\nlet unsubscribe: (() => void) | undefined;\nlet detach: (() => void) | undefined;\nlet previousFocus: HTMLElement | undefined;\nconst positions = new Map<string, { x: number; y: number }>();\nconst movements = new Map<HTMLElement, Animation>();\nlet reflowQueued = false;\nconst hotkeyText = computed(() =>\n props.hotkey\n .map(\n (key) =>\n ({ altKey: 'Alt', ctrlKey: 'Ctrl', metaKey: 'Meta', shiftKey: 'Shift' })[key] ??\n key.replace(/^Key|^Digit/, ''),\n )\n .join('+'),\n);\nconst viewportLabel = computed(() =>\n hotkeyText.value ? `${props.label} (${hotkeyText.value})` : props.label,\n);\nfunction pause(cause: string) {\n if (!causes.has(cause)) {\n causes.add(cause);\n manager.pause(`vue:${cause}`);\n }\n}\nfunction resume(cause: string) {\n if (causes.delete(cause)) manager.resume(`vue:${cause}`);\n}\nfunction focusOut(event: FocusEvent) {\n if (!region.value?.contains(event.relatedTarget as Node | null)) resume('focus');\n}\nfunction focusIn(event: FocusEvent) {\n if (event.relatedTarget instanceof HTMLElement && !region.value?.contains(event.relatedTarget)) {\n previousFocus = event.relatedTarget;\n }\n pause('focus');\n}\nfunction windowBlur() {\n pause('window');\n}\nfunction windowFocus() {\n resume('window');\n}\nfunction visibility() {\n if (document.hidden) pause('document');\n else resume('document');\n}\nfunction list() {\n return region.value?.querySelector<HTMLElement>('.toast-list');\n}\nfunction restoreIfEmpty() {\n const focused = document.activeElement;\n if (!region.value?.contains(focused)) return;\n if (!entries.value.some((entry) => entry.state === 'open')) {\n if (previousFocus?.isConnected) previousFocus.focus({ preventScroll: true });\n else if (focused instanceof HTMLElement) focused.blur();\n return;\n }\n const id =\n focused instanceof Element\n ? focused.closest<HTMLElement>('[data-toast-id]')?.dataset.toastId\n : undefined;\n if (id && !entries.value.some((entry) => entry.id === id && entry.state === 'open')) {\n list()?.focus({ preventScroll: true });\n }\n}\nfunction keyboard(event: KeyboardEvent) {\n if (\n !props.hotkey.length ||\n event.defaultPrevented ||\n !entries.value.some((entry) => entry.state === 'open')\n )\n return;\n const modifiers = ['altKey', 'ctrlKey', 'metaKey', 'shiftKey'] as const;\n const matches = props.hotkey.every((key) =>\n modifiers.includes(key as (typeof modifiers)[number])\n ? event[key as (typeof modifiers)[number]]\n : event.code === key || event.key.toLowerCase() === key.toLowerCase(),\n );\n if (!matches || modifiers.some((key) => event[key] !== props.hotkey.includes(key))) return;\n previousFocus =\n document.activeElement instanceof HTMLElement ? document.activeElement : undefined;\n list()?.focus({ preventScroll: true });\n event.preventDefault();\n}\nfunction escape(event: KeyboardEvent) {\n if (event.key !== 'Escape' || event.defaultPrevented) return;\n const target =\n event.target instanceof Element ? event.target.closest<HTMLElement>('[data-toast-id]') : null;\n const entry = target\n ? entries.value.find((item) => item.id === target.dataset.toastId && item.state === 'open')\n : [...entries.value].reverse().find((item) => item.state === 'open');\n if (!entry) return;\n event.preventDefault();\n event.stopPropagation();\n list()?.focus({ preventScroll: true });\n manager.dismiss(entry.id);\n restoreIfEmpty();\n}\nfunction capturePositions() {\n positions.clear();\n if (!active.value || window.matchMedia('(prefers-reduced-motion: reduce)').matches) return;\n const origin = region.value?.getBoundingClientRect();\n region.value?.querySelectorAll<HTMLElement>('.toast').forEach((element) => {\n // Layout offsets exclude the CSS entry/swipe transform and any current FLIP translation.\n if (element.dataset.toastId)\n positions.set(element.dataset.toastId, {\n x: element.offsetLeft + (origin?.left ?? 0),\n y: element.offsetTop + (origin?.top ?? 0),\n });\n });\n}\nfunction animateMovement(previous: Map<string, { x: number; y: number }>) {\n if (!active.value) return;\n const reduced = window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n if (reduced) {\n for (const animation of movements.values()) animation.cancel();\n movements.clear();\n return;\n }\n const origin = region.value?.getBoundingClientRect();\n region.value?.querySelectorAll<HTMLElement>('.toast').forEach((element) => {\n const before = previous.get(element.dataset.toastId ?? '');\n if (!before || element.dataset.state !== 'open' || !element.animate) return;\n const x = before.x - element.offsetLeft - (origin?.left ?? 0);\n const y = before.y - element.offsetTop - (origin?.top ?? 0);\n if (!x && !y) return;\n movements.get(element)?.cancel();\n const css = getComputedStyle(element);\n const token = css.getPropertyValue('--ds-motion-duration-normal').trim();\n const parsed = Number.parseFloat(token);\n const duration = Number.isFinite(parsed) ? parsed * (token.endsWith('ms') ? 1 : 1000) : 200;\n const animation = element.animate([{ translate: `${x}px ${y}px` }, { translate: '0px 0px' }], {\n duration,\n easing: css.getPropertyValue('--ds-motion-ease-standard').trim() || 'ease',\n });\n movements.set(element, animation);\n const remove = () => {\n if (movements.get(element) === animation) movements.delete(element);\n };\n void animation.finished.then(remove, remove);\n });\n for (const [element, animation] of movements) {\n if (!element.isConnected) {\n animation.cancel();\n movements.delete(element);\n }\n }\n}\nonMounted(() => {\n // attach throws before any subscriptions/listeners on duplicate ownership.\n detach = manager.attach();\n active.value = true;\n entries.value = manager.getSnapshot();\n unsubscribe = manager.subscribe(() => {\n if (!reflowQueued) {\n capturePositions();\n const previous = new Map(positions);\n reflowQueued = true;\n entries.value = manager.getSnapshot();\n void nextTick(() => {\n reflowQueued = false;\n animateMovement(previous);\n });\n }\n entries.value = manager.getSnapshot();\n restoreIfEmpty();\n });\n window.addEventListener('blur', windowBlur);\n window.addEventListener('focus', windowFocus);\n document.addEventListener('visibilitychange', visibility);\n document.addEventListener('keydown', keyboard);\n visibility();\n if (!document.hasFocus()) pause('window');\n});\nonBeforeUnmount(() => {\n for (const animation of movements.values()) animation.cancel();\n movements.clear();\n if (!active.value) return;\n active.value = false;\n const errors: unknown[] = [];\n const cleanup = (operation: (() => void) | undefined) => {\n try {\n operation?.();\n } catch (error) {\n errors.push(error);\n }\n };\n cleanup(unsubscribe);\n cleanup(detach);\n // Detach first to prevent a briefly resumed external timer while clearing our pause causes.\n [...causes].forEach((cause) => cleanup(() => resume(cause)));\n if (owned) cleanup(() => manager.dispose());\n window.removeEventListener('blur', windowBlur);\n window.removeEventListener('focus', windowFocus);\n document.removeEventListener('visibilitychange', visibility);\n document.removeEventListener('keydown', keyboard);\n if (errors.length === 1) throw errors[0];\n if (errors.length > 1) throw new AggregateError(errors, 'Toast provider cleanup failed.');\n});\n</script>\n\n<template>\n <RekaToastProvider :duration=\"Infinity\" :disable-swipe=\"true\" :label=\"label\">\n <slot :toast=\"manager\" />\n <div\n ref=\"region\"\n class=\"toast-region\"\n :data-placement=\"placement\"\n :dir=\"dir\"\n @pointerenter=\"pause('hover')\"\n @pointerleave=\"resume('hover')\"\n @focusin=\"focusIn\"\n @focusout=\"focusOut\"\n @keydown.capture=\"escape\"\n >\n <!-- Reka's native array matches keys individually; Kazee handles the complete chord. -->\n <ToastViewport\n class=\"toast-list\"\n :hotkey=\"[]\"\n :label=\"viewportLabel\"\n :data-placement=\"placement\"\n :dir=\"dir\"\n />\n </div>\n <Toast\n v-for=\"entry in entries\"\n :key=\"entry.generation\"\n :entry=\"entry\"\n :manager=\"manager\"\n :placement=\"placement\"\n :dir=\"dir\"\n :close-label=\"closeLabel\"\n :show-progress=\"showProgress\"\n :show-close-button=\"showCloseButton\"\n :swipe-threshold=\"swipeThreshold\"\n >\n <template v-if=\"$slots.toast\" #default=\"slotProps\"\n ><slot name=\"toast\" v-bind=\"slotProps\"\n /></template>\n <template v-if=\"$slots.indicator\" #indicator=\"slotProps\"\n ><slot name=\"indicator\" v-bind=\"slotProps\"\n /></template>\n </Toast>\n </RekaToastProvider>\n</template>\n","<script setup lang=\"ts\">\ndefineOptions({ inheritAttrs: false });\nwithDefaults(\n defineProps<{\n title: string;\n description?: string;\n headingLevel?: 2 | 3 | 4 | 5 | 6;\n id?: string;\n }>(),\n { description: undefined, headingLevel: 3, id: undefined },\n);\n</script>\n<template>\n <div :id=\"id\" class=\"empty\">\n <component :is=\"`h${headingLevel}`\" class=\"empty__title\">{{ title }}</component>\n <p v-if=\"description\" class=\"empty__description\">{{ description }}</p>\n <slot />\n <div v-if=\"$slots.actions\" class=\"empty__actions\"><slot name=\"actions\" /></div>\n </div>\n</template>\n","<script setup lang=\"ts\">\ndefineOptions({ inheritAttrs: false });\nwithDefaults(\n defineProps<{\n title: string;\n description?: string;\n headingLevel?: 2 | 3 | 4 | 5 | 6;\n id?: string;\n }>(),\n { description: undefined, headingLevel: 3, id: undefined },\n);\n</script>\n<template>\n <div :id=\"id\" class=\"empty\">\n <component :is=\"`h${headingLevel}`\" class=\"empty__title\">{{ title }}</component>\n <p v-if=\"description\" class=\"empty__description\">{{ description }}</p>\n <slot />\n <div v-if=\"$slots.actions\" class=\"empty__actions\"><slot name=\"actions\" /></div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type { BreadcrumbItem } from './dashboard-types.js';\ndefineOptions({ inheritAttrs: false });\nwithDefaults(\n defineProps<{ items: BreadcrumbItem[]; label?: string; dir?: 'ltr' | 'rtl'; id?: string }>(),\n { label: 'Jejak halaman', dir: undefined, id: undefined },\n);\n</script>\n<template>\n <nav :id=\"id\" class=\"breadcrumb\" :aria-label=\"label\" :dir=\"dir\">\n <ol>\n <li v-for=\"(item, index) in items\" :key=\"index\">\n <span v-if=\"index > 0\" class=\"breadcrumb__separator\" aria-hidden=\"true\">/</span\n ><span v-if=\"index === items.length - 1\" aria-current=\"page\">{{ item.label }}</span\n ><a v-else-if=\"item.href\" :href=\"item.href\">{{ item.label }}</a\n ><span v-else>{{ item.label }}</span>\n </li>\n </ol>\n </nav>\n</template>\n","<script setup lang=\"ts\">\nimport type { BreadcrumbItem } from './dashboard-types.js';\ndefineOptions({ inheritAttrs: false });\nwithDefaults(\n defineProps<{ items: BreadcrumbItem[]; label?: string; dir?: 'ltr' | 'rtl'; id?: string }>(),\n { label: 'Jejak halaman', dir: undefined, id: undefined },\n);\n</script>\n<template>\n <nav :id=\"id\" class=\"breadcrumb\" :aria-label=\"label\" :dir=\"dir\">\n <ol>\n <li v-for=\"(item, index) in items\" :key=\"index\">\n <span v-if=\"index > 0\" class=\"breadcrumb__separator\" aria-hidden=\"true\">/</span\n ><span v-if=\"index === items.length - 1\" aria-current=\"page\">{{ item.label }}</span\n ><a v-else-if=\"item.href\" :href=\"item.href\">{{ item.label }}</a\n ><span v-else>{{ item.label }}</span>\n </li>\n </ol>\n </nav>\n</template>\n","import { computed, ref } from 'vue';\nexport function useDisclosure(\n props: { open?: boolean; defaultOpen?: boolean },\n emit: (open: boolean) => void,\n) {\n const local = ref(props.defaultOpen ?? false);\n const visible = computed(() => props.open ?? local.value);\n function change(next: boolean) {\n if (next === visible.value) return;\n local.value = next;\n emit(next);\n }\n return { visible, change };\n}\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport { useId } from 'reka-ui';\nimport { useDisclosure } from './useDisclosure.js';\nimport type { NavigationItem } from './dashboard-types.js';\ndefineOptions({ inheritAttrs: false });\nconst props = withDefaults(\n defineProps<{\n label: string;\n items: NavigationItem[];\n currentId?: string;\n open?: boolean;\n defaultOpen?: boolean;\n toggleLabel?: string;\n dir?: 'ltr' | 'rtl';\n id?: string;\n }>(),\n {\n currentId: undefined,\n open: undefined,\n defaultOpen: true,\n toggleLabel: 'Menu navigasi',\n dir: undefined,\n id: undefined,\n },\n);\nconst emit = defineEmits<{ 'update:open': [open: boolean] }>();\nconst { visible, change } = useDisclosure(props, (next) => emit('update:open', next));\nconst generated = useId(),\n navId = computed(() => `${props.id ?? generated}-nav`);\n</script>\n<template>\n <aside :id=\"id\" class=\"sidebar\" :dir=\"dir\">\n <div class=\"sidebar__header\">\n <span class=\"sidebar__title\">{{ label }}</span\n ><button\n type=\"button\"\n class=\"sidebar__toggle\"\n :aria-label=\"toggleLabel\"\n :aria-expanded=\"visible\"\n :aria-controls=\"navId\"\n @click=\"change(!visible)\"\n >\n <span aria-hidden=\"true\">{{ visible ? '\\u2212' : '+' }}</span>\n </button>\n </div>\n <nav :id=\"navId\" :aria-label=\"label\" :hidden=\"!visible\">\n <ul>\n <li v-for=\"item in items\" :key=\"item.id\">\n <span v-if=\"item.isDisabled\" class=\"sidebar__link\" aria-disabled=\"true\">{{\n item.label\n }}</span\n ><a\n v-else\n class=\"sidebar__link\"\n :href=\"item.href\"\n :aria-current=\"item.id === currentId ? 'page' : undefined\"\n >{{ item.label }}</a\n >\n </li>\n </ul>\n </nav>\n </aside>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport { useId } from 'reka-ui';\nimport { useDisclosure } from './useDisclosure.js';\nimport type { NavigationItem } from './dashboard-types.js';\ndefineOptions({ inheritAttrs: false });\nconst props = withDefaults(\n defineProps<{\n label: string;\n items: NavigationItem[];\n currentId?: string;\n open?: boolean;\n defaultOpen?: boolean;\n toggleLabel?: string;\n dir?: 'ltr' | 'rtl';\n id?: string;\n }>(),\n {\n currentId: undefined,\n open: undefined,\n defaultOpen: true,\n toggleLabel: 'Menu navigasi',\n dir: undefined,\n id: undefined,\n },\n);\nconst emit = defineEmits<{ 'update:open': [open: boolean] }>();\nconst { visible, change } = useDisclosure(props, (next) => emit('update:open', next));\nconst generated = useId(),\n navId = computed(() => `${props.id ?? generated}-nav`);\n</script>\n<template>\n <aside :id=\"id\" class=\"sidebar\" :dir=\"dir\">\n <div class=\"sidebar__header\">\n <span class=\"sidebar__title\">{{ label }}</span\n ><button\n type=\"button\"\n class=\"sidebar__toggle\"\n :aria-label=\"toggleLabel\"\n :aria-expanded=\"visible\"\n :aria-controls=\"navId\"\n @click=\"change(!visible)\"\n >\n <span aria-hidden=\"true\">{{ visible ? '\\u2212' : '+' }}</span>\n </button>\n </div>\n <nav :id=\"navId\" :aria-label=\"label\" :hidden=\"!visible\">\n <ul>\n <li v-for=\"item in items\" :key=\"item.id\">\n <span v-if=\"item.isDisabled\" class=\"sidebar__link\" aria-disabled=\"true\">{{\n item.label\n }}</span\n ><a\n v-else\n class=\"sidebar__link\"\n :href=\"item.href\"\n :aria-current=\"item.id === currentId ? 'page' : undefined\"\n >{{ item.label }}</a\n >\n </li>\n </ul>\n </nav>\n </aside>\n</template>\n","import type { ChartDatum } from './dashboard-types.js';\nexport function chartModel(data: ChartDatum[]) {\n const valid = data.filter((item) => Number.isFinite(item.value));\n const scale = valid.reduce((max, item) => Math.max(max, Math.abs(item.value)), 1);\n const min = valid.reduce((min, item) => Math.min(min, item.value / scale), 0),\n max = valid.reduce((max, item) => Math.max(max, item.value / scale), 0);\n const span = max - min || 1,\n step = 560 / Math.max(1, valid.length);\n const y = (value: number) => 180 - ((value / scale - min) / span) * 160;\n return {\n items: valid.map((item, index) => ({\n ...item,\n x: 20 + step * (index + 0.5),\n y: y(item.value),\n })),\n baseline: y(0),\n barWidth: Math.min(40, step * 0.7),\n };\n}\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport { useId } from 'reka-ui';\nimport { chartModel } from './chart-model.js';\nimport Table from './Table.vue';\nimport Empty from './Empty.vue';\nimport type { ChartDatum } from './dashboard-types.js';\ndefineOptions({ inheritAttrs: false });\nconst props = withDefaults(\n defineProps<{\n label: string;\n data: ChartDatum[];\n type?: 'bar' | 'line';\n description?: string;\n locale?: string;\n formatOptions?: Intl.NumberFormatOptions;\n categoryLabel?: string;\n valueLabel?: string;\n emptyMessage?: string;\n id?: string;\n dir?: 'ltr' | 'rtl';\n }>(),\n {\n type: 'bar',\n description: undefined,\n locale: 'id-ID',\n formatOptions: undefined,\n categoryLabel: 'Kategori',\n valueLabel: 'Nilai',\n emptyMessage: 'Belum ada data grafik.',\n id: undefined,\n dir: undefined,\n },\n);\nconst generated = useId(),\n labelId = computed(() => `${props.id ?? generated}-label`),\n model = computed(() => chartModel(props.data)),\n format = computed(() => new Intl.NumberFormat(props.locale, props.formatOptions));\nconst points = computed(() => model.value.items.map((item) => `${item.x},${item.y}`).join(' '));\n</script>\n<template>\n <figure :id=\"id\" class=\"chart\" :dir=\"dir\" :aria-labelledby=\"labelId\">\n <figcaption :id=\"labelId\" class=\"chart__title\">{{ label }}</figcaption>\n <p v-if=\"description\" class=\"chart__description\">{{ description }}</p>\n <template v-if=\"model.items.length\"\n ><svg class=\"chart__plot\" viewBox=\"0 0 600 210\" aria-hidden=\"true\" focusable=\"false\">\n <line class=\"chart__axis\" x1=\"20\" x2=\"580\" :y1=\"model.baseline\" :y2=\"model.baseline\" />\n <polyline v-if=\"type === 'line'\" class=\"chart__line\" :points=\"points\" />\n <g v-for=\"item in model.items\" :key=\"item.id\">\n <rect\n v-if=\"type === 'bar'\"\n class=\"chart__bar\"\n :x=\"item.x - model.barWidth / 2\"\n :y=\"Math.min(item.y, model.baseline)\"\n :width=\"model.barWidth\"\n :height=\"Math.abs(item.y - model.baseline)\"\n />\n <circle v-else class=\"chart__bar\" :cx=\"item.x\" :cy=\"item.y\" r=\"4\" />\n <text\n v-if=\"model.items.length <= 12\"\n class=\"chart__label\"\n :x=\"item.x\"\n y=\"202\"\n text-anchor=\"middle\"\n >\n {{ item.label.slice(0, 12) }}\n </text>\n </g></svg\n ><Table :caption=\"label\"\n ><thead>\n <tr>\n <th scope=\"col\">{{ categoryLabel }}</th>\n <th scope=\"col\">{{ valueLabel }}</th>\n </tr>\n </thead>\n <tbody>\n <tr v-for=\"item in model.items\" :key=\"item.id\">\n <th scope=\"row\">{{ item.label }}</th>\n <td>{{ format.format(item.value) }}</td>\n </tr>\n </tbody></Table\n ></template\n ><Empty v-else :title=\"emptyMessage\" />\n </figure>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport { useId } from 'reka-ui';\nimport { chartModel } from './chart-model.js';\nimport Table from './Table.vue';\nimport Empty from './Empty.vue';\nimport type { ChartDatum } from './dashboard-types.js';\ndefineOptions({ inheritAttrs: false });\nconst props = withDefaults(\n defineProps<{\n label: string;\n data: ChartDatum[];\n type?: 'bar' | 'line';\n description?: string;\n locale?: string;\n formatOptions?: Intl.NumberFormatOptions;\n categoryLabel?: string;\n valueLabel?: string;\n emptyMessage?: string;\n id?: string;\n dir?: 'ltr' | 'rtl';\n }>(),\n {\n type: 'bar',\n description: undefined,\n locale: 'id-ID',\n formatOptions: undefined,\n categoryLabel: 'Kategori',\n valueLabel: 'Nilai',\n emptyMessage: 'Belum ada data grafik.',\n id: undefined,\n dir: undefined,\n },\n);\nconst generated = useId(),\n labelId = computed(() => `${props.id ?? generated}-label`),\n model = computed(() => chartModel(props.data)),\n format = computed(() => new Intl.NumberFormat(props.locale, props.formatOptions));\nconst points = computed(() => model.value.items.map((item) => `${item.x},${item.y}`).join(' '));\n</script>\n<template>\n <figure :id=\"id\" class=\"chart\" :dir=\"dir\" :aria-labelledby=\"labelId\">\n <figcaption :id=\"labelId\" class=\"chart__title\">{{ label }}</figcaption>\n <p v-if=\"description\" class=\"chart__description\">{{ description }}</p>\n <template v-if=\"model.items.length\"\n ><svg class=\"chart__plot\" viewBox=\"0 0 600 210\" aria-hidden=\"true\" focusable=\"false\">\n <line class=\"chart__axis\" x1=\"20\" x2=\"580\" :y1=\"model.baseline\" :y2=\"model.baseline\" />\n <polyline v-if=\"type === 'line'\" class=\"chart__line\" :points=\"points\" />\n <g v-for=\"item in model.items\" :key=\"item.id\">\n <rect\n v-if=\"type === 'bar'\"\n class=\"chart__bar\"\n :x=\"item.x - model.barWidth / 2\"\n :y=\"Math.min(item.y, model.baseline)\"\n :width=\"model.barWidth\"\n :height=\"Math.abs(item.y - model.baseline)\"\n />\n <circle v-else class=\"chart__bar\" :cx=\"item.x\" :cy=\"item.y\" r=\"4\" />\n <text\n v-if=\"model.items.length <= 12\"\n class=\"chart__label\"\n :x=\"item.x\"\n y=\"202\"\n text-anchor=\"middle\"\n >\n {{ item.label.slice(0, 12) }}\n </text>\n </g></svg\n ><Table :caption=\"label\"\n ><thead>\n <tr>\n <th scope=\"col\">{{ categoryLabel }}</th>\n <th scope=\"col\">{{ valueLabel }}</th>\n </tr>\n </thead>\n <tbody>\n <tr v-for=\"item in model.items\" :key=\"item.id\">\n <th scope=\"row\">{{ item.label }}</th>\n <td>{{ format.format(item.value) }}</td>\n </tr>\n </tbody></Table\n ></template\n ><Empty v-else :title=\"emptyMessage\" />\n </figure>\n</template>\n","<script setup lang=\"ts\">\nimport {\n DialogRoot,\n DialogTrigger,\n DialogPortal,\n DialogOverlay,\n DialogContent,\n DialogTitle,\n DialogDescription,\n DialogClose,\n} from 'reka-ui';\nimport { useDisclosure } from './useDisclosure.js';\nimport CloseIcon from './CloseIcon.vue';\nimport type { ButtonVariant } from './types.js';\nimport type { DialogSize, DialogPlacement, DialogScroll, DialogBackdrop } from './overlay-model.js';\ndefineOptions({ inheritAttrs: false });\nconst props = withDefaults(\n defineProps<{\n triggerLabel: string;\n title: string;\n description?: string;\n open?: boolean;\n defaultOpen?: boolean;\n disabled?: boolean;\n closeLabel?: string;\n dir?: 'ltr' | 'rtl';\n triggerIconOnly?: boolean;\n triggerVariant?: ButtonVariant;\n size?: DialogSize;\n placement?: DialogPlacement;\n scroll?: DialogScroll;\n backdrop?: DialogBackdrop;\n dismissable?: boolean;\n keyboardDismissDisabled?: boolean;\n showCloseButton?: boolean;\n showFooterClose?: boolean;\n closeIconLabel?: string;\n }>(),\n {\n open: undefined,\n defaultOpen: false,\n disabled: false,\n closeLabel: 'Tutup',\n size: 'md',\n placement: 'center',\n scroll: 'outside',\n backdrop: 'opaque',\n dismissable: true,\n keyboardDismissDisabled: false,\n showCloseButton: true,\n showFooterClose: true,\n triggerVariant: 'secondary',\n description: undefined,\n dir: undefined,\n closeIconLabel: undefined,\n },\n);\ndefineSlots<{ default?: () => unknown; footer?: () => unknown; trigger?: () => unknown }>();\nconst emit = defineEmits<{ 'update:open': [open: boolean] }>();\nconst { visible, change } = useDisclosure(props, (next) => emit('update:open', next));\n</script>\n<template>\n <DialogRoot :open=\"visible\" @update:open=\"change\">\n <DialogTrigger\n :class=\"['button', `button--${triggerVariant}`, triggerIconOnly && 'button--icon-only']\"\n :aria-label=\"triggerLabel\"\n :disabled=\"disabled\"\n ><slot name=\"trigger\">{{ triggerLabel }}</slot></DialogTrigger\n >\n <DialogPortal>\n <DialogOverlay\n class=\"dialog__backdrop dialog__viewport\"\n :data-size=\"size\"\n :data-placement=\"placement\"\n :data-scroll=\"scroll\"\n :data-backdrop=\"backdrop\"\n >\n <DialogContent\n class=\"dialog__panel\"\n :dir=\"dir\"\n v-bind=\"description ? {} : { 'aria-describedby': undefined }\"\n @escape-key-down=\"\n (event) => {\n if (keyboardDismissDisabled) event.preventDefault();\n }\n \"\n @interact-outside=\"\n (event) => {\n if (!dismissable) event.preventDefault();\n }\n \"\n >\n <div class=\"dialog__content\">\n <div class=\"overlay__header\" :data-close-button=\"showCloseButton || undefined\">\n <DialogTitle class=\"overlay__title\">{{ title }}</DialogTitle>\n <DialogDescription v-if=\"description\" class=\"overlay__description\">{{\n description\n }}</DialogDescription>\n <DialogClose\n v-if=\"showCloseButton\"\n class=\"dialog__close\"\n :aria-label=\"closeIconLabel ?? `${closeLabel} dialog`\"\n ><CloseIcon\n /></DialogClose>\n </div>\n <div class=\"overlay__body\"><slot /></div>\n <div v-if=\"$slots.footer || showFooterClose\" class=\"overlay__footer\">\n <slot name=\"footer\" /><DialogClose\n v-if=\"showFooterClose\"\n class=\"button button--secondary\"\n >{{ closeLabel }}</DialogClose\n >\n </div>\n </div>\n </DialogContent>\n </DialogOverlay>\n </DialogPortal>\n </DialogRoot>\n</template>\n","<script setup lang=\"ts\">\nimport {\n DialogRoot,\n DialogTrigger,\n DialogPortal,\n DialogOverlay,\n DialogContent,\n DialogTitle,\n DialogDescription,\n DialogClose,\n} from 'reka-ui';\nimport { useDisclosure } from './useDisclosure.js';\nimport CloseIcon from './CloseIcon.vue';\nimport type { ButtonVariant } from './types.js';\nimport type { DialogSize, DialogPlacement, DialogScroll, DialogBackdrop } from './overlay-model.js';\ndefineOptions({ inheritAttrs: false });\nconst props = withDefaults(\n defineProps<{\n triggerLabel: string;\n title: string;\n description?: string;\n open?: boolean;\n defaultOpen?: boolean;\n disabled?: boolean;\n closeLabel?: string;\n dir?: 'ltr' | 'rtl';\n triggerIconOnly?: boolean;\n triggerVariant?: ButtonVariant;\n size?: DialogSize;\n placement?: DialogPlacement;\n scroll?: DialogScroll;\n backdrop?: DialogBackdrop;\n dismissable?: boolean;\n keyboardDismissDisabled?: boolean;\n showCloseButton?: boolean;\n showFooterClose?: boolean;\n closeIconLabel?: string;\n }>(),\n {\n open: undefined,\n defaultOpen: false,\n disabled: false,\n closeLabel: 'Tutup',\n size: 'md',\n placement: 'center',\n scroll: 'outside',\n backdrop: 'opaque',\n dismissable: true,\n keyboardDismissDisabled: false,\n showCloseButton: true,\n showFooterClose: true,\n triggerVariant: 'secondary',\n description: undefined,\n dir: undefined,\n closeIconLabel: undefined,\n },\n);\ndefineSlots<{ default?: () => unknown; footer?: () => unknown; trigger?: () => unknown }>();\nconst emit = defineEmits<{ 'update:open': [open: boolean] }>();\nconst { visible, change } = useDisclosure(props, (next) => emit('update:open', next));\n</script>\n<template>\n <DialogRoot :open=\"visible\" @update:open=\"change\">\n <DialogTrigger\n :class=\"['button', `button--${triggerVariant}`, triggerIconOnly && 'button--icon-only']\"\n :aria-label=\"triggerLabel\"\n :disabled=\"disabled\"\n ><slot name=\"trigger\">{{ triggerLabel }}</slot></DialogTrigger\n >\n <DialogPortal>\n <DialogOverlay\n class=\"dialog__backdrop dialog__viewport\"\n :data-size=\"size\"\n :data-placement=\"placement\"\n :data-scroll=\"scroll\"\n :data-backdrop=\"backdrop\"\n >\n <DialogContent\n class=\"dialog__panel\"\n :dir=\"dir\"\n v-bind=\"description ? {} : { 'aria-describedby': undefined }\"\n @escape-key-down=\"\n (event) => {\n if (keyboardDismissDisabled) event.preventDefault();\n }\n \"\n @interact-outside=\"\n (event) => {\n if (!dismissable) event.preventDefault();\n }\n \"\n >\n <div class=\"dialog__content\">\n <div class=\"overlay__header\" :data-close-button=\"showCloseButton || undefined\">\n <DialogTitle class=\"overlay__title\">{{ title }}</DialogTitle>\n <DialogDescription v-if=\"description\" class=\"overlay__description\">{{\n description\n }}</DialogDescription>\n <DialogClose\n v-if=\"showCloseButton\"\n class=\"dialog__close\"\n :aria-label=\"closeIconLabel ?? `${closeLabel} dialog`\"\n ><CloseIcon\n /></DialogClose>\n </div>\n <div class=\"overlay__body\"><slot /></div>\n <div v-if=\"$slots.footer || showFooterClose\" class=\"overlay__footer\">\n <slot name=\"footer\" /><DialogClose\n v-if=\"showFooterClose\"\n class=\"button button--secondary\"\n >{{ closeLabel }}</DialogClose\n >\n </div>\n </div>\n </DialogContent>\n </DialogOverlay>\n </DialogPortal>\n </DialogRoot>\n</template>\n","<script setup lang=\"ts\">\nimport CheckIcon from './CheckIcon.vue';\nimport ChevronIcon from './ChevronIcon.vue';\nimport type { DropdownMenuItem } from './dashboard-types.js';\ndefineProps<{ item: DropdownMenuItem; selectable: boolean }>();\ndefineSlots<{ icon?: (props: { item: DropdownMenuItem }) => unknown }>();\n</script>\n<template>\n <CheckIcon v-if=\"selectable && !item.children?.length\" class=\"menu__check\" />\n <span v-if=\"$slots.icon\" class=\"menu__icon\" aria-hidden=\"true\"\n ><slot name=\"icon\" :item=\"item\"\n /></span>\n <span class=\"menu__text\"\n ><span>{{ item.label }}</span\n ><span v-if=\"item.description\" class=\"menu__description\">{{ item.description }}</span></span\n >\n <kbd v-if=\"item.shortcut\" class=\"menu__shortcut\" aria-hidden=\"true\">{{ item.shortcut }}</kbd>\n <ChevronIcon v-if=\"item.children?.length\" class=\"menu__arrow\" />\n</template>\n","<script setup lang=\"ts\">\nimport CheckIcon from './CheckIcon.vue';\nimport ChevronIcon from './ChevronIcon.vue';\nimport type { DropdownMenuItem } from './dashboard-types.js';\ndefineProps<{ item: DropdownMenuItem; selectable: boolean }>();\ndefineSlots<{ icon?: (props: { item: DropdownMenuItem }) => unknown }>();\n</script>\n<template>\n <CheckIcon v-if=\"selectable && !item.children?.length\" class=\"menu__check\" />\n <span v-if=\"$slots.icon\" class=\"menu__icon\" aria-hidden=\"true\"\n ><slot name=\"icon\" :item=\"item\"\n /></span>\n <span class=\"menu__text\"\n ><span>{{ item.label }}</span\n ><span v-if=\"item.description\" class=\"menu__description\">{{ item.description }}</span></span\n >\n <kbd v-if=\"item.shortcut\" class=\"menu__shortcut\" aria-hidden=\"true\">{{ item.shortcut }}</kbd>\n <ChevronIcon v-if=\"item.children?.length\" class=\"menu__arrow\" />\n</template>\n","import type { DropdownMenuItem } from './dashboard-types.js';\nexport type MenuSelectionMode = 'none' | 'single' | 'multiple';\nexport type MenuPlacement =\n | 'top-start'\n | 'top-end'\n | 'bottom-start'\n | 'bottom-end'\n | 'left-start'\n | 'left-end'\n | 'right-start'\n | 'right-end';\nexport function menuGroups(items: DropdownMenuItem[]) {\n const groups: { key: string; label?: string; items: DropdownMenuItem[] }[] = [];\n for (const item of items) {\n const previous = groups.at(-1);\n if (!previous || previous.label !== item.section || item.separatorBefore)\n groups.push({ key: item.id, label: item.section, items: [item] });\n else previous.items.push(item);\n }\n return groups;\n}\nexport function menuLeaves(items: DropdownMenuItem[], disabled = false): DropdownMenuItem[] {\n return items.flatMap((item) =>\n item.children?.length\n ? menuLeaves(item.children, disabled || !!item.isDisabled)\n : [{ ...item, isDisabled: disabled || item.isDisabled }],\n );\n}\nexport function menuSelection(keys: string[], items: DropdownMenuItem[], mode: MenuSelectionMode) {\n const wanted = new Set(keys);\n const result = menuLeaves(items)\n .filter((item) => wanted.has(item.id))\n .map((item) => item.id);\n return mode === 'none' ? [] : mode === 'single' ? result.slice(0, 1) : result;\n}\nexport type DialogSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'cover' | 'full';\nexport type DialogPlacement = 'auto' | 'top' | 'center' | 'bottom';\nexport type DialogScroll = 'inside' | 'outside';\nexport type DialogBackdrop = 'opaque' | 'blur' | 'transparent';\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport {\n DropdownMenuGroup,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuSub,\n DropdownMenuSubTrigger,\n DropdownMenuSubContent,\n DropdownMenuPortal,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n} from 'reka-ui';\nimport MenuItemContent from './MenuItemContent.vue';\nimport { menuGroups, type MenuSelectionMode } from './overlay-model.js';\nimport type { DropdownMenuItem as Item } from './dashboard-types.js';\nconst props = defineProps<{\n items: Item[];\n selectedKeys: string[];\n selectionMode: MenuSelectionMode;\n closeOnSelect: boolean;\n disabled?: boolean;\n dir?: 'ltr' | 'rtl';\n}>();\nconst emit = defineEmits<{ action: [id: string]; selection: [id: string, checked: boolean] }>();\ndefineSlots<{ icon?: (props: { item: Item }) => unknown }>();\nconst groups = computed(() => menuGroups(props.items));\nfunction keepParentMenuFocus(event: { target: EventTarget | null; preventDefault: () => void }) {\n // Roving focus may briefly land on the parent menu during a direct pointer move into its submenu.\n // Actual item focus, outside presses, Left and Escape retain the provider's normal dismissal.\n if (event.target instanceof HTMLElement && event.target.getAttribute('role') === 'menu')\n event.preventDefault();\n}\nfunction action(event: Event, item: Item) {\n if (props.disabled || item.isDisabled) {\n event.preventDefault();\n return;\n }\n if (!props.closeOnSelect) event.preventDefault();\n emit('action', item.id);\n}\n</script>\n<template>\n <DropdownMenuRadioGroup\n :model-value=\"selectedKeys[0] ?? ''\"\n @update:model-value=\"\n (value) => {\n if (selectionMode === 'single' && typeof value === 'string') emit('selection', value, true);\n }\n \"\n >\n <template v-for=\"(group, index) in groups\" :key=\"group.key\">\n <DropdownMenuSeparator v-if=\"index > 0\" class=\"menu__separator\" />\n <DropdownMenuGroup :aria-label=\"group.label\">\n <DropdownMenuLabel v-if=\"group.label\" class=\"menu__heading\">{{\n group.label\n }}</DropdownMenuLabel>\n <template v-for=\"item in group.items\" :key=\"item.id\">\n <DropdownMenuSub v-if=\"item.children?.length\">\n <DropdownMenuSubTrigger\n class=\"menu__item\"\n :disabled=\"disabled || item.isDisabled\"\n :text-value=\"item.label\"\n :data-tone=\"item.tone ?? 'default'\"\n >\n <MenuItemContent :item=\"item\" :selectable=\"false\"\n ><template v-if=\"$slots.icon\" #icon=\"slot\"\n ><slot name=\"icon\" v-bind=\"slot\" /></template\n ></MenuItemContent>\n </DropdownMenuSubTrigger>\n <DropdownMenuPortal\n ><DropdownMenuSubContent\n class=\"menu__panel menu__list\"\n :aria-label=\"item.label\"\n :side-offset=\"4\"\n :collision-padding=\"16\"\n :dir=\"dir\"\n @focus-outside=\"keepParentMenuFocus\"\n >\n <DropdownMenuBranch\n :items=\"item.children\"\n :selected-keys=\"selectedKeys\"\n :selection-mode=\"selectionMode\"\n :close-on-select=\"closeOnSelect\"\n :disabled=\"disabled || item.isDisabled\"\n :dir=\"dir\"\n @action=\"(id) => emit('action', id)\"\n @selection=\"(id, checked) => emit('selection', id, checked)\"\n >\n <template v-if=\"$slots.icon\" #icon=\"slot\"\n ><slot name=\"icon\" v-bind=\"slot\"\n /></template>\n </DropdownMenuBranch> </DropdownMenuSubContent\n ></DropdownMenuPortal>\n </DropdownMenuSub>\n <DropdownMenuRadioItem\n v-else-if=\"selectionMode === 'single'\"\n :value=\"item.id\"\n :disabled=\"disabled || item.isDisabled\"\n :text-value=\"item.label\"\n class=\"menu__item\"\n :data-tone=\"item.tone ?? 'default'\"\n @select=\"(event) => action(event, item)\"\n >\n <MenuItemContent :item=\"item\" selectable\n ><template v-if=\"$slots.icon\" #icon=\"slot\"\n ><slot name=\"icon\" v-bind=\"slot\" /></template\n ></MenuItemContent>\n </DropdownMenuRadioItem>\n <DropdownMenuCheckboxItem\n v-else-if=\"selectionMode === 'multiple'\"\n :model-value=\"selectedKeys.includes(item.id)\"\n :disabled=\"disabled || item.isDisabled\"\n :text-value=\"item.label\"\n class=\"menu__item\"\n :data-tone=\"item.tone ?? 'default'\"\n @update:model-value=\"\n (checked) => {\n if (!disabled && !item.isDisabled) emit('selection', item.id, checked === true);\n }\n \"\n @select=\"(event) => action(event, item)\"\n >\n <MenuItemContent :item=\"item\" selectable\n ><template v-if=\"$slots.icon\" #icon=\"slot\"\n ><slot name=\"icon\" v-bind=\"slot\" /></template\n ></MenuItemContent>\n </DropdownMenuCheckboxItem>\n <DropdownMenuItem\n v-else\n :disabled=\"disabled || item.isDisabled\"\n :text-value=\"item.label\"\n class=\"menu__item\"\n :data-tone=\"item.tone ?? 'default'\"\n @select=\"(event) => action(event, item)\"\n >\n <MenuItemContent :item=\"item\" :selectable=\"false\"\n ><template v-if=\"$slots.icon\" #icon=\"slot\"\n ><slot name=\"icon\" v-bind=\"slot\" /></template\n ></MenuItemContent>\n </DropdownMenuItem>\n </template>\n </DropdownMenuGroup>\n </template>\n </DropdownMenuRadioGroup>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport {\n DropdownMenuGroup,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuSub,\n DropdownMenuSubTrigger,\n DropdownMenuSubContent,\n DropdownMenuPortal,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n} from 'reka-ui';\nimport MenuItemContent from './MenuItemContent.vue';\nimport { menuGroups, type MenuSelectionMode } from './overlay-model.js';\nimport type { DropdownMenuItem as Item } from './dashboard-types.js';\nconst props = defineProps<{\n items: Item[];\n selectedKeys: string[];\n selectionMode: MenuSelectionMode;\n closeOnSelect: boolean;\n disabled?: boolean;\n dir?: 'ltr' | 'rtl';\n}>();\nconst emit = defineEmits<{ action: [id: string]; selection: [id: string, checked: boolean] }>();\ndefineSlots<{ icon?: (props: { item: Item }) => unknown }>();\nconst groups = computed(() => menuGroups(props.items));\nfunction keepParentMenuFocus(event: { target: EventTarget | null; preventDefault: () => void }) {\n // Roving focus may briefly land on the parent menu during a direct pointer move into its submenu.\n // Actual item focus, outside presses, Left and Escape retain the provider's normal dismissal.\n if (event.target instanceof HTMLElement && event.target.getAttribute('role') === 'menu')\n event.preventDefault();\n}\nfunction action(event: Event, item: Item) {\n if (props.disabled || item.isDisabled) {\n event.preventDefault();\n return;\n }\n if (!props.closeOnSelect) event.preventDefault();\n emit('action', item.id);\n}\n</script>\n<template>\n <DropdownMenuRadioGroup\n :model-value=\"selectedKeys[0] ?? ''\"\n @update:model-value=\"\n (value) => {\n if (selectionMode === 'single' && typeof value === 'string') emit('selection', value, true);\n }\n \"\n >\n <template v-for=\"(group, index) in groups\" :key=\"group.key\">\n <DropdownMenuSeparator v-if=\"index > 0\" class=\"menu__separator\" />\n <DropdownMenuGroup :aria-label=\"group.label\">\n <DropdownMenuLabel v-if=\"group.label\" class=\"menu__heading\">{{\n group.label\n }}</DropdownMenuLabel>\n <template v-for=\"item in group.items\" :key=\"item.id\">\n <DropdownMenuSub v-if=\"item.children?.length\">\n <DropdownMenuSubTrigger\n class=\"menu__item\"\n :disabled=\"disabled || item.isDisabled\"\n :text-value=\"item.label\"\n :data-tone=\"item.tone ?? 'default'\"\n >\n <MenuItemContent :item=\"item\" :selectable=\"false\"\n ><template v-if=\"$slots.icon\" #icon=\"slot\"\n ><slot name=\"icon\" v-bind=\"slot\" /></template\n ></MenuItemContent>\n </DropdownMenuSubTrigger>\n <DropdownMenuPortal\n ><DropdownMenuSubContent\n class=\"menu__panel menu__list\"\n :aria-label=\"item.label\"\n :side-offset=\"4\"\n :collision-padding=\"16\"\n :dir=\"dir\"\n @focus-outside=\"keepParentMenuFocus\"\n >\n <DropdownMenuBranch\n :items=\"item.children\"\n :selected-keys=\"selectedKeys\"\n :selection-mode=\"selectionMode\"\n :close-on-select=\"closeOnSelect\"\n :disabled=\"disabled || item.isDisabled\"\n :dir=\"dir\"\n @action=\"(id) => emit('action', id)\"\n @selection=\"(id, checked) => emit('selection', id, checked)\"\n >\n <template v-if=\"$slots.icon\" #icon=\"slot\"\n ><slot name=\"icon\" v-bind=\"slot\"\n /></template>\n </DropdownMenuBranch> </DropdownMenuSubContent\n ></DropdownMenuPortal>\n </DropdownMenuSub>\n <DropdownMenuRadioItem\n v-else-if=\"selectionMode === 'single'\"\n :value=\"item.id\"\n :disabled=\"disabled || item.isDisabled\"\n :text-value=\"item.label\"\n class=\"menu__item\"\n :data-tone=\"item.tone ?? 'default'\"\n @select=\"(event) => action(event, item)\"\n >\n <MenuItemContent :item=\"item\" selectable\n ><template v-if=\"$slots.icon\" #icon=\"slot\"\n ><slot name=\"icon\" v-bind=\"slot\" /></template\n ></MenuItemContent>\n </DropdownMenuRadioItem>\n <DropdownMenuCheckboxItem\n v-else-if=\"selectionMode === 'multiple'\"\n :model-value=\"selectedKeys.includes(item.id)\"\n :disabled=\"disabled || item.isDisabled\"\n :text-value=\"item.label\"\n class=\"menu__item\"\n :data-tone=\"item.tone ?? 'default'\"\n @update:model-value=\"\n (checked) => {\n if (!disabled && !item.isDisabled) emit('selection', item.id, checked === true);\n }\n \"\n @select=\"(event) => action(event, item)\"\n >\n <MenuItemContent :item=\"item\" selectable\n ><template v-if=\"$slots.icon\" #icon=\"slot\"\n ><slot name=\"icon\" v-bind=\"slot\" /></template\n ></MenuItemContent>\n </DropdownMenuCheckboxItem>\n <DropdownMenuItem\n v-else\n :disabled=\"disabled || item.isDisabled\"\n :text-value=\"item.label\"\n class=\"menu__item\"\n :data-tone=\"item.tone ?? 'default'\"\n @select=\"(event) => action(event, item)\"\n >\n <MenuItemContent :item=\"item\" :selectable=\"false\"\n ><template v-if=\"$slots.icon\" #icon=\"slot\"\n ><slot name=\"icon\" v-bind=\"slot\" /></template\n ></MenuItemContent>\n </DropdownMenuItem>\n </template>\n </DropdownMenuGroup>\n </template>\n </DropdownMenuRadioGroup>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport {\n DropdownMenuRoot,\n DropdownMenuTrigger,\n DropdownMenuPortal,\n DropdownMenuContent,\n} from 'reka-ui';\nimport { useDisclosure } from './useDisclosure.js';\nimport DropdownMenuBranch from './DropdownMenuBranch.vue';\nimport {\n menuSelection,\n menuLeaves,\n type MenuSelectionMode,\n type MenuPlacement,\n} from './overlay-model.js';\nimport type { DropdownMenuItem } from './dashboard-types.js';\nimport type { ButtonVariant } from './types.js';\ndefineOptions({ inheritAttrs: false });\nconst props = withDefaults(\n defineProps<{\n triggerLabel: string;\n items: DropdownMenuItem[];\n open?: boolean;\n defaultOpen?: boolean;\n disabled?: boolean;\n dir?: 'ltr' | 'rtl';\n triggerIconOnly?: boolean;\n triggerVariant?: ButtonVariant;\n selectionMode?: MenuSelectionMode;\n selectedKeys?: string[];\n defaultSelectedKeys?: string[];\n closeOnSelect?: boolean;\n placement?: MenuPlacement;\n }>(),\n {\n open: undefined,\n defaultOpen: false,\n disabled: false,\n selectionMode: 'none',\n closeOnSelect: undefined,\n placement: 'bottom-start',\n triggerVariant: 'secondary',\n dir: undefined,\n selectedKeys: undefined,\n defaultSelectedKeys: undefined,\n },\n);\nconst emit = defineEmits<{\n 'update:open': [open: boolean];\n action: [id: string];\n 'update:selectedKeys': [keys: string[]];\n}>();\ndefineSlots<{ trigger?: () => unknown; icon?: (props: { item: DropdownMenuItem }) => unknown }>();\nconst { visible, change } = useDisclosure(props, (next) => emit('update:open', next));\nconst local = ref(props.defaultSelectedKeys ?? []);\nconst selected = computed(() =>\n menuSelection(props.selectedKeys ?? local.value, props.items, props.selectionMode),\n);\nconst side = computed(() => props.placement.split('-')[0] as 'top' | 'bottom' | 'left' | 'right');\nconst align = computed(() => props.placement.split('-')[1] as 'start' | 'end');\nfunction select(id: string, checked: boolean) {\n const item = menuLeaves(props.items, props.disabled).find((item) => item.id === id);\n if (!item || item.isDisabled || props.selectionMode === 'none') return;\n const next = menuSelection(\n props.selectionMode === 'single'\n ? [id]\n : checked\n ? [...selected.value, id]\n : selected.value.filter((key) => key !== id),\n props.items,\n props.selectionMode,\n );\n local.value = next;\n emit('update:selectedKeys', next);\n}\nfunction action(id: string) {\n const item = menuLeaves(props.items, props.disabled).find((item) => item.id === id);\n if (item && !item.isDisabled) emit('action', id);\n}\n</script>\n<template>\n <DropdownMenuRoot :open=\"visible\" :dir=\"dir\" @update:open=\"change\">\n <DropdownMenuTrigger\n :class=\"['button', `button--${triggerVariant}`, triggerIconOnly && 'button--icon-only']\"\n :aria-label=\"triggerLabel\"\n :disabled=\"disabled || !items.length\"\n ><slot name=\"trigger\">{{ triggerLabel }}</slot></DropdownMenuTrigger\n >\n <DropdownMenuPortal\n ><DropdownMenuContent\n class=\"menu__panel menu__list\"\n :aria-label=\"triggerLabel\"\n :side=\"side\"\n :align=\"align\"\n :side-offset=\"8\"\n :collision-padding=\"16\"\n :dir=\"dir\"\n >\n <DropdownMenuBranch\n :items=\"items\"\n :selected-keys=\"selected\"\n :selection-mode=\"selectionMode\"\n :close-on-select=\"closeOnSelect ?? selectionMode !== 'multiple'\"\n :disabled=\"disabled\"\n :dir=\"dir\"\n @action=\"action\"\n @selection=\"select\"\n >\n <template v-if=\"$slots.icon\" #icon=\"slot\"><slot name=\"icon\" v-bind=\"slot\" /></template>\n </DropdownMenuBranch> </DropdownMenuContent\n ></DropdownMenuPortal>\n </DropdownMenuRoot>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport {\n DropdownMenuRoot,\n DropdownMenuTrigger,\n DropdownMenuPortal,\n DropdownMenuContent,\n} from 'reka-ui';\nimport { useDisclosure } from './useDisclosure.js';\nimport DropdownMenuBranch from './DropdownMenuBranch.vue';\nimport {\n menuSelection,\n menuLeaves,\n type MenuSelectionMode,\n type MenuPlacement,\n} from './overlay-model.js';\nimport type { DropdownMenuItem } from './dashboard-types.js';\nimport type { ButtonVariant } from './types.js';\ndefineOptions({ inheritAttrs: false });\nconst props = withDefaults(\n defineProps<{\n triggerLabel: string;\n items: DropdownMenuItem[];\n open?: boolean;\n defaultOpen?: boolean;\n disabled?: boolean;\n dir?: 'ltr' | 'rtl';\n triggerIconOnly?: boolean;\n triggerVariant?: ButtonVariant;\n selectionMode?: MenuSelectionMode;\n selectedKeys?: string[];\n defaultSelectedKeys?: string[];\n closeOnSelect?: boolean;\n placement?: MenuPlacement;\n }>(),\n {\n open: undefined,\n defaultOpen: false,\n disabled: false,\n selectionMode: 'none',\n closeOnSelect: undefined,\n placement: 'bottom-start',\n triggerVariant: 'secondary',\n dir: undefined,\n selectedKeys: undefined,\n defaultSelectedKeys: undefined,\n },\n);\nconst emit = defineEmits<{\n 'update:open': [open: boolean];\n action: [id: string];\n 'update:selectedKeys': [keys: string[]];\n}>();\ndefineSlots<{ trigger?: () => unknown; icon?: (props: { item: DropdownMenuItem }) => unknown }>();\nconst { visible, change } = useDisclosure(props, (next) => emit('update:open', next));\nconst local = ref(props.defaultSelectedKeys ?? []);\nconst selected = computed(() =>\n menuSelection(props.selectedKeys ?? local.value, props.items, props.selectionMode),\n);\nconst side = computed(() => props.placement.split('-')[0] as 'top' | 'bottom' | 'left' | 'right');\nconst align = computed(() => props.placement.split('-')[1] as 'start' | 'end');\nfunction select(id: string, checked: boolean) {\n const item = menuLeaves(props.items, props.disabled).find((item) => item.id === id);\n if (!item || item.isDisabled || props.selectionMode === 'none') return;\n const next = menuSelection(\n props.selectionMode === 'single'\n ? [id]\n : checked\n ? [...selected.value, id]\n : selected.value.filter((key) => key !== id),\n props.items,\n props.selectionMode,\n );\n local.value = next;\n emit('update:selectedKeys', next);\n}\nfunction action(id: string) {\n const item = menuLeaves(props.items, props.disabled).find((item) => item.id === id);\n if (item && !item.isDisabled) emit('action', id);\n}\n</script>\n<template>\n <DropdownMenuRoot :open=\"visible\" :dir=\"dir\" @update:open=\"change\">\n <DropdownMenuTrigger\n :class=\"['button', `button--${triggerVariant}`, triggerIconOnly && 'button--icon-only']\"\n :aria-label=\"triggerLabel\"\n :disabled=\"disabled || !items.length\"\n ><slot name=\"trigger\">{{ triggerLabel }}</slot></DropdownMenuTrigger\n >\n <DropdownMenuPortal\n ><DropdownMenuContent\n class=\"menu__panel menu__list\"\n :aria-label=\"triggerLabel\"\n :side=\"side\"\n :align=\"align\"\n :side-offset=\"8\"\n :collision-padding=\"16\"\n :dir=\"dir\"\n >\n <DropdownMenuBranch\n :items=\"items\"\n :selected-keys=\"selected\"\n :selection-mode=\"selectionMode\"\n :close-on-select=\"closeOnSelect ?? selectionMode !== 'multiple'\"\n :disabled=\"disabled\"\n :dir=\"dir\"\n @action=\"action\"\n @selection=\"select\"\n >\n <template v-if=\"$slots.icon\" #icon=\"slot\"><slot name=\"icon\" v-bind=\"slot\" /></template>\n </DropdownMenuBranch> </DropdownMenuContent\n ></DropdownMenuPortal>\n </DropdownMenuRoot>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport {\n PopoverRoot,\n PopoverTrigger,\n PopoverPortal,\n PopoverContent,\n PopoverClose,\n useId,\n} from 'reka-ui';\nimport { useDisclosure } from './useDisclosure.js';\ndefineOptions({ inheritAttrs: false });\nconst props = withDefaults(\n defineProps<{\n triggerLabel: string;\n title: string;\n description?: string;\n open?: boolean;\n defaultOpen?: boolean;\n disabled?: boolean;\n closeLabel?: string;\n dir?: 'ltr' | 'rtl';\n }>(),\n {\n description: undefined,\n open: undefined,\n defaultOpen: false,\n disabled: false,\n closeLabel: 'Tutup',\n dir: undefined,\n },\n);\nconst emit = defineEmits<{ 'update:open': [open: boolean] }>();\nconst { visible, change } = useDisclosure(props, (next) => emit('update:open', next));\nconst generated = useId(),\n titleId = `${generated}-title`,\n descriptionId = computed(() => (props.description ? `${generated}-description` : undefined));\n</script>\n<template>\n <PopoverRoot :open=\"visible\" @update:open=\"change\"\n ><PopoverTrigger class=\"button button--secondary\" :disabled=\"disabled\">{{\n triggerLabel\n }}</PopoverTrigger\n ><PopoverPortal\n ><PopoverContent as-child side=\"bottom\" align=\"start\" :side-offset=\"8\" :collision-padding=\"16\"\n ><div\n class=\"popover__panel popover__content\"\n :dir=\"dir\"\n :aria-labelledby=\"titleId\"\n :aria-describedby=\"descriptionId\"\n >\n <h2 :id=\"titleId\" class=\"overlay__title\">{{ title }}</h2>\n <p v-if=\"description\" :id=\"descriptionId\" class=\"overlay__description\">\n {{ description }}\n </p>\n <div class=\"overlay__body\"><slot /></div>\n <div class=\"overlay__footer\">\n <PopoverClose class=\"button button--secondary\">{{ closeLabel }}</PopoverClose>\n </div>\n </div></PopoverContent\n ></PopoverPortal\n ></PopoverRoot\n >\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport {\n PopoverRoot,\n PopoverTrigger,\n PopoverPortal,\n PopoverContent,\n PopoverClose,\n useId,\n} from 'reka-ui';\nimport { useDisclosure } from './useDisclosure.js';\ndefineOptions({ inheritAttrs: false });\nconst props = withDefaults(\n defineProps<{\n triggerLabel: string;\n title: string;\n description?: string;\n open?: boolean;\n defaultOpen?: boolean;\n disabled?: boolean;\n closeLabel?: string;\n dir?: 'ltr' | 'rtl';\n }>(),\n {\n description: undefined,\n open: undefined,\n defaultOpen: false,\n disabled: false,\n closeLabel: 'Tutup',\n dir: undefined,\n },\n);\nconst emit = defineEmits<{ 'update:open': [open: boolean] }>();\nconst { visible, change } = useDisclosure(props, (next) => emit('update:open', next));\nconst generated = useId(),\n titleId = `${generated}-title`,\n descriptionId = computed(() => (props.description ? `${generated}-description` : undefined));\n</script>\n<template>\n <PopoverRoot :open=\"visible\" @update:open=\"change\"\n ><PopoverTrigger class=\"button button--secondary\" :disabled=\"disabled\">{{\n triggerLabel\n }}</PopoverTrigger\n ><PopoverPortal\n ><PopoverContent as-child side=\"bottom\" align=\"start\" :side-offset=\"8\" :collision-padding=\"16\"\n ><div\n class=\"popover__panel popover__content\"\n :dir=\"dir\"\n :aria-labelledby=\"titleId\"\n :aria-describedby=\"descriptionId\"\n >\n <h2 :id=\"titleId\" class=\"overlay__title\">{{ title }}</h2>\n <p v-if=\"description\" :id=\"descriptionId\" class=\"overlay__description\">\n {{ description }}\n </p>\n <div class=\"overlay__body\"><slot /></div>\n <div class=\"overlay__footer\">\n <PopoverClose class=\"button button--secondary\">{{ closeLabel }}</PopoverClose>\n </div>\n </div></PopoverContent\n ></PopoverPortal\n ></PopoverRoot\n >\n</template>\n","<script setup lang=\"ts\">\nimport {\n TooltipProvider,\n TooltipRoot,\n TooltipTrigger,\n TooltipPortal,\n TooltipContent,\n} from 'reka-ui';\nimport type { ButtonVariant, ButtonSize } from './types.js';\nimport { useDisclosure } from './useDisclosure.js';\ndefineOptions({ inheritAttrs: false });\nconst props = withDefaults(\n defineProps<{\n triggerLabel: string;\n text: string;\n triggerIconOnly?: boolean;\n triggerVariant?: ButtonVariant;\n triggerSize?: ButtonSize;\n open?: boolean;\n defaultOpen?: boolean;\n disabled?: boolean;\n dir?: 'ltr' | 'rtl';\n }>(),\n {\n open: undefined,\n defaultOpen: false,\n disabled: false,\n dir: undefined,\n triggerIconOnly: false,\n triggerVariant: 'secondary',\n triggerSize: 'md',\n },\n);\ndefineSlots<{ trigger?: () => unknown }>();\nconst emit = defineEmits<{ 'update:open': [open: boolean] }>();\nconst { visible, change } = useDisclosure(props, (next) => emit('update:open', next));\n</script>\n<template>\n <TooltipProvider :delay-duration=\"300\" :skip-delay-duration=\"0\" :disable-hoverable-content=\"true\"\n ><TooltipRoot :open=\"visible\" @update:open=\"change\"\n ><TooltipTrigger\n :class=\"[\n 'button',\n `button--${triggerVariant}`,\n triggerSize !== 'md' && `button--${triggerSize}`,\n triggerIconOnly && 'button--icon-only',\n ]\"\n :aria-label=\"triggerLabel\"\n :disabled=\"disabled\"\n ><slot name=\"trigger\">{{ triggerLabel }}</slot></TooltipTrigger\n ><TooltipPortal\n ><TooltipContent\n class=\"tooltip__panel\"\n side=\"top\"\n :side-offset=\"8\"\n :collision-padding=\"16\"\n :dir=\"dir\"\n >{{ text }}</TooltipContent\n ></TooltipPortal\n ></TooltipRoot\n ></TooltipProvider\n >\n</template>\n","<script setup lang=\"ts\">\nimport {\n TooltipProvider,\n TooltipRoot,\n TooltipTrigger,\n TooltipPortal,\n TooltipContent,\n} from 'reka-ui';\nimport type { ButtonVariant, ButtonSize } from './types.js';\nimport { useDisclosure } from './useDisclosure.js';\ndefineOptions({ inheritAttrs: false });\nconst props = withDefaults(\n defineProps<{\n triggerLabel: string;\n text: string;\n triggerIconOnly?: boolean;\n triggerVariant?: ButtonVariant;\n triggerSize?: ButtonSize;\n open?: boolean;\n defaultOpen?: boolean;\n disabled?: boolean;\n dir?: 'ltr' | 'rtl';\n }>(),\n {\n open: undefined,\n defaultOpen: false,\n disabled: false,\n dir: undefined,\n triggerIconOnly: false,\n triggerVariant: 'secondary',\n triggerSize: 'md',\n },\n);\ndefineSlots<{ trigger?: () => unknown }>();\nconst emit = defineEmits<{ 'update:open': [open: boolean] }>();\nconst { visible, change } = useDisclosure(props, (next) => emit('update:open', next));\n</script>\n<template>\n <TooltipProvider :delay-duration=\"300\" :skip-delay-duration=\"0\" :disable-hoverable-content=\"true\"\n ><TooltipRoot :open=\"visible\" @update:open=\"change\"\n ><TooltipTrigger\n :class=\"[\n 'button',\n `button--${triggerVariant}`,\n triggerSize !== 'md' && `button--${triggerSize}`,\n triggerIconOnly && 'button--icon-only',\n ]\"\n :aria-label=\"triggerLabel\"\n :disabled=\"disabled\"\n ><slot name=\"trigger\">{{ triggerLabel }}</slot></TooltipTrigger\n ><TooltipPortal\n ><TooltipContent\n class=\"tooltip__panel\"\n side=\"top\"\n :side-offset=\"8\"\n :collision-padding=\"16\"\n :dir=\"dir\"\n >{{ text }}</TooltipContent\n ></TooltipPortal\n ></TooltipRoot\n ></TooltipProvider\n >\n</template>\n","<script setup lang=\"ts\">\nimport type { SpinnerSize, SpinnerColor } from './types.js';\ndefineOptions({ inheritAttrs: false });\nwithDefaults(\n defineProps<{ size?: SpinnerSize; color?: SpinnerColor; label?: string; id?: string }>(),\n { size: 'md', color: 'current', label: undefined, id: undefined },\n);\n</script>\n<template>\n <span\n :id=\"id\"\n :class=\"['spinner', `spinner--${size}`]\"\n :data-color=\"color\"\n :role=\"label ? 'status' : undefined\"\n :aria-label=\"label || undefined\"\n :aria-hidden=\"!label || undefined\"\n ><svg viewBox=\"0 0 20 20\" fill=\"none\" aria-hidden=\"true\" focusable=\"false\">\n <circle class=\"spinner__track\" cx=\"10\" cy=\"10\" r=\"8\" />\n <circle\n class=\"spinner__arc\"\n cx=\"10\"\n cy=\"10\"\n r=\"8\"\n pathLength=\"100\"\n stroke-dasharray=\"36 64\"\n /></svg\n ><span v-if=\"label\" class=\"spinner__label\">{{ label }}</span></span\n >\n</template>\n","<script setup lang=\"ts\">\nimport type { SpinnerSize, SpinnerColor } from './types.js';\ndefineOptions({ inheritAttrs: false });\nwithDefaults(\n defineProps<{ size?: SpinnerSize; color?: SpinnerColor; label?: string; id?: string }>(),\n { size: 'md', color: 'current', label: undefined, id: undefined },\n);\n</script>\n<template>\n <span\n :id=\"id\"\n :class=\"['spinner', `spinner--${size}`]\"\n :data-color=\"color\"\n :role=\"label ? 'status' : undefined\"\n :aria-label=\"label || undefined\"\n :aria-hidden=\"!label || undefined\"\n ><svg viewBox=\"0 0 20 20\" fill=\"none\" aria-hidden=\"true\" focusable=\"false\">\n <circle class=\"spinner__track\" cx=\"10\" cy=\"10\" r=\"8\" />\n <circle\n class=\"spinner__arc\"\n cx=\"10\"\n cy=\"10\"\n r=\"8\"\n pathLength=\"100\"\n stroke-dasharray=\"36 64\"\n /></svg\n ><span v-if=\"label\" class=\"spinner__label\">{{ label }}</span></span\n >\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref, getCurrentInstance, watch } from 'vue';\nimport {\n ComboboxRoot,\n ComboboxAnchor,\n ComboboxInput,\n ComboboxTrigger,\n ComboboxPortal,\n ComboboxContent,\n ComboboxViewport,\n ComboboxItem,\n} from 'reka-ui';\nimport ChevronIcon from './ChevronIcon.vue';\nimport CloseIcon from './CloseIcon.vue';\nimport CheckIcon from './CheckIcon.vue';\nimport FieldFeedback from './FieldFeedback.vue';\nimport SelectionValidation from './SelectionValidation.vue';\nimport { useFeedback } from './useFeedback.js';\nimport { selectionIds, filterOptions, type SelectOption } from './selection-options.js';\nconst props = defineProps<{\n label: string;\n options: SelectOption[];\n modelValue?: string;\n defaultValue?: string;\n placeholder?: string;\n name?: string;\n disabled?: boolean;\n required?: boolean;\n invalid?: boolean;\n description?: string;\n errorMessage?: string;\n requiredMessage?: string;\n clearable?: boolean;\n clearLabel?: string;\n toggleLabel?: string;\n emptyMessage?: string;\n dir?: 'ltr' | 'rtl';\n}>();\nconst emit = defineEmits<{ 'update:modelValue': [value: string | undefined] }>();\ndefineSlots<{\n start?: () => unknown;\n option?: (props: { option: SelectOption }) => unknown;\n}>();\nconst instance = getCurrentInstance();\nconst controlled = () =>\n Object.prototype.hasOwnProperty.call(instance?.vnode.props ?? {}, 'modelValue');\nconst local = ref(props.defaultValue);\nconst draft = ref<string | null>(null);\nconst tried = ref(false);\nconst wrapper = ref<HTMLDivElement>();\nconst id = computed(\n () => selectionIds(controlled() ? props.modelValue : local.value, props.options, false)[0],\n);\nconst selected = computed(() => props.options.find((o) => o.id === id.value));\nwatch(\n () => selected.value?.id,\n () => {\n draft.value = null;\n },\n);\nconst text = computed(() => draft.value ?? selected.value?.label ?? '');\nconst filtered = computed(() =>\n draft.value === null ? props.options : filterOptions(props.options, draft.value),\n);\nconst invalid = computed(() => props.invalid || (tried.value && props.required && !id.value));\nconst error = computed(\n () =>\n props.errorMessage ??\n (props.required && !id.value ? (props.requiredMessage ?? 'Pilihan wajib diisi.') : undefined),\n);\nconst { controlId, describedBy, showError } = useFeedback({\n get description() {\n return props.description;\n },\n get invalid() {\n return invalid.value;\n },\n get errorMessage() {\n return error.value;\n },\n});\nfunction focus() {\n wrapper.value?.querySelector<HTMLInputElement>('.combobox__input')?.focus();\n}\nfunction change(value: unknown) {\n if (props.disabled) return;\n const next = selectionIds(value, props.options, false)[0];\n local.value = next;\n emit('update:modelValue', next);\n draft.value = null;\n}\nfunction search(value: string) {\n if (props.disabled) return;\n draft.value = value;\n if (value === '' && id.value) {\n local.value = undefined;\n emit('update:modelValue', undefined);\n }\n}\nfunction reset(cancelled: boolean) {\n if (!cancelled) {\n tried.value = false;\n draft.value = null;\n if (!controlled()) local.value = props.defaultValue;\n }\n}\n</script>\n<template>\n <div ref=\"wrapper\" class=\"select combobox\" :dir=\"dir\">\n <label class=\"select__label\" :for=\"controlId\"\n >{{ label\n }}<span v-if=\"required\" class=\"selection__required\" aria-hidden=\"true\"> *</span></label\n >\n <ComboboxRoot\n :model-value=\"id ?? null\"\n :disabled=\"disabled\"\n :dir=\"dir\"\n ignore-filter\n :reset-search-term-on-blur=\"false\"\n :reset-search-term-on-select=\"false\"\n @update:model-value=\"change\"\n @update:open=\"\n (open) => {\n if (!open) draft = null;\n }\n \"\n >\n <ComboboxAnchor\n class=\"combobox__control\"\n :data-invalid=\"invalid || undefined\"\n :data-disabled=\"disabled || undefined\"\n >\n <span v-if=\"$slots.start\" class=\"selection__leading\" aria-hidden=\"true\"\n ><slot name=\"start\"\n /></span>\n <ComboboxInput\n :id=\"controlId\"\n :model-value=\"text\"\n :display-value=\"() => selected?.label ?? ''\"\n class=\"combobox__input\"\n :placeholder=\"placeholder\"\n :aria-required=\"required || undefined\"\n :aria-invalid=\"invalid || undefined\"\n :aria-describedby=\"describedBy\"\n @update:model-value=\"search\"\n />\n <button\n v-if=\"clearable\"\n type=\"button\"\n class=\"combobox__clear\"\n :data-empty=\"(!id && !text) || undefined\"\n :aria-hidden=\"(!id && !text) || undefined\"\n :tabindex=\"!id && !text ? -1 : undefined\"\n :disabled=\"disabled || (!id && !text)\"\n :aria-label=\"clearLabel ?? 'Hapus pilihan'\"\n @click=\"\n change(undefined);\n focus();\n \"\n >\n <CloseIcon class=\"selection__close-icon\" />\n </button>\n <ComboboxTrigger class=\"combobox__toggle\" :aria-label=\"toggleLabel ?? 'Buka pilihan'\"\n ><ChevronIcon class=\"select__icon\"\n /></ComboboxTrigger>\n </ComboboxAnchor>\n <ComboboxPortal\n ><ComboboxContent\n class=\"select__popover combobox__popover\"\n position=\"popper\"\n :side-offset=\"4\"\n ><ComboboxViewport class=\"select__list\">\n <ComboboxItem\n v-for=\"option in filtered\"\n :key=\"option.id\"\n :value=\"option.id\"\n :text-value=\"option.label\"\n :disabled=\"option.isDisabled\"\n class=\"select__item\"\n ><span class=\"select__item-label\"\n ><slot name=\"option\" :option=\"option\"\n >{{ option.label\n }}<span v-if=\"option.description\" class=\"selection__description\">{{\n option.description\n }}</span></slot\n ></span\n ><CheckIcon class=\"select__check\"\n /></ComboboxItem>\n <span v-if=\"!filtered.length\" class=\"selection__empty\" role=\"status\">{{\n emptyMessage ?? 'Tidak ada pilihan.'\n }}</span>\n </ComboboxViewport></ComboboxContent\n ></ComboboxPortal\n >\n </ComboboxRoot>\n <FieldFeedback\n :control-id=\"controlId\"\n :description=\"description\"\n :error-message=\"error\"\n :show-error=\"showError\"\n />\n <input v-if=\"name\" type=\"hidden\" :name=\"name\" :value=\"id ?? ''\" :disabled=\"disabled\" />\n <SelectionValidation\n :has-value=\"!!id\"\n :required=\"required\"\n :disabled=\"disabled\"\n @invalid=\"\n tried = true;\n focus();\n \"\n @reset=\"reset\"\n />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref, getCurrentInstance, watch } from 'vue';\nimport {\n ComboboxRoot,\n ComboboxAnchor,\n ComboboxInput,\n ComboboxTrigger,\n ComboboxPortal,\n ComboboxContent,\n ComboboxViewport,\n ComboboxItem,\n} from 'reka-ui';\nimport ChevronIcon from './ChevronIcon.vue';\nimport CloseIcon from './CloseIcon.vue';\nimport CheckIcon from './CheckIcon.vue';\nimport FieldFeedback from './FieldFeedback.vue';\nimport SelectionValidation from './SelectionValidation.vue';\nimport { useFeedback } from './useFeedback.js';\nimport { selectionIds, filterOptions, type SelectOption } from './selection-options.js';\nconst props = defineProps<{\n label: string;\n options: SelectOption[];\n modelValue?: string;\n defaultValue?: string;\n placeholder?: string;\n name?: string;\n disabled?: boolean;\n required?: boolean;\n invalid?: boolean;\n description?: string;\n errorMessage?: string;\n requiredMessage?: string;\n clearable?: boolean;\n clearLabel?: string;\n toggleLabel?: string;\n emptyMessage?: string;\n dir?: 'ltr' | 'rtl';\n}>();\nconst emit = defineEmits<{ 'update:modelValue': [value: string | undefined] }>();\ndefineSlots<{\n start?: () => unknown;\n option?: (props: { option: SelectOption }) => unknown;\n}>();\nconst instance = getCurrentInstance();\nconst controlled = () =>\n Object.prototype.hasOwnProperty.call(instance?.vnode.props ?? {}, 'modelValue');\nconst local = ref(props.defaultValue);\nconst draft = ref<string | null>(null);\nconst tried = ref(false);\nconst wrapper = ref<HTMLDivElement>();\nconst id = computed(\n () => selectionIds(controlled() ? props.modelValue : local.value, props.options, false)[0],\n);\nconst selected = computed(() => props.options.find((o) => o.id === id.value));\nwatch(\n () => selected.value?.id,\n () => {\n draft.value = null;\n },\n);\nconst text = computed(() => draft.value ?? selected.value?.label ?? '');\nconst filtered = computed(() =>\n draft.value === null ? props.options : filterOptions(props.options, draft.value),\n);\nconst invalid = computed(() => props.invalid || (tried.value && props.required && !id.value));\nconst error = computed(\n () =>\n props.errorMessage ??\n (props.required && !id.value ? (props.requiredMessage ?? 'Pilihan wajib diisi.') : undefined),\n);\nconst { controlId, describedBy, showError } = useFeedback({\n get description() {\n return props.description;\n },\n get invalid() {\n return invalid.value;\n },\n get errorMessage() {\n return error.value;\n },\n});\nfunction focus() {\n wrapper.value?.querySelector<HTMLInputElement>('.combobox__input')?.focus();\n}\nfunction change(value: unknown) {\n if (props.disabled) return;\n const next = selectionIds(value, props.options, false)[0];\n local.value = next;\n emit('update:modelValue', next);\n draft.value = null;\n}\nfunction search(value: string) {\n if (props.disabled) return;\n draft.value = value;\n if (value === '' && id.value) {\n local.value = undefined;\n emit('update:modelValue', undefined);\n }\n}\nfunction reset(cancelled: boolean) {\n if (!cancelled) {\n tried.value = false;\n draft.value = null;\n if (!controlled()) local.value = props.defaultValue;\n }\n}\n</script>\n<template>\n <div ref=\"wrapper\" class=\"select combobox\" :dir=\"dir\">\n <label class=\"select__label\" :for=\"controlId\"\n >{{ label\n }}<span v-if=\"required\" class=\"selection__required\" aria-hidden=\"true\"> *</span></label\n >\n <ComboboxRoot\n :model-value=\"id ?? null\"\n :disabled=\"disabled\"\n :dir=\"dir\"\n ignore-filter\n :reset-search-term-on-blur=\"false\"\n :reset-search-term-on-select=\"false\"\n @update:model-value=\"change\"\n @update:open=\"\n (open) => {\n if (!open) draft = null;\n }\n \"\n >\n <ComboboxAnchor\n class=\"combobox__control\"\n :data-invalid=\"invalid || undefined\"\n :data-disabled=\"disabled || undefined\"\n >\n <span v-if=\"$slots.start\" class=\"selection__leading\" aria-hidden=\"true\"\n ><slot name=\"start\"\n /></span>\n <ComboboxInput\n :id=\"controlId\"\n :model-value=\"text\"\n :display-value=\"() => selected?.label ?? ''\"\n class=\"combobox__input\"\n :placeholder=\"placeholder\"\n :aria-required=\"required || undefined\"\n :aria-invalid=\"invalid || undefined\"\n :aria-describedby=\"describedBy\"\n @update:model-value=\"search\"\n />\n <button\n v-if=\"clearable\"\n type=\"button\"\n class=\"combobox__clear\"\n :data-empty=\"(!id && !text) || undefined\"\n :aria-hidden=\"(!id && !text) || undefined\"\n :tabindex=\"!id && !text ? -1 : undefined\"\n :disabled=\"disabled || (!id && !text)\"\n :aria-label=\"clearLabel ?? 'Hapus pilihan'\"\n @click=\"\n change(undefined);\n focus();\n \"\n >\n <CloseIcon class=\"selection__close-icon\" />\n </button>\n <ComboboxTrigger class=\"combobox__toggle\" :aria-label=\"toggleLabel ?? 'Buka pilihan'\"\n ><ChevronIcon class=\"select__icon\"\n /></ComboboxTrigger>\n </ComboboxAnchor>\n <ComboboxPortal\n ><ComboboxContent\n class=\"select__popover combobox__popover\"\n position=\"popper\"\n :side-offset=\"4\"\n ><ComboboxViewport class=\"select__list\">\n <ComboboxItem\n v-for=\"option in filtered\"\n :key=\"option.id\"\n :value=\"option.id\"\n :text-value=\"option.label\"\n :disabled=\"option.isDisabled\"\n class=\"select__item\"\n ><span class=\"select__item-label\"\n ><slot name=\"option\" :option=\"option\"\n >{{ option.label\n }}<span v-if=\"option.description\" class=\"selection__description\">{{\n option.description\n }}</span></slot\n ></span\n ><CheckIcon class=\"select__check\"\n /></ComboboxItem>\n <span v-if=\"!filtered.length\" class=\"selection__empty\" role=\"status\">{{\n emptyMessage ?? 'Tidak ada pilihan.'\n }}</span>\n </ComboboxViewport></ComboboxContent\n ></ComboboxPortal\n >\n </ComboboxRoot>\n <FieldFeedback\n :control-id=\"controlId\"\n :description=\"description\"\n :error-message=\"error\"\n :show-error=\"showError\"\n />\n <input v-if=\"name\" type=\"hidden\" :name=\"name\" :value=\"id ?? ''\" :disabled=\"disabled\" />\n <SelectionValidation\n :has-value=\"!!id\"\n :required=\"required\"\n :disabled=\"disabled\"\n @invalid=\"\n tried = true;\n focus();\n \"\n @reset=\"reset\"\n />\n </div>\n</template>\n","export interface ToggleGroupItem {\n id: string;\n label: string;\n isDisabled?: boolean;\n}\nexport type ToggleGroupMode = 'single' | 'multiple';\nexport type ToggleGroupVariant = 'outline' | 'ghost';\n/** Normalize IDs without discarding existing disabled selections. */\nexport function toggleIds(value: unknown, items: ToggleGroupItem[], multiple: boolean): string[] {\n const wanted = new Set(Array.isArray(value) ? value : typeof value === 'string' ? [value] : []);\n const result = [\n ...new Set(\n items.filter((item) => item.id !== '' && wanted.has(item.id)).map((item) => item.id),\n ),\n ];\n return multiple ? result : result.slice(0, 1);\n}\n","<script setup lang=\"ts\" generic=\"M extends 'single' | 'multiple' = 'single'\">\nimport { computed, getCurrentInstance, ref } from 'vue';\nimport { ToggleGroupRoot, ToggleGroupItem as RekaItem } from 'reka-ui';\nimport { toggleIds, type ToggleGroupItem, type ToggleGroupVariant } from './toggle-group-model.js';\nimport type { ButtonSize } from './types.js';\ntype Value = M extends 'multiple' ? string[] : string | null;\nconst props = defineProps<{\n label: string;\n items: ToggleGroupItem[];\n selectionMode?: M;\n modelValue?: Value;\n defaultValue?: Value;\n disabled?: boolean;\n iconOnly?: boolean;\n disallowEmptySelection?: boolean;\n variant?: ToggleGroupVariant;\n size?: ButtonSize;\n orientation?: 'horizontal' | 'vertical';\n dir?: 'ltr' | 'rtl';\n}>();\nconst emit = defineEmits<{ 'update:modelValue': [value: Value] }>();\ndefineSlots<{ icon?: (props: { item: ToggleGroupItem }) => unknown }>();\nconst instance = getCurrentInstance();\nconst controlled = () =>\n Object.prototype.hasOwnProperty.call(instance?.vnode.props ?? {}, 'modelValue');\nconst local = ref<unknown>(props.defaultValue);\nconst multiple = computed(() => props.selectionMode === 'multiple');\nconst ids = computed(() =>\n toggleIds(controlled() ? props.modelValue : local.value, props.items, multiple.value),\n);\nfunction update(value: unknown) {\n if (props.disabled) return;\n const requested = new Set(toggleIds(value, props.items, true));\n for (const item of props.items.filter((item) => item.isDisabled)) {\n if (multiple.value && ids.value.includes(item.id)) requested.add(item.id);\n else if (!ids.value.includes(item.id)) requested.delete(item.id);\n }\n const next = toggleIds([...requested], props.items, multiple.value);\n if (next.length === ids.value.length && next.every((id, index) => id === ids.value[index]))\n return;\n if (props.disallowEmptySelection && ids.value.length && !next.length) return;\n const result = (multiple.value ? next : (next[0] ?? null)) as Value;\n local.value = result;\n emit('update:modelValue', result);\n}\n</script>\n<template>\n <ToggleGroupRoot\n class=\"toggle-group\"\n :aria-label=\"label\"\n :type=\"multiple ? 'multiple' : 'single'\"\n :model-value=\"multiple ? ids : (ids[0] ?? '')\"\n :disabled=\"disabled\"\n :dir=\"dir\"\n :orientation=\"orientation ?? 'horizontal'\"\n :data-orientation=\"orientation ?? 'horizontal'\"\n :data-variant=\"variant ?? 'outline'\"\n :data-size=\"size ?? 'md'\"\n :data-icon-only=\"iconOnly || undefined\"\n @update:model-value=\"update\"\n >\n <RekaItem\n v-for=\"item in items\"\n :key=\"item.id\"\n :value=\"item.id\"\n type=\"button\"\n class=\"toggle-group__item\"\n :aria-label=\"item.label\"\n :disabled=\"disabled || item.isDisabled\"\n >\n <span v-if=\"$slots.icon\" class=\"toggle-group__icon\" aria-hidden=\"true\"\n ><slot name=\"icon\" :item=\"item\" /></span\n ><span v-if=\"!iconOnly\">{{ item.label }}</span>\n </RekaItem>\n </ToggleGroupRoot>\n</template>\n","<script setup lang=\"ts\" generic=\"M extends 'single' | 'multiple' = 'single'\">\nimport { computed, getCurrentInstance, ref } from 'vue';\nimport { ToggleGroupRoot, ToggleGroupItem as RekaItem } from 'reka-ui';\nimport { toggleIds, type ToggleGroupItem, type ToggleGroupVariant } from './toggle-group-model.js';\nimport type { ButtonSize } from './types.js';\ntype Value = M extends 'multiple' ? string[] : string | null;\nconst props = defineProps<{\n label: string;\n items: ToggleGroupItem[];\n selectionMode?: M;\n modelValue?: Value;\n defaultValue?: Value;\n disabled?: boolean;\n iconOnly?: boolean;\n disallowEmptySelection?: boolean;\n variant?: ToggleGroupVariant;\n size?: ButtonSize;\n orientation?: 'horizontal' | 'vertical';\n dir?: 'ltr' | 'rtl';\n}>();\nconst emit = defineEmits<{ 'update:modelValue': [value: Value] }>();\ndefineSlots<{ icon?: (props: { item: ToggleGroupItem }) => unknown }>();\nconst instance = getCurrentInstance();\nconst controlled = () =>\n Object.prototype.hasOwnProperty.call(instance?.vnode.props ?? {}, 'modelValue');\nconst local = ref<unknown>(props.defaultValue);\nconst multiple = computed(() => props.selectionMode === 'multiple');\nconst ids = computed(() =>\n toggleIds(controlled() ? props.modelValue : local.value, props.items, multiple.value),\n);\nfunction update(value: unknown) {\n if (props.disabled) return;\n const requested = new Set(toggleIds(value, props.items, true));\n for (const item of props.items.filter((item) => item.isDisabled)) {\n if (multiple.value && ids.value.includes(item.id)) requested.add(item.id);\n else if (!ids.value.includes(item.id)) requested.delete(item.id);\n }\n const next = toggleIds([...requested], props.items, multiple.value);\n if (next.length === ids.value.length && next.every((id, index) => id === ids.value[index]))\n return;\n if (props.disallowEmptySelection && ids.value.length && !next.length) return;\n const result = (multiple.value ? next : (next[0] ?? null)) as Value;\n local.value = result;\n emit('update:modelValue', result);\n}\n</script>\n<template>\n <ToggleGroupRoot\n class=\"toggle-group\"\n :aria-label=\"label\"\n :type=\"multiple ? 'multiple' : 'single'\"\n :model-value=\"multiple ? ids : (ids[0] ?? '')\"\n :disabled=\"disabled\"\n :dir=\"dir\"\n :orientation=\"orientation ?? 'horizontal'\"\n :data-orientation=\"orientation ?? 'horizontal'\"\n :data-variant=\"variant ?? 'outline'\"\n :data-size=\"size ?? 'md'\"\n :data-icon-only=\"iconOnly || undefined\"\n @update:model-value=\"update\"\n >\n <RekaItem\n v-for=\"item in items\"\n :key=\"item.id\"\n :value=\"item.id\"\n type=\"button\"\n class=\"toggle-group__item\"\n :aria-label=\"item.label\"\n :disabled=\"disabled || item.isDisabled\"\n >\n <span v-if=\"$slots.icon\" class=\"toggle-group__icon\" aria-hidden=\"true\"\n ><slot name=\"icon\" :item=\"item\" /></span\n ><span v-if=\"!iconOnly\">{{ item.label }}</span>\n </RekaItem>\n </ToggleGroupRoot>\n</template>\n","import {\n parseDate,\n today,\n getLocalTimeZone,\n startOfMonth,\n endOfMonth,\n startOfWeek,\n} from '@internationalized/date';\n\nexport interface DateRange {\n start: string;\n end: string;\n}\nexport interface DateRangePreset {\n id: string;\n label: string;\n value: DateRange;\n}\nexport interface DateRangeConstraints {\n minDate?: string;\n maxDate?: string;\n minDays?: number;\n maxDays?: number;\n isDateUnavailable?: (date: string) => boolean;\n}\nexport type DateRangeSize = 'sm' | 'md' | 'lg';\nexport type DateRangeVariant = 'primary' | 'secondary' | 'outline';\nexport interface DateRangeOptions extends DateRangeConstraints {\n label: string;\n defaultValue?: DateRange | null;\n size?: DateRangeSize;\n variant?: DateRangeVariant;\n hideLabel?: boolean;\n fullWidth?: boolean;\n locale?: string;\n dir?: 'ltr' | 'rtl';\n visibleMonths?: 1 | 2;\n weekStartsOn?: 0 | 1;\n display?: 'popover' | 'inline';\n showInputs?: boolean;\n showMonthYearPicker?: boolean;\n triggerDisplay?: 'text' | 'icon';\n presets?: DateRangePreset[];\n labels?: Partial<DateRangeLabels>;\n formatRange?: (value: DateRange, locale: string) => string;\n description?: string;\n errorMessage?: string;\n name?: string;\n referenceDate?: string;\n open?: boolean;\n defaultOpen?: boolean;\n}\nexport type DateRangeError = 'incomplete' | 'order' | 'bounds' | 'unavailable' | 'length';\nexport interface DateRangeLabels {\n title: string;\n start: string;\n end: string;\n apply: string;\n cancel: string;\n clear: string;\n previousMonth: string;\n nextMonth: string;\n presets: string;\n placeholder: string;\n incomplete: string;\n order: string;\n bounds: string;\n unavailable: string;\n length: string;\n required: string;\n}\nexport function dateRangeLabels(locale = 'id-ID'): DateRangeLabels {\n return locale.startsWith('id')\n ? {\n title: 'Pilih rentang tanggal',\n start: 'Tanggal mulai',\n end: 'Tanggal akhir',\n apply: 'Terapkan',\n cancel: 'Batal',\n clear: 'Kosongkan',\n previousMonth: 'Bulan sebelumnya',\n nextMonth: 'Bulan berikutnya',\n presets: 'Pilihan cepat',\n placeholder: 'Pilih tanggal',\n incomplete: 'Lengkapi tanggal mulai dan akhir.',\n order: 'Tanggal akhir harus setelah atau sama dengan tanggal mulai.',\n bounds: 'Tanggal berada di luar batas yang diizinkan.',\n unavailable: 'Rentang memuat tanggal yang tidak tersedia.',\n length: 'Durasi rentang tidak sesuai batas yang diizinkan.',\n required: 'Rentang tanggal wajib diisi.',\n }\n : {\n title: 'Select date range',\n start: 'Start date',\n end: 'End date',\n apply: 'Apply',\n cancel: 'Cancel',\n clear: 'Clear',\n previousMonth: 'Previous month',\n nextMonth: 'Next month',\n presets: 'Quick selections',\n placeholder: 'Choose dates',\n incomplete: 'Enter both start and end dates.',\n order: 'End date must be on or after start date.',\n bounds: 'Dates are outside the allowed limits.',\n unavailable: 'The range includes an unavailable date.',\n length: 'The range duration is outside the allowed limits.',\n required: 'A date range is required.',\n };\n}\nexport function validDate(value: string): boolean {\n if (!/^(?!0000)\\d{4}-\\d{2}-\\d{2}$/.test(value)) return false;\n try {\n return parseDate(value).toString() === value;\n } catch {\n return false;\n }\n}\nexport function asDate(value?: string) {\n return value && validDate(value) ? parseDate(value) : undefined;\n}\nexport function currentDate() {\n return today(getLocalTimeZone()).toString();\n}\nexport function rangeError(\n value: DateRange | null,\n constraints: DateRangeConstraints = {},\n): DateRangeError | null {\n if (!value) return null;\n if (!validDate(value.start) || !validDate(value.end)) return 'incomplete';\n if (value.end < value.start) return 'order';\n if (\n (constraints.minDate && value.start < constraints.minDate) ||\n (constraints.maxDate && value.end > constraints.maxDate)\n )\n return 'bounds';\n const start = parseDate(value.start),\n end = parseDate(value.end);\n const days = end.calendar.toJulianDay(end) - start.calendar.toJulianDay(start) + 1;\n if (\n (constraints.minDays && days < constraints.minDays) ||\n (constraints.maxDays && days > constraints.maxDays)\n )\n return 'length';\n if (constraints.isDateUnavailable) {\n for (let day = start; day.compare(end) <= 0; day = day.add({ days: 1 })) {\n if (constraints.isDateUnavailable(day.toString())) return 'unavailable';\n if (day.compare(end) === 0) break;\n }\n }\n return null;\n}\nexport function rangeText(value: DateRange | null, locale = 'id-ID'): string {\n if (!value || !validDate(value.start) || !validDate(value.end)) return '';\n const formatter = new Intl.DateTimeFormat(locale, {\n day: 'numeric',\n month: 'short',\n year: 'numeric',\n timeZone: 'UTC',\n calendar: 'gregory',\n });\n const date = (s: string) => parseDate(s).toDate('UTC');\n return value.start === value.end\n ? formatter.format(date(value.start))\n : `${formatter.format(date(value.start))} – ${formatter.format(date(value.end))}`;\n}\nexport function createDateRangePresets(\n referenceDate = currentDate(),\n locale = 'id-ID',\n weekStartsOn: 0 | 1 = 1,\n): DateRangePreset[] {\n const day = parseDate(referenceDate),\n week = startOfWeek(day, locale, weekStartsOn === 1 ? 'mon' : 'sun');\n const id = locale.startsWith('id');\n return [\n {\n id: 'this-week',\n label: id ? 'Minggu ini' : 'This Week',\n start: week,\n end: week.add({ days: 6 }),\n },\n {\n id: 'last-week',\n label: id ? 'Minggu lalu' : 'Last Week',\n start: week.subtract({ days: 7 }),\n end: week.subtract({ days: 1 }),\n },\n {\n id: 'last-7-days',\n label: id ? '7 hari terakhir' : 'Last 7 Days',\n start: day.subtract({ days: 6 }),\n end: day,\n },\n {\n id: 'last-30-days',\n label: id ? '30 hari terakhir' : 'Last 30 Days',\n start: day.subtract({ days: 29 }),\n end: day,\n },\n {\n id: 'this-month',\n label: id ? 'Bulan ini' : 'Current Month',\n start: startOfMonth(day),\n end: endOfMonth(day),\n },\n {\n id: 'next-month',\n label: id ? 'Bulan depan' : 'Next Month',\n start: startOfMonth(day.add({ months: 1 })),\n end: endOfMonth(day.add({ months: 1 })),\n },\n ].map(({ id, label, start, end }) => ({\n id,\n label,\n value: { start: start.toString(), end: end.toString() },\n }));\n}\n","<script setup lang=\"ts\">\nimport { computed, shallowRef, watch } from 'vue';\nimport {\n RangeCalendarRoot,\n RangeCalendarPrev,\n RangeCalendarNext,\n RangeCalendarGrid,\n RangeCalendarGridHead,\n RangeCalendarGridRow,\n RangeCalendarHeadCell,\n RangeCalendarGridBody,\n RangeCalendarCell,\n RangeCalendarCellTrigger,\n type DateRange as CalendarRange,\n} from 'reka-ui';\nimport { type DateValue } from '@internationalized/date';\nimport ChevronIcon from './ChevronIcon.vue';\nimport {\n asDate,\n currentDate,\n rangeError,\n rangeText,\n type DateRange,\n type DateRangeOptions,\n type DateRangeLabels,\n} from './date-range-model.js';\nconst props = defineProps<{\n options: DateRangeOptions;\n draft: DateRange;\n labels: DateRangeLabels;\n id: string;\n disabled: boolean;\n readonly: boolean;\n required: boolean;\n}>();\nconst emit = defineEmits<{ draft: [value: DateRange]; apply: []; cancel: [] }>();\nconst locale = computed(() => props.options.locale ?? 'id-ID');\nconst nullable = computed(() => (props.draft.start || props.draft.end ? props.draft : null));\nconst errorCode = computed(\n () =>\n rangeError(nullable.value, props.options) ??\n (props.required && !nullable.value ? 'required' : null),\n);\nconst error = computed(() => (errorCode.value ? props.labels[errorCode.value] : undefined));\nfunction initialFocus() {\n const date =\n asDate(props.draft.start) ?? asDate(props.options.referenceDate) ?? asDate(currentDate())!;\n const min = asDate(props.options.minDate),\n max = asDate(props.options.maxDate);\n return min && date.compare(min) < 0 ? min : max && date.compare(max) > 0 ? max : date;\n}\nconst focused = shallowRef<DateValue>(initialFocus());\nwatch(\n () => props.draft.start,\n () => {\n if (asDate(props.draft.start)) focused.value = asDate(props.draft.start)!;\n },\n);\nconst calendarValue = computed(() => ({\n start: asDate(props.draft.start),\n end: props.draft.start <= props.draft.end ? asDate(props.draft.end) : undefined,\n}));\nfunction select(value: CalendarRange) {\n if (!props.disabled && !props.readonly)\n emit('draft', { start: value.start?.toString() ?? '', end: value.end?.toString() ?? '' });\n}\nfunction edit(part: 'start' | 'end', event: Event) {\n emit('draft', { ...props.draft, [part]: (event.target as HTMLInputElement).value });\n}\nfunction jumpYear(event: Event) {\n const el = event.target as HTMLInputElement;\n const year = Number(el.value);\n if (Number.isInteger(year) && year >= 1 && year <= 9999)\n focused.value = focused.value.set({ year });\n else el.value = String(focused.value.year);\n}\nconst monthLabel = (date: DateValue) =>\n new Intl.DateTimeFormat(locale.value, {\n month: 'long',\n year: 'numeric',\n calendar: 'gregory',\n timeZone: 'UTC',\n }).format(date.toDate('UTC'));\nconst unavailable = (date: DateValue) =>\n props.options.isDateUnavailable?.(date.toString()) ?? false;\n</script>\n<template>\n <div class=\"date-range__content\" :data-readonly=\"readonly || undefined\">\n <header class=\"date-range__intro\">\n <h2 :id=\"`${id}-title`\">{{ labels.title }}</h2>\n <p class=\"date-range__summary\" aria-live=\"polite\">\n {{ rangeText(nullable, locale) || labels.incomplete }}\n </p>\n </header>\n <div class=\"date-range__body\">\n <div\n v-if=\"options.presets?.length\"\n class=\"date-range__presets\"\n role=\"group\"\n :aria-label=\"labels.presets\"\n >\n <button\n v-for=\"preset in options.presets\"\n :key=\"preset.id\"\n type=\"button\"\n class=\"date-range__preset\"\n :disabled=\"disabled || readonly || !!rangeError(preset.value, options)\"\n :aria-pressed=\"draft.start === preset.value.start && draft.end === preset.value.end\"\n @click=\"emit('draft', { ...preset.value })\"\n >\n {{ preset.label }}\n </button>\n </div>\n <div class=\"date-range__main\">\n <div v-if=\"options.showMonthYearPicker\" class=\"date-range__jump\">\n <label\n ><span>{{ locale.startsWith('id') ? 'Bulan' : 'Month' }}</span\n ><select\n form=\"\"\n :aria-label=\"locale.startsWith('id') ? 'Bulan' : 'Month'\"\n :disabled=\"disabled\"\n :value=\"focused.month\"\n @change=\"\n focused = focused.set({ month: Number(($event.target as HTMLSelectElement).value) })\n \"\n >\n <option v-for=\"month in 12\" :key=\"month\" :value=\"month\">\n {{\n new Intl.DateTimeFormat(locale, {\n month: 'long',\n timeZone: 'UTC',\n calendar: 'gregory',\n }).format(focused.set({ month, day: 1 }).toDate('UTC'))\n }}\n </option>\n </select></label\n ><label\n ><span>{{ locale.startsWith('id') ? 'Tahun' : 'Year' }}</span\n ><input\n type=\"number\"\n form=\"\"\n :disabled=\"disabled\"\n :value=\"focused.year\"\n :min=\"asDate(options.minDate)?.year ?? 1\"\n :max=\"asDate(options.maxDate)?.year ?? 9999\"\n @change=\"jumpYear\"\n /></label>\n </div>\n <div v-if=\"options.showInputs !== false\" class=\"date-range__inputs\">\n <label v-for=\"part in ['start', 'end'] as const\" :key=\"part\" class=\"date-range__field\"\n ><span>{{ labels[part] }}</span\n ><input\n type=\"date\"\n form=\"\"\n :value=\"draft[part]\"\n :min=\"options.minDate\"\n :max=\"options.maxDate\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n :aria-invalid=\"!!errorCode\"\n :aria-describedby=\"error ? `${id}-draft-error` : undefined\"\n @input=\"edit(part, $event)\"\n /></label>\n </div>\n <RangeCalendarRoot\n v-slot=\"{ grid, weekDays }\"\n v-model:placeholder=\"focused\"\n class=\"date-range__calendar\"\n :model-value=\"calendarValue\"\n :number-of-months=\"options.visibleMonths ?? 2\"\n :week-starts-on=\"options.weekStartsOn ?? 1\"\n weekday-format=\"short\"\n :calendar-label=\"labels.title\"\n :locale=\"`${locale.split('-u-')[0]}-u-ca-gregory`\"\n :dir=\"options.dir\"\n :min-value=\"asDate(options.minDate)\"\n :max-value=\"asDate(options.maxDate)\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n :is-date-unavailable=\"unavailable\"\n @update:model-value=\"select\"\n >\n <div class=\"date-range__navigation\">\n <RangeCalendarPrev\n as=\"button\"\n type=\"button\"\n class=\"date-range__nav date-range__nav--previous\"\n :aria-label=\"labels.previousMonth\"\n ><ChevronIcon /></RangeCalendarPrev\n ><RangeCalendarNext\n as=\"button\"\n type=\"button\"\n class=\"date-range__nav date-range__nav--next\"\n :aria-label=\"labels.nextMonth\"\n ><ChevronIcon\n /></RangeCalendarNext>\n </div>\n <div class=\"date-range__months\">\n <div v-for=\"month in grid\" :key=\"month.value.toString()\" class=\"date-range__month\">\n <h2 class=\"date-range__heading\">{{ monthLabel(month.value) }}</h2>\n <RangeCalendarGrid class=\"date-range__grid\"\n ><RangeCalendarGridHead\n ><RangeCalendarGridRow\n ><RangeCalendarHeadCell\n v-for=\"day in weekDays\"\n :key=\"day\"\n class=\"date-range__weekday\"\n >{{ day }}</RangeCalendarHeadCell\n ></RangeCalendarGridRow\n ></RangeCalendarGridHead\n >\n <RangeCalendarGridBody\n ><RangeCalendarGridRow v-for=\"(week, index) in month.rows\" :key=\"index\"\n ><RangeCalendarCell v-for=\"date in week\" :key=\"date.toString()\" :date=\"date\"\n ><RangeCalendarCellTrigger\n class=\"date-range__day\"\n :day=\"date\"\n :month=\"\n month.value\n \" /></RangeCalendarCell></RangeCalendarGridRow></RangeCalendarGridBody\n ></RangeCalendarGrid>\n </div>\n </div>\n </RangeCalendarRoot>\n <div class=\"date-range__validation\" aria-live=\"polite\">\n <p v-if=\"error\" :id=\"`${id}-draft-error`\" role=\"alert\">{{ error }}</p>\n </div>\n </div>\n </div>\n <footer class=\"date-range__footer\">\n <button\n type=\"button\"\n class=\"button button--ghost button--sm\"\n :disabled=\"disabled || readonly\"\n @click=\"emit('draft', { start: '', end: '' })\"\n >\n {{ labels.clear }}\n </button>\n <div>\n <button\n type=\"button\"\n class=\"button button--secondary button--sm date-range__cancel\"\n @click=\"emit('cancel')\"\n >\n {{ labels.cancel }}</button\n ><button\n type=\"button\"\n class=\"button button--primary button--sm date-range__apply\"\n :disabled=\"disabled || readonly || !!errorCode\"\n @click=\"emit('apply')\"\n >\n {{ labels.apply }}\n </button>\n </div>\n </footer>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, shallowRef, watch } from 'vue';\nimport {\n RangeCalendarRoot,\n RangeCalendarPrev,\n RangeCalendarNext,\n RangeCalendarGrid,\n RangeCalendarGridHead,\n RangeCalendarGridRow,\n RangeCalendarHeadCell,\n RangeCalendarGridBody,\n RangeCalendarCell,\n RangeCalendarCellTrigger,\n type DateRange as CalendarRange,\n} from 'reka-ui';\nimport { type DateValue } from '@internationalized/date';\nimport ChevronIcon from './ChevronIcon.vue';\nimport {\n asDate,\n currentDate,\n rangeError,\n rangeText,\n type DateRange,\n type DateRangeOptions,\n type DateRangeLabels,\n} from './date-range-model.js';\nconst props = defineProps<{\n options: DateRangeOptions;\n draft: DateRange;\n labels: DateRangeLabels;\n id: string;\n disabled: boolean;\n readonly: boolean;\n required: boolean;\n}>();\nconst emit = defineEmits<{ draft: [value: DateRange]; apply: []; cancel: [] }>();\nconst locale = computed(() => props.options.locale ?? 'id-ID');\nconst nullable = computed(() => (props.draft.start || props.draft.end ? props.draft : null));\nconst errorCode = computed(\n () =>\n rangeError(nullable.value, props.options) ??\n (props.required && !nullable.value ? 'required' : null),\n);\nconst error = computed(() => (errorCode.value ? props.labels[errorCode.value] : undefined));\nfunction initialFocus() {\n const date =\n asDate(props.draft.start) ?? asDate(props.options.referenceDate) ?? asDate(currentDate())!;\n const min = asDate(props.options.minDate),\n max = asDate(props.options.maxDate);\n return min && date.compare(min) < 0 ? min : max && date.compare(max) > 0 ? max : date;\n}\nconst focused = shallowRef<DateValue>(initialFocus());\nwatch(\n () => props.draft.start,\n () => {\n if (asDate(props.draft.start)) focused.value = asDate(props.draft.start)!;\n },\n);\nconst calendarValue = computed(() => ({\n start: asDate(props.draft.start),\n end: props.draft.start <= props.draft.end ? asDate(props.draft.end) : undefined,\n}));\nfunction select(value: CalendarRange) {\n if (!props.disabled && !props.readonly)\n emit('draft', { start: value.start?.toString() ?? '', end: value.end?.toString() ?? '' });\n}\nfunction edit(part: 'start' | 'end', event: Event) {\n emit('draft', { ...props.draft, [part]: (event.target as HTMLInputElement).value });\n}\nfunction jumpYear(event: Event) {\n const el = event.target as HTMLInputElement;\n const year = Number(el.value);\n if (Number.isInteger(year) && year >= 1 && year <= 9999)\n focused.value = focused.value.set({ year });\n else el.value = String(focused.value.year);\n}\nconst monthLabel = (date: DateValue) =>\n new Intl.DateTimeFormat(locale.value, {\n month: 'long',\n year: 'numeric',\n calendar: 'gregory',\n timeZone: 'UTC',\n }).format(date.toDate('UTC'));\nconst unavailable = (date: DateValue) =>\n props.options.isDateUnavailable?.(date.toString()) ?? false;\n</script>\n<template>\n <div class=\"date-range__content\" :data-readonly=\"readonly || undefined\">\n <header class=\"date-range__intro\">\n <h2 :id=\"`${id}-title`\">{{ labels.title }}</h2>\n <p class=\"date-range__summary\" aria-live=\"polite\">\n {{ rangeText(nullable, locale) || labels.incomplete }}\n </p>\n </header>\n <div class=\"date-range__body\">\n <div\n v-if=\"options.presets?.length\"\n class=\"date-range__presets\"\n role=\"group\"\n :aria-label=\"labels.presets\"\n >\n <button\n v-for=\"preset in options.presets\"\n :key=\"preset.id\"\n type=\"button\"\n class=\"date-range__preset\"\n :disabled=\"disabled || readonly || !!rangeError(preset.value, options)\"\n :aria-pressed=\"draft.start === preset.value.start && draft.end === preset.value.end\"\n @click=\"emit('draft', { ...preset.value })\"\n >\n {{ preset.label }}\n </button>\n </div>\n <div class=\"date-range__main\">\n <div v-if=\"options.showMonthYearPicker\" class=\"date-range__jump\">\n <label\n ><span>{{ locale.startsWith('id') ? 'Bulan' : 'Month' }}</span\n ><select\n form=\"\"\n :aria-label=\"locale.startsWith('id') ? 'Bulan' : 'Month'\"\n :disabled=\"disabled\"\n :value=\"focused.month\"\n @change=\"\n focused = focused.set({ month: Number(($event.target as HTMLSelectElement).value) })\n \"\n >\n <option v-for=\"month in 12\" :key=\"month\" :value=\"month\">\n {{\n new Intl.DateTimeFormat(locale, {\n month: 'long',\n timeZone: 'UTC',\n calendar: 'gregory',\n }).format(focused.set({ month, day: 1 }).toDate('UTC'))\n }}\n </option>\n </select></label\n ><label\n ><span>{{ locale.startsWith('id') ? 'Tahun' : 'Year' }}</span\n ><input\n type=\"number\"\n form=\"\"\n :disabled=\"disabled\"\n :value=\"focused.year\"\n :min=\"asDate(options.minDate)?.year ?? 1\"\n :max=\"asDate(options.maxDate)?.year ?? 9999\"\n @change=\"jumpYear\"\n /></label>\n </div>\n <div v-if=\"options.showInputs !== false\" class=\"date-range__inputs\">\n <label v-for=\"part in ['start', 'end'] as const\" :key=\"part\" class=\"date-range__field\"\n ><span>{{ labels[part] }}</span\n ><input\n type=\"date\"\n form=\"\"\n :value=\"draft[part]\"\n :min=\"options.minDate\"\n :max=\"options.maxDate\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n :aria-invalid=\"!!errorCode\"\n :aria-describedby=\"error ? `${id}-draft-error` : undefined\"\n @input=\"edit(part, $event)\"\n /></label>\n </div>\n <RangeCalendarRoot\n v-slot=\"{ grid, weekDays }\"\n v-model:placeholder=\"focused\"\n class=\"date-range__calendar\"\n :model-value=\"calendarValue\"\n :number-of-months=\"options.visibleMonths ?? 2\"\n :week-starts-on=\"options.weekStartsOn ?? 1\"\n weekday-format=\"short\"\n :calendar-label=\"labels.title\"\n :locale=\"`${locale.split('-u-')[0]}-u-ca-gregory`\"\n :dir=\"options.dir\"\n :min-value=\"asDate(options.minDate)\"\n :max-value=\"asDate(options.maxDate)\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n :is-date-unavailable=\"unavailable\"\n @update:model-value=\"select\"\n >\n <div class=\"date-range__navigation\">\n <RangeCalendarPrev\n as=\"button\"\n type=\"button\"\n class=\"date-range__nav date-range__nav--previous\"\n :aria-label=\"labels.previousMonth\"\n ><ChevronIcon /></RangeCalendarPrev\n ><RangeCalendarNext\n as=\"button\"\n type=\"button\"\n class=\"date-range__nav date-range__nav--next\"\n :aria-label=\"labels.nextMonth\"\n ><ChevronIcon\n /></RangeCalendarNext>\n </div>\n <div class=\"date-range__months\">\n <div v-for=\"month in grid\" :key=\"month.value.toString()\" class=\"date-range__month\">\n <h2 class=\"date-range__heading\">{{ monthLabel(month.value) }}</h2>\n <RangeCalendarGrid class=\"date-range__grid\"\n ><RangeCalendarGridHead\n ><RangeCalendarGridRow\n ><RangeCalendarHeadCell\n v-for=\"day in weekDays\"\n :key=\"day\"\n class=\"date-range__weekday\"\n >{{ day }}</RangeCalendarHeadCell\n ></RangeCalendarGridRow\n ></RangeCalendarGridHead\n >\n <RangeCalendarGridBody\n ><RangeCalendarGridRow v-for=\"(week, index) in month.rows\" :key=\"index\"\n ><RangeCalendarCell v-for=\"date in week\" :key=\"date.toString()\" :date=\"date\"\n ><RangeCalendarCellTrigger\n class=\"date-range__day\"\n :day=\"date\"\n :month=\"\n month.value\n \" /></RangeCalendarCell></RangeCalendarGridRow></RangeCalendarGridBody\n ></RangeCalendarGrid>\n </div>\n </div>\n </RangeCalendarRoot>\n <div class=\"date-range__validation\" aria-live=\"polite\">\n <p v-if=\"error\" :id=\"`${id}-draft-error`\" role=\"alert\">{{ error }}</p>\n </div>\n </div>\n </div>\n <footer class=\"date-range__footer\">\n <button\n type=\"button\"\n class=\"button button--ghost button--sm\"\n :disabled=\"disabled || readonly\"\n @click=\"emit('draft', { start: '', end: '' })\"\n >\n {{ labels.clear }}\n </button>\n <div>\n <button\n type=\"button\"\n class=\"button button--secondary button--sm date-range__cancel\"\n @click=\"emit('cancel')\"\n >\n {{ labels.cancel }}</button\n ><button\n type=\"button\"\n class=\"button button--primary button--sm date-range__apply\"\n :disabled=\"disabled || readonly || !!errorCode\"\n @click=\"emit('apply')\"\n >\n {{ labels.apply }}\n </button>\n </div>\n </footer>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref, watch } from 'vue';\nimport { PopoverRoot, PopoverTrigger, PopoverPortal, PopoverContent, useId } from 'reka-ui';\nimport ChevronIcon from './ChevronIcon.vue';\nimport DateRangePanel from './DateRangePanel.vue';\nimport SelectionValidation from './SelectionValidation.vue';\nimport {\n dateRangeLabels,\n rangeError,\n rangeText,\n type DateRange,\n type DateRangeOptions,\n} from './date-range-model.js';\nimport { useDisclosure } from './useDisclosure.js';\ndefineOptions({ inheritAttrs: false });\ninterface Props extends DateRangeOptions {\n modelValue?: DateRange | null;\n disabled?: boolean;\n readonly?: boolean;\n required?: boolean;\n invalid?: boolean;\n}\nconst props = withDefaults(defineProps<Props>(), {\n modelValue: undefined,\n defaultValue: null,\n size: 'md',\n variant: 'primary',\n fullWidth: true,\n locale: 'id-ID',\n dir: undefined,\n visibleMonths: 2,\n weekStartsOn: 1,\n display: 'popover',\n showInputs: true,\n showMonthYearPicker: false,\n triggerDisplay: 'text',\n presets: () => [],\n labels: undefined,\n formatRange: undefined,\n description: undefined,\n errorMessage: undefined,\n name: undefined,\n referenceDate: undefined,\n open: undefined,\n defaultOpen: false,\n minDate: undefined,\n maxDate: undefined,\n minDays: undefined,\n maxDays: undefined,\n isDateUnavailable: undefined,\n});\nconst emit = defineEmits<{\n 'update:modelValue': [value: DateRange | null];\n 'update:open': [open: boolean];\n apply: [value: DateRange | null];\n}>();\nconst local = ref<DateRange | null>(props.defaultValue);\nconst committed = computed(() => (props.modelValue !== undefined ? props.modelValue : local.value));\nconst draft = ref<DateRange>({ ...(committed.value ?? { start: '', end: '' }) });\nwatch(\n () => [committed.value?.start, committed.value?.end],\n () => {\n draft.value = { ...(committed.value ?? { start: '', end: '' }) };\n },\n);\nconst labels = computed(() => ({ ...dateRangeLabels(props.locale), ...props.labels }));\nconst id = useId(),\n root = ref<HTMLDivElement>(),\n formError = ref(false);\nconst disclosure = useDisclosure(props, (next) => emit('update:open', next));\nconst visible = computed(() => disclosure.visible.value && !props.disabled);\nfunction changeOpen(next: boolean) {\n if (next && props.disabled) return;\n draft.value = { ...(committed.value ?? { start: '', end: '' }) };\n disclosure.change(next);\n}\nconst committedError = computed(() => rangeError(committed.value, props));\nconst outerError = computed(() => props.invalid || !!committedError.value || formError.value);\nconst text = computed(() => {\n const value = committed.value;\n if (!value) return labels.value.placeholder;\n const preset = props.presets.find(\n (p) => p.value.start === value.start && p.value.end === value.end,\n );\n return (\n props.formatRange?.(value, props.locale) ?? preset?.label ?? rangeText(value, props.locale)\n );\n});\nfunction apply() {\n const next = draft.value.start || draft.value.end ? { ...draft.value } : null;\n if (props.disabled || props.readonly || rangeError(next, props) || (props.required && !next))\n return;\n local.value = next;\n formError.value = false;\n emit('update:modelValue', next);\n emit('apply', next);\n disclosure.change(false);\n}\nfunction reset(cancelled: boolean) {\n if (!cancelled) {\n if (props.modelValue === undefined) local.value = props.defaultValue;\n formError.value = false;\n changeOpen(false);\n }\n}\nconst describedBy = computed(() =>\n outerError.value ? `${id}-error` : props.description ? `${id}-description` : undefined,\n);\n</script>\n<template>\n <div\n ref=\"root\"\n :class=\"[\n 'date-range',\n `date-range--${size}`,\n `date-range--${variant}`,\n !fullWidth && 'date-range--fit',\n hideLabel && 'date-range--label-hidden',\n triggerDisplay === 'icon' && 'date-range--icon-trigger',\n ]\"\n :dir=\"dir\"\n :data-disabled=\"disabled || undefined\"\n >\n <span :id=\"`${id}-label`\" class=\"date-range__label\"\n >{{ label }}<span v-if=\"required\" aria-hidden=\"true\"> *</span></span\n >\n <section\n v-if=\"display === 'inline'\"\n class=\"date-range__panel date-range__inline\"\n :aria-labelledby=\"`${id}-title`\"\n :dir=\"dir\"\n >\n <DateRangePanel\n :id=\"id\"\n :options=\"props\"\n :draft=\"draft\"\n :labels=\"labels\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n :required=\"required\"\n @draft=\"draft = $event\"\n @apply=\"apply\"\n @cancel=\"changeOpen(false)\"\n />\n </section>\n <PopoverRoot v-else :open=\"visible\" @update:open=\"changeOpen\"\n ><PopoverTrigger\n class=\"date-range__trigger\"\n :disabled=\"disabled\"\n :aria-labelledby=\"`${id}-label ${id}-value`\"\n :aria-describedby=\"describedBy\"\n :aria-invalid=\"outerError\"\n >\n <svg\n class=\"date-range__icon\"\n aria-hidden=\"true\"\n focusable=\"false\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.8\"\n stroke-linecap=\"round\"\n >\n <rect x=\"3\" y=\"5\" width=\"18\" height=\"16\" rx=\"2\" />\n <path d=\"M7 3v4m10-4v4M3 10h18\" /></svg\n ><span\n :id=\"`${id}-value`\"\n class=\"date-range__value\"\n :data-placeholder=\"!committed || undefined\"\n >{{ text }}</span\n ><ChevronIcon class=\"date-range__chevron\" /> </PopoverTrigger\n ><PopoverPortal\n ><PopoverContent\n as-child\n side=\"bottom\"\n align=\"start\"\n :side-offset=\"8\"\n :collision-padding=\"16\"\n ><div\n class=\"date-range__panel date-range__dialog\"\n :dir=\"dir\"\n :aria-labelledby=\"`${id}-title`\"\n >\n <DateRangePanel\n :id=\"id\"\n :options=\"props\"\n :draft=\"draft\"\n :labels=\"labels\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n :required=\"required\"\n @draft=\"draft = $event\"\n @apply=\"apply\"\n @cancel=\"changeOpen(false)\"\n /></div></PopoverContent></PopoverPortal\n ></PopoverRoot>\n <span v-if=\"description\" :id=\"`${id}-description`\" class=\"input__description\">{{\n description\n }}</span>\n <span v-if=\"outerError\" :id=\"`${id}-error`\" class=\"input__error\" role=\"alert\">{{\n errorMessage ?? (committedError ? labels[committedError] : labels.required)\n }}</span>\n <template v-if=\"name\"\n ><input\n type=\"hidden\"\n :name=\"`${name}.start`\"\n :value=\"committed?.start ?? ''\"\n :disabled=\"disabled\" /><input\n type=\"hidden\"\n :name=\"`${name}.end`\"\n :value=\"committed?.end ?? ''\"\n :disabled=\"disabled\"\n /></template>\n <SelectionValidation\n :has-value=\"!!committed && !committedError\"\n :required=\"required || !!committedError\"\n :disabled=\"disabled\"\n @invalid=\"\n formError = true;\n root?.querySelector<HTMLButtonElement>('.date-range__trigger')?.focus();\n \"\n @reset=\"reset\"\n />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref, watch } from 'vue';\nimport { PopoverRoot, PopoverTrigger, PopoverPortal, PopoverContent, useId } from 'reka-ui';\nimport ChevronIcon from './ChevronIcon.vue';\nimport DateRangePanel from './DateRangePanel.vue';\nimport SelectionValidation from './SelectionValidation.vue';\nimport {\n dateRangeLabels,\n rangeError,\n rangeText,\n type DateRange,\n type DateRangeOptions,\n} from './date-range-model.js';\nimport { useDisclosure } from './useDisclosure.js';\ndefineOptions({ inheritAttrs: false });\ninterface Props extends DateRangeOptions {\n modelValue?: DateRange | null;\n disabled?: boolean;\n readonly?: boolean;\n required?: boolean;\n invalid?: boolean;\n}\nconst props = withDefaults(defineProps<Props>(), {\n modelValue: undefined,\n defaultValue: null,\n size: 'md',\n variant: 'primary',\n fullWidth: true,\n locale: 'id-ID',\n dir: undefined,\n visibleMonths: 2,\n weekStartsOn: 1,\n display: 'popover',\n showInputs: true,\n showMonthYearPicker: false,\n triggerDisplay: 'text',\n presets: () => [],\n labels: undefined,\n formatRange: undefined,\n description: undefined,\n errorMessage: undefined,\n name: undefined,\n referenceDate: undefined,\n open: undefined,\n defaultOpen: false,\n minDate: undefined,\n maxDate: undefined,\n minDays: undefined,\n maxDays: undefined,\n isDateUnavailable: undefined,\n});\nconst emit = defineEmits<{\n 'update:modelValue': [value: DateRange | null];\n 'update:open': [open: boolean];\n apply: [value: DateRange | null];\n}>();\nconst local = ref<DateRange | null>(props.defaultValue);\nconst committed = computed(() => (props.modelValue !== undefined ? props.modelValue : local.value));\nconst draft = ref<DateRange>({ ...(committed.value ?? { start: '', end: '' }) });\nwatch(\n () => [committed.value?.start, committed.value?.end],\n () => {\n draft.value = { ...(committed.value ?? { start: '', end: '' }) };\n },\n);\nconst labels = computed(() => ({ ...dateRangeLabels(props.locale), ...props.labels }));\nconst id = useId(),\n root = ref<HTMLDivElement>(),\n formError = ref(false);\nconst disclosure = useDisclosure(props, (next) => emit('update:open', next));\nconst visible = computed(() => disclosure.visible.value && !props.disabled);\nfunction changeOpen(next: boolean) {\n if (next && props.disabled) return;\n draft.value = { ...(committed.value ?? { start: '', end: '' }) };\n disclosure.change(next);\n}\nconst committedError = computed(() => rangeError(committed.value, props));\nconst outerError = computed(() => props.invalid || !!committedError.value || formError.value);\nconst text = computed(() => {\n const value = committed.value;\n if (!value) return labels.value.placeholder;\n const preset = props.presets.find(\n (p) => p.value.start === value.start && p.value.end === value.end,\n );\n return (\n props.formatRange?.(value, props.locale) ?? preset?.label ?? rangeText(value, props.locale)\n );\n});\nfunction apply() {\n const next = draft.value.start || draft.value.end ? { ...draft.value } : null;\n if (props.disabled || props.readonly || rangeError(next, props) || (props.required && !next))\n return;\n local.value = next;\n formError.value = false;\n emit('update:modelValue', next);\n emit('apply', next);\n disclosure.change(false);\n}\nfunction reset(cancelled: boolean) {\n if (!cancelled) {\n if (props.modelValue === undefined) local.value = props.defaultValue;\n formError.value = false;\n changeOpen(false);\n }\n}\nconst describedBy = computed(() =>\n outerError.value ? `${id}-error` : props.description ? `${id}-description` : undefined,\n);\n</script>\n<template>\n <div\n ref=\"root\"\n :class=\"[\n 'date-range',\n `date-range--${size}`,\n `date-range--${variant}`,\n !fullWidth && 'date-range--fit',\n hideLabel && 'date-range--label-hidden',\n triggerDisplay === 'icon' && 'date-range--icon-trigger',\n ]\"\n :dir=\"dir\"\n :data-disabled=\"disabled || undefined\"\n >\n <span :id=\"`${id}-label`\" class=\"date-range__label\"\n >{{ label }}<span v-if=\"required\" aria-hidden=\"true\"> *</span></span\n >\n <section\n v-if=\"display === 'inline'\"\n class=\"date-range__panel date-range__inline\"\n :aria-labelledby=\"`${id}-title`\"\n :dir=\"dir\"\n >\n <DateRangePanel\n :id=\"id\"\n :options=\"props\"\n :draft=\"draft\"\n :labels=\"labels\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n :required=\"required\"\n @draft=\"draft = $event\"\n @apply=\"apply\"\n @cancel=\"changeOpen(false)\"\n />\n </section>\n <PopoverRoot v-else :open=\"visible\" @update:open=\"changeOpen\"\n ><PopoverTrigger\n class=\"date-range__trigger\"\n :disabled=\"disabled\"\n :aria-labelledby=\"`${id}-label ${id}-value`\"\n :aria-describedby=\"describedBy\"\n :aria-invalid=\"outerError\"\n >\n <svg\n class=\"date-range__icon\"\n aria-hidden=\"true\"\n focusable=\"false\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.8\"\n stroke-linecap=\"round\"\n >\n <rect x=\"3\" y=\"5\" width=\"18\" height=\"16\" rx=\"2\" />\n <path d=\"M7 3v4m10-4v4M3 10h18\" /></svg\n ><span\n :id=\"`${id}-value`\"\n class=\"date-range__value\"\n :data-placeholder=\"!committed || undefined\"\n >{{ text }}</span\n ><ChevronIcon class=\"date-range__chevron\" /> </PopoverTrigger\n ><PopoverPortal\n ><PopoverContent\n as-child\n side=\"bottom\"\n align=\"start\"\n :side-offset=\"8\"\n :collision-padding=\"16\"\n ><div\n class=\"date-range__panel date-range__dialog\"\n :dir=\"dir\"\n :aria-labelledby=\"`${id}-title`\"\n >\n <DateRangePanel\n :id=\"id\"\n :options=\"props\"\n :draft=\"draft\"\n :labels=\"labels\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n :required=\"required\"\n @draft=\"draft = $event\"\n @apply=\"apply\"\n @cancel=\"changeOpen(false)\"\n /></div></PopoverContent></PopoverPortal\n ></PopoverRoot>\n <span v-if=\"description\" :id=\"`${id}-description`\" class=\"input__description\">{{\n description\n }}</span>\n <span v-if=\"outerError\" :id=\"`${id}-error`\" class=\"input__error\" role=\"alert\">{{\n errorMessage ?? (committedError ? labels[committedError] : labels.required)\n }}</span>\n <template v-if=\"name\"\n ><input\n type=\"hidden\"\n :name=\"`${name}.start`\"\n :value=\"committed?.start ?? ''\"\n :disabled=\"disabled\" /><input\n type=\"hidden\"\n :name=\"`${name}.end`\"\n :value=\"committed?.end ?? ''\"\n :disabled=\"disabled\"\n /></template>\n <SelectionValidation\n :has-value=\"!!committed && !committedError\"\n :required=\"required || !!committedError\"\n :disabled=\"disabled\"\n @invalid=\"\n formError = true;\n root?.querySelector<HTMLButtonElement>('.date-range__trigger')?.focus();\n \"\n @reset=\"reset\"\n />\n </div>\n</template>\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["_hoisted_1","_openBlock","_createElementBlock","_normalizeClass","_renderSlot","_sfc_main","Button","$attrs","_unref","_openBlock","_createBlock","_mergeProps","_withCtx","_renderSlot","_sfc_main","_hoisted_1","_openBlock","_createBlock","_unref","_normalizeClass","_withCtx","_createElementVNode","_renderSlot","_sfc_main","_sfc_main","_hoisted_1","_sfc_render","_openBlock","_createElementBlock","_createElementVNode","_sfc_main","_hoisted_1","_sfc_render","_openBlock","_createElementBlock","_createElementVNode","_hoisted_1","_openBlock","_createElementBlock","_createElementVNode","_hoisted_1","_hoisted_2","_hoisted_3","_openBlock","_createElementBlock","_toDisplayString","_createCommentVNode","_sfc_main","_hoisted_1","_openBlock","_createElementBlock","_withModifiers","_sfc_main","$slots","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_openBlock","_createElementBlock","_normalizeClass","_createElementVNode","_unref","_createTextVNode","_toDisplayString","_createCommentVNode","_createVNode","_withCtx","_renderSlot","_Fragment","ChevronIcon","CloseIcon","_renderList","_createBlock","CheckIcon","FieldFeedback","SelectionValidation","_sfc_main","Select","$slots","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_useModel","_openBlock","_createElementBlock","_normalizeClass","_createVNode","_unref","_withCtx","_createTextVNode","_toDisplayString","_createElementVNode","_renderSlot","_createCommentVNode","_sfc_main","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_useModel","_openBlock","_createElementBlock","_createVNode","_unref","_withCtx","_createTextVNode","_toDisplayString","_createElementVNode","_createCommentVNode","_sfc_main","_openBlock","_createBlock","_unref","RekaLabel","_withCtx","_renderSlot","_sfc_main","_hoisted_1","_hoisted_2","_hoisted_3","_openBlock","_createElementBlock","_createElementVNode","_createVNode","_unref","_withCtx","CheckIcon","_createTextVNode","_toDisplayString","_createCommentVNode","FieldFeedback","_sfc_main","_hoisted_1","_hoisted_2","_hoisted_3","_useModel","_openBlock","_createBlock","_unref","_withCtx","_createElementVNode","_toDisplayString","_createElementBlock","_Fragment","_renderList","_createVNode","_createTextVNode","FieldFeedback","_sfc_main","_hoisted_1","_hoisted_2","_openBlock","_createElementBlock","_createElementVNode","_createVNode","_unref","_withCtx","_createTextVNode","_toDisplayString","FieldFeedback","_sfc_main","_hoisted_1","_openBlock","_createElementBlock","_createVNode","_unref","_withCtx","_createTextVNode","_toDisplayString","_renderSlot","FieldFeedback","_sfc_main","_hoisted_1","_openBlock","_createElementBlock","_renderSlot","_sfc_main","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_openBlock","_createElementBlock","_createElementVNode","_toDisplayString","_createVNode","_unref","_withCtx","_Fragment","_renderList","_createBlock","CheckIcon","_createCommentVNode","FieldFeedback","_sfc_main","_hoisted_1","_hoisted_2","_hoisted_3","_openBlock","_createElementBlock","_createVNode","_unref","_withCtx","_createTextVNode","_toDisplayString","_createElementVNode","FieldFeedback","_createCommentVNode","_sfc_main","$slots","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_openBlock","_createElementBlock","_renderSlot","_createBlock","_resolveDynamicComponent","_withCtx","_createTextVNode","_toDisplayString","_createCommentVNode","_createElementVNode","_sfc_main","_hoisted_1","_openBlock","_createElementBlock","_renderSlot","_sfc_main","$attrs","_hoisted_1","_openBlock","_createElementBlock","_mergeProps","_sfc_main","$attrs","_hoisted_1","_openBlock","_createElementBlock","_mergeProps","_sfc_main","$slots","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_openBlock","_createElementBlock","_createElementVNode","_createVNode","_unref","_withCtx","_Fragment","_renderList","_createBlock","_createCommentVNode","_renderSlot","_toDisplayString","_sfc_main","$slots","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_openBlock","_createBlock","_unref","_normalizeClass","_withCtx","_createElementBlock","_createElementVNode","TabsListView","_createSlots","_renderSlot","_createCommentVNode","_Fragment","_renderList","_sfc_main","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_openBlock","_createElementBlock","_createElementVNode","_toDisplayString","_Fragment","_renderList","_sfc_main","$attrs","_hoisted_1","_hoisted_2","_openBlock","_createElementBlock","_createElementVNode","_mergeProps","_toDisplayString","_renderSlot","_sfc_main","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_openBlock","_createElementBlock","_createVNode","Table","_withCtx","_createElementVNode","_Fragment","_renderList","_createTextVNode","_toDisplayString","_renderSlot","_createCommentVNode","_sfc_main","$slots","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_openBlock","_createElementBlock","_createElementVNode","_toDisplayString","_createCommentVNode","_renderSlot","_sfc_main","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_openBlock","_createElementBlock","_Fragment","_createVNode","_unref","_withCtx","_createElementVNode","_normalizeStyle","_renderSlot","_createTextVNode","_toDisplayString","_createBlock","_createCommentVNode","RekaToastAction","_sfc_main","$slots","_hoisted_1","_openBlock","_createBlock","_unref","RekaToastProvider","_withCtx","_renderSlot","_createElementVNode","_createVNode","_createElementBlock","_Fragment","_renderList","Toast","_createSlots","_mergeProps","_sfc_main","$slots","_hoisted_1","_hoisted_2","_hoisted_3","_openBlock","_createElementBlock","_createBlock","_resolveDynamicComponent","_withCtx","_createTextVNode","_toDisplayString","_createCommentVNode","_renderSlot","_sfc_main","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_openBlock","_createElementBlock","_createElementVNode","_Fragment","_renderList","_createCommentVNode","_toDisplayString","_sfc_main","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_openBlock","_createElementBlock","_createElementVNode","_toDisplayString","_unref","_Fragment","_renderList","_sfc_main","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","_openBlock","_createElementBlock","_createElementVNode","_toDisplayString","_createCommentVNode","_Fragment","_renderList","_createVNode","Table","_withCtx","_createBlock","Empty","_sfc_main","$slots","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_openBlock","_createBlock","_unref","_withCtx","_createVNode","_normalizeClass","_renderSlot","_createTextVNode","_toDisplayString","_mergeProps","_createElementVNode","_createCommentVNode","CloseIcon","_createElementBlock","_sfc_main","$slots","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_openBlock","_createElementBlock","_Fragment","_createBlock","CheckIcon","_createCommentVNode","_renderSlot","_createElementVNode","_toDisplayString","ChevronIcon","_sfc_main","$slots","_resolveComponent","_openBlock","_createBlock","_unref","_withCtx","_createElementBlock","_Fragment","_renderList","_createCommentVNode","_createVNode","_createTextVNode","_toDisplayString","MenuItemContent","_createSlots","_renderSlot","_mergeProps","_sfc_main","$slots","_openBlock","_createBlock","_unref","_withCtx","_createVNode","_normalizeClass","_renderSlot","_createTextVNode","_toDisplayString","DropdownMenuBranch","_createSlots","_normalizeProps","_guardReactiveProps","_sfc_main","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_openBlock","_createBlock","_unref","_withCtx","_createVNode","_createTextVNode","_toDisplayString","_createElementVNode","_createElementBlock","_createCommentVNode","_renderSlot","_sfc_main","_openBlock","_createBlock","_unref","_withCtx","_createVNode","_normalizeClass","_renderSlot","_createTextVNode","_toDisplayString","_sfc_main","_hoisted_1","_hoisted_2","_openBlock","_createElementBlock","_normalizeClass","_createElementVNode","_toDisplayString","_createCommentVNode","_sfc_main","$slots","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_openBlock","_createElementBlock","_createElementVNode","_unref","_createTextVNode","_toDisplayString","_createCommentVNode","_createVNode","_withCtx","_renderSlot","CloseIcon","ChevronIcon","_Fragment","_renderList","_createBlock","CheckIcon","FieldFeedback","SelectionValidation","_sfc_main","$slots","_hoisted_1","_hoisted_2","_openBlock","_createBlock","_unref","_withCtx","_createElementBlock","_Fragment","_renderList","RekaItem","_renderSlot","_createCommentVNode","_toDisplayString","_sfc_main","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_openBlock","_createElementBlock","_createElementVNode","_toDisplayString","_unref","_Fragment","_renderList","_createCommentVNode","_createVNode","_withCtx","ChevronIcon","_createBlock","_createTextVNode","_sfc_main","_openBlock","_createElementBlock","_normalizeClass","_createElementVNode","_unref","_createTextVNode","_toDisplayString","_createCommentVNode","_createVNode","DateRangePanel","_createBlock","_withCtx","ChevronIcon","_Fragment","SelectionValidation","_sfc_main"],"sources":["../src/Button.vue","../src/Button.vue","../src/ButtonGroup.ts","../src/ButtonGroupSeparator.ts","../src/button-family-context.ts","../src/ToggleButton.vue","../src/ToggleButton.vue","../src/ToggleButtonGroup.vue","../src/ToggleButtonGroup.vue","../src/CheckIcon.vue","../src/ChevronIcon.vue","../src/CloseIcon.vue","../src/FieldFeedback.vue","../src/FieldFeedback.vue","../src/SelectionValidation.vue","../src/SelectionValidation.vue","../src/useFeedback.ts","../src/selection-options.ts","../src/Select.vue","../src/Select.vue","../src/SelectGroup.ts","../src/Input.vue","../src/Input.vue","../src/Textarea.vue","../src/Textarea.vue","../src/Label.vue","../src/Label.vue","../src/Checkbox.vue","../src/Checkbox.vue","../src/RadioGroup.vue","../src/RadioGroup.vue","../src/Switch.vue","../src/Switch.vue","../src/form-context.ts","../src/Field.vue","../src/Field.vue","../src/Form.vue","../src/Form.vue","../src/listbox-selection.ts","../src/Listbox.vue","../src/Listbox.vue","../src/NumberField.vue","../src/NumberField.vue","../src/Card.vue","../src/Card.vue","../src/Badge.vue","../src/Badge.vue","../src/Skeleton.vue","../src/Skeleton.vue","../src/Separator.vue","../src/Separator.vue","../src/tabs-indicator.ts","../src/TabsListView.vue","../src/TabsListView.vue","../src/Tabs.vue","../src/Tabs.vue","../src/pagination-model.ts","../src/Pagination.vue","../src/Pagination.vue","../src/Table.vue","../src/Table.vue","../src/DataTable.vue","../src/DataTable.vue","../src/Alert.vue","../src/Alert.vue","../src/useToast.ts","../src/Toast.vue","../src/Toast.vue","../src/toast-model.ts","../src/ToastProvider.vue","../src/ToastProvider.vue","../src/Empty.vue","../src/Empty.vue","../src/Breadcrumb.vue","../src/Breadcrumb.vue","../src/useDisclosure.ts","../src/Sidebar.vue","../src/Sidebar.vue","../src/chart-model.ts","../src/Chart.vue","../src/Chart.vue","../src/Dialog.vue","../src/Dialog.vue","../src/MenuItemContent.vue","../src/MenuItemContent.vue","../src/overlay-model.ts","../src/DropdownMenuBranch.vue","../src/DropdownMenuBranch.vue","../src/DropdownMenu.vue","../src/DropdownMenu.vue","../src/Popover.vue","../src/Popover.vue","../src/Tooltip.vue","../src/Tooltip.vue","../src/Spinner.vue","../src/Spinner.vue","../src/Combobox.vue","../src/Combobox.vue","../src/toggle-group-model.ts","../src/ToggleGroup.vue","../src/ToggleGroup.vue","../src/date-range-model.ts","../src/DateRangePanel.vue","../src/DateRangePanel.vue","../src/DateRangePicker.vue","../src/DateRangePicker.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, ref, watch } from 'vue';\nimport type { ButtonSize, ButtonVariant } from './types.js';\n\nconst props = withDefaults(\n defineProps<{\n /** Visual style. Use `danger` for destructive actions such as delete. */\n variant?: ButtonVariant;\n /** Accessible name for icon-only buttons. */\n ariaLabel?: string;\n /** ID of an element supplying the accessible name. */\n ariaLabelledby?: string;\n /** Size of the button. */\n size?: ButtonSize;\n /** Fill the container width. Icon-only buttons retain their square shape. */\n fullWidth?: boolean;\n /** Button type inside a form. Defaults to `button`. */\n type?: 'button' | 'submit' | 'reset';\n /** Disables the button. Vue uses `disabled`, where the React package uses `isDisabled`. */\n disabled?: boolean;\n /** Square icon button; supply aria-label or aria-labelledby. */\n iconOnly?: boolean;\n /** Blocks actions while retaining keyboard focus. */\n pending?: boolean;\n }>(),\n {\n ariaLabel: undefined,\n ariaLabelledby: undefined,\n variant: 'primary',\n size: 'md',\n fullWidth: false,\n type: 'button',\n disabled: false,\n iconOnly: false,\n pending: false,\n },\n);\n\ndefineSlots<{\n default?: (state: {\n pending: boolean;\n disabled: boolean;\n hovered: boolean;\n pressed: boolean;\n focused: boolean;\n focusVisible: boolean;\n }) => unknown;\n}>();\n\nconst hovered = ref(false),\n pressed = ref(false),\n focused = ref(false),\n focusVisible = ref(false);\nwatch(\n () => [props.disabled, props.pending],\n ([disabled, pending]) => {\n if (disabled || pending) {\n hovered.value = false;\n pressed.value = false;\n }\n if (props.disabled) {\n focused.value = false;\n focusVisible.value = false;\n }\n },\n);\nfunction hover(event: PointerEvent) {\n if (!props.disabled && !props.pending && event.pointerType !== 'touch') hovered.value = true;\n}\nfunction pointerdown(event: PointerEvent) {\n focusVisible.value = false;\n if (!props.disabled && !props.pending && event.button === 0) pressed.value = true;\n}\nfunction leave() {\n hovered.value = false;\n pressed.value = false;\n}\nfunction focus(event: FocusEvent) {\n focused.value = true;\n focusVisible.value = (event.target as HTMLButtonElement).matches(':focus-visible');\n}\nfunction blur() {\n focused.value = false;\n focusVisible.value = false;\n pressed.value = false;\n}\n\nconst emit = defineEmits<{\n /** Emitted when the button is clicked. Listen with `@press`, where React uses `onPress`. */\n press: [event: MouseEvent];\n}>();\n\nconst classes = computed(() => [\n 'button',\n `button--${props.variant}`,\n props.size !== 'md' && `button--${props.size}`,\n props.iconOnly && 'button--icon-only',\n props.fullWidth && !props.iconOnly && 'button--full-width',\n]);\nfunction press(event: MouseEvent) {\n if (props.disabled || props.pending) {\n event.preventDefault();\n event.stopImmediatePropagation();\n return;\n }\n emit('press', event);\n}\nfunction keydown(event: KeyboardEvent) {\n if (focused.value) focusVisible.value = true;\n if (props.pending && (event.key === 'Enter' || event.key === ' ')) {\n event.preventDefault();\n event.stopImmediatePropagation();\n return;\n }\n if (!props.disabled && (event.key === 'Enter' || event.key === ' ')) pressed.value = true;\n}\n</script>\n\n<template>\n <button\n :class=\"classes\"\n :aria-label=\"ariaLabel\"\n :aria-labelledby=\"ariaLabelledby\"\n :type=\"pending ? 'button' : type\"\n :disabled=\"disabled\"\n :aria-disabled=\"pending || undefined\"\n :data-pending=\"pending || undefined\"\n @click=\"press\"\n @keydown=\"keydown\"\n @keyup=\"pressed = false\"\n @pointerenter=\"hover\"\n @pointerleave=\"leave\"\n @pointerdown=\"pointerdown\"\n @pointerup=\"pressed = false\"\n @pointercancel=\"pressed = false\"\n @focus=\"focus\"\n @blur=\"blur\"\n >\n <slot\n :pending=\"pending\"\n :disabled=\"disabled\"\n :hovered=\"hovered\"\n :pressed=\"pressed\"\n :focused=\"focused\"\n :focus-visible=\"focusVisible\"\n />\n </button>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref, watch } from 'vue';\nimport type { ButtonSize, ButtonVariant } from './types.js';\n\nconst props = withDefaults(\n defineProps<{\n /** Visual style. Use `danger` for destructive actions such as delete. */\n variant?: ButtonVariant;\n /** Accessible name for icon-only buttons. */\n ariaLabel?: string;\n /** ID of an element supplying the accessible name. */\n ariaLabelledby?: string;\n /** Size of the button. */\n size?: ButtonSize;\n /** Fill the container width. Icon-only buttons retain their square shape. */\n fullWidth?: boolean;\n /** Button type inside a form. Defaults to `button`. */\n type?: 'button' | 'submit' | 'reset';\n /** Disables the button. Vue uses `disabled`, where the React package uses `isDisabled`. */\n disabled?: boolean;\n /** Square icon button; supply aria-label or aria-labelledby. */\n iconOnly?: boolean;\n /** Blocks actions while retaining keyboard focus. */\n pending?: boolean;\n }>(),\n {\n ariaLabel: undefined,\n ariaLabelledby: undefined,\n variant: 'primary',\n size: 'md',\n fullWidth: false,\n type: 'button',\n disabled: false,\n iconOnly: false,\n pending: false,\n },\n);\n\ndefineSlots<{\n default?: (state: {\n pending: boolean;\n disabled: boolean;\n hovered: boolean;\n pressed: boolean;\n focused: boolean;\n focusVisible: boolean;\n }) => unknown;\n}>();\n\nconst hovered = ref(false),\n pressed = ref(false),\n focused = ref(false),\n focusVisible = ref(false);\nwatch(\n () => [props.disabled, props.pending],\n ([disabled, pending]) => {\n if (disabled || pending) {\n hovered.value = false;\n pressed.value = false;\n }\n if (props.disabled) {\n focused.value = false;\n focusVisible.value = false;\n }\n },\n);\nfunction hover(event: PointerEvent) {\n if (!props.disabled && !props.pending && event.pointerType !== 'touch') hovered.value = true;\n}\nfunction pointerdown(event: PointerEvent) {\n focusVisible.value = false;\n if (!props.disabled && !props.pending && event.button === 0) pressed.value = true;\n}\nfunction leave() {\n hovered.value = false;\n pressed.value = false;\n}\nfunction focus(event: FocusEvent) {\n focused.value = true;\n focusVisible.value = (event.target as HTMLButtonElement).matches(':focus-visible');\n}\nfunction blur() {\n focused.value = false;\n focusVisible.value = false;\n pressed.value = false;\n}\n\nconst emit = defineEmits<{\n /** Emitted when the button is clicked. Listen with `@press`, where React uses `onPress`. */\n press: [event: MouseEvent];\n}>();\n\nconst classes = computed(() => [\n 'button',\n `button--${props.variant}`,\n props.size !== 'md' && `button--${props.size}`,\n props.iconOnly && 'button--icon-only',\n props.fullWidth && !props.iconOnly && 'button--full-width',\n]);\nfunction press(event: MouseEvent) {\n if (props.disabled || props.pending) {\n event.preventDefault();\n event.stopImmediatePropagation();\n return;\n }\n emit('press', event);\n}\nfunction keydown(event: KeyboardEvent) {\n if (focused.value) focusVisible.value = true;\n if (props.pending && (event.key === 'Enter' || event.key === ' ')) {\n event.preventDefault();\n event.stopImmediatePropagation();\n return;\n }\n if (!props.disabled && (event.key === 'Enter' || event.key === ' ')) pressed.value = true;\n}\n</script>\n\n<template>\n <button\n :class=\"classes\"\n :aria-label=\"ariaLabel\"\n :aria-labelledby=\"ariaLabelledby\"\n :type=\"pending ? 'button' : type\"\n :disabled=\"disabled\"\n :aria-disabled=\"pending || undefined\"\n :data-pending=\"pending || undefined\"\n @click=\"press\"\n @keydown=\"keydown\"\n @keyup=\"pressed = false\"\n @pointerenter=\"hover\"\n @pointerleave=\"leave\"\n @pointerdown=\"pointerdown\"\n @pointerup=\"pressed = false\"\n @pointercancel=\"pressed = false\"\n @focus=\"focus\"\n @blur=\"blur\"\n >\n <slot\n :pending=\"pending\"\n :disabled=\"disabled\"\n :hovered=\"hovered\"\n :pressed=\"pressed\"\n :focused=\"focused\"\n :focus-visible=\"focusVisible\"\n />\n </button>\n</template>\n","import { cloneVNode, defineComponent, Fragment, h, type PropType, type VNode } from 'vue';\nimport Button from './Button.vue';\nimport type { ButtonSize, ButtonVariant } from './types.js';\n\nexport default /* @__PURE__ */ defineComponent({\n name: 'ButtonGroup',\n inheritAttrs: false,\n props: {\n label: { type: String, required: true },\n variant: { type: String as PropType<ButtonVariant>, default: undefined },\n size: { type: String as PropType<ButtonSize>, default: undefined },\n disabled: { type: Boolean, default: undefined },\n fullWidth: Boolean,\n orientation: { type: String as PropType<'horizontal' | 'vertical'>, default: 'horizontal' },\n dir: { type: String as PropType<'ltr' | 'rtl'>, default: undefined },\n },\n setup(props, { slots, attrs }) {\n function defaults(nodes: VNode[]): VNode[] {\n return nodes.map((child) => {\n if (child.type === Fragment && Array.isArray(child.children)) {\n const fragment = cloneVNode(child);\n fragment.children = defaults(child.children as VNode[]);\n return fragment;\n }\n if (child.type !== Button) return child;\n return cloneVNode(child, {\n variant: child.props?.variant ?? props.variant,\n size: child.props?.size ?? props.size,\n disabled: child.props?.disabled ?? props.disabled,\n });\n });\n }\n return () =>\n h(\n 'div',\n {\n ...attrs,\n role: 'group',\n 'aria-label': props.label,\n dir: props.dir,\n 'data-orientation': props.orientation,\n class: ['button-group', props.fullWidth && 'button-group--full-width'],\n },\n defaults(slots.default?.() ?? []),\n );\n },\n});\n","import { defineComponent, h } from 'vue';\nexport default /* @__PURE__ */ defineComponent({\n name: 'ButtonGroupSeparator',\n setup: () => () => h('span', { class: 'button-group__separator', 'aria-hidden': 'true' }),\n});\n","import type { ComputedRef, InjectionKey } from 'vue';\nimport type { ButtonSize } from './types.js';\nexport const toggleButtonGroupKey: InjectionKey<\n ComputedRef<{\n size: ButtonSize;\n radio: boolean;\n selectedIds: string[];\n disabled: boolean;\n }>\n> = Symbol('KazeeToggleButtonGroup');\n","<script setup lang=\"ts\">\nimport { computed, getCurrentInstance, inject, ref } from 'vue';\nimport { Toggle, ToggleGroupItem } from 'reka-ui';\nimport { toggleButtonGroupKey } from './button-family-context.js';\nimport type { ButtonSize } from './types.js';\ndefineOptions({ inheritAttrs: false });\nconst props = withDefaults(\n defineProps<{\n id?: string;\n variant?: 'default' | 'ghost';\n size?: ButtonSize;\n iconOnly?: boolean;\n modelValue?: boolean;\n defaultSelected?: boolean;\n disabled?: boolean;\n }>(),\n { id: undefined, size: undefined, variant: 'default', modelValue: undefined },\n);\nconst emit = defineEmits<{\n 'update:modelValue': [selected: boolean];\n press: [event: MouseEvent];\n}>();\ndefineSlots<{ default?: (state: { selected: boolean; disabled: boolean }) => unknown }>();\nconst group = inject(toggleButtonGroupKey, undefined);\nif (group && !props.id) throw new Error('A grouped ToggleButton requires a unique nonempty id.');\nconst instance = getCurrentInstance();\nconst local = ref(props.defaultSelected ?? false);\nconst controlled = () =>\n Object.prototype.hasOwnProperty.call(instance?.vnode.props ?? {}, 'modelValue');\nconst selected = computed(() => (controlled() ? !!props.modelValue : local.value));\nconst classes = computed(() => {\n const size = props.size ?? group?.value.size ?? 'md';\n return [\n 'button',\n 'toggle-button',\n `toggle-button--${props.variant}`,\n size !== 'md' && `button--${size}`,\n props.iconOnly && 'button--icon-only',\n ];\n});\nfunction update(value: boolean) {\n if (props.disabled) return;\n if (!controlled()) local.value = value;\n emit('update:modelValue', value);\n}\nfunction press(event: MouseEvent) {\n if (!props.disabled && !group?.value.disabled) emit('press', event);\n}\n</script>\n<template>\n <ToggleGroupItem\n v-if=\"group\"\n v-bind=\"$attrs\"\n :id=\"id\"\n :value=\"id ?? ''\"\n :class=\"classes\"\n :disabled=\"disabled\"\n :role=\"group.radio ? 'radio' : undefined\"\n :aria-checked=\"group.radio ? group.selectedIds.includes(id ?? '') : undefined\"\n :aria-pressed=\"group.radio ? undefined : group.selectedIds.includes(id ?? '')\"\n @click=\"press\"\n >\n <template #default=\"state\"\n ><slot :selected=\"!!state.modelValue\" :disabled=\"state.disabled\"\n /></template>\n </ToggleGroupItem>\n <Toggle\n v-else\n v-bind=\"$attrs\"\n :id=\"id\"\n :class=\"classes\"\n :model-value=\"selected\"\n :disabled=\"disabled\"\n @update:model-value=\"update\"\n @click=\"press\"\n >\n <slot :selected=\"selected\" :disabled=\"!!disabled\" />\n </Toggle>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, getCurrentInstance, inject, ref } from 'vue';\nimport { Toggle, ToggleGroupItem } from 'reka-ui';\nimport { toggleButtonGroupKey } from './button-family-context.js';\nimport type { ButtonSize } from './types.js';\ndefineOptions({ inheritAttrs: false });\nconst props = withDefaults(\n defineProps<{\n id?: string;\n variant?: 'default' | 'ghost';\n size?: ButtonSize;\n iconOnly?: boolean;\n modelValue?: boolean;\n defaultSelected?: boolean;\n disabled?: boolean;\n }>(),\n { id: undefined, size: undefined, variant: 'default', modelValue: undefined },\n);\nconst emit = defineEmits<{\n 'update:modelValue': [selected: boolean];\n press: [event: MouseEvent];\n}>();\ndefineSlots<{ default?: (state: { selected: boolean; disabled: boolean }) => unknown }>();\nconst group = inject(toggleButtonGroupKey, undefined);\nif (group && !props.id) throw new Error('A grouped ToggleButton requires a unique nonempty id.');\nconst instance = getCurrentInstance();\nconst local = ref(props.defaultSelected ?? false);\nconst controlled = () =>\n Object.prototype.hasOwnProperty.call(instance?.vnode.props ?? {}, 'modelValue');\nconst selected = computed(() => (controlled() ? !!props.modelValue : local.value));\nconst classes = computed(() => {\n const size = props.size ?? group?.value.size ?? 'md';\n return [\n 'button',\n 'toggle-button',\n `toggle-button--${props.variant}`,\n size !== 'md' && `button--${size}`,\n props.iconOnly && 'button--icon-only',\n ];\n});\nfunction update(value: boolean) {\n if (props.disabled) return;\n if (!controlled()) local.value = value;\n emit('update:modelValue', value);\n}\nfunction press(event: MouseEvent) {\n if (!props.disabled && !group?.value.disabled) emit('press', event);\n}\n</script>\n<template>\n <ToggleGroupItem\n v-if=\"group\"\n v-bind=\"$attrs\"\n :id=\"id\"\n :value=\"id ?? ''\"\n :class=\"classes\"\n :disabled=\"disabled\"\n :role=\"group.radio ? 'radio' : undefined\"\n :aria-checked=\"group.radio ? group.selectedIds.includes(id ?? '') : undefined\"\n :aria-pressed=\"group.radio ? undefined : group.selectedIds.includes(id ?? '')\"\n @click=\"press\"\n >\n <template #default=\"state\"\n ><slot :selected=\"!!state.modelValue\" :disabled=\"state.disabled\"\n /></template>\n </ToggleGroupItem>\n <Toggle\n v-else\n v-bind=\"$attrs\"\n :id=\"id\"\n :class=\"classes\"\n :model-value=\"selected\"\n :disabled=\"disabled\"\n @update:model-value=\"update\"\n @click=\"press\"\n >\n <slot :selected=\"selected\" :disabled=\"!!disabled\" />\n </Toggle>\n</template>\n","<script setup lang=\"ts\" generic=\"M extends 'single' | 'multiple' = 'single'\">\nimport { computed, getCurrentInstance, provide, ref } from 'vue';\nimport { ToggleGroupRoot } from 'reka-ui';\nimport { toggleButtonGroupKey } from './button-family-context.js';\nimport type { ButtonSize } from './types.js';\ntype Value = M extends 'multiple' ? string[] : string | null;\nconst props = defineProps<{\n label: string;\n selectionMode?: M;\n modelValue?: Value;\n defaultValue?: Value;\n disabled?: boolean;\n detached?: boolean;\n fullWidth?: boolean;\n size?: ButtonSize;\n orientation?: 'horizontal' | 'vertical';\n dir?: 'ltr' | 'rtl';\n disallowEmptySelection?: boolean;\n}>();\nconst emit = defineEmits<{ 'update:modelValue': [value: Value] }>();\ndefineSlots<{ default?: () => unknown }>();\nconst instance = getCurrentInstance();\nconst controlled = () =>\n Object.prototype.hasOwnProperty.call(instance?.vnode.props ?? {}, 'modelValue');\nconst local = ref<unknown>(props.defaultValue);\nconst multiple = computed(() => props.selectionMode === 'multiple');\nconst ids = computed(() => {\n const value = controlled() ? props.modelValue : local.value;\n return Array.isArray(value) ? value : typeof value === 'string' && value ? [value] : [];\n});\nfunction update(value: unknown) {\n if (props.disabled) return;\n const next = Array.isArray(value) ? value : typeof value === 'string' && value ? [value] : [];\n if (next.length === ids.value.length && next.every((id, index) => id === ids.value[index]))\n return;\n if (props.disallowEmptySelection && ids.value.length && !next.length) return;\n const result = (multiple.value ? next : (next[0] ?? null)) as Value;\n if (!controlled()) local.value = result;\n emit('update:modelValue', result);\n}\nconst radio = computed(() => !multiple.value);\nprovide(\n toggleButtonGroupKey,\n computed(() => ({\n size: props.size ?? 'md',\n radio: radio.value,\n selectedIds: ids.value,\n disabled: !!props.disabled,\n })),\n);\n</script>\n<template>\n <ToggleGroupRoot\n as-child\n class=\"button-group toggle-button-group\"\n :class=\"{ 'button-group--detached': detached, 'button-group--full-width': fullWidth }\"\n :aria-label=\"label\"\n :aria-orientation=\"orientation ?? 'horizontal'\"\n :aria-disabled=\"disabled || undefined\"\n :type=\"multiple ? 'multiple' : 'single'\"\n :model-value=\"multiple ? ids : (ids[0] ?? '')\"\n :disabled=\"disabled\"\n :orientation=\"orientation ?? 'horizontal'\"\n :data-orientation=\"orientation ?? 'horizontal'\"\n :dir=\"dir\"\n @update:model-value=\"update\"\n >\n <div :role=\"radio ? 'radiogroup' : 'toolbar'\"><slot /></div>\n </ToggleGroupRoot>\n</template>\n","<script setup lang=\"ts\" generic=\"M extends 'single' | 'multiple' = 'single'\">\nimport { computed, getCurrentInstance, provide, ref } from 'vue';\nimport { ToggleGroupRoot } from 'reka-ui';\nimport { toggleButtonGroupKey } from './button-family-context.js';\nimport type { ButtonSize } from './types.js';\ntype Value = M extends 'multiple' ? string[] : string | null;\nconst props = defineProps<{\n label: string;\n selectionMode?: M;\n modelValue?: Value;\n defaultValue?: Value;\n disabled?: boolean;\n detached?: boolean;\n fullWidth?: boolean;\n size?: ButtonSize;\n orientation?: 'horizontal' | 'vertical';\n dir?: 'ltr' | 'rtl';\n disallowEmptySelection?: boolean;\n}>();\nconst emit = defineEmits<{ 'update:modelValue': [value: Value] }>();\ndefineSlots<{ default?: () => unknown }>();\nconst instance = getCurrentInstance();\nconst controlled = () =>\n Object.prototype.hasOwnProperty.call(instance?.vnode.props ?? {}, 'modelValue');\nconst local = ref<unknown>(props.defaultValue);\nconst multiple = computed(() => props.selectionMode === 'multiple');\nconst ids = computed(() => {\n const value = controlled() ? props.modelValue : local.value;\n return Array.isArray(value) ? value : typeof value === 'string' && value ? [value] : [];\n});\nfunction update(value: unknown) {\n if (props.disabled) return;\n const next = Array.isArray(value) ? value : typeof value === 'string' && value ? [value] : [];\n if (next.length === ids.value.length && next.every((id, index) => id === ids.value[index]))\n return;\n if (props.disallowEmptySelection && ids.value.length && !next.length) return;\n const result = (multiple.value ? next : (next[0] ?? null)) as Value;\n if (!controlled()) local.value = result;\n emit('update:modelValue', result);\n}\nconst radio = computed(() => !multiple.value);\nprovide(\n toggleButtonGroupKey,\n computed(() => ({\n size: props.size ?? 'md',\n radio: radio.value,\n selectedIds: ids.value,\n disabled: !!props.disabled,\n })),\n);\n</script>\n<template>\n <ToggleGroupRoot\n as-child\n class=\"button-group toggle-button-group\"\n :class=\"{ 'button-group--detached': detached, 'button-group--full-width': fullWidth }\"\n :aria-label=\"label\"\n :aria-orientation=\"orientation ?? 'horizontal'\"\n :aria-disabled=\"disabled || undefined\"\n :type=\"multiple ? 'multiple' : 'single'\"\n :model-value=\"multiple ? ids : (ids[0] ?? '')\"\n :disabled=\"disabled\"\n :orientation=\"orientation ?? 'horizontal'\"\n :data-orientation=\"orientation ?? 'horizontal'\"\n :dir=\"dir\"\n @update:model-value=\"update\"\n >\n <div :role=\"radio ? 'radiogroup' : 'toolbar'\"><slot /></div>\n </ToggleGroupRoot>\n</template>\n","<template>\n <svg\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M3.5 8.5l3 3 6-6.5\" />\n </svg>\n</template>\n","<template>\n <svg\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M4 6l4 4 4-4\" />\n </svg>\n</template>\n","<template>\n <svg\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M4 4l8 8M12 4l-8 8\" />\n </svg>\n</template>\n","<script setup lang=\"ts\">\nwithDefaults(\n defineProps<{\n controlId: string;\n description?: string;\n errorMessage?: string;\n showError: boolean;\n }>(),\n { description: undefined, errorMessage: undefined },\n);\n</script>\n<template>\n <div v-if=\"description || showError\" class=\"field-feedback\">\n <span v-if=\"description\" :id=\"`${controlId}-description`\" class=\"input__description\">{{\n description\n }}</span>\n <span v-if=\"showError\" :id=\"`${controlId}-error`\" class=\"input__error\">{{ errorMessage }}</span>\n </div>\n</template>\n","<script setup lang=\"ts\">\nwithDefaults(\n defineProps<{\n controlId: string;\n description?: string;\n errorMessage?: string;\n showError: boolean;\n }>(),\n { description: undefined, errorMessage: undefined },\n);\n</script>\n<template>\n <div v-if=\"description || showError\" class=\"field-feedback\">\n <span v-if=\"description\" :id=\"`${controlId}-description`\" class=\"input__description\">{{\n description\n }}</span>\n <span v-if=\"showError\" :id=\"`${controlId}-error`\" class=\"input__error\">{{ errorMessage }}</span>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { ref, onMounted, onBeforeUnmount } from 'vue';\ndefineProps<{ hasValue: boolean; required?: boolean; disabled?: boolean }>();\nconst emit = defineEmits<{ invalid: []; reset: [cancelled: boolean] }>();\nconst input = ref<HTMLInputElement>();\nlet form: HTMLFormElement | null | undefined;\nconst reset = (event: Event) => setTimeout(() => emit('reset', event.defaultPrevented), 0);\nonMounted(() => {\n form = input.value?.form;\n form?.addEventListener('reset', reset);\n});\nonBeforeUnmount(() => form?.removeEventListener('reset', reset));\n</script>\n<template>\n <input\n ref=\"input\"\n class=\"selection__validation\"\n type=\"text\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n autocomplete=\"off\"\n :required=\"required\"\n :disabled=\"disabled\"\n :value=\"hasValue ? 'selected' : ''\"\n @invalid.prevent=\"emit('invalid')\"\n />\n</template>\n","<script setup lang=\"ts\">\nimport { ref, onMounted, onBeforeUnmount } from 'vue';\ndefineProps<{ hasValue: boolean; required?: boolean; disabled?: boolean }>();\nconst emit = defineEmits<{ invalid: []; reset: [cancelled: boolean] }>();\nconst input = ref<HTMLInputElement>();\nlet form: HTMLFormElement | null | undefined;\nconst reset = (event: Event) => setTimeout(() => emit('reset', event.defaultPrevented), 0);\nonMounted(() => {\n form = input.value?.form;\n form?.addEventListener('reset', reset);\n});\nonBeforeUnmount(() => form?.removeEventListener('reset', reset));\n</script>\n<template>\n <input\n ref=\"input\"\n class=\"selection__validation\"\n type=\"text\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n autocomplete=\"off\"\n :required=\"required\"\n :disabled=\"disabled\"\n :value=\"hasValue ? 'selected' : ''\"\n @invalid.prevent=\"emit('invalid')\"\n />\n</template>\n","import { computed } from 'vue';\nimport { useId } from 'reka-ui';\nexport function useFeedback(props: {\n id?: string;\n description?: string;\n errorMessage?: string;\n invalid?: boolean;\n}) {\n const generated = useId();\n const controlId = computed(() => props.id ?? generated);\n const showError = computed(() => !!(props.invalid && props.errorMessage));\n const describedBy = computed(\n () =>\n [\n props.description && `${controlId.value}-description`,\n showError.value && `${controlId.value}-error`,\n ]\n .filter(Boolean)\n .join(' ') || undefined,\n );\n return { controlId, showError, describedBy };\n}\n","export interface SelectOption {\n id: string;\n label: string;\n description?: string;\n isDisabled?: boolean;\n}\nexport function selectionIds(value: unknown, options: SelectOption[], multiple: boolean): string[] {\n const requested = new Set(\n Array.isArray(value) ? value : typeof value === 'string' ? [value] : [],\n );\n const ids = [\n ...new Set(options.filter((o) => o.id !== '' && requested.has(o.id)).map((o) => o.id)),\n ];\n return multiple ? ids : ids.slice(0, 1);\n}\nexport function filterOptions(options: SelectOption[], query: string): SelectOption[] {\n const fold = (text: string) => text.normalize('NFD').replace(/\\p{M}/gu, '').toLowerCase();\n const search = fold(query.trim());\n return options.filter((o) => fold(`${o.label} ${o.description ?? ''}`).includes(search));\n}\n","<script setup lang=\"ts\" generic=\"M extends 'single' | 'multiple' = 'single'\">\nimport { computed, ref, getCurrentInstance } from 'vue';\nimport {\n SelectContent,\n SelectItem,\n SelectItemText,\n SelectPortal,\n SelectRoot,\n SelectTrigger,\n SelectValue,\n SelectViewport,\n} from 'reka-ui';\nimport CheckIcon from './CheckIcon.vue';\nimport ChevronIcon from './ChevronIcon.vue';\nimport CloseIcon from './CloseIcon.vue';\nimport FieldFeedback from './FieldFeedback.vue';\nimport SelectionValidation from './SelectionValidation.vue';\nimport { useFeedback } from './useFeedback.js';\nimport { selectionIds, type SelectOption } from './selection-options.js';\nimport type { SelectSize, SelectVariant } from './types.js';\ntype Value = M extends 'multiple' ? string[] : string | undefined;\nconst props = withDefaults(\n defineProps<{\n label: string;\n options: SelectOption[];\n size?: SelectSize;\n variant?: SelectVariant;\n hideLabel?: boolean;\n fullWidth?: boolean;\n placeholder?: string;\n selectionMode?: M;\n modelValue?: Value;\n defaultValue?: Value;\n disabled?: boolean;\n required?: boolean;\n invalid?: boolean;\n description?: string;\n errorMessage?: string;\n requiredMessage?: string;\n name?: string;\n dir?: 'ltr' | 'rtl';\n clearable?: boolean;\n clearLabel?: string;\n }>(),\n {\n fullWidth: true,\n size: 'md',\n variant: 'primary',\n placeholder: undefined,\n selectionMode: undefined,\n modelValue: undefined,\n defaultValue: undefined,\n description: undefined,\n errorMessage: undefined,\n requiredMessage: undefined,\n name: undefined,\n dir: undefined,\n clearLabel: undefined,\n },\n);\nconst emit = defineEmits<{ 'update:modelValue': [value: Value]; clear: []; close: [] }>();\nfunction afterClose() {\n queueMicrotask(() => emit('close'));\n}\ndefineSlots<{\n start?: () => unknown;\n option?: (props: { option: SelectOption }) => unknown;\n value?: (props: { selected: SelectOption[] }) => unknown;\n}>();\nconst instance = getCurrentInstance();\nconst controlled = () =>\n Object.prototype.hasOwnProperty.call(instance?.vnode.props ?? {}, 'modelValue');\nconst local = ref<unknown>(props.defaultValue);\nconst tried = ref(false);\nconst wrapper = ref<HTMLDivElement>();\nconst multiple = computed(() => props.selectionMode === 'multiple');\nconst ids = computed(() =>\n selectionIds(controlled() ? props.modelValue : local.value, props.options, multiple.value),\n);\nconst selected = computed(() => props.options.filter((o) => ids.value.includes(o.id)));\nconst invalid = computed(\n () => props.invalid || (tried.value && props.required && ids.value.length === 0),\n);\nconst error = computed(\n () =>\n props.errorMessage ??\n (props.required && ids.value.length === 0\n ? (props.requiredMessage ?? 'Pilihan wajib diisi.')\n : undefined),\n);\nconst { controlId, describedBy, showError } = useFeedback({\n get description() {\n return props.description;\n },\n get invalid() {\n return invalid.value;\n },\n get errorMessage() {\n return error.value;\n },\n});\nfunction focus() {\n wrapper.value?.querySelector<HTMLButtonElement>('.select__trigger')?.focus();\n}\nfunction update(value: unknown) {\n if (props.disabled) return;\n const next = selectionIds(value, props.options, multiple.value);\n const result = (multiple.value ? next : next[0]) as Value;\n local.value = result;\n emit('update:modelValue', result);\n}\nfunction clear() {\n update(multiple.value ? [] : undefined);\n emit('clear');\n focus();\n}\nfunction reset(cancelled: boolean) {\n if (!cancelled) {\n tried.value = false;\n if (!controlled()) local.value = props.defaultValue;\n }\n}\n</script>\n<template>\n <div\n ref=\"wrapper\"\n :class=\"[\n 'select',\n `select--${size ?? 'md'}`,\n `select--${variant ?? 'primary'}`,\n hideLabel && 'select--label-hidden',\n fullWidth === false && 'select--fit',\n ]\"\n :data-multiple=\"multiple || undefined\"\n :dir=\"dir\"\n >\n <label class=\"select__label\" :for=\"controlId\"\n >{{ label\n }}<span v-if=\"required\" class=\"selection__required\" aria-hidden=\"true\"> *</span></label\n >\n <SelectRoot\n :model-value=\"multiple ? ids : (ids[0] ?? '')\"\n :multiple=\"multiple\"\n :disabled=\"disabled\"\n :dir=\"dir\"\n @update:model-value=\"update\"\n >\n <div class=\"select__control\" :data-clearable=\"clearable || undefined\">\n <SelectTrigger\n :id=\"controlId\"\n class=\"select__trigger\"\n :aria-required=\"required || undefined\"\n :aria-invalid=\"invalid || undefined\"\n :aria-describedby=\"describedBy\"\n >\n <span v-if=\"$slots.start\" class=\"selection__leading\" aria-hidden=\"true\"\n ><slot name=\"start\"\n /></span>\n <SelectValue class=\"select__value\" :placeholder=\"placeholder\"\n ><slot v-if=\"selected.length\" name=\"value\" :selected=\"selected\">{{\n selected.map((o) => o.label).join(', ')\n }}</slot\n ><template v-else>{{ placeholder }}</template></SelectValue\n >\n <ChevronIcon class=\"select__icon\" />\n </SelectTrigger>\n <button\n v-if=\"clearable\"\n type=\"button\"\n class=\"selection__clear\"\n :data-empty=\"ids.length === 0 || undefined\"\n :aria-hidden=\"ids.length === 0 || undefined\"\n :tabindex=\"ids.length === 0 ? -1 : undefined\"\n :aria-label=\"clearLabel ?? 'Hapus pilihan'\"\n :disabled=\"disabled || ids.length === 0\"\n @click=\"clear\"\n >\n <CloseIcon class=\"selection__close-icon\" />\n </button>\n </div>\n <SelectPortal\n ><SelectContent\n class=\"select__popover\"\n position=\"popper\"\n :side-offset=\"4\"\n @close-auto-focus=\"afterClose\"\n ><SelectViewport class=\"select__list\">\n <SelectItem\n v-for=\"option in options\"\n :key=\"option.id\"\n :value=\"option.id\"\n :text-value=\"option.label\"\n :disabled=\"option.isDisabled\"\n class=\"select__item\"\n >\n <SelectItemText class=\"select__item-label\"\n ><slot name=\"option\" :option=\"option\"\n >{{ option.label\n }}<span v-if=\"option.description\" class=\"selection__description\">{{\n option.description\n }}</span></slot\n ></SelectItemText\n ><CheckIcon class=\"select__check\" />\n </SelectItem> </SelectViewport></SelectContent\n ></SelectPortal>\n </SelectRoot>\n <FieldFeedback\n :control-id=\"controlId\"\n :description=\"description\"\n :error-message=\"error\"\n :show-error=\"showError\"\n />\n <template v-if=\"name\"\n ><input\n v-for=\"(id, i) in multiple ? ids : [ids[0] ?? '']\"\n :key=\"i\"\n type=\"hidden\"\n :name=\"name\"\n :value=\"id\"\n :disabled=\"disabled\"\n /></template>\n <SelectionValidation\n :has-value=\"ids.length > 0\"\n :required=\"required\"\n :disabled=\"disabled\"\n @invalid=\"\n tried = true;\n focus();\n \"\n @reset=\"reset\"\n />\n </div>\n</template>\n","<script setup lang=\"ts\" generic=\"M extends 'single' | 'multiple' = 'single'\">\nimport { computed, ref, getCurrentInstance } from 'vue';\nimport {\n SelectContent,\n SelectItem,\n SelectItemText,\n SelectPortal,\n SelectRoot,\n SelectTrigger,\n SelectValue,\n SelectViewport,\n} from 'reka-ui';\nimport CheckIcon from './CheckIcon.vue';\nimport ChevronIcon from './ChevronIcon.vue';\nimport CloseIcon from './CloseIcon.vue';\nimport FieldFeedback from './FieldFeedback.vue';\nimport SelectionValidation from './SelectionValidation.vue';\nimport { useFeedback } from './useFeedback.js';\nimport { selectionIds, type SelectOption } from './selection-options.js';\nimport type { SelectSize, SelectVariant } from './types.js';\ntype Value = M extends 'multiple' ? string[] : string | undefined;\nconst props = withDefaults(\n defineProps<{\n label: string;\n options: SelectOption[];\n size?: SelectSize;\n variant?: SelectVariant;\n hideLabel?: boolean;\n fullWidth?: boolean;\n placeholder?: string;\n selectionMode?: M;\n modelValue?: Value;\n defaultValue?: Value;\n disabled?: boolean;\n required?: boolean;\n invalid?: boolean;\n description?: string;\n errorMessage?: string;\n requiredMessage?: string;\n name?: string;\n dir?: 'ltr' | 'rtl';\n clearable?: boolean;\n clearLabel?: string;\n }>(),\n {\n fullWidth: true,\n size: 'md',\n variant: 'primary',\n placeholder: undefined,\n selectionMode: undefined,\n modelValue: undefined,\n defaultValue: undefined,\n description: undefined,\n errorMessage: undefined,\n requiredMessage: undefined,\n name: undefined,\n dir: undefined,\n clearLabel: undefined,\n },\n);\nconst emit = defineEmits<{ 'update:modelValue': [value: Value]; clear: []; close: [] }>();\nfunction afterClose() {\n queueMicrotask(() => emit('close'));\n}\ndefineSlots<{\n start?: () => unknown;\n option?: (props: { option: SelectOption }) => unknown;\n value?: (props: { selected: SelectOption[] }) => unknown;\n}>();\nconst instance = getCurrentInstance();\nconst controlled = () =>\n Object.prototype.hasOwnProperty.call(instance?.vnode.props ?? {}, 'modelValue');\nconst local = ref<unknown>(props.defaultValue);\nconst tried = ref(false);\nconst wrapper = ref<HTMLDivElement>();\nconst multiple = computed(() => props.selectionMode === 'multiple');\nconst ids = computed(() =>\n selectionIds(controlled() ? props.modelValue : local.value, props.options, multiple.value),\n);\nconst selected = computed(() => props.options.filter((o) => ids.value.includes(o.id)));\nconst invalid = computed(\n () => props.invalid || (tried.value && props.required && ids.value.length === 0),\n);\nconst error = computed(\n () =>\n props.errorMessage ??\n (props.required && ids.value.length === 0\n ? (props.requiredMessage ?? 'Pilihan wajib diisi.')\n : undefined),\n);\nconst { controlId, describedBy, showError } = useFeedback({\n get description() {\n return props.description;\n },\n get invalid() {\n return invalid.value;\n },\n get errorMessage() {\n return error.value;\n },\n});\nfunction focus() {\n wrapper.value?.querySelector<HTMLButtonElement>('.select__trigger')?.focus();\n}\nfunction update(value: unknown) {\n if (props.disabled) return;\n const next = selectionIds(value, props.options, multiple.value);\n const result = (multiple.value ? next : next[0]) as Value;\n local.value = result;\n emit('update:modelValue', result);\n}\nfunction clear() {\n update(multiple.value ? [] : undefined);\n emit('clear');\n focus();\n}\nfunction reset(cancelled: boolean) {\n if (!cancelled) {\n tried.value = false;\n if (!controlled()) local.value = props.defaultValue;\n }\n}\n</script>\n<template>\n <div\n ref=\"wrapper\"\n :class=\"[\n 'select',\n `select--${size ?? 'md'}`,\n `select--${variant ?? 'primary'}`,\n hideLabel && 'select--label-hidden',\n fullWidth === false && 'select--fit',\n ]\"\n :data-multiple=\"multiple || undefined\"\n :dir=\"dir\"\n >\n <label class=\"select__label\" :for=\"controlId\"\n >{{ label\n }}<span v-if=\"required\" class=\"selection__required\" aria-hidden=\"true\"> *</span></label\n >\n <SelectRoot\n :model-value=\"multiple ? ids : (ids[0] ?? '')\"\n :multiple=\"multiple\"\n :disabled=\"disabled\"\n :dir=\"dir\"\n @update:model-value=\"update\"\n >\n <div class=\"select__control\" :data-clearable=\"clearable || undefined\">\n <SelectTrigger\n :id=\"controlId\"\n class=\"select__trigger\"\n :aria-required=\"required || undefined\"\n :aria-invalid=\"invalid || undefined\"\n :aria-describedby=\"describedBy\"\n >\n <span v-if=\"$slots.start\" class=\"selection__leading\" aria-hidden=\"true\"\n ><slot name=\"start\"\n /></span>\n <SelectValue class=\"select__value\" :placeholder=\"placeholder\"\n ><slot v-if=\"selected.length\" name=\"value\" :selected=\"selected\">{{\n selected.map((o) => o.label).join(', ')\n }}</slot\n ><template v-else>{{ placeholder }}</template></SelectValue\n >\n <ChevronIcon class=\"select__icon\" />\n </SelectTrigger>\n <button\n v-if=\"clearable\"\n type=\"button\"\n class=\"selection__clear\"\n :data-empty=\"ids.length === 0 || undefined\"\n :aria-hidden=\"ids.length === 0 || undefined\"\n :tabindex=\"ids.length === 0 ? -1 : undefined\"\n :aria-label=\"clearLabel ?? 'Hapus pilihan'\"\n :disabled=\"disabled || ids.length === 0\"\n @click=\"clear\"\n >\n <CloseIcon class=\"selection__close-icon\" />\n </button>\n </div>\n <SelectPortal\n ><SelectContent\n class=\"select__popover\"\n position=\"popper\"\n :side-offset=\"4\"\n @close-auto-focus=\"afterClose\"\n ><SelectViewport class=\"select__list\">\n <SelectItem\n v-for=\"option in options\"\n :key=\"option.id\"\n :value=\"option.id\"\n :text-value=\"option.label\"\n :disabled=\"option.isDisabled\"\n class=\"select__item\"\n >\n <SelectItemText class=\"select__item-label\"\n ><slot name=\"option\" :option=\"option\"\n >{{ option.label\n }}<span v-if=\"option.description\" class=\"selection__description\">{{\n option.description\n }}</span></slot\n ></SelectItemText\n ><CheckIcon class=\"select__check\" />\n </SelectItem> </SelectViewport></SelectContent\n ></SelectPortal>\n </SelectRoot>\n <FieldFeedback\n :control-id=\"controlId\"\n :description=\"description\"\n :error-message=\"error\"\n :show-error=\"showError\"\n />\n <template v-if=\"name\"\n ><input\n v-for=\"(id, i) in multiple ? ids : [ids[0] ?? '']\"\n :key=\"i\"\n type=\"hidden\"\n :name=\"name\"\n :value=\"id\"\n :disabled=\"disabled\"\n /></template>\n <SelectionValidation\n :has-value=\"ids.length > 0\"\n :required=\"required\"\n :disabled=\"disabled\"\n @invalid=\"\n tried = true;\n focus();\n \"\n @reset=\"reset\"\n />\n </div>\n</template>\n","import { cloneVNode, defineComponent, Fragment, h, type PropType, type VNode } from 'vue';\nimport Select from './Select.vue';\nimport type { SelectSize, SelectVariant } from './types.js';\nexport default /* @__PURE__ */ defineComponent({\n name: 'SelectGroup',\n inheritAttrs: false,\n props: {\n label: { type: String, required: true },\n size: { type: String as PropType<SelectSize>, default: undefined },\n variant: { type: String as PropType<SelectVariant>, default: undefined },\n fullWidth: { type: Boolean, default: true },\n disabled: Boolean,\n dir: { type: String as PropType<'ltr' | 'rtl'>, default: undefined },\n },\n setup(props, { slots }) {\n function defaults(nodes: VNode[]): VNode[] {\n return nodes.map((child) => {\n if (child.type === Fragment && Array.isArray(child.children)) {\n const fragment = cloneVNode(child);\n fragment.children = defaults(child.children as VNode[]);\n return fragment;\n }\n if (child.type !== Select) return child;\n return cloneVNode(child, {\n size: child.props?.size ?? props.size,\n variant: child.props?.variant ?? props.variant,\n hideLabel: child.props?.hideLabel ?? child.props?.['hide-label'] ?? true,\n fullWidth: child.props?.fullWidth ?? child.props?.['full-width'] ?? props.fullWidth,\n disabled: props.disabled || child.props?.disabled,\n dir: child.props?.dir ?? props.dir,\n });\n });\n }\n return () =>\n h(\n 'fieldset',\n {\n class: ['select-group', !props.fullWidth && 'select-group--fit'],\n disabled: props.disabled,\n dir: props.dir,\n },\n [\n h('legend', { class: 'select-group__legend' }, props.label),\n h('div', { class: 'select-group__controls' }, defaults(slots.default?.() ?? [])),\n ],\n );\n },\n});\n","<script setup lang=\"ts\">\nimport { computed, onMounted, ref } from 'vue';\nimport { Label, useId } from 'reka-ui';\nimport type { InputSize, InputType, InputVariant, InputMode, InputEnterKeyHint } from './types.js';\n\ndefineOptions({ inheritAttrs: false });\n\nconst props = withDefaults(\n defineProps<{\n label: string;\n defaultValue?: string;\n description?: string;\n /** Shown only when invalid is true; the application owns validation. */\n errorMessage?: string;\n invalid?: boolean;\n disabled?: boolean;\n readonly?: boolean;\n required?: boolean;\n placeholder?: string;\n type?: InputType;\n size?: InputSize;\n variant?: InputVariant;\n fullWidth?: boolean;\n name?: string;\n id?: string;\n autoComplete?: string;\n maxLength?: number;\n minLength?: number;\n pattern?: string;\n inputMode?: InputMode;\n enterKeyHint?: InputEnterKeyHint;\n autoFocus?: boolean;\n spellCheck?: boolean;\n form?: string;\n dir?: 'ltr' | 'rtl';\n }>(),\n {\n type: 'text',\n size: 'md',\n variant: 'primary',\n fullWidth: true,\n invalid: false,\n disabled: false,\n readonly: false,\n required: false,\n defaultValue: '',\n description: undefined,\n errorMessage: undefined,\n placeholder: undefined,\n name: undefined,\n id: undefined,\n autoComplete: undefined,\n maxLength: undefined,\n minLength: undefined,\n pattern: undefined,\n inputMode: undefined,\n enterKeyHint: undefined,\n spellCheck: undefined,\n form: undefined,\n dir: undefined,\n },\n);\ndefineSlots<{ prefix?: () => unknown; suffix?: () => unknown }>();\nconst emit = defineEmits<{\n focus: [event: FocusEvent];\n blur: [event: FocusEvent];\n keydown: [event: KeyboardEvent];\n keyup: [event: KeyboardEvent];\n}>();\nconst control = ref<HTMLInputElement>();\nfunction focus() {\n if (!props.disabled) control.value?.focus();\n}\nfunction select() {\n if (!props.disabled) control.value?.select();\n}\ndefineExpose({ focus, select, element: control });\nonMounted(() => {\n if (props.autoFocus) focus();\n});\nfunction pointerdown(event: PointerEvent) {\n if (\n !props.disabled &&\n !(event.target as Element).closest(\n 'input,button,a,select,textarea,[tabindex],[contenteditable]',\n )\n ) {\n event.preventDefault();\n focus();\n }\n}\n\n/** Controlled v-model values are strings; clear with an empty string. */\nconst model = defineModel<string>();\nconst local = ref(props.defaultValue ?? '');\nconst value = computed(() => model.value ?? local.value);\nconst generatedId = useId();\nconst controlId = computed(() => props.id ?? generatedId);\nconst showError = computed(() => props.invalid && !!props.errorMessage);\nconst describedBy = computed(\n () =>\n [\n props.description && `${controlId.value}-description`,\n showError.value && `${controlId.value}-error`,\n ]\n .filter(Boolean)\n .join(' ') || undefined,\n);\n\nfunction onInput(event: Event) {\n if (props.disabled || props.readonly) return;\n const next = (event.target as HTMLInputElement).value;\n local.value = next;\n model.value = next;\n}\n</script>\n\n<template>\n <div\n :class=\"['input', `input--${size}`, `input--${variant}`, !fullWidth && 'input--fit']\"\n :dir=\"dir\"\n >\n <Label class=\"input__label\" :for=\"controlId\">{{ label }}</Label>\n <fieldset class=\"input__boundary\" role=\"presentation\" :disabled=\"disabled\">\n <div\n :class=\"$slots.prefix || $slots.suffix ? 'input__group' : 'input__plain'\"\n :data-invalid=\"invalid || undefined\"\n :data-readonly=\"readonly || undefined\"\n @pointerdown=\"pointerdown\"\n >\n <span v-if=\"$slots.prefix\" class=\"input__prefix\"><slot name=\"prefix\" /></span>\n <input\n :id=\"controlId\"\n ref=\"control\"\n class=\"input__control\"\n :type=\"type\"\n :name=\"name\"\n :value=\"value\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n :required=\"required\"\n :aria-required=\"required || undefined\"\n :aria-invalid=\"invalid || undefined\"\n :aria-describedby=\"describedBy\"\n :autocomplete=\"autoComplete\"\n :maxlength=\"maxLength\"\n :minlength=\"minLength\"\n :pattern=\"pattern\"\n :inputmode=\"inputMode\"\n :enterkeyhint=\"enterKeyHint\"\n :autofocus=\"autoFocus\"\n :spellcheck=\"spellCheck\"\n :form=\"form\"\n @input=\"onInput\"\n @focus=\"emit('focus', $event)\"\n @blur=\"emit('blur', $event)\"\n @keydown=\"emit('keydown', $event)\"\n @keyup=\"emit('keyup', $event)\"\n />\n <span v-if=\"$slots.suffix\" class=\"input__suffix\"><slot name=\"suffix\" /></span>\n </div>\n </fieldset>\n <span v-if=\"description\" :id=\"`${controlId}-description`\" class=\"input__description\">{{\n description\n }}</span>\n <div v-if=\"showError\" :id=\"`${controlId}-error`\" class=\"input__error\">{{ errorMessage }}</div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, onMounted, ref } from 'vue';\nimport { Label, useId } from 'reka-ui';\nimport type { InputSize, InputType, InputVariant, InputMode, InputEnterKeyHint } from './types.js';\n\ndefineOptions({ inheritAttrs: false });\n\nconst props = withDefaults(\n defineProps<{\n label: string;\n defaultValue?: string;\n description?: string;\n /** Shown only when invalid is true; the application owns validation. */\n errorMessage?: string;\n invalid?: boolean;\n disabled?: boolean;\n readonly?: boolean;\n required?: boolean;\n placeholder?: string;\n type?: InputType;\n size?: InputSize;\n variant?: InputVariant;\n fullWidth?: boolean;\n name?: string;\n id?: string;\n autoComplete?: string;\n maxLength?: number;\n minLength?: number;\n pattern?: string;\n inputMode?: InputMode;\n enterKeyHint?: InputEnterKeyHint;\n autoFocus?: boolean;\n spellCheck?: boolean;\n form?: string;\n dir?: 'ltr' | 'rtl';\n }>(),\n {\n type: 'text',\n size: 'md',\n variant: 'primary',\n fullWidth: true,\n invalid: false,\n disabled: false,\n readonly: false,\n required: false,\n defaultValue: '',\n description: undefined,\n errorMessage: undefined,\n placeholder: undefined,\n name: undefined,\n id: undefined,\n autoComplete: undefined,\n maxLength: undefined,\n minLength: undefined,\n pattern: undefined,\n inputMode: undefined,\n enterKeyHint: undefined,\n spellCheck: undefined,\n form: undefined,\n dir: undefined,\n },\n);\ndefineSlots<{ prefix?: () => unknown; suffix?: () => unknown }>();\nconst emit = defineEmits<{\n focus: [event: FocusEvent];\n blur: [event: FocusEvent];\n keydown: [event: KeyboardEvent];\n keyup: [event: KeyboardEvent];\n}>();\nconst control = ref<HTMLInputElement>();\nfunction focus() {\n if (!props.disabled) control.value?.focus();\n}\nfunction select() {\n if (!props.disabled) control.value?.select();\n}\ndefineExpose({ focus, select, element: control });\nonMounted(() => {\n if (props.autoFocus) focus();\n});\nfunction pointerdown(event: PointerEvent) {\n if (\n !props.disabled &&\n !(event.target as Element).closest(\n 'input,button,a,select,textarea,[tabindex],[contenteditable]',\n )\n ) {\n event.preventDefault();\n focus();\n }\n}\n\n/** Controlled v-model values are strings; clear with an empty string. */\nconst model = defineModel<string>();\nconst local = ref(props.defaultValue ?? '');\nconst value = computed(() => model.value ?? local.value);\nconst generatedId = useId();\nconst controlId = computed(() => props.id ?? generatedId);\nconst showError = computed(() => props.invalid && !!props.errorMessage);\nconst describedBy = computed(\n () =>\n [\n props.description && `${controlId.value}-description`,\n showError.value && `${controlId.value}-error`,\n ]\n .filter(Boolean)\n .join(' ') || undefined,\n);\n\nfunction onInput(event: Event) {\n if (props.disabled || props.readonly) return;\n const next = (event.target as HTMLInputElement).value;\n local.value = next;\n model.value = next;\n}\n</script>\n\n<template>\n <div\n :class=\"['input', `input--${size}`, `input--${variant}`, !fullWidth && 'input--fit']\"\n :dir=\"dir\"\n >\n <Label class=\"input__label\" :for=\"controlId\">{{ label }}</Label>\n <fieldset class=\"input__boundary\" role=\"presentation\" :disabled=\"disabled\">\n <div\n :class=\"$slots.prefix || $slots.suffix ? 'input__group' : 'input__plain'\"\n :data-invalid=\"invalid || undefined\"\n :data-readonly=\"readonly || undefined\"\n @pointerdown=\"pointerdown\"\n >\n <span v-if=\"$slots.prefix\" class=\"input__prefix\"><slot name=\"prefix\" /></span>\n <input\n :id=\"controlId\"\n ref=\"control\"\n class=\"input__control\"\n :type=\"type\"\n :name=\"name\"\n :value=\"value\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n :required=\"required\"\n :aria-required=\"required || undefined\"\n :aria-invalid=\"invalid || undefined\"\n :aria-describedby=\"describedBy\"\n :autocomplete=\"autoComplete\"\n :maxlength=\"maxLength\"\n :minlength=\"minLength\"\n :pattern=\"pattern\"\n :inputmode=\"inputMode\"\n :enterkeyhint=\"enterKeyHint\"\n :autofocus=\"autoFocus\"\n :spellcheck=\"spellCheck\"\n :form=\"form\"\n @input=\"onInput\"\n @focus=\"emit('focus', $event)\"\n @blur=\"emit('blur', $event)\"\n @keydown=\"emit('keydown', $event)\"\n @keyup=\"emit('keyup', $event)\"\n />\n <span v-if=\"$slots.suffix\" class=\"input__suffix\"><slot name=\"suffix\" /></span>\n </div>\n </fieldset>\n <span v-if=\"description\" :id=\"`${controlId}-description`\" class=\"input__description\">{{\n description\n }}</span>\n <div v-if=\"showError\" :id=\"`${controlId}-error`\" class=\"input__error\">{{ errorMessage }}</div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport { Label, useId } from 'reka-ui';\n\ndefineOptions({ inheritAttrs: false });\n\nconst props = withDefaults(\n defineProps<{\n label: string;\n defaultValue?: string;\n description?: string;\n /** Shown only when invalid is true; the application owns validation. */\n errorMessage?: string;\n invalid?: boolean;\n disabled?: boolean;\n readonly?: boolean;\n required?: boolean;\n placeholder?: string;\n rows?: number;\n resize?: 'vertical' | 'none';\n name?: string;\n id?: string;\n autoComplete?: string;\n maxLength?: number;\n dir?: 'ltr' | 'rtl';\n }>(),\n {\n rows: 3,\n resize: 'vertical',\n invalid: false,\n disabled: false,\n readonly: false,\n required: false,\n defaultValue: '',\n description: undefined,\n errorMessage: undefined,\n placeholder: undefined,\n name: undefined,\n id: undefined,\n autoComplete: undefined,\n maxLength: undefined,\n dir: undefined,\n },\n);\n\n/** Controlled v-model values are strings; clear with an empty string. */\nconst model = defineModel<string>();\nconst local = ref(props.defaultValue ?? '');\nconst value = computed(() => model.value ?? local.value);\nconst generatedId = useId();\nconst controlId = computed(() => props.id ?? generatedId);\nconst showError = computed(() => props.invalid && !!props.errorMessage);\nconst describedBy = computed(\n () =>\n [\n props.description && `${controlId.value}-description`,\n showError.value && `${controlId.value}-error`,\n ]\n .filter(Boolean)\n .join(' ') || undefined,\n);\n\nfunction onInput(event: Event) {\n if (props.disabled || props.readonly) return;\n const next = (event.target as HTMLTextAreaElement).value;\n local.value = next;\n model.value = next;\n}\n</script>\n\n<template>\n <div class=\"input textarea\" :data-resize=\"resize\" :dir=\"dir\">\n <Label class=\"input__label\" :for=\"controlId\">{{ label }}</Label>\n <textarea\n :id=\"controlId\"\n class=\"input__control textarea__control\"\n :rows=\"rows\"\n :name=\"name\"\n :value=\"value\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n :required=\"required\"\n :aria-required=\"required || undefined\"\n :aria-invalid=\"invalid || undefined\"\n :aria-describedby=\"describedBy\"\n :autocomplete=\"autoComplete\"\n :maxlength=\"maxLength\"\n @input=\"onInput\"\n />\n <span v-if=\"description\" :id=\"`${controlId}-description`\" class=\"input__description\">{{\n description\n }}</span>\n <div v-if=\"showError\" :id=\"`${controlId}-error`\" class=\"input__error\">{{ errorMessage }}</div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport { Label, useId } from 'reka-ui';\n\ndefineOptions({ inheritAttrs: false });\n\nconst props = withDefaults(\n defineProps<{\n label: string;\n defaultValue?: string;\n description?: string;\n /** Shown only when invalid is true; the application owns validation. */\n errorMessage?: string;\n invalid?: boolean;\n disabled?: boolean;\n readonly?: boolean;\n required?: boolean;\n placeholder?: string;\n rows?: number;\n resize?: 'vertical' | 'none';\n name?: string;\n id?: string;\n autoComplete?: string;\n maxLength?: number;\n dir?: 'ltr' | 'rtl';\n }>(),\n {\n rows: 3,\n resize: 'vertical',\n invalid: false,\n disabled: false,\n readonly: false,\n required: false,\n defaultValue: '',\n description: undefined,\n errorMessage: undefined,\n placeholder: undefined,\n name: undefined,\n id: undefined,\n autoComplete: undefined,\n maxLength: undefined,\n dir: undefined,\n },\n);\n\n/** Controlled v-model values are strings; clear with an empty string. */\nconst model = defineModel<string>();\nconst local = ref(props.defaultValue ?? '');\nconst value = computed(() => model.value ?? local.value);\nconst generatedId = useId();\nconst controlId = computed(() => props.id ?? generatedId);\nconst showError = computed(() => props.invalid && !!props.errorMessage);\nconst describedBy = computed(\n () =>\n [\n props.description && `${controlId.value}-description`,\n showError.value && `${controlId.value}-error`,\n ]\n .filter(Boolean)\n .join(' ') || undefined,\n);\n\nfunction onInput(event: Event) {\n if (props.disabled || props.readonly) return;\n const next = (event.target as HTMLTextAreaElement).value;\n local.value = next;\n model.value = next;\n}\n</script>\n\n<template>\n <div class=\"input textarea\" :data-resize=\"resize\" :dir=\"dir\">\n <Label class=\"input__label\" :for=\"controlId\">{{ label }}</Label>\n <textarea\n :id=\"controlId\"\n class=\"input__control textarea__control\"\n :rows=\"rows\"\n :name=\"name\"\n :value=\"value\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n :required=\"required\"\n :aria-required=\"required || undefined\"\n :aria-invalid=\"invalid || undefined\"\n :aria-describedby=\"describedBy\"\n :autocomplete=\"autoComplete\"\n :maxlength=\"maxLength\"\n @input=\"onInput\"\n />\n <span v-if=\"description\" :id=\"`${controlId}-description`\" class=\"input__description\">{{\n description\n }}</span>\n <div v-if=\"showError\" :id=\"`${controlId}-error`\" class=\"input__error\">{{ errorMessage }}</div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { Label as RekaLabel } from 'reka-ui';\ndefineOptions({ inheritAttrs: false });\nconst props = withDefaults(defineProps<{ for?: string; id?: string }>(), {\n for: undefined,\n id: undefined,\n});\n</script>\n<template>\n <RekaLabel :id=\"id\" class=\"label\" :for=\"props.for\"><slot /></RekaLabel>\n</template>\n","<script setup lang=\"ts\">\nimport { Label as RekaLabel } from 'reka-ui';\ndefineOptions({ inheritAttrs: false });\nconst props = withDefaults(defineProps<{ for?: string; id?: string }>(), {\n for: undefined,\n id: undefined,\n});\n</script>\n<template>\n <RekaLabel :id=\"id\" class=\"label\" :for=\"props.for\"><slot /></RekaLabel>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport { CheckboxRoot, Label } from 'reka-ui';\nimport CheckIcon from './CheckIcon.vue';\nimport FieldFeedback from './FieldFeedback.vue';\nimport { useFeedback } from './useFeedback.js';\ndefineOptions({ inheritAttrs: false });\nconst props = withDefaults(\n defineProps<{\n label: string;\n modelValue?: boolean;\n defaultValue?: boolean;\n indeterminate?: boolean;\n disabled?: boolean;\n required?: boolean;\n invalid?: boolean;\n description?: string;\n errorMessage?: string;\n name?: string;\n value?: string;\n id?: string;\n dir?: 'ltr' | 'rtl';\n }>(),\n {\n modelValue: undefined,\n defaultValue: false,\n disabled: false,\n required: false,\n invalid: false,\n indeterminate: false,\n description: undefined,\n errorMessage: undefined,\n name: undefined,\n value: 'on',\n id: undefined,\n dir: undefined,\n },\n);\nconst emit = defineEmits<{ 'update:modelValue': [value: boolean] }>();\nconst local = ref(props.defaultValue);\nconst selected = computed(() => props.modelValue ?? local.value);\nconst state = computed(() => (props.indeterminate ? 'indeterminate' : selected.value));\nconst { controlId, showError, describedBy } = useFeedback(props);\nfunction update(value: boolean | 'indeterminate') {\n if (props.disabled) return;\n const next = props.indeterminate ? !selected.value : value === true;\n local.value = next;\n emit('update:modelValue', next);\n}\n</script>\n<template>\n <div class=\"input\" :dir=\"dir\">\n <div class=\"choice\" :data-disabled=\"disabled || undefined\">\n <CheckboxRoot\n :id=\"controlId\"\n class=\"checkbox__control\"\n :model-value=\"state\"\n :disabled=\"disabled\"\n :required=\"required\"\n :name=\"indeterminate ? undefined : name\"\n :value=\"value\"\n :aria-describedby=\"describedBy\"\n :aria-invalid=\"invalid || undefined\"\n :data-invalid=\"invalid || undefined\"\n @update:model-value=\"update\"\n >\n <CheckIcon class=\"checkbox__check\" /><span class=\"checkbox__dash\" />\n </CheckboxRoot>\n <Label class=\"choice__label\" :for=\"controlId\">{{ label }}</Label>\n </div>\n <!-- Keep mixed presentation separate from the boolean form value. -->\n <input\n v-if=\"indeterminate && selected && name && !disabled\"\n type=\"hidden\"\n :name=\"name\"\n :value=\"value\"\n />\n <FieldFeedback\n :control-id=\"controlId\"\n :description=\"description\"\n :error-message=\"errorMessage\"\n :show-error=\"showError\"\n />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport { CheckboxRoot, Label } from 'reka-ui';\nimport CheckIcon from './CheckIcon.vue';\nimport FieldFeedback from './FieldFeedback.vue';\nimport { useFeedback } from './useFeedback.js';\ndefineOptions({ inheritAttrs: false });\nconst props = withDefaults(\n defineProps<{\n label: string;\n modelValue?: boolean;\n defaultValue?: boolean;\n indeterminate?: boolean;\n disabled?: boolean;\n required?: boolean;\n invalid?: boolean;\n description?: string;\n errorMessage?: string;\n name?: string;\n value?: string;\n id?: string;\n dir?: 'ltr' | 'rtl';\n }>(),\n {\n modelValue: undefined,\n defaultValue: false,\n disabled: false,\n required: false,\n invalid: false,\n indeterminate: false,\n description: undefined,\n errorMessage: undefined,\n name: undefined,\n value: 'on',\n id: undefined,\n dir: undefined,\n },\n);\nconst emit = defineEmits<{ 'update:modelValue': [value: boolean] }>();\nconst local = ref(props.defaultValue);\nconst selected = computed(() => props.modelValue ?? local.value);\nconst state = computed(() => (props.indeterminate ? 'indeterminate' : selected.value));\nconst { controlId, showError, describedBy } = useFeedback(props);\nfunction update(value: boolean | 'indeterminate') {\n if (props.disabled) return;\n const next = props.indeterminate ? !selected.value : value === true;\n local.value = next;\n emit('update:modelValue', next);\n}\n</script>\n<template>\n <div class=\"input\" :dir=\"dir\">\n <div class=\"choice\" :data-disabled=\"disabled || undefined\">\n <CheckboxRoot\n :id=\"controlId\"\n class=\"checkbox__control\"\n :model-value=\"state\"\n :disabled=\"disabled\"\n :required=\"required\"\n :name=\"indeterminate ? undefined : name\"\n :value=\"value\"\n :aria-describedby=\"describedBy\"\n :aria-invalid=\"invalid || undefined\"\n :data-invalid=\"invalid || undefined\"\n @update:model-value=\"update\"\n >\n <CheckIcon class=\"checkbox__check\" /><span class=\"checkbox__dash\" />\n </CheckboxRoot>\n <Label class=\"choice__label\" :for=\"controlId\">{{ label }}</Label>\n </div>\n <!-- Keep mixed presentation separate from the boolean form value. -->\n <input\n v-if=\"indeterminate && selected && name && !disabled\"\n type=\"hidden\"\n :name=\"name\"\n :value=\"value\"\n />\n <FieldFeedback\n :control-id=\"controlId\"\n :description=\"description\"\n :error-message=\"errorMessage\"\n :show-error=\"showError\"\n />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport { RadioGroupRoot, RadioGroupItem, Label } from 'reka-ui';\nimport type { RadioOption } from './types.js';\nimport FieldFeedback from './FieldFeedback.vue';\nimport { useFeedback } from './useFeedback.js';\ndefineOptions({ inheritAttrs: false });\nconst props = withDefaults(\n defineProps<{\n label: string;\n options: RadioOption[];\n defaultValue?: string;\n disabled?: boolean;\n required?: boolean;\n invalid?: boolean;\n description?: string;\n errorMessage?: string;\n name?: string;\n id?: string;\n orientation?: 'vertical' | 'horizontal';\n dir?: 'ltr' | 'rtl';\n }>(),\n {\n defaultValue: '',\n disabled: false,\n required: false,\n invalid: false,\n description: undefined,\n errorMessage: undefined,\n name: undefined,\n id: undefined,\n orientation: 'vertical',\n dir: undefined,\n },\n);\nconst model = defineModel<string>();\nconst local = ref(props.defaultValue);\nconst value = computed(() => model.value ?? local.value);\nconst { controlId, describedBy, showError } = useFeedback(props);\nfunction update(next: unknown) {\n if (props.disabled || typeof next !== 'string') return;\n local.value = next;\n model.value = next;\n}\n</script>\n<template>\n <RadioGroupRoot\n :id=\"controlId\"\n class=\"input radio-group\"\n :model-value=\"value\"\n :disabled=\"disabled\"\n :required=\"required\"\n :name=\"name\"\n :orientation=\"orientation\"\n :dir=\"dir\"\n :aria-labelledby=\"`${controlId}-label`\"\n :aria-describedby=\"describedBy\"\n :aria-invalid=\"invalid || undefined\"\n @update:model-value=\"update\"\n >\n <span :id=\"`${controlId}-label`\" class=\"label\">{{ label }}</span>\n <div class=\"radio-group__items\" :data-orientation=\"orientation\">\n <div\n v-for=\"(option, index) in options\"\n :key=\"option.id\"\n class=\"choice\"\n :data-disabled=\"disabled || option.isDisabled || undefined\"\n >\n <RadioGroupItem\n :id=\"`${controlId}-option-${index}`\"\n class=\"radio__control\"\n :value=\"option.id\"\n :disabled=\"option.isDisabled\"\n :data-invalid=\"invalid || undefined\"\n ><span class=\"radio__dot\"\n /></RadioGroupItem>\n <Label class=\"choice__label\" :for=\"`${controlId}-option-${index}`\">{{\n option.label\n }}</Label>\n </div>\n </div>\n <FieldFeedback\n :control-id=\"controlId\"\n :description=\"description\"\n :error-message=\"errorMessage\"\n :show-error=\"showError\"\n />\n </RadioGroupRoot>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport { RadioGroupRoot, RadioGroupItem, Label } from 'reka-ui';\nimport type { RadioOption } from './types.js';\nimport FieldFeedback from './FieldFeedback.vue';\nimport { useFeedback } from './useFeedback.js';\ndefineOptions({ inheritAttrs: false });\nconst props = withDefaults(\n defineProps<{\n label: string;\n options: RadioOption[];\n defaultValue?: string;\n disabled?: boolean;\n required?: boolean;\n invalid?: boolean;\n description?: string;\n errorMessage?: string;\n name?: string;\n id?: string;\n orientation?: 'vertical' | 'horizontal';\n dir?: 'ltr' | 'rtl';\n }>(),\n {\n defaultValue: '',\n disabled: false,\n required: false,\n invalid: false,\n description: undefined,\n errorMessage: undefined,\n name: undefined,\n id: undefined,\n orientation: 'vertical',\n dir: undefined,\n },\n);\nconst model = defineModel<string>();\nconst local = ref(props.defaultValue);\nconst value = computed(() => model.value ?? local.value);\nconst { controlId, describedBy, showError } = useFeedback(props);\nfunction update(next: unknown) {\n if (props.disabled || typeof next !== 'string') return;\n local.value = next;\n model.value = next;\n}\n</script>\n<template>\n <RadioGroupRoot\n :id=\"controlId\"\n class=\"input radio-group\"\n :model-value=\"value\"\n :disabled=\"disabled\"\n :required=\"required\"\n :name=\"name\"\n :orientation=\"orientation\"\n :dir=\"dir\"\n :aria-labelledby=\"`${controlId}-label`\"\n :aria-describedby=\"describedBy\"\n :aria-invalid=\"invalid || undefined\"\n @update:model-value=\"update\"\n >\n <span :id=\"`${controlId}-label`\" class=\"label\">{{ label }}</span>\n <div class=\"radio-group__items\" :data-orientation=\"orientation\">\n <div\n v-for=\"(option, index) in options\"\n :key=\"option.id\"\n class=\"choice\"\n :data-disabled=\"disabled || option.isDisabled || undefined\"\n >\n <RadioGroupItem\n :id=\"`${controlId}-option-${index}`\"\n class=\"radio__control\"\n :value=\"option.id\"\n :disabled=\"option.isDisabled\"\n :data-invalid=\"invalid || undefined\"\n ><span class=\"radio__dot\"\n /></RadioGroupItem>\n <Label class=\"choice__label\" :for=\"`${controlId}-option-${index}`\">{{\n option.label\n }}</Label>\n </div>\n </div>\n <FieldFeedback\n :control-id=\"controlId\"\n :description=\"description\"\n :error-message=\"errorMessage\"\n :show-error=\"showError\"\n />\n </RadioGroupRoot>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport { SwitchRoot, Label } from 'reka-ui';\n\nimport FieldFeedback from './FieldFeedback.vue';\nimport { useFeedback } from './useFeedback.js';\ndefineOptions({ inheritAttrs: false });\nconst props = withDefaults(\n defineProps<{\n label: string;\n modelValue?: boolean;\n defaultValue?: boolean;\n\n disabled?: boolean;\n invalid?: boolean;\n description?: string;\n errorMessage?: string;\n name?: string;\n value?: string;\n id?: string;\n dir?: 'ltr' | 'rtl';\n }>(),\n {\n modelValue: undefined,\n defaultValue: false,\n disabled: false,\n invalid: false,\n description: undefined,\n errorMessage: undefined,\n name: undefined,\n value: 'on',\n id: undefined,\n dir: undefined,\n },\n);\nconst emit = defineEmits<{ 'update:modelValue': [value: boolean] }>();\nconst local = ref(props.defaultValue);\nconst selected = computed(() => props.modelValue ?? local.value);\nconst state = computed(() => selected.value);\nconst { controlId, showError, describedBy } = useFeedback(props);\nfunction update(value: boolean) {\n if (props.disabled) return;\n const next = value;\n local.value = next;\n emit('update:modelValue', next);\n}\n</script>\n<template>\n <div class=\"input\" :dir=\"dir\">\n <div class=\"choice\" :data-disabled=\"disabled || undefined\">\n <SwitchRoot\n :id=\"controlId\"\n class=\"switch__control\"\n :model-value=\"state\"\n :disabled=\"disabled\"\n :name=\"name\"\n :value=\"value\"\n :aria-describedby=\"describedBy\"\n :aria-invalid=\"invalid || undefined\"\n :data-invalid=\"invalid || undefined\"\n @update:model-value=\"update\"\n >\n <span class=\"switch__thumb\" />\n </SwitchRoot>\n <Label class=\"choice__label\" :for=\"controlId\">{{ label }}</Label>\n </div>\n <FieldFeedback\n :control-id=\"controlId\"\n :description=\"description\"\n :error-message=\"errorMessage\"\n :show-error=\"showError\"\n />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport { SwitchRoot, Label } from 'reka-ui';\n\nimport FieldFeedback from './FieldFeedback.vue';\nimport { useFeedback } from './useFeedback.js';\ndefineOptions({ inheritAttrs: false });\nconst props = withDefaults(\n defineProps<{\n label: string;\n modelValue?: boolean;\n defaultValue?: boolean;\n\n disabled?: boolean;\n invalid?: boolean;\n description?: string;\n errorMessage?: string;\n name?: string;\n value?: string;\n id?: string;\n dir?: 'ltr' | 'rtl';\n }>(),\n {\n modelValue: undefined,\n defaultValue: false,\n disabled: false,\n invalid: false,\n description: undefined,\n errorMessage: undefined,\n name: undefined,\n value: 'on',\n id: undefined,\n dir: undefined,\n },\n);\nconst emit = defineEmits<{ 'update:modelValue': [value: boolean] }>();\nconst local = ref(props.defaultValue);\nconst selected = computed(() => props.modelValue ?? local.value);\nconst state = computed(() => selected.value);\nconst { controlId, showError, describedBy } = useFeedback(props);\nfunction update(value: boolean) {\n if (props.disabled) return;\n const next = value;\n local.value = next;\n emit('update:modelValue', next);\n}\n</script>\n<template>\n <div class=\"input\" :dir=\"dir\">\n <div class=\"choice\" :data-disabled=\"disabled || undefined\">\n <SwitchRoot\n :id=\"controlId\"\n class=\"switch__control\"\n :model-value=\"state\"\n :disabled=\"disabled\"\n :name=\"name\"\n :value=\"value\"\n :aria-describedby=\"describedBy\"\n :aria-invalid=\"invalid || undefined\"\n :data-invalid=\"invalid || undefined\"\n @update:model-value=\"update\"\n >\n <span class=\"switch__thumb\" />\n </SwitchRoot>\n <Label class=\"choice__label\" :for=\"controlId\">{{ label }}</Label>\n </div>\n <FieldFeedback\n :control-id=\"controlId\"\n :description=\"description\"\n :error-message=\"errorMessage\"\n :show-error=\"showError\"\n />\n </div>\n</template>\n","import type { ComputedRef, InjectionKey } from 'vue';\nimport type { ValidationErrors } from './types.js';\nexport const formErrorsKey: InjectionKey<ComputedRef<ValidationErrors>> =\n /* @__PURE__ */ Symbol('KazeeFormErrors');\n","<script setup lang=\"ts\">\nimport { computed, inject } from 'vue';\nimport { Label } from 'reka-ui';\nimport FieldFeedback from './FieldFeedback.vue';\nimport { useFeedback } from './useFeedback.js';\nimport { formErrorsKey } from './form-context.js';\nimport type { FieldControlProps, FieldSlotProps, ValidationErrors } from './types.js';\n\ndefineOptions({ inheritAttrs: false });\nconst props = withDefaults(\n defineProps<{\n label: string;\n name: string;\n id?: string;\n description?: string;\n errorMessage?: string;\n invalid?: boolean;\n disabled?: boolean;\n readonly?: boolean;\n required?: boolean;\n dir?: 'ltr' | 'rtl';\n }>(),\n {\n id: undefined,\n description: undefined,\n errorMessage: undefined,\n invalid: false,\n disabled: false,\n readonly: false,\n required: false,\n dir: undefined,\n },\n);\ndefineSlots<{ default(props: FieldSlotProps): unknown }>();\nconst errors = inject(\n formErrorsKey,\n computed<ValidationErrors>(() => ({})),\n);\nconst error = computed(() => {\n const map = errors.value;\n return Object.hasOwn(map, props.name) && typeof map[props.name] === 'string'\n ? map[props.name] || undefined\n : undefined;\n});\nconst invalidState = computed(() => props.invalid || !!error.value);\nconst message = computed(() => (props.invalid && props.errorMessage) || error.value || undefined);\nconst { controlId, showError, describedBy } = useFeedback({\n get id() {\n return props.id;\n },\n get description() {\n return props.description;\n },\n get invalid() {\n return invalidState.value;\n },\n get errorMessage() {\n return message.value;\n },\n});\nconst controlProps = computed<FieldControlProps>(() => ({\n id: controlId.value,\n name: props.name,\n class: 'input__control field__control',\n disabled: props.disabled,\n readonly: props.readonly,\n required: props.required,\n 'aria-required': props.required || undefined,\n 'aria-invalid': invalidState.value || undefined,\n 'aria-describedby': describedBy.value,\n}));\n</script>\n<template>\n <div class=\"input field\" :dir=\"dir\">\n <Label class=\"label\" :for=\"controlId\">{{ label }}</Label>\n <slot :control-props=\"controlProps\" :invalid=\"invalidState\" :error-message=\"message\" />\n <FieldFeedback\n :control-id=\"controlId\"\n :description=\"description\"\n :error-message=\"message\"\n :show-error=\"showError\"\n />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, inject } from 'vue';\nimport { Label } from 'reka-ui';\nimport FieldFeedback from './FieldFeedback.vue';\nimport { useFeedback } from './useFeedback.js';\nimport { formErrorsKey } from './form-context.js';\nimport type { FieldControlProps, FieldSlotProps, ValidationErrors } from './types.js';\n\ndefineOptions({ inheritAttrs: false });\nconst props = withDefaults(\n defineProps<{\n label: string;\n name: string;\n id?: string;\n description?: string;\n errorMessage?: string;\n invalid?: boolean;\n disabled?: boolean;\n readonly?: boolean;\n required?: boolean;\n dir?: 'ltr' | 'rtl';\n }>(),\n {\n id: undefined,\n description: undefined,\n errorMessage: undefined,\n invalid: false,\n disabled: false,\n readonly: false,\n required: false,\n dir: undefined,\n },\n);\ndefineSlots<{ default(props: FieldSlotProps): unknown }>();\nconst errors = inject(\n formErrorsKey,\n computed<ValidationErrors>(() => ({})),\n);\nconst error = computed(() => {\n const map = errors.value;\n return Object.hasOwn(map, props.name) && typeof map[props.name] === 'string'\n ? map[props.name] || undefined\n : undefined;\n});\nconst invalidState = computed(() => props.invalid || !!error.value);\nconst message = computed(() => (props.invalid && props.errorMessage) || error.value || undefined);\nconst { controlId, showError, describedBy } = useFeedback({\n get id() {\n return props.id;\n },\n get description() {\n return props.description;\n },\n get invalid() {\n return invalidState.value;\n },\n get errorMessage() {\n return message.value;\n },\n});\nconst controlProps = computed<FieldControlProps>(() => ({\n id: controlId.value,\n name: props.name,\n class: 'input__control field__control',\n disabled: props.disabled,\n readonly: props.readonly,\n required: props.required,\n 'aria-required': props.required || undefined,\n 'aria-invalid': invalidState.value || undefined,\n 'aria-describedby': describedBy.value,\n}));\n</script>\n<template>\n <div class=\"input field\" :dir=\"dir\">\n <Label class=\"label\" :for=\"controlId\">{{ label }}</Label>\n <slot :control-props=\"controlProps\" :invalid=\"invalidState\" :error-message=\"message\" />\n <FieldFeedback\n :control-id=\"controlId\"\n :description=\"description\"\n :error-message=\"message\"\n :show-error=\"showError\"\n />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, provide } from 'vue';\nimport { formErrorsKey } from './form-context.js';\nimport type { ValidationErrors } from './types.js';\ndefineOptions({ inheritAttrs: false });\nconst props = withDefaults(\n defineProps<{\n validationErrors?: ValidationErrors;\n noValidate?: boolean;\n id?: string;\n ariaLabel?: string;\n ariaLabelledby?: string;\n dir?: 'ltr' | 'rtl';\n }>(),\n {\n validationErrors: () => ({}),\n noValidate: false,\n id: undefined,\n ariaLabel: undefined,\n ariaLabelledby: undefined,\n dir: undefined,\n },\n);\nconst emit = defineEmits<{ submit: [data: FormData, event: SubmitEvent]; reset: [event: Event] }>();\nprovide(\n formErrorsKey,\n computed(() => props.validationErrors),\n);\nfunction submit(event: SubmitEvent) {\n event.preventDefault();\n const form = event.currentTarget as HTMLFormElement;\n const noValidate = props.noValidate;\n if (!noValidate && !form.checkValidity()) {\n form.reportValidity();\n return;\n }\n // ARIA validation is application-owned and also applies to labeled Kazee controls.\n for (const element of form.querySelectorAll<HTMLElement>('[aria-invalid=\"true\"]')) {\n const selector = 'input:not([type=\"hidden\"]), textarea, select, button, [role=\"listbox\"]';\n const controls = element.matches(selector)\n ? [element]\n : [...element.querySelectorAll<HTMLElement>(selector)];\n const invalid = controls.find(\n (control) => !control.matches(':disabled, [aria-disabled=\"true\"]'),\n );\n if (invalid) {\n invalid.focus();\n return;\n }\n }\n emit('submit', new FormData(form, event.submitter), event);\n}\n</script>\n<template>\n <form\n :id=\"id\"\n class=\"form\"\n :dir=\"dir\"\n :aria-label=\"ariaLabel\"\n :aria-labelledby=\"ariaLabelledby\"\n :novalidate=\"noValidate\"\n @submit=\"submit\"\n @reset=\"emit('reset', $event)\"\n >\n <slot />\n </form>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, provide } from 'vue';\nimport { formErrorsKey } from './form-context.js';\nimport type { ValidationErrors } from './types.js';\ndefineOptions({ inheritAttrs: false });\nconst props = withDefaults(\n defineProps<{\n validationErrors?: ValidationErrors;\n noValidate?: boolean;\n id?: string;\n ariaLabel?: string;\n ariaLabelledby?: string;\n dir?: 'ltr' | 'rtl';\n }>(),\n {\n validationErrors: () => ({}),\n noValidate: false,\n id: undefined,\n ariaLabel: undefined,\n ariaLabelledby: undefined,\n dir: undefined,\n },\n);\nconst emit = defineEmits<{ submit: [data: FormData, event: SubmitEvent]; reset: [event: Event] }>();\nprovide(\n formErrorsKey,\n computed(() => props.validationErrors),\n);\nfunction submit(event: SubmitEvent) {\n event.preventDefault();\n const form = event.currentTarget as HTMLFormElement;\n const noValidate = props.noValidate;\n if (!noValidate && !form.checkValidity()) {\n form.reportValidity();\n return;\n }\n // ARIA validation is application-owned and also applies to labeled Kazee controls.\n for (const element of form.querySelectorAll<HTMLElement>('[aria-invalid=\"true\"]')) {\n const selector = 'input:not([type=\"hidden\"]), textarea, select, button, [role=\"listbox\"]';\n const controls = element.matches(selector)\n ? [element]\n : [...element.querySelectorAll<HTMLElement>(selector)];\n const invalid = controls.find(\n (control) => !control.matches(':disabled, [aria-disabled=\"true\"]'),\n );\n if (invalid) {\n invalid.focus();\n return;\n }\n }\n emit('submit', new FormData(form, event.submitter), event);\n}\n</script>\n<template>\n <form\n :id=\"id\"\n class=\"form\"\n :dir=\"dir\"\n :aria-label=\"ariaLabel\"\n :aria-labelledby=\"ariaLabelledby\"\n :novalidate=\"noValidate\"\n @submit=\"submit\"\n @reset=\"emit('reset', $event)\"\n >\n <slot />\n </form>\n</template>\n","export interface ListboxOption {\n id: string;\n label: string;\n isDisabled?: boolean;\n}\nexport type ListboxSelectionMode = 'single' | 'multiple';\n/** Stable option order, unique enabled IDs, and at most one ID in single mode. */\nexport function listboxSelection(\n value: readonly string[],\n options: ListboxOption[],\n mode: ListboxSelectionMode,\n): string[] {\n const requested = new Set(value);\n const seen = new Set<string>();\n const result: string[] = [];\n for (const option of options) {\n if (option.id && !option.isDisabled && requested.has(option.id) && !seen.has(option.id)) {\n seen.add(option.id);\n result.push(option.id);\n if (mode === 'single') break;\n }\n }\n return result;\n}\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport { ListboxRoot, ListboxContent, ListboxItem, useId } from 'reka-ui';\nimport CheckIcon from './CheckIcon.vue';\nimport FieldFeedback from './FieldFeedback.vue';\nimport { useFeedback } from './useFeedback.js';\nimport {\n listboxSelection,\n type ListboxOption,\n type ListboxSelectionMode,\n} from './listbox-selection.js';\ndefineOptions({ inheritAttrs: false });\nconst props = withDefaults(\n defineProps<{\n label: string;\n options: ListboxOption[];\n modelValue?: string[];\n defaultValue?: string[];\n selectionMode?: ListboxSelectionMode;\n disabled?: boolean;\n description?: string;\n errorMessage?: string;\n invalid?: boolean;\n name?: string;\n id?: string;\n dir?: 'ltr' | 'rtl';\n emptyMessage?: string;\n }>(),\n {\n modelValue: undefined,\n defaultValue: () => [],\n selectionMode: 'single',\n disabled: false,\n invalid: false,\n description: undefined,\n errorMessage: undefined,\n name: undefined,\n id: undefined,\n dir: undefined,\n emptyMessage: 'Tidak ada pilihan.',\n },\n);\nconst emit = defineEmits<{ 'update:modelValue': [value: string[]] }>();\nconst local = ref(props.defaultValue);\nconst selected = computed(() =>\n listboxSelection(props.modelValue ?? local.value, props.options, props.selectionMode),\n);\nconst model = computed(() =>\n props.selectionMode === 'multiple' ? selected.value : (selected.value[0] ?? null),\n);\nconst generated = useId();\nconst labelId = computed(() => `${props.id ?? generated}-label`);\nconst { controlId, showError, describedBy } = useFeedback(props);\nfunction update(value: unknown) {\n if (props.disabled) return;\n const values = Array.isArray(value)\n ? value.filter((id): id is string => typeof id === 'string')\n : typeof value === 'string'\n ? [value]\n : [];\n const next = listboxSelection(values, props.options, props.selectionMode);\n if (\n next.length === selected.value.length &&\n next.every((key, index) => key === selected.value[index])\n )\n return;\n local.value = next;\n emit('update:modelValue', next);\n}\n</script>\n<template>\n <div class=\"input listbox\" :dir=\"dir\">\n <span :id=\"labelId\" class=\"label\">{{ label }}</span>\n <ListboxRoot\n :model-value=\"model\"\n :multiple=\"selectionMode === 'multiple'\"\n :disabled=\"disabled\"\n :dir=\"dir\"\n :selection-behavior=\"selectionMode === 'single' ? 'replace' : 'toggle'\"\n highlight-on-hover\n @update:model-value=\"update\"\n >\n <ListboxContent\n :id=\"id\"\n class=\"listbox__list\"\n :aria-labelledby=\"labelId\"\n :aria-describedby=\"describedBy\"\n :aria-invalid=\"invalid || undefined\"\n :aria-disabled=\"disabled || undefined\"\n :tabindex=\"disabled ? -1 : undefined\"\n >\n <ListboxItem\n v-for=\"option in options\"\n :key=\"option.id\"\n :value=\"option.id\"\n :disabled=\"disabled || option.isDisabled\"\n :aria-disabled=\"disabled || option.isDisabled || undefined\"\n class=\"listbox__item\"\n >\n <span class=\"listbox__text\">{{ option.label }}</span\n ><CheckIcon class=\"listbox__check\" />\n </ListboxItem>\n <span\n v-if=\"!options.length\"\n class=\"listbox__empty\"\n role=\"option\"\n aria-disabled=\"true\"\n aria-selected=\"false\"\n >{{ emptyMessage }}</span\n >\n </ListboxContent>\n </ListboxRoot>\n <FieldFeedback\n :control-id=\"controlId\"\n :description=\"description\"\n :error-message=\"errorMessage\"\n :show-error=\"showError\"\n />\n <template v-if=\"name\"\n ><input\n v-for=\"key in selected\"\n :key=\"key\"\n type=\"hidden\"\n :name=\"name\"\n :value=\"key\"\n :disabled=\"disabled\"\n /></template>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport { ListboxRoot, ListboxContent, ListboxItem, useId } from 'reka-ui';\nimport CheckIcon from './CheckIcon.vue';\nimport FieldFeedback from './FieldFeedback.vue';\nimport { useFeedback } from './useFeedback.js';\nimport {\n listboxSelection,\n type ListboxOption,\n type ListboxSelectionMode,\n} from './listbox-selection.js';\ndefineOptions({ inheritAttrs: false });\nconst props = withDefaults(\n defineProps<{\n label: string;\n options: ListboxOption[];\n modelValue?: string[];\n defaultValue?: string[];\n selectionMode?: ListboxSelectionMode;\n disabled?: boolean;\n description?: string;\n errorMessage?: string;\n invalid?: boolean;\n name?: string;\n id?: string;\n dir?: 'ltr' | 'rtl';\n emptyMessage?: string;\n }>(),\n {\n modelValue: undefined,\n defaultValue: () => [],\n selectionMode: 'single',\n disabled: false,\n invalid: false,\n description: undefined,\n errorMessage: undefined,\n name: undefined,\n id: undefined,\n dir: undefined,\n emptyMessage: 'Tidak ada pilihan.',\n },\n);\nconst emit = defineEmits<{ 'update:modelValue': [value: string[]] }>();\nconst local = ref(props.defaultValue);\nconst selected = computed(() =>\n listboxSelection(props.modelValue ?? local.value, props.options, props.selectionMode),\n);\nconst model = computed(() =>\n props.selectionMode === 'multiple' ? selected.value : (selected.value[0] ?? null),\n);\nconst generated = useId();\nconst labelId = computed(() => `${props.id ?? generated}-label`);\nconst { controlId, showError, describedBy } = useFeedback(props);\nfunction update(value: unknown) {\n if (props.disabled) return;\n const values = Array.isArray(value)\n ? value.filter((id): id is string => typeof id === 'string')\n : typeof value === 'string'\n ? [value]\n : [];\n const next = listboxSelection(values, props.options, props.selectionMode);\n if (\n next.length === selected.value.length &&\n next.every((key, index) => key === selected.value[index])\n )\n return;\n local.value = next;\n emit('update:modelValue', next);\n}\n</script>\n<template>\n <div class=\"input listbox\" :dir=\"dir\">\n <span :id=\"labelId\" class=\"label\">{{ label }}</span>\n <ListboxRoot\n :model-value=\"model\"\n :multiple=\"selectionMode === 'multiple'\"\n :disabled=\"disabled\"\n :dir=\"dir\"\n :selection-behavior=\"selectionMode === 'single' ? 'replace' : 'toggle'\"\n highlight-on-hover\n @update:model-value=\"update\"\n >\n <ListboxContent\n :id=\"id\"\n class=\"listbox__list\"\n :aria-labelledby=\"labelId\"\n :aria-describedby=\"describedBy\"\n :aria-invalid=\"invalid || undefined\"\n :aria-disabled=\"disabled || undefined\"\n :tabindex=\"disabled ? -1 : undefined\"\n >\n <ListboxItem\n v-for=\"option in options\"\n :key=\"option.id\"\n :value=\"option.id\"\n :disabled=\"disabled || option.isDisabled\"\n :aria-disabled=\"disabled || option.isDisabled || undefined\"\n class=\"listbox__item\"\n >\n <span class=\"listbox__text\">{{ option.label }}</span\n ><CheckIcon class=\"listbox__check\" />\n </ListboxItem>\n <span\n v-if=\"!options.length\"\n class=\"listbox__empty\"\n role=\"option\"\n aria-disabled=\"true\"\n aria-selected=\"false\"\n >{{ emptyMessage }}</span\n >\n </ListboxContent>\n </ListboxRoot>\n <FieldFeedback\n :control-id=\"controlId\"\n :description=\"description\"\n :error-message=\"errorMessage\"\n :show-error=\"showError\"\n />\n <template v-if=\"name\"\n ><input\n v-for=\"key in selected\"\n :key=\"key\"\n type=\"hidden\"\n :name=\"name\"\n :value=\"key\"\n :disabled=\"disabled\"\n /></template>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport {\n NumberFieldRoot,\n NumberFieldInput,\n NumberFieldIncrement,\n NumberFieldDecrement,\n Label,\n} from 'reka-ui';\nimport FieldFeedback from './FieldFeedback.vue';\nimport { useFeedback } from './useFeedback.js';\ndefineOptions({ inheritAttrs: false });\nconst props = withDefaults(\n defineProps<{\n label: string;\n modelValue?: number | null;\n defaultValue?: number | null;\n min?: number;\n max?: number;\n step?: number;\n locale?: string;\n formatOptions?: Intl.NumberFormatOptions;\n description?: string;\n errorMessage?: string;\n invalid?: boolean;\n disabled?: boolean;\n readonly?: boolean;\n required?: boolean;\n name?: string;\n id?: string;\n dir?: 'ltr' | 'rtl';\n incrementLabel?: string;\n decrementLabel?: string;\n }>(),\n {\n modelValue: undefined,\n defaultValue: null,\n min: undefined,\n max: undefined,\n step: 1,\n locale: 'id-ID',\n formatOptions: undefined,\n description: undefined,\n errorMessage: undefined,\n invalid: false,\n disabled: false,\n readonly: false,\n required: false,\n name: undefined,\n id: undefined,\n dir: undefined,\n incrementLabel: undefined,\n decrementLabel: undefined,\n },\n);\nconst emit = defineEmits<{ 'update:modelValue': [value: number | null] }>();\nfunction finite(value: number | null | undefined): number | null {\n return typeof value === 'number' && Number.isFinite(value) ? value : null;\n}\nconst local = ref(finite(props.defaultValue));\nconst selected = computed(() =>\n finite(props.modelValue === undefined ? local.value : props.modelValue),\n);\nconst { controlId, showError, describedBy } = useFeedback(props);\nfunction update(value: number | undefined) {\n if (props.disabled || props.readonly) return;\n const next = finite(value);\n local.value = next;\n emit('update:modelValue', next);\n}\n</script>\n<template>\n <div class=\"input number-field\" :dir=\"dir\">\n <Label class=\"label\" :for=\"controlId\">{{ label }}</Label>\n <NumberFieldRoot\n :id=\"controlId\"\n :model-value=\"selected\"\n :min=\"min\"\n :max=\"max\"\n :step=\"step\"\n :locale=\"locale\"\n :format-options=\"formatOptions\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n :required=\"required\"\n disable-wheel-change\n @update:model-value=\"update\"\n >\n <div class=\"number-field__group\">\n <NumberFieldDecrement\n class=\"number-field__step\"\n :aria-label=\"decrementLabel ?? `Kurangi ${label}`\"\n >&#8722;</NumberFieldDecrement\n >\n <NumberFieldInput\n class=\"number-field__control\"\n :required=\"required\"\n :aria-required=\"required || undefined\"\n :aria-invalid=\"invalid || undefined\"\n :aria-describedby=\"describedBy\"\n />\n <NumberFieldIncrement\n class=\"number-field__step\"\n :aria-label=\"incrementLabel ?? `Tambah ${label}`\"\n >+</NumberFieldIncrement\n >\n </div>\n </NumberFieldRoot>\n <FieldFeedback\n :control-id=\"controlId\"\n :description=\"description\"\n :error-message=\"errorMessage\"\n :show-error=\"showError\"\n />\n <input\n v-if=\"name\"\n type=\"hidden\"\n :name=\"name\"\n :value=\"selected === null ? '' : String(selected)\"\n :disabled=\"disabled\"\n />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport {\n NumberFieldRoot,\n NumberFieldInput,\n NumberFieldIncrement,\n NumberFieldDecrement,\n Label,\n} from 'reka-ui';\nimport FieldFeedback from './FieldFeedback.vue';\nimport { useFeedback } from './useFeedback.js';\ndefineOptions({ inheritAttrs: false });\nconst props = withDefaults(\n defineProps<{\n label: string;\n modelValue?: number | null;\n defaultValue?: number | null;\n min?: number;\n max?: number;\n step?: number;\n locale?: string;\n formatOptions?: Intl.NumberFormatOptions;\n description?: string;\n errorMessage?: string;\n invalid?: boolean;\n disabled?: boolean;\n readonly?: boolean;\n required?: boolean;\n name?: string;\n id?: string;\n dir?: 'ltr' | 'rtl';\n incrementLabel?: string;\n decrementLabel?: string;\n }>(),\n {\n modelValue: undefined,\n defaultValue: null,\n min: undefined,\n max: undefined,\n step: 1,\n locale: 'id-ID',\n formatOptions: undefined,\n description: undefined,\n errorMessage: undefined,\n invalid: false,\n disabled: false,\n readonly: false,\n required: false,\n name: undefined,\n id: undefined,\n dir: undefined,\n incrementLabel: undefined,\n decrementLabel: undefined,\n },\n);\nconst emit = defineEmits<{ 'update:modelValue': [value: number | null] }>();\nfunction finite(value: number | null | undefined): number | null {\n return typeof value === 'number' && Number.isFinite(value) ? value : null;\n}\nconst local = ref(finite(props.defaultValue));\nconst selected = computed(() =>\n finite(props.modelValue === undefined ? local.value : props.modelValue),\n);\nconst { controlId, showError, describedBy } = useFeedback(props);\nfunction update(value: number | undefined) {\n if (props.disabled || props.readonly) return;\n const next = finite(value);\n local.value = next;\n emit('update:modelValue', next);\n}\n</script>\n<template>\n <div class=\"input number-field\" :dir=\"dir\">\n <Label class=\"label\" :for=\"controlId\">{{ label }}</Label>\n <NumberFieldRoot\n :id=\"controlId\"\n :model-value=\"selected\"\n :min=\"min\"\n :max=\"max\"\n :step=\"step\"\n :locale=\"locale\"\n :format-options=\"formatOptions\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n :required=\"required\"\n disable-wheel-change\n @update:model-value=\"update\"\n >\n <div class=\"number-field__group\">\n <NumberFieldDecrement\n class=\"number-field__step\"\n :aria-label=\"decrementLabel ?? `Kurangi ${label}`\"\n >&#8722;</NumberFieldDecrement\n >\n <NumberFieldInput\n class=\"number-field__control\"\n :required=\"required\"\n :aria-required=\"required || undefined\"\n :aria-invalid=\"invalid || undefined\"\n :aria-describedby=\"describedBy\"\n />\n <NumberFieldIncrement\n class=\"number-field__step\"\n :aria-label=\"incrementLabel ?? `Tambah ${label}`\"\n >+</NumberFieldIncrement\n >\n </div>\n </NumberFieldRoot>\n <FieldFeedback\n :control-id=\"controlId\"\n :description=\"description\"\n :error-message=\"errorMessage\"\n :show-error=\"showError\"\n />\n <input\n v-if=\"name\"\n type=\"hidden\"\n :name=\"name\"\n :value=\"selected === null ? '' : String(selected)\"\n :disabled=\"disabled\"\n />\n </div>\n</template>\n","<script setup lang=\"ts\">\nwithDefaults(\n defineProps<{ title?: string; description?: string; headingLevel?: 2 | 3 | 4 | 5 | 6 }>(),\n { title: undefined, description: undefined, headingLevel: 3 },\n);\ndefineSlots<{\n default?: () => unknown;\n header?: () => unknown;\n 'title-extras'?: () => unknown;\n actions?: () => unknown;\n footer?: () => unknown;\n}>();\n</script>\n<template>\n <div class=\"card\">\n <div\n v-if=\"title || description || $slots.actions || $slots.header || $slots['title-extras']\"\n class=\"card__header\"\n >\n <div\n v-if=\"title || description || $slots.header || $slots['title-extras']\"\n class=\"card__heading\"\n >\n <slot name=\"header\">\n <div v-if=\"$slots['title-extras']\" class=\"card__title-row\">\n <component :is=\"`h${headingLevel}`\" v-if=\"title\" class=\"card__title\">{{\n title\n }}</component\n ><slot name=\"title-extras\" />\n </div>\n <component :is=\"`h${headingLevel}`\" v-else-if=\"title\" class=\"card__title\">{{\n title\n }}</component>\n <p v-if=\"description\" class=\"card__description\">{{ description }}</p>\n </slot>\n </div>\n <div v-if=\"$slots.actions\" class=\"card__actions\"><slot name=\"actions\" /></div>\n </div>\n <div class=\"card__content\"><slot /></div>\n <div v-if=\"$slots.footer\" class=\"card__footer\"><slot name=\"footer\" /></div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nwithDefaults(\n defineProps<{ title?: string; description?: string; headingLevel?: 2 | 3 | 4 | 5 | 6 }>(),\n { title: undefined, description: undefined, headingLevel: 3 },\n);\ndefineSlots<{\n default?: () => unknown;\n header?: () => unknown;\n 'title-extras'?: () => unknown;\n actions?: () => unknown;\n footer?: () => unknown;\n}>();\n</script>\n<template>\n <div class=\"card\">\n <div\n v-if=\"title || description || $slots.actions || $slots.header || $slots['title-extras']\"\n class=\"card__header\"\n >\n <div\n v-if=\"title || description || $slots.header || $slots['title-extras']\"\n class=\"card__heading\"\n >\n <slot name=\"header\">\n <div v-if=\"$slots['title-extras']\" class=\"card__title-row\">\n <component :is=\"`h${headingLevel}`\" v-if=\"title\" class=\"card__title\">{{\n title\n }}</component\n ><slot name=\"title-extras\" />\n </div>\n <component :is=\"`h${headingLevel}`\" v-else-if=\"title\" class=\"card__title\">{{\n title\n }}</component>\n <p v-if=\"description\" class=\"card__description\">{{ description }}</p>\n </slot>\n </div>\n <div v-if=\"$slots.actions\" class=\"card__actions\"><slot name=\"actions\" /></div>\n </div>\n <div class=\"card__content\"><slot /></div>\n <div v-if=\"$slots.footer\" class=\"card__footer\"><slot name=\"footer\" /></div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type { BadgeTone } from './types.js';\nwithDefaults(defineProps<{ tone?: BadgeTone }>(), { tone: 'neutral' });\n</script>\n<template>\n <span class=\"badge\" :data-tone=\"tone\"><slot /></span>\n</template>\n","<script setup lang=\"ts\">\nimport type { BadgeTone } from './types.js';\nwithDefaults(defineProps<{ tone?: BadgeTone }>(), { tone: 'neutral' });\n</script>\n<template>\n <span class=\"badge\" :data-tone=\"tone\"><slot /></span>\n</template>\n","<script setup lang=\"ts\">\ndefineOptions({ inheritAttrs: false });\nwithDefaults(defineProps<{ shape?: 'rectangle' | 'circle'; animated?: boolean }>(), {\n shape: 'rectangle',\n animated: true,\n});\n</script>\n<template>\n <span\n v-bind=\"$attrs\"\n class=\"skeleton\"\n :data-shape=\"shape\"\n :data-animated=\"animated ? 'true' : undefined\"\n aria-hidden=\"true\"\n />\n</template>\n","<script setup lang=\"ts\">\ndefineOptions({ inheritAttrs: false });\nwithDefaults(defineProps<{ shape?: 'rectangle' | 'circle'; animated?: boolean }>(), {\n shape: 'rectangle',\n animated: true,\n});\n</script>\n<template>\n <span\n v-bind=\"$attrs\"\n class=\"skeleton\"\n :data-shape=\"shape\"\n :data-animated=\"animated ? 'true' : undefined\"\n aria-hidden=\"true\"\n />\n</template>\n","<script setup lang=\"ts\">\ndefineOptions({ inheritAttrs: false });\nwithDefaults(defineProps<{ orientation?: 'horizontal' | 'vertical'; decorative?: boolean }>(), {\n orientation: 'horizontal',\n decorative: true,\n});\n</script>\n<template>\n <div\n v-bind=\"$attrs\"\n class=\"separator\"\n :data-orientation=\"orientation\"\n :role=\"decorative ? 'presentation' : 'separator'\"\n :aria-hidden=\"decorative ? 'true' : undefined\"\n :aria-orientation=\"decorative ? undefined : orientation\"\n />\n</template>\n","<script setup lang=\"ts\">\ndefineOptions({ inheritAttrs: false });\nwithDefaults(defineProps<{ orientation?: 'horizontal' | 'vertical'; decorative?: boolean }>(), {\n orientation: 'horizontal',\n decorative: true,\n});\n</script>\n<template>\n <div\n v-bind=\"$attrs\"\n class=\"separator\"\n :data-orientation=\"orientation\"\n :role=\"decorative ? 'presentation' : 'separator'\"\n :aria-hidden=\"decorative ? 'true' : undefined\"\n :aria-orientation=\"decorative ? undefined : orientation\"\n />\n</template>\n","// Framework-neutral DOM behavior. Keep in sync with packages/vue/src/tabs-indicator.ts.\nexport function mountTabsIndicator(container: HTMLElement): () => void {\n const list = container.querySelector<HTMLElement>('[role=\"tablist\"]');\n if (!list) return () => {};\n let frame = 0,\n disposed = false,\n previous: Element | null = null,\n armed = false;\n const prev = container.querySelector<HTMLButtonElement>('[data-tabs-scroll=\"prev\"]');\n const next = container.querySelector<HTMLButtonElement>('[data-tabs-scroll=\"next\"]');\n const vertical = () => list.getAttribute('aria-orientation') === 'vertical';\n const reduced = () => window.matchMedia?.('(prefers-reduced-motion: reduce)').matches ?? false;\n function measure() {\n if (disposed) return;\n const selected = list!.querySelector<HTMLElement>('[role=\"tab\"][aria-selected=\"true\"]');\n const rect = list!.getBoundingClientRect();\n if (selected && rect.width > 0 && rect.height > 0) {\n const tab = selected.getBoundingClientRect();\n const border = getComputedStyle(list!);\n list!.style.setProperty(\n '--tabs-indicator-x',\n `${tab.left - rect.left + list!.scrollLeft - (parseFloat(border.borderLeftWidth) || 0)}px`,\n );\n list!.style.setProperty(\n '--tabs-indicator-y',\n `${tab.top - rect.top + list!.scrollTop - (parseFloat(border.borderTopWidth) || 0)}px`,\n );\n list!.style.setProperty('--tabs-indicator-width', `${tab.width}px`);\n list!.style.setProperty('--tabs-indicator-height', `${tab.height}px`);\n list!.dataset.indicatorReady = 'true';\n if (!armed) {\n armed = true;\n requestAnimationFrame(() => {\n if (!disposed) list!.dataset.indicatorAnimated = 'true';\n });\n }\n if (selected !== previous && previous && typeof list!.scrollBy === 'function') {\n const delta = vertical()\n ? tab.top < rect.top\n ? tab.top - rect.top\n : tab.bottom > rect.bottom\n ? tab.bottom - rect.bottom\n : 0\n : tab.left < rect.left\n ? tab.left - rect.left\n : tab.right > rect.right\n ? tab.right - rect.right\n : 0;\n if (delta)\n list!.scrollBy({\n [vertical() ? 'top' : 'left']: delta,\n behavior: reduced() ? 'instant' : 'smooth',\n });\n }\n } else list!.dataset.indicatorReady = 'false';\n previous = selected;\n const max = vertical()\n ? list!.scrollHeight - list!.clientHeight\n : list!.scrollWidth - list!.clientWidth;\n const position = Math.abs(vertical() ? list!.scrollTop : list!.scrollLeft);\n list!.dataset.overflow = String(max > 1);\n if (prev) {\n prev.hidden = max <= 1;\n prev.disabled = position <= 1;\n }\n if (next) {\n next.hidden = max <= 1;\n next.disabled = position >= max - 1;\n }\n }\n function schedule() {\n if (disposed) return;\n cancelAnimationFrame(frame);\n frame = requestAnimationFrame(measure);\n }\n function scroll(direction: number) {\n if (typeof list!.scrollBy !== 'function') return;\n const rtl = !vertical() && getComputedStyle(list!).direction === 'rtl';\n const amount =\n (vertical() ? list!.clientHeight : list!.clientWidth) * 0.7 * direction * (rtl ? -1 : 1);\n list!.scrollBy({\n [vertical() ? 'top' : 'left']: amount,\n behavior: reduced() ? 'instant' : 'smooth',\n });\n }\n const backward = () => scroll(-1),\n forward = () => scroll(1);\n prev?.addEventListener('click', backward);\n next?.addEventListener('click', forward);\n list.addEventListener('scroll', schedule, { passive: true });\n window.addEventListener('resize', schedule);\n const observer = new MutationObserver(schedule);\n observer.observe(list, {\n subtree: true,\n childList: true,\n characterData: true,\n attributes: true,\n attributeFilter: ['aria-selected', 'aria-orientation', 'aria-disabled', 'disabled'],\n });\n const resize = typeof ResizeObserver === 'undefined' ? undefined : new ResizeObserver(schedule);\n resize?.observe(list);\n for (const tab of list.querySelectorAll('[role=\"tab\"]')) resize?.observe(tab);\n void document.fonts?.ready.then(schedule);\n schedule();\n return () => {\n disposed = true;\n cancelAnimationFrame(frame);\n observer.disconnect();\n resize?.disconnect();\n prev?.removeEventListener('click', backward);\n next?.removeEventListener('click', forward);\n list.removeEventListener('scroll', schedule);\n window.removeEventListener('resize', schedule);\n };\n}\n","<script setup lang=\"ts\">\nimport { onBeforeUnmount, onMounted, ref } from 'vue';\nimport { TabsList, TabsTrigger } from 'reka-ui';\nimport type { TabItem } from './types.js';\nimport { mountTabsIndicator } from './tabs-indicator.js';\ndefineProps<{\n label: string;\n items: TabItem[];\n showSeparators: boolean;\n previousLabel: string;\n nextLabel: string;\n}>();\ndefineSlots<{ icon?: (props: { item: TabItem }) => unknown }>();\nconst container = ref<HTMLDivElement>();\nlet cleanup: (() => void) | undefined;\nonMounted(() => {\n if (container.value) cleanup = mountTabsIndicator(container.value);\n});\nonBeforeUnmount(() => cleanup?.());\n</script>\n<template>\n <div ref=\"container\" class=\"tabs__list-container\">\n <button\n type=\"button\"\n class=\"tabs__scroll-button tabs__scroll-button--prev\"\n data-tabs-scroll=\"prev\"\n hidden\n :aria-label=\"previousLabel\"\n >\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"m14 6-6 6 6 6\" /></svg>\n </button>\n <TabsList class=\"tabs__list\" :aria-label=\"label\">\n <TabsTrigger\n v-for=\"(item, index) in items\"\n :key=\"item.id\"\n class=\"tabs__trigger\"\n :value=\"item.id\"\n :disabled=\"item.isDisabled\"\n >\n <span v-if=\"showSeparators && index > 0\" class=\"tabs__separator\" aria-hidden=\"true\" />\n <span v-if=\"$slots.icon\" class=\"tabs__icon\" aria-hidden=\"true\"\n ><slot name=\"icon\" :item=\"item\"\n /></span>\n <span class=\"tabs__label\">{{ item.label }}</span>\n </TabsTrigger>\n </TabsList>\n <button\n type=\"button\"\n class=\"tabs__scroll-button tabs__scroll-button--next\"\n data-tabs-scroll=\"next\"\n hidden\n :aria-label=\"nextLabel\"\n >\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"m10 6 6 6-6 6\" /></svg>\n </button>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { onBeforeUnmount, onMounted, ref } from 'vue';\nimport { TabsList, TabsTrigger } from 'reka-ui';\nimport type { TabItem } from './types.js';\nimport { mountTabsIndicator } from './tabs-indicator.js';\ndefineProps<{\n label: string;\n items: TabItem[];\n showSeparators: boolean;\n previousLabel: string;\n nextLabel: string;\n}>();\ndefineSlots<{ icon?: (props: { item: TabItem }) => unknown }>();\nconst container = ref<HTMLDivElement>();\nlet cleanup: (() => void) | undefined;\nonMounted(() => {\n if (container.value) cleanup = mountTabsIndicator(container.value);\n});\nonBeforeUnmount(() => cleanup?.());\n</script>\n<template>\n <div ref=\"container\" class=\"tabs__list-container\">\n <button\n type=\"button\"\n class=\"tabs__scroll-button tabs__scroll-button--prev\"\n data-tabs-scroll=\"prev\"\n hidden\n :aria-label=\"previousLabel\"\n >\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"m14 6-6 6 6 6\" /></svg>\n </button>\n <TabsList class=\"tabs__list\" :aria-label=\"label\">\n <TabsTrigger\n v-for=\"(item, index) in items\"\n :key=\"item.id\"\n class=\"tabs__trigger\"\n :value=\"item.id\"\n :disabled=\"item.isDisabled\"\n >\n <span v-if=\"showSeparators && index > 0\" class=\"tabs__separator\" aria-hidden=\"true\" />\n <span v-if=\"$slots.icon\" class=\"tabs__icon\" aria-hidden=\"true\"\n ><slot name=\"icon\" :item=\"item\"\n /></span>\n <span class=\"tabs__label\">{{ item.label }}</span>\n </TabsTrigger>\n </TabsList>\n <button\n type=\"button\"\n class=\"tabs__scroll-button tabs__scroll-button--next\"\n data-tabs-scroll=\"next\"\n hidden\n :aria-label=\"nextLabel\"\n >\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"m10 6 6 6-6 6\" /></svg>\n </button>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport { TabsRoot, TabsContent } from 'reka-ui';\nimport TabsListView from './TabsListView.vue';\nimport type { TabItem, ButtonSize, TabsVariant } from './types.js';\ndefineOptions({ inheritAttrs: false });\nconst props = withDefaults(\n defineProps<{\n label: string;\n variant?: TabsVariant;\n size?: ButtonSize;\n orientation?: 'horizontal' | 'vertical';\n align?: 'start' | 'center' | 'end';\n fullWidth?: boolean;\n /** Remove track inset and gaps; pill uses an outlined track. */\n inset?: 'default' | 'none';\n showSeparators?: boolean;\n previousLabel?: string;\n nextLabel?: string;\n items: TabItem[];\n modelValue?: string;\n defaultValue?: string;\n activationMode?: 'automatic' | 'manual';\n dir?: 'ltr' | 'rtl';\n id?: string;\n }>(),\n {\n modelValue: undefined,\n defaultValue: undefined,\n activationMode: 'manual',\n variant: 'primary',\n size: 'md',\n orientation: 'horizontal',\n align: 'center',\n fullWidth: false,\n inset: 'default',\n showSeparators: false,\n previousLabel: 'Tab sebelumnya / Previous tabs',\n nextLabel: 'Tab berikutnya / Next tabs',\n dir: undefined,\n id: undefined,\n },\n);\ndefineSlots<{\n default?: (props: { item: TabItem }) => unknown;\n extras?: () => unknown;\n actions?: () => unknown;\n icon?: (props: { item: TabItem }) => unknown;\n}>();\nconst emit = defineEmits<{ 'update:modelValue': [value: string] }>();\nconst local = ref(props.defaultValue);\nconst selected = computed(\n () =>\n props.items.find((item) => item.id === (props.modelValue ?? local.value) && !item.isDisabled)\n ?.id ?? props.items.find((item) => !item.isDisabled)?.id,\n);\nfunction update(value: string | number) {\n const next = String(value);\n if (next !== selected.value && props.items.some((item) => item.id === next && !item.isDisabled)) {\n local.value = next;\n emit('update:modelValue', next);\n }\n}\n</script>\n<template>\n <TabsRoot\n :id=\"id\"\n :class=\"[\n 'tabs',\n `tabs--${variant === 'default' ? 'primary' : variant}`,\n `tabs--align-${align}`,\n fullWidth && 'tabs--full-width',\n inset === 'none' && 'tabs--flush',\n size !== 'md' && `tabs--${size}`,\n ]\"\n :model-value=\"selected ?? ''\"\n :activation-mode=\"activationMode\"\n :dir=\"dir\"\n :orientation=\"orientation\"\n :data-orientation=\"orientation\"\n @update:model-value=\"update\"\n >\n <div v-if=\"$slots.extras || $slots.actions\" class=\"tabs__toolbar\">\n <div class=\"tabs__navigation\">\n <TabsListView\n v-if=\"items.length\"\n :label=\"label\"\n :items=\"items\"\n :show-separators=\"showSeparators\"\n :previous-label=\"previousLabel\"\n :next-label=\"nextLabel\"\n >\n <template v-if=\"$slots.icon\" #icon=\"{ item }\"><slot name=\"icon\" :item=\"item\" /></template>\n </TabsListView>\n <div v-if=\"$slots.extras\" class=\"tabs__extras\"><slot name=\"extras\" /></div>\n </div>\n <div v-if=\"$slots.actions\" class=\"tabs__actions\"><slot name=\"actions\" /></div>\n </div>\n <TabsListView\n v-else-if=\"items.length\"\n :label=\"label\"\n :items=\"items\"\n :show-separators=\"showSeparators\"\n :previous-label=\"previousLabel\"\n :next-label=\"nextLabel\"\n >\n <template v-if=\"$slots.icon\" #icon=\"{ item }\"><slot name=\"icon\" :item=\"item\" /></template>\n </TabsListView>\n <TabsContent v-for=\"item in items\" :key=\"item.id\" class=\"tabs__panel\" :value=\"item.id\"\n ><slot :item=\"item\"\n /></TabsContent>\n </TabsRoot>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport { TabsRoot, TabsContent } from 'reka-ui';\nimport TabsListView from './TabsListView.vue';\nimport type { TabItem, ButtonSize, TabsVariant } from './types.js';\ndefineOptions({ inheritAttrs: false });\nconst props = withDefaults(\n defineProps<{\n label: string;\n variant?: TabsVariant;\n size?: ButtonSize;\n orientation?: 'horizontal' | 'vertical';\n align?: 'start' | 'center' | 'end';\n fullWidth?: boolean;\n /** Remove track inset and gaps; pill uses an outlined track. */\n inset?: 'default' | 'none';\n showSeparators?: boolean;\n previousLabel?: string;\n nextLabel?: string;\n items: TabItem[];\n modelValue?: string;\n defaultValue?: string;\n activationMode?: 'automatic' | 'manual';\n dir?: 'ltr' | 'rtl';\n id?: string;\n }>(),\n {\n modelValue: undefined,\n defaultValue: undefined,\n activationMode: 'manual',\n variant: 'primary',\n size: 'md',\n orientation: 'horizontal',\n align: 'center',\n fullWidth: false,\n inset: 'default',\n showSeparators: false,\n previousLabel: 'Tab sebelumnya / Previous tabs',\n nextLabel: 'Tab berikutnya / Next tabs',\n dir: undefined,\n id: undefined,\n },\n);\ndefineSlots<{\n default?: (props: { item: TabItem }) => unknown;\n extras?: () => unknown;\n actions?: () => unknown;\n icon?: (props: { item: TabItem }) => unknown;\n}>();\nconst emit = defineEmits<{ 'update:modelValue': [value: string] }>();\nconst local = ref(props.defaultValue);\nconst selected = computed(\n () =>\n props.items.find((item) => item.id === (props.modelValue ?? local.value) && !item.isDisabled)\n ?.id ?? props.items.find((item) => !item.isDisabled)?.id,\n);\nfunction update(value: string | number) {\n const next = String(value);\n if (next !== selected.value && props.items.some((item) => item.id === next && !item.isDisabled)) {\n local.value = next;\n emit('update:modelValue', next);\n }\n}\n</script>\n<template>\n <TabsRoot\n :id=\"id\"\n :class=\"[\n 'tabs',\n `tabs--${variant === 'default' ? 'primary' : variant}`,\n `tabs--align-${align}`,\n fullWidth && 'tabs--full-width',\n inset === 'none' && 'tabs--flush',\n size !== 'md' && `tabs--${size}`,\n ]\"\n :model-value=\"selected ?? ''\"\n :activation-mode=\"activationMode\"\n :dir=\"dir\"\n :orientation=\"orientation\"\n :data-orientation=\"orientation\"\n @update:model-value=\"update\"\n >\n <div v-if=\"$slots.extras || $slots.actions\" class=\"tabs__toolbar\">\n <div class=\"tabs__navigation\">\n <TabsListView\n v-if=\"items.length\"\n :label=\"label\"\n :items=\"items\"\n :show-separators=\"showSeparators\"\n :previous-label=\"previousLabel\"\n :next-label=\"nextLabel\"\n >\n <template v-if=\"$slots.icon\" #icon=\"{ item }\"><slot name=\"icon\" :item=\"item\" /></template>\n </TabsListView>\n <div v-if=\"$slots.extras\" class=\"tabs__extras\"><slot name=\"extras\" /></div>\n </div>\n <div v-if=\"$slots.actions\" class=\"tabs__actions\"><slot name=\"actions\" /></div>\n </div>\n <TabsListView\n v-else-if=\"items.length\"\n :label=\"label\"\n :items=\"items\"\n :show-separators=\"showSeparators\"\n :previous-label=\"previousLabel\"\n :next-label=\"nextLabel\"\n >\n <template v-if=\"$slots.icon\" #icon=\"{ item }\"><slot name=\"icon\" :item=\"item\" /></template>\n </TabsListView>\n <TabsContent v-for=\"item in items\" :key=\"item.id\" class=\"tabs__panel\" :value=\"item.id\"\n ><slot :item=\"item\"\n /></TabsContent>\n </TabsRoot>\n</template>\n","export function paginationModel(\n totalItems: number,\n pageSize: number,\n value: number,\n siblingCount = 1,\n) {\n const total = Number.isFinite(totalItems)\n ? Math.min(Number.MAX_SAFE_INTEGER, Math.max(0, Math.floor(totalItems)))\n : 0;\n const size = Number.isFinite(pageSize) ? Math.max(1, Math.floor(pageSize)) : 10;\n const count = Math.max(1, Math.ceil(total / size));\n const current = Math.min(count, Math.max(1, Number.isFinite(value) ? Math.floor(value) : 1));\n const siblings = Number.isFinite(siblingCount)\n ? Math.min(2, Math.max(0, Math.floor(siblingCount)))\n : 1;\n const pages = new Set([1, count, current]);\n for (let offset = 1; offset <= siblings; offset++) {\n if (current - offset > 1) pages.add(current - offset);\n if (current + offset < count) pages.add(current + offset);\n }\n const ordered = [...pages].sort((a, b) => a - b);\n const entries: (number | string)[] = [];\n ordered.forEach((page, index) => {\n if (index && page - ordered[index - 1] > 1) entries.push(`gap-${page}`);\n entries.push(page);\n });\n return { current, count, entries };\n}\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport { paginationModel } from './pagination-model.js';\ndefineOptions({ inheritAttrs: false });\nconst props = withDefaults(\n defineProps<{\n totalItems: number;\n pageSize?: number;\n modelValue?: number;\n defaultValue?: number;\n disabled?: boolean;\n siblingCount?: number;\n label?: string;\n previousLabel?: string;\n nextLabel?: string;\n pageLabel?: string;\n dir?: 'ltr' | 'rtl';\n id?: string;\n }>(),\n {\n pageSize: 10,\n modelValue: undefined,\n defaultValue: 1,\n disabled: false,\n siblingCount: 1,\n label: 'Navigasi halaman',\n previousLabel: 'Sebelumnya',\n nextLabel: 'Berikutnya',\n pageLabel: 'Halaman',\n dir: undefined,\n id: undefined,\n },\n);\nconst emit = defineEmits<{ 'update:modelValue': [page: number] }>();\nconst local = ref(props.defaultValue);\nconst model = computed(() =>\n paginationModel(\n props.totalItems,\n props.pageSize,\n props.modelValue ?? local.value,\n props.siblingCount,\n ),\n);\nfunction change(next: number) {\n if (props.disabled || next === model.value.current || next < 1 || next > model.value.count)\n return;\n local.value = next;\n emit('update:modelValue', next);\n}\n</script>\n<template>\n <nav :id=\"id\" class=\"pagination\" :aria-label=\"label\" :dir=\"dir\">\n <button\n type=\"button\"\n class=\"pagination__button\"\n :disabled=\"disabled || model.current === 1\"\n @click=\"change(model.current - 1)\"\n >\n {{ previousLabel }}\n </button>\n <template v-for=\"entry in model.entries\" :key=\"entry\">\n <span v-if=\"typeof entry === 'string'\" class=\"pagination__gap\" aria-hidden=\"true\">...</span>\n <button\n v-else\n type=\"button\"\n class=\"pagination__button\"\n :aria-label=\"`${pageLabel} ${entry}`\"\n :aria-current=\"entry === model.current ? 'page' : undefined\"\n :disabled=\"disabled\"\n @click=\"change(entry)\"\n >\n {{ entry }}\n </button>\n </template>\n <button\n type=\"button\"\n class=\"pagination__button\"\n :disabled=\"disabled || model.current === model.count\"\n @click=\"change(model.current + 1)\"\n >\n {{ nextLabel }}\n </button>\n <span class=\"pagination__summary\" aria-live=\"polite\"\n >{{ model.current }} / {{ model.count }}</span\n >\n </nav>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport { paginationModel } from './pagination-model.js';\ndefineOptions({ inheritAttrs: false });\nconst props = withDefaults(\n defineProps<{\n totalItems: number;\n pageSize?: number;\n modelValue?: number;\n defaultValue?: number;\n disabled?: boolean;\n siblingCount?: number;\n label?: string;\n previousLabel?: string;\n nextLabel?: string;\n pageLabel?: string;\n dir?: 'ltr' | 'rtl';\n id?: string;\n }>(),\n {\n pageSize: 10,\n modelValue: undefined,\n defaultValue: 1,\n disabled: false,\n siblingCount: 1,\n label: 'Navigasi halaman',\n previousLabel: 'Sebelumnya',\n nextLabel: 'Berikutnya',\n pageLabel: 'Halaman',\n dir: undefined,\n id: undefined,\n },\n);\nconst emit = defineEmits<{ 'update:modelValue': [page: number] }>();\nconst local = ref(props.defaultValue);\nconst model = computed(() =>\n paginationModel(\n props.totalItems,\n props.pageSize,\n props.modelValue ?? local.value,\n props.siblingCount,\n ),\n);\nfunction change(next: number) {\n if (props.disabled || next === model.value.current || next < 1 || next > model.value.count)\n return;\n local.value = next;\n emit('update:modelValue', next);\n}\n</script>\n<template>\n <nav :id=\"id\" class=\"pagination\" :aria-label=\"label\" :dir=\"dir\">\n <button\n type=\"button\"\n class=\"pagination__button\"\n :disabled=\"disabled || model.current === 1\"\n @click=\"change(model.current - 1)\"\n >\n {{ previousLabel }}\n </button>\n <template v-for=\"entry in model.entries\" :key=\"entry\">\n <span v-if=\"typeof entry === 'string'\" class=\"pagination__gap\" aria-hidden=\"true\">...</span>\n <button\n v-else\n type=\"button\"\n class=\"pagination__button\"\n :aria-label=\"`${pageLabel} ${entry}`\"\n :aria-current=\"entry === model.current ? 'page' : undefined\"\n :disabled=\"disabled\"\n @click=\"change(entry)\"\n >\n {{ entry }}\n </button>\n </template>\n <button\n type=\"button\"\n class=\"pagination__button\"\n :disabled=\"disabled || model.current === model.count\"\n @click=\"change(model.current + 1)\"\n >\n {{ nextLabel }}\n </button>\n <span class=\"pagination__summary\" aria-live=\"polite\"\n >{{ model.current }} / {{ model.count }}</span\n >\n </nav>\n</template>\n","<script setup lang=\"ts\">\ndefineOptions({ inheritAttrs: false });\ndefineProps<{ caption: string }>();\n</script>\n<template>\n <div class=\"table__scroll\" role=\"region\" :aria-label=\"caption\" tabindex=\"0\">\n <table v-bind=\"$attrs\" class=\"table\">\n <caption class=\"table__caption\">\n {{\n caption\n }}\n </caption>\n <slot />\n </table>\n </div>\n</template>\n","<script setup lang=\"ts\">\ndefineOptions({ inheritAttrs: false });\ndefineProps<{ caption: string }>();\n</script>\n<template>\n <div class=\"table__scroll\" role=\"region\" :aria-label=\"caption\" tabindex=\"0\">\n <table v-bind=\"$attrs\" class=\"table\">\n <caption class=\"table__caption\">\n {{\n caption\n }}\n </caption>\n <slot />\n </table>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport Table from './Table.vue';\nimport type { DataTableColumn, DataTableRow, TableSort } from './data-table-types.js';\ndefineOptions({ inheritAttrs: false });\nconst props = withDefaults(\n defineProps<{\n caption: string;\n columns: DataTableColumn[];\n rows: DataTableRow[];\n sort?: TableSort | null;\n loading?: boolean;\n disabled?: boolean;\n emptyMessage?: string;\n loadingMessage?: string;\n errorMessage?: string;\n dir?: 'ltr' | 'rtl';\n id?: string;\n }>(),\n {\n sort: null,\n loading: false,\n disabled: false,\n emptyMessage: 'Tidak ada data.',\n loadingMessage: 'Memuat data...',\n errorMessage: undefined,\n dir: undefined,\n id: undefined,\n },\n);\nconst emit = defineEmits<{ 'update:sort': [sort: TableSort] }>();\nfunction requestSort(column: DataTableColumn) {\n if (props.loading || props.disabled || !column.sortable) return;\n emit('update:sort', {\n columnId: column.id,\n direction:\n props.sort?.columnId === column.id && props.sort.direction === 'ascending'\n ? 'descending'\n : 'ascending',\n });\n}\n</script>\n<template>\n <div :id=\"id\" class=\"data-table\" :dir=\"dir\">\n <Table :caption=\"caption\" :aria-busy=\"loading || undefined\">\n <thead>\n <tr>\n <th\n v-for=\"column in columns\"\n :key=\"column.id\"\n scope=\"col\"\n :aria-sort=\"\n column.sortable ? (sort?.columnId === column.id ? sort.direction : 'none') : undefined\n \"\n >\n <button\n v-if=\"column.sortable\"\n type=\"button\"\n class=\"table__sort\"\n :disabled=\"loading || disabled\"\n @click=\"requestSort(column)\"\n >\n {{ column.label\n }}<span aria-hidden=\"true\">{{\n sort?.columnId === column.id\n ? sort.direction === 'ascending'\n ? '\\u2191'\n : '\\u2193'\n : '\\u2195'\n }}</span></button\n ><template v-else>{{ column.label }}</template>\n </th>\n </tr>\n </thead>\n <tbody>\n <tr v-for=\"row in rows\" :key=\"row.id\">\n <td v-for=\"column in columns\" :key=\"column.id\">\n <slot name=\"cell\" :row=\"row\" :column=\"column\" :value=\"row.cells[column.id]\">{{\n row.cells[column.id] ?? ''\n }}</slot>\n </td>\n </tr>\n <tr v-if=\"!rows.length\">\n <td :colspan=\"Math.max(1, columns.length)\" class=\"table__empty\">\n {{ loading ? loadingMessage : errorMessage || emptyMessage }}\n </td>\n </tr>\n </tbody>\n </Table>\n <p v-if=\"loading\" class=\"data-table__status\" role=\"status\">{{ loadingMessage }}</p>\n <p v-if=\"errorMessage && !loading\" class=\"input__error\" role=\"alert\">{{ errorMessage }}</p>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport Table from './Table.vue';\nimport type { DataTableColumn, DataTableRow, TableSort } from './data-table-types.js';\ndefineOptions({ inheritAttrs: false });\nconst props = withDefaults(\n defineProps<{\n caption: string;\n columns: DataTableColumn[];\n rows: DataTableRow[];\n sort?: TableSort | null;\n loading?: boolean;\n disabled?: boolean;\n emptyMessage?: string;\n loadingMessage?: string;\n errorMessage?: string;\n dir?: 'ltr' | 'rtl';\n id?: string;\n }>(),\n {\n sort: null,\n loading: false,\n disabled: false,\n emptyMessage: 'Tidak ada data.',\n loadingMessage: 'Memuat data...',\n errorMessage: undefined,\n dir: undefined,\n id: undefined,\n },\n);\nconst emit = defineEmits<{ 'update:sort': [sort: TableSort] }>();\nfunction requestSort(column: DataTableColumn) {\n if (props.loading || props.disabled || !column.sortable) return;\n emit('update:sort', {\n columnId: column.id,\n direction:\n props.sort?.columnId === column.id && props.sort.direction === 'ascending'\n ? 'descending'\n : 'ascending',\n });\n}\n</script>\n<template>\n <div :id=\"id\" class=\"data-table\" :dir=\"dir\">\n <Table :caption=\"caption\" :aria-busy=\"loading || undefined\">\n <thead>\n <tr>\n <th\n v-for=\"column in columns\"\n :key=\"column.id\"\n scope=\"col\"\n :aria-sort=\"\n column.sortable ? (sort?.columnId === column.id ? sort.direction : 'none') : undefined\n \"\n >\n <button\n v-if=\"column.sortable\"\n type=\"button\"\n class=\"table__sort\"\n :disabled=\"loading || disabled\"\n @click=\"requestSort(column)\"\n >\n {{ column.label\n }}<span aria-hidden=\"true\">{{\n sort?.columnId === column.id\n ? sort.direction === 'ascending'\n ? '\\u2191'\n : '\\u2193'\n : '\\u2195'\n }}</span></button\n ><template v-else>{{ column.label }}</template>\n </th>\n </tr>\n </thead>\n <tbody>\n <tr v-for=\"row in rows\" :key=\"row.id\">\n <td v-for=\"column in columns\" :key=\"column.id\">\n <slot name=\"cell\" :row=\"row\" :column=\"column\" :value=\"row.cells[column.id]\">{{\n row.cells[column.id] ?? ''\n }}</slot>\n </td>\n </tr>\n <tr v-if=\"!rows.length\">\n <td :colspan=\"Math.max(1, columns.length)\" class=\"table__empty\">\n {{ loading ? loadingMessage : errorMessage || emptyMessage }}\n </td>\n </tr>\n </tbody>\n </Table>\n <p v-if=\"loading\" class=\"data-table__status\" role=\"status\">{{ loadingMessage }}</p>\n <p v-if=\"errorMessage && !loading\" class=\"input__error\" role=\"alert\">{{ errorMessage }}</p>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type { BadgeTone } from './types.js';\ndefineOptions({ inheritAttrs: false });\nwithDefaults(\n defineProps<{\n title: string;\n description?: string;\n tone?: BadgeTone;\n announcement?: 'off' | 'polite' | 'assertive';\n id?: string;\n }>(),\n { description: undefined, tone: 'info', announcement: 'off', id: undefined },\n);\n</script>\n<template>\n <div\n :id=\"id\"\n class=\"alert\"\n :data-tone=\"tone\"\n :role=\"\n announcement === 'polite' ? 'status' : announcement === 'assertive' ? 'alert' : undefined\n \"\n >\n <p class=\"alert__title\">{{ title }}</p>\n <p v-if=\"description\" class=\"alert__description\">{{ description }}</p>\n <slot />\n <div v-if=\"$slots.actions\" class=\"alert__actions\"><slot name=\"actions\" /></div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type { BadgeTone } from './types.js';\ndefineOptions({ inheritAttrs: false });\nwithDefaults(\n defineProps<{\n title: string;\n description?: string;\n tone?: BadgeTone;\n announcement?: 'off' | 'polite' | 'assertive';\n id?: string;\n }>(),\n { description: undefined, tone: 'info', announcement: 'off', id: undefined },\n);\n</script>\n<template>\n <div\n :id=\"id\"\n class=\"alert\"\n :data-tone=\"tone\"\n :role=\"\n announcement === 'polite' ? 'status' : announcement === 'assertive' ? 'alert' : undefined\n \"\n >\n <p class=\"alert__title\">{{ title }}</p>\n <p v-if=\"description\" class=\"alert__description\">{{ description }}</p>\n <slot />\n <div v-if=\"$slots.actions\" class=\"alert__actions\"><slot name=\"actions\" /></div>\n </div>\n</template>\n","import { inject, type InjectionKey } from 'vue';\nimport type { ToastManager } from './toast-model.js';\n\nexport const toastManagerKey: InjectionKey<ToastManager> = Symbol('KazeeToastManager');\n\n/** Access the nearest provider's manager. Create imperative managers per application. */\nexport function useToast(): ToastManager {\n const manager = inject(toastManagerKey);\n if (!manager) throw new Error('useToast must be used inside ToastProvider.');\n return manager;\n}\n","<script setup lang=\"ts\">\nimport { computed, ref, watch } from 'vue';\nimport {\n ToastRoot,\n ToastTitle,\n ToastDescription,\n ToastAction as RekaToastAction,\n ToastClose,\n} from 'reka-ui';\nimport type { ToastAction, ToastEntry, ToastManager, ToastPlacement } from './toast-model.js';\nimport { useToast } from './useToast.js';\n\ndefineOptions({ inheritAttrs: false });\nconst props = withDefaults(\n defineProps<{\n entry: ToastEntry;\n manager?: ToastManager;\n placement?: ToastPlacement;\n closeLabel?: string;\n dir?: 'ltr' | 'rtl';\n showProgress?: boolean;\n showCloseButton?: boolean;\n swipeThreshold?: number;\n }>(),\n {\n manager: undefined,\n placement: 'bottom-end',\n closeLabel: 'Tutup',\n dir: undefined,\n showProgress: false,\n showCloseButton: false,\n swipeThreshold: 50,\n },\n);\ndefineSlots<{\n default?: (props: { entry: ToastEntry; dismiss: () => void }) => unknown;\n indicator?: (props: { entry: ToastEntry }) => unknown;\n}>();\nconst manager = props.manager ?? useToast();\nconst closing = computed(() => props.entry.state === 'closing');\nconst swipe = ref<'start' | 'move' | 'cancel' | 'end'>();\nconst delta = ref(0);\nconst announcement = ref('');\nwatch(\n () => [props.entry.title, props.entry.description, props.entry.isLoading],\n () => {\n if (!closing.value)\n announcement.value = [props.entry.title, props.entry.description].filter(Boolean).join('. ');\n },\n);\nconst style = computed(() => ({\n touchAction: 'pan-y',\n '--toast-progress': props.entry.duration > 0 ? props.entry.remaining / props.entry.duration : 0,\n '--toast-remaining': `${props.entry.remaining}ms`,\n '--toast-duration': `${props.entry.duration}ms`,\n '--toast-swipe-x': `${delta.value}px`,\n '--reka-toast-swipe-move-x': `${delta.value}px`,\n '--reka-toast-swipe-end-x': `${delta.value}px`,\n}));\nfunction viewport(element: Element | null) {\n return element?.closest('.toast-list') as HTMLElement | null;\n}\nfunction dismiss() {\n const element = document.activeElement;\n if (\n element instanceof HTMLElement &&\n element.closest('[data-toast-id]')?.getAttribute('data-toast-id') === props.entry.id\n )\n viewport(element)?.focus({ preventScroll: true });\n manager.dismiss(props.entry.id);\n}\nfunction action(value: ToastAction, reason: 'action' | 'cancel', event: MouseEvent) {\n // Prevent native primitive close; only a successful application action closes.\n event.preventDefault();\n value.onAction();\n if (value.dismiss !== false) {\n viewport(event.currentTarget as Element)?.focus({ preventScroll: true });\n manager.dismiss(props.entry.id, reason);\n }\n}\nlet pointer: { id: number; x: number; y: number; direction: number; started: boolean } | undefined;\nfunction pointerDown(event: PointerEvent) {\n if (closing.value || event.button !== 0 || event.isPrimary === false) return;\n if (\n (event.target as Element).closest(\n 'button,a,input,textarea,select,[role=\"button\"],[contenteditable]:not([contenteditable=\"false\"]),[data-no-swipe]',\n )\n )\n return;\n const rtl =\n props.dir === 'rtl' ||\n (!props.dir && getComputedStyle(event.currentTarget as Element).direction === 'rtl');\n const start = props.placement.endsWith('start');\n pointer = {\n id: event.pointerId,\n x: event.clientX,\n y: event.clientY,\n direction: start !== rtl ? -1 : 1,\n started: false,\n };\n}\nfunction pointerMove(event: PointerEvent) {\n if (!pointer || pointer.id !== event.pointerId) return;\n const x = event.clientX - pointer.x;\n const y = event.clientY - pointer.y;\n if (!pointer.started) {\n if (Math.abs(y) > Math.abs(x) && Math.abs(y) > 8) {\n pointer = undefined;\n return;\n }\n if (Math.abs(x) < 8) return;\n if (x * pointer.direction < 0) {\n pointer = undefined;\n return;\n }\n pointer.started = true;\n (event.currentTarget as HTMLElement).setPointerCapture?.(event.pointerId);\n swipe.value = 'start';\n }\n delta.value = Math.max(0, x * pointer.direction) * pointer.direction;\n swipe.value = 'move';\n}\nfunction pointerEnd(event: PointerEvent, cancel = false) {\n if (!pointer || pointer.id !== event.pointerId) return;\n const started = pointer.started;\n pointer = undefined;\n const node = event.currentTarget as HTMLElement;\n if (node.hasPointerCapture?.(event.pointerId)) node.releasePointerCapture(event.pointerId);\n if (!started) return;\n if (!cancel && Math.abs(delta.value) >= props.swipeThreshold) {\n swipe.value = 'end';\n manager.dismiss(props.entry.id, 'swipe');\n } else {\n swipe.value = 'cancel';\n delta.value = 0;\n }\n node.addEventListener(\n 'click',\n (click) => {\n click.preventDefault();\n click.stopPropagation();\n },\n { once: true },\n );\n}\n</script>\n\n<template>\n <!-- asChild lets Kazee closing/inert attributes override the primitive's native open/limited attributes. -->\n <ToastRoot :open=\"!closing\" :force-mount=\"true\" :duration=\"Infinity\" type=\"background\" as-child>\n <li\n class=\"toast\"\n :data-toast-id=\"entry.id\"\n :data-tone=\"entry.tone\"\n :data-has-close=\"showCloseButton || undefined\"\n :data-loading=\"entry.isLoading || undefined\"\n :data-state=\"entry.state\"\n :data-placement=\"placement\"\n :data-paused=\"entry.paused || undefined\"\n :data-swipe=\"swipe\"\n :dir=\"dir\"\n :inert=\"closing || undefined\"\n :aria-hidden=\"closing || undefined\"\n :tabindex=\"closing ? -1 : 0\"\n :style=\"style\"\n @pointerdown=\"pointerDown\"\n @pointermove=\"pointerMove\"\n @pointerup=\"pointerEnd($event)\"\n @pointercancel=\"pointerEnd($event, true)\"\n >\n <span class=\"toast__indicator\" aria-hidden=\"true\">\n <slot name=\"indicator\" :entry=\"entry\">\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.8\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <template v-if=\"entry.isLoading\">\n <circle cx=\"12\" cy=\"12\" r=\"9\" opacity=\".25\" />\n <path d=\"M12 3a9 9 0 0 1 9 9\" />\n </template>\n <template v-else-if=\"entry.tone === 'success'\">\n <circle cx=\"12\" cy=\"12\" r=\"9\" />\n <path d=\"m8 12 3 3 5-6\" />\n </template>\n <template v-else-if=\"entry.tone === 'warning'\">\n <path d=\"m12 3 10 18H2L12 3Z\" />\n <path d=\"M12 9v4m0 4h.01\" />\n </template>\n <template v-else-if=\"entry.tone === 'danger'\">\n <circle cx=\"12\" cy=\"12\" r=\"9\" />\n <path d=\"m9 9 6 6m0-6-6 6\" />\n </template>\n <template v-else>\n <circle cx=\"12\" cy=\"12\" r=\"9\" />\n <path d=\"M12 11v6m0-10h.01\" />\n </template>\n </svg>\n </slot>\n </span>\n <div class=\"toast__body\">\n <slot :entry=\"entry\" :dismiss=\"dismiss\">\n <ToastTitle class=\"toast__title\">{{ entry.title }}</ToastTitle>\n <ToastDescription v-if=\"entry.description\" class=\"toast__description\">{{\n entry.description\n }}</ToastDescription>\n <div v-if=\"entry.action || entry.cancel\" class=\"toast__actions\">\n <RekaToastAction\n v-if=\"entry.action\"\n class=\"toast__action\"\n :alt-text=\"entry.action.altText\"\n :close-on-click=\"false\"\n :disabled=\"closing\"\n @click=\"action(entry.action, 'action', $event)\"\n >{{ entry.action.label }}</RekaToastAction\n >\n <RekaToastAction\n v-if=\"entry.cancel\"\n class=\"toast__action\"\n data-cancel\n :alt-text=\"entry.cancel.altText\"\n :close-on-click=\"false\"\n :disabled=\"closing\"\n @click=\"action(entry.cancel, 'cancel', $event)\"\n >{{ entry.cancel.label }}</RekaToastAction\n >\n </div>\n </slot>\n </div>\n <ToastClose\n v-if=\"showCloseButton\"\n class=\"toast__close\"\n :aria-label=\"closeLabel\"\n :disabled=\"closing\"\n @click=\"dismiss\"\n >\n <svg\n aria-hidden=\"true\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.8\"\n stroke-linecap=\"round\"\n >\n <path d=\"m6 6 12 12M6 18 18 6\" />\n </svg>\n </ToastClose>\n <span\n v-if=\"showProgress && entry.duration > 0 && !entry.isLoading\"\n :key=\"`${entry.generation}-${entry.remaining}-${entry.paused}`\"\n class=\"toast__progress\"\n aria-hidden=\"true\"\n />\n </li>\n </ToastRoot>\n <span\n role=\"status\"\n aria-live=\"polite\"\n aria-atomic=\"true\"\n style=\"\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n \"\n >{{ announcement }}</span\n >\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref, watch } from 'vue';\nimport {\n ToastRoot,\n ToastTitle,\n ToastDescription,\n ToastAction as RekaToastAction,\n ToastClose,\n} from 'reka-ui';\nimport type { ToastAction, ToastEntry, ToastManager, ToastPlacement } from './toast-model.js';\nimport { useToast } from './useToast.js';\n\ndefineOptions({ inheritAttrs: false });\nconst props = withDefaults(\n defineProps<{\n entry: ToastEntry;\n manager?: ToastManager;\n placement?: ToastPlacement;\n closeLabel?: string;\n dir?: 'ltr' | 'rtl';\n showProgress?: boolean;\n showCloseButton?: boolean;\n swipeThreshold?: number;\n }>(),\n {\n manager: undefined,\n placement: 'bottom-end',\n closeLabel: 'Tutup',\n dir: undefined,\n showProgress: false,\n showCloseButton: false,\n swipeThreshold: 50,\n },\n);\ndefineSlots<{\n default?: (props: { entry: ToastEntry; dismiss: () => void }) => unknown;\n indicator?: (props: { entry: ToastEntry }) => unknown;\n}>();\nconst manager = props.manager ?? useToast();\nconst closing = computed(() => props.entry.state === 'closing');\nconst swipe = ref<'start' | 'move' | 'cancel' | 'end'>();\nconst delta = ref(0);\nconst announcement = ref('');\nwatch(\n () => [props.entry.title, props.entry.description, props.entry.isLoading],\n () => {\n if (!closing.value)\n announcement.value = [props.entry.title, props.entry.description].filter(Boolean).join('. ');\n },\n);\nconst style = computed(() => ({\n touchAction: 'pan-y',\n '--toast-progress': props.entry.duration > 0 ? props.entry.remaining / props.entry.duration : 0,\n '--toast-remaining': `${props.entry.remaining}ms`,\n '--toast-duration': `${props.entry.duration}ms`,\n '--toast-swipe-x': `${delta.value}px`,\n '--reka-toast-swipe-move-x': `${delta.value}px`,\n '--reka-toast-swipe-end-x': `${delta.value}px`,\n}));\nfunction viewport(element: Element | null) {\n return element?.closest('.toast-list') as HTMLElement | null;\n}\nfunction dismiss() {\n const element = document.activeElement;\n if (\n element instanceof HTMLElement &&\n element.closest('[data-toast-id]')?.getAttribute('data-toast-id') === props.entry.id\n )\n viewport(element)?.focus({ preventScroll: true });\n manager.dismiss(props.entry.id);\n}\nfunction action(value: ToastAction, reason: 'action' | 'cancel', event: MouseEvent) {\n // Prevent native primitive close; only a successful application action closes.\n event.preventDefault();\n value.onAction();\n if (value.dismiss !== false) {\n viewport(event.currentTarget as Element)?.focus({ preventScroll: true });\n manager.dismiss(props.entry.id, reason);\n }\n}\nlet pointer: { id: number; x: number; y: number; direction: number; started: boolean } | undefined;\nfunction pointerDown(event: PointerEvent) {\n if (closing.value || event.button !== 0 || event.isPrimary === false) return;\n if (\n (event.target as Element).closest(\n 'button,a,input,textarea,select,[role=\"button\"],[contenteditable]:not([contenteditable=\"false\"]),[data-no-swipe]',\n )\n )\n return;\n const rtl =\n props.dir === 'rtl' ||\n (!props.dir && getComputedStyle(event.currentTarget as Element).direction === 'rtl');\n const start = props.placement.endsWith('start');\n pointer = {\n id: event.pointerId,\n x: event.clientX,\n y: event.clientY,\n direction: start !== rtl ? -1 : 1,\n started: false,\n };\n}\nfunction pointerMove(event: PointerEvent) {\n if (!pointer || pointer.id !== event.pointerId) return;\n const x = event.clientX - pointer.x;\n const y = event.clientY - pointer.y;\n if (!pointer.started) {\n if (Math.abs(y) > Math.abs(x) && Math.abs(y) > 8) {\n pointer = undefined;\n return;\n }\n if (Math.abs(x) < 8) return;\n if (x * pointer.direction < 0) {\n pointer = undefined;\n return;\n }\n pointer.started = true;\n (event.currentTarget as HTMLElement).setPointerCapture?.(event.pointerId);\n swipe.value = 'start';\n }\n delta.value = Math.max(0, x * pointer.direction) * pointer.direction;\n swipe.value = 'move';\n}\nfunction pointerEnd(event: PointerEvent, cancel = false) {\n if (!pointer || pointer.id !== event.pointerId) return;\n const started = pointer.started;\n pointer = undefined;\n const node = event.currentTarget as HTMLElement;\n if (node.hasPointerCapture?.(event.pointerId)) node.releasePointerCapture(event.pointerId);\n if (!started) return;\n if (!cancel && Math.abs(delta.value) >= props.swipeThreshold) {\n swipe.value = 'end';\n manager.dismiss(props.entry.id, 'swipe');\n } else {\n swipe.value = 'cancel';\n delta.value = 0;\n }\n node.addEventListener(\n 'click',\n (click) => {\n click.preventDefault();\n click.stopPropagation();\n },\n { once: true },\n );\n}\n</script>\n\n<template>\n <!-- asChild lets Kazee closing/inert attributes override the primitive's native open/limited attributes. -->\n <ToastRoot :open=\"!closing\" :force-mount=\"true\" :duration=\"Infinity\" type=\"background\" as-child>\n <li\n class=\"toast\"\n :data-toast-id=\"entry.id\"\n :data-tone=\"entry.tone\"\n :data-has-close=\"showCloseButton || undefined\"\n :data-loading=\"entry.isLoading || undefined\"\n :data-state=\"entry.state\"\n :data-placement=\"placement\"\n :data-paused=\"entry.paused || undefined\"\n :data-swipe=\"swipe\"\n :dir=\"dir\"\n :inert=\"closing || undefined\"\n :aria-hidden=\"closing || undefined\"\n :tabindex=\"closing ? -1 : 0\"\n :style=\"style\"\n @pointerdown=\"pointerDown\"\n @pointermove=\"pointerMove\"\n @pointerup=\"pointerEnd($event)\"\n @pointercancel=\"pointerEnd($event, true)\"\n >\n <span class=\"toast__indicator\" aria-hidden=\"true\">\n <slot name=\"indicator\" :entry=\"entry\">\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.8\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <template v-if=\"entry.isLoading\">\n <circle cx=\"12\" cy=\"12\" r=\"9\" opacity=\".25\" />\n <path d=\"M12 3a9 9 0 0 1 9 9\" />\n </template>\n <template v-else-if=\"entry.tone === 'success'\">\n <circle cx=\"12\" cy=\"12\" r=\"9\" />\n <path d=\"m8 12 3 3 5-6\" />\n </template>\n <template v-else-if=\"entry.tone === 'warning'\">\n <path d=\"m12 3 10 18H2L12 3Z\" />\n <path d=\"M12 9v4m0 4h.01\" />\n </template>\n <template v-else-if=\"entry.tone === 'danger'\">\n <circle cx=\"12\" cy=\"12\" r=\"9\" />\n <path d=\"m9 9 6 6m0-6-6 6\" />\n </template>\n <template v-else>\n <circle cx=\"12\" cy=\"12\" r=\"9\" />\n <path d=\"M12 11v6m0-10h.01\" />\n </template>\n </svg>\n </slot>\n </span>\n <div class=\"toast__body\">\n <slot :entry=\"entry\" :dismiss=\"dismiss\">\n <ToastTitle class=\"toast__title\">{{ entry.title }}</ToastTitle>\n <ToastDescription v-if=\"entry.description\" class=\"toast__description\">{{\n entry.description\n }}</ToastDescription>\n <div v-if=\"entry.action || entry.cancel\" class=\"toast__actions\">\n <RekaToastAction\n v-if=\"entry.action\"\n class=\"toast__action\"\n :alt-text=\"entry.action.altText\"\n :close-on-click=\"false\"\n :disabled=\"closing\"\n @click=\"action(entry.action, 'action', $event)\"\n >{{ entry.action.label }}</RekaToastAction\n >\n <RekaToastAction\n v-if=\"entry.cancel\"\n class=\"toast__action\"\n data-cancel\n :alt-text=\"entry.cancel.altText\"\n :close-on-click=\"false\"\n :disabled=\"closing\"\n @click=\"action(entry.cancel, 'cancel', $event)\"\n >{{ entry.cancel.label }}</RekaToastAction\n >\n </div>\n </slot>\n </div>\n <ToastClose\n v-if=\"showCloseButton\"\n class=\"toast__close\"\n :aria-label=\"closeLabel\"\n :disabled=\"closing\"\n @click=\"dismiss\"\n >\n <svg\n aria-hidden=\"true\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.8\"\n stroke-linecap=\"round\"\n >\n <path d=\"m6 6 12 12M6 18 18 6\" />\n </svg>\n </ToastClose>\n <span\n v-if=\"showProgress && entry.duration > 0 && !entry.isLoading\"\n :key=\"`${entry.generation}-${entry.remaining}-${entry.paused}`\"\n class=\"toast__progress\"\n aria-hidden=\"true\"\n />\n </li>\n </ToastRoot>\n <span\n role=\"status\"\n aria-live=\"polite\"\n aria-atomic=\"true\"\n style=\"\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n \"\n >{{ announcement }}</span\n >\n</template>\n","export type ToastTone = 'neutral' | 'info' | 'success' | 'warning' | 'danger';\nexport type ToastPlacement =\n 'top-start' | 'top-center' | 'top-end' | 'bottom-start' | 'bottom-center' | 'bottom-end';\nexport type ToastCloseReason =\n 'timeout' | 'dismiss' | 'action' | 'cancel' | 'swipe' | 'clear' | 'unmount';\nexport interface ToastAction {\n label: string;\n altText: string;\n onAction: () => void;\n dismiss?: boolean;\n}\nexport interface ToastOptions {\n id?: string;\n title: string;\n description?: string;\n tone?: ToastTone;\n duration?: number;\n isLoading?: boolean;\n action?: ToastAction;\n cancel?: ToastAction;\n onClose?: (reason: ToastCloseReason) => void;\n}\nexport interface ToastEntry extends Readonly<ToastOptions> {\n readonly id: string;\n readonly tone: ToastTone;\n readonly duration: number;\n readonly isLoading: boolean;\n readonly generation: number;\n readonly state: 'open' | 'closing';\n readonly createdAt: number;\n readonly visibleAt: number | null;\n readonly remaining: number;\n readonly paused: boolean;\n}\nexport interface ToastManagerOptions {\n maxVisible?: number;\n maxPending?: number;\n duration?: number;\n exitDuration?: number;\n}\ntype ToastMessage = string | ToastOptions;\nexport interface ToastPromiseMessages<T> {\n loading: ToastMessage;\n success: ToastMessage | ((value: T) => ToastMessage);\n error: ToastMessage | ((error: unknown) => ToastMessage);\n}\nexport interface ToastManager {\n add(options: ToastOptions): string | null;\n update(id: string, options: Partial<ToastOptions>): boolean;\n dismiss(id: string, reason?: ToastCloseReason): void;\n clear(reason?: ToastCloseReason): void;\n pause(reason: string): void;\n resume(reason: string): void;\n attach(): () => void;\n dispose(): void;\n subscribe(listener: () => void): () => void;\n getSnapshot(): readonly ToastEntry[];\n getServerSnapshot(): readonly ToastEntry[];\n promise<T>(\n promise: Promise<T>,\n messages: ToastPromiseMessages<T>,\n options?: Partial<ToastOptions>,\n ): { id: string | null; promise: Promise<T> };\n}\n\ninterface RecordState {\n entry: ToastEntry;\n timer?: ReturnType<typeof setTimeout>;\n startedAt: number | null;\n exitRemaining: number;\n}\nconst EMPTY: readonly ToastEntry[] = Object.freeze([]);\nconst messageOptions = (message: ToastMessage): ToastOptions =>\n typeof message === 'string' ? { title: message } : message;\nconst milliseconds = (value: number, fallback: number) =>\n Number.isFinite(value) && value >= 0 ? value : fallback;\n\n/** Complete required notifications/cleanup before reporting user callback failures. */\nconst complete = (operations: readonly (() => void)[]) => {\n const errors: unknown[] = [];\n for (const operation of operations) {\n try {\n operation();\n } catch (error) {\n errors.push(error);\n }\n }\n if (errors.length === 1) throw errors[0];\n if (errors.length > 1) throw new AggregateError(errors, 'Toast lifecycle callbacks failed.');\n};\n\n/** Create per application/provider; no browser globals or timers are used until attached. */\nexport function createToastManager(options: ToastManagerOptions = {}): ToastManager {\n const maxVisible = Math.max(1, Math.floor(options.maxVisible ?? 3));\n const maxPending = Math.max(0, Math.floor(options.maxPending ?? 50));\n const duration = milliseconds(options.duration ?? 5000, 5000);\n const exitDuration = milliseconds(options.exitDuration ?? 200, 200);\n const records = new Map<string, RecordState>();\n const visible: string[] = [];\n const pending: string[] = [];\n const listeners = new Set<() => void>();\n const pauses = new Map<string, number>();\n let snapshot = EMPTY;\n let attached = false;\n let disposed = false;\n let sequence = 0;\n let generation = 0;\n const paused = () => !attached || pauses.size > 0;\n const freeze = (entry: ToastEntry): ToastEntry =>\n Object.freeze({\n ...entry,\n action: entry.action ? Object.freeze({ ...entry.action }) : undefined,\n cancel: entry.cancel ? Object.freeze({ ...entry.cancel }) : undefined,\n });\n const publish = () => {\n const next = visible.map((id) => records.get(id)!.entry);\n if (next.length === snapshot.length && next.every((entry, index) => entry === snapshot[index]))\n return;\n snapshot = Object.freeze(next);\n complete([...listeners]);\n };\n const stop = (record: RecordState) => {\n if (record.timer !== undefined) clearTimeout(record.timer);\n record.timer = undefined;\n if (record.startedAt !== null) {\n const elapsed = Math.max(0, Date.now() - record.startedAt);\n if (record.entry.state === 'closing')\n record.exitRemaining = Math.max(0, record.exitRemaining - elapsed);\n else\n record.entry = freeze({\n ...record.entry,\n remaining: Math.max(0, record.entry.remaining - elapsed),\n });\n }\n record.startedAt = null;\n };\n const promote = () => {\n while (visible.length < maxVisible && pending.length) {\n const id = pending.shift()!;\n const record = records.get(id)!;\n visible.push(id);\n record.entry = freeze({ ...record.entry, visibleAt: Date.now(), paused: paused() });\n start(record);\n }\n };\n const remove = (id: string) => {\n const record = records.get(id);\n if (!record) return;\n stop(record);\n records.delete(id);\n const index = visible.indexOf(id);\n if (index >= 0) visible.splice(index, 1);\n const waiting = pending.indexOf(id);\n if (waiting >= 0) pending.splice(waiting, 1);\n promote();\n publish();\n };\n const start = (record: RecordState) => {\n if (!attached || record.entry.visibleAt === null || record.timer !== undefined) return;\n const closing = record.entry.state === 'closing';\n if (!closing && (paused() || record.entry.isLoading || record.entry.duration === 0)) return;\n record.startedAt = Date.now();\n record.timer = setTimeout(\n () => {\n record.timer = undefined;\n record.startedAt = null;\n if (closing) remove(record.entry.id);\n else manager.dismiss(record.entry.id, 'timeout');\n },\n closing ? record.exitRemaining : record.entry.remaining,\n );\n };\n const refreshPause = () => {\n for (const id of visible) {\n const record = records.get(id)!;\n stop(record);\n record.entry = freeze({\n ...record.entry,\n paused: paused() || record.entry.state === 'closing',\n });\n start(record);\n }\n publish();\n };\n const update = (\n id: string,\n changes: Partial<ToastOptions>,\n invalidate: boolean,\n onGeneration?: (value: number) => void,\n ) => {\n const record = records.get(id);\n if (!record || record.entry.state === 'closing' || disposed) return false;\n stop(record);\n const before = record.entry;\n const settled = before.isLoading && changes.isLoading === false;\n const nextDuration =\n changes.duration !== undefined\n ? milliseconds(changes.duration, duration)\n : settled\n ? duration\n : before.duration;\n record.entry = freeze({\n ...before,\n ...changes,\n id,\n tone: changes.tone ?? before.tone,\n duration: nextDuration,\n isLoading: changes.isLoading ?? before.isLoading,\n remaining: changes.duration !== undefined || settled ? nextDuration : before.remaining,\n generation: invalidate ? ++generation : before.generation,\n });\n onGeneration?.(record.entry.generation);\n start(record);\n publish();\n return true;\n };\n const add = (value: ToastOptions, onGeneration?: (value: number) => void): string | null => {\n if (disposed) return null;\n if (value.id !== undefined && records.has(value.id))\n return update(value.id, value, true, onGeneration) ? value.id : null;\n if (visible.length >= maxVisible && pending.length >= maxPending) return null;\n let id = value.id;\n if (id === undefined) {\n do {\n id = `toast-${++sequence}`;\n } while (records.has(id));\n }\n const entry = freeze({\n ...value,\n id,\n tone: value.tone ?? 'neutral',\n duration: milliseconds(value.duration ?? duration, duration),\n isLoading: value.isLoading ?? false,\n generation: ++generation,\n state: 'open',\n createdAt: Date.now(),\n visibleAt: visible.length < maxVisible ? Date.now() : null,\n remaining: milliseconds(value.duration ?? duration, duration),\n paused: paused(),\n });\n const record: RecordState = { entry, startedAt: null, exitRemaining: exitDuration };\n records.set(id, record);\n if (visible.length < maxVisible) {\n visible.push(id);\n start(record);\n } else pending.push(id);\n onGeneration?.(entry.generation);\n publish();\n return id;\n };\n const manager: ToastManager = {\n add,\n update: (id, changes) => update(id, changes, true),\n dismiss(id, reason = 'dismiss') {\n const record = records.get(id);\n if (!record || record.entry.state === 'closing') return;\n stop(record);\n record.entry = freeze({\n ...record.entry,\n state: 'closing',\n paused: true,\n remaining: reason === 'timeout' ? 0 : record.entry.remaining,\n });\n complete([\n () => {\n if (record.entry.visibleAt === null) remove(id);\n else {\n start(record);\n publish();\n }\n },\n () => record.entry.onClose?.(reason),\n ]);\n },\n clear(reason = 'clear') {\n // Remove waiting entries first so visible exits cannot promote cleared work.\n complete([...pending, ...visible].map((id) => () => manager.dismiss(id, reason)));\n },\n pause(reason) {\n if (disposed) return;\n pauses.set(reason, (pauses.get(reason) ?? 0) + 1);\n if (pauses.size === 1 && pauses.get(reason) === 1) refreshPause();\n },\n resume(reason) {\n const count = pauses.get(reason);\n if (!count || disposed) return;\n if (count === 1) pauses.delete(reason);\n else pauses.set(reason, count - 1);\n if (!pauses.size) refreshPause();\n },\n attach() {\n if (disposed) throw new Error('Cannot attach a disposed ToastManager.');\n if (attached) throw new Error('A ToastManager may attach to only one provider.');\n attached = true;\n try {\n refreshPause();\n } catch (error) {\n attached = false;\n // Rollback also publishes the detached snapshot; report all subscriber failures.\n complete([\n () => {\n throw error;\n },\n refreshPause,\n ]);\n }\n let detached = false;\n return () => {\n if (detached || disposed) return;\n detached = true;\n attached = false;\n refreshPause();\n };\n },\n dispose() {\n if (disposed) return;\n disposed = true;\n attached = false;\n const closing = [...records.values()].filter((record) => record.entry.state === 'open');\n for (const record of records.values()) stop(record);\n records.clear();\n visible.length = 0;\n pending.length = 0;\n pauses.clear();\n complete([\n publish,\n () => listeners.clear(),\n ...closing.map((record) => () => record.entry.onClose?.('unmount')),\n ]);\n },\n subscribe(listener) {\n if (!disposed) listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n getSnapshot: () => snapshot,\n getServerSnapshot: () => EMPTY,\n promise(task, messages, promiseOptions = {}) {\n let expected: number | undefined;\n const id = add(\n {\n ...promiseOptions,\n ...messageOptions(messages.loading),\n isLoading: true,\n },\n (value) => {\n expected = value;\n },\n );\n const settle = (message: ToastMessage | (() => ToastMessage), tone: ToastTone) => {\n if (\n id === null ||\n records.get(id)?.entry.generation !== expected ||\n records.get(id)?.entry.state !== 'open'\n )\n return;\n const content = typeof message === 'function' ? message() : message;\n // Result factories may reentrantly update, dismiss, dispose, or reuse this ID.\n if (\n records.get(id)?.entry.generation !== expected ||\n records.get(id)?.entry.state !== 'open'\n )\n return;\n update(\n id,\n {\n tone,\n duration: promiseOptions.duration ?? duration,\n ...messageOptions(content),\n isLoading: false,\n },\n false,\n );\n };\n return {\n id,\n promise: task.then(\n (value) => {\n const message = messages.success;\n settle(typeof message === 'function' ? () => message(value) : message, 'success');\n return value;\n },\n (error: unknown) => {\n const message = messages.error;\n settle(typeof message === 'function' ? () => message(error) : message, 'danger');\n throw error;\n },\n ),\n };\n },\n };\n return manager;\n}\n","<script setup lang=\"ts\">\nimport { computed, nextTick, onBeforeUnmount, onMounted, provide, ref, shallowRef } from 'vue';\nimport { ToastProvider as RekaToastProvider, ToastViewport } from 'reka-ui';\nimport Toast from './Toast.vue';\nimport {\n createToastManager,\n type ToastEntry,\n type ToastManager,\n type ToastPlacement,\n} from './toast-model.js';\nimport { toastManagerKey } from './useToast.js';\n\ndefineOptions({ inheritAttrs: false });\nconst props = withDefaults(\n defineProps<{\n manager?: ToastManager;\n placement?: ToastPlacement;\n label?: string;\n closeLabel?: string;\n hotkey?: string[];\n dir?: 'ltr' | 'rtl';\n showProgress?: boolean;\n showCloseButton?: boolean;\n swipeThreshold?: number;\n }>(),\n {\n manager: undefined,\n placement: 'bottom-end',\n label: 'Notifikasi',\n closeLabel: 'Tutup',\n hotkey: () => ['altKey', 'KeyT'],\n dir: undefined,\n showProgress: false,\n showCloseButton: false,\n swipeThreshold: 50,\n },\n);\ndefineSlots<{\n default?: (props: { toast: ToastManager }) => unknown;\n toast?: (props: { entry: ToastEntry; dismiss: () => void }) => unknown;\n indicator?: (props: { entry: ToastEntry }) => unknown;\n}>();\n// Capture ownership at setup; replacing a mounted provider's manager is unsupported.\nconst manager = props.manager ?? createToastManager();\nconst owned = !props.manager;\nprovide(toastManagerKey, manager);\nconst entries = shallowRef<readonly ToastEntry[]>(manager.getServerSnapshot());\nconst region = ref<HTMLElement>();\nconst active = ref(false);\nconst causes = new Set<string>();\nlet unsubscribe: (() => void) | undefined;\nlet detach: (() => void) | undefined;\nlet previousFocus: HTMLElement | undefined;\nconst positions = new Map<string, { x: number; y: number }>();\nconst movements = new Map<HTMLElement, Animation>();\nlet reflowQueued = false;\nconst hotkeyText = computed(() =>\n props.hotkey\n .map(\n (key) =>\n ({ altKey: 'Alt', ctrlKey: 'Ctrl', metaKey: 'Meta', shiftKey: 'Shift' })[key] ??\n key.replace(/^Key|^Digit/, ''),\n )\n .join('+'),\n);\nconst viewportLabel = computed(() =>\n hotkeyText.value ? `${props.label} (${hotkeyText.value})` : props.label,\n);\nfunction pause(cause: string) {\n if (!causes.has(cause)) {\n causes.add(cause);\n manager.pause(`vue:${cause}`);\n }\n}\nfunction resume(cause: string) {\n if (causes.delete(cause)) manager.resume(`vue:${cause}`);\n}\nfunction focusOut(event: FocusEvent) {\n if (!region.value?.contains(event.relatedTarget as Node | null)) resume('focus');\n}\nfunction focusIn(event: FocusEvent) {\n if (event.relatedTarget instanceof HTMLElement && !region.value?.contains(event.relatedTarget)) {\n previousFocus = event.relatedTarget;\n }\n pause('focus');\n}\nfunction windowBlur() {\n pause('window');\n}\nfunction windowFocus() {\n resume('window');\n}\nfunction visibility() {\n if (document.hidden) pause('document');\n else resume('document');\n}\nfunction list() {\n return region.value?.querySelector<HTMLElement>('.toast-list');\n}\nfunction restoreIfEmpty() {\n const focused = document.activeElement;\n if (!region.value?.contains(focused)) return;\n if (!entries.value.some((entry) => entry.state === 'open')) {\n if (previousFocus?.isConnected) previousFocus.focus({ preventScroll: true });\n else if (focused instanceof HTMLElement) focused.blur();\n return;\n }\n const id =\n focused instanceof Element\n ? focused.closest<HTMLElement>('[data-toast-id]')?.dataset.toastId\n : undefined;\n if (id && !entries.value.some((entry) => entry.id === id && entry.state === 'open')) {\n list()?.focus({ preventScroll: true });\n }\n}\nfunction keyboard(event: KeyboardEvent) {\n if (\n !props.hotkey.length ||\n event.defaultPrevented ||\n !entries.value.some((entry) => entry.state === 'open')\n )\n return;\n const modifiers = ['altKey', 'ctrlKey', 'metaKey', 'shiftKey'] as const;\n const matches = props.hotkey.every((key) =>\n modifiers.includes(key as (typeof modifiers)[number])\n ? event[key as (typeof modifiers)[number]]\n : event.code === key ||\n (typeof event.key === 'string' && event.key.toLowerCase() === key.toLowerCase()),\n );\n if (!matches || modifiers.some((key) => event[key] !== props.hotkey.includes(key))) return;\n previousFocus =\n document.activeElement instanceof HTMLElement ? document.activeElement : undefined;\n list()?.focus({ preventScroll: true });\n event.preventDefault();\n}\nfunction escape(event: KeyboardEvent) {\n if (event.key !== 'Escape' || event.defaultPrevented) return;\n const target =\n event.target instanceof Element ? event.target.closest<HTMLElement>('[data-toast-id]') : null;\n const entry = target\n ? entries.value.find((item) => item.id === target.dataset.toastId && item.state === 'open')\n : [...entries.value].reverse().find((item) => item.state === 'open');\n if (!entry) return;\n event.preventDefault();\n event.stopPropagation();\n list()?.focus({ preventScroll: true });\n manager.dismiss(entry.id);\n restoreIfEmpty();\n}\nfunction capturePositions() {\n positions.clear();\n if (!active.value || window.matchMedia('(prefers-reduced-motion: reduce)').matches) return;\n const origin = region.value?.getBoundingClientRect();\n region.value?.querySelectorAll<HTMLElement>('.toast').forEach((element) => {\n // Layout offsets exclude the CSS entry/swipe transform and any current FLIP translation.\n if (element.dataset.toastId)\n positions.set(element.dataset.toastId, {\n x: element.offsetLeft + (origin?.left ?? 0),\n y: element.offsetTop + (origin?.top ?? 0),\n });\n });\n}\nfunction animateMovement(previous: Map<string, { x: number; y: number }>) {\n if (!active.value) return;\n const reduced = window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n if (reduced) {\n for (const animation of movements.values()) animation.cancel();\n movements.clear();\n return;\n }\n const origin = region.value?.getBoundingClientRect();\n region.value?.querySelectorAll<HTMLElement>('.toast').forEach((element) => {\n const before = previous.get(element.dataset.toastId ?? '');\n if (!before || element.dataset.state !== 'open' || !element.animate) return;\n const x = before.x - element.offsetLeft - (origin?.left ?? 0);\n const y = before.y - element.offsetTop - (origin?.top ?? 0);\n if (!x && !y) return;\n movements.get(element)?.cancel();\n const css = getComputedStyle(element);\n const token = css.getPropertyValue('--ds-motion-duration-normal').trim();\n const parsed = Number.parseFloat(token);\n const duration = Number.isFinite(parsed) ? parsed * (token.endsWith('ms') ? 1 : 1000) : 200;\n const animation = element.animate([{ translate: `${x}px ${y}px` }, { translate: '0px 0px' }], {\n duration,\n easing: css.getPropertyValue('--ds-motion-ease-standard').trim() || 'ease',\n });\n movements.set(element, animation);\n const remove = () => {\n if (movements.get(element) === animation) movements.delete(element);\n };\n void animation.finished.then(remove, remove);\n });\n for (const [element, animation] of movements) {\n if (!element.isConnected) {\n animation.cancel();\n movements.delete(element);\n }\n }\n}\nonMounted(() => {\n // attach throws before any subscriptions/listeners on duplicate ownership.\n detach = manager.attach();\n active.value = true;\n entries.value = manager.getSnapshot();\n unsubscribe = manager.subscribe(() => {\n if (!reflowQueued) {\n capturePositions();\n const previous = new Map(positions);\n reflowQueued = true;\n entries.value = manager.getSnapshot();\n void nextTick(() => {\n reflowQueued = false;\n animateMovement(previous);\n });\n }\n entries.value = manager.getSnapshot();\n restoreIfEmpty();\n });\n window.addEventListener('blur', windowBlur);\n window.addEventListener('focus', windowFocus);\n document.addEventListener('visibilitychange', visibility);\n document.addEventListener('keydown', keyboard);\n visibility();\n if (!document.hasFocus()) pause('window');\n});\nonBeforeUnmount(() => {\n for (const animation of movements.values()) animation.cancel();\n movements.clear();\n if (!active.value) return;\n active.value = false;\n const errors: unknown[] = [];\n const cleanup = (operation: (() => void) | undefined) => {\n try {\n operation?.();\n } catch (error) {\n errors.push(error);\n }\n };\n cleanup(unsubscribe);\n cleanup(detach);\n // Detach first to prevent a briefly resumed external timer while clearing our pause causes.\n [...causes].forEach((cause) => cleanup(() => resume(cause)));\n if (owned) cleanup(() => manager.dispose());\n window.removeEventListener('blur', windowBlur);\n window.removeEventListener('focus', windowFocus);\n document.removeEventListener('visibilitychange', visibility);\n document.removeEventListener('keydown', keyboard);\n if (errors.length === 1) throw errors[0];\n if (errors.length > 1) throw new AggregateError(errors, 'Toast provider cleanup failed.');\n});\n</script>\n\n<template>\n <RekaToastProvider :duration=\"Infinity\" :disable-swipe=\"true\" :label=\"label\">\n <slot :toast=\"manager\" />\n <div\n ref=\"region\"\n class=\"toast-region\"\n :data-placement=\"placement\"\n :dir=\"dir\"\n @pointerenter=\"pause('hover')\"\n @pointerleave=\"resume('hover')\"\n @focusin=\"focusIn\"\n @focusout=\"focusOut\"\n @keydown.capture=\"escape\"\n >\n <!-- Reka's native array matches keys individually; Kazee handles the complete chord. -->\n <ToastViewport\n class=\"toast-list\"\n :hotkey=\"[]\"\n :label=\"viewportLabel\"\n :data-placement=\"placement\"\n :dir=\"dir\"\n />\n </div>\n <Toast\n v-for=\"entry in entries\"\n :key=\"entry.generation\"\n :entry=\"entry\"\n :manager=\"manager\"\n :placement=\"placement\"\n :dir=\"dir\"\n :close-label=\"closeLabel\"\n :show-progress=\"showProgress\"\n :show-close-button=\"showCloseButton\"\n :swipe-threshold=\"swipeThreshold\"\n >\n <template v-if=\"$slots.toast\" #default=\"slotProps\"\n ><slot name=\"toast\" v-bind=\"slotProps\"\n /></template>\n <template v-if=\"$slots.indicator\" #indicator=\"slotProps\"\n ><slot name=\"indicator\" v-bind=\"slotProps\"\n /></template>\n </Toast>\n </RekaToastProvider>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, nextTick, onBeforeUnmount, onMounted, provide, ref, shallowRef } from 'vue';\nimport { ToastProvider as RekaToastProvider, ToastViewport } from 'reka-ui';\nimport Toast from './Toast.vue';\nimport {\n createToastManager,\n type ToastEntry,\n type ToastManager,\n type ToastPlacement,\n} from './toast-model.js';\nimport { toastManagerKey } from './useToast.js';\n\ndefineOptions({ inheritAttrs: false });\nconst props = withDefaults(\n defineProps<{\n manager?: ToastManager;\n placement?: ToastPlacement;\n label?: string;\n closeLabel?: string;\n hotkey?: string[];\n dir?: 'ltr' | 'rtl';\n showProgress?: boolean;\n showCloseButton?: boolean;\n swipeThreshold?: number;\n }>(),\n {\n manager: undefined,\n placement: 'bottom-end',\n label: 'Notifikasi',\n closeLabel: 'Tutup',\n hotkey: () => ['altKey', 'KeyT'],\n dir: undefined,\n showProgress: false,\n showCloseButton: false,\n swipeThreshold: 50,\n },\n);\ndefineSlots<{\n default?: (props: { toast: ToastManager }) => unknown;\n toast?: (props: { entry: ToastEntry; dismiss: () => void }) => unknown;\n indicator?: (props: { entry: ToastEntry }) => unknown;\n}>();\n// Capture ownership at setup; replacing a mounted provider's manager is unsupported.\nconst manager = props.manager ?? createToastManager();\nconst owned = !props.manager;\nprovide(toastManagerKey, manager);\nconst entries = shallowRef<readonly ToastEntry[]>(manager.getServerSnapshot());\nconst region = ref<HTMLElement>();\nconst active = ref(false);\nconst causes = new Set<string>();\nlet unsubscribe: (() => void) | undefined;\nlet detach: (() => void) | undefined;\nlet previousFocus: HTMLElement | undefined;\nconst positions = new Map<string, { x: number; y: number }>();\nconst movements = new Map<HTMLElement, Animation>();\nlet reflowQueued = false;\nconst hotkeyText = computed(() =>\n props.hotkey\n .map(\n (key) =>\n ({ altKey: 'Alt', ctrlKey: 'Ctrl', metaKey: 'Meta', shiftKey: 'Shift' })[key] ??\n key.replace(/^Key|^Digit/, ''),\n )\n .join('+'),\n);\nconst viewportLabel = computed(() =>\n hotkeyText.value ? `${props.label} (${hotkeyText.value})` : props.label,\n);\nfunction pause(cause: string) {\n if (!causes.has(cause)) {\n causes.add(cause);\n manager.pause(`vue:${cause}`);\n }\n}\nfunction resume(cause: string) {\n if (causes.delete(cause)) manager.resume(`vue:${cause}`);\n}\nfunction focusOut(event: FocusEvent) {\n if (!region.value?.contains(event.relatedTarget as Node | null)) resume('focus');\n}\nfunction focusIn(event: FocusEvent) {\n if (event.relatedTarget instanceof HTMLElement && !region.value?.contains(event.relatedTarget)) {\n previousFocus = event.relatedTarget;\n }\n pause('focus');\n}\nfunction windowBlur() {\n pause('window');\n}\nfunction windowFocus() {\n resume('window');\n}\nfunction visibility() {\n if (document.hidden) pause('document');\n else resume('document');\n}\nfunction list() {\n return region.value?.querySelector<HTMLElement>('.toast-list');\n}\nfunction restoreIfEmpty() {\n const focused = document.activeElement;\n if (!region.value?.contains(focused)) return;\n if (!entries.value.some((entry) => entry.state === 'open')) {\n if (previousFocus?.isConnected) previousFocus.focus({ preventScroll: true });\n else if (focused instanceof HTMLElement) focused.blur();\n return;\n }\n const id =\n focused instanceof Element\n ? focused.closest<HTMLElement>('[data-toast-id]')?.dataset.toastId\n : undefined;\n if (id && !entries.value.some((entry) => entry.id === id && entry.state === 'open')) {\n list()?.focus({ preventScroll: true });\n }\n}\nfunction keyboard(event: KeyboardEvent) {\n if (\n !props.hotkey.length ||\n event.defaultPrevented ||\n !entries.value.some((entry) => entry.state === 'open')\n )\n return;\n const modifiers = ['altKey', 'ctrlKey', 'metaKey', 'shiftKey'] as const;\n const matches = props.hotkey.every((key) =>\n modifiers.includes(key as (typeof modifiers)[number])\n ? event[key as (typeof modifiers)[number]]\n : event.code === key ||\n (typeof event.key === 'string' && event.key.toLowerCase() === key.toLowerCase()),\n );\n if (!matches || modifiers.some((key) => event[key] !== props.hotkey.includes(key))) return;\n previousFocus =\n document.activeElement instanceof HTMLElement ? document.activeElement : undefined;\n list()?.focus({ preventScroll: true });\n event.preventDefault();\n}\nfunction escape(event: KeyboardEvent) {\n if (event.key !== 'Escape' || event.defaultPrevented) return;\n const target =\n event.target instanceof Element ? event.target.closest<HTMLElement>('[data-toast-id]') : null;\n const entry = target\n ? entries.value.find((item) => item.id === target.dataset.toastId && item.state === 'open')\n : [...entries.value].reverse().find((item) => item.state === 'open');\n if (!entry) return;\n event.preventDefault();\n event.stopPropagation();\n list()?.focus({ preventScroll: true });\n manager.dismiss(entry.id);\n restoreIfEmpty();\n}\nfunction capturePositions() {\n positions.clear();\n if (!active.value || window.matchMedia('(prefers-reduced-motion: reduce)').matches) return;\n const origin = region.value?.getBoundingClientRect();\n region.value?.querySelectorAll<HTMLElement>('.toast').forEach((element) => {\n // Layout offsets exclude the CSS entry/swipe transform and any current FLIP translation.\n if (element.dataset.toastId)\n positions.set(element.dataset.toastId, {\n x: element.offsetLeft + (origin?.left ?? 0),\n y: element.offsetTop + (origin?.top ?? 0),\n });\n });\n}\nfunction animateMovement(previous: Map<string, { x: number; y: number }>) {\n if (!active.value) return;\n const reduced = window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n if (reduced) {\n for (const animation of movements.values()) animation.cancel();\n movements.clear();\n return;\n }\n const origin = region.value?.getBoundingClientRect();\n region.value?.querySelectorAll<HTMLElement>('.toast').forEach((element) => {\n const before = previous.get(element.dataset.toastId ?? '');\n if (!before || element.dataset.state !== 'open' || !element.animate) return;\n const x = before.x - element.offsetLeft - (origin?.left ?? 0);\n const y = before.y - element.offsetTop - (origin?.top ?? 0);\n if (!x && !y) return;\n movements.get(element)?.cancel();\n const css = getComputedStyle(element);\n const token = css.getPropertyValue('--ds-motion-duration-normal').trim();\n const parsed = Number.parseFloat(token);\n const duration = Number.isFinite(parsed) ? parsed * (token.endsWith('ms') ? 1 : 1000) : 200;\n const animation = element.animate([{ translate: `${x}px ${y}px` }, { translate: '0px 0px' }], {\n duration,\n easing: css.getPropertyValue('--ds-motion-ease-standard').trim() || 'ease',\n });\n movements.set(element, animation);\n const remove = () => {\n if (movements.get(element) === animation) movements.delete(element);\n };\n void animation.finished.then(remove, remove);\n });\n for (const [element, animation] of movements) {\n if (!element.isConnected) {\n animation.cancel();\n movements.delete(element);\n }\n }\n}\nonMounted(() => {\n // attach throws before any subscriptions/listeners on duplicate ownership.\n detach = manager.attach();\n active.value = true;\n entries.value = manager.getSnapshot();\n unsubscribe = manager.subscribe(() => {\n if (!reflowQueued) {\n capturePositions();\n const previous = new Map(positions);\n reflowQueued = true;\n entries.value = manager.getSnapshot();\n void nextTick(() => {\n reflowQueued = false;\n animateMovement(previous);\n });\n }\n entries.value = manager.getSnapshot();\n restoreIfEmpty();\n });\n window.addEventListener('blur', windowBlur);\n window.addEventListener('focus', windowFocus);\n document.addEventListener('visibilitychange', visibility);\n document.addEventListener('keydown', keyboard);\n visibility();\n if (!document.hasFocus()) pause('window');\n});\nonBeforeUnmount(() => {\n for (const animation of movements.values()) animation.cancel();\n movements.clear();\n if (!active.value) return;\n active.value = false;\n const errors: unknown[] = [];\n const cleanup = (operation: (() => void) | undefined) => {\n try {\n operation?.();\n } catch (error) {\n errors.push(error);\n }\n };\n cleanup(unsubscribe);\n cleanup(detach);\n // Detach first to prevent a briefly resumed external timer while clearing our pause causes.\n [...causes].forEach((cause) => cleanup(() => resume(cause)));\n if (owned) cleanup(() => manager.dispose());\n window.removeEventListener('blur', windowBlur);\n window.removeEventListener('focus', windowFocus);\n document.removeEventListener('visibilitychange', visibility);\n document.removeEventListener('keydown', keyboard);\n if (errors.length === 1) throw errors[0];\n if (errors.length > 1) throw new AggregateError(errors, 'Toast provider cleanup failed.');\n});\n</script>\n\n<template>\n <RekaToastProvider :duration=\"Infinity\" :disable-swipe=\"true\" :label=\"label\">\n <slot :toast=\"manager\" />\n <div\n ref=\"region\"\n class=\"toast-region\"\n :data-placement=\"placement\"\n :dir=\"dir\"\n @pointerenter=\"pause('hover')\"\n @pointerleave=\"resume('hover')\"\n @focusin=\"focusIn\"\n @focusout=\"focusOut\"\n @keydown.capture=\"escape\"\n >\n <!-- Reka's native array matches keys individually; Kazee handles the complete chord. -->\n <ToastViewport\n class=\"toast-list\"\n :hotkey=\"[]\"\n :label=\"viewportLabel\"\n :data-placement=\"placement\"\n :dir=\"dir\"\n />\n </div>\n <Toast\n v-for=\"entry in entries\"\n :key=\"entry.generation\"\n :entry=\"entry\"\n :manager=\"manager\"\n :placement=\"placement\"\n :dir=\"dir\"\n :close-label=\"closeLabel\"\n :show-progress=\"showProgress\"\n :show-close-button=\"showCloseButton\"\n :swipe-threshold=\"swipeThreshold\"\n >\n <template v-if=\"$slots.toast\" #default=\"slotProps\"\n ><slot name=\"toast\" v-bind=\"slotProps\"\n /></template>\n <template v-if=\"$slots.indicator\" #indicator=\"slotProps\"\n ><slot name=\"indicator\" v-bind=\"slotProps\"\n /></template>\n </Toast>\n </RekaToastProvider>\n</template>\n","<script setup lang=\"ts\">\ndefineOptions({ inheritAttrs: false });\nwithDefaults(\n defineProps<{\n title: string;\n description?: string;\n headingLevel?: 2 | 3 | 4 | 5 | 6;\n id?: string;\n }>(),\n { description: undefined, headingLevel: 3, id: undefined },\n);\n</script>\n<template>\n <div :id=\"id\" class=\"empty\">\n <component :is=\"`h${headingLevel}`\" class=\"empty__title\">{{ title }}</component>\n <p v-if=\"description\" class=\"empty__description\">{{ description }}</p>\n <slot />\n <div v-if=\"$slots.actions\" class=\"empty__actions\"><slot name=\"actions\" /></div>\n </div>\n</template>\n","<script setup lang=\"ts\">\ndefineOptions({ inheritAttrs: false });\nwithDefaults(\n defineProps<{\n title: string;\n description?: string;\n headingLevel?: 2 | 3 | 4 | 5 | 6;\n id?: string;\n }>(),\n { description: undefined, headingLevel: 3, id: undefined },\n);\n</script>\n<template>\n <div :id=\"id\" class=\"empty\">\n <component :is=\"`h${headingLevel}`\" class=\"empty__title\">{{ title }}</component>\n <p v-if=\"description\" class=\"empty__description\">{{ description }}</p>\n <slot />\n <div v-if=\"$slots.actions\" class=\"empty__actions\"><slot name=\"actions\" /></div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type { BreadcrumbItem } from './dashboard-types.js';\ndefineOptions({ inheritAttrs: false });\nwithDefaults(\n defineProps<{ items: BreadcrumbItem[]; label?: string; dir?: 'ltr' | 'rtl'; id?: string }>(),\n { label: 'Jejak halaman', dir: undefined, id: undefined },\n);\n</script>\n<template>\n <nav :id=\"id\" class=\"breadcrumb\" :aria-label=\"label\" :dir=\"dir\">\n <ol>\n <li v-for=\"(item, index) in items\" :key=\"index\">\n <span v-if=\"index > 0\" class=\"breadcrumb__separator\" aria-hidden=\"true\">/</span\n ><span v-if=\"index === items.length - 1\" aria-current=\"page\">{{ item.label }}</span\n ><a v-else-if=\"item.href\" :href=\"item.href\">{{ item.label }}</a\n ><span v-else>{{ item.label }}</span>\n </li>\n </ol>\n </nav>\n</template>\n","<script setup lang=\"ts\">\nimport type { BreadcrumbItem } from './dashboard-types.js';\ndefineOptions({ inheritAttrs: false });\nwithDefaults(\n defineProps<{ items: BreadcrumbItem[]; label?: string; dir?: 'ltr' | 'rtl'; id?: string }>(),\n { label: 'Jejak halaman', dir: undefined, id: undefined },\n);\n</script>\n<template>\n <nav :id=\"id\" class=\"breadcrumb\" :aria-label=\"label\" :dir=\"dir\">\n <ol>\n <li v-for=\"(item, index) in items\" :key=\"index\">\n <span v-if=\"index > 0\" class=\"breadcrumb__separator\" aria-hidden=\"true\">/</span\n ><span v-if=\"index === items.length - 1\" aria-current=\"page\">{{ item.label }}</span\n ><a v-else-if=\"item.href\" :href=\"item.href\">{{ item.label }}</a\n ><span v-else>{{ item.label }}</span>\n </li>\n </ol>\n </nav>\n</template>\n","import { computed, ref } from 'vue';\nexport function useDisclosure(\n props: { open?: boolean; defaultOpen?: boolean },\n emit: (open: boolean) => void,\n) {\n const local = ref(props.defaultOpen ?? false);\n const visible = computed(() => props.open ?? local.value);\n function change(next: boolean) {\n if (next === visible.value) return;\n local.value = next;\n emit(next);\n }\n return { visible, change };\n}\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport { useId } from 'reka-ui';\nimport { useDisclosure } from './useDisclosure.js';\nimport type { NavigationItem } from './dashboard-types.js';\ndefineOptions({ inheritAttrs: false });\nconst props = withDefaults(\n defineProps<{\n label: string;\n items: NavigationItem[];\n currentId?: string;\n open?: boolean;\n defaultOpen?: boolean;\n toggleLabel?: string;\n dir?: 'ltr' | 'rtl';\n id?: string;\n }>(),\n {\n currentId: undefined,\n open: undefined,\n defaultOpen: true,\n toggleLabel: 'Menu navigasi',\n dir: undefined,\n id: undefined,\n },\n);\nconst emit = defineEmits<{ 'update:open': [open: boolean] }>();\nconst { visible, change } = useDisclosure(props, (next) => emit('update:open', next));\nconst generated = useId(),\n navId = computed(() => `${props.id ?? generated}-nav`);\n</script>\n<template>\n <aside :id=\"id\" class=\"sidebar\" :dir=\"dir\">\n <div class=\"sidebar__header\">\n <span class=\"sidebar__title\">{{ label }}</span\n ><button\n type=\"button\"\n class=\"sidebar__toggle\"\n :aria-label=\"toggleLabel\"\n :aria-expanded=\"visible\"\n :aria-controls=\"navId\"\n @click=\"change(!visible)\"\n >\n <span aria-hidden=\"true\">{{ visible ? '\\u2212' : '+' }}</span>\n </button>\n </div>\n <nav :id=\"navId\" :aria-label=\"label\" :hidden=\"!visible\">\n <ul>\n <li v-for=\"item in items\" :key=\"item.id\">\n <span v-if=\"item.isDisabled\" class=\"sidebar__link\" aria-disabled=\"true\">{{\n item.label\n }}</span\n ><a\n v-else\n class=\"sidebar__link\"\n :href=\"item.href\"\n :aria-current=\"item.id === currentId ? 'page' : undefined\"\n >{{ item.label }}</a\n >\n </li>\n </ul>\n </nav>\n </aside>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport { useId } from 'reka-ui';\nimport { useDisclosure } from './useDisclosure.js';\nimport type { NavigationItem } from './dashboard-types.js';\ndefineOptions({ inheritAttrs: false });\nconst props = withDefaults(\n defineProps<{\n label: string;\n items: NavigationItem[];\n currentId?: string;\n open?: boolean;\n defaultOpen?: boolean;\n toggleLabel?: string;\n dir?: 'ltr' | 'rtl';\n id?: string;\n }>(),\n {\n currentId: undefined,\n open: undefined,\n defaultOpen: true,\n toggleLabel: 'Menu navigasi',\n dir: undefined,\n id: undefined,\n },\n);\nconst emit = defineEmits<{ 'update:open': [open: boolean] }>();\nconst { visible, change } = useDisclosure(props, (next) => emit('update:open', next));\nconst generated = useId(),\n navId = computed(() => `${props.id ?? generated}-nav`);\n</script>\n<template>\n <aside :id=\"id\" class=\"sidebar\" :dir=\"dir\">\n <div class=\"sidebar__header\">\n <span class=\"sidebar__title\">{{ label }}</span\n ><button\n type=\"button\"\n class=\"sidebar__toggle\"\n :aria-label=\"toggleLabel\"\n :aria-expanded=\"visible\"\n :aria-controls=\"navId\"\n @click=\"change(!visible)\"\n >\n <span aria-hidden=\"true\">{{ visible ? '\\u2212' : '+' }}</span>\n </button>\n </div>\n <nav :id=\"navId\" :aria-label=\"label\" :hidden=\"!visible\">\n <ul>\n <li v-for=\"item in items\" :key=\"item.id\">\n <span v-if=\"item.isDisabled\" class=\"sidebar__link\" aria-disabled=\"true\">{{\n item.label\n }}</span\n ><a\n v-else\n class=\"sidebar__link\"\n :href=\"item.href\"\n :aria-current=\"item.id === currentId ? 'page' : undefined\"\n >{{ item.label }}</a\n >\n </li>\n </ul>\n </nav>\n </aside>\n</template>\n","import type { ChartDatum } from './dashboard-types.js';\nexport function chartModel(data: ChartDatum[]) {\n const valid = data.filter((item) => Number.isFinite(item.value));\n const scale = valid.reduce((max, item) => Math.max(max, Math.abs(item.value)), 1);\n const min = valid.reduce((min, item) => Math.min(min, item.value / scale), 0),\n max = valid.reduce((max, item) => Math.max(max, item.value / scale), 0);\n const span = max - min || 1,\n step = 560 / Math.max(1, valid.length);\n const y = (value: number) => 180 - ((value / scale - min) / span) * 160;\n return {\n items: valid.map((item, index) => ({\n ...item,\n x: 20 + step * (index + 0.5),\n y: y(item.value),\n })),\n baseline: y(0),\n barWidth: Math.min(40, step * 0.7),\n };\n}\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport { useId } from 'reka-ui';\nimport { chartModel } from './chart-model.js';\nimport Table from './Table.vue';\nimport Empty from './Empty.vue';\nimport type { ChartDatum } from './dashboard-types.js';\ndefineOptions({ inheritAttrs: false });\nconst props = withDefaults(\n defineProps<{\n label: string;\n data: ChartDatum[];\n type?: 'bar' | 'line';\n description?: string;\n locale?: string;\n formatOptions?: Intl.NumberFormatOptions;\n categoryLabel?: string;\n valueLabel?: string;\n emptyMessage?: string;\n id?: string;\n dir?: 'ltr' | 'rtl';\n }>(),\n {\n type: 'bar',\n description: undefined,\n locale: 'id-ID',\n formatOptions: undefined,\n categoryLabel: 'Kategori',\n valueLabel: 'Nilai',\n emptyMessage: 'Belum ada data grafik.',\n id: undefined,\n dir: undefined,\n },\n);\nconst generated = useId(),\n labelId = computed(() => `${props.id ?? generated}-label`),\n model = computed(() => chartModel(props.data)),\n format = computed(() => new Intl.NumberFormat(props.locale, props.formatOptions));\nconst points = computed(() => model.value.items.map((item) => `${item.x},${item.y}`).join(' '));\n</script>\n<template>\n <figure :id=\"id\" class=\"chart\" :dir=\"dir\" :aria-labelledby=\"labelId\">\n <figcaption :id=\"labelId\" class=\"chart__title\">{{ label }}</figcaption>\n <p v-if=\"description\" class=\"chart__description\">{{ description }}</p>\n <template v-if=\"model.items.length\"\n ><svg class=\"chart__plot\" viewBox=\"0 0 600 210\" aria-hidden=\"true\" focusable=\"false\">\n <line class=\"chart__axis\" x1=\"20\" x2=\"580\" :y1=\"model.baseline\" :y2=\"model.baseline\" />\n <polyline v-if=\"type === 'line'\" class=\"chart__line\" :points=\"points\" />\n <g v-for=\"item in model.items\" :key=\"item.id\">\n <rect\n v-if=\"type === 'bar'\"\n class=\"chart__bar\"\n :x=\"item.x - model.barWidth / 2\"\n :y=\"Math.min(item.y, model.baseline)\"\n :width=\"model.barWidth\"\n :height=\"Math.abs(item.y - model.baseline)\"\n />\n <circle v-else class=\"chart__bar\" :cx=\"item.x\" :cy=\"item.y\" r=\"4\" />\n <text\n v-if=\"model.items.length <= 12\"\n class=\"chart__label\"\n :x=\"item.x\"\n y=\"202\"\n text-anchor=\"middle\"\n >\n {{ item.label.slice(0, 12) }}\n </text>\n </g></svg\n ><Table :caption=\"label\"\n ><thead>\n <tr>\n <th scope=\"col\">{{ categoryLabel }}</th>\n <th scope=\"col\">{{ valueLabel }}</th>\n </tr>\n </thead>\n <tbody>\n <tr v-for=\"item in model.items\" :key=\"item.id\">\n <th scope=\"row\">{{ item.label }}</th>\n <td>{{ format.format(item.value) }}</td>\n </tr>\n </tbody></Table\n ></template\n ><Empty v-else :title=\"emptyMessage\" />\n </figure>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport { useId } from 'reka-ui';\nimport { chartModel } from './chart-model.js';\nimport Table from './Table.vue';\nimport Empty from './Empty.vue';\nimport type { ChartDatum } from './dashboard-types.js';\ndefineOptions({ inheritAttrs: false });\nconst props = withDefaults(\n defineProps<{\n label: string;\n data: ChartDatum[];\n type?: 'bar' | 'line';\n description?: string;\n locale?: string;\n formatOptions?: Intl.NumberFormatOptions;\n categoryLabel?: string;\n valueLabel?: string;\n emptyMessage?: string;\n id?: string;\n dir?: 'ltr' | 'rtl';\n }>(),\n {\n type: 'bar',\n description: undefined,\n locale: 'id-ID',\n formatOptions: undefined,\n categoryLabel: 'Kategori',\n valueLabel: 'Nilai',\n emptyMessage: 'Belum ada data grafik.',\n id: undefined,\n dir: undefined,\n },\n);\nconst generated = useId(),\n labelId = computed(() => `${props.id ?? generated}-label`),\n model = computed(() => chartModel(props.data)),\n format = computed(() => new Intl.NumberFormat(props.locale, props.formatOptions));\nconst points = computed(() => model.value.items.map((item) => `${item.x},${item.y}`).join(' '));\n</script>\n<template>\n <figure :id=\"id\" class=\"chart\" :dir=\"dir\" :aria-labelledby=\"labelId\">\n <figcaption :id=\"labelId\" class=\"chart__title\">{{ label }}</figcaption>\n <p v-if=\"description\" class=\"chart__description\">{{ description }}</p>\n <template v-if=\"model.items.length\"\n ><svg class=\"chart__plot\" viewBox=\"0 0 600 210\" aria-hidden=\"true\" focusable=\"false\">\n <line class=\"chart__axis\" x1=\"20\" x2=\"580\" :y1=\"model.baseline\" :y2=\"model.baseline\" />\n <polyline v-if=\"type === 'line'\" class=\"chart__line\" :points=\"points\" />\n <g v-for=\"item in model.items\" :key=\"item.id\">\n <rect\n v-if=\"type === 'bar'\"\n class=\"chart__bar\"\n :x=\"item.x - model.barWidth / 2\"\n :y=\"Math.min(item.y, model.baseline)\"\n :width=\"model.barWidth\"\n :height=\"Math.abs(item.y - model.baseline)\"\n />\n <circle v-else class=\"chart__bar\" :cx=\"item.x\" :cy=\"item.y\" r=\"4\" />\n <text\n v-if=\"model.items.length <= 12\"\n class=\"chart__label\"\n :x=\"item.x\"\n y=\"202\"\n text-anchor=\"middle\"\n >\n {{ item.label.slice(0, 12) }}\n </text>\n </g></svg\n ><Table :caption=\"label\"\n ><thead>\n <tr>\n <th scope=\"col\">{{ categoryLabel }}</th>\n <th scope=\"col\">{{ valueLabel }}</th>\n </tr>\n </thead>\n <tbody>\n <tr v-for=\"item in model.items\" :key=\"item.id\">\n <th scope=\"row\">{{ item.label }}</th>\n <td>{{ format.format(item.value) }}</td>\n </tr>\n </tbody></Table\n ></template\n ><Empty v-else :title=\"emptyMessage\" />\n </figure>\n</template>\n","<script setup lang=\"ts\">\nimport {\n DialogRoot,\n DialogTrigger,\n DialogPortal,\n DialogOverlay,\n DialogContent,\n DialogTitle,\n DialogDescription,\n DialogClose,\n} from 'reka-ui';\nimport { useDisclosure } from './useDisclosure.js';\nimport CloseIcon from './CloseIcon.vue';\nimport type { ButtonVariant } from './types.js';\nimport type { DialogSize, DialogPlacement, DialogScroll, DialogBackdrop } from './overlay-model.js';\ndefineOptions({ inheritAttrs: false });\nconst props = withDefaults(\n defineProps<{\n triggerLabel: string;\n title: string;\n description?: string;\n open?: boolean;\n defaultOpen?: boolean;\n disabled?: boolean;\n closeLabel?: string;\n dir?: 'ltr' | 'rtl';\n triggerIconOnly?: boolean;\n triggerVariant?: ButtonVariant;\n size?: DialogSize;\n placement?: DialogPlacement;\n scroll?: DialogScroll;\n backdrop?: DialogBackdrop;\n dismissable?: boolean;\n keyboardDismissDisabled?: boolean;\n showCloseButton?: boolean;\n showFooterClose?: boolean;\n closeIconLabel?: string;\n }>(),\n {\n open: undefined,\n defaultOpen: false,\n disabled: false,\n closeLabel: 'Tutup',\n size: 'md',\n placement: 'center',\n scroll: 'outside',\n backdrop: 'opaque',\n dismissable: true,\n keyboardDismissDisabled: false,\n showCloseButton: true,\n showFooterClose: true,\n triggerVariant: 'secondary',\n description: undefined,\n dir: undefined,\n closeIconLabel: undefined,\n },\n);\ndefineSlots<{ default?: () => unknown; footer?: () => unknown; trigger?: () => unknown }>();\nconst emit = defineEmits<{ 'update:open': [open: boolean] }>();\nconst { visible, change } = useDisclosure(props, (next) => emit('update:open', next));\n</script>\n<template>\n <DialogRoot :open=\"visible\" @update:open=\"change\">\n <DialogTrigger\n :class=\"['button', `button--${triggerVariant}`, triggerIconOnly && 'button--icon-only']\"\n :aria-label=\"triggerLabel\"\n :disabled=\"disabled\"\n ><slot name=\"trigger\">{{ triggerLabel }}</slot></DialogTrigger\n >\n <DialogPortal>\n <DialogOverlay\n class=\"dialog__backdrop dialog__viewport\"\n :data-size=\"size\"\n :data-placement=\"placement\"\n :data-scroll=\"scroll\"\n :data-backdrop=\"backdrop\"\n >\n <DialogContent\n class=\"dialog__panel\"\n :dir=\"dir\"\n v-bind=\"description ? {} : { 'aria-describedby': undefined }\"\n @escape-key-down=\"\n (event) => {\n if (keyboardDismissDisabled) event.preventDefault();\n }\n \"\n @interact-outside=\"\n (event) => {\n if (!dismissable) event.preventDefault();\n }\n \"\n >\n <div class=\"dialog__content\">\n <div class=\"overlay__header\" :data-close-button=\"showCloseButton || undefined\">\n <DialogTitle class=\"overlay__title\">{{ title }}</DialogTitle>\n <DialogDescription v-if=\"description\" class=\"overlay__description\">{{\n description\n }}</DialogDescription>\n <DialogClose\n v-if=\"showCloseButton\"\n class=\"dialog__close\"\n :aria-label=\"closeIconLabel ?? `${closeLabel} dialog`\"\n ><CloseIcon\n /></DialogClose>\n </div>\n <div class=\"overlay__body\"><slot /></div>\n <div v-if=\"$slots.footer || showFooterClose\" class=\"overlay__footer\">\n <slot name=\"footer\" /><DialogClose\n v-if=\"showFooterClose\"\n class=\"button button--secondary\"\n >{{ closeLabel }}</DialogClose\n >\n </div>\n </div>\n </DialogContent>\n </DialogOverlay>\n </DialogPortal>\n </DialogRoot>\n</template>\n","<script setup lang=\"ts\">\nimport {\n DialogRoot,\n DialogTrigger,\n DialogPortal,\n DialogOverlay,\n DialogContent,\n DialogTitle,\n DialogDescription,\n DialogClose,\n} from 'reka-ui';\nimport { useDisclosure } from './useDisclosure.js';\nimport CloseIcon from './CloseIcon.vue';\nimport type { ButtonVariant } from './types.js';\nimport type { DialogSize, DialogPlacement, DialogScroll, DialogBackdrop } from './overlay-model.js';\ndefineOptions({ inheritAttrs: false });\nconst props = withDefaults(\n defineProps<{\n triggerLabel: string;\n title: string;\n description?: string;\n open?: boolean;\n defaultOpen?: boolean;\n disabled?: boolean;\n closeLabel?: string;\n dir?: 'ltr' | 'rtl';\n triggerIconOnly?: boolean;\n triggerVariant?: ButtonVariant;\n size?: DialogSize;\n placement?: DialogPlacement;\n scroll?: DialogScroll;\n backdrop?: DialogBackdrop;\n dismissable?: boolean;\n keyboardDismissDisabled?: boolean;\n showCloseButton?: boolean;\n showFooterClose?: boolean;\n closeIconLabel?: string;\n }>(),\n {\n open: undefined,\n defaultOpen: false,\n disabled: false,\n closeLabel: 'Tutup',\n size: 'md',\n placement: 'center',\n scroll: 'outside',\n backdrop: 'opaque',\n dismissable: true,\n keyboardDismissDisabled: false,\n showCloseButton: true,\n showFooterClose: true,\n triggerVariant: 'secondary',\n description: undefined,\n dir: undefined,\n closeIconLabel: undefined,\n },\n);\ndefineSlots<{ default?: () => unknown; footer?: () => unknown; trigger?: () => unknown }>();\nconst emit = defineEmits<{ 'update:open': [open: boolean] }>();\nconst { visible, change } = useDisclosure(props, (next) => emit('update:open', next));\n</script>\n<template>\n <DialogRoot :open=\"visible\" @update:open=\"change\">\n <DialogTrigger\n :class=\"['button', `button--${triggerVariant}`, triggerIconOnly && 'button--icon-only']\"\n :aria-label=\"triggerLabel\"\n :disabled=\"disabled\"\n ><slot name=\"trigger\">{{ triggerLabel }}</slot></DialogTrigger\n >\n <DialogPortal>\n <DialogOverlay\n class=\"dialog__backdrop dialog__viewport\"\n :data-size=\"size\"\n :data-placement=\"placement\"\n :data-scroll=\"scroll\"\n :data-backdrop=\"backdrop\"\n >\n <DialogContent\n class=\"dialog__panel\"\n :dir=\"dir\"\n v-bind=\"description ? {} : { 'aria-describedby': undefined }\"\n @escape-key-down=\"\n (event) => {\n if (keyboardDismissDisabled) event.preventDefault();\n }\n \"\n @interact-outside=\"\n (event) => {\n if (!dismissable) event.preventDefault();\n }\n \"\n >\n <div class=\"dialog__content\">\n <div class=\"overlay__header\" :data-close-button=\"showCloseButton || undefined\">\n <DialogTitle class=\"overlay__title\">{{ title }}</DialogTitle>\n <DialogDescription v-if=\"description\" class=\"overlay__description\">{{\n description\n }}</DialogDescription>\n <DialogClose\n v-if=\"showCloseButton\"\n class=\"dialog__close\"\n :aria-label=\"closeIconLabel ?? `${closeLabel} dialog`\"\n ><CloseIcon\n /></DialogClose>\n </div>\n <div class=\"overlay__body\"><slot /></div>\n <div v-if=\"$slots.footer || showFooterClose\" class=\"overlay__footer\">\n <slot name=\"footer\" /><DialogClose\n v-if=\"showFooterClose\"\n class=\"button button--secondary\"\n >{{ closeLabel }}</DialogClose\n >\n </div>\n </div>\n </DialogContent>\n </DialogOverlay>\n </DialogPortal>\n </DialogRoot>\n</template>\n","<script setup lang=\"ts\">\nimport CheckIcon from './CheckIcon.vue';\nimport ChevronIcon from './ChevronIcon.vue';\nimport type { DropdownMenuItem } from './dashboard-types.js';\ndefineProps<{ item: DropdownMenuItem; selectable: boolean }>();\ndefineSlots<{ icon?: (props: { item: DropdownMenuItem }) => unknown }>();\n</script>\n<template>\n <CheckIcon v-if=\"selectable && !item.children?.length\" class=\"menu__check\" />\n <span v-if=\"$slots.icon\" class=\"menu__icon\" aria-hidden=\"true\"\n ><slot name=\"icon\" :item=\"item\"\n /></span>\n <span class=\"menu__text\"\n ><span>{{ item.label }}</span\n ><span v-if=\"item.description\" class=\"menu__description\">{{ item.description }}</span></span\n >\n <kbd v-if=\"item.shortcut\" class=\"menu__shortcut\" aria-hidden=\"true\">{{ item.shortcut }}</kbd>\n <ChevronIcon v-if=\"item.children?.length\" class=\"menu__arrow\" />\n</template>\n","<script setup lang=\"ts\">\nimport CheckIcon from './CheckIcon.vue';\nimport ChevronIcon from './ChevronIcon.vue';\nimport type { DropdownMenuItem } from './dashboard-types.js';\ndefineProps<{ item: DropdownMenuItem; selectable: boolean }>();\ndefineSlots<{ icon?: (props: { item: DropdownMenuItem }) => unknown }>();\n</script>\n<template>\n <CheckIcon v-if=\"selectable && !item.children?.length\" class=\"menu__check\" />\n <span v-if=\"$slots.icon\" class=\"menu__icon\" aria-hidden=\"true\"\n ><slot name=\"icon\" :item=\"item\"\n /></span>\n <span class=\"menu__text\"\n ><span>{{ item.label }}</span\n ><span v-if=\"item.description\" class=\"menu__description\">{{ item.description }}</span></span\n >\n <kbd v-if=\"item.shortcut\" class=\"menu__shortcut\" aria-hidden=\"true\">{{ item.shortcut }}</kbd>\n <ChevronIcon v-if=\"item.children?.length\" class=\"menu__arrow\" />\n</template>\n","import type { DropdownMenuItem } from './dashboard-types.js';\nexport type MenuSelectionMode = 'none' | 'single' | 'multiple';\nexport type MenuPlacement =\n | 'top-start'\n | 'top-end'\n | 'bottom-start'\n | 'bottom-end'\n | 'left-start'\n | 'left-end'\n | 'right-start'\n | 'right-end';\nexport function menuGroups(items: DropdownMenuItem[]) {\n const groups: { key: string; label?: string; items: DropdownMenuItem[] }[] = [];\n for (const item of items) {\n const previous = groups.at(-1);\n if (!previous || previous.label !== item.section || item.separatorBefore)\n groups.push({ key: item.id, label: item.section, items: [item] });\n else previous.items.push(item);\n }\n return groups;\n}\nexport function menuLeaves(items: DropdownMenuItem[], disabled = false): DropdownMenuItem[] {\n return items.flatMap((item) =>\n item.children?.length\n ? menuLeaves(item.children, disabled || !!item.isDisabled)\n : [{ ...item, isDisabled: disabled || item.isDisabled }],\n );\n}\nexport function menuSelection(keys: string[], items: DropdownMenuItem[], mode: MenuSelectionMode) {\n const wanted = new Set(keys);\n const result = menuLeaves(items)\n .filter((item) => wanted.has(item.id))\n .map((item) => item.id);\n return mode === 'none' ? [] : mode === 'single' ? result.slice(0, 1) : result;\n}\nexport type DialogSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'cover' | 'full';\nexport type DialogPlacement = 'auto' | 'top' | 'center' | 'bottom';\nexport type DialogScroll = 'inside' | 'outside';\nexport type DialogBackdrop = 'opaque' | 'blur' | 'transparent';\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport {\n DropdownMenuGroup,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuSub,\n DropdownMenuSubTrigger,\n DropdownMenuSubContent,\n DropdownMenuPortal,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n} from 'reka-ui';\nimport MenuItemContent from './MenuItemContent.vue';\nimport { menuGroups, type MenuSelectionMode } from './overlay-model.js';\nimport type { DropdownMenuItem as Item } from './dashboard-types.js';\nconst props = defineProps<{\n items: Item[];\n selectedKeys: string[];\n selectionMode: MenuSelectionMode;\n closeOnSelect: boolean;\n disabled?: boolean;\n dir?: 'ltr' | 'rtl';\n}>();\nconst emit = defineEmits<{ action: [id: string]; selection: [id: string, checked: boolean] }>();\ndefineSlots<{ icon?: (props: { item: Item }) => unknown }>();\nconst groups = computed(() => menuGroups(props.items));\nfunction keepParentMenuFocus(event: { target: EventTarget | null; preventDefault: () => void }) {\n // Roving focus may briefly land on the parent menu during a direct pointer move into its submenu.\n // Actual item focus, outside presses, Left and Escape retain the provider's normal dismissal.\n if (event.target instanceof HTMLElement && event.target.getAttribute('role') === 'menu')\n event.preventDefault();\n}\nfunction action(event: Event, item: Item) {\n if (props.disabled || item.isDisabled) {\n event.preventDefault();\n return;\n }\n if (!props.closeOnSelect) event.preventDefault();\n emit('action', item.id);\n}\n</script>\n<template>\n <DropdownMenuRadioGroup\n :model-value=\"selectedKeys[0] ?? ''\"\n @update:model-value=\"\n (value) => {\n if (selectionMode === 'single' && typeof value === 'string') emit('selection', value, true);\n }\n \"\n >\n <template v-for=\"(group, index) in groups\" :key=\"group.key\">\n <DropdownMenuSeparator v-if=\"index > 0\" class=\"menu__separator\" />\n <DropdownMenuGroup :aria-label=\"group.label\">\n <DropdownMenuLabel v-if=\"group.label\" class=\"menu__heading\">{{\n group.label\n }}</DropdownMenuLabel>\n <template v-for=\"item in group.items\" :key=\"item.id\">\n <DropdownMenuSub v-if=\"item.children?.length\">\n <DropdownMenuSubTrigger\n class=\"menu__item\"\n :disabled=\"disabled || item.isDisabled\"\n :text-value=\"item.label\"\n :data-tone=\"item.tone ?? 'default'\"\n >\n <MenuItemContent :item=\"item\" :selectable=\"false\"\n ><template v-if=\"$slots.icon\" #icon=\"slot\"\n ><slot name=\"icon\" v-bind=\"slot\" /></template\n ></MenuItemContent>\n </DropdownMenuSubTrigger>\n <DropdownMenuPortal\n ><DropdownMenuSubContent\n class=\"menu__panel menu__list\"\n :aria-label=\"item.label\"\n :side-offset=\"4\"\n :collision-padding=\"16\"\n :dir=\"dir\"\n @focus-outside=\"keepParentMenuFocus\"\n >\n <DropdownMenuBranch\n :items=\"item.children\"\n :selected-keys=\"selectedKeys\"\n :selection-mode=\"selectionMode\"\n :close-on-select=\"closeOnSelect\"\n :disabled=\"disabled || item.isDisabled\"\n :dir=\"dir\"\n @action=\"(id) => emit('action', id)\"\n @selection=\"(id, checked) => emit('selection', id, checked)\"\n >\n <template v-if=\"$slots.icon\" #icon=\"slot\"\n ><slot name=\"icon\" v-bind=\"slot\"\n /></template>\n </DropdownMenuBranch> </DropdownMenuSubContent\n ></DropdownMenuPortal>\n </DropdownMenuSub>\n <DropdownMenuRadioItem\n v-else-if=\"selectionMode === 'single'\"\n :value=\"item.id\"\n :disabled=\"disabled || item.isDisabled\"\n :text-value=\"item.label\"\n class=\"menu__item\"\n :data-tone=\"item.tone ?? 'default'\"\n @select=\"(event) => action(event, item)\"\n >\n <MenuItemContent :item=\"item\" selectable\n ><template v-if=\"$slots.icon\" #icon=\"slot\"\n ><slot name=\"icon\" v-bind=\"slot\" /></template\n ></MenuItemContent>\n </DropdownMenuRadioItem>\n <DropdownMenuCheckboxItem\n v-else-if=\"selectionMode === 'multiple'\"\n :model-value=\"selectedKeys.includes(item.id)\"\n :disabled=\"disabled || item.isDisabled\"\n :text-value=\"item.label\"\n class=\"menu__item\"\n :data-tone=\"item.tone ?? 'default'\"\n @update:model-value=\"\n (checked) => {\n if (!disabled && !item.isDisabled) emit('selection', item.id, checked === true);\n }\n \"\n @select=\"(event) => action(event, item)\"\n >\n <MenuItemContent :item=\"item\" selectable\n ><template v-if=\"$slots.icon\" #icon=\"slot\"\n ><slot name=\"icon\" v-bind=\"slot\" /></template\n ></MenuItemContent>\n </DropdownMenuCheckboxItem>\n <DropdownMenuItem\n v-else\n :disabled=\"disabled || item.isDisabled\"\n :text-value=\"item.label\"\n class=\"menu__item\"\n :data-tone=\"item.tone ?? 'default'\"\n @select=\"(event) => action(event, item)\"\n >\n <MenuItemContent :item=\"item\" :selectable=\"false\"\n ><template v-if=\"$slots.icon\" #icon=\"slot\"\n ><slot name=\"icon\" v-bind=\"slot\" /></template\n ></MenuItemContent>\n </DropdownMenuItem>\n </template>\n </DropdownMenuGroup>\n </template>\n </DropdownMenuRadioGroup>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport {\n DropdownMenuGroup,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuSub,\n DropdownMenuSubTrigger,\n DropdownMenuSubContent,\n DropdownMenuPortal,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n} from 'reka-ui';\nimport MenuItemContent from './MenuItemContent.vue';\nimport { menuGroups, type MenuSelectionMode } from './overlay-model.js';\nimport type { DropdownMenuItem as Item } from './dashboard-types.js';\nconst props = defineProps<{\n items: Item[];\n selectedKeys: string[];\n selectionMode: MenuSelectionMode;\n closeOnSelect: boolean;\n disabled?: boolean;\n dir?: 'ltr' | 'rtl';\n}>();\nconst emit = defineEmits<{ action: [id: string]; selection: [id: string, checked: boolean] }>();\ndefineSlots<{ icon?: (props: { item: Item }) => unknown }>();\nconst groups = computed(() => menuGroups(props.items));\nfunction keepParentMenuFocus(event: { target: EventTarget | null; preventDefault: () => void }) {\n // Roving focus may briefly land on the parent menu during a direct pointer move into its submenu.\n // Actual item focus, outside presses, Left and Escape retain the provider's normal dismissal.\n if (event.target instanceof HTMLElement && event.target.getAttribute('role') === 'menu')\n event.preventDefault();\n}\nfunction action(event: Event, item: Item) {\n if (props.disabled || item.isDisabled) {\n event.preventDefault();\n return;\n }\n if (!props.closeOnSelect) event.preventDefault();\n emit('action', item.id);\n}\n</script>\n<template>\n <DropdownMenuRadioGroup\n :model-value=\"selectedKeys[0] ?? ''\"\n @update:model-value=\"\n (value) => {\n if (selectionMode === 'single' && typeof value === 'string') emit('selection', value, true);\n }\n \"\n >\n <template v-for=\"(group, index) in groups\" :key=\"group.key\">\n <DropdownMenuSeparator v-if=\"index > 0\" class=\"menu__separator\" />\n <DropdownMenuGroup :aria-label=\"group.label\">\n <DropdownMenuLabel v-if=\"group.label\" class=\"menu__heading\">{{\n group.label\n }}</DropdownMenuLabel>\n <template v-for=\"item in group.items\" :key=\"item.id\">\n <DropdownMenuSub v-if=\"item.children?.length\">\n <DropdownMenuSubTrigger\n class=\"menu__item\"\n :disabled=\"disabled || item.isDisabled\"\n :text-value=\"item.label\"\n :data-tone=\"item.tone ?? 'default'\"\n >\n <MenuItemContent :item=\"item\" :selectable=\"false\"\n ><template v-if=\"$slots.icon\" #icon=\"slot\"\n ><slot name=\"icon\" v-bind=\"slot\" /></template\n ></MenuItemContent>\n </DropdownMenuSubTrigger>\n <DropdownMenuPortal\n ><DropdownMenuSubContent\n class=\"menu__panel menu__list\"\n :aria-label=\"item.label\"\n :side-offset=\"4\"\n :collision-padding=\"16\"\n :dir=\"dir\"\n @focus-outside=\"keepParentMenuFocus\"\n >\n <DropdownMenuBranch\n :items=\"item.children\"\n :selected-keys=\"selectedKeys\"\n :selection-mode=\"selectionMode\"\n :close-on-select=\"closeOnSelect\"\n :disabled=\"disabled || item.isDisabled\"\n :dir=\"dir\"\n @action=\"(id) => emit('action', id)\"\n @selection=\"(id, checked) => emit('selection', id, checked)\"\n >\n <template v-if=\"$slots.icon\" #icon=\"slot\"\n ><slot name=\"icon\" v-bind=\"slot\"\n /></template>\n </DropdownMenuBranch> </DropdownMenuSubContent\n ></DropdownMenuPortal>\n </DropdownMenuSub>\n <DropdownMenuRadioItem\n v-else-if=\"selectionMode === 'single'\"\n :value=\"item.id\"\n :disabled=\"disabled || item.isDisabled\"\n :text-value=\"item.label\"\n class=\"menu__item\"\n :data-tone=\"item.tone ?? 'default'\"\n @select=\"(event) => action(event, item)\"\n >\n <MenuItemContent :item=\"item\" selectable\n ><template v-if=\"$slots.icon\" #icon=\"slot\"\n ><slot name=\"icon\" v-bind=\"slot\" /></template\n ></MenuItemContent>\n </DropdownMenuRadioItem>\n <DropdownMenuCheckboxItem\n v-else-if=\"selectionMode === 'multiple'\"\n :model-value=\"selectedKeys.includes(item.id)\"\n :disabled=\"disabled || item.isDisabled\"\n :text-value=\"item.label\"\n class=\"menu__item\"\n :data-tone=\"item.tone ?? 'default'\"\n @update:model-value=\"\n (checked) => {\n if (!disabled && !item.isDisabled) emit('selection', item.id, checked === true);\n }\n \"\n @select=\"(event) => action(event, item)\"\n >\n <MenuItemContent :item=\"item\" selectable\n ><template v-if=\"$slots.icon\" #icon=\"slot\"\n ><slot name=\"icon\" v-bind=\"slot\" /></template\n ></MenuItemContent>\n </DropdownMenuCheckboxItem>\n <DropdownMenuItem\n v-else\n :disabled=\"disabled || item.isDisabled\"\n :text-value=\"item.label\"\n class=\"menu__item\"\n :data-tone=\"item.tone ?? 'default'\"\n @select=\"(event) => action(event, item)\"\n >\n <MenuItemContent :item=\"item\" :selectable=\"false\"\n ><template v-if=\"$slots.icon\" #icon=\"slot\"\n ><slot name=\"icon\" v-bind=\"slot\" /></template\n ></MenuItemContent>\n </DropdownMenuItem>\n </template>\n </DropdownMenuGroup>\n </template>\n </DropdownMenuRadioGroup>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport {\n DropdownMenuRoot,\n DropdownMenuTrigger,\n DropdownMenuPortal,\n DropdownMenuContent,\n} from 'reka-ui';\nimport { useDisclosure } from './useDisclosure.js';\nimport DropdownMenuBranch from './DropdownMenuBranch.vue';\nimport {\n menuSelection,\n menuLeaves,\n type MenuSelectionMode,\n type MenuPlacement,\n} from './overlay-model.js';\nimport type { DropdownMenuItem } from './dashboard-types.js';\nimport type { ButtonVariant } from './types.js';\ndefineOptions({ inheritAttrs: false });\nconst props = withDefaults(\n defineProps<{\n triggerLabel: string;\n items: DropdownMenuItem[];\n open?: boolean;\n defaultOpen?: boolean;\n disabled?: boolean;\n dir?: 'ltr' | 'rtl';\n triggerIconOnly?: boolean;\n triggerVariant?: ButtonVariant;\n selectionMode?: MenuSelectionMode;\n selectedKeys?: string[];\n defaultSelectedKeys?: string[];\n closeOnSelect?: boolean;\n placement?: MenuPlacement;\n }>(),\n {\n open: undefined,\n defaultOpen: false,\n disabled: false,\n selectionMode: 'none',\n closeOnSelect: undefined,\n placement: 'bottom-start',\n triggerVariant: 'secondary',\n dir: undefined,\n selectedKeys: undefined,\n defaultSelectedKeys: undefined,\n },\n);\nconst emit = defineEmits<{\n 'update:open': [open: boolean];\n action: [id: string];\n 'update:selectedKeys': [keys: string[]];\n}>();\ndefineSlots<{ trigger?: () => unknown; icon?: (props: { item: DropdownMenuItem }) => unknown }>();\nconst { visible, change } = useDisclosure(props, (next) => emit('update:open', next));\nconst local = ref(props.defaultSelectedKeys ?? []);\nconst selected = computed(() =>\n menuSelection(props.selectedKeys ?? local.value, props.items, props.selectionMode),\n);\nconst side = computed(() => props.placement.split('-')[0] as 'top' | 'bottom' | 'left' | 'right');\nconst align = computed(() => props.placement.split('-')[1] as 'start' | 'end');\nfunction select(id: string, checked: boolean) {\n const item = menuLeaves(props.items, props.disabled).find((item) => item.id === id);\n if (!item || item.isDisabled || props.selectionMode === 'none') return;\n const next = menuSelection(\n props.selectionMode === 'single'\n ? [id]\n : checked\n ? [...selected.value, id]\n : selected.value.filter((key) => key !== id),\n props.items,\n props.selectionMode,\n );\n local.value = next;\n emit('update:selectedKeys', next);\n}\nfunction action(id: string) {\n const item = menuLeaves(props.items, props.disabled).find((item) => item.id === id);\n if (item && !item.isDisabled) emit('action', id);\n}\n</script>\n<template>\n <DropdownMenuRoot :open=\"visible\" :dir=\"dir\" @update:open=\"change\">\n <DropdownMenuTrigger\n :class=\"['button', `button--${triggerVariant}`, triggerIconOnly && 'button--icon-only']\"\n :aria-label=\"triggerLabel\"\n :disabled=\"disabled || !items.length\"\n ><slot name=\"trigger\">{{ triggerLabel }}</slot></DropdownMenuTrigger\n >\n <DropdownMenuPortal\n ><DropdownMenuContent\n class=\"menu__panel menu__list\"\n :aria-label=\"triggerLabel\"\n :side=\"side\"\n :align=\"align\"\n :side-offset=\"8\"\n :collision-padding=\"16\"\n :dir=\"dir\"\n >\n <DropdownMenuBranch\n :items=\"items\"\n :selected-keys=\"selected\"\n :selection-mode=\"selectionMode\"\n :close-on-select=\"closeOnSelect ?? selectionMode !== 'multiple'\"\n :disabled=\"disabled\"\n :dir=\"dir\"\n @action=\"action\"\n @selection=\"select\"\n >\n <template v-if=\"$slots.icon\" #icon=\"slot\"><slot name=\"icon\" v-bind=\"slot\" /></template>\n </DropdownMenuBranch> </DropdownMenuContent\n ></DropdownMenuPortal>\n </DropdownMenuRoot>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport {\n DropdownMenuRoot,\n DropdownMenuTrigger,\n DropdownMenuPortal,\n DropdownMenuContent,\n} from 'reka-ui';\nimport { useDisclosure } from './useDisclosure.js';\nimport DropdownMenuBranch from './DropdownMenuBranch.vue';\nimport {\n menuSelection,\n menuLeaves,\n type MenuSelectionMode,\n type MenuPlacement,\n} from './overlay-model.js';\nimport type { DropdownMenuItem } from './dashboard-types.js';\nimport type { ButtonVariant } from './types.js';\ndefineOptions({ inheritAttrs: false });\nconst props = withDefaults(\n defineProps<{\n triggerLabel: string;\n items: DropdownMenuItem[];\n open?: boolean;\n defaultOpen?: boolean;\n disabled?: boolean;\n dir?: 'ltr' | 'rtl';\n triggerIconOnly?: boolean;\n triggerVariant?: ButtonVariant;\n selectionMode?: MenuSelectionMode;\n selectedKeys?: string[];\n defaultSelectedKeys?: string[];\n closeOnSelect?: boolean;\n placement?: MenuPlacement;\n }>(),\n {\n open: undefined,\n defaultOpen: false,\n disabled: false,\n selectionMode: 'none',\n closeOnSelect: undefined,\n placement: 'bottom-start',\n triggerVariant: 'secondary',\n dir: undefined,\n selectedKeys: undefined,\n defaultSelectedKeys: undefined,\n },\n);\nconst emit = defineEmits<{\n 'update:open': [open: boolean];\n action: [id: string];\n 'update:selectedKeys': [keys: string[]];\n}>();\ndefineSlots<{ trigger?: () => unknown; icon?: (props: { item: DropdownMenuItem }) => unknown }>();\nconst { visible, change } = useDisclosure(props, (next) => emit('update:open', next));\nconst local = ref(props.defaultSelectedKeys ?? []);\nconst selected = computed(() =>\n menuSelection(props.selectedKeys ?? local.value, props.items, props.selectionMode),\n);\nconst side = computed(() => props.placement.split('-')[0] as 'top' | 'bottom' | 'left' | 'right');\nconst align = computed(() => props.placement.split('-')[1] as 'start' | 'end');\nfunction select(id: string, checked: boolean) {\n const item = menuLeaves(props.items, props.disabled).find((item) => item.id === id);\n if (!item || item.isDisabled || props.selectionMode === 'none') return;\n const next = menuSelection(\n props.selectionMode === 'single'\n ? [id]\n : checked\n ? [...selected.value, id]\n : selected.value.filter((key) => key !== id),\n props.items,\n props.selectionMode,\n );\n local.value = next;\n emit('update:selectedKeys', next);\n}\nfunction action(id: string) {\n const item = menuLeaves(props.items, props.disabled).find((item) => item.id === id);\n if (item && !item.isDisabled) emit('action', id);\n}\n</script>\n<template>\n <DropdownMenuRoot :open=\"visible\" :dir=\"dir\" @update:open=\"change\">\n <DropdownMenuTrigger\n :class=\"['button', `button--${triggerVariant}`, triggerIconOnly && 'button--icon-only']\"\n :aria-label=\"triggerLabel\"\n :disabled=\"disabled || !items.length\"\n ><slot name=\"trigger\">{{ triggerLabel }}</slot></DropdownMenuTrigger\n >\n <DropdownMenuPortal\n ><DropdownMenuContent\n class=\"menu__panel menu__list\"\n :aria-label=\"triggerLabel\"\n :side=\"side\"\n :align=\"align\"\n :side-offset=\"8\"\n :collision-padding=\"16\"\n :dir=\"dir\"\n >\n <DropdownMenuBranch\n :items=\"items\"\n :selected-keys=\"selected\"\n :selection-mode=\"selectionMode\"\n :close-on-select=\"closeOnSelect ?? selectionMode !== 'multiple'\"\n :disabled=\"disabled\"\n :dir=\"dir\"\n @action=\"action\"\n @selection=\"select\"\n >\n <template v-if=\"$slots.icon\" #icon=\"slot\"><slot name=\"icon\" v-bind=\"slot\" /></template>\n </DropdownMenuBranch> </DropdownMenuContent\n ></DropdownMenuPortal>\n </DropdownMenuRoot>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport {\n PopoverRoot,\n PopoverTrigger,\n PopoverPortal,\n PopoverContent,\n PopoverClose,\n useId,\n} from 'reka-ui';\nimport { useDisclosure } from './useDisclosure.js';\ndefineOptions({ inheritAttrs: false });\nconst props = withDefaults(\n defineProps<{\n triggerLabel: string;\n title: string;\n description?: string;\n open?: boolean;\n defaultOpen?: boolean;\n disabled?: boolean;\n closeLabel?: string;\n dir?: 'ltr' | 'rtl';\n }>(),\n {\n description: undefined,\n open: undefined,\n defaultOpen: false,\n disabled: false,\n closeLabel: 'Tutup',\n dir: undefined,\n },\n);\nconst emit = defineEmits<{ 'update:open': [open: boolean] }>();\nconst { visible, change } = useDisclosure(props, (next) => emit('update:open', next));\nconst generated = useId(),\n titleId = `${generated}-title`,\n descriptionId = computed(() => (props.description ? `${generated}-description` : undefined));\n</script>\n<template>\n <PopoverRoot :open=\"visible\" @update:open=\"change\"\n ><PopoverTrigger class=\"button button--secondary\" :disabled=\"disabled\">{{\n triggerLabel\n }}</PopoverTrigger\n ><PopoverPortal\n ><PopoverContent as-child side=\"bottom\" align=\"start\" :side-offset=\"8\" :collision-padding=\"16\"\n ><div\n class=\"popover__panel popover__content\"\n :dir=\"dir\"\n :aria-labelledby=\"titleId\"\n :aria-describedby=\"descriptionId\"\n >\n <h2 :id=\"titleId\" class=\"overlay__title\">{{ title }}</h2>\n <p v-if=\"description\" :id=\"descriptionId\" class=\"overlay__description\">\n {{ description }}\n </p>\n <div class=\"overlay__body\"><slot /></div>\n <div class=\"overlay__footer\">\n <PopoverClose class=\"button button--secondary\">{{ closeLabel }}</PopoverClose>\n </div>\n </div></PopoverContent\n ></PopoverPortal\n ></PopoverRoot\n >\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport {\n PopoverRoot,\n PopoverTrigger,\n PopoverPortal,\n PopoverContent,\n PopoverClose,\n useId,\n} from 'reka-ui';\nimport { useDisclosure } from './useDisclosure.js';\ndefineOptions({ inheritAttrs: false });\nconst props = withDefaults(\n defineProps<{\n triggerLabel: string;\n title: string;\n description?: string;\n open?: boolean;\n defaultOpen?: boolean;\n disabled?: boolean;\n closeLabel?: string;\n dir?: 'ltr' | 'rtl';\n }>(),\n {\n description: undefined,\n open: undefined,\n defaultOpen: false,\n disabled: false,\n closeLabel: 'Tutup',\n dir: undefined,\n },\n);\nconst emit = defineEmits<{ 'update:open': [open: boolean] }>();\nconst { visible, change } = useDisclosure(props, (next) => emit('update:open', next));\nconst generated = useId(),\n titleId = `${generated}-title`,\n descriptionId = computed(() => (props.description ? `${generated}-description` : undefined));\n</script>\n<template>\n <PopoverRoot :open=\"visible\" @update:open=\"change\"\n ><PopoverTrigger class=\"button button--secondary\" :disabled=\"disabled\">{{\n triggerLabel\n }}</PopoverTrigger\n ><PopoverPortal\n ><PopoverContent as-child side=\"bottom\" align=\"start\" :side-offset=\"8\" :collision-padding=\"16\"\n ><div\n class=\"popover__panel popover__content\"\n :dir=\"dir\"\n :aria-labelledby=\"titleId\"\n :aria-describedby=\"descriptionId\"\n >\n <h2 :id=\"titleId\" class=\"overlay__title\">{{ title }}</h2>\n <p v-if=\"description\" :id=\"descriptionId\" class=\"overlay__description\">\n {{ description }}\n </p>\n <div class=\"overlay__body\"><slot /></div>\n <div class=\"overlay__footer\">\n <PopoverClose class=\"button button--secondary\">{{ closeLabel }}</PopoverClose>\n </div>\n </div></PopoverContent\n ></PopoverPortal\n ></PopoverRoot\n >\n</template>\n","<script setup lang=\"ts\">\nimport {\n TooltipProvider,\n TooltipRoot,\n TooltipTrigger,\n TooltipPortal,\n TooltipContent,\n} from 'reka-ui';\nimport type { ButtonVariant, ButtonSize } from './types.js';\nimport { useDisclosure } from './useDisclosure.js';\ndefineOptions({ inheritAttrs: false });\nconst props = withDefaults(\n defineProps<{\n triggerLabel: string;\n text: string;\n triggerIconOnly?: boolean;\n triggerVariant?: ButtonVariant;\n triggerSize?: ButtonSize;\n open?: boolean;\n defaultOpen?: boolean;\n disabled?: boolean;\n dir?: 'ltr' | 'rtl';\n }>(),\n {\n open: undefined,\n defaultOpen: false,\n disabled: false,\n dir: undefined,\n triggerIconOnly: false,\n triggerVariant: 'secondary',\n triggerSize: 'md',\n },\n);\ndefineSlots<{ trigger?: () => unknown }>();\nconst emit = defineEmits<{ 'update:open': [open: boolean] }>();\nconst { visible, change } = useDisclosure(props, (next) => emit('update:open', next));\n</script>\n<template>\n <TooltipProvider :delay-duration=\"300\" :skip-delay-duration=\"0\" :disable-hoverable-content=\"true\"\n ><TooltipRoot :open=\"visible\" @update:open=\"change\"\n ><TooltipTrigger\n :class=\"[\n 'button',\n `button--${triggerVariant}`,\n triggerSize !== 'md' && `button--${triggerSize}`,\n triggerIconOnly && 'button--icon-only',\n ]\"\n :aria-label=\"triggerLabel\"\n :disabled=\"disabled\"\n ><slot name=\"trigger\">{{ triggerLabel }}</slot></TooltipTrigger\n ><TooltipPortal\n ><TooltipContent\n class=\"tooltip__panel\"\n side=\"top\"\n :side-offset=\"8\"\n :collision-padding=\"16\"\n :dir=\"dir\"\n >{{ text }}</TooltipContent\n ></TooltipPortal\n ></TooltipRoot\n ></TooltipProvider\n >\n</template>\n","<script setup lang=\"ts\">\nimport {\n TooltipProvider,\n TooltipRoot,\n TooltipTrigger,\n TooltipPortal,\n TooltipContent,\n} from 'reka-ui';\nimport type { ButtonVariant, ButtonSize } from './types.js';\nimport { useDisclosure } from './useDisclosure.js';\ndefineOptions({ inheritAttrs: false });\nconst props = withDefaults(\n defineProps<{\n triggerLabel: string;\n text: string;\n triggerIconOnly?: boolean;\n triggerVariant?: ButtonVariant;\n triggerSize?: ButtonSize;\n open?: boolean;\n defaultOpen?: boolean;\n disabled?: boolean;\n dir?: 'ltr' | 'rtl';\n }>(),\n {\n open: undefined,\n defaultOpen: false,\n disabled: false,\n dir: undefined,\n triggerIconOnly: false,\n triggerVariant: 'secondary',\n triggerSize: 'md',\n },\n);\ndefineSlots<{ trigger?: () => unknown }>();\nconst emit = defineEmits<{ 'update:open': [open: boolean] }>();\nconst { visible, change } = useDisclosure(props, (next) => emit('update:open', next));\n</script>\n<template>\n <TooltipProvider :delay-duration=\"300\" :skip-delay-duration=\"0\" :disable-hoverable-content=\"true\"\n ><TooltipRoot :open=\"visible\" @update:open=\"change\"\n ><TooltipTrigger\n :class=\"[\n 'button',\n `button--${triggerVariant}`,\n triggerSize !== 'md' && `button--${triggerSize}`,\n triggerIconOnly && 'button--icon-only',\n ]\"\n :aria-label=\"triggerLabel\"\n :disabled=\"disabled\"\n ><slot name=\"trigger\">{{ triggerLabel }}</slot></TooltipTrigger\n ><TooltipPortal\n ><TooltipContent\n class=\"tooltip__panel\"\n side=\"top\"\n :side-offset=\"8\"\n :collision-padding=\"16\"\n :dir=\"dir\"\n >{{ text }}</TooltipContent\n ></TooltipPortal\n ></TooltipRoot\n ></TooltipProvider\n >\n</template>\n","<script setup lang=\"ts\">\nimport type { SpinnerSize, SpinnerColor } from './types.js';\ndefineOptions({ inheritAttrs: false });\nwithDefaults(\n defineProps<{ size?: SpinnerSize; color?: SpinnerColor; label?: string; id?: string }>(),\n { size: 'md', color: 'current', label: undefined, id: undefined },\n);\n</script>\n<template>\n <span\n :id=\"id\"\n :class=\"['spinner', `spinner--${size}`]\"\n :data-color=\"color\"\n :role=\"label ? 'status' : undefined\"\n :aria-label=\"label || undefined\"\n :aria-hidden=\"!label || undefined\"\n ><svg viewBox=\"0 0 20 20\" fill=\"none\" aria-hidden=\"true\" focusable=\"false\">\n <circle class=\"spinner__track\" cx=\"10\" cy=\"10\" r=\"8\" />\n <circle\n class=\"spinner__arc\"\n cx=\"10\"\n cy=\"10\"\n r=\"8\"\n pathLength=\"100\"\n stroke-dasharray=\"36 64\"\n /></svg\n ><span v-if=\"label\" class=\"spinner__label\">{{ label }}</span></span\n >\n</template>\n","<script setup lang=\"ts\">\nimport type { SpinnerSize, SpinnerColor } from './types.js';\ndefineOptions({ inheritAttrs: false });\nwithDefaults(\n defineProps<{ size?: SpinnerSize; color?: SpinnerColor; label?: string; id?: string }>(),\n { size: 'md', color: 'current', label: undefined, id: undefined },\n);\n</script>\n<template>\n <span\n :id=\"id\"\n :class=\"['spinner', `spinner--${size}`]\"\n :data-color=\"color\"\n :role=\"label ? 'status' : undefined\"\n :aria-label=\"label || undefined\"\n :aria-hidden=\"!label || undefined\"\n ><svg viewBox=\"0 0 20 20\" fill=\"none\" aria-hidden=\"true\" focusable=\"false\">\n <circle class=\"spinner__track\" cx=\"10\" cy=\"10\" r=\"8\" />\n <circle\n class=\"spinner__arc\"\n cx=\"10\"\n cy=\"10\"\n r=\"8\"\n pathLength=\"100\"\n stroke-dasharray=\"36 64\"\n /></svg\n ><span v-if=\"label\" class=\"spinner__label\">{{ label }}</span></span\n >\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref, getCurrentInstance, watch } from 'vue';\nimport {\n ComboboxRoot,\n ComboboxAnchor,\n ComboboxInput,\n ComboboxTrigger,\n ComboboxPortal,\n ComboboxContent,\n ComboboxViewport,\n ComboboxItem,\n} from 'reka-ui';\nimport ChevronIcon from './ChevronIcon.vue';\nimport CloseIcon from './CloseIcon.vue';\nimport CheckIcon from './CheckIcon.vue';\nimport FieldFeedback from './FieldFeedback.vue';\nimport SelectionValidation from './SelectionValidation.vue';\nimport { useFeedback } from './useFeedback.js';\nimport { selectionIds, filterOptions, type SelectOption } from './selection-options.js';\nconst props = defineProps<{\n label: string;\n options: SelectOption[];\n modelValue?: string;\n defaultValue?: string;\n placeholder?: string;\n name?: string;\n disabled?: boolean;\n required?: boolean;\n invalid?: boolean;\n description?: string;\n errorMessage?: string;\n requiredMessage?: string;\n clearable?: boolean;\n clearLabel?: string;\n toggleLabel?: string;\n emptyMessage?: string;\n dir?: 'ltr' | 'rtl';\n}>();\nconst emit = defineEmits<{ 'update:modelValue': [value: string | undefined] }>();\ndefineSlots<{\n start?: () => unknown;\n option?: (props: { option: SelectOption }) => unknown;\n}>();\nconst instance = getCurrentInstance();\nconst controlled = () =>\n Object.prototype.hasOwnProperty.call(instance?.vnode.props ?? {}, 'modelValue');\nconst local = ref(props.defaultValue);\nconst draft = ref<string | null>(null);\nconst tried = ref(false);\nconst wrapper = ref<HTMLDivElement>();\nconst id = computed(\n () => selectionIds(controlled() ? props.modelValue : local.value, props.options, false)[0],\n);\nconst selected = computed(() => props.options.find((o) => o.id === id.value));\nwatch(\n () => selected.value?.id,\n () => {\n draft.value = null;\n },\n);\nconst text = computed(() => draft.value ?? selected.value?.label ?? '');\nconst filtered = computed(() =>\n draft.value === null ? props.options : filterOptions(props.options, draft.value),\n);\nconst invalid = computed(() => props.invalid || (tried.value && props.required && !id.value));\nconst error = computed(\n () =>\n props.errorMessage ??\n (props.required && !id.value ? (props.requiredMessage ?? 'Pilihan wajib diisi.') : undefined),\n);\nconst { controlId, describedBy, showError } = useFeedback({\n get description() {\n return props.description;\n },\n get invalid() {\n return invalid.value;\n },\n get errorMessage() {\n return error.value;\n },\n});\nfunction focus() {\n wrapper.value?.querySelector<HTMLInputElement>('.combobox__input')?.focus();\n}\nfunction change(value: unknown) {\n if (props.disabled) return;\n const next = selectionIds(value, props.options, false)[0];\n local.value = next;\n emit('update:modelValue', next);\n draft.value = null;\n}\nfunction search(value: string) {\n if (props.disabled) return;\n draft.value = value;\n if (value === '' && id.value) {\n local.value = undefined;\n emit('update:modelValue', undefined);\n }\n}\nfunction reset(cancelled: boolean) {\n if (!cancelled) {\n tried.value = false;\n draft.value = null;\n if (!controlled()) local.value = props.defaultValue;\n }\n}\n</script>\n<template>\n <div ref=\"wrapper\" class=\"select combobox\" :dir=\"dir\">\n <label class=\"select__label\" :for=\"controlId\"\n >{{ label\n }}<span v-if=\"required\" class=\"selection__required\" aria-hidden=\"true\"> *</span></label\n >\n <ComboboxRoot\n :model-value=\"id ?? null\"\n :disabled=\"disabled\"\n :dir=\"dir\"\n ignore-filter\n :reset-search-term-on-blur=\"false\"\n :reset-search-term-on-select=\"false\"\n @update:model-value=\"change\"\n @update:open=\"\n (open) => {\n if (!open) draft = null;\n }\n \"\n >\n <ComboboxAnchor\n class=\"combobox__control\"\n :data-invalid=\"invalid || undefined\"\n :data-disabled=\"disabled || undefined\"\n >\n <span v-if=\"$slots.start\" class=\"selection__leading\" aria-hidden=\"true\"\n ><slot name=\"start\"\n /></span>\n <ComboboxInput\n :id=\"controlId\"\n :model-value=\"text\"\n :display-value=\"() => selected?.label ?? ''\"\n class=\"combobox__input\"\n :placeholder=\"placeholder\"\n :aria-required=\"required || undefined\"\n :aria-invalid=\"invalid || undefined\"\n :aria-describedby=\"describedBy\"\n @update:model-value=\"search\"\n />\n <button\n v-if=\"clearable\"\n type=\"button\"\n class=\"combobox__clear\"\n :data-empty=\"(!id && !text) || undefined\"\n :aria-hidden=\"(!id && !text) || undefined\"\n :tabindex=\"!id && !text ? -1 : undefined\"\n :disabled=\"disabled || (!id && !text)\"\n :aria-label=\"clearLabel ?? 'Hapus pilihan'\"\n @click=\"\n change(undefined);\n focus();\n \"\n >\n <CloseIcon class=\"selection__close-icon\" />\n </button>\n <ComboboxTrigger class=\"combobox__toggle\" :aria-label=\"toggleLabel ?? 'Buka pilihan'\"\n ><ChevronIcon class=\"select__icon\"\n /></ComboboxTrigger>\n </ComboboxAnchor>\n <ComboboxPortal\n ><ComboboxContent\n class=\"select__popover combobox__popover\"\n position=\"popper\"\n :side-offset=\"4\"\n ><ComboboxViewport class=\"select__list\">\n <ComboboxItem\n v-for=\"option in filtered\"\n :key=\"option.id\"\n :value=\"option.id\"\n :text-value=\"option.label\"\n :disabled=\"option.isDisabled\"\n class=\"select__item\"\n ><span class=\"select__item-label\"\n ><slot name=\"option\" :option=\"option\"\n >{{ option.label\n }}<span v-if=\"option.description\" class=\"selection__description\">{{\n option.description\n }}</span></slot\n ></span\n ><CheckIcon class=\"select__check\"\n /></ComboboxItem>\n <span v-if=\"!filtered.length\" class=\"selection__empty\" role=\"status\">{{\n emptyMessage ?? 'Tidak ada pilihan.'\n }}</span>\n </ComboboxViewport></ComboboxContent\n ></ComboboxPortal\n >\n </ComboboxRoot>\n <FieldFeedback\n :control-id=\"controlId\"\n :description=\"description\"\n :error-message=\"error\"\n :show-error=\"showError\"\n />\n <input v-if=\"name\" type=\"hidden\" :name=\"name\" :value=\"id ?? ''\" :disabled=\"disabled\" />\n <SelectionValidation\n :has-value=\"!!id\"\n :required=\"required\"\n :disabled=\"disabled\"\n @invalid=\"\n tried = true;\n focus();\n \"\n @reset=\"reset\"\n />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref, getCurrentInstance, watch } from 'vue';\nimport {\n ComboboxRoot,\n ComboboxAnchor,\n ComboboxInput,\n ComboboxTrigger,\n ComboboxPortal,\n ComboboxContent,\n ComboboxViewport,\n ComboboxItem,\n} from 'reka-ui';\nimport ChevronIcon from './ChevronIcon.vue';\nimport CloseIcon from './CloseIcon.vue';\nimport CheckIcon from './CheckIcon.vue';\nimport FieldFeedback from './FieldFeedback.vue';\nimport SelectionValidation from './SelectionValidation.vue';\nimport { useFeedback } from './useFeedback.js';\nimport { selectionIds, filterOptions, type SelectOption } from './selection-options.js';\nconst props = defineProps<{\n label: string;\n options: SelectOption[];\n modelValue?: string;\n defaultValue?: string;\n placeholder?: string;\n name?: string;\n disabled?: boolean;\n required?: boolean;\n invalid?: boolean;\n description?: string;\n errorMessage?: string;\n requiredMessage?: string;\n clearable?: boolean;\n clearLabel?: string;\n toggleLabel?: string;\n emptyMessage?: string;\n dir?: 'ltr' | 'rtl';\n}>();\nconst emit = defineEmits<{ 'update:modelValue': [value: string | undefined] }>();\ndefineSlots<{\n start?: () => unknown;\n option?: (props: { option: SelectOption }) => unknown;\n}>();\nconst instance = getCurrentInstance();\nconst controlled = () =>\n Object.prototype.hasOwnProperty.call(instance?.vnode.props ?? {}, 'modelValue');\nconst local = ref(props.defaultValue);\nconst draft = ref<string | null>(null);\nconst tried = ref(false);\nconst wrapper = ref<HTMLDivElement>();\nconst id = computed(\n () => selectionIds(controlled() ? props.modelValue : local.value, props.options, false)[0],\n);\nconst selected = computed(() => props.options.find((o) => o.id === id.value));\nwatch(\n () => selected.value?.id,\n () => {\n draft.value = null;\n },\n);\nconst text = computed(() => draft.value ?? selected.value?.label ?? '');\nconst filtered = computed(() =>\n draft.value === null ? props.options : filterOptions(props.options, draft.value),\n);\nconst invalid = computed(() => props.invalid || (tried.value && props.required && !id.value));\nconst error = computed(\n () =>\n props.errorMessage ??\n (props.required && !id.value ? (props.requiredMessage ?? 'Pilihan wajib diisi.') : undefined),\n);\nconst { controlId, describedBy, showError } = useFeedback({\n get description() {\n return props.description;\n },\n get invalid() {\n return invalid.value;\n },\n get errorMessage() {\n return error.value;\n },\n});\nfunction focus() {\n wrapper.value?.querySelector<HTMLInputElement>('.combobox__input')?.focus();\n}\nfunction change(value: unknown) {\n if (props.disabled) return;\n const next = selectionIds(value, props.options, false)[0];\n local.value = next;\n emit('update:modelValue', next);\n draft.value = null;\n}\nfunction search(value: string) {\n if (props.disabled) return;\n draft.value = value;\n if (value === '' && id.value) {\n local.value = undefined;\n emit('update:modelValue', undefined);\n }\n}\nfunction reset(cancelled: boolean) {\n if (!cancelled) {\n tried.value = false;\n draft.value = null;\n if (!controlled()) local.value = props.defaultValue;\n }\n}\n</script>\n<template>\n <div ref=\"wrapper\" class=\"select combobox\" :dir=\"dir\">\n <label class=\"select__label\" :for=\"controlId\"\n >{{ label\n }}<span v-if=\"required\" class=\"selection__required\" aria-hidden=\"true\"> *</span></label\n >\n <ComboboxRoot\n :model-value=\"id ?? null\"\n :disabled=\"disabled\"\n :dir=\"dir\"\n ignore-filter\n :reset-search-term-on-blur=\"false\"\n :reset-search-term-on-select=\"false\"\n @update:model-value=\"change\"\n @update:open=\"\n (open) => {\n if (!open) draft = null;\n }\n \"\n >\n <ComboboxAnchor\n class=\"combobox__control\"\n :data-invalid=\"invalid || undefined\"\n :data-disabled=\"disabled || undefined\"\n >\n <span v-if=\"$slots.start\" class=\"selection__leading\" aria-hidden=\"true\"\n ><slot name=\"start\"\n /></span>\n <ComboboxInput\n :id=\"controlId\"\n :model-value=\"text\"\n :display-value=\"() => selected?.label ?? ''\"\n class=\"combobox__input\"\n :placeholder=\"placeholder\"\n :aria-required=\"required || undefined\"\n :aria-invalid=\"invalid || undefined\"\n :aria-describedby=\"describedBy\"\n @update:model-value=\"search\"\n />\n <button\n v-if=\"clearable\"\n type=\"button\"\n class=\"combobox__clear\"\n :data-empty=\"(!id && !text) || undefined\"\n :aria-hidden=\"(!id && !text) || undefined\"\n :tabindex=\"!id && !text ? -1 : undefined\"\n :disabled=\"disabled || (!id && !text)\"\n :aria-label=\"clearLabel ?? 'Hapus pilihan'\"\n @click=\"\n change(undefined);\n focus();\n \"\n >\n <CloseIcon class=\"selection__close-icon\" />\n </button>\n <ComboboxTrigger class=\"combobox__toggle\" :aria-label=\"toggleLabel ?? 'Buka pilihan'\"\n ><ChevronIcon class=\"select__icon\"\n /></ComboboxTrigger>\n </ComboboxAnchor>\n <ComboboxPortal\n ><ComboboxContent\n class=\"select__popover combobox__popover\"\n position=\"popper\"\n :side-offset=\"4\"\n ><ComboboxViewport class=\"select__list\">\n <ComboboxItem\n v-for=\"option in filtered\"\n :key=\"option.id\"\n :value=\"option.id\"\n :text-value=\"option.label\"\n :disabled=\"option.isDisabled\"\n class=\"select__item\"\n ><span class=\"select__item-label\"\n ><slot name=\"option\" :option=\"option\"\n >{{ option.label\n }}<span v-if=\"option.description\" class=\"selection__description\">{{\n option.description\n }}</span></slot\n ></span\n ><CheckIcon class=\"select__check\"\n /></ComboboxItem>\n <span v-if=\"!filtered.length\" class=\"selection__empty\" role=\"status\">{{\n emptyMessage ?? 'Tidak ada pilihan.'\n }}</span>\n </ComboboxViewport></ComboboxContent\n ></ComboboxPortal\n >\n </ComboboxRoot>\n <FieldFeedback\n :control-id=\"controlId\"\n :description=\"description\"\n :error-message=\"error\"\n :show-error=\"showError\"\n />\n <input v-if=\"name\" type=\"hidden\" :name=\"name\" :value=\"id ?? ''\" :disabled=\"disabled\" />\n <SelectionValidation\n :has-value=\"!!id\"\n :required=\"required\"\n :disabled=\"disabled\"\n @invalid=\"\n tried = true;\n focus();\n \"\n @reset=\"reset\"\n />\n </div>\n</template>\n","export interface ToggleGroupItem {\n id: string;\n label: string;\n isDisabled?: boolean;\n}\nexport type ToggleGroupMode = 'single' | 'multiple';\nexport type ToggleGroupVariant = 'outline' | 'ghost';\n/** Normalize IDs without discarding existing disabled selections. */\nexport function toggleIds(value: unknown, items: ToggleGroupItem[], multiple: boolean): string[] {\n const wanted = new Set(Array.isArray(value) ? value : typeof value === 'string' ? [value] : []);\n const result = [\n ...new Set(\n items.filter((item) => item.id !== '' && wanted.has(item.id)).map((item) => item.id),\n ),\n ];\n return multiple ? result : result.slice(0, 1);\n}\n","<script setup lang=\"ts\" generic=\"M extends 'single' | 'multiple' = 'single'\">\nimport { computed, getCurrentInstance, ref } from 'vue';\nimport { ToggleGroupRoot, ToggleGroupItem as RekaItem } from 'reka-ui';\nimport { toggleIds, type ToggleGroupItem, type ToggleGroupVariant } from './toggle-group-model.js';\nimport type { ButtonSize } from './types.js';\ntype Value = M extends 'multiple' ? string[] : string | null;\nconst props = defineProps<{\n label: string;\n items: ToggleGroupItem[];\n selectionMode?: M;\n modelValue?: Value;\n defaultValue?: Value;\n disabled?: boolean;\n iconOnly?: boolean;\n disallowEmptySelection?: boolean;\n variant?: ToggleGroupVariant;\n size?: ButtonSize;\n orientation?: 'horizontal' | 'vertical';\n dir?: 'ltr' | 'rtl';\n}>();\nconst emit = defineEmits<{ 'update:modelValue': [value: Value] }>();\ndefineSlots<{ icon?: (props: { item: ToggleGroupItem }) => unknown }>();\nconst instance = getCurrentInstance();\nconst controlled = () =>\n Object.prototype.hasOwnProperty.call(instance?.vnode.props ?? {}, 'modelValue');\nconst local = ref<unknown>(props.defaultValue);\nconst multiple = computed(() => props.selectionMode === 'multiple');\nconst ids = computed(() =>\n toggleIds(controlled() ? props.modelValue : local.value, props.items, multiple.value),\n);\nfunction update(value: unknown) {\n if (props.disabled) return;\n const requested = new Set(toggleIds(value, props.items, true));\n for (const item of props.items.filter((item) => item.isDisabled)) {\n if (multiple.value && ids.value.includes(item.id)) requested.add(item.id);\n else if (!ids.value.includes(item.id)) requested.delete(item.id);\n }\n const next = toggleIds([...requested], props.items, multiple.value);\n if (next.length === ids.value.length && next.every((id, index) => id === ids.value[index]))\n return;\n if (props.disallowEmptySelection && ids.value.length && !next.length) return;\n const result = (multiple.value ? next : (next[0] ?? null)) as Value;\n local.value = result;\n emit('update:modelValue', result);\n}\n</script>\n<template>\n <ToggleGroupRoot\n class=\"toggle-group\"\n :aria-label=\"label\"\n :type=\"multiple ? 'multiple' : 'single'\"\n :model-value=\"multiple ? ids : (ids[0] ?? '')\"\n :disabled=\"disabled\"\n :dir=\"dir\"\n :orientation=\"orientation ?? 'horizontal'\"\n :data-orientation=\"orientation ?? 'horizontal'\"\n :data-variant=\"variant ?? 'outline'\"\n :data-size=\"size ?? 'md'\"\n :data-icon-only=\"iconOnly || undefined\"\n @update:model-value=\"update\"\n >\n <RekaItem\n v-for=\"item in items\"\n :key=\"item.id\"\n :value=\"item.id\"\n type=\"button\"\n class=\"toggle-group__item\"\n :aria-label=\"item.label\"\n :disabled=\"disabled || item.isDisabled\"\n >\n <span v-if=\"$slots.icon\" class=\"toggle-group__icon\" aria-hidden=\"true\"\n ><slot name=\"icon\" :item=\"item\" /></span\n ><span v-if=\"!iconOnly\">{{ item.label }}</span>\n </RekaItem>\n </ToggleGroupRoot>\n</template>\n","<script setup lang=\"ts\" generic=\"M extends 'single' | 'multiple' = 'single'\">\nimport { computed, getCurrentInstance, ref } from 'vue';\nimport { ToggleGroupRoot, ToggleGroupItem as RekaItem } from 'reka-ui';\nimport { toggleIds, type ToggleGroupItem, type ToggleGroupVariant } from './toggle-group-model.js';\nimport type { ButtonSize } from './types.js';\ntype Value = M extends 'multiple' ? string[] : string | null;\nconst props = defineProps<{\n label: string;\n items: ToggleGroupItem[];\n selectionMode?: M;\n modelValue?: Value;\n defaultValue?: Value;\n disabled?: boolean;\n iconOnly?: boolean;\n disallowEmptySelection?: boolean;\n variant?: ToggleGroupVariant;\n size?: ButtonSize;\n orientation?: 'horizontal' | 'vertical';\n dir?: 'ltr' | 'rtl';\n}>();\nconst emit = defineEmits<{ 'update:modelValue': [value: Value] }>();\ndefineSlots<{ icon?: (props: { item: ToggleGroupItem }) => unknown }>();\nconst instance = getCurrentInstance();\nconst controlled = () =>\n Object.prototype.hasOwnProperty.call(instance?.vnode.props ?? {}, 'modelValue');\nconst local = ref<unknown>(props.defaultValue);\nconst multiple = computed(() => props.selectionMode === 'multiple');\nconst ids = computed(() =>\n toggleIds(controlled() ? props.modelValue : local.value, props.items, multiple.value),\n);\nfunction update(value: unknown) {\n if (props.disabled) return;\n const requested = new Set(toggleIds(value, props.items, true));\n for (const item of props.items.filter((item) => item.isDisabled)) {\n if (multiple.value && ids.value.includes(item.id)) requested.add(item.id);\n else if (!ids.value.includes(item.id)) requested.delete(item.id);\n }\n const next = toggleIds([...requested], props.items, multiple.value);\n if (next.length === ids.value.length && next.every((id, index) => id === ids.value[index]))\n return;\n if (props.disallowEmptySelection && ids.value.length && !next.length) return;\n const result = (multiple.value ? next : (next[0] ?? null)) as Value;\n local.value = result;\n emit('update:modelValue', result);\n}\n</script>\n<template>\n <ToggleGroupRoot\n class=\"toggle-group\"\n :aria-label=\"label\"\n :type=\"multiple ? 'multiple' : 'single'\"\n :model-value=\"multiple ? ids : (ids[0] ?? '')\"\n :disabled=\"disabled\"\n :dir=\"dir\"\n :orientation=\"orientation ?? 'horizontal'\"\n :data-orientation=\"orientation ?? 'horizontal'\"\n :data-variant=\"variant ?? 'outline'\"\n :data-size=\"size ?? 'md'\"\n :data-icon-only=\"iconOnly || undefined\"\n @update:model-value=\"update\"\n >\n <RekaItem\n v-for=\"item in items\"\n :key=\"item.id\"\n :value=\"item.id\"\n type=\"button\"\n class=\"toggle-group__item\"\n :aria-label=\"item.label\"\n :disabled=\"disabled || item.isDisabled\"\n >\n <span v-if=\"$slots.icon\" class=\"toggle-group__icon\" aria-hidden=\"true\"\n ><slot name=\"icon\" :item=\"item\" /></span\n ><span v-if=\"!iconOnly\">{{ item.label }}</span>\n </RekaItem>\n </ToggleGroupRoot>\n</template>\n","import {\n parseDate,\n today,\n getLocalTimeZone,\n startOfMonth,\n endOfMonth,\n startOfWeek,\n} from '@internationalized/date';\n\nexport interface DateRange {\n start: string;\n end: string;\n}\nexport interface DateRangePreset {\n id: string;\n label: string;\n value: DateRange;\n}\nexport interface DateRangeConstraints {\n minDate?: string;\n maxDate?: string;\n minDays?: number;\n maxDays?: number;\n isDateUnavailable?: (date: string) => boolean;\n}\nexport type DateRangeSize = 'sm' | 'md' | 'lg';\nexport type DateRangeVariant = 'primary' | 'secondary' | 'outline';\nexport interface DateRangeOptions extends DateRangeConstraints {\n label: string;\n defaultValue?: DateRange | null;\n size?: DateRangeSize;\n variant?: DateRangeVariant;\n hideLabel?: boolean;\n fullWidth?: boolean;\n locale?: string;\n dir?: 'ltr' | 'rtl';\n visibleMonths?: 1 | 2;\n weekStartsOn?: 0 | 1;\n display?: 'popover' | 'inline';\n showInputs?: boolean;\n showMonthYearPicker?: boolean;\n triggerDisplay?: 'text' | 'icon';\n presets?: DateRangePreset[];\n labels?: Partial<DateRangeLabels>;\n formatRange?: (value: DateRange, locale: string) => string;\n description?: string;\n errorMessage?: string;\n name?: string;\n referenceDate?: string;\n open?: boolean;\n defaultOpen?: boolean;\n}\nexport type DateRangeError = 'incomplete' | 'order' | 'bounds' | 'unavailable' | 'length';\nexport interface DateRangeLabels {\n title: string;\n start: string;\n end: string;\n apply: string;\n cancel: string;\n clear: string;\n previousMonth: string;\n nextMonth: string;\n presets: string;\n placeholder: string;\n incomplete: string;\n order: string;\n bounds: string;\n unavailable: string;\n length: string;\n required: string;\n}\nexport function dateRangeLabels(locale = 'id-ID'): DateRangeLabels {\n return locale.startsWith('id')\n ? {\n title: 'Pilih rentang tanggal',\n start: 'Tanggal mulai',\n end: 'Tanggal akhir',\n apply: 'Terapkan',\n cancel: 'Batal',\n clear: 'Kosongkan',\n previousMonth: 'Bulan sebelumnya',\n nextMonth: 'Bulan berikutnya',\n presets: 'Pilihan cepat',\n placeholder: 'Pilih tanggal',\n incomplete: 'Lengkapi tanggal mulai dan akhir.',\n order: 'Tanggal akhir harus setelah atau sama dengan tanggal mulai.',\n bounds: 'Tanggal berada di luar batas yang diizinkan.',\n unavailable: 'Rentang memuat tanggal yang tidak tersedia.',\n length: 'Durasi rentang tidak sesuai batas yang diizinkan.',\n required: 'Rentang tanggal wajib diisi.',\n }\n : {\n title: 'Select date range',\n start: 'Start date',\n end: 'End date',\n apply: 'Apply',\n cancel: 'Cancel',\n clear: 'Clear',\n previousMonth: 'Previous month',\n nextMonth: 'Next month',\n presets: 'Quick selections',\n placeholder: 'Choose dates',\n incomplete: 'Enter both start and end dates.',\n order: 'End date must be on or after start date.',\n bounds: 'Dates are outside the allowed limits.',\n unavailable: 'The range includes an unavailable date.',\n length: 'The range duration is outside the allowed limits.',\n required: 'A date range is required.',\n };\n}\nexport function validDate(value: string): boolean {\n if (!/^(?!0000)\\d{4}-\\d{2}-\\d{2}$/.test(value)) return false;\n try {\n return parseDate(value).toString() === value;\n } catch {\n return false;\n }\n}\nexport function asDate(value?: string) {\n return value && validDate(value) ? parseDate(value) : undefined;\n}\nexport function currentDate() {\n return today(getLocalTimeZone()).toString();\n}\nexport function rangeError(\n value: DateRange | null,\n constraints: DateRangeConstraints = {},\n): DateRangeError | null {\n if (!value) return null;\n if (!validDate(value.start) || !validDate(value.end)) return 'incomplete';\n if (value.end < value.start) return 'order';\n if (\n (constraints.minDate && value.start < constraints.minDate) ||\n (constraints.maxDate && value.end > constraints.maxDate)\n )\n return 'bounds';\n const start = parseDate(value.start),\n end = parseDate(value.end);\n const days = end.calendar.toJulianDay(end) - start.calendar.toJulianDay(start) + 1;\n if (\n (constraints.minDays && days < constraints.minDays) ||\n (constraints.maxDays && days > constraints.maxDays)\n )\n return 'length';\n if (constraints.isDateUnavailable) {\n for (let day = start; day.compare(end) <= 0; day = day.add({ days: 1 })) {\n if (constraints.isDateUnavailable(day.toString())) return 'unavailable';\n if (day.compare(end) === 0) break;\n }\n }\n return null;\n}\nexport function rangeText(value: DateRange | null, locale = 'id-ID'): string {\n if (!value || !validDate(value.start) || !validDate(value.end)) return '';\n const formatter = new Intl.DateTimeFormat(locale, {\n day: 'numeric',\n month: 'short',\n year: 'numeric',\n timeZone: 'UTC',\n calendar: 'gregory',\n });\n const date = (s: string) => parseDate(s).toDate('UTC');\n return value.start === value.end\n ? formatter.format(date(value.start))\n : `${formatter.format(date(value.start))} – ${formatter.format(date(value.end))}`;\n}\nexport function createDateRangePresets(\n referenceDate = currentDate(),\n locale = 'id-ID',\n weekStartsOn: 0 | 1 = 1,\n): DateRangePreset[] {\n const day = parseDate(referenceDate),\n week = startOfWeek(day, locale, weekStartsOn === 1 ? 'mon' : 'sun');\n const id = locale.startsWith('id');\n return [\n {\n id: 'this-week',\n label: id ? 'Minggu ini' : 'This Week',\n start: week,\n end: week.add({ days: 6 }),\n },\n {\n id: 'last-week',\n label: id ? 'Minggu lalu' : 'Last Week',\n start: week.subtract({ days: 7 }),\n end: week.subtract({ days: 1 }),\n },\n {\n id: 'last-7-days',\n label: id ? '7 hari terakhir' : 'Last 7 Days',\n start: day.subtract({ days: 6 }),\n end: day,\n },\n {\n id: 'last-30-days',\n label: id ? '30 hari terakhir' : 'Last 30 Days',\n start: day.subtract({ days: 29 }),\n end: day,\n },\n {\n id: 'this-month',\n label: id ? 'Bulan ini' : 'Current Month',\n start: startOfMonth(day),\n end: endOfMonth(day),\n },\n {\n id: 'next-month',\n label: id ? 'Bulan depan' : 'Next Month',\n start: startOfMonth(day.add({ months: 1 })),\n end: endOfMonth(day.add({ months: 1 })),\n },\n ].map(({ id, label, start, end }) => ({\n id,\n label,\n value: { start: start.toString(), end: end.toString() },\n }));\n}\n","<script setup lang=\"ts\">\nimport { computed, shallowRef, watch } from 'vue';\nimport {\n RangeCalendarRoot,\n RangeCalendarPrev,\n RangeCalendarNext,\n RangeCalendarGrid,\n RangeCalendarGridHead,\n RangeCalendarGridRow,\n RangeCalendarHeadCell,\n RangeCalendarGridBody,\n RangeCalendarCell,\n RangeCalendarCellTrigger,\n type DateRange as CalendarRange,\n} from 'reka-ui';\nimport { type DateValue } from '@internationalized/date';\nimport ChevronIcon from './ChevronIcon.vue';\nimport {\n asDate,\n currentDate,\n rangeError,\n rangeText,\n type DateRange,\n type DateRangeOptions,\n type DateRangeLabels,\n} from './date-range-model.js';\nconst props = defineProps<{\n options: DateRangeOptions;\n draft: DateRange;\n labels: DateRangeLabels;\n id: string;\n disabled: boolean;\n readonly: boolean;\n required: boolean;\n}>();\nconst emit = defineEmits<{ draft: [value: DateRange]; apply: []; cancel: [] }>();\nconst locale = computed(() => props.options.locale ?? 'id-ID');\nconst nullable = computed(() => (props.draft.start || props.draft.end ? props.draft : null));\nconst errorCode = computed(\n () =>\n rangeError(nullable.value, props.options) ??\n (props.required && !nullable.value ? 'required' : null),\n);\nconst error = computed(() => (errorCode.value ? props.labels[errorCode.value] : undefined));\nfunction initialFocus() {\n const date =\n asDate(props.draft.start) ?? asDate(props.options.referenceDate) ?? asDate(currentDate())!;\n const min = asDate(props.options.minDate),\n max = asDate(props.options.maxDate);\n return min && date.compare(min) < 0 ? min : max && date.compare(max) > 0 ? max : date;\n}\nconst focused = shallowRef<DateValue>(initialFocus());\nwatch(\n () => props.draft.start,\n () => {\n if (asDate(props.draft.start)) focused.value = asDate(props.draft.start)!;\n },\n);\nconst calendarValue = computed(() => ({\n start: asDate(props.draft.start),\n end: props.draft.start <= props.draft.end ? asDate(props.draft.end) : undefined,\n}));\nfunction select(value: CalendarRange) {\n if (!props.disabled && !props.readonly)\n emit('draft', { start: value.start?.toString() ?? '', end: value.end?.toString() ?? '' });\n}\nfunction edit(part: 'start' | 'end', event: Event) {\n emit('draft', { ...props.draft, [part]: (event.target as HTMLInputElement).value });\n}\nfunction jumpYear(event: Event) {\n const el = event.target as HTMLInputElement;\n const year = Number(el.value);\n if (Number.isInteger(year) && year >= 1 && year <= 9999)\n focused.value = focused.value.set({ year });\n else el.value = String(focused.value.year);\n}\nconst monthLabel = (date: DateValue) =>\n new Intl.DateTimeFormat(locale.value, {\n month: 'long',\n year: 'numeric',\n calendar: 'gregory',\n timeZone: 'UTC',\n }).format(date.toDate('UTC'));\nconst unavailable = (date: DateValue) =>\n props.options.isDateUnavailable?.(date.toString()) ?? false;\n</script>\n<template>\n <div class=\"date-range__content\" :data-readonly=\"readonly || undefined\">\n <header class=\"date-range__intro\">\n <h2 :id=\"`${id}-title`\">{{ labels.title }}</h2>\n <p class=\"date-range__summary\" aria-live=\"polite\">\n {{ rangeText(nullable, locale) || labels.incomplete }}\n </p>\n </header>\n <div class=\"date-range__body\">\n <div\n v-if=\"options.presets?.length\"\n class=\"date-range__presets\"\n role=\"group\"\n :aria-label=\"labels.presets\"\n >\n <button\n v-for=\"preset in options.presets\"\n :key=\"preset.id\"\n type=\"button\"\n class=\"date-range__preset\"\n :disabled=\"disabled || readonly || !!rangeError(preset.value, options)\"\n :aria-pressed=\"draft.start === preset.value.start && draft.end === preset.value.end\"\n @click=\"emit('draft', { ...preset.value })\"\n >\n {{ preset.label }}\n </button>\n </div>\n <div class=\"date-range__main\">\n <div v-if=\"options.showMonthYearPicker\" class=\"date-range__jump\">\n <label\n ><span>{{ locale.startsWith('id') ? 'Bulan' : 'Month' }}</span\n ><select\n form=\"\"\n :aria-label=\"locale.startsWith('id') ? 'Bulan' : 'Month'\"\n :disabled=\"disabled\"\n :value=\"focused.month\"\n @change=\"\n focused = focused.set({ month: Number(($event.target as HTMLSelectElement).value) })\n \"\n >\n <option v-for=\"month in 12\" :key=\"month\" :value=\"month\">\n {{\n new Intl.DateTimeFormat(locale, {\n month: 'long',\n timeZone: 'UTC',\n calendar: 'gregory',\n }).format(focused.set({ month, day: 1 }).toDate('UTC'))\n }}\n </option>\n </select></label\n ><label\n ><span>{{ locale.startsWith('id') ? 'Tahun' : 'Year' }}</span\n ><input\n type=\"number\"\n form=\"\"\n :disabled=\"disabled\"\n :value=\"focused.year\"\n :min=\"asDate(options.minDate)?.year ?? 1\"\n :max=\"asDate(options.maxDate)?.year ?? 9999\"\n @change=\"jumpYear\"\n /></label>\n </div>\n <div v-if=\"options.showInputs !== false\" class=\"date-range__inputs\">\n <label v-for=\"part in ['start', 'end'] as const\" :key=\"part\" class=\"date-range__field\"\n ><span>{{ labels[part] }}</span\n ><input\n type=\"date\"\n form=\"\"\n :value=\"draft[part]\"\n :min=\"options.minDate\"\n :max=\"options.maxDate\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n :aria-invalid=\"!!errorCode\"\n :aria-describedby=\"error ? `${id}-draft-error` : undefined\"\n @input=\"edit(part, $event)\"\n /></label>\n </div>\n <RangeCalendarRoot\n v-slot=\"{ grid, weekDays }\"\n v-model:placeholder=\"focused\"\n class=\"date-range__calendar\"\n :model-value=\"calendarValue\"\n :number-of-months=\"options.visibleMonths ?? 2\"\n :week-starts-on=\"options.weekStartsOn ?? 1\"\n weekday-format=\"short\"\n :calendar-label=\"labels.title\"\n :locale=\"`${locale.split('-u-')[0]}-u-ca-gregory`\"\n :dir=\"options.dir\"\n :min-value=\"asDate(options.minDate)\"\n :max-value=\"asDate(options.maxDate)\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n :is-date-unavailable=\"unavailable\"\n @update:model-value=\"select\"\n >\n <div class=\"date-range__navigation\">\n <RangeCalendarPrev\n as=\"button\"\n type=\"button\"\n class=\"date-range__nav date-range__nav--previous\"\n :aria-label=\"labels.previousMonth\"\n ><ChevronIcon /></RangeCalendarPrev\n ><RangeCalendarNext\n as=\"button\"\n type=\"button\"\n class=\"date-range__nav date-range__nav--next\"\n :aria-label=\"labels.nextMonth\"\n ><ChevronIcon\n /></RangeCalendarNext>\n </div>\n <div class=\"date-range__months\">\n <div v-for=\"month in grid\" :key=\"month.value.toString()\" class=\"date-range__month\">\n <h2 class=\"date-range__heading\">{{ monthLabel(month.value) }}</h2>\n <RangeCalendarGrid class=\"date-range__grid\"\n ><RangeCalendarGridHead\n ><RangeCalendarGridRow\n ><RangeCalendarHeadCell\n v-for=\"day in weekDays\"\n :key=\"day\"\n class=\"date-range__weekday\"\n >{{ day }}</RangeCalendarHeadCell\n ></RangeCalendarGridRow\n ></RangeCalendarGridHead\n >\n <RangeCalendarGridBody\n ><RangeCalendarGridRow v-for=\"(week, index) in month.rows\" :key=\"index\"\n ><RangeCalendarCell v-for=\"date in week\" :key=\"date.toString()\" :date=\"date\"\n ><RangeCalendarCellTrigger\n class=\"date-range__day\"\n :day=\"date\"\n :month=\"\n month.value\n \" /></RangeCalendarCell></RangeCalendarGridRow></RangeCalendarGridBody\n ></RangeCalendarGrid>\n </div>\n </div>\n </RangeCalendarRoot>\n <div class=\"date-range__validation\" aria-live=\"polite\">\n <p v-if=\"error\" :id=\"`${id}-draft-error`\" role=\"alert\">{{ error }}</p>\n </div>\n </div>\n </div>\n <footer class=\"date-range__footer\">\n <button\n type=\"button\"\n class=\"button button--ghost button--sm\"\n :disabled=\"disabled || readonly\"\n @click=\"emit('draft', { start: '', end: '' })\"\n >\n {{ labels.clear }}\n </button>\n <div>\n <button\n type=\"button\"\n class=\"button button--secondary button--sm date-range__cancel\"\n @click=\"emit('cancel')\"\n >\n {{ labels.cancel }}</button\n ><button\n type=\"button\"\n class=\"button button--primary button--sm date-range__apply\"\n :disabled=\"disabled || readonly || !!errorCode\"\n @click=\"emit('apply')\"\n >\n {{ labels.apply }}\n </button>\n </div>\n </footer>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, shallowRef, watch } from 'vue';\nimport {\n RangeCalendarRoot,\n RangeCalendarPrev,\n RangeCalendarNext,\n RangeCalendarGrid,\n RangeCalendarGridHead,\n RangeCalendarGridRow,\n RangeCalendarHeadCell,\n RangeCalendarGridBody,\n RangeCalendarCell,\n RangeCalendarCellTrigger,\n type DateRange as CalendarRange,\n} from 'reka-ui';\nimport { type DateValue } from '@internationalized/date';\nimport ChevronIcon from './ChevronIcon.vue';\nimport {\n asDate,\n currentDate,\n rangeError,\n rangeText,\n type DateRange,\n type DateRangeOptions,\n type DateRangeLabels,\n} from './date-range-model.js';\nconst props = defineProps<{\n options: DateRangeOptions;\n draft: DateRange;\n labels: DateRangeLabels;\n id: string;\n disabled: boolean;\n readonly: boolean;\n required: boolean;\n}>();\nconst emit = defineEmits<{ draft: [value: DateRange]; apply: []; cancel: [] }>();\nconst locale = computed(() => props.options.locale ?? 'id-ID');\nconst nullable = computed(() => (props.draft.start || props.draft.end ? props.draft : null));\nconst errorCode = computed(\n () =>\n rangeError(nullable.value, props.options) ??\n (props.required && !nullable.value ? 'required' : null),\n);\nconst error = computed(() => (errorCode.value ? props.labels[errorCode.value] : undefined));\nfunction initialFocus() {\n const date =\n asDate(props.draft.start) ?? asDate(props.options.referenceDate) ?? asDate(currentDate())!;\n const min = asDate(props.options.minDate),\n max = asDate(props.options.maxDate);\n return min && date.compare(min) < 0 ? min : max && date.compare(max) > 0 ? max : date;\n}\nconst focused = shallowRef<DateValue>(initialFocus());\nwatch(\n () => props.draft.start,\n () => {\n if (asDate(props.draft.start)) focused.value = asDate(props.draft.start)!;\n },\n);\nconst calendarValue = computed(() => ({\n start: asDate(props.draft.start),\n end: props.draft.start <= props.draft.end ? asDate(props.draft.end) : undefined,\n}));\nfunction select(value: CalendarRange) {\n if (!props.disabled && !props.readonly)\n emit('draft', { start: value.start?.toString() ?? '', end: value.end?.toString() ?? '' });\n}\nfunction edit(part: 'start' | 'end', event: Event) {\n emit('draft', { ...props.draft, [part]: (event.target as HTMLInputElement).value });\n}\nfunction jumpYear(event: Event) {\n const el = event.target as HTMLInputElement;\n const year = Number(el.value);\n if (Number.isInteger(year) && year >= 1 && year <= 9999)\n focused.value = focused.value.set({ year });\n else el.value = String(focused.value.year);\n}\nconst monthLabel = (date: DateValue) =>\n new Intl.DateTimeFormat(locale.value, {\n month: 'long',\n year: 'numeric',\n calendar: 'gregory',\n timeZone: 'UTC',\n }).format(date.toDate('UTC'));\nconst unavailable = (date: DateValue) =>\n props.options.isDateUnavailable?.(date.toString()) ?? false;\n</script>\n<template>\n <div class=\"date-range__content\" :data-readonly=\"readonly || undefined\">\n <header class=\"date-range__intro\">\n <h2 :id=\"`${id}-title`\">{{ labels.title }}</h2>\n <p class=\"date-range__summary\" aria-live=\"polite\">\n {{ rangeText(nullable, locale) || labels.incomplete }}\n </p>\n </header>\n <div class=\"date-range__body\">\n <div\n v-if=\"options.presets?.length\"\n class=\"date-range__presets\"\n role=\"group\"\n :aria-label=\"labels.presets\"\n >\n <button\n v-for=\"preset in options.presets\"\n :key=\"preset.id\"\n type=\"button\"\n class=\"date-range__preset\"\n :disabled=\"disabled || readonly || !!rangeError(preset.value, options)\"\n :aria-pressed=\"draft.start === preset.value.start && draft.end === preset.value.end\"\n @click=\"emit('draft', { ...preset.value })\"\n >\n {{ preset.label }}\n </button>\n </div>\n <div class=\"date-range__main\">\n <div v-if=\"options.showMonthYearPicker\" class=\"date-range__jump\">\n <label\n ><span>{{ locale.startsWith('id') ? 'Bulan' : 'Month' }}</span\n ><select\n form=\"\"\n :aria-label=\"locale.startsWith('id') ? 'Bulan' : 'Month'\"\n :disabled=\"disabled\"\n :value=\"focused.month\"\n @change=\"\n focused = focused.set({ month: Number(($event.target as HTMLSelectElement).value) })\n \"\n >\n <option v-for=\"month in 12\" :key=\"month\" :value=\"month\">\n {{\n new Intl.DateTimeFormat(locale, {\n month: 'long',\n timeZone: 'UTC',\n calendar: 'gregory',\n }).format(focused.set({ month, day: 1 }).toDate('UTC'))\n }}\n </option>\n </select></label\n ><label\n ><span>{{ locale.startsWith('id') ? 'Tahun' : 'Year' }}</span\n ><input\n type=\"number\"\n form=\"\"\n :disabled=\"disabled\"\n :value=\"focused.year\"\n :min=\"asDate(options.minDate)?.year ?? 1\"\n :max=\"asDate(options.maxDate)?.year ?? 9999\"\n @change=\"jumpYear\"\n /></label>\n </div>\n <div v-if=\"options.showInputs !== false\" class=\"date-range__inputs\">\n <label v-for=\"part in ['start', 'end'] as const\" :key=\"part\" class=\"date-range__field\"\n ><span>{{ labels[part] }}</span\n ><input\n type=\"date\"\n form=\"\"\n :value=\"draft[part]\"\n :min=\"options.minDate\"\n :max=\"options.maxDate\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n :aria-invalid=\"!!errorCode\"\n :aria-describedby=\"error ? `${id}-draft-error` : undefined\"\n @input=\"edit(part, $event)\"\n /></label>\n </div>\n <RangeCalendarRoot\n v-slot=\"{ grid, weekDays }\"\n v-model:placeholder=\"focused\"\n class=\"date-range__calendar\"\n :model-value=\"calendarValue\"\n :number-of-months=\"options.visibleMonths ?? 2\"\n :week-starts-on=\"options.weekStartsOn ?? 1\"\n weekday-format=\"short\"\n :calendar-label=\"labels.title\"\n :locale=\"`${locale.split('-u-')[0]}-u-ca-gregory`\"\n :dir=\"options.dir\"\n :min-value=\"asDate(options.minDate)\"\n :max-value=\"asDate(options.maxDate)\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n :is-date-unavailable=\"unavailable\"\n @update:model-value=\"select\"\n >\n <div class=\"date-range__navigation\">\n <RangeCalendarPrev\n as=\"button\"\n type=\"button\"\n class=\"date-range__nav date-range__nav--previous\"\n :aria-label=\"labels.previousMonth\"\n ><ChevronIcon /></RangeCalendarPrev\n ><RangeCalendarNext\n as=\"button\"\n type=\"button\"\n class=\"date-range__nav date-range__nav--next\"\n :aria-label=\"labels.nextMonth\"\n ><ChevronIcon\n /></RangeCalendarNext>\n </div>\n <div class=\"date-range__months\">\n <div v-for=\"month in grid\" :key=\"month.value.toString()\" class=\"date-range__month\">\n <h2 class=\"date-range__heading\">{{ monthLabel(month.value) }}</h2>\n <RangeCalendarGrid class=\"date-range__grid\"\n ><RangeCalendarGridHead\n ><RangeCalendarGridRow\n ><RangeCalendarHeadCell\n v-for=\"day in weekDays\"\n :key=\"day\"\n class=\"date-range__weekday\"\n >{{ day }}</RangeCalendarHeadCell\n ></RangeCalendarGridRow\n ></RangeCalendarGridHead\n >\n <RangeCalendarGridBody\n ><RangeCalendarGridRow v-for=\"(week, index) in month.rows\" :key=\"index\"\n ><RangeCalendarCell v-for=\"date in week\" :key=\"date.toString()\" :date=\"date\"\n ><RangeCalendarCellTrigger\n class=\"date-range__day\"\n :day=\"date\"\n :month=\"\n month.value\n \" /></RangeCalendarCell></RangeCalendarGridRow></RangeCalendarGridBody\n ></RangeCalendarGrid>\n </div>\n </div>\n </RangeCalendarRoot>\n <div class=\"date-range__validation\" aria-live=\"polite\">\n <p v-if=\"error\" :id=\"`${id}-draft-error`\" role=\"alert\">{{ error }}</p>\n </div>\n </div>\n </div>\n <footer class=\"date-range__footer\">\n <button\n type=\"button\"\n class=\"button button--ghost button--sm\"\n :disabled=\"disabled || readonly\"\n @click=\"emit('draft', { start: '', end: '' })\"\n >\n {{ labels.clear }}\n </button>\n <div>\n <button\n type=\"button\"\n class=\"button button--secondary button--sm date-range__cancel\"\n @click=\"emit('cancel')\"\n >\n {{ labels.cancel }}</button\n ><button\n type=\"button\"\n class=\"button button--primary button--sm date-range__apply\"\n :disabled=\"disabled || readonly || !!errorCode\"\n @click=\"emit('apply')\"\n >\n {{ labels.apply }}\n </button>\n </div>\n </footer>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref, watch } from 'vue';\nimport { PopoverRoot, PopoverTrigger, PopoverPortal, PopoverContent, useId } from 'reka-ui';\nimport ChevronIcon from './ChevronIcon.vue';\nimport DateRangePanel from './DateRangePanel.vue';\nimport SelectionValidation from './SelectionValidation.vue';\nimport {\n dateRangeLabels,\n rangeError,\n rangeText,\n type DateRange,\n type DateRangeOptions,\n} from './date-range-model.js';\nimport { useDisclosure } from './useDisclosure.js';\ndefineOptions({ inheritAttrs: false });\ninterface Props extends DateRangeOptions {\n modelValue?: DateRange | null;\n disabled?: boolean;\n readonly?: boolean;\n required?: boolean;\n invalid?: boolean;\n}\nconst props = withDefaults(defineProps<Props>(), {\n modelValue: undefined,\n defaultValue: null,\n size: 'md',\n variant: 'primary',\n fullWidth: true,\n locale: 'id-ID',\n dir: undefined,\n visibleMonths: 2,\n weekStartsOn: 1,\n display: 'popover',\n showInputs: true,\n showMonthYearPicker: false,\n triggerDisplay: 'text',\n presets: () => [],\n labels: undefined,\n formatRange: undefined,\n description: undefined,\n errorMessage: undefined,\n name: undefined,\n referenceDate: undefined,\n open: undefined,\n defaultOpen: false,\n minDate: undefined,\n maxDate: undefined,\n minDays: undefined,\n maxDays: undefined,\n isDateUnavailable: undefined,\n});\nconst emit = defineEmits<{\n 'update:modelValue': [value: DateRange | null];\n 'update:open': [open: boolean];\n apply: [value: DateRange | null];\n}>();\nconst local = ref<DateRange | null>(props.defaultValue);\nconst committed = computed(() => (props.modelValue !== undefined ? props.modelValue : local.value));\nconst draft = ref<DateRange>({ ...(committed.value ?? { start: '', end: '' }) });\nwatch(\n () => [committed.value?.start, committed.value?.end],\n () => {\n draft.value = { ...(committed.value ?? { start: '', end: '' }) };\n },\n);\nconst labels = computed(() => ({ ...dateRangeLabels(props.locale), ...props.labels }));\nconst id = useId(),\n root = ref<HTMLDivElement>(),\n formError = ref(false);\nconst disclosure = useDisclosure(props, (next) => emit('update:open', next));\nconst visible = computed(() => disclosure.visible.value && !props.disabled);\nfunction changeOpen(next: boolean) {\n if (next && props.disabled) return;\n draft.value = { ...(committed.value ?? { start: '', end: '' }) };\n disclosure.change(next);\n}\nconst committedError = computed(() => rangeError(committed.value, props));\nconst outerError = computed(() => props.invalid || !!committedError.value || formError.value);\nconst text = computed(() => {\n const value = committed.value;\n if (!value) return labels.value.placeholder;\n const preset = props.presets.find(\n (p) => p.value.start === value.start && p.value.end === value.end,\n );\n return (\n props.formatRange?.(value, props.locale) ?? preset?.label ?? rangeText(value, props.locale)\n );\n});\nfunction apply() {\n const next = draft.value.start || draft.value.end ? { ...draft.value } : null;\n if (props.disabled || props.readonly || rangeError(next, props) || (props.required && !next))\n return;\n local.value = next;\n formError.value = false;\n emit('update:modelValue', next);\n emit('apply', next);\n disclosure.change(false);\n}\nfunction reset(cancelled: boolean) {\n if (!cancelled) {\n if (props.modelValue === undefined) local.value = props.defaultValue;\n formError.value = false;\n changeOpen(false);\n }\n}\nconst describedBy = computed(() =>\n outerError.value ? `${id}-error` : props.description ? `${id}-description` : undefined,\n);\n</script>\n<template>\n <div\n ref=\"root\"\n :class=\"[\n 'date-range',\n `date-range--${size}`,\n `date-range--${variant}`,\n !fullWidth && 'date-range--fit',\n hideLabel && 'date-range--label-hidden',\n triggerDisplay === 'icon' && 'date-range--icon-trigger',\n ]\"\n :dir=\"dir\"\n :data-disabled=\"disabled || undefined\"\n >\n <span :id=\"`${id}-label`\" class=\"date-range__label\"\n >{{ label }}<span v-if=\"required\" aria-hidden=\"true\"> *</span></span\n >\n <section\n v-if=\"display === 'inline'\"\n class=\"date-range__panel date-range__inline\"\n :aria-labelledby=\"`${id}-title`\"\n :dir=\"dir\"\n >\n <DateRangePanel\n :id=\"id\"\n :options=\"props\"\n :draft=\"draft\"\n :labels=\"labels\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n :required=\"required\"\n @draft=\"draft = $event\"\n @apply=\"apply\"\n @cancel=\"changeOpen(false)\"\n />\n </section>\n <PopoverRoot v-else :open=\"visible\" @update:open=\"changeOpen\"\n ><PopoverTrigger\n class=\"date-range__trigger\"\n :disabled=\"disabled\"\n :aria-labelledby=\"`${id}-label ${id}-value`\"\n :aria-describedby=\"describedBy\"\n :aria-invalid=\"outerError\"\n >\n <svg\n class=\"date-range__icon\"\n aria-hidden=\"true\"\n focusable=\"false\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.8\"\n stroke-linecap=\"round\"\n >\n <rect x=\"3\" y=\"5\" width=\"18\" height=\"16\" rx=\"2\" />\n <path d=\"M7 3v4m10-4v4M3 10h18\" /></svg\n ><span\n :id=\"`${id}-value`\"\n class=\"date-range__value\"\n :data-placeholder=\"!committed || undefined\"\n >{{ text }}</span\n ><ChevronIcon class=\"date-range__chevron\" /> </PopoverTrigger\n ><PopoverPortal\n ><PopoverContent\n as-child\n side=\"bottom\"\n align=\"start\"\n :side-offset=\"8\"\n :collision-padding=\"16\"\n ><div\n class=\"date-range__panel date-range__dialog\"\n :dir=\"dir\"\n :aria-labelledby=\"`${id}-title`\"\n >\n <DateRangePanel\n :id=\"id\"\n :options=\"props\"\n :draft=\"draft\"\n :labels=\"labels\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n :required=\"required\"\n @draft=\"draft = $event\"\n @apply=\"apply\"\n @cancel=\"changeOpen(false)\"\n /></div></PopoverContent></PopoverPortal\n ></PopoverRoot>\n <span v-if=\"description\" :id=\"`${id}-description`\" class=\"input__description\">{{\n description\n }}</span>\n <span v-if=\"outerError\" :id=\"`${id}-error`\" class=\"input__error\" role=\"alert\">{{\n errorMessage ?? (committedError ? labels[committedError] : labels.required)\n }}</span>\n <template v-if=\"name\"\n ><input\n type=\"hidden\"\n :name=\"`${name}.start`\"\n :value=\"committed?.start ?? ''\"\n :disabled=\"disabled\" /><input\n type=\"hidden\"\n :name=\"`${name}.end`\"\n :value=\"committed?.end ?? ''\"\n :disabled=\"disabled\"\n /></template>\n <SelectionValidation\n :has-value=\"!!committed && !committedError\"\n :required=\"required || !!committedError\"\n :disabled=\"disabled\"\n @invalid=\"\n formError = true;\n root?.querySelector<HTMLButtonElement>('.date-range__trigger')?.focus();\n \"\n @reset=\"reset\"\n />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref, watch } from 'vue';\nimport { PopoverRoot, PopoverTrigger, PopoverPortal, PopoverContent, useId } from 'reka-ui';\nimport ChevronIcon from './ChevronIcon.vue';\nimport DateRangePanel from './DateRangePanel.vue';\nimport SelectionValidation from './SelectionValidation.vue';\nimport {\n dateRangeLabels,\n rangeError,\n rangeText,\n type DateRange,\n type DateRangeOptions,\n} from './date-range-model.js';\nimport { useDisclosure } from './useDisclosure.js';\ndefineOptions({ inheritAttrs: false });\ninterface Props extends DateRangeOptions {\n modelValue?: DateRange | null;\n disabled?: boolean;\n readonly?: boolean;\n required?: boolean;\n invalid?: boolean;\n}\nconst props = withDefaults(defineProps<Props>(), {\n modelValue: undefined,\n defaultValue: null,\n size: 'md',\n variant: 'primary',\n fullWidth: true,\n locale: 'id-ID',\n dir: undefined,\n visibleMonths: 2,\n weekStartsOn: 1,\n display: 'popover',\n showInputs: true,\n showMonthYearPicker: false,\n triggerDisplay: 'text',\n presets: () => [],\n labels: undefined,\n formatRange: undefined,\n description: undefined,\n errorMessage: undefined,\n name: undefined,\n referenceDate: undefined,\n open: undefined,\n defaultOpen: false,\n minDate: undefined,\n maxDate: undefined,\n minDays: undefined,\n maxDays: undefined,\n isDateUnavailable: undefined,\n});\nconst emit = defineEmits<{\n 'update:modelValue': [value: DateRange | null];\n 'update:open': [open: boolean];\n apply: [value: DateRange | null];\n}>();\nconst local = ref<DateRange | null>(props.defaultValue);\nconst committed = computed(() => (props.modelValue !== undefined ? props.modelValue : local.value));\nconst draft = ref<DateRange>({ ...(committed.value ?? { start: '', end: '' }) });\nwatch(\n () => [committed.value?.start, committed.value?.end],\n () => {\n draft.value = { ...(committed.value ?? { start: '', end: '' }) };\n },\n);\nconst labels = computed(() => ({ ...dateRangeLabels(props.locale), ...props.labels }));\nconst id = useId(),\n root = ref<HTMLDivElement>(),\n formError = ref(false);\nconst disclosure = useDisclosure(props, (next) => emit('update:open', next));\nconst visible = computed(() => disclosure.visible.value && !props.disabled);\nfunction changeOpen(next: boolean) {\n if (next && props.disabled) return;\n draft.value = { ...(committed.value ?? { start: '', end: '' }) };\n disclosure.change(next);\n}\nconst committedError = computed(() => rangeError(committed.value, props));\nconst outerError = computed(() => props.invalid || !!committedError.value || formError.value);\nconst text = computed(() => {\n const value = committed.value;\n if (!value) return labels.value.placeholder;\n const preset = props.presets.find(\n (p) => p.value.start === value.start && p.value.end === value.end,\n );\n return (\n props.formatRange?.(value, props.locale) ?? preset?.label ?? rangeText(value, props.locale)\n );\n});\nfunction apply() {\n const next = draft.value.start || draft.value.end ? { ...draft.value } : null;\n if (props.disabled || props.readonly || rangeError(next, props) || (props.required && !next))\n return;\n local.value = next;\n formError.value = false;\n emit('update:modelValue', next);\n emit('apply', next);\n disclosure.change(false);\n}\nfunction reset(cancelled: boolean) {\n if (!cancelled) {\n if (props.modelValue === undefined) local.value = props.defaultValue;\n formError.value = false;\n changeOpen(false);\n }\n}\nconst describedBy = computed(() =>\n outerError.value ? `${id}-error` : props.description ? `${id}-description` : undefined,\n);\n</script>\n<template>\n <div\n ref=\"root\"\n :class=\"[\n 'date-range',\n `date-range--${size}`,\n `date-range--${variant}`,\n !fullWidth && 'date-range--fit',\n hideLabel && 'date-range--label-hidden',\n triggerDisplay === 'icon' && 'date-range--icon-trigger',\n ]\"\n :dir=\"dir\"\n :data-disabled=\"disabled || undefined\"\n >\n <span :id=\"`${id}-label`\" class=\"date-range__label\"\n >{{ label }}<span v-if=\"required\" aria-hidden=\"true\"> *</span></span\n >\n <section\n v-if=\"display === 'inline'\"\n class=\"date-range__panel date-range__inline\"\n :aria-labelledby=\"`${id}-title`\"\n :dir=\"dir\"\n >\n <DateRangePanel\n :id=\"id\"\n :options=\"props\"\n :draft=\"draft\"\n :labels=\"labels\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n :required=\"required\"\n @draft=\"draft = $event\"\n @apply=\"apply\"\n @cancel=\"changeOpen(false)\"\n />\n </section>\n <PopoverRoot v-else :open=\"visible\" @update:open=\"changeOpen\"\n ><PopoverTrigger\n class=\"date-range__trigger\"\n :disabled=\"disabled\"\n :aria-labelledby=\"`${id}-label ${id}-value`\"\n :aria-describedby=\"describedBy\"\n :aria-invalid=\"outerError\"\n >\n <svg\n class=\"date-range__icon\"\n aria-hidden=\"true\"\n focusable=\"false\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.8\"\n stroke-linecap=\"round\"\n >\n <rect x=\"3\" y=\"5\" width=\"18\" height=\"16\" rx=\"2\" />\n <path d=\"M7 3v4m10-4v4M3 10h18\" /></svg\n ><span\n :id=\"`${id}-value`\"\n class=\"date-range__value\"\n :data-placeholder=\"!committed || undefined\"\n >{{ text }}</span\n ><ChevronIcon class=\"date-range__chevron\" /> </PopoverTrigger\n ><PopoverPortal\n ><PopoverContent\n as-child\n side=\"bottom\"\n align=\"start\"\n :side-offset=\"8\"\n :collision-padding=\"16\"\n ><div\n class=\"date-range__panel date-range__dialog\"\n :dir=\"dir\"\n :aria-labelledby=\"`${id}-title`\"\n >\n <DateRangePanel\n :id=\"id\"\n :options=\"props\"\n :draft=\"draft\"\n :labels=\"labels\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n :required=\"required\"\n @draft=\"draft = $event\"\n @apply=\"apply\"\n @cancel=\"changeOpen(false)\"\n /></div></PopoverContent></PopoverPortal\n ></PopoverRoot>\n <span v-if=\"description\" :id=\"`${id}-description`\" class=\"input__description\">{{\n description\n }}</span>\n <span v-if=\"outerError\" :id=\"`${id}-error`\" class=\"input__error\" role=\"alert\">{{\n errorMessage ?? (committedError ? labels[committedError] : labels.required)\n }}</span>\n <template v-if=\"name\"\n ><input\n type=\"hidden\"\n :name=\"`${name}.start`\"\n :value=\"committed?.start ?? ''\"\n :disabled=\"disabled\" /><input\n type=\"hidden\"\n :name=\"`${name}.end`\"\n :value=\"committed?.end ?? ''\"\n :disabled=\"disabled\"\n /></template>\n <SelectionValidation\n :has-value=\"!!committed && !committedError\"\n :required=\"required || !!committedError\"\n :disabled=\"disabled\"\n @invalid=\"\n formError = true;\n root?.querySelector<HTMLButtonElement>('.date-range__trigger')?.focus();\n \"\n @reset=\"reset\"\n />\n </div>\n</template>\n"],"mappings":"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"}