@idds/vue 1.5.3 → 1.5.6

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.es.js","sources":["../../styles/src/tailwind/ts/idds.ts","../../styles/src/tailwind/ts/inagov.ts","../../styles/src/tailwind/ts/inaku.ts","../../styles/src/tailwind/ts/inapas.ts","../../styles/src/tailwind/ts/bgn.ts","../../styles/src/tailwind/ts/bkn.ts","../../styles/src/tailwind/ts/lan.ts","../../styles/src/tailwind/ts/panrb.ts","../../styles/src/tailwind/ts/default.ts","../src/components/Accordion.vue","../src/components/AccordionCard.vue","../src/components/AccordionGroup.vue","../src/components/ActionDropdown.vue","../node_modules/@tabler/icons-vue/dist/esm/defaultAttributes.mjs","../node_modules/@tabler/icons-vue/dist/esm/createVueComponent.mjs","../node_modules/@tabler/icons-vue/dist/esm/icons/IconAlertCircle.mjs","../node_modules/@tabler/icons-vue/dist/esm/icons/IconAlertTriangle.mjs","../node_modules/@tabler/icons-vue/dist/esm/icons/IconArrowNarrowDown.mjs","../node_modules/@tabler/icons-vue/dist/esm/icons/IconArrowNarrowUp.mjs","../node_modules/@tabler/icons-vue/dist/esm/icons/IconCalendar.mjs","../node_modules/@tabler/icons-vue/dist/esm/icons/IconCheck.mjs","../node_modules/@tabler/icons-vue/dist/esm/icons/IconChevronDown.mjs","../node_modules/@tabler/icons-vue/dist/esm/icons/IconChevronLeft.mjs","../node_modules/@tabler/icons-vue/dist/esm/icons/IconChevronRight.mjs","../node_modules/@tabler/icons-vue/dist/esm/icons/IconChevronUp.mjs","../node_modules/@tabler/icons-vue/dist/esm/icons/IconCircleCheck.mjs","../node_modules/@tabler/icons-vue/dist/esm/icons/IconCircleX.mjs","../node_modules/@tabler/icons-vue/dist/esm/icons/IconClock.mjs","../node_modules/@tabler/icons-vue/dist/esm/icons/IconCube3dSphere.mjs","../node_modules/@tabler/icons-vue/dist/esm/icons/IconFileTypePdf.mjs","../node_modules/@tabler/icons-vue/dist/esm/icons/IconFile.mjs","../node_modules/@tabler/icons-vue/dist/esm/icons/IconInfoCircle.mjs","../node_modules/@tabler/icons-vue/dist/esm/icons/IconLoader2.mjs","../node_modules/@tabler/icons-vue/dist/esm/icons/IconMoon.mjs","../node_modules/@tabler/icons-vue/dist/esm/icons/IconPhoto.mjs","../node_modules/@tabler/icons-vue/dist/esm/icons/IconRotateClockwise.mjs","../node_modules/@tabler/icons-vue/dist/esm/icons/IconSun.mjs","../node_modules/@tabler/icons-vue/dist/esm/icons/IconTrash.mjs","../node_modules/@tabler/icons-vue/dist/esm/icons/IconUpload.mjs","../node_modules/@tabler/icons-vue/dist/esm/icons/IconX.mjs","../src/components/Alert.vue","../src/components/Avatar.vue","../src/components/Badge.vue","../src/components/BottomSheet.vue","../src/components/Breadcrumb.vue","../src/components/Button.vue","../src/components/ButtonGroup.vue","../src/components/Card.vue","../src/components/Checkbox.vue","../src/utils/security.ts","../src/components/TextField.vue","../src/components/Chip.vue","../src/components/CircleProgressBar.vue","../src/components/Collapse.vue","../src/components/Divider.vue","../src/components/Dropdown.vue","../src/components/FieldInputTable.vue","../src/utils/fileValidation.ts","../src/components/FileUpload.vue","../src/components/InputSearch.vue","../src/components/Modal.vue","../node_modules/clsx/dist/clsx.mjs","../src/components/MonthPicker.vue","../src/components/MultipleChoiceGrid.vue","../src/components/Pagination.vue","../src/components/PasswordInput.vue","../src/utils/countries.ts","../src/components/PhoneInput.vue","../src/components/ProgressBar.vue","../src/components/LinearProgressIndicator.vue","../src/components/RadioInput.vue","../src/components/YearPicker.vue","../src/components/DatePicker.vue","../src/components/SelectDropdown.vue","../src/components/Drawer.vue","../src/components/Skeleton.vue","../src/components/Spinner.vue","../src/components/Stepper.vue","../src/components/TabHorizontal.vue","../src/components/TabVertical.vue","../src/components/TableProgressBar.vue","../src/components/Table.vue","../src/components/TextArea.vue","../src/components/OneTimePassword.vue","../src/components/ThemeToggle.vue","../src/components/TimePicker.vue","../src/components/Toast.vue","../src/composables/useToast.ts","../src/components/ToastProvider.vue","../src/composables/useConfirmation.ts","../src/components/ConfirmationProvider.vue","../src/components/Toggle.vue","../src/components/Tooltip.vue","../src/themes/index.ts","../src/components/SingleFileUpload.vue","../src/index.ts"],"sourcesContent":["/**\n * INA Digital Color Tokens for Tailwind CSS v3\n *\n * This file provides color tokens that reference CSS custom properties\n * from @idds/styles. Use these tokens in your tailwind.config.js:\n *\n * @example\n * ```js\n * import iddsColorTokens from '@idds/styles/tailwind/ts/idds';\n *\n * export default {\n * theme: {\n * extend: {\n * colors: iddsColorTokens,\n * },\n * },\n * };\n * ```\n *\n * Then you can use classes like: text-neutral-500, bg-blue-500, etc.\n */\n\nconst iddsColorTokens: Record<string, string> = {\n // Neutral Colors\n 'neutral-25': 'var(--ina-neutral-25)',\n 'neutral-50': 'var(--ina-neutral-50)',\n 'neutral-100': 'var(--ina-neutral-100)',\n 'neutral-200': 'var(--ina-neutral-200)',\n 'neutral-300': 'var(--ina-neutral-300)',\n 'neutral-400': 'var(--ina-neutral-400)',\n 'neutral-500': 'var(--ina-neutral-500)',\n 'neutral-600': 'var(--ina-neutral-600)',\n 'neutral-700': 'var(--ina-neutral-700)',\n 'neutral-800': 'var(--ina-neutral-800)',\n 'neutral-900': 'var(--ina-neutral-900)',\n 'neutral-1000': 'var(--ina-neutral-1000)',\n\n // Blue Colors\n 'blue-50': 'var(--ina-blue-50)',\n 'blue-100': 'var(--ina-blue-100)',\n 'blue-200': 'var(--ina-blue-200)',\n 'blue-300': 'var(--ina-blue-300)',\n 'blue-400': 'var(--ina-blue-400)',\n 'blue-500': 'var(--ina-blue-500)',\n 'blue-600': 'var(--ina-blue-600)',\n 'blue-700': 'var(--ina-blue-700)',\n 'blue-800': 'var(--ina-blue-800)',\n 'blue-900': 'var(--ina-blue-900)',\n\n // Cyan Colors\n 'cyan-50': 'var(--ina-cyan-50)',\n 'cyan-100': 'var(--ina-cyan-100)',\n 'cyan-200': 'var(--ina-cyan-200)',\n 'cyan-300': 'var(--ina-cyan-300)',\n 'cyan-400': 'var(--ina-cyan-400)',\n 'cyan-500': 'var(--ina-cyan-500)',\n 'cyan-600': 'var(--ina-cyan-600)',\n 'cyan-700': 'var(--ina-cyan-700)',\n 'cyan-800': 'var(--ina-cyan-800)',\n 'cyan-900': 'var(--ina-cyan-900)',\n\n // Green Colors\n 'green-50': 'var(--ina-green-50)',\n 'green-100': 'var(--ina-green-100)',\n 'green-200': 'var(--ina-green-200)',\n 'green-300': 'var(--ina-green-300)',\n 'green-400': 'var(--ina-green-400)',\n 'green-500': 'var(--ina-green-500)',\n 'green-600': 'var(--ina-green-600)',\n 'green-700': 'var(--ina-green-700)',\n 'green-800': 'var(--ina-green-800)',\n 'green-900': 'var(--ina-green-900)',\n\n // Lime Colors\n 'lime-50': 'var(--ina-lime-50)',\n 'lime-100': 'var(--ina-lime-100)',\n 'lime-200': 'var(--ina-lime-200)',\n 'lime-300': 'var(--ina-lime-300)',\n 'lime-400': 'var(--ina-lime-400)',\n 'lime-500': 'var(--ina-lime-500)',\n 'lime-600': 'var(--ina-lime-600)',\n 'lime-700': 'var(--ina-lime-700)',\n 'lime-800': 'var(--ina-lime-800)',\n 'lime-900': 'var(--ina-lime-900)',\n\n // Yellow Colors\n 'yellow-50': 'var(--ina-yellow-50)',\n 'yellow-100': 'var(--ina-yellow-100)',\n 'yellow-200': 'var(--ina-yellow-200)',\n 'yellow-300': 'var(--ina-yellow-300)',\n 'yellow-400': 'var(--ina-yellow-400)',\n 'yellow-500': 'var(--ina-yellow-500)',\n 'yellow-600': 'var(--ina-yellow-600)',\n 'yellow-700': 'var(--ina-yellow-700)',\n 'yellow-800': 'var(--ina-yellow-800)',\n 'yellow-900': 'var(--ina-yellow-900)',\n\n // Orange Colors\n 'orange-50': 'var(--ina-orange-50)',\n 'orange-100': 'var(--ina-orange-100)',\n 'orange-200': 'var(--ina-orange-200)',\n 'orange-300': 'var(--ina-orange-300)',\n 'orange-400': 'var(--ina-orange-400)',\n 'orange-500': 'var(--ina-orange-500)',\n 'orange-600': 'var(--ina-orange-600)',\n 'orange-700': 'var(--ina-orange-700)',\n 'orange-800': 'var(--ina-orange-800)',\n 'orange-900': 'var(--ina-orange-900)',\n\n // Red Colors\n 'red-50': 'var(--ina-red-50)',\n 'red-100': 'var(--ina-red-100)',\n 'red-200': 'var(--ina-red-200)',\n 'red-300': 'var(--ina-red-300)',\n 'red-400': 'var(--ina-red-400)',\n 'red-500': 'var(--ina-red-500)',\n 'red-600': 'var(--ina-red-600)',\n 'red-700': 'var(--ina-red-700)',\n 'red-800': 'var(--ina-red-800)',\n 'red-900': 'var(--ina-red-900)',\n\n // Pink Colors\n 'pink-50': 'var(--ina-pink-50)',\n 'pink-100': 'var(--ina-pink-100)',\n 'pink-200': 'var(--ina-pink-200)',\n 'pink-300': 'var(--ina-pink-300)',\n 'pink-400': 'var(--ina-pink-400)',\n 'pink-500': 'var(--ina-pink-500)',\n 'pink-600': 'var(--ina-pink-600)',\n 'pink-700': 'var(--ina-pink-700)',\n 'pink-800': 'var(--ina-pink-800)',\n 'pink-900': 'var(--ina-pink-900)',\n\n // Magenta Colors\n 'magenta-50': 'var(--ina-magenta-50)',\n 'magenta-100': 'var(--ina-magenta-100)',\n 'magenta-200': 'var(--ina-magenta-200)',\n 'magenta-300': 'var(--ina-magenta-300)',\n 'magenta-400': 'var(--ina-magenta-400)',\n 'magenta-500': 'var(--ina-magenta-500)',\n 'magenta-600': 'var(--ina-magenta-600)',\n 'magenta-700': 'var(--ina-magenta-700)',\n 'magenta-800': 'var(--ina-magenta-800)',\n 'magenta-900': 'var(--ina-magenta-900)',\n\n // Purple Colors\n 'purple-50': 'var(--ina-purple-50)',\n 'purple-100': 'var(--ina-purple-100)',\n 'purple-200': 'var(--ina-purple-200)',\n 'purple-300': 'var(--ina-purple-300)',\n 'purple-400': 'var(--ina-purple-400)',\n 'purple-500': 'var(--ina-purple-500)',\n 'purple-600': 'var(--ina-purple-600)',\n 'purple-700': 'var(--ina-purple-700)',\n 'purple-800': 'var(--ina-purple-800)',\n 'purple-900': 'var(--ina-purple-900)',\n\n // Indigo Colors\n 'indigo-50': 'var(--ina-indigo-50)',\n 'indigo-100': 'var(--ina-indigo-100)',\n 'indigo-200': 'var(--ina-indigo-200)',\n 'indigo-300': 'var(--ina-indigo-300)',\n 'indigo-400': 'var(--ina-indigo-400)',\n 'indigo-500': 'var(--ina-indigo-500)',\n 'indigo-600': 'var(--ina-indigo-600)',\n 'indigo-700': 'var(--ina-indigo-700)',\n 'indigo-800': 'var(--ina-indigo-800)',\n 'indigo-900': 'var(--ina-indigo-900)',\n\n // Product Colors (Background, Content, Stroke, Guide, Negative, Positive, Warning)\n 'background-primary': 'var(--ina-background-primary)',\n 'background-secondary': 'var(--ina-background-secondary)',\n 'background-tertiary': 'var(--ina-background-tertiary)',\n 'background-overlay': 'var(--ina-background-overlay)',\n\n 'content-primary': 'var(--ina-content-primary)',\n 'content-secondary': 'var(--ina-content-secondary)',\n 'content-tertiary': 'var(--ina-content-tertiary)',\n 'content-guide': 'var(--ina-content-guide)',\n 'content-negative': 'var(--ina-content-negative)',\n 'content-positive': 'var(--ina-content-positive)',\n\n 'stroke-primary': 'var(--ina-stroke-primary)',\n 'stroke-secondary': 'var(--ina-stroke-secondary)',\n 'stroke-tertiary': 'var(--ina-stroke-tertiary)',\n\n // Guide Colors (alias for blue)\n 'guide-50': 'var(--ina-guide-50)',\n 'guide-100': 'var(--ina-guide-100)',\n 'guide-200': 'var(--ina-guide-200)',\n 'guide-300': 'var(--ina-guide-300)',\n 'guide-400': 'var(--ina-guide-400)',\n 'guide-500': 'var(--ina-guide-500)',\n 'guide-600': 'var(--ina-guide-600)',\n 'guide-700': 'var(--ina-guide-700)',\n 'guide-800': 'var(--ina-guide-800)',\n 'guide-900': 'var(--ina-guide-900)',\n\n // Negative Colors (alias for red)\n 'negative-50': 'var(--ina-negative-50)',\n 'negative-100': 'var(--ina-negative-100)',\n 'negative-200': 'var(--ina-negative-200)',\n 'negative-300': 'var(--ina-negative-300)',\n 'negative-400': 'var(--ina-negative-400)',\n 'negative-500': 'var(--ina-negative-500)',\n 'negative-600': 'var(--ina-negative-600)',\n 'negative-700': 'var(--ina-negative-700)',\n 'negative-800': 'var(--ina-negative-800)',\n 'negative-900': 'var(--ina-negative-900)',\n\n // Positive Colors (alias for green)\n 'positive-50': 'var(--ina-positive-50)',\n 'positive-100': 'var(--ina-positive-100)',\n 'positive-200': 'var(--ina-positive-200)',\n 'positive-300': 'var(--ina-positive-300)',\n 'positive-400': 'var(--ina-positive-400)',\n 'positive-500': 'var(--ina-positive-500)',\n 'positive-600': 'var(--ina-positive-600)',\n 'positive-700': 'var(--ina-positive-700)',\n 'positive-800': 'var(--ina-positive-800)',\n 'positive-900': 'var(--ina-positive-900)',\n\n // Warning Colors (alias for orange)\n 'warning-50': 'var(--ina-warning-50)',\n 'warning-100': 'var(--ina-warning-100)',\n 'warning-200': 'var(--ina-warning-200)',\n 'warning-300': 'var(--ina-warning-300)',\n 'warning-400': 'var(--ina-warning-400)',\n 'warning-500': 'var(--ina-warning-500)',\n 'warning-600': 'var(--ina-warning-600)',\n 'warning-700': 'var(--ina-warning-700)',\n 'warning-800': 'var(--ina-warning-800)',\n 'warning-900': 'var(--ina-warning-900)',\n\n // Base Colors\n white: 'var(--ina-white)',\n black: 'var(--ina-black)',\n};\n\nexport default iddsColorTokens;\n","/**\n * InaGov Color Tokens for Tailwind CSS v3\n * Government Services Theme\n */\n\nconst inagovColorTokens: Record<string, string> = {\n // Primary shades\n 'primary-25': 'var(--ina-primary-25)',\n 'primary-50': 'var(--ina-primary-50)',\n 'primary-100': 'var(--ina-primary-100)',\n 'primary-200': 'var(--ina-primary-200)',\n 'primary-300': 'var(--ina-primary-300)',\n 'primary-400': 'var(--ina-primary-400)',\n 'primary-500': 'var(--ina-primary-500)',\n 'primary-600': 'var(--ina-primary-600)',\n 'primary-700': 'var(--ina-primary-700)',\n 'primary-800': 'var(--ina-primary-800)',\n 'primary-900': 'var(--ina-primary-900)',\n 'primary-primary': 'var(--ina-primary-primary)',\n\n // Secondary/Accent colors\n 'accent-100': 'var(--ina-accent-100)',\n 'accent-200': 'var(--ina-accent-200)',\n 'accent-300': 'var(--ina-accent-300)',\n 'accent-400': 'var(--ina-accent-400)',\n 'accent-500': 'var(--ina-accent-500)',\n 'accent-600': 'var(--ina-accent-600)',\n 'accent-700': 'var(--ina-accent-700)',\n\n // Interactive hover\n 'brand-hover': 'var(--ina-brand-hover)',\n 'neutral-hover': 'var(--ina-neutral-hover)',\n};\n\nexport default inagovColorTokens;\n","/**\n * InaKu Color Tokens for Tailwind CSS v3\n * Citizen Services Theme\n */\n\nconst inakuColorTokens: Record<string, string> = {\n // Primary shades\n 'primary-25': 'var(--ina-primary-25)',\n 'primary-50': 'var(--ina-primary-50)',\n 'primary-100': 'var(--ina-primary-100)',\n 'primary-200': 'var(--ina-primary-200)',\n 'primary-300': 'var(--ina-primary-300)',\n 'primary-400': 'var(--ina-primary-400)',\n 'primary-500': 'var(--ina-primary-500)',\n 'primary-600': 'var(--ina-primary-600)',\n 'primary-700': 'var(--ina-primary-700)',\n 'primary-800': 'var(--ina-primary-800)',\n 'primary-900': 'var(--ina-primary-900)',\n 'primary-primary': 'var(--ina-primary-primary)',\n\n // Secondary/Accent colors\n 'accent-100': 'var(--ina-accent-100)',\n 'accent-200': 'var(--ina-accent-200)',\n 'accent-300': 'var(--ina-accent-300)',\n 'accent-400': 'var(--ina-accent-400)',\n 'accent-500': 'var(--ina-accent-500)',\n 'accent-600': 'var(--ina-accent-600)',\n 'accent-700': 'var(--ina-accent-700)',\n\n // Interactive hover\n 'inaku-brand-hover': 'var(--ina-inaku-brand-hover)',\n 'inaku-neutral-hover': 'var(--ina-inaku-neutral-hover)',\n};\n\nexport default inakuColorTokens;\n","/**\n * InaPas Color Tokens for Tailwind CSS v3\n * Passport & Immigration Services Theme\n */\n\nconst inapasColorTokens: Record<string, string> = {\n // Primary shades\n 'primary-25': 'var(--ina-primary-25)',\n 'primary-50': 'var(--ina-primary-50)',\n 'primary-100': 'var(--ina-primary-100)',\n 'primary-200': 'var(--ina-primary-200)',\n 'primary-300': 'var(--ina-primary-300)',\n 'primary-400': 'var(--ina-primary-400)',\n 'primary-500': 'var(--ina-primary-500)',\n 'primary-600': 'var(--ina-primary-600)',\n 'primary-700': 'var(--ina-primary-700)',\n 'primary-800': 'var(--ina-primary-800)',\n 'primary-900': 'var(--ina-primary-900)',\n 'primary-primary': 'var(--ina-primary-primary)',\n\n // Accent colors\n 'accent-100': 'var(--ina-accent-100)',\n 'accent-200': 'var(--ina-accent-200)',\n 'accent-300': 'var(--ina-accent-300)',\n 'accent-400': 'var(--ina-accent-400)',\n 'accent-500': 'var(--ina-accent-500)',\n 'accent-600': 'var(--ina-accent-600)',\n 'accent-700': 'var(--ina-accent-700)',\n\n // Interactive hover\n 'inapas-brand-hover': 'var(--ina-inapas-brand-hover)',\n 'inapas-neutral-hover': 'var(--ina-inapas-neutral-hover)',\n};\n\nexport default inapasColorTokens;\n","/**\n * BGN Color Tokens for Tailwind CSS v3\n * Banking & Financial Services Theme\n */\n\nconst bgnColorTokens: Record<string, string> = {\n // Primary shades\n 'primary-50': 'var(--ina-primary-50)',\n 'primary-100': 'var(--ina-primary-100)',\n 'primary-200': 'var(--ina-primary-200)',\n 'primary-300': 'var(--ina-primary-300)',\n 'primary-400': 'var(--ina-primary-400)',\n 'primary-500': 'var(--ina-primary-500)',\n 'primary-600': 'var(--ina-primary-600)',\n 'primary-700': 'var(--ina-primary-700)',\n 'primary-800': 'var(--ina-primary-800)',\n 'primary-900': 'var(--ina-primary-900)',\n 'primary-primary': 'var(--ina-primary-primary)',\n};\n\nexport default bgnColorTokens;\n","/**\n * BKN Color Tokens for Tailwind CSS v3\n * Badan Kepegawaian Negara Theme\n */\n\nconst bknColorTokens: Record<string, string> = {\n // Primary shades\n 'primary-25': 'var(--ina-primary-25)',\n 'primary-50': 'var(--ina-primary-50)',\n 'primary-100': 'var(--ina-primary-100)',\n 'primary-200': 'var(--ina-primary-200)',\n 'primary-300': 'var(--ina-primary-300)',\n 'primary-400': 'var(--ina-primary-400)',\n 'primary-500': 'var(--ina-primary-500)',\n 'primary-600': 'var(--ina-primary-600)',\n 'primary-700': 'var(--ina-primary-700)',\n 'primary-800': 'var(--ina-primary-800)',\n 'primary-900': 'var(--ina-primary-900)',\n 'primary-primary': 'var(--ina-primary-primary)',\n\n // Secondary shades\n 'secondary-25': 'var(--ina-secondary-25)',\n 'secondary-50': 'var(--ina-secondary-50)',\n 'secondary-100': 'var(--ina-secondary-100)',\n 'secondary-200': 'var(--ina-secondary-200)',\n 'secondary-300': 'var(--ina-secondary-300)',\n 'secondary-400': 'var(--ina-secondary-400)',\n 'secondary-500': 'var(--ina-secondary-500)',\n 'secondary-600': 'var(--ina-secondary-600)',\n 'secondary-700': 'var(--ina-secondary-700)',\n 'secondary-800': 'var(--ina-secondary-800)',\n 'secondary-900': 'var(--ina-secondary-900)',\n\n // Interactive hover\n 'bkn-brand-hover': 'var(--ina-bkn-brand-hover)',\n 'bkn-neutral-hover': 'var(--ina-bkn-neutral-hover)',\n};\n\nexport default bknColorTokens;\n","/**\n * LAN Color Tokens for Tailwind CSS v3\n * Local Area Network Theme\n */\n\nconst lanColorTokens: Record<string, string> = {\n // Primary shades\n 'primary-25': 'var(--ina-primary-25)',\n 'primary-50': 'var(--ina-primary-50)',\n 'primary-100': 'var(--ina-primary-100)',\n 'primary-200': 'var(--ina-primary-200)',\n 'primary-300': 'var(--ina-primary-300)',\n 'primary-400': 'var(--ina-primary-400)',\n 'primary-500': 'var(--ina-primary-500)',\n 'primary-600': 'var(--ina-primary-600)',\n 'primary-700': 'var(--ina-primary-700)',\n 'primary-800': 'var(--ina-primary-800)',\n 'primary-900': 'var(--ina-primary-900)',\n 'primary-primary': 'var(--ina-primary-primary)',\n\n // Secondary shades\n 'secondary-25': 'var(--ina-secondary-25)',\n 'secondary-50': 'var(--ina-secondary-50)',\n 'secondary-100': 'var(--ina-secondary-100)',\n 'secondary-200': 'var(--ina-secondary-200)',\n 'secondary-300': 'var(--ina-secondary-300)',\n 'secondary-400': 'var(--ina-secondary-400)',\n 'secondary-500': 'var(--ina-secondary-500)',\n 'secondary-600': 'var(--ina-secondary-600)',\n 'secondary-700': 'var(--ina-secondary-700)',\n 'secondary-800': 'var(--ina-secondary-800)',\n 'secondary-900': 'var(--ina-secondary-900)',\n\n // Accent colors\n 'accent-red': 'var(--ina-accent-red)',\n 'accent-green': 'var(--ina-accent-green)',\n 'accent-blue': 'var(--ina-accent-blue)',\n 'accent-orange': 'var(--ina-accent-orange)',\n\n // Interactive hover\n 'lan-brand-hover': 'var(--ina-lan-brand-hover)',\n 'lan-neutral-hover': 'var(--ina-lan-neutral-hover)',\n};\n\nexport default lanColorTokens;\n","/**\n * PANRB Color Tokens for Tailwind CSS v3\n */\n\nconst panrbColorTokens: Record<string, string> = {\n // Primary shades\n 'primary-25': 'var(--ina-primary-25)',\n 'primary-50': 'var(--ina-primary-50)',\n 'primary-100': 'var(--ina-primary-100)',\n 'primary-200': 'var(--ina-primary-200)',\n 'primary-300': 'var(--ina-primary-300)',\n 'primary-400': 'var(--ina-primary-400)',\n 'primary-500': 'var(--ina-primary-500)',\n 'primary-600': 'var(--ina-primary-600)',\n 'primary-700': 'var(--ina-primary-700)',\n 'primary-800': 'var(--ina-primary-800)',\n 'primary-900': 'var(--ina-primary-900)',\n 'primary-primary': 'var(--ina-primary-primary)',\n\n // Secondary shades\n 'secondary-25': 'var(--ina-secondary-25)',\n 'secondary-50': 'var(--ina-secondary-50)',\n 'secondary-100': 'var(--ina-secondary-100)',\n 'secondary-200': 'var(--ina-secondary-200)',\n 'secondary-300': 'var(--ina-secondary-300)',\n 'secondary-400': 'var(--ina-secondary-400)',\n 'secondary-500': 'var(--ina-secondary-500)',\n 'secondary-600': 'var(--ina-secondary-600)',\n 'secondary-700': 'var(--ina-secondary-700)',\n 'secondary-800': 'var(--ina-secondary-800)',\n 'secondary-900': 'var(--ina-secondary-900)',\n\n // Accent colors\n 'accent-yellow': 'var(--ina-accent-yellow)',\n};\n\nexport default panrbColorTokens;\n","/**\n * Default Color Tokens for Tailwind CSS v3\n * Default Theme\n */\n\nconst defaultColorTokens: Record<string, string> = {\n // Primary shades\n 'primary-25': 'var(--ina-neutral-25)',\n 'primary-50': 'var(--ina-neutral-50)',\n 'primary-100': 'var(--ina-neutral-100)',\n 'primary-200': 'var(--ina-neutral-200)',\n 'primary-300': 'var(--ina-neutral-300)',\n 'primary-400': 'var(--ina-neutral-400)',\n 'primary-500': 'var(--ina-neutral-500)',\n 'primary-600': 'var(--ina-neutral-600)',\n 'primary-700': 'var(--ina-neutral-700)',\n 'primary-800': 'var(--ina-neutral-800)',\n 'primary-900': 'var(--ina-neutral-900)',\n 'primary-primary': 'var(--ina-neutral-900)',\n\n // Secondary shades\n 'secondary-25': '#f2f9fd',\n 'secondary-50': '#e3f0fb',\n 'secondary-100': '#c1e3f6',\n 'secondary-200': '#8accef',\n 'secondary-300': '#4cb2e4',\n 'secondary-400': '#269dd8',\n 'secondary-500': '#177ab2',\n 'secondary-600': '#146190',\n 'secondary-700': '#145378',\n 'secondary-800': '#164564',\n 'secondary-900': '#0f2d42',\n};\n\nexport default defaultColorTokens;\n","<template>\n <div class=\"ina-accordion\" :class=\"accordionClasses\">\n <button\n :id=\"headerId\"\n type=\"button\"\n class=\"ina-accordion__toggle\"\n :aria-expanded=\"isOpen\"\n :aria-controls=\"contentId\"\n :disabled=\"disabled\"\n @click=\"handleToggle\"\n >\n <div class=\"ina-accordion__title\">\n <slot name=\"title\">{{ title }}</slot>\n </div>\n\n <div class=\"ina-accordion__toggler\">\n <svg\n class=\"ina-accordion__icon\"\n :class=\"{ 'ina-accordion__icon--open': isOpen }\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M6 9L12 15L18 9\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </div>\n </button>\n\n <div\n :id=\"contentId\"\n class=\"ina-accordion__content\"\n :class=\"{ 'ina-accordion__content--open': isOpen }\"\n :aria-labelledby=\"headerId\"\n >\n <div class=\"ina-accordion__body\">\n <slot />\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, watch, inject, onMounted, onUnmounted } from 'vue';\nimport type { AccordionItem } from './types';\n\nexport interface AccordionProps {\n /**\n * Judul atau header yang selalu muncul.\n * Bisa berupa teks atau slot dengan nama \"title\".\n */\n title?: string;\n\n /**\n * Konten body yang muncul saat accordion dalam keadaan terbuka.\n */\n children?: any;\n\n /**\n * Apakah accordion terbuka secara default.\n */\n defaultOpen?: boolean;\n\n /**\n * Apakah accordion dalam mode controlled.\n * Jika true, state dikontrol oleh parent (AccordionGroup).\n */\n open?: boolean;\n\n /**\n * Callback ketika accordion di-toggle.\n */\n onToggle?: (isOpen: boolean) => void;\n\n /**\n * Apakah accordion disabled.\n */\n disabled?: boolean;\n}\n\nconst props = withDefaults(defineProps<AccordionProps>(), {\n title: '',\n defaultOpen: false,\n open: undefined,\n disabled: false,\n});\n\nconst emit = defineEmits<{\n toggle: [isOpen: boolean];\n}>();\n\n// Inject accordion group context jika ada\nconst accordionGroup = inject<{\n multiple: boolean;\n multipleOpen: boolean;\n registerItem: (item: AccordionItem) => number;\n unregisterItem: (item: AccordionItem) => void;\n handleItemToggle: (index: number, isOpen: boolean) => void;\n isItemOpen: (index: number) => boolean;\n getItemIndex: (itemId: string) => number;\n openIndexes?: { value: number[] };\n} | null>('accordionGroup', null);\n\n// Generate unique ID for this accordion instance\nconst itemId = ref(\n `accordion-${\n crypto.randomUUID?.() || Math.random().toString(36).substr(2, 9)\n }`\n);\nconst itemIndex = ref(-1);\nconst internalOpen = ref(props.defaultOpen);\n\n// Check apakah dalam group\nconst isInGroup = computed(() => accordionGroup !== null);\nconst isControlled = computed(\n () => props.open !== undefined || isInGroup.value\n);\n\n// Get open state\nconst isOpen = computed(() => {\n if (isInGroup.value && itemIndex.value >= 0) {\n // Access openIndexes untuk memastikan reactivity\n if (accordionGroup!.openIndexes) {\n // Trigger reactivity dengan mengakses value - ini akan membuat computed re-evaluate ketika openIndexes berubah\n accordionGroup!.openIndexes.value;\n }\n // isItemOpen adalah function yang mengakses openIndexes.value, jadi akan reactive\n return accordionGroup!.isItemOpen(itemIndex.value);\n }\n if (props.open !== undefined) {\n return props.open;\n }\n return internalOpen.value;\n});\n\n// Generate unique IDs\nconst headerId = computed(() => `accordion-header-${itemId.value}`);\nconst contentId = computed(() => `accordion-content-${itemId.value}`);\n\nconst accordionClasses = computed(() => {\n const classes = ['ina-accordion'];\n\n if (props.disabled) {\n classes.push('ina-accordion--disabled');\n }\n\n if (isOpen.value) {\n classes.push('ina-accordion--open');\n }\n\n return classes;\n});\n\nconst handleToggle = (event?: Event) => {\n if (props.disabled) return;\n\n // Prevent event propagation\n if (event) {\n event.stopPropagation();\n }\n\n const currentState = isOpen.value;\n const next = !currentState;\n\n if (isInGroup.value && itemIndex.value >= 0) {\n // Dalam group, gunakan group handler\n accordionGroup!.handleItemToggle(itemIndex.value, next);\n } else if (props.open !== undefined) {\n // Controlled mode dengan prop open - state dikelola oleh parent\n // Hanya emit event, tidak update internal state\n emit('toggle', next);\n props.onToggle?.(next);\n } else {\n // Uncontrolled mode atau dalam group tapi belum ter-register, update internal state\n internalOpen.value = next;\n emit('toggle', next);\n props.onToggle?.(next);\n }\n};\n\n// Register dengan group jika ada\nonMounted(() => {\n if (isInGroup.value) {\n const item: AccordionItem = {\n id: itemId.value,\n defaultOpen: props.defaultOpen,\n };\n itemIndex.value = accordionGroup!.registerItem(item);\n }\n});\n\n// Unregister dari group saat unmount\nonUnmounted(() => {\n if (isInGroup.value) {\n const item: AccordionItem = {\n id: itemId.value,\n defaultOpen: props.defaultOpen,\n };\n accordionGroup!.unregisterItem(item);\n itemIndex.value = -1;\n }\n});\n\n// Watch untuk sync controlled state\nwatch(\n () => props.open,\n (newValue) => {\n if (isControlled.value && newValue !== undefined) {\n // Controlled mode - state dikelola oleh parent\n }\n }\n);\n</script>\n","<template>\n <div class=\"ina-accordion-card\" :class=\"cardClasses\">\n <div class=\"ina-accordion-card__item\">\n <button\n :id=\"headerId\"\n type=\"button\"\n class=\"ina-accordion-card__header\"\n :aria-expanded=\"isOpen\"\n :aria-controls=\"contentId\"\n @click=\"toggle\"\n >\n <div class=\"ina-accordion-card__header-content\">\n <div v-if=\"icon\" class=\"ina-accordion-card__icon\">\n <component :is=\"icon\" :size=\"20\" />\n </div>\n\n <div class=\"ina-accordion-card__title-section\">\n <h3 class=\"ina-accordion-card__title\">\n <slot name=\"title\">{{ title }}</slot>\n </h3>\n <p v-if=\"subtitle\" class=\"ina-accordion-card__subtitle\">\n {{ subtitle }}\n </p>\n </div>\n </div>\n\n <svg\n class=\"ina-accordion-card__chevron\"\n :class=\"{ 'ina-accordion-card__chevron--open': isOpen }\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M6 9L12 15L18 9\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n\n <Transition name=\"accordion\">\n <div\n v-if=\"isOpen\"\n :id=\"contentId\"\n class=\"ina-accordion-card__content\"\n :aria-labelledby=\"headerId\"\n >\n <div class=\"ina-accordion-card__body\">\n <slot />\n </div>\n </div>\n </Transition>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport type { Component } from 'vue';\nexport interface AccordionCardProps {\n title?: string;\n subtitle?: string;\n icon?: Component;\n defaultOpen?: boolean;\n variant?: 'default' | 'bordered' | 'filled';\n size?: 'sm' | 'md' | 'lg';\n disabled?: boolean;\n}\n\nconst props = withDefaults(defineProps<AccordionCardProps>(), {\n title: '',\n subtitle: '',\n defaultOpen: false,\n variant: 'default',\n size: 'md',\n disabled: false,\n});\n\nconst emit = defineEmits<{\n toggle: [isOpen: boolean];\n}>();\n\nconst isOpen = ref(props.defaultOpen);\n\n// Generate unique IDs\nconst headerId = computed(\n () => `accordion-card-header-${Math.random().toString(36).substr(2, 9)}`\n);\nconst contentId = computed(\n () => `accordion-card-content-${Math.random().toString(36).substr(2, 9)}`\n);\n\nconst cardClasses = computed(() => {\n const classes = ['ina-accordion-card'];\n\n classes.push(`ina-accordion-card--variant-${props.variant}`);\n classes.push(`ina-accordion-card--size-${props.size}`);\n\n if (props.disabled) {\n classes.push('ina-accordion-card--disabled');\n }\n\n if (isOpen.value) {\n classes.push('ina-accordion-card--open');\n }\n\n return classes;\n});\n\nconst toggle = () => {\n if (props.disabled) return;\n\n isOpen.value = !isOpen.value;\n emit('toggle', isOpen.value);\n};\n</script>\n\n<style scoped>\n.accordion-enter-active,\n.accordion-leave-active {\n transition: all 0.3s ease;\n overflow: hidden;\n}\n\n.accordion-enter-from,\n.accordion-leave-to {\n max-height: 0;\n opacity: 0;\n}\n\n.accordion-enter-to,\n.accordion-leave-from {\n max-height: 1000px;\n opacity: 1;\n}\n</style>\n","<template>\n <div class=\"ina-accordion-group\">\n <slot />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { provide, ref, computed } from 'vue';\nimport type { AccordionItem } from './types';\n\nexport interface AccordionGroupProps {\n /**\n * Apakah multiple accordion bisa terbuka bersamaan.\n * Default: false (hanya 1 yang terbuka)\n * @deprecated Gunakan multipleOpen sebagai gantinya\n */\n multiple?: boolean;\n\n /**\n * Apakah multiple accordion bisa terbuka bersamaan.\n * Default: false (hanya 1 yang terbuka, yang lain tertutup)\n * Jika true, memungkinkan lebih dari 1 accordion terbuka dalam 1 group\n */\n multipleOpen?: boolean;\n\n /**\n * Index accordion yang terbuka secara default (hanya untuk single mode).\n * Jika multipleOpen=true, gunakan defaultOpen pada masing-masing Accordion.\n */\n defaultIndex?: number;\n}\n\nconst props = withDefaults(defineProps<AccordionGroupProps>(), {\n multiple: false,\n multipleOpen: false,\n defaultIndex: undefined,\n});\n\n// multipleOpen takes precedence over multiple (for backward compatibility)\nconst allowMultiple = computed(() => props.multipleOpen || props.multiple || false);\n\nconst emit = defineEmits<{\n change: [openIndexes: number[]];\n}>();\n\nconst items = ref<Map<string, number>>(new Map());\nconst openIndexes = ref<number[]>(props.defaultIndex !== undefined ? [props.defaultIndex] : []);\n\n// Register accordion item dan return index\nconst registerItem = (item: AccordionItem): number => {\n const index = items.value.size;\n items.value.set(item.id, index);\n \n // Jika item memiliki defaultOpen\n if (item.defaultOpen) {\n if (allowMultiple.value) {\n // Multiple mode: tambahkan index ke array jika belum ada\n if (!openIndexes.value.includes(index)) {\n openIndexes.value = [...openIndexes.value, index];\n }\n } else {\n // Single mode: hanya set jika belum ada yang terbuka\n if (openIndexes.value.length === 0) {\n openIndexes.value = [index];\n }\n }\n }\n \n return index;\n};\n\n// Unregister accordion item\nconst unregisterItem = (item: AccordionItem) => {\n const index = items.value.get(item.id);\n if (index !== undefined) {\n items.value.delete(item.id);\n // Update openIndexes setelah item dihapus\n openIndexes.value = openIndexes.value\n .filter((idx) => idx !== index)\n .map((idx) => (idx > index ? idx - 1 : idx));\n \n // Rebuild map dengan index baru\n const newMap = new Map<string, number>();\n let newIndex = 0;\n items.value.forEach((_, id) => {\n newMap.set(id, newIndex);\n newIndex++;\n });\n items.value = newMap;\n }\n};\n\n// Handle toggle dari accordion item\nconst handleItemToggle = (index: number, isOpen: boolean) => {\n if (allowMultiple.value) {\n // Multiple mode: tambah/hapus dari array\n if (isOpen) {\n if (!openIndexes.value.includes(index)) {\n openIndexes.value = [...openIndexes.value, index];\n }\n } else {\n openIndexes.value = openIndexes.value.filter((idx) => idx !== index);\n }\n } else {\n // Single mode: hanya 1 yang terbuka (yang lain tertutup)\n if (isOpen) {\n openIndexes.value = [index];\n } else {\n openIndexes.value = [];\n }\n }\n \n emit('change', [...openIndexes.value]);\n};\n\n// Check apakah item terbuka (function yang selalu mengakses reactive value)\nconst isItemOpen = (index: number): boolean => {\n return openIndexes.value.includes(index);\n};\n\n// Get index dari item id\nconst getItemIndex = (itemId: string): number => {\n return items.value.get(itemId) ?? -1;\n};\n\nprovide('accordionGroup', {\n multiple: allowMultiple.value,\n multipleOpen: allowMultiple.value,\n registerItem,\n unregisterItem,\n handleItemToggle,\n isItemOpen,\n getItemIndex,\n // Provide openIndexes untuk reactivity\n openIndexes: computed(() => openIndexes.value),\n});\n</script>\n\n<style scoped>\n.ina-accordion-group {\n display: flex;\n flex-direction: column;\n}\n</style>\n\n","<template>\n <div class=\"ina-action-dropdown\" :class=\"containerClasses\">\n <button\n ref=\"triggerRef\"\n type=\"button\"\n :class=\"triggerClasses\"\n :disabled=\"disabled\"\n @click=\"toggleDropdown\"\n @keydown=\"handleKeydown\"\n :aria-expanded=\"isOpen\"\n :aria-haspopup=\"true\"\n >\n <span class=\"ina-action-dropdown__trigger-content\">\n <slot name=\"trigger\">\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"1\" fill=\"currentColor\" />\n <circle cx=\"12\" cy=\"5\" r=\"1\" fill=\"currentColor\" />\n <circle cx=\"12\" cy=\"19\" r=\"1\" fill=\"currentColor\" />\n </svg>\n </slot>\n </span>\n </button>\n\n <Transition name=\"dropdown\">\n <div\n v-if=\"isOpen\"\n ref=\"dropdownRef\"\n class=\"ina-action-dropdown__dropdown\"\n :style=\"dropdownStyle\"\n @click.stop\n >\n <div class=\"ina-action-dropdown__menu\">\n <slot />\n </div>\n </div>\n </Transition>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, nextTick, onMounted, onUnmounted } from 'vue';\nexport interface ActionDropdownProps {\n disabled?: boolean;\n variant?: 'default' | 'primary' | 'secondary' | 'ghost';\n size?: 'sm' | 'md' | 'lg';\n placement?: 'bottom-start' | 'bottom-end' | 'top-start' | 'top-end';\n}\n\nconst props = withDefaults(defineProps<ActionDropdownProps>(), {\n disabled: false,\n variant: 'default',\n size: 'md',\n placement: 'bottom-start',\n});\n\nconst emit = defineEmits<{\n open: [];\n close: [];\n}>();\n\nconst triggerRef = ref<HTMLButtonElement>();\nconst dropdownRef = ref<HTMLDivElement>();\nconst isOpen = ref(false);\nconst dropdownStyle = ref({});\n\nconst containerClasses = computed(() => {\n const classes = ['ina-action-dropdown'];\n\n if (props.disabled) {\n classes.push('ina-action-dropdown--disabled');\n }\n\n return classes;\n});\n\nconst triggerClasses = computed(() => {\n const classes = ['ina-action-dropdown__trigger'];\n\n classes.push(`ina-action-dropdown__trigger--variant-${props.variant}`);\n classes.push(`ina-action-dropdown__trigger--size-${props.size}`);\n\n if (props.disabled) {\n classes.push('ina-action-dropdown__trigger--disabled');\n }\n\n if (isOpen.value) {\n classes.push('ina-action-dropdown__trigger--open');\n }\n\n return classes;\n});\n\nconst toggleDropdown = () => {\n if (props.disabled) return;\n\n isOpen.value = !isOpen.value;\n\n if (isOpen.value) {\n emit('open');\n nextTick(() => {\n positionDropdown();\n });\n } else {\n emit('close');\n }\n};\n\nconst positionDropdown = () => {\n if (!triggerRef.value || !dropdownRef.value) return;\n\n const triggerRect = triggerRef.value.getBoundingClientRect();\n const dropdownRect = dropdownRef.value.getBoundingClientRect();\n const viewportHeight = window.innerHeight;\n const viewportWidth = window.innerWidth;\n\n let top = triggerRect.bottom + window.scrollY;\n let left = triggerRect.left + window.scrollX;\n\n // Adjust based on placement\n if (props.placement.includes('top')) {\n top = triggerRect.top + window.scrollY - dropdownRect.height;\n }\n\n if (props.placement.includes('end')) {\n left = triggerRect.right + window.scrollX - dropdownRect.width;\n }\n\n // Ensure dropdown stays within viewport\n if (top + dropdownRect.height > viewportHeight + window.scrollY) {\n top = triggerRect.top + window.scrollY - dropdownRect.height;\n }\n\n if (left + dropdownRect.width > viewportWidth + window.scrollX) {\n left = viewportWidth + window.scrollX - dropdownRect.width - 10;\n }\n\n if (left < window.scrollX) {\n left = window.scrollX + 10;\n }\n\n dropdownStyle.value = {\n position: 'absolute',\n top: `${top}px`,\n left: `${left}px`,\n zIndex: 1000,\n };\n};\n\nconst handleKeydown = (event: KeyboardEvent) => {\n if (props.disabled) return;\n\n switch (event.key) {\n case 'Enter':\n case ' ':\n event.preventDefault();\n toggleDropdown();\n break;\n case 'Escape':\n isOpen.value = false;\n emit('close');\n break;\n case 'ArrowDown':\n event.preventDefault();\n if (!isOpen.value) {\n toggleDropdown();\n }\n break;\n }\n};\n\nconst handleClickOutside = (event: Event) => {\n if (\n dropdownRef.value &&\n triggerRef.value &&\n !dropdownRef.value.contains(event.target as Node) &&\n !triggerRef.value.contains(event.target as Node)\n ) {\n isOpen.value = false;\n emit('close');\n }\n};\n\nonMounted(() => {\n document.addEventListener('click', handleClickOutside);\n window.addEventListener('resize', positionDropdown);\n window.addEventListener('scroll', positionDropdown);\n});\n\nonUnmounted(() => {\n document.removeEventListener('click', handleClickOutside);\n window.removeEventListener('resize', positionDropdown);\n window.removeEventListener('scroll', positionDropdown);\n});\n</script>\n\n<style scoped>\n.dropdown-enter-active,\n.dropdown-leave-active {\n transition: all 0.2s ease;\n}\n\n.dropdown-enter-from,\n.dropdown-leave-to {\n opacity: 0;\n transform: translateY(-8px);\n}\n</style>\n","/**\n * @license @tabler/icons-vue v3.35.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nvar defaultAttributes = {\n outline: {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n \"stroke-width\": 2,\n \"stroke-linecap\": \"round\",\n \"stroke-linejoin\": \"round\"\n },\n filled: {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"currentColor\",\n stroke: \"none\"\n }\n};\n\nexport { defaultAttributes as default };\n//# sourceMappingURL=defaultAttributes.mjs.map\n","/**\n * @license @tabler/icons-vue v3.35.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { h } from 'vue';\nimport defaultAttributes from './defaultAttributes.mjs';\n\nconst createVueComponent = (type, iconName, iconNamePascal, iconNode) => ({ color = \"currentColor\", size = 24, stroke = 2, title, class: classes, ...rest }, { attrs, slots }) => {\n let children = [...iconNode.map((child) => h(...child)), ...slots.default ? [slots.default()] : []];\n if (title)\n children = [h(\"title\", title), ...children];\n return h(\n \"svg\",\n {\n ...defaultAttributes[type],\n width: size,\n height: size,\n ...attrs,\n class: [\"tabler-icon\", `tabler-icon-${iconName}`],\n ...type === \"filled\" ? {\n fill: color\n } : {\n \"stroke-width\": stroke ?? defaultAttributes[type][\"stroke-width\"],\n stroke: color\n },\n ...rest\n },\n children\n );\n};\n\nexport { createVueComponent as default };\n//# sourceMappingURL=createVueComponent.mjs.map\n","/**\n * @license @tabler/icons-vue v3.35.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createVueComponent from '../createVueComponent.mjs';\n\nvar IconAlertCircle = createVueComponent(\"outline\", \"alert-circle\", \"AlertCircle\", [[\"path\", { \"d\": \"M3 12a9 9 0 1 0 18 0a9 9 0 0 0 -18 0\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M12 8v4\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M12 16h.01\", \"key\": \"svg-2\" }]]);\n\nexport { IconAlertCircle as default };\n//# sourceMappingURL=IconAlertCircle.mjs.map\n","/**\n * @license @tabler/icons-vue v3.35.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createVueComponent from '../createVueComponent.mjs';\n\nvar IconAlertTriangle = createVueComponent(\"outline\", \"alert-triangle\", \"AlertTriangle\", [[\"path\", { \"d\": \"M12 9v4\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M10.363 3.591l-8.106 13.534a1.914 1.914 0 0 0 1.636 2.871h16.214a1.914 1.914 0 0 0 1.636 -2.87l-8.106 -13.536a1.914 1.914 0 0 0 -3.274 0z\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M12 16h.01\", \"key\": \"svg-2\" }]]);\n\nexport { IconAlertTriangle as default };\n//# sourceMappingURL=IconAlertTriangle.mjs.map\n","/**\n * @license @tabler/icons-vue v3.35.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createVueComponent from '../createVueComponent.mjs';\n\nvar IconArrowNarrowDown = createVueComponent(\"outline\", \"arrow-narrow-down\", \"ArrowNarrowDown\", [[\"path\", { \"d\": \"M12 5l0 14\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M16 15l-4 4\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M8 15l4 4\", \"key\": \"svg-2\" }]]);\n\nexport { IconArrowNarrowDown as default };\n//# sourceMappingURL=IconArrowNarrowDown.mjs.map\n","/**\n * @license @tabler/icons-vue v3.35.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createVueComponent from '../createVueComponent.mjs';\n\nvar IconArrowNarrowUp = createVueComponent(\"outline\", \"arrow-narrow-up\", \"ArrowNarrowUp\", [[\"path\", { \"d\": \"M12 5l0 14\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M16 9l-4 -4\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M8 9l4 -4\", \"key\": \"svg-2\" }]]);\n\nexport { IconArrowNarrowUp as default };\n//# sourceMappingURL=IconArrowNarrowUp.mjs.map\n","/**\n * @license @tabler/icons-vue v3.35.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createVueComponent from '../createVueComponent.mjs';\n\nvar IconCalendar = createVueComponent(\"outline\", \"calendar\", \"Calendar\", [[\"path\", { \"d\": \"M4 7a2 2 0 0 1 2 -2h12a2 2 0 0 1 2 2v12a2 2 0 0 1 -2 2h-12a2 2 0 0 1 -2 -2v-12z\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M16 3v4\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M8 3v4\", \"key\": \"svg-2\" }], [\"path\", { \"d\": \"M4 11h16\", \"key\": \"svg-3\" }], [\"path\", { \"d\": \"M11 15h1\", \"key\": \"svg-4\" }], [\"path\", { \"d\": \"M12 15v3\", \"key\": \"svg-5\" }]]);\n\nexport { IconCalendar as default };\n//# sourceMappingURL=IconCalendar.mjs.map\n","/**\n * @license @tabler/icons-vue v3.35.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createVueComponent from '../createVueComponent.mjs';\n\nvar IconCheck = createVueComponent(\"outline\", \"check\", \"Check\", [[\"path\", { \"d\": \"M5 12l5 5l10 -10\", \"key\": \"svg-0\" }]]);\n\nexport { IconCheck as default };\n//# sourceMappingURL=IconCheck.mjs.map\n","/**\n * @license @tabler/icons-vue v3.35.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createVueComponent from '../createVueComponent.mjs';\n\nvar IconChevronDown = createVueComponent(\"outline\", \"chevron-down\", \"ChevronDown\", [[\"path\", { \"d\": \"M6 9l6 6l6 -6\", \"key\": \"svg-0\" }]]);\n\nexport { IconChevronDown as default };\n//# sourceMappingURL=IconChevronDown.mjs.map\n","/**\n * @license @tabler/icons-vue v3.35.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createVueComponent from '../createVueComponent.mjs';\n\nvar IconChevronLeft = createVueComponent(\"outline\", \"chevron-left\", \"ChevronLeft\", [[\"path\", { \"d\": \"M15 6l-6 6l6 6\", \"key\": \"svg-0\" }]]);\n\nexport { IconChevronLeft as default };\n//# sourceMappingURL=IconChevronLeft.mjs.map\n","/**\n * @license @tabler/icons-vue v3.35.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createVueComponent from '../createVueComponent.mjs';\n\nvar IconChevronRight = createVueComponent(\"outline\", \"chevron-right\", \"ChevronRight\", [[\"path\", { \"d\": \"M9 6l6 6l-6 6\", \"key\": \"svg-0\" }]]);\n\nexport { IconChevronRight as default };\n//# sourceMappingURL=IconChevronRight.mjs.map\n","/**\n * @license @tabler/icons-vue v3.35.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createVueComponent from '../createVueComponent.mjs';\n\nvar IconChevronUp = createVueComponent(\"outline\", \"chevron-up\", \"ChevronUp\", [[\"path\", { \"d\": \"M6 15l6 -6l6 6\", \"key\": \"svg-0\" }]]);\n\nexport { IconChevronUp as default };\n//# sourceMappingURL=IconChevronUp.mjs.map\n","/**\n * @license @tabler/icons-vue v3.35.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createVueComponent from '../createVueComponent.mjs';\n\nvar IconCircleCheck = createVueComponent(\"outline\", \"circle-check\", \"CircleCheck\", [[\"path\", { \"d\": \"M12 12m-9 0a9 9 0 1 0 18 0a9 9 0 1 0 -18 0\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M9 12l2 2l4 -4\", \"key\": \"svg-1\" }]]);\n\nexport { IconCircleCheck as default };\n//# sourceMappingURL=IconCircleCheck.mjs.map\n","/**\n * @license @tabler/icons-vue v3.35.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createVueComponent from '../createVueComponent.mjs';\n\nvar IconCircleX = createVueComponent(\"outline\", \"circle-x\", \"CircleX\", [[\"path\", { \"d\": \"M12 12m-9 0a9 9 0 1 0 18 0a9 9 0 1 0 -18 0\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M10 10l4 4m0 -4l-4 4\", \"key\": \"svg-1\" }]]);\n\nexport { IconCircleX as default };\n//# sourceMappingURL=IconCircleX.mjs.map\n","/**\n * @license @tabler/icons-vue v3.35.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createVueComponent from '../createVueComponent.mjs';\n\nvar IconClock = createVueComponent(\"outline\", \"clock\", \"Clock\", [[\"path\", { \"d\": \"M3 12a9 9 0 1 0 18 0a9 9 0 0 0 -18 0\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M12 7v5l3 3\", \"key\": \"svg-1\" }]]);\n\nexport { IconClock as default };\n//# sourceMappingURL=IconClock.mjs.map\n","/**\n * @license @tabler/icons-vue v3.35.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createVueComponent from '../createVueComponent.mjs';\n\nvar IconCube3dSphere = createVueComponent(\"outline\", \"cube-3d-sphere\", \"Cube3dSphere\", [[\"path\", { \"d\": \"M6 17.6l-2 -1.1v-2.5\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M4 10v-2.5l2 -1.1\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M10 4.1l2 -1.1l2 1.1\", \"key\": \"svg-2\" }], [\"path\", { \"d\": \"M18 6.4l2 1.1v2.5\", \"key\": \"svg-3\" }], [\"path\", { \"d\": \"M20 14v2.5l-2 1.12\", \"key\": \"svg-4\" }], [\"path\", { \"d\": \"M14 19.9l-2 1.1l-2 -1.1\", \"key\": \"svg-5\" }], [\"path\", { \"d\": \"M12 12l2 -1.1\", \"key\": \"svg-6\" }], [\"path\", { \"d\": \"M18 8.6l2 -1.1\", \"key\": \"svg-7\" }], [\"path\", { \"d\": \"M12 12l0 2.5\", \"key\": \"svg-8\" }], [\"path\", { \"d\": \"M12 18.5l0 2.5\", \"key\": \"svg-9\" }], [\"path\", { \"d\": \"M12 12l-2 -1.12\", \"key\": \"svg-10\" }], [\"path\", { \"d\": \"M6 8.6l-2 -1.1\", \"key\": \"svg-11\" }]]);\n\nexport { IconCube3dSphere as default };\n//# sourceMappingURL=IconCube3dSphere.mjs.map\n","/**\n * @license @tabler/icons-vue v3.35.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createVueComponent from '../createVueComponent.mjs';\n\nvar IconFileTypePdf = createVueComponent(\"outline\", \"file-type-pdf\", \"FileTypePdf\", [[\"path\", { \"d\": \"M14 3v4a1 1 0 0 0 1 1h4\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M5 12v-7a2 2 0 0 1 2 -2h7l5 5v4\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M5 18h1.5a1.5 1.5 0 0 0 0 -3h-1.5v6\", \"key\": \"svg-2\" }], [\"path\", { \"d\": \"M17 18h2\", \"key\": \"svg-3\" }], [\"path\", { \"d\": \"M20 15h-3v6\", \"key\": \"svg-4\" }], [\"path\", { \"d\": \"M11 15v6h1a2 2 0 0 0 2 -2v-2a2 2 0 0 0 -2 -2h-1z\", \"key\": \"svg-5\" }]]);\n\nexport { IconFileTypePdf as default };\n//# sourceMappingURL=IconFileTypePdf.mjs.map\n","/**\n * @license @tabler/icons-vue v3.35.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createVueComponent from '../createVueComponent.mjs';\n\nvar IconFile = createVueComponent(\"outline\", \"file\", \"File\", [[\"path\", { \"d\": \"M14 3v4a1 1 0 0 0 1 1h4\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M17 21h-10a2 2 0 0 1 -2 -2v-14a2 2 0 0 1 2 -2h7l5 5v11a2 2 0 0 1 -2 2z\", \"key\": \"svg-1\" }]]);\n\nexport { IconFile as default };\n//# sourceMappingURL=IconFile.mjs.map\n","/**\n * @license @tabler/icons-vue v3.35.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createVueComponent from '../createVueComponent.mjs';\n\nvar IconInfoCircle = createVueComponent(\"outline\", \"info-circle\", \"InfoCircle\", [[\"path\", { \"d\": \"M3 12a9 9 0 1 0 18 0a9 9 0 0 0 -18 0\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M12 9h.01\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M11 12h1v4h1\", \"key\": \"svg-2\" }]]);\n\nexport { IconInfoCircle as default };\n//# sourceMappingURL=IconInfoCircle.mjs.map\n","/**\n * @license @tabler/icons-vue v3.35.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createVueComponent from '../createVueComponent.mjs';\n\nvar IconLoader2 = createVueComponent(\"outline\", \"loader-2\", \"Loader2\", [[\"path\", { \"d\": \"M12 3a9 9 0 1 0 9 9\", \"key\": \"svg-0\" }]]);\n\nexport { IconLoader2 as default };\n//# sourceMappingURL=IconLoader2.mjs.map\n","/**\n * @license @tabler/icons-vue v3.35.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createVueComponent from '../createVueComponent.mjs';\n\nvar IconMoon = createVueComponent(\"outline\", \"moon\", \"Moon\", [[\"path\", { \"d\": \"M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z\", \"key\": \"svg-0\" }]]);\n\nexport { IconMoon as default };\n//# sourceMappingURL=IconMoon.mjs.map\n","/**\n * @license @tabler/icons-vue v3.35.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createVueComponent from '../createVueComponent.mjs';\n\nvar IconPhoto = createVueComponent(\"outline\", \"photo\", \"Photo\", [[\"path\", { \"d\": \"M15 8h.01\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M3 6a3 3 0 0 1 3 -3h12a3 3 0 0 1 3 3v12a3 3 0 0 1 -3 3h-12a3 3 0 0 1 -3 -3v-12z\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M3 16l5 -5c.928 -.893 2.072 -.893 3 0l5 5\", \"key\": \"svg-2\" }], [\"path\", { \"d\": \"M14 14l1 -1c.928 -.893 2.072 -.893 3 0l3 3\", \"key\": \"svg-3\" }]]);\n\nexport { IconPhoto as default };\n//# sourceMappingURL=IconPhoto.mjs.map\n","/**\n * @license @tabler/icons-vue v3.35.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createVueComponent from '../createVueComponent.mjs';\n\nvar IconRotateClockwise = createVueComponent(\"outline\", \"rotate-clockwise\", \"RotateClockwise\", [[\"path\", { \"d\": \"M4.05 11a8 8 0 1 1 .5 4m-.5 5v-5h5\", \"key\": \"svg-0\" }]]);\n\nexport { IconRotateClockwise as default };\n//# sourceMappingURL=IconRotateClockwise.mjs.map\n","/**\n * @license @tabler/icons-vue v3.35.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createVueComponent from '../createVueComponent.mjs';\n\nvar IconSun = createVueComponent(\"outline\", \"sun\", \"Sun\", [[\"path\", { \"d\": \"M12 12m-4 0a4 4 0 1 0 8 0a4 4 0 1 0 -8 0\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M3 12h1m8 -9v1m8 8h1m-9 8v1m-6.4 -15.4l.7 .7m12.1 -.7l-.7 .7m0 11.4l.7 .7m-12.1 -.7l-.7 .7\", \"key\": \"svg-1\" }]]);\n\nexport { IconSun as default };\n//# sourceMappingURL=IconSun.mjs.map\n","/**\n * @license @tabler/icons-vue v3.35.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createVueComponent from '../createVueComponent.mjs';\n\nvar IconTrash = createVueComponent(\"outline\", \"trash\", \"Trash\", [[\"path\", { \"d\": \"M4 7l16 0\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M10 11l0 6\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M14 11l0 6\", \"key\": \"svg-2\" }], [\"path\", { \"d\": \"M5 7l1 12a2 2 0 0 0 2 2h8a2 2 0 0 0 2 -2l1 -12\", \"key\": \"svg-3\" }], [\"path\", { \"d\": \"M9 7v-3a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v3\", \"key\": \"svg-4\" }]]);\n\nexport { IconTrash as default };\n//# sourceMappingURL=IconTrash.mjs.map\n","/**\n * @license @tabler/icons-vue v3.35.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createVueComponent from '../createVueComponent.mjs';\n\nvar IconUpload = createVueComponent(\"outline\", \"upload\", \"Upload\", [[\"path\", { \"d\": \"M4 17v2a2 2 0 0 0 2 2h12a2 2 0 0 0 2 -2v-2\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M7 9l5 -5l5 5\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M12 4l0 12\", \"key\": \"svg-2\" }]]);\n\nexport { IconUpload as default };\n//# sourceMappingURL=IconUpload.mjs.map\n","/**\n * @license @tabler/icons-vue v3.35.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createVueComponent from '../createVueComponent.mjs';\n\nvar IconX = createVueComponent(\"outline\", \"x\", \"X\", [[\"path\", { \"d\": \"M18 6l-12 12\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M6 6l12 12\", \"key\": \"svg-1\" }]]);\n\nexport { IconX as default };\n//# sourceMappingURL=IconX.mjs.map\n","<template>\n <div class=\"ina-alert\" :class=\"alertClasses\" role=\"alert\">\n <div v-if=\"icon || showVariantIcon\" class=\"ina-alert__icon\">\n <component v-if=\"icon\" :is=\"icon\" :size=\"20\" />\n <Icon3dCubeSphere\n v-else-if=\"showVariantIcon && variant === 'neutral'\"\n :size=\"20\"\n />\n <IconInfoCircle\n v-else-if=\"showVariantIcon && variant === 'info'\"\n :size=\"20\"\n />\n <IconCheck\n v-else-if=\"showVariantIcon && variant === 'success'\"\n :size=\"20\"\n />\n <IconAlertTriangle\n v-else-if=\"showVariantIcon && variant === 'caution'\"\n :size=\"20\"\n />\n <IconAlertCircle\n v-else-if=\"showVariantIcon && variant === 'critical'\"\n :size=\"20\"\n />\n </div>\n\n <div class=\"ina-alert__content\">\n <div class=\"ina-alert__text-section\">\n <div v-if=\"title\" class=\"ina-alert__title\">\n {{ title }}\n </div>\n\n <div v-if=\"$slots.default || message\" class=\"ina-alert__description\">\n <slot>{{ message }}</slot>\n </div>\n\n <div v-if=\"$slots.actions\" class=\"ina-alert__actions\">\n <slot name=\"actions\" />\n </div>\n </div>\n </div>\n\n <button\n v-if=\"dismissible\"\n type=\"button\"\n class=\"ina-alert__close-button\"\n @click=\"handleDismiss\"\n :aria-label=\"dismissLabel\"\n >\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M18 6L6 18M6 6L18 18\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport type { Component } from 'vue';\nimport {\n Icon3dCubeSphere,\n IconCheck,\n IconAlertTriangle,\n IconInfoCircle,\n IconAlertCircle,\n} from '@tabler/icons-vue';\nexport type AlertVariant =\n | 'neutral'\n | 'info'\n | 'success'\n | 'caution'\n | 'critical';\n\nexport interface AlertProps {\n /**\n * Variant warna alert.\n * - 'neutral' → Putih dengan border stroke-primary\n * - 'info' → Biru (Guide)\n * - 'success' → Hijau (Positive)\n * - 'caution' → Oranye (Warning)\n * - 'critical' → Merah (Negative)\n */\n variant?: AlertVariant;\n\n /**\n * Judul alert (singkat, biasanya satu baris).\n */\n title?: string;\n\n /**\n * Deskripsi/penjelasan di bawah judul (opsional, idealnya max dua baris).\n */\n message?: string;\n\n /**\n * Icon custom untuk menggantikan icon default variant.\n */\n icon?: Component;\n\n /**\n * Apakah alert bisa di-dismiss (menampilkan tombol close).\n */\n dismissible?: boolean;\n\n /**\n * Label untuk tombol dismiss (accessibility).\n */\n dismissLabel?: string;\n}\n\nconst props = withDefaults(defineProps<AlertProps>(), {\n variant: 'info',\n dismissible: false,\n dismissLabel: 'Dismiss alert',\n});\n\nconst emit = defineEmits<{\n dismiss: [];\n}>();\n\nconst showVariantIcon = computed(() => {\n return !props.icon;\n});\n\nconst alertClasses = computed(() => {\n const classes = ['ina-alert'];\n\n classes.push(`ina-alert--${props.variant}`);\n\n if (props.dismissible) {\n classes.push('ina-alert--dismissible');\n }\n\n return classes;\n});\n\nconst handleDismiss = () => {\n emit('dismiss');\n};\n</script>\n","<template>\n <img\n v-if=\"src && !imageError\"\n :src=\"src\"\n :alt=\"alt\"\n :class=\"avatarClasses\"\n @error=\"handleImageError\"\n @load=\"handleImageLoad\"\n />\n\n <div v-else :class=\"avatarClasses\">\n {{ initials ? initials.slice(0, 2).toUpperCase() : '' }}\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nexport type AvatarSize = 16 | 24 | 32 | 40 | 48;\nexport type AvatarShape = 'circle' | 'square';\n\nexport interface AvatarProps {\n /**\n * URL gambar avatar (bisa data URI / base64).\n * Jika tidak disediakan, akan fallback ke `initials`.\n */\n src?: string;\n\n /**\n * Alt text untuk gambar.\n */\n alt?: string;\n\n /**\n * Inisial (maksimum 2 karakter) yang ditampilkan saat `src` tidak ada.\n */\n initials?: string;\n\n /**\n * Ukuran lebar & tinggi avatar dalam piksel.\n * Pilihan: 16, 24, 32, 40, 48. Default: 32.\n */\n size?: AvatarSize;\n\n /**\n * Bentuk avatar: 'circle' (lingkaran) atau 'square' (persegi dengan border-radius 8px).\n * Default: 'circle'.\n */\n shape?: AvatarShape;\n}\n\nconst props = withDefaults(defineProps<AvatarProps>(), {\n alt: 'Avatar',\n initials: '',\n size: 32,\n shape: 'circle',\n});\n\nconst imageError = ref(false);\nconst imageLoaded = ref(false);\n\nconst avatarClasses = computed(() => {\n const classes = [\n 'ina-avatar',\n `ina-avatar--${props.size}`,\n `ina-avatar--${props.shape}`,\n ];\n\n if (props.src && !imageError.value) {\n classes.push('ina-avatar--image');\n }\n\n return classes;\n});\n\nconst handleImageError = () => {\n imageError.value = true;\n imageLoaded.value = false;\n};\n\nconst handleImageLoad = () => {\n imageError.value = false;\n imageLoaded.value = true;\n};\n</script>\n","<template>\n <span class=\"ina-badge\" :class=\"badgeClasses\">\n <span v-if=\"prefixIcon\" class=\"ina-badge__prefix-icon\">\n <component :is=\"prefixIcon\" />\n </span>\n <span><slot /></span>\n <span v-if=\"suffixIcon\" class=\"ina-badge__suffix-icon\">\n <component :is=\"suffixIcon\" />\n </span>\n </span>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport type { Component } from 'vue';\n/**\n * Badge component untuk menampilkan label atau tag dengan berbagai variant warna dan style.\n *\n * @param {'soft' | 'fill'} [type] - Tipe style badge: soft (background 100, text 500) atau fill (background 500, text 100).\n * @param {'brand' | 'info' | 'warning' | 'success' | 'error' | 'neutral'} [variant] - Variant warna badge.\n * @param {'sm' | 'md' | 'lg' | 'xl'} [size] - Ukuran badge.\n * @param {'sm' | 'md' | 'lg' | 'full'} [rounded] - Border radius badge.\n * @param {Component} [prefixIcon] - Icon di depan teks.\n * @param {Component} [suffixIcon] - Icon di belakang teks.\n */\n\nexport type BadgeType = 'soft' | 'fill';\nexport type BadgeVariant =\n | 'brand'\n | 'info'\n | 'warning'\n | 'success'\n | 'error'\n | 'neutral';\nexport type BadgeSize = 'sm' | 'md' | 'lg' | 'xl';\nexport type BadgeRounded = 'sm' | 'md' | 'lg' | 'full';\n\nexport interface BadgeProps {\n /**\n * Tipe style badge:\n * - \"soft\": background level 100, text level 500\n * - \"fill\": background level 500, text level 100\n */\n type?: BadgeType;\n\n /**\n * Variant warna:\n * - \"brand\" (primary, dipengaruhi brand yang dipilih)\n * - \"info\" (biru/Guide)\n * - \"warning\" (oranye/Warning)\n * - \"success\" (hijau/Positive)\n * - \"error\" (merah/Negative)\n * - \"neutral\" (abu-abu/Neutral)\n */\n variant?: BadgeVariant;\n\n /**\n * Ukuran badge:\n * - \"sm\": font-size 10px\n * - \"md\": font-size 12px, padding horizontal 8px\n * - \"lg\": font-size 14px, padding horizontal 12px\n * - \"xl\": font-size 16px\n */\n size?: BadgeSize;\n\n /**\n * Border radius:\n * - \"sm\"\n * - \"md\"\n * - \"lg\"\n * - \"full\" (pill, default)\n */\n rounded?: BadgeRounded;\n\n /** Optional icon di depan teks */\n prefixIcon?: Component | undefined;\n /** Optional icon di belakang teks */\n /** Optional icon di belakang teks */\n suffixIcon?: Component | undefined;\n}\n\nconst props = withDefaults(defineProps<BadgeProps>(), {\n type: 'soft',\n variant: 'info',\n size: 'md',\n rounded: 'full',\n});\n\nconst badgeClasses = computed(() => {\n const classes = [\n 'ina-badge',\n `ina-badge--${props.type}`,\n `ina-badge--${props.variant}`,\n `ina-badge--${props.size}`,\n `ina-badge--rounded-${props.rounded}`,\n ];\n\n return classes;\n});\n</script>\n","<template>\n <dialog\n ref=\"bottomSheetRef\"\n :class=\"dialogClasses\"\n @close=\"handleClose\"\n @cancel=\"handleCancel\"\n @click=\"handleClick\"\n @animationend=\"handleAnimationEnd\"\n >\n <slot />\n </dialog>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed, watch, nextTick } from 'vue';\nexport interface BottomSheetProps {\n open: boolean;\n locked: boolean;\n onClose: (e: Event) => void;\n}\n\nconst props = withDefaults(defineProps<BottomSheetProps>(), {\n open: false,\n locked: false,\n});\n\nconst emit = defineEmits<{\n close: [e: Event];\n}>();\n\nconst bottomSheetRef = ref<HTMLDialogElement | null>(null);\n\n// Work out which classes should be applied to the dialog element\nconst dialogClasses = computed(() => {\n const classes = ['bottom-sheet-dropdown'];\n if (!props.open) classes.push('bottom-sheet-dropdown--closing');\n return classes.join(' ');\n});\n\n// Event listener: trigger onclose when cancel detected\nconst handleCancel = (e: Event) => {\n e.preventDefault();\n if (!props.locked) {\n emit('close', e);\n }\n};\n\n// Event listener: trigger onclose when click outside\nconst handleClick = (e: Event) => {\n const el = bottomSheetRef.value;\n if (e.target === el && !props.locked) {\n emit('close', e);\n }\n};\n\n// Event listener: trigger close click on anim end\nconst handleAnimationEnd = () => {\n const el = bottomSheetRef.value;\n if (!props.open && el) {\n el.close();\n }\n};\n\n// Handle close event\nconst handleClose = (e: Event) => {\n emit('close', e);\n};\n\n// When open changes run open/close command\nwatch(\n () => props.open,\n async (newOpen) => {\n const el = bottomSheetRef.value;\n if (el) {\n if (newOpen) {\n await nextTick();\n el.showModal();\n }\n }\n },\n { immediate: true }\n);\n</script>\n\n<style scoped>\n</style>\n","<template>\n <nav\n class=\"ina-breadcrumb\"\n :class=\"breadcrumbClasses\"\n aria-label=\"Breadcrumb\"\n >\n <ol class=\"ina-breadcrumb__list\">\n <li\n v-for=\"(item, index) in items\"\n :key=\"index\"\n class=\"ina-breadcrumb__item\"\n :class=\"getItemClasses(index)\"\n >\n <component\n :is=\"item.href && !isLast(index) ? 'a' : 'span'\"\n :href=\"item.href && !isLast(index) ? item.href : undefined\"\n :class=\"getLinkClasses(index)\"\n @click=\"handleItemClick(item, index)\"\n >\n <span v-if=\"item.icon\" class=\"ina-breadcrumb__icon\">\n <component :is=\"item.icon\" :size=\"16\" />\n </span>\n\n <span class=\"ina-breadcrumb__text\">\n {{ getTruncatedLabel(item.label, index) }}\n </span>\n </component>\n\n <span\n v-if=\"index < items.length - 1\"\n class=\"ina-breadcrumb__separator\"\n aria-hidden=\"true\"\n >\n <slot name=\"separator\">\n <template v-if=\"typeof computedSeparator === 'string'\">{{\n computedSeparator\n }}</template>\n <component :is=\"computedSeparator\" v-else />\n </slot>\n </span>\n </li>\n </ol>\n </nav>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, h } from 'vue';\nimport type { Component } from 'vue';\nimport { IconChevronRight } from '@tabler/icons-vue';\nexport interface BreadcrumbItem {\n label: string;\n href?: string;\n icon?: Component;\n disabled?: boolean;\n}\n\nexport interface BreadcrumbProps {\n items: BreadcrumbItem[];\n variant?: 'default' | 'minimal' | 'with-icons';\n size?: 'sm' | 'md' | 'lg';\n /** Separator antara items (default: SVG chevron). Bisa berupa string atau Vue Component */\n separator?: string | Component;\n /** Maksimal panjang text untuk item terakhir sebelum di-truncate */\n maxLength?: number;\n}\n\nconst props = withDefaults(defineProps<BreadcrumbProps>(), {\n variant: 'default',\n size: 'md',\n separator: undefined,\n});\n\nconst emit = defineEmits<{\n itemClick: [item: BreadcrumbItem, index: number];\n}>();\n\n// Default separator component (sama seperti React: <IconChevronRight size={14} />)\nconst DefaultSeparator = () => {\n return h(IconChevronRight, { size: 14 });\n};\n\n// Computed separator dengan default IconChevronRight jika tidak di-set (sama seperti React)\nconst computedSeparator = computed(() => {\n return props.separator ?? DefaultSeparator;\n});\n\nconst breadcrumbClasses = computed(() => {\n const classes = ['ina-breadcrumb'];\n\n classes.push(`ina-breadcrumb--variant-${props.variant}`);\n classes.push(`ina-breadcrumb--size-${props.size}`);\n\n return classes;\n});\n\nconst getItemClasses = (index: number) => {\n const classes = ['ina-breadcrumb__item'];\n\n if (index === props.items.length - 1) {\n classes.push('ina-breadcrumb__item--current');\n }\n\n if (props.items[index].disabled) {\n classes.push('ina-breadcrumb__item--disabled');\n }\n\n if (props.items[index].icon) {\n classes.push('ina-breadcrumb__item--with-icon');\n }\n\n return classes;\n};\n\nconst getLinkClasses = (index: number) => {\n const classes = ['ina-breadcrumb__link'];\n\n if (index === props.items.length - 1) {\n classes.push('ina-breadcrumb__link--active');\n }\n\n if (props.items[index].disabled) {\n classes.push('ina-breadcrumb__link--disabled');\n }\n\n return classes;\n};\n\nconst isLast = (index: number): boolean => {\n return index === props.items.length - 1;\n};\n\nconst getTruncatedLabel = (label: string, index: number): string => {\n const isLastItem = isLast(index);\n if (!isLastItem || !props.maxLength) return label;\n if (label.length <= props.maxLength) return label;\n return `${label.substring(0, props.maxLength)}...`;\n};\n\nconst handleItemClick = (item: BreadcrumbItem, index: number) => {\n if (item.disabled || isLast(index)) return;\n\n emit('itemClick', item, index);\n};\n</script>\n","<template>\n <button\n v-bind=\"$attrs\"\n :type=\"type\"\n :disabled=\"disabled\"\n :class=\"buttonClasses\"\n @click=\"$emit('click', $event)\"\n >\n <!-- Prefix Icon (kiri) -->\n <component :is=\"prefixIconNode\" v-if=\"prefixIconNode\" />\n\n <!-- Konten utama -->\n <slot />\n\n <!-- Suffix Icon (kanan) -->\n <component :is=\"suffixIconNode\" v-if=\"suffixIconNode\" />\n </button>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, h, type VNode, type Component } from 'vue';\nexport type ButtonHierarchy =\n | 'primary'\n | 'secondary'\n | 'tertiary'\n | 'link'\n | 'custom';\nexport type ButtonSize = '2xl' | 'xl' | 'lg' | 'md' | 'sm';\n\nexport interface ButtonProps {\n /**\n * Hierarchy button:\n * - \"primary\": background-color: primary-300, color: text-white\n * - \"secondary\": background-color: white, color: text-content-primary, border: stroke-primary\n * - \"tertiary\": background-color: white, color: text-content-primary, border: none, hover: background-tertiary\n * - \"link\": background-color: white, color: text-content-guide, border: none, hover: text-guide-400\n * - \"custom\": untuk custom styling\n *\n * @default \"primary\"\n */\n hierarchy?: ButtonHierarchy;\n\n /**\n * Ukuran button:\n * - \"2xl\": max-height: 56px, font-size: 16px, padding: 16px\n * - \"xl\": max-height: 48px, font-size: 16px, padding: 12px 16px\n * - \"lg\": max-height: 44px, font-size: 14px, padding: 12px\n * - \"md\": max-height: 40px, font-size: 14px, padding: 10px 12px\n * - \"sm\": max-height: 32px, font-size: 12px, padding: 8px\n *\n * @default \"md\"\n */\n size?: ButtonSize;\n\n /**\n * Ikon di sebelah kiri teks (opsional).\n * Bisa berupa VNode atau Component.\n */\n prefixIcon?: VNode | Component | undefined;\n\n /**\n * Ikon di sebelah kanan teks (opsional).\n * Bisa berupa VNode atau Component.\n */\n suffixIcon?: VNode | Component | undefined;\n\n /**\n * Jika true, button dipastikan dalam keadaan disabled\n * (tidak bisa di-klik, gaya berubah).\n */\n disabled?: boolean;\n\n /**\n * Type button HTML.\n */\n /**\n * Type button HTML.\n */\n type?: 'button' | 'submit' | 'reset';\n}\n\nconst props = withDefaults(defineProps<ButtonProps>(), {\n hierarchy: 'primary',\n size: 'md',\n disabled: false,\n type: 'button',\n});\n\ndefineEmits<{\n click: [event: MouseEvent];\n}>();\n\nconst buttonClasses = computed(() => {\n const classes = ['ina-button'];\n\n // Hierarchy\n classes.push(`ina-button--${props.hierarchy}`);\n\n // Size\n classes.push(`ina-button--${props.size}`);\n\n return classes;\n});\n\n// Helper function untuk merender icon sebagai VNode dengan wrapper span\nconst renderIcon = (\n icon: VNode | Component | undefined,\n wrapperClass: string\n): VNode | null => {\n if (!icon) return null;\n\n // Jika sudah VNode, wrap dengan span yang memiliki class\n if (typeof icon === 'object' && 'type' in icon && icon.type !== null) {\n const vnode = icon as VNode;\n return h('span', { class: wrapperClass }, [vnode]);\n }\n\n // Jika komponen, buat VNode dengan h() dan wrap dengan span\n const componentIcon = icon as Component;\n return h('span', { class: wrapperClass }, [h(componentIcon)]);\n};\n\n// Computed untuk prefix icon VNode\nconst prefixIconNode = computed(() =>\n renderIcon(props.prefixIcon, 'ina-button__prefix-icon')\n);\n\n// Computed untuk suffix icon VNode\nconst suffixIconNode = computed(() =>\n renderIcon(props.suffixIcon, 'ina-button__suffix-icon')\n);\n</script>\n","<template>\n <div\n class=\"ina-button-group\"\n :class=\"buttonGroupClasses\"\n role=\"group\"\n aria-label=\"Button group\"\n >\n <button\n v-for=\"(option, index) in options\"\n :key=\"`${option.value}-${index}`\"\n type=\"button\"\n :class=\"getButtonClasses(option)\"\n :disabled=\"isDisabled(option)\"\n @click=\"handleClick(option)\"\n :aria-pressed=\"isSelected(option)\"\n :aria-disabled=\"isDisabled(option)\"\n :name=\"name\"\n :value=\"option.value\"\n >\n <span class=\"ina-button-group__button-content\">\n <slot\n :name=\"`option-${index}`\"\n :option=\"option\"\n :selected=\"isSelected(option)\"\n >\n {{ option.label }}\n </slot>\n </span>\n </button>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nexport interface ButtonGroupOption {\n /** Value of the option */\n value: string | number;\n /** Label content (can be string or VNode) */\n label?: string;\n /** Whether the option is disabled */\n disabled?: boolean;\n}\n\nexport interface ButtonGroupProps {\n /** Array of options to display */\n options: ButtonGroupOption[];\n /** Currently selected value (v-model) */\n modelValue?: string | number;\n /** Whether the button group is disabled */\n disabled?: boolean;\n /** HTML name attribute for form submission */\n name?: string;\n}\n\nconst props = withDefaults(defineProps<ButtonGroupProps>(), {\n disabled: false,\n});\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string | number];\n change: [value: string | number];\n}>();\n\nconst buttonGroupClasses = computed(() => {\n const classes: string[] = [];\n\n if (props.disabled) {\n classes.push('ina-button-group--disabled');\n }\n\n return classes;\n});\n\nconst isSelected = (option: ButtonGroupOption): boolean => {\n return props.modelValue === option.value;\n};\n\nconst isDisabled = (option: ButtonGroupOption): boolean => {\n return props.disabled || option.disabled || false;\n};\n\nconst getButtonClasses = (option: ButtonGroupOption) => {\n const classes = ['ina-button-group__button'];\n\n if (isSelected(option)) {\n classes.push('ina-button-group__button--selected');\n }\n\n if (isDisabled(option)) {\n classes.push('ina-button-group__button--disabled');\n }\n\n return classes;\n};\n\nconst handleClick = (option: ButtonGroupOption) => {\n if (isDisabled(option)) return;\n\n emit('update:modelValue', option.value);\n emit('change', option.value);\n};\n</script>\n","<template>\n <div class=\"ina-card\" :class=\"cardClasses\">\n <!-- Media untuk Basic Card (Top) -->\n <div\n v-if=\"variant === 'basic' && computedMediaPosition === 'top'\"\n class=\"ina-card__media\"\n >\n <slot name=\"media\">\n <img v-if=\"mediaSrc\" :src=\"mediaSrc\" :alt=\"mediaAlt || 'Card media'\" />\n </slot>\n </div>\n\n <!-- Media untuk Overlay Card (selalu absolute, posisi berdasarkan mediaPosition) -->\n <div v-if=\"variant === 'overlay'\" class=\"ina-card__media\">\n <slot name=\"media\">\n <img v-if=\"mediaSrc\" :src=\"mediaSrc\" :alt=\"mediaAlt || 'Card media'\" />\n </slot>\n </div>\n\n <!-- Content Container -->\n <div class=\"ina-card__content\">\n <!-- Avatar -->\n <div v-if=\"avatar || $slots.avatar\" class=\"ina-card__avatar\">\n <slot name=\"avatar\">\n <img v-if=\"avatar\" :src=\"avatar\" :alt=\"avatarAlt || 'Avatar'\" />\n </slot>\n </div>\n\n <div>\n <!-- Title -->\n <h3 v-if=\"title || $slots.title\" class=\"ina-card__title\">\n <slot name=\"title\">\n <component :is=\"title\" v-if=\"typeof title !== 'string' && title\" />\n <template v-else-if=\"typeof title === 'string'\">{{\n title\n }}</template>\n </slot>\n </h3>\n\n <!-- Description -->\n <p\n v-if=\"description || $slots.description\"\n class=\"ina-card__description\"\n >\n <slot name=\"description\">\n <component\n :is=\"description\"\n v-if=\"typeof description !== 'string' && description\"\n />\n <template v-else-if=\"typeof description === 'string'\">{{\n description\n }}</template>\n </slot>\n </p>\n </div>\n\n <!-- Button -->\n <div v-if=\"showButton || $slots.button\" class=\"ina-card__button\">\n <slot name=\"button\">\n <Button\n v-if=\"showButton && buttonText\"\n :hierarchy=\"buttonHierarchy\"\n size=\"md\"\n @click=\"handleButtonClick\"\n >\n {{ buttonText }}\n </Button>\n </slot>\n </div>\n </div>\n\n <!-- Media untuk Basic Card (Bottom - default) -->\n <div\n v-if=\"variant === 'basic' && computedMediaPosition === 'bottom'\"\n class=\"ina-card__media\"\n >\n <slot name=\"media\">\n <img v-if=\"mediaSrc\" :src=\"mediaSrc\" :alt=\"mediaAlt || 'Card media'\" />\n </slot>\n </div>\n\n <!-- Media untuk Horizontal Card (Left) - harus di-render sebelum content -->\n <div\n v-if=\"variant === 'horizontal' && computedMediaPosition === 'left'\"\n class=\"ina-card__media\"\n >\n <slot name=\"media\">\n <img v-if=\"mediaSrc\" :src=\"mediaSrc\" :alt=\"mediaAlt || 'Card media'\" />\n </slot>\n </div>\n\n <!-- Media untuk Horizontal Card (Right) - harus di-render setelah content -->\n <div\n v-if=\"variant === 'horizontal' && computedMediaPosition === 'right'\"\n class=\"ina-card__media\"\n >\n <slot name=\"media\">\n <img v-if=\"mediaSrc\" :src=\"mediaSrc\" :alt=\"mediaAlt || 'Card media'\" />\n </slot>\n </div>\n\n <!-- Legacy Support: Header, Body, Footer (hanya untuk variant lama) -->\n <template\n v-if=\"\n variant !== 'basic' && variant !== 'horizontal' && variant !== 'overlay'\n \"\n >\n <div\n v-if=\"showHeader && (title || $slots.title || $slots.header)\"\n class=\"ina-card__header\"\n >\n <div v-if=\"title || $slots.title\" class=\"ina-card__title\">\n <slot name=\"title\">\n <component :is=\"title\" v-if=\"typeof title !== 'string' && title\" />\n <template v-else-if=\"typeof title === 'string'\">{{\n title\n }}</template>\n </slot>\n </div>\n <div v-if=\"subtitle || $slots.subtitle\" class=\"ina-card__subtitle\">\n <slot name=\"subtitle\">\n <component\n :is=\"subtitle\"\n v-if=\"typeof subtitle !== 'string' && subtitle\"\n />\n <template v-else-if=\"typeof subtitle === 'string'\">{{\n subtitle\n }}</template>\n </slot>\n </div>\n <div v-if=\"$slots.header\" class=\"ina-card__header-content\">\n <slot name=\"header\" />\n </div>\n </div>\n\n <div\n v-if=\"$slots.default && !title && !description\"\n class=\"ina-card__body\"\n >\n <slot />\n </div>\n\n <div v-if=\"showFooter || $slots.footer\" class=\"ina-card__footer\">\n <slot name=\"footer\" />\n </div>\n </template>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, type Component, type VNode, isVNode } from 'vue';\nimport Button from './Button.vue';\nexport interface CardProps {\n /** Varian card: basic (vertical), horizontal, overlay */\n variant?: 'basic' | 'horizontal' | 'overlay';\n /** Posisi media: untuk basic (top/bottom), horizontal (left/right), overlay (top/bottom) */\n mediaPosition?: 'top' | 'bottom' | 'left' | 'right';\n /** Avatar image source */\n avatar?: string;\n /** Avatar alt text */\n avatarAlt?: string;\n /** Title card */\n title?: string | VNode | Component;\n /** Description card */\n description?: string | VNode | Component;\n /** Media image source */\n mediaSrc?: string;\n /** Media alt text */\n mediaAlt?: string;\n /** Apakah button ditampilkan */\n showButton?: boolean;\n /** Button text */\n buttonText?: string;\n /** Button hierarchy */\n buttonHierarchy?: 'primary' | 'secondary' | 'tertiary' | 'link';\n /** Legacy: Subtitle card */\n subtitle?: string | VNode | Component;\n /** Legacy: Apakah header ditampilkan */\n showHeader?: boolean;\n /** Legacy: Apakah footer ditampilkan */\n showFooter?: boolean;\n /** Legacy: Apakah card memiliki efek hover */\n hoverable?: boolean;\n /** Legacy: Apakah card dapat diklik */\n clickable?: boolean;\n /** Legacy: Size card */\n size?: 'sm' | 'md' | 'lg';\n}\n\nconst props = withDefaults(defineProps<CardProps>(), {\n variant: 'basic',\n mediaPosition: undefined,\n showButton: false,\n buttonHierarchy: 'primary',\n showHeader: true,\n showFooter: false,\n hoverable: false,\n clickable: false,\n size: 'md',\n});\n\nconst emit = defineEmits<{\n buttonClick: [];\n click: [event: MouseEvent];\n}>();\n\n// Computed media position berdasarkan variant\nconst computedMediaPosition = computed(() => {\n if (props.mediaPosition) {\n return props.mediaPosition;\n }\n\n // Default berdasarkan variant\n switch (props.variant) {\n case 'basic':\n return 'bottom';\n case 'horizontal':\n return 'right';\n case 'overlay':\n return 'top';\n default:\n return 'bottom';\n }\n});\n\nconst cardClasses = computed(() => {\n const classes = ['ina-card'];\n\n // Variant class\n classes.push(`ina-card--variant-${props.variant}`);\n\n // Media position class\n classes.push(`ina-card--media-${computedMediaPosition.value}`);\n\n // Legacy support\n if (props.hoverable) {\n classes.push('ina-card--hoverable');\n }\n\n if (props.clickable) {\n classes.push('ina-card--clickable');\n }\n\n if (props.showHeader) {\n classes.push('ina-card--with-header');\n }\n\n if (props.showFooter) {\n classes.push('ina-card--with-footer');\n }\n\n return classes;\n});\n\nconst handleButtonClick = () => {\n emit('buttonClick');\n};\n</script>\n","<template>\n <label :for=\"inputId\" class=\"ina-checkbox\" :class=\"checkboxClasses\">\n <input\n :id=\"inputId\"\n ref=\"inputRef\"\n :checked=\"checked\"\n type=\"checkbox\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n :indeterminate=\"indeterminate\"\n class=\"ina-checkbox__input peer\"\n v-bind=\"$attrs\"\n @change=\"handleChange\"\n @focus=\"handleFocus\"\n @blur=\"handleBlur\"\n />\n\n <div :class=\"boxClasses\">\n <svg\n v-if=\"checked && !indeterminate\"\n class=\"ina-checkbox__icon\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M20 6L9 17L4 12\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n\n <svg\n v-else-if=\"indeterminate\"\n class=\"ina-checkbox__icon\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M5 12H19\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </div>\n\n <div class=\"ina-checkbox__content\">\n <span v-if=\"$slots.default || label\" class=\"ina-checkbox__label\">\n <slot>{{ label }}</slot>\n </span>\n <span v-if=\"subtext\" class=\"ina-checkbox__subtext\">\n {{ subtext }}\n </span>\n </div>\n </label>\n\n <div v-if=\"statusMessage\" :class=\"statusClasses\">\n {{ statusMessage }}\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, watch } from 'vue';\nexport interface CheckboxProps {\n modelValue?: boolean | string[];\n label?: string;\n subtext?: string;\n value?: string;\n size?: 'sm' | 'md' | 'lg';\n status?: 'neutral' | 'success' | 'error' | 'warning';\n statusMessage?: string;\n disabled?: boolean;\n readonly?: boolean;\n indeterminate?: boolean;\n id?: string;\n}\n\nconst props = withDefaults(defineProps<CheckboxProps>(), {\n modelValue: false,\n size: 'md',\n status: 'neutral',\n disabled: false,\n readonly: false,\n indeterminate: false,\n});\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: boolean | string[]];\n change: [value: boolean | string[]];\n focus: [event: FocusEvent];\n blur: [event: FocusEvent];\n}>();\n\nconst inputRef = ref<HTMLInputElement>();\n\n// Check if this checkbox is checked based on modelValue type\nconst checked = computed(() => {\n if (Array.isArray(props.modelValue)) {\n return props.value ? props.modelValue.includes(props.value) : false;\n }\n return Boolean(props.modelValue);\n});\n\n// Generate unique ID for input, or use id from props if provided\nconst inputId = computed(() => {\n if (props.id) {\n return props.id;\n }\n return `checkbox-${Math.random().toString(36).substr(2, 9)}`;\n});\n\nconst checkboxClasses = computed(() => {\n const classes = ['ina-checkbox'];\n\n if (props.disabled) {\n classes.push('ina-checkbox--disabled');\n }\n\n if (props.subtext) {\n classes.push('ina-checkbox--with-subtext');\n }\n\n return classes;\n});\n\nconst boxClasses = computed(() => {\n const classes = ['ina-checkbox__box'];\n\n if (checked.value) {\n classes.push('ina-checkbox__box--checked');\n } else if (props.indeterminate) {\n classes.push('ina-checkbox__box--indeterminate');\n } else {\n classes.push('ina-checkbox__box--unchecked');\n }\n\n return classes;\n});\n\nconst statusClasses = computed(() => {\n const classes = ['ina-checkbox__status'];\n\n if (props.status !== 'neutral') {\n classes.push(`ina-checkbox__status--${props.status}`);\n }\n\n return classes;\n});\n\nconst handleChange = (event: Event) => {\n const target = event.target as HTMLInputElement;\n const isChecked = target.checked;\n\n if (Array.isArray(props.modelValue)) {\n // Handle array mode (multiple selection)\n if (!props.value) return;\n\n const currentArray = [...props.modelValue];\n if (isChecked) {\n if (!currentArray.includes(props.value)) {\n currentArray.push(props.value);\n }\n } else {\n const index = currentArray.indexOf(props.value);\n if (index > -1) {\n currentArray.splice(index, 1);\n }\n }\n emit('update:modelValue', currentArray);\n emit('change', currentArray);\n } else {\n // Handle boolean mode (single selection)\n emit('update:modelValue', isChecked);\n emit('change', isChecked);\n }\n};\n\nconst handleFocus = (event: FocusEvent) => {\n emit('focus', event);\n};\n\nconst handleBlur = (event: FocusEvent) => {\n emit('blur', event);\n};\n</script>\n","/**\n * Security utilities for preventing XSS attacks\n */\n\n// HTML entities mapping for encoding\nconst HTML_ENTITIES: Record<string, string> = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&#x27;',\n '/': '&#x2F;',\n '`': '&#x60;',\n '=': '&#x3D;',\n};\n\n// Dangerous patterns that could lead to XSS\nconst DANGEROUS_PATTERNS = [\n /<script\\b[^<]*(?:(?!<\\/script>)<[^<]*)*<\\/script>/gi,\n /<iframe\\b[^<]*(?:(?!<\\/iframe>)<[^<]*)*<\\/iframe>/gi,\n /<object\\b[^<]*(?:(?!<\\/object>)<[^<]*)*<\\/object>/gi,\n /<embed\\b[^<]*(?:(?!<\\/embed>)<[^<]*)*<\\/embed>/gi,\n /<applet\\b[^<]*(?:(?!<\\/applet>)<[^<]*)*<\\/applet>/gi,\n /<form\\b[^<]*(?:(?!<\\/form>)<[^<]*)*<\\/form>/gi,\n /<input\\b[^>]*>/gi,\n /<textarea\\b[^<]*(?:(?!<\\/textarea>)<[^<]*)*<\\/textarea>/gi,\n /<select\\b[^<]*(?:(?!<\\/select>)<[^<]*)*<\\/select>/gi,\n /<button\\b[^<]*(?:(?!<\\/button>)<[^<]*)*<\\/button>/gi,\n /<link\\b[^>]*>/gi,\n /<meta\\b[^>]*>/gi,\n /<style\\b[^<]*(?:(?!<\\/style>)<[^<]*)*<\\/style>/gi,\n /javascript:/gi,\n /vbscript:/gi,\n /data:text\\/html/gi,\n /on\\w+\\s*=/gi, // Event handlers like onclick, onload, etc.\n];\n\n// Dangerous attributes that could execute code\nconst DANGEROUS_ATTRIBUTES = [\n 'onload',\n 'onerror',\n 'onclick',\n 'onmouseover',\n 'onmouseout',\n 'onmousedown',\n 'onmouseup',\n 'onkeydown',\n 'onkeyup',\n 'onkeypress',\n 'onfocus',\n 'onblur',\n 'onchange',\n 'onsubmit',\n 'onreset',\n 'onselect',\n 'onabort',\n 'onbeforeunload',\n 'onerror',\n 'onhashchange',\n 'onload',\n 'onpageshow',\n 'onpagehide',\n 'onresize',\n 'onscroll',\n 'onunload',\n 'onbeforeprint',\n 'onafterprint',\n 'oncontextmenu',\n 'onformchange',\n 'onforminput',\n 'oninput',\n 'oninvalid',\n 'oncanplay',\n 'oncanplaythrough',\n 'ondurationchange',\n 'onemptied',\n 'onended',\n 'onloadeddata',\n 'onloadedmetadata',\n 'onloadstart',\n 'onpause',\n 'onplay',\n 'onplaying',\n 'onprogress',\n 'onratechange',\n 'onreadystatechange',\n 'onseeked',\n 'onseeking',\n 'onstalled',\n 'onsuspend',\n 'ontimeupdate',\n 'onvolumechange',\n 'onwaiting',\n];\n\n/**\n * Encode HTML entities to prevent XSS\n */\nexport function encodeHtmlEntities(input: string): string {\n if (typeof input !== 'string') return '';\n\n return input.replace(/[&<>\"'`=\\/]/g, (match) => {\n return HTML_ENTITIES[match] || match;\n });\n}\n\n/**\n * Decode HTML entities (use with caution)\n */\nexport function decodeHtmlEntities(input: string): string {\n if (typeof input !== 'string') return '';\n\n const entityMap: Record<string, string> = {};\n Object.entries(HTML_ENTITIES).forEach(([key, value]) => {\n entityMap[value] = key;\n });\n\n return input.replace(/&[#\\w]+;/g, (entity) => {\n return entityMap[entity] || entity;\n });\n}\n\n/**\n * Check if input contains dangerous patterns\n */\nexport function containsDangerousPatterns(input: string): boolean {\n if (typeof input !== 'string') return false;\n\n // Check for dangerous HTML patterns\n for (const pattern of DANGEROUS_PATTERNS) {\n if (pattern.test(input)) {\n return true;\n }\n }\n\n // Check for dangerous attributes\n for (const attr of DANGEROUS_ATTRIBUTES) {\n if (input.toLowerCase().includes(attr)) {\n return true;\n }\n }\n\n return false;\n}\n\n/**\n * Sanitize input by removing dangerous content\n */\nexport function sanitizeInput(\n input: string,\n options: {\n allowHtml?: boolean;\n maxLength?: number;\n stripScripts?: boolean;\n stripEvents?: boolean;\n } = {}\n): string {\n if (typeof input !== 'string') return '';\n\n const {\n allowHtml = false,\n maxLength,\n stripScripts = true,\n stripEvents = true,\n } = options;\n\n let sanitized = input;\n\n // Apply length limit\n if (maxLength && sanitized.length > maxLength) {\n sanitized = sanitized.substring(0, maxLength);\n }\n\n if (!allowHtml) {\n // Remove all HTML tags and encode entities\n sanitized = sanitized.replace(/<[^>]*>/g, '');\n sanitized = encodeHtmlEntities(sanitized);\n } else {\n // Allow HTML but remove dangerous elements\n if (stripScripts) {\n sanitized = sanitized.replace(\n /<script\\b[^<]*(?:(?!<\\/script>)<[^<]*)*<\\/script>/gi,\n ''\n );\n sanitized = sanitized.replace(\n /<iframe\\b[^<]*(?:(?!<\\/iframe>)<[^<]*)*<\\/iframe>/gi,\n ''\n );\n sanitized = sanitized.replace(\n /<object\\b[^<]*(?:(?!<\\/object>)<[^<]*)*<\\/object>/gi,\n ''\n );\n sanitized = sanitized.replace(\n /<embed\\b[^<]*(?:(?!<\\/embed>)<[^<]*)*<\\/embed>/gi,\n ''\n );\n sanitized = sanitized.replace(\n /<applet\\b[^<]*(?:(?!<\\/applet>)<[^<]*)*<\\/applet>/gi,\n ''\n );\n }\n\n if (stripEvents) {\n // Remove event handlers\n for (const attr of DANGEROUS_ATTRIBUTES) {\n const regex = new RegExp(`\\\\s${attr}\\\\s*=\\\\s*[\"'][^\"']*[\"']`, 'gi');\n sanitized = sanitized.replace(regex, '');\n }\n }\n\n // Remove javascript: and vbscript: protocols\n sanitized = sanitized.replace(/javascript:/gi, '');\n sanitized = sanitized.replace(/vbscript:/gi, '');\n sanitized = sanitized.replace(/data:text\\/html/gi, '');\n }\n\n return sanitized;\n}\n\n/**\n * Validate input for security threats\n */\nexport function validateInput(input: string): {\n isValid: boolean;\n threats: string[];\n sanitized: string;\n} {\n const threats: string[] = [];\n let sanitized = input;\n\n if (typeof input !== 'string') {\n return {\n isValid: false,\n threats: ['Input must be a string'],\n sanitized: '',\n };\n }\n\n // Check for dangerous patterns\n if (containsDangerousPatterns(input)) {\n threats.push('Contains potentially dangerous content');\n sanitized = sanitizeInput(input, { allowHtml: false });\n }\n\n // Check for suspicious length (potential buffer overflow)\n if (input.length > 10000) {\n threats.push('Input length exceeds safe limit');\n sanitized = sanitized.substring(0, 10000);\n }\n\n return {\n isValid: threats.length === 0,\n threats,\n sanitized,\n };\n}\n\n/**\n * Security configuration for input components\n */\nexport interface SecurityConfig {\n /** Enable XSS protection */\n enableXssProtection?: boolean;\n /** Maximum allowed input length */\n maxLength?: number;\n /** Allow HTML content (use with extreme caution) */\n allowHtml?: boolean;\n /** Strip script tags */\n stripScripts?: boolean;\n /** Strip event handlers */\n stripEvents?: boolean;\n /** Log security violations */\n logViolations?: boolean;\n /** Callback for security violations */\n onSecurityViolation?: (threats: string[], input: string) => void;\n}\n\n/**\n * Default security configuration\n */\nexport const DEFAULT_SECURITY_CONFIG: SecurityConfig = {\n enableXssProtection: true,\n maxLength: 10000,\n allowHtml: false,\n stripScripts: true,\n stripEvents: true,\n logViolations: true,\n onSecurityViolation: (threats, input) => {\n // Only log in development environments if 'console' is available\n if (\n typeof window !== 'undefined' &&\n window?.location?.hostname === 'localhost'\n ) {\n console.warn('Security violation detected:', threats, 'Input:', input);\n }\n },\n};\n\n/**\n * Sanitize file name for safe display\n * Removes dangerous characters that could lead to XSS\n */\nexport function sanitizeFileName(fileName: string): string {\n if (typeof fileName !== 'string') return '';\n\n // Remove dangerous characters: < > \" ' / \\ and control characters\n let sanitized = fileName.replace(/[<>\"'/\\\\\\x00-\\x1F\\x7F]/g, '');\n\n // Limit length to prevent buffer overflow\n const MAX_FILENAME_LENGTH = 255;\n if (sanitized.length > MAX_FILENAME_LENGTH) {\n const ext = sanitized.substring(sanitized.lastIndexOf('.'));\n const nameWithoutExt = sanitized.substring(0, sanitized.lastIndexOf('.'));\n sanitized =\n nameWithoutExt.substring(0, MAX_FILENAME_LENGTH - ext.length) + ext;\n }\n\n // Remove leading/trailing dots and spaces (Windows filesystem restrictions)\n sanitized = sanitized.replace(/^[\\s.]+|[\\s.]+$/g, '');\n\n return sanitized || 'file';\n}\n\n","<template>\n <div class=\"ina-text-field\">\n <label v-if=\"label\" :for=\"inputId\" class=\"ina-text-field__label\">\n <component :is=\"labelComponent\" v-if=\"labelComponent\" />\n <span v-else-if=\"label && typeof label === 'string'\">{{ label }}</span>\n <span v-if=\"required\" class=\"ina-text-field__required\">*</span>\n </label>\n\n <div :class=\"wrapperClasses\">\n <div v-if=\"prefixIcon\" class=\"ina-text-field__prefix-icon\">\n <component :is=\"prefixIcon\" :size=\"16\" />\n </div>\n\n <input\n v-bind=\"filteredAttrs\"\n :id=\"inputId\"\n ref=\"inputRef\"\n v-model=\"inputValue\"\n :name=\"(attrs.name as string) || undefined\"\n :type=\"type\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n :maxlength=\"maxLength\"\n :autocomplete=\"autocomplete\"\n :spellcheck=\"spellCheck\"\n :autocapitalize=\"autoCapitalize\"\n :autocorrect=\"autoCorrect\"\n :inputmode=\"inputMode\"\n :dir=\"dir\"\n :class=\"inputClasses\"\n @input=\"handleInput\"\n @blur=\"handleBlur\"\n @focus=\"handleFocus\"\n />\n\n <div v-if=\"showCharCount && maxLength\" class=\"ina-text-field__char-count\">\n {{ inputValue.length }}/{{ maxLength }}\n </div>\n\n <button\n v-if=\"showClearButton && !disabled && inputValue\"\n type=\"button\"\n class=\"ina-text-field__clear-button\"\n @click=\"handleClear\"\n >\n <IconX :size=\"16\" />\n </button>\n </div>\n\n <div v-if=\"bottomText || validationError\" :class=\"statusClasses\">\n <template v-if=\"validationError\">{{ validationError }}</template>\n <template v-else>\n <component :is=\"bottomTextComponent\" v-if=\"bottomTextComponent\" />\n <span v-else>{{ bottomText }}</span>\n </template>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, watch, nextTick, onUnmounted, useAttrs } from 'vue';\nimport type { Component } from 'vue';\nimport { IconX } from '@tabler/icons-vue';\nimport {\n validateInput,\n type SecurityConfig,\n DEFAULT_SECURITY_CONFIG,\n} from '../utils/security';\n\nexport type ValidationRule =\n | { kind: 'regex'; pattern: RegExp; message?: string }\n | { kind: 'maxLength'; value: number; message?: string }\n | { kind: 'minLength'; value: number; message?: string }\n | {\n kind: 'custom';\n validate: (v: string) => string | null;\n message?: string;\n };\n\nexport interface TextFieldProps {\n modelValue?: string;\n label?: string | Component;\n helperText?: string | Component;\n placeholder?: string;\n type?: 'text' | 'email' | 'password' | 'number' | 'tel' | 'url';\n size?: 'sm' | 'md' | 'lg';\n status?: 'neutral' | 'success' | 'error' | 'warning';\n statusMessage?: string | Component;\n disabled?: boolean;\n readonly?: boolean;\n required?: boolean;\n maxLength?: number;\n showCharCount?: boolean;\n showClearButton?: boolean;\n prefixIcon?: Component;\n debounce?: number;\n // Security props\n securityConfig?: SecurityConfig;\n // Privacy & abuse protection props\n autocomplete?: string;\n spellCheck?: boolean;\n autoCapitalize?: 'off' | 'none' | 'sentences' | 'words' | 'characters';\n autoCorrect?: 'off' | 'on';\n inputMode?:\n | 'none'\n | 'text'\n | 'tel'\n | 'url'\n | 'email'\n | 'numeric'\n | 'decimal'\n | 'search';\n dir?: 'auto' | 'ltr' | 'rtl';\n // Validation & normalization\n validation?: ValidationRule[];\n normalize?: (value: string) => string;\n}\n\nconst props = withDefaults(defineProps<TextFieldProps>(), {\n modelValue: '',\n type: 'text',\n size: 'md',\n status: 'neutral',\n disabled: false,\n readonly: false,\n required: false,\n showCharCount: false,\n showClearButton: false,\n debounce: 0,\n securityConfig: () => DEFAULT_SECURITY_CONFIG,\n spellCheck: undefined,\n autoCapitalize: undefined,\n autoCorrect: undefined,\n inputMode: undefined,\n dir: undefined,\n});\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string];\n input: [event: Event];\n blur: [event: FocusEvent];\n focus: [event: FocusEvent];\n clear: [];\n}>();\n\nconst attrs = useAttrs();\nconst inputRef = ref<HTMLInputElement>();\nconst inputValue = ref(getInitialValue());\nconst debounceTimer = ref<any>();\nconst validationError = ref<string | null>(null);\n\n// Initialize with sanitized value if security is enabled\nfunction getInitialValue(): string {\n const value = props.modelValue || '';\n if (props.securityConfig?.enableXssProtection) {\n const validation = validateInput(value);\n return validation.sanitized;\n }\n return value;\n}\n\n// Generate unique ID for input, or use id from props/attrs if provided (1:1 with React)\nconst inputId = computed(() => {\n // Check if id is provided via props or attrs (same as React's rest?.id || rest?.name)\n const providedId = (attrs.id as string) || (attrs.name as string);\n if (providedId) {\n return String(providedId);\n }\n // Fallback to generated ID (same as React's String(label).toLowerCase())\n if (props.label && typeof props.label === 'string') {\n return String(props.label).toLowerCase();\n }\n return `text-field-${Math.random().toString(36).substr(2, 9)}`;\n});\n\n// Computed untuk label component\nconst labelComponent = computed(() => {\n if (!props.label) return null;\n if (typeof props.label === 'string') return null;\n return props.label as Component;\n});\n\nconst bottomText = computed(() => {\n if (props.status !== 'neutral' && props.statusMessage) {\n return props.statusMessage;\n }\n return props.statusMessage || props.helperText;\n});\n\nconst bottomTextComponent = computed(() => {\n const text = bottomText.value;\n if (!text) return null;\n if (typeof text === 'string') return null;\n return text as Component;\n});\n\n// Filter out id and name from attrs to avoid conflicts (they're handled explicitly)\nconst filteredAttrs = computed(() => {\n const { id, name, ...rest } = attrs;\n return rest;\n});\n\nconst wrapperClasses = computed(() => {\n const classes = ['ina-text-field__wrapper'];\n\n // Size\n classes.push(`ina-text-field__wrapper--size-${props.size}`);\n\n // States\n if (props.disabled) {\n classes.push('ina-text-field__wrapper--disabled');\n }\n\n if (props.readonly) {\n classes.push('ina-text-field__wrapper--readonly');\n }\n\n if (props.status !== 'neutral') {\n classes.push(`ina-text-field__wrapper--status-${props.status}`);\n }\n\n if (props.prefixIcon) {\n classes.push('ina-text-field__wrapper--with-prefix');\n }\n\n if (props.showClearButton) {\n classes.push('ina-text-field__wrapper--with-clear');\n }\n\n return classes;\n});\n\nconst inputClasses = computed(() => {\n const classes = ['ina-text-field__input'];\n\n if (props.prefixIcon) {\n classes.push('ina-text-field__input--with-prefix');\n }\n\n if (props.showClearButton) {\n classes.push('ina-text-field__input--with-clear');\n }\n\n return classes;\n});\n\nconst statusClasses = computed(() => {\n const classes = ['ina-text-field__status'];\n\n // Use error status if validation error exists\n if (validationError.value) {\n classes.push('ina-text-field__status--error');\n } else if (props.status !== 'neutral') {\n classes.push(`ina-text-field__status--${props.status}`);\n }\n\n return classes;\n});\n\n// Validate input against validation rules\nfunction validateValue(value: string): string | null {\n if (!props.validation || props.validation.length === 0) {\n return null;\n }\n\n for (const rule of props.validation) {\n let error: string | null = null;\n\n switch (rule.kind) {\n case 'regex':\n if (!rule.pattern.test(value)) {\n error = rule.message || 'Input tidak sesuai format yang diharapkan';\n }\n break;\n case 'maxLength':\n if (value.length > rule.value) {\n error = rule.message || `Maksimal ${rule.value} karakter`;\n }\n break;\n case 'minLength':\n if (value.length < rule.value) {\n error = rule.message || `Minimal ${rule.value} karakter`;\n }\n break;\n case 'custom':\n error = rule.validate(value);\n break;\n }\n\n if (error) {\n return error;\n }\n }\n\n return null;\n}\n\nconst handleInput = (event: Event) => {\n const target = event.target as HTMLInputElement;\n let value = target.value;\n\n // Apply maxLength constraint\n if (props.maxLength != null && value.length > props.maxLength) {\n return;\n }\n\n // Apply security validation if enabled\n if (props.securityConfig?.enableXssProtection) {\n const validation = validateInput(value);\n\n if (!validation.isValid) {\n // Log security violations\n if (props.securityConfig.logViolations) {\n console.warn('TextField security violation:', validation.threats);\n }\n\n // Call security violation callback\n if (props.securityConfig.onSecurityViolation) {\n props.securityConfig.onSecurityViolation(validation.threats, value);\n }\n\n // Use sanitized value\n value = validation.sanitized;\n }\n }\n\n // Apply normalization if provided\n if (props.normalize) {\n value = props.normalize(value);\n }\n\n // Validate against validation rules\n validationError.value = validateValue(value);\n\n inputValue.value = value;\n\n if (props.debounce > 0) {\n if (debounceTimer.value) {\n clearTimeout(debounceTimer.value);\n }\n\n debounceTimer.value = setTimeout(() => {\n emit('update:modelValue', inputValue.value);\n emit('input', event);\n }, props.debounce) as unknown as number;\n } else {\n emit('update:modelValue', inputValue.value);\n emit('input', event);\n }\n};\n\nconst handleBlur = (event: FocusEvent) => {\n emit('blur', event);\n};\n\nconst handleFocus = (event: FocusEvent) => {\n emit('focus', event);\n};\n\nconst handleClear = () => {\n inputValue.value = '';\n emit('update:modelValue', '');\n emit('clear');\n\n nextTick(() => {\n inputRef.value?.focus();\n });\n};\n\n// Watch for external modelValue changes\nwatch(\n () => props.modelValue,\n (newValue) => {\n let value = newValue || '';\n\n // Apply security validation when value changes\n if (props.securityConfig?.enableXssProtection) {\n const validation = validateInput(value);\n if (!validation.isValid) {\n if (props.securityConfig.logViolations) {\n console.warn(\n 'TextField security violation on value change:',\n validation.threats\n );\n }\n if (props.securityConfig.onSecurityViolation) {\n props.securityConfig.onSecurityViolation(validation.threats, value);\n }\n value = validation.sanitized;\n }\n }\n\n inputValue.value = value;\n validationError.value = validateValue(value);\n }\n);\n\n// Cleanup debounce timer on unmount\nonUnmounted(() => {\n if (debounceTimer.value) {\n clearTimeout(debounceTimer.value);\n }\n});\n</script>\n","<template>\n <div class=\"ina-chip\" :class=\"chipContainerClasses\">\n <div class=\"ina-chip__list\">\n <button\n v-for=\"(opt, index) in allOptions\"\n :key=\"`${opt.label}-${index}`\"\n type=\"button\"\n :class=\"getChipItemClasses(opt, index)\"\n @click=\"handleChipClick(opt, index)\"\n >\n {{ opt.label }}\n </button>\n </div>\n\n <!-- Render field kustom hanya saat showInput=true -->\n <div v-if=\"showCustomization && showInput\" class=\"ina-chip__custom-field\">\n <div v-if=\"customizationComponent\">\n <component :is=\"customizationComponent\" />\n </div>\n <div v-else>\n <TextField\n :model-value=\"tempValue\"\n class=\"ina-chip__input\"\n placeholder=\"Masukkan data yang Anda inginkan\"\n :show-clear-button=\"false\"\n @update:model-value=\"setTempValue\"\n @blur=\"handleBlur\"\n @keydown=\"handleKeydown\"\n />\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, watch } from 'vue';\nimport TextField from './TextField.vue';\n/**\n * Satu opsi Chip statis.\n */\nexport interface ChipOption {\n /** Teks yang ditampilkan */\n label: string;\n /** Value yang akan dikirim ke onSelect */\n value: string;\n}\n\n/**\n * Props untuk komponen Chip.\n *\n * @param {ChipOption[]} options Daftar opsi statis.\n * @param {string} selected Value yang sedang dipilih.\n * @param {'small'|'medium'} [size='medium'] Ukuran chip.\n * @param {'filled'|'outline'} [variant='outline'] Variant chip (filled atau outline).\n * @param {(value: string) => void} [onSelect] Callback saat user memilih opsi atau menyelesaikan input kustom.\n * @param {boolean} [showCustomization] Jika true, render tombol kustomisasi.\n * @param {string} [customizationLabel] Label tombol kustomisasi. Default: \"Kustomisasi\".\n * @param {any} [customizationComponent] Override UI input kustom (default: number + \"Hari\").\n */\nexport interface ChipProps {\n options: ChipOption[];\n selected: string;\n size?: 'small' | 'medium';\n variant?: 'filled' | 'outline';\n onSelect?: (value: string) => void;\n\n showCustomization?: boolean;\n customizationLabel?: string;\n customizationComponent?: any;\n}\n\nconst props = withDefaults(defineProps<ChipProps>(), {\n size: 'medium',\n variant: 'outline',\n showCustomization: false,\n customizationLabel: 'Kustomisasi',\n});\n\nconst emit = defineEmits<{\n select: [value: string];\n}>();\n\n// Apakah selected berasal dari kustom (bukan opsi statis)\nconst isCustomSelected = computed(\n () => !props.options.some((opt) => opt.value === props.selected)\n);\n\n// showInput: kontrol muncul/tidaknya field kustom\nconst showInput = ref(false);\n// tempValue untuk menampung ketikan user sebelum commit\nconst tempValue = ref(props.selected);\n\n// Sinkronisasi: kalau selected berubah ke statis, sembunyikan input dan reset temp\nwatch(\n () => props.selected,\n (newSelected) => {\n if (!isCustomSelected.value) {\n showInput.value = false;\n tempValue.value = '';\n } else {\n tempValue.value = newSelected;\n }\n },\n { immediate: true }\n);\n\nwatch(\n () => isCustomSelected.value,\n (newIsCustomSelected) => {\n if (!newIsCustomSelected) {\n showInput.value = false;\n tempValue.value = '';\n } else {\n tempValue.value = props.selected;\n }\n }\n);\n\n// Gabungkan opsi statis + tombol kustomisasi\nconst allOptions = computed(() =>\n props.showCustomization\n ? [\n ...props.options,\n { label: props.customizationLabel, value: props.customizationLabel },\n ]\n : props.options\n);\n\nconst chipContainerClasses = computed(() => {\n const classes = ['ina-chip'];\n return classes;\n});\n\nconst getChipItemClasses = (opt: ChipOption, index: number) => {\n const isToggle =\n props.showCustomization && opt.label === props.customizationLabel;\n const isSelected = isToggle\n ? isCustomSelected.value\n : props.selected === opt.value;\n\n const classes = [\n 'ina-chip__item',\n `ina-chip__item--size-${props.size}`,\n `ina-chip__item--variant-${props.variant}`,\n ];\n\n if (isSelected) {\n classes.push('ina-chip__item--selected');\n }\n\n return classes;\n};\n\nconst handleChipClick = (opt: ChipOption, index: number) => {\n const isToggle =\n props.showCustomization && opt.label === props.customizationLabel;\n\n if (isToggle) {\n // klik kustom: tampilkan input\n showInput.value = true;\n // reset tempValue ke current selected (atau '')\n tempValue.value = isCustomSelected.value ? props.selected : '';\n } else {\n // pilih opsi statis\n emit('select', opt.value);\n props.onSelect?.(opt.value);\n }\n};\n\nconst setTempValue = (value: string) => {\n tempValue.value = value;\n};\n\nconst handleBlur = () => {\n // commit value saat blur, hide input\n emit('select', tempValue.value);\n props.onSelect?.(tempValue.value);\n showInput.value = false;\n};\n\nconst handleKeydown = (e: KeyboardEvent) => {\n if (e.key === 'Enter') {\n emit('select', tempValue.value);\n props.onSelect?.(tempValue.value);\n showInput.value = false;\n (e.target as HTMLInputElement).blur();\n }\n};\n</script>\n","<template>\n <div :class=\"containerClasses\" :style=\"containerStyle\">\n <svg\n class=\"ina-circle-progress-bar__svg\"\n width=\"100%\"\n height=\"100%\"\n :viewBox=\"`0 0 ${diameter} ${diameter}`\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <!-- Track Circle -->\n <circle\n class=\"ina-circle-progress-bar__track\"\n :cx=\"center\"\n :cy=\"center\"\n :r=\"radius\"\n :stroke-width=\"strokeWidth\"\n />\n <!-- Progress Circle -->\n <circle\n class=\"ina-circle-progress-bar__progress\"\n :cx=\"center\"\n :cy=\"center\"\n :r=\"radius\"\n :stroke-width=\"strokeWidth\"\n :stroke-dasharray=\"circumference\"\n :stroke-dashoffset=\"strokeDashoffset\"\n />\n </svg>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\n\nexport interface CircleProgressBarProps {\n /**\n * Progress percentage (0-100)\n */\n progress?: number;\n /**\n * Diameter of the circle in px\n * @default 20\n */\n diameter?: number;\n /**\n * Stroke width in px\n * @default 3\n */\n strokeWidth?: number;\n /**\n * Color variant or hex color\n * @default 'primary'\n */\n variant?:\n | 'primary'\n | 'secondary'\n | 'positive'\n | 'warning'\n | 'negative'\n | string;\n /**\n * Track color (background circle)\n * @default '#EAECF0'\n */\n trackColor?: string;\n}\n\nconst props = withDefaults(defineProps<CircleProgressBarProps>(), {\n progress: 0,\n diameter: 20,\n strokeWidth: 3,\n variant: 'primary',\n trackColor: '#EAECF0',\n});\n\nconst normalizedProgress = computed(() =>\n Math.min(100, Math.max(0, props.progress))\n);\n\nconst center = computed(() => props.diameter / 2);\nconst radius = computed(() => (props.diameter - props.strokeWidth) / 2);\nconst circumference = computed(() => 2 * Math.PI * radius.value);\nconst strokeDashoffset = computed(\n () =>\n circumference.value - (normalizedProgress.value / 100) * circumference.value\n);\n\nconst isCustomColor = computed(() => props.variant.startsWith('#'));\n\nconst containerClasses = computed(() => {\n const variantClass = !isCustomColor.value\n ? `ina-circle-progress-bar--${props.variant}`\n : '';\n\n return ['ina-circle-progress-bar', variantClass].filter(Boolean).join(' ');\n});\n\nconst containerStyle = computed(() => {\n const style: Record<string, string | number> = {\n '--ina-circle-progress-size': `${props.diameter}px`,\n };\n\n if (props.trackColor) {\n style['--ina-circle-progress-track-color'] = props.trackColor;\n }\n\n if (isCustomColor.value) {\n style['--ina-circle-progress-color'] = props.variant;\n }\n\n return style;\n});\n</script>\n","<template>\n <div class=\"ina-collapse\" :class=\"collapseClasses\">\n <button\n :id=\"headerId\"\n type=\"button\"\n class=\"ina-collapse__header\"\n :aria-expanded=\"isOpen\"\n :aria-controls=\"contentId\"\n @click=\"toggle\"\n >\n <span class=\"ina-collapse__title\">\n <slot name=\"title\">{{ title }}</slot>\n </span>\n\n <svg\n class=\"ina-collapse__icon\"\n :class=\"{ 'ina-collapse__icon--open': isOpen }\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M6 9L12 15L18 9\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n\n <Transition name=\"collapse\">\n <div\n v-if=\"isOpen\"\n :id=\"contentId\"\n class=\"ina-collapse__content\"\n :aria-labelledby=\"headerId\"\n >\n <div class=\"ina-collapse__body\">\n <slot />\n </div>\n </div>\n </Transition>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nexport interface CollapseProps {\n title?: string;\n defaultOpen?: boolean;\n variant?: 'default' | 'bordered' | 'filled';\n size?: 'sm' | 'md' | 'lg';\n disabled?: boolean;\n}\n\nconst props = withDefaults(defineProps<CollapseProps>(), {\n title: '',\n defaultOpen: false,\n variant: 'default',\n size: 'md',\n disabled: false,\n});\n\nconst emit = defineEmits<{\n toggle: [isOpen: boolean];\n}>();\n\nconst isOpen = ref(props.defaultOpen);\n\n// Generate unique IDs\nconst headerId = computed(\n () => `collapse-header-${Math.random().toString(36).substr(2, 9)}`\n);\nconst contentId = computed(\n () => `collapse-content-${Math.random().toString(36).substr(2, 9)}`\n);\n\nconst collapseClasses = computed(() => {\n const classes = ['ina-collapse'];\n\n classes.push(`ina-collapse--variant-${props.variant}`);\n classes.push(`ina-collapse--size-${props.size}`);\n\n if (props.disabled) {\n classes.push('ina-collapse--disabled');\n }\n\n if (isOpen.value) {\n classes.push('ina-collapse--open');\n }\n\n return classes;\n});\n\nconst toggle = () => {\n if (props.disabled) return;\n\n isOpen.value = !isOpen.value;\n emit('toggle', isOpen.value);\n};\n</script>\n\n<style scoped>\n.collapse-enter-active,\n.collapse-leave-active {\n transition: all 0.3s ease;\n overflow: hidden;\n}\n\n.collapse-enter-from,\n.collapse-leave-to {\n max-height: 0;\n opacity: 0;\n}\n\n.collapse-enter-to,\n.collapse-leave-from {\n max-height: 1000px;\n opacity: 1;\n}\n</style>\n","<template>\n <div class=\"ina-divider\" :class=\"dividerClasses\" role=\"separator\">\n <div v-if=\"label\" class=\"ina-divider__label\">\n {{ label }}\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nexport interface DividerProps {\n orientation?: 'horizontal' | 'vertical';\n variant?: 'solid' | 'dashed' | 'dotted';\n size?: 'sm' | 'md' | 'lg';\n label?: string;\n labelPosition?: 'left' | 'center' | 'right';\n}\n\nconst props = withDefaults(defineProps<DividerProps>(), {\n orientation: 'horizontal',\n variant: 'solid',\n size: 'md',\n labelPosition: 'center',\n});\n\nconst dividerClasses = computed(() => {\n const classes = ['ina-divider'];\n\n classes.push(`ina-divider--orientation-${props.orientation}`);\n classes.push(`ina-divider--variant-${props.variant}`);\n classes.push(`ina-divider--size-${props.size}`);\n\n if (props.label) {\n classes.push('ina-divider--with-label');\n classes.push(`ina-divider--label-${props.labelPosition}`);\n }\n\n return classes;\n});\n</script>\n","<template>\n <div ref=\"containerRef\" class=\"ina-dropdown\" :class=\"containerClasses\">\n <div :class=\"triggerClasses\" @click=\"handleTriggerClick\">\n <slot name=\"trigger\">\n <template v-if=\"trigger\">\n <component :is=\"trigger\" />\n </template>\n <template v-else>\n {{ triggerText }}\n </template>\n </slot>\n </div>\n\n <Teleport v-if=\"mounted\" to=\"body\">\n <Transition name=\"dropdown\">\n <div\n v-if=\"isOpen\"\n :class=\"menuClasses\"\n :style=\"computedDropdownStyle\"\n role=\"menu\"\n @mousedown.stop\n >\n <ul class=\"ina-dropdown__list\">\n <li v-for=\"(item, idx) in displayItems\" :key=\"idx\" role=\"none\">\n <component :is=\"item\" :class=\"'ina-dropdown__item'\" />\n </li>\n </ul>\n <!-- Slot for custom items -->\n <slot />\n </div>\n </Transition>\n </Teleport>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, onMounted, onUnmounted } from 'vue';\nimport { Teleport } from 'vue';\nimport type { Component, VNode } from 'vue';\nexport interface DropdownItem {\n component: Component | VNode | string;\n props?: Record<string, any>;\n}\n\nexport interface DropdownProps {\n /** Trigger element atau text untuk membuka dropdown */\n trigger?: Component | VNode | string;\n /** Text untuk trigger jika tidak menggunakan slot trigger */\n triggerText?: string;\n /** Array of items yang akan ditampilkan sebagai item dropdown */\n /** Array of items yang akan ditampilkan sebagai item dropdown */\n items: (Component | VNode | string)[];\n /** ClassName tambahan untuk kotak dropdown */\n dropdownClassName?: string;\n /** Inline style tambahan untuk kotak dropdown */\n dropdownStyle?: Record<string, any>;\n /** Jika true, dropdown tidak bisa dibuka */\n disabled?: boolean;\n /** Lebar dropdown dalam pixel. Default: 160 */\n dropdownWidth?: number;\n}\n\nconst props = withDefaults(defineProps<DropdownProps>(), {\n triggerText: 'Dropdown',\n disabled: false,\n dropdownWidth: 160,\n dropdownClassName: '',\n});\n\nconst containerRef = ref<HTMLDivElement>();\nconst isOpen = ref(false);\nconst mounted = ref(false);\nconst dropdownPosition = ref<{\n vertical: 'top' | 'bottom';\n horizontal: 'left' | 'right';\n top?: number;\n left?: number;\n}>({ vertical: 'bottom', horizontal: 'right' });\n\nconst displayItems = computed(() => {\n // If items prop is provided, use it; otherwise, slot content will be used\n return props.items || [];\n});\n\nconst containerClasses = computed(() => {\n const classes = ['ina-dropdown'];\n return classes;\n});\n\nconst triggerClasses = computed(() => {\n const classes = ['ina-dropdown__trigger'];\n if (props.disabled) {\n classes.push('ina-dropdown__trigger--disabled');\n }\n return classes;\n});\n\nconst menuClasses = computed(() => {\n const classes = [\n 'ina-dropdown__menu',\n 'ina-dropdown__menu--visible',\n `ina-dropdown__menu--position-${dropdownPosition.value.vertical}`,\n `ina-dropdown__menu--align-${dropdownPosition.value.horizontal}`,\n ];\n if (props.dropdownClassName) {\n classes.push(props.dropdownClassName);\n }\n return classes;\n});\n\nconst dropdownStyle = computed(() => {\n return {\n width: `${props.dropdownWidth}px`,\n ...props.dropdownStyle,\n };\n});\n\nconst computedDropdownStyle = computed(() => {\n const style: Record<string, string> = {\n ...dropdownStyle.value,\n position: 'absolute',\n };\n\n if (dropdownPosition.value.top !== undefined) {\n style.top = `${dropdownPosition.value.top}px`;\n }\n\n if (dropdownPosition.value.left !== undefined) {\n style.left = `${dropdownPosition.value.left}px`;\n }\n\n return style;\n});\n\nconst handleTriggerClick = (e: MouseEvent) => {\n e.stopPropagation();\n\n if (props.disabled) return;\n\n // Hitung posisi dropdown sebelum membuka (untuk portal dengan absolute positioning)\n if (containerRef.value) {\n const rect = containerRef.value.getBoundingClientRect();\n const itemCount = displayItems.value.length || 1; // Fallback to 1 if no items\n const dropdownHeight = itemCount * 40 + 16; // Estimasi tinggi dropdown\n\n // Vertical positioning\n const fitsBelow = rect.bottom + dropdownHeight <= window.innerHeight;\n const vertical = fitsBelow ? 'bottom' : 'top';\n\n // Horizontal positioning\n const fitsRight = rect.right + props.dropdownWidth <= window.innerWidth;\n const horizontal = fitsRight ? 'right' : 'left';\n\n // Calculate absolute position relative to document (for portal)\n // We need to account for scroll position since we're rendering in body\n const scrollTop = window.pageYOffset || document.documentElement.scrollTop;\n const scrollLeft =\n window.pageXOffset || document.documentElement.scrollLeft;\n\n let top = 0;\n let left = 0;\n\n if (vertical === 'bottom') {\n top = rect.bottom + scrollTop + 8; // margin-top\n } else {\n top = rect.top + scrollTop - dropdownHeight - 8; // margin-bottom\n }\n\n if (horizontal === 'right') {\n left = rect.left + scrollLeft;\n } else {\n left = rect.right + scrollLeft - props.dropdownWidth;\n }\n\n dropdownPosition.value = { vertical, horizontal, top, left };\n }\n\n isOpen.value = !isOpen.value;\n};\n\nconst handleClickOutside = (event: Event) => {\n if (\n containerRef.value &&\n !containerRef.value.contains(event.target as Node)\n ) {\n isOpen.value = false;\n }\n};\n\nonMounted(() => {\n mounted.value = true;\n document.addEventListener('click', handleClickOutside);\n});\n\nonUnmounted(() => {\n document.removeEventListener('click', handleClickOutside);\n});\n</script>\n\n<style scoped>\n.dropdown-enter-active,\n.dropdown-leave-active {\n transition: opacity var(--ina-transition-duration-200) ease-out,\n transform var(--ina-transition-duration-200) ease-out;\n}\n\n.dropdown-enter-from,\n.dropdown-leave-to {\n opacity: 0;\n transform: translateY(-0.5rem);\n}\n</style>\n","<template>\n <div :class=\"containerClasses\">\n <div class=\"ina-field-input-table__wrapper\">\n <label class=\"ina-field-input-table__label\">{{ placeholder }}</label>\n <input\n ref=\"inputRef\"\n type=\"text\"\n class=\"ina-field-input-table__input\"\n :value=\"value\"\n @input=\"handleChange\"\n @keydown=\"handleKeyDown\"\n autofocus\n />\n </div>\n\n <div class=\"ina-field-input-table__actions\">\n <button\n type=\"button\"\n @click=\"handleCommit\"\n class=\"ina-field-input-table__action-button ina-field-input-table__action-button--commit\"\n title=\"Commit\"\n >\n <IconCheck\n :size=\"20\"\n class=\"ina-field-input-table__icon ina-field-input-table__icon--commit\"\n />\n </button>\n <button\n type=\"button\"\n @click=\"handleCancel\"\n class=\"ina-field-input-table__action-button ina-field-input-table__action-button--cancel\"\n title=\"Cancel\"\n >\n <IconX\n :size=\"20\"\n class=\"ina-field-input-table__icon ina-field-input-table__icon--cancel\"\n />\n </button>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed } from 'vue';\nimport { IconCheck, IconX } from '@tabler/icons-vue';\nexport interface FieldInputTableProps {\n /** Nilai teks yang sedang diedit */\n value: string | number | any;\n /** Callback saat user mengetik ( setiap perubahan ) */\n onChange: (val: string) => void;\n /** Callback saat user commit (klik ✓ atau tekan Enter) */\n onCommit?: () => void;\n /** Callback saat user batal (klik ✕ atau tekan Esc) */\n onCancel: () => void;\n /** Placeholder teks */\n placeholder?: string;\n}\n\nconst props = withDefaults(defineProps<FieldInputTableProps>(), {\n placeholder: '',\n});\n\nconst emit = defineEmits<{\n change: [val: string];\n commit: [];\n cancel: [];\n}>();\n\nconst inputRef = ref<HTMLInputElement | null>(null);\n\nconst containerClasses = computed(() => {\n const classes = ['ina-field-input-table'];\n return classes.join(' ');\n});\n\nconst handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n handleCommit();\n }\n if (e.key === 'Escape') {\n e.preventDefault();\n handleCancel();\n }\n};\n\nconst handleChange = (e: Event) => {\n const target = e.target as HTMLInputElement;\n emit('change', target.value);\n};\n\nconst handleCommit = () => {\n emit('commit');\n};\n\nconst handleCancel = () => {\n emit('cancel');\n};\n</script>\n\n<style scoped></style>\n","/**\n * File validation utilities for security\n * Validates mimeType, file size, and file extensions\n */\n\n// Allowed MIME types mapping (whitelist approach for security)\nexport const ALLOWED_MIME_TYPES: Record<string, string[]> = {\n // Documents\n 'application/pdf': ['.pdf'],\n 'application/msword': ['.doc'],\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document': ['.docx'],\n 'application/vnd.ms-excel': ['.xls'],\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': ['.xlsx'],\n 'application/vnd.ms-powerpoint': ['.ppt'],\n 'application/vnd.openxmlformats-officedocument.presentationml.presentation': ['.pptx'],\n 'text/plain': ['.txt'],\n 'text/csv': ['.csv'],\n \n // Images\n 'image/jpeg': ['.jpg', '.jpeg'],\n 'image/png': ['.png'],\n 'image/gif': ['.gif'],\n 'image/webp': ['.webp'],\n 'image/svg+xml': ['.svg'],\n \n // Archives\n 'application/zip': ['.zip'],\n 'application/x-rar-compressed': ['.rar'],\n 'application/x-7z-compressed': ['.7z'],\n 'application/gzip': ['.gz'],\n \n // Other\n 'application/json': ['.json'],\n 'application/xml': ['.xml'],\n};\n\n// Dangerous MIME types that should be blocked\nexport const DANGEROUS_MIME_TYPES = [\n 'application/x-executable',\n 'application/x-msdownload',\n 'application/x-sh',\n 'application/x-bat',\n 'application/x-cmd',\n 'text/javascript',\n 'application/javascript',\n 'application/x-javascript',\n 'application/x-php',\n 'application/x-python',\n 'application/x-ruby',\n 'application/x-perl',\n];\n\nexport interface FileValidationResult {\n isValid: boolean;\n error?: string;\n file: File;\n}\n\n/**\n * Validate file MIME type against allowed types\n */\nexport function validateMimeType(\n file: File,\n allowedTypes?: string\n): { isValid: boolean; error?: string } {\n // If no allowedTypes specified, use default whitelist\n if (!allowedTypes) {\n // Check against dangerous types first\n if (DANGEROUS_MIME_TYPES.includes(file.type)) {\n return {\n isValid: false,\n error: 'File type tidak diizinkan untuk keamanan',\n };\n }\n \n // Check if file type is in allowed list\n if (!ALLOWED_MIME_TYPES[file.type]) {\n return {\n isValid: false,\n error: 'Tipe file tidak didukung',\n };\n }\n \n return { isValid: true };\n }\n\n // Parse allowedTypes (can be comma-separated: \"image/*,application/pdf\")\n const allowedList = allowedTypes.split(',').map((t) => t.trim());\n \n // Check against dangerous types\n if (DANGEROUS_MIME_TYPES.includes(file.type)) {\n return {\n isValid: false,\n error: 'File type tidak diizinkan untuk keamanan',\n };\n }\n\n // Validate against allowed types\n const isAllowed = allowedList.some((allowed) => {\n if (allowed.endsWith('/*')) {\n // Wildcard match (e.g., \"image/*\")\n const baseType = allowed.slice(0, -2);\n return file.type.startsWith(baseType + '/');\n } else {\n // Exact match\n return file.type === allowed;\n }\n });\n\n if (!isAllowed) {\n return {\n isValid: false,\n error: `Tipe file harus: ${allowedTypes}`,\n };\n }\n\n return { isValid: true };\n}\n\n/**\n * Validate file extension matches MIME type (additional security check)\n */\nexport function validateFileExtension(file: File): { isValid: boolean; error?: string } {\n const fileName = file.name.toLowerCase();\n const extension = fileName.substring(fileName.lastIndexOf('.'));\n \n const allowedExtensions = ALLOWED_MIME_TYPES[file.type];\n \n if (!allowedExtensions) {\n // If MIME type not in our whitelist, reject\n return {\n isValid: false,\n error: 'Tipe file tidak didukung',\n };\n }\n \n if (!allowedExtensions.includes(extension)) {\n return {\n isValid: false,\n error: 'Ekstensi file tidak sesuai dengan tipe file',\n };\n }\n \n return { isValid: true };\n}\n\n/**\n * Validate file size\n */\nexport function validateFileSize(\n file: File,\n maxSize: number\n): { isValid: boolean; error?: string } {\n if (file.size > maxSize) {\n const maxSizeMB = (maxSize / (1024 * 1024)).toFixed(2);\n return {\n isValid: false,\n error: `Ukuran file maksimal ${maxSizeMB} MB`,\n };\n }\n \n return { isValid: true };\n}\n\n/**\n * Comprehensive file validation\n */\nexport function validateFile(\n file: File,\n options: {\n allowedTypes?: string;\n maxSize?: number;\n validateExtension?: boolean;\n } = {}\n): FileValidationResult {\n const { allowedTypes, maxSize, validateExtension = true } = options;\n\n // Validate MIME type\n const mimeValidation = validateMimeType(file, allowedTypes);\n if (!mimeValidation.isValid) {\n return {\n isValid: false,\n error: mimeValidation.error,\n file,\n };\n }\n\n // Validate file extension (additional security)\n if (validateExtension) {\n const extValidation = validateFileExtension(file);\n if (!extValidation.isValid) {\n return {\n isValid: false,\n error: extValidation.error,\n file,\n };\n }\n }\n\n // Validate file size\n if (maxSize) {\n const sizeValidation = validateFileSize(file, maxSize);\n if (!sizeValidation.isValid) {\n return {\n isValid: false,\n error: sizeValidation.error,\n file,\n };\n }\n }\n\n return {\n isValid: true,\n file,\n };\n}\n\n/**\n * Format file size to human readable format\n */\nexport function formatFileSize(bytes: number): string {\n if (bytes === 0) return '0 Bytes';\n\n const k = 1024;\n const sizes = ['Bytes', 'KB', 'MB', 'GB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n\n return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];\n}\n\n/**\n * Magic number (file signature) mappings for common file types\n * Following OWASP recommendations for file upload security\n */\nconst MAGIC_NUMBERS: Record<string, number[][]> = {\n // Images\n 'image/png': [[0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]],\n 'image/jpeg': [[0xff, 0xd8, 0xff]],\n 'image/gif': [[0x47, 0x49, 0x46, 0x38, 0x37, 0x61], [0x47, 0x49, 0x46, 0x38, 0x39, 0x61]],\n 'image/webp': [[0x52, 0x49, 0x46, 0x46]], // RIFF header, need to check further\n 'image/svg+xml': [[0x3c, 0x3f, 0x78, 0x6d, 0x6c], [0x3c, 0x73, 0x76, 0x67]], // <?xml or <svg\n \n // Documents\n 'application/pdf': [[0x25, 0x50, 0x44, 0x46]], // %PDF\n 'application/msword': [[0xd0, 0xcf, 0x11, 0xe0, 0xa1, 0xb1, 0x1a, 0xe1]], // DOC\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document': [[0x50, 0x4b, 0x03, 0x04]], // DOCX (ZIP)\n 'application/vnd.ms-excel': [[0xd0, 0xcf, 0x11, 0xe0, 0xa1, 0xb1, 0x1a, 0xe1]], // XLS\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': [[0x50, 0x4b, 0x03, 0x04]], // XLSX (ZIP)\n 'application/vnd.ms-powerpoint': [[0xd0, 0xcf, 0x11, 0xe0, 0xa1, 0xb1, 0x1a, 0xe1]], // PPT\n 'application/vnd.openxmlformats-officedocument.presentationml.presentation': [[0x50, 0x4b, 0x03, 0x04]], // PPTX (ZIP)\n 'text/plain': [], // No specific magic number\n 'text/csv': [], // No specific magic number\n \n // Archives\n 'application/zip': [[0x50, 0x4b, 0x03, 0x04], [0x50, 0x4b, 0x05, 0x06], [0x50, 0x4b, 0x07, 0x08]],\n 'application/x-rar-compressed': [[0x52, 0x61, 0x72, 0x21, 0x1a, 0x07]],\n 'application/x-7z-compressed': [[0x37, 0x7a, 0xbc, 0xaf, 0x27, 0x1c]],\n 'application/gzip': [[0x1f, 0x8b]],\n \n // Other\n 'application/json': [], // No specific magic number\n 'application/xml': [[0x3c, 0x3f, 0x78, 0x6d, 0x6c]], // <?xml\n};\n\n/**\n * Check if file bytes match expected magic number\n */\nfunction checkMagicNumber(bytes: Uint8Array, expectedMimeType: string): boolean {\n const signatures = MAGIC_NUMBERS[expectedMimeType];\n \n // If no magic number defined for this type, skip validation\n if (!signatures || signatures.length === 0) {\n return true; // Allow files without specific magic numbers\n }\n \n // Check if any signature matches\n return signatures.some((signature) => {\n if (bytes.length < signature.length) return false;\n \n return signature.every((byte, index) => bytes[index] === byte);\n });\n}\n\n/**\n * Validate file magic number (file signature) against expected MIME type\n * This is a critical security check recommended by OWASP\n * \n * @param file - File object to validate\n * @param expectedMimeType - Expected MIME type\n * @returns Promise with validation result\n */\nexport async function validateMagicNumber(\n file: File,\n expectedMimeType: string\n): Promise<{ isValid: boolean; error?: string }> {\n // Skip validation for files larger than 5MB (performance optimization)\n const MAX_FILE_SIZE_FOR_MAGIC_CHECK = 5 * 1024 * 1024; // 5MB\n if (file.size > MAX_FILE_SIZE_FOR_MAGIC_CHECK) {\n return { isValid: true }; // Skip for large files\n }\n\n // Read first 16 bytes (enough for all known file signatures)\n const HEADER_BYTES = 16;\n \n return new Promise((resolve) => {\n const reader = new FileReader();\n \n reader.onload = (e) => {\n try {\n const arrayBuffer = e.target?.result as ArrayBuffer;\n if (!arrayBuffer) {\n resolve({\n isValid: false,\n error: 'Gagal membaca file signature',\n });\n return;\n }\n \n const bytes = new Uint8Array(arrayBuffer);\n const isValid = checkMagicNumber(bytes, expectedMimeType);\n \n if (!isValid) {\n resolve({\n isValid: false,\n error: 'File signature tidak sesuai dengan tipe file yang diharapkan',\n });\n } else {\n resolve({ isValid: true });\n }\n } catch (error) {\n resolve({\n isValid: false,\n error: 'Error saat memvalidasi file signature',\n });\n }\n };\n \n reader.onerror = () => {\n resolve({\n isValid: false,\n error: 'Gagal membaca file untuk validasi signature',\n });\n };\n \n // Read only first bytes for performance\n reader.readAsArrayBuffer(file.slice(0, HEADER_BYTES));\n });\n}\n\n","<template>\n <div class=\"ina-file-upload\" :class=\"uploadClasses\">\n <div v-if=\"label\" class=\"ina-file-upload__label\">\n <component :is=\"labelComponent\" v-if=\"labelComponent\" />\n <span v-else-if=\"label && typeof label === 'string'\">{{ label }}</span>\n </div>\n\n <div\n class=\"ina-file-upload__dropzone\"\n :class=\"dropzoneClasses\"\n @click=\"triggerFileInput\"\n @dragover=\"handleDragOver\"\n @dragleave=\"handleDragLeave\"\n @drop=\"handleDrop\"\n >\n <input\n v-bind=\"filteredAttrs\"\n :id=\"inputId\"\n ref=\"fileInputRef\"\n type=\"file\"\n :accept=\"type\"\n :multiple=\"multiple\"\n :disabled=\"disabled\"\n class=\"ina-file-upload__input\"\n @change=\"handleFileChange\"\n />\n\n <div class=\"ina-file-upload__content\">\n <div class=\"ina-file-upload__icon\">\n <IconUpload :size=\"24\" />\n </div>\n\n <div class=\"ina-file-upload__text\">\n <div class=\"ina-file-upload__title\">\n {{ title }}\n </div>\n\n <div class=\"ina-file-upload__description\">\n {{ description }}\n </div>\n </div>\n\n <button\n type=\"button\"\n class=\"ina-file-upload__button\"\n :disabled=\"disabled\"\n @click.stop=\"triggerFileInput\"\n >\n Pilih File\n </button>\n </div>\n </div>\n\n <template v-if=\"files.length > 0\">\n <div class=\"ina-file-upload__files\">\n <div\n v-for=\"(uploadedFile, displayIndex) in displayedFiles\"\n :key=\"`${uploadedFile.file.name}-${getOriginalIndex(uploadedFile)}`\"\n class=\"ina-file-upload__file\"\n :class=\"{\n 'ina-file-upload__file--error': uploadedFile.status === 'error',\n 'ina-file-upload__file--success': uploadedFile.status === 'success',\n 'ina-file-upload__file--uploading':\n uploadedFile.status === 'uploading',\n }\"\n >\n <div class=\"ina-file-upload__file-indicator\">\n <div\n v-if=\"uploadedFile.status === 'uploading'\"\n class=\"ina-file-upload__file-icon-wrapper ina-file-upload__file-icon-wrapper--uploading\"\n >\n <IconLoader2\n :size=\"20\"\n class=\"ina-file-upload__file-icon--spinning\"\n />\n </div>\n <div\n v-else-if=\"uploadedFile.status === 'success'\"\n class=\"ina-file-upload__file-icon-wrapper ina-file-upload__file-icon-wrapper--success\"\n >\n <IconCircleCheck :size=\"20\" stroke=\"2\" />\n </div>\n <div\n v-else-if=\"uploadedFile.status === 'error'\"\n class=\"ina-file-upload__file-icon-wrapper ina-file-upload__file-icon-wrapper--error\"\n >\n <IconCircleX :size=\"20\" stroke=\"2\" />\n </div>\n <div\n v-else-if=\"uploadedFile.status === 'idle'\"\n class=\"ina-file-upload__file-icon-wrapper ina-file-upload__file-icon-wrapper--success\"\n >\n <IconCircleCheck :size=\"20\" stroke=\"2\" />\n </div>\n </div>\n\n <div class=\"ina-file-upload__file-info\">\n <div class=\"ina-file-upload__file-name\">\n {{ sanitizeFileName(uploadedFile.file.name) }}\n </div>\n <div class=\"ina-file-upload__file-size\">\n {{ formatFileSize(uploadedFile.file.size) }}\n </div>\n <div v-if=\"uploadedFile.error\" class=\"ina-file-upload__file-error\">\n {{ uploadedFile.error }}\n </div>\n </div>\n\n <div class=\"ina-file-upload__file-actions\">\n <template v-if=\"uploadedFile.status === 'error'\">\n <button\n title=\"Coba lagi\"\n type=\"button\"\n class=\"ina-file-upload__file-retry\"\n @click=\"\n updateFileStatus(getOriginalIndex(uploadedFile), 'idle')\n \"\n >\n <IconRotateClockwise :size=\"20\" />\n </button>\n <button\n title=\"Hapus file\"\n type=\"button\"\n class=\"ina-file-upload__file-remove\"\n @click=\"removeFile(getOriginalIndex(uploadedFile))\"\n >\n <IconTrash :size=\"20\" />\n </button>\n </template>\n <button\n v-else-if=\"uploadedFile.status === 'uploading'\"\n title=\"Batalkan upload\"\n type=\"button\"\n class=\"ina-file-upload__file-remove\"\n @click=\"removeFile(getOriginalIndex(uploadedFile))\"\n >\n <IconX :size=\"20\" />\n </button>\n <button\n v-else-if=\"uploadedFile.status === 'success'\"\n title=\"Hapus file\"\n type=\"button\"\n class=\"ina-file-upload__file-remove\"\n @click=\"removeFile(getOriginalIndex(uploadedFile))\"\n >\n <IconTrash :size=\"20\" />\n </button>\n <button\n v-else-if=\"uploadedFile.status === 'idle'\"\n title=\"Hapus file\"\n type=\"button\"\n class=\"ina-file-upload__file-remove\"\n @click=\"removeFile(getOriginalIndex(uploadedFile))\"\n >\n <IconTrash :size=\"20\" />\n </button>\n </div>\n </div>\n </div>\n <button\n v-if=\"multiple && files.length > 5\"\n type=\"button\"\n class=\"ina-file-upload__show-more\"\n @click=\"showAllFiles = !showAllFiles\"\n >\n {{ showAllFiles ? 'Sembunyikan' : 'Lihat Selengkapnya' }}\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n :class=\"{\n 'ina-file-upload__show-more-icon--expanded': showAllFiles,\n }\"\n class=\"ina-file-upload__show-more-icon\"\n >\n <path\n d=\"M6 9L12 15L18 9\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n </template>\n\n <div v-if=\"validationErrors.length > 0\" class=\"ina-file-upload__errors\">\n <div\n v-for=\"(error, index) in validationErrors\"\n :key=\"index\"\n class=\"ina-file-upload__error-message\"\n >\n {{ sanitizeFileName(error.file.name) }}: {{ error.error }}\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, useAttrs } from 'vue';\nimport type { Component } from 'vue';\nimport {\n IconUpload,\n IconX,\n IconLoader2,\n IconTrash,\n IconRotateClockwise,\n IconCircleCheck,\n IconCircleX,\n} from '@tabler/icons-vue';\nimport {\n validateFile,\n validateMagicNumber,\n formatFileSize,\n type FileValidationResult,\n} from '../utils/fileValidation';\nimport { sanitizeFileName } from '../utils/security';\n\nexport type FileUploadStatus = 'idle' | 'uploading' | 'success' | 'error';\n\nexport interface UploadedFile {\n file: File;\n status: FileUploadStatus;\n error?: string;\n progress?: number;\n}\n\nexport interface FileUploadProps {\n /**\n * Label untuk file upload.\n */\n label?: string | Component;\n\n /**\n * Title di dalam dropzone.\n */\n title?: string;\n\n /**\n * Description di dalam dropzone.\n */\n description?: string;\n\n /**\n * Tipe file yang diizinkan (MIME types, e.g., \"image/*,application/pdf\").\n */\n type?: string;\n\n /**\n * Apakah bisa upload multiple files.\n */\n multiple?: boolean;\n\n /**\n * Ukuran maksimum file dalam bytes (0 = unlimited).\n */\n maxSize?: number;\n\n /**\n * Ekstensi file yang diizinkan (e.g., ['png', 'jpg', 'pdf']).\n * Jika disediakan, akan divalidasi selain MIME type.\n */\n allowedExtensions?: string[];\n\n /**\n * Maksimal jumlah file yang bisa diupload (hanya untuk multiple=true).\n */\n maxFiles?: number;\n\n /**\n * Maksimal ukuran total semua file dalam MB (hanya untuk multiple=true).\n */\n maxTotalSizeMB?: number;\n\n /**\n * Validasi magic number (file signature) sesuai rekomendasi OWASP.\n * Default: true untuk security maksimal.\n */\n validateMagicNumber?: boolean;\n\n /**\n * Apakah disabled.\n */\n disabled?: boolean;\n\n /**\n * Callback ketika file berubah.\n */\n onChange?: (files: File[], errors: FileValidationResult[]) => void;\n\n /**\n * Callback ketika file dihapus.\n */\n onRemove?: (file: File, index: number) => void;\n}\n\nconst props = withDefaults(defineProps<FileUploadProps>(), {\n title: 'Unggah File',\n description: 'Unggah atau seret dan lepas ke dalam kotak ini.',\n type: '',\n multiple: false,\n maxSize: 0,\n allowedExtensions: undefined,\n maxFiles: undefined,\n maxTotalSizeMB: undefined,\n validateMagicNumber: true, // Default: true sesuai rekomendasi OWASP\n disabled: false,\n});\n\nconst emit = defineEmits<{\n change: [files: File[], errors: FileValidationResult[]];\n remove: [file: File, index: number];\n}>();\n\nconst attrs = useAttrs();\nconst fileInputRef = ref<HTMLInputElement>();\nconst files = ref<UploadedFile[]>([]);\nconst isDragOver = ref(false);\nconst validationErrors = ref<FileValidationResult[]>([]);\nconst showAllFiles = ref(false);\n\n// Generate ID for input from attrs if provided\nconst inputId = computed(() => {\n const providedId = (attrs.id as string) || (attrs.name as string);\n return providedId ? String(providedId) : undefined;\n});\n\n// Filter out id, name, type, multiple, disabled, and class from attrs to avoid conflicts\n// (they're handled explicitly via props)\nconst filteredAttrs = computed(() => {\n const {\n id,\n name,\n type,\n multiple,\n disabled,\n class: classAttr,\n ...rest\n } = attrs;\n return rest;\n});\n\nconst displayedFiles = computed(() => {\n if (props.multiple && files.value.length > 5 && !showAllFiles.value) {\n return files.value.slice(0, 5);\n }\n return files.value;\n});\n\n// Computed untuk label component\nconst labelComponent = computed(() => {\n if (!props.label) return null;\n if (typeof props.label === 'string') return null;\n return props.label as Component;\n});\n\nconst getOriginalIndex = (uploadedFile: UploadedFile): number => {\n return files.value.findIndex(\n (f) =>\n f.file.name === uploadedFile.file.name &&\n f.file.size === uploadedFile.file.size &&\n f.status === uploadedFile.status\n );\n};\n\nconst uploadClasses = computed(() => {\n const classes = ['ina-file-upload'];\n\n if (props.disabled) {\n classes.push('ina-file-upload--disabled');\n }\n\n return classes;\n});\n\nconst dropzoneClasses = computed(() => {\n const classes = ['ina-file-upload__dropzone'];\n\n if (isDragOver.value) {\n classes.push('ina-file-upload__dropzone--drag-over');\n }\n\n if (props.disabled) {\n classes.push('ina-file-upload__dropzone--disabled');\n }\n\n return classes;\n});\n\nconst triggerFileInput = () => {\n if (props.disabled) return;\n\n fileInputRef.value?.click();\n};\n\nconst handleFileChange = async (event: Event) => {\n const target = event.target as HTMLInputElement;\n const selectedFiles = Array.from(target.files || []);\n\n await processFiles(selectedFiles);\n // Reset input\n if (fileInputRef.value) {\n fileInputRef.value.value = '';\n }\n};\n\nconst handleDragOver = (event: DragEvent) => {\n event.preventDefault();\n event.stopPropagation();\n if (!props.disabled) {\n isDragOver.value = true;\n }\n};\n\nconst handleDragLeave = (event: DragEvent) => {\n event.preventDefault();\n event.stopPropagation();\n isDragOver.value = false;\n};\n\nconst handleDrop = async (event: DragEvent) => {\n event.preventDefault();\n event.stopPropagation();\n isDragOver.value = false;\n\n if (props.disabled) return;\n\n const droppedFiles = Array.from(event.dataTransfer?.files || []);\n await processFiles(droppedFiles);\n};\n\nconst processFiles = async (newFiles: File[]) => {\n const validationResults: FileValidationResult[] = [];\n const validFiles: UploadedFile[] = [];\n const errors: FileValidationResult[] = [];\n\n // Check maxFiles limit\n if (props.multiple && props.maxFiles) {\n const currentCount = files.value.length;\n if (currentCount + newFiles.length > props.maxFiles) {\n const allowedCount = props.maxFiles - currentCount;\n if (allowedCount <= 0) {\n errors.push({\n isValid: false,\n error: `Maksimal ${props.maxFiles} file yang dapat diupload`,\n file: newFiles[0],\n });\n validationErrors.value = errors;\n props.onChange?.([], errors);\n return;\n }\n newFiles = newFiles.slice(0, allowedCount);\n }\n }\n\n // Check maxTotalSizeMB limit\n if (props.multiple && props.maxTotalSizeMB) {\n const currentTotalSize = files.value.reduce(\n (sum, f) => sum + f.file.size,\n 0\n );\n const newFilesTotalSize = newFiles.reduce((sum, f) => sum + f.size, 0);\n const maxTotalSizeBytes = props.maxTotalSizeMB * 1024 * 1024;\n\n if (currentTotalSize + newFilesTotalSize > maxTotalSizeBytes) {\n errors.push({\n isValid: false,\n error: `Ukuran total file maksimal ${props.maxTotalSizeMB} MB`,\n file: newFiles[0],\n });\n validationErrors.value = errors;\n props.onChange?.([], errors);\n return;\n }\n }\n\n // Validate each file\n for (const file of newFiles) {\n // Validate allowedExtensions if provided\n if (props.allowedExtensions && props.allowedExtensions.length > 0) {\n const fileName = file.name.toLowerCase();\n const extension = fileName.substring(fileName.lastIndexOf('.') + 1);\n if (!props.allowedExtensions.includes(extension.toLowerCase())) {\n errors.push({\n isValid: false,\n error: `Ekstensi file harus: ${props.allowedExtensions.join(', ')}`,\n file,\n });\n validationResults.push({\n isValid: false,\n error: `Ekstensi file harus: ${props.allowedExtensions.join(', ')}`,\n file,\n });\n continue;\n }\n }\n\n // Standard file validation\n const validation = validateFile(file, {\n allowedTypes: props.type || undefined,\n maxSize: props.maxSize || undefined,\n validateExtension: true,\n });\n\n if (!validation.isValid) {\n errors.push(validation);\n validationResults.push(validation);\n continue;\n }\n\n // Magic number validation (if enabled)\n if (props.validateMagicNumber && file.type) {\n const magicValidation = await validateMagicNumber(file, file.type);\n if (!magicValidation.isValid) {\n errors.push({\n isValid: false,\n error: magicValidation.error || 'File signature tidak valid',\n file,\n });\n validationResults.push({\n isValid: false,\n error: magicValidation.error || 'File signature tidak valid',\n file,\n });\n continue;\n }\n }\n\n // All validations passed\n validFiles.push({\n file,\n status: 'idle',\n });\n validationResults.push({\n isValid: true,\n file,\n });\n }\n\n if (props.multiple) {\n files.value = [...files.value, ...validFiles];\n } else {\n files.value = validFiles.slice(0, 1);\n }\n\n validationErrors.value = errors;\n\n const allValidFiles = props.multiple\n ? [...files.value, ...validFiles].map((uf) => uf.file)\n : validFiles.map((uf) => uf.file);\n\n props.onChange?.(allValidFiles, errors);\n};\n\nconst removeFile = (index: number) => {\n if (props.disabled) return;\n\n const removedFile = files.value[index];\n const updatedFiles = files.value.filter((_, i) => i !== index);\n files.value = updatedFiles;\n\n props.onRemove?.(removedFile.file, index);\n props.onChange?.(\n updatedFiles.map((uf) => uf.file),\n validationErrors.value\n );\n};\n\nconst updateFileStatus = (\n index: number,\n status: FileUploadStatus,\n error?: string,\n progress?: number\n) => {\n files.value = files.value.map((file, i) =>\n i === index ? { ...file, status, error, progress } : file\n );\n};\n</script>\n","<template>\n <div class=\"ina-input-search\" :class=\"containerClasses\">\n <label v-if=\"label\" :for=\"inputId\" class=\"ina-input-search__label\">\n {{ label }}\n <span v-if=\"required\" class=\"ina-input-search__required\">*</span>\n </label>\n\n <div class=\"ina-input-search__wrapper\">\n <div class=\"ina-input-search__search-icon\">\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle\n cx=\"11\"\n cy=\"11\"\n r=\"8\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n />\n <path\n d=\"M21 21L16.65 16.65\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </div>\n\n <input\n v-bind=\"$attrs\"\n :id=\"inputId\"\n ref=\"inputRef\"\n v-model=\"inputValue\"\n type=\"text\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n :maxlength=\"maxLength\"\n :class=\"inputClasses\"\n @input=\"handleInput\"\n @blur=\"handleBlur\"\n @focus=\"handleFocus\"\n @keydown.enter=\"handleSearch\"\n />\n\n <button\n v-if=\"inputValue && showClearButton\"\n type=\"button\"\n class=\"ina-input-search__clear-button\"\n @click=\"handleClear\"\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M18 6L6 18M6 6L18 18\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n </div>\n\n <div v-if=\"statusMessage\" :class=\"statusClasses\">\n {{ statusMessage }}\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, watch, nextTick } from 'vue';\nexport interface InputSearchProps {\n modelValue?: string;\n label?: string;\n placeholder?: string;\n size?: 'sm' | 'md' | 'lg';\n status?: 'neutral' | 'success' | 'error' | 'warning';\n statusMessage?: string;\n disabled?: boolean;\n readonly?: boolean;\n required?: boolean;\n maxLength?: number;\n showClearButton?: boolean;\n debounce?: number;\n}\n\nconst props = withDefaults(defineProps<InputSearchProps>(), {\n modelValue: '',\n size: 'md',\n status: 'neutral',\n disabled: false,\n readonly: false,\n required: false,\n showClearButton: true,\n debounce: 300,\n});\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string];\n input: [event: Event];\n search: [value: string];\n blur: [event: FocusEvent];\n focus: [event: FocusEvent];\n clear: [];\n}>();\n\nconst inputRef = ref<HTMLInputElement>();\nconst inputValue = ref(props.modelValue);\nconst debounceTimer = ref<any>();\n\n// Generate unique ID for input\nconst inputId = computed(\n () => `input-search-${Math.random().toString(36).substr(2, 9)}`\n);\n\nconst containerClasses = computed(() => {\n const classes = ['ina-input-search'];\n\n if (props.disabled) {\n classes.push('ina-input-search--disabled');\n }\n\n return classes;\n});\n\nconst inputClasses = computed(() => {\n const classes = ['ina-input-search__input'];\n\n classes.push(`ina-input-search__input--size-${props.size}`);\n\n if (props.disabled) {\n classes.push('ina-input-search__input--disabled');\n }\n\n if (props.readonly) {\n classes.push('ina-input-search__input--readonly');\n }\n\n if (props.status !== 'neutral') {\n classes.push(`ina-input-search__input--status-${props.status}`);\n }\n\n return classes;\n});\n\nconst statusClasses = computed(() => {\n const classes = ['ina-input-search__status'];\n\n if (props.status !== 'neutral') {\n classes.push(`ina-input-search__status--${props.status}`);\n }\n\n return classes;\n});\n\nconst handleInput = (event: Event) => {\n const target = event.target as HTMLInputElement;\n inputValue.value = target.value;\n\n if (props.debounce > 0) {\n if (debounceTimer.value) {\n clearTimeout(debounceTimer.value);\n }\n\n debounceTimer.value = setTimeout(() => {\n emit('update:modelValue', inputValue.value);\n emit('input', event);\n }, props.debounce) as unknown as number;\n } else {\n emit('update:modelValue', inputValue.value);\n emit('input', event);\n }\n};\n\nconst handleSearch = () => {\n emit('search', inputValue.value);\n};\n\nconst handleBlur = (event: FocusEvent) => {\n emit('blur', event);\n};\n\nconst handleFocus = (event: FocusEvent) => {\n emit('focus', event);\n};\n\nconst handleClear = () => {\n inputValue.value = '';\n emit('update:modelValue', '');\n emit('clear');\n\n nextTick(() => {\n inputRef.value?.focus();\n });\n};\n\n// Watch for external modelValue changes\nwatch(\n () => props.modelValue,\n (newValue) => {\n inputValue.value = newValue || '';\n }\n);\n\n// Cleanup debounce timer on unmount\nimport { onUnmounted } from 'vue';\nonUnmounted(() => {\n if (debounceTimer.value) {\n clearTimeout(debounceTimer.value);\n }\n});\n</script>\n","<template>\n <Teleport to=\"body\">\n <Transition name=\"modal\">\n <div\n v-if=\"isOpen\"\n class=\"ina-modal\"\n :class=\"modalClasses\"\n @click=\"handleBackdropClick\"\n >\n <div class=\"ina-modal__backdrop\" />\n\n <div class=\"ina-modal__container\">\n <div\n ref=\"modalRef\"\n class=\"ina-modal__dialog\"\n :class=\"dialogClasses\"\n role=\"dialog\"\n :aria-modal=\"true\"\n :aria-labelledby=\"titleId\"\n :aria-describedby=\"descriptionId\"\n @click.stop\n >\n <div v-if=\"showHeader\" class=\"ina-modal__header\">\n <h2 :id=\"titleId\" class=\"ina-modal__title\">\n <slot name=\"title\">{{ title }}</slot>\n </h2>\n\n <button\n v-if=\"showCloseButton\"\n type=\"button\"\n class=\"ina-modal__close-button\"\n :aria-label=\"closeLabel\"\n @click=\"handleClose\"\n >\n <IconX :size=\"24\" class=\"ina-modal__close-icon\" />\n </button>\n </div>\n\n <div class=\"ina-modal__body\">\n <div\n v-if=\"description\"\n :id=\"descriptionId\"\n class=\"ina-modal__description\"\n >\n {{ description }}\n </div>\n\n <slot />\n </div>\n\n <div v-if=\"showFooter\" class=\"ina-modal__footer\">\n <slot name=\"footer\" />\n </div>\n </div>\n </div>\n </div>\n </Transition>\n </Teleport>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, watch, nextTick, onMounted, onUnmounted } from 'vue';\nimport { IconX } from '@tabler/icons-vue';\nexport interface ModalProps {\n modelValue: boolean;\n title?: string;\n description?: string;\n size?: 'sm' | 'md' | 'lg' | 'xl' | 'full' | '';\n variant?: 'default' | 'centered' | 'fullscreen';\n showCloseButton?: boolean;\n showHeader?: boolean;\n showFooter?: boolean;\n closeLabel?: string;\n closeOnBackdrop?: boolean;\n closeOnEscape?: boolean;\n persistent?: boolean;\n}\n\nconst props = withDefaults(defineProps<ModalProps>(), {\n modelValue: false,\n size: '',\n variant: 'default',\n showCloseButton: true,\n showHeader: true,\n showFooter: false,\n closeLabel: 'Close modal',\n closeOnBackdrop: true,\n closeOnEscape: true,\n persistent: false,\n});\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: boolean];\n close: [];\n open: [];\n}>();\n\nconst modalRef = ref<HTMLDivElement>();\nconst isOpen = ref(props.modelValue);\n\n// Generate unique IDs\nconst titleId = computed(\n () => `modal-title-${Math.random().toString(36).substr(2, 9)}`\n);\nconst descriptionId = computed(\n () => `modal-description-${Math.random().toString(36).substr(2, 9)}`\n);\n\nconst modalClasses = computed(() => {\n const classes = ['ina-modal'];\n\n classes.push(`ina-modal--variant-${props.variant}`);\n\n if (props.persistent) {\n classes.push('ina-modal--persistent');\n }\n\n return classes;\n});\n\nconst dialogClasses = computed(() => {\n const classes = ['ina-modal__dialog'];\n\n if (props.size) {\n classes.push(`ina-modal__dialog--size-${props.size}`);\n }\n\n return classes;\n});\n\nconst handleClose = () => {\n if (props.persistent) return;\n\n isOpen.value = false;\n emit('update:modelValue', false);\n emit('close');\n};\n\nconst handleBackdropClick = (event: Event) => {\n if (\n event.target === event.currentTarget &&\n props.closeOnBackdrop &&\n !props.persistent\n ) {\n handleClose();\n }\n};\n\nconst handleEscape = (event: KeyboardEvent) => {\n if (event.key === 'Escape' && props.closeOnEscape && !props.persistent) {\n handleClose();\n }\n};\n\nconst focusModal = () => {\n nextTick(() => {\n if (modalRef.value) {\n modalRef.value.focus();\n }\n });\n};\n\n// Watch for external modelValue changes\nwatch(\n () => props.modelValue,\n (newValue) => {\n isOpen.value = newValue;\n\n if (newValue) {\n emit('open');\n focusModal();\n }\n }\n);\n\nonMounted(() => {\n document.addEventListener('keydown', handleEscape);\n});\n\nonUnmounted(() => {\n document.removeEventListener('keydown', handleEscape);\n});\n</script>\n\n<style scoped>\n.modal-enter-active,\n.modal-leave-active {\n transition: opacity 0.3s ease;\n}\n\n.modal-enter-active .ina-modal__dialog,\n.modal-leave-active .ina-modal__dialog {\n transition: opacity 0.3s ease, transform 0.3s ease;\n}\n\n.modal-enter-from,\n.modal-leave-to {\n opacity: 0;\n}\n\n.modal-enter-from .ina-modal__dialog,\n.modal-leave-to .ina-modal__dialog {\n opacity: 0;\n transform: scale(0.9) translateY(-20px);\n}\n\n.modal-enter-to .ina-modal__dialog,\n.modal-leave-from .ina-modal__dialog {\n opacity: 1;\n transform: scale(1) translateY(0);\n}\n</style>\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","<template>\n <div ref=\"containerRef\" class=\"ina-month-picker\" :class=\"containerClasses\">\n <label v-if=\"label\" :for=\"triggerId\" class=\"ina-month-picker__label\">\n {{ label }}\n <span v-if=\"required\" class=\"ina-month-picker__required\">*</span>\n </label>\n\n <!-- Trigger Button -->\n <button\n :id=\"triggerId\"\n ref=\"triggerRef\"\n type=\"button\"\n :class=\"triggerClasses\"\n :disabled=\"disabled || readonly\"\n :aria-expanded=\"isOpen\"\n :aria-haspopup=\"true\"\n :aria-labelledby=\"label ? `${triggerId}-label` : undefined\"\n @click=\"togglePanel\"\n @keydown=\"handleKeydown\"\n >\n <div v-if=\"showIcon\" class=\"ina-month-picker__prefix-icon\">\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <rect\n x=\"3\"\n y=\"4\"\n width=\"18\"\n height=\"18\"\n rx=\"2\"\n ry=\"2\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n />\n <line\n x1=\"16\"\n y1=\"2\"\n x2=\"16\"\n y2=\"6\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n />\n <line\n x1=\"8\"\n y1=\"2\"\n x2=\"8\"\n y2=\"6\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n />\n <line\n x1=\"3\"\n y1=\"10\"\n x2=\"21\"\n y2=\"10\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n />\n </svg>\n </div>\n\n <span class=\"ina-month-picker__trigger-text\">\n {{ selectedMonthDisplay || placeholder }}\n </span>\n\n <button\n v-if=\"\n showClearButton &&\n selectedMonth !== undefined &&\n !disabled &&\n !readonly\n \"\n type=\"button\"\n class=\"ina-month-picker__clear-button\"\n @click.stop=\"handleClear\"\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M18 6L6 18M6 6L18 18\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n\n <svg\n class=\"ina-month-picker__chevron\"\n :class=\"{ 'ina-month-picker__chevron--open': isOpen }\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M6 9L12 15L18 9\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n\n <!-- Month Picker Panel -->\n <Transition name=\"panel\">\n <div\n v-if=\"isOpen\"\n ref=\"panelRef\"\n :class=\"[\n 'ina-month-picker__panel',\n { 'ina-month-picker__panel--open': isOpen },\n { 'ina-month-picker__panel--right-aligned': useRightPositioning },\n ]\"\n :style=\"panelStyle\"\n >\n <!-- Month Grid -->\n <div class=\"ina-month-picker__grid\">\n <button\n v-for=\"(month, index) in monthNames\"\n :key=\"index\"\n type=\"button\"\n :class=\"getMonthClasses(index)\"\n :disabled=\"props.disabled\"\n @click=\"selectMonth(index)\"\n @mouseenter=\"!props.disabled && (hoveredMonth = index)\"\n @mouseleave=\"hoveredMonth = null\"\n >\n {{ month }}\n </button>\n </div>\n </div>\n </Transition>\n\n <div v-if=\"statusMessage\" :class=\"statusClasses\">\n {{ statusMessage }}\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, nextTick, onMounted, onUnmounted } from 'vue';\nimport clsx from 'clsx';\nexport interface MonthPickerProps {\n modelValue?: number;\n label?: string;\n placeholder?: string;\n size?: 'sm' | 'md' | 'lg';\n status?: 'neutral' | 'success' | 'error' | 'warning';\n statusMessage?: string;\n disabled?: boolean;\n readonly?: boolean;\n required?: boolean;\n showIcon?: boolean;\n showClearButton?: boolean;\n}\n\nconst props = withDefaults(defineProps<MonthPickerProps>(), {\n modelValue: undefined,\n size: 'md',\n status: 'neutral',\n disabled: false,\n readonly: false,\n required: false,\n showIcon: false,\n showClearButton: false,\n});\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: number | undefined];\n change: [value: number | undefined];\n clear: [];\n}>();\n\nconst containerRef = ref<HTMLDivElement>();\nconst triggerRef = ref<HTMLButtonElement>();\nconst panelRef = ref<HTMLDivElement>();\nconst isOpen = ref(false);\nconst panelStyle = ref<Record<string, string>>({});\nconst useRightPositioning = ref(false);\nconst hoveredMonth = ref<number | null>(null);\n\n// Generate unique ID for trigger\nconst triggerId = computed(\n () => `month-picker-${Math.random().toString(36).substr(2, 9)}`\n);\n\nconst selectedMonth = computed(() => props.modelValue);\n\nconst monthNames = [\n 'Jan',\n 'Feb',\n 'Mar',\n 'Apr',\n 'Mei',\n 'Jun',\n 'Jul',\n 'Agu',\n 'Sep',\n 'Okt',\n 'Nov',\n 'Des',\n];\n\nconst selectedMonthDisplay = computed(() => {\n if (\n selectedMonth.value !== undefined &&\n selectedMonth.value >= 0 &&\n selectedMonth.value < 12\n ) {\n return monthNames[selectedMonth.value];\n }\n return '';\n});\n\nconst containerClasses = computed(() => {\n const classes = ['ina-month-picker'];\n\n if (props.disabled) {\n classes.push('ina-month-picker--disabled');\n }\n\n return classes;\n});\n\nconst triggerClasses = computed(() => {\n const classes = ['ina-month-picker__trigger'];\n\n // Size\n classes.push(`ina-month-picker__trigger--size-${props.size}`);\n\n // States\n if (props.disabled) {\n classes.push('ina-month-picker__trigger--disabled');\n }\n\n if (props.readonly) {\n classes.push('ina-month-picker__trigger--readonly');\n }\n\n if (props.status !== 'neutral') {\n classes.push(`ina-month-picker__trigger--status-${props.status}`);\n }\n\n if (isOpen.value) {\n classes.push('ina-month-picker__trigger--open');\n }\n\n return classes;\n});\n\nconst statusClasses = computed(() => {\n const classes = ['ina-month-picker__status'];\n\n if (props.status !== 'neutral') {\n classes.push(`ina-month-picker__status--${props.status}`);\n }\n\n return classes;\n});\n\nconst getMonthClasses = (monthIndex: number) => {\n const isSelected = monthIndex === selectedMonth.value;\n const isHovered = monthIndex === hoveredMonth.value;\n\n return clsx(\n 'ina-month-picker__month-option',\n isSelected && 'ina-month-picker__month-option--selected',\n isHovered && 'ina-month-picker__month-option--hovered'\n );\n};\n\nconst togglePanel = () => {\n if (props.disabled || props.readonly) return;\n\n isOpen.value = !isOpen.value;\n\n if (isOpen.value) {\n nextTick(() => {\n positionPanel();\n });\n }\n};\n\nconst positionPanel = () => {\n if (!triggerRef.value || !panelRef.value) return;\n\n // Use requestAnimationFrame to ensure panel is rendered\n requestAnimationFrame(() => {\n if (!triggerRef.value || !panelRef.value) return;\n\n const triggerRect = triggerRef.value.getBoundingClientRect();\n const panelRect = panelRef.value.getBoundingClientRect();\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n\n // Default panel width from CSS (240px)\n const defaultPanelWidth = 240;\n const panelWidthValue = panelRect.width || defaultPanelWidth;\n\n // Calculate available space from both sides\n const availableSpaceRight = viewportWidth - triggerRect.right;\n const availableSpaceLeft = triggerRect.left;\n const isMobile = viewportWidth <= 640;\n\n // Determine horizontal positioning based on available space\n let shouldUseRight = false;\n let leftValue: string | undefined = undefined;\n let rightValue: string | undefined = undefined;\n\n if (isMobile) {\n // On mobile: always center panel in viewport\n // Calculate center position relative to viewport\n const panelCenterX = viewportWidth / 2;\n const panelLeftFromViewport = panelCenterX - panelWidthValue / 2;\n // Convert to position relative to container\n // Get container element\n if (containerRef.value) {\n const containerRect = containerRef.value.getBoundingClientRect();\n // Calculate left position relative to container\n const leftRelativeToContainer =\n panelLeftFromViewport - containerRect.left;\n let calculatedLeft = Math.max(0, leftRelativeToContainer);\n\n // Ensure panel doesn't overflow viewport\n const maxLeft = viewportWidth - panelWidthValue - containerRect.left;\n if (leftRelativeToContainer > maxLeft) {\n calculatedLeft = Math.max(0, maxLeft);\n }\n\n leftValue = `${calculatedLeft}px`;\n rightValue = undefined;\n shouldUseRight = false;\n } else {\n // Fallback: center relative to viewport\n leftValue = `${Math.max(0, panelLeftFromViewport)}px`;\n rightValue = undefined;\n shouldUseRight = false;\n }\n } else {\n // Desktop: use existing logic\n shouldUseRight = panelWidthValue > availableSpaceRight;\n if (shouldUseRight) {\n rightValue = '0';\n leftValue = undefined;\n } else {\n leftValue = '0';\n rightValue = undefined;\n }\n }\n\n // Calculate vertical positioning\n const spaceBelow = viewportHeight - triggerRect.bottom;\n const spaceAbove = triggerRect.top;\n let top: string | undefined = undefined;\n let bottom: string | undefined = undefined;\n let maxHeight = '300px';\n\n if (spaceBelow < panelRect.height && spaceAbove > spaceBelow) {\n // Position above\n bottom = `${triggerRect.height + 4}px`;\n top = undefined;\n maxHeight = `${Math.min(spaceAbove - 10, 300)}px`;\n } else {\n // Position below\n top = `${triggerRect.height + 4}px`;\n bottom = undefined;\n maxHeight = `${Math.min(spaceBelow - 10, 300)}px`;\n }\n\n // Ensure panel width doesn't exceed viewport\n const maxWidth = `${Math.min(panelWidthValue, viewportWidth - 16)}px`; // 16px for padding\n\n const style: Record<string, string> = {\n position: 'absolute',\n maxWidth,\n maxHeight,\n zIndex: '10005', // Higher than DatePicker panel (10004)\n };\n\n if (top !== undefined) {\n style.top = top;\n }\n if (bottom !== undefined) {\n style.bottom = bottom;\n }\n\n if (shouldUseRight) {\n style.left = 'auto';\n style.right = rightValue || '0';\n useRightPositioning.value = true;\n } else {\n style.left = leftValue || '0';\n style.right = 'auto';\n useRightPositioning.value = false;\n }\n\n panelStyle.value = style;\n });\n};\n\nconst selectMonth = (monthIndex: number) => {\n emit('update:modelValue', monthIndex);\n emit('change', monthIndex);\n isOpen.value = false;\n};\n\nconst handleClear = () => {\n emit('update:modelValue', undefined);\n emit('change', undefined);\n emit('clear');\n};\n\nconst handleKeydown = (event: KeyboardEvent) => {\n if (props.disabled || props.readonly) return;\n\n switch (event.key) {\n case 'Enter':\n case ' ':\n event.preventDefault();\n togglePanel();\n break;\n case 'Escape':\n isOpen.value = false;\n break;\n case 'ArrowDown':\n event.preventDefault();\n if (!isOpen.value) {\n togglePanel();\n }\n break;\n }\n};\n\nconst handleClickOutside = (event: Event) => {\n if (\n panelRef.value &&\n triggerRef.value &&\n !panelRef.value.contains(event.target as Node) &&\n !triggerRef.value.contains(event.target as Node)\n ) {\n isOpen.value = false;\n }\n};\n\n// Handle window resize and scroll for panel positioning\nconst handleResize = () => {\n if (isOpen.value) {\n nextTick(() => {\n positionPanel();\n });\n }\n};\n\nonMounted(() => {\n document.addEventListener('click', handleClickOutside);\n window.addEventListener('resize', handleResize);\n window.addEventListener('scroll', handleResize, true);\n});\n\nonUnmounted(() => {\n document.removeEventListener('click', handleClickOutside);\n window.removeEventListener('resize', handleResize);\n window.removeEventListener('scroll', handleResize, true);\n});\n</script>\n\n<style scoped>\n.panel-enter-active,\n.panel-leave-active {\n transition: all 0.2s ease;\n}\n\n.panel-enter-from,\n.panel-leave-to {\n opacity: 0;\n transform: translateY(-8px);\n}\n</style>\n","<template>\n <div class=\"ina-multiple-choice-grid\" :class=\"gridClasses\">\n <div v-if=\"title\" class=\"ina-multiple-choice-grid__title\">\n {{ title }}\n </div>\n\n <div v-if=\"subtitle\" class=\"ina-multiple-choice-grid__subtitle\">\n {{ subtitle }}\n </div>\n\n <div class=\"ina-multiple-choice-grid__container\">\n <div class=\"ina-multiple-choice-grid__grid\">\n <!-- Header Row -->\n <div class=\"ina-multiple-choice-grid__header-row\">\n <div\n class=\"ina-multiple-choice-grid__header-cell ina-multiple-choice-grid__header-cell--empty\"\n >\n <!-- Empty cell for row labels column -->\n </div>\n\n <div\n v-for=\"(column, colIndex) in columns\"\n :key=\"colIndex\"\n class=\"ina-multiple-choice-grid__header-cell\"\n >\n {{ column.label }}\n </div>\n </div>\n\n <!-- Data Rows -->\n <div\n v-for=\"(row, rowIndex) in rows\"\n :key=\"rowIndex\"\n class=\"ina-multiple-choice-grid__data-row\"\n >\n <div class=\"ina-multiple-choice-grid__row-label\">\n {{ row.label }}\n </div>\n\n <div\n v-for=\"(_column, colIndex) in columns\"\n :key=\"colIndex\"\n class=\"ina-multiple-choice-grid__cell\"\n >\n <input\n :id=\"`grid-${rowIndex}-${colIndex}`\"\n v-model=\"selectedValues\"\n type=\"radio\"\n :name=\"`row-${rowIndex}`\"\n :value=\"`${rowIndex}-${colIndex}`\"\n :disabled=\"disabled\"\n class=\"ina-multiple-choice-grid__radio\"\n @change=\"handleChange\"\n />\n\n <label\n :for=\"`grid-${rowIndex}-${colIndex}`\"\n class=\"ina-multiple-choice-grid__radio-label\"\n >\n <span class=\"ina-multiple-choice-grid__radio-indicator\" />\n </label>\n </div>\n </div>\n </div>\n </div>\n\n <div v-if=\"statusMessage\" :class=\"statusClasses\">\n {{ statusMessage }}\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, watch } from 'vue';\nexport interface MultipleChoiceGridColumn {\n key: string;\n label: string;\n}\n\nexport interface MultipleChoiceGridRow {\n key: string;\n label: string;\n}\n\nexport interface MultipleChoiceGridProps {\n modelValue?: string[];\n title?: string;\n subtitle?: string;\n rows: MultipleChoiceGridRow[];\n columns: MultipleChoiceGridColumn[];\n status?: 'neutral' | 'success' | 'error' | 'warning';\n statusMessage?: string;\n disabled?: boolean;\n required?: boolean;\n}\n\nconst props = withDefaults(defineProps<MultipleChoiceGridProps>(), {\n modelValue: () => [],\n status: 'neutral',\n disabled: false,\n required: false,\n});\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string[]];\n change: [value: string[]];\n}>();\n\nconst selectedValues = ref<string[]>(props.modelValue);\n\nconst gridClasses = computed(() => {\n const classes = ['ina-multiple-choice-grid'];\n\n if (props.disabled) {\n classes.push('ina-multiple-choice-grid--disabled');\n }\n\n if (props.status !== 'neutral') {\n classes.push(`ina-multiple-choice-grid--status-${props.status}`);\n }\n\n return classes;\n});\n\nconst statusClasses = computed(() => {\n const classes = ['ina-multiple-choice-grid__status'];\n\n if (props.status !== 'neutral') {\n classes.push(`ina-multiple-choice-grid__status--${props.status}`);\n }\n\n return classes;\n});\n\nconst handleChange = () => {\n emit('update:modelValue', selectedValues.value);\n emit('change', selectedValues.value);\n};\n\n// Watch for external modelValue changes\nwatch(\n () => props.modelValue,\n (newValue) => {\n selectedValues.value = newValue || [];\n }\n);\n</script>\n","<template>\n <nav\n v-if=\"totalPages > 0\"\n class=\"ina-pagination\"\n :class=\"paginationClasses\"\n role=\"navigation\"\n :aria-label=\"ariaLabel\"\n >\n <div class=\"ina-pagination__nav-container\">\n <!-- Page info text -->\n <div class=\"ina-pagination__page-info\">\n Halaman {{ currentPage }} dari {{ totalPages }}\n </div>\n\n <!-- Navigation buttons -->\n <div class=\"ina-pagination__nav-buttons\">\n <!-- First button (<<) -->\n <button\n type=\"button\"\n class=\"ina-pagination__nav-button\"\n :class=\"{\n 'ina-pagination__nav-button--enabled': hasPrevious && !disabled,\n 'ina-pagination__nav-button--disabled': !hasPrevious || disabled,\n }\"\n :disabled=\"disabled || currentPage === 1\"\n @click=\"goToFirst\"\n :aria-label=\"'Go to first page'\"\n >\n <svg\n class=\"ina-pagination__nav-icon\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M11 18L5 12L11 6M19 18L13 12L19 6\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n\n <!-- Previous button (<) -->\n <button\n type=\"button\"\n class=\"ina-pagination__nav-button\"\n :class=\"{\n 'ina-pagination__nav-button--enabled': hasPrevious && !disabled,\n 'ina-pagination__nav-button--disabled': !hasPrevious || disabled,\n }\"\n :disabled=\"disabled || currentPage === 1\"\n @click=\"goToPrevious\"\n :aria-label=\"previousLabel\"\n >\n <svg\n class=\"ina-pagination__nav-icon\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M15 18L9 12L15 6\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n\n <!-- Page number buttons -->\n <button\n v-for=\"page in visiblePages\"\n :key=\"page\"\n type=\"button\"\n :class=\"getPageClasses(page)\"\n @click=\"goToPage(page)\"\n :disabled=\"disabled\"\n :aria-label=\"`Go to page ${page}`\"\n :aria-current=\"page === currentPage ? 'page' : undefined\"\n >\n {{ page }}\n </button>\n\n <!-- Next button (>) -->\n <button\n type=\"button\"\n class=\"ina-pagination__nav-button\"\n :class=\"{\n 'ina-pagination__nav-button--enabled': hasNext && !disabled,\n 'ina-pagination__nav-button--disabled': !hasNext || disabled,\n }\"\n :disabled=\"disabled || currentPage === totalPages\"\n @click=\"goToNext\"\n :aria-label=\"nextLabel\"\n >\n <svg\n class=\"ina-pagination__nav-icon\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M9 18L15 12L9 6\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n\n <!-- Last button (>>) -->\n <button\n type=\"button\"\n class=\"ina-pagination__nav-button\"\n :class=\"{\n 'ina-pagination__nav-button--enabled': hasNext && !disabled,\n 'ina-pagination__nav-button--disabled': !hasNext || disabled,\n }\"\n :disabled=\"disabled || currentPage === totalPages\"\n @click=\"goToLast\"\n :aria-label=\"'Go to last page'\"\n >\n <svg\n class=\"ina-pagination__nav-icon\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M13 18L19 12L13 6M5 18L11 12L5 6\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n </div>\n </div>\n\n <!-- Page size dropdown -->\n <div\n v-if=\"showPageSize\"\n class=\"ina-pagination__page-size-container\"\n >\n <span class=\"ina-pagination__page-size-label\">\n Baris per halaman\n </span>\n <select\n :value=\"pageSize\"\n @change=\"handlePageSizeChange\"\n :disabled=\"disabled\"\n class=\"ina-pagination__page-size-select\"\n :class=\"{\n 'ina-pagination__page-size-select--disabled': disabled,\n }\"\n >\n <option\n v-for=\"(opt, index) in pageSizeOptions\"\n :key=\"`${opt}-${index}`\"\n :value=\"opt\"\n >\n {{ opt }}\n </option>\n </select>\n </div>\n </nav>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nexport interface PaginationProps {\n /** Halaman saat ini (1-indexed) */\n modelValue: number;\n /** Total jumlah halaman */\n totalPages: number;\n /** Jumlah baris per halaman saat ini */\n pageSize: number;\n /** Opsi-opsi jumlah baris per halaman (misal: [10, 20, 50, 100]) */\n pageSizeOptions: number[];\n /** Maksimal jumlah halaman yang terlihat (default: 3, seperti React) */\n maxVisiblePages?: number;\n /** Tampilkan dropdown page size? */\n showPageSize?: boolean;\n /** Full width layout dengan justify-between (untuk Table) */\n fullWidth?: boolean;\n /** Disable semua kontrol */\n disabled?: boolean;\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Variant style */\n variant?: 'default' | 'bordered' | 'filled';\n /** Aria label */\n ariaLabel?: string;\n /** Label untuk tombol previous */\n previousLabel?: string;\n /** Label untuk tombol next */\n nextLabel?: string;\n}\n\nconst props = withDefaults(defineProps<PaginationProps>(), {\n modelValue: 1,\n totalPages: 1,\n pageSize: 10,\n pageSizeOptions: () => [10, 20, 50],\n maxVisiblePages: 3,\n showPageSize: true,\n fullWidth: false,\n disabled: false,\n size: 'md',\n variant: 'default',\n ariaLabel: 'Pagination navigation',\n previousLabel: 'Previous page',\n nextLabel: 'Next page',\n});\n\nconst emit = defineEmits<{\n 'update:modelValue': [page: number];\n change: [page: number];\n 'page-size-change': [size: number];\n}>();\n\nconst currentPage = computed(() => props.modelValue);\n\nconst hasPrevious = computed(() => currentPage.value > 1);\n\nconst hasNext = computed(() => currentPage.value < props.totalPages);\n\n// Render visible pages (hanya 3 halaman terdekat seperti React)\nconst visiblePages = computed(() => {\n const pages: number[] = [];\n const maxVisible = props.maxVisiblePages;\n const total = props.totalPages;\n const current = currentPage.value;\n\n if (total <= maxVisible) {\n // Show all pages if total is less than max visible\n for (let i = 1; i <= total; i++) {\n pages.push(i);\n }\n } else {\n // Calculate start and end pages\n let start: number;\n let end: number;\n\n if (current === 1) {\n // Jika di halaman pertama, tampilkan 3 halaman pertama (1, 2, 3)\n start = 1;\n end = Math.min(3, total);\n } else if (current === total) {\n // Jika di halaman terakhir, tampilkan 3 halaman terakhir\n start = Math.max(1, total - 2);\n end = total;\n } else {\n // Jika di tengah, tampilkan halaman sebelum, sekarang, dan sesudah\n start = current - 1;\n end = current + 1;\n }\n\n for (let i = start; i <= end; i++) {\n pages.push(i);\n }\n }\n\n return pages;\n});\n\nconst paginationClasses = computed(() => {\n const classes = ['ina-pagination'];\n\n if (props.fullWidth) {\n classes.push('ina-pagination--full-width');\n }\n\n classes.push(`ina-pagination--size-${props.size}`);\n classes.push(`ina-pagination--variant-${props.variant}`);\n\n return classes;\n});\n\nconst getPageClasses = (page: number) => {\n const classes = ['ina-pagination__page-button'];\n const isActive = page === currentPage.value;\n\n if (isActive) {\n classes.push('ina-pagination__page-button--active');\n } else if (!props.disabled) {\n classes.push('ina-pagination__page-button--enabled');\n } else {\n classes.push('ina-pagination__page-button--disabled');\n }\n\n return classes;\n};\n\nconst goToPage = (page: number) => {\n if (\n !props.disabled &&\n page >= 1 &&\n page <= props.totalPages &&\n page !== currentPage.value\n ) {\n emit('update:modelValue', page);\n emit('change', page);\n }\n};\n\nconst goToFirst = () => {\n if (!props.disabled && currentPage.value > 1) {\n goToPage(1);\n }\n};\n\nconst goToPrevious = () => {\n if (!props.disabled && hasPrevious.value) {\n goToPage(currentPage.value - 1);\n }\n};\n\nconst goToNext = () => {\n if (!props.disabled && hasNext.value) {\n goToPage(currentPage.value + 1);\n }\n};\n\nconst goToLast = () => {\n if (!props.disabled && currentPage.value < props.totalPages) {\n goToPage(props.totalPages);\n }\n};\n\nconst handlePageSizeChange = (event: Event) => {\n if (props.disabled) return;\n\n const target = event.target as HTMLSelectElement;\n const newSize = parseInt(target.value, 10);\n emit('page-size-change', newSize);\n};\n</script>\n","<template>\n <div class=\"ina-password-input\">\n <label v-if=\"label\" :for=\"inputId\" class=\"ina-password-input__label\">\n <component :is=\"labelComponent\" v-if=\"labelComponent\" />\n <span v-else-if=\"label && typeof label === 'string'\">{{ label }}</span>\n <span v-if=\"required\" class=\"ina-password-input__required\">*</span>\n </label>\n\n <div :class=\"wrapperClasses\">\n <input\n :id=\"inputId\"\n ref=\"inputRef\"\n v-model=\"inputValue\"\n :type=\"showPassword ? 'text' : 'password'\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n :maxlength=\"maxLength\"\n :class=\"inputClasses\"\n @input=\"handleInput\"\n @blur=\"handleBlur\"\n @focus=\"handleFocus\"\n v-bind=\"$attrs\"\n />\n\n <button\n type=\"button\"\n class=\"ina-password-input__toggle-button\"\n @click=\"togglePasswordVisibility\"\n :disabled=\"disabled\"\n >\n <svg\n v-if=\"!showPassword\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M1 12S5 4 12 4s11 8 11 8-4 8-11 8-11-8-11-8z\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"3\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n <svg\n v-else\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <line\n x1=\"1\"\n y1=\"1\"\n x2=\"23\"\n y2=\"23\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n </div>\n\n <div v-if=\"bottomText\" class=\"ina-password-input__status-area\">\n <div :class=\"statusClasses\">\n <component :is=\"bottomText\" v-if=\"typeof bottomText !== 'string'\" />\n <span v-else>{{ bottomText }}</span>\n </div>\n <div\n v-if=\"showCharCount && maxLength\"\n class=\"ina-password-input__character-count\"\n >\n {{ inputValue.length }}/{{ maxLength }}\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, watch } from 'vue';\nimport type { Component } from 'vue';\nexport interface PasswordInputProps {\n modelValue?: string;\n label?: string | Component;\n helperText?: string | Component;\n placeholder?: string;\n size?: 'sm' | 'md' | 'lg';\n status?: 'neutral' | 'success' | 'error' | 'warning';\n statusMessage?: string | Component;\n disabled?: boolean;\n readonly?: boolean;\n required?: boolean;\n maxLength?: number;\n showCharCount?: boolean;\n}\n\nconst props = withDefaults(defineProps<PasswordInputProps>(), {\n modelValue: '',\n size: 'md',\n status: 'neutral',\n disabled: false,\n readonly: false,\n required: false,\n showCharCount: false,\n});\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string];\n input: [event: Event];\n blur: [event: FocusEvent];\n focus: [event: FocusEvent];\n}>();\n\nconst inputRef = ref<HTMLInputElement>();\nconst inputValue = ref(props.modelValue);\nconst showPassword = ref(false);\n\nconst bottomText = computed(() => {\n if (props.status !== 'neutral' && props.statusMessage) {\n return props.statusMessage;\n }\n return props.statusMessage || props.helperText;\n});\n\n// Computed untuk label component\nconst labelComponent = computed(() => {\n if (!props.label) return null;\n if (typeof props.label === 'string') return null;\n return props.label as Component;\n});\n\n// Generate unique ID for input\nconst inputId = computed(() => {\n // Fallback to generated ID (same as React's String(label).toLowerCase())\n if (props.label && typeof props.label === 'string') {\n return String(props.label).toLowerCase();\n }\n return `password-input-${Math.random().toString(36).substr(2, 9)}`;\n});\n\nconst wrapperClasses = computed(() => {\n const classes = ['ina-password-input__wrapper'];\n\n // Size\n classes.push(`ina-password-input__wrapper--size-${props.size}`);\n\n // States\n if (props.disabled) {\n classes.push('ina-password-input__wrapper--disabled');\n }\n\n if (props.readonly) {\n classes.push('ina-password-input__wrapper--readonly');\n }\n\n if (props.status !== 'neutral') {\n classes.push(`ina-password-input__wrapper--${props.status}`);\n }\n\n if (props.showCharCount) {\n classes.push('ina-password-input__wrapper--with-counter');\n }\n\n return classes;\n});\n\nconst inputClasses = computed(() => {\n const classes = ['ina-password-input__input'];\n\n if (props.showCharCount) {\n classes.push('ina-password-input__input--with-counter');\n }\n\n return classes;\n});\n\nconst statusClasses = computed(() => {\n const classes = ['ina-password-input__status-message'];\n\n if (props.status !== 'neutral') {\n classes.push(`ina-password-input__status-message--${props.status}`);\n }\n\n return classes;\n});\n\nconst handleInput = (event: Event) => {\n const target = event.target as HTMLInputElement;\n inputValue.value = target.value;\n emit('update:modelValue', inputValue.value);\n emit('input', event);\n};\n\nconst handleBlur = (event: FocusEvent) => {\n emit('blur', event);\n};\n\nconst handleFocus = (event: FocusEvent) => {\n emit('focus', event);\n};\n\nconst togglePasswordVisibility = () => {\n showPassword.value = !showPassword.value;\n};\n\n// Watch for external modelValue changes\nwatch(\n () => props.modelValue,\n (newValue) => {\n inputValue.value = newValue || '';\n }\n);\n</script>\n","export interface Country {\n code: string;\n name: string;\n dialCode: string;\n flag: string;\n}\n\nexport const COUNTRIES: Country[] = [\n { code: 'ID', name: 'Indonesia', dialCode: '+62', flag: '🇮🇩' },\n { code: 'AF', name: 'Afghanistan', dialCode: '+93', flag: '🇦🇫' },\n { code: 'AL', name: 'Albania', dialCode: '+355', flag: '🇦🇱' },\n { code: 'DZ', name: 'Algeria', dialCode: '+213', flag: '🇩🇿' },\n { code: 'AS', name: 'American Samoa', dialCode: '+1684', flag: '🇦🇸' },\n { code: 'AD', name: 'Andorra', dialCode: '+376', flag: '🇦🇩' },\n { code: 'AO', name: 'Angola', dialCode: '+244', flag: '🇦🇴' },\n { code: 'AI', name: 'Anguilla', dialCode: '+1264', flag: '🇦🇮' },\n { code: 'AG', name: 'Antigua and Barbuda', dialCode: '+1268', flag: '🇦🇬' },\n { code: 'AR', name: 'Argentina', dialCode: '+54', flag: '🇦🇷' },\n { code: 'AM', name: 'Armenia', dialCode: '+374', flag: '🇦🇲' },\n { code: 'AW', name: 'Aruba', dialCode: '+297', flag: '🇦🇼' },\n { code: 'AU', name: 'Australia', dialCode: '+61', flag: '🇦🇺' },\n { code: 'AT', name: 'Austria', dialCode: '+43', flag: '🇦🇹' },\n { code: 'AZ', name: 'Azerbaijan', dialCode: '+994', flag: '🇦🇿' },\n { code: 'BS', name: 'Bahamas', dialCode: '+1242', flag: '🇧🇸' },\n { code: 'BH', name: 'Bahrain', dialCode: '+973', flag: '🇧🇭' },\n { code: 'BD', name: 'Bangladesh', dialCode: '+880', flag: '🇧🇩' },\n { code: 'BB', name: 'Barbados', dialCode: '+1246', flag: '🇧🇧' },\n { code: 'BY', name: 'Belarus', dialCode: '+375', flag: '🇧🇾' },\n { code: 'BE', name: 'Belgium', dialCode: '+32', flag: '🇧🇪' },\n { code: 'BZ', name: 'Belize', dialCode: '+501', flag: '🇧🇿' },\n { code: 'BJ', name: 'Benin', dialCode: '+229', flag: '🇧🇯' },\n { code: 'BM', name: 'Bermuda', dialCode: '+1441', flag: '🇧🇲' },\n { code: 'BT', name: 'Bhutan', dialCode: '+975', flag: '🇧🇹' },\n { code: 'BO', name: 'Bolivia', dialCode: '+591', flag: '🇧🇴' },\n { code: 'BA', name: 'Bosnia and Herzegovina', dialCode: '+387', flag: '🇧🇦' },\n { code: 'BW', name: 'Botswana', dialCode: '+267', flag: '🇧🇼' },\n { code: 'BR', name: 'Brazil', dialCode: '+55', flag: '🇧🇷' },\n { code: 'IO', name: 'British Indian Ocean Territory', dialCode: '+246', flag: '🇮🇴' },\n { code: 'BN', name: 'Brunei Darussalam', dialCode: '+673', flag: '🇧🇳' },\n { code: 'BG', name: 'Bulgaria', dialCode: '+359', flag: '🇧🇬' },\n { code: 'BF', name: 'Burkina Faso', dialCode: '+226', flag: '🇧🇫' },\n { code: 'BI', name: 'Burundi', dialCode: '+257', flag: '🇧🇮' },\n { code: 'KH', name: 'Cambodia', dialCode: '+855', flag: '🇰🇭' },\n { code: 'CM', name: 'Cameroon', dialCode: '+237', flag: '🇨🇲' },\n { code: 'CA', name: 'Canada', dialCode: '+1', flag: '🇨🇦' },\n { code: 'CV', name: 'Cape Verde', dialCode: '+238', flag: '🇨🇻' },\n { code: 'KY', name: 'Cayman Islands', dialCode: '+1345', flag: '🇰🇾' },\n { code: 'CF', name: 'Central African Republic', dialCode: '+236', flag: '🇨🇫' },\n { code: 'TD', name: 'Chad', dialCode: '+235', flag: '🇹🇩' },\n { code: 'CL', name: 'Chile', dialCode: '+56', flag: '🇨🇱' },\n { code: 'CN', name: 'China', dialCode: '+86', flag: '🇨🇳' },\n { code: 'CX', name: 'Christmas Island', dialCode: '+61', flag: '🇨🇽' },\n { code: 'CC', name: 'Cocos (Keeling) Islands', dialCode: '+61', flag: '🇨🇨' },\n { code: 'CO', name: 'Colombia', dialCode: '+57', flag: '🇨🇴' },\n { code: 'KM', name: 'Comoros', dialCode: '+269', flag: '🇰🇲' },\n { code: 'CG', name: 'Congo', dialCode: '+242', flag: '🇨🇬' },\n { code: 'CD', name: 'Congo, Democratic Republic of the', dialCode: '+243', flag: '🇨🇩' },\n { code: 'CK', name: 'Cook Islands', dialCode: '+682', flag: '🇨🇰' },\n { code: 'CR', name: 'Costa Rica', dialCode: '+506', flag: '🇨🇷' },\n { code: 'CI', name: \"Cote d'Ivoire\", dialCode: '+225', flag: '🇨🇮' },\n { code: 'HR', name: 'Croatia', dialCode: '+385', flag: '🇭🇷' },\n { code: 'CU', name: 'Cuba', dialCode: '+53', flag: '🇨🇺' },\n { code: 'CY', name: 'Cyprus', dialCode: '+357', flag: '🇨🇾' },\n { code: 'CZ', name: 'Czech Republic', dialCode: '+420', flag: '🇨🇿' },\n { code: 'DK', name: 'Denmark', dialCode: '+45', flag: '🇩🇰' },\n { code: 'DJ', name: 'Djibouti', dialCode: '+253', flag: '🇩🇯' },\n { code: 'DM', name: 'Dominica', dialCode: '+1767', flag: '🇩🇲' },\n { code: 'DO', name: 'Dominican Republic', dialCode: '+1', flag: '🇩🇴' },\n { code: 'EC', name: 'Ecuador', dialCode: '+593', flag: '🇪🇨' },\n { code: 'EG', name: 'Egypt', dialCode: '+20', flag: '🇪🇬' },\n { code: 'SV', name: 'El Salvador', dialCode: '+503', flag: '🇸🇻' },\n { code: 'GQ', name: 'Equatorial Guinea', dialCode: '+240', flag: '🇬🇶' },\n { code: 'ER', name: 'Eritrea', dialCode: '+291', flag: '🇪🇷' },\n { code: 'EE', name: 'Estonia', dialCode: '+372', flag: '🇪🇪' },\n { code: 'ET', name: 'Ethiopia', dialCode: '+251', flag: '🇪🇹' },\n { code: 'FK', name: 'Falkland Islands (Malvinas)', dialCode: '+500', flag: '🇫🇰' },\n { code: 'FO', name: 'Faroe Islands', dialCode: '+298', flag: '🇫🇴' },\n { code: 'FJ', name: 'Fiji', dialCode: '+679', flag: '🇫🇯' },\n { code: 'FI', name: 'Finland', dialCode: '+358', flag: '🇫🇮' },\n { code: 'FR', name: 'France', dialCode: '+33', flag: '🇫🇷' },\n { code: 'GF', name: 'French Guiana', dialCode: '+594', flag: '🇬🇫' },\n { code: 'PF', name: 'French Polynesia', dialCode: '+689', flag: '🇵🇫' },\n { code: 'GA', name: 'Gabon', dialCode: '+241', flag: '🇬🇦' },\n { code: 'GM', name: 'Gambia', dialCode: '+220', flag: '🇬🇲' },\n { code: 'GE', name: 'Georgia', dialCode: '+995', flag: '🇬🇪' },\n { code: 'DE', name: 'Germany', dialCode: '+49', flag: '🇩🇪' },\n { code: 'GH', name: 'Ghana', dialCode: '+233', flag: '🇬🇭' },\n { code: 'GI', name: 'Gibraltar', dialCode: '+350', flag: '🇬🇮' },\n { code: 'GR', name: 'Greece', dialCode: '+30', flag: '🇬🇷' },\n { code: 'GL', name: 'Greenland', dialCode: '+299', flag: '🇬🇱' },\n { code: 'GD', name: 'Grenada', dialCode: '+1473', flag: '🇬🇩' },\n { code: 'GP', name: 'Guadeloupe', dialCode: '+590', flag: '🇬🇵' },\n { code: 'GU', name: 'Guam', dialCode: '+1671', flag: '🇬🇺' },\n { code: 'GT', name: 'Guatemala', dialCode: '+502', flag: '🇬🇹' },\n { code: 'GG', name: 'Guernsey', dialCode: '+44', flag: '🇬🇬' },\n { code: 'GN', name: 'Guinea', dialCode: '+224', flag: '🇬🇳' },\n { code: 'GW', name: 'Guinea-Bissau', dialCode: '+245', flag: '🇬🇼' },\n { code: 'GY', name: 'Guyana', dialCode: '+592', flag: '🇬🇾' },\n { code: 'HT', name: 'Haiti', dialCode: '+509', flag: '🇭🇹' },\n { code: 'VA', name: 'Holy See (Vatican City State)', dialCode: '+379', flag: '🇻🇦' },\n { code: 'HN', name: 'Honduras', dialCode: '+504', flag: '🇭🇳' },\n { code: 'HK', name: 'Hong Kong', dialCode: '+852', flag: '🇭🇰' },\n { code: 'HU', name: 'Hungary', dialCode: '+36', flag: '🇭🇺' },\n { code: 'IS', name: 'Iceland', dialCode: '+354', flag: '🇮🇸' },\n { code: 'IN', name: 'India', dialCode: '+91', flag: '🇮🇳' },\n { code: 'IR', name: 'Iran, Islamic Republic of', dialCode: '+98', flag: '🇮🇷' },\n { code: 'IQ', name: 'Iraq', dialCode: '+964', flag: '🇮🇶' },\n { code: 'IE', name: 'Ireland', dialCode: '+353', flag: '🇮🇪' },\n { code: 'IM', name: 'Isle of Man', dialCode: '+44', flag: '🇮🇲' },\n { code: 'IL', name: 'Israel', dialCode: '+972', flag: '🇮🇱' },\n { code: 'IT', name: 'Italy', dialCode: '+39', flag: '🇮🇹' },\n { code: 'JM', name: 'Jamaica', dialCode: '+1876', flag: '🇯🇲' },\n { code: 'JP', name: 'Japan', dialCode: '+81', flag: '🇯🇵' },\n { code: 'JE', name: 'Jersey', dialCode: '+44', flag: '🇯🇪' },\n { code: 'JO', name: 'Jordan', dialCode: '+962', flag: '🇯🇴' },\n { code: 'KZ', name: 'Kazakhstan', dialCode: '+7', flag: '🇰🇿' },\n { code: 'KE', name: 'Kenya', dialCode: '+254', flag: '🇰🇪' },\n { code: 'KI', name: 'Kiribati', dialCode: '+686', flag: '🇰🇮' },\n { code: 'KP', name: \"Korea, Democratic People's Republic of\", dialCode: '+850', flag: '🇰🇵' },\n { code: 'KR', name: 'Korea, Republic of', dialCode: '+82', flag: '🇰🇷' },\n { code: 'KW', name: 'Kuwait', dialCode: '+965', flag: '🇰🇼' },\n { code: 'KG', name: 'Kyrgyzstan', dialCode: '+996', flag: '🇰🇬' },\n { code: 'LA', name: \"Lao People's Democratic Republic\", dialCode: '+856', flag: '🇱🇦' },\n { code: 'LV', name: 'Latvia', dialCode: '+371', flag: '🇱🇻' },\n { code: 'LB', name: 'Lebanon', dialCode: '+961', flag: '🇱🇧' },\n { code: 'LS', name: 'Lesotho', dialCode: '+266', flag: '🇱🇸' },\n { code: 'LR', name: 'Liberia', dialCode: '+231', flag: '🇱🇷' },\n { code: 'LY', name: 'Libyan Arab Jamahiriya', dialCode: '+218', flag: '🇱🇾' },\n { code: 'LI', name: 'Liechtenstein', dialCode: '+423', flag: '🇱🇮' },\n { code: 'LT', name: 'Lithuania', dialCode: '+370', flag: '🇱🇹' },\n { code: 'LU', name: 'Luxembourg', dialCode: '+352', flag: '🇱🇺' },\n { code: 'MO', name: 'Macao', dialCode: '+853', flag: '🇲🇴' },\n { code: 'MK', name: 'Macedonia, the Former Yugoslav Republic of', dialCode: '+389', flag: '🇲🇰' },\n { code: 'MG', name: 'Madagascar', dialCode: '+261', flag: '🇲🇬' },\n { code: 'MW', name: 'Malawi', dialCode: '+265', flag: '🇲🇼' },\n { code: 'MY', name: 'Malaysia', dialCode: '+60', flag: '🇲🇾' },\n { code: 'MV', name: 'Maldives', dialCode: '+960', flag: '🇲🇻' },\n { code: 'ML', name: 'Mali', dialCode: '+223', flag: '🇲🇱' },\n { code: 'MT', name: 'Malta', dialCode: '+356', flag: '🇲🇹' },\n { code: 'MH', name: 'Marshall Islands', dialCode: '+692', flag: '🇲🇭' },\n { code: 'MQ', name: 'Martinique', dialCode: '+596', flag: '🇲🇶' },\n { code: 'MR', name: 'Mauritania', dialCode: '+222', flag: '🇲🇷' },\n { code: 'MU', name: 'Mauritius', dialCode: '+230', flag: '🇲🇺' },\n { code: 'YT', name: 'Mayotte', dialCode: '+262', flag: '🇾🇹' },\n { code: 'MX', name: 'Mexico', dialCode: '+52', flag: '🇲🇽' },\n { code: 'FM', name: 'Micronesia, Federated States of', dialCode: '+691', flag: '🇫🇲' },\n { code: 'MD', name: 'Moldova, Republic of', dialCode: '+373', flag: '🇲🇩' },\n { code: 'MC', name: 'Monaco', dialCode: '+377', flag: '🇲🇨' },\n { code: 'MN', name: 'Mongolia', dialCode: '+976', flag: '🇲🇳' },\n { code: 'ME', name: 'Montenegro', dialCode: '+382', flag: '🇲🇪' },\n { code: 'MS', name: 'Montserrat', dialCode: '+1664', flag: '🇲🇸' },\n { code: 'MA', name: 'Morocco', dialCode: '+212', flag: '🇲🇦' },\n { code: 'MZ', name: 'Mozambique', dialCode: '+258', flag: '🇲🇿' },\n { code: 'MM', name: 'Myanmar', dialCode: '+95', flag: '🇲🇲' },\n { code: 'NA', name: 'Namibia', dialCode: '+264', flag: '🇳🇦' },\n { code: 'NR', name: 'Nauru', dialCode: '+674', flag: '🇳🇷' },\n { code: 'NP', name: 'Nepal', dialCode: '+977', flag: '🇳🇵' },\n { code: 'NL', name: 'Netherlands', dialCode: '+31', flag: '🇳🇱' },\n { code: 'NC', name: 'New Caledonia', dialCode: '+687', flag: '🇳🇨' },\n { code: 'NZ', name: 'New Zealand', dialCode: '+64', flag: '🇳🇿' },\n { code: 'NI', name: 'Nicaragua', dialCode: '+505', flag: '🇳🇮' },\n { code: 'NE', name: 'Niger', dialCode: '+227', flag: '🇳🇪' },\n { code: 'NG', name: 'Nigeria', dialCode: '+234', flag: '🇳🇬' },\n { code: 'NU', name: 'Niue', dialCode: '+683', flag: '🇳🇺' },\n { code: 'NF', name: 'Norfolk Island', dialCode: '+672', flag: '🇳🇫' },\n { code: 'MP', name: 'Northern Mariana Islands', dialCode: '+1670', flag: '🇲🇵' },\n { code: 'NO', name: 'Norway', dialCode: '+47', flag: '🇳🇴' },\n { code: 'OM', name: 'Oman', dialCode: '+968', flag: '🇴🇲' },\n { code: 'PK', name: 'Pakistan', dialCode: '+92', flag: '🇵🇰' },\n { code: 'PW', name: 'Palau', dialCode: '+680', flag: '🇵🇼' },\n { code: 'PS', name: 'Palestinian Territory, Occupied', dialCode: '+970', flag: '🇵🇸' },\n { code: 'PA', name: 'Panama', dialCode: '+507', flag: '🇵🇦' },\n { code: 'PG', name: 'Papua New Guinea', dialCode: '+675', flag: '🇵🇬' },\n { code: 'PY', name: 'Paraguay', dialCode: '+595', flag: '🇵🇾' },\n { code: 'PE', name: 'Peru', dialCode: '+51', flag: '🇵🇪' },\n { code: 'PH', name: 'Philippines', dialCode: '+63', flag: '🇵🇭' },\n { code: 'PN', name: 'Pitcairn', dialCode: '+870', flag: '🇵🇳' },\n { code: 'PL', name: 'Poland', dialCode: '+48', flag: '🇵🇱' },\n { code: 'PT', name: 'Portugal', dialCode: '+351', flag: '🇵🇹' },\n { code: 'PR', name: 'Puerto Rico', dialCode: '+1939', flag: '🇵🇷' },\n { code: 'QA', name: 'Qatar', dialCode: '+974', flag: '🇶🇦' },\n { code: 'RE', name: 'Reunion', dialCode: '+262', flag: '🇷🇪' },\n { code: 'RO', name: 'Romania', dialCode: '+40', flag: '🇷🇴' },\n { code: 'RU', name: 'Russian Federation', dialCode: '+7', flag: '🇷🇺' },\n { code: 'RW', name: 'Rwanda', dialCode: '+250', flag: '🇷🇼' },\n { code: 'BL', name: 'Saint Barthelemy', dialCode: '+590', flag: '🇧🇱' },\n { code: 'SH', name: 'Saint Helena', dialCode: '+290', flag: '🇸🇭' },\n { code: 'KN', name: 'Saint Kitts and Nevis', dialCode: '+1869', flag: '🇰🇳' },\n { code: 'LC', name: 'Saint Lucia', dialCode: '+1758', flag: '🇱🇨' },\n { code: 'MF', name: 'Saint Martin', dialCode: '+590', flag: '🇲🇫' },\n { code: 'PM', name: 'Saint Pierre and Miquelon', dialCode: '+508', flag: '🇵🇲' },\n { code: 'VC', name: 'Saint Vincent and the Grenadines', dialCode: '+1784', flag: '🇻🇨' },\n { code: 'WS', name: 'Samoa', dialCode: '+685', flag: '🇼🇸' },\n { code: 'SM', name: 'San Marino', dialCode: '+378', flag: '🇸🇲' },\n { code: 'ST', name: 'Sao Tome and Principe', dialCode: '+239', flag: '🇸🇹' },\n { code: 'SA', name: 'Saudi Arabia', dialCode: '+966', flag: '🇸🇦' },\n { code: 'SN', name: 'Senegal', dialCode: '+221', flag: '🇸🇳' },\n { code: 'RS', name: 'Serbia', dialCode: '+381', flag: '🇷🇸' },\n { code: 'SC', name: 'Seychelles', dialCode: '+248', flag: '🇸🇨' },\n { code: 'SL', name: 'Sierra Leone', dialCode: '+232', flag: '🇸🇱' },\n { code: 'SG', name: 'Singapore', dialCode: '+65', flag: '🇸🇬' },\n { code: 'SK', name: 'Slovakia', dialCode: '+421', flag: '🇸🇰' },\n { code: 'SI', name: 'Slovenia', dialCode: '+386', flag: '🇸🇮' },\n { code: 'SB', name: 'Solomon Islands', dialCode: '+677', flag: '🇸🇧' },\n { code: 'SO', name: 'Somalia', dialCode: '+252', flag: '🇸🇴' },\n { code: 'ZA', name: 'South Africa', dialCode: '+27', flag: '🇿🇦' },\n { code: 'GS', name: 'South Georgia and the South Sandwich Islands', dialCode: '+500', flag: '🇬🇸' },\n { code: 'ES', name: 'Spain', dialCode: '+34', flag: '🇪🇸' },\n { code: 'LK', name: 'Sri Lanka', dialCode: '+94', flag: '🇱🇰' },\n { code: 'SD', name: 'Sudan', dialCode: '+249', flag: '🇸🇩' },\n { code: 'SR', name: 'Suriname', dialCode: '+597', flag: '🇸🇷' },\n { code: 'SJ', name: 'Svalbard and Jan Mayen', dialCode: '+47', flag: '🇸🇯' },\n { code: 'SZ', name: 'Swaziland', dialCode: '+268', flag: '🇸🇿' },\n { code: 'SE', name: 'Sweden', dialCode: '+46', flag: '🇸🇪' },\n { code: 'CH', name: 'Switzerland', dialCode: '+41', flag: '🇨🇭' },\n { code: 'SY', name: 'Syrian Arab Republic', dialCode: '+963', flag: '🇸🇾' },\n { code: 'TW', name: 'Taiwan, Province of China', dialCode: '+886', flag: '🇹🇼' },\n { code: 'TJ', name: 'Tajikistan', dialCode: '+992', flag: '🇹🇯' },\n { code: 'TZ', name: 'Tanzania, United Republic of', dialCode: '+255', flag: '🇹🇿' },\n { code: 'TH', name: 'Thailand', dialCode: '+66', flag: '🇹🇭' },\n { code: 'TL', name: 'Timor-Leste', dialCode: '+670', flag: '🇹🇱' },\n { code: 'TG', name: 'Togo', dialCode: '+228', flag: '🇹🇬' },\n { code: 'TK', name: 'Tokelau', dialCode: '+690', flag: '🇹🇰' },\n { code: 'TO', name: 'Tonga', dialCode: '+676', flag: '🇹🇴' },\n { code: 'TT', name: 'Trinidad and Tobago', dialCode: '+1868', flag: '🇹🇹' },\n { code: 'TN', name: 'Tunisia', dialCode: '+216', flag: '🇹🇳' },\n { code: 'TR', name: 'Turkey', dialCode: '+90', flag: '🇹🇷' },\n { code: 'TM', name: 'Turkmenistan', dialCode: '+993', flag: '🇹🇲' },\n { code: 'TC', name: 'Turks and Caicos Islands', dialCode: '+1649', flag: '🇹🇨' },\n { code: 'TV', name: 'Tuvalu', dialCode: '+688', flag: '🇹🇻' },\n { code: 'UG', name: 'Uganda', dialCode: '+256', flag: '🇺🇬' },\n { code: 'UA', name: 'Ukraine', dialCode: '+380', flag: '🇺🇦' },\n { code: 'AE', name: 'United Arab Emirates', dialCode: '+971', flag: '🇦🇪' },\n { code: 'GB', name: 'United Kingdom', dialCode: '+44', flag: '🇬🇧' },\n { code: 'US', name: 'United States', dialCode: '+1', flag: '🇺🇸' },\n { code: 'UY', name: 'Uruguay', dialCode: '+598', flag: '🇺🇾' },\n { code: 'UZ', name: 'Uzbekistan', dialCode: '+998', flag: '🇺🇿' },\n { code: 'VU', name: 'Vanuatu', dialCode: '+678', flag: '🇻🇺' },\n { code: 'VE', name: 'Venezuela', dialCode: '+58', flag: '🇻🇪' },\n { code: 'VN', name: 'Vietnam', dialCode: '+84', flag: '🇻🇳' },\n { code: 'VG', name: 'Virgin Islands, British', dialCode: '+1284', flag: '🇻🇬' },\n { code: 'VI', name: 'Virgin Islands, U.S.', dialCode: '+1340', flag: '🇻🇮' },\n { code: 'WF', name: 'Wallis and Futuna', dialCode: '+681', flag: '🇼🇫' },\n { code: 'EH', name: 'Western Sahara', dialCode: '+212', flag: '🇪🇭' },\n { code: 'YE', name: 'Yemen', dialCode: '+967', flag: '🇾🇪' },\n { code: 'ZM', name: 'Zambia', dialCode: '+260', flag: '🇿🇲' },\n { code: 'ZW', name: 'Zimbabwe', dialCode: '+263', flag: '🇿🇼' },\n];\n","<template>\n <div class=\"ina-phone-input\">\n <label v-if=\"label\" :for=\"inputId\" class=\"ina-phone-input__label\">\n <component :is=\"labelComponent\" v-if=\"labelComponent\" />\n <span v-else-if=\"label && typeof label === 'string'\">{{ label }}</span>\n <span v-if=\"required\" class=\"ina-phone-input__asterisk\">*</span>\n </label>\n\n <div :class=\"wrapperClasses\">\n <div class=\"ina-phone-input__country-selector\" ref=\"dropdownRef\">\n <button\n type=\"button\"\n class=\"ina-phone-input__country-button\"\n @click=\"toggleCountryDropdown\"\n :disabled=\"disabled || readonly\"\n >\n <span class=\"ina-phone-input__country-flag\">\n {{ selectedCountry.flag }}\n </span>\n\n <span class=\"ina-phone-input__country-code\">\n {{ selectedCountry.dialCode }}\n </span>\n\n <svg\n class=\"ina-phone-input__country-chevron\"\n :class=\"{\n 'ina-phone-input__country-chevron--open': isCountryDropdownOpen,\n }\"\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M6 9L12 15L18 9\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n\n <Transition name=\"dropdown\">\n <div\n v-if=\"isCountryDropdownOpen\"\n class=\"ina-phone-input__country-dropdown\"\n >\n <div class=\"ina-phone-input__country-search\">\n <input\n v-model=\"countrySearch\"\n ref=\"searchInputRef\"\n type=\"text\"\n placeholder=\"Search countries...\"\n class=\"ina-phone-input__country-search-input\"\n />\n </div>\n\n <div class=\"ina-phone-input__country-list\">\n <button\n v-for=\"country in filteredCountries\"\n :key=\"country.code\"\n type=\"button\"\n :class=\"getCountryClasses(country)\"\n @click=\"selectCountry(country)\"\n >\n <span class=\"ina-phone-input__country-flag\">\n {{ country.flag }}\n </span>\n\n <span class=\"ina-phone-input__country-name\">\n {{ country.name }}\n </span>\n\n <span class=\"ina-phone-input__country-dial-code\">\n {{ country.dialCode }}\n </span>\n </button>\n </div>\n </div>\n </Transition>\n </div>\n\n <div class=\"ina-phone-input__divider\"></div>\n\n <input\n v-bind=\"$attrs\"\n :id=\"inputId\"\n ref=\"inputRef\"\n v-model=\"phoneNumber\"\n type=\"tel\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n class=\"ina-phone-input__input\"\n @input=\"handleInput\"\n @blur=\"handleBlur\"\n @focus=\"handleFocus\"\n />\n </div>\n\n <div v-if=\"bottomText\" :class=\"helperTextClasses\">\n <component :is=\"bottomTextComponent\" v-if=\"bottomTextComponent\" />\n <span v-else>{{ bottomText }}</span>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, watch, nextTick, onMounted, onUnmounted } from 'vue';\nimport type { Component } from 'vue';\nimport { COUNTRIES, type Country } from '../utils/countries';\n\nexport interface PhoneInputProps {\n modelValue?: string;\n label?: string | Component;\n placeholder?: string;\n size?: 'sm' | 'md' | 'lg';\n status?: 'neutral' | 'success' | 'error' | 'warning';\n statusMessage?: string | Component;\n helperText?: string | Component;\n disabled?: boolean;\n readonly?: boolean;\n required?: boolean;\n defaultCountry?: string;\n countries?: Country[];\n}\n\nconst props = withDefaults(defineProps<PhoneInputProps>(), {\n modelValue: '',\n size: 'md',\n status: 'neutral',\n disabled: false,\n readonly: false,\n required: false,\n defaultCountry: 'ID',\n countries: () => COUNTRIES,\n});\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string];\n input: [event: Event];\n blur: [event: FocusEvent];\n focus: [event: FocusEvent];\n countryChange: [country: Country];\n}>();\n\nconst inputRef = ref<HTMLInputElement>();\nconst searchInputRef = ref<HTMLInputElement>();\nconst dropdownRef = ref<HTMLElement>();\nconst phoneNumber = ref(props.modelValue);\nconst isCountryDropdownOpen = ref(false);\nconst countrySearch = ref('');\nconst selectedCountry = ref<Country>(\n props.countries.find((c) => c.code === props.defaultCountry) ||\n props.countries[0]\n);\n\n// Generate unique ID for input\nconst inputId = computed(\n () => `phone-input-${Math.random().toString(36).substr(2, 9)}`\n);\n\n// Computed untuk label component\nconst labelComponent = computed(() => {\n if (!props.label) return null;\n if (typeof props.label === 'string') return null;\n return props.label as Component;\n});\n\nconst wrapperClasses = computed(() => {\n const classes = ['ina-phone-input__wrapper'];\n\n classes.push(`ina-phone-input__wrapper--size-${props.size}`);\n\n if (props.disabled) {\n classes.push('ina-phone-input__wrapper--disabled');\n }\n\n if (props.status !== 'neutral') {\n classes.push(`ina-phone-input__wrapper--status-${props.status}`);\n }\n\n return classes;\n});\n\nconst helperTextClasses = computed(() => {\n const classes = ['ina-phone-input__helper-text'];\n if (props.status === 'error') {\n classes.push('ina-phone-input__helper-text--error');\n } else if (props.status === 'warning') {\n classes.push('ina-phone-input__helper-text--warning');\n }\n return classes;\n});\n\nconst bottomText = computed(() => {\n if (props.status !== 'neutral' && props.statusMessage) {\n return props.statusMessage;\n }\n return props.statusMessage || props.helperText;\n});\n\nconst bottomTextComponent = computed(() => {\n const text = bottomText.value;\n if (!text) return null;\n if (typeof text === 'string') return null;\n return text as Component;\n});\n\nconst filteredCountries = computed(() => {\n if (!countrySearch.value) {\n return props.countries;\n }\n\n const search = countrySearch.value.toLowerCase();\n return props.countries.filter(\n (country) =>\n country.name.toLowerCase().includes(search) ||\n country.dialCode.includes(search) ||\n country.code.toLowerCase().includes(search)\n );\n});\n\nconst getCountryClasses = (country: Country) => {\n const classes = ['ina-phone-input__country-option'];\n\n if (country.code === selectedCountry.value.code) {\n classes.push('ina-phone-input__country-option--selected');\n }\n\n return classes;\n};\n\nconst toggleCountryDropdown = () => {\n if (props.disabled || props.readonly) return;\n\n isCountryDropdownOpen.value = !isCountryDropdownOpen.value;\n\n if (isCountryDropdownOpen.value) {\n countrySearch.value = '';\n nextTick(() => {\n searchInputRef.value?.focus();\n });\n }\n};\n\n// Format: 3 digits - 4 digits - rest\nconst formatPhoneNumber = (value: string) => {\n // Remove non-digits\n const clean = value.replace(/\\D/g, '');\n\n // Format 3-4-rest\n if (clean.length > 7) {\n return clean.replace(/^(\\d{3})(\\d{4})(.*)/, '$1-$2-$3');\n } else if (clean.length > 3) {\n return clean.replace(/^(\\d{3})(.*)/, '$1-$2');\n }\n return clean;\n};\n\nconst handleInput = (event: Event) => {\n const target = event.target as HTMLInputElement;\n const rawValue = target.value;\n\n // Get clean local value\n let cleanValue = rawValue.replace(/\\D/g, '');\n\n // Remove leading zero if present for clean value calculation\n if (cleanValue.startsWith('0')) {\n cleanValue = cleanValue.substring(1);\n }\n\n // Format for display (use the raw digit input for formatting to avoid confusing cursor jumps,\n // but for 3-4-rest usually we format the number proper)\n // Let's format the clean value (without leading zero if we want to enforce standard)\n // However, user might type '0' to start.\n // For the display let's format what they typed (numbers only).\n const displayClean = rawValue.replace(/\\D/g, '');\n const formatted = formatPhoneNumber(displayClean);\n\n // Update input if formatted is different\n if (formatted !== rawValue) {\n target.value = formatted;\n }\n\n phoneNumber.value = formatted;\n\n // Emit E.164 value: DialCode + Clean Local Number (no leading zero)\n const fullValue = `${selectedCountry.value.dialCode}${cleanValue}`;\n\n emit('update:modelValue', fullValue);\n emit('input', event);\n};\n\nconst handleBlur = (event: FocusEvent) => {\n emit('blur', event);\n};\n\nconst handleFocus = (event: FocusEvent) => {\n emit('focus', event);\n};\n\nconst handleClickOutside = (event: Event) => {\n const target = event.target as Element;\n if (dropdownRef.value && !dropdownRef.value.contains(target)) {\n isCountryDropdownOpen.value = false;\n }\n};\n\n// Update emission when country changes\nconst selectCountry = (country: Country) => {\n selectedCountry.value = country;\n isCountryDropdownOpen.value = false;\n emit('countryChange', country);\n\n // Re-emit current number with new dial code\n if (phoneNumber.value) {\n const cleanValue = phoneNumber.value.replace(/\\D/g, '');\n const cleanLocal = cleanValue.startsWith('0')\n ? cleanValue.substring(1)\n : cleanValue;\n const fullValue = `${country.dialCode}${cleanLocal}`;\n emit('update:modelValue', fullValue);\n }\n\n nextTick(() => {\n inputRef.value?.focus();\n });\n};\n\n// Watch for external modelValue changes\nwatch(\n () => props.modelValue,\n (newValue) => {\n if (!newValue) {\n phoneNumber.value = '';\n return;\n }\n\n // Try to strip dial code if present to get local part\n // This is a basic check.\n const dialCode = selectedCountry.value.dialCode;\n let localPart = newValue;\n\n // Remove all non-digits/plus for comparison\n // Assuming newValue is E.164 (e.g. +628123...)\n if (newValue.startsWith(dialCode)) {\n localPart = newValue.substring(dialCode.length);\n } else if (newValue.startsWith(dialCode.substring(1))) {\n // Handle case without + if it happens\n localPart = newValue.substring(dialCode.length - 1);\n }\n\n // Format the local part\n phoneNumber.value = formatPhoneNumber(localPart);\n },\n { immediate: true }\n);\n\nonMounted(() => {\n document.addEventListener('click', handleClickOutside);\n});\n\nonUnmounted(() => {\n document.removeEventListener('click', handleClickOutside);\n});\n</script>\n\n<style scoped>\n.dropdown-enter-active,\n.dropdown-leave-active {\n transition: all 0.2s ease;\n}\n\n.dropdown-enter-from,\n.dropdown-leave-to {\n opacity: 0;\n transform: translateY(-8px);\n}\n</style>\n","<template>\n <div v-if=\"visible\" :class=\"containerClasses\">\n <!-- Progress bar -->\n <div\n :class=\"fillClasses\"\n :style=\"{\n width: `${Math.min(100, Math.max(0, progress))}%`,\n transitionDuration: `${duration}ms`,\n }\"\n />\n\n <!-- Shimmer effect -->\n <div v-if=\"shimmer\" class=\"ina-progress-bar__shimmer\" />\n\n <!-- Animated moving indicator -->\n <div\n :class=\"indicatorClasses\"\n :style=\"{\n left: `${Math.min(100, Math.max(0, progress))}%`,\n transform: 'translateX(-100%)',\n transition: `left ${duration}ms ease-out`,\n }\"\n />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nexport interface ProgressBarProps {\n /**\n * Whether the progress bar is visible\n */\n visible?: boolean;\n /**\n * Progress percentage (0-100)\n */\n progress?: number;\n /**\n * Animation duration in milliseconds\n */\n duration?: number;\n /**\n * Color variant\n */\n variant?: 'primary' | 'secondary' | 'success' | 'warning' | 'error';\n /**\n * Height of the progress bar\n */\n height?: 'sm' | 'md' | 'lg';\n /**\n * Whether to show animated shimmer effect\n */\n shimmer?: boolean;\n}\n\nconst props = withDefaults(defineProps<ProgressBarProps>(), {\n visible: true,\n progress: 0,\n duration: 1000,\n variant: 'primary',\n height: 'sm',\n shimmer: true,\n});\n\nconst containerClasses = computed(() => {\n const classes = [\n 'ina-progress-bar',\n `ina-progress-bar--height-${props.height}`,\n ];\n\n if (!props.visible) {\n classes.push('ina-progress-bar--hidden');\n }\n\n return classes.join(' ');\n});\n\nconst fillClasses = computed(() => {\n return [\n 'ina-progress-bar__fill',\n `ina-progress-bar__fill--${props.variant}`,\n ].join(' ');\n});\n\nconst indicatorClasses = computed(() => {\n return [\n 'ina-progress-bar__indicator',\n `ina-progress-bar__indicator--${props.variant}`,\n ].join(' ');\n});\n</script>\n\n<style scoped></style>\n","<template>\n <div v-if=\"visible\" :class=\"containerClasses\">\n <div\n class=\"ina-linear-progress-indicator__fill\"\n :style=\"{\n width: `${clampedValue}%`,\n }\"\n />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nexport interface LinearProgressIndicatorProps {\n /**\n * Progress percentage (0-100)\n */\n value?: number;\n /**\n * Whether the progress indicator is visible\n */\n /**\n * Whether the progress indicator is visible\n */\n visible?: boolean;\n}\n\nconst props = withDefaults(defineProps<LinearProgressIndicatorProps>(), {\n value: 0,\n visible: true,\n});\n\nconst clampedValue = computed(() => {\n return Math.min(100, Math.max(0, props.value));\n});\n\nconst containerClasses = computed(() => {\n const classes = ['ina-linear-progress-indicator'];\n\n return classes.join(' ');\n});\n</script>\n\n<style scoped></style>\n","<template>\n <fieldset class=\"ina-radio-input\" :class=\"radioClasses\" :disabled=\"disabled\">\n <div class=\"ina-radio-input__group\">\n <label :class=\"labelClasses\" :for=\"labelId\">\n {{ label }}\n </label>\n\n <div\n v-for=\"(option, index) in options\"\n :key=\"`${option.value}-${index}`\"\n class=\"ina-radio-input__option\"\n :class=\"{ 'ina-radio-input__option--disabled': disabled }\"\n >\n <input\n :id=\"`${labelId}-${option.value}-${index}`\"\n ref=\"inputRef\"\n v-model=\"selectedValue\"\n type=\"radio\"\n :name=\"name\"\n :value=\"option.value\"\n :disabled=\"disabled\"\n class=\"ina-radio-input__field\"\n v-bind=\"$attrs\"\n @change=\"handleChange\"\n @focus=\"handleFocus\"\n @blur=\"handleBlur\"\n />\n\n <label\n :for=\"`${labelId}-${option.value}-${index}`\"\n class=\"ina-radio-input__option-label\"\n :class=\"{ 'ina-radio-input__option-label--disabled': disabled }\"\n >\n {{ option.label }}\n </label>\n </div>\n </div>\n\n <div v-if=\"helperText\" :class=\"helperClasses\">\n {{ helperText }}\n </div>\n </fieldset>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, watch } from 'vue';\nexport interface OptionItem {\n value: string | number;\n label: string;\n}\n\nexport interface RadioInputProps {\n modelValue?: string | number;\n label: string;\n options: OptionItem[];\n name?: string;\n size?: 'sm' | 'md' | 'lg';\n orientation?: 'vertical' | 'horizontal';\n disabled?: boolean;\n required?: boolean;\n error?: boolean;\n helperText?: string;\n}\n\nconst props = withDefaults(defineProps<RadioInputProps>(), {\n size: 'md',\n orientation: 'vertical',\n disabled: false,\n required: false,\n error: false,\n});\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string | number];\n change: [value: string | number];\n focus: [event: FocusEvent];\n blur: [event: FocusEvent];\n}>();\n\nconst inputRef = ref<HTMLInputElement[]>([]);\nconst selectedValue = ref(props.modelValue);\n\n// Generate unique ID for label\nconst labelId = computed(\n () => `radio-input-label-${Math.random().toString(36).substr(2, 9)}`\n);\n\nconst radioClasses = computed(() => {\n const classes = ['ina-radio-input'];\n\n classes.push(`ina-radio-input--size-${props.size}`);\n classes.push(`ina-radio-input--orientation-${props.orientation}`);\n\n if (props.disabled) {\n classes.push('ina-radio-input--disabled');\n }\n\n if (props.error) {\n classes.push('ina-radio-input--error');\n }\n\n return classes;\n});\n\nconst labelClasses = computed(() => {\n const classes = ['ina-radio-input__main-label'];\n\n if (props.required) {\n classes.push('ina-radio-input__main-label--required');\n }\n\n return classes;\n});\n\nconst helperClasses = computed(() => {\n const classes = ['ina-radio-input__help-text'];\n\n if (props.error) {\n classes.push('ina-radio-input__help-text--error');\n }\n\n return classes;\n});\n\nconst handleChange = (event: Event) => {\n const target = event.target as HTMLInputElement;\n const value = target.value;\n\n selectedValue.value = value;\n emit('update:modelValue', value);\n emit('change', value);\n};\n\nconst handleFocus = (event: FocusEvent) => {\n emit('focus', event);\n};\n\nconst handleBlur = (event: FocusEvent) => {\n emit('blur', event);\n};\n\n// Watch for external modelValue changes\nwatch(\n () => props.modelValue,\n (newValue) => {\n selectedValue.value = newValue;\n }\n);\n</script>\n","<template>\n <div ref=\"containerRef\" class=\"ina-year-picker\" :class=\"containerClasses\">\n <label v-if=\"label\" :for=\"triggerId\" class=\"ina-year-picker__label\">\n {{ label }}\n <span v-if=\"required\" class=\"ina-year-picker__required\">*</span>\n </label>\n\n <div class=\"ina-year-picker__wrapper\">\n <button\n :id=\"triggerId\"\n ref=\"triggerRef\"\n type=\"button\"\n :class=\"triggerClasses\"\n :disabled=\"disabled || readonly\"\n :aria-expanded=\"isOpen\"\n :aria-haspopup=\"true\"\n :aria-labelledby=\"label ? `${triggerId}-label` : undefined\"\n @click=\"togglePanel\"\n @keydown=\"handleKeydown\"\n >\n <div v-if=\"showIcon\" class=\"ina-year-picker__prefix-icon\">\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <rect\n x=\"3\"\n y=\"4\"\n width=\"18\"\n height=\"18\"\n rx=\"2\"\n ry=\"2\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n />\n <line\n x1=\"16\"\n y1=\"2\"\n x2=\"16\"\n y2=\"6\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n />\n <line\n x1=\"8\"\n y1=\"2\"\n x2=\"8\"\n y2=\"6\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n />\n <line\n x1=\"3\"\n y1=\"10\"\n x2=\"21\"\n y2=\"10\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n />\n </svg>\n </div>\n\n <span class=\"ina-year-picker__trigger-text\">\n {{ selectedYear || placeholder }}\n </span>\n\n <button\n v-if=\"showClearButton && selectedYear && !disabled && !readonly\"\n type=\"button\"\n class=\"ina-year-picker__clear-button\"\n @click.stop=\"handleClear\"\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M18 6L6 18M6 6L18 18\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n\n <!-- <svg\n class=\"ina-year-picker__chevron\"\n :class=\"{ 'ina-year-picker__chevron--open': isOpen }\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M6 9L12 15L18 9\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg> -->\n </button>\n\n <!-- Year Picker Panel -->\n <Transition name=\"panel\">\n <div\n v-if=\"isOpen\"\n ref=\"panelRef\"\n :class=\"[\n 'ina-year-picker__panel',\n { 'ina-year-picker__panel--open': isOpen },\n { 'ina-year-picker__panel--right-aligned': useRightPositioning },\n ]\"\n :style=\"panelStyle\"\n >\n <!-- Header with decade range and navigation -->\n <div class=\"ina-year-picker__header\">\n <button\n type=\"button\"\n class=\"ina-year-picker__nav-button\"\n :disabled=\"currentDecade <= props.minYear\"\n @click=\"goToPreviousDecade\"\n >\n <IconChevronLeft class=\"ina-year-picker__nav-icon\" />\n </button>\n\n <span class=\"ina-year-picker__decade-range\">\n {{ currentDecade }} -\n {{\n Math.min(currentDecade + props.decadeSize - 1, props.maxYear)\n }}\n </span>\n\n <button\n type=\"button\"\n class=\"ina-year-picker__nav-button\"\n :disabled=\"currentDecade + props.decadeSize > props.maxYear\"\n @click=\"goToNextDecade\"\n >\n <IconChevronRight class=\"ina-year-picker__nav-icon\" />\n </button>\n </div>\n\n <!-- Year Grid -->\n <div class=\"ina-year-picker__grid\">\n <button\n v-for=\"year in visibleYears\"\n :key=\"year\"\n type=\"button\"\n :class=\"getYearClasses(year)\"\n :disabled=\"\n year < props.minYear || year > props.maxYear || props.disabled\n \"\n @click=\"selectYear(year)\"\n @mouseenter=\"!props.disabled && (hoveredYear = year)\"\n @mouseleave=\"hoveredYear = null\"\n >\n {{ year }}\n </button>\n </div>\n </div>\n </Transition>\n </div>\n\n <div v-if=\"statusMessage\" :class=\"statusClasses\">\n {{ statusMessage }}\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, nextTick, onMounted, onUnmounted } from 'vue';\nimport { IconChevronLeft, IconChevronRight } from '@tabler/icons-vue';\nimport clsx from 'clsx';\nexport interface YearPickerProps {\n modelValue?: number;\n label?: string;\n placeholder?: string;\n size?: 'sm' | 'md';\n status?: 'neutral' | 'success' | 'error' | 'warning';\n statusMessage?: string;\n disabled?: boolean;\n readonly?: boolean;\n required?: boolean;\n minYear?: number;\n maxYear?: number;\n decadeSize?: number;\n showIcon?: boolean;\n showClearButton?: boolean;\n}\n\nconst props = withDefaults(defineProps<YearPickerProps>(), {\n modelValue: undefined,\n size: 'md',\n status: 'neutral',\n disabled: false,\n readonly: false,\n required: false,\n minYear: 1900,\n maxYear: 2100,\n decadeSize: 20,\n showIcon: false,\n showClearButton: false,\n});\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: number | undefined];\n change: [value: number | undefined];\n clear: [];\n}>();\n\nconst containerRef = ref<HTMLDivElement>();\nconst triggerRef = ref<HTMLButtonElement>();\nconst panelRef = ref<HTMLDivElement>();\nconst isOpen = ref(false);\nconst panelStyle = ref<Record<string, string>>({});\nconst useRightPositioning = ref(false);\nconst hoveredYear = ref<number | null>(null);\n\n// Calculate current decade based on selected year\nconst currentDecade = computed(() => {\n if (selectedYear.value) {\n return Math.floor(selectedYear.value / props.decadeSize) * props.decadeSize;\n }\n return (\n Math.floor(new Date().getFullYear() / props.decadeSize) * props.decadeSize\n );\n});\n\n// Generate unique ID for trigger\nconst triggerId = computed(\n () => `year-picker-${Math.random().toString(36).substr(2, 9)}`\n);\n\nconst selectedYear = computed(() => props.modelValue);\n\nconst minDecade = computed(\n () => Math.floor(props.minYear / props.decadeSize) * props.decadeSize\n);\nconst maxDecade = computed(\n () => Math.floor(props.maxYear / props.decadeSize) * props.decadeSize\n);\n\nconst containerClasses = computed(() => {\n const classes = ['ina-year-picker'];\n\n if (props.disabled) {\n classes.push('ina-year-picker--disabled');\n }\n\n return classes;\n});\n\nconst triggerClasses = computed(() => {\n const classes = ['ina-year-picker__trigger'];\n\n // Size\n classes.push(`ina-year-picker__trigger--size-${props.size}`);\n\n // States\n if (props.disabled) {\n classes.push('ina-year-picker__trigger--disabled');\n }\n\n if (props.readonly) {\n classes.push('ina-year-picker__trigger--readonly');\n }\n\n if (props.status !== 'neutral') {\n classes.push(`ina-year-picker__trigger--status-${props.status}`);\n }\n\n if (isOpen.value) {\n classes.push('ina-year-picker__trigger--open');\n }\n\n return classes;\n});\n\nconst statusClasses = computed(() => {\n const classes = ['ina-year-picker__status'];\n\n if (props.status !== 'neutral') {\n classes.push(`ina-year-picker__status--${props.status}`);\n }\n\n return classes;\n});\n\n// Generate year options for current decade\nconst visibleYears = computed(() => {\n const years = [];\n const startYear = currentDecade.value;\n const endYear = Math.min(\n currentDecade.value + props.decadeSize - 1,\n props.maxYear\n );\n\n for (let year = startYear; year <= endYear; year++) {\n if (year >= props.minYear) {\n years.push(year);\n }\n }\n return years;\n});\n\nconst getYearClasses = (year: number) => {\n const isSelected = year === selectedYear.value;\n const isHovered = year === hoveredYear.value;\n const isDisabled = year < props.minYear || year > props.maxYear;\n\n return clsx(\n 'ina-year-picker__year-option',\n isSelected && 'ina-year-picker__year-option--selected',\n isHovered && 'ina-year-picker__year-option--hovered',\n isDisabled && 'ina-year-picker__year-option--disabled'\n );\n};\n\nconst togglePanel = () => {\n if (props.disabled || props.readonly) return;\n\n isOpen.value = !isOpen.value;\n\n if (isOpen.value) {\n nextTick(() => {\n positionPanel();\n });\n }\n};\n\nconst positionPanel = () => {\n if (!triggerRef.value || !panelRef.value) return;\n\n // Use requestAnimationFrame to ensure panel is rendered\n requestAnimationFrame(() => {\n if (!triggerRef.value || !panelRef.value) return;\n\n const triggerRect = triggerRef.value.getBoundingClientRect();\n const panelRect = panelRef.value.getBoundingClientRect();\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n const isMobile = viewportWidth <= 640;\n\n // Default panel width from CSS (320px desktop, 200px mobile)\n const defaultPanelWidth = isMobile ? 200 : 320;\n const panelWidthValue = panelRect.width || defaultPanelWidth;\n\n // Calculate available space from both sides\n const availableSpaceRight = viewportWidth - triggerRect.right;\n const availableSpaceLeft = triggerRect.left;\n\n // Determine horizontal positioning based on available space\n let shouldUseRight = false;\n let leftValue: string | undefined = undefined;\n let rightValue: string | undefined = undefined;\n\n if (isMobile) {\n // On mobile: always center panel in viewport\n // Calculate center position relative to viewport\n const panelCenterX = viewportWidth / 2;\n const panelLeftFromViewport = panelCenterX - panelWidthValue / 2;\n // Convert to position relative to container\n // Get container element\n if (containerRef.value) {\n const containerRect = containerRef.value.getBoundingClientRect();\n // Calculate left position relative to container\n const leftRelativeToContainer =\n panelLeftFromViewport - containerRect.left;\n let calculatedLeft = Math.max(0, leftRelativeToContainer);\n\n // Ensure panel doesn't overflow viewport\n const maxLeft = viewportWidth - panelWidthValue - containerRect.left;\n if (leftRelativeToContainer > maxLeft) {\n calculatedLeft = Math.max(0, maxLeft);\n }\n\n leftValue = `${calculatedLeft}px`;\n rightValue = undefined;\n shouldUseRight = false;\n } else {\n // Fallback: center relative to viewport\n leftValue = `${Math.max(0, panelLeftFromViewport)}px`;\n rightValue = undefined;\n shouldUseRight = false;\n }\n } else {\n // Desktop: use existing logic\n shouldUseRight = panelWidthValue > availableSpaceRight;\n if (shouldUseRight) {\n rightValue = '0';\n leftValue = undefined;\n } else {\n leftValue = '0';\n rightValue = undefined;\n }\n }\n\n // Calculate vertical positioning\n const spaceBelow = viewportHeight - triggerRect.bottom;\n const spaceAbove = triggerRect.top;\n let top: string | undefined = undefined;\n let bottom: string | undefined = undefined;\n let maxHeight = '400px';\n\n if (spaceBelow < panelRect.height && spaceAbove > spaceBelow) {\n // Position above\n bottom = `${triggerRect.height + 4}px`;\n top = undefined;\n maxHeight = `${Math.min(spaceAbove - 10, 400)}px`;\n } else {\n // Position below\n top = `${triggerRect.height + 4}px`;\n bottom = undefined;\n maxHeight = `${Math.min(spaceBelow - 10, 400)}px`;\n }\n\n // Ensure panel width doesn't exceed viewport\n const maxWidth = `${Math.min(panelWidthValue, viewportWidth - 16)}px`; // 16px for padding\n\n const style: Record<string, string> = {\n position: 'absolute',\n maxWidth,\n maxHeight,\n zIndex: '10006', // Higher than MonthPicker panel (10005) and DatePicker panel (10004)\n };\n\n if (top !== undefined) {\n style.top = top;\n }\n if (bottom !== undefined) {\n style.bottom = bottom;\n }\n\n if (shouldUseRight) {\n style.left = 'auto';\n style.right = rightValue || '0';\n useRightPositioning.value = true;\n } else {\n style.left = leftValue || '0';\n style.right = 'auto';\n useRightPositioning.value = false;\n }\n\n panelStyle.value = style;\n });\n};\n\nconst selectYear = (year: number) => {\n if (year < props.minYear || year > props.maxYear) return;\n\n emit('update:modelValue', year);\n emit('change', year);\n isOpen.value = false;\n};\n\nconst goToPreviousDecade = () => {\n const newDecade = Math.max(\n currentDecade.value - props.decadeSize,\n props.minYear\n );\n // Update the current year to the first year of the new decade\n const newYear = Math.max(newDecade, props.minYear);\n emit('update:modelValue', newYear);\n emit('change', newYear);\n};\n\nconst goToNextDecade = () => {\n const newDecade = Math.min(\n currentDecade.value + props.decadeSize,\n props.maxYear - props.decadeSize + 1\n );\n // Update the current year to the first year of the new decade\n const newYear = Math.max(newDecade, props.minYear);\n emit('update:modelValue', newYear);\n emit('change', newYear);\n};\n\nconst handleClear = () => {\n emit('update:modelValue', undefined);\n emit('change', undefined);\n emit('clear');\n};\n\nconst handleKeydown = (event: KeyboardEvent) => {\n if (props.disabled || props.readonly) return;\n\n switch (event.key) {\n case 'Enter':\n case ' ':\n event.preventDefault();\n togglePanel();\n break;\n case 'Escape':\n isOpen.value = false;\n break;\n case 'ArrowDown':\n event.preventDefault();\n if (!isOpen.value) {\n togglePanel();\n }\n break;\n }\n};\n\nconst handleClickOutside = (event: Event) => {\n if (\n panelRef.value &&\n triggerRef.value &&\n !panelRef.value.contains(event.target as Node) &&\n !triggerRef.value.contains(event.target as Node)\n ) {\n isOpen.value = false;\n }\n};\n\n// Handle window resize and scroll for panel positioning\nconst handleResize = () => {\n if (isOpen.value) {\n nextTick(() => {\n positionPanel();\n });\n }\n};\n\nonMounted(() => {\n document.addEventListener('click', handleClickOutside);\n window.addEventListener('resize', handleResize);\n window.addEventListener('scroll', handleResize, true);\n});\n\nonUnmounted(() => {\n document.removeEventListener('click', handleClickOutside);\n window.removeEventListener('resize', handleResize);\n window.removeEventListener('scroll', handleResize, true);\n});\n</script>\n\n<style scoped>\n.panel-enter-active,\n.panel-leave-active {\n transition: all 0.2s ease;\n}\n\n.panel-enter-from,\n.panel-leave-to {\n opacity: 0;\n transform: translateY(-8px);\n}\n</style>\n","<template>\n <div class=\"ina-date-picker\" :class=\"containerClasses\">\n <label v-if=\"label\" :for=\"triggerId\" class=\"ina-date-picker__label\">\n {{ label }}\n <span v-if=\"required\" class=\"ina-date-picker__required\">*</span>\n </label>\n\n <!-- Trigger Button -->\n <button\n :id=\"triggerId\"\n ref=\"triggerRef\"\n type=\"button\"\n :class=\"triggerClasses\"\n :disabled=\"disabled || readonly\"\n :style=\"{ width: validatedTriggerWidth }\"\n @click.stop=\"togglePanel\"\n @keydown=\"handleKeydown\"\n >\n <IconCalendar :size=\"20\" class=\"ina-date-picker__trigger-icon\" />\n\n <span :class=\"triggerTextClasses\">\n {{ selectedDisplay || placeholder }}\n </span>\n\n <div\n v-if=\"hasValue && !disabled && !readonly\"\n class=\"ina-date-picker__clear-button\"\n aria-label=\"Clear selected date\"\n @click.stop=\"handleClear\"\n >\n <IconX :size=\"16\" class=\"ina-date-picker__clear-icon\" />\n </div>\n </button>\n\n <!-- Calendar Panel -->\n <div\n v-if=\"isOpen && !disabled && !readonly\"\n ref=\"panelRef\"\n :class=\"panelClasses\"\n :style=\"panelStyle\"\n >\n <div :class=\"panelContentClasses\">\n <!-- Single Mode Calendar -->\n <div\n v-if=\"mode === 'single'\"\n class=\"ina-date-picker__calendar-container\"\n >\n <div class=\"ina-date-picker__calendar-header\">\n <button\n type=\"button\"\n class=\"ina-date-picker__nav-button\"\n @click=\"goToPreviousMonth\"\n >\n <IconChevronLeft :size=\"20\" class=\"ina-date-picker__nav-icon\" />\n </button>\n\n <div class=\"ina-date-picker__header-controls\">\n <div class=\"ina-date-picker__dropdown-container\">\n <MonthPicker\n :model-value=\"currentMonth\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n :size=\"'sm'\"\n @update:model-value=\"handleMonthChange\"\n />\n </div>\n\n <div class=\"ina-date-picker__dropdown-container\">\n <YearPicker\n :model-value=\"currentYear\"\n :min-year=\"1900\"\n :max-year=\"2100\"\n :decade-size=\"20\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n :size=\"'sm'\"\n @update:model-value=\"handleYearChange\"\n />\n </div>\n </div>\n\n <button\n type=\"button\"\n class=\"ina-date-picker__nav-button\"\n @click=\"goToNextMonth\"\n >\n <IconChevronRight :size=\"20\" class=\"ina-date-picker__nav-icon\" />\n </button>\n </div>\n\n <div class=\"ina-date-picker__calendar-grid\">\n <div\n v-for=\"day in dayNames\"\n :key=\"`h-${day}`\"\n class=\"ina-date-picker__day-header\"\n >\n {{ day }}\n </div>\n <button\n v-for=\"day in calendarDays\"\n :key=\"`${day.date.getFullYear()}-${day.date.getMonth()}-${day.date.getDate()}`\"\n type=\"button\"\n :class=\"getDayClasses(day)\"\n :disabled=\"isDayDisabled(day.date)\"\n @click=\"selectDay(day)\"\n >\n <span class=\"ina-date-picker__day-number\">\n {{ day.date.getDate() }}\n </span>\n </button>\n </div>\n </div>\n\n <!-- Range/Multiple Mode Dual Calendar -->\n <template v-else>\n <!-- Left Calendar -->\n <div class=\"ina-date-picker__calendar-container\">\n <div class=\"ina-date-picker__calendar-header\">\n <button\n type=\"button\"\n class=\"ina-date-picker__nav-button\"\n @click=\"goToPreviousMonth\"\n >\n <IconChevronLeft :size=\"20\" class=\"ina-date-picker__nav-icon\" />\n </button>\n\n <div class=\"ina-date-picker__header-controls\">\n <div class=\"ina-date-picker__dropdown-container\">\n <MonthPicker\n :model-value=\"currentMonth\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n :size=\"'sm'\"\n @update:model-value=\"handleMonthChange\"\n />\n </div>\n\n <div class=\"ina-date-picker__dropdown-container\">\n <YearPicker\n :model-value=\"currentYear\"\n :min-year=\"1900\"\n :max-year=\"2100\"\n :decade-size=\"20\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n :size=\"'sm'\"\n @update:model-value=\"handleYearChange\"\n />\n </div>\n </div>\n\n <!-- Add ChevronRight for mobile navigation in range/multiple modes -->\n <button\n type=\"button\"\n class=\"ina-date-picker__nav-button\"\n @click=\"goToNextMonth\"\n >\n <IconChevronRight\n :size=\"20\"\n class=\"ina-date-picker__nav-icon\"\n />\n </button>\n </div>\n\n <div class=\"ina-date-picker__calendar-grid\">\n <div\n v-for=\"day in dayNames\"\n :key=\"`lh-${day}`\"\n class=\"ina-date-picker__day-header\"\n >\n {{ day }}\n </div>\n <button\n v-for=\"day in calendarDays\"\n :key=\"`left-${day.date.getFullYear()}-${day.date.getMonth()}-${day.date.getDate()}`\"\n type=\"button\"\n :class=\"getDayClasses(day)\"\n :disabled=\"isDayDisabled(day.date)\"\n @click=\"selectDay(day)\"\n >\n <span class=\"ina-date-picker__day-number\">\n {{ day.date.getDate() }}\n </span>\n </button>\n </div>\n </div>\n\n <!-- Right Calendar -->\n <div class=\"ina-date-picker__calendar\">\n <div class=\"ina-date-picker__next-month-header\">\n <!-- ChevronLeft for right panel -->\n <button\n type=\"button\"\n class=\"ina-date-picker__nav-button\"\n @click=\"goToPreviousMonthRight\"\n >\n <IconChevronLeft :size=\"20\" class=\"ina-date-picker__nav-icon\" />\n </button>\n\n <div class=\"ina-date-picker__next-month-controls\">\n <div class=\"ina-date-picker__dropdown-container\">\n <MonthPicker\n :model-value=\"nextMonth\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n :size=\"'sm'\"\n @update:model-value=\"handleNextMonthChange\"\n />\n </div>\n\n <div class=\"ina-date-picker__dropdown-container\">\n <YearPicker\n :model-value=\"nextYear\"\n :min-year=\"1900\"\n :max-year=\"2100\"\n :decade-size=\"20\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n :size=\"'sm'\"\n @update:model-value=\"handleNextYearChange\"\n />\n </div>\n </div>\n\n <!-- ChevronRight for right panel -->\n <button\n type=\"button\"\n class=\"ina-date-picker__nav-button\"\n @click=\"goToNextMonthRight\"\n >\n <IconChevronRight\n :size=\"20\"\n class=\"ina-date-picker__nav-icon\"\n />\n </button>\n </div>\n\n <div class=\"ina-date-picker__calendar-grid\">\n <div\n v-for=\"day in dayNames\"\n :key=\"`rh-${day}`\"\n class=\"ina-date-picker__day-header\"\n >\n {{ day }}\n </div>\n <button\n v-for=\"day in nextCalendarDays\"\n :key=\"`right-${day.date.getFullYear()}-${day.date.getMonth()}-${day.date.getDate()}`\"\n type=\"button\"\n :class=\"getDayClasses(day)\"\n :disabled=\"isDayDisabled(day.date)\"\n @click=\"selectDay(day)\"\n >\n <span class=\"ina-date-picker__day-number\">\n {{ day.date.getDate() }}\n </span>\n </button>\n </div>\n </div>\n </template>\n </div>\n </div>\n\n <div v-if=\"statusMessage\" :class=\"statusClasses\">\n {{ statusMessage }}\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, nextTick, onMounted, onUnmounted, watch } from 'vue';\nimport {\n IconChevronLeft,\n IconChevronRight,\n IconCalendar,\n IconX,\n} from '@tabler/icons-vue';\nimport clsx from 'clsx';\nimport MonthPicker from './MonthPicker.vue';\nimport YearPicker from './YearPicker.vue';\n\nexport interface DatePickerProps {\n modelValue?: string | [string, string] | string[];\n mode?: 'single' | 'range' | 'multiple';\n label?: string;\n placeholder?: string;\n size?: 'sm' | 'md' | 'lg';\n status?: 'neutral' | 'success' | 'error' | 'warning';\n statusMessage?: string;\n disabled?: boolean;\n readonly?: boolean;\n required?: boolean;\n showIcon?: boolean;\n showClearButton?: boolean;\n dateFormat?: string;\n minDate?: Date;\n maxDate?: Date;\n disabledDates?: Date[];\n /** Disable dates before today */\n disabledBackDate?: boolean;\n /** Disable dates after today */\n disabledFutureDate?: boolean;\n /** Disable dates before this specific date (format: 'dd/MM/yyyy') */\n disabledDateBefore?: string;\n /** Disable dates after this specific date (format: 'dd/MM/yyyy') */\n disabledDateAfter?: string;\n triggerWidth?: number | string;\n panelMaxHeight?: number | string;\n panelClassName?: string;\n triggerClassname?: string;\n popperPlacement?:\n | 'bottom'\n | 'bottom-start'\n | 'bottom-end'\n | 'left'\n | 'left-start'\n | 'left-end'\n | 'right'\n | 'right-start'\n | 'right-end'\n | 'top'\n | 'top-start'\n | 'top-end';\n}\n\nconst props = withDefaults(defineProps<DatePickerProps>(), {\n modelValue: '',\n mode: 'single',\n size: 'md',\n status: 'neutral',\n disabled: false,\n readonly: false,\n required: false,\n showIcon: false,\n showClearButton: false,\n dateFormat: 'DD/MM/YYYY',\n triggerWidth: '',\n panelMaxHeight: undefined,\n panelClassName: '',\n triggerClassname: '',\n popperPlacement: 'bottom-start',\n});\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string | [string, string] | string[]];\n change: [value: string | [string, string] | string[]];\n clear: [];\n}>();\n\nconst triggerRef = ref<HTMLButtonElement>();\nconst panelRef = ref<HTMLDivElement>();\nconst isOpen = ref(false);\nconst panelStyle = ref({});\nconst currentDate = ref(new Date());\nconst nextDate = ref(new Date(new Date().setMonth(new Date().getMonth() + 1)));\nconst tempSelectedDate = ref<string | [string, string] | string[] | null>(null);\nconst useRightPositioning = ref(false);\n// Internal state untuk menyimpan start date sementara di mode range (tidak emit sampai end date dipilih)\nconst tempStartDate = ref<Date | null>(null);\n\n// Generate unique ID for trigger\nconst triggerId = computed(\n () => `date-picker-${Math.random().toString(36).substr(2, 9)}`\n);\n\nconst currentYear = computed(() => currentDate.value.getFullYear());\nconst currentMonth = computed(() => currentDate.value.getMonth());\nconst nextYear = computed(() => nextDate.value.getFullYear());\nconst nextMonth = computed(() => nextDate.value.getMonth());\n\nconst monthNames = [\n 'Januari',\n 'Februari',\n 'Maret',\n 'April',\n 'Mei',\n 'Juni',\n 'Juli',\n 'Agustus',\n 'September',\n 'Oktober',\n 'November',\n 'Desember',\n];\n\nconst dayNames = ['Min', 'Sen', 'Sel', 'Rab', 'Kam', 'Jum', 'Sab'];\n\nconst currentMonthName = computed(() => monthNames[currentMonth.value]);\nconst nextMonthName = computed(() => monthNames[nextMonth.value]);\n\nconst hasValue = computed(() => {\n if (props.mode === 'single') {\n return !!props.modelValue;\n } else if (props.mode === 'range') {\n const range = props.modelValue as [string, string];\n return !!(range && range[0] && range[1]);\n } else if (props.mode === 'multiple') {\n const multiple = props.modelValue as string[];\n return !!(multiple && multiple.length > 0);\n }\n return false;\n});\n\nconst selectedDisplay = computed(() => {\n if (props.mode === 'single') {\n return props.modelValue as string;\n } else if (props.mode === 'range') {\n const range = props.modelValue as [string, string];\n if (range && range[0] && range[1]) {\n return `${range[0]} - ${range[1]}`;\n }\n return '';\n } else if (props.mode === 'multiple') {\n const multiple = props.modelValue as string[];\n if (multiple && multiple.length > 0) {\n if (multiple.length === 1) {\n return multiple[0];\n }\n return `${multiple.length} dates selected`;\n }\n return '';\n }\n return '';\n});\n\nconst containerClasses = computed(() => {\n return clsx('ina-date-picker', props.disabled && 'ina-date-picker--disabled');\n});\n\nconst triggerClasses = computed(() => {\n return clsx(\n 'ina-date-picker__trigger',\n `ina-date-picker__trigger--size-${props.size}`,\n props.disabled && 'ina-date-picker__trigger--disabled',\n props.readonly && 'ina-date-picker__trigger--readonly',\n props.status !== 'neutral' &&\n `ina-date-picker__trigger--status-${props.status}`,\n isOpen.value && 'ina-date-picker__trigger--open',\n props.triggerClassname\n );\n});\n\nconst triggerTextClasses = computed(() => {\n return clsx(\n 'ina-date-picker__trigger-text',\n selectedDisplay.value\n ? 'ina-date-picker__trigger-text--value'\n : 'ina-date-picker__trigger-text--placeholder'\n );\n});\n\n// Validate triggerWidth to ensure it doesn't exceed viewport width\n// Use ref to store validated width and update it when component is mounted or triggerWidth changes\nconst validatedTriggerWidth = ref<string | number>(props.triggerWidth);\n\nconst validateTriggerWidth = () => {\n if (typeof window === 'undefined') return;\n\n const viewportWidth = window.innerWidth;\n let maxWidth = viewportWidth;\n\n // Try to get parent width if triggerRef is available\n if (triggerRef.value?.parentElement) {\n const parentWidth =\n triggerRef.value.parentElement.getBoundingClientRect().width;\n maxWidth = Math.min(viewportWidth, parentWidth);\n }\n\n // If triggerWidth is a percentage, allow it (browser will handle it)\n if (typeof props.triggerWidth === 'string') {\n if (props.triggerWidth.includes('%')) {\n // For percentage, ensure it doesn't exceed 100%\n const percentage = parseFloat(props.triggerWidth.replace('%', ''));\n if (percentage > 100) {\n validatedTriggerWidth.value = '100%';\n } else {\n validatedTriggerWidth.value = props.triggerWidth;\n }\n return;\n } else if (props.triggerWidth.includes('px')) {\n const pixelValue = parseInt(props.triggerWidth.replace('px', ''), 10);\n if (!isNaN(pixelValue)) {\n validatedTriggerWidth.value = `${Math.min(pixelValue, maxWidth)}px`;\n } else {\n validatedTriggerWidth.value = props.triggerWidth;\n }\n return;\n } else if (props.triggerWidth.includes('rem')) {\n const remValue = parseFloat(props.triggerWidth.replace('rem', ''));\n const pixelValue = remValue * 16; // Assuming 16px base\n validatedTriggerWidth.value = `${Math.min(pixelValue, maxWidth)}px`;\n return;\n } else if (props.triggerWidth === '100%' || props.triggerWidth === 'auto') {\n validatedTriggerWidth.value = props.triggerWidth; // Allow 100% and auto\n return;\n }\n // If it's a number string, parse it\n const numValue = parseFloat(props.triggerWidth);\n if (!isNaN(numValue)) {\n validatedTriggerWidth.value = `${Math.min(numValue, maxWidth)}px`;\n } else {\n validatedTriggerWidth.value = props.triggerWidth;\n }\n } else if (typeof props.triggerWidth === 'number') {\n validatedTriggerWidth.value = `${Math.min(props.triggerWidth, maxWidth)}px`;\n } else {\n validatedTriggerWidth.value = props.triggerWidth;\n }\n};\n\n// Watch for triggerWidth changes and validate\nwatch(\n () => props.triggerWidth,\n () => {\n validateTriggerWidth();\n },\n { immediate: true }\n);\n\nconst panelClasses = computed(() => {\n return clsx(\n 'ina-date-picker__panel',\n `ina-date-picker__panel--${props.popperPlacement.split('-')[0]}`,\n useRightPositioning.value &&\n !props.popperPlacement.includes('left') &&\n !props.popperPlacement.includes('right') &&\n 'ina-date-picker__panel--right-aligned',\n props.panelClassName\n );\n});\n\nconst statusClasses = computed(() => {\n return clsx(\n 'ina-date-picker__status',\n props.status !== 'neutral' && `ina-date-picker__status--${props.status}`\n );\n});\n\n// Match React: panel-content modifiers for responsive/single/dual\nconst panelContentClasses = computed(() =>\n clsx(\n 'ina-date-picker__panel-content',\n 'ina-date-picker__panel-content--responsive',\n props.mode === 'single' && 'ina-date-picker__panel-content--single',\n (props.mode === 'range' || props.mode === 'multiple') &&\n 'ina-date-picker__panel-content--dual'\n )\n);\n\nconst calendarDays = computed(() => {\n const year = currentYear.value;\n const month = currentMonth.value;\n const firstDay = new Date(year, month, 1);\n const lastDay = new Date(year, month + 1, 0);\n const startDate = new Date(firstDay);\n startDate.setDate(startDate.getDate() - firstDay.getDay());\n\n const days = [];\n const endDate = new Date(lastDay);\n endDate.setDate(endDate.getDate() + (6 - lastDay.getDay()));\n\n let currentDate = new Date(startDate);\n while (currentDate <= endDate) {\n days.push({\n date: new Date(currentDate),\n isCurrentMonth: currentDate.getMonth() === month,\n isToday: isToday(currentDate),\n });\n currentDate.setDate(currentDate.getDate() + 1);\n }\n\n return days;\n});\n\nconst nextCalendarDays = computed(() => {\n const year = nextYear.value;\n const month = nextMonth.value;\n const firstDay = new Date(year, month, 1);\n const lastDay = new Date(year, month + 1, 0);\n const startDate = new Date(firstDay);\n startDate.setDate(startDate.getDate() - firstDay.getDay());\n\n const days = [];\n const endDate = new Date(lastDay);\n endDate.setDate(endDate.getDate() + (6 - lastDay.getDay()));\n\n let currentDate = new Date(startDate);\n while (currentDate <= endDate) {\n days.push({\n date: new Date(currentDate),\n isCurrentMonth: currentDate.getMonth() === month,\n isToday: isToday(currentDate),\n });\n currentDate.setDate(currentDate.getDate() + 1);\n }\n\n return days;\n});\n\nconst isToday = (date: Date) => {\n const today = new Date();\n return date.toDateString() === today.toDateString();\n};\n\nconst formatDate = (date: Date) => {\n const day = date.getDate().toString().padStart(2, '0');\n const month = (date.getMonth() + 1).toString().padStart(2, '0');\n const year = date.getFullYear();\n\n return props.dateFormat\n .replace('DD', day)\n .replace('MM', month)\n .replace('YYYY', year.toString())\n .replace('MMMM', monthNames[date.getMonth()]);\n};\n\nconst parseDate = (dateString: string) => {\n if (!dateString) return null;\n\n // Simple parsing for DD/MM/YYYY format\n // eslint-disable-next-line no-useless-escape\n const parts = dateString.split(/[\\/\\-\\.]/);\n if (parts.length === 3) {\n const day = parseInt(parts[0], 10);\n const month = parseInt(parts[1], 10) - 1;\n const year = parseInt(parts[2], 10);\n\n if (!isNaN(day) && !isNaN(month) && !isNaN(year)) {\n return new Date(year, month, day);\n }\n }\n\n return null;\n};\n\nconst isDayDisabled = (date: Date) => {\n const today = new Date();\n today.setHours(0, 0, 0, 0); // Reset time to start of day\n\n const checkDate = new Date(date);\n checkDate.setHours(0, 0, 0, 0); // Reset time to start of day\n\n // Check minDate (legacy support)\n if (props.minDate && checkDate < props.minDate) return true;\n\n // Check maxDate (legacy support)\n if (props.maxDate && checkDate > props.maxDate) return true;\n\n // Check disabledBackDate (before today)\n if (props.disabledBackDate && checkDate < today) {\n return true;\n }\n\n // Check disabledFutureDate (after today)\n if (props.disabledFutureDate && checkDate > today) {\n return true;\n }\n\n // Check disabledDateBefore (before specific date)\n if (props.disabledDateBefore) {\n const beforeDate = parseDate(props.disabledDateBefore);\n if (beforeDate) {\n beforeDate.setHours(0, 0, 0, 0);\n if (checkDate < beforeDate) {\n return true;\n }\n }\n }\n\n // Check disabledDateAfter (after specific date)\n if (props.disabledDateAfter) {\n const afterDate = parseDate(props.disabledDateAfter);\n if (afterDate) {\n afterDate.setHours(0, 0, 0, 0);\n if (checkDate > afterDate) {\n return true;\n }\n }\n }\n\n // Check disabledDates array\n if (props.disabledDates) {\n return props.disabledDates.some(\n (disabledDate) => date.toDateString() === disabledDate.toDateString()\n );\n }\n\n return false;\n};\n\nconst getDayClasses = (day: any) => {\n const rangePosition = getRangePosition(day.date);\n\n return clsx(\n 'ina-date-picker__day',\n !day.isCurrentMonth && 'ina-date-picker__day--other-month',\n day.isToday && 'ina-date-picker__day--today',\n isDaySelected(day.date) && 'ina-date-picker__day--selected',\n isDayInRange(day.date) && 'ina-date-picker__day--in-range',\n isDayDisabled(day.date) && 'ina-date-picker__day--disabled',\n // Range position classes\n rangePosition === 'start' && 'ina-date-picker__day--range-start',\n rangePosition === 'end' && 'ina-date-picker__day--range-end',\n rangePosition === 'middle' && 'ina-date-picker__day--range-in'\n );\n};\n\nconst isDaySelected = (date: Date) => {\n if (props.mode === 'single') {\n // Check only modelValue (no tempSelectedDate needed)\n const selected = parseDate(props.modelValue as string);\n return selected && date.toDateString() === selected.toDateString();\n } else if (props.mode === 'range') {\n // Prioritas 1: Jika ada tempStartDate, gunakan itu (range baru sedang dipilih)\n if (\n tempStartDate.value &&\n date.toDateString() === tempStartDate.value.toDateString()\n ) {\n return true;\n }\n\n // Prioritas 2: Cek modelValue hanya jika tidak ada tempStartDate\n // (artinya range sudah lengkap atau belum ada selection)\n if (!tempStartDate.value) {\n const range = props.modelValue as [string, string];\n if (range && range[0] && range[1]) {\n const start = parseDate(range[0]);\n const end = parseDate(range[1]);\n if (start && date.toDateString() === start.toDateString()) {\n return true;\n }\n if (end && date.toDateString() === end.toDateString()) {\n return true;\n }\n }\n }\n } else if (props.mode === 'multiple') {\n const multiple = props.modelValue as string[];\n if (multiple) {\n return multiple.some((dateStr) => {\n const parsed = parseDate(dateStr);\n return parsed && date.toDateString() === parsed.toDateString();\n });\n }\n }\n return false;\n};\n\nconst isDayInRange = (date: Date) => {\n if (props.mode === 'range') {\n // Jika ada tempStartDate, jangan tampilkan range lama\n if (tempStartDate.value) {\n return false;\n }\n\n // Cek modelValue hanya jika tidak ada tempStartDate\n const range = props.modelValue as [string, string];\n if (range && range[0] && range[1]) {\n const start = parseDate(range[0]);\n const end = parseDate(range[1]);\n if (start && end) {\n return date > start && date < end;\n }\n }\n }\n return false;\n};\n\nconst getRangePosition = (\n date: Date | null\n): 'start' | 'middle' | 'end' | 'single' | 'none' => {\n if (!date) return 'none';\n\n if (props.mode === 'range') {\n // Prioritas 1: Jika ada tempStartDate, gunakan itu (range baru sedang dipilih)\n if (\n tempStartDate.value &&\n date.toDateString() === tempStartDate.value.toDateString()\n ) {\n return 'start';\n }\n\n // Prioritas 2: Cek modelValue hanya jika tidak ada tempStartDate\n // (artinya range sudah lengkap atau belum ada selection)\n if (!tempStartDate.value) {\n const range = props.modelValue as [string, string];\n if (range && range[0] && range[1]) {\n const start = parseDate(range[0]);\n const end = parseDate(range[1]);\n\n if (start && end) {\n // Check if this is the start date\n if (date.toDateString() === start.toDateString()) {\n // If start and end are the same\n if (date.toDateString() === end.toDateString()) {\n return 'single'; // Same start and end date\n }\n return 'start';\n }\n\n // Check if this is the end date\n if (date.toDateString() === end.toDateString()) {\n return 'end';\n }\n\n // Check if this date is in the middle of the range\n if (date > start && date < end) {\n return 'middle';\n }\n }\n }\n }\n }\n\n return 'none';\n};\n\nconst selectDay = (day: any) => {\n if (isDayDisabled(day.date)) return;\n\n const formattedDate = formatDate(day.date);\n\n if (props.mode === 'single') {\n // For single mode, apply immediately without closing panel\n emit('update:modelValue', formattedDate);\n emit('change', formattedDate);\n // Don't close panel - only close on click outside or toggle\n } else if (props.mode === 'range') {\n const range = (props.modelValue as [string, string]) || ['', ''];\n\n if (!range[0] && !range[1] && !tempStartDate.value) {\n // First selection - simpan di internal state, jangan emit\n tempStartDate.value = day.date;\n } else if (tempStartDate.value || (range[0] && !range[1])) {\n // Second selection - sekarang baru emit dengan start dan end\n const startDate = tempStartDate.value || parseDate(range[0]);\n if (startDate) {\n const [start, end] =\n startDate <= day.date ? [startDate, day.date] : [day.date, startDate];\n const formattedStart = formatDate(start);\n const formattedEnd = formatDate(end);\n emit('update:modelValue', [formattedStart, formattedEnd]);\n emit('change', [formattedStart, formattedEnd]);\n tempStartDate.value = null; // Reset temp state\n }\n } else if (range[0] && range[1]) {\n // Reset range lama dan mulai range baru\n emit('update:modelValue', ['', '']); // Reset ke parent\n emit('change', ['', '']); // Notify parent\n tempStartDate.value = day.date; // Set start date baru\n }\n } else if (props.mode === 'multiple') {\n const multiple = [...((props.modelValue as string[]) || [])];\n const index = multiple.indexOf(formattedDate);\n\n if (index > -1) {\n multiple.splice(index, 1);\n } else {\n multiple.push(formattedDate);\n }\n\n emit('update:modelValue', multiple);\n emit('change', multiple);\n }\n};\n\n// Helper function to check if left month is greater than right month\nconst isLeftGreaterThanRight = (leftDate: Date, rightDate: Date): boolean => {\n const leftYear = leftDate.getFullYear();\n const leftMonth = leftDate.getMonth();\n const rightYear = rightDate.getFullYear();\n const rightMonth = rightDate.getMonth();\n\n return (\n leftYear > rightYear || (leftYear === rightYear && leftMonth >= rightMonth)\n );\n};\n\nconst goToPreviousMonth = () => {\n const newDate = new Date(currentDate.value);\n newDate.setMonth(newDate.getMonth() - 1);\n currentDate.value = newDate;\n\n // Validation: If left panel becomes greater than or equal to right panel, adjust right panel\n if (\n props.mode !== 'single' &&\n isLeftGreaterThanRight(newDate, nextDate.value)\n ) {\n const adjustedRight = new Date(newDate);\n adjustedRight.setMonth(adjustedRight.getMonth() + 1);\n nextDate.value = adjustedRight;\n }\n};\n\nconst goToNextMonth = () => {\n const newDate = new Date(currentDate.value);\n newDate.setMonth(newDate.getMonth() + 1);\n currentDate.value = newDate;\n\n // Validation: If left panel becomes greater than or equal to right panel, adjust right panel\n if (\n props.mode !== 'single' &&\n isLeftGreaterThanRight(newDate, nextDate.value)\n ) {\n const adjustedRight = new Date(newDate);\n adjustedRight.setMonth(adjustedRight.getMonth() + 1);\n nextDate.value = adjustedRight;\n }\n};\n\n// Navigation functions for right calendar - independent with validation\nconst goToPreviousMonthRight = () => {\n const newDate = new Date(nextDate.value);\n newDate.setMonth(newDate.getMonth() - 1);\n nextDate.value = newDate;\n\n // Validation: If right panel becomes less than left panel, adjust left panel\n if (\n props.mode !== 'single' &&\n isLeftGreaterThanRight(currentDate.value, newDate)\n ) {\n const adjustedLeft = new Date(newDate);\n adjustedLeft.setMonth(adjustedLeft.getMonth() - 1);\n currentDate.value = adjustedLeft;\n }\n};\n\nconst goToNextMonthRight = () => {\n const newDate = new Date(nextDate.value);\n newDate.setMonth(newDate.getMonth() + 1);\n nextDate.value = newDate;\n\n // Validation: If right panel becomes less than left panel, adjust left panel\n if (\n props.mode !== 'single' &&\n isLeftGreaterThanRight(currentDate.value, newDate)\n ) {\n const adjustedLeft = new Date(newDate);\n adjustedLeft.setMonth(adjustedLeft.getMonth() - 1);\n currentDate.value = adjustedLeft;\n }\n};\n\nconst handleMonthChange = (month: number) => {\n const newDate = new Date(currentDate.value);\n newDate.setMonth(month);\n currentDate.value = newDate;\n\n // Validation: If left panel becomes greater than or equal to right panel, adjust right panel\n if (\n props.mode !== 'single' &&\n isLeftGreaterThanRight(newDate, nextDate.value)\n ) {\n const adjustedRight = new Date(newDate);\n adjustedRight.setMonth(adjustedRight.getMonth() + 1);\n nextDate.value = adjustedRight;\n }\n};\n\nconst handleYearChange = (year: number) => {\n const newDate = new Date(currentDate.value);\n newDate.setFullYear(year);\n currentDate.value = newDate;\n\n // Validation: If left panel becomes greater than or equal to right panel, adjust right panel\n if (\n props.mode !== 'single' &&\n isLeftGreaterThanRight(newDate, nextDate.value)\n ) {\n const adjustedRight = new Date(newDate);\n adjustedRight.setMonth(adjustedRight.getMonth() + 1);\n nextDate.value = adjustedRight;\n }\n};\n\nconst handleNextMonthChange = (month: number) => {\n const newDate = new Date(nextDate.value);\n newDate.setMonth(month);\n nextDate.value = newDate;\n\n // Validation: If right panel becomes less than left panel, adjust left panel\n if (\n props.mode !== 'single' &&\n isLeftGreaterThanRight(currentDate.value, newDate)\n ) {\n const adjustedLeft = new Date(newDate);\n adjustedLeft.setMonth(adjustedLeft.getMonth() - 1);\n currentDate.value = adjustedLeft;\n }\n};\n\nconst handleNextYearChange = (year: number) => {\n const newDate = new Date(nextDate.value);\n newDate.setFullYear(year);\n nextDate.value = newDate;\n\n // Validation: If right panel becomes less than left panel, adjust left panel\n if (\n props.mode !== 'single' &&\n isLeftGreaterThanRight(currentDate.value, newDate)\n ) {\n const adjustedLeft = new Date(newDate);\n adjustedLeft.setMonth(adjustedLeft.getMonth() - 1);\n currentDate.value = adjustedLeft;\n }\n};\n\nconst togglePanel = () => {\n if (props.disabled || props.readonly) return;\n\n // Close all other DatePicker panels before opening this one\n if (!isOpen.value) {\n const allDatePickers = document.querySelectorAll('.ina-date-picker');\n allDatePickers.forEach((picker) => {\n if (picker !== triggerRef.value?.closest('.ina-date-picker')) {\n const closeEvent = new CustomEvent('closeDatePicker', {\n detail: { exclude: triggerRef.value?.closest('.ina-date-picker') },\n });\n document.dispatchEvent(closeEvent);\n }\n });\n }\n\n isOpen.value = !isOpen.value;\n\n if (isOpen.value) {\n nextTick(() => {\n positionPanel();\n });\n }\n};\n\n// Helper function to find first enabled date month\nconst getFirstEnabledMonth = (): Date | null => {\n // Check disabledDateBefore - if set, the first enabled date is that date\n if (props.disabledDateBefore) {\n const beforeDate = parseDate(props.disabledDateBefore);\n if (beforeDate) {\n // Return the month containing the disabledDateBefore date (first enabled date)\n return new Date(beforeDate.getFullYear(), beforeDate.getMonth(), 1);\n }\n }\n\n // Check disabledDateAfter - if set, start from today or earlier\n // But we'll prioritize disabledDateBefore if it exists\n if (props.disabledDateAfter && !props.disabledDateBefore) {\n const afterDate = parseDate(props.disabledDateAfter);\n if (afterDate) {\n // Return the month containing the disabledDateAfter date\n return new Date(afterDate.getFullYear(), afterDate.getMonth(), 1);\n }\n }\n\n // Check disabledBackDate - if set, first enabled date is today\n if (props.disabledBackDate) {\n const today = new Date();\n return new Date(today.getFullYear(), today.getMonth(), 1);\n }\n\n // Check disabledFutureDate - if set, first enabled date is today\n if (props.disabledFutureDate) {\n const today = new Date();\n return new Date(today.getFullYear(), today.getMonth(), 1);\n }\n\n // Check minDate (legacy support)\n if (props.minDate) {\n return new Date(props.minDate.getFullYear(), props.minDate.getMonth(), 1);\n }\n\n return null;\n};\n\n// Update currentDate when panel opens based on selected date or disabled dates\nwatch(isOpen, (newValue) => {\n if (!newValue) {\n // Reset temp state when panel closes\n tempStartDate.value = null;\n } else {\n // Priority 1: Use selected date if available\n let targetDate: Date | null = null;\n let targetEndDate: Date | null = null;\n\n if (props.mode === 'single') {\n targetDate = parseDate(props.modelValue as string);\n } else if (props.mode === 'range') {\n const range = props.modelValue as [string, string];\n if (range && range[0]) {\n targetDate = parseDate(range[0]);\n }\n if (range && range[1]) {\n targetEndDate = parseDate(range[1]);\n }\n } else if (props.mode === 'multiple') {\n const multiple = props.modelValue as string[];\n if (multiple && multiple.length > 0) {\n targetDate = parseDate(multiple[0]);\n }\n }\n\n let targetMonth: Date | null = null;\n let targetNextMonth: Date | null = null;\n\n if (targetDate) {\n // Create a new Date object with the same month and year as the selected date\n targetMonth = new Date(\n targetDate.getFullYear(),\n targetDate.getMonth(),\n 1\n );\n } else {\n // Priority 2: If no selected date, use first enabled month from disabled dates\n targetMonth = getFirstEnabledMonth();\n }\n\n // Handle targetNextMonth for range mode\n if (props.mode === 'range') {\n if (targetDate && targetEndDate) {\n // Both startDate and endDate exist\n const startMonth = new Date(\n targetDate.getFullYear(),\n targetDate.getMonth(),\n 1\n );\n const endMonth = new Date(\n targetEndDate.getFullYear(),\n targetEndDate.getMonth(),\n 1\n );\n\n // Check if startDate and endDate are in the same month\n if (\n startMonth.getFullYear() === endMonth.getFullYear() &&\n startMonth.getMonth() === endMonth.getMonth()\n ) {\n // If same month, set right panel to next month (startDate month + 1)\n // This ensures the right panel shows the month after the selected range\n targetNextMonth = new Date(startMonth);\n targetNextMonth.setMonth(targetNextMonth.getMonth() + 1);\n } else {\n // If different months, use endDate's month for right panel\n targetNextMonth = endMonth;\n }\n } else if (targetDate && !targetEndDate) {\n // Only startDate exists (no endDate yet), set right panel to next month\n targetNextMonth = new Date(targetMonth!);\n targetNextMonth.setMonth(targetNextMonth.getMonth() + 1);\n }\n } else if (targetEndDate) {\n // For other modes (shouldn't happen, but keep for safety)\n targetNextMonth = new Date(\n targetEndDate.getFullYear(),\n targetEndDate.getMonth(),\n 1\n );\n }\n\n if (targetMonth) {\n currentDate.value = targetMonth;\n // Initialize nextDate independently (only if range/multiple mode)\n if (props.mode !== 'single') {\n if (targetNextMonth) {\n // targetNextMonth has been explicitly set based on selected dates\n // For range mode: if startDate and endDate are in same month, this is startDate month + 1\n // For range mode: if startDate and endDate are in different months, this is endDate month\n // For range mode: if only startDate exists, this is startDate month + 1\n nextDate.value = targetNextMonth;\n } else {\n // Fallback: initialize nextMonth to targetMonth + 1\n // For range mode: only if no dates are selected yet\n // For multiple mode: always initialize to targetMonth + 1\n if (props.mode === 'multiple') {\n const nextMonthDate = new Date(targetMonth);\n nextMonthDate.setMonth(nextMonthDate.getMonth() + 1);\n nextDate.value = nextMonthDate;\n } else if (props.mode === 'range') {\n // For range mode: check if we have any selected dates\n const range = props.modelValue as [string, string];\n const hasNoDates = !range || (!range[0] && !range[1]);\n\n // Only initialize nextMonth if there's no dates selected yet\n if (hasNoDates) {\n const nextMonthDate = new Date(targetMonth);\n nextMonthDate.setMonth(nextMonthDate.getMonth() + 1);\n nextDate.value = nextMonthDate;\n }\n // Otherwise, nextMonth should have been set via targetNextMonth above\n }\n }\n }\n }\n }\n});\n\nconst positionPanel = () => {\n if (!triggerRef.value || !panelRef.value) return;\n\n // Use requestAnimationFrame to ensure panel is rendered\n // Use double requestAnimationFrame to ensure panel is fully rendered and measured\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n if (!triggerRef.value || !panelRef.value) return;\n\n const triggerRect = triggerRef.value.getBoundingClientRect();\n const panelRect = panelRef.value.getBoundingClientRect();\n const viewportWidth = window.innerWidth;\n\n // Get actual panel width from DOM\n const actualPanelWidth = panelRect.width;\n\n // Calculate available space on the right\n const availableSpaceRight = viewportWidth - triggerRect.right;\n\n // Determine if we should use right positioning\n const shouldUseRight =\n actualPanelWidth !== null && actualPanelWidth > availableSpaceRight;\n useRightPositioning.value = shouldUseRight;\n\n // Build style object\n const style: Record<string, string> = {};\n\n // Only set maxHeight if panelMaxHeight is provided\n if (props.panelMaxHeight !== undefined) {\n style.maxHeight =\n typeof props.panelMaxHeight === 'string'\n ? props.panelMaxHeight\n : `${props.panelMaxHeight}px`;\n }\n\n // Add positioning based on popperPlacement\n if (props.popperPlacement.includes('bottom')) {\n style.top = '100%';\n style.marginTop = '4px';\n }\n if (props.popperPlacement.includes('top')) {\n style.bottom = '100%';\n style.marginBottom = '4px';\n }\n if (props.popperPlacement.includes('left')) {\n style.right = '100%';\n style.marginRight = '4px';\n }\n if (props.popperPlacement.includes('right')) {\n style.left = '100%';\n style.marginLeft = '4px';\n }\n\n // Override with right positioning if needed\n if (\n shouldUseRight &&\n !props.popperPlacement.includes('left') &&\n !props.popperPlacement.includes('right')\n ) {\n style.left = 'auto';\n style.right = '0';\n }\n\n panelStyle.value = style;\n });\n });\n};\n\nconst handleClear = () => {\n if (props.mode === 'single') {\n emit('update:modelValue', '');\n // Don't close panel for single mode - only close on click outside or toggle\n } else if (props.mode === 'range') {\n emit('update:modelValue', ['', '']);\n tempStartDate.value = null; // Reset temp state\n } else if (props.mode === 'multiple') {\n emit('update:modelValue', []);\n }\n\n emit(\n 'change',\n props.mode === 'single' ? '' : props.mode === 'range' ? ['', ''] : []\n );\n emit('clear');\n};\n\nconst handleKeydown = (event: KeyboardEvent) => {\n if (props.disabled || props.readonly) return;\n\n switch (event.key) {\n case 'Enter':\n case ' ':\n event.preventDefault();\n togglePanel();\n break;\n case 'Escape':\n isOpen.value = false;\n break;\n case 'ArrowDown':\n event.preventDefault();\n if (!isOpen.value) {\n togglePanel();\n }\n break;\n }\n};\n\nconst handleClickOutside = (event: Event) => {\n const target = event.target as Node;\n\n // Check if click is inside this DatePicker\n if (panelRef.value && panelRef.value.contains(target)) {\n return; // Click is inside panel, don't close\n }\n\n if (triggerRef.value && triggerRef.value.contains(target)) {\n return; // Click is on trigger, don't close (togglePanel will handle it)\n }\n\n // Click is outside this DatePicker - close it\n isOpen.value = false;\n tempStartDate.value = null; // Reset temp state when closing\n};\n\n// Handle window resize and scroll for panel positioning\nconst handleResize = () => {\n if (isOpen.value) {\n nextTick(() => {\n positionPanel();\n });\n }\n};\n\n// Listen for close event from other DatePickers\nconst handleCloseEvent = (event: CustomEvent) => {\n if (\n event.detail?.exclude !== triggerRef.value?.closest('.ina-date-picker') &&\n isOpen.value\n ) {\n isOpen.value = false;\n tempStartDate.value = null; // Reset temp state when closing\n }\n};\n\nonMounted(() => {\n document.addEventListener('click', handleClickOutside);\n document.addEventListener(\n 'closeDatePicker',\n handleCloseEvent as EventListener\n );\n\n // Initialization is now handled in the watch(isOpen) above\n // This ensures proper initialization when panel opens with selected dates\n\n window.addEventListener('resize', handleResize);\n window.addEventListener('scroll', handleResize, true);\n\n // Validate triggerWidth on mount and listen for resize\n validateTriggerWidth();\n window.addEventListener('resize', validateTriggerWidth);\n});\n\nonUnmounted(() => {\n document.removeEventListener('click', handleClickOutside);\n document.removeEventListener(\n 'closeDatePicker',\n handleCloseEvent as EventListener\n );\n window.removeEventListener('resize', handleResize);\n window.removeEventListener('scroll', handleResize, true);\n window.removeEventListener('resize', validateTriggerWidth);\n});\n</script>\n\n<style scoped>\n.panel-enter-active,\n.panel-leave-active {\n transition: all 0.2s ease;\n}\n\n.panel-enter-from,\n.panel-leave-to {\n opacity: 0;\n transform: translateY(-8px);\n}\n\n/* Size adjustments for MonthPicker and YearPicker in DatePicker context */\n.ina-date-picker__dropdown-container :deep(.ina-month-picker__trigger),\n.ina-date-picker__dropdown-container :deep(.ina-year-picker__trigger) {\n height: 32px;\n padding: var(--ina-spacing-1) var(--ina-spacing-2);\n font-size: var(--ina-font-sm);\n min-width: 50px;\n}\n\n.ina-date-picker__dropdown-container :deep(.ina-month-picker__trigger-text),\n.ina-date-picker__dropdown-container :deep(.ina-year-picker__trigger-text) {\n font-size: var(--ina-font-sm);\n font-weight: var(--ina-font-medium);\n}\n\n/* Responsive adjustments for MonthPicker and YearPicker */\n@media (max-width: 640px) {\n .ina-date-picker__dropdown-container :deep(.ina-month-picker__trigger),\n .ina-date-picker__dropdown-container :deep(.ina-year-picker__trigger) {\n height: 28px;\n padding: var(--ina-spacing-1) 0.375rem; /* 4px 6px */\n font-size: var(--ina-font-xs);\n min-width: 45px;\n }\n\n .ina-date-picker__dropdown-container :deep(.ina-month-picker__trigger-text),\n .ina-date-picker__dropdown-container :deep(.ina-year-picker__trigger-text) {\n font-size: var(--ina-font-xs);\n font-weight: var(--ina-font-medium);\n }\n}\n</style>\n","<template>\n <div\n ref=\"containerRef\"\n class=\"ina-select-dropdown\"\n :class=\"containerClasses\"\n :style=\"{ width: toCssSize(width) }\"\n >\n <button\n ref=\"triggerRef\"\n type=\"button\"\n :disabled=\"disabled\"\n :class=\"triggerClasses\"\n @click=\"toggleDropdown\"\n >\n <span v-if=\"prefixNode\" class=\"ina-select-dropdown__trigger-prefix\">\n <component :is=\"prefixNode\" />\n </span>\n <span :class=\"triggerTextClasses\">{{ triggerLabel }}</span>\n <IconChevronUp\n v-if=\"isOpen\"\n :size=\"size === 'sm' ? 16 : 20\"\n :class=\"triggerIconClasses\"\n />\n <IconChevronDown\n v-else\n :size=\"size === 'sm' ? 16 : 20\"\n :class=\"triggerIconClasses\"\n />\n </button>\n\n <Transition name=\"dropdown\">\n <div\n v-if=\"isOpen && !disabled\"\n ref=\"panelRef\"\n :class=\"panelClasses\"\n :style=\"panelStyle\"\n >\n <div v-if=\"searchable\" class=\"ina-select-dropdown__search\">\n <input\n v-model=\"internalSearchTerm\"\n type=\"text\"\n :aria-label=\"`Search ${placeholder}`\"\n placeholder=\"Cari data\"\n :disabled=\"disabled\"\n :class=\"searchInputClasses\"\n @input=\"handleSearchInput\"\n />\n </div>\n\n <!-- Selected Preview Section -->\n <div\n v-if=\"showPreviewValue && hasSelectedItems\"\n class=\"ina-select-dropdown__preview\"\n >\n <!-- <div class=\"ina-select-dropdown__preview-label\">Terpilih:</div> -->\n <div class=\"ina-select-dropdown__preview-content\">\n <!-- Multiple Selection Preview -->\n <template v-if=\"multiple\">\n <div\n v-for=\"(value, index) in selectedArray.slice(0, 3)\"\n :key=\"index\"\n class=\"ina-select-dropdown__preview-item ina-select-dropdown__preview-item--multiple\"\n >\n <span class=\"ina-select-dropdown__preview-item-text\">\n {{ getOptionLabelByValue(value) }}\n </span>\n <button\n v-if=\"!disabled\"\n type=\"button\"\n class=\"ina-select-dropdown__preview-remove ina-select-dropdown__preview-remove--multiple\"\n :aria-label=\"`Remove ${getOptionLabelByValue(value)}`\"\n @click.stop=\"removeSelectedItem(value)\"\n >\n <IconX :size=\"12\" />\n </button>\n </div>\n <span\n v-if=\"selectedArray.length > 3\"\n class=\"ina-select-dropdown__preview-more\"\n >\n +{{ selectedArray.length - 3 }} more\n </span>\n </template>\n\n <!-- Single Selection Preview -->\n <template v-else>\n <div\n v-if=\"\n modelValue !== null &&\n modelValue !== undefined &&\n modelValue !== ''\n \"\n class=\"ina-select-dropdown__preview-item ina-select-dropdown__preview-item--single\"\n >\n <span class=\"ina-select-dropdown__preview-item-text\">\n {{ getOptionLabelByValue(modelValue) }}\n </span>\n <button\n v-if=\"!disabled\"\n type=\"button\"\n class=\"ina-select-dropdown__preview-remove ina-select-dropdown__preview-remove--single\"\n :aria-label=\"`Remove ${getOptionLabelByValue(modelValue)}`\"\n @click.stop=\"removeSelectedItem(modelValue)\"\n >\n <IconX :size=\"12\" />\n </button>\n </div>\n </template>\n </div>\n </div>\n\n <div ref=\"scrollContainerRef\" class=\"ina-select-dropdown__options\">\n <button\n v-for=\"(option, index) in filteredOptions\"\n :key=\"`${getOptionValue(option)}-${index}`\"\n type=\"button\"\n :disabled=\"disabled\"\n :class=\"getOptionClasses(option)\"\n @click=\"handleOptionClick(option)\"\n >\n <!-- Label content -->\n <div class=\"ina-select-dropdown__option-content\">\n <slot\n name=\"option\"\n :option=\"option\"\n :selected=\"isSelected(option)\"\n >\n <span class=\"ina-select-dropdown__option-label\">\n {{ getOptionLabel(option) }}\n </span>\n </slot>\n </div>\n\n <!-- Right content untuk indicator (checkbox untuk multiple, check/radio untuk single) -->\n <template v-if=\"multiple\">\n <div\n :class=\"\n clsx(\n 'ina-select-dropdown__option-checkbox',\n isSelected(option) &&\n 'ina-select-dropdown__option-checkbox--checked'\n )\n \"\n >\n <IconCheck v-if=\"isSelected(option)\" :size=\"14\" />\n </div>\n </template>\n <template v-else-if=\"indicator === 'check'\">\n <div\n v-if=\"isSelected(option)\"\n class=\"ina-select-dropdown__option-check-indicator\"\n >\n <IconCheck\n :size=\"16\"\n class=\"ina-select-dropdown__option-check-icon\"\n />\n </div>\n </template>\n <template v-else-if=\"indicator === 'radio'\">\n <div\n :class=\"\n clsx(\n 'ina-select-dropdown__option-radio',\n isSelected(option) &&\n 'ina-select-dropdown__option-radio--checked'\n )\n \"\n >\n <div\n v-if=\"isSelected(option)\"\n class=\"ina-select-dropdown__option-radio-dot\"\n />\n </div>\n </template>\n </button>\n\n <div\n v-if=\"filteredOptions.length === 0 && !loading\"\n class=\"ina-select-dropdown__empty\"\n >\n No results\n </div>\n\n <!-- Load More Button -->\n <div\n v-if=\"\n hasMore &&\n !loading &&\n filteredOptions.length > 0 &&\n onLoadMore &&\n !disabled\n \"\n class=\"ina-select-dropdown__load-more\"\n >\n <button\n type=\"button\"\n class=\"ina-select-dropdown__load-more-button\"\n @click=\"handleLoadMoreClick\"\n >\n Tampilkan Lebih Banyak\n </button>\n </div>\n\n <!-- Loading indicator -->\n <div v-if=\"loading\" class=\"ina-select-dropdown__loading\">\n <div class=\"ina-select-dropdown__loading-spinner\">\n <IconLoader2 :size=\"20\" />\n </div>\n <span class=\"ina-select-dropdown__loading-text\">Loading...</span>\n </div>\n </div>\n </div>\n </Transition>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, nextTick, onMounted, onUnmounted, watch } from 'vue';\nimport type { Component, VNode } from 'vue';\nimport {\n IconChevronDown,\n IconChevronUp,\n IconCheck,\n IconLoader2,\n IconX,\n} from '@tabler/icons-vue';\nimport clsx from 'clsx';\nexport interface SelectOption {\n label: string;\n value: any;\n disabled?: boolean;\n}\n\nexport interface SelectDropdownProps {\n modelValue?: any | any[];\n options: SelectOption[];\n placeholder?: string;\n size?: 'sm' | 'md' | 'lg';\n indicator?: 'check' | 'radio';\n multiple?: boolean;\n disabled?: boolean;\n prefixNode?: Component | VNode;\n width?: number | string;\n panelWidth?: number | string;\n panelHeight?: number | string;\n hasMore?: boolean;\n loading?: boolean;\n currentPage?: number;\n onLoadMore?: (page: number) => void;\n onSearch?: (searchTerm: string) => void;\n searchDebounceMs?: number;\n searchValue?: string;\n onSearchChange?: (searchTerm: string) => void;\n renderOptionLabel?: (option: SelectOption) => VNode | undefined;\n renderSelectedPreview?: (selected: any | any[]) => VNode | undefined;\n onRemoveSelected?: (value: any) => void;\n panelClassName?: string;\n triggerClassName?: string;\n /** Tampilkan preview selected value. Default: true */\n showPreviewValue?: boolean;\n /** Tampilkan fitur search. Default: true */\n searchable?: boolean;\n}\n\nconst props = withDefaults(defineProps<SelectDropdownProps>(), {\n modelValue: null,\n placeholder: 'Select...',\n size: 'md',\n indicator: 'check',\n multiple: false,\n disabled: false,\n width: '100%',\n panelHeight: 600,\n hasMore: false,\n loading: false,\n currentPage: 1,\n searchDebounceMs: 300,\n panelClassName: '',\n triggerClassName: '',\n showPreviewValue: true,\n searchable: true,\n});\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: any | any[]];\n change: [value: any | any[]];\n clear: [];\n 'update:selectedRaw': [selectedRaw: SelectOption | SelectOption[] | null];\n selectedRawChange: [selectedRaw: SelectOption | SelectOption[] | null];\n}>();\n\nconst containerRef = ref<HTMLDivElement>();\nconst triggerRef = ref<HTMLButtonElement>();\nconst panelRef = ref<HTMLDivElement>();\nconst scrollContainerRef = ref<HTMLDivElement>();\nconst isOpen = ref(false);\nconst internalSearchTerm = ref('');\nconst searchTimeoutRef = ref<ReturnType<typeof setTimeout> | null>(null);\n// Cache untuk menyimpan label dari selected values (untuk handle kasus options berubah)\nconst selectedLabelsCache = ref<Map<any, string>>(new Map());\n\n// Determine if search is controlled or uncontrolled\nconst isSearchControlled = computed(() => props.searchValue !== undefined);\nconst searchTerm = computed(() =>\n isSearchControlled.value ? props.searchValue || '' : internalSearchTerm.value\n);\n\n// Debounce search effect\nwatch(\n searchTerm,\n (newValue) => {\n if (searchTimeoutRef.value) {\n clearTimeout(searchTimeoutRef.value);\n }\n\n if (props.onSearch && newValue !== '') {\n searchTimeoutRef.value = setTimeout(() => {\n props.onSearch?.(newValue);\n }, props.searchDebounceMs);\n } else if (props.onSearch && newValue === '') {\n props.onSearch?.('');\n }\n },\n { immediate: false }\n);\n\n// Sync internal state with controlled value\nwatch(\n () => props.searchValue,\n (newValue) => {\n if (isSearchControlled.value && newValue !== internalSearchTerm.value) {\n internalSearchTerm.value = newValue || '';\n }\n }\n);\n\n// Handle search input\nconst handleSearchInput = (e: Event) => {\n const newValue = (e.target as HTMLInputElement).value;\n\n if (isSearchControlled.value) {\n props.onSearchChange?.(newValue);\n } else {\n internalSearchTerm.value = newValue;\n }\n};\n\n// Handle load more button click\nconst handleLoadMoreClick = () => {\n if (props.disabled || !props.hasMore || props.loading || !props.onLoadMore)\n return;\n props.onLoadMore(props.currentPage + 1);\n};\n\n// Click outside handler\nconst handleClickOutside = (e: MouseEvent) => {\n if (containerRef.value && !containerRef.value.contains(e.target as Node)) {\n isOpen.value = false;\n // Reset search based on mode\n if (isSearchControlled.value) {\n props.onSearchChange?.('');\n } else {\n internalSearchTerm.value = '';\n }\n }\n};\n\nonMounted(() => {\n document.addEventListener('mousedown', handleClickOutside);\n});\n\nonUnmounted(() => {\n document.removeEventListener('mousedown', handleClickOutside);\n if (searchTimeoutRef.value) {\n clearTimeout(searchTimeoutRef.value);\n }\n});\n\nconst toggleDropdown = () => {\n if (props.disabled) return;\n isOpen.value = !isOpen.value;\n};\n\nfunction toCssSize(v?: number | string) {\n if (v === undefined || v === null) return undefined;\n return typeof v === 'number' ? `${v}px` : v;\n}\n\nconst isArraySelected = computed(\n () => props.multiple && Array.isArray(props.modelValue)\n);\nconst selectedArray = computed(() =>\n isArraySelected.value ? (props.modelValue as any[]) : []\n);\nconst singleSelected = computed(() =>\n !props.multiple ? props.modelValue : null\n);\n\n// Helper untuk mendapatkan label dari cache atau options\nconst getLabelForValue = (value: any): string | null => {\n // Cek cache dulu\n if (selectedLabelsCache.value.has(value)) {\n return selectedLabelsCache.value.get(value) || null;\n }\n // Fallback ke options\n const found = props.options.find((o) => o.value === value);\n if (found) {\n // Simpan ke cache untuk next time\n selectedLabelsCache.value.set(value, found.label);\n return found.label;\n }\n return null;\n};\n\nconst getOptionLabelByValue = (value: any) => {\n const label = getLabelForValue(value);\n return label || value;\n};\n\n// Sync cache dengan options saat ini (untuk update label jika berubah)\nwatch(\n () => props.options,\n (newOptions) => {\n newOptions.forEach((option) => {\n // Update cache jika value sudah ada di cache\n if (selectedLabelsCache.value.has(option.value)) {\n selectedLabelsCache.value.set(option.value, option.label);\n }\n });\n },\n { deep: true }\n);\n\n// Helper untuk mendapatkan SelectOption object dari value\nconst getOptionForValue = (value: any): SelectOption | null => {\n const label = getLabelForValue(value);\n if (label !== null) {\n return { label, value };\n }\n // Fallback ke options\n const found = props.options.find((o) => o.value === value);\n return found || null;\n};\n\n// Sync cache dengan selected values (untuk handle selected dari luar) dan emit selectedRaw\nwatch(\n () => [props.modelValue, props.multiple],\n () => {\n const cache = selectedLabelsCache.value;\n if (props.multiple && Array.isArray(props.modelValue)) {\n props.modelValue.forEach((value) => {\n if (!cache.has(value)) {\n const found = props.options.find((o) => o.value === value);\n if (found) {\n cache.set(value, found.label);\n }\n }\n });\n // Remove dari cache jika tidak lagi selected\n cache.forEach((_, value) => {\n if (!props.modelValue.includes(value)) {\n cache.delete(value);\n }\n });\n } else if (\n props.modelValue !== null &&\n props.modelValue !== undefined &&\n props.modelValue !== ''\n ) {\n if (!cache.has(props.modelValue)) {\n const found = props.options.find((o) => o.value === props.modelValue);\n if (found) {\n cache.set(props.modelValue, found.label);\n }\n }\n } else {\n // Clear cache jika tidak ada selected\n cache.clear();\n }\n\n // Emit selectedRaw\n let selectedRaw: SelectOption | SelectOption[] | null = null;\n if (props.multiple && Array.isArray(props.modelValue)) {\n if (props.modelValue.length > 0) {\n const rawOptions = props.modelValue\n .map((val) => getOptionForValue(val))\n .filter((opt): opt is SelectOption => opt !== null);\n selectedRaw = rawOptions.length > 0 ? rawOptions : null;\n }\n } else if (\n props.modelValue !== null &&\n props.modelValue !== undefined &&\n props.modelValue !== ''\n ) {\n selectedRaw = getOptionForValue(props.modelValue);\n }\n\n emit('update:selectedRaw', selectedRaw);\n emit('selectedRawChange', selectedRaw);\n },\n { deep: true, immediate: true }\n);\n\nconst triggerLabel = computed(() => {\n if (props.multiple) {\n if (!selectedArray.value.length) return props.placeholder;\n else if (selectedArray.value.length > 3)\n return `${selectedArray.value.length} data terpilih`;\n else {\n const labels = selectedArray.value\n .map((val) => getLabelForValue(val))\n .filter((label): label is string => label !== null);\n return labels.length > 0 ? labels.join(', ') : props.placeholder;\n }\n } else {\n const label = getLabelForValue(singleSelected.value);\n return label || props.placeholder;\n }\n});\n\n// Filter options only if not using external search and searchable is enabled\nconst filteredOptions = computed(() => {\n if (props.onSearch) {\n return props.options;\n }\n if (!props.searchable) {\n return props.options;\n }\n return props.options.filter((o) =>\n o.label.toLowerCase().includes(searchTerm.value.toLowerCase())\n );\n});\n\nconst hasSelectedItems = computed(() => {\n if (props.multiple) {\n return selectedArray.value.length > 0;\n } else {\n return (\n props.modelValue !== null &&\n props.modelValue !== undefined &&\n props.modelValue !== ''\n );\n }\n});\n\nconst getOptionValue = (option: SelectOption) => {\n return option.value;\n};\n\nconst getOptionLabel = (option: SelectOption) => {\n return option.label;\n};\n\nconst isSelected = (option: SelectOption) => {\n if (props.multiple) {\n return selectedArray.value.includes(option.value);\n } else {\n return option.value === singleSelected.value;\n }\n};\n\nconst getOptionClasses = (option: SelectOption) => {\n return clsx(\n 'ina-select-dropdown__option',\n !props.multiple &&\n isSelected(option) &&\n 'ina-select-dropdown__option--selected-single',\n props.multiple &&\n isSelected(option) &&\n 'ina-select-dropdown__option--selected-multiple',\n props.disabled && 'ina-select-dropdown__option--disabled'\n );\n};\n\nconst handleOptionClick = (option: SelectOption) => {\n if (props.disabled) return;\n\n if (props.multiple) {\n const prev = Array.isArray(props.modelValue) ? [...props.modelValue] : [];\n const isCurrentlySelected = prev.includes(option.value);\n const newValue = isCurrentlySelected\n ? prev.filter((v) => v !== option.value)\n : [...prev, option.value];\n\n // Update cache: add if selecting, remove if deselecting\n if (isCurrentlySelected) {\n // Deselecting - remove from cache\n selectedLabelsCache.value.delete(option.value);\n } else {\n // Selecting - add to cache\n selectedLabelsCache.value.set(option.value, option.label);\n }\n\n emit('update:modelValue', newValue);\n emit('change', newValue);\n } else {\n const isCurrentlySelected = isSelected(option);\n const newValue = isCurrentlySelected ? null : option.value;\n\n // Update cache for single select\n if (isCurrentlySelected) {\n // Deselecting\n selectedLabelsCache.value.delete(option.value);\n } else {\n // Selecting - save label to cache\n selectedLabelsCache.value.set(option.value, option.label);\n }\n\n emit('update:modelValue', newValue);\n emit('change', newValue);\n isOpen.value = false;\n // Reset search based on mode\n if (isSearchControlled.value) {\n props.onSearchChange?.('');\n } else {\n internalSearchTerm.value = '';\n }\n }\n};\n\nconst removeSelectedItem = (value: any) => {\n // Remove from cache when removing selected\n selectedLabelsCache.value.delete(value);\n\n if (props.onRemoveSelected) {\n props.onRemoveSelected(value);\n } else {\n if (props.multiple) {\n const selected = [...((props.modelValue as any[]) || [])];\n const index = selected.indexOf(value);\n if (index > -1) {\n selected.splice(index, 1);\n emit('update:modelValue', selected);\n emit('change', selected);\n }\n } else {\n emit('update:modelValue', null);\n emit('change', null);\n }\n }\n};\n\nconst containerClasses = computed(() => {\n return clsx('ina-select-dropdown', `ina-select-dropdown--size-${props.size}`);\n});\n\nconst triggerClasses = computed(() => {\n return clsx(\n 'ina-select-dropdown__trigger',\n `ina-select-dropdown__trigger--size-${props.size}`,\n props.disabled && 'ina-select-dropdown__trigger--disabled',\n props.triggerClassName\n );\n});\n\nconst triggerTextClasses = computed(() => {\n return clsx(\n 'ina-select-dropdown__trigger-text',\n props.disabled && 'ina-select-dropdown__trigger-text--disabled',\n triggerLabel.value === props.placeholder &&\n !props.disabled &&\n 'ina-select-dropdown__trigger-text--placeholder',\n triggerLabel.value !== props.placeholder &&\n !props.disabled &&\n 'ina-select-dropdown__trigger-text--selected'\n );\n});\n\nconst triggerIconClasses = computed(() => {\n return clsx(\n 'ina-select-dropdown__trigger-icon',\n props.disabled && 'ina-select-dropdown__trigger-icon--disabled'\n );\n});\n\nconst panelClasses = computed(() => {\n return clsx('ina-select-dropdown__panel', props.panelClassName);\n});\n\nconst panelStyle = computed(() => {\n return {\n width: toCssSize(props.panelWidth) ?? toCssSize(props.width),\n maxHeight: toCssSize(props.panelHeight),\n };\n});\n\nconst searchInputClasses = computed(() => {\n return clsx(\n 'ina-select-dropdown__search-input',\n props.disabled && 'ina-select-dropdown__search-input--disabled'\n );\n});\n</script>\n\n<style scoped>\n.dropdown-enter-active,\n.dropdown-leave-active {\n transition: all 0.2s ease;\n}\n\n.dropdown-enter-from,\n.dropdown-leave-to {\n opacity: 0;\n transform: translateY(-8px);\n}\n</style>\n","<template>\n <Teleport to=\"body\">\n <Transition name=\"drawer\">\n <div\n v-if=\"isOpen\"\n class=\"ina-drawer\"\n :class=\"drawerClasses\"\n v-bind=\"$attrs\"\n >\n <div class=\"ina-drawer__backdrop\" @click=\"handleBackdropClick\" />\n\n <div\n ref=\"panelRef\"\n class=\"ina-drawer__panel\"\n :class=\"panelClasses\"\n role=\"dialog\"\n :aria-modal=\"true\"\n :aria-labelledby=\"titleId\"\n :aria-describedby=\"descriptionId\"\n @click.stop\n >\n <div v-if=\"showHeader\" class=\"ina-drawer__header\">\n <h2 :id=\"titleId\" class=\"ina-drawer__title\">\n <slot name=\"title\">{{ title }}</slot>\n </h2>\n\n <button\n v-if=\"showCloseButton\"\n type=\"button\"\n class=\"ina-drawer__close\"\n :aria-label=\"closeLabel\"\n @click=\"handleCloseButton\"\n >\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M18 6L6 18M6 6L18 18\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n </div>\n\n <div class=\"ina-drawer__content\">\n <div\n v-if=\"description\"\n :id=\"descriptionId\"\n class=\"ina-drawer__description\"\n >\n {{ description }}\n </div>\n\n <slot />\n </div>\n\n <div v-if=\"showFooter\" class=\"ina-drawer__footer\">\n <slot name=\"footer\" />\n </div>\n </div>\n </div>\n </Transition>\n </Teleport>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, watch, nextTick, onMounted, onUnmounted } from 'vue';\nexport interface DrawerProps {\n modelValue: boolean;\n title?: string;\n description?: string;\n position?: 'left' | 'right' | 'top' | 'bottom';\n width?: string;\n height?: string;\n showCloseButton?: boolean;\n showHeader?: boolean;\n showFooter?: boolean;\n closeLabel?: string;\n closeOnBackdrop?: boolean;\n closeOnEscape?: boolean;\n persistent?: boolean;\n}\n\nconst props = withDefaults(defineProps<DrawerProps>(), {\n modelValue: false,\n position: 'right',\n width: 'sm',\n height: '100vh',\n showCloseButton: true,\n showHeader: true,\n showFooter: false,\n closeLabel: 'Close drawer',\n closeOnBackdrop: true,\n closeOnEscape: true,\n persistent: false,\n});\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: boolean];\n close: [];\n open: [];\n}>();\n\nconst panelRef = ref<HTMLDivElement>();\nconst isOpen = ref(props.modelValue);\n\n// Generate unique IDs\nconst titleId = computed(\n () => `drawer-title-${Math.random().toString(36).substr(2, 9)}`\n);\nconst descriptionId = computed(\n () => `drawer-description-${Math.random().toString(36).substr(2, 9)}`\n);\n\nconst drawerClasses = computed(() => {\n const classes = ['ina-drawer'];\n\n classes.push(`ina-drawer--position-${props.position}`);\n\n if (props.persistent) {\n classes.push('ina-drawer--persistent');\n }\n\n return classes;\n});\n\nconst panelClasses = computed(() => {\n const classes = ['ina-drawer__panel'];\n\n classes.push(`ina-drawer__panel--position-${props.position}`);\n\n // Add width variant class if it's a predefined variant\n const predefinedWidths = [\n '20vw',\n '30vw',\n '40vw',\n '50vw',\n '60vw',\n '70vw',\n '80vw',\n '90vw',\n '100vw',\n ];\n if (predefinedWidths.includes(props.width)) {\n classes.push(`ina-drawer__panel--width-${props.width}`);\n }\n\n return classes;\n});\n\nconst handleClose = () => {\n if (props.persistent) return;\n\n isOpen.value = false;\n emit('update:modelValue', false);\n emit('close');\n};\n\nconst handleCloseButton = () => {\n isOpen.value = false;\n emit('update:modelValue', false);\n emit('close');\n};\n\nconst handleBackdropClick = (event: Event) => {\n if (\n event.target === event.currentTarget &&\n props.closeOnBackdrop &&\n !props.persistent\n ) {\n handleClose();\n }\n};\n\nconst handleEscape = (event: KeyboardEvent) => {\n if (event.key === 'Escape' && props.closeOnEscape && !props.persistent) {\n handleClose();\n }\n};\n\nconst focusPanel = () => {\n nextTick(() => {\n if (panelRef.value) {\n panelRef.value.focus();\n }\n });\n};\n\n// Watch for external modelValue changes\nwatch(\n () => props.modelValue,\n (newValue) => {\n isOpen.value = newValue;\n\n if (newValue) {\n emit('open');\n focusPanel();\n }\n }\n);\n\nonMounted(() => {\n document.addEventListener('keydown', handleEscape);\n});\n\nonUnmounted(() => {\n document.removeEventListener('keydown', handleEscape);\n});\n</script>\n\n<style scoped>\n.drawer-enter-active,\n.drawer-leave-active {\n transition: all 0.3s ease;\n}\n\n.drawer-enter-from,\n.drawer-leave-to {\n opacity: 0;\n}\n\n.drawer-enter-from .ina-drawer__panel,\n.drawer-leave-to .ina-drawer__panel {\n transform: translateX(100%);\n}\n\n.drawer-enter-to .ina-drawer__panel,\n.drawer-leave-from .ina-drawer__panel {\n transform: translateX(0);\n}\n</style>\n","<template>\n <div class=\"ina-skeleton\" :class=\"skeletonClasses\" :style=\"skeletonStyle\">\n <div class=\"ina-skeleton__wave\" />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nexport interface SkeletonProps {\n /** Base background color (default: 'gray') */\n color?: 'gray' | 'blue' | 'green' | 'red' | 'yellow';\n /** CSS width value (optional) */\n width?: string;\n /** CSS height value (default: '32px') */\n height?: string;\n /** Border radius size (default: 'md') */\n rounded?: 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'full';\n}\n\nconst props = withDefaults(defineProps<SkeletonProps>(), {\n color: 'gray',\n width: undefined,\n height: '32px',\n rounded: 'md',\n});\n\nconst skeletonClasses = computed(() => {\n const classes = ['ina-skeleton'];\n\n classes.push(`ina-skeleton--rounded-${props.rounded}`);\n classes.push(`ina-skeleton--color-${props.color}`);\n\n return classes;\n});\n\nconst skeletonStyle = computed(() => {\n const style: Record<string, string> = {};\n\n // decide flex / width\n const isFixed = typeof props.width !== 'undefined';\n\n if (props.height) {\n style.height = props.height;\n }\n\n if (isFixed) {\n style.flex = '0 0 auto';\n style.width = props.width;\n } else {\n style.flex = '1 1 auto';\n style.width = 'auto';\n }\n\n return style;\n});\n</script>\n","<template>\n <div\n class=\"ina-spinner\"\n :class=\"containerClasses\"\n role=\"status\"\n :aria-label=\"props.ariaLabel\"\n >\n <div\n class=\"ina-spinner__element\"\n :class=\"elementClasses\"\n :style=\"elementStyle\"\n />\n <div v-if=\"!spinnerOnly\" class=\"ina-spinner__title\">{{ title }}</div>\n <div v-if=\"!spinnerOnly\" class=\"ina-spinner__subtitle\">{{ subtitle }}</div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport clsx from 'clsx';\nexport interface SpinnerProps {\n size?: number; // Diameter dalam pixel\n borderWidth?: 'thin' | 'medium' | 'thick' | 'heavy';\n trackColor?: 'gray' | 'light' | 'dark';\n color?:\n | 'primary'\n | 'secondary'\n | 'success'\n | 'error'\n | 'warning'\n | 'info'\n | 'inherit';\n title?: string;\n subtitle?: string;\n spinnerOnly?: boolean;\n ariaLabel?: string;\n}\n\nconst props = withDefaults(defineProps<SpinnerProps>(), {\n size: 32,\n borderWidth: 'medium',\n trackColor: 'gray',\n color: 'primary',\n title: 'Mencari Informasi',\n subtitle: 'Mohon menunggu hasil pencarian Anda.',\n spinnerOnly: false,\n ariaLabel: 'Loading',\n});\n\nconst spinnerSize = `${props.size}px`;\n\nconst containerClasses = computed(() => {\n return clsx('ina-spinner', props.spinnerOnly && 'ina-spinner--spinner-only');\n});\n\nconst elementClasses = computed(() => {\n return clsx(\n 'ina-spinner__element',\n props.size <= 16 && 'ina-spinner__element--size-xs',\n props.size <= 24 && 'ina-spinner__element--size-sm',\n props.size <= 32 && 'ina-spinner__element--size-md',\n props.size <= 48 && 'ina-spinner__element--size-lg',\n props.size <= 64 && 'ina-spinner__element--size-xl',\n `ina-spinner__element--color-${props.color}`,\n `ina-spinner__element--track-${props.trackColor}`,\n `ina-spinner__element--border-${props.borderWidth}`\n );\n});\n\nconst elementStyle = computed(() => {\n return {\n width: spinnerSize,\n height: spinnerSize,\n };\n});\n</script>\n","<script setup lang=\"ts\">\nimport { computed, type VNode, type Component } from 'vue';\nexport interface StepperItem {\n /** Label untuk step (bisa berupa string, VNode, atau Component untuk fleksibilitas render) */\n label: string | VNode | Component;\n /** Icon component untuk step (opsional, jika tidak ada akan menampilkan nomor step) */\n icon?: any;\n /** Apakah step disabled */\n disabled?: boolean;\n}\n\nexport interface StepperProps {\n /** Array of step items */\n steps: StepperItem[];\n /** Index step yang sedang aktif (0-indexed) */\n currentStep: number;\n /** Orientasi stepper: horizontal atau vertical */\n orientation?: 'horizontal' | 'vertical';\n /** Callback saat step diklik */\n onStepClick?: (stepIndex: number) => void;\n /** Array of step indices yang memiliki status error (0-indexed) */\n errorSteps?: number[];\n}\n\nconst props = withDefaults(defineProps<StepperProps>(), {\n orientation: 'horizontal',\n errorSteps: () => [],\n});\n\nconst isHorizontal = computed(() => props.orientation === 'horizontal');\n</script>\n\n<template>\n <div\n :class=\"[\n 'ina-stepper',\n `ina-stepper--${props.orientation}`,\n {\n 'ina-stepper--horizontal-responsive': isHorizontal,\n },\n ]\"\n >\n <template v-for=\"(step, index) in props.steps\" :key=\"index\">\n <div\n :class=\"[\n 'ina-stepper__item',\n {\n 'ina-stepper__item--completed':\n index < props.currentStep && !props.errorSteps.includes(index),\n 'ina-stepper__item--active':\n index === props.currentStep && !props.errorSteps.includes(index),\n 'ina-stepper__item--error': props.errorSteps.includes(index),\n 'ina-stepper__item--disabled': step.disabled,\n 'ina-stepper__item--clickable': props.onStepClick && !step.disabled,\n },\n ]\"\n @click=\"!step.disabled && props.onStepClick?.(index)\"\n >\n <div class=\"ina-stepper__icon-wrapper\">\n <template v-if=\"index < props.currentStep\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"ina-stepper__check-icon\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"2.5\"\n stroke=\"currentColor\"\n fill=\"none\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\" />\n <path d=\"M5 12l5 5l10 -10\" />\n </svg>\n </template>\n <template v-else-if=\"step.icon\">\n <component :is=\"step.icon\" />\n </template>\n <template v-else>\n <span class=\"ina-stepper__step-number\">{{ index + 1 }}</span>\n </template>\n </div>\n <div class=\"ina-stepper__label\">\n <template v-if=\"typeof step.label === 'string'\">\n {{ step.label }}\n </template>\n <component :is=\"step.label\" v-else />\n </div>\n </div>\n <div\n v-if=\"index < props.steps.length - 1\"\n :class=\"[\n 'ina-stepper__separator',\n {\n 'ina-stepper__separator--completed':\n index < props.currentStep && !props.errorSteps.includes(index),\n },\n ]\"\n />\n </template>\n </div>\n</template>\n\n<style scoped>\n/* All styles are in global CSS file */\n</style>\n","<template>\n <div :class=\"containerClasses\">\n <div :class=\"tabsContainerClasses\" role=\"tablist\">\n <button\n v-for=\"item in items\"\n :key=\"item.value\"\n type=\"button\"\n role=\"tab\"\n :aria-selected=\"currentValue === item.value\"\n :aria-disabled=\"isDisabled(item)\"\n :disabled=\"isDisabled(item)\"\n :class=\"getTabClasses(item)\"\n @click=\"handleTabClick(item.value, item.disabled)\"\n @keydown=\"handleKeyDown($event, item.value, item.disabled)\"\n >\n <div v-if=\"typeof item.label !== 'string'\">\n <component :is=\"item.label\" />\n </div>\n <span v-else>{{ item.label }}</span>\n </button>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, watch } from 'vue';\nimport type { Component } from 'vue';\nexport interface TabHorizontalItem {\n value: string;\n label: string | Component;\n disabled?: boolean;\n}\n\nexport interface TabHorizontalProps {\n /** Array of tab items */\n items: TabHorizontalItem[];\n /** Currently selected tab value */\n value?: string;\n /** Default selected tab value */\n defaultValue?: string;\n /** Callback when tab changes */\n onChange?: (value: string) => void;\n /** Size variant */\n size?: 'sm' | 'md';\n /** Visual variant of the tabs */\n variant?: 'button-brand' | 'outline' | 'button-white';\n /** Whether tabs should fill full width */\n fullWidth?: boolean;\n /** Whether to use brand primary color for outline and button-white variants */\n useBrandColor?: boolean;\n /** Whether tabs are disabled */\n /** Whether tabs are disabled */\n disabled?: boolean;\n /** Custom class name for tab container */\n containerClassName?: string;\n /** Custom class name for individual tabs */\n tabClassName?: string;\n}\n\nconst props = withDefaults(defineProps<TabHorizontalProps>(), {\n size: 'sm',\n variant: 'outline',\n fullWidth: false,\n useBrandColor: false,\n disabled: false,\n containerClassName: '',\n tabClassName: '',\n});\n\nconst emit = defineEmits<{\n change: [value: string];\n}>();\n\nconst internalValue = ref(props.defaultValue || props.items[0]?.value || '');\n\nconst currentValue = computed(() => {\n return props.value !== undefined ? props.value : internalValue.value;\n});\n\nconst containerClasses = computed(() => {\n const classes = [\n 'ina-tab-horizontal',\n `ina-tab-horizontal--size-${props.size}`,\n `ina-tab-horizontal--variant-${props.variant}`,\n ];\n\n if (props.fullWidth) {\n classes.push('ina-tab-horizontal--full-width');\n }\n\n if (props.useBrandColor) {\n classes.push('ina-tab-horizontal--use-brand-color');\n }\n\n if (props.disabled) {\n classes.push('ina-tab-horizontal--disabled');\n }\n\n return classes;\n});\n\nconst tabsContainerClasses = computed(() => {\n const classes = ['ina-tab-horizontal__container'];\n\n if (props.fullWidth) {\n classes.push('ina-tab-horizontal__container--full-width');\n }\n\n if (props.containerClassName) {\n classes.push(props.containerClassName);\n }\n\n return classes;\n});\n\nconst isDisabled = (item: TabHorizontalItem) => {\n return props.disabled || item.disabled || false;\n};\n\nconst getTabClasses = (item: TabHorizontalItem) => {\n const classes = [\n 'ina-tab-horizontal__tab',\n `ina-tab-horizontal__tab--size-${props.size}`,\n `ina-tab-horizontal__tab--variant-${props.variant}`,\n ];\n\n if (currentValue.value === item.value) {\n classes.push('ina-tab-horizontal__tab--selected');\n }\n\n if (isDisabled(item)) {\n classes.push('ina-tab-horizontal__tab--disabled');\n }\n\n if (props.fullWidth) {\n classes.push('ina-tab-horizontal__tab--full-width');\n }\n\n if (props.tabClassName) {\n classes.push(props.tabClassName);\n }\n\n return classes;\n};\n\nconst handleTabClick = (tabValue: string, tabDisabled?: boolean) => {\n if (props.disabled || tabDisabled) return;\n\n if (props.value === undefined) {\n internalValue.value = tabValue;\n }\n\n if (props.onChange) {\n props.onChange(tabValue);\n }\n\n emit('change', tabValue);\n};\n\nconst handleKeyDown = (\n event: KeyboardEvent,\n tabValue: string,\n tabDisabled?: boolean\n) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n handleTabClick(tabValue, tabDisabled);\n }\n};\n\n// Watch for external value changes\nwatch(\n () => props.value,\n (newValue) => {\n if (newValue !== undefined) {\n internalValue.value = newValue;\n }\n }\n);\n\n// Watch for defaultValue changes\nwatch(\n () => props.defaultValue,\n (newValue) => {\n if (newValue !== undefined && props.value === undefined) {\n internalValue.value = newValue;\n }\n }\n);\n</script>\n","<template>\n <div :class=\"containerClasses\" :style=\"containerStyle\">\n <div :class=\"tabsContainerClasses\" role=\"tablist\">\n <button\n v-for=\"item in items\"\n :key=\"item.value\"\n type=\"button\"\n role=\"tab\"\n :aria-selected=\"currentValue === item.value\"\n :aria-disabled=\"isDisabled(item)\"\n :disabled=\"isDisabled(item)\"\n :class=\"getTabClasses(item)\"\n @click=\"handleTabClick(item.value, item.disabled)\"\n @keydown=\"handleKeyDown($event, item.value, item.disabled)\"\n >\n <div v-if=\"typeof item.label !== 'string'\">\n <component :is=\"item.label\" />\n </div>\n <span v-else>{{ item.label }}</span>\n </button>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, watch } from 'vue';\nimport type { Component } from 'vue';\nexport interface TabVerticalItem {\n value: string;\n label: string | Component;\n disabled?: boolean;\n}\n\nexport interface TabVerticalProps {\n /** Array of tab items */\n items: TabVerticalItem[];\n /** Currently selected tab value */\n value?: string;\n /** Default selected tab value */\n defaultValue?: string;\n /** Callback when tab changes */\n onChange?: (value: string) => void;\n /** Size variant */\n size?: 'sm' | 'md';\n /** Visual variant of the tabs */\n variant?: 'button-brand' | 'outline' | 'button-white';\n /** Whether to use brand primary color for outline and button-white variants */\n useBrandColor?: boolean;\n /** Whether tabs are disabled */\n disabled?: boolean;\n /** Custom class name for tab container */\n containerClassName?: string;\n /** Custom class name for individual tabs */\n tabClassName?: string;\n /** Width of the vertical tab container */\n width?: string | number;\n}\n\nconst props = withDefaults(defineProps<TabVerticalProps>(), {\n size: 'sm',\n variant: 'outline',\n useBrandColor: false,\n disabled: false,\n containerClassName: '',\n tabClassName: '',\n width: '200px',\n});\n\nconst emit = defineEmits<{\n change: [value: string];\n}>();\n\nconst internalValue = ref(props.defaultValue || props.items[0]?.value || '');\n\nconst currentValue = computed(() => {\n return props.value !== undefined ? props.value : internalValue.value;\n});\n\nconst containerClasses = computed(() => {\n const classes = [\n 'ina-tab-vertical',\n `ina-tab-vertical--size-${props.size}`,\n `ina-tab-vertical--variant-${props.variant}`,\n ];\n\n if (props.useBrandColor) {\n classes.push('ina-tab-vertical--use-brand-color');\n }\n\n if (props.disabled) {\n classes.push('ina-tab-vertical--disabled');\n }\n\n return classes;\n});\n\nconst tabsContainerClasses = computed(() => {\n const classes = ['ina-tab-vertical__container'];\n\n if (props.containerClassName) {\n classes.push(props.containerClassName);\n }\n\n return classes;\n});\n\nconst containerStyle = computed(() => {\n return {\n width: typeof props.width === 'number' ? `${props.width}px` : props.width,\n };\n});\n\nconst isDisabled = (item: TabVerticalItem) => {\n return props.disabled || item.disabled || false;\n};\n\nconst getTabClasses = (item: TabVerticalItem) => {\n const classes = [\n 'ina-tab-vertical__tab',\n `ina-tab-vertical__tab--size-${props.size}`,\n `ina-tab-vertical__tab--variant-${props.variant}`,\n ];\n\n if (currentValue.value === item.value) {\n classes.push('ina-tab-vertical__tab--selected');\n }\n\n if (isDisabled(item)) {\n classes.push('ina-tab-vertical__tab--disabled');\n }\n\n if (props.tabClassName) {\n classes.push(props.tabClassName);\n }\n\n return classes;\n};\n\nconst handleTabClick = (tabValue: string, tabDisabled?: boolean) => {\n if (props.disabled || tabDisabled) return;\n\n if (props.value === undefined) {\n internalValue.value = tabValue;\n }\n\n if (props.onChange) {\n props.onChange(tabValue);\n }\n\n emit('change', tabValue);\n};\n\nconst handleKeyDown = (\n event: KeyboardEvent,\n tabValue: string,\n tabDisabled?: boolean\n) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n handleTabClick(tabValue, tabDisabled);\n }\n};\n\n// Watch for external value changes\nwatch(\n () => props.value,\n (newValue) => {\n if (newValue !== undefined) {\n internalValue.value = newValue;\n }\n }\n);\n\n// Watch for defaultValue changes\nwatch(\n () => props.defaultValue,\n (newValue) => {\n if (newValue !== undefined && props.value === undefined) {\n internalValue.value = newValue;\n }\n }\n);\n</script>\n","<template>\n <div v-if=\"visible && (loading || isAnimating)\" :class=\"containerClasses\">\n <ProgressBar\n :visible=\"true\"\n :progress=\"progress\"\n :variant=\"variant\"\n height=\"sm\"\n :shimmer=\"true\"\n :duration=\"200\"\n />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, watch, computed, onUnmounted } from 'vue';\nimport ProgressBar from './ProgressBar.vue';\nexport interface TableProgressBarProps {\n /**\n * Whether the progress bar is visible\n */\n visible?: boolean;\n /**\n * Whether to show loading state\n */\n loading?: boolean;\n /**\n * Color variant\n */\n variant?: 'primary' | 'secondary' | 'success' | 'warning' | 'error';\n}\n\nconst props = withDefaults(defineProps<TableProgressBarProps>(), {\n visible: true,\n loading: false,\n variant: 'primary',\n});\n\nconst progress = ref(0);\nconst isAnimating = ref(false);\n\nlet intervalId: number | null = null;\n\nwatch(\n () => props.loading,\n (newLoading) => {\n if (newLoading) {\n isAnimating.value = true;\n progress.value = 0;\n\n // Simulate progress animation\n intervalId = window.setInterval(() => {\n const currentProgress = progress.value;\n if (currentProgress >= 90) {\n return; // Stop at 90% until loading is done\n }\n progress.value = currentProgress + Math.random() * 15; // Random increment for realistic feel\n }, 200);\n } else {\n // Complete the progress when loading is done\n progress.value = 100;\n setTimeout(() => {\n isAnimating.value = false;\n progress.value = 0;\n }, 500);\n }\n },\n { immediate: true }\n);\n\n// Cleanup interval on unmount\nconst cleanup = () => {\n if (intervalId) {\n clearInterval(intervalId);\n intervalId = null;\n }\n};\n\n// Cleanup on unmount\nonUnmounted(cleanup);\n\nconst containerClasses = computed(() => {\n const classes = [\n 'ina-table-progress-bar',\n `ina-table-progress-bar--variant-${props.variant}`,\n ];\n\n if (isAnimating.value) {\n classes.push('ina-table-progress-bar--animating');\n }\n\n return classes.join(' ');\n});\n</script>\n\n<style scoped></style>\n","<template>\n <div :class=\"tableContainerClasses\">\n <!-- ─── Search Bar -->\n <div v-if=\"showSearch\" :class=\"searchContainerClasses\">\n <div class=\"ina-table__search-controls\">\n <TextField\n :modelValue=\"searchInput\"\n :placeholder=\"\n props.searchPlaceholder ||\n props.placeholderSearch ||\n 'Input pencarian'\n \"\n :disabled=\"loading\"\n @update:modelValue=\"handleSearchChange\"\n @keydown=\"handleSearchKeyDown\"\n />\n <Button :disabled=\"loading\" @click=\"handleSearchButton\">\n {{ buttonSearchLabel }}\n </Button>\n </div>\n </div>\n\n <!-- ─── Progress Bar untuk Loading State -->\n <TableProgressBar\n :visible=\"loading\"\n :loading=\"loading\"\n variant=\"primary\"\n class=\"ina-table__progress-bar\"\n />\n\n <!-- ─── Table -->\n <table ref=\"tableRef\" :class=\"tableClasses\">\n <thead :class=\"tableHeaderClasses\">\n <tr>\n <th v-if=\"selectable\" class=\"ina-table__header-cell\">\n <Checkbox\n :id=\"`${reactId}-select-all`\"\n label=\"\"\n :modelValue=\"allSelected\"\n :indeterminate=\"anySelected && !allSelected\"\n @change=\"toggleAll\"\n />\n </th>\n <th\n v-for=\"(col, index) in columns\"\n :key=\"`${col.accessor}-${index}`\"\n :class=\"[\n 'ina-table__header-cell',\n col.sortable && 'ina-table__header-cell--sortable',\n ]\"\n >\n <div class=\"ina-table__sort-controls\">\n {{ col.header }}\n <template v-if=\"col.sortable\">\n <slot\n v-if=\"renderSortIndicator\"\n name=\"sort-indicator\"\n :column=\"col\"\n :index=\"index\"\n :isSorted=\"isSorted(col)\"\n :sortOrder=\"sortOrder\"\n :handleSort=\"(order: 'asc' | 'desc') => handleSort(col, order)\"\n />\n <div v-else class=\"ina-table__sort-icon\">\n <div\n :class=\"[\n 'ina-table__sort-button',\n isSorted(col) && sortOrder === 'asc'\n ? 'ina-table__sort-button--active'\n : '',\n ]\"\n @click=\"handleSort(col, 'asc')\"\n >\n <IconArrowNarrowUp\n :size=\"16\"\n :stroke=\"\n String(isSorted(col) && sortOrder === 'asc' ? 3 : 2)\n \"\n />\n </div>\n <div\n :class=\"[\n 'ina-table__sort-button',\n 'ina-table__sort-button-right',\n isSorted(col) && sortOrder === 'desc'\n ? 'ina-table__sort-button--active'\n : '',\n ]\"\n @click=\"handleSort(col, 'desc')\"\n >\n <IconArrowNarrowDown\n :size=\"16\"\n :stroke=\"\n String(isSorted(col) && sortOrder === 'desc' ? 3 : 2)\n \"\n />\n </div>\n </div>\n </template>\n </div>\n </th>\n </tr>\n </thead>\n\n <tbody :class=\"tableBodyClasses\">\n <template v-if=\"!loading && data.length === 0\">\n <tr>\n <td\n :colspan=\"\n String(selectable ? columns.length + 1 : columns.length)\n \"\n class=\"ina-table__empty-cell\"\n >\n <template v-if=\"typeof props.emptyState === 'string'\">\n {{ props.emptyState }}\n </template>\n <component :is=\"props.emptyState\" v-else />\n </td>\n </tr>\n </template>\n <template v-else>\n <tr\n v-for=\"(row, index) in data\"\n :key=\"`${String(row[rowKey])}-${index}`\"\n :class=\"[\n 'ina-table__row',\n loading && 'ina-table__row--loading',\n rowClickable && 'ina-table__row--clickable',\n ]\"\n @click=\"(e) => handleRowClick(row, e)\"\n >\n <td v-if=\"selectable\" class=\"ina-table__cell\">\n <Checkbox\n :id=\"`${reactId}-select-${String(row[rowKey])}`\"\n label=\"\"\n :modelValue=\"selectedMap[String(row[rowKey])] || false\"\n @change=\"() => toggleOne(String(row[rowKey]))\"\n />\n </td>\n <td\n v-for=\"(col, colIndex) in columns\"\n :key=\"`${String(row[rowKey])}-${col.accessor}-${colIndex}`\"\n :tabindex=\"\n isEditable(col) &&\n !isCellDisabled(col, row) &&\n editingCell?.rowKey === String(row[rowKey]) &&\n editingCell.accessor === col.accessor\n ? 0\n : undefined\n \"\n class=\"ina-table__cell\"\n >\n <template v-if=\"isEditable(col) && !isCellDisabled(col, row)\">\n <template\n v-if=\"\n editingCell?.rowKey === String(row[rowKey]) &&\n editingCell.accessor === col.accessor\n \"\n >\n <component\n :is=\"getEditorComponent(col)\"\n :row=\"row\"\n :value=\"\n (editBuffer[String(row[rowKey])] ?? row)[col.accessor]\n \"\n @change=\"\n (val) =>\n updateEditBuffer(String(row[rowKey]), col.accessor, val)\n \"\n @commit=\"commitEdit(String(row[rowKey]))\"\n @cancel=\"cancelEdit(String(row[rowKey]))\"\n />\n </template>\n <div\n v-else\n class=\"ina-table__cell--editable\"\n @click=\"\n (e) => startEdit(String(row[rowKey]), row, col.accessor, e)\n \"\n >\n <slot\n name=\"cell\"\n :row=\"row\"\n :column=\"col\"\n :value=\"row[col.accessor]\"\n >\n <component :is=\"getCellRenderComponent(col, row)\" />\n </slot>\n </div>\n </template>\n <template v-else>\n <slot\n name=\"cell\"\n :row=\"row\"\n :column=\"col\"\n :value=\"row[col.accessor]\"\n >\n <component :is=\"getCellRenderComponent(col, row)\" />\n </slot>\n </template>\n </td>\n </tr>\n </template>\n </tbody>\n </table>\n\n <!-- ─── Pagination -->\n <div class=\"ina-table__pagination\">\n <Pagination\n :modelValue=\"page\"\n :totalPages=\"totalPages\"\n :pageSize=\"pageSize\"\n :pageSizeOptions=\"pageSizeOptions\"\n :disabled=\"loading || total === 0\"\n :fullWidth=\"true\"\n @update:modelValue=\"setPage\"\n @page-size-change=\"handlePageSizeChange\"\n />\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {\n computed,\n ref,\n watch,\n onMounted,\n onUnmounted,\n h,\n type Component,\n type VNode,\n} from 'vue';\nimport Pagination from './Pagination.vue';\nimport Checkbox from './Checkbox.vue';\nimport TableProgressBar from './TableProgressBar.vue';\nimport TextField from './TextField.vue';\nimport Button from './Button.vue';\nimport { IconArrowNarrowUp, IconArrowNarrowDown } from '@tabler/icons-vue';\nimport clsx from 'clsx';\nexport interface Column {\n header: string;\n accessor: string;\n sortable?: boolean;\n render?: (row: any) => VNode | string | number;\n}\n\nexport interface FetchParams {\n page: number;\n pageSize: number;\n sortField: string | null;\n sortOrder: 'asc' | 'desc' | null;\n searchTerm: string;\n}\n\nexport interface FetchResult {\n data: any[];\n total: number;\n}\n\nexport interface EditorProps {\n row: any;\n value: any;\n onChange: (val: any) => void;\n onCommit: () => void;\n onCancel: () => void;\n}\n\nexport interface EditableColumn {\n accessor: string;\n editor: (props: EditorProps) => VNode;\n /**\n * Menentukan apakah cell pada row tertentu bisa diedit.\n * Bisa berupa boolean (statis) atau function yang menerima row dan return boolean (dinamis).\n * Jika true atau function return true, cell tidak bisa diklik atau diedit.\n */\n disabled?: boolean | ((row: any) => boolean);\n}\n\nexport interface TableProps {\n columns: Column[];\n fetchData: (params: FetchParams) => Promise<FetchResult>;\n initialPageSize?: number;\n pageSizeOptions?: number[];\n initialSortField?: string | null;\n initialSortOrder?: 'asc' | 'desc' | null;\n placeholderSearch?: string; // Deprecated: use searchPlaceholder instead\n searchPlaceholder?: string;\n buttonSearchLabel?: string;\n\n /** jika true, tambahkan kolom checkbox di paling kiri */\n selectable?: boolean;\n /** callback dipanggil saat user pilih beberapa row */\n onSelectionChange?: (selectedRows: any[]) => void;\n\n /** konfigurasi kolom yang bisa diedit */\n editableColumns?: EditableColumn[];\n /** callback dipanggil saat user commit perubahan 1 row */\n onRowUpdate?: (updatedRow: any) => void;\n\n /** nama properti unik sebagai key row (default: \"id\") */\n rowKey?: string;\n showSearch?: boolean;\n\n /** apakah row bisa diklik */\n rowClickable?: boolean;\n /** callback dipanggil saat user klik row (tidak dipanggil jika ada button action di cell) */\n onRowClick?: (row: any) => void;\n\n /** apakah kolom terakhir (biasanya Actions) sticky saat scroll horizontal */\n lastColumnSticky?: boolean;\n\n /** Custom render function untuk sort indicator wrapper */\n renderSortIndicator?: (params: {\n column: Column;\n index: number;\n isSorted: boolean;\n sortOrder: 'asc' | 'desc' | null;\n handleSort: (order: 'asc' | 'desc') => void;\n }) => VNode;\n\n /** Custom empty state content (string, VNode, atau Component) */\n emptyState?: string | VNode | Component;\n}\n\nconst props = withDefaults(defineProps<TableProps>(), {\n initialPageSize: 10,\n pageSizeOptions: () => [10, 20, 50],\n initialSortField: null,\n initialSortOrder: null,\n placeholderSearch: 'Search...', // Deprecated: use searchPlaceholder instead\n searchPlaceholder: 'Input pencarian',\n buttonSearchLabel: 'Cari',\n selectable: false,\n editableColumns: () => [],\n rowKey: 'id',\n showSearch: false,\n rowClickable: false,\n lastColumnSticky: false,\n emptyState: 'No data found',\n});\n\nconst emit = defineEmits<{\n selectionChange: [selectedRows: any[]];\n rowUpdate: [updatedRow: any];\n rowClick: [row: any];\n}>();\n\n// ─── State paging / sort / search ───────────────────────────\nconst data = ref<any[]>([]);\nconst total = ref(0);\nconst loading = ref(false);\nconst tableRef = ref<HTMLTableElement>();\nconst reactId = ref(`table-${Math.random().toString(36).substr(2, 9)}`);\n\nconst page = ref(1);\nconst pageSize = ref(props.initialPageSize);\n\nconst sortField = ref<string | null>(props.initialSortField);\nconst sortOrder = ref<'asc' | 'desc' | null>(props.initialSortOrder);\n\nconst searchTerm = ref('');\nconst searchInput = ref('');\n\n// ─── State selection ────────────────────────────────────────\nconst selectedMap = ref<Record<string, boolean>>({});\nconst allSelected = computed(() =>\n Object.values(selectedMap.value).every(Boolean)\n);\nconst anySelected = computed(() =>\n Object.values(selectedMap.value).some(Boolean)\n);\n\n// ─── State editing ──────────────────────────────────────────\nconst editBuffer = ref<Record<string, any>>({});\nconst editingCell = ref<{\n rowKey: string;\n accessor: string;\n} | null>(null);\n\n// ─── Total pages ────────────────────────────────────────────\nconst totalPages = computed(() => Math.ceil(total.value / pageSize.value));\n\n// ─── Fetch data whenever parameters berubah ────────────────\nlet abortController: AbortController | null = null;\n\nwatch(\n [\n () => page.value,\n () => pageSize.value,\n () => sortField.value,\n () => sortOrder.value,\n () => searchTerm.value,\n () => props.fetchData,\n ],\n async () => {\n if (abortController) {\n abortController.abort();\n }\n abortController = new AbortController();\n const sig = abortController.signal;\n\n loading.value = true;\n try {\n const res = await props.fetchData({\n page: page.value,\n pageSize: pageSize.value,\n sortField: sortField.value,\n sortOrder: sortOrder.value,\n searchTerm: searchTerm.value,\n });\n if (!sig.aborted) {\n data.value = res.data;\n total.value = res.total;\n // clear selection & editing on new data\n selectedMap.value = {};\n editBuffer.value = {};\n editingCell.value = null;\n }\n } catch (e) {\n if (!sig.aborted) console.error(e);\n } finally {\n if (!sig.aborted) loading.value = false;\n }\n },\n { immediate: true }\n);\n\nonUnmounted(() => {\n if (abortController) {\n abortController.abort();\n }\n});\n\n// ─── Selection handlers ────────────────────────────────────\nconst toggleAll = (value: boolean | string[]) => {\n const isChecked = Array.isArray(value) ? value.length > 0 : Boolean(value);\n const newMap: Record<string, boolean> = {};\n data.value.forEach((row) => {\n newMap[String(row[props.rowKey])] = isChecked;\n });\n selectedMap.value = newMap;\n const selectedRows = isChecked ? [...data.value] : [];\n props.onSelectionChange?.(selectedRows);\n emit('selectionChange', selectedRows);\n};\n\nconst toggleOne = (key: string) => {\n selectedMap.value = {\n ...selectedMap.value,\n [key]: !selectedMap.value[key],\n };\n const selectedRows = data.value.filter(\n (r) => selectedMap.value[String(r[props.rowKey])]\n );\n props.onSelectionChange?.(selectedRows);\n emit('selectionChange', selectedRows);\n};\n\n// ─── Editing handlers ──────────────────────────────────────\nconst startEdit = (\n key: string,\n row: any,\n accessor: string,\n event: MouseEvent\n) => {\n event.stopPropagation();\n editBuffer.value = {\n ...editBuffer.value,\n [key]: { ...row },\n };\n editingCell.value = { rowKey: key, accessor };\n};\n\nconst commitEdit = (key: string) => {\n const updatedRow = editBuffer.value[key];\n if (updatedRow) {\n props.onRowUpdate?.(updatedRow);\n emit('rowUpdate', updatedRow);\n }\n const { [key]: _, ...rest } = editBuffer.value;\n editBuffer.value = rest;\n editingCell.value = null;\n};\n\nconst cancelEdit = (key: string) => {\n const updated = { ...editBuffer.value };\n delete updated[key];\n editBuffer.value = updated;\n editingCell.value = null;\n};\n\nconst updateEditBuffer = (key: string, accessor: string, val: any) => {\n editBuffer.value = {\n ...editBuffer.value,\n [key]: {\n ...editBuffer.value[key],\n [accessor]: val,\n },\n };\n};\n\nconst isEditable = (col: Column) => {\n return props.editableColumns.some((ec) => ec.accessor === col.accessor);\n};\n\nconst isCellDisabled = (col: Column, row: any): boolean => {\n const editableCol = props.editableColumns.find(\n (ec) => ec.accessor === col.accessor\n );\n if (!editableCol || !editableCol.disabled) {\n return false;\n }\n return typeof editableCol.disabled === 'function'\n ? editableCol.disabled(row)\n : editableCol.disabled;\n};\n\nconst getEditorComponent = (col: Column): Component => {\n const editableCol = props.editableColumns.find(\n (ec) => ec.accessor === col.accessor\n );\n return editableCol ? editableCol.editor : () => null;\n};\n\n// Helper function untuk render cell content sebagai component\n// Mengembalikan component yang render VNode atau string/number\nconst getCellRenderComponent = (col: Column, row: any): Component => {\n return () => {\n if (col.render) {\n const result = col.render(row);\n // Jika hasilnya adalah VNode, return langsung\n if (result && typeof result === 'object' && 'type' in result) {\n return result as VNode;\n }\n // Jika hasilnya adalah string/number, wrap dengan text node\n return h('span', String(result));\n }\n return h('span', String(row[col.accessor] || ''));\n };\n};\n\n// ─── Sort handler ──────────────────────────────────────────\nconst isSorted = (col: Column) => sortField.value === col.accessor;\n\nconst handleSort = (col: Column, order: 'asc' | 'desc') => {\n if (!col.sortable) return;\n if (sortField.value === col.accessor && sortOrder.value === order) {\n sortField.value = null;\n sortOrder.value = null;\n } else {\n sortField.value = col.accessor;\n sortOrder.value = order;\n }\n page.value = 1;\n};\n\n// ─── Search handlers ───────────────────────────────────────\nconst handleSearchChange = (value: string) => {\n searchInput.value = value;\n};\n\nconst handleSearchKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n page.value = 1;\n searchTerm.value = searchInput.value.trim();\n }\n};\n\nconst handleSearchButton = () => {\n page.value = 1;\n searchTerm.value = searchInput.value.trim();\n};\n\n// ─── Row click handler ────────────────────────────────────\nconst handleRowClick = (row: any, event: MouseEvent) => {\n const target = event.target as HTMLElement;\n const isActionElement = target.closest(\n 'button, [role=\"button\"], .ina-button, [data-action]'\n );\n\n if (isActionElement) {\n return;\n }\n\n if (props.rowClickable && props.onRowClick) {\n props.onRowClick(row);\n emit('rowClick', row);\n }\n};\n\n// ─── Klik di luar table: batalkan editing ─────────────────\nonMounted(() => {\n const handleClickOutside = (e: MouseEvent) => {\n if (tableRef.value && !tableRef.value.contains(e.target as Node)) {\n editingCell.value = null;\n }\n };\n document.addEventListener('mousedown', handleClickOutside);\n onUnmounted(() => {\n document.removeEventListener('mousedown', handleClickOutside);\n });\n});\n\n// ─── Page size change handler ─────────────────────────────\nconst setPage = (newPage: number) => {\n page.value = newPage;\n};\n\nconst handlePageSizeChange = (size: number) => {\n pageSize.value = size;\n page.value = 1;\n};\n\n// ─── Computed classes ─────────────────────────────────────\nconst tableContainerClasses = computed(() => {\n return clsx('ina-table', {\n 'ina-table--sticky-last-column': props.lastColumnSticky,\n });\n});\n\nconst searchContainerClasses = computed(() => {\n return clsx(\n 'ina-table__search',\n !props.showSearch && 'ina-table__search--hidden'\n );\n});\n\nconst tableClasses = computed(() => {\n return clsx('ina-table__container', loading.value && 'ina-table--loading');\n});\n\nconst tableHeaderClasses = computed(() => 'ina-table__header');\n\nconst tableBodyClasses = computed(() => 'ina-table__body');\n</script>\n","<template>\n <div class=\"ina-text-area\" :class=\"containerClasses\">\n <label v-if=\"label\" :for=\"textareaId\" class=\"ina-text-area__label\">\n <component :is=\"labelComponent\" v-if=\"labelComponent\" />\n <span v-else-if=\"label && typeof label === 'string'\">{{ label }}</span>\n <span v-if=\"required\" class=\"ina-text-area__required\">*</span>\n </label>\n\n <div class=\"ina-text-area__wrapper\" :class=\"wrapperClasses\">\n <textarea\n v-bind=\"filteredAttrs\"\n :id=\"textareaId\"\n ref=\"textareaRef\"\n v-model=\"inputValue\"\n :name=\"(attrs.name as string) || undefined\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n :maxlength=\"maxLength\"\n :rows=\"rows\"\n :autocomplete=\"autocomplete\"\n :spellcheck=\"spellCheck\"\n :autocapitalize=\"autoCapitalize\"\n :autocorrect=\"autoCorrect\"\n :dir=\"dir\"\n :class=\"textareaClasses\"\n @input=\"handleInput\"\n @blur=\"handleBlur\"\n @focus=\"handleFocus\"\n />\n\n <button\n v-if=\"showClearButton && inputValue !== '' && !disabled\"\n type=\"button\"\n class=\"ina-text-area__clear-button\"\n aria-label=\"Clear textarea\"\n @click=\"handleClear\"\n >\n <IconX :size=\"16\" class=\"ina-text-area__clear-icon\" />\n </button>\n </div>\n\n <div v-if=\"bottomText || validationError\" :class=\"statusMessageClasses\">\n <template v-if=\"validationError\">{{ validationError }}</template>\n <template v-else>\n <component :is=\"bottomTextComponent\" v-if=\"bottomTextComponent\" />\n <span v-else>{{ bottomText }}</span>\n </template>\n </div>\n\n <div v-if=\"showCharCount && maxLength\" :class=\"charCountClasses\">\n {{ inputValue.length }}/{{ maxLength }}\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, watch, onUnmounted, useAttrs } from 'vue';\nimport type { Component } from 'vue';\nimport { IconX } from '@tabler/icons-vue';\nimport {\n validateInput,\n type SecurityConfig,\n DEFAULT_SECURITY_CONFIG,\n} from '../utils/security';\n\nexport type ValidationRule =\n | { kind: 'regex'; pattern: RegExp; message?: string }\n | { kind: 'maxLength'; value: number; message?: string }\n | { kind: 'minLength'; value: number; message?: string }\n | {\n kind: 'custom';\n validate: (v: string) => string | null;\n message?: string;\n };\n\nexport interface TextAreaProps {\n modelValue?: string;\n label?: string | Component;\n placeholder?: string;\n size?: 'sm' | 'md' | 'lg';\n status?: 'neutral' | 'success' | 'error' | 'warning';\n statusMessage?: string | Component;\n helperText?: string | Component;\n disabled?: boolean;\n readonly?: boolean;\n required?: boolean;\n maxLength?: number;\n showCharCount?: boolean;\n showClearButton?: boolean;\n rows?: number;\n resize?: 'none' | 'vertical' | 'horizontal' | 'both';\n // Security props\n securityConfig?: SecurityConfig;\n // Privacy & abuse protection props\n autocomplete?: string;\n spellCheck?: boolean;\n autoCapitalize?: 'off' | 'none' | 'sentences' | 'words' | 'characters';\n autoCorrect?: 'off' | 'on';\n dir?: 'auto' | 'ltr' | 'rtl';\n // Validation & normalization\n validation?: ValidationRule[];\n normalize?: (value: string) => string;\n}\n\nconst props = withDefaults(defineProps<TextAreaProps>(), {\n modelValue: '',\n size: 'md',\n status: 'neutral',\n disabled: false,\n readonly: false,\n required: false,\n showCharCount: false,\n showClearButton: true,\n rows: 4,\n resize: 'vertical',\n securityConfig: () => DEFAULT_SECURITY_CONFIG,\n spellCheck: undefined,\n autoCapitalize: undefined,\n autoCorrect: undefined,\n dir: undefined,\n});\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string];\n input: [event: Event];\n blur: [event: FocusEvent];\n focus: [event: FocusEvent];\n}>();\n\nconst attrs = useAttrs();\nconst textareaRef = ref<HTMLTextAreaElement>();\nconst inputValue = ref(getInitialValue());\nconst validationError = ref<string | null>(null);\n\n// Initialize with sanitized value if security is enabled\nfunction getInitialValue(): string {\n const value = props.modelValue || '';\n if (props.securityConfig?.enableXssProtection) {\n const validation = validateInput(value);\n return validation.sanitized;\n }\n return value;\n}\n\n// Generate unique ID for textarea, or use id from props/attrs if provided (1:1 with React)\nconst textareaId = computed(() => {\n // Check if id is provided via props or attrs (same as React's rest?.id || rest?.name)\n const providedId = (attrs.id as string) || (attrs.name as string);\n if (providedId) {\n return String(providedId);\n }\n // Fallback to generated ID (same as React's String(label).toLowerCase())\n if (props.label) {\n return String(props.label).toLowerCase();\n }\n return `text-area-${Math.random().toString(36).substr(2, 9)}`;\n});\n\n// Filter out id and name from attrs to avoid conflicts (they're handled explicitly)\nconst filteredAttrs = computed(() => {\n const { id, name, ...rest } = attrs;\n return rest;\n});\n\nconst bottomText = computed(() => {\n if (props.status !== 'neutral' && props.statusMessage) {\n return props.statusMessage;\n }\n return props.statusMessage || props.helperText;\n});\n\nconst bottomTextComponent = computed(() => {\n const text = bottomText.value;\n if (!text) return null;\n if (typeof text === 'string') return null;\n return text as Component;\n});\n\n// Computed untuk label component\nconst labelComponent = computed(() => {\n if (!props.label) return null;\n if (typeof props.label === 'string') return null;\n return props.label as Component;\n});\n\nconst containerClasses = computed(() => {\n const classes = ['ina-text-area'];\n\n if (props.disabled) {\n classes.push('ina-text-area--disabled');\n }\n\n return classes;\n});\n\nconst wrapperClasses = computed(() => {\n const classes = ['ina-text-area__wrapper'];\n\n classes.push(`ina-text-area__wrapper--status-${props.status}`);\n\n if (props.disabled) {\n classes.push('ina-text-area__wrapper--disabled');\n }\n\n return classes;\n});\n\nconst textareaClasses = computed(() => {\n const classes = ['ina-text-area__input'];\n\n classes.push(`ina-text-area__input--size-${props.size}`);\n\n if (props.disabled) {\n classes.push('ina-text-area__input--disabled');\n }\n\n if (props.readonly) {\n classes.push('ina-text-area__input--readonly');\n }\n\n if (props.status !== 'neutral') {\n classes.push(`ina-text-area__input--status-${props.status}`);\n }\n\n classes.push(`ina-text-area__input--resize-${props.resize}`);\n\n return classes;\n});\n\nconst statusMessageClasses = computed(() => {\n const classes = ['ina-text-area__helper-text'];\n\n // Use error status if validation error exists\n if (validationError.value) {\n classes.push('ina-text-area__helper-text--error');\n } else if (props.status !== 'neutral') {\n classes.push(`ina-text-area__helper-text--${props.status}`);\n }\n\n return classes;\n});\n\nconst charCountClasses = computed(() => {\n const classes = ['ina-text-area__char-count'];\n\n if (inputValue.value.length > (props.maxLength || 0)) {\n classes.push('ina-text-area__char-count--error');\n }\n\n return classes;\n});\n\n// Validate input against validation rules\nfunction validateValue(value: string): string | null {\n if (!props.validation || props.validation.length === 0) {\n return null;\n }\n\n for (const rule of props.validation) {\n let error: string | null = null;\n\n switch (rule.kind) {\n case 'regex':\n if (!rule.pattern.test(value)) {\n error = rule.message || 'Input tidak sesuai format yang diharapkan';\n }\n break;\n case 'maxLength':\n if (value.length > rule.value) {\n error = rule.message || `Maksimal ${rule.value} karakter`;\n }\n break;\n case 'minLength':\n if (value.length < rule.value) {\n error = rule.message || `Minimal ${rule.value} karakter`;\n }\n break;\n case 'custom':\n error = rule.validate(value);\n break;\n }\n\n if (error) {\n return error;\n }\n }\n\n return null;\n}\n\nconst handleInput = (event: Event) => {\n const target = event.target as HTMLTextAreaElement;\n let value = target.value;\n\n // Apply maxLength constraint\n if (props.maxLength != null && value.length > props.maxLength) {\n return;\n }\n\n // Apply security validation if enabled\n if (props.securityConfig?.enableXssProtection) {\n const validation = validateInput(value);\n\n if (!validation.isValid) {\n // Log security violations\n if (props.securityConfig.logViolations) {\n console.warn('TextArea security violation:', validation.threats);\n }\n\n // Call security violation callback\n if (props.securityConfig.onSecurityViolation) {\n props.securityConfig.onSecurityViolation(validation.threats, value);\n }\n\n // Use sanitized value\n value = validation.sanitized;\n }\n }\n\n // Apply normalization if provided\n if (props.normalize) {\n value = props.normalize(value);\n }\n\n // Validate against validation rules\n validationError.value = validateValue(value);\n\n inputValue.value = value;\n emit('update:modelValue', inputValue.value);\n emit('input', event);\n};\n\nconst handleBlur = (event: FocusEvent) => {\n emit('blur', event);\n};\n\nconst handleFocus = (event: FocusEvent) => {\n emit('focus', event);\n};\n\nconst handleClear = () => {\n inputValue.value = '';\n emit('update:modelValue', '');\n if (textareaRef.value) {\n textareaRef.value.focus();\n }\n};\n\n// Watch for external modelValue changes\nwatch(\n () => props.modelValue,\n (newValue) => {\n let value = newValue || '';\n\n // Apply security validation when value changes\n if (props.securityConfig?.enableXssProtection) {\n const validation = validateInput(value);\n if (!validation.isValid) {\n if (props.securityConfig.logViolations) {\n console.warn(\n 'TextArea security violation on value change:',\n validation.threats\n );\n }\n if (props.securityConfig.onSecurityViolation) {\n props.securityConfig.onSecurityViolation(validation.threats, value);\n }\n value = validation.sanitized;\n }\n }\n\n inputValue.value = value;\n validationError.value = validateValue(value);\n }\n);\n</script>\n","<template>\n <div :class=\"containerClasses\">\n <div v-if=\"title\" class=\"ina-one-time-password__title\">\n <template v-if=\"typeof title === 'string'\">{{ title }}</template>\n <component :is=\"title\" v-else />\n </div>\n <div v-if=\"description\" class=\"ina-one-time-password__description\">\n <template v-if=\"typeof description === 'string'\">{{\n description\n }}</template>\n <component :is=\"description\" v-else />\n </div>\n <div class=\"ina-one-time-password__container\">\n <input\n v-for=\"(_, index) in length\"\n :key=\"index\"\n :ref=\"(el) => setInputRef(el, index)\"\n type=\"text\"\n inputmode=\"numeric\"\n maxlength=\"1\"\n :value=\"getDigitValue(index)\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n :class=\"inputClasses\"\n :aria-label=\"`Digit ${index + 1} of ${length}`\"\n @input=\"handleChange(index, $event)\"\n @keydown=\"handleKeyDown(index, $event)\"\n @focus=\"handleFocus(index)\"\n @blur=\"handleBlur\"\n @paste=\"handlePaste($event)\"\n />\n </div>\n <div v-if=\"helperText\" :class=\"helperTextClasses\">\n <template v-if=\"typeof helperText === 'string'\">{{\n helperText\n }}</template>\n <component :is=\"helperText\" v-else />\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {\n computed,\n ref,\n watch,\n nextTick,\n onMounted,\n type VNode,\n type Component,\n} from 'vue';\nimport clsx from 'clsx';\nexport type OneTimePasswordLength = 3 | 4 | 5 | 6 | 7 | 8;\n\nexport interface OneTimePasswordProps {\n /** Nilai OTP (string dengan panjang sesuai length) */\n modelValue?: string;\n /** Jumlah digit (3-8) */\n length?: OneTimePasswordLength;\n /** Title di atas input */\n title?: string | VNode | Component;\n /** Description di bawah title */\n description?: string | VNode | Component;\n /** Helper text di bawah input */\n helperText?: string | VNode | Component;\n /** Apakah OTP dalam state error */\n error?: boolean;\n /** Apakah OTP disabled */\n disabled?: boolean;\n /** Apakah OTP readonly */\n readonly?: boolean;\n\n /** Auto focus pada mount */\n autoFocus?: boolean;\n}\n\nconst props = withDefaults(defineProps<OneTimePasswordProps>(), {\n modelValue: '',\n length: 6,\n error: false,\n disabled: false,\n readonly: false,\n autoFocus: false,\n});\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string];\n complete: [value: string];\n}>();\n\nconst inputRefs = ref<(HTMLInputElement | null)[]>([]);\nconst isInternalUpdate = ref(false);\n\n// Set input ref\nconst setInputRef = (el: any, index: number) => {\n if (el) {\n inputRefs.value[index] = el as HTMLInputElement;\n }\n};\n\n// Initialize input refs array\nwatch(\n () => props.length,\n () => {\n inputRefs.value = inputRefs.value.slice(0, props.length);\n },\n { immediate: true }\n);\n\n// Auto focus first input on mount if autoFocus is true\nonMounted(() => {\n if (\n props.autoFocus &&\n inputRefs.value[0] &&\n !props.disabled &&\n !props.readonly\n ) {\n inputRefs.value[0].focus();\n }\n});\n\n// Watch for external modelValue changes to handle complete callback\n// Only trigger for external changes (not from our own emit)\nwatch(\n () => props.modelValue,\n (newValue, oldValue) => {\n // Skip if this is an internal update\n if (isInternalUpdate.value) {\n isInternalUpdate.value = false;\n return;\n }\n\n const currentValue = newValue || '';\n const previousValue = oldValue || '';\n\n // Call complete if all digits filled (only for external changes)\n if (\n currentValue.length === props.length &&\n previousValue.length !== props.length\n ) {\n nextTick(() => {\n emit('complete', currentValue);\n });\n }\n }\n);\n\nconst containerClasses = computed(() => {\n return clsx('ina-one-time-password');\n});\n\n// Memoize input classes to prevent unnecessary re-computations\nconst inputClasses = computed(() => {\n return clsx(\n 'ina-one-time-password__input',\n props.error && 'ina-one-time-password__input--error'\n );\n});\n\n// Helper text classes with error state\nconst helperTextClasses = computed(() => {\n return clsx(\n 'ina-one-time-password__helper-text',\n props.error && 'ina-one-time-password__helper-text--error'\n );\n});\n\nconst getDigitValue = (index: number): string => {\n return props.modelValue?.[index] || '';\n};\n\nconst handleChange = (index: number, event: Event) => {\n const target = event.target as HTMLInputElement;\n const inputValue = target.value;\n\n // Only allow single digit (0-9)\n if (inputValue && !/^\\d$/.test(inputValue)) {\n // Reset to previous value if invalid input\n target.value = props.modelValue?.[index] || '';\n return;\n }\n\n // Update value\n const currentValue = props.modelValue || '';\n const newValue = currentValue.split('');\n newValue[index] = inputValue;\n const updatedValue = newValue.join('').slice(0, props.length);\n\n // Mark as internal update to prevent watch from triggering\n isInternalUpdate.value = true;\n emit('update:modelValue', updatedValue);\n\n // Call complete if all digits filled\n if (updatedValue.length === props.length) {\n nextTick(() => {\n emit('complete', updatedValue);\n });\n }\n\n // Auto focus next input if digit entered\n if (inputValue && index < props.length - 1) {\n const nextIndex = index + 1;\n nextTick(() => {\n if (inputRefs.value[nextIndex] && !props.disabled && !props.readonly) {\n inputRefs.value[nextIndex]?.focus();\n }\n });\n }\n};\n\nconst handleKeyDown = (index: number, event: KeyboardEvent) => {\n // Handle backspace\n if (event.key === 'Backspace') {\n const currentValue = props.modelValue || '';\n if (!currentValue[index] && index > 0) {\n // If current input is empty, focus previous and clear it\n const prevIndex = index - 1;\n if (inputRefs.value[prevIndex]) {\n inputRefs.value[prevIndex]?.focus();\n const newValue = (props.modelValue || '').split('');\n newValue[prevIndex] = '';\n const updatedValue = newValue.join('');\n isInternalUpdate.value = true;\n emit('update:modelValue', updatedValue);\n }\n } else {\n // Clear current input\n const newValue = (props.modelValue || '').split('');\n newValue[index] = '';\n const updatedValue = newValue.join('');\n isInternalUpdate.value = true;\n emit('update:modelValue', updatedValue);\n }\n }\n\n // Handle arrow keys\n if (event.key === 'ArrowLeft' && index > 0) {\n event.preventDefault();\n inputRefs.value[index - 1]?.focus();\n }\n if (event.key === 'ArrowRight' && index < props.length - 1) {\n event.preventDefault();\n inputRefs.value[index + 1]?.focus();\n }\n\n // Handle paste (Ctrl+V / Cmd+V)\n if ((event.ctrlKey || event.metaKey) && event.key === 'v') {\n event.preventDefault();\n navigator.clipboard.readText().then((text) => {\n // Only use digits and limit to length\n const digits = text.replace(/\\D/g, '').slice(0, props.length);\n if (digits) {\n isInternalUpdate.value = true;\n emit('update:modelValue', digits);\n\n // Call complete if all digits filled\n if (digits.length === props.length) {\n nextTick(() => {\n emit('complete', digits);\n });\n }\n\n // Focus last filled input or last input\n const focusIndex = Math.min(digits.length - 1, props.length - 1);\n nextTick(() => {\n if (inputRefs.value[focusIndex]) {\n inputRefs.value[focusIndex]?.focus();\n }\n });\n }\n });\n }\n};\n\nconst handleFocus = (index: number) => {\n // Select all text when focused\n nextTick(() => {\n if (inputRefs.value[index]) {\n inputRefs.value[index]?.select();\n }\n });\n};\n\nconst handleBlur = () => {\n // Blur handler - no state needed\n};\n\nconst handlePaste = (event: ClipboardEvent) => {\n event.preventDefault();\n const pastedText = event.clipboardData.getData('text');\n // Only use digits and limit to length\n const digits = pastedText.replace(/\\D/g, '').slice(0, props.length);\n if (digits) {\n isInternalUpdate.value = true;\n emit('update:modelValue', digits);\n\n // Call complete if all digits filled\n if (digits.length === props.length) {\n nextTick(() => {\n emit('complete', digits);\n });\n }\n\n // Focus last filled input or last input\n const focusIndex = Math.min(digits.length - 1, props.length - 1);\n nextTick(() => {\n if (inputRefs.value[focusIndex]) {\n inputRefs.value[focusIndex]?.focus();\n }\n });\n }\n};\n</script>\n","<template>\n <div :class=\"containerClasses\">\n <span v-if=\"showLabel\" class=\"ina-theme-toggle__label\">\n {{ theme === 'light' ? 'Light' : 'Dark' }} Mode\n </span>\n\n <button\n type=\"button\"\n :class=\"buttonClasses\"\n @click=\"toggleTheme\"\n :aria-label=\"`Switch to ${theme === 'light' ? 'dark' : 'light'} mode`\"\n :title=\"`Switch to ${theme === 'light' ? 'dark' : 'light'} mode`\"\n >\n <div :class=\"iconClasses\">\n <IconSun\n v-if=\"theme === 'light'\"\n :size=\"size === 'sm' ? 16 : size === 'lg' ? 20 : 18\"\n />\n <IconMoon v-else :size=\"size === 'sm' ? 16 : size === 'lg' ? 20 : 18\" />\n </div>\n\n <span class=\"ina-theme-toggle__track\" />\n </button>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed, onMounted } from 'vue';\nimport { IconSun, IconMoon } from '@tabler/icons-vue';\nexport interface ThemeToggleProps {\n size?: 'sm' | 'md' | 'lg';\n showLabel?: boolean;\n}\n\nconst props = withDefaults(defineProps<ThemeToggleProps>(), {\n size: 'md',\n showLabel: false,\n});\n\nconst theme = ref<'light' | 'dark'>('light');\n\n// Initialize theme from localStorage or default to light\nonMounted(() => {\n const storedTheme = localStorage.getItem('ina-theme') as 'light' | 'dark';\n const initialTheme = storedTheme || 'light';\n theme.value = initialTheme;\n\n // Apply theme to document\n document.documentElement.setAttribute('data-theme', initialTheme);\n localStorage.setItem('ina-theme', initialTheme);\n});\n\nconst toggleTheme = () => {\n const newTheme = theme.value === 'light' ? 'dark' : 'light';\n theme.value = newTheme;\n\n // Apply theme to document\n document.documentElement.setAttribute('data-theme', newTheme);\n localStorage.setItem('ina-theme', newTheme);\n};\n\nconst containerClasses = computed(() => {\n const classes = ['ina-theme-toggle', `ina-theme-toggle--size-${props.size}`];\n\n return classes.join(' ');\n});\n\nconst buttonClasses = computed(() => {\n return [\n 'ina-theme-toggle__button',\n `ina-theme-toggle__button--${theme.value}`,\n `ina-theme-toggle__button--size-${props.size}`,\n ].join(' ');\n});\n\nconst iconClasses = computed(() => {\n return [\n 'ina-theme-toggle__icon',\n `ina-theme-toggle__icon--${theme.value}`,\n ].join(' ');\n});\n</script>\n\n<style scoped></style>\n","<template>\n <div ref=\"containerRef\" class=\"ina-time-picker\" :class=\"containerClasses\">\n <!-- Input -->\n <div\n class=\"ina-time-picker__wrapper\"\n :tabindex=\"disabled ? -1 : 0\"\n role=\"combobox\"\n :aria-expanded=\"isOpen\"\n aria-haspopup=\"listbox\"\n @click=\"handleWrapperClick\"\n @keydown=\"handleWrapperKeydown\"\n >\n <div v-if=\"prefixIcon\" class=\"ina-time-picker__prefix-icon\">\n <slot name=\"prefixIcon\">{{ prefixIcon }}</slot>\n </div>\n\n <input\n ref=\"inputRef\"\n type=\"text\"\n :class=\"inputClasses\"\n :value=\"internalValue\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n :readonly=\"!disabled\"\n v-bind=\"$attrs\"\n @input=\"handleInputChange\"\n @click=\"handleInputClick\"\n @focus=\"handleInputFocus\"\n @keydown=\"handleInputKeydown\"\n />\n\n <button\n v-if=\"allowClear && internalValue && !disabled\"\n type=\"button\"\n class=\"ina-time-picker__clear-button\"\n aria-label=\"Clear time\"\n @click=\"handleClear\"\n >\n <IconX :size=\"16\" />\n </button>\n <div v-else-if=\"suffixIcon\" class=\"ina-time-picker__suffix-icon\">\n <slot name=\"suffixIcon\">{{ suffixIcon }}</slot>\n </div>\n <div v-else class=\"ina-time-picker__suffix-icon\">\n <IconClock :size=\"16\" />\n </div>\n </div>\n\n <!-- Time Panel -->\n <div v-if=\"isOpen\" ref=\"panelRef\" class=\"ina-time-picker__panel\">\n <div class=\"ina-time-picker__content\">\n <!-- Hour Column -->\n <div\n :class=\"[\n 'ina-time-picker__column',\n 'ina-time-picker__column--hour',\n hoveredColumn === 'hour' && 'ina-time-picker__column--hovered',\n ]\"\n >\n <div\n class=\"ina-time-picker__column-content\"\n @mouseleave=\"handleMouseLeave\"\n >\n <div\n v-for=\"option in hourOptions\"\n :key=\"option\"\n :class=\"[\n 'ina-time-picker__option',\n option ===\n (use12Hours\n ? currentTime.hours === 0\n ? 12\n : currentTime.hours\n : currentTime.hours) && 'ina-time-picker__option--selected',\n hoveredValue === option && 'ina-time-picker__option--hovered',\n ]\"\n @click=\"handleTimeSelect('hour', option)\"\n @mouseenter=\"handleMouseEnter('hour', option)\"\n >\n {{ option.toString().padStart(2, '0') }}\n </div>\n </div>\n </div>\n\n <!-- Minute Column -->\n <div\n :class=\"[\n 'ina-time-picker__column',\n 'ina-time-picker__column--minute',\n hoveredColumn === 'minute' && 'ina-time-picker__column--hovered',\n ]\"\n >\n <div\n class=\"ina-time-picker__column-content\"\n @mouseleave=\"handleMouseLeave\"\n >\n <div\n v-for=\"option in minuteOptions\"\n :key=\"option\"\n :class=\"[\n 'ina-time-picker__option',\n option === currentTime.minutes &&\n 'ina-time-picker__option--selected',\n hoveredValue === option && 'ina-time-picker__option--hovered',\n ]\"\n @click=\"handleTimeSelect('minute', option)\"\n @mouseenter=\"handleMouseEnter('minute', option)\"\n >\n {{ option.toString().padStart(2, '0') }}\n </div>\n </div>\n </div>\n\n <!-- Second Column -->\n <div\n v-if=\"showSecond\"\n :class=\"[\n 'ina-time-picker__column',\n 'ina-time-picker__column--second',\n hoveredColumn === 'second' && 'ina-time-picker__column--hovered',\n ]\"\n >\n <div\n class=\"ina-time-picker__column-content\"\n @mouseleave=\"handleMouseLeave\"\n >\n <div\n v-for=\"option in secondOptions\"\n :key=\"option\"\n :class=\"[\n 'ina-time-picker__option',\n option === currentTime.seconds &&\n 'ina-time-picker__option--selected',\n hoveredValue === option && 'ina-time-picker__option--hovered',\n ]\"\n @click=\"handleTimeSelect('second', option)\"\n @mouseenter=\"handleMouseEnter('second', option)\"\n >\n {{ option.toString().padStart(2, '0') }}\n </div>\n </div>\n </div>\n\n <!-- AM/PM Column -->\n <div\n v-if=\"use12Hours\"\n :class=\"[\n 'ina-time-picker__column',\n 'ina-time-picker__column--period',\n hoveredColumn === 'period' && 'ina-time-picker__column--hovered',\n ]\"\n >\n <div\n class=\"ina-time-picker__column-content\"\n @mouseleave=\"handleMouseLeave\"\n >\n <div\n v-for=\"period in ['AM', 'PM']\"\n :key=\"period\"\n :class=\"[\n 'ina-time-picker__option',\n period === currentTime.period &&\n 'ina-time-picker__option--selected',\n ]\"\n @click=\"handleTimeSelect('period', period)\"\n @mouseenter=\"handleMouseEnter('period', period)\"\n >\n {{ period }}\n </div>\n </div>\n </div>\n </div>\n\n <!-- Actions -->\n <div class=\"ina-time-picker__actions\">\n <button\n v-if=\"showNowButton\"\n type=\"button\"\n class=\"ina-time-picker__action-button\"\n @click=\"handleNowClick\"\n >\n Sekarang\n </button>\n <button\n type=\"button\"\n class=\"ina-time-picker__confirm-button\"\n @click=\"handleClose\"\n >\n Pilih\n </button>\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, watch, onMounted, onUnmounted } from 'vue';\nimport { IconClock, IconX } from '@tabler/icons-vue';\nexport type TimeFormat = 'HH:mm:ss' | 'HH:mm' | 'h:mm:ss a' | 'h:mm a' | string;\nexport type TimePickerSize = 'sm' | 'md' | 'lg';\n\nexport interface TimePickerProps {\n /** Set default time */\n defaultValue?: string;\n /** Determine whether the TimePicker is disabled */\n disabled?: boolean;\n /** To set the time format */\n format?: TimeFormat;\n /** Hour step interval */\n hourStep?: number;\n /** Minute step interval */\n minuteStep?: number;\n /** Second step interval */\n secondStep?: number;\n /** Placeholder text */\n placeholder?: string;\n /** Size variant */\n size?: TimePickerSize;\n /** Status variant */\n status?: 'neutral' | 'error' | 'warning' | 'success';\n /** Current value */\n modelValue?: string;\n /** Callback when time changes */\n onChange?: (time: string) => void;\n /** Callback when picker open/close */\n onOpenChange?: (open: boolean) => void;\n /** Whether to use 12-hour format */\n use12Hours?: boolean;\n /** Show seconds column */\n showSecond?: boolean;\n /** Allow clear */\n allowClear?: boolean;\n /** Prefix icon */\n prefixIcon?: any;\n /** Suffix icon */\n suffixIcon?: any;\n /** Disable times before current time */\n disabledBackTime?: boolean;\n /** Disable times before this specific time (format: same as format prop) */\n disabledTimeBefore?: string;\n /** Disable times after this specific time (format: same as format prop) */\n disabledTimeAfter?: string;\n /** Show \"Now\" button to set current time */\n showNowButton?: boolean;\n}\n\nconst props = withDefaults(defineProps<TimePickerProps>(), {\n defaultValue: '',\n disabled: false,\n format: 'HH:mm',\n hourStep: 1,\n minuteStep: 1,\n secondStep: 1,\n placeholder: 'Select time',\n size: 'md',\n status: 'neutral',\n use12Hours: false,\n showSecond: false,\n allowClear: true,\n disabledBackTime: false,\n showNowButton: false,\n});\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string];\n change: [value: string];\n 'open-change': [open: boolean];\n}>();\n\nconst containerRef = ref<HTMLDivElement>();\nconst inputRef = ref<HTMLInputElement>();\nconst panelRef = ref<HTMLDivElement>();\n\nconst isOpen = ref(false);\nconst internalValue = ref(props.defaultValue || props.modelValue || '');\nconst hoveredColumn = ref<'hour' | 'minute' | 'second' | 'period' | null>(null);\nconst hoveredValue = ref<number | string | null>(null);\nconst clickedToOpen = ref(false);\n\n// Parse time string to hours, minutes, seconds\nconst parseTime = (timeStr: string) => {\n if (!timeStr) return { hours: 0, minutes: 0, seconds: 0, period: 'AM' };\n\n const parts = timeStr.split(':');\n const time = parts[0];\n const minutes = parseInt(parts[1] || '0', 10);\n const seconds = parseInt(parts[2] || '0', 10);\n\n if (props.use12Hours) {\n const period = time.includes('AM') ? 'AM' : 'PM';\n const hour12 = parseInt(time.replace(/[^\\d]/g, ''), 10);\n const hours = hour12 === 12 ? 0 : hour12;\n return { hours, minutes, seconds, period };\n } else {\n return { hours: parseInt(time, 10), minutes, seconds, period: 'AM' };\n }\n};\n\n// Format time to string\nconst formatTime = (\n hours: number,\n minutes: number,\n seconds: number,\n period?: string\n) => {\n let displayHours = hours;\n\n if (props.use12Hours) {\n if (period === 'PM' && hours > 0) {\n displayHours = hours + 12;\n }\n displayHours = displayHours || 12; // Show 12 for both midnights\n }\n\n const hh = displayHours.toString().padStart(2, '0');\n const mm = minutes.toString().padStart(2, '0');\n\n if (props.showSecond) {\n const ss = seconds.toString().padStart(2, '0');\n return props.use12Hours\n ? `${hours}:${mm}:${ss} ${period}`\n : `${hh}:${mm}:${ss}`;\n }\n\n return props.use12Hours ? `${hours}:${mm} ${period}` : `${hh}:${mm}`;\n};\n\n// Generate time options\nconst generateOptions = (type: 'hour' | 'minute' | 'second') => {\n const options: number[] = [];\n\n switch (\n type === 'hour' ? (props.use12Hours ? 12 : 24) : type === 'minute' ? 60 : 60\n ) {\n case 12:\n for (\n let i = type === 'hour' ? 1 : 0;\n i <= (type === 'hour' ? 12 : 59);\n i +=\n type === 'hour'\n ? props.hourStep\n : type === 'minute'\n ? props.minuteStep\n : 1\n ) {\n options.push(i);\n }\n break;\n case 24:\n for (let i = 0; i <= 23; i += props.hourStep) {\n options.push(i);\n }\n break;\n case 60:\n for (\n let i = 0;\n i <= 59;\n i += type === 'minute' ? props.minuteStep : props.secondStep\n ) {\n options.push(i);\n }\n break;\n }\n\n return options;\n};\n\nconst currentTime = computed(() => parseTime(internalValue.value || ''));\nconst hourOptions = computed(() => generateOptions('hour'));\nconst minuteOptions = computed(() => generateOptions('minute'));\nconst secondOptions = computed(() => generateOptions('second'));\n\n// Handle open/close - SAMA PERSIS DENGAN REACT\nconst handleOpen = () => {\n if (props.disabled || isOpen.value) return;\n\n isOpen.value = true;\n clickedToOpen.value = true;\n emit('open-change', true);\n\n setTimeout(() => inputRef.value?.focus(), 0);\n};\n\nconst handleClose = () => {\n isOpen.value = false;\n clickedToOpen.value = false;\n hoveredColumn.value = null;\n hoveredValue.value = null;\n emit('open-change', false);\n};\n\nconst handleToggleOpen = () => {\n if (props.disabled) return;\n\n if (isOpen.value) {\n handleClose();\n } else {\n handleOpen();\n }\n};\n\n// Handle wrapper click - SAMA PERSIS DENGAN REACT\nconst handleWrapperClick = (e: MouseEvent) => {\n // Only trigger wrapper click if clicking on wrapper itself or icons\n const target = e.target as HTMLElement;\n if (\n target === e.currentTarget ||\n target.classList.contains('ina-time-picker__suffix-icon') ||\n target.classList.contains('ina-time-picker__prefix-icon')\n ) {\n handleOpen();\n }\n};\n\n// Handle wrapper keydown - SAMA PERSIS DENGAN REACT\nconst handleWrapperKeydown = (e: KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n handleToggleOpen();\n }\n};\n\n// Handle input click - SAMA PERSIS DENGAN REACT\nconst handleInputClick = (e: MouseEvent) => {\n e.stopPropagation();\n handleOpen();\n};\n\n// Handle input focus - SAMA PERSIS DENGAN REACT\nconst handleInputFocus = () => {\n if (!clickedToOpen.value) {\n handleOpen();\n }\n clickedToOpen.value = false;\n};\n\n// Handle input keydown - SAMA PERSIS DENGAN REACT\nconst handleInputKeydown = (e: KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n handleToggleOpen();\n } else if (e.key === 'Escape') {\n if (isOpen.value) handleClose();\n }\n};\n\n// Handle time selection\nconst handleTimeSelect = (\n type: 'hour' | 'minute' | 'second' | 'period',\n value: number | string\n) => {\n let newHours = currentTime.value.hours;\n let newMinutes = currentTime.value.minutes;\n let newSeconds = currentTime.value.seconds;\n let newPeriod = currentTime.value.period;\n\n switch (type) {\n case 'hour':\n newHours = props.use12Hours\n ? value === 12\n ? 0\n : (value as number)\n : (value as number);\n break;\n case 'minute':\n newMinutes = value as number;\n break;\n case 'second':\n newSeconds = value as number;\n break;\n case 'period':\n newPeriod = value as 'AM' | 'PM';\n break;\n }\n\n const newTimeStr = formatTime(\n newHours,\n newMinutes,\n newSeconds,\n props.use12Hours ? newPeriod : undefined\n );\n\n internalValue.value = newTimeStr;\n emit('update:modelValue', newTimeStr);\n emit('change', newTimeStr);\n};\n\n// Handle input change\nconst handleInputChange = (e: Event) => {\n const target = e.target as HTMLInputElement;\n const inputValue = target.value;\n internalValue.value = inputValue;\n emit('update:modelValue', inputValue);\n emit('change', inputValue);\n};\n\n// Handle clear\nconst handleClear = () => {\n internalValue.value = '';\n emit('update:modelValue', '');\n emit('change', '');\n};\n\n// Handle mouse enter\nconst handleMouseEnter = (\n type: 'hour' | 'minute' | 'second' | 'period',\n value: number | string\n) => {\n hoveredColumn.value = type;\n hoveredValue.value = value;\n};\n\n// Handle mouse leave\nconst handleMouseLeave = () => {\n hoveredColumn.value = null;\n hoveredValue.value = null;\n};\n\n// Handle now click\nconst handleNowClick = () => {\n const now = new Date();\n const timeStr = formatTime(\n now.getHours(),\n now.getMinutes(),\n props.showSecond ? now.getSeconds() : 0,\n props.use12Hours ? (now.getHours() >= 12 ? 'PM' : 'AM') : undefined\n );\n\n const hours12 = now.getHours() % 12 || 12;\n const finalTime = props.use12Hours\n ? formatTime(\n hours12,\n now.getMinutes(),\n props.showSecond ? now.getSeconds() : 0,\n now.getHours() >= 12 ? 'PM' : 'AM'\n )\n : timeStr;\n\n internalValue.value = finalTime;\n emit('update:modelValue', finalTime);\n emit('change', finalTime);\n handleClose();\n};\n\n// Computed classes - SAMA PERSIS DENGAN REACT\nconst containerClasses = computed(() => {\n const classes = [\n 'ina-time-picker',\n `ina-time-picker--size-${props.size}`,\n `ina-time-picker--status-${props.status}`,\n ];\n\n if (props.disabled) {\n classes.push('ina-time-picker--disabled');\n }\n\n if (isOpen.value) {\n classes.push('ina-time-picker--open');\n }\n\n return classes;\n});\n\nconst inputClasses = computed(() => {\n const classes = [\n 'ina-time-picker__input',\n `ina-time-picker__input--size-${props.size}`,\n ];\n\n if (props.prefixIcon) {\n classes.push('ina-time-picker__input--with-prefix');\n }\n\n if (props.suffixIcon || props.allowClear) {\n classes.push('ina-time-picker__input--with-suffix');\n }\n\n return classes;\n});\n\n// Sync internal value with external modelValue prop\nwatch(\n () => props.modelValue,\n (newValue) => {\n if (newValue !== undefined && newValue !== internalValue.value) {\n internalValue.value = newValue;\n }\n }\n);\n\n// Handle clicks outside - SAMA PERSIS DENGAN REACT\nconst handleClickOutside = (event: MouseEvent) => {\n if (\n containerRef.value &&\n !containerRef.value.contains(event.target as Node)\n ) {\n handleClose();\n }\n};\n\nonMounted(() => {\n if (isOpen.value) {\n document.addEventListener('mousedown', handleClickOutside);\n }\n});\n\nonUnmounted(() => {\n document.removeEventListener('mousedown', handleClickOutside);\n});\n\nwatch(isOpen, (newIsOpen) => {\n if (newIsOpen) {\n document.addEventListener('mousedown', handleClickOutside);\n } else {\n document.removeEventListener('mousedown', handleClickOutside);\n }\n});\n</script>\n","<template>\n <Teleport v-if=\"mounted && isDisplayed && container\" :to=\"container\">\n <div class=\"ina-toast-item\">\n <div :class=\"toastClasses\">\n <div class=\"ina-toast__icon\">\n <component :is=\"iconComponent\" :size=\"20\" />\n </div>\n <div class=\"ina-toast__content\">\n <div class=\"ina-toast__text-area\">\n <p class=\"ina-toast__title\">{{ title }}</p>\n <p v-if=\"description\" class=\"ina-toast__description\">\n {{ description }}\n </p>\n </div>\n <div v-if=\"actionNode\" class=\"ina-toast__action-area\">\n <component :is=\"actionNode\" />\n </div>\n </div>\n <button\n class=\"ina-toast__close-button\"\n aria-label=\"Tutup notifikasi\"\n @click=\"handleClose\"\n >\n <IconX :size=\"16\" :stroke-width=\"2\" class=\"ina-toast__close-icon\" />\n </button>\n </div>\n </div>\n </Teleport>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, onMounted, onUnmounted, watch, useAttrs } from 'vue';\nimport type { Component, VNode } from 'vue';\nimport {\n IconCircleCheck,\n IconInfoCircle,\n IconX,\n IconAlertCircle,\n} from '@tabler/icons-vue';\nimport clsx from 'clsx';\n\nexport interface ToastProps {\n show: boolean;\n onClose: () => void;\n title: string | VNode;\n description?: string | VNode;\n actionNode?: Component | VNode;\n state?: 'default' | 'destructive' | 'positive';\n style?: 'outline' | 'solid';\n duration?: number;\n position?:\n | 'top-left'\n | 'top-right'\n | 'bottom-left'\n | 'bottom-right'\n | 'top-middle'\n | 'bottom-middle'\n | 'left-middle'\n | 'right-middle';\n}\n\nconst props = withDefaults(defineProps<ToastProps>(), {\n state: 'default',\n style: 'solid',\n duration: 5000,\n position: 'top-right',\n});\n\n// State icons map\nconst stateIconMap = {\n default: IconInfoCircle,\n destructive: IconAlertCircle,\n positive: IconCircleCheck,\n} as const;\n\nconst iconComponent = computed(() => stateIconMap[props.state]);\n\n// State\nconst mounted = ref(false);\nconst isDisplayed = ref(false);\nconst isVisible = ref(false);\nconst container = ref<HTMLElement | null>(null);\nlet timer: ReturnType<typeof setTimeout> | null = null;\n\n// Utils: Portal Container per-Position\nfunction getOrCreateContainer(position: ToastProps['position']): HTMLElement {\n const id = `ina-toast-container-${position}`;\n let el = document.getElementById(id) as HTMLElement | null;\n if (!el) {\n el = document.createElement('div');\n el.id = id;\n el.className = clsx(\n 'ina-toast-container',\n `ina-toast-container--${position}`\n );\n el.style.maxHeight = 'calc(100vh - 32px)';\n el.style.overflow = 'auto';\n document.body.appendChild(el);\n } else {\n el.className = clsx(\n 'ina-toast-container',\n `ina-toast-container--${position}`\n );\n }\n return el;\n}\n\nfunction removeContainerIfEmpty(el: HTMLElement) {\n if (el && el.childElementCount === 0 && el.parentElement) {\n el.parentElement.removeChild(el);\n }\n}\n\n// Mount\nonMounted(() => {\n mounted.value = true;\n container.value = getOrCreateContainer(props.position);\n});\n\nonUnmounted(() => {\n if (timer) {\n clearTimeout(timer);\n }\n if (container.value) {\n removeContainerIfEmpty(container.value);\n }\n});\n\n// Watch position changes\nwatch(\n () => props.position,\n (newPosition) => {\n if (mounted.value && newPosition) {\n container.value = getOrCreateContainer(newPosition);\n }\n }\n);\n\n// Show/hide + auto close\nwatch(\n () => [props.show, mounted.value] as const,\n ([show, isMounted]) => {\n if (!isMounted) return;\n if (show) {\n isDisplayed.value = true;\n requestAnimationFrame(() => {\n isVisible.value = true;\n });\n if (props.duration > 0) {\n timer = setTimeout(() => {\n handleClose();\n }, props.duration);\n }\n }\n },\n { immediate: true }\n);\n\nfunction handleClose() {\n isVisible.value = false;\n setTimeout(() => {\n isDisplayed.value = false;\n props.onClose();\n if (container.value) {\n removeContainerIfEmpty(container.value);\n }\n }, 300);\n}\n\nconst attrs = useAttrs();\n\nconst toastClasses = computed(() => {\n return clsx(\n 'ina-toast',\n `ina-toast--state-${props.state}`,\n `ina-toast--style-${props.style}`,\n `ina-toast--${isVisible.value ? 'visible' : 'hidden'}`,\n attrs.class\n );\n});\n</script>\n","import { inject } from 'vue';\nimport type { ToastProps } from '../components/Toast.vue';\n\nexport type ToastOptions = Omit<ToastProps, 'show' | 'onClose'> & {\n class?: string;\n};\n\nexport interface ToastContextValue {\n toast: (opts: ToastOptions) => void;\n}\n\nexport const ToastContextKey = Symbol('ToastContext');\n\nexport function useToast(): ToastContextValue {\n const context = inject<ToastContextValue>(ToastContextKey);\n if (!context) {\n console.error('useToast must be used within ToastProvider');\n // Return a dummy function to prevent errors during development\n return {\n toast: (opts: ToastOptions) => {\n console.warn('ToastProvider not found. Toast not displayed:', opts);\n },\n };\n }\n return context;\n}\n","<template>\n <div>\n <slot />\n <!-- Render semua toast -->\n <Toast\n v-for=\"toast in toasts\"\n :key=\"toast.id\"\n :show=\"true\"\n :onClose=\"() => handleClose(toast.id)\"\n :title=\"toast.title\"\n :description=\"toast.description\"\n :actionNode=\"toast.actionNode\"\n :state=\"toast.state\"\n :style=\"toast.style\"\n :duration=\"toast.duration\"\n :position=\"toast.position\"\n :class=\"toast.class\"\n />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, provide } from 'vue';\nimport Toast from './Toast.vue';\nimport {\n ToastContextKey,\n type ToastOptions,\n type ToastContextValue,\n} from '../composables/useToast';\n\n// Internal model untuk setiap toast\ninterface InternalToast extends ToastOptions {\n id: string;\n}\n\n// State untuk menyimpan semua toast\nconst toasts = ref<InternalToast[]>([]);\n\n// Panggil ini dari mana pun untuk munculkan toast\nconst toast = (opts: ToastOptions) => {\n const id = `${Date.now()}-${Math.random()}`;\n toasts.value = [...toasts.value, { id, ...opts }];\n};\n\n// Hapus toast setelah onClose callback\nconst handleClose = (id: string) => {\n toasts.value = toasts.value.filter((t) => t.id !== id);\n};\n\n// Provide context ke child components\nconst contextValue: ToastContextValue = {\n toast,\n};\n\nprovide(ToastContextKey, contextValue);\n</script>\n","import { inject } from 'vue';\nimport type { VNode } from 'vue';\n\nexport type ConfirmOptions = {\n title?: string;\n message: string | VNode;\n confirmText?: string;\n cancelText?: string;\n cancelClassName?: string;\n confirmClassName?: string;\n dialogClassname?: string;\n /**\n * Custom footer actions. Jika diberikan sebagai function, akan menerima handleClose sebagai parameter.\n * Jika diberikan sebagai VNode, user harus handle close sendiri.\n */\n footerActions?:\n | ((handleClose: (answer: boolean) => void) => VNode)\n | VNode;\n};\n\nexport type ConfirmationContextValue = {\n confirm: (opts: ConfirmOptions) => Promise<boolean>;\n};\n\nexport const ConfirmationContextKey = Symbol('ConfirmationContext');\n\nexport function useConfirmation(): ConfirmationContextValue {\n const context = inject<ConfirmationContextValue>(ConfirmationContextKey);\n if (!context) {\n console.error('useConfirmation must be used within ConfirmationProvider');\n // Return a dummy function to prevent errors during development\n return {\n confirm: () => Promise.resolve(false),\n };\n }\n return context;\n}\n\n","<template>\n <div>\n <slot />\n <!-- Modal hanya dirender saat options !== null -->\n <Modal\n v-if=\"options\"\n v-model=\"isModalOpen\"\n :title=\"options.title\"\n :close-on-backdrop=\"true\"\n @close=\"handleClose(false)\"\n >\n <div class=\"ina-modal-confirmation__body\">\n <div>\n <component :is=\"messageComponent\" v-if=\"messageComponent\" />\n <span v-else-if=\"options && typeof options.message === 'string'\">{{\n options.message\n }}</span>\n </div>\n <component :is=\"footerComponent\" v-if=\"footerComponent\" />\n </div>\n </Modal>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {\n ref,\n computed,\n h,\n watch,\n provide,\n type VNode,\n type Component,\n} from 'vue';\nimport Modal from './Modal.vue';\nimport Button from './Button.vue';\nimport {\n ConfirmationContextKey,\n type ConfirmationContextValue,\n type ConfirmOptions,\n} from '../composables/useConfirmation';\n\nconst options = ref<ConfirmOptions | null>(null);\nconst isModalOpen = ref(false);\nlet pendingResolve: ((value: boolean) => void) | null = null;\n\nconst handleClose = (answer: boolean) => {\n if (!pendingResolve && !options.value) {\n // Already closed, ignore\n return;\n }\n if (pendingResolve) {\n pendingResolve(answer);\n }\n options.value = null;\n isModalOpen.value = false;\n pendingResolve = null;\n};\n\nconst defaultFooterActions = (\n cancelClassName: string,\n confirmClassName: string,\n cancelText: string,\n confirmText: string,\n handleCloseFn: (answer: boolean) => void\n): VNode => {\n return h('div', { class: 'ina-modal-confirmation__footer' }, [\n h(\n Button,\n {\n hierarchy: 'custom',\n size: 'sm',\n class: cancelClassName,\n onClick: () => handleCloseFn(false),\n },\n { default: () => cancelText }\n ),\n h(\n Button,\n {\n hierarchy: 'custom',\n size: 'sm',\n class: confirmClassName,\n onClick: () => handleCloseFn(true),\n },\n { default: () => confirmText }\n ),\n ]);\n};\n\nconst confirm = (opts: ConfirmOptions): Promise<boolean> => {\n return new Promise<boolean>((resolve) => {\n const defaultCancelClassName = 'ina-modal-confirmation__cancel';\n const defaultConfirmClassName = 'ina-modal-confirmation__confirm';\n const defaultCancelText = opts.cancelText ?? 'Batal';\n const defaultConfirmText = opts.confirmText ?? 'Ya';\n\n options.value = {\n title: opts.title ?? 'Confirmation',\n message: opts.message,\n confirmText: defaultConfirmText,\n cancelText: defaultCancelText,\n cancelClassName: opts.cancelClassName ?? defaultCancelClassName,\n confirmClassName: opts.confirmClassName ?? defaultConfirmClassName,\n dialogClassname: opts.dialogClassname ?? 'ina-modal-confirmation',\n footerActions:\n opts.footerActions ??\n ((handleCloseFn) =>\n defaultFooterActions(\n opts.cancelClassName ?? defaultCancelClassName,\n opts.confirmClassName ?? defaultConfirmClassName,\n defaultCancelText,\n defaultConfirmText,\n handleCloseFn\n )),\n } as ConfirmOptions;\n\n pendingResolve = resolve;\n isModalOpen.value = true;\n });\n};\n\n// Watch for modal close via v-model to sync with options\nwatch(isModalOpen, (newValue) => {\n if (!newValue && options.value && pendingResolve) {\n // Modal was closed via v-model (e.g., backdrop click), resolve as false\n handleClose(false);\n }\n});\n\n// Provide context ke child components\nconst contextValue: ConfirmationContextValue = {\n confirm,\n};\n\nprovide(ConfirmationContextKey, contextValue);\n\n// Computed untuk message component\nconst messageComponent = computed(() => {\n if (!options.value) return null;\n if (typeof options.value.message === 'string') return null;\n return options.value.message as VNode | Component;\n});\n\n// Computed untuk footer component\nconst footerComponent = computed(() => {\n if (!options.value) return null;\n if (!options.value.footerActions) return null;\n\n if (typeof options.value.footerActions === 'function') {\n return options.value.footerActions(handleClose);\n }\n\n return options.value.footerActions as VNode | Component;\n});\n</script>\n","<template>\n <div class=\"ina-toggle\" :class=\"toggleClasses\">\n <input\n v-bind=\"filteredAttrs\"\n :id=\"inputId\"\n ref=\"inputRef\"\n :checked=\"checked\"\n type=\"checkbox\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n class=\"ina-toggle__input\"\n @change=\"handleChange\"\n @focus=\"handleFocus\"\n @blur=\"handleBlur\"\n />\n\n <label :for=\"inputId\" class=\"ina-toggle__label\">\n <span :class=\"trackClasses\">\n <span :class=\"thumbClasses\" />\n </span>\n\n <span v-if=\"$slots.default || label\" class=\"ina-toggle__text\">\n <slot>{{ label }}</slot>\n </span>\n </label>\n\n <div v-if=\"statusMessage\" :class=\"statusClasses\">\n {{ statusMessage }}\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, useAttrs } from 'vue';\nexport interface ToggleProps {\n modelValue?: boolean;\n label?: string;\n size?: 'sm' | 'md';\n variant?: 'default' | 'primary' | 'success' | 'warning' | 'error';\n status?: 'neutral' | 'success' | 'error' | 'warning';\n statusMessage?: string;\n disabled?: boolean;\n readonly?: boolean;\n id?: string;\n}\n\nconst props = withDefaults(defineProps<ToggleProps>(), {\n modelValue: false,\n size: 'md',\n variant: 'default',\n status: 'neutral',\n disabled: false,\n readonly: false,\n});\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: boolean];\n change: [value: boolean];\n focus: [event: FocusEvent];\n blur: [event: FocusEvent];\n}>();\n\nconst attrs = useAttrs();\nconst inputRef = ref<HTMLInputElement>();\n\n// Generate unique ID for input, or use id from props/attrs if provided\nconst inputId = computed(() => {\n // Check if id is provided via props or attrs\n const providedId = props.id || (attrs.id as string);\n if (providedId) {\n return providedId;\n }\n return `toggle-${Math.random().toString(36).substr(2, 9)}`;\n});\n\n// Filter out id from attrs to avoid conflicts\nconst filteredAttrs = computed(() => {\n const { id, ...rest } = attrs;\n return rest;\n});\n\n// Use computed for checked state to always reflect modelValue\nconst checked = computed({\n get: () => props.modelValue || false,\n set: (value: boolean) => {\n emit('update:modelValue', value);\n },\n});\n\nconst toggleClasses = computed(() => {\n const classes = ['ina-toggle'];\n\n classes.push(`ina-toggle--size-${props.size}`);\n classes.push(`ina-toggle--variant-${props.variant}`);\n\n if (props.disabled) {\n classes.push('ina-toggle--disabled');\n }\n\n if (props.readonly) {\n classes.push('ina-toggle--readonly');\n }\n\n if (props.status !== 'neutral') {\n classes.push(`ina-toggle--status-${props.status}`);\n }\n\n if (checked.value) {\n classes.push('ina-toggle--checked');\n }\n\n return classes;\n});\n\nconst statusClasses = computed(() => {\n const classes = ['ina-toggle__status'];\n\n if (props.status !== 'neutral') {\n classes.push(`ina-toggle__status--${props.status}`);\n }\n\n return classes;\n});\n\nconst trackClasses = computed(() => {\n const classes = ['ina-toggle__track'];\n\n if (checked.value) {\n classes.push('ina-toggle__track--checked');\n }\n\n if (props.disabled) {\n classes.push('ina-toggle__track--disabled');\n }\n\n return classes;\n});\n\nconst thumbClasses = computed(() => {\n const classes = ['ina-toggle__thumb'];\n\n if (checked.value) {\n classes.push('ina-toggle__thumb--checked');\n }\n\n if (props.disabled) {\n classes.push('ina-toggle__thumb--disabled');\n }\n\n return classes;\n});\n\nconst handleChange = (event: Event) => {\n const target = event.target as HTMLInputElement;\n const newValue = target.checked;\n checked.value = newValue;\n emit('change', newValue);\n};\n\nconst handleFocus = (event: FocusEvent) => {\n emit('focus', event);\n};\n\nconst handleBlur = (event: FocusEvent) => {\n emit('blur', event);\n};\n</script>\n","<template>\n <div\n class=\"ina-tooltip\"\n :class=\"tooltipClasses\"\n @mouseenter=\"handleMouseEnter\"\n >\n <slot />\n <div class=\"ina-tooltip__content\" :class=\"contentClasses\" role=\"tooltip\">\n <!-- Custom content mode: render content directly without any structure -->\n <template v-if=\"customContent && $slots.content\">\n <slot name=\"content\" />\n </template>\n\n <!-- Basic variant: just title text -->\n <template v-else-if=\"variant === 'basic'\">\n <div class=\"ina-tooltip__bubble ina-tooltip__bubble--basic\">\n <slot name=\"title\">{{ title }}</slot>\n </div>\n </template>\n\n <!-- Light, Dark, or Media variant: card-like structure -->\n <template v-else>\n <div :class=\"['ina-tooltip__card', `ina-tooltip__card--${variant}`]\">\n <!-- Close button -->\n <button\n v-if=\"onClose\"\n type=\"button\"\n class=\"ina-tooltip__close\"\n aria-label=\"Close tooltip\"\n @click.stop=\"handleClose\"\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M18 6L6 18M6 6L18 18\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n\n <!-- Image section for media variant -->\n <div\n v-if=\"variant === 'media' && (image || $slots.image)\"\n class=\"ina-tooltip__image\"\n >\n <slot name=\"image\">\n <img v-if=\"typeof image === 'string'\" :src=\"image\" alt=\"\" />\n <component :is=\"image\" v-else-if=\"image\" />\n </slot>\n </div>\n\n <!-- Content section -->\n <div class=\"ina-tooltip__content-section\">\n <div v-if=\"title || $slots.title\" class=\"ina-tooltip__title\">\n <slot name=\"title\">{{ title }}</slot>\n </div>\n <div\n v-if=\"description || $slots.description\"\n class=\"ina-tooltip__description\"\n >\n <slot name=\"description\">{{ description }}</slot>\n </div>\n\n <!-- Custom content slot -->\n <div v-if=\"$slots.content\" class=\"ina-tooltip__custom-content\">\n <slot name=\"content\" />\n </div>\n\n <!-- Action buttons -->\n <div v-if=\"onClose || onNext\" class=\"ina-tooltip__actions\">\n <button\n v-if=\"onClose\"\n type=\"button\"\n class=\"ina-tooltip__action ina-tooltip__action--close\"\n @click.stop=\"handleClose\"\n >\n Tutup\n </button>\n <button\n v-if=\"onNext\"\n type=\"button\"\n class=\"ina-tooltip__action ina-tooltip__action--next\"\n @click.stop=\"handleNext\"\n >\n Lanjut\n </button>\n </div>\n </div>\n </div>\n </template>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nexport type TooltipPlacement = 'top' | 'bottom' | 'left' | 'right';\nexport type TooltipVariant = 'basic' | 'light' | 'dark' | 'media';\n\nexport interface TooltipProps {\n /**\n * Konten tooltip (teks) - untuk basic variant\n * Judul tooltip untuk light/dark/media variant\n */\n title?: string;\n\n /**\n * Deskripsi tooltip (untuk light/dark/media variant)\n */\n description?: string;\n\n /**\n * Image/thumbnail untuk media variant\n */\n image?: string;\n\n /**\n * Variant tooltip: basic, light, dark, media\n */\n variant?: TooltipVariant;\n\n /**\n * Posisi tooltip\n */\n placement?: TooltipPlacement;\n\n /**\n * Apakah menampilkan arrow\n */\n showArrow?: boolean;\n\n /**\n * Callback ketika close button diklik (untuk light/dark/media variant)\n */\n onClose?: () => void;\n\n /**\n * Callback ketika button \"Lanjut\" diklik (untuk light/dark/media variant)\n */\n onNext?: () => void;\n\n /**\n * Jika true, render content sebagai custom content sepenuhnya tanpa struktur card/bubble\n * Content akan diambil dari slot `content` (VNode)\n */\n customContent?: boolean;\n}\n\nconst props = withDefaults(defineProps<TooltipProps>(), {\n title: '',\n description: '',\n variant: 'basic',\n placement: 'top',\n showArrow: true,\n customContent: false,\n});\n\nconst emit = defineEmits<{\n close: [];\n next: [];\n}>();\n\nconst isClosed = ref(false);\n\nconst handleClose = () => {\n isClosed.value = true;\n if (props.onClose) {\n props.onClose();\n }\n emit('close');\n};\n\nconst handleNext = () => {\n isClosed.value = true;\n if (props.onNext) {\n props.onNext();\n }\n emit('next');\n};\n\n// Reset closed state when hovering over trigger\nconst handleMouseEnter = () => {\n if (isClosed.value) {\n isClosed.value = false;\n }\n};\n\nconst tooltipClasses = computed(() => {\n const classes = ['ina-tooltip', `ina-tooltip--placement-${props.placement}`];\n if (isClosed.value) {\n classes.push('ina-tooltip--closed');\n }\n return classes;\n});\n\nconst contentClasses = computed(() => {\n const classes = ['ina-tooltip__content'];\n if (props.showArrow) {\n classes.push('ina-tooltip__content--show-arrow');\n }\n classes.push(`ina-tooltip--variant-${props.variant}`);\n return classes;\n});\n</script>\n\n<style scoped>\n/* Styles sudah di-import dari tooltip-test.css */\n</style>\n","import defaultColorTokens from '@idds/styles/tailwind/ts/default';\n\nexport type BrandName =\n | 'inagov'\n | 'inaku'\n | 'bgn'\n | 'bkn'\n | 'lan'\n | 'panrb'\n | 'default';\n\nexport interface CustomTheme {\n name: string;\n colors: Record<string, string>;\n}\n\n// Predefined brand names (CSS handles the actual colors)\nconst predefinedBrands: BrandName[] = [\n 'inagov',\n 'inaku',\n 'bgn',\n 'bkn',\n 'lan',\n 'panrb',\n 'default',\n];\n\n// Current active theme\nlet currentTheme: { name: string; colors?: Record<string, string> } = {\n name: 'default',\n};\n\n/**\n * Set brand theme by name\n * @param brandName - Name of the brand theme\n */\nexport function setBrandTheme(brandName: BrandName): void {\n if (!predefinedBrands.includes(brandName)) {\n currentTheme = { name: 'default' };\n } else {\n currentTheme = { name: brandName };\n }\n\n applyThemeToDocument();\n}\n\n/**\n * Set custom theme\n * @param customTheme - Custom theme object\n */\nexport function setCustomTheme(customTheme: CustomTheme): void {\n currentTheme = customTheme;\n applyThemeToDocument();\n}\n\n/**\n * Get current active theme\n */\nexport function getCurrentTheme(): {\n name: string;\n colors?: Record<string, string>;\n} {\n return currentTheme;\n}\n\n/**\n * Get available brand names\n */\nexport function getAvailableBrands(): BrandName[] {\n return predefinedBrands;\n}\n\n/**\n * Apply theme colors to CSS custom properties\n */\nfunction applyThemeToDocument(): void {\n if (typeof document === 'undefined') return;\n\n const root = document.documentElement;\n\n // For predefined brand themes, set data attribute and apply default colors if needed\n if (predefinedBrands.includes(currentTheme.name as BrandName)) {\n if (currentTheme.name === 'default') {\n // For default theme, remove brand attribute and apply default primary colors\n root.removeAttribute('data-brand');\n applyDefaultPrimaryColors(root);\n } else {\n // For brand themes, set data attribute (CSS will handle the variables)\n root.setAttribute('data-brand', currentTheme.name);\n // Remove default primary colors to avoid conflicts\n removeDefaultPrimaryColors(root);\n }\n return;\n }\n\n // For custom themes, apply variables directly to style attribute\n if (currentTheme.colors) {\n // Clear any existing brand attribute\n root.removeAttribute('data-brand');\n // Remove default primary colors\n removeDefaultPrimaryColors(root);\n\n // Apply all color variables as inline styles\n Object.entries(currentTheme.colors).forEach(([key, value]) => {\n // Convert camelCase to kebab-case for CSS variables\n const cssVarName = `--ina-${key\n .replace(/([A-Z])/g, '-$1')\n .toLowerCase()}`;\n root.style.setProperty(cssVarName, value);\n });\n return;\n }\n}\n\n/**\n * Apply default primary colors to root element\n */\nfunction applyDefaultPrimaryColors(root: HTMLElement): void {\n Object.entries(defaultColorTokens).forEach(([key, value]) => {\n root.style.setProperty(key, value);\n });\n}\n\n/**\n * Remove default primary colors from root element\n */\nfunction removeDefaultPrimaryColors(root: HTMLElement): void {\n Object.keys(defaultColorTokens).forEach((key) => {\n root.style.removeProperty(key);\n });\n}\n\n/**\n * Initialize theme system\n * @param brandName - Initial brand name (optional)\n */\nexport function initializeTheme(brandName?: BrandName): void {\n if (brandName) {\n setBrandTheme(brandName);\n } else {\n // Apply default theme with default primary colors\n currentTheme = { name: 'default' };\n applyThemeToDocument();\n }\n}\n\n/**\n * Reset to default theme\n */\nexport function resetTheme(): void {\n setBrandTheme('default');\n}\n\n/**\n * Validate if brand exists\n * @param brandName - Brand name to validate\n */\nexport function isValidBrand(brandName: string): brandName is BrandName {\n return predefinedBrands.includes(brandName as BrandName);\n}\n\n// Auto-initialize on import\nif (typeof window !== 'undefined') {\n initializeTheme();\n}\n","<template>\n <div class=\"ina-single-file-upload\">\n <input\n v-bind=\"filteredAttrs\"\n :id=\"inputId\"\n ref=\"fileInputRef\"\n type=\"file\"\n :accept=\"props.accept\"\n :disabled=\"props.disabled\"\n class=\"ina-single-file-upload__input\"\n @change=\"handleFileChange\"\n />\n\n <div\n :class=\"containerClasses\"\n role=\"button\"\n :tabindex=\"props.disabled || file ? -1 : 0\"\n :aria-label=\"file ? `File: ${file.name}` : 'Upload file'\"\n @click=\"handleClick\"\n @focus=\"handleFocus\"\n @blur=\"handleBlur\"\n @dragover=\"handleDragOver\"\n @dragleave=\"handleDragLeave\"\n @drop=\"handleDrop\"\n >\n <!-- Default State -->\n <template v-if=\"!file && status === 'idle'\">\n <div\n class=\"ina-single-file-upload__icon-wrapper ina-single-file-upload__icon-wrapper--default\"\n >\n <IconUpload :size=\"24\" />\n </div>\n <div class=\"ina-single-file-upload__content\">\n <div class=\"ina-single-file-upload__title\">{{ props.title }}</div>\n <div class=\"ina-single-file-upload__description\">\n {{ props.description }}\n </div>\n </div>\n </template>\n\n <!-- Progress State -->\n <template v-if=\"!file && status === 'uploading'\">\n <div\n class=\"ina-single-file-upload__icon-wrapper ina-single-file-upload__icon-wrapper--default\"\n >\n <IconUpload :size=\"24\" />\n </div>\n <div class=\"ina-single-file-upload__progress\">\n <div class=\"ina-single-file-upload__progress-bar\">\n <div\n class=\"ina-single-file-upload__progress-fill\"\n :style=\"{ width: `${progress}%` }\"\n />\n </div>\n <div class=\"ina-single-file-upload__progress-text\">\n Uploading... {{ progress }}%\n </div>\n </div>\n </template>\n\n <!-- Success State -->\n <template v-if=\"file && status === 'success'\">\n <div\n class=\"ina-single-file-upload__icon-wrapper ina-single-file-upload__icon-wrapper--file\"\n >\n <component :is=\"fileIconComponent\" :size=\"16\" />\n </div>\n <div class=\"ina-single-file-upload__content\">\n <div class=\"ina-single-file-upload__title\">{{ file.name }}</div>\n <div class=\"ina-single-file-upload__description\">\n {{ props.description }}\n </div>\n </div>\n <button\n type=\"button\"\n class=\"ina-single-file-upload__delete-button\"\n aria-label=\"Remove file\"\n @click.stop=\"handleRemove\"\n >\n <IconTrash :size=\"18\" />\n </button>\n </template>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed, useAttrs } from 'vue';\nimport {\n validateFile,\n validateMagicNumber as validateFileMagicNumber,\n type FileValidationResult,\n} from '../utils/fileValidation';\nimport { sanitizeFileName } from '../utils/security';\nimport {\n IconUpload,\n IconTrash,\n IconFile,\n IconFileTypePdf,\n IconPhoto,\n} from '@tabler/icons-vue';\n\nexport type SingleFileUploadStatus = 'idle' | 'uploading' | 'success' | 'error';\n\nexport interface SingleFileUploadProps {\n /**\n * Title di dalam upload area (default: \"Unggah File\").\n */\n title?: string;\n\n /**\n * Description di dalam upload area.\n */\n description?: string;\n\n /**\n * Tipe file yang diizinkan (MIME types, e.g., \"image/*,application/pdf\").\n */\n accept?: string;\n\n /**\n * Ukuran maksimum file dalam bytes (0 = unlimited).\n */\n maxSize?: number;\n\n /**\n * Ekstensi file yang diizinkan (e.g., ['png', 'jpg', 'pdf']).\n */\n allowedExtensions?: string[];\n\n /**\n * Validasi magic number (file signature) sesuai rekomendasi OWASP.\n * Default: true untuk security maksimal.\n */\n validateMagicNumber?: boolean;\n\n /**\n * Apakah disabled.\n */\n disabled?: boolean;\n\n /**\n * Progress upload (0-100).\n */\n progress?: number;\n\n /**\n * Status upload.\n */\n status?: SingleFileUploadStatus;\n}\n\nconst props = withDefaults(defineProps<SingleFileUploadProps>(), {\n title: 'Unggah File',\n description: 'Description',\n accept: '',\n maxSize: 0,\n validateMagicNumber: true,\n disabled: false,\n});\n\nconst emit = defineEmits<{\n change: [file: File | null, error: FileValidationResult | null];\n remove: [];\n}>();\n\nconst attrs = useAttrs();\nconst fileInputRef = ref<HTMLInputElement>();\nconst file = ref<File | null>(null);\nconst internalProgress = ref<number>(0);\nconst internalStatus = ref<SingleFileUploadStatus>('idle');\nconst error = ref<FileValidationResult | null>(null);\nconst isActive = ref(false);\n\n// Generate ID for input from attrs if provided\nconst inputId = computed(() => {\n const providedId = (attrs.id as string) || (attrs.name as string);\n return providedId ? String(providedId) : undefined;\n});\n\n// Filter out id, name, type, accept, disabled, and class from attrs to avoid conflicts\n// (they're handled explicitly via props)\nconst filteredAttrs = computed(() => {\n const { id, name, type, accept, disabled, class: classAttr, ...rest } = attrs;\n return rest;\n});\n\n// Use external progress/status if provided, otherwise use internal\nconst progress = computed(() =>\n props.progress !== undefined ? props.progress : internalProgress.value\n);\nconst status = computed(() =>\n props.status !== undefined ? props.status : internalStatus.value\n);\n\nconst containerClasses = computed(() => [\n 'ina-single-file-upload__container',\n {\n 'ina-single-file-upload__container--active':\n isActive.value && !props.disabled && !file.value,\n 'ina-single-file-upload__container--disabled': props.disabled,\n },\n]);\n\n// Check file type\nconst isPdfFile = computed(() => {\n if (!file.value) return false;\n const fileType = file.value.type;\n const fileName = file.value.name.toLowerCase();\n return fileType === 'application/pdf' || fileName.endsWith('.pdf');\n});\n\nconst isImageFile = computed(() => {\n if (!file.value) return false;\n return file.value.type.startsWith('image/');\n});\n\n// Get file icon component based on file type (matching React implementation)\nconst fileIconComponent = computed(() => {\n if (!file.value) return null;\n\n const fileType = file.value.type;\n const fileName = file.value.name.toLowerCase();\n\n if (fileType === 'application/pdf' || fileName.endsWith('.pdf')) {\n return IconFileTypePdf;\n }\n\n if (fileType.startsWith('image/')) {\n return IconPhoto;\n }\n\n return IconFile;\n});\n\nconst triggerFileInput = () => {\n if (props.disabled || file.value) return;\n fileInputRef.value?.click();\n};\n\nconst handleFileChange = async (event: Event) => {\n const target = event.target as HTMLInputElement;\n const selectedFile = target.files?.[0];\n if (!selectedFile) return;\n\n // Sanitize file name for security\n const sanitizedFileName = sanitizeFileName(selectedFile.name);\n if (sanitizedFileName !== selectedFile.name) {\n const errorResult: FileValidationResult = {\n isValid: false,\n error: 'Nama file mengandung karakter yang tidak diizinkan',\n file: selectedFile,\n };\n file.value = null;\n error.value = errorResult;\n internalStatus.value = 'error';\n emit('change', null, errorResult);\n if (fileInputRef.value) {\n fileInputRef.value.value = '';\n }\n return;\n }\n\n // Validate allowedExtensions if provided\n if (props.allowedExtensions && props.allowedExtensions.length > 0) {\n const fileName = selectedFile.name.toLowerCase();\n const extension = fileName.substring(fileName.lastIndexOf('.') + 1);\n if (!props.allowedExtensions.includes(extension.toLowerCase())) {\n const errorResult: FileValidationResult = {\n isValid: false,\n error: `Ekstensi file harus: ${props.allowedExtensions.join(', ')}`,\n file: selectedFile,\n };\n file.value = null;\n error.value = errorResult;\n internalStatus.value = 'error';\n emit('change', null, errorResult);\n if (fileInputRef.value) {\n fileInputRef.value.value = '';\n }\n return;\n }\n }\n\n // Standard file validation\n const validation = validateFile(selectedFile, {\n allowedTypes: props.accept || undefined,\n maxSize: props.maxSize || undefined,\n validateExtension: true,\n });\n\n if (!validation.isValid) {\n file.value = null;\n error.value = validation;\n internalStatus.value = 'error';\n emit('change', null, validation);\n if (fileInputRef.value) {\n fileInputRef.value.value = '';\n }\n return;\n }\n\n // Magic number validation (if enabled)\n if (props.validateMagicNumber && selectedFile.type) {\n const magicValidation = await validateFileMagicNumber(\n selectedFile,\n selectedFile.type\n );\n if (!magicValidation.isValid) {\n const errorResult: FileValidationResult = {\n isValid: false,\n error: magicValidation.error || 'File signature tidak valid',\n file: selectedFile,\n };\n file.value = null;\n error.value = errorResult;\n internalStatus.value = 'error';\n emit('change', null, errorResult);\n if (fileInputRef.value) {\n fileInputRef.value.value = '';\n }\n return;\n }\n }\n\n // All validations passed\n file.value = selectedFile;\n error.value = null;\n internalStatus.value = 'success';\n emit('change', selectedFile, null);\n\n // Reset input\n if (fileInputRef.value) {\n fileInputRef.value.value = '';\n }\n};\n\nconst handleRemove = () => {\n file.value = null;\n error.value = null;\n internalProgress.value = 0;\n internalStatus.value = 'idle';\n isActive.value = false;\n if (fileInputRef.value) {\n fileInputRef.value.value = '';\n }\n emit('remove');\n emit('change', null, null);\n};\n\nconst handleClick = () => {\n if (props.disabled || file.value) return;\n triggerFileInput();\n};\n\nconst handleFocus = () => {\n if (props.disabled || file.value) return;\n isActive.value = true;\n};\n\nconst handleBlur = () => {\n isActive.value = false;\n};\n\nconst handleDragOver = (e: DragEvent) => {\n if (props.disabled || file.value) return;\n e.preventDefault();\n e.stopPropagation();\n isActive.value = true;\n};\n\nconst handleDragLeave = (e: DragEvent) => {\n if (props.disabled || file.value) return;\n e.preventDefault();\n e.stopPropagation();\n isActive.value = false;\n};\n\nconst handleDrop = async (e: DragEvent) => {\n if (props.disabled || file.value) return;\n e.preventDefault();\n e.stopPropagation();\n isActive.value = false;\n\n const droppedFile = e.dataTransfer?.files[0];\n if (!droppedFile) return;\n\n // Sanitize file name for security\n const sanitizedFileName = sanitizeFileName(droppedFile.name);\n if (sanitizedFileName !== droppedFile.name) {\n const errorResult: FileValidationResult = {\n isValid: false,\n error: 'Nama file mengandung karakter yang tidak diizinkan',\n file: droppedFile,\n };\n file.value = null;\n error.value = errorResult;\n internalStatus.value = 'error';\n emit('change', null, errorResult);\n return;\n }\n\n // Validate allowedExtensions if provided\n if (props.allowedExtensions && props.allowedExtensions.length > 0) {\n const fileName = droppedFile.name.toLowerCase();\n const extension = fileName.substring(fileName.lastIndexOf('.') + 1);\n if (!props.allowedExtensions.includes(extension.toLowerCase())) {\n const errorResult: FileValidationResult = {\n isValid: false,\n error: `Ekstensi file harus: ${props.allowedExtensions.join(', ')}`,\n file: droppedFile,\n };\n file.value = null;\n error.value = errorResult;\n internalStatus.value = 'error';\n emit('change', null, errorResult);\n return;\n }\n }\n\n // Standard file validation\n const validation = validateFile(droppedFile, {\n allowedTypes: props.accept || undefined,\n maxSize: props.maxSize || undefined,\n validateExtension: true,\n });\n\n if (!validation.isValid) {\n file.value = null;\n error.value = validation;\n internalStatus.value = 'error';\n emit('change', null, validation);\n return;\n }\n\n // Magic number validation (if enabled)\n if (props.validateMagicNumber && droppedFile.type) {\n const magicValidation = await validateFileMagicNumber(\n droppedFile,\n droppedFile.type\n );\n if (!magicValidation.isValid) {\n const errorResult: FileValidationResult = {\n isValid: false,\n error: magicValidation.error || 'File signature tidak valid',\n file: droppedFile,\n };\n file.value = null;\n error.value = errorResult;\n internalStatus.value = 'error';\n emit('change', null, errorResult);\n return;\n }\n }\n\n // All validations passed\n file.value = droppedFile;\n error.value = null;\n internalStatus.value = 'success';\n emit('change', droppedFile, null);\n};\n</script>\n","// Import CSS files\nimport './index.css';\n\nexport { default as inaColorTokens } from '@idds/styles/tailwind/ts/idds';\nexport { default as iddsColorTokens } from '@idds/styles/tailwind/ts/idds';\nexport { default as inagovColorTokens } from '@idds/styles/tailwind/ts/inagov';\nexport { default as inakuColorTokens } from '@idds/styles/tailwind/ts/inaku';\nexport { default as inapasColorTokens } from '@idds/styles/tailwind/ts/inapas';\nexport { default as bgnColorTokens } from '@idds/styles/tailwind/ts/bgn';\nexport { default as bknColorTokens } from '@idds/styles/tailwind/ts/bkn';\nexport { default as lanColorTokens } from '@idds/styles/tailwind/ts/lan';\nexport { default as panrbColorTokens } from '@idds/styles/tailwind/ts/panrb';\nexport { default as defaultColorTokens } from '@idds/styles/tailwind/ts/default';\n\n// Import components\nimport Accordion from './components/Accordion.vue';\nimport AccordionCard from './components/AccordionCard.vue';\nimport AccordionGroup from './components/AccordionGroup.vue';\nimport ActionDropdown from './components/ActionDropdown.vue';\nimport Alert from './components/Alert.vue';\nimport Avatar from './components/Avatar.vue';\nimport Badge from './components/Badge.vue';\nimport BottomSheet from './components/BottomSheet.vue';\nimport Breadcrumb from './components/Breadcrumb.vue';\nimport Button from './components/Button.vue';\nimport ButtonGroup from './components/ButtonGroup.vue';\nimport Card from './components/Card.vue';\nimport Checkbox from './components/Checkbox.vue';\nimport Chip from './components/Chip.vue';\nimport CircleProgressBar from './components/CircleProgressBar.vue';\nimport Collapse from './components/Collapse.vue';\nimport Divider from './components/Divider.vue';\nimport Dropdown from './components/Dropdown.vue';\nimport FieldInputTable from './components/FieldInputTable.vue';\nimport FileUpload from './components/FileUpload.vue';\nimport InputSearch from './components/InputSearch.vue';\nimport Modal from './components/Modal.vue';\nimport MonthPicker from './components/MonthPicker.vue';\nimport MultipleChoiceGrid from './components/MultipleChoiceGrid.vue';\nimport Pagination from './components/Pagination.vue';\nimport PasswordInput from './components/PasswordInput.vue';\nimport PhoneInput from './components/PhoneInput.vue';\nimport ProgressBar from './components/ProgressBar.vue';\nimport LinearProgressIndicator from './components/LinearProgressIndicator.vue';\nimport RadioInput from './components/RadioInput.vue';\nimport DatePicker from './components/DatePicker.vue';\nimport SelectDropdown from './components/SelectDropdown.vue';\nimport Drawer from './components/Drawer.vue';\nimport Skeleton from './components/Skeleton.vue';\nimport Spinner from './components/Spinner.vue';\nimport Stepper from './components/Stepper.vue';\nimport TabHorizontal from './components/TabHorizontal.vue';\nimport TabVertical from './components/TabVertical.vue';\nimport Table from './components/Table.vue';\nimport TableProgressBar from './components/TableProgressBar.vue';\nimport TextArea from './components/TextArea.vue';\nimport TextField from './components/TextField.vue';\nimport OneTimePassword from './components/OneTimePassword.vue';\nimport ThemeToggle from './components/ThemeToggle.vue';\nimport TimePicker from './components/TimePicker.vue';\nimport Toast from './components/Toast.vue';\nimport ToastProvider from './components/ToastProvider.vue';\nimport ConfirmationProvider from './components/ConfirmationProvider.vue';\nimport Toggle from './components/Toggle.vue';\nimport Tooltip from './components/Tooltip.vue';\nimport YearPicker from './components/YearPicker.vue';\n\n// Import themes\nimport { setBrandTheme, type BrandName, type CustomTheme } from './themes';\n\n// Export components\nexport {\n Accordion,\n AccordionCard,\n AccordionGroup,\n ActionDropdown,\n Alert,\n Avatar,\n Badge,\n BottomSheet,\n Breadcrumb,\n Button,\n ButtonGroup,\n Card,\n CircleProgressBar,\n Checkbox,\n Chip,\n Collapse,\n Divider,\n Dropdown,\n FieldInputTable,\n FileUpload,\n InputSearch,\n Modal,\n MonthPicker,\n MultipleChoiceGrid,\n Pagination,\n PasswordInput,\n PhoneInput,\n ProgressBar,\n LinearProgressIndicator,\n RadioInput,\n DatePicker,\n SelectDropdown,\n Drawer,\n Skeleton,\n Spinner,\n Stepper,\n TabHorizontal,\n TabVertical,\n Table,\n TableProgressBar,\n TextArea,\n TextField,\n OneTimePassword,\n ThemeToggle,\n TimePicker,\n Toast,\n ToastProvider,\n ConfirmationProvider,\n Toggle,\n Tooltip,\n YearPicker,\n};\n\n// Export themes\nexport { setBrandTheme };\n\n// Export types\nexport type { BrandName, CustomTheme };\nexport type { AccordionProps } from './components/Accordion.vue';\nexport type { AccordionCardProps } from './components/AccordionCard.vue';\nexport type { AccordionGroupProps } from './components/AccordionGroup.vue';\nexport type { ActionDropdownProps } from './components/ActionDropdown.vue';\nexport type { AlertProps } from './components/Alert.vue';\nexport type { AvatarProps } from './components/Avatar.vue';\nexport type { BadgeProps } from './components/Badge.vue';\nexport type { BottomSheetProps } from './components/BottomSheet.vue';\nexport type {\n BreadcrumbProps,\n BreadcrumbItem,\n} from './components/Breadcrumb.vue';\nexport type { ButtonProps } from './components/Button.vue';\nexport type {\n ButtonGroupProps,\n ButtonGroupOption,\n} from './components/ButtonGroup.vue';\nexport type { CardProps } from './components/Card.vue';\nexport type { CircleProgressBarProps } from './components/CircleProgressBar.vue';\nexport type { CheckboxProps } from './components/Checkbox.vue';\nexport type { ChipProps, ChipOption } from './components/Chip.vue';\nexport type { CollapseProps } from './components/Collapse.vue';\nexport type { DividerProps } from './components/Divider.vue';\nexport type { DropdownProps } from './components/Dropdown.vue';\nexport type { FieldInputTableProps } from './components/FieldInputTable.vue';\nexport type { FileUploadProps } from './components/FileUpload.vue';\nexport { default as SingleFileUpload } from './components/SingleFileUpload.vue';\nexport type {\n SingleFileUploadProps,\n SingleFileUploadStatus,\n} from './components/SingleFileUpload.vue';\nexport type { InputSearchProps } from './components/InputSearch.vue';\nexport type { ModalProps } from './components/Modal.vue';\nexport type { MonthPickerProps } from './components/MonthPicker.vue';\nexport type {\n MultipleChoiceGridProps,\n MultipleChoiceGridColumn,\n MultipleChoiceGridRow,\n} from './components/MultipleChoiceGrid.vue';\nexport type { PaginationProps } from './components/Pagination.vue';\nexport type { PasswordInputProps } from './components/PasswordInput.vue';\nexport type { PhoneInputProps } from './components/PhoneInput.vue';\nexport type { Country } from './utils/countries';\n\nexport type { ProgressBarProps } from './components/ProgressBar.vue';\nexport type { LinearProgressIndicatorProps } from './components/LinearProgressIndicator.vue';\nexport type { RadioInputProps } from './components/RadioInput.vue';\nexport type { DatePickerProps } from './components/DatePicker.vue';\nexport type {\n SelectDropdownProps,\n SelectOption,\n} from './components/SelectDropdown.vue';\nexport type { DrawerProps } from './components/Drawer.vue';\nexport type { SkeletonProps } from './components/Skeleton.vue';\nexport type { SpinnerProps } from './components/Spinner.vue';\nexport type { StepperProps, StepperItem } from './components/Stepper.vue';\nexport type {\n TabHorizontalProps,\n TabHorizontalItem,\n} from './components/TabHorizontal.vue';\nexport type {\n TabVerticalProps,\n TabVerticalItem,\n} from './components/TabVertical.vue';\nexport type {\n TableProps,\n Column,\n FetchParams,\n FetchResult,\n EditorProps,\n EditableColumn,\n} from './components/Table.vue';\nexport type { TableProgressBarProps } from './components/TableProgressBar.vue';\nexport type { TextAreaProps } from './components/TextArea.vue';\nexport type { TextFieldProps } from './components/TextField.vue';\nexport type {\n OneTimePasswordProps,\n OneTimePasswordLength,\n} from './components/OneTimePassword.vue';\nexport type { ThemeToggleProps } from './components/ThemeToggle.vue';\nexport type { TimePickerProps } from './components/TimePicker.vue';\nexport type { ToastProps } from './components/Toast.vue';\nexport {\n useToast,\n ToastContextKey,\n type ToastContextValue,\n type ToastOptions,\n} from './composables/useToast';\nexport {\n useConfirmation,\n ConfirmationContextKey,\n type ConfirmationContextValue,\n type ConfirmOptions,\n} from './composables/useConfirmation';\nexport type { ToggleProps } from './components/Toggle.vue';\nexport type {\n TooltipProps,\n TooltipPlacement,\n TooltipVariant,\n} from './components/Tooltip.vue';\nexport type { YearPickerProps } from './components/YearPicker.vue';\n\nexport {\n validateFile,\n validateMagicNumber as validateFileMagicNumber,\n formatFileSize,\n type FileValidationResult,\n} from './utils/fileValidation';\n\n// Default export\nexport default {\n Accordion,\n AccordionCard,\n AccordionGroup,\n ActionDropdown,\n Alert,\n Avatar,\n Badge,\n BottomSheet,\n Breadcrumb,\n Button,\n ButtonGroup,\n Card,\n CircleProgressBar,\n Checkbox,\n Chip,\n Collapse,\n Divider,\n Drawer,\n Dropdown,\n FieldInputTable,\n FileUpload,\n InputSearch,\n Modal,\n MonthPicker,\n MultipleChoiceGrid,\n Pagination,\n PasswordInput,\n PhoneInput,\n ProgressBar,\n LinearProgressIndicator,\n RadioInput,\n DatePicker,\n SelectDropdown,\n Skeleton,\n Spinner,\n Stepper,\n TabHorizontal,\n TabVertical,\n Table,\n TableProgressBar,\n TextArea,\n TextField,\n OneTimePassword,\n ThemeToggle,\n TimePicker,\n Toast,\n ToastProvider,\n ConfirmationProvider,\n Toggle,\n Tooltip,\n YearPicker,\n setBrandTheme,\n};\n"],"names":["_a","_createElementBlock","_normalizeClass","_createElementVNode","_hoisted_2","_renderSlot","_hoisted_3","_hoisted_5","_hoisted_1","_openBlock","_hoisted_4","_createBlock","_resolveDynamicComponent","_hoisted_6","_hoisted_7","_toDisplayString","_createVNode","_Transition","_hoisted_9","index","_unref","Icon3dCubeSphere","$slots","_Fragment","_renderList","_mergeProps","$emit","_createTextVNode","_hoisted_8","_hoisted_10","Button","_hoisted_11","_hoisted_13","_hoisted_15","_hoisted_17","_hoisted_18","_hoisted_19","_hoisted_20","_hoisted_21","_hoisted_22","$attrs","TextField","_Teleport","_hoisted_12","_hoisted_14","_hoisted_16","_hoisted_26","_withDirectives","_normalizeStyle","currentDate","_withModifiers","ProgressBar","r","TableProgressBar","Checkbox","Pagination","toast","Toast","validateFileMagicNumber","Accordion","Alert","Avatar","Badge","BottomSheet","Breadcrumb","ButtonGroup","Card","CircleProgressBar","Chip","Divider","FieldInputTable","FileUpload","InputSearch","MultipleChoiceGrid","PasswordInput","LinearProgressIndicator","RadioInput","Skeleton","Spinner","TabHorizontal","TabVertical","Table","TextArea","OneTimePassword","ThemeToggle","TimePicker","ToastProvider","ConfirmationProvider","Toggle"],"mappings":"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","x_google_ignoreList":[13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,61]}
1
+ {"version":3,"file":"index.es.js","sources":["../../styles/src/tailwind/ts/idds.ts","../../styles/src/tailwind/ts/inagov.ts","../../styles/src/tailwind/ts/inaku.ts","../../styles/src/tailwind/ts/inapas.ts","../../styles/src/tailwind/ts/bgn.ts","../../styles/src/tailwind/ts/bkn.ts","../../styles/src/tailwind/ts/lan.ts","../../styles/src/tailwind/ts/panrb.ts","../../styles/src/tailwind/ts/default.ts","../src/components/Accordion.vue","../src/components/AccordionCard.vue","../src/components/AccordionGroup.vue","../src/components/ActionDropdown.vue","../node_modules/@tabler/icons-vue/dist/esm/defaultAttributes.mjs","../node_modules/@tabler/icons-vue/dist/esm/createVueComponent.mjs","../node_modules/@tabler/icons-vue/dist/esm/icons/IconAlertCircle.mjs","../node_modules/@tabler/icons-vue/dist/esm/icons/IconAlertTriangle.mjs","../node_modules/@tabler/icons-vue/dist/esm/icons/IconArrowNarrowDown.mjs","../node_modules/@tabler/icons-vue/dist/esm/icons/IconArrowNarrowUp.mjs","../node_modules/@tabler/icons-vue/dist/esm/icons/IconCalendar.mjs","../node_modules/@tabler/icons-vue/dist/esm/icons/IconCheck.mjs","../node_modules/@tabler/icons-vue/dist/esm/icons/IconChevronDown.mjs","../node_modules/@tabler/icons-vue/dist/esm/icons/IconChevronLeft.mjs","../node_modules/@tabler/icons-vue/dist/esm/icons/IconChevronRight.mjs","../node_modules/@tabler/icons-vue/dist/esm/icons/IconChevronUp.mjs","../node_modules/@tabler/icons-vue/dist/esm/icons/IconCircleCheck.mjs","../node_modules/@tabler/icons-vue/dist/esm/icons/IconCircleX.mjs","../node_modules/@tabler/icons-vue/dist/esm/icons/IconClock.mjs","../node_modules/@tabler/icons-vue/dist/esm/icons/IconCube3dSphere.mjs","../node_modules/@tabler/icons-vue/dist/esm/icons/IconFileTypePdf.mjs","../node_modules/@tabler/icons-vue/dist/esm/icons/IconFile.mjs","../node_modules/@tabler/icons-vue/dist/esm/icons/IconInfoCircle.mjs","../node_modules/@tabler/icons-vue/dist/esm/icons/IconLoader2.mjs","../node_modules/@tabler/icons-vue/dist/esm/icons/IconMoon.mjs","../node_modules/@tabler/icons-vue/dist/esm/icons/IconPhoto.mjs","../node_modules/@tabler/icons-vue/dist/esm/icons/IconRotateClockwise.mjs","../node_modules/@tabler/icons-vue/dist/esm/icons/IconSun.mjs","../node_modules/@tabler/icons-vue/dist/esm/icons/IconTrash.mjs","../node_modules/@tabler/icons-vue/dist/esm/icons/IconUpload.mjs","../node_modules/@tabler/icons-vue/dist/esm/icons/IconX.mjs","../src/components/Alert.vue","../src/components/Avatar.vue","../src/components/Badge.vue","../src/components/BottomSheet.vue","../src/components/Breadcrumb.vue","../src/components/Button.vue","../src/components/ButtonGroup.vue","../src/components/Card.vue","../src/components/Checkbox.vue","../src/utils/security.ts","../src/components/TextField.vue","../src/components/Chip.vue","../src/components/CircleProgressBar.vue","../src/components/Collapse.vue","../src/components/Divider.vue","../src/components/Dropdown.vue","../src/components/FieldInputTable.vue","../src/utils/fileValidation.ts","../src/components/FileUpload.vue","../src/components/InputSearch.vue","../src/components/Modal.vue","../node_modules/clsx/dist/clsx.mjs","../src/components/MonthPicker.vue","../src/components/MultipleChoiceGrid.vue","../src/components/Pagination.vue","../src/components/PasswordInput.vue","../src/utils/countries.ts","../src/components/PhoneInput.vue","../src/components/ProgressBar.vue","../src/components/LinearProgressIndicator.vue","../src/components/RadioInput.vue","../src/components/YearPicker.vue","../src/components/DatePicker.vue","../src/components/SelectDropdown.vue","../src/components/Drawer.vue","../src/components/Skeleton.vue","../src/components/Spinner.vue","../src/components/Stepper.vue","../src/components/TabHorizontal.vue","../src/components/TabVertical.vue","../src/components/TableProgressBar.vue","../src/components/Table.vue","../src/components/TextArea.vue","../src/components/OneTimePassword.vue","../src/components/ThemeToggle.vue","../src/components/TimePicker.vue","../src/components/Toast.vue","../src/composables/useToast.ts","../src/components/ToastProvider.vue","../src/composables/useConfirmation.ts","../src/components/ConfirmationProvider.vue","../src/components/Toggle.vue","../src/components/Tooltip.vue","../src/themes/index.ts","../src/components/SingleFileUpload.vue","../src/index.ts"],"sourcesContent":["/**\n * INA Digital Color Tokens for Tailwind CSS v3\n *\n * This file provides color tokens that reference CSS custom properties\n * from @idds/styles. Use these tokens in your tailwind.config.js:\n *\n * @example\n * ```js\n * import iddsColorTokens from '@idds/styles/tailwind/ts/idds';\n *\n * export default {\n * theme: {\n * extend: {\n * colors: iddsColorTokens,\n * },\n * },\n * };\n * ```\n *\n * Then you can use classes like: text-neutral-500, bg-blue-500, etc.\n */\n\nconst iddsColorTokens: Record<string, string> = {\n // Neutral Colors\n 'neutral-25': 'var(--ina-neutral-25)',\n 'neutral-50': 'var(--ina-neutral-50)',\n 'neutral-100': 'var(--ina-neutral-100)',\n 'neutral-200': 'var(--ina-neutral-200)',\n 'neutral-300': 'var(--ina-neutral-300)',\n 'neutral-400': 'var(--ina-neutral-400)',\n 'neutral-500': 'var(--ina-neutral-500)',\n 'neutral-600': 'var(--ina-neutral-600)',\n 'neutral-700': 'var(--ina-neutral-700)',\n 'neutral-800': 'var(--ina-neutral-800)',\n 'neutral-900': 'var(--ina-neutral-900)',\n 'neutral-1000': 'var(--ina-neutral-1000)',\n\n // Blue Colors\n 'blue-50': 'var(--ina-blue-50)',\n 'blue-100': 'var(--ina-blue-100)',\n 'blue-200': 'var(--ina-blue-200)',\n 'blue-300': 'var(--ina-blue-300)',\n 'blue-400': 'var(--ina-blue-400)',\n 'blue-500': 'var(--ina-blue-500)',\n 'blue-600': 'var(--ina-blue-600)',\n 'blue-700': 'var(--ina-blue-700)',\n 'blue-800': 'var(--ina-blue-800)',\n 'blue-900': 'var(--ina-blue-900)',\n\n // Cyan Colors\n 'cyan-50': 'var(--ina-cyan-50)',\n 'cyan-100': 'var(--ina-cyan-100)',\n 'cyan-200': 'var(--ina-cyan-200)',\n 'cyan-300': 'var(--ina-cyan-300)',\n 'cyan-400': 'var(--ina-cyan-400)',\n 'cyan-500': 'var(--ina-cyan-500)',\n 'cyan-600': 'var(--ina-cyan-600)',\n 'cyan-700': 'var(--ina-cyan-700)',\n 'cyan-800': 'var(--ina-cyan-800)',\n 'cyan-900': 'var(--ina-cyan-900)',\n\n // Green Colors\n 'green-50': 'var(--ina-green-50)',\n 'green-100': 'var(--ina-green-100)',\n 'green-200': 'var(--ina-green-200)',\n 'green-300': 'var(--ina-green-300)',\n 'green-400': 'var(--ina-green-400)',\n 'green-500': 'var(--ina-green-500)',\n 'green-600': 'var(--ina-green-600)',\n 'green-700': 'var(--ina-green-700)',\n 'green-800': 'var(--ina-green-800)',\n 'green-900': 'var(--ina-green-900)',\n\n // Lime Colors\n 'lime-50': 'var(--ina-lime-50)',\n 'lime-100': 'var(--ina-lime-100)',\n 'lime-200': 'var(--ina-lime-200)',\n 'lime-300': 'var(--ina-lime-300)',\n 'lime-400': 'var(--ina-lime-400)',\n 'lime-500': 'var(--ina-lime-500)',\n 'lime-600': 'var(--ina-lime-600)',\n 'lime-700': 'var(--ina-lime-700)',\n 'lime-800': 'var(--ina-lime-800)',\n 'lime-900': 'var(--ina-lime-900)',\n\n // Yellow Colors\n 'yellow-50': 'var(--ina-yellow-50)',\n 'yellow-100': 'var(--ina-yellow-100)',\n 'yellow-200': 'var(--ina-yellow-200)',\n 'yellow-300': 'var(--ina-yellow-300)',\n 'yellow-400': 'var(--ina-yellow-400)',\n 'yellow-500': 'var(--ina-yellow-500)',\n 'yellow-600': 'var(--ina-yellow-600)',\n 'yellow-700': 'var(--ina-yellow-700)',\n 'yellow-800': 'var(--ina-yellow-800)',\n 'yellow-900': 'var(--ina-yellow-900)',\n\n // Orange Colors\n 'orange-50': 'var(--ina-orange-50)',\n 'orange-100': 'var(--ina-orange-100)',\n 'orange-200': 'var(--ina-orange-200)',\n 'orange-300': 'var(--ina-orange-300)',\n 'orange-400': 'var(--ina-orange-400)',\n 'orange-500': 'var(--ina-orange-500)',\n 'orange-600': 'var(--ina-orange-600)',\n 'orange-700': 'var(--ina-orange-700)',\n 'orange-800': 'var(--ina-orange-800)',\n 'orange-900': 'var(--ina-orange-900)',\n\n // Red Colors\n 'red-50': 'var(--ina-red-50)',\n 'red-100': 'var(--ina-red-100)',\n 'red-200': 'var(--ina-red-200)',\n 'red-300': 'var(--ina-red-300)',\n 'red-400': 'var(--ina-red-400)',\n 'red-500': 'var(--ina-red-500)',\n 'red-600': 'var(--ina-red-600)',\n 'red-700': 'var(--ina-red-700)',\n 'red-800': 'var(--ina-red-800)',\n 'red-900': 'var(--ina-red-900)',\n\n // Pink Colors\n 'pink-50': 'var(--ina-pink-50)',\n 'pink-100': 'var(--ina-pink-100)',\n 'pink-200': 'var(--ina-pink-200)',\n 'pink-300': 'var(--ina-pink-300)',\n 'pink-400': 'var(--ina-pink-400)',\n 'pink-500': 'var(--ina-pink-500)',\n 'pink-600': 'var(--ina-pink-600)',\n 'pink-700': 'var(--ina-pink-700)',\n 'pink-800': 'var(--ina-pink-800)',\n 'pink-900': 'var(--ina-pink-900)',\n\n // Magenta Colors\n 'magenta-50': 'var(--ina-magenta-50)',\n 'magenta-100': 'var(--ina-magenta-100)',\n 'magenta-200': 'var(--ina-magenta-200)',\n 'magenta-300': 'var(--ina-magenta-300)',\n 'magenta-400': 'var(--ina-magenta-400)',\n 'magenta-500': 'var(--ina-magenta-500)',\n 'magenta-600': 'var(--ina-magenta-600)',\n 'magenta-700': 'var(--ina-magenta-700)',\n 'magenta-800': 'var(--ina-magenta-800)',\n 'magenta-900': 'var(--ina-magenta-900)',\n\n // Purple Colors\n 'purple-50': 'var(--ina-purple-50)',\n 'purple-100': 'var(--ina-purple-100)',\n 'purple-200': 'var(--ina-purple-200)',\n 'purple-300': 'var(--ina-purple-300)',\n 'purple-400': 'var(--ina-purple-400)',\n 'purple-500': 'var(--ina-purple-500)',\n 'purple-600': 'var(--ina-purple-600)',\n 'purple-700': 'var(--ina-purple-700)',\n 'purple-800': 'var(--ina-purple-800)',\n 'purple-900': 'var(--ina-purple-900)',\n\n // Indigo Colors\n 'indigo-50': 'var(--ina-indigo-50)',\n 'indigo-100': 'var(--ina-indigo-100)',\n 'indigo-200': 'var(--ina-indigo-200)',\n 'indigo-300': 'var(--ina-indigo-300)',\n 'indigo-400': 'var(--ina-indigo-400)',\n 'indigo-500': 'var(--ina-indigo-500)',\n 'indigo-600': 'var(--ina-indigo-600)',\n 'indigo-700': 'var(--ina-indigo-700)',\n 'indigo-800': 'var(--ina-indigo-800)',\n 'indigo-900': 'var(--ina-indigo-900)',\n\n // Product Colors (Background, Content, Stroke, Guide, Negative, Positive, Warning)\n 'background-primary': 'var(--ina-background-primary)',\n 'background-secondary': 'var(--ina-background-secondary)',\n 'background-tertiary': 'var(--ina-background-tertiary)',\n 'background-overlay': 'var(--ina-background-overlay)',\n\n 'content-primary': 'var(--ina-content-primary)',\n 'content-secondary': 'var(--ina-content-secondary)',\n 'content-tertiary': 'var(--ina-content-tertiary)',\n 'content-guide': 'var(--ina-content-guide)',\n 'content-negative': 'var(--ina-content-negative)',\n 'content-positive': 'var(--ina-content-positive)',\n\n 'stroke-primary': 'var(--ina-stroke-primary)',\n 'stroke-secondary': 'var(--ina-stroke-secondary)',\n 'stroke-tertiary': 'var(--ina-stroke-tertiary)',\n\n // Guide Colors (alias for blue)\n 'guide-50': 'var(--ina-guide-50)',\n 'guide-100': 'var(--ina-guide-100)',\n 'guide-200': 'var(--ina-guide-200)',\n 'guide-300': 'var(--ina-guide-300)',\n 'guide-400': 'var(--ina-guide-400)',\n 'guide-500': 'var(--ina-guide-500)',\n 'guide-600': 'var(--ina-guide-600)',\n 'guide-700': 'var(--ina-guide-700)',\n 'guide-800': 'var(--ina-guide-800)',\n 'guide-900': 'var(--ina-guide-900)',\n\n // Negative Colors (alias for red)\n 'negative-50': 'var(--ina-negative-50)',\n 'negative-100': 'var(--ina-negative-100)',\n 'negative-200': 'var(--ina-negative-200)',\n 'negative-300': 'var(--ina-negative-300)',\n 'negative-400': 'var(--ina-negative-400)',\n 'negative-500': 'var(--ina-negative-500)',\n 'negative-600': 'var(--ina-negative-600)',\n 'negative-700': 'var(--ina-negative-700)',\n 'negative-800': 'var(--ina-negative-800)',\n 'negative-900': 'var(--ina-negative-900)',\n\n // Positive Colors (alias for green)\n 'positive-50': 'var(--ina-positive-50)',\n 'positive-100': 'var(--ina-positive-100)',\n 'positive-200': 'var(--ina-positive-200)',\n 'positive-300': 'var(--ina-positive-300)',\n 'positive-400': 'var(--ina-positive-400)',\n 'positive-500': 'var(--ina-positive-500)',\n 'positive-600': 'var(--ina-positive-600)',\n 'positive-700': 'var(--ina-positive-700)',\n 'positive-800': 'var(--ina-positive-800)',\n 'positive-900': 'var(--ina-positive-900)',\n\n // Warning Colors (alias for orange)\n 'warning-50': 'var(--ina-warning-50)',\n 'warning-100': 'var(--ina-warning-100)',\n 'warning-200': 'var(--ina-warning-200)',\n 'warning-300': 'var(--ina-warning-300)',\n 'warning-400': 'var(--ina-warning-400)',\n 'warning-500': 'var(--ina-warning-500)',\n 'warning-600': 'var(--ina-warning-600)',\n 'warning-700': 'var(--ina-warning-700)',\n 'warning-800': 'var(--ina-warning-800)',\n 'warning-900': 'var(--ina-warning-900)',\n\n // Base Colors\n white: 'var(--ina-white)',\n black: 'var(--ina-black)',\n};\n\nexport default iddsColorTokens;\n","/**\n * InaGov Color Tokens for Tailwind CSS v3\n * Government Services Theme\n */\n\nconst inagovColorTokens: Record<string, string> = {\n // Primary shades\n 'primary-25': 'var(--ina-primary-25)',\n 'primary-50': 'var(--ina-primary-50)',\n 'primary-100': 'var(--ina-primary-100)',\n 'primary-200': 'var(--ina-primary-200)',\n 'primary-300': 'var(--ina-primary-300)',\n 'primary-400': 'var(--ina-primary-400)',\n 'primary-500': 'var(--ina-primary-500)',\n 'primary-600': 'var(--ina-primary-600)',\n 'primary-700': 'var(--ina-primary-700)',\n 'primary-800': 'var(--ina-primary-800)',\n 'primary-900': 'var(--ina-primary-900)',\n 'primary-primary': 'var(--ina-primary-primary)',\n\n // Secondary/Accent colors\n 'accent-100': 'var(--ina-accent-100)',\n 'accent-200': 'var(--ina-accent-200)',\n 'accent-300': 'var(--ina-accent-300)',\n 'accent-400': 'var(--ina-accent-400)',\n 'accent-500': 'var(--ina-accent-500)',\n 'accent-600': 'var(--ina-accent-600)',\n 'accent-700': 'var(--ina-accent-700)',\n\n // Interactive hover\n 'brand-hover': 'var(--ina-brand-hover)',\n 'neutral-hover': 'var(--ina-neutral-hover)',\n};\n\nexport default inagovColorTokens;\n","/**\n * InaKu Color Tokens for Tailwind CSS v3\n * Citizen Services Theme\n */\n\nconst inakuColorTokens: Record<string, string> = {\n // Primary shades\n 'primary-25': 'var(--ina-primary-25)',\n 'primary-50': 'var(--ina-primary-50)',\n 'primary-100': 'var(--ina-primary-100)',\n 'primary-200': 'var(--ina-primary-200)',\n 'primary-300': 'var(--ina-primary-300)',\n 'primary-400': 'var(--ina-primary-400)',\n 'primary-500': 'var(--ina-primary-500)',\n 'primary-600': 'var(--ina-primary-600)',\n 'primary-700': 'var(--ina-primary-700)',\n 'primary-800': 'var(--ina-primary-800)',\n 'primary-900': 'var(--ina-primary-900)',\n 'primary-primary': 'var(--ina-primary-primary)',\n\n // Secondary/Accent colors\n 'accent-100': 'var(--ina-accent-100)',\n 'accent-200': 'var(--ina-accent-200)',\n 'accent-300': 'var(--ina-accent-300)',\n 'accent-400': 'var(--ina-accent-400)',\n 'accent-500': 'var(--ina-accent-500)',\n 'accent-600': 'var(--ina-accent-600)',\n 'accent-700': 'var(--ina-accent-700)',\n\n // Interactive hover\n 'inaku-brand-hover': 'var(--ina-inaku-brand-hover)',\n 'inaku-neutral-hover': 'var(--ina-inaku-neutral-hover)',\n};\n\nexport default inakuColorTokens;\n","/**\n * InaPas Color Tokens for Tailwind CSS v3\n * Passport & Immigration Services Theme\n */\n\nconst inapasColorTokens: Record<string, string> = {\n // Primary shades\n 'primary-25': 'var(--ina-primary-25)',\n 'primary-50': 'var(--ina-primary-50)',\n 'primary-100': 'var(--ina-primary-100)',\n 'primary-200': 'var(--ina-primary-200)',\n 'primary-300': 'var(--ina-primary-300)',\n 'primary-400': 'var(--ina-primary-400)',\n 'primary-500': 'var(--ina-primary-500)',\n 'primary-600': 'var(--ina-primary-600)',\n 'primary-700': 'var(--ina-primary-700)',\n 'primary-800': 'var(--ina-primary-800)',\n 'primary-900': 'var(--ina-primary-900)',\n 'primary-primary': 'var(--ina-primary-primary)',\n\n // Accent colors\n 'accent-100': 'var(--ina-accent-100)',\n 'accent-200': 'var(--ina-accent-200)',\n 'accent-300': 'var(--ina-accent-300)',\n 'accent-400': 'var(--ina-accent-400)',\n 'accent-500': 'var(--ina-accent-500)',\n 'accent-600': 'var(--ina-accent-600)',\n 'accent-700': 'var(--ina-accent-700)',\n\n // Interactive hover\n 'inapas-brand-hover': 'var(--ina-inapas-brand-hover)',\n 'inapas-neutral-hover': 'var(--ina-inapas-neutral-hover)',\n};\n\nexport default inapasColorTokens;\n","/**\n * BGN Color Tokens for Tailwind CSS v3\n * Banking & Financial Services Theme\n */\n\nconst bgnColorTokens: Record<string, string> = {\n // Primary shades\n 'primary-50': 'var(--ina-primary-50)',\n 'primary-100': 'var(--ina-primary-100)',\n 'primary-200': 'var(--ina-primary-200)',\n 'primary-300': 'var(--ina-primary-300)',\n 'primary-400': 'var(--ina-primary-400)',\n 'primary-500': 'var(--ina-primary-500)',\n 'primary-600': 'var(--ina-primary-600)',\n 'primary-700': 'var(--ina-primary-700)',\n 'primary-800': 'var(--ina-primary-800)',\n 'primary-900': 'var(--ina-primary-900)',\n 'primary-primary': 'var(--ina-primary-primary)',\n};\n\nexport default bgnColorTokens;\n","/**\n * BKN Color Tokens for Tailwind CSS v3\n * Badan Kepegawaian Negara Theme\n */\n\nconst bknColorTokens: Record<string, string> = {\n // Primary shades\n 'primary-25': 'var(--ina-primary-25)',\n 'primary-50': 'var(--ina-primary-50)',\n 'primary-100': 'var(--ina-primary-100)',\n 'primary-200': 'var(--ina-primary-200)',\n 'primary-300': 'var(--ina-primary-300)',\n 'primary-400': 'var(--ina-primary-400)',\n 'primary-500': 'var(--ina-primary-500)',\n 'primary-600': 'var(--ina-primary-600)',\n 'primary-700': 'var(--ina-primary-700)',\n 'primary-800': 'var(--ina-primary-800)',\n 'primary-900': 'var(--ina-primary-900)',\n 'primary-primary': 'var(--ina-primary-primary)',\n\n // Secondary shades\n 'secondary-25': 'var(--ina-secondary-25)',\n 'secondary-50': 'var(--ina-secondary-50)',\n 'secondary-100': 'var(--ina-secondary-100)',\n 'secondary-200': 'var(--ina-secondary-200)',\n 'secondary-300': 'var(--ina-secondary-300)',\n 'secondary-400': 'var(--ina-secondary-400)',\n 'secondary-500': 'var(--ina-secondary-500)',\n 'secondary-600': 'var(--ina-secondary-600)',\n 'secondary-700': 'var(--ina-secondary-700)',\n 'secondary-800': 'var(--ina-secondary-800)',\n 'secondary-900': 'var(--ina-secondary-900)',\n\n // Interactive hover\n 'bkn-brand-hover': 'var(--ina-bkn-brand-hover)',\n 'bkn-neutral-hover': 'var(--ina-bkn-neutral-hover)',\n};\n\nexport default bknColorTokens;\n","/**\n * LAN Color Tokens for Tailwind CSS v3\n * Local Area Network Theme\n */\n\nconst lanColorTokens: Record<string, string> = {\n // Primary shades\n 'primary-25': 'var(--ina-primary-25)',\n 'primary-50': 'var(--ina-primary-50)',\n 'primary-100': 'var(--ina-primary-100)',\n 'primary-200': 'var(--ina-primary-200)',\n 'primary-300': 'var(--ina-primary-300)',\n 'primary-400': 'var(--ina-primary-400)',\n 'primary-500': 'var(--ina-primary-500)',\n 'primary-600': 'var(--ina-primary-600)',\n 'primary-700': 'var(--ina-primary-700)',\n 'primary-800': 'var(--ina-primary-800)',\n 'primary-900': 'var(--ina-primary-900)',\n 'primary-primary': 'var(--ina-primary-primary)',\n\n // Secondary shades\n 'secondary-25': 'var(--ina-secondary-25)',\n 'secondary-50': 'var(--ina-secondary-50)',\n 'secondary-100': 'var(--ina-secondary-100)',\n 'secondary-200': 'var(--ina-secondary-200)',\n 'secondary-300': 'var(--ina-secondary-300)',\n 'secondary-400': 'var(--ina-secondary-400)',\n 'secondary-500': 'var(--ina-secondary-500)',\n 'secondary-600': 'var(--ina-secondary-600)',\n 'secondary-700': 'var(--ina-secondary-700)',\n 'secondary-800': 'var(--ina-secondary-800)',\n 'secondary-900': 'var(--ina-secondary-900)',\n\n // Accent colors\n 'accent-red': 'var(--ina-accent-red)',\n 'accent-green': 'var(--ina-accent-green)',\n 'accent-blue': 'var(--ina-accent-blue)',\n 'accent-orange': 'var(--ina-accent-orange)',\n\n // Interactive hover\n 'lan-brand-hover': 'var(--ina-lan-brand-hover)',\n 'lan-neutral-hover': 'var(--ina-lan-neutral-hover)',\n};\n\nexport default lanColorTokens;\n","/**\n * PANRB Color Tokens for Tailwind CSS v3\n */\n\nconst panrbColorTokens: Record<string, string> = {\n // Primary shades\n 'primary-25': 'var(--ina-primary-25)',\n 'primary-50': 'var(--ina-primary-50)',\n 'primary-100': 'var(--ina-primary-100)',\n 'primary-200': 'var(--ina-primary-200)',\n 'primary-300': 'var(--ina-primary-300)',\n 'primary-400': 'var(--ina-primary-400)',\n 'primary-500': 'var(--ina-primary-500)',\n 'primary-600': 'var(--ina-primary-600)',\n 'primary-700': 'var(--ina-primary-700)',\n 'primary-800': 'var(--ina-primary-800)',\n 'primary-900': 'var(--ina-primary-900)',\n 'primary-primary': 'var(--ina-primary-primary)',\n\n // Secondary shades\n 'secondary-25': 'var(--ina-secondary-25)',\n 'secondary-50': 'var(--ina-secondary-50)',\n 'secondary-100': 'var(--ina-secondary-100)',\n 'secondary-200': 'var(--ina-secondary-200)',\n 'secondary-300': 'var(--ina-secondary-300)',\n 'secondary-400': 'var(--ina-secondary-400)',\n 'secondary-500': 'var(--ina-secondary-500)',\n 'secondary-600': 'var(--ina-secondary-600)',\n 'secondary-700': 'var(--ina-secondary-700)',\n 'secondary-800': 'var(--ina-secondary-800)',\n 'secondary-900': 'var(--ina-secondary-900)',\n\n // Accent colors\n 'accent-yellow': 'var(--ina-accent-yellow)',\n};\n\nexport default panrbColorTokens;\n","/**\n * Default Color Tokens for Tailwind CSS v3\n * Default Theme\n */\n\nconst defaultColorTokens: Record<string, string> = {\n // Primary shades\n 'primary-25': 'var(--ina-neutral-25)',\n 'primary-50': 'var(--ina-neutral-50)',\n 'primary-100': 'var(--ina-neutral-100)',\n 'primary-200': 'var(--ina-neutral-200)',\n 'primary-300': 'var(--ina-neutral-300)',\n 'primary-400': 'var(--ina-neutral-400)',\n 'primary-500': 'var(--ina-neutral-500)',\n 'primary-600': 'var(--ina-neutral-600)',\n 'primary-700': 'var(--ina-neutral-700)',\n 'primary-800': 'var(--ina-neutral-800)',\n 'primary-900': 'var(--ina-neutral-900)',\n 'primary-primary': 'var(--ina-neutral-900)',\n\n // Secondary shades\n 'secondary-25': '#f2f9fd',\n 'secondary-50': '#e3f0fb',\n 'secondary-100': '#c1e3f6',\n 'secondary-200': '#8accef',\n 'secondary-300': '#4cb2e4',\n 'secondary-400': '#269dd8',\n 'secondary-500': '#177ab2',\n 'secondary-600': '#146190',\n 'secondary-700': '#145378',\n 'secondary-800': '#164564',\n 'secondary-900': '#0f2d42',\n};\n\nexport default defaultColorTokens;\n","<template>\n <div class=\"ina-accordion\" :class=\"accordionClasses\">\n <button\n :id=\"headerId\"\n type=\"button\"\n class=\"ina-accordion__toggle\"\n :aria-expanded=\"isOpen\"\n :aria-controls=\"contentId\"\n :disabled=\"disabled\"\n @click=\"handleToggle\"\n >\n <div class=\"ina-accordion__title\">\n <slot name=\"title\">{{ title }}</slot>\n </div>\n\n <div class=\"ina-accordion__toggler\">\n <svg\n class=\"ina-accordion__icon\"\n :class=\"{ 'ina-accordion__icon--open': isOpen }\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M6 9L12 15L18 9\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </div>\n </button>\n\n <div\n :id=\"contentId\"\n class=\"ina-accordion__content\"\n :class=\"{ 'ina-accordion__content--open': isOpen }\"\n :aria-labelledby=\"headerId\"\n >\n <div class=\"ina-accordion__body\">\n <slot />\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, watch, inject, onMounted, onUnmounted } from 'vue';\nimport type { AccordionItem } from './types';\n\nexport interface AccordionProps {\n /**\n * Judul atau header yang selalu muncul.\n * Bisa berupa teks atau slot dengan nama \"title\".\n */\n title?: string;\n\n /**\n * Konten body yang muncul saat accordion dalam keadaan terbuka.\n */\n children?: any;\n\n /**\n * Apakah accordion terbuka secara default.\n */\n defaultOpen?: boolean;\n\n /**\n * Apakah accordion dalam mode controlled.\n * Jika true, state dikontrol oleh parent (AccordionGroup).\n */\n open?: boolean;\n\n /**\n * Callback ketika accordion di-toggle.\n */\n onToggle?: (isOpen: boolean) => void;\n\n /**\n * Apakah accordion disabled.\n */\n disabled?: boolean;\n}\n\nconst props = withDefaults(defineProps<AccordionProps>(), {\n title: '',\n defaultOpen: false,\n open: undefined,\n disabled: false,\n});\n\nconst emit = defineEmits<{\n toggle: [isOpen: boolean];\n}>();\n\n// Inject accordion group context jika ada\nconst accordionGroup = inject<{\n multiple: boolean;\n multipleOpen: boolean;\n registerItem: (item: AccordionItem) => number;\n unregisterItem: (item: AccordionItem) => void;\n handleItemToggle: (index: number, isOpen: boolean) => void;\n isItemOpen: (index: number) => boolean;\n getItemIndex: (itemId: string) => number;\n openIndexes?: { value: number[] };\n} | null>('accordionGroup', null);\n\n// Generate unique ID for this accordion instance\nconst itemId = ref(\n `accordion-${\n crypto.randomUUID?.() || Math.random().toString(36).substr(2, 9)\n }`\n);\nconst itemIndex = ref(-1);\nconst internalOpen = ref(props.defaultOpen);\n\n// Check apakah dalam group\nconst isInGroup = computed(() => accordionGroup !== null);\nconst isControlled = computed(\n () => props.open !== undefined || isInGroup.value\n);\n\n// Get open state\nconst isOpen = computed(() => {\n if (isInGroup.value && itemIndex.value >= 0) {\n // Access openIndexes untuk memastikan reactivity\n if (accordionGroup!.openIndexes) {\n // Trigger reactivity dengan mengakses value - ini akan membuat computed re-evaluate ketika openIndexes berubah\n accordionGroup!.openIndexes.value;\n }\n // isItemOpen adalah function yang mengakses openIndexes.value, jadi akan reactive\n return accordionGroup!.isItemOpen(itemIndex.value);\n }\n if (props.open !== undefined) {\n return props.open;\n }\n return internalOpen.value;\n});\n\n// Generate unique IDs\nconst headerId = computed(() => `accordion-header-${itemId.value}`);\nconst contentId = computed(() => `accordion-content-${itemId.value}`);\n\nconst accordionClasses = computed(() => {\n const classes = ['ina-accordion'];\n\n if (props.disabled) {\n classes.push('ina-accordion--disabled');\n }\n\n if (isOpen.value) {\n classes.push('ina-accordion--open');\n }\n\n return classes;\n});\n\nconst handleToggle = (event?: Event) => {\n if (props.disabled) return;\n\n // Prevent event propagation\n if (event) {\n event.stopPropagation();\n }\n\n const currentState = isOpen.value;\n const next = !currentState;\n\n if (isInGroup.value && itemIndex.value >= 0) {\n // Dalam group, gunakan group handler\n accordionGroup!.handleItemToggle(itemIndex.value, next);\n } else if (props.open !== undefined) {\n // Controlled mode dengan prop open - state dikelola oleh parent\n // Hanya emit event, tidak update internal state\n emit('toggle', next);\n props.onToggle?.(next);\n } else {\n // Uncontrolled mode atau dalam group tapi belum ter-register, update internal state\n internalOpen.value = next;\n emit('toggle', next);\n props.onToggle?.(next);\n }\n};\n\n// Register dengan group jika ada\nonMounted(() => {\n if (isInGroup.value) {\n const item: AccordionItem = {\n id: itemId.value,\n defaultOpen: props.defaultOpen,\n };\n itemIndex.value = accordionGroup!.registerItem(item);\n }\n});\n\n// Unregister dari group saat unmount\nonUnmounted(() => {\n if (isInGroup.value) {\n const item: AccordionItem = {\n id: itemId.value,\n defaultOpen: props.defaultOpen,\n };\n accordionGroup!.unregisterItem(item);\n itemIndex.value = -1;\n }\n});\n\n// Watch untuk sync controlled state\nwatch(\n () => props.open,\n (newValue) => {\n if (isControlled.value && newValue !== undefined) {\n // Controlled mode - state dikelola oleh parent\n }\n }\n);\n</script>\n","<template>\n <div class=\"ina-accordion-card\" :class=\"cardClasses\">\n <div class=\"ina-accordion-card__item\">\n <button\n :id=\"headerId\"\n type=\"button\"\n class=\"ina-accordion-card__header\"\n :aria-expanded=\"isOpen\"\n :aria-controls=\"contentId\"\n @click=\"toggle\"\n >\n <div class=\"ina-accordion-card__header-content\">\n <div v-if=\"icon\" class=\"ina-accordion-card__icon\">\n <component :is=\"icon\" :size=\"20\" />\n </div>\n\n <div class=\"ina-accordion-card__title-section\">\n <h3 class=\"ina-accordion-card__title\">\n <slot name=\"title\">{{ title }}</slot>\n </h3>\n <p v-if=\"subtitle\" class=\"ina-accordion-card__subtitle\">\n {{ subtitle }}\n </p>\n </div>\n </div>\n\n <svg\n class=\"ina-accordion-card__chevron\"\n :class=\"{ 'ina-accordion-card__chevron--open': isOpen }\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M6 9L12 15L18 9\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n\n <Transition name=\"accordion\">\n <div\n v-if=\"isOpen\"\n :id=\"contentId\"\n class=\"ina-accordion-card__content\"\n :aria-labelledby=\"headerId\"\n >\n <div class=\"ina-accordion-card__body\">\n <slot />\n </div>\n </div>\n </Transition>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport type { Component } from 'vue';\nexport interface AccordionCardProps {\n title?: string;\n subtitle?: string;\n icon?: Component;\n defaultOpen?: boolean;\n variant?: 'default' | 'bordered' | 'filled';\n size?: 'sm' | 'md' | 'lg';\n disabled?: boolean;\n}\n\nconst props = withDefaults(defineProps<AccordionCardProps>(), {\n title: '',\n subtitle: '',\n defaultOpen: false,\n variant: 'default',\n size: 'md',\n disabled: false,\n});\n\nconst emit = defineEmits<{\n toggle: [isOpen: boolean];\n}>();\n\nconst isOpen = ref(props.defaultOpen);\n\n// Generate unique IDs\nconst headerId = computed(\n () => `accordion-card-header-${Math.random().toString(36).substr(2, 9)}`\n);\nconst contentId = computed(\n () => `accordion-card-content-${Math.random().toString(36).substr(2, 9)}`\n);\n\nconst cardClasses = computed(() => {\n const classes = ['ina-accordion-card'];\n\n classes.push(`ina-accordion-card--variant-${props.variant}`);\n classes.push(`ina-accordion-card--size-${props.size}`);\n\n if (props.disabled) {\n classes.push('ina-accordion-card--disabled');\n }\n\n if (isOpen.value) {\n classes.push('ina-accordion-card--open');\n }\n\n return classes;\n});\n\nconst toggle = () => {\n if (props.disabled) return;\n\n isOpen.value = !isOpen.value;\n emit('toggle', isOpen.value);\n};\n</script>\n\n<style scoped>\n.accordion-enter-active,\n.accordion-leave-active {\n transition: all 0.3s ease;\n overflow: hidden;\n}\n\n.accordion-enter-from,\n.accordion-leave-to {\n max-height: 0;\n opacity: 0;\n}\n\n.accordion-enter-to,\n.accordion-leave-from {\n max-height: 1000px;\n opacity: 1;\n}\n</style>\n","<template>\n <div class=\"ina-accordion-group\">\n <slot />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { provide, ref, computed } from 'vue';\nimport type { AccordionItem } from './types';\n\nexport interface AccordionGroupProps {\n /**\n * Apakah multiple accordion bisa terbuka bersamaan.\n * Default: false (hanya 1 yang terbuka)\n * @deprecated Gunakan multipleOpen sebagai gantinya\n */\n multiple?: boolean;\n\n /**\n * Apakah multiple accordion bisa terbuka bersamaan.\n * Default: false (hanya 1 yang terbuka, yang lain tertutup)\n * Jika true, memungkinkan lebih dari 1 accordion terbuka dalam 1 group\n */\n multipleOpen?: boolean;\n\n /**\n * Index accordion yang terbuka secara default (hanya untuk single mode).\n * Jika multipleOpen=true, gunakan defaultOpen pada masing-masing Accordion.\n */\n defaultIndex?: number;\n}\n\nconst props = withDefaults(defineProps<AccordionGroupProps>(), {\n multiple: false,\n multipleOpen: false,\n defaultIndex: undefined,\n});\n\n// multipleOpen takes precedence over multiple (for backward compatibility)\nconst allowMultiple = computed(() => props.multipleOpen || props.multiple || false);\n\nconst emit = defineEmits<{\n change: [openIndexes: number[]];\n}>();\n\nconst items = ref<Map<string, number>>(new Map());\nconst openIndexes = ref<number[]>(props.defaultIndex !== undefined ? [props.defaultIndex] : []);\n\n// Register accordion item dan return index\nconst registerItem = (item: AccordionItem): number => {\n const index = items.value.size;\n items.value.set(item.id, index);\n \n // Jika item memiliki defaultOpen\n if (item.defaultOpen) {\n if (allowMultiple.value) {\n // Multiple mode: tambahkan index ke array jika belum ada\n if (!openIndexes.value.includes(index)) {\n openIndexes.value = [...openIndexes.value, index];\n }\n } else {\n // Single mode: hanya set jika belum ada yang terbuka\n if (openIndexes.value.length === 0) {\n openIndexes.value = [index];\n }\n }\n }\n \n return index;\n};\n\n// Unregister accordion item\nconst unregisterItem = (item: AccordionItem) => {\n const index = items.value.get(item.id);\n if (index !== undefined) {\n items.value.delete(item.id);\n // Update openIndexes setelah item dihapus\n openIndexes.value = openIndexes.value\n .filter((idx) => idx !== index)\n .map((idx) => (idx > index ? idx - 1 : idx));\n \n // Rebuild map dengan index baru\n const newMap = new Map<string, number>();\n let newIndex = 0;\n items.value.forEach((_, id) => {\n newMap.set(id, newIndex);\n newIndex++;\n });\n items.value = newMap;\n }\n};\n\n// Handle toggle dari accordion item\nconst handleItemToggle = (index: number, isOpen: boolean) => {\n if (allowMultiple.value) {\n // Multiple mode: tambah/hapus dari array\n if (isOpen) {\n if (!openIndexes.value.includes(index)) {\n openIndexes.value = [...openIndexes.value, index];\n }\n } else {\n openIndexes.value = openIndexes.value.filter((idx) => idx !== index);\n }\n } else {\n // Single mode: hanya 1 yang terbuka (yang lain tertutup)\n if (isOpen) {\n openIndexes.value = [index];\n } else {\n openIndexes.value = [];\n }\n }\n \n emit('change', [...openIndexes.value]);\n};\n\n// Check apakah item terbuka (function yang selalu mengakses reactive value)\nconst isItemOpen = (index: number): boolean => {\n return openIndexes.value.includes(index);\n};\n\n// Get index dari item id\nconst getItemIndex = (itemId: string): number => {\n return items.value.get(itemId) ?? -1;\n};\n\nprovide('accordionGroup', {\n multiple: allowMultiple.value,\n multipleOpen: allowMultiple.value,\n registerItem,\n unregisterItem,\n handleItemToggle,\n isItemOpen,\n getItemIndex,\n // Provide openIndexes untuk reactivity\n openIndexes: computed(() => openIndexes.value),\n});\n</script>\n\n<style scoped>\n.ina-accordion-group {\n display: flex;\n flex-direction: column;\n}\n</style>\n\n","<template>\n <div class=\"ina-action-dropdown\" :class=\"containerClasses\">\n <button\n ref=\"triggerRef\"\n type=\"button\"\n :class=\"triggerClasses\"\n :disabled=\"disabled\"\n @click=\"toggleDropdown\"\n @keydown=\"handleKeydown\"\n :aria-expanded=\"isOpen\"\n :aria-haspopup=\"true\"\n >\n <span class=\"ina-action-dropdown__trigger-content\">\n <slot name=\"trigger\">\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"1\" fill=\"currentColor\" />\n <circle cx=\"12\" cy=\"5\" r=\"1\" fill=\"currentColor\" />\n <circle cx=\"12\" cy=\"19\" r=\"1\" fill=\"currentColor\" />\n </svg>\n </slot>\n </span>\n </button>\n\n <Transition name=\"dropdown\">\n <div\n v-if=\"isOpen\"\n ref=\"dropdownRef\"\n class=\"ina-action-dropdown__dropdown\"\n :style=\"dropdownStyle\"\n @click.stop\n >\n <div class=\"ina-action-dropdown__menu\">\n <slot />\n </div>\n </div>\n </Transition>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, nextTick, onMounted, onUnmounted } from 'vue';\nexport interface ActionDropdownProps {\n disabled?: boolean;\n variant?: 'default' | 'primary' | 'secondary' | 'ghost';\n size?: 'sm' | 'md' | 'lg';\n placement?: 'bottom-start' | 'bottom-end' | 'top-start' | 'top-end';\n}\n\nconst props = withDefaults(defineProps<ActionDropdownProps>(), {\n disabled: false,\n variant: 'default',\n size: 'md',\n placement: 'bottom-start',\n});\n\nconst emit = defineEmits<{\n open: [];\n close: [];\n}>();\n\nconst triggerRef = ref<HTMLButtonElement>();\nconst dropdownRef = ref<HTMLDivElement>();\nconst isOpen = ref(false);\nconst dropdownStyle = ref({});\n\nconst containerClasses = computed(() => {\n const classes = ['ina-action-dropdown'];\n\n if (props.disabled) {\n classes.push('ina-action-dropdown--disabled');\n }\n\n return classes;\n});\n\nconst triggerClasses = computed(() => {\n const classes = ['ina-action-dropdown__trigger'];\n\n classes.push(`ina-action-dropdown__trigger--variant-${props.variant}`);\n classes.push(`ina-action-dropdown__trigger--size-${props.size}`);\n\n if (props.disabled) {\n classes.push('ina-action-dropdown__trigger--disabled');\n }\n\n if (isOpen.value) {\n classes.push('ina-action-dropdown__trigger--open');\n }\n\n return classes;\n});\n\nconst toggleDropdown = () => {\n if (props.disabled) return;\n\n isOpen.value = !isOpen.value;\n\n if (isOpen.value) {\n emit('open');\n nextTick(() => {\n positionDropdown();\n });\n } else {\n emit('close');\n }\n};\n\nconst positionDropdown = () => {\n if (!triggerRef.value || !dropdownRef.value) return;\n\n const triggerRect = triggerRef.value.getBoundingClientRect();\n const dropdownRect = dropdownRef.value.getBoundingClientRect();\n const viewportHeight = window.innerHeight;\n const viewportWidth = window.innerWidth;\n\n let top = triggerRect.bottom + window.scrollY;\n let left = triggerRect.left + window.scrollX;\n\n // Adjust based on placement\n if (props.placement.includes('top')) {\n top = triggerRect.top + window.scrollY - dropdownRect.height;\n }\n\n if (props.placement.includes('end')) {\n left = triggerRect.right + window.scrollX - dropdownRect.width;\n }\n\n // Ensure dropdown stays within viewport\n if (top + dropdownRect.height > viewportHeight + window.scrollY) {\n top = triggerRect.top + window.scrollY - dropdownRect.height;\n }\n\n if (left + dropdownRect.width > viewportWidth + window.scrollX) {\n left = viewportWidth + window.scrollX - dropdownRect.width - 10;\n }\n\n if (left < window.scrollX) {\n left = window.scrollX + 10;\n }\n\n dropdownStyle.value = {\n position: 'absolute',\n top: `${top}px`,\n left: `${left}px`,\n zIndex: 1000,\n };\n};\n\nconst handleKeydown = (event: KeyboardEvent) => {\n if (props.disabled) return;\n\n switch (event.key) {\n case 'Enter':\n case ' ':\n event.preventDefault();\n toggleDropdown();\n break;\n case 'Escape':\n isOpen.value = false;\n emit('close');\n break;\n case 'ArrowDown':\n event.preventDefault();\n if (!isOpen.value) {\n toggleDropdown();\n }\n break;\n }\n};\n\nconst handleClickOutside = (event: Event) => {\n if (\n dropdownRef.value &&\n triggerRef.value &&\n !dropdownRef.value.contains(event.target as Node) &&\n !triggerRef.value.contains(event.target as Node)\n ) {\n isOpen.value = false;\n emit('close');\n }\n};\n\nonMounted(() => {\n document.addEventListener('click', handleClickOutside);\n window.addEventListener('resize', positionDropdown);\n window.addEventListener('scroll', positionDropdown);\n});\n\nonUnmounted(() => {\n document.removeEventListener('click', handleClickOutside);\n window.removeEventListener('resize', positionDropdown);\n window.removeEventListener('scroll', positionDropdown);\n});\n</script>\n\n<style scoped>\n.dropdown-enter-active,\n.dropdown-leave-active {\n transition: all 0.2s ease;\n}\n\n.dropdown-enter-from,\n.dropdown-leave-to {\n opacity: 0;\n transform: translateY(-8px);\n}\n</style>\n","/**\n * @license @tabler/icons-vue v3.35.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nvar defaultAttributes = {\n outline: {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n \"stroke-width\": 2,\n \"stroke-linecap\": \"round\",\n \"stroke-linejoin\": \"round\"\n },\n filled: {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"currentColor\",\n stroke: \"none\"\n }\n};\n\nexport { defaultAttributes as default };\n//# sourceMappingURL=defaultAttributes.mjs.map\n","/**\n * @license @tabler/icons-vue v3.35.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { h } from 'vue';\nimport defaultAttributes from './defaultAttributes.mjs';\n\nconst createVueComponent = (type, iconName, iconNamePascal, iconNode) => ({ color = \"currentColor\", size = 24, stroke = 2, title, class: classes, ...rest }, { attrs, slots }) => {\n let children = [...iconNode.map((child) => h(...child)), ...slots.default ? [slots.default()] : []];\n if (title)\n children = [h(\"title\", title), ...children];\n return h(\n \"svg\",\n {\n ...defaultAttributes[type],\n width: size,\n height: size,\n ...attrs,\n class: [\"tabler-icon\", `tabler-icon-${iconName}`],\n ...type === \"filled\" ? {\n fill: color\n } : {\n \"stroke-width\": stroke ?? defaultAttributes[type][\"stroke-width\"],\n stroke: color\n },\n ...rest\n },\n children\n );\n};\n\nexport { createVueComponent as default };\n//# sourceMappingURL=createVueComponent.mjs.map\n","/**\n * @license @tabler/icons-vue v3.35.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createVueComponent from '../createVueComponent.mjs';\n\nvar IconAlertCircle = createVueComponent(\"outline\", \"alert-circle\", \"AlertCircle\", [[\"path\", { \"d\": \"M3 12a9 9 0 1 0 18 0a9 9 0 0 0 -18 0\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M12 8v4\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M12 16h.01\", \"key\": \"svg-2\" }]]);\n\nexport { IconAlertCircle as default };\n//# sourceMappingURL=IconAlertCircle.mjs.map\n","/**\n * @license @tabler/icons-vue v3.35.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createVueComponent from '../createVueComponent.mjs';\n\nvar IconAlertTriangle = createVueComponent(\"outline\", \"alert-triangle\", \"AlertTriangle\", [[\"path\", { \"d\": \"M12 9v4\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M10.363 3.591l-8.106 13.534a1.914 1.914 0 0 0 1.636 2.871h16.214a1.914 1.914 0 0 0 1.636 -2.87l-8.106 -13.536a1.914 1.914 0 0 0 -3.274 0z\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M12 16h.01\", \"key\": \"svg-2\" }]]);\n\nexport { IconAlertTriangle as default };\n//# sourceMappingURL=IconAlertTriangle.mjs.map\n","/**\n * @license @tabler/icons-vue v3.35.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createVueComponent from '../createVueComponent.mjs';\n\nvar IconArrowNarrowDown = createVueComponent(\"outline\", \"arrow-narrow-down\", \"ArrowNarrowDown\", [[\"path\", { \"d\": \"M12 5l0 14\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M16 15l-4 4\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M8 15l4 4\", \"key\": \"svg-2\" }]]);\n\nexport { IconArrowNarrowDown as default };\n//# sourceMappingURL=IconArrowNarrowDown.mjs.map\n","/**\n * @license @tabler/icons-vue v3.35.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createVueComponent from '../createVueComponent.mjs';\n\nvar IconArrowNarrowUp = createVueComponent(\"outline\", \"arrow-narrow-up\", \"ArrowNarrowUp\", [[\"path\", { \"d\": \"M12 5l0 14\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M16 9l-4 -4\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M8 9l4 -4\", \"key\": \"svg-2\" }]]);\n\nexport { IconArrowNarrowUp as default };\n//# sourceMappingURL=IconArrowNarrowUp.mjs.map\n","/**\n * @license @tabler/icons-vue v3.35.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createVueComponent from '../createVueComponent.mjs';\n\nvar IconCalendar = createVueComponent(\"outline\", \"calendar\", \"Calendar\", [[\"path\", { \"d\": \"M4 7a2 2 0 0 1 2 -2h12a2 2 0 0 1 2 2v12a2 2 0 0 1 -2 2h-12a2 2 0 0 1 -2 -2v-12z\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M16 3v4\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M8 3v4\", \"key\": \"svg-2\" }], [\"path\", { \"d\": \"M4 11h16\", \"key\": \"svg-3\" }], [\"path\", { \"d\": \"M11 15h1\", \"key\": \"svg-4\" }], [\"path\", { \"d\": \"M12 15v3\", \"key\": \"svg-5\" }]]);\n\nexport { IconCalendar as default };\n//# sourceMappingURL=IconCalendar.mjs.map\n","/**\n * @license @tabler/icons-vue v3.35.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createVueComponent from '../createVueComponent.mjs';\n\nvar IconCheck = createVueComponent(\"outline\", \"check\", \"Check\", [[\"path\", { \"d\": \"M5 12l5 5l10 -10\", \"key\": \"svg-0\" }]]);\n\nexport { IconCheck as default };\n//# sourceMappingURL=IconCheck.mjs.map\n","/**\n * @license @tabler/icons-vue v3.35.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createVueComponent from '../createVueComponent.mjs';\n\nvar IconChevronDown = createVueComponent(\"outline\", \"chevron-down\", \"ChevronDown\", [[\"path\", { \"d\": \"M6 9l6 6l6 -6\", \"key\": \"svg-0\" }]]);\n\nexport { IconChevronDown as default };\n//# sourceMappingURL=IconChevronDown.mjs.map\n","/**\n * @license @tabler/icons-vue v3.35.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createVueComponent from '../createVueComponent.mjs';\n\nvar IconChevronLeft = createVueComponent(\"outline\", \"chevron-left\", \"ChevronLeft\", [[\"path\", { \"d\": \"M15 6l-6 6l6 6\", \"key\": \"svg-0\" }]]);\n\nexport { IconChevronLeft as default };\n//# sourceMappingURL=IconChevronLeft.mjs.map\n","/**\n * @license @tabler/icons-vue v3.35.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createVueComponent from '../createVueComponent.mjs';\n\nvar IconChevronRight = createVueComponent(\"outline\", \"chevron-right\", \"ChevronRight\", [[\"path\", { \"d\": \"M9 6l6 6l-6 6\", \"key\": \"svg-0\" }]]);\n\nexport { IconChevronRight as default };\n//# sourceMappingURL=IconChevronRight.mjs.map\n","/**\n * @license @tabler/icons-vue v3.35.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createVueComponent from '../createVueComponent.mjs';\n\nvar IconChevronUp = createVueComponent(\"outline\", \"chevron-up\", \"ChevronUp\", [[\"path\", { \"d\": \"M6 15l6 -6l6 6\", \"key\": \"svg-0\" }]]);\n\nexport { IconChevronUp as default };\n//# sourceMappingURL=IconChevronUp.mjs.map\n","/**\n * @license @tabler/icons-vue v3.35.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createVueComponent from '../createVueComponent.mjs';\n\nvar IconCircleCheck = createVueComponent(\"outline\", \"circle-check\", \"CircleCheck\", [[\"path\", { \"d\": \"M12 12m-9 0a9 9 0 1 0 18 0a9 9 0 1 0 -18 0\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M9 12l2 2l4 -4\", \"key\": \"svg-1\" }]]);\n\nexport { IconCircleCheck as default };\n//# sourceMappingURL=IconCircleCheck.mjs.map\n","/**\n * @license @tabler/icons-vue v3.35.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createVueComponent from '../createVueComponent.mjs';\n\nvar IconCircleX = createVueComponent(\"outline\", \"circle-x\", \"CircleX\", [[\"path\", { \"d\": \"M12 12m-9 0a9 9 0 1 0 18 0a9 9 0 1 0 -18 0\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M10 10l4 4m0 -4l-4 4\", \"key\": \"svg-1\" }]]);\n\nexport { IconCircleX as default };\n//# sourceMappingURL=IconCircleX.mjs.map\n","/**\n * @license @tabler/icons-vue v3.35.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createVueComponent from '../createVueComponent.mjs';\n\nvar IconClock = createVueComponent(\"outline\", \"clock\", \"Clock\", [[\"path\", { \"d\": \"M3 12a9 9 0 1 0 18 0a9 9 0 0 0 -18 0\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M12 7v5l3 3\", \"key\": \"svg-1\" }]]);\n\nexport { IconClock as default };\n//# sourceMappingURL=IconClock.mjs.map\n","/**\n * @license @tabler/icons-vue v3.35.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createVueComponent from '../createVueComponent.mjs';\n\nvar IconCube3dSphere = createVueComponent(\"outline\", \"cube-3d-sphere\", \"Cube3dSphere\", [[\"path\", { \"d\": \"M6 17.6l-2 -1.1v-2.5\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M4 10v-2.5l2 -1.1\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M10 4.1l2 -1.1l2 1.1\", \"key\": \"svg-2\" }], [\"path\", { \"d\": \"M18 6.4l2 1.1v2.5\", \"key\": \"svg-3\" }], [\"path\", { \"d\": \"M20 14v2.5l-2 1.12\", \"key\": \"svg-4\" }], [\"path\", { \"d\": \"M14 19.9l-2 1.1l-2 -1.1\", \"key\": \"svg-5\" }], [\"path\", { \"d\": \"M12 12l2 -1.1\", \"key\": \"svg-6\" }], [\"path\", { \"d\": \"M18 8.6l2 -1.1\", \"key\": \"svg-7\" }], [\"path\", { \"d\": \"M12 12l0 2.5\", \"key\": \"svg-8\" }], [\"path\", { \"d\": \"M12 18.5l0 2.5\", \"key\": \"svg-9\" }], [\"path\", { \"d\": \"M12 12l-2 -1.12\", \"key\": \"svg-10\" }], [\"path\", { \"d\": \"M6 8.6l-2 -1.1\", \"key\": \"svg-11\" }]]);\n\nexport { IconCube3dSphere as default };\n//# sourceMappingURL=IconCube3dSphere.mjs.map\n","/**\n * @license @tabler/icons-vue v3.35.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createVueComponent from '../createVueComponent.mjs';\n\nvar IconFileTypePdf = createVueComponent(\"outline\", \"file-type-pdf\", \"FileTypePdf\", [[\"path\", { \"d\": \"M14 3v4a1 1 0 0 0 1 1h4\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M5 12v-7a2 2 0 0 1 2 -2h7l5 5v4\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M5 18h1.5a1.5 1.5 0 0 0 0 -3h-1.5v6\", \"key\": \"svg-2\" }], [\"path\", { \"d\": \"M17 18h2\", \"key\": \"svg-3\" }], [\"path\", { \"d\": \"M20 15h-3v6\", \"key\": \"svg-4\" }], [\"path\", { \"d\": \"M11 15v6h1a2 2 0 0 0 2 -2v-2a2 2 0 0 0 -2 -2h-1z\", \"key\": \"svg-5\" }]]);\n\nexport { IconFileTypePdf as default };\n//# sourceMappingURL=IconFileTypePdf.mjs.map\n","/**\n * @license @tabler/icons-vue v3.35.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createVueComponent from '../createVueComponent.mjs';\n\nvar IconFile = createVueComponent(\"outline\", \"file\", \"File\", [[\"path\", { \"d\": \"M14 3v4a1 1 0 0 0 1 1h4\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M17 21h-10a2 2 0 0 1 -2 -2v-14a2 2 0 0 1 2 -2h7l5 5v11a2 2 0 0 1 -2 2z\", \"key\": \"svg-1\" }]]);\n\nexport { IconFile as default };\n//# sourceMappingURL=IconFile.mjs.map\n","/**\n * @license @tabler/icons-vue v3.35.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createVueComponent from '../createVueComponent.mjs';\n\nvar IconInfoCircle = createVueComponent(\"outline\", \"info-circle\", \"InfoCircle\", [[\"path\", { \"d\": \"M3 12a9 9 0 1 0 18 0a9 9 0 0 0 -18 0\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M12 9h.01\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M11 12h1v4h1\", \"key\": \"svg-2\" }]]);\n\nexport { IconInfoCircle as default };\n//# sourceMappingURL=IconInfoCircle.mjs.map\n","/**\n * @license @tabler/icons-vue v3.35.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createVueComponent from '../createVueComponent.mjs';\n\nvar IconLoader2 = createVueComponent(\"outline\", \"loader-2\", \"Loader2\", [[\"path\", { \"d\": \"M12 3a9 9 0 1 0 9 9\", \"key\": \"svg-0\" }]]);\n\nexport { IconLoader2 as default };\n//# sourceMappingURL=IconLoader2.mjs.map\n","/**\n * @license @tabler/icons-vue v3.35.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createVueComponent from '../createVueComponent.mjs';\n\nvar IconMoon = createVueComponent(\"outline\", \"moon\", \"Moon\", [[\"path\", { \"d\": \"M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z\", \"key\": \"svg-0\" }]]);\n\nexport { IconMoon as default };\n//# sourceMappingURL=IconMoon.mjs.map\n","/**\n * @license @tabler/icons-vue v3.35.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createVueComponent from '../createVueComponent.mjs';\n\nvar IconPhoto = createVueComponent(\"outline\", \"photo\", \"Photo\", [[\"path\", { \"d\": \"M15 8h.01\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M3 6a3 3 0 0 1 3 -3h12a3 3 0 0 1 3 3v12a3 3 0 0 1 -3 3h-12a3 3 0 0 1 -3 -3v-12z\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M3 16l5 -5c.928 -.893 2.072 -.893 3 0l5 5\", \"key\": \"svg-2\" }], [\"path\", { \"d\": \"M14 14l1 -1c.928 -.893 2.072 -.893 3 0l3 3\", \"key\": \"svg-3\" }]]);\n\nexport { IconPhoto as default };\n//# sourceMappingURL=IconPhoto.mjs.map\n","/**\n * @license @tabler/icons-vue v3.35.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createVueComponent from '../createVueComponent.mjs';\n\nvar IconRotateClockwise = createVueComponent(\"outline\", \"rotate-clockwise\", \"RotateClockwise\", [[\"path\", { \"d\": \"M4.05 11a8 8 0 1 1 .5 4m-.5 5v-5h5\", \"key\": \"svg-0\" }]]);\n\nexport { IconRotateClockwise as default };\n//# sourceMappingURL=IconRotateClockwise.mjs.map\n","/**\n * @license @tabler/icons-vue v3.35.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createVueComponent from '../createVueComponent.mjs';\n\nvar IconSun = createVueComponent(\"outline\", \"sun\", \"Sun\", [[\"path\", { \"d\": \"M12 12m-4 0a4 4 0 1 0 8 0a4 4 0 1 0 -8 0\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M3 12h1m8 -9v1m8 8h1m-9 8v1m-6.4 -15.4l.7 .7m12.1 -.7l-.7 .7m0 11.4l.7 .7m-12.1 -.7l-.7 .7\", \"key\": \"svg-1\" }]]);\n\nexport { IconSun as default };\n//# sourceMappingURL=IconSun.mjs.map\n","/**\n * @license @tabler/icons-vue v3.35.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createVueComponent from '../createVueComponent.mjs';\n\nvar IconTrash = createVueComponent(\"outline\", \"trash\", \"Trash\", [[\"path\", { \"d\": \"M4 7l16 0\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M10 11l0 6\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M14 11l0 6\", \"key\": \"svg-2\" }], [\"path\", { \"d\": \"M5 7l1 12a2 2 0 0 0 2 2h8a2 2 0 0 0 2 -2l1 -12\", \"key\": \"svg-3\" }], [\"path\", { \"d\": \"M9 7v-3a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v3\", \"key\": \"svg-4\" }]]);\n\nexport { IconTrash as default };\n//# sourceMappingURL=IconTrash.mjs.map\n","/**\n * @license @tabler/icons-vue v3.35.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createVueComponent from '../createVueComponent.mjs';\n\nvar IconUpload = createVueComponent(\"outline\", \"upload\", \"Upload\", [[\"path\", { \"d\": \"M4 17v2a2 2 0 0 0 2 2h12a2 2 0 0 0 2 -2v-2\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M7 9l5 -5l5 5\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M12 4l0 12\", \"key\": \"svg-2\" }]]);\n\nexport { IconUpload as default };\n//# sourceMappingURL=IconUpload.mjs.map\n","/**\n * @license @tabler/icons-vue v3.35.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createVueComponent from '../createVueComponent.mjs';\n\nvar IconX = createVueComponent(\"outline\", \"x\", \"X\", [[\"path\", { \"d\": \"M18 6l-12 12\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M6 6l12 12\", \"key\": \"svg-1\" }]]);\n\nexport { IconX as default };\n//# sourceMappingURL=IconX.mjs.map\n","<template>\n <div class=\"ina-alert\" :class=\"alertClasses\" role=\"alert\">\n <div v-if=\"icon || showVariantIcon\" class=\"ina-alert__icon\">\n <component v-if=\"icon\" :is=\"icon\" :size=\"20\" />\n <Icon3dCubeSphere\n v-else-if=\"showVariantIcon && variant === 'neutral'\"\n :size=\"20\"\n />\n <IconInfoCircle\n v-else-if=\"showVariantIcon && variant === 'info'\"\n :size=\"20\"\n />\n <IconCheck\n v-else-if=\"showVariantIcon && variant === 'success'\"\n :size=\"20\"\n />\n <IconAlertTriangle\n v-else-if=\"showVariantIcon && variant === 'caution'\"\n :size=\"20\"\n />\n <IconAlertCircle\n v-else-if=\"showVariantIcon && variant === 'critical'\"\n :size=\"20\"\n />\n </div>\n\n <div class=\"ina-alert__content\">\n <div class=\"ina-alert__text-section\">\n <div v-if=\"title\" class=\"ina-alert__title\">\n {{ title }}\n </div>\n\n <div v-if=\"$slots.default || message\" class=\"ina-alert__description\">\n <slot>{{ message }}</slot>\n </div>\n\n <div v-if=\"$slots.actions\" class=\"ina-alert__actions\">\n <slot name=\"actions\" />\n </div>\n </div>\n </div>\n\n <button\n v-if=\"dismissible\"\n type=\"button\"\n class=\"ina-alert__close-button\"\n @click=\"handleDismiss\"\n :aria-label=\"dismissLabel\"\n >\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M18 6L6 18M6 6L18 18\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport type { Component } from 'vue';\nimport {\n Icon3dCubeSphere,\n IconCheck,\n IconAlertTriangle,\n IconInfoCircle,\n IconAlertCircle,\n} from '@tabler/icons-vue';\nexport type AlertVariant =\n | 'neutral'\n | 'info'\n | 'success'\n | 'caution'\n | 'critical';\n\nexport interface AlertProps {\n /**\n * Variant warna alert.\n * - 'neutral' → Putih dengan border stroke-primary\n * - 'info' → Biru (Guide)\n * - 'success' → Hijau (Positive)\n * - 'caution' → Oranye (Warning)\n * - 'critical' → Merah (Negative)\n */\n variant?: AlertVariant;\n\n /**\n * Judul alert (singkat, biasanya satu baris).\n */\n title?: string;\n\n /**\n * Deskripsi/penjelasan di bawah judul (opsional, idealnya max dua baris).\n */\n message?: string;\n\n /**\n * Icon custom untuk menggantikan icon default variant.\n */\n icon?: Component;\n\n /**\n * Apakah alert bisa di-dismiss (menampilkan tombol close).\n */\n dismissible?: boolean;\n\n /**\n * Label untuk tombol dismiss (accessibility).\n */\n dismissLabel?: string;\n}\n\nconst props = withDefaults(defineProps<AlertProps>(), {\n variant: 'info',\n dismissible: false,\n dismissLabel: 'Dismiss alert',\n});\n\nconst emit = defineEmits<{\n dismiss: [];\n}>();\n\nconst showVariantIcon = computed(() => {\n return !props.icon;\n});\n\nconst alertClasses = computed(() => {\n const classes = ['ina-alert'];\n\n classes.push(`ina-alert--${props.variant}`);\n\n if (props.dismissible) {\n classes.push('ina-alert--dismissible');\n }\n\n return classes;\n});\n\nconst handleDismiss = () => {\n emit('dismiss');\n};\n</script>\n","<template>\n <img\n v-if=\"src && !imageError\"\n :src=\"src\"\n :alt=\"alt\"\n :class=\"avatarClasses\"\n @error=\"handleImageError\"\n @load=\"handleImageLoad\"\n />\n\n <div v-else :class=\"avatarClasses\">\n {{ initials ? initials.slice(0, 2).toUpperCase() : '' }}\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nexport type AvatarSize = 16 | 24 | 32 | 40 | 48;\nexport type AvatarShape = 'circle' | 'square';\n\nexport interface AvatarProps {\n /**\n * URL gambar avatar (bisa data URI / base64).\n * Jika tidak disediakan, akan fallback ke `initials`.\n */\n src?: string;\n\n /**\n * Alt text untuk gambar.\n */\n alt?: string;\n\n /**\n * Inisial (maksimum 2 karakter) yang ditampilkan saat `src` tidak ada.\n */\n initials?: string;\n\n /**\n * Ukuran lebar & tinggi avatar dalam piksel.\n * Pilihan: 16, 24, 32, 40, 48. Default: 32.\n */\n size?: AvatarSize;\n\n /**\n * Bentuk avatar: 'circle' (lingkaran) atau 'square' (persegi dengan border-radius 8px).\n * Default: 'circle'.\n */\n shape?: AvatarShape;\n}\n\nconst props = withDefaults(defineProps<AvatarProps>(), {\n alt: 'Avatar',\n initials: '',\n size: 32,\n shape: 'circle',\n});\n\nconst imageError = ref(false);\nconst imageLoaded = ref(false);\n\nconst avatarClasses = computed(() => {\n const classes = [\n 'ina-avatar',\n `ina-avatar--${props.size}`,\n `ina-avatar--${props.shape}`,\n ];\n\n if (props.src && !imageError.value) {\n classes.push('ina-avatar--image');\n }\n\n return classes;\n});\n\nconst handleImageError = () => {\n imageError.value = true;\n imageLoaded.value = false;\n};\n\nconst handleImageLoad = () => {\n imageError.value = false;\n imageLoaded.value = true;\n};\n</script>\n","<template>\n <span class=\"ina-badge\" :class=\"badgeClasses\">\n <span v-if=\"prefixIcon\" class=\"ina-badge__prefix-icon\">\n <component :is=\"prefixIcon\" />\n </span>\n <span><slot /></span>\n <span v-if=\"suffixIcon\" class=\"ina-badge__suffix-icon\">\n <component :is=\"suffixIcon\" />\n </span>\n </span>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport type { Component } from 'vue';\n/**\n * Badge component untuk menampilkan label atau tag dengan berbagai variant warna dan style.\n *\n * @param {'soft' | 'fill'} [type] - Tipe style badge: soft (background 100, text 500) atau fill (background 500, text 100).\n * @param {'brand' | 'info' | 'warning' | 'success' | 'error' | 'neutral'} [variant] - Variant warna badge.\n * @param {'sm' | 'md' | 'lg' | 'xl'} [size] - Ukuran badge.\n * @param {'sm' | 'md' | 'lg' | 'full'} [rounded] - Border radius badge.\n * @param {Component} [prefixIcon] - Icon di depan teks.\n * @param {Component} [suffixIcon] - Icon di belakang teks.\n */\n\nexport type BadgeType = 'soft' | 'fill';\nexport type BadgeVariant =\n | 'brand'\n | 'info'\n | 'warning'\n | 'success'\n | 'error'\n | 'neutral';\nexport type BadgeSize = 'sm' | 'md' | 'lg' | 'xl';\nexport type BadgeRounded = 'sm' | 'md' | 'lg' | 'full';\n\nexport interface BadgeProps {\n /**\n * Tipe style badge:\n * - \"soft\": background level 100, text level 500\n * - \"fill\": background level 500, text level 100\n */\n type?: BadgeType;\n\n /**\n * Variant warna:\n * - \"brand\" (primary, dipengaruhi brand yang dipilih)\n * - \"info\" (biru/Guide)\n * - \"warning\" (oranye/Warning)\n * - \"success\" (hijau/Positive)\n * - \"error\" (merah/Negative)\n * - \"neutral\" (abu-abu/Neutral)\n */\n variant?: BadgeVariant;\n\n /**\n * Ukuran badge:\n * - \"sm\": font-size 10px\n * - \"md\": font-size 12px, padding horizontal 8px\n * - \"lg\": font-size 14px, padding horizontal 12px\n * - \"xl\": font-size 16px\n */\n size?: BadgeSize;\n\n /**\n * Border radius:\n * - \"sm\"\n * - \"md\"\n * - \"lg\"\n * - \"full\" (pill, default)\n */\n rounded?: BadgeRounded;\n\n /** Optional icon di depan teks */\n prefixIcon?: Component | undefined;\n /** Optional icon di belakang teks */\n /** Optional icon di belakang teks */\n suffixIcon?: Component | undefined;\n}\n\nconst props = withDefaults(defineProps<BadgeProps>(), {\n type: 'soft',\n variant: 'info',\n size: 'md',\n rounded: 'full',\n});\n\nconst badgeClasses = computed(() => {\n const classes = [\n 'ina-badge',\n `ina-badge--${props.type}`,\n `ina-badge--${props.variant}`,\n `ina-badge--${props.size}`,\n `ina-badge--rounded-${props.rounded}`,\n ];\n\n return classes;\n});\n</script>\n","<template>\n <dialog\n ref=\"bottomSheetRef\"\n :class=\"dialogClasses\"\n @close=\"handleClose\"\n @cancel=\"handleCancel\"\n @click=\"handleClick\"\n @animationend=\"handleAnimationEnd\"\n >\n <slot />\n </dialog>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed, watch, nextTick } from 'vue';\nexport interface BottomSheetProps {\n open: boolean;\n locked: boolean;\n onClose: (e: Event) => void;\n}\n\nconst props = withDefaults(defineProps<BottomSheetProps>(), {\n open: false,\n locked: false,\n});\n\nconst emit = defineEmits<{\n close: [e: Event];\n}>();\n\nconst bottomSheetRef = ref<HTMLDialogElement | null>(null);\n\n// Work out which classes should be applied to the dialog element\nconst dialogClasses = computed(() => {\n const classes = ['bottom-sheet-dropdown'];\n if (!props.open) classes.push('bottom-sheet-dropdown--closing');\n return classes.join(' ');\n});\n\n// Event listener: trigger onclose when cancel detected\nconst handleCancel = (e: Event) => {\n e.preventDefault();\n if (!props.locked) {\n emit('close', e);\n }\n};\n\n// Event listener: trigger onclose when click outside\nconst handleClick = (e: Event) => {\n const el = bottomSheetRef.value;\n if (e.target === el && !props.locked) {\n emit('close', e);\n }\n};\n\n// Event listener: trigger close click on anim end\nconst handleAnimationEnd = () => {\n const el = bottomSheetRef.value;\n if (!props.open && el) {\n el.close();\n }\n};\n\n// Handle close event\nconst handleClose = (e: Event) => {\n emit('close', e);\n};\n\n// When open changes run open/close command\nwatch(\n () => props.open,\n async (newOpen) => {\n const el = bottomSheetRef.value;\n if (el) {\n if (newOpen) {\n await nextTick();\n el.showModal();\n }\n }\n },\n { immediate: true }\n);\n</script>\n\n<style scoped>\n</style>\n","<template>\n <nav\n class=\"ina-breadcrumb\"\n :class=\"breadcrumbClasses\"\n aria-label=\"Breadcrumb\"\n >\n <ol class=\"ina-breadcrumb__list\">\n <li\n v-for=\"(item, index) in items\"\n :key=\"index\"\n class=\"ina-breadcrumb__item\"\n :class=\"getItemClasses(index)\"\n >\n <component\n :is=\"item.href && !isLast(index) ? 'a' : 'span'\"\n :href=\"item.href && !isLast(index) ? item.href : undefined\"\n :class=\"getLinkClasses(index)\"\n @click=\"handleItemClick(item, index)\"\n >\n <span v-if=\"item.icon\" class=\"ina-breadcrumb__icon\">\n <component :is=\"item.icon\" :size=\"16\" />\n </span>\n\n <span class=\"ina-breadcrumb__text\">\n {{ getTruncatedLabel(item.label, index) }}\n </span>\n </component>\n\n <span\n v-if=\"index < items.length - 1\"\n class=\"ina-breadcrumb__separator\"\n aria-hidden=\"true\"\n >\n <slot name=\"separator\">\n <template v-if=\"typeof computedSeparator === 'string'\">{{\n computedSeparator\n }}</template>\n <component :is=\"computedSeparator\" v-else />\n </slot>\n </span>\n </li>\n </ol>\n </nav>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, h } from 'vue';\nimport type { Component } from 'vue';\nimport { IconChevronRight } from '@tabler/icons-vue';\nexport interface BreadcrumbItem {\n label: string;\n href?: string;\n icon?: Component;\n disabled?: boolean;\n}\n\nexport interface BreadcrumbProps {\n items: BreadcrumbItem[];\n variant?: 'default' | 'minimal' | 'with-icons';\n size?: 'sm' | 'md' | 'lg';\n /** Separator antara items (default: SVG chevron). Bisa berupa string atau Vue Component */\n separator?: string | Component;\n /** Maksimal panjang text untuk item terakhir sebelum di-truncate */\n maxLength?: number;\n}\n\nconst props = withDefaults(defineProps<BreadcrumbProps>(), {\n variant: 'default',\n size: 'md',\n separator: undefined,\n});\n\nconst emit = defineEmits<{\n itemClick: [item: BreadcrumbItem, index: number];\n}>();\n\n// Default separator component (sama seperti React: <IconChevronRight size={14} />)\nconst DefaultSeparator = () => {\n return h(IconChevronRight, { size: 14 });\n};\n\n// Computed separator dengan default IconChevronRight jika tidak di-set (sama seperti React)\nconst computedSeparator = computed(() => {\n return props.separator ?? DefaultSeparator;\n});\n\nconst breadcrumbClasses = computed(() => {\n const classes = ['ina-breadcrumb'];\n\n classes.push(`ina-breadcrumb--variant-${props.variant}`);\n classes.push(`ina-breadcrumb--size-${props.size}`);\n\n return classes;\n});\n\nconst getItemClasses = (index: number) => {\n const classes = ['ina-breadcrumb__item'];\n\n if (index === props.items.length - 1) {\n classes.push('ina-breadcrumb__item--current');\n }\n\n if (props.items[index].disabled) {\n classes.push('ina-breadcrumb__item--disabled');\n }\n\n if (props.items[index].icon) {\n classes.push('ina-breadcrumb__item--with-icon');\n }\n\n return classes;\n};\n\nconst getLinkClasses = (index: number) => {\n const classes = ['ina-breadcrumb__link'];\n\n if (index === props.items.length - 1) {\n classes.push('ina-breadcrumb__link--active');\n }\n\n if (props.items[index].disabled) {\n classes.push('ina-breadcrumb__link--disabled');\n }\n\n return classes;\n};\n\nconst isLast = (index: number): boolean => {\n return index === props.items.length - 1;\n};\n\nconst getTruncatedLabel = (label: string, index: number): string => {\n const isLastItem = isLast(index);\n if (!isLastItem || !props.maxLength) return label;\n if (label.length <= props.maxLength) return label;\n return `${label.substring(0, props.maxLength)}...`;\n};\n\nconst handleItemClick = (item: BreadcrumbItem, index: number) => {\n if (item.disabled || isLast(index)) return;\n\n emit('itemClick', item, index);\n};\n</script>\n","<template>\n <button\n v-bind=\"$attrs\"\n :type=\"type\"\n :disabled=\"disabled\"\n :class=\"buttonClasses\"\n @click=\"$emit('click', $event)\"\n >\n <!-- Prefix Icon (kiri) -->\n <component :is=\"prefixIconNode\" v-if=\"prefixIconNode\" />\n\n <!-- Konten utama -->\n <slot />\n\n <!-- Suffix Icon (kanan) -->\n <component :is=\"suffixIconNode\" v-if=\"suffixIconNode\" />\n </button>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, h, type VNode, type Component } from 'vue';\nexport type ButtonHierarchy =\n | 'primary'\n | 'secondary'\n | 'tertiary'\n | 'link'\n | 'custom';\nexport type ButtonSize = '2xl' | 'xl' | 'lg' | 'md' | 'sm';\n\nexport interface ButtonProps {\n /**\n * Hierarchy button:\n * - \"primary\": background-color: primary-300, color: text-white\n * - \"secondary\": background-color: white, color: text-content-primary, border: stroke-primary\n * - \"tertiary\": background-color: white, color: text-content-primary, border: none, hover: background-tertiary\n * - \"link\": background-color: white, color: text-content-guide, border: none, hover: text-guide-400\n * - \"custom\": untuk custom styling\n *\n * @default \"primary\"\n */\n hierarchy?: ButtonHierarchy;\n\n /**\n * Ukuran button:\n * - \"2xl\": max-height: 56px, font-size: 16px, padding: 16px\n * - \"xl\": max-height: 48px, font-size: 16px, padding: 12px 16px\n * - \"lg\": max-height: 44px, font-size: 14px, padding: 12px\n * - \"md\": max-height: 40px, font-size: 14px, padding: 10px 12px\n * - \"sm\": max-height: 32px, font-size: 12px, padding: 8px\n *\n * @default \"md\"\n */\n size?: ButtonSize;\n\n /**\n * Ikon di sebelah kiri teks (opsional).\n * Bisa berupa VNode atau Component.\n */\n prefixIcon?: VNode | Component | undefined;\n\n /**\n * Ikon di sebelah kanan teks (opsional).\n * Bisa berupa VNode atau Component.\n */\n suffixIcon?: VNode | Component | undefined;\n\n /**\n * Jika true, button dipastikan dalam keadaan disabled\n * (tidak bisa di-klik, gaya berubah).\n */\n disabled?: boolean;\n\n /**\n * Type button HTML.\n */\n /**\n * Type button HTML.\n */\n type?: 'button' | 'submit' | 'reset';\n}\n\nconst props = withDefaults(defineProps<ButtonProps>(), {\n hierarchy: 'primary',\n size: 'md',\n disabled: false,\n type: 'button',\n});\n\ndefineEmits<{\n click: [event: MouseEvent];\n}>();\n\nconst buttonClasses = computed(() => {\n const classes = ['ina-button'];\n\n // Hierarchy\n classes.push(`ina-button--${props.hierarchy}`);\n\n // Size\n classes.push(`ina-button--${props.size}`);\n\n return classes;\n});\n\n// Helper function untuk merender icon sebagai VNode dengan wrapper span\nconst renderIcon = (\n icon: VNode | Component | undefined,\n wrapperClass: string\n): VNode | null => {\n if (!icon) return null;\n\n // Jika sudah VNode, wrap dengan span yang memiliki class\n if (typeof icon === 'object' && 'type' in icon && icon.type !== null) {\n const vnode = icon as VNode;\n return h('span', { class: wrapperClass }, [vnode]);\n }\n\n // Jika komponen, buat VNode dengan h() dan wrap dengan span\n const componentIcon = icon as Component;\n return h('span', { class: wrapperClass }, [h(componentIcon)]);\n};\n\n// Computed untuk prefix icon VNode\nconst prefixIconNode = computed(() =>\n renderIcon(props.prefixIcon, 'ina-button__prefix-icon')\n);\n\n// Computed untuk suffix icon VNode\nconst suffixIconNode = computed(() =>\n renderIcon(props.suffixIcon, 'ina-button__suffix-icon')\n);\n</script>\n","<template>\n <div\n class=\"ina-button-group\"\n :class=\"buttonGroupClasses\"\n role=\"group\"\n aria-label=\"Button group\"\n >\n <button\n v-for=\"(option, index) in options\"\n :key=\"`${option.value}-${index}`\"\n type=\"button\"\n :class=\"getButtonClasses(option)\"\n :disabled=\"isDisabled(option)\"\n @click=\"handleClick(option)\"\n :aria-pressed=\"isSelected(option)\"\n :aria-disabled=\"isDisabled(option)\"\n :name=\"name\"\n :value=\"option.value\"\n >\n <span class=\"ina-button-group__button-content\">\n <slot\n :name=\"`option-${index}`\"\n :option=\"option\"\n :selected=\"isSelected(option)\"\n >\n {{ option.label }}\n </slot>\n </span>\n </button>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nexport interface ButtonGroupOption {\n /** Value of the option */\n value: string | number;\n /** Label content (can be string or VNode) */\n label?: string;\n /** Whether the option is disabled */\n disabled?: boolean;\n}\n\nexport interface ButtonGroupProps {\n /** Array of options to display */\n options: ButtonGroupOption[];\n /** Currently selected value (v-model) */\n modelValue?: string | number;\n /** Whether the button group is disabled */\n disabled?: boolean;\n /** HTML name attribute for form submission */\n name?: string;\n}\n\nconst props = withDefaults(defineProps<ButtonGroupProps>(), {\n disabled: false,\n});\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string | number];\n change: [value: string | number];\n}>();\n\nconst buttonGroupClasses = computed(() => {\n const classes: string[] = [];\n\n if (props.disabled) {\n classes.push('ina-button-group--disabled');\n }\n\n return classes;\n});\n\nconst isSelected = (option: ButtonGroupOption): boolean => {\n return props.modelValue === option.value;\n};\n\nconst isDisabled = (option: ButtonGroupOption): boolean => {\n return props.disabled || option.disabled || false;\n};\n\nconst getButtonClasses = (option: ButtonGroupOption) => {\n const classes = ['ina-button-group__button'];\n\n if (isSelected(option)) {\n classes.push('ina-button-group__button--selected');\n }\n\n if (isDisabled(option)) {\n classes.push('ina-button-group__button--disabled');\n }\n\n return classes;\n};\n\nconst handleClick = (option: ButtonGroupOption) => {\n if (isDisabled(option)) return;\n\n emit('update:modelValue', option.value);\n emit('change', option.value);\n};\n</script>\n","<template>\n <div class=\"ina-card\" :class=\"cardClasses\">\n <!-- Media untuk Basic Card (Top) -->\n <div\n v-if=\"variant === 'basic' && computedMediaPosition === 'top'\"\n class=\"ina-card__media\"\n >\n <slot name=\"media\">\n <img v-if=\"mediaSrc\" :src=\"mediaSrc\" :alt=\"mediaAlt || 'Card media'\" />\n </slot>\n </div>\n\n <!-- Media untuk Overlay Card (selalu absolute, posisi berdasarkan mediaPosition) -->\n <div v-if=\"variant === 'overlay'\" class=\"ina-card__media\">\n <slot name=\"media\">\n <img v-if=\"mediaSrc\" :src=\"mediaSrc\" :alt=\"mediaAlt || 'Card media'\" />\n </slot>\n </div>\n\n <!-- Content Container -->\n <div class=\"ina-card__content\">\n <!-- Avatar -->\n <div v-if=\"avatar || $slots.avatar\" class=\"ina-card__avatar\">\n <slot name=\"avatar\">\n <img v-if=\"avatar\" :src=\"avatar\" :alt=\"avatarAlt || 'Avatar'\" />\n </slot>\n </div>\n\n <div>\n <!-- Title -->\n <h3 v-if=\"title || $slots.title\" class=\"ina-card__title\">\n <slot name=\"title\">\n <component :is=\"title\" v-if=\"typeof title !== 'string' && title\" />\n <template v-else-if=\"typeof title === 'string'\">{{\n title\n }}</template>\n </slot>\n </h3>\n\n <!-- Description -->\n <p\n v-if=\"description || $slots.description\"\n class=\"ina-card__description\"\n >\n <slot name=\"description\">\n <component\n :is=\"description\"\n v-if=\"typeof description !== 'string' && description\"\n />\n <template v-else-if=\"typeof description === 'string'\">{{\n description\n }}</template>\n </slot>\n </p>\n </div>\n\n <!-- Button -->\n <div v-if=\"showButton || $slots.button\" class=\"ina-card__button\">\n <slot name=\"button\">\n <Button\n v-if=\"showButton && buttonText\"\n :hierarchy=\"buttonHierarchy\"\n size=\"md\"\n @click=\"handleButtonClick\"\n >\n {{ buttonText }}\n </Button>\n </slot>\n </div>\n </div>\n\n <!-- Media untuk Basic Card (Bottom - default) -->\n <div\n v-if=\"variant === 'basic' && computedMediaPosition === 'bottom'\"\n class=\"ina-card__media\"\n >\n <slot name=\"media\">\n <img v-if=\"mediaSrc\" :src=\"mediaSrc\" :alt=\"mediaAlt || 'Card media'\" />\n </slot>\n </div>\n\n <!-- Media untuk Horizontal Card (Left) - harus di-render sebelum content -->\n <div\n v-if=\"variant === 'horizontal' && computedMediaPosition === 'left'\"\n class=\"ina-card__media\"\n >\n <slot name=\"media\">\n <img v-if=\"mediaSrc\" :src=\"mediaSrc\" :alt=\"mediaAlt || 'Card media'\" />\n </slot>\n </div>\n\n <!-- Media untuk Horizontal Card (Right) - harus di-render setelah content -->\n <div\n v-if=\"variant === 'horizontal' && computedMediaPosition === 'right'\"\n class=\"ina-card__media\"\n >\n <slot name=\"media\">\n <img v-if=\"mediaSrc\" :src=\"mediaSrc\" :alt=\"mediaAlt || 'Card media'\" />\n </slot>\n </div>\n\n <!-- Legacy Support: Header, Body, Footer (hanya untuk variant lama) -->\n <template\n v-if=\"\n variant !== 'basic' && variant !== 'horizontal' && variant !== 'overlay'\n \"\n >\n <div\n v-if=\"showHeader && (title || $slots.title || $slots.header)\"\n class=\"ina-card__header\"\n >\n <div v-if=\"title || $slots.title\" class=\"ina-card__title\">\n <slot name=\"title\">\n <component :is=\"title\" v-if=\"typeof title !== 'string' && title\" />\n <template v-else-if=\"typeof title === 'string'\">{{\n title\n }}</template>\n </slot>\n </div>\n <div v-if=\"subtitle || $slots.subtitle\" class=\"ina-card__subtitle\">\n <slot name=\"subtitle\">\n <component\n :is=\"subtitle\"\n v-if=\"typeof subtitle !== 'string' && subtitle\"\n />\n <template v-else-if=\"typeof subtitle === 'string'\">{{\n subtitle\n }}</template>\n </slot>\n </div>\n <div v-if=\"$slots.header\" class=\"ina-card__header-content\">\n <slot name=\"header\" />\n </div>\n </div>\n\n <div\n v-if=\"$slots.default && !title && !description\"\n class=\"ina-card__body\"\n >\n <slot />\n </div>\n\n <div v-if=\"showFooter || $slots.footer\" class=\"ina-card__footer\">\n <slot name=\"footer\" />\n </div>\n </template>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, type Component, type VNode, isVNode } from 'vue';\nimport Button from './Button.vue';\nexport interface CardProps {\n /** Varian card: basic (vertical), horizontal, overlay */\n variant?: 'basic' | 'horizontal' | 'overlay';\n /** Posisi media: untuk basic (top/bottom), horizontal (left/right), overlay (top/bottom) */\n mediaPosition?: 'top' | 'bottom' | 'left' | 'right';\n /** Avatar image source */\n avatar?: string;\n /** Avatar alt text */\n avatarAlt?: string;\n /** Title card */\n title?: string | VNode | Component;\n /** Description card */\n description?: string | VNode | Component;\n /** Media image source */\n mediaSrc?: string;\n /** Media alt text */\n mediaAlt?: string;\n /** Apakah button ditampilkan */\n showButton?: boolean;\n /** Button text */\n buttonText?: string;\n /** Button hierarchy */\n buttonHierarchy?: 'primary' | 'secondary' | 'tertiary' | 'link';\n /** Legacy: Subtitle card */\n subtitle?: string | VNode | Component;\n /** Legacy: Apakah header ditampilkan */\n showHeader?: boolean;\n /** Legacy: Apakah footer ditampilkan */\n showFooter?: boolean;\n /** Legacy: Apakah card memiliki efek hover */\n hoverable?: boolean;\n /** Legacy: Apakah card dapat diklik */\n clickable?: boolean;\n /** Legacy: Size card */\n size?: 'sm' | 'md' | 'lg';\n}\n\nconst props = withDefaults(defineProps<CardProps>(), {\n variant: 'basic',\n mediaPosition: undefined,\n showButton: false,\n buttonHierarchy: 'primary',\n showHeader: true,\n showFooter: false,\n hoverable: false,\n clickable: false,\n size: 'md',\n});\n\nconst emit = defineEmits<{\n buttonClick: [];\n click: [event: MouseEvent];\n}>();\n\n// Computed media position berdasarkan variant\nconst computedMediaPosition = computed(() => {\n if (props.mediaPosition) {\n return props.mediaPosition;\n }\n\n // Default berdasarkan variant\n switch (props.variant) {\n case 'basic':\n return 'bottom';\n case 'horizontal':\n return 'right';\n case 'overlay':\n return 'top';\n default:\n return 'bottom';\n }\n});\n\nconst cardClasses = computed(() => {\n const classes = ['ina-card'];\n\n // Variant class\n classes.push(`ina-card--variant-${props.variant}`);\n\n // Media position class\n classes.push(`ina-card--media-${computedMediaPosition.value}`);\n\n // Legacy support\n if (props.hoverable) {\n classes.push('ina-card--hoverable');\n }\n\n if (props.clickable) {\n classes.push('ina-card--clickable');\n }\n\n if (props.showHeader) {\n classes.push('ina-card--with-header');\n }\n\n if (props.showFooter) {\n classes.push('ina-card--with-footer');\n }\n\n return classes;\n});\n\nconst handleButtonClick = () => {\n emit('buttonClick');\n};\n</script>\n","<template>\n <label :for=\"inputId\" class=\"ina-checkbox\" :class=\"checkboxClasses\">\n <input\n :id=\"inputId\"\n ref=\"inputRef\"\n :checked=\"checked\"\n type=\"checkbox\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n :indeterminate=\"indeterminate\"\n class=\"ina-checkbox__input peer\"\n v-bind=\"$attrs\"\n @change=\"handleChange\"\n @focus=\"handleFocus\"\n @blur=\"handleBlur\"\n />\n\n <div :class=\"boxClasses\">\n <svg\n v-if=\"checked && !indeterminate\"\n class=\"ina-checkbox__icon\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M20 6L9 17L4 12\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n\n <svg\n v-else-if=\"indeterminate\"\n class=\"ina-checkbox__icon\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M5 12H19\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </div>\n\n <div class=\"ina-checkbox__content\">\n <span v-if=\"$slots.default || label\" class=\"ina-checkbox__label\">\n <slot>{{ label }}</slot>\n </span>\n <span v-if=\"subtext\" class=\"ina-checkbox__subtext\">\n {{ subtext }}\n </span>\n </div>\n </label>\n\n <div v-if=\"statusMessage\" :class=\"statusClasses\">\n {{ statusMessage }}\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, watch } from 'vue';\nexport interface CheckboxProps {\n modelValue?: boolean | string[];\n label?: string;\n subtext?: string;\n value?: string;\n size?: 'sm' | 'md' | 'lg';\n status?: 'neutral' | 'success' | 'error' | 'warning';\n statusMessage?: string;\n disabled?: boolean;\n readonly?: boolean;\n indeterminate?: boolean;\n id?: string;\n}\n\nconst props = withDefaults(defineProps<CheckboxProps>(), {\n modelValue: false,\n size: 'md',\n status: 'neutral',\n disabled: false,\n readonly: false,\n indeterminate: false,\n});\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: boolean | string[]];\n change: [value: boolean | string[]];\n focus: [event: FocusEvent];\n blur: [event: FocusEvent];\n}>();\n\nconst inputRef = ref<HTMLInputElement>();\n\n// Check if this checkbox is checked based on modelValue type\nconst checked = computed(() => {\n if (Array.isArray(props.modelValue)) {\n return props.value ? props.modelValue.includes(props.value) : false;\n }\n return Boolean(props.modelValue);\n});\n\n// Generate unique ID for input, or use id from props if provided\nconst inputId = computed(() => {\n if (props.id) {\n return props.id;\n }\n return `checkbox-${Math.random().toString(36).substr(2, 9)}`;\n});\n\nconst checkboxClasses = computed(() => {\n const classes = ['ina-checkbox'];\n\n if (props.disabled) {\n classes.push('ina-checkbox--disabled');\n }\n\n if (props.subtext) {\n classes.push('ina-checkbox--with-subtext');\n }\n\n return classes;\n});\n\nconst boxClasses = computed(() => {\n const classes = ['ina-checkbox__box'];\n\n if (checked.value) {\n classes.push('ina-checkbox__box--checked');\n } else if (props.indeterminate) {\n classes.push('ina-checkbox__box--indeterminate');\n } else {\n classes.push('ina-checkbox__box--unchecked');\n }\n\n return classes;\n});\n\nconst statusClasses = computed(() => {\n const classes = ['ina-checkbox__status'];\n\n if (props.status !== 'neutral') {\n classes.push(`ina-checkbox__status--${props.status}`);\n }\n\n return classes;\n});\n\nconst handleChange = (event: Event) => {\n const target = event.target as HTMLInputElement;\n const isChecked = target.checked;\n\n if (Array.isArray(props.modelValue)) {\n // Handle array mode (multiple selection)\n if (!props.value) return;\n\n const currentArray = [...props.modelValue];\n if (isChecked) {\n if (!currentArray.includes(props.value)) {\n currentArray.push(props.value);\n }\n } else {\n const index = currentArray.indexOf(props.value);\n if (index > -1) {\n currentArray.splice(index, 1);\n }\n }\n emit('update:modelValue', currentArray);\n emit('change', currentArray);\n } else {\n // Handle boolean mode (single selection)\n emit('update:modelValue', isChecked);\n emit('change', isChecked);\n }\n};\n\nconst handleFocus = (event: FocusEvent) => {\n emit('focus', event);\n};\n\nconst handleBlur = (event: FocusEvent) => {\n emit('blur', event);\n};\n</script>\n","/**\n * Security utilities for preventing XSS attacks\n */\n\n// HTML entities mapping for encoding\nconst HTML_ENTITIES: Record<string, string> = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&#x27;',\n '/': '&#x2F;',\n '`': '&#x60;',\n '=': '&#x3D;',\n};\n\n// Dangerous patterns that could lead to XSS\nconst DANGEROUS_PATTERNS = [\n /<script\\b[^<]*(?:(?!<\\/script>)<[^<]*)*<\\/script>/gi,\n /<iframe\\b[^<]*(?:(?!<\\/iframe>)<[^<]*)*<\\/iframe>/gi,\n /<object\\b[^<]*(?:(?!<\\/object>)<[^<]*)*<\\/object>/gi,\n /<embed\\b[^<]*(?:(?!<\\/embed>)<[^<]*)*<\\/embed>/gi,\n /<applet\\b[^<]*(?:(?!<\\/applet>)<[^<]*)*<\\/applet>/gi,\n /<form\\b[^<]*(?:(?!<\\/form>)<[^<]*)*<\\/form>/gi,\n /<input\\b[^>]*>/gi,\n /<textarea\\b[^<]*(?:(?!<\\/textarea>)<[^<]*)*<\\/textarea>/gi,\n /<select\\b[^<]*(?:(?!<\\/select>)<[^<]*)*<\\/select>/gi,\n /<button\\b[^<]*(?:(?!<\\/button>)<[^<]*)*<\\/button>/gi,\n /<link\\b[^>]*>/gi,\n /<meta\\b[^>]*>/gi,\n /<style\\b[^<]*(?:(?!<\\/style>)<[^<]*)*<\\/style>/gi,\n /javascript:/gi,\n /vbscript:/gi,\n /data:text\\/html/gi,\n /on\\w+\\s*=/gi, // Event handlers like onclick, onload, etc.\n];\n\n// Dangerous attributes that could execute code\nconst DANGEROUS_ATTRIBUTES = [\n 'onload',\n 'onerror',\n 'onclick',\n 'onmouseover',\n 'onmouseout',\n 'onmousedown',\n 'onmouseup',\n 'onkeydown',\n 'onkeyup',\n 'onkeypress',\n 'onfocus',\n 'onblur',\n 'onchange',\n 'onsubmit',\n 'onreset',\n 'onselect',\n 'onabort',\n 'onbeforeunload',\n 'onerror',\n 'onhashchange',\n 'onload',\n 'onpageshow',\n 'onpagehide',\n 'onresize',\n 'onscroll',\n 'onunload',\n 'onbeforeprint',\n 'onafterprint',\n 'oncontextmenu',\n 'onformchange',\n 'onforminput',\n 'oninput',\n 'oninvalid',\n 'oncanplay',\n 'oncanplaythrough',\n 'ondurationchange',\n 'onemptied',\n 'onended',\n 'onloadeddata',\n 'onloadedmetadata',\n 'onloadstart',\n 'onpause',\n 'onplay',\n 'onplaying',\n 'onprogress',\n 'onratechange',\n 'onreadystatechange',\n 'onseeked',\n 'onseeking',\n 'onstalled',\n 'onsuspend',\n 'ontimeupdate',\n 'onvolumechange',\n 'onwaiting',\n];\n\n/**\n * Encode HTML entities to prevent XSS\n */\nexport function encodeHtmlEntities(input: string): string {\n if (typeof input !== 'string') return '';\n\n return input.replace(/[&<>\"'`=\\/]/g, (match) => {\n return HTML_ENTITIES[match] || match;\n });\n}\n\n/**\n * Decode HTML entities (use with caution)\n */\nexport function decodeHtmlEntities(input: string): string {\n if (typeof input !== 'string') return '';\n\n const entityMap: Record<string, string> = {};\n Object.entries(HTML_ENTITIES).forEach(([key, value]) => {\n entityMap[value] = key;\n });\n\n return input.replace(/&[#\\w]+;/g, (entity) => {\n return entityMap[entity] || entity;\n });\n}\n\n/**\n * Check if input contains dangerous patterns\n */\nexport function containsDangerousPatterns(input: string): boolean {\n if (typeof input !== 'string') return false;\n\n // Check for dangerous HTML patterns\n for (const pattern of DANGEROUS_PATTERNS) {\n if (pattern.test(input)) {\n return true;\n }\n }\n\n // Check for dangerous attributes\n for (const attr of DANGEROUS_ATTRIBUTES) {\n if (input.toLowerCase().includes(attr)) {\n return true;\n }\n }\n\n return false;\n}\n\n/**\n * Sanitize input by removing dangerous content\n */\nexport function sanitizeInput(\n input: string,\n options: {\n allowHtml?: boolean;\n maxLength?: number;\n stripScripts?: boolean;\n stripEvents?: boolean;\n } = {}\n): string {\n if (typeof input !== 'string') return '';\n\n const {\n allowHtml = false,\n maxLength,\n stripScripts = true,\n stripEvents = true,\n } = options;\n\n let sanitized = input;\n\n // Apply length limit\n if (maxLength && sanitized.length > maxLength) {\n sanitized = sanitized.substring(0, maxLength);\n }\n\n if (!allowHtml) {\n // Remove all HTML tags and encode entities\n sanitized = sanitized.replace(/<[^>]*>/g, '');\n sanitized = encodeHtmlEntities(sanitized);\n } else {\n // Allow HTML but remove dangerous elements\n if (stripScripts) {\n sanitized = sanitized.replace(\n /<script\\b[^<]*(?:(?!<\\/script>)<[^<]*)*<\\/script>/gi,\n ''\n );\n sanitized = sanitized.replace(\n /<iframe\\b[^<]*(?:(?!<\\/iframe>)<[^<]*)*<\\/iframe>/gi,\n ''\n );\n sanitized = sanitized.replace(\n /<object\\b[^<]*(?:(?!<\\/object>)<[^<]*)*<\\/object>/gi,\n ''\n );\n sanitized = sanitized.replace(\n /<embed\\b[^<]*(?:(?!<\\/embed>)<[^<]*)*<\\/embed>/gi,\n ''\n );\n sanitized = sanitized.replace(\n /<applet\\b[^<]*(?:(?!<\\/applet>)<[^<]*)*<\\/applet>/gi,\n ''\n );\n }\n\n if (stripEvents) {\n // Remove event handlers\n for (const attr of DANGEROUS_ATTRIBUTES) {\n const regex = new RegExp(`\\\\s${attr}\\\\s*=\\\\s*[\"'][^\"']*[\"']`, 'gi');\n sanitized = sanitized.replace(regex, '');\n }\n }\n\n // Remove javascript: and vbscript: protocols\n sanitized = sanitized.replace(/javascript:/gi, '');\n sanitized = sanitized.replace(/vbscript:/gi, '');\n sanitized = sanitized.replace(/data:text\\/html/gi, '');\n }\n\n return sanitized;\n}\n\n/**\n * Validate input for security threats\n */\nexport function validateInput(input: string): {\n isValid: boolean;\n threats: string[];\n sanitized: string;\n} {\n const threats: string[] = [];\n let sanitized = input;\n\n if (typeof input !== 'string') {\n return {\n isValid: false,\n threats: ['Input must be a string'],\n sanitized: '',\n };\n }\n\n // Check for dangerous patterns\n if (containsDangerousPatterns(input)) {\n threats.push('Contains potentially dangerous content');\n sanitized = sanitizeInput(input, { allowHtml: false });\n }\n\n // Check for suspicious length (potential buffer overflow)\n if (input.length > 10000) {\n threats.push('Input length exceeds safe limit');\n sanitized = sanitized.substring(0, 10000);\n }\n\n return {\n isValid: threats.length === 0,\n threats,\n sanitized,\n };\n}\n\n/**\n * Security configuration for input components\n */\nexport interface SecurityConfig {\n /** Enable XSS protection */\n enableXssProtection?: boolean;\n /** Maximum allowed input length */\n maxLength?: number;\n /** Allow HTML content (use with extreme caution) */\n allowHtml?: boolean;\n /** Strip script tags */\n stripScripts?: boolean;\n /** Strip event handlers */\n stripEvents?: boolean;\n /** Log security violations */\n logViolations?: boolean;\n /** Callback for security violations */\n onSecurityViolation?: (threats: string[], input: string) => void;\n}\n\n/**\n * Default security configuration\n */\nexport const DEFAULT_SECURITY_CONFIG: SecurityConfig = {\n enableXssProtection: true,\n maxLength: 10000,\n allowHtml: false,\n stripScripts: true,\n stripEvents: true,\n logViolations: true,\n onSecurityViolation: (threats, input) => {\n // Only log in development environments if 'console' is available\n if (\n typeof window !== 'undefined' &&\n window?.location?.hostname === 'localhost'\n ) {\n console.warn('Security violation detected:', threats, 'Input:', input);\n }\n },\n};\n\n/**\n * Sanitize file name for safe display\n * Removes dangerous characters that could lead to XSS\n */\nexport function sanitizeFileName(fileName: string): string {\n if (typeof fileName !== 'string') return '';\n\n // Remove dangerous characters: < > \" ' / \\ and control characters\n let sanitized = fileName.replace(/[<>\"'/\\\\\\x00-\\x1F\\x7F]/g, '');\n\n // Limit length to prevent buffer overflow\n const MAX_FILENAME_LENGTH = 255;\n if (sanitized.length > MAX_FILENAME_LENGTH) {\n const ext = sanitized.substring(sanitized.lastIndexOf('.'));\n const nameWithoutExt = sanitized.substring(0, sanitized.lastIndexOf('.'));\n sanitized =\n nameWithoutExt.substring(0, MAX_FILENAME_LENGTH - ext.length) + ext;\n }\n\n // Remove leading/trailing dots and spaces (Windows filesystem restrictions)\n sanitized = sanitized.replace(/^[\\s.]+|[\\s.]+$/g, '');\n\n return sanitized || 'file';\n}\n\n","<template>\n <div class=\"ina-text-field\">\n <label v-if=\"label\" :for=\"inputId\" class=\"ina-text-field__label\">\n <component :is=\"labelComponent\" v-if=\"labelComponent\" />\n <span v-else-if=\"label && typeof label === 'string'\">{{ label }}</span>\n <span v-if=\"required\" class=\"ina-text-field__required\">*</span>\n </label>\n\n <div :class=\"wrapperClasses\">\n <div v-if=\"prefixIcon\" class=\"ina-text-field__prefix-icon\">\n <component :is=\"prefixIcon\" :size=\"16\" />\n </div>\n\n <input\n v-bind=\"filteredAttrs\"\n :id=\"inputId\"\n ref=\"inputRef\"\n v-model=\"inputValue\"\n :name=\"(attrs.name as string) || undefined\"\n :type=\"type\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n :maxlength=\"maxLength\"\n :autocomplete=\"autocomplete\"\n :spellcheck=\"spellCheck\"\n :autocapitalize=\"autoCapitalize\"\n :autocorrect=\"autoCorrect\"\n :inputmode=\"inputMode\"\n :dir=\"dir\"\n :class=\"inputClasses\"\n @input=\"handleInput\"\n @blur=\"handleBlur\"\n @focus=\"handleFocus\"\n />\n\n <div v-if=\"showCharCount && maxLength\" class=\"ina-text-field__char-count\">\n {{ inputValue.length }}/{{ maxLength }}\n </div>\n\n <button\n v-if=\"showClearButton && !disabled && inputValue\"\n type=\"button\"\n class=\"ina-text-field__clear-button\"\n @click=\"handleClear\"\n >\n <IconX :size=\"16\" />\n </button>\n </div>\n\n <div v-if=\"bottomText || validationError\" :class=\"statusClasses\">\n <template v-if=\"validationError\">{{ validationError }}</template>\n <template v-else>\n <component :is=\"bottomTextComponent\" v-if=\"bottomTextComponent\" />\n <span v-else>{{ bottomText }}</span>\n </template>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, watch, nextTick, onUnmounted, useAttrs } from 'vue';\nimport type { Component } from 'vue';\nimport { IconX } from '@tabler/icons-vue';\nimport {\n validateInput,\n type SecurityConfig,\n DEFAULT_SECURITY_CONFIG,\n} from '../utils/security';\n\nexport type ValidationRule =\n | { kind: 'regex'; pattern: RegExp; message?: string }\n | { kind: 'maxLength'; value: number; message?: string }\n | { kind: 'minLength'; value: number; message?: string }\n | {\n kind: 'custom';\n validate: (v: string) => string | null;\n message?: string;\n };\n\nexport interface TextFieldProps {\n modelValue?: string;\n label?: string | Component;\n helperText?: string | Component;\n placeholder?: string;\n type?: 'text' | 'email' | 'password' | 'number' | 'tel' | 'url';\n size?: 'sm' | 'md' | 'lg';\n status?: 'neutral' | 'success' | 'error' | 'warning';\n statusMessage?: string | Component;\n disabled?: boolean;\n readonly?: boolean;\n required?: boolean;\n maxLength?: number;\n showCharCount?: boolean;\n showClearButton?: boolean;\n prefixIcon?: Component;\n debounce?: number;\n // Security props\n securityConfig?: SecurityConfig;\n // Privacy & abuse protection props\n autocomplete?: string;\n spellCheck?: boolean;\n autoCapitalize?: 'off' | 'none' | 'sentences' | 'words' | 'characters';\n autoCorrect?: 'off' | 'on';\n inputMode?:\n | 'none'\n | 'text'\n | 'tel'\n | 'url'\n | 'email'\n | 'numeric'\n | 'decimal'\n | 'search';\n dir?: 'auto' | 'ltr' | 'rtl';\n // Validation & normalization\n validation?: ValidationRule[];\n normalize?: (value: string) => string;\n}\n\nconst props = withDefaults(defineProps<TextFieldProps>(), {\n modelValue: '',\n type: 'text',\n size: 'md',\n status: 'neutral',\n disabled: false,\n readonly: false,\n required: false,\n showCharCount: false,\n showClearButton: false,\n debounce: 0,\n securityConfig: () => DEFAULT_SECURITY_CONFIG,\n spellCheck: undefined,\n autoCapitalize: undefined,\n autoCorrect: undefined,\n inputMode: undefined,\n dir: undefined,\n});\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string];\n input: [event: Event];\n blur: [event: FocusEvent];\n focus: [event: FocusEvent];\n clear: [];\n}>();\n\nconst attrs = useAttrs();\nconst inputRef = ref<HTMLInputElement>();\nconst inputValue = ref(getInitialValue());\nconst debounceTimer = ref<any>();\nconst validationError = ref<string | null>(null);\n\n// Initialize with sanitized value if security is enabled\nfunction getInitialValue(): string {\n const value = props.modelValue || '';\n if (props.securityConfig?.enableXssProtection) {\n const validation = validateInput(value);\n return validation.sanitized;\n }\n return value;\n}\n\n// Generate unique ID for input, or use id from props/attrs if provided (1:1 with React)\nconst inputId = computed(() => {\n // Check if id is provided via props or attrs (same as React's rest?.id || rest?.name)\n const providedId = (attrs.id as string) || (attrs.name as string);\n if (providedId) {\n return String(providedId);\n }\n // Fallback to generated ID (same as React's String(label).toLowerCase())\n if (props.label && typeof props.label === 'string') {\n return String(props.label).toLowerCase();\n }\n return `text-field-${Math.random().toString(36).substr(2, 9)}`;\n});\n\n// Computed untuk label component\nconst labelComponent = computed(() => {\n if (!props.label) return null;\n if (typeof props.label === 'string') return null;\n return props.label as Component;\n});\n\nconst bottomText = computed(() => {\n if (props.status !== 'neutral' && props.statusMessage) {\n return props.statusMessage;\n }\n return props.statusMessage || props.helperText;\n});\n\nconst bottomTextComponent = computed(() => {\n const text = bottomText.value;\n if (!text) return null;\n if (typeof text === 'string') return null;\n return text as Component;\n});\n\n// Filter out id and name from attrs to avoid conflicts (they're handled explicitly)\nconst filteredAttrs = computed(() => {\n const { id, name, ...rest } = attrs;\n return rest;\n});\n\nconst wrapperClasses = computed(() => {\n const classes = ['ina-text-field__wrapper'];\n\n // Size\n classes.push(`ina-text-field__wrapper--size-${props.size}`);\n\n // States\n if (props.disabled) {\n classes.push('ina-text-field__wrapper--disabled');\n }\n\n if (props.readonly) {\n classes.push('ina-text-field__wrapper--readonly');\n }\n\n if (props.status !== 'neutral') {\n classes.push(`ina-text-field__wrapper--status-${props.status}`);\n }\n\n if (props.prefixIcon) {\n classes.push('ina-text-field__wrapper--with-prefix');\n }\n\n if (props.showClearButton) {\n classes.push('ina-text-field__wrapper--with-clear');\n }\n\n return classes;\n});\n\nconst inputClasses = computed(() => {\n const classes = ['ina-text-field__input'];\n\n if (props.prefixIcon) {\n classes.push('ina-text-field__input--with-prefix');\n }\n\n if (props.showClearButton) {\n classes.push('ina-text-field__input--with-clear');\n }\n\n return classes;\n});\n\nconst statusClasses = computed(() => {\n const classes = ['ina-text-field__status'];\n\n // Use error status if validation error exists\n if (validationError.value) {\n classes.push('ina-text-field__status--error');\n } else if (props.status !== 'neutral') {\n classes.push(`ina-text-field__status--${props.status}`);\n }\n\n return classes;\n});\n\n// Validate input against validation rules\nfunction validateValue(value: string): string | null {\n if (!props.validation || props.validation.length === 0) {\n return null;\n }\n\n for (const rule of props.validation) {\n let error: string | null = null;\n\n switch (rule.kind) {\n case 'regex':\n if (!rule.pattern.test(value)) {\n error = rule.message || 'Input tidak sesuai format yang diharapkan';\n }\n break;\n case 'maxLength':\n if (value.length > rule.value) {\n error = rule.message || `Maksimal ${rule.value} karakter`;\n }\n break;\n case 'minLength':\n if (value.length < rule.value) {\n error = rule.message || `Minimal ${rule.value} karakter`;\n }\n break;\n case 'custom':\n error = rule.validate(value);\n break;\n }\n\n if (error) {\n return error;\n }\n }\n\n return null;\n}\n\nconst handleInput = (event: Event) => {\n const target = event.target as HTMLInputElement;\n let value = target.value;\n\n // Apply maxLength constraint\n if (props.maxLength != null && value.length > props.maxLength) {\n return;\n }\n\n // Apply security validation if enabled\n if (props.securityConfig?.enableXssProtection) {\n const validation = validateInput(value);\n\n if (!validation.isValid) {\n // Log security violations\n if (props.securityConfig.logViolations) {\n console.warn('TextField security violation:', validation.threats);\n }\n\n // Call security violation callback\n if (props.securityConfig.onSecurityViolation) {\n props.securityConfig.onSecurityViolation(validation.threats, value);\n }\n\n // Use sanitized value\n value = validation.sanitized;\n }\n }\n\n // Apply normalization if provided\n if (props.normalize) {\n value = props.normalize(value);\n }\n\n // Validate against validation rules\n validationError.value = validateValue(value);\n\n inputValue.value = value;\n\n if (props.debounce > 0) {\n if (debounceTimer.value) {\n clearTimeout(debounceTimer.value);\n }\n\n debounceTimer.value = setTimeout(() => {\n emit('update:modelValue', inputValue.value);\n emit('input', event);\n }, props.debounce) as unknown as number;\n } else {\n emit('update:modelValue', inputValue.value);\n emit('input', event);\n }\n};\n\nconst handleBlur = (event: FocusEvent) => {\n emit('blur', event);\n};\n\nconst handleFocus = (event: FocusEvent) => {\n emit('focus', event);\n};\n\nconst handleClear = () => {\n inputValue.value = '';\n emit('update:modelValue', '');\n emit('clear');\n\n nextTick(() => {\n inputRef.value?.focus();\n });\n};\n\n// Watch for external modelValue changes\nwatch(\n () => props.modelValue,\n (newValue) => {\n let value = newValue || '';\n\n // Apply security validation when value changes\n if (props.securityConfig?.enableXssProtection) {\n const validation = validateInput(value);\n if (!validation.isValid) {\n if (props.securityConfig.logViolations) {\n console.warn(\n 'TextField security violation on value change:',\n validation.threats\n );\n }\n if (props.securityConfig.onSecurityViolation) {\n props.securityConfig.onSecurityViolation(validation.threats, value);\n }\n value = validation.sanitized;\n }\n }\n\n inputValue.value = value;\n validationError.value = validateValue(value);\n }\n);\n\n// Cleanup debounce timer on unmount\nonUnmounted(() => {\n if (debounceTimer.value) {\n clearTimeout(debounceTimer.value);\n }\n});\n</script>\n","<template>\n <div class=\"ina-chip\" :class=\"chipContainerClasses\">\n <div class=\"ina-chip__list\">\n <button\n v-for=\"(opt, index) in allOptions\"\n :key=\"`${opt.label}-${index}`\"\n type=\"button\"\n :class=\"getChipItemClasses(opt, index)\"\n @click=\"handleChipClick(opt, index)\"\n >\n {{ opt.label }}\n </button>\n </div>\n\n <!-- Render field kustom hanya saat showInput=true -->\n <div v-if=\"showCustomization && showInput\" class=\"ina-chip__custom-field\">\n <div v-if=\"customizationComponent\">\n <component :is=\"customizationComponent\" />\n </div>\n <div v-else>\n <TextField\n :model-value=\"tempValue\"\n class=\"ina-chip__input\"\n placeholder=\"Masukkan data yang Anda inginkan\"\n :show-clear-button=\"false\"\n @update:model-value=\"setTempValue\"\n @blur=\"handleBlur\"\n @keydown=\"handleKeydown\"\n />\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, watch } from 'vue';\nimport TextField from './TextField.vue';\n/**\n * Satu opsi Chip statis.\n */\nexport interface ChipOption {\n /** Teks yang ditampilkan */\n label: string;\n /** Value yang akan dikirim ke onSelect */\n value: string;\n}\n\n/**\n * Props untuk komponen Chip.\n *\n * @param {ChipOption[]} options Daftar opsi statis.\n * @param {string} selected Value yang sedang dipilih.\n * @param {'small'|'medium'} [size='medium'] Ukuran chip.\n * @param {'filled'|'outline'} [variant='outline'] Variant chip (filled atau outline).\n * @param {(value: string) => void} [onSelect] Callback saat user memilih opsi atau menyelesaikan input kustom.\n * @param {boolean} [showCustomization] Jika true, render tombol kustomisasi.\n * @param {string} [customizationLabel] Label tombol kustomisasi. Default: \"Kustomisasi\".\n * @param {any} [customizationComponent] Override UI input kustom (default: number + \"Hari\").\n */\nexport interface ChipProps {\n options: ChipOption[];\n selected: string;\n size?: 'small' | 'medium';\n variant?: 'filled' | 'outline';\n onSelect?: (value: string) => void;\n\n showCustomization?: boolean;\n customizationLabel?: string;\n customizationComponent?: any;\n}\n\nconst props = withDefaults(defineProps<ChipProps>(), {\n size: 'medium',\n variant: 'outline',\n showCustomization: false,\n customizationLabel: 'Kustomisasi',\n});\n\nconst emit = defineEmits<{\n select: [value: string];\n}>();\n\n// Apakah selected berasal dari kustom (bukan opsi statis)\nconst isCustomSelected = computed(\n () => !props.options.some((opt) => opt.value === props.selected)\n);\n\n// showInput: kontrol muncul/tidaknya field kustom\nconst showInput = ref(false);\n// tempValue untuk menampung ketikan user sebelum commit\nconst tempValue = ref(props.selected);\n\n// Sinkronisasi: kalau selected berubah ke statis, sembunyikan input dan reset temp\nwatch(\n () => props.selected,\n (newSelected) => {\n if (!isCustomSelected.value) {\n showInput.value = false;\n tempValue.value = '';\n } else {\n tempValue.value = newSelected;\n }\n },\n { immediate: true }\n);\n\nwatch(\n () => isCustomSelected.value,\n (newIsCustomSelected) => {\n if (!newIsCustomSelected) {\n showInput.value = false;\n tempValue.value = '';\n } else {\n tempValue.value = props.selected;\n }\n }\n);\n\n// Gabungkan opsi statis + tombol kustomisasi\nconst allOptions = computed(() =>\n props.showCustomization\n ? [\n ...props.options,\n { label: props.customizationLabel, value: props.customizationLabel },\n ]\n : props.options\n);\n\nconst chipContainerClasses = computed(() => {\n const classes = ['ina-chip'];\n return classes;\n});\n\nconst getChipItemClasses = (opt: ChipOption, index: number) => {\n const isToggle =\n props.showCustomization && opt.label === props.customizationLabel;\n const isSelected = isToggle\n ? isCustomSelected.value\n : props.selected === opt.value;\n\n const classes = [\n 'ina-chip__item',\n `ina-chip__item--size-${props.size}`,\n `ina-chip__item--variant-${props.variant}`,\n ];\n\n if (isSelected) {\n classes.push('ina-chip__item--selected');\n }\n\n return classes;\n};\n\nconst handleChipClick = (opt: ChipOption, index: number) => {\n const isToggle =\n props.showCustomization && opt.label === props.customizationLabel;\n\n if (isToggle) {\n // klik kustom: tampilkan input\n showInput.value = true;\n // reset tempValue ke current selected (atau '')\n tempValue.value = isCustomSelected.value ? props.selected : '';\n } else {\n // pilih opsi statis\n emit('select', opt.value);\n props.onSelect?.(opt.value);\n }\n};\n\nconst setTempValue = (value: string) => {\n tempValue.value = value;\n};\n\nconst handleBlur = () => {\n // commit value saat blur, hide input\n emit('select', tempValue.value);\n props.onSelect?.(tempValue.value);\n showInput.value = false;\n};\n\nconst handleKeydown = (e: KeyboardEvent) => {\n if (e.key === 'Enter') {\n emit('select', tempValue.value);\n props.onSelect?.(tempValue.value);\n showInput.value = false;\n (e.target as HTMLInputElement).blur();\n }\n};\n</script>\n","<template>\n <div :class=\"containerClasses\" :style=\"containerStyle\">\n <svg\n class=\"ina-circle-progress-bar__svg\"\n width=\"100%\"\n height=\"100%\"\n :viewBox=\"`0 0 ${diameter} ${diameter}`\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <!-- Track Circle -->\n <circle\n class=\"ina-circle-progress-bar__track\"\n :cx=\"center\"\n :cy=\"center\"\n :r=\"radius\"\n :stroke-width=\"strokeWidth\"\n />\n <!-- Progress Circle -->\n <circle\n class=\"ina-circle-progress-bar__progress\"\n :cx=\"center\"\n :cy=\"center\"\n :r=\"radius\"\n :stroke-width=\"strokeWidth\"\n :stroke-dasharray=\"circumference\"\n :stroke-dashoffset=\"strokeDashoffset\"\n />\n </svg>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\n\nexport interface CircleProgressBarProps {\n /**\n * Progress percentage (0-100)\n */\n progress?: number;\n /**\n * Diameter of the circle in px\n * @default 20\n */\n diameter?: number;\n /**\n * Stroke width in px\n * @default 3\n */\n strokeWidth?: number;\n /**\n * Color variant or hex color\n * @default 'primary'\n */\n variant?:\n | 'primary'\n | 'secondary'\n | 'positive'\n | 'warning'\n | 'negative'\n | string;\n /**\n * Track color (background circle)\n * @default '#EAECF0'\n */\n trackColor?: string;\n}\n\nconst props = withDefaults(defineProps<CircleProgressBarProps>(), {\n progress: 0,\n diameter: 20,\n strokeWidth: 3,\n variant: 'primary',\n trackColor: '#EAECF0',\n});\n\nconst normalizedProgress = computed(() =>\n Math.min(100, Math.max(0, props.progress))\n);\n\nconst center = computed(() => props.diameter / 2);\nconst radius = computed(() => (props.diameter - props.strokeWidth) / 2);\nconst circumference = computed(() => 2 * Math.PI * radius.value);\nconst strokeDashoffset = computed(\n () =>\n circumference.value - (normalizedProgress.value / 100) * circumference.value\n);\n\nconst isCustomColor = computed(() => props.variant.startsWith('#'));\n\nconst containerClasses = computed(() => {\n const variantClass = !isCustomColor.value\n ? `ina-circle-progress-bar--${props.variant}`\n : '';\n\n return ['ina-circle-progress-bar', variantClass].filter(Boolean).join(' ');\n});\n\nconst containerStyle = computed(() => {\n const style: Record<string, string | number> = {\n '--ina-circle-progress-size': `${props.diameter}px`,\n };\n\n if (props.trackColor) {\n style['--ina-circle-progress-track-color'] = props.trackColor;\n }\n\n if (isCustomColor.value) {\n style['--ina-circle-progress-color'] = props.variant;\n }\n\n return style;\n});\n</script>\n","<template>\n <div class=\"ina-collapse\" :class=\"collapseClasses\">\n <button\n :id=\"headerId\"\n type=\"button\"\n class=\"ina-collapse__header\"\n :aria-expanded=\"isOpen\"\n :aria-controls=\"contentId\"\n @click=\"toggle\"\n >\n <span class=\"ina-collapse__title\">\n <slot name=\"title\">{{ title }}</slot>\n </span>\n\n <svg\n class=\"ina-collapse__icon\"\n :class=\"{ 'ina-collapse__icon--open': isOpen }\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M6 9L12 15L18 9\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n\n <Transition name=\"collapse\">\n <div\n v-if=\"isOpen\"\n :id=\"contentId\"\n class=\"ina-collapse__content\"\n :aria-labelledby=\"headerId\"\n >\n <div class=\"ina-collapse__body\">\n <slot />\n </div>\n </div>\n </Transition>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nexport interface CollapseProps {\n title?: string;\n defaultOpen?: boolean;\n variant?: 'default' | 'bordered' | 'filled';\n size?: 'sm' | 'md' | 'lg';\n disabled?: boolean;\n}\n\nconst props = withDefaults(defineProps<CollapseProps>(), {\n title: '',\n defaultOpen: false,\n variant: 'default',\n size: 'md',\n disabled: false,\n});\n\nconst emit = defineEmits<{\n toggle: [isOpen: boolean];\n}>();\n\nconst isOpen = ref(props.defaultOpen);\n\n// Generate unique IDs\nconst headerId = computed(\n () => `collapse-header-${Math.random().toString(36).substr(2, 9)}`\n);\nconst contentId = computed(\n () => `collapse-content-${Math.random().toString(36).substr(2, 9)}`\n);\n\nconst collapseClasses = computed(() => {\n const classes = ['ina-collapse'];\n\n classes.push(`ina-collapse--variant-${props.variant}`);\n classes.push(`ina-collapse--size-${props.size}`);\n\n if (props.disabled) {\n classes.push('ina-collapse--disabled');\n }\n\n if (isOpen.value) {\n classes.push('ina-collapse--open');\n }\n\n return classes;\n});\n\nconst toggle = () => {\n if (props.disabled) return;\n\n isOpen.value = !isOpen.value;\n emit('toggle', isOpen.value);\n};\n</script>\n\n<style scoped>\n.collapse-enter-active,\n.collapse-leave-active {\n transition: all 0.3s ease;\n overflow: hidden;\n}\n\n.collapse-enter-from,\n.collapse-leave-to {\n max-height: 0;\n opacity: 0;\n}\n\n.collapse-enter-to,\n.collapse-leave-from {\n max-height: 1000px;\n opacity: 1;\n}\n</style>\n","<template>\n <div class=\"ina-divider\" :class=\"dividerClasses\" role=\"separator\">\n <div v-if=\"label\" class=\"ina-divider__label\">\n {{ label }}\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nexport interface DividerProps {\n orientation?: 'horizontal' | 'vertical';\n variant?: 'solid' | 'dashed' | 'dotted';\n size?: 'sm' | 'md' | 'lg';\n label?: string;\n labelPosition?: 'left' | 'center' | 'right';\n}\n\nconst props = withDefaults(defineProps<DividerProps>(), {\n orientation: 'horizontal',\n variant: 'solid',\n size: 'md',\n labelPosition: 'center',\n});\n\nconst dividerClasses = computed(() => {\n const classes = ['ina-divider'];\n\n classes.push(`ina-divider--orientation-${props.orientation}`);\n classes.push(`ina-divider--variant-${props.variant}`);\n classes.push(`ina-divider--size-${props.size}`);\n\n if (props.label) {\n classes.push('ina-divider--with-label');\n classes.push(`ina-divider--label-${props.labelPosition}`);\n }\n\n return classes;\n});\n</script>\n","<template>\n <div ref=\"containerRef\" class=\"ina-dropdown\" :class=\"containerClasses\">\n <div :class=\"triggerClasses\" @click=\"handleTriggerClick\">\n <slot name=\"trigger\">\n <template v-if=\"trigger\">\n <component :is=\"trigger\" />\n </template>\n <template v-else>\n {{ triggerText }}\n </template>\n </slot>\n </div>\n\n <Teleport v-if=\"mounted\" to=\"body\">\n <Transition name=\"dropdown\">\n <div\n v-if=\"isOpen\"\n :class=\"menuClasses\"\n :style=\"computedDropdownStyle\"\n role=\"menu\"\n @mousedown.stop\n >\n <ul class=\"ina-dropdown__list\">\n <li v-for=\"(item, idx) in displayItems\" :key=\"idx\" role=\"none\">\n <component :is=\"item\" :class=\"'ina-dropdown__item'\" />\n </li>\n </ul>\n <!-- Slot for custom items -->\n <slot />\n </div>\n </Transition>\n </Teleport>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, onMounted, onUnmounted } from 'vue';\nimport { Teleport } from 'vue';\nimport type { Component, VNode } from 'vue';\nexport interface DropdownItem {\n component: Component | VNode | string;\n props?: Record<string, any>;\n}\n\nexport interface DropdownProps {\n /** Trigger element atau text untuk membuka dropdown */\n trigger?: Component | VNode | string;\n /** Text untuk trigger jika tidak menggunakan slot trigger */\n triggerText?: string;\n /** Array of items yang akan ditampilkan sebagai item dropdown */\n /** Array of items yang akan ditampilkan sebagai item dropdown */\n items: (Component | VNode | string)[];\n /** ClassName tambahan untuk kotak dropdown */\n dropdownClassName?: string;\n /** Inline style tambahan untuk kotak dropdown */\n dropdownStyle?: Record<string, any>;\n /** Jika true, dropdown tidak bisa dibuka */\n disabled?: boolean;\n /** Lebar dropdown dalam pixel. Default: 160 */\n dropdownWidth?: number;\n}\n\nconst props = withDefaults(defineProps<DropdownProps>(), {\n triggerText: 'Dropdown',\n disabled: false,\n dropdownWidth: 160,\n dropdownClassName: '',\n});\n\nconst containerRef = ref<HTMLDivElement>();\nconst isOpen = ref(false);\nconst mounted = ref(false);\nconst dropdownPosition = ref<{\n vertical: 'top' | 'bottom';\n horizontal: 'left' | 'right';\n top?: number;\n left?: number;\n}>({ vertical: 'bottom', horizontal: 'right' });\n\nconst displayItems = computed(() => {\n // If items prop is provided, use it; otherwise, slot content will be used\n return props.items || [];\n});\n\nconst containerClasses = computed(() => {\n const classes = ['ina-dropdown'];\n return classes;\n});\n\nconst triggerClasses = computed(() => {\n const classes = ['ina-dropdown__trigger'];\n if (props.disabled) {\n classes.push('ina-dropdown__trigger--disabled');\n }\n return classes;\n});\n\nconst menuClasses = computed(() => {\n const classes = [\n 'ina-dropdown__menu',\n 'ina-dropdown__menu--visible',\n `ina-dropdown__menu--position-${dropdownPosition.value.vertical}`,\n `ina-dropdown__menu--align-${dropdownPosition.value.horizontal}`,\n ];\n if (props.dropdownClassName) {\n classes.push(props.dropdownClassName);\n }\n return classes;\n});\n\nconst dropdownStyle = computed(() => {\n return {\n width: `${props.dropdownWidth}px`,\n ...props.dropdownStyle,\n };\n});\n\nconst computedDropdownStyle = computed(() => {\n const style: Record<string, string> = {\n ...dropdownStyle.value,\n position: 'absolute',\n };\n\n if (dropdownPosition.value.top !== undefined) {\n style.top = `${dropdownPosition.value.top}px`;\n }\n\n if (dropdownPosition.value.left !== undefined) {\n style.left = `${dropdownPosition.value.left}px`;\n }\n\n return style;\n});\n\nconst handleTriggerClick = (e: MouseEvent) => {\n e.stopPropagation();\n\n if (props.disabled) return;\n\n // Hitung posisi dropdown sebelum membuka (untuk portal dengan absolute positioning)\n if (containerRef.value) {\n const rect = containerRef.value.getBoundingClientRect();\n const itemCount = displayItems.value.length || 1; // Fallback to 1 if no items\n const dropdownHeight = itemCount * 40 + 16; // Estimasi tinggi dropdown\n\n // Vertical positioning\n const fitsBelow = rect.bottom + dropdownHeight <= window.innerHeight;\n const vertical = fitsBelow ? 'bottom' : 'top';\n\n // Horizontal positioning\n const fitsRight = rect.right + props.dropdownWidth <= window.innerWidth;\n const horizontal = fitsRight ? 'right' : 'left';\n\n // Calculate absolute position relative to document (for portal)\n // We need to account for scroll position since we're rendering in body\n const scrollTop = window.pageYOffset || document.documentElement.scrollTop;\n const scrollLeft =\n window.pageXOffset || document.documentElement.scrollLeft;\n\n let top = 0;\n let left = 0;\n\n if (vertical === 'bottom') {\n top = rect.bottom + scrollTop + 8; // margin-top\n } else {\n top = rect.top + scrollTop - dropdownHeight - 8; // margin-bottom\n }\n\n if (horizontal === 'right') {\n left = rect.left + scrollLeft;\n } else {\n left = rect.right + scrollLeft - props.dropdownWidth;\n }\n\n dropdownPosition.value = { vertical, horizontal, top, left };\n }\n\n isOpen.value = !isOpen.value;\n};\n\nconst handleClickOutside = (event: Event) => {\n if (\n containerRef.value &&\n !containerRef.value.contains(event.target as Node)\n ) {\n isOpen.value = false;\n }\n};\n\nonMounted(() => {\n mounted.value = true;\n document.addEventListener('click', handleClickOutside);\n});\n\nonUnmounted(() => {\n document.removeEventListener('click', handleClickOutside);\n});\n</script>\n\n<style scoped>\n.dropdown-enter-active,\n.dropdown-leave-active {\n transition: opacity var(--ina-transition-duration-200) ease-out,\n transform var(--ina-transition-duration-200) ease-out;\n}\n\n.dropdown-enter-from,\n.dropdown-leave-to {\n opacity: 0;\n transform: translateY(-0.5rem);\n}\n</style>\n","<template>\n <div :class=\"containerClasses\">\n <div class=\"ina-field-input-table__wrapper\">\n <label class=\"ina-field-input-table__label\">{{ placeholder }}</label>\n <input\n ref=\"inputRef\"\n type=\"text\"\n class=\"ina-field-input-table__input\"\n :value=\"value\"\n @input=\"handleChange\"\n @keydown=\"handleKeyDown\"\n autofocus\n />\n </div>\n\n <div class=\"ina-field-input-table__actions\">\n <button\n type=\"button\"\n @click=\"handleCommit\"\n class=\"ina-field-input-table__action-button ina-field-input-table__action-button--commit\"\n title=\"Commit\"\n >\n <IconCheck\n :size=\"20\"\n class=\"ina-field-input-table__icon ina-field-input-table__icon--commit\"\n />\n </button>\n <button\n type=\"button\"\n @click=\"handleCancel\"\n class=\"ina-field-input-table__action-button ina-field-input-table__action-button--cancel\"\n title=\"Cancel\"\n >\n <IconX\n :size=\"20\"\n class=\"ina-field-input-table__icon ina-field-input-table__icon--cancel\"\n />\n </button>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed } from 'vue';\nimport { IconCheck, IconX } from '@tabler/icons-vue';\nexport interface FieldInputTableProps {\n /** Nilai teks yang sedang diedit */\n value: string | number | any;\n /** Callback saat user mengetik ( setiap perubahan ) */\n onChange: (val: string) => void;\n /** Callback saat user commit (klik ✓ atau tekan Enter) */\n onCommit?: () => void;\n /** Callback saat user batal (klik ✕ atau tekan Esc) */\n onCancel: () => void;\n /** Placeholder teks */\n placeholder?: string;\n}\n\nconst props = withDefaults(defineProps<FieldInputTableProps>(), {\n placeholder: '',\n});\n\nconst emit = defineEmits<{\n change: [val: string];\n commit: [];\n cancel: [];\n}>();\n\nconst inputRef = ref<HTMLInputElement | null>(null);\n\nconst containerClasses = computed(() => {\n const classes = ['ina-field-input-table'];\n return classes.join(' ');\n});\n\nconst handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n handleCommit();\n }\n if (e.key === 'Escape') {\n e.preventDefault();\n handleCancel();\n }\n};\n\nconst handleChange = (e: Event) => {\n const target = e.target as HTMLInputElement;\n emit('change', target.value);\n};\n\nconst handleCommit = () => {\n emit('commit');\n};\n\nconst handleCancel = () => {\n emit('cancel');\n};\n</script>\n\n<style scoped></style>\n","/**\n * File validation utilities for security\n * Validates mimeType, file size, and file extensions\n */\n\n// Allowed MIME types mapping (whitelist approach for security)\nexport const ALLOWED_MIME_TYPES: Record<string, string[]> = {\n // Documents\n 'application/pdf': ['.pdf'],\n 'application/msword': ['.doc'],\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document': ['.docx'],\n 'application/vnd.ms-excel': ['.xls'],\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': ['.xlsx'],\n 'application/vnd.ms-powerpoint': ['.ppt'],\n 'application/vnd.openxmlformats-officedocument.presentationml.presentation': ['.pptx'],\n 'text/plain': ['.txt'],\n 'text/csv': ['.csv'],\n \n // Images\n 'image/jpeg': ['.jpg', '.jpeg'],\n 'image/png': ['.png'],\n 'image/gif': ['.gif'],\n 'image/webp': ['.webp'],\n 'image/svg+xml': ['.svg'],\n \n // Archives\n 'application/zip': ['.zip'],\n 'application/x-rar-compressed': ['.rar'],\n 'application/x-7z-compressed': ['.7z'],\n 'application/gzip': ['.gz'],\n \n // Other\n 'application/json': ['.json'],\n 'application/xml': ['.xml'],\n};\n\n// Dangerous MIME types that should be blocked\nexport const DANGEROUS_MIME_TYPES = [\n 'application/x-executable',\n 'application/x-msdownload',\n 'application/x-sh',\n 'application/x-bat',\n 'application/x-cmd',\n 'text/javascript',\n 'application/javascript',\n 'application/x-javascript',\n 'application/x-php',\n 'application/x-python',\n 'application/x-ruby',\n 'application/x-perl',\n];\n\nexport interface FileValidationResult {\n isValid: boolean;\n error?: string;\n file: File;\n}\n\n/**\n * Validate file MIME type against allowed types\n */\nexport function validateMimeType(\n file: File,\n allowedTypes?: string\n): { isValid: boolean; error?: string } {\n // If no allowedTypes specified, use default whitelist\n if (!allowedTypes) {\n // Check against dangerous types first\n if (DANGEROUS_MIME_TYPES.includes(file.type)) {\n return {\n isValid: false,\n error: 'File type tidak diizinkan untuk keamanan',\n };\n }\n \n // Check if file type is in allowed list\n if (!ALLOWED_MIME_TYPES[file.type]) {\n return {\n isValid: false,\n error: 'Tipe file tidak didukung',\n };\n }\n \n return { isValid: true };\n }\n\n // Parse allowedTypes (can be comma-separated: \"image/*,application/pdf\")\n const allowedList = allowedTypes.split(',').map((t) => t.trim());\n \n // Check against dangerous types\n if (DANGEROUS_MIME_TYPES.includes(file.type)) {\n return {\n isValid: false,\n error: 'File type tidak diizinkan untuk keamanan',\n };\n }\n\n // Validate against allowed types\n const isAllowed = allowedList.some((allowed) => {\n if (allowed.endsWith('/*')) {\n // Wildcard match (e.g., \"image/*\")\n const baseType = allowed.slice(0, -2);\n return file.type.startsWith(baseType + '/');\n } else {\n // Exact match\n return file.type === allowed;\n }\n });\n\n if (!isAllowed) {\n return {\n isValid: false,\n error: `Tipe file harus: ${allowedTypes}`,\n };\n }\n\n return { isValid: true };\n}\n\n/**\n * Validate file extension matches MIME type (additional security check)\n */\nexport function validateFileExtension(file: File): { isValid: boolean; error?: string } {\n const fileName = file.name.toLowerCase();\n const extension = fileName.substring(fileName.lastIndexOf('.'));\n \n const allowedExtensions = ALLOWED_MIME_TYPES[file.type];\n \n if (!allowedExtensions) {\n // If MIME type not in our whitelist, reject\n return {\n isValid: false,\n error: 'Tipe file tidak didukung',\n };\n }\n \n if (!allowedExtensions.includes(extension)) {\n return {\n isValid: false,\n error: 'Ekstensi file tidak sesuai dengan tipe file',\n };\n }\n \n return { isValid: true };\n}\n\n/**\n * Validate file size\n */\nexport function validateFileSize(\n file: File,\n maxSize: number\n): { isValid: boolean; error?: string } {\n if (file.size > maxSize) {\n const maxSizeMB = (maxSize / (1024 * 1024)).toFixed(2);\n return {\n isValid: false,\n error: `Ukuran file maksimal ${maxSizeMB} MB`,\n };\n }\n \n return { isValid: true };\n}\n\n/**\n * Comprehensive file validation\n */\nexport function validateFile(\n file: File,\n options: {\n allowedTypes?: string;\n maxSize?: number;\n validateExtension?: boolean;\n } = {}\n): FileValidationResult {\n const { allowedTypes, maxSize, validateExtension = true } = options;\n\n // Validate MIME type\n const mimeValidation = validateMimeType(file, allowedTypes);\n if (!mimeValidation.isValid) {\n return {\n isValid: false,\n error: mimeValidation.error,\n file,\n };\n }\n\n // Validate file extension (additional security)\n if (validateExtension) {\n const extValidation = validateFileExtension(file);\n if (!extValidation.isValid) {\n return {\n isValid: false,\n error: extValidation.error,\n file,\n };\n }\n }\n\n // Validate file size\n if (maxSize) {\n const sizeValidation = validateFileSize(file, maxSize);\n if (!sizeValidation.isValid) {\n return {\n isValid: false,\n error: sizeValidation.error,\n file,\n };\n }\n }\n\n return {\n isValid: true,\n file,\n };\n}\n\n/**\n * Format file size to human readable format\n */\nexport function formatFileSize(bytes: number): string {\n if (bytes === 0) return '0 Bytes';\n\n const k = 1024;\n const sizes = ['Bytes', 'KB', 'MB', 'GB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n\n return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];\n}\n\n/**\n * Magic number (file signature) mappings for common file types\n * Following OWASP recommendations for file upload security\n */\nconst MAGIC_NUMBERS: Record<string, number[][]> = {\n // Images\n 'image/png': [[0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]],\n 'image/jpeg': [[0xff, 0xd8, 0xff]],\n 'image/gif': [[0x47, 0x49, 0x46, 0x38, 0x37, 0x61], [0x47, 0x49, 0x46, 0x38, 0x39, 0x61]],\n 'image/webp': [[0x52, 0x49, 0x46, 0x46]], // RIFF header, need to check further\n 'image/svg+xml': [[0x3c, 0x3f, 0x78, 0x6d, 0x6c], [0x3c, 0x73, 0x76, 0x67]], // <?xml or <svg\n \n // Documents\n 'application/pdf': [[0x25, 0x50, 0x44, 0x46]], // %PDF\n 'application/msword': [[0xd0, 0xcf, 0x11, 0xe0, 0xa1, 0xb1, 0x1a, 0xe1]], // DOC\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document': [[0x50, 0x4b, 0x03, 0x04]], // DOCX (ZIP)\n 'application/vnd.ms-excel': [[0xd0, 0xcf, 0x11, 0xe0, 0xa1, 0xb1, 0x1a, 0xe1]], // XLS\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': [[0x50, 0x4b, 0x03, 0x04]], // XLSX (ZIP)\n 'application/vnd.ms-powerpoint': [[0xd0, 0xcf, 0x11, 0xe0, 0xa1, 0xb1, 0x1a, 0xe1]], // PPT\n 'application/vnd.openxmlformats-officedocument.presentationml.presentation': [[0x50, 0x4b, 0x03, 0x04]], // PPTX (ZIP)\n 'text/plain': [], // No specific magic number\n 'text/csv': [], // No specific magic number\n \n // Archives\n 'application/zip': [[0x50, 0x4b, 0x03, 0x04], [0x50, 0x4b, 0x05, 0x06], [0x50, 0x4b, 0x07, 0x08]],\n 'application/x-rar-compressed': [[0x52, 0x61, 0x72, 0x21, 0x1a, 0x07]],\n 'application/x-7z-compressed': [[0x37, 0x7a, 0xbc, 0xaf, 0x27, 0x1c]],\n 'application/gzip': [[0x1f, 0x8b]],\n \n // Other\n 'application/json': [], // No specific magic number\n 'application/xml': [[0x3c, 0x3f, 0x78, 0x6d, 0x6c]], // <?xml\n};\n\n/**\n * Check if file bytes match expected magic number\n */\nfunction checkMagicNumber(bytes: Uint8Array, expectedMimeType: string): boolean {\n const signatures = MAGIC_NUMBERS[expectedMimeType];\n \n // If no magic number defined for this type, skip validation\n if (!signatures || signatures.length === 0) {\n return true; // Allow files without specific magic numbers\n }\n \n // Check if any signature matches\n return signatures.some((signature) => {\n if (bytes.length < signature.length) return false;\n \n return signature.every((byte, index) => bytes[index] === byte);\n });\n}\n\n/**\n * Validate file magic number (file signature) against expected MIME type\n * This is a critical security check recommended by OWASP\n * \n * @param file - File object to validate\n * @param expectedMimeType - Expected MIME type\n * @returns Promise with validation result\n */\nexport async function validateMagicNumber(\n file: File,\n expectedMimeType: string\n): Promise<{ isValid: boolean; error?: string }> {\n // Skip validation for files larger than 5MB (performance optimization)\n const MAX_FILE_SIZE_FOR_MAGIC_CHECK = 5 * 1024 * 1024; // 5MB\n if (file.size > MAX_FILE_SIZE_FOR_MAGIC_CHECK) {\n return { isValid: true }; // Skip for large files\n }\n\n // Read first 16 bytes (enough for all known file signatures)\n const HEADER_BYTES = 16;\n \n return new Promise((resolve) => {\n const reader = new FileReader();\n \n reader.onload = (e) => {\n try {\n const arrayBuffer = e.target?.result as ArrayBuffer;\n if (!arrayBuffer) {\n resolve({\n isValid: false,\n error: 'Gagal membaca file signature',\n });\n return;\n }\n \n const bytes = new Uint8Array(arrayBuffer);\n const isValid = checkMagicNumber(bytes, expectedMimeType);\n \n if (!isValid) {\n resolve({\n isValid: false,\n error: 'File signature tidak sesuai dengan tipe file yang diharapkan',\n });\n } else {\n resolve({ isValid: true });\n }\n } catch (error) {\n resolve({\n isValid: false,\n error: 'Error saat memvalidasi file signature',\n });\n }\n };\n \n reader.onerror = () => {\n resolve({\n isValid: false,\n error: 'Gagal membaca file untuk validasi signature',\n });\n };\n \n // Read only first bytes for performance\n reader.readAsArrayBuffer(file.slice(0, HEADER_BYTES));\n });\n}\n\n","<template>\n <div class=\"ina-file-upload\" :class=\"uploadClasses\">\n <div v-if=\"label\" class=\"ina-file-upload__label\">\n <component :is=\"labelComponent\" v-if=\"labelComponent\" />\n <span v-else-if=\"label && typeof label === 'string'\">{{ label }}</span>\n </div>\n\n <div\n class=\"ina-file-upload__dropzone\"\n :class=\"dropzoneClasses\"\n @click=\"triggerFileInput\"\n @dragover=\"handleDragOver\"\n @dragleave=\"handleDragLeave\"\n @drop=\"handleDrop\"\n >\n <input\n v-bind=\"filteredAttrs\"\n :id=\"inputId\"\n ref=\"fileInputRef\"\n type=\"file\"\n :accept=\"type\"\n :multiple=\"multiple\"\n :disabled=\"disabled\"\n class=\"ina-file-upload__input\"\n @change=\"handleFileChange\"\n />\n\n <div class=\"ina-file-upload__content\">\n <div class=\"ina-file-upload__icon\">\n <IconUpload :size=\"24\" />\n </div>\n\n <div class=\"ina-file-upload__text\">\n <div class=\"ina-file-upload__title\">\n {{ title }}\n </div>\n\n <div class=\"ina-file-upload__description\">\n {{ description }}\n </div>\n </div>\n\n <button\n type=\"button\"\n class=\"ina-file-upload__button\"\n :disabled=\"disabled\"\n @click.stop=\"triggerFileInput\"\n >\n Pilih File\n </button>\n </div>\n </div>\n\n <template v-if=\"files.length > 0\">\n <div class=\"ina-file-upload__files\">\n <div\n v-for=\"(uploadedFile, displayIndex) in displayedFiles\"\n :key=\"`${uploadedFile.file.name}-${getOriginalIndex(uploadedFile)}`\"\n class=\"ina-file-upload__file\"\n :class=\"{\n 'ina-file-upload__file--error': uploadedFile.status === 'error',\n 'ina-file-upload__file--success': uploadedFile.status === 'success',\n 'ina-file-upload__file--uploading':\n uploadedFile.status === 'uploading',\n }\"\n >\n <div class=\"ina-file-upload__file-indicator\">\n <div\n v-if=\"uploadedFile.status === 'uploading'\"\n class=\"ina-file-upload__file-icon-wrapper ina-file-upload__file-icon-wrapper--uploading\"\n >\n <IconLoader2\n :size=\"20\"\n class=\"ina-file-upload__file-icon--spinning\"\n />\n </div>\n <div\n v-else-if=\"uploadedFile.status === 'success'\"\n class=\"ina-file-upload__file-icon-wrapper ina-file-upload__file-icon-wrapper--success\"\n >\n <IconCircleCheck :size=\"20\" stroke=\"2\" />\n </div>\n <div\n v-else-if=\"uploadedFile.status === 'error'\"\n class=\"ina-file-upload__file-icon-wrapper ina-file-upload__file-icon-wrapper--error\"\n >\n <IconCircleX :size=\"20\" stroke=\"2\" />\n </div>\n <div\n v-else-if=\"uploadedFile.status === 'idle'\"\n class=\"ina-file-upload__file-icon-wrapper ina-file-upload__file-icon-wrapper--success\"\n >\n <IconCircleCheck :size=\"20\" stroke=\"2\" />\n </div>\n </div>\n\n <div class=\"ina-file-upload__file-info\">\n <div class=\"ina-file-upload__file-name\">\n {{ sanitizeFileName(uploadedFile.file.name) }}\n </div>\n <div class=\"ina-file-upload__file-size\">\n {{ formatFileSize(uploadedFile.file.size) }}\n </div>\n <div v-if=\"uploadedFile.error\" class=\"ina-file-upload__file-error\">\n {{ uploadedFile.error }}\n </div>\n </div>\n\n <div class=\"ina-file-upload__file-actions\">\n <template v-if=\"uploadedFile.status === 'error'\">\n <button\n title=\"Coba lagi\"\n type=\"button\"\n class=\"ina-file-upload__file-retry\"\n @click=\"\n updateFileStatus(getOriginalIndex(uploadedFile), 'idle')\n \"\n >\n <IconRotateClockwise :size=\"20\" />\n </button>\n <button\n title=\"Hapus file\"\n type=\"button\"\n class=\"ina-file-upload__file-remove\"\n @click=\"removeFile(getOriginalIndex(uploadedFile))\"\n >\n <IconTrash :size=\"20\" />\n </button>\n </template>\n <button\n v-else-if=\"uploadedFile.status === 'uploading'\"\n title=\"Batalkan upload\"\n type=\"button\"\n class=\"ina-file-upload__file-remove\"\n @click=\"removeFile(getOriginalIndex(uploadedFile))\"\n >\n <IconX :size=\"20\" />\n </button>\n <button\n v-else-if=\"uploadedFile.status === 'success'\"\n title=\"Hapus file\"\n type=\"button\"\n class=\"ina-file-upload__file-remove\"\n @click=\"removeFile(getOriginalIndex(uploadedFile))\"\n >\n <IconTrash :size=\"20\" />\n </button>\n <button\n v-else-if=\"uploadedFile.status === 'idle'\"\n title=\"Hapus file\"\n type=\"button\"\n class=\"ina-file-upload__file-remove\"\n @click=\"removeFile(getOriginalIndex(uploadedFile))\"\n >\n <IconTrash :size=\"20\" />\n </button>\n </div>\n </div>\n </div>\n <button\n v-if=\"multiple && files.length > 5\"\n type=\"button\"\n class=\"ina-file-upload__show-more\"\n @click=\"showAllFiles = !showAllFiles\"\n >\n {{ showAllFiles ? 'Sembunyikan' : 'Lihat Selengkapnya' }}\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n :class=\"{\n 'ina-file-upload__show-more-icon--expanded': showAllFiles,\n }\"\n class=\"ina-file-upload__show-more-icon\"\n >\n <path\n d=\"M6 9L12 15L18 9\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n </template>\n\n <div v-if=\"validationErrors.length > 0\" class=\"ina-file-upload__errors\">\n <div\n v-for=\"(error, index) in validationErrors\"\n :key=\"index\"\n class=\"ina-file-upload__error-message\"\n >\n {{ sanitizeFileName(error.file.name) }}: {{ error.error }}\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, useAttrs } from 'vue';\nimport type { Component } from 'vue';\nimport {\n IconUpload,\n IconX,\n IconLoader2,\n IconTrash,\n IconRotateClockwise,\n IconCircleCheck,\n IconCircleX,\n} from '@tabler/icons-vue';\nimport {\n validateFile,\n validateMagicNumber,\n formatFileSize,\n type FileValidationResult,\n} from '../utils/fileValidation';\nimport { sanitizeFileName } from '../utils/security';\n\nexport type FileUploadStatus = 'idle' | 'uploading' | 'success' | 'error';\n\nexport interface UploadedFile {\n file: File;\n status: FileUploadStatus;\n error?: string;\n progress?: number;\n}\n\nexport interface FileUploadProps {\n /**\n * Label untuk file upload.\n */\n label?: string | Component;\n\n /**\n * Title di dalam dropzone.\n */\n title?: string;\n\n /**\n * Description di dalam dropzone.\n */\n description?: string;\n\n /**\n * Tipe file yang diizinkan (MIME types, e.g., \"image/*,application/pdf\").\n */\n type?: string;\n\n /**\n * Apakah bisa upload multiple files.\n */\n multiple?: boolean;\n\n /**\n * Ukuran maksimum file dalam bytes (0 = unlimited).\n */\n maxSize?: number;\n\n /**\n * Ekstensi file yang diizinkan (e.g., ['png', 'jpg', 'pdf']).\n * Jika disediakan, akan divalidasi selain MIME type.\n */\n allowedExtensions?: string[];\n\n /**\n * Maksimal jumlah file yang bisa diupload (hanya untuk multiple=true).\n */\n maxFiles?: number;\n\n /**\n * Maksimal ukuran total semua file dalam MB (hanya untuk multiple=true).\n */\n maxTotalSizeMB?: number;\n\n /**\n * Validasi magic number (file signature) sesuai rekomendasi OWASP.\n * Default: true untuk security maksimal.\n */\n validateMagicNumber?: boolean;\n\n /**\n * Apakah disabled.\n */\n disabled?: boolean;\n\n /**\n * Callback ketika file berubah.\n */\n onChange?: (files: File[], errors: FileValidationResult[]) => void;\n\n /**\n * Callback ketika file dihapus.\n */\n onRemove?: (file: File, index: number) => void;\n}\n\nconst props = withDefaults(defineProps<FileUploadProps>(), {\n title: 'Unggah File',\n description: 'Unggah atau seret dan lepas ke dalam kotak ini.',\n type: '',\n multiple: false,\n maxSize: 0,\n allowedExtensions: undefined,\n maxFiles: undefined,\n maxTotalSizeMB: undefined,\n validateMagicNumber: true, // Default: true sesuai rekomendasi OWASP\n disabled: false,\n});\n\nconst emit = defineEmits<{\n change: [files: File[], errors: FileValidationResult[]];\n remove: [file: File, index: number];\n}>();\n\nconst attrs = useAttrs();\nconst fileInputRef = ref<HTMLInputElement>();\nconst files = ref<UploadedFile[]>([]);\nconst isDragOver = ref(false);\nconst validationErrors = ref<FileValidationResult[]>([]);\nconst showAllFiles = ref(false);\n\n// Generate ID for input from attrs if provided\nconst inputId = computed(() => {\n const providedId = (attrs.id as string) || (attrs.name as string);\n return providedId ? String(providedId) : undefined;\n});\n\n// Filter out id, name, type, multiple, disabled, and class from attrs to avoid conflicts\n// (they're handled explicitly via props)\nconst filteredAttrs = computed(() => {\n const {\n id,\n name,\n type,\n multiple,\n disabled,\n class: classAttr,\n ...rest\n } = attrs;\n return rest;\n});\n\nconst displayedFiles = computed(() => {\n if (props.multiple && files.value.length > 5 && !showAllFiles.value) {\n return files.value.slice(0, 5);\n }\n return files.value;\n});\n\n// Computed untuk label component\nconst labelComponent = computed(() => {\n if (!props.label) return null;\n if (typeof props.label === 'string') return null;\n return props.label as Component;\n});\n\nconst getOriginalIndex = (uploadedFile: UploadedFile): number => {\n return files.value.findIndex(\n (f) =>\n f.file.name === uploadedFile.file.name &&\n f.file.size === uploadedFile.file.size &&\n f.status === uploadedFile.status\n );\n};\n\nconst uploadClasses = computed(() => {\n const classes = ['ina-file-upload'];\n\n if (props.disabled) {\n classes.push('ina-file-upload--disabled');\n }\n\n return classes;\n});\n\nconst dropzoneClasses = computed(() => {\n const classes = ['ina-file-upload__dropzone'];\n\n if (isDragOver.value) {\n classes.push('ina-file-upload__dropzone--drag-over');\n }\n\n if (props.disabled) {\n classes.push('ina-file-upload__dropzone--disabled');\n }\n\n return classes;\n});\n\nconst triggerFileInput = () => {\n if (props.disabled) return;\n\n fileInputRef.value?.click();\n};\n\nconst handleFileChange = async (event: Event) => {\n const target = event.target as HTMLInputElement;\n const selectedFiles = Array.from(target.files || []);\n\n await processFiles(selectedFiles);\n // Reset input\n if (fileInputRef.value) {\n fileInputRef.value.value = '';\n }\n};\n\nconst handleDragOver = (event: DragEvent) => {\n event.preventDefault();\n event.stopPropagation();\n if (!props.disabled) {\n isDragOver.value = true;\n }\n};\n\nconst handleDragLeave = (event: DragEvent) => {\n event.preventDefault();\n event.stopPropagation();\n isDragOver.value = false;\n};\n\nconst handleDrop = async (event: DragEvent) => {\n event.preventDefault();\n event.stopPropagation();\n isDragOver.value = false;\n\n if (props.disabled) return;\n\n const droppedFiles = Array.from(event.dataTransfer?.files || []);\n await processFiles(droppedFiles);\n};\n\nconst processFiles = async (newFiles: File[]) => {\n const validationResults: FileValidationResult[] = [];\n const validFiles: UploadedFile[] = [];\n const errors: FileValidationResult[] = [];\n\n // Check maxFiles limit\n if (props.multiple && props.maxFiles) {\n const currentCount = files.value.length;\n if (currentCount + newFiles.length > props.maxFiles) {\n const allowedCount = props.maxFiles - currentCount;\n if (allowedCount <= 0) {\n errors.push({\n isValid: false,\n error: `Maksimal ${props.maxFiles} file yang dapat diupload`,\n file: newFiles[0],\n });\n validationErrors.value = errors;\n props.onChange?.([], errors);\n return;\n }\n newFiles = newFiles.slice(0, allowedCount);\n }\n }\n\n // Check maxTotalSizeMB limit\n if (props.multiple && props.maxTotalSizeMB) {\n const currentTotalSize = files.value.reduce(\n (sum, f) => sum + f.file.size,\n 0\n );\n const newFilesTotalSize = newFiles.reduce((sum, f) => sum + f.size, 0);\n const maxTotalSizeBytes = props.maxTotalSizeMB * 1024 * 1024;\n\n if (currentTotalSize + newFilesTotalSize > maxTotalSizeBytes) {\n errors.push({\n isValid: false,\n error: `Ukuran total file maksimal ${props.maxTotalSizeMB} MB`,\n file: newFiles[0],\n });\n validationErrors.value = errors;\n props.onChange?.([], errors);\n return;\n }\n }\n\n // Validate each file\n for (const file of newFiles) {\n // Validate allowedExtensions if provided\n if (props.allowedExtensions && props.allowedExtensions.length > 0) {\n const fileName = file.name.toLowerCase();\n const extension = fileName.substring(fileName.lastIndexOf('.') + 1);\n if (!props.allowedExtensions.includes(extension.toLowerCase())) {\n errors.push({\n isValid: false,\n error: `Ekstensi file harus: ${props.allowedExtensions.join(', ')}`,\n file,\n });\n validationResults.push({\n isValid: false,\n error: `Ekstensi file harus: ${props.allowedExtensions.join(', ')}`,\n file,\n });\n continue;\n }\n }\n\n // Standard file validation\n const validation = validateFile(file, {\n allowedTypes: props.type || undefined,\n maxSize: props.maxSize || undefined,\n validateExtension: true,\n });\n\n if (!validation.isValid) {\n errors.push(validation);\n validationResults.push(validation);\n continue;\n }\n\n // Magic number validation (if enabled)\n if (props.validateMagicNumber && file.type) {\n const magicValidation = await validateMagicNumber(file, file.type);\n if (!magicValidation.isValid) {\n errors.push({\n isValid: false,\n error: magicValidation.error || 'File signature tidak valid',\n file,\n });\n validationResults.push({\n isValid: false,\n error: magicValidation.error || 'File signature tidak valid',\n file,\n });\n continue;\n }\n }\n\n // All validations passed\n validFiles.push({\n file,\n status: 'idle',\n });\n validationResults.push({\n isValid: true,\n file,\n });\n }\n\n if (props.multiple) {\n files.value = [...files.value, ...validFiles];\n } else {\n files.value = validFiles.slice(0, 1);\n }\n\n validationErrors.value = errors;\n\n const allValidFiles = props.multiple\n ? [...files.value, ...validFiles].map((uf) => uf.file)\n : validFiles.map((uf) => uf.file);\n\n props.onChange?.(allValidFiles, errors);\n};\n\nconst removeFile = (index: number) => {\n if (props.disabled) return;\n\n const removedFile = files.value[index];\n const updatedFiles = files.value.filter((_, i) => i !== index);\n files.value = updatedFiles;\n\n props.onRemove?.(removedFile.file, index);\n props.onChange?.(\n updatedFiles.map((uf) => uf.file),\n validationErrors.value\n );\n};\n\nconst updateFileStatus = (\n index: number,\n status: FileUploadStatus,\n error?: string,\n progress?: number\n) => {\n files.value = files.value.map((file, i) =>\n i === index ? { ...file, status, error, progress } : file\n );\n};\n</script>\n","<template>\n <div class=\"ina-input-search\" :class=\"containerClasses\">\n <label v-if=\"label\" :for=\"inputId\" class=\"ina-input-search__label\">\n {{ label }}\n <span v-if=\"required\" class=\"ina-input-search__required\">*</span>\n </label>\n\n <div class=\"ina-input-search__wrapper\">\n <div class=\"ina-input-search__search-icon\">\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle\n cx=\"11\"\n cy=\"11\"\n r=\"8\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n />\n <path\n d=\"M21 21L16.65 16.65\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </div>\n\n <input\n v-bind=\"$attrs\"\n :id=\"inputId\"\n ref=\"inputRef\"\n v-model=\"inputValue\"\n type=\"text\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n :maxlength=\"maxLength\"\n :class=\"inputClasses\"\n @input=\"handleInput\"\n @blur=\"handleBlur\"\n @focus=\"handleFocus\"\n @keydown.enter=\"handleSearch\"\n />\n\n <button\n v-if=\"inputValue && showClearButton\"\n type=\"button\"\n class=\"ina-input-search__clear-button\"\n @click=\"handleClear\"\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M18 6L6 18M6 6L18 18\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n </div>\n\n <div v-if=\"statusMessage\" :class=\"statusClasses\">\n {{ statusMessage }}\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, watch, nextTick } from 'vue';\nexport interface InputSearchProps {\n modelValue?: string;\n label?: string;\n placeholder?: string;\n size?: 'sm' | 'md' | 'lg';\n status?: 'neutral' | 'success' | 'error' | 'warning';\n statusMessage?: string;\n disabled?: boolean;\n readonly?: boolean;\n required?: boolean;\n maxLength?: number;\n showClearButton?: boolean;\n debounce?: number;\n}\n\nconst props = withDefaults(defineProps<InputSearchProps>(), {\n modelValue: '',\n size: 'md',\n status: 'neutral',\n disabled: false,\n readonly: false,\n required: false,\n showClearButton: true,\n debounce: 300,\n});\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string];\n input: [event: Event];\n search: [value: string];\n blur: [event: FocusEvent];\n focus: [event: FocusEvent];\n clear: [];\n}>();\n\nconst inputRef = ref<HTMLInputElement>();\nconst inputValue = ref(props.modelValue);\nconst debounceTimer = ref<any>();\n\n// Generate unique ID for input\nconst inputId = computed(\n () => `input-search-${Math.random().toString(36).substr(2, 9)}`\n);\n\nconst containerClasses = computed(() => {\n const classes = ['ina-input-search'];\n\n if (props.disabled) {\n classes.push('ina-input-search--disabled');\n }\n\n return classes;\n});\n\nconst inputClasses = computed(() => {\n const classes = ['ina-input-search__input'];\n\n classes.push(`ina-input-search__input--size-${props.size}`);\n\n if (props.disabled) {\n classes.push('ina-input-search__input--disabled');\n }\n\n if (props.readonly) {\n classes.push('ina-input-search__input--readonly');\n }\n\n if (props.status !== 'neutral') {\n classes.push(`ina-input-search__input--status-${props.status}`);\n }\n\n return classes;\n});\n\nconst statusClasses = computed(() => {\n const classes = ['ina-input-search__status'];\n\n if (props.status !== 'neutral') {\n classes.push(`ina-input-search__status--${props.status}`);\n }\n\n return classes;\n});\n\nconst handleInput = (event: Event) => {\n const target = event.target as HTMLInputElement;\n inputValue.value = target.value;\n\n if (props.debounce > 0) {\n if (debounceTimer.value) {\n clearTimeout(debounceTimer.value);\n }\n\n debounceTimer.value = setTimeout(() => {\n emit('update:modelValue', inputValue.value);\n emit('input', event);\n }, props.debounce) as unknown as number;\n } else {\n emit('update:modelValue', inputValue.value);\n emit('input', event);\n }\n};\n\nconst handleSearch = () => {\n emit('search', inputValue.value);\n};\n\nconst handleBlur = (event: FocusEvent) => {\n emit('blur', event);\n};\n\nconst handleFocus = (event: FocusEvent) => {\n emit('focus', event);\n};\n\nconst handleClear = () => {\n inputValue.value = '';\n emit('update:modelValue', '');\n emit('clear');\n\n nextTick(() => {\n inputRef.value?.focus();\n });\n};\n\n// Watch for external modelValue changes\nwatch(\n () => props.modelValue,\n (newValue) => {\n inputValue.value = newValue || '';\n }\n);\n\n// Cleanup debounce timer on unmount\nimport { onUnmounted } from 'vue';\nonUnmounted(() => {\n if (debounceTimer.value) {\n clearTimeout(debounceTimer.value);\n }\n});\n</script>\n","<template>\n <Teleport to=\"body\">\n <Transition name=\"modal\">\n <div\n v-if=\"isOpen\"\n class=\"ina-modal\"\n :class=\"modalClasses\"\n @click=\"handleBackdropClick\"\n >\n <div class=\"ina-modal__backdrop\" />\n\n <div class=\"ina-modal__container\">\n <div\n ref=\"modalRef\"\n class=\"ina-modal__dialog\"\n :class=\"dialogClasses\"\n role=\"dialog\"\n :aria-modal=\"true\"\n :aria-labelledby=\"titleId\"\n :aria-describedby=\"descriptionId\"\n @click.stop\n >\n <div v-if=\"showHeader\" class=\"ina-modal__header\">\n <h2 :id=\"titleId\" class=\"ina-modal__title\">\n <slot name=\"title\">{{ title }}</slot>\n </h2>\n\n <button\n v-if=\"showCloseButton\"\n type=\"button\"\n class=\"ina-modal__close-button\"\n :aria-label=\"closeLabel\"\n @click=\"handleClose\"\n >\n <IconX :size=\"24\" class=\"ina-modal__close-icon\" />\n </button>\n </div>\n\n <div class=\"ina-modal__body\">\n <div\n v-if=\"description\"\n :id=\"descriptionId\"\n class=\"ina-modal__description\"\n >\n {{ description }}\n </div>\n\n <slot />\n </div>\n\n <div v-if=\"showFooter\" class=\"ina-modal__footer\">\n <slot name=\"footer\" />\n </div>\n </div>\n </div>\n </div>\n </Transition>\n </Teleport>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, watch, nextTick, onMounted, onUnmounted } from 'vue';\nimport { IconX } from '@tabler/icons-vue';\nexport interface ModalProps {\n modelValue: boolean;\n title?: string;\n description?: string;\n size?: 'sm' | 'md' | 'lg' | 'xl' | 'full' | '';\n variant?: 'default' | 'centered' | 'fullscreen';\n showCloseButton?: boolean;\n showHeader?: boolean;\n showFooter?: boolean;\n closeLabel?: string;\n closeOnBackdrop?: boolean;\n closeOnEscape?: boolean;\n persistent?: boolean;\n}\n\nconst props = withDefaults(defineProps<ModalProps>(), {\n modelValue: false,\n size: '',\n variant: 'default',\n showCloseButton: true,\n showHeader: true,\n showFooter: false,\n closeLabel: 'Close modal',\n closeOnBackdrop: true,\n closeOnEscape: true,\n persistent: false,\n});\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: boolean];\n close: [];\n open: [];\n}>();\n\nconst modalRef = ref<HTMLDivElement>();\nconst isOpen = ref(props.modelValue);\n\n// Generate unique IDs\nconst titleId = computed(\n () => `modal-title-${Math.random().toString(36).substr(2, 9)}`\n);\nconst descriptionId = computed(\n () => `modal-description-${Math.random().toString(36).substr(2, 9)}`\n);\n\nconst modalClasses = computed(() => {\n const classes = ['ina-modal'];\n\n classes.push(`ina-modal--variant-${props.variant}`);\n\n if (props.persistent) {\n classes.push('ina-modal--persistent');\n }\n\n return classes;\n});\n\nconst dialogClasses = computed(() => {\n const classes = ['ina-modal__dialog'];\n\n if (props.size) {\n classes.push(`ina-modal__dialog--size-${props.size}`);\n }\n\n return classes;\n});\n\nconst handleClose = () => {\n if (props.persistent) return;\n\n isOpen.value = false;\n emit('update:modelValue', false);\n emit('close');\n};\n\nconst handleBackdropClick = (event: Event) => {\n if (\n event.target === event.currentTarget &&\n props.closeOnBackdrop &&\n !props.persistent\n ) {\n handleClose();\n }\n};\n\nconst handleEscape = (event: KeyboardEvent) => {\n if (event.key === 'Escape' && props.closeOnEscape && !props.persistent) {\n handleClose();\n }\n};\n\nconst focusModal = () => {\n nextTick(() => {\n if (modalRef.value) {\n modalRef.value.focus();\n }\n });\n};\n\n// Watch for external modelValue changes\nwatch(\n () => props.modelValue,\n (newValue) => {\n isOpen.value = newValue;\n\n if (newValue) {\n emit('open');\n focusModal();\n }\n }\n);\n\nonMounted(() => {\n document.addEventListener('keydown', handleEscape);\n});\n\nonUnmounted(() => {\n document.removeEventListener('keydown', handleEscape);\n});\n</script>\n\n<style scoped>\n.modal-enter-active,\n.modal-leave-active {\n transition: opacity 0.3s ease;\n}\n\n.modal-enter-active .ina-modal__dialog,\n.modal-leave-active .ina-modal__dialog {\n transition: opacity 0.3s ease, transform 0.3s ease;\n}\n\n.modal-enter-from,\n.modal-leave-to {\n opacity: 0;\n}\n\n.modal-enter-from .ina-modal__dialog,\n.modal-leave-to .ina-modal__dialog {\n opacity: 0;\n transform: scale(0.9) translateY(-20px);\n}\n\n.modal-enter-to .ina-modal__dialog,\n.modal-leave-from .ina-modal__dialog {\n opacity: 1;\n transform: scale(1) translateY(0);\n}\n</style>\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","<template>\n <div ref=\"containerRef\" class=\"ina-month-picker\" :class=\"containerClasses\">\n <label v-if=\"label\" :for=\"triggerId\" class=\"ina-month-picker__label\">\n {{ label }}\n <span v-if=\"required\" class=\"ina-month-picker__required\">*</span>\n </label>\n\n <!-- Trigger Button -->\n <button\n :id=\"triggerId\"\n ref=\"triggerRef\"\n type=\"button\"\n :class=\"triggerClasses\"\n :disabled=\"disabled || readonly\"\n :aria-expanded=\"isOpen\"\n :aria-haspopup=\"true\"\n :aria-labelledby=\"label ? `${triggerId}-label` : undefined\"\n @click=\"togglePanel\"\n @keydown=\"handleKeydown\"\n >\n <div v-if=\"showIcon\" class=\"ina-month-picker__prefix-icon\">\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <rect\n x=\"3\"\n y=\"4\"\n width=\"18\"\n height=\"18\"\n rx=\"2\"\n ry=\"2\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n />\n <line\n x1=\"16\"\n y1=\"2\"\n x2=\"16\"\n y2=\"6\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n />\n <line\n x1=\"8\"\n y1=\"2\"\n x2=\"8\"\n y2=\"6\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n />\n <line\n x1=\"3\"\n y1=\"10\"\n x2=\"21\"\n y2=\"10\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n />\n </svg>\n </div>\n\n <span class=\"ina-month-picker__trigger-text\">\n {{ selectedMonthDisplay || placeholder }}\n </span>\n\n <button\n v-if=\"\n showClearButton &&\n selectedMonth !== undefined &&\n !disabled &&\n !readonly\n \"\n type=\"button\"\n class=\"ina-month-picker__clear-button\"\n @click.stop=\"handleClear\"\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M18 6L6 18M6 6L18 18\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n\n <svg\n class=\"ina-month-picker__chevron\"\n :class=\"{ 'ina-month-picker__chevron--open': isOpen }\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M6 9L12 15L18 9\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n\n <!-- Month Picker Panel -->\n <Transition name=\"panel\">\n <div\n v-if=\"isOpen\"\n ref=\"panelRef\"\n :class=\"[\n 'ina-month-picker__panel',\n { 'ina-month-picker__panel--open': isOpen },\n { 'ina-month-picker__panel--right-aligned': useRightPositioning },\n ]\"\n :style=\"panelStyle\"\n >\n <!-- Month Grid -->\n <div class=\"ina-month-picker__grid\">\n <button\n v-for=\"(month, index) in monthNames\"\n :key=\"index\"\n type=\"button\"\n :class=\"getMonthClasses(index)\"\n :disabled=\"props.disabled\"\n @click=\"selectMonth(index)\"\n @mouseenter=\"!props.disabled && (hoveredMonth = index)\"\n @mouseleave=\"hoveredMonth = null\"\n >\n {{ month }}\n </button>\n </div>\n </div>\n </Transition>\n\n <div v-if=\"statusMessage\" :class=\"statusClasses\">\n {{ statusMessage }}\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, nextTick, onMounted, onUnmounted } from 'vue';\nimport clsx from 'clsx';\nexport interface MonthPickerProps {\n modelValue?: number;\n label?: string;\n placeholder?: string;\n size?: 'sm' | 'md' | 'lg';\n status?: 'neutral' | 'success' | 'error' | 'warning';\n statusMessage?: string;\n disabled?: boolean;\n readonly?: boolean;\n required?: boolean;\n showIcon?: boolean;\n showClearButton?: boolean;\n}\n\nconst props = withDefaults(defineProps<MonthPickerProps>(), {\n modelValue: undefined,\n size: 'md',\n status: 'neutral',\n disabled: false,\n readonly: false,\n required: false,\n showIcon: false,\n showClearButton: false,\n});\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: number | undefined];\n change: [value: number | undefined];\n clear: [];\n}>();\n\nconst containerRef = ref<HTMLDivElement>();\nconst triggerRef = ref<HTMLButtonElement>();\nconst panelRef = ref<HTMLDivElement>();\nconst isOpen = ref(false);\nconst panelStyle = ref<Record<string, string>>({});\nconst useRightPositioning = ref(false);\nconst hoveredMonth = ref<number | null>(null);\n\n// Generate unique ID for trigger\nconst triggerId = computed(\n () => `month-picker-${Math.random().toString(36).substr(2, 9)}`\n);\n\nconst selectedMonth = computed(() => props.modelValue);\n\nconst monthNames = [\n 'Jan',\n 'Feb',\n 'Mar',\n 'Apr',\n 'Mei',\n 'Jun',\n 'Jul',\n 'Agu',\n 'Sep',\n 'Okt',\n 'Nov',\n 'Des',\n];\n\nconst selectedMonthDisplay = computed(() => {\n if (\n selectedMonth.value !== undefined &&\n selectedMonth.value >= 0 &&\n selectedMonth.value < 12\n ) {\n return monthNames[selectedMonth.value];\n }\n return '';\n});\n\nconst containerClasses = computed(() => {\n const classes = ['ina-month-picker'];\n\n if (props.disabled) {\n classes.push('ina-month-picker--disabled');\n }\n\n return classes;\n});\n\nconst triggerClasses = computed(() => {\n const classes = ['ina-month-picker__trigger'];\n\n // Size\n classes.push(`ina-month-picker__trigger--size-${props.size}`);\n\n // States\n if (props.disabled) {\n classes.push('ina-month-picker__trigger--disabled');\n }\n\n if (props.readonly) {\n classes.push('ina-month-picker__trigger--readonly');\n }\n\n if (props.status !== 'neutral') {\n classes.push(`ina-month-picker__trigger--status-${props.status}`);\n }\n\n if (isOpen.value) {\n classes.push('ina-month-picker__trigger--open');\n }\n\n return classes;\n});\n\nconst statusClasses = computed(() => {\n const classes = ['ina-month-picker__status'];\n\n if (props.status !== 'neutral') {\n classes.push(`ina-month-picker__status--${props.status}`);\n }\n\n return classes;\n});\n\nconst getMonthClasses = (monthIndex: number) => {\n const isSelected = monthIndex === selectedMonth.value;\n const isHovered = monthIndex === hoveredMonth.value;\n\n return clsx(\n 'ina-month-picker__month-option',\n isSelected && 'ina-month-picker__month-option--selected',\n isHovered && 'ina-month-picker__month-option--hovered'\n );\n};\n\nconst togglePanel = () => {\n if (props.disabled || props.readonly) return;\n\n isOpen.value = !isOpen.value;\n\n if (isOpen.value) {\n nextTick(() => {\n positionPanel();\n });\n }\n};\n\nconst positionPanel = () => {\n if (!triggerRef.value || !panelRef.value) return;\n\n // Use requestAnimationFrame to ensure panel is rendered\n requestAnimationFrame(() => {\n if (!triggerRef.value || !panelRef.value) return;\n\n const triggerRect = triggerRef.value.getBoundingClientRect();\n const panelRect = panelRef.value.getBoundingClientRect();\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n\n // Default panel width from CSS (240px)\n const defaultPanelWidth = 240;\n const panelWidthValue = panelRect.width || defaultPanelWidth;\n\n // Calculate available space from both sides\n const availableSpaceRight = viewportWidth - triggerRect.right;\n const availableSpaceLeft = triggerRect.left;\n const isMobile = viewportWidth <= 640;\n\n // Determine horizontal positioning based on available space\n let shouldUseRight = false;\n let leftValue: string | undefined = undefined;\n let rightValue: string | undefined = undefined;\n\n if (isMobile) {\n // On mobile: always center panel in viewport\n // Calculate center position relative to viewport\n const panelCenterX = viewportWidth / 2;\n const panelLeftFromViewport = panelCenterX - panelWidthValue / 2;\n // Convert to position relative to container\n // Get container element\n if (containerRef.value) {\n const containerRect = containerRef.value.getBoundingClientRect();\n // Calculate left position relative to container\n const leftRelativeToContainer =\n panelLeftFromViewport - containerRect.left;\n let calculatedLeft = Math.max(0, leftRelativeToContainer);\n\n // Ensure panel doesn't overflow viewport\n const maxLeft = viewportWidth - panelWidthValue - containerRect.left;\n if (leftRelativeToContainer > maxLeft) {\n calculatedLeft = Math.max(0, maxLeft);\n }\n\n leftValue = `${calculatedLeft}px`;\n rightValue = undefined;\n shouldUseRight = false;\n } else {\n // Fallback: center relative to viewport\n leftValue = `${Math.max(0, panelLeftFromViewport)}px`;\n rightValue = undefined;\n shouldUseRight = false;\n }\n } else {\n // Desktop: use existing logic\n shouldUseRight = panelWidthValue > availableSpaceRight;\n if (shouldUseRight) {\n rightValue = '0';\n leftValue = undefined;\n } else {\n leftValue = '0';\n rightValue = undefined;\n }\n }\n\n // Calculate vertical positioning\n const spaceBelow = viewportHeight - triggerRect.bottom;\n const spaceAbove = triggerRect.top;\n let top: string | undefined = undefined;\n let bottom: string | undefined = undefined;\n let maxHeight = '300px';\n\n if (spaceBelow < panelRect.height && spaceAbove > spaceBelow) {\n // Position above\n bottom = `${triggerRect.height + 4}px`;\n top = undefined;\n maxHeight = `${Math.min(spaceAbove - 10, 300)}px`;\n } else {\n // Position below\n top = `${triggerRect.height + 4}px`;\n bottom = undefined;\n maxHeight = `${Math.min(spaceBelow - 10, 300)}px`;\n }\n\n // Ensure panel width doesn't exceed viewport\n const maxWidth = `${Math.min(panelWidthValue, viewportWidth - 16)}px`; // 16px for padding\n\n const style: Record<string, string> = {\n position: 'absolute',\n maxWidth,\n maxHeight,\n zIndex: '10005', // Higher than DatePicker panel (10004)\n };\n\n if (top !== undefined) {\n style.top = top;\n }\n if (bottom !== undefined) {\n style.bottom = bottom;\n }\n\n if (shouldUseRight) {\n style.left = 'auto';\n style.right = rightValue || '0';\n useRightPositioning.value = true;\n } else {\n style.left = leftValue || '0';\n style.right = 'auto';\n useRightPositioning.value = false;\n }\n\n panelStyle.value = style;\n });\n};\n\nconst selectMonth = (monthIndex: number) => {\n emit('update:modelValue', monthIndex);\n emit('change', monthIndex);\n isOpen.value = false;\n};\n\nconst handleClear = () => {\n emit('update:modelValue', undefined);\n emit('change', undefined);\n emit('clear');\n};\n\nconst handleKeydown = (event: KeyboardEvent) => {\n if (props.disabled || props.readonly) return;\n\n switch (event.key) {\n case 'Enter':\n case ' ':\n event.preventDefault();\n togglePanel();\n break;\n case 'Escape':\n isOpen.value = false;\n break;\n case 'ArrowDown':\n event.preventDefault();\n if (!isOpen.value) {\n togglePanel();\n }\n break;\n }\n};\n\nconst handleClickOutside = (event: Event) => {\n if (\n panelRef.value &&\n triggerRef.value &&\n !panelRef.value.contains(event.target as Node) &&\n !triggerRef.value.contains(event.target as Node)\n ) {\n isOpen.value = false;\n }\n};\n\n// Handle window resize and scroll for panel positioning\nconst handleResize = () => {\n if (isOpen.value) {\n nextTick(() => {\n positionPanel();\n });\n }\n};\n\nonMounted(() => {\n document.addEventListener('click', handleClickOutside);\n window.addEventListener('resize', handleResize);\n window.addEventListener('scroll', handleResize, true);\n});\n\nonUnmounted(() => {\n document.removeEventListener('click', handleClickOutside);\n window.removeEventListener('resize', handleResize);\n window.removeEventListener('scroll', handleResize, true);\n});\n</script>\n\n<style scoped>\n.panel-enter-active,\n.panel-leave-active {\n transition: all 0.2s ease;\n}\n\n.panel-enter-from,\n.panel-leave-to {\n opacity: 0;\n transform: translateY(-8px);\n}\n</style>\n","<template>\n <div class=\"ina-multiple-choice-grid\" :class=\"gridClasses\">\n <div v-if=\"title\" class=\"ina-multiple-choice-grid__title\">\n {{ title }}\n </div>\n\n <div v-if=\"subtitle\" class=\"ina-multiple-choice-grid__subtitle\">\n {{ subtitle }}\n </div>\n\n <div class=\"ina-multiple-choice-grid__container\">\n <div class=\"ina-multiple-choice-grid__grid\">\n <!-- Header Row -->\n <div class=\"ina-multiple-choice-grid__header-row\">\n <div\n class=\"ina-multiple-choice-grid__header-cell ina-multiple-choice-grid__header-cell--empty\"\n >\n <!-- Empty cell for row labels column -->\n </div>\n\n <div\n v-for=\"(column, colIndex) in columns\"\n :key=\"colIndex\"\n class=\"ina-multiple-choice-grid__header-cell\"\n >\n {{ column.label }}\n </div>\n </div>\n\n <!-- Data Rows -->\n <div\n v-for=\"(row, rowIndex) in rows\"\n :key=\"rowIndex\"\n class=\"ina-multiple-choice-grid__data-row\"\n >\n <div class=\"ina-multiple-choice-grid__row-label\">\n {{ row.label }}\n </div>\n\n <div\n v-for=\"(_column, colIndex) in columns\"\n :key=\"colIndex\"\n class=\"ina-multiple-choice-grid__cell\"\n >\n <input\n :id=\"`grid-${rowIndex}-${colIndex}`\"\n v-model=\"selectedValues\"\n type=\"radio\"\n :name=\"`row-${rowIndex}`\"\n :value=\"`${rowIndex}-${colIndex}`\"\n :disabled=\"disabled\"\n class=\"ina-multiple-choice-grid__radio\"\n @change=\"handleChange\"\n />\n\n <label\n :for=\"`grid-${rowIndex}-${colIndex}`\"\n class=\"ina-multiple-choice-grid__radio-label\"\n >\n <span class=\"ina-multiple-choice-grid__radio-indicator\" />\n </label>\n </div>\n </div>\n </div>\n </div>\n\n <div v-if=\"statusMessage\" :class=\"statusClasses\">\n {{ statusMessage }}\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, watch } from 'vue';\nexport interface MultipleChoiceGridColumn {\n key: string;\n label: string;\n}\n\nexport interface MultipleChoiceGridRow {\n key: string;\n label: string;\n}\n\nexport interface MultipleChoiceGridProps {\n modelValue?: string[];\n title?: string;\n subtitle?: string;\n rows: MultipleChoiceGridRow[];\n columns: MultipleChoiceGridColumn[];\n status?: 'neutral' | 'success' | 'error' | 'warning';\n statusMessage?: string;\n disabled?: boolean;\n required?: boolean;\n}\n\nconst props = withDefaults(defineProps<MultipleChoiceGridProps>(), {\n modelValue: () => [],\n status: 'neutral',\n disabled: false,\n required: false,\n});\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string[]];\n change: [value: string[]];\n}>();\n\nconst selectedValues = ref<string[]>(props.modelValue);\n\nconst gridClasses = computed(() => {\n const classes = ['ina-multiple-choice-grid'];\n\n if (props.disabled) {\n classes.push('ina-multiple-choice-grid--disabled');\n }\n\n if (props.status !== 'neutral') {\n classes.push(`ina-multiple-choice-grid--status-${props.status}`);\n }\n\n return classes;\n});\n\nconst statusClasses = computed(() => {\n const classes = ['ina-multiple-choice-grid__status'];\n\n if (props.status !== 'neutral') {\n classes.push(`ina-multiple-choice-grid__status--${props.status}`);\n }\n\n return classes;\n});\n\nconst handleChange = () => {\n emit('update:modelValue', selectedValues.value);\n emit('change', selectedValues.value);\n};\n\n// Watch for external modelValue changes\nwatch(\n () => props.modelValue,\n (newValue) => {\n selectedValues.value = newValue || [];\n }\n);\n</script>\n","<template>\n <nav\n v-if=\"totalPages > 0\"\n class=\"ina-pagination\"\n :class=\"paginationClasses\"\n role=\"navigation\"\n :aria-label=\"ariaLabel\"\n >\n <div class=\"ina-pagination__nav-container\">\n <!-- Page info text -->\n <div class=\"ina-pagination__page-info\">\n Halaman {{ currentPage }} dari {{ totalPages }}\n </div>\n\n <!-- Navigation buttons -->\n <div class=\"ina-pagination__nav-buttons\">\n <!-- First button (<<) -->\n <button\n type=\"button\"\n class=\"ina-pagination__nav-button\"\n :class=\"{\n 'ina-pagination__nav-button--enabled': hasPrevious && !disabled,\n 'ina-pagination__nav-button--disabled': !hasPrevious || disabled,\n }\"\n :disabled=\"disabled || currentPage === 1\"\n @click=\"goToFirst\"\n :aria-label=\"'Go to first page'\"\n >\n <svg\n class=\"ina-pagination__nav-icon\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M11 18L5 12L11 6M19 18L13 12L19 6\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n\n <!-- Previous button (<) -->\n <button\n type=\"button\"\n class=\"ina-pagination__nav-button\"\n :class=\"{\n 'ina-pagination__nav-button--enabled': hasPrevious && !disabled,\n 'ina-pagination__nav-button--disabled': !hasPrevious || disabled,\n }\"\n :disabled=\"disabled || currentPage === 1\"\n @click=\"goToPrevious\"\n :aria-label=\"previousLabel\"\n >\n <svg\n class=\"ina-pagination__nav-icon\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M15 18L9 12L15 6\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n\n <!-- Page number buttons -->\n <button\n v-for=\"page in visiblePages\"\n :key=\"page\"\n type=\"button\"\n :class=\"getPageClasses(page)\"\n @click=\"goToPage(page)\"\n :disabled=\"disabled\"\n :aria-label=\"`Go to page ${page}`\"\n :aria-current=\"page === currentPage ? 'page' : undefined\"\n >\n {{ page }}\n </button>\n\n <!-- Next button (>) -->\n <button\n type=\"button\"\n class=\"ina-pagination__nav-button\"\n :class=\"{\n 'ina-pagination__nav-button--enabled': hasNext && !disabled,\n 'ina-pagination__nav-button--disabled': !hasNext || disabled,\n }\"\n :disabled=\"disabled || currentPage === totalPages\"\n @click=\"goToNext\"\n :aria-label=\"nextLabel\"\n >\n <svg\n class=\"ina-pagination__nav-icon\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M9 18L15 12L9 6\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n\n <!-- Last button (>>) -->\n <button\n type=\"button\"\n class=\"ina-pagination__nav-button\"\n :class=\"{\n 'ina-pagination__nav-button--enabled': hasNext && !disabled,\n 'ina-pagination__nav-button--disabled': !hasNext || disabled,\n }\"\n :disabled=\"disabled || currentPage === totalPages\"\n @click=\"goToLast\"\n :aria-label=\"'Go to last page'\"\n >\n <svg\n class=\"ina-pagination__nav-icon\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M13 18L19 12L13 6M5 18L11 12L5 6\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n </div>\n </div>\n\n <!-- Page size dropdown -->\n <div\n v-if=\"showPageSize\"\n class=\"ina-pagination__page-size-container\"\n >\n <span class=\"ina-pagination__page-size-label\">\n Baris per halaman\n </span>\n <select\n :value=\"pageSize\"\n @change=\"handlePageSizeChange\"\n :disabled=\"disabled\"\n class=\"ina-pagination__page-size-select\"\n :class=\"{\n 'ina-pagination__page-size-select--disabled': disabled,\n }\"\n >\n <option\n v-for=\"(opt, index) in pageSizeOptions\"\n :key=\"`${opt}-${index}`\"\n :value=\"opt\"\n >\n {{ opt }}\n </option>\n </select>\n </div>\n </nav>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nexport interface PaginationProps {\n /** Halaman saat ini (1-indexed) */\n modelValue: number;\n /** Total jumlah halaman */\n totalPages: number;\n /** Jumlah baris per halaman saat ini */\n pageSize: number;\n /** Opsi-opsi jumlah baris per halaman (misal: [10, 20, 50, 100]) */\n pageSizeOptions: number[];\n /** Maksimal jumlah halaman yang terlihat (default: 3, seperti React) */\n maxVisiblePages?: number;\n /** Tampilkan dropdown page size? */\n showPageSize?: boolean;\n /** Full width layout dengan justify-between (untuk Table) */\n fullWidth?: boolean;\n /** Disable semua kontrol */\n disabled?: boolean;\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Variant style */\n variant?: 'default' | 'bordered' | 'filled';\n /** Aria label */\n ariaLabel?: string;\n /** Label untuk tombol previous */\n previousLabel?: string;\n /** Label untuk tombol next */\n nextLabel?: string;\n}\n\nconst props = withDefaults(defineProps<PaginationProps>(), {\n modelValue: 1,\n totalPages: 1,\n pageSize: 10,\n pageSizeOptions: () => [10, 20, 50],\n maxVisiblePages: 3,\n showPageSize: true,\n fullWidth: false,\n disabled: false,\n size: 'md',\n variant: 'default',\n ariaLabel: 'Pagination navigation',\n previousLabel: 'Previous page',\n nextLabel: 'Next page',\n});\n\nconst emit = defineEmits<{\n 'update:modelValue': [page: number];\n change: [page: number];\n 'page-size-change': [size: number];\n}>();\n\nconst currentPage = computed(() => props.modelValue);\n\nconst hasPrevious = computed(() => currentPage.value > 1);\n\nconst hasNext = computed(() => currentPage.value < props.totalPages);\n\n// Render visible pages (hanya 3 halaman terdekat seperti React)\nconst visiblePages = computed(() => {\n const pages: number[] = [];\n const maxVisible = props.maxVisiblePages;\n const total = props.totalPages;\n const current = currentPage.value;\n\n if (total <= maxVisible) {\n // Show all pages if total is less than max visible\n for (let i = 1; i <= total; i++) {\n pages.push(i);\n }\n } else {\n // Calculate start and end pages\n let start: number;\n let end: number;\n\n if (current === 1) {\n // Jika di halaman pertama, tampilkan 3 halaman pertama (1, 2, 3)\n start = 1;\n end = Math.min(3, total);\n } else if (current === total) {\n // Jika di halaman terakhir, tampilkan 3 halaman terakhir\n start = Math.max(1, total - 2);\n end = total;\n } else {\n // Jika di tengah, tampilkan halaman sebelum, sekarang, dan sesudah\n start = current - 1;\n end = current + 1;\n }\n\n for (let i = start; i <= end; i++) {\n pages.push(i);\n }\n }\n\n return pages;\n});\n\nconst paginationClasses = computed(() => {\n const classes = ['ina-pagination'];\n\n if (props.fullWidth) {\n classes.push('ina-pagination--full-width');\n }\n\n classes.push(`ina-pagination--size-${props.size}`);\n classes.push(`ina-pagination--variant-${props.variant}`);\n\n return classes;\n});\n\nconst getPageClasses = (page: number) => {\n const classes = ['ina-pagination__page-button'];\n const isActive = page === currentPage.value;\n\n if (isActive) {\n classes.push('ina-pagination__page-button--active');\n } else if (!props.disabled) {\n classes.push('ina-pagination__page-button--enabled');\n } else {\n classes.push('ina-pagination__page-button--disabled');\n }\n\n return classes;\n};\n\nconst goToPage = (page: number) => {\n if (\n !props.disabled &&\n page >= 1 &&\n page <= props.totalPages &&\n page !== currentPage.value\n ) {\n emit('update:modelValue', page);\n emit('change', page);\n }\n};\n\nconst goToFirst = () => {\n if (!props.disabled && currentPage.value > 1) {\n goToPage(1);\n }\n};\n\nconst goToPrevious = () => {\n if (!props.disabled && hasPrevious.value) {\n goToPage(currentPage.value - 1);\n }\n};\n\nconst goToNext = () => {\n if (!props.disabled && hasNext.value) {\n goToPage(currentPage.value + 1);\n }\n};\n\nconst goToLast = () => {\n if (!props.disabled && currentPage.value < props.totalPages) {\n goToPage(props.totalPages);\n }\n};\n\nconst handlePageSizeChange = (event: Event) => {\n if (props.disabled) return;\n\n const target = event.target as HTMLSelectElement;\n const newSize = parseInt(target.value, 10);\n emit('page-size-change', newSize);\n};\n</script>\n","<template>\n <div class=\"ina-password-input\">\n <label v-if=\"label\" :for=\"inputId\" class=\"ina-password-input__label\">\n <component :is=\"labelComponent\" v-if=\"labelComponent\" />\n <span v-else-if=\"label && typeof label === 'string'\">{{ label }}</span>\n <span v-if=\"required\" class=\"ina-password-input__required\">*</span>\n </label>\n\n <div :class=\"wrapperClasses\">\n <input\n :id=\"inputId\"\n ref=\"inputRef\"\n v-model=\"inputValue\"\n :type=\"showPassword ? 'text' : 'password'\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n :maxlength=\"maxLength\"\n :class=\"inputClasses\"\n @input=\"handleInput\"\n @blur=\"handleBlur\"\n @focus=\"handleFocus\"\n v-bind=\"$attrs\"\n />\n\n <button\n type=\"button\"\n class=\"ina-password-input__toggle-button\"\n @click=\"togglePasswordVisibility\"\n :disabled=\"disabled\"\n >\n <svg\n v-if=\"!showPassword\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M1 12S5 4 12 4s11 8 11 8-4 8-11 8-11-8-11-8z\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"3\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n <svg\n v-else\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <line\n x1=\"1\"\n y1=\"1\"\n x2=\"23\"\n y2=\"23\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n </div>\n\n <div v-if=\"bottomText\" class=\"ina-password-input__status-area\">\n <div :class=\"statusClasses\">\n <component :is=\"bottomText\" v-if=\"typeof bottomText !== 'string'\" />\n <span v-else>{{ bottomText }}</span>\n </div>\n <div\n v-if=\"showCharCount && maxLength\"\n class=\"ina-password-input__character-count\"\n >\n {{ inputValue.length }}/{{ maxLength }}\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, watch } from 'vue';\nimport type { Component } from 'vue';\nexport interface PasswordInputProps {\n modelValue?: string;\n label?: string | Component;\n helperText?: string | Component;\n placeholder?: string;\n size?: 'sm' | 'md' | 'lg';\n status?: 'neutral' | 'success' | 'error' | 'warning';\n statusMessage?: string | Component;\n disabled?: boolean;\n readonly?: boolean;\n required?: boolean;\n maxLength?: number;\n showCharCount?: boolean;\n}\n\nconst props = withDefaults(defineProps<PasswordInputProps>(), {\n modelValue: '',\n size: 'md',\n status: 'neutral',\n disabled: false,\n readonly: false,\n required: false,\n showCharCount: false,\n});\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string];\n input: [event: Event];\n blur: [event: FocusEvent];\n focus: [event: FocusEvent];\n}>();\n\nconst inputRef = ref<HTMLInputElement>();\nconst inputValue = ref(props.modelValue);\nconst showPassword = ref(false);\n\nconst bottomText = computed(() => {\n if (props.status !== 'neutral' && props.statusMessage) {\n return props.statusMessage;\n }\n return props.statusMessage || props.helperText;\n});\n\n// Computed untuk label component\nconst labelComponent = computed(() => {\n if (!props.label) return null;\n if (typeof props.label === 'string') return null;\n return props.label as Component;\n});\n\n// Generate unique ID for input\nconst inputId = computed(() => {\n // Fallback to generated ID (same as React's String(label).toLowerCase())\n if (props.label && typeof props.label === 'string') {\n return String(props.label).toLowerCase();\n }\n return `password-input-${Math.random().toString(36).substr(2, 9)}`;\n});\n\nconst wrapperClasses = computed(() => {\n const classes = ['ina-password-input__wrapper'];\n\n // Size\n classes.push(`ina-password-input__wrapper--size-${props.size}`);\n\n // States\n if (props.disabled) {\n classes.push('ina-password-input__wrapper--disabled');\n }\n\n if (props.readonly) {\n classes.push('ina-password-input__wrapper--readonly');\n }\n\n if (props.status !== 'neutral') {\n classes.push(`ina-password-input__wrapper--${props.status}`);\n }\n\n if (props.showCharCount) {\n classes.push('ina-password-input__wrapper--with-counter');\n }\n\n return classes;\n});\n\nconst inputClasses = computed(() => {\n const classes = ['ina-password-input__input'];\n\n if (props.showCharCount) {\n classes.push('ina-password-input__input--with-counter');\n }\n\n return classes;\n});\n\nconst statusClasses = computed(() => {\n const classes = ['ina-password-input__status-message'];\n\n if (props.status !== 'neutral') {\n classes.push(`ina-password-input__status-message--${props.status}`);\n }\n\n return classes;\n});\n\nconst handleInput = (event: Event) => {\n const target = event.target as HTMLInputElement;\n inputValue.value = target.value;\n emit('update:modelValue', inputValue.value);\n emit('input', event);\n};\n\nconst handleBlur = (event: FocusEvent) => {\n emit('blur', event);\n};\n\nconst handleFocus = (event: FocusEvent) => {\n emit('focus', event);\n};\n\nconst togglePasswordVisibility = () => {\n showPassword.value = !showPassword.value;\n};\n\n// Watch for external modelValue changes\nwatch(\n () => props.modelValue,\n (newValue) => {\n inputValue.value = newValue || '';\n }\n);\n</script>\n","export interface Country {\n code: string;\n name: string;\n dialCode: string;\n flag: string;\n}\n\nexport const COUNTRIES: Country[] = [\n { code: 'ID', name: 'Indonesia', dialCode: '+62', flag: '🇮🇩' },\n { code: 'AF', name: 'Afghanistan', dialCode: '+93', flag: '🇦🇫' },\n { code: 'AL', name: 'Albania', dialCode: '+355', flag: '🇦🇱' },\n { code: 'DZ', name: 'Algeria', dialCode: '+213', flag: '🇩🇿' },\n { code: 'AS', name: 'American Samoa', dialCode: '+1684', flag: '🇦🇸' },\n { code: 'AD', name: 'Andorra', dialCode: '+376', flag: '🇦🇩' },\n { code: 'AO', name: 'Angola', dialCode: '+244', flag: '🇦🇴' },\n { code: 'AI', name: 'Anguilla', dialCode: '+1264', flag: '🇦🇮' },\n { code: 'AG', name: 'Antigua and Barbuda', dialCode: '+1268', flag: '🇦🇬' },\n { code: 'AR', name: 'Argentina', dialCode: '+54', flag: '🇦🇷' },\n { code: 'AM', name: 'Armenia', dialCode: '+374', flag: '🇦🇲' },\n { code: 'AW', name: 'Aruba', dialCode: '+297', flag: '🇦🇼' },\n { code: 'AU', name: 'Australia', dialCode: '+61', flag: '🇦🇺' },\n { code: 'AT', name: 'Austria', dialCode: '+43', flag: '🇦🇹' },\n { code: 'AZ', name: 'Azerbaijan', dialCode: '+994', flag: '🇦🇿' },\n { code: 'BS', name: 'Bahamas', dialCode: '+1242', flag: '🇧🇸' },\n { code: 'BH', name: 'Bahrain', dialCode: '+973', flag: '🇧🇭' },\n { code: 'BD', name: 'Bangladesh', dialCode: '+880', flag: '🇧🇩' },\n { code: 'BB', name: 'Barbados', dialCode: '+1246', flag: '🇧🇧' },\n { code: 'BY', name: 'Belarus', dialCode: '+375', flag: '🇧🇾' },\n { code: 'BE', name: 'Belgium', dialCode: '+32', flag: '🇧🇪' },\n { code: 'BZ', name: 'Belize', dialCode: '+501', flag: '🇧🇿' },\n { code: 'BJ', name: 'Benin', dialCode: '+229', flag: '🇧🇯' },\n { code: 'BM', name: 'Bermuda', dialCode: '+1441', flag: '🇧🇲' },\n { code: 'BT', name: 'Bhutan', dialCode: '+975', flag: '🇧🇹' },\n { code: 'BO', name: 'Bolivia', dialCode: '+591', flag: '🇧🇴' },\n { code: 'BA', name: 'Bosnia and Herzegovina', dialCode: '+387', flag: '🇧🇦' },\n { code: 'BW', name: 'Botswana', dialCode: '+267', flag: '🇧🇼' },\n { code: 'BR', name: 'Brazil', dialCode: '+55', flag: '🇧🇷' },\n { code: 'IO', name: 'British Indian Ocean Territory', dialCode: '+246', flag: '🇮🇴' },\n { code: 'BN', name: 'Brunei Darussalam', dialCode: '+673', flag: '🇧🇳' },\n { code: 'BG', name: 'Bulgaria', dialCode: '+359', flag: '🇧🇬' },\n { code: 'BF', name: 'Burkina Faso', dialCode: '+226', flag: '🇧🇫' },\n { code: 'BI', name: 'Burundi', dialCode: '+257', flag: '🇧🇮' },\n { code: 'KH', name: 'Cambodia', dialCode: '+855', flag: '🇰🇭' },\n { code: 'CM', name: 'Cameroon', dialCode: '+237', flag: '🇨🇲' },\n { code: 'CA', name: 'Canada', dialCode: '+1', flag: '🇨🇦' },\n { code: 'CV', name: 'Cape Verde', dialCode: '+238', flag: '🇨🇻' },\n { code: 'KY', name: 'Cayman Islands', dialCode: '+1345', flag: '🇰🇾' },\n { code: 'CF', name: 'Central African Republic', dialCode: '+236', flag: '🇨🇫' },\n { code: 'TD', name: 'Chad', dialCode: '+235', flag: '🇹🇩' },\n { code: 'CL', name: 'Chile', dialCode: '+56', flag: '🇨🇱' },\n { code: 'CN', name: 'China', dialCode: '+86', flag: '🇨🇳' },\n { code: 'CX', name: 'Christmas Island', dialCode: '+61', flag: '🇨🇽' },\n { code: 'CC', name: 'Cocos (Keeling) Islands', dialCode: '+61', flag: '🇨🇨' },\n { code: 'CO', name: 'Colombia', dialCode: '+57', flag: '🇨🇴' },\n { code: 'KM', name: 'Comoros', dialCode: '+269', flag: '🇰🇲' },\n { code: 'CG', name: 'Congo', dialCode: '+242', flag: '🇨🇬' },\n { code: 'CD', name: 'Congo, Democratic Republic of the', dialCode: '+243', flag: '🇨🇩' },\n { code: 'CK', name: 'Cook Islands', dialCode: '+682', flag: '🇨🇰' },\n { code: 'CR', name: 'Costa Rica', dialCode: '+506', flag: '🇨🇷' },\n { code: 'CI', name: \"Cote d'Ivoire\", dialCode: '+225', flag: '🇨🇮' },\n { code: 'HR', name: 'Croatia', dialCode: '+385', flag: '🇭🇷' },\n { code: 'CU', name: 'Cuba', dialCode: '+53', flag: '🇨🇺' },\n { code: 'CY', name: 'Cyprus', dialCode: '+357', flag: '🇨🇾' },\n { code: 'CZ', name: 'Czech Republic', dialCode: '+420', flag: '🇨🇿' },\n { code: 'DK', name: 'Denmark', dialCode: '+45', flag: '🇩🇰' },\n { code: 'DJ', name: 'Djibouti', dialCode: '+253', flag: '🇩🇯' },\n { code: 'DM', name: 'Dominica', dialCode: '+1767', flag: '🇩🇲' },\n { code: 'DO', name: 'Dominican Republic', dialCode: '+1', flag: '🇩🇴' },\n { code: 'EC', name: 'Ecuador', dialCode: '+593', flag: '🇪🇨' },\n { code: 'EG', name: 'Egypt', dialCode: '+20', flag: '🇪🇬' },\n { code: 'SV', name: 'El Salvador', dialCode: '+503', flag: '🇸🇻' },\n { code: 'GQ', name: 'Equatorial Guinea', dialCode: '+240', flag: '🇬🇶' },\n { code: 'ER', name: 'Eritrea', dialCode: '+291', flag: '🇪🇷' },\n { code: 'EE', name: 'Estonia', dialCode: '+372', flag: '🇪🇪' },\n { code: 'ET', name: 'Ethiopia', dialCode: '+251', flag: '🇪🇹' },\n { code: 'FK', name: 'Falkland Islands (Malvinas)', dialCode: '+500', flag: '🇫🇰' },\n { code: 'FO', name: 'Faroe Islands', dialCode: '+298', flag: '🇫🇴' },\n { code: 'FJ', name: 'Fiji', dialCode: '+679', flag: '🇫🇯' },\n { code: 'FI', name: 'Finland', dialCode: '+358', flag: '🇫🇮' },\n { code: 'FR', name: 'France', dialCode: '+33', flag: '🇫🇷' },\n { code: 'GF', name: 'French Guiana', dialCode: '+594', flag: '🇬🇫' },\n { code: 'PF', name: 'French Polynesia', dialCode: '+689', flag: '🇵🇫' },\n { code: 'GA', name: 'Gabon', dialCode: '+241', flag: '🇬🇦' },\n { code: 'GM', name: 'Gambia', dialCode: '+220', flag: '🇬🇲' },\n { code: 'GE', name: 'Georgia', dialCode: '+995', flag: '🇬🇪' },\n { code: 'DE', name: 'Germany', dialCode: '+49', flag: '🇩🇪' },\n { code: 'GH', name: 'Ghana', dialCode: '+233', flag: '🇬🇭' },\n { code: 'GI', name: 'Gibraltar', dialCode: '+350', flag: '🇬🇮' },\n { code: 'GR', name: 'Greece', dialCode: '+30', flag: '🇬🇷' },\n { code: 'GL', name: 'Greenland', dialCode: '+299', flag: '🇬🇱' },\n { code: 'GD', name: 'Grenada', dialCode: '+1473', flag: '🇬🇩' },\n { code: 'GP', name: 'Guadeloupe', dialCode: '+590', flag: '🇬🇵' },\n { code: 'GU', name: 'Guam', dialCode: '+1671', flag: '🇬🇺' },\n { code: 'GT', name: 'Guatemala', dialCode: '+502', flag: '🇬🇹' },\n { code: 'GG', name: 'Guernsey', dialCode: '+44', flag: '🇬🇬' },\n { code: 'GN', name: 'Guinea', dialCode: '+224', flag: '🇬🇳' },\n { code: 'GW', name: 'Guinea-Bissau', dialCode: '+245', flag: '🇬🇼' },\n { code: 'GY', name: 'Guyana', dialCode: '+592', flag: '🇬🇾' },\n { code: 'HT', name: 'Haiti', dialCode: '+509', flag: '🇭🇹' },\n { code: 'VA', name: 'Holy See (Vatican City State)', dialCode: '+379', flag: '🇻🇦' },\n { code: 'HN', name: 'Honduras', dialCode: '+504', flag: '🇭🇳' },\n { code: 'HK', name: 'Hong Kong', dialCode: '+852', flag: '🇭🇰' },\n { code: 'HU', name: 'Hungary', dialCode: '+36', flag: '🇭🇺' },\n { code: 'IS', name: 'Iceland', dialCode: '+354', flag: '🇮🇸' },\n { code: 'IN', name: 'India', dialCode: '+91', flag: '🇮🇳' },\n { code: 'IR', name: 'Iran, Islamic Republic of', dialCode: '+98', flag: '🇮🇷' },\n { code: 'IQ', name: 'Iraq', dialCode: '+964', flag: '🇮🇶' },\n { code: 'IE', name: 'Ireland', dialCode: '+353', flag: '🇮🇪' },\n { code: 'IM', name: 'Isle of Man', dialCode: '+44', flag: '🇮🇲' },\n { code: 'IL', name: 'Israel', dialCode: '+972', flag: '🇮🇱' },\n { code: 'IT', name: 'Italy', dialCode: '+39', flag: '🇮🇹' },\n { code: 'JM', name: 'Jamaica', dialCode: '+1876', flag: '🇯🇲' },\n { code: 'JP', name: 'Japan', dialCode: '+81', flag: '🇯🇵' },\n { code: 'JE', name: 'Jersey', dialCode: '+44', flag: '🇯🇪' },\n { code: 'JO', name: 'Jordan', dialCode: '+962', flag: '🇯🇴' },\n { code: 'KZ', name: 'Kazakhstan', dialCode: '+7', flag: '🇰🇿' },\n { code: 'KE', name: 'Kenya', dialCode: '+254', flag: '🇰🇪' },\n { code: 'KI', name: 'Kiribati', dialCode: '+686', flag: '🇰🇮' },\n { code: 'KP', name: \"Korea, Democratic People's Republic of\", dialCode: '+850', flag: '🇰🇵' },\n { code: 'KR', name: 'Korea, Republic of', dialCode: '+82', flag: '🇰🇷' },\n { code: 'KW', name: 'Kuwait', dialCode: '+965', flag: '🇰🇼' },\n { code: 'KG', name: 'Kyrgyzstan', dialCode: '+996', flag: '🇰🇬' },\n { code: 'LA', name: \"Lao People's Democratic Republic\", dialCode: '+856', flag: '🇱🇦' },\n { code: 'LV', name: 'Latvia', dialCode: '+371', flag: '🇱🇻' },\n { code: 'LB', name: 'Lebanon', dialCode: '+961', flag: '🇱🇧' },\n { code: 'LS', name: 'Lesotho', dialCode: '+266', flag: '🇱🇸' },\n { code: 'LR', name: 'Liberia', dialCode: '+231', flag: '🇱🇷' },\n { code: 'LY', name: 'Libyan Arab Jamahiriya', dialCode: '+218', flag: '🇱🇾' },\n { code: 'LI', name: 'Liechtenstein', dialCode: '+423', flag: '🇱🇮' },\n { code: 'LT', name: 'Lithuania', dialCode: '+370', flag: '🇱🇹' },\n { code: 'LU', name: 'Luxembourg', dialCode: '+352', flag: '🇱🇺' },\n { code: 'MO', name: 'Macao', dialCode: '+853', flag: '🇲🇴' },\n { code: 'MK', name: 'Macedonia, the Former Yugoslav Republic of', dialCode: '+389', flag: '🇲🇰' },\n { code: 'MG', name: 'Madagascar', dialCode: '+261', flag: '🇲🇬' },\n { code: 'MW', name: 'Malawi', dialCode: '+265', flag: '🇲🇼' },\n { code: 'MY', name: 'Malaysia', dialCode: '+60', flag: '🇲🇾' },\n { code: 'MV', name: 'Maldives', dialCode: '+960', flag: '🇲🇻' },\n { code: 'ML', name: 'Mali', dialCode: '+223', flag: '🇲🇱' },\n { code: 'MT', name: 'Malta', dialCode: '+356', flag: '🇲🇹' },\n { code: 'MH', name: 'Marshall Islands', dialCode: '+692', flag: '🇲🇭' },\n { code: 'MQ', name: 'Martinique', dialCode: '+596', flag: '🇲🇶' },\n { code: 'MR', name: 'Mauritania', dialCode: '+222', flag: '🇲🇷' },\n { code: 'MU', name: 'Mauritius', dialCode: '+230', flag: '🇲🇺' },\n { code: 'YT', name: 'Mayotte', dialCode: '+262', flag: '🇾🇹' },\n { code: 'MX', name: 'Mexico', dialCode: '+52', flag: '🇲🇽' },\n { code: 'FM', name: 'Micronesia, Federated States of', dialCode: '+691', flag: '🇫🇲' },\n { code: 'MD', name: 'Moldova, Republic of', dialCode: '+373', flag: '🇲🇩' },\n { code: 'MC', name: 'Monaco', dialCode: '+377', flag: '🇲🇨' },\n { code: 'MN', name: 'Mongolia', dialCode: '+976', flag: '🇲🇳' },\n { code: 'ME', name: 'Montenegro', dialCode: '+382', flag: '🇲🇪' },\n { code: 'MS', name: 'Montserrat', dialCode: '+1664', flag: '🇲🇸' },\n { code: 'MA', name: 'Morocco', dialCode: '+212', flag: '🇲🇦' },\n { code: 'MZ', name: 'Mozambique', dialCode: '+258', flag: '🇲🇿' },\n { code: 'MM', name: 'Myanmar', dialCode: '+95', flag: '🇲🇲' },\n { code: 'NA', name: 'Namibia', dialCode: '+264', flag: '🇳🇦' },\n { code: 'NR', name: 'Nauru', dialCode: '+674', flag: '🇳🇷' },\n { code: 'NP', name: 'Nepal', dialCode: '+977', flag: '🇳🇵' },\n { code: 'NL', name: 'Netherlands', dialCode: '+31', flag: '🇳🇱' },\n { code: 'NC', name: 'New Caledonia', dialCode: '+687', flag: '🇳🇨' },\n { code: 'NZ', name: 'New Zealand', dialCode: '+64', flag: '🇳🇿' },\n { code: 'NI', name: 'Nicaragua', dialCode: '+505', flag: '🇳🇮' },\n { code: 'NE', name: 'Niger', dialCode: '+227', flag: '🇳🇪' },\n { code: 'NG', name: 'Nigeria', dialCode: '+234', flag: '🇳🇬' },\n { code: 'NU', name: 'Niue', dialCode: '+683', flag: '🇳🇺' },\n { code: 'NF', name: 'Norfolk Island', dialCode: '+672', flag: '🇳🇫' },\n { code: 'MP', name: 'Northern Mariana Islands', dialCode: '+1670', flag: '🇲🇵' },\n { code: 'NO', name: 'Norway', dialCode: '+47', flag: '🇳🇴' },\n { code: 'OM', name: 'Oman', dialCode: '+968', flag: '🇴🇲' },\n { code: 'PK', name: 'Pakistan', dialCode: '+92', flag: '🇵🇰' },\n { code: 'PW', name: 'Palau', dialCode: '+680', flag: '🇵🇼' },\n { code: 'PS', name: 'Palestinian Territory, Occupied', dialCode: '+970', flag: '🇵🇸' },\n { code: 'PA', name: 'Panama', dialCode: '+507', flag: '🇵🇦' },\n { code: 'PG', name: 'Papua New Guinea', dialCode: '+675', flag: '🇵🇬' },\n { code: 'PY', name: 'Paraguay', dialCode: '+595', flag: '🇵🇾' },\n { code: 'PE', name: 'Peru', dialCode: '+51', flag: '🇵🇪' },\n { code: 'PH', name: 'Philippines', dialCode: '+63', flag: '🇵🇭' },\n { code: 'PN', name: 'Pitcairn', dialCode: '+870', flag: '🇵🇳' },\n { code: 'PL', name: 'Poland', dialCode: '+48', flag: '🇵🇱' },\n { code: 'PT', name: 'Portugal', dialCode: '+351', flag: '🇵🇹' },\n { code: 'PR', name: 'Puerto Rico', dialCode: '+1939', flag: '🇵🇷' },\n { code: 'QA', name: 'Qatar', dialCode: '+974', flag: '🇶🇦' },\n { code: 'RE', name: 'Reunion', dialCode: '+262', flag: '🇷🇪' },\n { code: 'RO', name: 'Romania', dialCode: '+40', flag: '🇷🇴' },\n { code: 'RU', name: 'Russian Federation', dialCode: '+7', flag: '🇷🇺' },\n { code: 'RW', name: 'Rwanda', dialCode: '+250', flag: '🇷🇼' },\n { code: 'BL', name: 'Saint Barthelemy', dialCode: '+590', flag: '🇧🇱' },\n { code: 'SH', name: 'Saint Helena', dialCode: '+290', flag: '🇸🇭' },\n { code: 'KN', name: 'Saint Kitts and Nevis', dialCode: '+1869', flag: '🇰🇳' },\n { code: 'LC', name: 'Saint Lucia', dialCode: '+1758', flag: '🇱🇨' },\n { code: 'MF', name: 'Saint Martin', dialCode: '+590', flag: '🇲🇫' },\n { code: 'PM', name: 'Saint Pierre and Miquelon', dialCode: '+508', flag: '🇵🇲' },\n { code: 'VC', name: 'Saint Vincent and the Grenadines', dialCode: '+1784', flag: '🇻🇨' },\n { code: 'WS', name: 'Samoa', dialCode: '+685', flag: '🇼🇸' },\n { code: 'SM', name: 'San Marino', dialCode: '+378', flag: '🇸🇲' },\n { code: 'ST', name: 'Sao Tome and Principe', dialCode: '+239', flag: '🇸🇹' },\n { code: 'SA', name: 'Saudi Arabia', dialCode: '+966', flag: '🇸🇦' },\n { code: 'SN', name: 'Senegal', dialCode: '+221', flag: '🇸🇳' },\n { code: 'RS', name: 'Serbia', dialCode: '+381', flag: '🇷🇸' },\n { code: 'SC', name: 'Seychelles', dialCode: '+248', flag: '🇸🇨' },\n { code: 'SL', name: 'Sierra Leone', dialCode: '+232', flag: '🇸🇱' },\n { code: 'SG', name: 'Singapore', dialCode: '+65', flag: '🇸🇬' },\n { code: 'SK', name: 'Slovakia', dialCode: '+421', flag: '🇸🇰' },\n { code: 'SI', name: 'Slovenia', dialCode: '+386', flag: '🇸🇮' },\n { code: 'SB', name: 'Solomon Islands', dialCode: '+677', flag: '🇸🇧' },\n { code: 'SO', name: 'Somalia', dialCode: '+252', flag: '🇸🇴' },\n { code: 'ZA', name: 'South Africa', dialCode: '+27', flag: '🇿🇦' },\n { code: 'GS', name: 'South Georgia and the South Sandwich Islands', dialCode: '+500', flag: '🇬🇸' },\n { code: 'ES', name: 'Spain', dialCode: '+34', flag: '🇪🇸' },\n { code: 'LK', name: 'Sri Lanka', dialCode: '+94', flag: '🇱🇰' },\n { code: 'SD', name: 'Sudan', dialCode: '+249', flag: '🇸🇩' },\n { code: 'SR', name: 'Suriname', dialCode: '+597', flag: '🇸🇷' },\n { code: 'SJ', name: 'Svalbard and Jan Mayen', dialCode: '+47', flag: '🇸🇯' },\n { code: 'SZ', name: 'Swaziland', dialCode: '+268', flag: '🇸🇿' },\n { code: 'SE', name: 'Sweden', dialCode: '+46', flag: '🇸🇪' },\n { code: 'CH', name: 'Switzerland', dialCode: '+41', flag: '🇨🇭' },\n { code: 'SY', name: 'Syrian Arab Republic', dialCode: '+963', flag: '🇸🇾' },\n { code: 'TW', name: 'Taiwan, Province of China', dialCode: '+886', flag: '🇹🇼' },\n { code: 'TJ', name: 'Tajikistan', dialCode: '+992', flag: '🇹🇯' },\n { code: 'TZ', name: 'Tanzania, United Republic of', dialCode: '+255', flag: '🇹🇿' },\n { code: 'TH', name: 'Thailand', dialCode: '+66', flag: '🇹🇭' },\n { code: 'TL', name: 'Timor-Leste', dialCode: '+670', flag: '🇹🇱' },\n { code: 'TG', name: 'Togo', dialCode: '+228', flag: '🇹🇬' },\n { code: 'TK', name: 'Tokelau', dialCode: '+690', flag: '🇹🇰' },\n { code: 'TO', name: 'Tonga', dialCode: '+676', flag: '🇹🇴' },\n { code: 'TT', name: 'Trinidad and Tobago', dialCode: '+1868', flag: '🇹🇹' },\n { code: 'TN', name: 'Tunisia', dialCode: '+216', flag: '🇹🇳' },\n { code: 'TR', name: 'Turkey', dialCode: '+90', flag: '🇹🇷' },\n { code: 'TM', name: 'Turkmenistan', dialCode: '+993', flag: '🇹🇲' },\n { code: 'TC', name: 'Turks and Caicos Islands', dialCode: '+1649', flag: '🇹🇨' },\n { code: 'TV', name: 'Tuvalu', dialCode: '+688', flag: '🇹🇻' },\n { code: 'UG', name: 'Uganda', dialCode: '+256', flag: '🇺🇬' },\n { code: 'UA', name: 'Ukraine', dialCode: '+380', flag: '🇺🇦' },\n { code: 'AE', name: 'United Arab Emirates', dialCode: '+971', flag: '🇦🇪' },\n { code: 'GB', name: 'United Kingdom', dialCode: '+44', flag: '🇬🇧' },\n { code: 'US', name: 'United States', dialCode: '+1', flag: '🇺🇸' },\n { code: 'UY', name: 'Uruguay', dialCode: '+598', flag: '🇺🇾' },\n { code: 'UZ', name: 'Uzbekistan', dialCode: '+998', flag: '🇺🇿' },\n { code: 'VU', name: 'Vanuatu', dialCode: '+678', flag: '🇻🇺' },\n { code: 'VE', name: 'Venezuela', dialCode: '+58', flag: '🇻🇪' },\n { code: 'VN', name: 'Vietnam', dialCode: '+84', flag: '🇻🇳' },\n { code: 'VG', name: 'Virgin Islands, British', dialCode: '+1284', flag: '🇻🇬' },\n { code: 'VI', name: 'Virgin Islands, U.S.', dialCode: '+1340', flag: '🇻🇮' },\n { code: 'WF', name: 'Wallis and Futuna', dialCode: '+681', flag: '🇼🇫' },\n { code: 'EH', name: 'Western Sahara', dialCode: '+212', flag: '🇪🇭' },\n { code: 'YE', name: 'Yemen', dialCode: '+967', flag: '🇾🇪' },\n { code: 'ZM', name: 'Zambia', dialCode: '+260', flag: '🇿🇲' },\n { code: 'ZW', name: 'Zimbabwe', dialCode: '+263', flag: '🇿🇼' },\n];\n","<template>\n <div class=\"ina-phone-input\">\n <label v-if=\"label\" :for=\"inputId\" class=\"ina-phone-input__label\">\n <component :is=\"labelComponent\" v-if=\"labelComponent\" />\n <span v-else-if=\"label && typeof label === 'string'\">{{ label }}</span>\n <span v-if=\"required\" class=\"ina-phone-input__asterisk\">*</span>\n </label>\n\n <div :class=\"wrapperClasses\">\n <div class=\"ina-phone-input__country-selector\" ref=\"dropdownRef\">\n <button\n type=\"button\"\n class=\"ina-phone-input__country-button\"\n @click=\"toggleCountryDropdown\"\n :disabled=\"disabled || readonly\"\n >\n <span class=\"ina-phone-input__country-flag\">\n {{ selectedCountry.flag }}\n </span>\n\n <span class=\"ina-phone-input__country-code\">\n {{ selectedCountry.dialCode }}\n </span>\n\n <svg\n class=\"ina-phone-input__country-chevron\"\n :class=\"{\n 'ina-phone-input__country-chevron--open': isCountryDropdownOpen,\n }\"\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M6 9L12 15L18 9\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n\n <Transition name=\"dropdown\">\n <div\n v-if=\"isCountryDropdownOpen\"\n class=\"ina-phone-input__country-dropdown\"\n >\n <div class=\"ina-phone-input__country-search\">\n <input\n v-model=\"countrySearch\"\n ref=\"searchInputRef\"\n type=\"text\"\n placeholder=\"Search countries...\"\n class=\"ina-phone-input__country-search-input\"\n />\n </div>\n\n <div class=\"ina-phone-input__country-list\">\n <button\n v-for=\"country in filteredCountries\"\n :key=\"country.code\"\n type=\"button\"\n :class=\"getCountryClasses(country)\"\n @click=\"selectCountry(country)\"\n >\n <span class=\"ina-phone-input__country-flag\">\n {{ country.flag }}\n </span>\n\n <span class=\"ina-phone-input__country-name\">\n {{ country.name }}\n </span>\n\n <span class=\"ina-phone-input__country-dial-code\">\n {{ country.dialCode }}\n </span>\n </button>\n </div>\n </div>\n </Transition>\n </div>\n\n <div class=\"ina-phone-input__divider\"></div>\n\n <input\n v-bind=\"$attrs\"\n :id=\"inputId\"\n ref=\"inputRef\"\n v-model=\"phoneNumber\"\n type=\"tel\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n class=\"ina-phone-input__input\"\n @input=\"handleInput\"\n @blur=\"handleBlur\"\n @focus=\"handleFocus\"\n />\n </div>\n\n <div v-if=\"bottomText\" :class=\"helperTextClasses\">\n <component :is=\"bottomTextComponent\" v-if=\"bottomTextComponent\" />\n <span v-else>{{ bottomText }}</span>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, watch, nextTick, onMounted, onUnmounted } from 'vue';\nimport type { Component } from 'vue';\nimport { COUNTRIES, type Country } from '../utils/countries';\n\nexport interface PhoneInputProps {\n modelValue?: string;\n label?: string | Component;\n placeholder?: string;\n size?: 'sm' | 'md' | 'lg';\n status?: 'neutral' | 'success' | 'error' | 'warning';\n statusMessage?: string | Component;\n helperText?: string | Component;\n disabled?: boolean;\n readonly?: boolean;\n required?: boolean;\n defaultCountry?: string;\n countries?: Country[];\n}\n\nconst props = withDefaults(defineProps<PhoneInputProps>(), {\n modelValue: '',\n size: 'md',\n status: 'neutral',\n disabled: false,\n readonly: false,\n required: false,\n defaultCountry: 'ID',\n countries: () => COUNTRIES,\n});\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string];\n input: [event: Event];\n blur: [event: FocusEvent];\n focus: [event: FocusEvent];\n countryChange: [country: Country];\n}>();\n\nconst inputRef = ref<HTMLInputElement>();\nconst searchInputRef = ref<HTMLInputElement>();\nconst dropdownRef = ref<HTMLElement>();\nconst phoneNumber = ref(props.modelValue);\nconst isCountryDropdownOpen = ref(false);\nconst countrySearch = ref('');\nconst selectedCountry = ref<Country>(\n props.countries.find((c) => c.code === props.defaultCountry) ||\n props.countries[0]\n);\n\n// Generate unique ID for input\nconst inputId = computed(\n () => `phone-input-${Math.random().toString(36).substr(2, 9)}`\n);\n\n// Computed untuk label component\nconst labelComponent = computed(() => {\n if (!props.label) return null;\n if (typeof props.label === 'string') return null;\n return props.label as Component;\n});\n\nconst wrapperClasses = computed(() => {\n const classes = ['ina-phone-input__wrapper'];\n\n classes.push(`ina-phone-input__wrapper--size-${props.size}`);\n\n if (props.disabled) {\n classes.push('ina-phone-input__wrapper--disabled');\n }\n\n if (props.status !== 'neutral') {\n classes.push(`ina-phone-input__wrapper--status-${props.status}`);\n }\n\n return classes;\n});\n\nconst helperTextClasses = computed(() => {\n const classes = ['ina-phone-input__helper-text'];\n if (props.status === 'error') {\n classes.push('ina-phone-input__helper-text--error');\n } else if (props.status === 'warning') {\n classes.push('ina-phone-input__helper-text--warning');\n }\n return classes;\n});\n\nconst bottomText = computed(() => {\n if (props.status !== 'neutral' && props.statusMessage) {\n return props.statusMessage;\n }\n return props.statusMessage || props.helperText;\n});\n\nconst bottomTextComponent = computed(() => {\n const text = bottomText.value;\n if (!text) return null;\n if (typeof text === 'string') return null;\n return text as Component;\n});\n\nconst filteredCountries = computed(() => {\n if (!countrySearch.value) {\n return props.countries;\n }\n\n const search = countrySearch.value.toLowerCase();\n return props.countries.filter(\n (country) =>\n country.name.toLowerCase().includes(search) ||\n country.dialCode.includes(search) ||\n country.code.toLowerCase().includes(search)\n );\n});\n\nconst getCountryClasses = (country: Country) => {\n const classes = ['ina-phone-input__country-option'];\n\n if (country.code === selectedCountry.value.code) {\n classes.push('ina-phone-input__country-option--selected');\n }\n\n return classes;\n};\n\nconst toggleCountryDropdown = () => {\n if (props.disabled || props.readonly) return;\n\n isCountryDropdownOpen.value = !isCountryDropdownOpen.value;\n\n if (isCountryDropdownOpen.value) {\n countrySearch.value = '';\n nextTick(() => {\n searchInputRef.value?.focus();\n });\n }\n};\n\n// Format: 3 digits - 4 digits - rest\nconst formatPhoneNumber = (value: string) => {\n // Remove non-digits\n const clean = value.replace(/\\D/g, '');\n\n // Format 3-4-rest\n if (clean.length > 7) {\n return clean.replace(/^(\\d{3})(\\d{4})(.*)/, '$1-$2-$3');\n } else if (clean.length > 3) {\n return clean.replace(/^(\\d{3})(.*)/, '$1-$2');\n }\n return clean;\n};\n\nconst handleInput = (event: Event) => {\n const target = event.target as HTMLInputElement;\n const rawValue = target.value;\n\n // Get clean local value\n let cleanValue = rawValue.replace(/\\D/g, '');\n\n // Remove leading zero if present for clean value calculation\n if (cleanValue.startsWith('0')) {\n cleanValue = cleanValue.substring(1);\n }\n\n // Format for display (use the raw digit input for formatting to avoid confusing cursor jumps,\n // but for 3-4-rest usually we format the number proper)\n // Let's format the clean value (without leading zero if we want to enforce standard)\n // However, user might type '0' to start.\n // For the display let's format what they typed (numbers only).\n const displayClean = rawValue.replace(/\\D/g, '');\n const formatted = formatPhoneNumber(displayClean);\n\n // Update input if formatted is different\n if (formatted !== rawValue) {\n target.value = formatted;\n }\n\n phoneNumber.value = formatted;\n\n // Emit E.164 value: DialCode + Clean Local Number (no leading zero)\n const fullValue = `${selectedCountry.value.dialCode}${cleanValue}`;\n\n emit('update:modelValue', fullValue);\n emit('input', event);\n};\n\nconst handleBlur = (event: FocusEvent) => {\n emit('blur', event);\n};\n\nconst handleFocus = (event: FocusEvent) => {\n emit('focus', event);\n};\n\nconst handleClickOutside = (event: Event) => {\n const target = event.target as Element;\n if (dropdownRef.value && !dropdownRef.value.contains(target)) {\n isCountryDropdownOpen.value = false;\n }\n};\n\n// Update emission when country changes\nconst selectCountry = (country: Country) => {\n selectedCountry.value = country;\n isCountryDropdownOpen.value = false;\n emit('countryChange', country);\n\n // Re-emit current number with new dial code\n if (phoneNumber.value) {\n const cleanValue = phoneNumber.value.replace(/\\D/g, '');\n const cleanLocal = cleanValue.startsWith('0')\n ? cleanValue.substring(1)\n : cleanValue;\n const fullValue = `${country.dialCode}${cleanLocal}`;\n emit('update:modelValue', fullValue);\n }\n\n nextTick(() => {\n inputRef.value?.focus();\n });\n};\n\n// Watch for external modelValue changes\nwatch(\n () => props.modelValue,\n (newValue) => {\n if (!newValue) {\n phoneNumber.value = '';\n return;\n }\n\n // Try to strip dial code if present to get local part\n // This is a basic check.\n const dialCode = selectedCountry.value.dialCode;\n let localPart = newValue;\n\n // Remove all non-digits/plus for comparison\n // Assuming newValue is E.164 (e.g. +628123...)\n if (newValue.startsWith(dialCode)) {\n localPart = newValue.substring(dialCode.length);\n } else if (newValue.startsWith(dialCode.substring(1))) {\n // Handle case without + if it happens\n localPart = newValue.substring(dialCode.length - 1);\n }\n\n // Format the local part\n phoneNumber.value = formatPhoneNumber(localPart);\n },\n { immediate: true }\n);\n\nonMounted(() => {\n document.addEventListener('click', handleClickOutside);\n});\n\nonUnmounted(() => {\n document.removeEventListener('click', handleClickOutside);\n});\n</script>\n\n<style scoped>\n.dropdown-enter-active,\n.dropdown-leave-active {\n transition: all 0.2s ease;\n}\n\n.dropdown-enter-from,\n.dropdown-leave-to {\n opacity: 0;\n transform: translateY(-8px);\n}\n</style>\n","<template>\n <div v-if=\"visible\" :class=\"containerClasses\">\n <!-- Progress bar -->\n <div\n :class=\"fillClasses\"\n :style=\"{\n width: `${Math.min(100, Math.max(0, progress))}%`,\n transitionDuration: `${duration}ms`,\n }\"\n />\n\n <!-- Shimmer effect -->\n <div v-if=\"shimmer\" class=\"ina-progress-bar__shimmer\" />\n\n <!-- Animated moving indicator -->\n <div\n :class=\"indicatorClasses\"\n :style=\"{\n left: `${Math.min(100, Math.max(0, progress))}%`,\n transform: 'translateX(-100%)',\n transition: `left ${duration}ms ease-out`,\n }\"\n />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nexport interface ProgressBarProps {\n /**\n * Whether the progress bar is visible\n */\n visible?: boolean;\n /**\n * Progress percentage (0-100)\n */\n progress?: number;\n /**\n * Animation duration in milliseconds\n */\n duration?: number;\n /**\n * Color variant\n */\n variant?: 'primary' | 'secondary' | 'success' | 'warning' | 'error';\n /**\n * Height of the progress bar\n */\n height?: 'sm' | 'md' | 'lg';\n /**\n * Whether to show animated shimmer effect\n */\n shimmer?: boolean;\n}\n\nconst props = withDefaults(defineProps<ProgressBarProps>(), {\n visible: true,\n progress: 0,\n duration: 1000,\n variant: 'primary',\n height: 'sm',\n shimmer: true,\n});\n\nconst containerClasses = computed(() => {\n const classes = [\n 'ina-progress-bar',\n `ina-progress-bar--height-${props.height}`,\n ];\n\n if (!props.visible) {\n classes.push('ina-progress-bar--hidden');\n }\n\n return classes.join(' ');\n});\n\nconst fillClasses = computed(() => {\n return [\n 'ina-progress-bar__fill',\n `ina-progress-bar__fill--${props.variant}`,\n ].join(' ');\n});\n\nconst indicatorClasses = computed(() => {\n return [\n 'ina-progress-bar__indicator',\n `ina-progress-bar__indicator--${props.variant}`,\n ].join(' ');\n});\n</script>\n\n<style scoped></style>\n","<template>\n <div v-if=\"visible\" :class=\"containerClasses\">\n <div\n class=\"ina-linear-progress-indicator__fill\"\n :style=\"{\n width: `${clampedValue}%`,\n }\"\n />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nexport interface LinearProgressIndicatorProps {\n /**\n * Progress percentage (0-100)\n */\n value?: number;\n /**\n * Whether the progress indicator is visible\n */\n /**\n * Whether the progress indicator is visible\n */\n visible?: boolean;\n}\n\nconst props = withDefaults(defineProps<LinearProgressIndicatorProps>(), {\n value: 0,\n visible: true,\n});\n\nconst clampedValue = computed(() => {\n return Math.min(100, Math.max(0, props.value));\n});\n\nconst containerClasses = computed(() => {\n const classes = ['ina-linear-progress-indicator'];\n\n return classes.join(' ');\n});\n</script>\n\n<style scoped></style>\n","<template>\n <fieldset class=\"ina-radio-input\" :class=\"radioClasses\" :disabled=\"disabled\">\n <div class=\"ina-radio-input__group\">\n <label :class=\"labelClasses\" :for=\"labelId\">\n {{ label }}\n </label>\n\n <div\n v-for=\"(option, index) in options\"\n :key=\"`${option.value}-${index}`\"\n class=\"ina-radio-input__option\"\n :class=\"{ 'ina-radio-input__option--disabled': disabled }\"\n >\n <input\n :id=\"`${labelId}-${option.value}-${index}`\"\n ref=\"inputRef\"\n v-model=\"selectedValue\"\n type=\"radio\"\n :name=\"name\"\n :value=\"option.value\"\n :disabled=\"disabled\"\n class=\"ina-radio-input__field\"\n v-bind=\"$attrs\"\n @change=\"handleChange\"\n @focus=\"handleFocus\"\n @blur=\"handleBlur\"\n />\n\n <label\n :for=\"`${labelId}-${option.value}-${index}`\"\n class=\"ina-radio-input__option-label\"\n :class=\"{ 'ina-radio-input__option-label--disabled': disabled }\"\n >\n {{ option.label }}\n </label>\n </div>\n </div>\n\n <div v-if=\"helperText\" :class=\"helperClasses\">\n {{ helperText }}\n </div>\n </fieldset>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, watch } from 'vue';\nexport interface OptionItem {\n value: string | number;\n label: string;\n}\n\nexport interface RadioInputProps {\n modelValue?: string | number;\n label: string;\n options: OptionItem[];\n name?: string;\n size?: 'sm' | 'md' | 'lg';\n orientation?: 'vertical' | 'horizontal';\n disabled?: boolean;\n required?: boolean;\n error?: boolean;\n helperText?: string;\n}\n\nconst props = withDefaults(defineProps<RadioInputProps>(), {\n size: 'md',\n orientation: 'vertical',\n disabled: false,\n required: false,\n error: false,\n});\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string | number];\n change: [value: string | number];\n focus: [event: FocusEvent];\n blur: [event: FocusEvent];\n}>();\n\nconst inputRef = ref<HTMLInputElement[]>([]);\nconst selectedValue = ref(props.modelValue);\n\n// Generate unique ID for label\nconst labelId = computed(\n () => `radio-input-label-${Math.random().toString(36).substr(2, 9)}`\n);\n\nconst radioClasses = computed(() => {\n const classes = ['ina-radio-input'];\n\n classes.push(`ina-radio-input--size-${props.size}`);\n classes.push(`ina-radio-input--orientation-${props.orientation}`);\n\n if (props.disabled) {\n classes.push('ina-radio-input--disabled');\n }\n\n if (props.error) {\n classes.push('ina-radio-input--error');\n }\n\n return classes;\n});\n\nconst labelClasses = computed(() => {\n const classes = ['ina-radio-input__main-label'];\n\n if (props.required) {\n classes.push('ina-radio-input__main-label--required');\n }\n\n return classes;\n});\n\nconst helperClasses = computed(() => {\n const classes = ['ina-radio-input__help-text'];\n\n if (props.error) {\n classes.push('ina-radio-input__help-text--error');\n }\n\n return classes;\n});\n\nconst handleChange = (event: Event) => {\n const target = event.target as HTMLInputElement;\n const value = target.value;\n\n selectedValue.value = value;\n emit('update:modelValue', value);\n emit('change', value);\n};\n\nconst handleFocus = (event: FocusEvent) => {\n emit('focus', event);\n};\n\nconst handleBlur = (event: FocusEvent) => {\n emit('blur', event);\n};\n\n// Watch for external modelValue changes\nwatch(\n () => props.modelValue,\n (newValue) => {\n selectedValue.value = newValue;\n }\n);\n</script>\n","<template>\n <div ref=\"containerRef\" class=\"ina-year-picker\" :class=\"containerClasses\">\n <label v-if=\"label\" :for=\"triggerId\" class=\"ina-year-picker__label\">\n {{ label }}\n <span v-if=\"required\" class=\"ina-year-picker__required\">*</span>\n </label>\n\n <div class=\"ina-year-picker__wrapper\">\n <button\n :id=\"triggerId\"\n ref=\"triggerRef\"\n type=\"button\"\n :class=\"triggerClasses\"\n :disabled=\"disabled || readonly\"\n :aria-expanded=\"isOpen\"\n :aria-haspopup=\"true\"\n :aria-labelledby=\"label ? `${triggerId}-label` : undefined\"\n @click=\"togglePanel\"\n @keydown=\"handleKeydown\"\n >\n <div v-if=\"showIcon\" class=\"ina-year-picker__prefix-icon\">\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <rect\n x=\"3\"\n y=\"4\"\n width=\"18\"\n height=\"18\"\n rx=\"2\"\n ry=\"2\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n />\n <line\n x1=\"16\"\n y1=\"2\"\n x2=\"16\"\n y2=\"6\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n />\n <line\n x1=\"8\"\n y1=\"2\"\n x2=\"8\"\n y2=\"6\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n />\n <line\n x1=\"3\"\n y1=\"10\"\n x2=\"21\"\n y2=\"10\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n />\n </svg>\n </div>\n\n <span class=\"ina-year-picker__trigger-text\">\n {{ selectedYear || placeholder }}\n </span>\n\n <button\n v-if=\"showClearButton && selectedYear && !disabled && !readonly\"\n type=\"button\"\n class=\"ina-year-picker__clear-button\"\n @click.stop=\"handleClear\"\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M18 6L6 18M6 6L18 18\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n\n <!-- <svg\n class=\"ina-year-picker__chevron\"\n :class=\"{ 'ina-year-picker__chevron--open': isOpen }\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M6 9L12 15L18 9\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg> -->\n </button>\n\n <!-- Year Picker Panel -->\n <Transition name=\"panel\">\n <div\n v-if=\"isOpen\"\n ref=\"panelRef\"\n :class=\"[\n 'ina-year-picker__panel',\n { 'ina-year-picker__panel--open': isOpen },\n { 'ina-year-picker__panel--right-aligned': useRightPositioning },\n ]\"\n :style=\"panelStyle\"\n >\n <!-- Header with decade range and navigation -->\n <div class=\"ina-year-picker__header\">\n <button\n type=\"button\"\n class=\"ina-year-picker__nav-button\"\n :disabled=\"currentDecade <= props.minYear\"\n @click=\"goToPreviousDecade\"\n >\n <IconChevronLeft class=\"ina-year-picker__nav-icon\" />\n </button>\n\n <span class=\"ina-year-picker__decade-range\">\n {{ currentDecade }} -\n {{\n Math.min(currentDecade + props.decadeSize - 1, props.maxYear)\n }}\n </span>\n\n <button\n type=\"button\"\n class=\"ina-year-picker__nav-button\"\n :disabled=\"currentDecade + props.decadeSize > props.maxYear\"\n @click=\"goToNextDecade\"\n >\n <IconChevronRight class=\"ina-year-picker__nav-icon\" />\n </button>\n </div>\n\n <!-- Year Grid -->\n <div class=\"ina-year-picker__grid\">\n <button\n v-for=\"year in visibleYears\"\n :key=\"year\"\n type=\"button\"\n :class=\"getYearClasses(year)\"\n :disabled=\"\n year < props.minYear || year > props.maxYear || props.disabled\n \"\n @click=\"selectYear(year)\"\n @mouseenter=\"!props.disabled && (hoveredYear = year)\"\n @mouseleave=\"hoveredYear = null\"\n >\n {{ year }}\n </button>\n </div>\n </div>\n </Transition>\n </div>\n\n <div v-if=\"statusMessage\" :class=\"statusClasses\">\n {{ statusMessage }}\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, nextTick, onMounted, onUnmounted } from 'vue';\nimport { IconChevronLeft, IconChevronRight } from '@tabler/icons-vue';\nimport clsx from 'clsx';\nexport interface YearPickerProps {\n modelValue?: number;\n label?: string;\n placeholder?: string;\n size?: 'sm' | 'md';\n status?: 'neutral' | 'success' | 'error' | 'warning';\n statusMessage?: string;\n disabled?: boolean;\n readonly?: boolean;\n required?: boolean;\n minYear?: number;\n maxYear?: number;\n decadeSize?: number;\n showIcon?: boolean;\n showClearButton?: boolean;\n}\n\nconst props = withDefaults(defineProps<YearPickerProps>(), {\n modelValue: undefined,\n size: 'md',\n status: 'neutral',\n disabled: false,\n readonly: false,\n required: false,\n minYear: 1900,\n maxYear: 2100,\n decadeSize: 20,\n showIcon: false,\n showClearButton: false,\n});\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: number | undefined];\n change: [value: number | undefined];\n clear: [];\n}>();\n\nconst containerRef = ref<HTMLDivElement>();\nconst triggerRef = ref<HTMLButtonElement>();\nconst panelRef = ref<HTMLDivElement>();\nconst isOpen = ref(false);\nconst panelStyle = ref<Record<string, string>>({});\nconst useRightPositioning = ref(false);\nconst hoveredYear = ref<number | null>(null);\n\n// Calculate current decade based on selected year\nconst currentDecade = computed(() => {\n if (selectedYear.value) {\n return Math.floor(selectedYear.value / props.decadeSize) * props.decadeSize;\n }\n return (\n Math.floor(new Date().getFullYear() / props.decadeSize) * props.decadeSize\n );\n});\n\n// Generate unique ID for trigger\nconst triggerId = computed(\n () => `year-picker-${Math.random().toString(36).substr(2, 9)}`\n);\n\nconst selectedYear = computed(() => props.modelValue);\n\nconst minDecade = computed(\n () => Math.floor(props.minYear / props.decadeSize) * props.decadeSize\n);\nconst maxDecade = computed(\n () => Math.floor(props.maxYear / props.decadeSize) * props.decadeSize\n);\n\nconst containerClasses = computed(() => {\n const classes = ['ina-year-picker'];\n\n if (props.disabled) {\n classes.push('ina-year-picker--disabled');\n }\n\n return classes;\n});\n\nconst triggerClasses = computed(() => {\n const classes = ['ina-year-picker__trigger'];\n\n // Size\n classes.push(`ina-year-picker__trigger--size-${props.size}`);\n\n // States\n if (props.disabled) {\n classes.push('ina-year-picker__trigger--disabled');\n }\n\n if (props.readonly) {\n classes.push('ina-year-picker__trigger--readonly');\n }\n\n if (props.status !== 'neutral') {\n classes.push(`ina-year-picker__trigger--status-${props.status}`);\n }\n\n if (isOpen.value) {\n classes.push('ina-year-picker__trigger--open');\n }\n\n return classes;\n});\n\nconst statusClasses = computed(() => {\n const classes = ['ina-year-picker__status'];\n\n if (props.status !== 'neutral') {\n classes.push(`ina-year-picker__status--${props.status}`);\n }\n\n return classes;\n});\n\n// Generate year options for current decade\nconst visibleYears = computed(() => {\n const years = [];\n const startYear = currentDecade.value;\n const endYear = Math.min(\n currentDecade.value + props.decadeSize - 1,\n props.maxYear\n );\n\n for (let year = startYear; year <= endYear; year++) {\n if (year >= props.minYear) {\n years.push(year);\n }\n }\n return years;\n});\n\nconst getYearClasses = (year: number) => {\n const isSelected = year === selectedYear.value;\n const isHovered = year === hoveredYear.value;\n const isDisabled = year < props.minYear || year > props.maxYear;\n\n return clsx(\n 'ina-year-picker__year-option',\n isSelected && 'ina-year-picker__year-option--selected',\n isHovered && 'ina-year-picker__year-option--hovered',\n isDisabled && 'ina-year-picker__year-option--disabled'\n );\n};\n\nconst togglePanel = () => {\n if (props.disabled || props.readonly) return;\n\n isOpen.value = !isOpen.value;\n\n if (isOpen.value) {\n nextTick(() => {\n positionPanel();\n });\n }\n};\n\nconst positionPanel = () => {\n if (!triggerRef.value || !panelRef.value) return;\n\n // Use requestAnimationFrame to ensure panel is rendered\n requestAnimationFrame(() => {\n if (!triggerRef.value || !panelRef.value) return;\n\n const triggerRect = triggerRef.value.getBoundingClientRect();\n const panelRect = panelRef.value.getBoundingClientRect();\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n const isMobile = viewportWidth <= 640;\n\n // Default panel width from CSS (320px desktop, 200px mobile)\n const defaultPanelWidth = isMobile ? 200 : 320;\n const panelWidthValue = panelRect.width || defaultPanelWidth;\n\n // Calculate available space from both sides\n const availableSpaceRight = viewportWidth - triggerRect.right;\n const availableSpaceLeft = triggerRect.left;\n\n // Determine horizontal positioning based on available space\n let shouldUseRight = false;\n let leftValue: string | undefined = undefined;\n let rightValue: string | undefined = undefined;\n\n if (isMobile) {\n // On mobile: always center panel in viewport\n // Calculate center position relative to viewport\n const panelCenterX = viewportWidth / 2;\n const panelLeftFromViewport = panelCenterX - panelWidthValue / 2;\n // Convert to position relative to container\n // Get container element\n if (containerRef.value) {\n const containerRect = containerRef.value.getBoundingClientRect();\n // Calculate left position relative to container\n const leftRelativeToContainer =\n panelLeftFromViewport - containerRect.left;\n let calculatedLeft = Math.max(0, leftRelativeToContainer);\n\n // Ensure panel doesn't overflow viewport\n const maxLeft = viewportWidth - panelWidthValue - containerRect.left;\n if (leftRelativeToContainer > maxLeft) {\n calculatedLeft = Math.max(0, maxLeft);\n }\n\n leftValue = `${calculatedLeft}px`;\n rightValue = undefined;\n shouldUseRight = false;\n } else {\n // Fallback: center relative to viewport\n leftValue = `${Math.max(0, panelLeftFromViewport)}px`;\n rightValue = undefined;\n shouldUseRight = false;\n }\n } else {\n // Desktop: use existing logic\n shouldUseRight = panelWidthValue > availableSpaceRight;\n if (shouldUseRight) {\n rightValue = '0';\n leftValue = undefined;\n } else {\n leftValue = '0';\n rightValue = undefined;\n }\n }\n\n // Calculate vertical positioning\n const spaceBelow = viewportHeight - triggerRect.bottom;\n const spaceAbove = triggerRect.top;\n let top: string | undefined = undefined;\n let bottom: string | undefined = undefined;\n let maxHeight = '400px';\n\n if (spaceBelow < panelRect.height && spaceAbove > spaceBelow) {\n // Position above\n bottom = `${triggerRect.height + 4}px`;\n top = undefined;\n maxHeight = `${Math.min(spaceAbove - 10, 400)}px`;\n } else {\n // Position below\n top = `${triggerRect.height + 4}px`;\n bottom = undefined;\n maxHeight = `${Math.min(spaceBelow - 10, 400)}px`;\n }\n\n // Ensure panel width doesn't exceed viewport\n const maxWidth = `${Math.min(panelWidthValue, viewportWidth - 16)}px`; // 16px for padding\n\n const style: Record<string, string> = {\n position: 'absolute',\n maxWidth,\n maxHeight,\n zIndex: '10006', // Higher than MonthPicker panel (10005) and DatePicker panel (10004)\n };\n\n if (top !== undefined) {\n style.top = top;\n }\n if (bottom !== undefined) {\n style.bottom = bottom;\n }\n\n if (shouldUseRight) {\n style.left = 'auto';\n style.right = rightValue || '0';\n useRightPositioning.value = true;\n } else {\n style.left = leftValue || '0';\n style.right = 'auto';\n useRightPositioning.value = false;\n }\n\n panelStyle.value = style;\n });\n};\n\nconst selectYear = (year: number) => {\n if (year < props.minYear || year > props.maxYear) return;\n\n emit('update:modelValue', year);\n emit('change', year);\n isOpen.value = false;\n};\n\nconst goToPreviousDecade = () => {\n const newDecade = Math.max(\n currentDecade.value - props.decadeSize,\n props.minYear\n );\n // Update the current year to the first year of the new decade\n const newYear = Math.max(newDecade, props.minYear);\n emit('update:modelValue', newYear);\n emit('change', newYear);\n};\n\nconst goToNextDecade = () => {\n const newDecade = Math.min(\n currentDecade.value + props.decadeSize,\n props.maxYear - props.decadeSize + 1\n );\n // Update the current year to the first year of the new decade\n const newYear = Math.max(newDecade, props.minYear);\n emit('update:modelValue', newYear);\n emit('change', newYear);\n};\n\nconst handleClear = () => {\n emit('update:modelValue', undefined);\n emit('change', undefined);\n emit('clear');\n};\n\nconst handleKeydown = (event: KeyboardEvent) => {\n if (props.disabled || props.readonly) return;\n\n switch (event.key) {\n case 'Enter':\n case ' ':\n event.preventDefault();\n togglePanel();\n break;\n case 'Escape':\n isOpen.value = false;\n break;\n case 'ArrowDown':\n event.preventDefault();\n if (!isOpen.value) {\n togglePanel();\n }\n break;\n }\n};\n\nconst handleClickOutside = (event: Event) => {\n if (\n panelRef.value &&\n triggerRef.value &&\n !panelRef.value.contains(event.target as Node) &&\n !triggerRef.value.contains(event.target as Node)\n ) {\n isOpen.value = false;\n }\n};\n\n// Handle window resize and scroll for panel positioning\nconst handleResize = () => {\n if (isOpen.value) {\n nextTick(() => {\n positionPanel();\n });\n }\n};\n\nonMounted(() => {\n document.addEventListener('click', handleClickOutside);\n window.addEventListener('resize', handleResize);\n window.addEventListener('scroll', handleResize, true);\n});\n\nonUnmounted(() => {\n document.removeEventListener('click', handleClickOutside);\n window.removeEventListener('resize', handleResize);\n window.removeEventListener('scroll', handleResize, true);\n});\n</script>\n\n<style scoped>\n.panel-enter-active,\n.panel-leave-active {\n transition: all 0.2s ease;\n}\n\n.panel-enter-from,\n.panel-leave-to {\n opacity: 0;\n transform: translateY(-8px);\n}\n</style>\n","<template>\n <div class=\"ina-date-picker\" :class=\"containerClasses\">\n <label v-if=\"label\" :for=\"triggerId\" class=\"ina-date-picker__label\">\n <component :is=\"labelComponent\" v-if=\"labelComponent\" />\n <span v-else-if=\"label && typeof label === 'string'\">{{ label }}</span>\n <span v-if=\"required\" class=\"ina-date-picker__required\">*</span>\n </label>\n\n <!-- Trigger Button -->\n <button\n :id=\"triggerId\"\n ref=\"triggerRef\"\n type=\"button\"\n :class=\"triggerClasses\"\n :disabled=\"disabled || readonly\"\n :style=\"{ width: validatedTriggerWidth }\"\n @click.stop=\"togglePanel\"\n @keydown=\"handleKeydown\"\n >\n <IconCalendar :size=\"20\" class=\"ina-date-picker__trigger-icon\" />\n\n <span :class=\"triggerTextClasses\">\n {{ selectedDisplay || placeholder }}\n </span>\n\n <div\n v-if=\"hasValue && !disabled && !readonly\"\n class=\"ina-date-picker__clear-button\"\n aria-label=\"Clear selected date\"\n @click.stop=\"handleClear\"\n >\n <IconX :size=\"16\" class=\"ina-date-picker__clear-icon\" />\n </div>\n </button>\n\n <!-- Calendar Panel -->\n <div\n v-if=\"isOpen && !disabled && !readonly\"\n ref=\"panelRef\"\n :class=\"panelClasses\"\n :style=\"panelStyle\"\n >\n <div :class=\"panelContentClasses\">\n <!-- Single Mode Calendar -->\n <div\n v-if=\"mode === 'single'\"\n class=\"ina-date-picker__calendar-container\"\n >\n <div class=\"ina-date-picker__calendar-header\">\n <button\n type=\"button\"\n class=\"ina-date-picker__nav-button\"\n @click=\"goToPreviousMonth\"\n >\n <IconChevronLeft :size=\"20\" class=\"ina-date-picker__nav-icon\" />\n </button>\n\n <div class=\"ina-date-picker__header-controls\">\n <div class=\"ina-date-picker__dropdown-container\">\n <MonthPicker\n :model-value=\"currentMonth\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n :size=\"'sm'\"\n @update:model-value=\"handleMonthChange\"\n />\n </div>\n\n <div class=\"ina-date-picker__dropdown-container\">\n <YearPicker\n :model-value=\"currentYear\"\n :min-year=\"1900\"\n :max-year=\"2100\"\n :decade-size=\"20\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n :size=\"'sm'\"\n @update:model-value=\"handleYearChange\"\n />\n </div>\n </div>\n\n <button\n type=\"button\"\n class=\"ina-date-picker__nav-button\"\n @click=\"goToNextMonth\"\n >\n <IconChevronRight :size=\"20\" class=\"ina-date-picker__nav-icon\" />\n </button>\n </div>\n\n <div class=\"ina-date-picker__calendar-grid\">\n <div\n v-for=\"day in dayNames\"\n :key=\"`h-${day}`\"\n class=\"ina-date-picker__day-header\"\n >\n {{ day }}\n </div>\n <button\n v-for=\"day in calendarDays\"\n :key=\"`${day.date.getFullYear()}-${day.date.getMonth()}-${day.date.getDate()}`\"\n type=\"button\"\n :class=\"getDayClasses(day)\"\n :disabled=\"isDayDisabled(day.date)\"\n @click=\"selectDay(day)\"\n >\n <span class=\"ina-date-picker__day-number\">\n {{ day.date.getDate() }}\n </span>\n </button>\n </div>\n </div>\n\n <!-- Range/Multiple Mode Dual Calendar -->\n <template v-else>\n <!-- Left Calendar -->\n <div class=\"ina-date-picker__calendar-container\">\n <div class=\"ina-date-picker__calendar-header\">\n <button\n type=\"button\"\n class=\"ina-date-picker__nav-button\"\n @click=\"goToPreviousMonth\"\n >\n <IconChevronLeft :size=\"20\" class=\"ina-date-picker__nav-icon\" />\n </button>\n\n <div class=\"ina-date-picker__header-controls\">\n <div class=\"ina-date-picker__dropdown-container\">\n <MonthPicker\n :model-value=\"currentMonth\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n :size=\"'sm'\"\n @update:model-value=\"handleMonthChange\"\n />\n </div>\n\n <div class=\"ina-date-picker__dropdown-container\">\n <YearPicker\n :model-value=\"currentYear\"\n :min-year=\"1900\"\n :max-year=\"2100\"\n :decade-size=\"20\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n :size=\"'sm'\"\n @update:model-value=\"handleYearChange\"\n />\n </div>\n </div>\n\n <!-- Add ChevronRight for mobile navigation in range/multiple modes -->\n <button\n type=\"button\"\n class=\"ina-date-picker__nav-button\"\n @click=\"goToNextMonth\"\n >\n <IconChevronRight\n :size=\"20\"\n class=\"ina-date-picker__nav-icon\"\n />\n </button>\n </div>\n\n <div class=\"ina-date-picker__calendar-grid\">\n <div\n v-for=\"day in dayNames\"\n :key=\"`lh-${day}`\"\n class=\"ina-date-picker__day-header\"\n >\n {{ day }}\n </div>\n <button\n v-for=\"day in calendarDays\"\n :key=\"`left-${day.date.getFullYear()}-${day.date.getMonth()}-${day.date.getDate()}`\"\n type=\"button\"\n :class=\"getDayClasses(day)\"\n :disabled=\"isDayDisabled(day.date)\"\n @click=\"selectDay(day)\"\n >\n <span class=\"ina-date-picker__day-number\">\n {{ day.date.getDate() }}\n </span>\n </button>\n </div>\n </div>\n\n <!-- Right Calendar -->\n <div class=\"ina-date-picker__calendar\">\n <div class=\"ina-date-picker__next-month-header\">\n <!-- ChevronLeft for right panel -->\n <button\n type=\"button\"\n class=\"ina-date-picker__nav-button\"\n @click=\"goToPreviousMonthRight\"\n >\n <IconChevronLeft :size=\"20\" class=\"ina-date-picker__nav-icon\" />\n </button>\n\n <div class=\"ina-date-picker__next-month-controls\">\n <div class=\"ina-date-picker__dropdown-container\">\n <MonthPicker\n :model-value=\"nextMonth\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n :size=\"'sm'\"\n @update:model-value=\"handleNextMonthChange\"\n />\n </div>\n\n <div class=\"ina-date-picker__dropdown-container\">\n <YearPicker\n :model-value=\"nextYear\"\n :min-year=\"1900\"\n :max-year=\"2100\"\n :decade-size=\"20\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n :size=\"'sm'\"\n @update:model-value=\"handleNextYearChange\"\n />\n </div>\n </div>\n\n <!-- ChevronRight for right panel -->\n <button\n type=\"button\"\n class=\"ina-date-picker__nav-button\"\n @click=\"goToNextMonthRight\"\n >\n <IconChevronRight\n :size=\"20\"\n class=\"ina-date-picker__nav-icon\"\n />\n </button>\n </div>\n\n <div class=\"ina-date-picker__calendar-grid\">\n <div\n v-for=\"day in dayNames\"\n :key=\"`rh-${day}`\"\n class=\"ina-date-picker__day-header\"\n >\n {{ day }}\n </div>\n <button\n v-for=\"day in nextCalendarDays\"\n :key=\"`right-${day.date.getFullYear()}-${day.date.getMonth()}-${day.date.getDate()}`\"\n type=\"button\"\n :class=\"getDayClasses(day)\"\n :disabled=\"isDayDisabled(day.date)\"\n @click=\"selectDay(day)\"\n >\n <span class=\"ina-date-picker__day-number\">\n {{ day.date.getDate() }}\n </span>\n </button>\n </div>\n </div>\n </template>\n </div>\n </div>\n\n <div v-if=\"statusMessage\" :class=\"statusClasses\">\n {{ statusMessage }}\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, nextTick, onMounted, onUnmounted, watch } from 'vue';\nimport type { Component } from 'vue';\nimport {\n IconChevronLeft,\n IconChevronRight,\n IconCalendar,\n IconX,\n} from '@tabler/icons-vue';\nimport clsx from 'clsx';\nimport MonthPicker from './MonthPicker.vue';\nimport YearPicker from './YearPicker.vue';\n\nexport interface DatePickerProps {\n modelValue?: string | [string, string] | string[];\n mode?: 'single' | 'range' | 'multiple';\n label?: string | Component;\n placeholder?: string;\n size?: 'sm' | 'md' | 'lg';\n status?: 'neutral' | 'success' | 'error' | 'warning';\n statusMessage?: string;\n disabled?: boolean;\n readonly?: boolean;\n required?: boolean;\n showIcon?: boolean;\n showClearButton?: boolean;\n dateFormat?: string;\n minDate?: Date;\n maxDate?: Date;\n disabledDates?: Date[];\n /** Disable dates before today */\n disabledBackDate?: boolean;\n /** Disable dates after today */\n disabledFutureDate?: boolean;\n /** Disable dates before this specific date (format: 'dd/MM/yyyy') */\n disabledDateBefore?: string;\n /** Disable dates after this specific date (format: 'dd/MM/yyyy') */\n disabledDateAfter?: string;\n triggerWidth?: number | string;\n panelMaxHeight?: number | string;\n panelClassName?: string;\n triggerClassname?: string;\n popperPlacement?:\n | 'bottom'\n | 'bottom-start'\n | 'bottom-end'\n | 'left'\n | 'left-start'\n | 'left-end'\n | 'right'\n | 'right-start'\n | 'right-end'\n | 'top'\n | 'top-start'\n | 'top-end';\n}\n\nconst props = withDefaults(defineProps<DatePickerProps>(), {\n modelValue: '',\n mode: 'single',\n size: 'md',\n status: 'neutral',\n disabled: false,\n readonly: false,\n required: false,\n showIcon: false,\n showClearButton: false,\n dateFormat: 'DD/MM/YYYY',\n triggerWidth: '',\n panelMaxHeight: undefined,\n panelClassName: '',\n triggerClassname: '',\n popperPlacement: 'bottom-start',\n});\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string | [string, string] | string[]];\n change: [value: string | [string, string] | string[]];\n clear: [];\n}>();\n\nconst triggerRef = ref<HTMLButtonElement>();\nconst panelRef = ref<HTMLDivElement>();\nconst isOpen = ref(false);\nconst panelStyle = ref({});\nconst currentDate = ref(new Date());\nconst nextDate = ref(new Date(new Date().setMonth(new Date().getMonth() + 1)));\nconst tempSelectedDate = ref<string | [string, string] | string[] | null>(null);\nconst useRightPositioning = ref(false);\n// Internal state untuk menyimpan start date sementara di mode range (tidak emit sampai end date dipilih)\nconst tempStartDate = ref<Date | null>(null);\n\n// Generate unique ID for trigger\nconst triggerId = computed(\n () => `date-picker-${Math.random().toString(36).substr(2, 9)}`\n);\n\nconst currentYear = computed(() => currentDate.value.getFullYear());\nconst currentMonth = computed(() => currentDate.value.getMonth());\nconst nextYear = computed(() => nextDate.value.getFullYear());\nconst nextMonth = computed(() => nextDate.value.getMonth());\n\nconst monthNames = [\n 'Januari',\n 'Februari',\n 'Maret',\n 'April',\n 'Mei',\n 'Juni',\n 'Juli',\n 'Agustus',\n 'September',\n 'Oktober',\n 'November',\n 'Desember',\n];\n\nconst dayNames = ['Min', 'Sen', 'Sel', 'Rab', 'Kam', 'Jum', 'Sab'];\n\nconst currentMonthName = computed(() => monthNames[currentMonth.value]);\nconst nextMonthName = computed(() => monthNames[nextMonth.value]);\n\nconst hasValue = computed(() => {\n if (props.mode === 'single') {\n return !!props.modelValue;\n } else if (props.mode === 'range') {\n const range = props.modelValue as [string, string];\n return !!(range && range[0] && range[1]);\n } else if (props.mode === 'multiple') {\n const multiple = props.modelValue as string[];\n return !!(multiple && multiple.length > 0);\n }\n return false;\n});\n\nconst selectedDisplay = computed(() => {\n if (props.mode === 'single') {\n return props.modelValue as string;\n } else if (props.mode === 'range') {\n const range = props.modelValue as [string, string];\n if (range && range[0] && range[1]) {\n return `${range[0]} - ${range[1]}`;\n }\n return '';\n } else if (props.mode === 'multiple') {\n const multiple = props.modelValue as string[];\n if (multiple && multiple.length > 0) {\n if (multiple.length === 1) {\n return multiple[0];\n }\n return `${multiple.length} dates selected`;\n }\n return '';\n }\n return '';\n});\n\nconst containerClasses = computed(() => {\n return clsx('ina-date-picker', props.disabled && 'ina-date-picker--disabled');\n});\n\nconst triggerClasses = computed(() => {\n return clsx(\n 'ina-date-picker__trigger',\n `ina-date-picker__trigger--size-${props.size}`,\n props.disabled && 'ina-date-picker__trigger--disabled',\n props.readonly && 'ina-date-picker__trigger--readonly',\n props.status !== 'neutral' &&\n `ina-date-picker__trigger--status-${props.status}`,\n isOpen.value && 'ina-date-picker__trigger--open',\n props.triggerClassname\n );\n});\n\nconst triggerTextClasses = computed(() => {\n return clsx(\n 'ina-date-picker__trigger-text',\n selectedDisplay.value\n ? 'ina-date-picker__trigger-text--value'\n : 'ina-date-picker__trigger-text--placeholder'\n );\n});\n\nconst labelComponent = computed(() => {\n if (!props.label) return null;\n if (typeof props.label === 'string') return null;\n return props.label as Component;\n});\n\n// Validate triggerWidth to ensure it doesn't exceed viewport width\n// Use ref to store validated width and update it when component is mounted or triggerWidth changes\nconst validatedTriggerWidth = ref<string | number>(props.triggerWidth);\n\nconst validateTriggerWidth = () => {\n if (typeof window === 'undefined') return;\n\n const viewportWidth = window.innerWidth;\n let maxWidth = viewportWidth;\n\n // Try to get parent width if triggerRef is available\n if (triggerRef.value?.parentElement) {\n const parentWidth =\n triggerRef.value.parentElement.getBoundingClientRect().width;\n maxWidth = Math.min(viewportWidth, parentWidth);\n }\n\n // If triggerWidth is a percentage, allow it (browser will handle it)\n if (typeof props.triggerWidth === 'string') {\n if (props.triggerWidth.includes('%')) {\n // For percentage, ensure it doesn't exceed 100%\n const percentage = parseFloat(props.triggerWidth.replace('%', ''));\n if (percentage > 100) {\n validatedTriggerWidth.value = '100%';\n } else {\n validatedTriggerWidth.value = props.triggerWidth;\n }\n return;\n } else if (props.triggerWidth.includes('px')) {\n const pixelValue = parseInt(props.triggerWidth.replace('px', ''), 10);\n if (!isNaN(pixelValue)) {\n validatedTriggerWidth.value = `${Math.min(pixelValue, maxWidth)}px`;\n } else {\n validatedTriggerWidth.value = props.triggerWidth;\n }\n return;\n } else if (props.triggerWidth.includes('rem')) {\n const remValue = parseFloat(props.triggerWidth.replace('rem', ''));\n const pixelValue = remValue * 16; // Assuming 16px base\n validatedTriggerWidth.value = `${Math.min(pixelValue, maxWidth)}px`;\n return;\n } else if (props.triggerWidth === '100%' || props.triggerWidth === 'auto') {\n validatedTriggerWidth.value = props.triggerWidth; // Allow 100% and auto\n return;\n }\n // If it's a number string, parse it\n const numValue = parseFloat(props.triggerWidth);\n if (!isNaN(numValue)) {\n validatedTriggerWidth.value = `${Math.min(numValue, maxWidth)}px`;\n } else {\n validatedTriggerWidth.value = props.triggerWidth;\n }\n } else if (typeof props.triggerWidth === 'number') {\n validatedTriggerWidth.value = `${Math.min(props.triggerWidth, maxWidth)}px`;\n } else {\n validatedTriggerWidth.value = props.triggerWidth;\n }\n};\n\n// Watch for triggerWidth changes and validate\nwatch(\n () => props.triggerWidth,\n () => {\n validateTriggerWidth();\n },\n { immediate: true }\n);\n\nconst panelClasses = computed(() => {\n return clsx(\n 'ina-date-picker__panel',\n `ina-date-picker__panel--${props.popperPlacement.split('-')[0]}`,\n useRightPositioning.value &&\n !props.popperPlacement.includes('left') &&\n !props.popperPlacement.includes('right') &&\n 'ina-date-picker__panel--right-aligned',\n props.panelClassName\n );\n});\n\nconst statusClasses = computed(() => {\n return clsx(\n 'ina-date-picker__status',\n props.status !== 'neutral' && `ina-date-picker__status--${props.status}`\n );\n});\n\n// Match React: panel-content modifiers for responsive/single/dual\nconst panelContentClasses = computed(() =>\n clsx(\n 'ina-date-picker__panel-content',\n 'ina-date-picker__panel-content--responsive',\n props.mode === 'single' && 'ina-date-picker__panel-content--single',\n (props.mode === 'range' || props.mode === 'multiple') &&\n 'ina-date-picker__panel-content--dual'\n )\n);\n\nconst calendarDays = computed(() => {\n const year = currentYear.value;\n const month = currentMonth.value;\n const firstDay = new Date(year, month, 1);\n const lastDay = new Date(year, month + 1, 0);\n const startDate = new Date(firstDay);\n startDate.setDate(startDate.getDate() - firstDay.getDay());\n\n const days = [];\n const endDate = new Date(lastDay);\n endDate.setDate(endDate.getDate() + (6 - lastDay.getDay()));\n\n let currentDate = new Date(startDate);\n while (currentDate <= endDate) {\n days.push({\n date: new Date(currentDate),\n isCurrentMonth: currentDate.getMonth() === month,\n isToday: isToday(currentDate),\n });\n currentDate.setDate(currentDate.getDate() + 1);\n }\n\n return days;\n});\n\nconst nextCalendarDays = computed(() => {\n const year = nextYear.value;\n const month = nextMonth.value;\n const firstDay = new Date(year, month, 1);\n const lastDay = new Date(year, month + 1, 0);\n const startDate = new Date(firstDay);\n startDate.setDate(startDate.getDate() - firstDay.getDay());\n\n const days = [];\n const endDate = new Date(lastDay);\n endDate.setDate(endDate.getDate() + (6 - lastDay.getDay()));\n\n let currentDate = new Date(startDate);\n while (currentDate <= endDate) {\n days.push({\n date: new Date(currentDate),\n isCurrentMonth: currentDate.getMonth() === month,\n isToday: isToday(currentDate),\n });\n currentDate.setDate(currentDate.getDate() + 1);\n }\n\n return days;\n});\n\nconst isToday = (date: Date) => {\n const today = new Date();\n return date.toDateString() === today.toDateString();\n};\n\nconst formatDate = (date: Date) => {\n const day = date.getDate().toString().padStart(2, '0');\n const month = (date.getMonth() + 1).toString().padStart(2, '0');\n const year = date.getFullYear();\n\n return props.dateFormat\n .replace('DD', day)\n .replace('MM', month)\n .replace('YYYY', year.toString())\n .replace('MMMM', monthNames[date.getMonth()]);\n};\n\nconst parseDate = (dateString: string) => {\n if (!dateString) return null;\n\n // Simple parsing for DD/MM/YYYY format\n // eslint-disable-next-line no-useless-escape\n const parts = dateString.split(/[\\/\\-\\.]/);\n if (parts.length === 3) {\n const day = parseInt(parts[0], 10);\n const month = parseInt(parts[1], 10) - 1;\n const year = parseInt(parts[2], 10);\n\n if (!isNaN(day) && !isNaN(month) && !isNaN(year)) {\n return new Date(year, month, day);\n }\n }\n\n return null;\n};\n\nconst isDayDisabled = (date: Date) => {\n const today = new Date();\n today.setHours(0, 0, 0, 0); // Reset time to start of day\n\n const checkDate = new Date(date);\n checkDate.setHours(0, 0, 0, 0); // Reset time to start of day\n\n // Check minDate (legacy support)\n if (props.minDate && checkDate < props.minDate) return true;\n\n // Check maxDate (legacy support)\n if (props.maxDate && checkDate > props.maxDate) return true;\n\n // Check disabledBackDate (before today)\n if (props.disabledBackDate && checkDate < today) {\n return true;\n }\n\n // Check disabledFutureDate (after today)\n if (props.disabledFutureDate && checkDate > today) {\n return true;\n }\n\n // Check disabledDateBefore (before specific date)\n if (props.disabledDateBefore) {\n const beforeDate = parseDate(props.disabledDateBefore);\n if (beforeDate) {\n beforeDate.setHours(0, 0, 0, 0);\n if (checkDate < beforeDate) {\n return true;\n }\n }\n }\n\n // Check disabledDateAfter (after specific date)\n if (props.disabledDateAfter) {\n const afterDate = parseDate(props.disabledDateAfter);\n if (afterDate) {\n afterDate.setHours(0, 0, 0, 0);\n if (checkDate > afterDate) {\n return true;\n }\n }\n }\n\n // Check disabledDates array\n if (props.disabledDates) {\n return props.disabledDates.some(\n (disabledDate) => date.toDateString() === disabledDate.toDateString()\n );\n }\n\n return false;\n};\n\nconst getDayClasses = (day: any) => {\n const rangePosition = getRangePosition(day.date);\n\n return clsx(\n 'ina-date-picker__day',\n !day.isCurrentMonth && 'ina-date-picker__day--other-month',\n day.isToday && 'ina-date-picker__day--today',\n isDaySelected(day.date) && 'ina-date-picker__day--selected',\n isDayInRange(day.date) && 'ina-date-picker__day--in-range',\n isDayDisabled(day.date) && 'ina-date-picker__day--disabled',\n // Range position classes\n rangePosition === 'start' && 'ina-date-picker__day--range-start',\n rangePosition === 'end' && 'ina-date-picker__day--range-end',\n rangePosition === 'middle' && 'ina-date-picker__day--range-in'\n );\n};\n\nconst isDaySelected = (date: Date) => {\n if (props.mode === 'single') {\n // Check only modelValue (no tempSelectedDate needed)\n const selected = parseDate(props.modelValue as string);\n return selected && date.toDateString() === selected.toDateString();\n } else if (props.mode === 'range') {\n // Prioritas 1: Jika ada tempStartDate, gunakan itu (range baru sedang dipilih)\n if (\n tempStartDate.value &&\n date.toDateString() === tempStartDate.value.toDateString()\n ) {\n return true;\n }\n\n // Prioritas 2: Cek modelValue hanya jika tidak ada tempStartDate\n // (artinya range sudah lengkap atau belum ada selection)\n if (!tempStartDate.value) {\n const range = props.modelValue as [string, string];\n if (range && range[0] && range[1]) {\n const start = parseDate(range[0]);\n const end = parseDate(range[1]);\n if (start && date.toDateString() === start.toDateString()) {\n return true;\n }\n if (end && date.toDateString() === end.toDateString()) {\n return true;\n }\n }\n }\n } else if (props.mode === 'multiple') {\n const multiple = props.modelValue as string[];\n if (multiple) {\n return multiple.some((dateStr) => {\n const parsed = parseDate(dateStr);\n return parsed && date.toDateString() === parsed.toDateString();\n });\n }\n }\n return false;\n};\n\nconst isDayInRange = (date: Date) => {\n if (props.mode === 'range') {\n // Jika ada tempStartDate, jangan tampilkan range lama\n if (tempStartDate.value) {\n return false;\n }\n\n // Cek modelValue hanya jika tidak ada tempStartDate\n const range = props.modelValue as [string, string];\n if (range && range[0] && range[1]) {\n const start = parseDate(range[0]);\n const end = parseDate(range[1]);\n if (start && end) {\n return date > start && date < end;\n }\n }\n }\n return false;\n};\n\nconst getRangePosition = (\n date: Date | null\n): 'start' | 'middle' | 'end' | 'single' | 'none' => {\n if (!date) return 'none';\n\n if (props.mode === 'range') {\n // Prioritas 1: Jika ada tempStartDate, gunakan itu (range baru sedang dipilih)\n if (\n tempStartDate.value &&\n date.toDateString() === tempStartDate.value.toDateString()\n ) {\n return 'start';\n }\n\n // Prioritas 2: Cek modelValue hanya jika tidak ada tempStartDate\n // (artinya range sudah lengkap atau belum ada selection)\n if (!tempStartDate.value) {\n const range = props.modelValue as [string, string];\n if (range && range[0] && range[1]) {\n const start = parseDate(range[0]);\n const end = parseDate(range[1]);\n\n if (start && end) {\n // Check if this is the start date\n if (date.toDateString() === start.toDateString()) {\n // If start and end are the same\n if (date.toDateString() === end.toDateString()) {\n return 'single'; // Same start and end date\n }\n return 'start';\n }\n\n // Check if this is the end date\n if (date.toDateString() === end.toDateString()) {\n return 'end';\n }\n\n // Check if this date is in the middle of the range\n if (date > start && date < end) {\n return 'middle';\n }\n }\n }\n }\n }\n\n return 'none';\n};\n\nconst selectDay = (day: any) => {\n if (isDayDisabled(day.date)) return;\n\n const formattedDate = formatDate(day.date);\n\n if (props.mode === 'single') {\n // For single mode, apply immediately without closing panel\n emit('update:modelValue', formattedDate);\n emit('change', formattedDate);\n // Don't close panel - only close on click outside or toggle\n } else if (props.mode === 'range') {\n const range = (props.modelValue as [string, string]) || ['', ''];\n\n if (!range[0] && !range[1] && !tempStartDate.value) {\n // First selection - simpan di internal state, jangan emit\n tempStartDate.value = day.date;\n } else if (tempStartDate.value || (range[0] && !range[1])) {\n // Second selection - sekarang baru emit dengan start dan end\n const startDate = tempStartDate.value || parseDate(range[0]);\n if (startDate) {\n const [start, end] =\n startDate <= day.date ? [startDate, day.date] : [day.date, startDate];\n const formattedStart = formatDate(start);\n const formattedEnd = formatDate(end);\n emit('update:modelValue', [formattedStart, formattedEnd]);\n emit('change', [formattedStart, formattedEnd]);\n tempStartDate.value = null; // Reset temp state\n }\n } else if (range[0] && range[1]) {\n // Reset range lama dan mulai range baru\n emit('update:modelValue', ['', '']); // Reset ke parent\n emit('change', ['', '']); // Notify parent\n tempStartDate.value = day.date; // Set start date baru\n }\n } else if (props.mode === 'multiple') {\n const multiple = [...((props.modelValue as string[]) || [])];\n const index = multiple.indexOf(formattedDate);\n\n if (index > -1) {\n multiple.splice(index, 1);\n } else {\n multiple.push(formattedDate);\n }\n\n emit('update:modelValue', multiple);\n emit('change', multiple);\n }\n};\n\n// Helper function to check if left month is greater than right month\nconst isLeftGreaterThanRight = (leftDate: Date, rightDate: Date): boolean => {\n const leftYear = leftDate.getFullYear();\n const leftMonth = leftDate.getMonth();\n const rightYear = rightDate.getFullYear();\n const rightMonth = rightDate.getMonth();\n\n return (\n leftYear > rightYear || (leftYear === rightYear && leftMonth >= rightMonth)\n );\n};\n\nconst goToPreviousMonth = () => {\n const newDate = new Date(currentDate.value);\n newDate.setMonth(newDate.getMonth() - 1);\n currentDate.value = newDate;\n\n // Validation: If left panel becomes greater than or equal to right panel, adjust right panel\n if (\n props.mode !== 'single' &&\n isLeftGreaterThanRight(newDate, nextDate.value)\n ) {\n const adjustedRight = new Date(newDate);\n adjustedRight.setMonth(adjustedRight.getMonth() + 1);\n nextDate.value = adjustedRight;\n }\n};\n\nconst goToNextMonth = () => {\n const newDate = new Date(currentDate.value);\n newDate.setMonth(newDate.getMonth() + 1);\n currentDate.value = newDate;\n\n // Validation: If left panel becomes greater than or equal to right panel, adjust right panel\n if (\n props.mode !== 'single' &&\n isLeftGreaterThanRight(newDate, nextDate.value)\n ) {\n const adjustedRight = new Date(newDate);\n adjustedRight.setMonth(adjustedRight.getMonth() + 1);\n nextDate.value = adjustedRight;\n }\n};\n\n// Navigation functions for right calendar - independent with validation\nconst goToPreviousMonthRight = () => {\n const newDate = new Date(nextDate.value);\n newDate.setMonth(newDate.getMonth() - 1);\n nextDate.value = newDate;\n\n // Validation: If right panel becomes less than left panel, adjust left panel\n if (\n props.mode !== 'single' &&\n isLeftGreaterThanRight(currentDate.value, newDate)\n ) {\n const adjustedLeft = new Date(newDate);\n adjustedLeft.setMonth(adjustedLeft.getMonth() - 1);\n currentDate.value = adjustedLeft;\n }\n};\n\nconst goToNextMonthRight = () => {\n const newDate = new Date(nextDate.value);\n newDate.setMonth(newDate.getMonth() + 1);\n nextDate.value = newDate;\n\n // Validation: If right panel becomes less than left panel, adjust left panel\n if (\n props.mode !== 'single' &&\n isLeftGreaterThanRight(currentDate.value, newDate)\n ) {\n const adjustedLeft = new Date(newDate);\n adjustedLeft.setMonth(adjustedLeft.getMonth() - 1);\n currentDate.value = adjustedLeft;\n }\n};\n\nconst handleMonthChange = (month: number) => {\n const newDate = new Date(currentDate.value);\n newDate.setMonth(month);\n currentDate.value = newDate;\n\n // Validation: If left panel becomes greater than or equal to right panel, adjust right panel\n if (\n props.mode !== 'single' &&\n isLeftGreaterThanRight(newDate, nextDate.value)\n ) {\n const adjustedRight = new Date(newDate);\n adjustedRight.setMonth(adjustedRight.getMonth() + 1);\n nextDate.value = adjustedRight;\n }\n};\n\nconst handleYearChange = (year: number) => {\n const newDate = new Date(currentDate.value);\n newDate.setFullYear(year);\n currentDate.value = newDate;\n\n // Validation: If left panel becomes greater than or equal to right panel, adjust right panel\n if (\n props.mode !== 'single' &&\n isLeftGreaterThanRight(newDate, nextDate.value)\n ) {\n const adjustedRight = new Date(newDate);\n adjustedRight.setMonth(adjustedRight.getMonth() + 1);\n nextDate.value = adjustedRight;\n }\n};\n\nconst handleNextMonthChange = (month: number) => {\n const newDate = new Date(nextDate.value);\n newDate.setMonth(month);\n nextDate.value = newDate;\n\n // Validation: If right panel becomes less than left panel, adjust left panel\n if (\n props.mode !== 'single' &&\n isLeftGreaterThanRight(currentDate.value, newDate)\n ) {\n const adjustedLeft = new Date(newDate);\n adjustedLeft.setMonth(adjustedLeft.getMonth() - 1);\n currentDate.value = adjustedLeft;\n }\n};\n\nconst handleNextYearChange = (year: number) => {\n const newDate = new Date(nextDate.value);\n newDate.setFullYear(year);\n nextDate.value = newDate;\n\n // Validation: If right panel becomes less than left panel, adjust left panel\n if (\n props.mode !== 'single' &&\n isLeftGreaterThanRight(currentDate.value, newDate)\n ) {\n const adjustedLeft = new Date(newDate);\n adjustedLeft.setMonth(adjustedLeft.getMonth() - 1);\n currentDate.value = adjustedLeft;\n }\n};\n\nconst togglePanel = () => {\n if (props.disabled || props.readonly) return;\n\n // Close all other DatePicker panels before opening this one\n if (!isOpen.value) {\n const allDatePickers = document.querySelectorAll('.ina-date-picker');\n allDatePickers.forEach((picker) => {\n if (picker !== triggerRef.value?.closest('.ina-date-picker')) {\n const closeEvent = new CustomEvent('closeDatePicker', {\n detail: { exclude: triggerRef.value?.closest('.ina-date-picker') },\n });\n document.dispatchEvent(closeEvent);\n }\n });\n }\n\n isOpen.value = !isOpen.value;\n\n if (isOpen.value) {\n nextTick(() => {\n positionPanel();\n });\n }\n};\n\n// Helper function to find first enabled date month\nconst getFirstEnabledMonth = (): Date | null => {\n // Check disabledDateBefore - if set, the first enabled date is that date\n if (props.disabledDateBefore) {\n const beforeDate = parseDate(props.disabledDateBefore);\n if (beforeDate) {\n // Return the month containing the disabledDateBefore date (first enabled date)\n return new Date(beforeDate.getFullYear(), beforeDate.getMonth(), 1);\n }\n }\n\n // Check disabledDateAfter - if set, start from today or earlier\n // But we'll prioritize disabledDateBefore if it exists\n if (props.disabledDateAfter && !props.disabledDateBefore) {\n const afterDate = parseDate(props.disabledDateAfter);\n if (afterDate) {\n // Return the month containing the disabledDateAfter date\n return new Date(afterDate.getFullYear(), afterDate.getMonth(), 1);\n }\n }\n\n // Check disabledBackDate - if set, first enabled date is today\n if (props.disabledBackDate) {\n const today = new Date();\n return new Date(today.getFullYear(), today.getMonth(), 1);\n }\n\n // Check disabledFutureDate - if set, first enabled date is today\n if (props.disabledFutureDate) {\n const today = new Date();\n return new Date(today.getFullYear(), today.getMonth(), 1);\n }\n\n // Check minDate (legacy support)\n if (props.minDate) {\n return new Date(props.minDate.getFullYear(), props.minDate.getMonth(), 1);\n }\n\n return null;\n};\n\n// Update currentDate when panel opens based on selected date or disabled dates\nwatch(isOpen, (newValue) => {\n if (!newValue) {\n // Reset temp state when panel closes\n tempStartDate.value = null;\n } else {\n // Priority 1: Use selected date if available\n let targetDate: Date | null = null;\n let targetEndDate: Date | null = null;\n\n if (props.mode === 'single') {\n targetDate = parseDate(props.modelValue as string);\n } else if (props.mode === 'range') {\n const range = props.modelValue as [string, string];\n if (range && range[0]) {\n targetDate = parseDate(range[0]);\n }\n if (range && range[1]) {\n targetEndDate = parseDate(range[1]);\n }\n } else if (props.mode === 'multiple') {\n const multiple = props.modelValue as string[];\n if (multiple && multiple.length > 0) {\n targetDate = parseDate(multiple[0]);\n }\n }\n\n let targetMonth: Date | null = null;\n let targetNextMonth: Date | null = null;\n\n if (targetDate) {\n // Create a new Date object with the same month and year as the selected date\n targetMonth = new Date(\n targetDate.getFullYear(),\n targetDate.getMonth(),\n 1\n );\n } else {\n // Priority 2: If no selected date, use first enabled month from disabled dates\n targetMonth = getFirstEnabledMonth();\n }\n\n // Handle targetNextMonth for range mode\n if (props.mode === 'range') {\n if (targetDate && targetEndDate) {\n // Both startDate and endDate exist\n const startMonth = new Date(\n targetDate.getFullYear(),\n targetDate.getMonth(),\n 1\n );\n const endMonth = new Date(\n targetEndDate.getFullYear(),\n targetEndDate.getMonth(),\n 1\n );\n\n // Check if startDate and endDate are in the same month\n if (\n startMonth.getFullYear() === endMonth.getFullYear() &&\n startMonth.getMonth() === endMonth.getMonth()\n ) {\n // If same month, set right panel to next month (startDate month + 1)\n // This ensures the right panel shows the month after the selected range\n targetNextMonth = new Date(startMonth);\n targetNextMonth.setMonth(targetNextMonth.getMonth() + 1);\n } else {\n // If different months, use endDate's month for right panel\n targetNextMonth = endMonth;\n }\n } else if (targetDate && !targetEndDate) {\n // Only startDate exists (no endDate yet), set right panel to next month\n targetNextMonth = new Date(targetMonth!);\n targetNextMonth.setMonth(targetNextMonth.getMonth() + 1);\n }\n } else if (targetEndDate) {\n // For other modes (shouldn't happen, but keep for safety)\n targetNextMonth = new Date(\n targetEndDate.getFullYear(),\n targetEndDate.getMonth(),\n 1\n );\n }\n\n if (targetMonth) {\n currentDate.value = targetMonth;\n // Initialize nextDate independently (only if range/multiple mode)\n if (props.mode !== 'single') {\n if (targetNextMonth) {\n // targetNextMonth has been explicitly set based on selected dates\n // For range mode: if startDate and endDate are in same month, this is startDate month + 1\n // For range mode: if startDate and endDate are in different months, this is endDate month\n // For range mode: if only startDate exists, this is startDate month + 1\n nextDate.value = targetNextMonth;\n } else {\n // Fallback: initialize nextMonth to targetMonth + 1\n // For range mode: only if no dates are selected yet\n // For multiple mode: always initialize to targetMonth + 1\n if (props.mode === 'multiple') {\n const nextMonthDate = new Date(targetMonth);\n nextMonthDate.setMonth(nextMonthDate.getMonth() + 1);\n nextDate.value = nextMonthDate;\n } else if (props.mode === 'range') {\n // For range mode: check if we have any selected dates\n const range = props.modelValue as [string, string];\n const hasNoDates = !range || (!range[0] && !range[1]);\n\n // Only initialize nextMonth if there's no dates selected yet\n if (hasNoDates) {\n const nextMonthDate = new Date(targetMonth);\n nextMonthDate.setMonth(nextMonthDate.getMonth() + 1);\n nextDate.value = nextMonthDate;\n }\n // Otherwise, nextMonth should have been set via targetNextMonth above\n }\n }\n }\n }\n }\n});\n\nconst positionPanel = () => {\n if (!triggerRef.value || !panelRef.value) return;\n\n // Use requestAnimationFrame to ensure panel is rendered\n // Use double requestAnimationFrame to ensure panel is fully rendered and measured\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n if (!triggerRef.value || !panelRef.value) return;\n\n const triggerRect = triggerRef.value.getBoundingClientRect();\n const panelRect = panelRef.value.getBoundingClientRect();\n const viewportWidth = window.innerWidth;\n\n // Get actual panel width from DOM\n const actualPanelWidth = panelRect.width;\n\n // Calculate available space on the right\n const availableSpaceRight = viewportWidth - triggerRect.right;\n\n // Determine if we should use right positioning\n const shouldUseRight =\n actualPanelWidth !== null && actualPanelWidth > availableSpaceRight;\n useRightPositioning.value = shouldUseRight;\n\n // Build style object\n const style: Record<string, string> = {};\n\n // Only set maxHeight if panelMaxHeight is provided\n if (props.panelMaxHeight !== undefined) {\n style.maxHeight =\n typeof props.panelMaxHeight === 'string'\n ? props.panelMaxHeight\n : `${props.panelMaxHeight}px`;\n }\n\n // Add positioning based on popperPlacement\n if (props.popperPlacement.includes('bottom')) {\n style.top = '100%';\n style.marginTop = '4px';\n }\n if (props.popperPlacement.includes('top')) {\n style.bottom = '100%';\n style.marginBottom = '4px';\n }\n if (props.popperPlacement.includes('left')) {\n style.right = '100%';\n style.marginRight = '4px';\n }\n if (props.popperPlacement.includes('right')) {\n style.left = '100%';\n style.marginLeft = '4px';\n }\n\n // Override with right positioning if needed\n if (\n shouldUseRight &&\n !props.popperPlacement.includes('left') &&\n !props.popperPlacement.includes('right')\n ) {\n style.left = 'auto';\n style.right = '0';\n }\n\n panelStyle.value = style;\n });\n });\n};\n\nconst handleClear = () => {\n if (props.mode === 'single') {\n emit('update:modelValue', '');\n // Don't close panel for single mode - only close on click outside or toggle\n } else if (props.mode === 'range') {\n emit('update:modelValue', ['', '']);\n tempStartDate.value = null; // Reset temp state\n } else if (props.mode === 'multiple') {\n emit('update:modelValue', []);\n }\n\n emit(\n 'change',\n props.mode === 'single' ? '' : props.mode === 'range' ? ['', ''] : []\n );\n emit('clear');\n};\n\nconst handleKeydown = (event: KeyboardEvent) => {\n if (props.disabled || props.readonly) return;\n\n switch (event.key) {\n case 'Enter':\n case ' ':\n event.preventDefault();\n togglePanel();\n break;\n case 'Escape':\n isOpen.value = false;\n break;\n case 'ArrowDown':\n event.preventDefault();\n if (!isOpen.value) {\n togglePanel();\n }\n break;\n }\n};\n\nconst handleClickOutside = (event: Event) => {\n const target = event.target as Node;\n\n // Check if click is inside this DatePicker\n if (panelRef.value && panelRef.value.contains(target)) {\n return; // Click is inside panel, don't close\n }\n\n if (triggerRef.value && triggerRef.value.contains(target)) {\n return; // Click is on trigger, don't close (togglePanel will handle it)\n }\n\n // Click is outside this DatePicker - close it\n isOpen.value = false;\n tempStartDate.value = null; // Reset temp state when closing\n};\n\n// Handle window resize and scroll for panel positioning\nconst handleResize = () => {\n if (isOpen.value) {\n nextTick(() => {\n positionPanel();\n });\n }\n};\n\n// Listen for close event from other DatePickers\nconst handleCloseEvent = (event: CustomEvent) => {\n if (\n event.detail?.exclude !== triggerRef.value?.closest('.ina-date-picker') &&\n isOpen.value\n ) {\n isOpen.value = false;\n tempStartDate.value = null; // Reset temp state when closing\n }\n};\n\nonMounted(() => {\n document.addEventListener('click', handleClickOutside);\n document.addEventListener(\n 'closeDatePicker',\n handleCloseEvent as EventListener\n );\n\n // Initialization is now handled in the watch(isOpen) above\n // This ensures proper initialization when panel opens with selected dates\n\n window.addEventListener('resize', handleResize);\n window.addEventListener('scroll', handleResize, true);\n\n // Validate triggerWidth on mount and listen for resize\n validateTriggerWidth();\n window.addEventListener('resize', validateTriggerWidth);\n});\n\nonUnmounted(() => {\n document.removeEventListener('click', handleClickOutside);\n document.removeEventListener(\n 'closeDatePicker',\n handleCloseEvent as EventListener\n );\n window.removeEventListener('resize', handleResize);\n window.removeEventListener('scroll', handleResize, true);\n window.removeEventListener('resize', validateTriggerWidth);\n});\n</script>\n\n<style scoped>\n.panel-enter-active,\n.panel-leave-active {\n transition: all 0.2s ease;\n}\n\n.panel-enter-from,\n.panel-leave-to {\n opacity: 0;\n transform: translateY(-8px);\n}\n\n/* Size adjustments for MonthPicker and YearPicker in DatePicker context */\n.ina-date-picker__dropdown-container :deep(.ina-month-picker__trigger),\n.ina-date-picker__dropdown-container :deep(.ina-year-picker__trigger) {\n height: 32px;\n padding: var(--ina-spacing-1) var(--ina-spacing-2);\n font-size: var(--ina-font-sm);\n min-width: 50px;\n}\n\n.ina-date-picker__dropdown-container :deep(.ina-month-picker__trigger-text),\n.ina-date-picker__dropdown-container :deep(.ina-year-picker__trigger-text) {\n font-size: var(--ina-font-sm);\n font-weight: var(--ina-font-medium);\n}\n\n/* Responsive adjustments for MonthPicker and YearPicker */\n@media (max-width: 640px) {\n .ina-date-picker__dropdown-container :deep(.ina-month-picker__trigger),\n .ina-date-picker__dropdown-container :deep(.ina-year-picker__trigger) {\n height: 28px;\n padding: var(--ina-spacing-1) 0.375rem; /* 4px 6px */\n font-size: var(--ina-font-xs);\n min-width: 45px;\n }\n\n .ina-date-picker__dropdown-container :deep(.ina-month-picker__trigger-text),\n .ina-date-picker__dropdown-container :deep(.ina-year-picker__trigger-text) {\n font-size: var(--ina-font-xs);\n font-weight: var(--ina-font-medium);\n }\n}\n</style>\n","<template>\n <div\n ref=\"containerRef\"\n class=\"ina-select-dropdown\"\n :class=\"containerClasses\"\n :style=\"{ width: toCssSize(width) }\"\n >\n <button\n ref=\"triggerRef\"\n type=\"button\"\n :disabled=\"disabled\"\n :class=\"triggerClasses\"\n @click=\"toggleDropdown\"\n >\n <span v-if=\"prefixNode\" class=\"ina-select-dropdown__trigger-prefix\">\n <component :is=\"prefixNode\" />\n </span>\n <span :class=\"triggerTextClasses\">{{ triggerLabel }}</span>\n <IconChevronUp\n v-if=\"isOpen\"\n :size=\"size === 'sm' ? 16 : 20\"\n :class=\"triggerIconClasses\"\n />\n <IconChevronDown\n v-else\n :size=\"size === 'sm' ? 16 : 20\"\n :class=\"triggerIconClasses\"\n />\n </button>\n\n <Transition name=\"dropdown\">\n <div\n v-if=\"isOpen && !disabled\"\n ref=\"panelRef\"\n :class=\"panelClasses\"\n :style=\"panelStyle\"\n >\n <div v-if=\"searchable\" class=\"ina-select-dropdown__search\">\n <input\n v-model=\"internalSearchTerm\"\n type=\"text\"\n :aria-label=\"`Search ${placeholder}`\"\n placeholder=\"Cari data\"\n :disabled=\"disabled\"\n :class=\"searchInputClasses\"\n @input=\"handleSearchInput\"\n />\n </div>\n\n <!-- Selected Preview Section -->\n <div\n v-if=\"showPreviewValue && hasSelectedItems\"\n class=\"ina-select-dropdown__preview\"\n >\n <!-- <div class=\"ina-select-dropdown__preview-label\">Terpilih:</div> -->\n <div class=\"ina-select-dropdown__preview-content\">\n <!-- Multiple Selection Preview -->\n <template v-if=\"multiple\">\n <div\n v-for=\"(value, index) in selectedArray.slice(0, 3)\"\n :key=\"index\"\n class=\"ina-select-dropdown__preview-item ina-select-dropdown__preview-item--multiple\"\n >\n <span class=\"ina-select-dropdown__preview-item-text\">\n {{ getOptionLabelByValue(value) }}\n </span>\n <button\n v-if=\"!disabled\"\n type=\"button\"\n class=\"ina-select-dropdown__preview-remove ina-select-dropdown__preview-remove--multiple\"\n :aria-label=\"`Remove ${getOptionLabelByValue(value)}`\"\n @click.stop=\"removeSelectedItem(value)\"\n >\n <IconX :size=\"12\" />\n </button>\n </div>\n <span\n v-if=\"selectedArray.length > 3\"\n class=\"ina-select-dropdown__preview-more\"\n >\n +{{ selectedArray.length - 3 }} more\n </span>\n </template>\n\n <!-- Single Selection Preview -->\n <template v-else>\n <div\n v-if=\"\n modelValue !== null &&\n modelValue !== undefined &&\n modelValue !== ''\n \"\n class=\"ina-select-dropdown__preview-item ina-select-dropdown__preview-item--single\"\n >\n <span class=\"ina-select-dropdown__preview-item-text\">\n {{ getOptionLabelByValue(modelValue) }}\n </span>\n <button\n v-if=\"!disabled\"\n type=\"button\"\n class=\"ina-select-dropdown__preview-remove ina-select-dropdown__preview-remove--single\"\n :aria-label=\"`Remove ${getOptionLabelByValue(modelValue)}`\"\n @click.stop=\"removeSelectedItem(modelValue)\"\n >\n <IconX :size=\"12\" />\n </button>\n </div>\n </template>\n </div>\n </div>\n\n <div ref=\"scrollContainerRef\" class=\"ina-select-dropdown__options\">\n <button\n v-for=\"(option, index) in filteredOptions\"\n :key=\"`${getOptionValue(option)}-${index}`\"\n type=\"button\"\n :disabled=\"disabled\"\n :class=\"getOptionClasses(option)\"\n @click=\"handleOptionClick(option)\"\n >\n <!-- Label content -->\n <div class=\"ina-select-dropdown__option-content\">\n <slot\n name=\"option\"\n :option=\"option\"\n :selected=\"isSelected(option)\"\n >\n <span class=\"ina-select-dropdown__option-label\">\n {{ getOptionLabel(option) }}\n </span>\n </slot>\n </div>\n\n <!-- Right content untuk indicator (checkbox untuk multiple, check/radio untuk single) -->\n <template v-if=\"multiple\">\n <div\n :class=\"\n clsx(\n 'ina-select-dropdown__option-checkbox',\n isSelected(option) &&\n 'ina-select-dropdown__option-checkbox--checked'\n )\n \"\n >\n <IconCheck v-if=\"isSelected(option)\" :size=\"14\" />\n </div>\n </template>\n <template v-else-if=\"indicator === 'check'\">\n <div\n v-if=\"isSelected(option)\"\n class=\"ina-select-dropdown__option-check-indicator\"\n >\n <IconCheck\n :size=\"16\"\n class=\"ina-select-dropdown__option-check-icon\"\n />\n </div>\n </template>\n <template v-else-if=\"indicator === 'radio'\">\n <div\n :class=\"\n clsx(\n 'ina-select-dropdown__option-radio',\n isSelected(option) &&\n 'ina-select-dropdown__option-radio--checked'\n )\n \"\n >\n <div\n v-if=\"isSelected(option)\"\n class=\"ina-select-dropdown__option-radio-dot\"\n />\n </div>\n </template>\n </button>\n\n <div\n v-if=\"filteredOptions.length === 0 && !loading\"\n class=\"ina-select-dropdown__empty\"\n >\n No results\n </div>\n\n <!-- Load More Button -->\n <div\n v-if=\"\n hasMore &&\n !loading &&\n filteredOptions.length > 0 &&\n onLoadMore &&\n !disabled\n \"\n class=\"ina-select-dropdown__load-more\"\n >\n <button\n type=\"button\"\n class=\"ina-select-dropdown__load-more-button\"\n @click=\"handleLoadMoreClick\"\n >\n Tampilkan Lebih Banyak\n </button>\n </div>\n\n <!-- Loading indicator -->\n <div v-if=\"loading\" class=\"ina-select-dropdown__loading\">\n <div class=\"ina-select-dropdown__loading-spinner\">\n <IconLoader2 :size=\"20\" />\n </div>\n <span class=\"ina-select-dropdown__loading-text\">Loading...</span>\n </div>\n </div>\n </div>\n </Transition>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, nextTick, onMounted, onUnmounted, watch } from 'vue';\nimport type { Component, VNode } from 'vue';\nimport {\n IconChevronDown,\n IconChevronUp,\n IconCheck,\n IconLoader2,\n IconX,\n} from '@tabler/icons-vue';\nimport clsx from 'clsx';\nexport interface SelectOption {\n label: string;\n value: any;\n disabled?: boolean;\n}\n\nexport interface SelectDropdownProps {\n modelValue?: any | any[];\n options: SelectOption[];\n placeholder?: string;\n size?: 'sm' | 'md' | 'lg';\n indicator?: 'check' | 'radio';\n multiple?: boolean;\n disabled?: boolean;\n prefixNode?: Component | VNode;\n width?: number | string;\n panelWidth?: number | string;\n panelHeight?: number | string;\n hasMore?: boolean;\n loading?: boolean;\n currentPage?: number;\n onLoadMore?: (page: number) => void;\n onSearch?: (searchTerm: string) => void;\n searchDebounceMs?: number;\n searchValue?: string;\n onSearchChange?: (searchTerm: string) => void;\n renderOptionLabel?: (option: SelectOption) => VNode | undefined;\n renderSelectedPreview?: (selected: any | any[]) => VNode | undefined;\n onRemoveSelected?: (value: any) => void;\n panelClassName?: string;\n triggerClassName?: string;\n /** Tampilkan preview selected value. Default: true */\n showPreviewValue?: boolean;\n /** Tampilkan fitur search. Default: true */\n searchable?: boolean;\n}\n\nconst props = withDefaults(defineProps<SelectDropdownProps>(), {\n modelValue: null,\n placeholder: 'Select...',\n size: 'md',\n indicator: 'check',\n multiple: false,\n disabled: false,\n width: '100%',\n panelHeight: 600,\n hasMore: false,\n loading: false,\n currentPage: 1,\n searchDebounceMs: 300,\n panelClassName: '',\n triggerClassName: '',\n showPreviewValue: true,\n searchable: true,\n});\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: any | any[]];\n change: [value: any | any[]];\n clear: [];\n 'update:selectedRaw': [selectedRaw: SelectOption | SelectOption[] | null];\n selectedRawChange: [selectedRaw: SelectOption | SelectOption[] | null];\n}>();\n\nconst containerRef = ref<HTMLDivElement>();\nconst triggerRef = ref<HTMLButtonElement>();\nconst panelRef = ref<HTMLDivElement>();\nconst scrollContainerRef = ref<HTMLDivElement>();\nconst isOpen = ref(false);\nconst internalSearchTerm = ref('');\nconst searchTimeoutRef = ref<ReturnType<typeof setTimeout> | null>(null);\n// Cache untuk menyimpan label dari selected values (untuk handle kasus options berubah)\nconst selectedLabelsCache = ref<Map<any, string>>(new Map());\n\n// Determine if search is controlled or uncontrolled\nconst isSearchControlled = computed(() => props.searchValue !== undefined);\nconst searchTerm = computed(() =>\n isSearchControlled.value ? props.searchValue || '' : internalSearchTerm.value\n);\n\n// Debounce search effect\nwatch(\n searchTerm,\n (newValue) => {\n if (searchTimeoutRef.value) {\n clearTimeout(searchTimeoutRef.value);\n }\n\n if (props.onSearch && newValue !== '') {\n searchTimeoutRef.value = setTimeout(() => {\n props.onSearch?.(newValue);\n }, props.searchDebounceMs);\n } else if (props.onSearch && newValue === '') {\n props.onSearch?.('');\n }\n },\n { immediate: false }\n);\n\n// Sync internal state with controlled value\nwatch(\n () => props.searchValue,\n (newValue) => {\n if (isSearchControlled.value && newValue !== internalSearchTerm.value) {\n internalSearchTerm.value = newValue || '';\n }\n }\n);\n\n// Handle search input\nconst handleSearchInput = (e: Event) => {\n const newValue = (e.target as HTMLInputElement).value;\n\n if (isSearchControlled.value) {\n props.onSearchChange?.(newValue);\n } else {\n internalSearchTerm.value = newValue;\n }\n};\n\n// Handle load more button click\nconst handleLoadMoreClick = () => {\n if (props.disabled || !props.hasMore || props.loading || !props.onLoadMore)\n return;\n props.onLoadMore(props.currentPage + 1);\n};\n\n// Click outside handler\nconst handleClickOutside = (e: MouseEvent) => {\n if (containerRef.value && !containerRef.value.contains(e.target as Node)) {\n isOpen.value = false;\n // Reset search based on mode\n if (isSearchControlled.value) {\n props.onSearchChange?.('');\n } else {\n internalSearchTerm.value = '';\n }\n }\n};\n\nonMounted(() => {\n document.addEventListener('mousedown', handleClickOutside);\n});\n\nonUnmounted(() => {\n document.removeEventListener('mousedown', handleClickOutside);\n if (searchTimeoutRef.value) {\n clearTimeout(searchTimeoutRef.value);\n }\n});\n\nconst toggleDropdown = () => {\n if (props.disabled) return;\n isOpen.value = !isOpen.value;\n};\n\nfunction toCssSize(v?: number | string) {\n if (v === undefined || v === null) return undefined;\n return typeof v === 'number' ? `${v}px` : v;\n}\n\nconst isArraySelected = computed(\n () => props.multiple && Array.isArray(props.modelValue)\n);\nconst selectedArray = computed(() =>\n isArraySelected.value ? (props.modelValue as any[]) : []\n);\nconst singleSelected = computed(() =>\n !props.multiple ? props.modelValue : null\n);\n\n// Helper untuk mendapatkan label dari cache atau options\nconst getLabelForValue = (value: any): string | null => {\n // Cek cache dulu\n if (selectedLabelsCache.value.has(value)) {\n return selectedLabelsCache.value.get(value) || null;\n }\n // Fallback ke options\n const found = props.options.find((o) => o.value === value);\n if (found) {\n // Simpan ke cache untuk next time\n selectedLabelsCache.value.set(value, found.label);\n return found.label;\n }\n return null;\n};\n\nconst getOptionLabelByValue = (value: any) => {\n const label = getLabelForValue(value);\n return label || value;\n};\n\n// Sync cache dengan options saat ini (untuk update label jika berubah)\nwatch(\n () => props.options,\n (newOptions) => {\n newOptions.forEach((option) => {\n // Update cache jika value sudah ada di cache\n if (selectedLabelsCache.value.has(option.value)) {\n selectedLabelsCache.value.set(option.value, option.label);\n }\n });\n },\n { deep: true }\n);\n\n// Helper untuk mendapatkan SelectOption object dari value\nconst getOptionForValue = (value: any): SelectOption | null => {\n const label = getLabelForValue(value);\n if (label !== null) {\n return { label, value };\n }\n // Fallback ke options\n const found = props.options.find((o) => o.value === value);\n return found || null;\n};\n\n// Sync cache dengan selected values (untuk handle selected dari luar) dan emit selectedRaw\nwatch(\n () => [props.modelValue, props.multiple],\n () => {\n const cache = selectedLabelsCache.value;\n if (props.multiple && Array.isArray(props.modelValue)) {\n props.modelValue.forEach((value) => {\n if (!cache.has(value)) {\n const found = props.options.find((o) => o.value === value);\n if (found) {\n cache.set(value, found.label);\n }\n }\n });\n // Remove dari cache jika tidak lagi selected\n cache.forEach((_, value) => {\n if (!props.modelValue.includes(value)) {\n cache.delete(value);\n }\n });\n } else if (\n props.modelValue !== null &&\n props.modelValue !== undefined &&\n props.modelValue !== ''\n ) {\n if (!cache.has(props.modelValue)) {\n const found = props.options.find((o) => o.value === props.modelValue);\n if (found) {\n cache.set(props.modelValue, found.label);\n }\n }\n } else {\n // Clear cache jika tidak ada selected\n cache.clear();\n }\n\n // Emit selectedRaw\n let selectedRaw: SelectOption | SelectOption[] | null = null;\n if (props.multiple && Array.isArray(props.modelValue)) {\n if (props.modelValue.length > 0) {\n const rawOptions = props.modelValue\n .map((val) => getOptionForValue(val))\n .filter((opt): opt is SelectOption => opt !== null);\n selectedRaw = rawOptions.length > 0 ? rawOptions : null;\n }\n } else if (\n props.modelValue !== null &&\n props.modelValue !== undefined &&\n props.modelValue !== ''\n ) {\n selectedRaw = getOptionForValue(props.modelValue);\n }\n\n emit('update:selectedRaw', selectedRaw);\n emit('selectedRawChange', selectedRaw);\n },\n { deep: true, immediate: true }\n);\n\nconst triggerLabel = computed(() => {\n if (props.multiple) {\n if (!selectedArray.value.length) return props.placeholder;\n else if (selectedArray.value.length > 3)\n return `${selectedArray.value.length} data terpilih`;\n else {\n const labels = selectedArray.value\n .map((val) => getLabelForValue(val))\n .filter((label): label is string => label !== null);\n return labels.length > 0 ? labels.join(', ') : props.placeholder;\n }\n } else {\n const label = getLabelForValue(singleSelected.value);\n return label || props.placeholder;\n }\n});\n\n// Filter options only if not using external search and searchable is enabled\nconst filteredOptions = computed(() => {\n if (props.onSearch) {\n return props.options;\n }\n if (!props.searchable) {\n return props.options;\n }\n return props.options.filter((o) =>\n o.label.toLowerCase().includes(searchTerm.value.toLowerCase())\n );\n});\n\nconst hasSelectedItems = computed(() => {\n if (props.multiple) {\n return selectedArray.value.length > 0;\n } else {\n return (\n props.modelValue !== null &&\n props.modelValue !== undefined &&\n props.modelValue !== ''\n );\n }\n});\n\nconst getOptionValue = (option: SelectOption) => {\n return option.value;\n};\n\nconst getOptionLabel = (option: SelectOption) => {\n return option.label;\n};\n\nconst isSelected = (option: SelectOption) => {\n if (props.multiple) {\n return selectedArray.value.includes(option.value);\n } else {\n return option.value === singleSelected.value;\n }\n};\n\nconst getOptionClasses = (option: SelectOption) => {\n return clsx(\n 'ina-select-dropdown__option',\n !props.multiple &&\n isSelected(option) &&\n 'ina-select-dropdown__option--selected-single',\n props.multiple &&\n isSelected(option) &&\n 'ina-select-dropdown__option--selected-multiple',\n props.disabled && 'ina-select-dropdown__option--disabled'\n );\n};\n\nconst handleOptionClick = (option: SelectOption) => {\n if (props.disabled) return;\n\n if (props.multiple) {\n const prev = Array.isArray(props.modelValue) ? [...props.modelValue] : [];\n const isCurrentlySelected = prev.includes(option.value);\n const newValue = isCurrentlySelected\n ? prev.filter((v) => v !== option.value)\n : [...prev, option.value];\n\n // Update cache: add if selecting, remove if deselecting\n if (isCurrentlySelected) {\n // Deselecting - remove from cache\n selectedLabelsCache.value.delete(option.value);\n } else {\n // Selecting - add to cache\n selectedLabelsCache.value.set(option.value, option.label);\n }\n\n emit('update:modelValue', newValue);\n emit('change', newValue);\n } else {\n const isCurrentlySelected = isSelected(option);\n const newValue = isCurrentlySelected ? null : option.value;\n\n // Update cache for single select\n if (isCurrentlySelected) {\n // Deselecting\n selectedLabelsCache.value.delete(option.value);\n } else {\n // Selecting - save label to cache\n selectedLabelsCache.value.set(option.value, option.label);\n }\n\n emit('update:modelValue', newValue);\n emit('change', newValue);\n isOpen.value = false;\n // Reset search based on mode\n if (isSearchControlled.value) {\n props.onSearchChange?.('');\n } else {\n internalSearchTerm.value = '';\n }\n }\n};\n\nconst removeSelectedItem = (value: any) => {\n // Remove from cache when removing selected\n selectedLabelsCache.value.delete(value);\n\n if (props.onRemoveSelected) {\n props.onRemoveSelected(value);\n } else {\n if (props.multiple) {\n const selected = [...((props.modelValue as any[]) || [])];\n const index = selected.indexOf(value);\n if (index > -1) {\n selected.splice(index, 1);\n emit('update:modelValue', selected);\n emit('change', selected);\n }\n } else {\n emit('update:modelValue', null);\n emit('change', null);\n }\n }\n};\n\nconst containerClasses = computed(() => {\n return clsx('ina-select-dropdown', `ina-select-dropdown--size-${props.size}`);\n});\n\nconst triggerClasses = computed(() => {\n return clsx(\n 'ina-select-dropdown__trigger',\n `ina-select-dropdown__trigger--size-${props.size}`,\n props.disabled && 'ina-select-dropdown__trigger--disabled',\n props.triggerClassName\n );\n});\n\nconst triggerTextClasses = computed(() => {\n return clsx(\n 'ina-select-dropdown__trigger-text',\n props.disabled && 'ina-select-dropdown__trigger-text--disabled',\n triggerLabel.value === props.placeholder &&\n !props.disabled &&\n 'ina-select-dropdown__trigger-text--placeholder',\n triggerLabel.value !== props.placeholder &&\n !props.disabled &&\n 'ina-select-dropdown__trigger-text--selected'\n );\n});\n\nconst triggerIconClasses = computed(() => {\n return clsx(\n 'ina-select-dropdown__trigger-icon',\n props.disabled && 'ina-select-dropdown__trigger-icon--disabled'\n );\n});\n\nconst panelClasses = computed(() => {\n return clsx('ina-select-dropdown__panel', props.panelClassName);\n});\n\nconst panelStyle = computed(() => {\n return {\n width: toCssSize(props.panelWidth) ?? toCssSize(props.width),\n maxHeight: toCssSize(props.panelHeight),\n };\n});\n\nconst searchInputClasses = computed(() => {\n return clsx(\n 'ina-select-dropdown__search-input',\n props.disabled && 'ina-select-dropdown__search-input--disabled'\n );\n});\n</script>\n\n<style scoped>\n.dropdown-enter-active,\n.dropdown-leave-active {\n transition: all 0.2s ease;\n}\n\n.dropdown-enter-from,\n.dropdown-leave-to {\n opacity: 0;\n transform: translateY(-8px);\n}\n</style>\n","<template>\n <Teleport to=\"body\">\n <Transition name=\"drawer\">\n <div\n v-if=\"isOpen\"\n class=\"ina-drawer\"\n :class=\"drawerClasses\"\n v-bind=\"$attrs\"\n >\n <div class=\"ina-drawer__backdrop\" @click=\"handleBackdropClick\" />\n\n <div\n ref=\"panelRef\"\n class=\"ina-drawer__panel\"\n :class=\"panelClasses\"\n role=\"dialog\"\n :aria-modal=\"true\"\n :aria-labelledby=\"titleId\"\n :aria-describedby=\"descriptionId\"\n @click.stop\n >\n <div v-if=\"showHeader\" class=\"ina-drawer__header\">\n <h2 :id=\"titleId\" class=\"ina-drawer__title\">\n <slot name=\"title\">{{ title }}</slot>\n </h2>\n\n <button\n v-if=\"showCloseButton\"\n type=\"button\"\n class=\"ina-drawer__close\"\n :aria-label=\"closeLabel\"\n @click=\"handleCloseButton\"\n >\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M18 6L6 18M6 6L18 18\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n </div>\n\n <div class=\"ina-drawer__content\">\n <div\n v-if=\"description\"\n :id=\"descriptionId\"\n class=\"ina-drawer__description\"\n >\n {{ description }}\n </div>\n\n <slot />\n </div>\n\n <div v-if=\"showFooter\" class=\"ina-drawer__footer\">\n <slot name=\"footer\" />\n </div>\n </div>\n </div>\n </Transition>\n </Teleport>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, watch, nextTick, onMounted, onUnmounted } from 'vue';\nexport interface DrawerProps {\n modelValue: boolean;\n title?: string;\n description?: string;\n position?: 'left' | 'right' | 'top' | 'bottom';\n width?: string;\n height?: string;\n showCloseButton?: boolean;\n showHeader?: boolean;\n showFooter?: boolean;\n closeLabel?: string;\n closeOnBackdrop?: boolean;\n closeOnEscape?: boolean;\n persistent?: boolean;\n}\n\nconst props = withDefaults(defineProps<DrawerProps>(), {\n modelValue: false,\n position: 'right',\n width: 'sm',\n height: '100vh',\n showCloseButton: true,\n showHeader: true,\n showFooter: false,\n closeLabel: 'Close drawer',\n closeOnBackdrop: true,\n closeOnEscape: true,\n persistent: false,\n});\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: boolean];\n close: [];\n open: [];\n}>();\n\nconst panelRef = ref<HTMLDivElement>();\nconst isOpen = ref(props.modelValue);\n\n// Generate unique IDs\nconst titleId = computed(\n () => `drawer-title-${Math.random().toString(36).substr(2, 9)}`\n);\nconst descriptionId = computed(\n () => `drawer-description-${Math.random().toString(36).substr(2, 9)}`\n);\n\nconst drawerClasses = computed(() => {\n const classes = ['ina-drawer'];\n\n classes.push(`ina-drawer--position-${props.position}`);\n\n if (props.persistent) {\n classes.push('ina-drawer--persistent');\n }\n\n return classes;\n});\n\nconst panelClasses = computed(() => {\n const classes = ['ina-drawer__panel'];\n\n classes.push(`ina-drawer__panel--position-${props.position}`);\n\n // Add width variant class if it's a predefined variant\n const predefinedWidths = [\n '20vw',\n '30vw',\n '40vw',\n '50vw',\n '60vw',\n '70vw',\n '80vw',\n '90vw',\n '100vw',\n ];\n if (predefinedWidths.includes(props.width)) {\n classes.push(`ina-drawer__panel--width-${props.width}`);\n }\n\n return classes;\n});\n\nconst handleClose = () => {\n if (props.persistent) return;\n\n isOpen.value = false;\n emit('update:modelValue', false);\n emit('close');\n};\n\nconst handleCloseButton = () => {\n isOpen.value = false;\n emit('update:modelValue', false);\n emit('close');\n};\n\nconst handleBackdropClick = (event: Event) => {\n if (\n event.target === event.currentTarget &&\n props.closeOnBackdrop &&\n !props.persistent\n ) {\n handleClose();\n }\n};\n\nconst handleEscape = (event: KeyboardEvent) => {\n if (event.key === 'Escape' && props.closeOnEscape && !props.persistent) {\n handleClose();\n }\n};\n\nconst focusPanel = () => {\n nextTick(() => {\n if (panelRef.value) {\n panelRef.value.focus();\n }\n });\n};\n\n// Watch for external modelValue changes\nwatch(\n () => props.modelValue,\n (newValue) => {\n isOpen.value = newValue;\n\n if (newValue) {\n emit('open');\n focusPanel();\n }\n }\n);\n\nonMounted(() => {\n document.addEventListener('keydown', handleEscape);\n});\n\nonUnmounted(() => {\n document.removeEventListener('keydown', handleEscape);\n});\n</script>\n\n<style scoped>\n.drawer-enter-active,\n.drawer-leave-active {\n transition: all 0.3s ease;\n}\n\n.drawer-enter-from,\n.drawer-leave-to {\n opacity: 0;\n}\n\n.drawer-enter-from .ina-drawer__panel,\n.drawer-leave-to .ina-drawer__panel {\n transform: translateX(100%);\n}\n\n.drawer-enter-to .ina-drawer__panel,\n.drawer-leave-from .ina-drawer__panel {\n transform: translateX(0);\n}\n</style>\n","<template>\n <div class=\"ina-skeleton\" :class=\"skeletonClasses\" :style=\"skeletonStyle\">\n <div class=\"ina-skeleton__wave\" />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nexport interface SkeletonProps {\n /** Base background color (default: 'gray') */\n color?: 'gray' | 'blue' | 'green' | 'red' | 'yellow';\n /** CSS width value (optional) */\n width?: string;\n /** CSS height value (default: '32px') */\n height?: string;\n /** Border radius size (default: 'md') */\n rounded?: 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'full';\n}\n\nconst props = withDefaults(defineProps<SkeletonProps>(), {\n color: 'gray',\n width: undefined,\n height: '32px',\n rounded: 'md',\n});\n\nconst skeletonClasses = computed(() => {\n const classes = ['ina-skeleton'];\n\n classes.push(`ina-skeleton--rounded-${props.rounded}`);\n classes.push(`ina-skeleton--color-${props.color}`);\n\n return classes;\n});\n\nconst skeletonStyle = computed(() => {\n const style: Record<string, string> = {};\n\n // decide flex / width\n const isFixed = typeof props.width !== 'undefined';\n\n if (props.height) {\n style.height = props.height;\n }\n\n if (isFixed) {\n style.flex = '0 0 auto';\n style.width = props.width;\n } else {\n style.flex = '1 1 auto';\n style.width = 'auto';\n }\n\n return style;\n});\n</script>\n","<template>\n <div\n class=\"ina-spinner\"\n :class=\"containerClasses\"\n role=\"status\"\n :aria-label=\"props.ariaLabel\"\n >\n <div\n class=\"ina-spinner__element\"\n :class=\"elementClasses\"\n :style=\"elementStyle\"\n />\n <div v-if=\"!spinnerOnly\" class=\"ina-spinner__title\">{{ title }}</div>\n <div v-if=\"!spinnerOnly\" class=\"ina-spinner__subtitle\">{{ subtitle }}</div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport clsx from 'clsx';\nexport interface SpinnerProps {\n size?: number; // Diameter dalam pixel\n borderWidth?: 'thin' | 'medium' | 'thick' | 'heavy';\n trackColor?: 'gray' | 'light' | 'dark';\n color?:\n | 'primary'\n | 'secondary'\n | 'success'\n | 'error'\n | 'warning'\n | 'info'\n | 'inherit';\n title?: string;\n subtitle?: string;\n spinnerOnly?: boolean;\n ariaLabel?: string;\n}\n\nconst props = withDefaults(defineProps<SpinnerProps>(), {\n size: 32,\n borderWidth: 'medium',\n trackColor: 'gray',\n color: 'primary',\n title: 'Mencari Informasi',\n subtitle: 'Mohon menunggu hasil pencarian Anda.',\n spinnerOnly: false,\n ariaLabel: 'Loading',\n});\n\nconst spinnerSize = `${props.size}px`;\n\nconst containerClasses = computed(() => {\n return clsx('ina-spinner', props.spinnerOnly && 'ina-spinner--spinner-only');\n});\n\nconst elementClasses = computed(() => {\n return clsx(\n 'ina-spinner__element',\n props.size <= 16 && 'ina-spinner__element--size-xs',\n props.size <= 24 && 'ina-spinner__element--size-sm',\n props.size <= 32 && 'ina-spinner__element--size-md',\n props.size <= 48 && 'ina-spinner__element--size-lg',\n props.size <= 64 && 'ina-spinner__element--size-xl',\n `ina-spinner__element--color-${props.color}`,\n `ina-spinner__element--track-${props.trackColor}`,\n `ina-spinner__element--border-${props.borderWidth}`\n );\n});\n\nconst elementStyle = computed(() => {\n return {\n width: spinnerSize,\n height: spinnerSize,\n };\n});\n</script>\n","<script setup lang=\"ts\">\nimport { computed, type VNode, type Component } from 'vue';\nexport interface StepperItem {\n /** Label untuk step (bisa berupa string, VNode, atau Component untuk fleksibilitas render) */\n label: string | VNode | Component;\n /** Icon component untuk step (opsional, jika tidak ada akan menampilkan nomor step) */\n icon?: any;\n /** Apakah step disabled */\n disabled?: boolean;\n}\n\nexport interface StepperProps {\n /** Array of step items */\n steps: StepperItem[];\n /** Index step yang sedang aktif (0-indexed) */\n currentStep: number;\n /** Orientasi stepper: horizontal atau vertical */\n orientation?: 'horizontal' | 'vertical';\n /** Callback saat step diklik */\n onStepClick?: (stepIndex: number) => void;\n /** Array of step indices yang memiliki status error (0-indexed) */\n errorSteps?: number[];\n}\n\nconst props = withDefaults(defineProps<StepperProps>(), {\n orientation: 'horizontal',\n errorSteps: () => [],\n});\n\nconst isHorizontal = computed(() => props.orientation === 'horizontal');\n</script>\n\n<template>\n <div\n :class=\"[\n 'ina-stepper',\n `ina-stepper--${props.orientation}`,\n {\n 'ina-stepper--horizontal-responsive': isHorizontal,\n },\n ]\"\n >\n <template v-for=\"(step, index) in props.steps\" :key=\"index\">\n <div\n :class=\"[\n 'ina-stepper__item',\n {\n 'ina-stepper__item--completed':\n index < props.currentStep && !props.errorSteps.includes(index),\n 'ina-stepper__item--active':\n index === props.currentStep && !props.errorSteps.includes(index),\n 'ina-stepper__item--error': props.errorSteps.includes(index),\n 'ina-stepper__item--disabled': step.disabled,\n 'ina-stepper__item--clickable': props.onStepClick && !step.disabled,\n },\n ]\"\n @click=\"!step.disabled && props.onStepClick?.(index)\"\n >\n <div class=\"ina-stepper__icon-wrapper\">\n <template v-if=\"index < props.currentStep\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"ina-stepper__check-icon\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"2.5\"\n stroke=\"currentColor\"\n fill=\"none\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\" />\n <path d=\"M5 12l5 5l10 -10\" />\n </svg>\n </template>\n <template v-else-if=\"step.icon\">\n <component :is=\"step.icon\" />\n </template>\n <template v-else>\n <span class=\"ina-stepper__step-number\">{{ index + 1 }}</span>\n </template>\n </div>\n <div class=\"ina-stepper__label\">\n <template v-if=\"typeof step.label === 'string'\">\n {{ step.label }}\n </template>\n <component :is=\"step.label\" v-else />\n </div>\n </div>\n <div\n v-if=\"index < props.steps.length - 1\"\n :class=\"[\n 'ina-stepper__separator',\n {\n 'ina-stepper__separator--completed':\n index < props.currentStep && !props.errorSteps.includes(index),\n },\n ]\"\n />\n </template>\n </div>\n</template>\n\n<style scoped>\n/* All styles are in global CSS file */\n</style>\n","<template>\n <div :class=\"containerClasses\">\n <div :class=\"tabsContainerClasses\" role=\"tablist\">\n <button\n v-for=\"item in items\"\n :key=\"item.value\"\n type=\"button\"\n role=\"tab\"\n :aria-selected=\"currentValue === item.value\"\n :aria-disabled=\"isDisabled(item)\"\n :disabled=\"isDisabled(item)\"\n :class=\"getTabClasses(item)\"\n @click=\"handleTabClick(item.value, item.disabled)\"\n @keydown=\"handleKeyDown($event, item.value, item.disabled)\"\n >\n <div v-if=\"typeof item.label !== 'string'\">\n <component :is=\"item.label\" />\n </div>\n <span v-else>{{ item.label }}</span>\n </button>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, watch } from 'vue';\nimport type { Component } from 'vue';\nexport interface TabHorizontalItem {\n value: string;\n label: string | Component;\n disabled?: boolean;\n}\n\nexport interface TabHorizontalProps {\n /** Array of tab items */\n items: TabHorizontalItem[];\n /** Currently selected tab value */\n value?: string;\n /** Default selected tab value */\n defaultValue?: string;\n /** Callback when tab changes */\n onChange?: (value: string) => void;\n /** Size variant */\n size?: 'sm' | 'md';\n /** Visual variant of the tabs */\n variant?: 'button-brand' | 'outline' | 'button-white';\n /** Whether tabs should fill full width */\n fullWidth?: boolean;\n /** Whether to use brand primary color for outline and button-white variants */\n useBrandColor?: boolean;\n /** Whether tabs are disabled */\n /** Whether tabs are disabled */\n disabled?: boolean;\n /** Custom class name for tab container */\n containerClassName?: string;\n /** Custom class name for individual tabs */\n tabClassName?: string;\n}\n\nconst props = withDefaults(defineProps<TabHorizontalProps>(), {\n size: 'sm',\n variant: 'outline',\n fullWidth: false,\n useBrandColor: false,\n disabled: false,\n containerClassName: '',\n tabClassName: '',\n});\n\nconst emit = defineEmits<{\n change: [value: string];\n}>();\n\nconst internalValue = ref(props.defaultValue || props.items[0]?.value || '');\n\nconst currentValue = computed(() => {\n return props.value !== undefined ? props.value : internalValue.value;\n});\n\nconst containerClasses = computed(() => {\n const classes = [\n 'ina-tab-horizontal',\n `ina-tab-horizontal--size-${props.size}`,\n `ina-tab-horizontal--variant-${props.variant}`,\n ];\n\n if (props.fullWidth) {\n classes.push('ina-tab-horizontal--full-width');\n }\n\n if (props.useBrandColor) {\n classes.push('ina-tab-horizontal--use-brand-color');\n }\n\n if (props.disabled) {\n classes.push('ina-tab-horizontal--disabled');\n }\n\n return classes;\n});\n\nconst tabsContainerClasses = computed(() => {\n const classes = ['ina-tab-horizontal__container'];\n\n if (props.fullWidth) {\n classes.push('ina-tab-horizontal__container--full-width');\n }\n\n if (props.containerClassName) {\n classes.push(props.containerClassName);\n }\n\n return classes;\n});\n\nconst isDisabled = (item: TabHorizontalItem) => {\n return props.disabled || item.disabled || false;\n};\n\nconst getTabClasses = (item: TabHorizontalItem) => {\n const classes = [\n 'ina-tab-horizontal__tab',\n `ina-tab-horizontal__tab--size-${props.size}`,\n `ina-tab-horizontal__tab--variant-${props.variant}`,\n ];\n\n if (currentValue.value === item.value) {\n classes.push('ina-tab-horizontal__tab--selected');\n }\n\n if (isDisabled(item)) {\n classes.push('ina-tab-horizontal__tab--disabled');\n }\n\n if (props.fullWidth) {\n classes.push('ina-tab-horizontal__tab--full-width');\n }\n\n if (props.tabClassName) {\n classes.push(props.tabClassName);\n }\n\n return classes;\n};\n\nconst handleTabClick = (tabValue: string, tabDisabled?: boolean) => {\n if (props.disabled || tabDisabled) return;\n\n if (props.value === undefined) {\n internalValue.value = tabValue;\n }\n\n if (props.onChange) {\n props.onChange(tabValue);\n }\n\n emit('change', tabValue);\n};\n\nconst handleKeyDown = (\n event: KeyboardEvent,\n tabValue: string,\n tabDisabled?: boolean\n) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n handleTabClick(tabValue, tabDisabled);\n }\n};\n\n// Watch for external value changes\nwatch(\n () => props.value,\n (newValue) => {\n if (newValue !== undefined) {\n internalValue.value = newValue;\n }\n }\n);\n\n// Watch for defaultValue changes\nwatch(\n () => props.defaultValue,\n (newValue) => {\n if (newValue !== undefined && props.value === undefined) {\n internalValue.value = newValue;\n }\n }\n);\n</script>\n","<template>\n <div :class=\"containerClasses\" :style=\"containerStyle\">\n <div :class=\"tabsContainerClasses\" role=\"tablist\">\n <button\n v-for=\"item in items\"\n :key=\"item.value\"\n type=\"button\"\n role=\"tab\"\n :aria-selected=\"currentValue === item.value\"\n :aria-disabled=\"isDisabled(item)\"\n :disabled=\"isDisabled(item)\"\n :class=\"getTabClasses(item)\"\n @click=\"handleTabClick(item.value, item.disabled)\"\n @keydown=\"handleKeyDown($event, item.value, item.disabled)\"\n >\n <div v-if=\"typeof item.label !== 'string'\">\n <component :is=\"item.label\" />\n </div>\n <span v-else>{{ item.label }}</span>\n </button>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, watch } from 'vue';\nimport type { Component } from 'vue';\nexport interface TabVerticalItem {\n value: string;\n label: string | Component;\n disabled?: boolean;\n}\n\nexport interface TabVerticalProps {\n /** Array of tab items */\n items: TabVerticalItem[];\n /** Currently selected tab value */\n value?: string;\n /** Default selected tab value */\n defaultValue?: string;\n /** Callback when tab changes */\n onChange?: (value: string) => void;\n /** Size variant */\n size?: 'sm' | 'md';\n /** Visual variant of the tabs */\n variant?: 'button-brand' | 'outline' | 'button-white';\n /** Whether to use brand primary color for outline and button-white variants */\n useBrandColor?: boolean;\n /** Whether tabs are disabled */\n disabled?: boolean;\n /** Custom class name for tab container */\n containerClassName?: string;\n /** Custom class name for individual tabs */\n tabClassName?: string;\n /** Width of the vertical tab container */\n width?: string | number;\n}\n\nconst props = withDefaults(defineProps<TabVerticalProps>(), {\n size: 'sm',\n variant: 'outline',\n useBrandColor: false,\n disabled: false,\n containerClassName: '',\n tabClassName: '',\n width: '200px',\n});\n\nconst emit = defineEmits<{\n change: [value: string];\n}>();\n\nconst internalValue = ref(props.defaultValue || props.items[0]?.value || '');\n\nconst currentValue = computed(() => {\n return props.value !== undefined ? props.value : internalValue.value;\n});\n\nconst containerClasses = computed(() => {\n const classes = [\n 'ina-tab-vertical',\n `ina-tab-vertical--size-${props.size}`,\n `ina-tab-vertical--variant-${props.variant}`,\n ];\n\n if (props.useBrandColor) {\n classes.push('ina-tab-vertical--use-brand-color');\n }\n\n if (props.disabled) {\n classes.push('ina-tab-vertical--disabled');\n }\n\n return classes;\n});\n\nconst tabsContainerClasses = computed(() => {\n const classes = ['ina-tab-vertical__container'];\n\n if (props.containerClassName) {\n classes.push(props.containerClassName);\n }\n\n return classes;\n});\n\nconst containerStyle = computed(() => {\n return {\n width: typeof props.width === 'number' ? `${props.width}px` : props.width,\n };\n});\n\nconst isDisabled = (item: TabVerticalItem) => {\n return props.disabled || item.disabled || false;\n};\n\nconst getTabClasses = (item: TabVerticalItem) => {\n const classes = [\n 'ina-tab-vertical__tab',\n `ina-tab-vertical__tab--size-${props.size}`,\n `ina-tab-vertical__tab--variant-${props.variant}`,\n ];\n\n if (currentValue.value === item.value) {\n classes.push('ina-tab-vertical__tab--selected');\n }\n\n if (isDisabled(item)) {\n classes.push('ina-tab-vertical__tab--disabled');\n }\n\n if (props.tabClassName) {\n classes.push(props.tabClassName);\n }\n\n return classes;\n};\n\nconst handleTabClick = (tabValue: string, tabDisabled?: boolean) => {\n if (props.disabled || tabDisabled) return;\n\n if (props.value === undefined) {\n internalValue.value = tabValue;\n }\n\n if (props.onChange) {\n props.onChange(tabValue);\n }\n\n emit('change', tabValue);\n};\n\nconst handleKeyDown = (\n event: KeyboardEvent,\n tabValue: string,\n tabDisabled?: boolean\n) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n handleTabClick(tabValue, tabDisabled);\n }\n};\n\n// Watch for external value changes\nwatch(\n () => props.value,\n (newValue) => {\n if (newValue !== undefined) {\n internalValue.value = newValue;\n }\n }\n);\n\n// Watch for defaultValue changes\nwatch(\n () => props.defaultValue,\n (newValue) => {\n if (newValue !== undefined && props.value === undefined) {\n internalValue.value = newValue;\n }\n }\n);\n</script>\n","<template>\n <div v-if=\"visible && (loading || isAnimating)\" :class=\"containerClasses\">\n <ProgressBar\n :visible=\"true\"\n :progress=\"progress\"\n :variant=\"variant\"\n height=\"sm\"\n :shimmer=\"true\"\n :duration=\"200\"\n />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, watch, computed, onUnmounted } from 'vue';\nimport ProgressBar from './ProgressBar.vue';\nexport interface TableProgressBarProps {\n /**\n * Whether the progress bar is visible\n */\n visible?: boolean;\n /**\n * Whether to show loading state\n */\n loading?: boolean;\n /**\n * Color variant\n */\n variant?: 'primary' | 'secondary' | 'success' | 'warning' | 'error';\n}\n\nconst props = withDefaults(defineProps<TableProgressBarProps>(), {\n visible: true,\n loading: false,\n variant: 'primary',\n});\n\nconst progress = ref(0);\nconst isAnimating = ref(false);\n\nlet intervalId: number | null = null;\n\nwatch(\n () => props.loading,\n (newLoading) => {\n if (newLoading) {\n isAnimating.value = true;\n progress.value = 0;\n\n // Simulate progress animation\n intervalId = window.setInterval(() => {\n const currentProgress = progress.value;\n if (currentProgress >= 90) {\n return; // Stop at 90% until loading is done\n }\n progress.value = currentProgress + Math.random() * 15; // Random increment for realistic feel\n }, 200);\n } else {\n // Complete the progress when loading is done\n progress.value = 100;\n setTimeout(() => {\n isAnimating.value = false;\n progress.value = 0;\n }, 500);\n }\n },\n { immediate: true }\n);\n\n// Cleanup interval on unmount\nconst cleanup = () => {\n if (intervalId) {\n clearInterval(intervalId);\n intervalId = null;\n }\n};\n\n// Cleanup on unmount\nonUnmounted(cleanup);\n\nconst containerClasses = computed(() => {\n const classes = [\n 'ina-table-progress-bar',\n `ina-table-progress-bar--variant-${props.variant}`,\n ];\n\n if (isAnimating.value) {\n classes.push('ina-table-progress-bar--animating');\n }\n\n return classes.join(' ');\n});\n</script>\n\n<style scoped></style>\n","<template>\n <div :class=\"tableContainerClasses\">\n <!-- ─── Search Bar -->\n <div v-if=\"showSearch\" :class=\"searchContainerClasses\">\n <div class=\"ina-table__search-controls\">\n <TextField\n :modelValue=\"searchInput\"\n :placeholder=\"\n props.searchPlaceholder ||\n props.placeholderSearch ||\n 'Input pencarian'\n \"\n :disabled=\"loading\"\n @update:modelValue=\"handleSearchChange\"\n @keydown=\"handleSearchKeyDown\"\n />\n <Button :disabled=\"loading\" @click=\"handleSearchButton\">\n {{ buttonSearchLabel }}\n </Button>\n </div>\n </div>\n\n <!-- ─── Progress Bar untuk Loading State -->\n <TableProgressBar\n :visible=\"loading\"\n :loading=\"loading\"\n variant=\"primary\"\n class=\"ina-table__progress-bar\"\n />\n\n <!-- ─── Table -->\n <table ref=\"tableRef\" :class=\"tableClasses\">\n <thead :class=\"tableHeaderClasses\">\n <tr>\n <th v-if=\"selectable\" class=\"ina-table__header-cell\">\n <Checkbox\n :id=\"`${reactId}-select-all`\"\n label=\"\"\n :modelValue=\"allSelected\"\n :indeterminate=\"anySelected && !allSelected\"\n @change=\"toggleAll\"\n />\n </th>\n <th\n v-for=\"(col, index) in columns\"\n :key=\"`${col.accessor}-${index}`\"\n :class=\"[\n 'ina-table__header-cell',\n col.sortable && 'ina-table__header-cell--sortable',\n ]\"\n >\n <div class=\"ina-table__sort-controls\">\n {{ col.header }}\n <template v-if=\"col.sortable\">\n <slot\n v-if=\"renderSortIndicator\"\n name=\"sort-indicator\"\n :column=\"col\"\n :index=\"index\"\n :isSorted=\"isSorted(col)\"\n :sortOrder=\"sortOrder\"\n :handleSort=\"(order: 'asc' | 'desc') => handleSort(col, order)\"\n />\n <div v-else class=\"ina-table__sort-icon\">\n <div\n :class=\"[\n 'ina-table__sort-button',\n isSorted(col) && sortOrder === 'asc'\n ? 'ina-table__sort-button--active'\n : '',\n ]\"\n @click=\"handleSort(col, 'asc')\"\n >\n <IconArrowNarrowUp\n :size=\"16\"\n :stroke=\"\n String(isSorted(col) && sortOrder === 'asc' ? 3 : 2)\n \"\n />\n </div>\n <div\n :class=\"[\n 'ina-table__sort-button',\n 'ina-table__sort-button-right',\n isSorted(col) && sortOrder === 'desc'\n ? 'ina-table__sort-button--active'\n : '',\n ]\"\n @click=\"handleSort(col, 'desc')\"\n >\n <IconArrowNarrowDown\n :size=\"16\"\n :stroke=\"\n String(isSorted(col) && sortOrder === 'desc' ? 3 : 2)\n \"\n />\n </div>\n </div>\n </template>\n </div>\n </th>\n </tr>\n </thead>\n\n <tbody :class=\"tableBodyClasses\">\n <template v-if=\"!loading && data.length === 0\">\n <tr>\n <td\n :colspan=\"\n String(selectable ? columns.length + 1 : columns.length)\n \"\n class=\"ina-table__empty-cell\"\n >\n <template v-if=\"typeof props.emptyState === 'string'\">\n {{ props.emptyState }}\n </template>\n <component :is=\"props.emptyState\" v-else />\n </td>\n </tr>\n </template>\n <template v-else>\n <tr\n v-for=\"(row, index) in data\"\n :key=\"`${String(row[rowKey])}-${index}`\"\n :class=\"[\n 'ina-table__row',\n loading && 'ina-table__row--loading',\n rowClickable && 'ina-table__row--clickable',\n ]\"\n @click=\"(e) => handleRowClick(row, e)\"\n >\n <td v-if=\"selectable\" class=\"ina-table__cell\">\n <Checkbox\n :id=\"`${reactId}-select-${String(row[rowKey])}`\"\n label=\"\"\n :modelValue=\"selectedMap[String(row[rowKey])] || false\"\n @change=\"() => toggleOne(String(row[rowKey]))\"\n />\n </td>\n <td\n v-for=\"(col, colIndex) in columns\"\n :key=\"`${String(row[rowKey])}-${col.accessor}-${colIndex}`\"\n :tabindex=\"\n isEditable(col) &&\n !isCellDisabled(col, row) &&\n editingCell?.rowKey === String(row[rowKey]) &&\n editingCell.accessor === col.accessor\n ? 0\n : undefined\n \"\n class=\"ina-table__cell\"\n >\n <template v-if=\"isEditable(col) && !isCellDisabled(col, row)\">\n <template\n v-if=\"\n editingCell?.rowKey === String(row[rowKey]) &&\n editingCell.accessor === col.accessor\n \"\n >\n <component\n :is=\"getEditorComponent(col)\"\n :row=\"row\"\n :value=\"\n (editBuffer[String(row[rowKey])] ?? row)[col.accessor]\n \"\n @change=\"\n (val) =>\n updateEditBuffer(String(row[rowKey]), col.accessor, val)\n \"\n @commit=\"commitEdit(String(row[rowKey]))\"\n @cancel=\"cancelEdit(String(row[rowKey]))\"\n />\n </template>\n <div\n v-else\n class=\"ina-table__cell--editable\"\n @click=\"\n (e) => startEdit(String(row[rowKey]), row, col.accessor, e)\n \"\n >\n <slot\n name=\"cell\"\n :row=\"row\"\n :column=\"col\"\n :value=\"row[col.accessor]\"\n >\n <component :is=\"getCellRenderComponent(col, row)\" />\n </slot>\n </div>\n </template>\n <template v-else>\n <slot\n name=\"cell\"\n :row=\"row\"\n :column=\"col\"\n :value=\"row[col.accessor]\"\n >\n <component :is=\"getCellRenderComponent(col, row)\" />\n </slot>\n </template>\n </td>\n </tr>\n </template>\n </tbody>\n </table>\n\n <!-- ─── Pagination -->\n <div class=\"ina-table__pagination\">\n <Pagination\n :modelValue=\"page\"\n :totalPages=\"totalPages\"\n :pageSize=\"pageSize\"\n :pageSizeOptions=\"pageSizeOptions\"\n :disabled=\"loading || total === 0\"\n :fullWidth=\"true\"\n @update:modelValue=\"setPage\"\n @page-size-change=\"handlePageSizeChange\"\n />\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {\n computed,\n ref,\n watch,\n onMounted,\n onUnmounted,\n h,\n type Component,\n type VNode,\n} from 'vue';\nimport Pagination from './Pagination.vue';\nimport Checkbox from './Checkbox.vue';\nimport TableProgressBar from './TableProgressBar.vue';\nimport TextField from './TextField.vue';\nimport Button from './Button.vue';\nimport { IconArrowNarrowUp, IconArrowNarrowDown } from '@tabler/icons-vue';\nimport clsx from 'clsx';\nexport interface Column {\n header: string;\n accessor: string;\n sortable?: boolean;\n render?: (row: any) => VNode | string | number;\n}\n\nexport interface FetchParams {\n page: number;\n pageSize: number;\n sortField: string | null;\n sortOrder: 'asc' | 'desc' | null;\n searchTerm: string;\n}\n\nexport interface FetchResult {\n data: any[];\n total: number;\n}\n\nexport interface EditorProps {\n row: any;\n value: any;\n onChange: (val: any) => void;\n onCommit: () => void;\n onCancel: () => void;\n}\n\nexport interface EditableColumn {\n accessor: string;\n editor: (props: EditorProps) => VNode;\n /**\n * Menentukan apakah cell pada row tertentu bisa diedit.\n * Bisa berupa boolean (statis) atau function yang menerima row dan return boolean (dinamis).\n * Jika true atau function return true, cell tidak bisa diklik atau diedit.\n */\n disabled?: boolean | ((row: any) => boolean);\n}\n\nexport interface TableProps {\n columns: Column[];\n fetchData: (params: FetchParams) => Promise<FetchResult>;\n initialPageSize?: number;\n pageSizeOptions?: number[];\n initialSortField?: string | null;\n initialSortOrder?: 'asc' | 'desc' | null;\n placeholderSearch?: string; // Deprecated: use searchPlaceholder instead\n searchPlaceholder?: string;\n buttonSearchLabel?: string;\n\n /** jika true, tambahkan kolom checkbox di paling kiri */\n selectable?: boolean;\n /** callback dipanggil saat user pilih beberapa row */\n onSelectionChange?: (selectedRows: any[]) => void;\n\n /** konfigurasi kolom yang bisa diedit */\n editableColumns?: EditableColumn[];\n /** callback dipanggil saat user commit perubahan 1 row */\n onRowUpdate?: (updatedRow: any) => void;\n\n /** nama properti unik sebagai key row (default: \"id\") */\n rowKey?: string;\n showSearch?: boolean;\n\n /** apakah row bisa diklik */\n rowClickable?: boolean;\n /** callback dipanggil saat user klik row (tidak dipanggil jika ada button action di cell) */\n onRowClick?: (row: any) => void;\n\n /** apakah kolom terakhir (biasanya Actions) sticky saat scroll horizontal */\n lastColumnSticky?: boolean;\n\n /** Custom render function untuk sort indicator wrapper */\n renderSortIndicator?: (params: {\n column: Column;\n index: number;\n isSorted: boolean;\n sortOrder: 'asc' | 'desc' | null;\n handleSort: (order: 'asc' | 'desc') => void;\n }) => VNode;\n\n /** Custom empty state content (string, VNode, atau Component) */\n emptyState?: string | VNode | Component;\n}\n\nconst props = withDefaults(defineProps<TableProps>(), {\n initialPageSize: 10,\n pageSizeOptions: () => [10, 20, 50],\n initialSortField: null,\n initialSortOrder: null,\n placeholderSearch: 'Search...', // Deprecated: use searchPlaceholder instead\n searchPlaceholder: 'Input pencarian',\n buttonSearchLabel: 'Cari',\n selectable: false,\n editableColumns: () => [],\n rowKey: 'id',\n showSearch: false,\n rowClickable: false,\n lastColumnSticky: false,\n emptyState: 'No data found',\n});\n\nconst emit = defineEmits<{\n selectionChange: [selectedRows: any[]];\n rowUpdate: [updatedRow: any];\n rowClick: [row: any];\n}>();\n\n// ─── State paging / sort / search ───────────────────────────\nconst data = ref<any[]>([]);\nconst total = ref(0);\nconst loading = ref(false);\nconst tableRef = ref<HTMLTableElement>();\nconst reactId = ref(`table-${Math.random().toString(36).substr(2, 9)}`);\n\nconst page = ref(1);\nconst pageSize = ref(props.initialPageSize);\n\nconst sortField = ref<string | null>(props.initialSortField);\nconst sortOrder = ref<'asc' | 'desc' | null>(props.initialSortOrder);\n\nconst searchTerm = ref('');\nconst searchInput = ref('');\n\n// ─── State selection ────────────────────────────────────────\nconst selectedMap = ref<Record<string, boolean>>({});\nconst allSelected = computed(() =>\n Object.values(selectedMap.value).every(Boolean)\n);\nconst anySelected = computed(() =>\n Object.values(selectedMap.value).some(Boolean)\n);\n\n// ─── State editing ──────────────────────────────────────────\nconst editBuffer = ref<Record<string, any>>({});\nconst editingCell = ref<{\n rowKey: string;\n accessor: string;\n} | null>(null);\n\n// ─── Total pages ────────────────────────────────────────────\nconst totalPages = computed(() => Math.ceil(total.value / pageSize.value));\n\n// ─── Fetch data whenever parameters berubah ────────────────\nlet abortController: AbortController | null = null;\n\nwatch(\n [\n () => page.value,\n () => pageSize.value,\n () => sortField.value,\n () => sortOrder.value,\n () => searchTerm.value,\n () => props.fetchData,\n ],\n async () => {\n if (abortController) {\n abortController.abort();\n }\n abortController = new AbortController();\n const sig = abortController.signal;\n\n loading.value = true;\n try {\n const res = await props.fetchData({\n page: page.value,\n pageSize: pageSize.value,\n sortField: sortField.value,\n sortOrder: sortOrder.value,\n searchTerm: searchTerm.value,\n });\n if (!sig.aborted) {\n data.value = res.data;\n total.value = res.total;\n // clear selection & editing on new data\n selectedMap.value = {};\n editBuffer.value = {};\n editingCell.value = null;\n }\n } catch (e) {\n if (!sig.aborted) console.error(e);\n } finally {\n if (!sig.aborted) loading.value = false;\n }\n },\n { immediate: true }\n);\n\nonUnmounted(() => {\n if (abortController) {\n abortController.abort();\n }\n});\n\n// ─── Selection handlers ────────────────────────────────────\nconst toggleAll = (value: boolean | string[]) => {\n const isChecked = Array.isArray(value) ? value.length > 0 : Boolean(value);\n const newMap: Record<string, boolean> = {};\n data.value.forEach((row) => {\n newMap[String(row[props.rowKey])] = isChecked;\n });\n selectedMap.value = newMap;\n const selectedRows = isChecked ? [...data.value] : [];\n props.onSelectionChange?.(selectedRows);\n emit('selectionChange', selectedRows);\n};\n\nconst toggleOne = (key: string) => {\n selectedMap.value = {\n ...selectedMap.value,\n [key]: !selectedMap.value[key],\n };\n const selectedRows = data.value.filter(\n (r) => selectedMap.value[String(r[props.rowKey])]\n );\n props.onSelectionChange?.(selectedRows);\n emit('selectionChange', selectedRows);\n};\n\n// ─── Editing handlers ──────────────────────────────────────\nconst startEdit = (\n key: string,\n row: any,\n accessor: string,\n event: MouseEvent\n) => {\n event.stopPropagation();\n editBuffer.value = {\n ...editBuffer.value,\n [key]: { ...row },\n };\n editingCell.value = { rowKey: key, accessor };\n};\n\nconst commitEdit = (key: string) => {\n const updatedRow = editBuffer.value[key];\n if (updatedRow) {\n props.onRowUpdate?.(updatedRow);\n emit('rowUpdate', updatedRow);\n }\n const { [key]: _, ...rest } = editBuffer.value;\n editBuffer.value = rest;\n editingCell.value = null;\n};\n\nconst cancelEdit = (key: string) => {\n const updated = { ...editBuffer.value };\n delete updated[key];\n editBuffer.value = updated;\n editingCell.value = null;\n};\n\nconst updateEditBuffer = (key: string, accessor: string, val: any) => {\n editBuffer.value = {\n ...editBuffer.value,\n [key]: {\n ...editBuffer.value[key],\n [accessor]: val,\n },\n };\n};\n\nconst isEditable = (col: Column) => {\n return props.editableColumns.some((ec) => ec.accessor === col.accessor);\n};\n\nconst isCellDisabled = (col: Column, row: any): boolean => {\n const editableCol = props.editableColumns.find(\n (ec) => ec.accessor === col.accessor\n );\n if (!editableCol || !editableCol.disabled) {\n return false;\n }\n return typeof editableCol.disabled === 'function'\n ? editableCol.disabled(row)\n : editableCol.disabled;\n};\n\nconst getEditorComponent = (col: Column): Component => {\n const editableCol = props.editableColumns.find(\n (ec) => ec.accessor === col.accessor\n );\n return editableCol ? editableCol.editor : () => null;\n};\n\n// Helper function untuk render cell content sebagai component\n// Mengembalikan component yang render VNode atau string/number\nconst getCellRenderComponent = (col: Column, row: any): Component => {\n return () => {\n if (col.render) {\n const result = col.render(row);\n // Jika hasilnya adalah VNode, return langsung\n if (result && typeof result === 'object' && 'type' in result) {\n return result as VNode;\n }\n // Jika hasilnya adalah string/number, wrap dengan text node\n return h('span', String(result));\n }\n return h('span', String(row[col.accessor] || ''));\n };\n};\n\n// ─── Sort handler ──────────────────────────────────────────\nconst isSorted = (col: Column) => sortField.value === col.accessor;\n\nconst handleSort = (col: Column, order: 'asc' | 'desc') => {\n if (!col.sortable) return;\n if (sortField.value === col.accessor && sortOrder.value === order) {\n sortField.value = null;\n sortOrder.value = null;\n } else {\n sortField.value = col.accessor;\n sortOrder.value = order;\n }\n page.value = 1;\n};\n\n// ─── Search handlers ───────────────────────────────────────\nconst handleSearchChange = (value: string) => {\n searchInput.value = value;\n};\n\nconst handleSearchKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n page.value = 1;\n searchTerm.value = searchInput.value.trim();\n }\n};\n\nconst handleSearchButton = () => {\n page.value = 1;\n searchTerm.value = searchInput.value.trim();\n};\n\n// ─── Row click handler ────────────────────────────────────\nconst handleRowClick = (row: any, event: MouseEvent) => {\n const target = event.target as HTMLElement;\n const isActionElement = target.closest(\n 'button, [role=\"button\"], .ina-button, [data-action]'\n );\n\n if (isActionElement) {\n return;\n }\n\n if (props.rowClickable && props.onRowClick) {\n props.onRowClick(row);\n emit('rowClick', row);\n }\n};\n\n// ─── Klik di luar table: batalkan editing ─────────────────\nonMounted(() => {\n const handleClickOutside = (e: MouseEvent) => {\n if (tableRef.value && !tableRef.value.contains(e.target as Node)) {\n editingCell.value = null;\n }\n };\n document.addEventListener('mousedown', handleClickOutside);\n onUnmounted(() => {\n document.removeEventListener('mousedown', handleClickOutside);\n });\n});\n\n// ─── Page size change handler ─────────────────────────────\nconst setPage = (newPage: number) => {\n page.value = newPage;\n};\n\nconst handlePageSizeChange = (size: number) => {\n pageSize.value = size;\n page.value = 1;\n};\n\n// ─── Computed classes ─────────────────────────────────────\nconst tableContainerClasses = computed(() => {\n return clsx('ina-table', {\n 'ina-table--sticky-last-column': props.lastColumnSticky,\n });\n});\n\nconst searchContainerClasses = computed(() => {\n return clsx(\n 'ina-table__search',\n !props.showSearch && 'ina-table__search--hidden'\n );\n});\n\nconst tableClasses = computed(() => {\n return clsx('ina-table__container', loading.value && 'ina-table--loading');\n});\n\nconst tableHeaderClasses = computed(() => 'ina-table__header');\n\nconst tableBodyClasses = computed(() => 'ina-table__body');\n</script>\n","<template>\n <div class=\"ina-text-area\" :class=\"containerClasses\">\n <label v-if=\"label\" :for=\"textareaId\" class=\"ina-text-area__label\">\n <component :is=\"labelComponent\" v-if=\"labelComponent\" />\n <span v-else-if=\"label && typeof label === 'string'\">{{ label }}</span>\n <span v-if=\"required\" class=\"ina-text-area__required\">*</span>\n </label>\n\n <div class=\"ina-text-area__wrapper\" :class=\"wrapperClasses\">\n <textarea\n v-bind=\"filteredAttrs\"\n :id=\"textareaId\"\n ref=\"textareaRef\"\n v-model=\"inputValue\"\n :name=\"(attrs.name as string) || undefined\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n :maxlength=\"maxLength\"\n :rows=\"rows\"\n :autocomplete=\"autocomplete\"\n :spellcheck=\"spellCheck\"\n :autocapitalize=\"autoCapitalize\"\n :autocorrect=\"autoCorrect\"\n :dir=\"dir\"\n :class=\"textareaClasses\"\n @input=\"handleInput\"\n @blur=\"handleBlur\"\n @focus=\"handleFocus\"\n />\n\n <button\n v-if=\"showClearButton && inputValue !== '' && !disabled\"\n type=\"button\"\n class=\"ina-text-area__clear-button\"\n aria-label=\"Clear textarea\"\n @click=\"handleClear\"\n >\n <IconX :size=\"16\" class=\"ina-text-area__clear-icon\" />\n </button>\n </div>\n\n <div v-if=\"bottomText || validationError\" :class=\"statusMessageClasses\">\n <template v-if=\"validationError\">{{ validationError }}</template>\n <template v-else>\n <component :is=\"bottomTextComponent\" v-if=\"bottomTextComponent\" />\n <span v-else>{{ bottomText }}</span>\n </template>\n </div>\n\n <div v-if=\"showCharCount && maxLength\" :class=\"charCountClasses\">\n {{ inputValue.length }}/{{ maxLength }}\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, watch, onUnmounted, useAttrs } from 'vue';\nimport type { Component } from 'vue';\nimport { IconX } from '@tabler/icons-vue';\nimport {\n validateInput,\n type SecurityConfig,\n DEFAULT_SECURITY_CONFIG,\n} from '../utils/security';\n\nexport type ValidationRule =\n | { kind: 'regex'; pattern: RegExp; message?: string }\n | { kind: 'maxLength'; value: number; message?: string }\n | { kind: 'minLength'; value: number; message?: string }\n | {\n kind: 'custom';\n validate: (v: string) => string | null;\n message?: string;\n };\n\nexport interface TextAreaProps {\n modelValue?: string;\n label?: string | Component;\n placeholder?: string;\n size?: 'sm' | 'md' | 'lg';\n status?: 'neutral' | 'success' | 'error' | 'warning';\n statusMessage?: string | Component;\n helperText?: string | Component;\n disabled?: boolean;\n readonly?: boolean;\n required?: boolean;\n maxLength?: number;\n showCharCount?: boolean;\n showClearButton?: boolean;\n rows?: number;\n resize?: 'none' | 'vertical' | 'horizontal' | 'both';\n // Security props\n securityConfig?: SecurityConfig;\n // Privacy & abuse protection props\n autocomplete?: string;\n spellCheck?: boolean;\n autoCapitalize?: 'off' | 'none' | 'sentences' | 'words' | 'characters';\n autoCorrect?: 'off' | 'on';\n dir?: 'auto' | 'ltr' | 'rtl';\n // Validation & normalization\n validation?: ValidationRule[];\n normalize?: (value: string) => string;\n}\n\nconst props = withDefaults(defineProps<TextAreaProps>(), {\n modelValue: '',\n size: 'md',\n status: 'neutral',\n disabled: false,\n readonly: false,\n required: false,\n showCharCount: false,\n showClearButton: true,\n rows: 4,\n resize: 'vertical',\n securityConfig: () => DEFAULT_SECURITY_CONFIG,\n spellCheck: undefined,\n autoCapitalize: undefined,\n autoCorrect: undefined,\n dir: undefined,\n});\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string];\n input: [event: Event];\n blur: [event: FocusEvent];\n focus: [event: FocusEvent];\n}>();\n\nconst attrs = useAttrs();\nconst textareaRef = ref<HTMLTextAreaElement>();\nconst inputValue = ref(getInitialValue());\nconst validationError = ref<string | null>(null);\n\n// Initialize with sanitized value if security is enabled\nfunction getInitialValue(): string {\n const value = props.modelValue || '';\n if (props.securityConfig?.enableXssProtection) {\n const validation = validateInput(value);\n return validation.sanitized;\n }\n return value;\n}\n\n// Generate unique ID for textarea, or use id from props/attrs if provided (1:1 with React)\nconst textareaId = computed(() => {\n // Check if id is provided via props or attrs (same as React's rest?.id || rest?.name)\n const providedId = (attrs.id as string) || (attrs.name as string);\n if (providedId) {\n return String(providedId);\n }\n // Fallback to generated ID (same as React's String(label).toLowerCase())\n if (props.label) {\n return String(props.label).toLowerCase();\n }\n return `text-area-${Math.random().toString(36).substr(2, 9)}`;\n});\n\n// Filter out id and name from attrs to avoid conflicts (they're handled explicitly)\nconst filteredAttrs = computed(() => {\n const { id, name, ...rest } = attrs;\n return rest;\n});\n\nconst bottomText = computed(() => {\n if (props.status !== 'neutral' && props.statusMessage) {\n return props.statusMessage;\n }\n return props.statusMessage || props.helperText;\n});\n\nconst bottomTextComponent = computed(() => {\n const text = bottomText.value;\n if (!text) return null;\n if (typeof text === 'string') return null;\n return text as Component;\n});\n\n// Computed untuk label component\nconst labelComponent = computed(() => {\n if (!props.label) return null;\n if (typeof props.label === 'string') return null;\n return props.label as Component;\n});\n\nconst containerClasses = computed(() => {\n const classes = ['ina-text-area'];\n\n if (props.disabled) {\n classes.push('ina-text-area--disabled');\n }\n\n return classes;\n});\n\nconst wrapperClasses = computed(() => {\n const classes = ['ina-text-area__wrapper'];\n\n classes.push(`ina-text-area__wrapper--status-${props.status}`);\n\n if (props.disabled) {\n classes.push('ina-text-area__wrapper--disabled');\n }\n\n return classes;\n});\n\nconst textareaClasses = computed(() => {\n const classes = ['ina-text-area__input'];\n\n classes.push(`ina-text-area__input--size-${props.size}`);\n\n if (props.disabled) {\n classes.push('ina-text-area__input--disabled');\n }\n\n if (props.readonly) {\n classes.push('ina-text-area__input--readonly');\n }\n\n if (props.status !== 'neutral') {\n classes.push(`ina-text-area__input--status-${props.status}`);\n }\n\n classes.push(`ina-text-area__input--resize-${props.resize}`);\n\n return classes;\n});\n\nconst statusMessageClasses = computed(() => {\n const classes = ['ina-text-area__helper-text'];\n\n // Use error status if validation error exists\n if (validationError.value) {\n classes.push('ina-text-area__helper-text--error');\n } else if (props.status !== 'neutral') {\n classes.push(`ina-text-area__helper-text--${props.status}`);\n }\n\n return classes;\n});\n\nconst charCountClasses = computed(() => {\n const classes = ['ina-text-area__char-count'];\n\n if (inputValue.value.length > (props.maxLength || 0)) {\n classes.push('ina-text-area__char-count--error');\n }\n\n return classes;\n});\n\n// Validate input against validation rules\nfunction validateValue(value: string): string | null {\n if (!props.validation || props.validation.length === 0) {\n return null;\n }\n\n for (const rule of props.validation) {\n let error: string | null = null;\n\n switch (rule.kind) {\n case 'regex':\n if (!rule.pattern.test(value)) {\n error = rule.message || 'Input tidak sesuai format yang diharapkan';\n }\n break;\n case 'maxLength':\n if (value.length > rule.value) {\n error = rule.message || `Maksimal ${rule.value} karakter`;\n }\n break;\n case 'minLength':\n if (value.length < rule.value) {\n error = rule.message || `Minimal ${rule.value} karakter`;\n }\n break;\n case 'custom':\n error = rule.validate(value);\n break;\n }\n\n if (error) {\n return error;\n }\n }\n\n return null;\n}\n\nconst handleInput = (event: Event) => {\n const target = event.target as HTMLTextAreaElement;\n let value = target.value;\n\n // Apply maxLength constraint\n if (props.maxLength != null && value.length > props.maxLength) {\n return;\n }\n\n // Apply security validation if enabled\n if (props.securityConfig?.enableXssProtection) {\n const validation = validateInput(value);\n\n if (!validation.isValid) {\n // Log security violations\n if (props.securityConfig.logViolations) {\n console.warn('TextArea security violation:', validation.threats);\n }\n\n // Call security violation callback\n if (props.securityConfig.onSecurityViolation) {\n props.securityConfig.onSecurityViolation(validation.threats, value);\n }\n\n // Use sanitized value\n value = validation.sanitized;\n }\n }\n\n // Apply normalization if provided\n if (props.normalize) {\n value = props.normalize(value);\n }\n\n // Validate against validation rules\n validationError.value = validateValue(value);\n\n inputValue.value = value;\n emit('update:modelValue', inputValue.value);\n emit('input', event);\n};\n\nconst handleBlur = (event: FocusEvent) => {\n emit('blur', event);\n};\n\nconst handleFocus = (event: FocusEvent) => {\n emit('focus', event);\n};\n\nconst handleClear = () => {\n inputValue.value = '';\n emit('update:modelValue', '');\n if (textareaRef.value) {\n textareaRef.value.focus();\n }\n};\n\n// Watch for external modelValue changes\nwatch(\n () => props.modelValue,\n (newValue) => {\n let value = newValue || '';\n\n // Apply security validation when value changes\n if (props.securityConfig?.enableXssProtection) {\n const validation = validateInput(value);\n if (!validation.isValid) {\n if (props.securityConfig.logViolations) {\n console.warn(\n 'TextArea security violation on value change:',\n validation.threats\n );\n }\n if (props.securityConfig.onSecurityViolation) {\n props.securityConfig.onSecurityViolation(validation.threats, value);\n }\n value = validation.sanitized;\n }\n }\n\n inputValue.value = value;\n validationError.value = validateValue(value);\n }\n);\n</script>\n","<template>\n <div :class=\"containerClasses\">\n <div v-if=\"title\" class=\"ina-one-time-password__title\">\n <template v-if=\"typeof title === 'string'\">{{ title }}</template>\n <component :is=\"title\" v-else />\n </div>\n <div v-if=\"description\" class=\"ina-one-time-password__description\">\n <template v-if=\"typeof description === 'string'\">{{\n description\n }}</template>\n <component :is=\"description\" v-else />\n </div>\n <div class=\"ina-one-time-password__container\">\n <input\n v-for=\"(_, index) in length\"\n :key=\"index\"\n :ref=\"(el) => setInputRef(el, index)\"\n type=\"text\"\n inputmode=\"numeric\"\n maxlength=\"1\"\n :value=\"getDigitValue(index)\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n :class=\"inputClasses\"\n :aria-label=\"`Digit ${index + 1} of ${length}`\"\n @input=\"handleChange(index, $event)\"\n @keydown=\"handleKeyDown(index, $event)\"\n @focus=\"handleFocus(index)\"\n @blur=\"handleBlur\"\n @paste=\"handlePaste($event)\"\n />\n </div>\n <div v-if=\"helperText\" :class=\"helperTextClasses\">\n <template v-if=\"typeof helperText === 'string'\">{{\n helperText\n }}</template>\n <component :is=\"helperText\" v-else />\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {\n computed,\n ref,\n watch,\n nextTick,\n onMounted,\n type VNode,\n type Component,\n} from 'vue';\nimport clsx from 'clsx';\nexport type OneTimePasswordLength = 3 | 4 | 5 | 6 | 7 | 8;\n\nexport interface OneTimePasswordProps {\n /** Nilai OTP (string dengan panjang sesuai length) */\n modelValue?: string;\n /** Jumlah digit (3-8) */\n length?: OneTimePasswordLength;\n /** Title di atas input */\n title?: string | VNode | Component;\n /** Description di bawah title */\n description?: string | VNode | Component;\n /** Helper text di bawah input */\n helperText?: string | VNode | Component;\n /** Apakah OTP dalam state error */\n error?: boolean;\n /** Apakah OTP disabled */\n disabled?: boolean;\n /** Apakah OTP readonly */\n readonly?: boolean;\n\n /** Auto focus pada mount */\n autoFocus?: boolean;\n}\n\nconst props = withDefaults(defineProps<OneTimePasswordProps>(), {\n modelValue: '',\n length: 6,\n error: false,\n disabled: false,\n readonly: false,\n autoFocus: false,\n});\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string];\n complete: [value: string];\n}>();\n\nconst inputRefs = ref<(HTMLInputElement | null)[]>([]);\nconst isInternalUpdate = ref(false);\n\n// Set input ref\nconst setInputRef = (el: any, index: number) => {\n if (el) {\n inputRefs.value[index] = el as HTMLInputElement;\n }\n};\n\n// Initialize input refs array\nwatch(\n () => props.length,\n () => {\n inputRefs.value = inputRefs.value.slice(0, props.length);\n },\n { immediate: true }\n);\n\n// Auto focus first input on mount if autoFocus is true\nonMounted(() => {\n if (\n props.autoFocus &&\n inputRefs.value[0] &&\n !props.disabled &&\n !props.readonly\n ) {\n inputRefs.value[0].focus();\n }\n});\n\n// Watch for external modelValue changes to handle complete callback\n// Only trigger for external changes (not from our own emit)\nwatch(\n () => props.modelValue,\n (newValue, oldValue) => {\n // Skip if this is an internal update\n if (isInternalUpdate.value) {\n isInternalUpdate.value = false;\n return;\n }\n\n const currentValue = newValue || '';\n const previousValue = oldValue || '';\n\n // Call complete if all digits filled (only for external changes)\n if (\n currentValue.length === props.length &&\n previousValue.length !== props.length\n ) {\n nextTick(() => {\n emit('complete', currentValue);\n });\n }\n }\n);\n\nconst containerClasses = computed(() => {\n return clsx('ina-one-time-password');\n});\n\n// Memoize input classes to prevent unnecessary re-computations\nconst inputClasses = computed(() => {\n return clsx(\n 'ina-one-time-password__input',\n props.error && 'ina-one-time-password__input--error'\n );\n});\n\n// Helper text classes with error state\nconst helperTextClasses = computed(() => {\n return clsx(\n 'ina-one-time-password__helper-text',\n props.error && 'ina-one-time-password__helper-text--error'\n );\n});\n\nconst getDigitValue = (index: number): string => {\n return props.modelValue?.[index] || '';\n};\n\nconst handleChange = (index: number, event: Event) => {\n const target = event.target as HTMLInputElement;\n const inputValue = target.value;\n\n // Only allow single digit (0-9)\n if (inputValue && !/^\\d$/.test(inputValue)) {\n // Reset to previous value if invalid input\n target.value = props.modelValue?.[index] || '';\n return;\n }\n\n // Update value\n const currentValue = props.modelValue || '';\n const newValue = currentValue.split('');\n newValue[index] = inputValue;\n const updatedValue = newValue.join('').slice(0, props.length);\n\n // Mark as internal update to prevent watch from triggering\n isInternalUpdate.value = true;\n emit('update:modelValue', updatedValue);\n\n // Call complete if all digits filled\n if (updatedValue.length === props.length) {\n nextTick(() => {\n emit('complete', updatedValue);\n });\n }\n\n // Auto focus next input if digit entered\n if (inputValue && index < props.length - 1) {\n const nextIndex = index + 1;\n nextTick(() => {\n if (inputRefs.value[nextIndex] && !props.disabled && !props.readonly) {\n inputRefs.value[nextIndex]?.focus();\n }\n });\n }\n};\n\nconst handleKeyDown = (index: number, event: KeyboardEvent) => {\n // Handle backspace\n if (event.key === 'Backspace') {\n const currentValue = props.modelValue || '';\n if (!currentValue[index] && index > 0) {\n // If current input is empty, focus previous and clear it\n const prevIndex = index - 1;\n if (inputRefs.value[prevIndex]) {\n inputRefs.value[prevIndex]?.focus();\n const newValue = (props.modelValue || '').split('');\n newValue[prevIndex] = '';\n const updatedValue = newValue.join('');\n isInternalUpdate.value = true;\n emit('update:modelValue', updatedValue);\n }\n } else {\n // Clear current input\n const newValue = (props.modelValue || '').split('');\n newValue[index] = '';\n const updatedValue = newValue.join('');\n isInternalUpdate.value = true;\n emit('update:modelValue', updatedValue);\n }\n }\n\n // Handle arrow keys\n if (event.key === 'ArrowLeft' && index > 0) {\n event.preventDefault();\n inputRefs.value[index - 1]?.focus();\n }\n if (event.key === 'ArrowRight' && index < props.length - 1) {\n event.preventDefault();\n inputRefs.value[index + 1]?.focus();\n }\n\n // Handle paste (Ctrl+V / Cmd+V)\n if ((event.ctrlKey || event.metaKey) && event.key === 'v') {\n event.preventDefault();\n navigator.clipboard.readText().then((text) => {\n // Only use digits and limit to length\n const digits = text.replace(/\\D/g, '').slice(0, props.length);\n if (digits) {\n isInternalUpdate.value = true;\n emit('update:modelValue', digits);\n\n // Call complete if all digits filled\n if (digits.length === props.length) {\n nextTick(() => {\n emit('complete', digits);\n });\n }\n\n // Focus last filled input or last input\n const focusIndex = Math.min(digits.length - 1, props.length - 1);\n nextTick(() => {\n if (inputRefs.value[focusIndex]) {\n inputRefs.value[focusIndex]?.focus();\n }\n });\n }\n });\n }\n};\n\nconst handleFocus = (index: number) => {\n // Select all text when focused\n nextTick(() => {\n if (inputRefs.value[index]) {\n inputRefs.value[index]?.select();\n }\n });\n};\n\nconst handleBlur = () => {\n // Blur handler - no state needed\n};\n\nconst handlePaste = (event: ClipboardEvent) => {\n event.preventDefault();\n const pastedText = event.clipboardData.getData('text');\n // Only use digits and limit to length\n const digits = pastedText.replace(/\\D/g, '').slice(0, props.length);\n if (digits) {\n isInternalUpdate.value = true;\n emit('update:modelValue', digits);\n\n // Call complete if all digits filled\n if (digits.length === props.length) {\n nextTick(() => {\n emit('complete', digits);\n });\n }\n\n // Focus last filled input or last input\n const focusIndex = Math.min(digits.length - 1, props.length - 1);\n nextTick(() => {\n if (inputRefs.value[focusIndex]) {\n inputRefs.value[focusIndex]?.focus();\n }\n });\n }\n};\n</script>\n","<template>\n <div :class=\"containerClasses\">\n <span v-if=\"showLabel\" class=\"ina-theme-toggle__label\">\n {{ theme === 'light' ? 'Light' : 'Dark' }} Mode\n </span>\n\n <button\n type=\"button\"\n :class=\"buttonClasses\"\n @click=\"toggleTheme\"\n :aria-label=\"`Switch to ${theme === 'light' ? 'dark' : 'light'} mode`\"\n :title=\"`Switch to ${theme === 'light' ? 'dark' : 'light'} mode`\"\n >\n <div :class=\"iconClasses\">\n <IconSun\n v-if=\"theme === 'light'\"\n :size=\"size === 'sm' ? 16 : size === 'lg' ? 20 : 18\"\n />\n <IconMoon v-else :size=\"size === 'sm' ? 16 : size === 'lg' ? 20 : 18\" />\n </div>\n\n <span class=\"ina-theme-toggle__track\" />\n </button>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed, onMounted } from 'vue';\nimport { IconSun, IconMoon } from '@tabler/icons-vue';\nexport interface ThemeToggleProps {\n size?: 'sm' | 'md' | 'lg';\n showLabel?: boolean;\n}\n\nconst props = withDefaults(defineProps<ThemeToggleProps>(), {\n size: 'md',\n showLabel: false,\n});\n\nconst theme = ref<'light' | 'dark'>('light');\n\n// Initialize theme from localStorage or default to light\nonMounted(() => {\n const storedTheme = localStorage.getItem('ina-theme') as 'light' | 'dark';\n const initialTheme = storedTheme || 'light';\n theme.value = initialTheme;\n\n // Apply theme to document\n document.documentElement.setAttribute('data-theme', initialTheme);\n localStorage.setItem('ina-theme', initialTheme);\n});\n\nconst toggleTheme = () => {\n const newTheme = theme.value === 'light' ? 'dark' : 'light';\n theme.value = newTheme;\n\n // Apply theme to document\n document.documentElement.setAttribute('data-theme', newTheme);\n localStorage.setItem('ina-theme', newTheme);\n};\n\nconst containerClasses = computed(() => {\n const classes = ['ina-theme-toggle', `ina-theme-toggle--size-${props.size}`];\n\n return classes.join(' ');\n});\n\nconst buttonClasses = computed(() => {\n return [\n 'ina-theme-toggle__button',\n `ina-theme-toggle__button--${theme.value}`,\n `ina-theme-toggle__button--size-${props.size}`,\n ].join(' ');\n});\n\nconst iconClasses = computed(() => {\n return [\n 'ina-theme-toggle__icon',\n `ina-theme-toggle__icon--${theme.value}`,\n ].join(' ');\n});\n</script>\n\n<style scoped></style>\n","<template>\n <div class=\"ina-time-picker\" :class=\"containerClasses\" ref=\"containerRef\">\n <label\n v-if=\"label\"\n class=\"ina-time-picker__label\"\n :class=\"{ 'ina-time-picker__label--required': required }\"\n >\n <component :is=\"labelComponent\" v-if=\"labelComponent\" />\n <span v-else-if=\"label && typeof label === 'string'\">{{ label }}</span>\n <span v-if=\"required\" class=\"ina-time-picker__required\">*</span>\n </label>\n <!-- Input -->\n <div\n class=\"ina-time-picker__wrapper\"\n :tabindex=\"disabled ? -1 : 0\"\n role=\"combobox\"\n :aria-expanded=\"isOpen\"\n aria-haspopup=\"listbox\"\n @click=\"handleWrapperClick\"\n @keydown=\"handleWrapperKeydown\"\n >\n <div v-if=\"prefixIcon\" class=\"ina-time-picker__prefix-icon\">\n <slot name=\"prefixIcon\">{{ prefixIcon }}</slot>\n </div>\n\n <input\n ref=\"inputRef\"\n type=\"text\"\n :class=\"triggerClasses\"\n :value=\"internalValue\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n :readonly=\"!disabled\"\n v-bind=\"$attrs\"\n @input=\"handleInputChange\"\n @click=\"handleInputClick\"\n @focus=\"handleInputFocus\"\n @keydown=\"handleInputKeydown\"\n />\n\n <button\n v-if=\"allowClear && internalValue && !disabled\"\n type=\"button\"\n class=\"ina-time-picker__clear-button\"\n aria-label=\"Clear time\"\n @click=\"handleClear\"\n >\n <IconX :size=\"16\" />\n </button>\n <div v-else-if=\"suffixIcon\" class=\"ina-time-picker__suffix-icon\">\n <slot name=\"suffixIcon\">{{ suffixIcon }}</slot>\n </div>\n <div v-else class=\"ina-time-picker__suffix-icon\">\n <IconClock :size=\"16\" />\n </div>\n </div>\n\n <!-- Time Panel -->\n <div v-if=\"isOpen\" ref=\"panelRef\" class=\"ina-time-picker__panel\">\n <div class=\"ina-time-picker__content\">\n <!-- Hour Column -->\n <div\n :class=\"[\n 'ina-time-picker__column',\n 'ina-time-picker__column--hour',\n hoveredColumn === 'hour' && 'ina-time-picker__column--hovered',\n ]\"\n >\n <div\n class=\"ina-time-picker__column-content\"\n @mouseleave=\"handleMouseLeave\"\n >\n <div\n v-for=\"option in hourOptions\"\n :key=\"option\"\n :class=\"[\n 'ina-time-picker__option',\n option ===\n (use12Hours\n ? currentTime.hours === 0\n ? 12\n : currentTime.hours\n : currentTime.hours) && 'ina-time-picker__option--selected',\n hoveredValue === option && 'ina-time-picker__option--hovered',\n ]\"\n @click=\"handleTimeSelect('hour', option)\"\n @mouseenter=\"handleMouseEnter('hour', option)\"\n >\n {{ option.toString().padStart(2, '0') }}\n </div>\n </div>\n </div>\n\n <!-- Minute Column -->\n <div\n :class=\"[\n 'ina-time-picker__column',\n 'ina-time-picker__column--minute',\n hoveredColumn === 'minute' && 'ina-time-picker__column--hovered',\n ]\"\n >\n <div\n class=\"ina-time-picker__column-content\"\n @mouseleave=\"handleMouseLeave\"\n >\n <div\n v-for=\"option in minuteOptions\"\n :key=\"option\"\n :class=\"[\n 'ina-time-picker__option',\n option === currentTime.minutes &&\n 'ina-time-picker__option--selected',\n hoveredValue === option && 'ina-time-picker__option--hovered',\n ]\"\n @click=\"handleTimeSelect('minute', option)\"\n @mouseenter=\"handleMouseEnter('minute', option)\"\n >\n {{ option.toString().padStart(2, '0') }}\n </div>\n </div>\n </div>\n\n <!-- Second Column -->\n <div\n v-if=\"showSecond\"\n :class=\"[\n 'ina-time-picker__column',\n 'ina-time-picker__column--second',\n hoveredColumn === 'second' && 'ina-time-picker__column--hovered',\n ]\"\n >\n <div\n class=\"ina-time-picker__column-content\"\n @mouseleave=\"handleMouseLeave\"\n >\n <div\n v-for=\"option in secondOptions\"\n :key=\"option\"\n :class=\"[\n 'ina-time-picker__option',\n option === currentTime.seconds &&\n 'ina-time-picker__option--selected',\n hoveredValue === option && 'ina-time-picker__option--hovered',\n ]\"\n @click=\"handleTimeSelect('second', option)\"\n @mouseenter=\"handleMouseEnter('second', option)\"\n >\n {{ option.toString().padStart(2, '0') }}\n </div>\n </div>\n </div>\n\n <!-- AM/PM Column -->\n <div\n v-if=\"use12Hours\"\n :class=\"[\n 'ina-time-picker__column',\n 'ina-time-picker__column--period',\n hoveredColumn === 'period' && 'ina-time-picker__column--hovered',\n ]\"\n >\n <div\n class=\"ina-time-picker__column-content\"\n @mouseleave=\"handleMouseLeave\"\n >\n <div\n v-for=\"period in ['AM', 'PM']\"\n :key=\"period\"\n :class=\"[\n 'ina-time-picker__option',\n period === currentTime.period &&\n 'ina-time-picker__option--selected',\n ]\"\n @click=\"handleTimeSelect('period', period)\"\n @mouseenter=\"handleMouseEnter('period', period)\"\n >\n {{ period }}\n </div>\n </div>\n </div>\n </div>\n\n <!-- Actions -->\n <div class=\"ina-time-picker__actions\">\n <button\n v-if=\"showNowButton\"\n type=\"button\"\n class=\"ina-time-picker__action-button\"\n @click=\"handleNowClick\"\n >\n Sekarang\n </button>\n <button\n type=\"button\"\n class=\"ina-time-picker__confirm-button\"\n @click=\"handleClose\"\n >\n Pilih\n </button>\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, watch, nextTick, onMounted, onUnmounted } from 'vue';\nimport type { Component } from 'vue';\nimport { IconClock, IconX } from '@tabler/icons-vue';\nexport type TimeFormat = 'HH:mm:ss' | 'HH:mm' | 'h:mm:ss a' | 'h:mm a' | string;\nexport type TimePickerSize = 'sm' | 'md' | 'lg';\n\nexport interface TimePickerProps {\n /** Set default time */\n defaultValue?: string;\n /** Determine whether the TimePicker is disabled */\n disabled?: boolean;\n /** To set the time format */\n format?: TimeFormat;\n /** Hour step interval */\n hourStep?: number;\n /** Minute step interval */\n minuteStep?: number;\n /** Second step interval */\n secondStep?: number;\n /** Placeholder text */\n placeholder?: string;\n /** Size variant */\n size?: TimePickerSize;\n /** Status variant */\n status?: 'neutral' | 'error' | 'warning' | 'success';\n /** Current value */\n modelValue?: string;\n /** Callback when time changes */\n onChange?: (time: string) => void;\n /** Callback when picker open/close */\n onOpenChange?: (open: boolean) => void;\n /** Whether to use 12-hour format */\n use12Hours?: boolean;\n /** Show seconds column */\n showSecond?: boolean;\n /** Allow clear */\n allowClear?: boolean;\n /** Prefix icon */\n prefixIcon?: any;\n /** Suffix icon */\n suffixIcon?: any;\n /** Disable times before current time */\n disabledBackTime?: boolean;\n /** Disable times before this specific time (format: same as format prop) */\n disabledTimeBefore?: string;\n /** Disable times after this specific time (format: same as format prop) */\n disabledTimeAfter?: string;\n /** Show \"Now\" button to set current time */\n showNowButton?: boolean;\n /** Label text */\n label?: string | Component;\n /** Whether the field is required */\n required?: boolean;\n}\n\nconst props = withDefaults(defineProps<TimePickerProps>(), {\n defaultValue: '',\n disabled: false,\n format: 'HH:mm',\n hourStep: 1,\n minuteStep: 1,\n secondStep: 1,\n placeholder: 'Select time',\n size: 'md',\n status: 'neutral',\n use12Hours: false,\n showSecond: false,\n allowClear: true,\n disabledBackTime: false,\n showNowButton: false,\n});\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string];\n change: [value: string];\n 'open-change': [open: boolean];\n}>();\n\nconst containerRef = ref<HTMLDivElement>();\nconst inputRef = ref<HTMLInputElement>();\nconst panelRef = ref<HTMLDivElement>();\n\nconst isOpen = ref(false);\nconst internalValue = ref(props.defaultValue || props.modelValue || '');\nconst hoveredColumn = ref<'hour' | 'minute' | 'second' | 'period' | null>(null);\nconst hoveredValue = ref<number | string | null>(null);\nconst clickedToOpen = ref(false);\n\n// Parse time string to hours, minutes, seconds\nconst parseTime = (timeStr: string) => {\n if (!timeStr) return { hours: 0, minutes: 0, seconds: 0, period: 'AM' };\n\n const parts = timeStr.split(':');\n const time = parts[0];\n const minutes = parseInt(parts[1] || '0', 10);\n const seconds = parseInt(parts[2] || '0', 10);\n\n if (props.use12Hours) {\n const period = time.includes('AM') ? 'AM' : 'PM';\n const hour12 = parseInt(time.replace(/[^\\d]/g, ''), 10);\n const hours = hour12 === 12 ? 0 : hour12;\n return { hours, minutes, seconds, period };\n } else {\n return { hours: parseInt(time, 10), minutes, seconds, period: 'AM' };\n }\n};\n\n// Format time to string\nconst formatTime = (\n hours: number,\n minutes: number,\n seconds: number,\n period?: string\n) => {\n let displayHours = hours;\n\n if (props.use12Hours) {\n if (period === 'PM' && hours > 0) {\n displayHours = hours + 12;\n }\n displayHours = displayHours || 12; // Show 12 for both midnights\n }\n\n const hh = displayHours.toString().padStart(2, '0');\n const mm = minutes.toString().padStart(2, '0');\n\n if (props.showSecond) {\n const ss = seconds.toString().padStart(2, '0');\n return props.use12Hours\n ? `${hours}:${mm}:${ss} ${period}`\n : `${hh}:${mm}:${ss}`;\n }\n\n return props.use12Hours ? `${hours}:${mm} ${period}` : `${hh}:${mm}`;\n};\n\n// Generate time options\nconst generateOptions = (type: 'hour' | 'minute' | 'second') => {\n const options: number[] = [];\n\n switch (\n type === 'hour' ? (props.use12Hours ? 12 : 24) : type === 'minute' ? 60 : 60\n ) {\n case 12:\n for (\n let i = type === 'hour' ? 1 : 0;\n i <= (type === 'hour' ? 12 : 59);\n i +=\n type === 'hour'\n ? props.hourStep\n : type === 'minute'\n ? props.minuteStep\n : 1\n ) {\n options.push(i);\n }\n break;\n case 24:\n for (let i = 0; i <= 23; i += props.hourStep) {\n options.push(i);\n }\n break;\n case 60:\n for (\n let i = 0;\n i <= 59;\n i += type === 'minute' ? props.minuteStep : props.secondStep\n ) {\n options.push(i);\n }\n break;\n }\n\n return options;\n};\n\nconst currentTime = computed(() => parseTime(internalValue.value || ''));\nconst hourOptions = computed(() => generateOptions('hour'));\nconst minuteOptions = computed(() => generateOptions('minute'));\nconst secondOptions = computed(() => generateOptions('second'));\n\n// Handle open/close - SAMA PERSIS DENGAN REACT\nconst handleOpen = () => {\n if (props.disabled || isOpen.value) return;\n\n isOpen.value = true;\n clickedToOpen.value = true;\n emit('open-change', true);\n\n setTimeout(() => inputRef.value?.focus(), 0);\n};\n\nconst handleClose = () => {\n isOpen.value = false;\n clickedToOpen.value = false;\n hoveredColumn.value = null;\n hoveredValue.value = null;\n emit('open-change', false);\n};\n\nconst handleToggleOpen = () => {\n if (props.disabled) return;\n\n if (isOpen.value) {\n handleClose();\n } else {\n handleOpen();\n }\n};\n\n// Handle wrapper click - SAMA PERSIS DENGAN REACT\nconst handleWrapperClick = (e: MouseEvent) => {\n // Only trigger wrapper click if clicking on wrapper itself or icons\n const target = e.target as HTMLElement;\n if (\n target === e.currentTarget ||\n target.classList.contains('ina-time-picker__suffix-icon') ||\n target.classList.contains('ina-time-picker__prefix-icon')\n ) {\n handleOpen();\n }\n};\n\n// Handle wrapper keydown - SAMA PERSIS DENGAN REACT\nconst handleWrapperKeydown = (e: KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n handleToggleOpen();\n }\n};\n\n// Handle input click - SAMA PERSIS DENGAN REACT\nconst handleInputClick = (e: MouseEvent) => {\n e.stopPropagation();\n handleOpen();\n};\n\n// Handle input focus - SAMA PERSIS DENGAN REACT\nconst handleInputFocus = () => {\n if (!clickedToOpen.value) {\n handleOpen();\n }\n clickedToOpen.value = false;\n};\n\n// Handle input keydown - SAMA PERSIS DENGAN REACT\nconst handleInputKeydown = (e: KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n handleToggleOpen();\n } else if (e.key === 'Escape') {\n if (isOpen.value) handleClose();\n }\n};\n\n// Handle time selection\nconst handleTimeSelect = (\n type: 'hour' | 'minute' | 'second' | 'period',\n value: number | string\n) => {\n let newHours = currentTime.value.hours;\n let newMinutes = currentTime.value.minutes;\n let newSeconds = currentTime.value.seconds;\n let newPeriod = currentTime.value.period;\n\n switch (type) {\n case 'hour':\n newHours = props.use12Hours\n ? value === 12\n ? 0\n : (value as number)\n : (value as number);\n break;\n case 'minute':\n newMinutes = value as number;\n break;\n case 'second':\n newSeconds = value as number;\n break;\n case 'period':\n newPeriod = value as 'AM' | 'PM';\n break;\n }\n\n const newTimeStr = formatTime(\n newHours,\n newMinutes,\n newSeconds,\n props.use12Hours ? newPeriod : undefined\n );\n\n internalValue.value = newTimeStr;\n emit('update:modelValue', newTimeStr);\n emit('change', newTimeStr);\n};\n\n// Handle input change\nconst handleInputChange = (e: Event) => {\n const target = e.target as HTMLInputElement;\n const inputValue = target.value;\n internalValue.value = inputValue;\n emit('update:modelValue', inputValue);\n emit('change', inputValue);\n};\n\n// Handle clear\nconst handleClear = () => {\n internalValue.value = '';\n emit('update:modelValue', '');\n emit('change', '');\n};\n\n// Handle mouse enter\nconst handleMouseEnter = (\n type: 'hour' | 'minute' | 'second' | 'period',\n value: number | string\n) => {\n hoveredColumn.value = type;\n hoveredValue.value = value;\n};\n\n// Handle mouse leave\nconst handleMouseLeave = () => {\n hoveredColumn.value = null;\n hoveredValue.value = null;\n};\n\n// Handle now click\nconst handleNowClick = () => {\n const now = new Date();\n const timeStr = formatTime(\n now.getHours(),\n now.getMinutes(),\n props.showSecond ? now.getSeconds() : 0,\n props.use12Hours ? (now.getHours() >= 12 ? 'PM' : 'AM') : undefined\n );\n\n const hours12 = now.getHours() % 12 || 12;\n const finalTime = props.use12Hours\n ? formatTime(\n hours12,\n now.getMinutes(),\n props.showSecond ? now.getSeconds() : 0,\n now.getHours() >= 12 ? 'PM' : 'AM'\n )\n : timeStr;\n\n internalValue.value = finalTime;\n emit('update:modelValue', finalTime);\n emit('change', finalTime);\n handleClose();\n};\n\n// Computed classes - SAMA PERSIS DENGAN REACT\nconst containerClasses = computed(() => {\n const classes = [\n 'ina-time-picker',\n `ina-time-picker--size-${props.size}`,\n `ina-time-picker--status-${props.status}`,\n ];\n\n if (props.disabled) {\n classes.push('ina-time-picker--disabled');\n }\n\n if (isOpen.value) {\n classes.push('ina-time-picker--open');\n }\n\n return classes;\n});\n\nconst labelComponent = computed(() => {\n if (!props.label) return null;\n if (typeof props.label === 'string') return null;\n return props.label as Component;\n});\n\nconst triggerClasses = computed(() => {\n const classes = [\n 'ina-time-picker__input',\n `ina-time-picker__input--size-${props.size}`,\n ];\n\n if (props.prefixIcon) {\n classes.push('ina-time-picker__input--with-prefix');\n }\n\n if (props.suffixIcon || props.allowClear) {\n classes.push('ina-time-picker__input--with-suffix');\n }\n\n return classes;\n});\n\n// Sync internal value with external modelValue prop\nwatch(\n () => props.modelValue,\n (newValue) => {\n if (newValue !== undefined && newValue !== internalValue.value) {\n internalValue.value = newValue;\n }\n }\n);\n\n// Handle clicks outside - SAMA PERSIS DENGAN REACT\nconst handleClickOutside = (event: MouseEvent) => {\n if (\n containerRef.value &&\n !containerRef.value.contains(event.target as Node)\n ) {\n handleClose();\n }\n};\n\nonMounted(() => {\n if (isOpen.value) {\n document.addEventListener('mousedown', handleClickOutside);\n }\n});\n\nonUnmounted(() => {\n document.removeEventListener('mousedown', handleClickOutside);\n});\n\nwatch(isOpen, (newIsOpen) => {\n if (newIsOpen) {\n document.addEventListener('mousedown', handleClickOutside);\n } else {\n document.removeEventListener('mousedown', handleClickOutside);\n }\n});\n</script>\n","<template>\n <Teleport v-if=\"mounted && isDisplayed && container\" :to=\"container\">\n <div class=\"ina-toast-item\">\n <div :class=\"toastClasses\">\n <div class=\"ina-toast__icon\">\n <component :is=\"iconComponent\" :size=\"20\" />\n </div>\n <div class=\"ina-toast__content\">\n <div class=\"ina-toast__text-area\">\n <p class=\"ina-toast__title\">{{ title }}</p>\n <p v-if=\"description\" class=\"ina-toast__description\">\n {{ description }}\n </p>\n </div>\n <div v-if=\"actionNode\" class=\"ina-toast__action-area\">\n <component :is=\"actionNode\" />\n </div>\n </div>\n <button\n class=\"ina-toast__close-button\"\n aria-label=\"Tutup notifikasi\"\n @click=\"handleClose\"\n >\n <IconX :size=\"16\" :stroke-width=\"2\" class=\"ina-toast__close-icon\" />\n </button>\n </div>\n </div>\n </Teleport>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, onMounted, onUnmounted, watch, useAttrs } from 'vue';\nimport type { Component, VNode } from 'vue';\nimport {\n IconCircleCheck,\n IconInfoCircle,\n IconX,\n IconAlertCircle,\n} from '@tabler/icons-vue';\nimport clsx from 'clsx';\n\nexport interface ToastProps {\n show: boolean;\n onClose: () => void;\n title: string | VNode;\n description?: string | VNode;\n actionNode?: Component | VNode;\n state?: 'default' | 'destructive' | 'positive';\n style?: 'outline' | 'solid';\n duration?: number;\n position?:\n | 'top-left'\n | 'top-right'\n | 'bottom-left'\n | 'bottom-right'\n | 'top-middle'\n | 'bottom-middle'\n | 'left-middle'\n | 'right-middle';\n}\n\nconst props = withDefaults(defineProps<ToastProps>(), {\n state: 'default',\n style: 'solid',\n duration: 5000,\n position: 'top-right',\n});\n\n// State icons map\nconst stateIconMap = {\n default: IconInfoCircle,\n destructive: IconAlertCircle,\n positive: IconCircleCheck,\n} as const;\n\nconst iconComponent = computed(() => stateIconMap[props.state]);\n\n// State\nconst mounted = ref(false);\nconst isDisplayed = ref(false);\nconst isVisible = ref(false);\nconst container = ref<HTMLElement | null>(null);\nlet timer: ReturnType<typeof setTimeout> | null = null;\n\n// Utils: Portal Container per-Position\nfunction getOrCreateContainer(position: ToastProps['position']): HTMLElement {\n const id = `ina-toast-container-${position}`;\n let el = document.getElementById(id) as HTMLElement | null;\n if (!el) {\n el = document.createElement('div');\n el.id = id;\n el.className = clsx(\n 'ina-toast-container',\n `ina-toast-container--${position}`\n );\n el.style.maxHeight = 'calc(100vh - 32px)';\n el.style.overflow = 'auto';\n document.body.appendChild(el);\n } else {\n el.className = clsx(\n 'ina-toast-container',\n `ina-toast-container--${position}`\n );\n }\n return el;\n}\n\nfunction removeContainerIfEmpty(el: HTMLElement) {\n if (el && el.childElementCount === 0 && el.parentElement) {\n el.parentElement.removeChild(el);\n }\n}\n\n// Mount\nonMounted(() => {\n mounted.value = true;\n container.value = getOrCreateContainer(props.position);\n});\n\nonUnmounted(() => {\n if (timer) {\n clearTimeout(timer);\n }\n if (container.value) {\n removeContainerIfEmpty(container.value);\n }\n});\n\n// Watch position changes\nwatch(\n () => props.position,\n (newPosition) => {\n if (mounted.value && newPosition) {\n container.value = getOrCreateContainer(newPosition);\n }\n }\n);\n\n// Show/hide + auto close\nwatch(\n () => [props.show, mounted.value] as const,\n ([show, isMounted]) => {\n if (!isMounted) return;\n if (show) {\n isDisplayed.value = true;\n requestAnimationFrame(() => {\n isVisible.value = true;\n });\n if (props.duration > 0) {\n timer = setTimeout(() => {\n handleClose();\n }, props.duration);\n }\n }\n },\n { immediate: true }\n);\n\nfunction handleClose() {\n isVisible.value = false;\n setTimeout(() => {\n isDisplayed.value = false;\n props.onClose();\n if (container.value) {\n removeContainerIfEmpty(container.value);\n }\n }, 300);\n}\n\nconst attrs = useAttrs();\n\nconst toastClasses = computed(() => {\n return clsx(\n 'ina-toast',\n `ina-toast--state-${props.state}`,\n `ina-toast--style-${props.style}`,\n `ina-toast--${isVisible.value ? 'visible' : 'hidden'}`,\n attrs.class\n );\n});\n</script>\n","import { inject } from 'vue';\nimport type { ToastProps } from '../components/Toast.vue';\n\nexport type ToastOptions = Omit<ToastProps, 'show' | 'onClose'> & {\n class?: string;\n};\n\nexport interface ToastContextValue {\n toast: (opts: ToastOptions) => void;\n}\n\nexport const ToastContextKey = Symbol('ToastContext');\n\nexport function useToast(): ToastContextValue {\n const context = inject<ToastContextValue>(ToastContextKey);\n if (!context) {\n console.error('useToast must be used within ToastProvider');\n // Return a dummy function to prevent errors during development\n return {\n toast: (opts: ToastOptions) => {\n console.warn('ToastProvider not found. Toast not displayed:', opts);\n },\n };\n }\n return context;\n}\n","<template>\n <div>\n <slot />\n <!-- Render semua toast -->\n <Toast\n v-for=\"toast in toasts\"\n :key=\"toast.id\"\n :show=\"true\"\n :onClose=\"() => handleClose(toast.id)\"\n :title=\"toast.title\"\n :description=\"toast.description\"\n :actionNode=\"toast.actionNode\"\n :state=\"toast.state\"\n :style=\"toast.style\"\n :duration=\"toast.duration\"\n :position=\"toast.position\"\n :class=\"toast.class\"\n />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, provide } from 'vue';\nimport Toast from './Toast.vue';\nimport {\n ToastContextKey,\n type ToastOptions,\n type ToastContextValue,\n} from '../composables/useToast';\n\n// Internal model untuk setiap toast\ninterface InternalToast extends ToastOptions {\n id: string;\n}\n\n// State untuk menyimpan semua toast\nconst toasts = ref<InternalToast[]>([]);\n\n// Panggil ini dari mana pun untuk munculkan toast\nconst toast = (opts: ToastOptions) => {\n const id = `${Date.now()}-${Math.random()}`;\n toasts.value = [...toasts.value, { id, ...opts }];\n};\n\n// Hapus toast setelah onClose callback\nconst handleClose = (id: string) => {\n toasts.value = toasts.value.filter((t) => t.id !== id);\n};\n\n// Provide context ke child components\nconst contextValue: ToastContextValue = {\n toast,\n};\n\nprovide(ToastContextKey, contextValue);\n</script>\n","import { inject } from 'vue';\nimport type { VNode } from 'vue';\n\nexport type ConfirmOptions = {\n title?: string;\n message: string | VNode;\n confirmText?: string;\n cancelText?: string;\n cancelClassName?: string;\n confirmClassName?: string;\n dialogClassname?: string;\n /**\n * Custom footer actions. Jika diberikan sebagai function, akan menerima handleClose sebagai parameter.\n * Jika diberikan sebagai VNode, user harus handle close sendiri.\n */\n footerActions?:\n | ((handleClose: (answer: boolean) => void) => VNode)\n | VNode;\n};\n\nexport type ConfirmationContextValue = {\n confirm: (opts: ConfirmOptions) => Promise<boolean>;\n};\n\nexport const ConfirmationContextKey = Symbol('ConfirmationContext');\n\nexport function useConfirmation(): ConfirmationContextValue {\n const context = inject<ConfirmationContextValue>(ConfirmationContextKey);\n if (!context) {\n console.error('useConfirmation must be used within ConfirmationProvider');\n // Return a dummy function to prevent errors during development\n return {\n confirm: () => Promise.resolve(false),\n };\n }\n return context;\n}\n\n","<template>\n <div>\n <slot />\n <!-- Modal hanya dirender saat options !== null -->\n <Modal\n v-if=\"options\"\n v-model=\"isModalOpen\"\n :title=\"options.title\"\n :close-on-backdrop=\"true\"\n @close=\"handleClose(false)\"\n >\n <div class=\"ina-modal-confirmation__body\">\n <div>\n <component :is=\"messageComponent\" v-if=\"messageComponent\" />\n <span v-else-if=\"options && typeof options.message === 'string'\">{{\n options.message\n }}</span>\n </div>\n <component :is=\"footerComponent\" v-if=\"footerComponent\" />\n </div>\n </Modal>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {\n ref,\n computed,\n h,\n watch,\n provide,\n type VNode,\n type Component,\n} from 'vue';\nimport Modal from './Modal.vue';\nimport Button from './Button.vue';\nimport {\n ConfirmationContextKey,\n type ConfirmationContextValue,\n type ConfirmOptions,\n} from '../composables/useConfirmation';\n\nconst options = ref<ConfirmOptions | null>(null);\nconst isModalOpen = ref(false);\nlet pendingResolve: ((value: boolean) => void) | null = null;\n\nconst handleClose = (answer: boolean) => {\n if (!pendingResolve && !options.value) {\n // Already closed, ignore\n return;\n }\n if (pendingResolve) {\n pendingResolve(answer);\n }\n options.value = null;\n isModalOpen.value = false;\n pendingResolve = null;\n};\n\nconst defaultFooterActions = (\n cancelClassName: string,\n confirmClassName: string,\n cancelText: string,\n confirmText: string,\n handleCloseFn: (answer: boolean) => void\n): VNode => {\n return h('div', { class: 'ina-modal-confirmation__footer' }, [\n h(\n Button,\n {\n hierarchy: 'custom',\n size: 'sm',\n class: cancelClassName,\n onClick: () => handleCloseFn(false),\n },\n { default: () => cancelText }\n ),\n h(\n Button,\n {\n hierarchy: 'custom',\n size: 'sm',\n class: confirmClassName,\n onClick: () => handleCloseFn(true),\n },\n { default: () => confirmText }\n ),\n ]);\n};\n\nconst confirm = (opts: ConfirmOptions): Promise<boolean> => {\n return new Promise<boolean>((resolve) => {\n const defaultCancelClassName = 'ina-modal-confirmation__cancel';\n const defaultConfirmClassName = 'ina-modal-confirmation__confirm';\n const defaultCancelText = opts.cancelText ?? 'Batal';\n const defaultConfirmText = opts.confirmText ?? 'Ya';\n\n options.value = {\n title: opts.title ?? 'Confirmation',\n message: opts.message,\n confirmText: defaultConfirmText,\n cancelText: defaultCancelText,\n cancelClassName: opts.cancelClassName ?? defaultCancelClassName,\n confirmClassName: opts.confirmClassName ?? defaultConfirmClassName,\n dialogClassname: opts.dialogClassname ?? 'ina-modal-confirmation',\n footerActions:\n opts.footerActions ??\n ((handleCloseFn) =>\n defaultFooterActions(\n opts.cancelClassName ?? defaultCancelClassName,\n opts.confirmClassName ?? defaultConfirmClassName,\n defaultCancelText,\n defaultConfirmText,\n handleCloseFn\n )),\n } as ConfirmOptions;\n\n pendingResolve = resolve;\n isModalOpen.value = true;\n });\n};\n\n// Watch for modal close via v-model to sync with options\nwatch(isModalOpen, (newValue) => {\n if (!newValue && options.value && pendingResolve) {\n // Modal was closed via v-model (e.g., backdrop click), resolve as false\n handleClose(false);\n }\n});\n\n// Provide context ke child components\nconst contextValue: ConfirmationContextValue = {\n confirm,\n};\n\nprovide(ConfirmationContextKey, contextValue);\n\n// Computed untuk message component\nconst messageComponent = computed(() => {\n if (!options.value) return null;\n if (typeof options.value.message === 'string') return null;\n return options.value.message as VNode | Component;\n});\n\n// Computed untuk footer component\nconst footerComponent = computed(() => {\n if (!options.value) return null;\n if (!options.value.footerActions) return null;\n\n if (typeof options.value.footerActions === 'function') {\n return options.value.footerActions(handleClose);\n }\n\n return options.value.footerActions as VNode | Component;\n});\n</script>\n","<template>\n <div class=\"ina-toggle\" :class=\"toggleClasses\">\n <input\n v-bind=\"filteredAttrs\"\n :id=\"inputId\"\n ref=\"inputRef\"\n :checked=\"checked\"\n type=\"checkbox\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n class=\"ina-toggle__input\"\n @change=\"handleChange\"\n @focus=\"handleFocus\"\n @blur=\"handleBlur\"\n />\n\n <label :for=\"inputId\" class=\"ina-toggle__label\">\n <span :class=\"trackClasses\">\n <span :class=\"thumbClasses\" />\n </span>\n\n <span v-if=\"$slots.default || label\" class=\"ina-toggle__text\">\n <slot>{{ label }}</slot>\n </span>\n </label>\n\n <div v-if=\"statusMessage\" :class=\"statusClasses\">\n {{ statusMessage }}\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, useAttrs } from 'vue';\nexport interface ToggleProps {\n modelValue?: boolean;\n label?: string;\n size?: 'sm' | 'md';\n variant?: 'default' | 'primary' | 'success' | 'warning' | 'error';\n status?: 'neutral' | 'success' | 'error' | 'warning';\n statusMessage?: string;\n disabled?: boolean;\n readonly?: boolean;\n id?: string;\n}\n\nconst props = withDefaults(defineProps<ToggleProps>(), {\n modelValue: false,\n size: 'md',\n variant: 'default',\n status: 'neutral',\n disabled: false,\n readonly: false,\n});\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: boolean];\n change: [value: boolean];\n focus: [event: FocusEvent];\n blur: [event: FocusEvent];\n}>();\n\nconst attrs = useAttrs();\nconst inputRef = ref<HTMLInputElement>();\n\n// Generate unique ID for input, or use id from props/attrs if provided\nconst inputId = computed(() => {\n // Check if id is provided via props or attrs\n const providedId = props.id || (attrs.id as string);\n if (providedId) {\n return providedId;\n }\n return `toggle-${Math.random().toString(36).substr(2, 9)}`;\n});\n\n// Filter out id from attrs to avoid conflicts\nconst filteredAttrs = computed(() => {\n const { id, ...rest } = attrs;\n return rest;\n});\n\n// Use computed for checked state to always reflect modelValue\nconst checked = computed({\n get: () => props.modelValue || false,\n set: (value: boolean) => {\n emit('update:modelValue', value);\n },\n});\n\nconst toggleClasses = computed(() => {\n const classes = ['ina-toggle'];\n\n classes.push(`ina-toggle--size-${props.size}`);\n classes.push(`ina-toggle--variant-${props.variant}`);\n\n if (props.disabled) {\n classes.push('ina-toggle--disabled');\n }\n\n if (props.readonly) {\n classes.push('ina-toggle--readonly');\n }\n\n if (props.status !== 'neutral') {\n classes.push(`ina-toggle--status-${props.status}`);\n }\n\n if (checked.value) {\n classes.push('ina-toggle--checked');\n }\n\n return classes;\n});\n\nconst statusClasses = computed(() => {\n const classes = ['ina-toggle__status'];\n\n if (props.status !== 'neutral') {\n classes.push(`ina-toggle__status--${props.status}`);\n }\n\n return classes;\n});\n\nconst trackClasses = computed(() => {\n const classes = ['ina-toggle__track'];\n\n if (checked.value) {\n classes.push('ina-toggle__track--checked');\n }\n\n if (props.disabled) {\n classes.push('ina-toggle__track--disabled');\n }\n\n return classes;\n});\n\nconst thumbClasses = computed(() => {\n const classes = ['ina-toggle__thumb'];\n\n if (checked.value) {\n classes.push('ina-toggle__thumb--checked');\n }\n\n if (props.disabled) {\n classes.push('ina-toggle__thumb--disabled');\n }\n\n return classes;\n});\n\nconst handleChange = (event: Event) => {\n const target = event.target as HTMLInputElement;\n const newValue = target.checked;\n checked.value = newValue;\n emit('change', newValue);\n};\n\nconst handleFocus = (event: FocusEvent) => {\n emit('focus', event);\n};\n\nconst handleBlur = (event: FocusEvent) => {\n emit('blur', event);\n};\n</script>\n","<template>\n <div\n class=\"ina-tooltip\"\n :class=\"tooltipClasses\"\n @mouseenter=\"handleMouseEnter\"\n >\n <slot />\n <div class=\"ina-tooltip__content\" :class=\"contentClasses\" role=\"tooltip\">\n <!-- Custom content mode: render content directly without any structure -->\n <template v-if=\"customContent && $slots.content\">\n <slot name=\"content\" />\n </template>\n\n <!-- Basic variant: just title text -->\n <template v-else-if=\"variant === 'basic'\">\n <div class=\"ina-tooltip__bubble ina-tooltip__bubble--basic\">\n <slot name=\"title\">{{ title }}</slot>\n </div>\n </template>\n\n <!-- Light, Dark, or Media variant: card-like structure -->\n <template v-else>\n <div :class=\"['ina-tooltip__card', `ina-tooltip__card--${variant}`]\">\n <!-- Close button -->\n <button\n v-if=\"onClose\"\n type=\"button\"\n class=\"ina-tooltip__close\"\n aria-label=\"Close tooltip\"\n @click.stop=\"handleClose\"\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M18 6L6 18M6 6L18 18\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n\n <!-- Image section for media variant -->\n <div\n v-if=\"variant === 'media' && (image || $slots.image)\"\n class=\"ina-tooltip__image\"\n >\n <slot name=\"image\">\n <img v-if=\"typeof image === 'string'\" :src=\"image\" alt=\"\" />\n <component :is=\"image\" v-else-if=\"image\" />\n </slot>\n </div>\n\n <!-- Content section -->\n <div class=\"ina-tooltip__content-section\">\n <div v-if=\"title || $slots.title\" class=\"ina-tooltip__title\">\n <slot name=\"title\">{{ title }}</slot>\n </div>\n <div\n v-if=\"description || $slots.description\"\n class=\"ina-tooltip__description\"\n >\n <slot name=\"description\">{{ description }}</slot>\n </div>\n\n <!-- Custom content slot -->\n <div v-if=\"$slots.content\" class=\"ina-tooltip__custom-content\">\n <slot name=\"content\" />\n </div>\n\n <!-- Action buttons -->\n <div v-if=\"onClose || onNext\" class=\"ina-tooltip__actions\">\n <button\n v-if=\"onClose\"\n type=\"button\"\n class=\"ina-tooltip__action ina-tooltip__action--close\"\n @click.stop=\"handleClose\"\n >\n Tutup\n </button>\n <button\n v-if=\"onNext\"\n type=\"button\"\n class=\"ina-tooltip__action ina-tooltip__action--next\"\n @click.stop=\"handleNext\"\n >\n Lanjut\n </button>\n </div>\n </div>\n </div>\n </template>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nexport type TooltipPlacement = 'top' | 'bottom' | 'left' | 'right';\nexport type TooltipVariant = 'basic' | 'light' | 'dark' | 'media';\n\nexport interface TooltipProps {\n /**\n * Konten tooltip (teks) - untuk basic variant\n * Judul tooltip untuk light/dark/media variant\n */\n title?: string;\n\n /**\n * Deskripsi tooltip (untuk light/dark/media variant)\n */\n description?: string;\n\n /**\n * Image/thumbnail untuk media variant\n */\n image?: string;\n\n /**\n * Variant tooltip: basic, light, dark, media\n */\n variant?: TooltipVariant;\n\n /**\n * Posisi tooltip\n */\n placement?: TooltipPlacement;\n\n /**\n * Apakah menampilkan arrow\n */\n showArrow?: boolean;\n\n /**\n * Callback ketika close button diklik (untuk light/dark/media variant)\n */\n onClose?: () => void;\n\n /**\n * Callback ketika button \"Lanjut\" diklik (untuk light/dark/media variant)\n */\n onNext?: () => void;\n\n /**\n * Jika true, render content sebagai custom content sepenuhnya tanpa struktur card/bubble\n * Content akan diambil dari slot `content` (VNode)\n */\n customContent?: boolean;\n}\n\nconst props = withDefaults(defineProps<TooltipProps>(), {\n title: '',\n description: '',\n variant: 'basic',\n placement: 'top',\n showArrow: true,\n customContent: false,\n});\n\nconst emit = defineEmits<{\n close: [];\n next: [];\n}>();\n\nconst isClosed = ref(false);\n\nconst handleClose = () => {\n isClosed.value = true;\n if (props.onClose) {\n props.onClose();\n }\n emit('close');\n};\n\nconst handleNext = () => {\n isClosed.value = true;\n if (props.onNext) {\n props.onNext();\n }\n emit('next');\n};\n\n// Reset closed state when hovering over trigger\nconst handleMouseEnter = () => {\n if (isClosed.value) {\n isClosed.value = false;\n }\n};\n\nconst tooltipClasses = computed(() => {\n const classes = ['ina-tooltip', `ina-tooltip--placement-${props.placement}`];\n if (isClosed.value) {\n classes.push('ina-tooltip--closed');\n }\n return classes;\n});\n\nconst contentClasses = computed(() => {\n const classes = ['ina-tooltip__content'];\n if (props.showArrow) {\n classes.push('ina-tooltip__content--show-arrow');\n }\n classes.push(`ina-tooltip--variant-${props.variant}`);\n return classes;\n});\n</script>\n\n<style scoped>\n/* Styles sudah di-import dari tooltip-test.css */\n</style>\n","import defaultColorTokens from '@idds/styles/tailwind/ts/default';\n\nexport type BrandName =\n | 'inagov'\n | 'inaku'\n | 'bgn'\n | 'bkn'\n | 'lan'\n | 'panrb'\n | 'default';\n\nexport interface CustomTheme {\n name: string;\n colors: Record<string, string>;\n}\n\n// Predefined brand names (CSS handles the actual colors)\nconst predefinedBrands: BrandName[] = [\n 'inagov',\n 'inaku',\n 'bgn',\n 'bkn',\n 'lan',\n 'panrb',\n 'default',\n];\n\n// Current active theme\nlet currentTheme: { name: string; colors?: Record<string, string> } = {\n name: 'default',\n};\n\n/**\n * Set brand theme by name\n * @param brandName - Name of the brand theme\n */\nexport function setBrandTheme(brandName: BrandName): void {\n if (!predefinedBrands.includes(brandName)) {\n currentTheme = { name: 'default' };\n } else {\n currentTheme = { name: brandName };\n }\n\n applyThemeToDocument();\n}\n\n/**\n * Set custom theme\n * @param customTheme - Custom theme object\n */\nexport function setCustomTheme(customTheme: CustomTheme): void {\n currentTheme = customTheme;\n applyThemeToDocument();\n}\n\n/**\n * Get current active theme\n */\nexport function getCurrentTheme(): {\n name: string;\n colors?: Record<string, string>;\n} {\n return currentTheme;\n}\n\n/**\n * Get available brand names\n */\nexport function getAvailableBrands(): BrandName[] {\n return predefinedBrands;\n}\n\n/**\n * Apply theme colors to CSS custom properties\n */\nfunction applyThemeToDocument(): void {\n if (typeof document === 'undefined') return;\n\n const root = document.documentElement;\n\n // For predefined brand themes, set data attribute and apply default colors if needed\n if (predefinedBrands.includes(currentTheme.name as BrandName)) {\n if (currentTheme.name === 'default') {\n // For default theme, remove brand attribute and apply default primary colors\n root.removeAttribute('data-brand');\n applyDefaultPrimaryColors(root);\n } else {\n // For brand themes, set data attribute (CSS will handle the variables)\n root.setAttribute('data-brand', currentTheme.name);\n // Remove default primary colors to avoid conflicts\n removeDefaultPrimaryColors(root);\n }\n return;\n }\n\n // For custom themes, apply variables directly to style attribute\n if (currentTheme.colors) {\n // Clear any existing brand attribute\n root.removeAttribute('data-brand');\n // Remove default primary colors\n removeDefaultPrimaryColors(root);\n\n // Apply all color variables as inline styles\n Object.entries(currentTheme.colors).forEach(([key, value]) => {\n // Convert camelCase to kebab-case for CSS variables\n const cssVarName = `--ina-${key\n .replace(/([A-Z])/g, '-$1')\n .toLowerCase()}`;\n root.style.setProperty(cssVarName, value);\n });\n return;\n }\n}\n\n/**\n * Apply default primary colors to root element\n */\nfunction applyDefaultPrimaryColors(root: HTMLElement): void {\n Object.entries(defaultColorTokens).forEach(([key, value]) => {\n root.style.setProperty(key, value);\n });\n}\n\n/**\n * Remove default primary colors from root element\n */\nfunction removeDefaultPrimaryColors(root: HTMLElement): void {\n Object.keys(defaultColorTokens).forEach((key) => {\n root.style.removeProperty(key);\n });\n}\n\n/**\n * Initialize theme system\n * @param brandName - Initial brand name (optional)\n */\nexport function initializeTheme(brandName?: BrandName): void {\n if (brandName) {\n setBrandTheme(brandName);\n } else {\n // Apply default theme with default primary colors\n currentTheme = { name: 'default' };\n applyThemeToDocument();\n }\n}\n\n/**\n * Reset to default theme\n */\nexport function resetTheme(): void {\n setBrandTheme('default');\n}\n\n/**\n * Validate if brand exists\n * @param brandName - Brand name to validate\n */\nexport function isValidBrand(brandName: string): brandName is BrandName {\n return predefinedBrands.includes(brandName as BrandName);\n}\n\n// Auto-initialize on import\nif (typeof window !== 'undefined') {\n initializeTheme();\n}\n","<template>\n <div class=\"ina-single-file-upload\">\n <input\n v-bind=\"filteredAttrs\"\n :id=\"inputId\"\n ref=\"fileInputRef\"\n type=\"file\"\n :accept=\"props.accept\"\n :disabled=\"props.disabled\"\n class=\"ina-single-file-upload__input\"\n @change=\"handleFileChange\"\n />\n\n <div\n :class=\"containerClasses\"\n role=\"button\"\n :tabindex=\"props.disabled || file ? -1 : 0\"\n :aria-label=\"file ? `File: ${file.name}` : 'Upload file'\"\n @click=\"handleClick\"\n @focus=\"handleFocus\"\n @blur=\"handleBlur\"\n @dragover=\"handleDragOver\"\n @dragleave=\"handleDragLeave\"\n @drop=\"handleDrop\"\n >\n <!-- Default State -->\n <template v-if=\"!file && status === 'idle'\">\n <div\n class=\"ina-single-file-upload__icon-wrapper ina-single-file-upload__icon-wrapper--default\"\n >\n <IconUpload :size=\"24\" />\n </div>\n <div class=\"ina-single-file-upload__content\">\n <div class=\"ina-single-file-upload__title\">{{ props.title }}</div>\n <div class=\"ina-single-file-upload__description\">\n {{ props.description }}\n </div>\n </div>\n </template>\n\n <!-- Progress State -->\n <template v-if=\"!file && status === 'uploading'\">\n <div\n class=\"ina-single-file-upload__icon-wrapper ina-single-file-upload__icon-wrapper--default\"\n >\n <IconUpload :size=\"24\" />\n </div>\n <div class=\"ina-single-file-upload__progress\">\n <div class=\"ina-single-file-upload__progress-bar\">\n <div\n class=\"ina-single-file-upload__progress-fill\"\n :style=\"{ width: `${progress}%` }\"\n />\n </div>\n <div class=\"ina-single-file-upload__progress-text\">\n Uploading... {{ progress }}%\n </div>\n </div>\n </template>\n\n <!-- Success State -->\n <template v-if=\"file && status === 'success'\">\n <div\n class=\"ina-single-file-upload__icon-wrapper ina-single-file-upload__icon-wrapper--file\"\n >\n <component :is=\"fileIconComponent\" :size=\"16\" />\n </div>\n <div class=\"ina-single-file-upload__content\">\n <div class=\"ina-single-file-upload__title\">{{ file.name }}</div>\n <div class=\"ina-single-file-upload__description\">\n {{ props.description }}\n </div>\n </div>\n <button\n type=\"button\"\n class=\"ina-single-file-upload__delete-button\"\n aria-label=\"Remove file\"\n @click.stop=\"handleRemove\"\n >\n <IconTrash :size=\"18\" />\n </button>\n </template>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed, useAttrs } from 'vue';\nimport {\n validateFile,\n validateMagicNumber as validateFileMagicNumber,\n type FileValidationResult,\n} from '../utils/fileValidation';\nimport { sanitizeFileName } from '../utils/security';\nimport {\n IconUpload,\n IconTrash,\n IconFile,\n IconFileTypePdf,\n IconPhoto,\n} from '@tabler/icons-vue';\n\nexport type SingleFileUploadStatus = 'idle' | 'uploading' | 'success' | 'error';\n\nexport interface SingleFileUploadProps {\n /**\n * Title di dalam upload area (default: \"Unggah File\").\n */\n title?: string;\n\n /**\n * Description di dalam upload area.\n */\n description?: string;\n\n /**\n * Tipe file yang diizinkan (MIME types, e.g., \"image/*,application/pdf\").\n */\n accept?: string;\n\n /**\n * Ukuran maksimum file dalam bytes (0 = unlimited).\n */\n maxSize?: number;\n\n /**\n * Ekstensi file yang diizinkan (e.g., ['png', 'jpg', 'pdf']).\n */\n allowedExtensions?: string[];\n\n /**\n * Validasi magic number (file signature) sesuai rekomendasi OWASP.\n * Default: true untuk security maksimal.\n */\n validateMagicNumber?: boolean;\n\n /**\n * Apakah disabled.\n */\n disabled?: boolean;\n\n /**\n * Progress upload (0-100).\n */\n progress?: number;\n\n /**\n * Status upload.\n */\n status?: SingleFileUploadStatus;\n}\n\nconst props = withDefaults(defineProps<SingleFileUploadProps>(), {\n title: 'Unggah File',\n description: 'Description',\n accept: '',\n maxSize: 0,\n validateMagicNumber: true,\n disabled: false,\n});\n\nconst emit = defineEmits<{\n change: [file: File | null, error: FileValidationResult | null];\n remove: [];\n}>();\n\nconst attrs = useAttrs();\nconst fileInputRef = ref<HTMLInputElement>();\nconst file = ref<File | null>(null);\nconst internalProgress = ref<number>(0);\nconst internalStatus = ref<SingleFileUploadStatus>('idle');\nconst error = ref<FileValidationResult | null>(null);\nconst isActive = ref(false);\n\n// Generate ID for input from attrs if provided\nconst inputId = computed(() => {\n const providedId = (attrs.id as string) || (attrs.name as string);\n return providedId ? String(providedId) : undefined;\n});\n\n// Filter out id, name, type, accept, disabled, and class from attrs to avoid conflicts\n// (they're handled explicitly via props)\nconst filteredAttrs = computed(() => {\n const { id, name, type, accept, disabled, class: classAttr, ...rest } = attrs;\n return rest;\n});\n\n// Use external progress/status if provided, otherwise use internal\nconst progress = computed(() =>\n props.progress !== undefined ? props.progress : internalProgress.value\n);\nconst status = computed(() =>\n props.status !== undefined ? props.status : internalStatus.value\n);\n\nconst containerClasses = computed(() => [\n 'ina-single-file-upload__container',\n {\n 'ina-single-file-upload__container--active':\n isActive.value && !props.disabled && !file.value,\n 'ina-single-file-upload__container--disabled': props.disabled,\n },\n]);\n\n// Check file type\nconst isPdfFile = computed(() => {\n if (!file.value) return false;\n const fileType = file.value.type;\n const fileName = file.value.name.toLowerCase();\n return fileType === 'application/pdf' || fileName.endsWith('.pdf');\n});\n\nconst isImageFile = computed(() => {\n if (!file.value) return false;\n return file.value.type.startsWith('image/');\n});\n\n// Get file icon component based on file type (matching React implementation)\nconst fileIconComponent = computed(() => {\n if (!file.value) return null;\n\n const fileType = file.value.type;\n const fileName = file.value.name.toLowerCase();\n\n if (fileType === 'application/pdf' || fileName.endsWith('.pdf')) {\n return IconFileTypePdf;\n }\n\n if (fileType.startsWith('image/')) {\n return IconPhoto;\n }\n\n return IconFile;\n});\n\nconst triggerFileInput = () => {\n if (props.disabled || file.value) return;\n fileInputRef.value?.click();\n};\n\nconst handleFileChange = async (event: Event) => {\n const target = event.target as HTMLInputElement;\n const selectedFile = target.files?.[0];\n if (!selectedFile) return;\n\n // Sanitize file name for security\n const sanitizedFileName = sanitizeFileName(selectedFile.name);\n if (sanitizedFileName !== selectedFile.name) {\n const errorResult: FileValidationResult = {\n isValid: false,\n error: 'Nama file mengandung karakter yang tidak diizinkan',\n file: selectedFile,\n };\n file.value = null;\n error.value = errorResult;\n internalStatus.value = 'error';\n emit('change', null, errorResult);\n if (fileInputRef.value) {\n fileInputRef.value.value = '';\n }\n return;\n }\n\n // Validate allowedExtensions if provided\n if (props.allowedExtensions && props.allowedExtensions.length > 0) {\n const fileName = selectedFile.name.toLowerCase();\n const extension = fileName.substring(fileName.lastIndexOf('.') + 1);\n if (!props.allowedExtensions.includes(extension.toLowerCase())) {\n const errorResult: FileValidationResult = {\n isValid: false,\n error: `Ekstensi file harus: ${props.allowedExtensions.join(', ')}`,\n file: selectedFile,\n };\n file.value = null;\n error.value = errorResult;\n internalStatus.value = 'error';\n emit('change', null, errorResult);\n if (fileInputRef.value) {\n fileInputRef.value.value = '';\n }\n return;\n }\n }\n\n // Standard file validation\n const validation = validateFile(selectedFile, {\n allowedTypes: props.accept || undefined,\n maxSize: props.maxSize || undefined,\n validateExtension: true,\n });\n\n if (!validation.isValid) {\n file.value = null;\n error.value = validation;\n internalStatus.value = 'error';\n emit('change', null, validation);\n if (fileInputRef.value) {\n fileInputRef.value.value = '';\n }\n return;\n }\n\n // Magic number validation (if enabled)\n if (props.validateMagicNumber && selectedFile.type) {\n const magicValidation = await validateFileMagicNumber(\n selectedFile,\n selectedFile.type\n );\n if (!magicValidation.isValid) {\n const errorResult: FileValidationResult = {\n isValid: false,\n error: magicValidation.error || 'File signature tidak valid',\n file: selectedFile,\n };\n file.value = null;\n error.value = errorResult;\n internalStatus.value = 'error';\n emit('change', null, errorResult);\n if (fileInputRef.value) {\n fileInputRef.value.value = '';\n }\n return;\n }\n }\n\n // All validations passed\n file.value = selectedFile;\n error.value = null;\n internalStatus.value = 'success';\n emit('change', selectedFile, null);\n\n // Reset input\n if (fileInputRef.value) {\n fileInputRef.value.value = '';\n }\n};\n\nconst handleRemove = () => {\n file.value = null;\n error.value = null;\n internalProgress.value = 0;\n internalStatus.value = 'idle';\n isActive.value = false;\n if (fileInputRef.value) {\n fileInputRef.value.value = '';\n }\n emit('remove');\n emit('change', null, null);\n};\n\nconst handleClick = () => {\n if (props.disabled || file.value) return;\n triggerFileInput();\n};\n\nconst handleFocus = () => {\n if (props.disabled || file.value) return;\n isActive.value = true;\n};\n\nconst handleBlur = () => {\n isActive.value = false;\n};\n\nconst handleDragOver = (e: DragEvent) => {\n if (props.disabled || file.value) return;\n e.preventDefault();\n e.stopPropagation();\n isActive.value = true;\n};\n\nconst handleDragLeave = (e: DragEvent) => {\n if (props.disabled || file.value) return;\n e.preventDefault();\n e.stopPropagation();\n isActive.value = false;\n};\n\nconst handleDrop = async (e: DragEvent) => {\n if (props.disabled || file.value) return;\n e.preventDefault();\n e.stopPropagation();\n isActive.value = false;\n\n const droppedFile = e.dataTransfer?.files[0];\n if (!droppedFile) return;\n\n // Sanitize file name for security\n const sanitizedFileName = sanitizeFileName(droppedFile.name);\n if (sanitizedFileName !== droppedFile.name) {\n const errorResult: FileValidationResult = {\n isValid: false,\n error: 'Nama file mengandung karakter yang tidak diizinkan',\n file: droppedFile,\n };\n file.value = null;\n error.value = errorResult;\n internalStatus.value = 'error';\n emit('change', null, errorResult);\n return;\n }\n\n // Validate allowedExtensions if provided\n if (props.allowedExtensions && props.allowedExtensions.length > 0) {\n const fileName = droppedFile.name.toLowerCase();\n const extension = fileName.substring(fileName.lastIndexOf('.') + 1);\n if (!props.allowedExtensions.includes(extension.toLowerCase())) {\n const errorResult: FileValidationResult = {\n isValid: false,\n error: `Ekstensi file harus: ${props.allowedExtensions.join(', ')}`,\n file: droppedFile,\n };\n file.value = null;\n error.value = errorResult;\n internalStatus.value = 'error';\n emit('change', null, errorResult);\n return;\n }\n }\n\n // Standard file validation\n const validation = validateFile(droppedFile, {\n allowedTypes: props.accept || undefined,\n maxSize: props.maxSize || undefined,\n validateExtension: true,\n });\n\n if (!validation.isValid) {\n file.value = null;\n error.value = validation;\n internalStatus.value = 'error';\n emit('change', null, validation);\n return;\n }\n\n // Magic number validation (if enabled)\n if (props.validateMagicNumber && droppedFile.type) {\n const magicValidation = await validateFileMagicNumber(\n droppedFile,\n droppedFile.type\n );\n if (!magicValidation.isValid) {\n const errorResult: FileValidationResult = {\n isValid: false,\n error: magicValidation.error || 'File signature tidak valid',\n file: droppedFile,\n };\n file.value = null;\n error.value = errorResult;\n internalStatus.value = 'error';\n emit('change', null, errorResult);\n return;\n }\n }\n\n // All validations passed\n file.value = droppedFile;\n error.value = null;\n internalStatus.value = 'success';\n emit('change', droppedFile, null);\n};\n</script>\n","// Import CSS files\nimport './index.css';\n\nexport { default as inaColorTokens } from '@idds/styles/tailwind/ts/idds';\nexport { default as iddsColorTokens } from '@idds/styles/tailwind/ts/idds';\nexport { default as inagovColorTokens } from '@idds/styles/tailwind/ts/inagov';\nexport { default as inakuColorTokens } from '@idds/styles/tailwind/ts/inaku';\nexport { default as inapasColorTokens } from '@idds/styles/tailwind/ts/inapas';\nexport { default as bgnColorTokens } from '@idds/styles/tailwind/ts/bgn';\nexport { default as bknColorTokens } from '@idds/styles/tailwind/ts/bkn';\nexport { default as lanColorTokens } from '@idds/styles/tailwind/ts/lan';\nexport { default as panrbColorTokens } from '@idds/styles/tailwind/ts/panrb';\nexport { default as defaultColorTokens } from '@idds/styles/tailwind/ts/default';\n\n// Import components\nimport Accordion from './components/Accordion.vue';\nimport AccordionCard from './components/AccordionCard.vue';\nimport AccordionGroup from './components/AccordionGroup.vue';\nimport ActionDropdown from './components/ActionDropdown.vue';\nimport Alert from './components/Alert.vue';\nimport Avatar from './components/Avatar.vue';\nimport Badge from './components/Badge.vue';\nimport BottomSheet from './components/BottomSheet.vue';\nimport Breadcrumb from './components/Breadcrumb.vue';\nimport Button from './components/Button.vue';\nimport ButtonGroup from './components/ButtonGroup.vue';\nimport Card from './components/Card.vue';\nimport Checkbox from './components/Checkbox.vue';\nimport Chip from './components/Chip.vue';\nimport CircleProgressBar from './components/CircleProgressBar.vue';\nimport Collapse from './components/Collapse.vue';\nimport Divider from './components/Divider.vue';\nimport Dropdown from './components/Dropdown.vue';\nimport FieldInputTable from './components/FieldInputTable.vue';\nimport FileUpload from './components/FileUpload.vue';\nimport InputSearch from './components/InputSearch.vue';\nimport Modal from './components/Modal.vue';\nimport MonthPicker from './components/MonthPicker.vue';\nimport MultipleChoiceGrid from './components/MultipleChoiceGrid.vue';\nimport Pagination from './components/Pagination.vue';\nimport PasswordInput from './components/PasswordInput.vue';\nimport PhoneInput from './components/PhoneInput.vue';\nimport ProgressBar from './components/ProgressBar.vue';\nimport LinearProgressIndicator from './components/LinearProgressIndicator.vue';\nimport RadioInput from './components/RadioInput.vue';\nimport DatePicker from './components/DatePicker.vue';\nimport SelectDropdown from './components/SelectDropdown.vue';\nimport Drawer from './components/Drawer.vue';\nimport Skeleton from './components/Skeleton.vue';\nimport Spinner from './components/Spinner.vue';\nimport Stepper from './components/Stepper.vue';\nimport TabHorizontal from './components/TabHorizontal.vue';\nimport TabVertical from './components/TabVertical.vue';\nimport Table from './components/Table.vue';\nimport TableProgressBar from './components/TableProgressBar.vue';\nimport TextArea from './components/TextArea.vue';\nimport TextField from './components/TextField.vue';\nimport OneTimePassword from './components/OneTimePassword.vue';\nimport ThemeToggle from './components/ThemeToggle.vue';\nimport TimePicker from './components/TimePicker.vue';\nimport Toast from './components/Toast.vue';\nimport ToastProvider from './components/ToastProvider.vue';\nimport ConfirmationProvider from './components/ConfirmationProvider.vue';\nimport Toggle from './components/Toggle.vue';\nimport Tooltip from './components/Tooltip.vue';\nimport YearPicker from './components/YearPicker.vue';\n\n// Import themes\nimport { setBrandTheme, type BrandName, type CustomTheme } from './themes';\n\n// Export components\nexport {\n Accordion,\n AccordionCard,\n AccordionGroup,\n ActionDropdown,\n Alert,\n Avatar,\n Badge,\n BottomSheet,\n Breadcrumb,\n Button,\n ButtonGroup,\n Card,\n CircleProgressBar,\n Checkbox,\n Chip,\n Collapse,\n Divider,\n Dropdown,\n FieldInputTable,\n FileUpload,\n InputSearch,\n Modal,\n MonthPicker,\n MultipleChoiceGrid,\n Pagination,\n PasswordInput,\n PhoneInput,\n ProgressBar,\n LinearProgressIndicator,\n RadioInput,\n DatePicker,\n SelectDropdown,\n Drawer,\n Skeleton,\n Spinner,\n Stepper,\n TabHorizontal,\n TabVertical,\n Table,\n TableProgressBar,\n TextArea,\n TextField,\n OneTimePassword,\n ThemeToggle,\n TimePicker,\n Toast,\n ToastProvider,\n ConfirmationProvider,\n Toggle,\n Tooltip,\n YearPicker,\n};\n\n// Export themes\nexport { setBrandTheme };\n\n// Export types\nexport type { BrandName, CustomTheme };\nexport type { AccordionProps } from './components/Accordion.vue';\nexport type { AccordionCardProps } from './components/AccordionCard.vue';\nexport type { AccordionGroupProps } from './components/AccordionGroup.vue';\nexport type { ActionDropdownProps } from './components/ActionDropdown.vue';\nexport type { AlertProps } from './components/Alert.vue';\nexport type { AvatarProps } from './components/Avatar.vue';\nexport type { BadgeProps } from './components/Badge.vue';\nexport type { BottomSheetProps } from './components/BottomSheet.vue';\nexport type {\n BreadcrumbProps,\n BreadcrumbItem,\n} from './components/Breadcrumb.vue';\nexport type { ButtonProps } from './components/Button.vue';\nexport type {\n ButtonGroupProps,\n ButtonGroupOption,\n} from './components/ButtonGroup.vue';\nexport type { CardProps } from './components/Card.vue';\nexport type { CircleProgressBarProps } from './components/CircleProgressBar.vue';\nexport type { CheckboxProps } from './components/Checkbox.vue';\nexport type { ChipProps, ChipOption } from './components/Chip.vue';\nexport type { CollapseProps } from './components/Collapse.vue';\nexport type { DividerProps } from './components/Divider.vue';\nexport type { DropdownProps } from './components/Dropdown.vue';\nexport type { FieldInputTableProps } from './components/FieldInputTable.vue';\nexport type { FileUploadProps } from './components/FileUpload.vue';\nexport { default as SingleFileUpload } from './components/SingleFileUpload.vue';\nexport type {\n SingleFileUploadProps,\n SingleFileUploadStatus,\n} from './components/SingleFileUpload.vue';\nexport type { InputSearchProps } from './components/InputSearch.vue';\nexport type { ModalProps } from './components/Modal.vue';\nexport type { MonthPickerProps } from './components/MonthPicker.vue';\nexport type {\n MultipleChoiceGridProps,\n MultipleChoiceGridColumn,\n MultipleChoiceGridRow,\n} from './components/MultipleChoiceGrid.vue';\nexport type { PaginationProps } from './components/Pagination.vue';\nexport type { PasswordInputProps } from './components/PasswordInput.vue';\nexport type { PhoneInputProps } from './components/PhoneInput.vue';\nexport type { Country } from './utils/countries';\n\nexport type { ProgressBarProps } from './components/ProgressBar.vue';\nexport type { LinearProgressIndicatorProps } from './components/LinearProgressIndicator.vue';\nexport type { RadioInputProps } from './components/RadioInput.vue';\nexport type { DatePickerProps } from './components/DatePicker.vue';\nexport type {\n SelectDropdownProps,\n SelectOption,\n} from './components/SelectDropdown.vue';\nexport type { DrawerProps } from './components/Drawer.vue';\nexport type { SkeletonProps } from './components/Skeleton.vue';\nexport type { SpinnerProps } from './components/Spinner.vue';\nexport type { StepperProps, StepperItem } from './components/Stepper.vue';\nexport type {\n TabHorizontalProps,\n TabHorizontalItem,\n} from './components/TabHorizontal.vue';\nexport type {\n TabVerticalProps,\n TabVerticalItem,\n} from './components/TabVertical.vue';\nexport type {\n TableProps,\n Column,\n FetchParams,\n FetchResult,\n EditorProps,\n EditableColumn,\n} from './components/Table.vue';\nexport type { TableProgressBarProps } from './components/TableProgressBar.vue';\nexport type { TextAreaProps } from './components/TextArea.vue';\nexport type { TextFieldProps } from './components/TextField.vue';\nexport type {\n OneTimePasswordProps,\n OneTimePasswordLength,\n} from './components/OneTimePassword.vue';\nexport type { ThemeToggleProps } from './components/ThemeToggle.vue';\nexport type { TimePickerProps } from './components/TimePicker.vue';\nexport type { ToastProps } from './components/Toast.vue';\nexport {\n useToast,\n ToastContextKey,\n type ToastContextValue,\n type ToastOptions,\n} from './composables/useToast';\nexport {\n useConfirmation,\n ConfirmationContextKey,\n type ConfirmationContextValue,\n type ConfirmOptions,\n} from './composables/useConfirmation';\nexport type { ToggleProps } from './components/Toggle.vue';\nexport type {\n TooltipProps,\n TooltipPlacement,\n TooltipVariant,\n} from './components/Tooltip.vue';\nexport type { YearPickerProps } from './components/YearPicker.vue';\n\nexport {\n validateFile,\n validateMagicNumber as validateFileMagicNumber,\n formatFileSize,\n type FileValidationResult,\n} from './utils/fileValidation';\n\n// Default export\nexport default {\n Accordion,\n AccordionCard,\n AccordionGroup,\n ActionDropdown,\n Alert,\n Avatar,\n Badge,\n BottomSheet,\n Breadcrumb,\n Button,\n ButtonGroup,\n Card,\n CircleProgressBar,\n Checkbox,\n Chip,\n Collapse,\n Divider,\n Drawer,\n Dropdown,\n FieldInputTable,\n FileUpload,\n InputSearch,\n Modal,\n MonthPicker,\n MultipleChoiceGrid,\n Pagination,\n PasswordInput,\n PhoneInput,\n ProgressBar,\n LinearProgressIndicator,\n RadioInput,\n DatePicker,\n SelectDropdown,\n Skeleton,\n Spinner,\n Stepper,\n TabHorizontal,\n TabVertical,\n Table,\n TableProgressBar,\n TextArea,\n TextField,\n OneTimePassword,\n ThemeToggle,\n TimePicker,\n Toast,\n ToastProvider,\n ConfirmationProvider,\n Toggle,\n Tooltip,\n YearPicker,\n setBrandTheme,\n};\n"],"names":["_a","_createElementBlock","_normalizeClass","_createElementVNode","_hoisted_2","_renderSlot","_hoisted_3","_hoisted_5","_hoisted_1","_openBlock","_hoisted_4","_createBlock","_resolveDynamicComponent","_hoisted_6","_hoisted_7","_toDisplayString","_createVNode","_Transition","_hoisted_9","index","_unref","Icon3dCubeSphere","$slots","_Fragment","_renderList","_mergeProps","$emit","_createTextVNode","_hoisted_8","_hoisted_10","Button","_hoisted_11","_hoisted_13","_hoisted_15","_hoisted_17","_hoisted_18","_hoisted_19","_hoisted_20","_hoisted_21","_hoisted_22","$attrs","TextField","_Teleport","_hoisted_12","_hoisted_14","_hoisted_16","_hoisted_26","_withDirectives","_normalizeStyle","currentDate","_withModifiers","ProgressBar","r","TableProgressBar","Checkbox","Pagination","toast","Toast","validateFileMagicNumber","Accordion","Alert","Avatar","Badge","BottomSheet","Breadcrumb","ButtonGroup","Card","CircleProgressBar","Chip","Divider","FieldInputTable","FileUpload","InputSearch","MultipleChoiceGrid","PasswordInput","LinearProgressIndicator","RadioInput","Skeleton","Spinner","TabHorizontal","TabVertical","Table","TextArea","OneTimePassword","ThemeToggle","TimePicker","ToastProvider","ConfirmationProvider","Toggle"],"mappings":"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","x_google_ignoreList":[13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,61]}