@j-solution/components 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +22 -0
- package/README.md +130 -0
- package/UPDATE_GUIDE.md +441 -0
- package/USAGE_GUIDE.md +748 -0
- package/assets/images/README.md +18 -0
- package/assets/images/logo-fallback.png +0 -0
- package/assets/images/logo-fallback.png.README +14 -0
- package/assets/images/logo-fallback.png.cjs +2 -0
- package/assets/images/logo-fallback.png.cjs.map +1 -0
- package/assets/images/logo-fallback.png.js +5 -0
- package/assets/images/logo-fallback.png.js.map +1 -0
- package/assets/jwms-portal-frontend-DjoLgoaO.css +1 -0
- package/assets/styles/j-components.css +1 -0
- package/assets/styles/themes.css +337 -0
- package/assets/vue.svg +1 -0
- package/components/atoms/JAvatar.vue.cjs +2 -0
- package/components/atoms/JAvatar.vue.cjs.map +1 -0
- package/components/atoms/JAvatar.vue.js +94 -0
- package/components/atoms/JAvatar.vue.js.map +1 -0
- package/components/atoms/JAvatar.vue2.cjs +2 -0
- package/components/atoms/JAvatar.vue2.cjs.map +1 -0
- package/components/atoms/JAvatar.vue2.js +5 -0
- package/components/atoms/JAvatar.vue2.js.map +1 -0
- package/components/atoms/JBadge.vue.cjs +2 -0
- package/components/atoms/JBadge.vue.cjs.map +1 -0
- package/components/atoms/JBadge.vue.js +61 -0
- package/components/atoms/JBadge.vue.js.map +1 -0
- package/components/atoms/JBadge.vue2.cjs +2 -0
- package/components/atoms/JBadge.vue2.cjs.map +1 -0
- package/components/atoms/JBadge.vue2.js +5 -0
- package/components/atoms/JBadge.vue2.js.map +1 -0
- package/components/atoms/JButton.vue.cjs +2 -0
- package/components/atoms/JButton.vue.cjs.map +1 -0
- package/components/atoms/JButton.vue.js +88 -0
- package/components/atoms/JButton.vue.js.map +1 -0
- package/components/atoms/JButton.vue2.cjs +2 -0
- package/components/atoms/JButton.vue2.cjs.map +1 -0
- package/components/atoms/JButton.vue2.js +5 -0
- package/components/atoms/JButton.vue2.js.map +1 -0
- package/components/atoms/JCheckbox.vue.cjs +2 -0
- package/components/atoms/JCheckbox.vue.cjs.map +1 -0
- package/components/atoms/JCheckbox.vue.js +62 -0
- package/components/atoms/JCheckbox.vue.js.map +1 -0
- package/components/atoms/JCheckbox.vue2.cjs +2 -0
- package/components/atoms/JCheckbox.vue2.cjs.map +1 -0
- package/components/atoms/JCheckbox.vue2.js +5 -0
- package/components/atoms/JCheckbox.vue2.js.map +1 -0
- package/components/atoms/JCombo.vue.cjs +2 -0
- package/components/atoms/JCombo.vue.cjs.map +1 -0
- package/components/atoms/JCombo.vue.js +88 -0
- package/components/atoms/JCombo.vue.js.map +1 -0
- package/components/atoms/JCombo.vue2.cjs +2 -0
- package/components/atoms/JCombo.vue2.cjs.map +1 -0
- package/components/atoms/JCombo.vue2.js +5 -0
- package/components/atoms/JCombo.vue2.js.map +1 -0
- package/components/atoms/JDatepicker.vue.cjs +2 -0
- package/components/atoms/JDatepicker.vue.cjs.map +1 -0
- package/components/atoms/JDatepicker.vue.js +120 -0
- package/components/atoms/JDatepicker.vue.js.map +1 -0
- package/components/atoms/JDatepicker.vue2.cjs +2 -0
- package/components/atoms/JDatepicker.vue2.cjs.map +1 -0
- package/components/atoms/JDatepicker.vue2.js +5 -0
- package/components/atoms/JDatepicker.vue2.js.map +1 -0
- package/components/atoms/JDivider.vue.cjs +2 -0
- package/components/atoms/JDivider.vue.cjs.map +1 -0
- package/components/atoms/JDivider.vue.js +32 -0
- package/components/atoms/JDivider.vue.js.map +1 -0
- package/components/atoms/JDivider.vue2.cjs +2 -0
- package/components/atoms/JDivider.vue2.cjs.map +1 -0
- package/components/atoms/JDivider.vue2.js +5 -0
- package/components/atoms/JDivider.vue2.js.map +1 -0
- package/components/atoms/JGrid.vue.cjs +7 -0
- package/components/atoms/JGrid.vue.cjs.map +1 -0
- package/components/atoms/JGrid.vue.js +13 -0
- package/components/atoms/JGrid.vue.js.map +1 -0
- package/components/atoms/JGrid.vue2.cjs +2 -0
- package/components/atoms/JGrid.vue2.cjs.map +1 -0
- package/components/atoms/JGrid.vue2.js +107 -0
- package/components/atoms/JGrid.vue2.js.map +1 -0
- package/components/atoms/JIcon.vue.cjs +2 -0
- package/components/atoms/JIcon.vue.cjs.map +1 -0
- package/components/atoms/JIcon.vue.js +192 -0
- package/components/atoms/JIcon.vue.js.map +1 -0
- package/components/atoms/JIcon.vue2.cjs +2 -0
- package/components/atoms/JIcon.vue2.cjs.map +1 -0
- package/components/atoms/JIcon.vue2.js +5 -0
- package/components/atoms/JIcon.vue2.js.map +1 -0
- package/components/atoms/JImage.vue.cjs +2 -0
- package/components/atoms/JImage.vue.cjs.map +1 -0
- package/components/atoms/JImage.vue.js +79 -0
- package/components/atoms/JImage.vue.js.map +1 -0
- package/components/atoms/JImage.vue2.cjs +2 -0
- package/components/atoms/JImage.vue2.cjs.map +1 -0
- package/components/atoms/JImage.vue2.js +5 -0
- package/components/atoms/JImage.vue2.js.map +1 -0
- package/components/atoms/JInput.vue.cjs +2 -0
- package/components/atoms/JInput.vue.cjs.map +1 -0
- package/components/atoms/JInput.vue.js +68 -0
- package/components/atoms/JInput.vue.js.map +1 -0
- package/components/atoms/JInput.vue2.cjs +2 -0
- package/components/atoms/JInput.vue2.cjs.map +1 -0
- package/components/atoms/JInput.vue2.js +5 -0
- package/components/atoms/JInput.vue2.js.map +1 -0
- package/components/atoms/JKbd.vue.cjs +2 -0
- package/components/atoms/JKbd.vue.cjs.map +1 -0
- package/components/atoms/JKbd.vue.js +52 -0
- package/components/atoms/JKbd.vue.js.map +1 -0
- package/components/atoms/JKbd.vue2.cjs +2 -0
- package/components/atoms/JKbd.vue2.cjs.map +1 -0
- package/components/atoms/JKbd.vue2.js +5 -0
- package/components/atoms/JKbd.vue2.js.map +1 -0
- package/components/atoms/JLabel.vue.cjs +2 -0
- package/components/atoms/JLabel.vue.cjs.map +1 -0
- package/components/atoms/JLabel.vue.js +67 -0
- package/components/atoms/JLabel.vue.js.map +1 -0
- package/components/atoms/JLabel.vue2.cjs +2 -0
- package/components/atoms/JLabel.vue2.cjs.map +1 -0
- package/components/atoms/JLabel.vue2.js +5 -0
- package/components/atoms/JLabel.vue2.js.map +1 -0
- package/components/atoms/JLink.vue.cjs +2 -0
- package/components/atoms/JLink.vue.cjs.map +1 -0
- package/components/atoms/JLink.vue.js +51 -0
- package/components/atoms/JLink.vue.js.map +1 -0
- package/components/atoms/JLink.vue2.cjs +2 -0
- package/components/atoms/JLink.vue2.cjs.map +1 -0
- package/components/atoms/JLink.vue2.js +5 -0
- package/components/atoms/JLink.vue2.js.map +1 -0
- package/components/atoms/JPopover.vue.cjs +2 -0
- package/components/atoms/JPopover.vue.cjs.map +1 -0
- package/components/atoms/JPopover.vue.js +100 -0
- package/components/atoms/JPopover.vue.js.map +1 -0
- package/components/atoms/JPopover.vue2.cjs +2 -0
- package/components/atoms/JPopover.vue2.cjs.map +1 -0
- package/components/atoms/JPopover.vue2.js +5 -0
- package/components/atoms/JPopover.vue2.js.map +1 -0
- package/components/atoms/JProgress.vue.cjs +2 -0
- package/components/atoms/JProgress.vue.cjs.map +1 -0
- package/components/atoms/JProgress.vue.js +189 -0
- package/components/atoms/JProgress.vue.js.map +1 -0
- package/components/atoms/JProgress.vue3.cjs +2 -0
- package/components/atoms/JProgress.vue3.cjs.map +1 -0
- package/components/atoms/JProgress.vue3.js +6 -0
- package/components/atoms/JProgress.vue3.js.map +1 -0
- package/components/atoms/JRadio.vue.cjs +2 -0
- package/components/atoms/JRadio.vue.cjs.map +1 -0
- package/components/atoms/JRadio.vue.js +94 -0
- package/components/atoms/JRadio.vue.js.map +1 -0
- package/components/atoms/JRadio.vue2.cjs +2 -0
- package/components/atoms/JRadio.vue2.cjs.map +1 -0
- package/components/atoms/JRadio.vue2.js +5 -0
- package/components/atoms/JRadio.vue2.js.map +1 -0
- package/components/atoms/JSearchCombo.vue.cjs +2 -0
- package/components/atoms/JSearchCombo.vue.cjs.map +1 -0
- package/components/atoms/JSearchCombo.vue.js +146 -0
- package/components/atoms/JSearchCombo.vue.js.map +1 -0
- package/components/atoms/JSearchCombo.vue2.cjs +2 -0
- package/components/atoms/JSearchCombo.vue2.cjs.map +1 -0
- package/components/atoms/JSearchCombo.vue2.js +5 -0
- package/components/atoms/JSearchCombo.vue2.js.map +1 -0
- package/components/atoms/JSpinner.vue.cjs +2 -0
- package/components/atoms/JSpinner.vue.cjs.map +1 -0
- package/components/atoms/JSpinner.vue.js +65 -0
- package/components/atoms/JSpinner.vue.js.map +1 -0
- package/components/atoms/JSpinner.vue2.cjs +2 -0
- package/components/atoms/JSpinner.vue2.cjs.map +1 -0
- package/components/atoms/JSpinner.vue2.js +5 -0
- package/components/atoms/JSpinner.vue2.js.map +1 -0
- package/components/atoms/JSwitch.vue.cjs +2 -0
- package/components/atoms/JSwitch.vue.cjs.map +1 -0
- package/components/atoms/JSwitch.vue.js +60 -0
- package/components/atoms/JSwitch.vue.js.map +1 -0
- package/components/atoms/JSwitch.vue2.cjs +2 -0
- package/components/atoms/JSwitch.vue2.cjs.map +1 -0
- package/components/atoms/JSwitch.vue2.js +5 -0
- package/components/atoms/JSwitch.vue2.js.map +1 -0
- package/components/atoms/JTextarea.vue.cjs +2 -0
- package/components/atoms/JTextarea.vue.cjs.map +1 -0
- package/components/atoms/JTextarea.vue.js +66 -0
- package/components/atoms/JTextarea.vue.js.map +1 -0
- package/components/atoms/JTextarea.vue2.cjs +2 -0
- package/components/atoms/JTextarea.vue2.cjs.map +1 -0
- package/components/atoms/JTextarea.vue2.js +5 -0
- package/components/atoms/JTextarea.vue2.js.map +1 -0
- package/components/atoms/JTooltip.vue.cjs +2 -0
- package/components/atoms/JTooltip.vue.cjs.map +1 -0
- package/components/atoms/JTooltip.vue.js +130 -0
- package/components/atoms/JTooltip.vue.js.map +1 -0
- package/components/atoms/JTooltip.vue2.cjs +2 -0
- package/components/atoms/JTooltip.vue2.cjs.map +1 -0
- package/components/atoms/JTooltip.vue2.js +5 -0
- package/components/atoms/JTooltip.vue2.js.map +1 -0
- package/components/molecules/JAccordion.vue.cjs +2 -0
- package/components/molecules/JAccordion.vue.cjs.map +1 -0
- package/components/molecules/JAccordion.vue.js +61 -0
- package/components/molecules/JAccordion.vue.js.map +1 -0
- package/components/molecules/JAccordion.vue2.cjs +2 -0
- package/components/molecules/JAccordion.vue2.cjs.map +1 -0
- package/components/molecules/JAccordion.vue2.js +5 -0
- package/components/molecules/JAccordion.vue2.js.map +1 -0
- package/components/molecules/JAlert.vue.cjs +2 -0
- package/components/molecules/JAlert.vue.cjs.map +1 -0
- package/components/molecules/JAlert.vue.js +84 -0
- package/components/molecules/JAlert.vue.js.map +1 -0
- package/components/molecules/JAlert.vue2.cjs +2 -0
- package/components/molecules/JAlert.vue2.cjs.map +1 -0
- package/components/molecules/JAlert.vue2.js +5 -0
- package/components/molecules/JAlert.vue2.js.map +1 -0
- package/components/molecules/JBreadcrumb.vue.cjs +2 -0
- package/components/molecules/JBreadcrumb.vue.cjs.map +1 -0
- package/components/molecules/JBreadcrumb.vue.js +87 -0
- package/components/molecules/JBreadcrumb.vue.js.map +1 -0
- package/components/molecules/JBreadcrumb.vue2.cjs +2 -0
- package/components/molecules/JBreadcrumb.vue2.cjs.map +1 -0
- package/components/molecules/JBreadcrumb.vue2.js +5 -0
- package/components/molecules/JBreadcrumb.vue2.js.map +1 -0
- package/components/molecules/JButtonGroup.vue.cjs +2 -0
- package/components/molecules/JButtonGroup.vue.cjs.map +1 -0
- package/components/molecules/JButtonGroup.vue.js +58 -0
- package/components/molecules/JButtonGroup.vue.js.map +1 -0
- package/components/molecules/JButtonGroup.vue2.cjs +2 -0
- package/components/molecules/JButtonGroup.vue2.cjs.map +1 -0
- package/components/molecules/JButtonGroup.vue2.js +5 -0
- package/components/molecules/JButtonGroup.vue2.js.map +1 -0
- package/components/molecules/JCard.vue.cjs +2 -0
- package/components/molecules/JCard.vue.cjs.map +1 -0
- package/components/molecules/JCard.vue.js +61 -0
- package/components/molecules/JCard.vue.js.map +1 -0
- package/components/molecules/JCard.vue2.cjs +2 -0
- package/components/molecules/JCard.vue2.cjs.map +1 -0
- package/components/molecules/JCard.vue2.js +5 -0
- package/components/molecules/JCard.vue2.js.map +1 -0
- package/components/molecules/JContextMenu.vue.cjs +7 -0
- package/components/molecules/JContextMenu.vue.cjs.map +1 -0
- package/components/molecules/JContextMenu.vue.js +13 -0
- package/components/molecules/JContextMenu.vue.js.map +1 -0
- package/components/molecules/JContextMenu.vue2.cjs +2 -0
- package/components/molecules/JContextMenu.vue2.cjs.map +1 -0
- package/components/molecules/JContextMenu.vue2.js +138 -0
- package/components/molecules/JContextMenu.vue2.js.map +1 -0
- package/components/molecules/JFormField.vue.cjs +2 -0
- package/components/molecules/JFormField.vue.cjs.map +1 -0
- package/components/molecules/JFormField.vue.js +259 -0
- package/components/molecules/JFormField.vue.js.map +1 -0
- package/components/molecules/JFormField.vue3.cjs +2 -0
- package/components/molecules/JFormField.vue3.cjs.map +1 -0
- package/components/molecules/JFormField.vue3.js +6 -0
- package/components/molecules/JFormField.vue3.js.map +1 -0
- package/components/molecules/JGroupCombo.vue.cjs +2 -0
- package/components/molecules/JGroupCombo.vue.cjs.map +1 -0
- package/components/molecules/JGroupCombo.vue.js +102 -0
- package/components/molecules/JGroupCombo.vue.js.map +1 -0
- package/components/molecules/JGroupCombo.vue2.cjs +2 -0
- package/components/molecules/JGroupCombo.vue2.cjs.map +1 -0
- package/components/molecules/JGroupCombo.vue2.js +5 -0
- package/components/molecules/JGroupCombo.vue2.js.map +1 -0
- package/components/molecules/JSearchAddr.vue.cjs +7 -0
- package/components/molecules/JSearchAddr.vue.cjs.map +1 -0
- package/components/molecules/JSearchAddr.vue.js +13 -0
- package/components/molecules/JSearchAddr.vue.js.map +1 -0
- package/components/molecules/JSearchAddr.vue2.cjs +2 -0
- package/components/molecules/JSearchAddr.vue2.cjs.map +1 -0
- package/components/molecules/JSearchAddr.vue2.js +171 -0
- package/components/molecules/JSearchAddr.vue2.js.map +1 -0
- package/components/molecules/JTabs.vue.cjs +7 -0
- package/components/molecules/JTabs.vue.cjs.map +1 -0
- package/components/molecules/JTabs.vue.js +13 -0
- package/components/molecules/JTabs.vue.js.map +1 -0
- package/components/molecules/JTabs.vue2.cjs +2 -0
- package/components/molecules/JTabs.vue2.cjs.map +1 -0
- package/components/molecules/JTabs.vue2.js +130 -0
- package/components/molecules/JTabs.vue2.js.map +1 -0
- package/components/molecules/JTitlebar.vue.cjs +2 -0
- package/components/molecules/JTitlebar.vue.cjs.map +1 -0
- package/components/molecules/JTitlebar.vue.js +144 -0
- package/components/molecules/JTitlebar.vue.js.map +1 -0
- package/components/molecules/JTitlebar.vue2.cjs +2 -0
- package/components/molecules/JTitlebar.vue2.cjs.map +1 -0
- package/components/molecules/JTitlebar.vue2.js +5 -0
- package/components/molecules/JTitlebar.vue2.js.map +1 -0
- package/components/organisms/JDynamicForm.vue.cjs +7 -0
- package/components/organisms/JDynamicForm.vue.cjs.map +1 -0
- package/components/organisms/JDynamicForm.vue.js +13 -0
- package/components/organisms/JDynamicForm.vue.js.map +1 -0
- package/components/organisms/JDynamicForm.vue2.cjs +2 -0
- package/components/organisms/JDynamicForm.vue2.cjs.map +1 -0
- package/components/organisms/JDynamicForm.vue2.js +401 -0
- package/components/organisms/JDynamicForm.vue2.js.map +1 -0
- package/components/organisms/JDynamicTabs.vue.cjs +2 -0
- package/components/organisms/JDynamicTabs.vue.cjs.map +1 -0
- package/components/organisms/JDynamicTabs.vue.js +116 -0
- package/components/organisms/JDynamicTabs.vue.js.map +1 -0
- package/components/organisms/JDynamicTabs.vue2.cjs +2 -0
- package/components/organisms/JDynamicTabs.vue2.cjs.map +1 -0
- package/components/organisms/JDynamicTabs.vue2.js +5 -0
- package/components/organisms/JDynamicTabs.vue2.js.map +1 -0
- package/components/organisms/JFormModal.vue.cjs +2 -0
- package/components/organisms/JFormModal.vue.cjs.map +1 -0
- package/components/organisms/JFormModal.vue.js +175 -0
- package/components/organisms/JFormModal.vue.js.map +1 -0
- package/components/organisms/JFormModal.vue2.cjs +2 -0
- package/components/organisms/JFormModal.vue2.cjs.map +1 -0
- package/components/organisms/JFormModal.vue2.js +5 -0
- package/components/organisms/JFormModal.vue2.js.map +1 -0
- package/components/organisms/JHeader.vue.cjs +2 -0
- package/components/organisms/JHeader.vue.cjs.map +1 -0
- package/components/organisms/JHeader.vue.js +450 -0
- package/components/organisms/JHeader.vue.js.map +1 -0
- package/components/organisms/JHeader.vue2.cjs +2 -0
- package/components/organisms/JHeader.vue2.cjs.map +1 -0
- package/components/organisms/JHeader.vue2.js +5 -0
- package/components/organisms/JHeader.vue2.js.map +1 -0
- package/components/organisms/JModal.vue.cjs +2 -0
- package/components/organisms/JModal.vue.cjs.map +1 -0
- package/components/organisms/JModal.vue.js +170 -0
- package/components/organisms/JModal.vue.js.map +1 -0
- package/components/organisms/JModal.vue2.cjs +2 -0
- package/components/organisms/JModal.vue2.cjs.map +1 -0
- package/components/organisms/JModal.vue2.js +5 -0
- package/components/organisms/JModal.vue2.js.map +1 -0
- package/components/organisms/JPageContainer.vue.cjs +2 -0
- package/components/organisms/JPageContainer.vue.cjs.map +1 -0
- package/components/organisms/JPageContainer.vue.js +72 -0
- package/components/organisms/JPageContainer.vue.js.map +1 -0
- package/components/organisms/JPageContainer.vue2.cjs +2 -0
- package/components/organisms/JPageContainer.vue2.cjs.map +1 -0
- package/components/organisms/JPageContainer.vue2.js +5 -0
- package/components/organisms/JPageContainer.vue2.js.map +1 -0
- package/components/organisms/JSearchPanel.vue.cjs +7 -0
- package/components/organisms/JSearchPanel.vue.cjs.map +1 -0
- package/components/organisms/JSearchPanel.vue.js +13 -0
- package/components/organisms/JSearchPanel.vue.js.map +1 -0
- package/components/organisms/JSearchPanel.vue2.cjs +2 -0
- package/components/organisms/JSearchPanel.vue2.cjs.map +1 -0
- package/components/organisms/JSearchPanel.vue2.js +180 -0
- package/components/organisms/JSearchPanel.vue2.js.map +1 -0
- package/components/organisms/JSidebarAdvanced.vue.cjs +7 -0
- package/components/organisms/JSidebarAdvanced.vue.cjs.map +1 -0
- package/components/organisms/JSidebarAdvanced.vue.js +13 -0
- package/components/organisms/JSidebarAdvanced.vue.js.map +1 -0
- package/components/organisms/JSidebarAdvanced.vue2.cjs +2 -0
- package/components/organisms/JSidebarAdvanced.vue2.cjs.map +1 -0
- package/components/organisms/JSidebarAdvanced.vue2.js +236 -0
- package/components/organisms/JSidebarAdvanced.vue2.js.map +1 -0
- package/components/organisms/JSidebarSimple/JDynamicMenuItem.vue.cjs +2 -0
- package/components/organisms/JSidebarSimple/JDynamicMenuItem.vue.cjs.map +1 -0
- package/components/organisms/JSidebarSimple/JDynamicMenuItem.vue.js +132 -0
- package/components/organisms/JSidebarSimple/JDynamicMenuItem.vue.js.map +1 -0
- package/components/organisms/JSidebarSimple/JDynamicMenuItem.vue2.cjs +2 -0
- package/components/organisms/JSidebarSimple/JDynamicMenuItem.vue2.cjs.map +1 -0
- package/components/organisms/JSidebarSimple/JDynamicMenuItem.vue2.js +5 -0
- package/components/organisms/JSidebarSimple/JDynamicMenuItem.vue2.js.map +1 -0
- package/components/organisms/JSidebarSimple.vue.cjs +7 -0
- package/components/organisms/JSidebarSimple.vue.cjs.map +1 -0
- package/components/organisms/JSidebarSimple.vue.js +13 -0
- package/components/organisms/JSidebarSimple.vue.js.map +1 -0
- package/components/organisms/JSidebarSimple.vue2.cjs +2 -0
- package/components/organisms/JSidebarSimple.vue2.cjs.map +1 -0
- package/components/organisms/JSidebarSimple.vue2.js +110 -0
- package/components/organisms/JSidebarSimple.vue2.js.map +1 -0
- package/components/shadcn/Accordion.vue.cjs +2 -0
- package/components/shadcn/Accordion.vue.cjs.map +1 -0
- package/components/shadcn/Accordion.vue.js +31 -0
- package/components/shadcn/Accordion.vue.js.map +1 -0
- package/components/shadcn/Accordion.vue2.cjs +2 -0
- package/components/shadcn/Accordion.vue2.cjs.map +1 -0
- package/components/shadcn/Accordion.vue2.js +5 -0
- package/components/shadcn/Accordion.vue2.js.map +1 -0
- package/components/shadcn/AccordionContent.vue.cjs +2 -0
- package/components/shadcn/AccordionContent.vue.cjs.map +1 -0
- package/components/shadcn/AccordionContent.vue.js +30 -0
- package/components/shadcn/AccordionContent.vue.js.map +1 -0
- package/components/shadcn/AccordionContent.vue2.cjs +2 -0
- package/components/shadcn/AccordionContent.vue2.cjs.map +1 -0
- package/components/shadcn/AccordionContent.vue2.js +5 -0
- package/components/shadcn/AccordionContent.vue2.js.map +1 -0
- package/components/shadcn/AccordionItem.vue.cjs +2 -0
- package/components/shadcn/AccordionItem.vue.cjs.map +1 -0
- package/components/shadcn/AccordionItem.vue.js +30 -0
- package/components/shadcn/AccordionItem.vue.js.map +1 -0
- package/components/shadcn/AccordionItem.vue2.cjs +2 -0
- package/components/shadcn/AccordionItem.vue2.cjs.map +1 -0
- package/components/shadcn/AccordionItem.vue2.js +5 -0
- package/components/shadcn/AccordionItem.vue2.js.map +1 -0
- package/components/shadcn/AccordionTrigger.vue.cjs +2 -0
- package/components/shadcn/AccordionTrigger.vue.cjs.map +1 -0
- package/components/shadcn/AccordionTrigger.vue.js +39 -0
- package/components/shadcn/AccordionTrigger.vue.js.map +1 -0
- package/components/shadcn/AccordionTrigger.vue2.cjs +2 -0
- package/components/shadcn/AccordionTrigger.vue2.cjs.map +1 -0
- package/components/shadcn/AccordionTrigger.vue2.js +5 -0
- package/components/shadcn/AccordionTrigger.vue2.js.map +1 -0
- package/components/shadcn/Alert.vue.cjs +2 -0
- package/components/shadcn/Alert.vue.cjs.map +1 -0
- package/components/shadcn/Alert.vue.js +23 -0
- package/components/shadcn/Alert.vue.js.map +1 -0
- package/components/shadcn/Alert.vue2.cjs +2 -0
- package/components/shadcn/Alert.vue2.cjs.map +1 -0
- package/components/shadcn/Alert.vue2.js +5 -0
- package/components/shadcn/Alert.vue2.js.map +1 -0
- package/components/shadcn/AlertDescription.vue.cjs +2 -0
- package/components/shadcn/AlertDescription.vue.cjs.map +1 -0
- package/components/shadcn/AlertDescription.vue.js +20 -0
- package/components/shadcn/AlertDescription.vue.js.map +1 -0
- package/components/shadcn/AlertDescription.vue2.cjs +2 -0
- package/components/shadcn/AlertDescription.vue2.cjs.map +1 -0
- package/components/shadcn/AlertDescription.vue2.js +5 -0
- package/components/shadcn/AlertDescription.vue2.js.map +1 -0
- package/components/shadcn/AlertTitle.vue.cjs +2 -0
- package/components/shadcn/AlertTitle.vue.cjs.map +1 -0
- package/components/shadcn/AlertTitle.vue.js +20 -0
- package/components/shadcn/AlertTitle.vue.js.map +1 -0
- package/components/shadcn/AlertTitle.vue2.cjs +2 -0
- package/components/shadcn/AlertTitle.vue2.cjs.map +1 -0
- package/components/shadcn/AlertTitle.vue2.js +5 -0
- package/components/shadcn/AlertTitle.vue2.js.map +1 -0
- package/components/shadcn/Avatar.vue.cjs +2 -0
- package/components/shadcn/Avatar.vue.cjs.map +1 -0
- package/components/shadcn/Avatar.vue.js +27 -0
- package/components/shadcn/Avatar.vue.js.map +1 -0
- package/components/shadcn/Avatar.vue2.cjs +2 -0
- package/components/shadcn/Avatar.vue2.cjs.map +1 -0
- package/components/shadcn/Avatar.vue2.js +5 -0
- package/components/shadcn/Avatar.vue2.js.map +1 -0
- package/components/shadcn/AvatarFallback.vue.cjs +2 -0
- package/components/shadcn/AvatarFallback.vue.cjs.map +1 -0
- package/components/shadcn/AvatarFallback.vue.js +23 -0
- package/components/shadcn/AvatarFallback.vue.js.map +1 -0
- package/components/shadcn/AvatarFallback.vue2.cjs +2 -0
- package/components/shadcn/AvatarFallback.vue2.cjs.map +1 -0
- package/components/shadcn/AvatarFallback.vue2.js +5 -0
- package/components/shadcn/AvatarFallback.vue2.js.map +1 -0
- package/components/shadcn/AvatarImage.vue.cjs +2 -0
- package/components/shadcn/AvatarImage.vue.cjs.map +1 -0
- package/components/shadcn/AvatarImage.vue.js +25 -0
- package/components/shadcn/AvatarImage.vue.js.map +1 -0
- package/components/shadcn/AvatarImage.vue2.cjs +2 -0
- package/components/shadcn/AvatarImage.vue2.cjs.map +1 -0
- package/components/shadcn/AvatarImage.vue2.js +5 -0
- package/components/shadcn/AvatarImage.vue2.js.map +1 -0
- package/components/shadcn/Badge.vue.cjs +2 -0
- package/components/shadcn/Badge.vue.cjs.map +1 -0
- package/components/shadcn/Badge.vue.js +22 -0
- package/components/shadcn/Badge.vue.js.map +1 -0
- package/components/shadcn/Badge.vue2.cjs +2 -0
- package/components/shadcn/Badge.vue2.cjs.map +1 -0
- package/components/shadcn/Badge.vue2.js +5 -0
- package/components/shadcn/Badge.vue2.js.map +1 -0
- package/components/shadcn/Button.vue.cjs +2 -0
- package/components/shadcn/Button.vue.cjs.map +1 -0
- package/components/shadcn/Button.vue.js +31 -0
- package/components/shadcn/Button.vue.js.map +1 -0
- package/components/shadcn/Button.vue2.cjs +2 -0
- package/components/shadcn/Button.vue2.cjs.map +1 -0
- package/components/shadcn/Button.vue2.js +5 -0
- package/components/shadcn/Button.vue2.js.map +1 -0
- package/components/shadcn/ButtonGroup.vue.cjs +2 -0
- package/components/shadcn/ButtonGroup.vue.cjs.map +1 -0
- package/components/shadcn/ButtonGroup.vue.js +25 -0
- package/components/shadcn/ButtonGroup.vue.js.map +1 -0
- package/components/shadcn/ButtonGroup.vue2.cjs +2 -0
- package/components/shadcn/ButtonGroup.vue2.cjs.map +1 -0
- package/components/shadcn/ButtonGroup.vue2.js +5 -0
- package/components/shadcn/ButtonGroup.vue2.js.map +1 -0
- package/components/shadcn/ButtonGroupSeparator.vue.cjs +2 -0
- package/components/shadcn/ButtonGroupSeparator.vue.cjs.map +1 -0
- package/components/shadcn/ButtonGroupSeparator.vue.js +29 -0
- package/components/shadcn/ButtonGroupSeparator.vue.js.map +1 -0
- package/components/shadcn/ButtonGroupSeparator.vue2.cjs +2 -0
- package/components/shadcn/ButtonGroupSeparator.vue2.cjs.map +1 -0
- package/components/shadcn/ButtonGroupSeparator.vue2.js +5 -0
- package/components/shadcn/ButtonGroupSeparator.vue2.js.map +1 -0
- package/components/shadcn/Calendar.vue.cjs +2 -0
- package/components/shadcn/Calendar.vue.cjs.map +1 -0
- package/components/shadcn/Calendar.vue.js +121 -0
- package/components/shadcn/Calendar.vue.js.map +1 -0
- package/components/shadcn/Calendar.vue2.cjs +2 -0
- package/components/shadcn/Calendar.vue2.cjs.map +1 -0
- package/components/shadcn/Calendar.vue2.js +5 -0
- package/components/shadcn/Calendar.vue2.js.map +1 -0
- package/components/shadcn/CalendarCell.vue.cjs +2 -0
- package/components/shadcn/CalendarCell.vue.cjs.map +1 -0
- package/components/shadcn/CalendarCell.vue.js +5 -0
- package/components/shadcn/CalendarCell.vue.js.map +1 -0
- package/components/shadcn/CalendarCell.vue2.cjs +2 -0
- package/components/shadcn/CalendarCell.vue2.cjs.map +1 -0
- package/components/shadcn/CalendarCell.vue2.js +28 -0
- package/components/shadcn/CalendarCell.vue2.js.map +1 -0
- package/components/shadcn/CalendarCellTrigger.vue.cjs +2 -0
- package/components/shadcn/CalendarCellTrigger.vue.cjs.map +1 -0
- package/components/shadcn/CalendarCellTrigger.vue.js +5 -0
- package/components/shadcn/CalendarCellTrigger.vue.js.map +1 -0
- package/components/shadcn/CalendarCellTrigger.vue2.cjs +2 -0
- package/components/shadcn/CalendarCellTrigger.vue2.cjs.map +1 -0
- package/components/shadcn/CalendarCellTrigger.vue2.js +43 -0
- package/components/shadcn/CalendarCellTrigger.vue2.js.map +1 -0
- package/components/shadcn/CalendarGrid.vue.cjs +2 -0
- package/components/shadcn/CalendarGrid.vue.cjs.map +1 -0
- package/components/shadcn/CalendarGrid.vue.js +5 -0
- package/components/shadcn/CalendarGrid.vue.js.map +1 -0
- package/components/shadcn/CalendarGrid.vue2.cjs +2 -0
- package/components/shadcn/CalendarGrid.vue2.cjs.map +1 -0
- package/components/shadcn/CalendarGrid.vue2.js +27 -0
- package/components/shadcn/CalendarGrid.vue2.js.map +1 -0
- package/components/shadcn/CalendarGridBody.vue.cjs +2 -0
- package/components/shadcn/CalendarGridBody.vue.cjs.map +1 -0
- package/components/shadcn/CalendarGridBody.vue.js +5 -0
- package/components/shadcn/CalendarGridBody.vue.js.map +1 -0
- package/components/shadcn/CalendarGridBody.vue2.cjs +2 -0
- package/components/shadcn/CalendarGridBody.vue2.cjs.map +1 -0
- package/components/shadcn/CalendarGridBody.vue2.js +22 -0
- package/components/shadcn/CalendarGridBody.vue2.js.map +1 -0
- package/components/shadcn/CalendarGridHead.vue.cjs +2 -0
- package/components/shadcn/CalendarGridHead.vue.cjs.map +1 -0
- package/components/shadcn/CalendarGridHead.vue.js +5 -0
- package/components/shadcn/CalendarGridHead.vue.js.map +1 -0
- package/components/shadcn/CalendarGridHead.vue2.cjs +2 -0
- package/components/shadcn/CalendarGridHead.vue2.cjs.map +1 -0
- package/components/shadcn/CalendarGridHead.vue2.js +22 -0
- package/components/shadcn/CalendarGridHead.vue2.js.map +1 -0
- package/components/shadcn/CalendarGridRow.vue.cjs +2 -0
- package/components/shadcn/CalendarGridRow.vue.cjs.map +1 -0
- package/components/shadcn/CalendarGridRow.vue.js +5 -0
- package/components/shadcn/CalendarGridRow.vue.js.map +1 -0
- package/components/shadcn/CalendarGridRow.vue2.cjs +2 -0
- package/components/shadcn/CalendarGridRow.vue2.cjs.map +1 -0
- package/components/shadcn/CalendarGridRow.vue2.js +27 -0
- package/components/shadcn/CalendarGridRow.vue2.js.map +1 -0
- package/components/shadcn/CalendarHeadCell.vue.cjs +2 -0
- package/components/shadcn/CalendarHeadCell.vue.cjs.map +1 -0
- package/components/shadcn/CalendarHeadCell.vue.js +5 -0
- package/components/shadcn/CalendarHeadCell.vue.js.map +1 -0
- package/components/shadcn/CalendarHeadCell.vue2.cjs +2 -0
- package/components/shadcn/CalendarHeadCell.vue2.cjs.map +1 -0
- package/components/shadcn/CalendarHeadCell.vue2.js +27 -0
- package/components/shadcn/CalendarHeadCell.vue2.js.map +1 -0
- package/components/shadcn/CalendarHeader.vue.cjs +2 -0
- package/components/shadcn/CalendarHeader.vue.cjs.map +1 -0
- package/components/shadcn/CalendarHeader.vue.js +5 -0
- package/components/shadcn/CalendarHeader.vue.js.map +1 -0
- package/components/shadcn/CalendarHeader.vue2.cjs +2 -0
- package/components/shadcn/CalendarHeader.vue2.cjs.map +1 -0
- package/components/shadcn/CalendarHeader.vue2.js +27 -0
- package/components/shadcn/CalendarHeader.vue2.js.map +1 -0
- package/components/shadcn/CalendarHeading.vue.cjs +2 -0
- package/components/shadcn/CalendarHeading.vue.cjs.map +1 -0
- package/components/shadcn/CalendarHeading.vue.js +5 -0
- package/components/shadcn/CalendarHeading.vue.js.map +1 -0
- package/components/shadcn/CalendarHeading.vue2.cjs +2 -0
- package/components/shadcn/CalendarHeading.vue2.cjs.map +1 -0
- package/components/shadcn/CalendarHeading.vue2.js +29 -0
- package/components/shadcn/CalendarHeading.vue2.js.map +1 -0
- package/components/shadcn/CalendarNextButton.vue.cjs +2 -0
- package/components/shadcn/CalendarNextButton.vue.cjs.map +1 -0
- package/components/shadcn/CalendarNextButton.vue.js +5 -0
- package/components/shadcn/CalendarNextButton.vue.js.map +1 -0
- package/components/shadcn/CalendarNextButton.vue2.cjs +2 -0
- package/components/shadcn/CalendarNextButton.vue2.cjs.map +1 -0
- package/components/shadcn/CalendarNextButton.vue2.js +36 -0
- package/components/shadcn/CalendarNextButton.vue2.js.map +1 -0
- package/components/shadcn/CalendarPrevButton.vue.cjs +2 -0
- package/components/shadcn/CalendarPrevButton.vue.cjs.map +1 -0
- package/components/shadcn/CalendarPrevButton.vue.js +5 -0
- package/components/shadcn/CalendarPrevButton.vue.js.map +1 -0
- package/components/shadcn/CalendarPrevButton.vue2.cjs +2 -0
- package/components/shadcn/CalendarPrevButton.vue2.cjs.map +1 -0
- package/components/shadcn/CalendarPrevButton.vue2.js +36 -0
- package/components/shadcn/CalendarPrevButton.vue2.js.map +1 -0
- package/components/shadcn/Card.vue.cjs +2 -0
- package/components/shadcn/Card.vue.cjs.map +1 -0
- package/components/shadcn/Card.vue.js +25 -0
- package/components/shadcn/Card.vue.js.map +1 -0
- package/components/shadcn/Card.vue2.cjs +2 -0
- package/components/shadcn/Card.vue2.cjs.map +1 -0
- package/components/shadcn/Card.vue2.js +5 -0
- package/components/shadcn/Card.vue2.js.map +1 -0
- package/components/shadcn/CardContent.vue.cjs +2 -0
- package/components/shadcn/CardContent.vue.cjs.map +1 -0
- package/components/shadcn/CardContent.vue.js +20 -0
- package/components/shadcn/CardContent.vue.js.map +1 -0
- package/components/shadcn/CardContent.vue2.cjs +2 -0
- package/components/shadcn/CardContent.vue2.cjs.map +1 -0
- package/components/shadcn/CardContent.vue2.js +5 -0
- package/components/shadcn/CardContent.vue2.js.map +1 -0
- package/components/shadcn/CardDescription.vue.cjs +2 -0
- package/components/shadcn/CardDescription.vue.cjs.map +1 -0
- package/components/shadcn/CardDescription.vue.js +20 -0
- package/components/shadcn/CardDescription.vue.js.map +1 -0
- package/components/shadcn/CardDescription.vue2.cjs +2 -0
- package/components/shadcn/CardDescription.vue2.cjs.map +1 -0
- package/components/shadcn/CardDescription.vue2.js +5 -0
- package/components/shadcn/CardDescription.vue2.js.map +1 -0
- package/components/shadcn/CardFooter.vue.cjs +2 -0
- package/components/shadcn/CardFooter.vue.cjs.map +1 -0
- package/components/shadcn/CardFooter.vue.js +20 -0
- package/components/shadcn/CardFooter.vue.js.map +1 -0
- package/components/shadcn/CardFooter.vue2.cjs +2 -0
- package/components/shadcn/CardFooter.vue2.cjs.map +1 -0
- package/components/shadcn/CardFooter.vue2.js +5 -0
- package/components/shadcn/CardFooter.vue2.js.map +1 -0
- package/components/shadcn/CardHeader.vue.cjs +2 -0
- package/components/shadcn/CardHeader.vue.cjs.map +1 -0
- package/components/shadcn/CardHeader.vue.js +20 -0
- package/components/shadcn/CardHeader.vue.js.map +1 -0
- package/components/shadcn/CardHeader.vue2.cjs +2 -0
- package/components/shadcn/CardHeader.vue2.cjs.map +1 -0
- package/components/shadcn/CardHeader.vue2.js +5 -0
- package/components/shadcn/CardHeader.vue2.js.map +1 -0
- package/components/shadcn/CardTitle.vue.cjs +2 -0
- package/components/shadcn/CardTitle.vue.cjs.map +1 -0
- package/components/shadcn/CardTitle.vue.js +22 -0
- package/components/shadcn/CardTitle.vue.js.map +1 -0
- package/components/shadcn/CardTitle.vue2.cjs +2 -0
- package/components/shadcn/CardTitle.vue2.cjs.map +1 -0
- package/components/shadcn/CardTitle.vue2.js +5 -0
- package/components/shadcn/CardTitle.vue2.js.map +1 -0
- package/components/shadcn/Checkbox.vue.cjs +2 -0
- package/components/shadcn/Checkbox.vue.cjs.map +1 -0
- package/components/shadcn/Checkbox.vue.js +46 -0
- package/components/shadcn/Checkbox.vue.js.map +1 -0
- package/components/shadcn/Checkbox.vue2.cjs +2 -0
- package/components/shadcn/Checkbox.vue2.cjs.map +1 -0
- package/components/shadcn/Checkbox.vue2.js +5 -0
- package/components/shadcn/Checkbox.vue2.js.map +1 -0
- package/components/shadcn/Combobox.vue.cjs +2 -0
- package/components/shadcn/Combobox.vue.cjs.map +1 -0
- package/components/shadcn/Combobox.vue.js +40 -0
- package/components/shadcn/Combobox.vue.js.map +1 -0
- package/components/shadcn/Combobox.vue2.cjs +2 -0
- package/components/shadcn/Combobox.vue2.cjs.map +1 -0
- package/components/shadcn/Combobox.vue2.js +5 -0
- package/components/shadcn/Combobox.vue2.js.map +1 -0
- package/components/shadcn/ComboboxAnchor.vue.cjs +2 -0
- package/components/shadcn/ComboboxAnchor.vue.cjs.map +1 -0
- package/components/shadcn/ComboboxAnchor.vue.js +28 -0
- package/components/shadcn/ComboboxAnchor.vue.js.map +1 -0
- package/components/shadcn/ComboboxAnchor.vue2.cjs +2 -0
- package/components/shadcn/ComboboxAnchor.vue2.cjs.map +1 -0
- package/components/shadcn/ComboboxAnchor.vue2.js +5 -0
- package/components/shadcn/ComboboxAnchor.vue2.js.map +1 -0
- package/components/shadcn/ComboboxEmpty.vue.cjs +2 -0
- package/components/shadcn/ComboboxEmpty.vue.cjs.map +1 -0
- package/components/shadcn/ComboboxEmpty.vue.js +27 -0
- package/components/shadcn/ComboboxEmpty.vue.js.map +1 -0
- package/components/shadcn/ComboboxEmpty.vue2.cjs +2 -0
- package/components/shadcn/ComboboxEmpty.vue2.cjs.map +1 -0
- package/components/shadcn/ComboboxEmpty.vue2.js +5 -0
- package/components/shadcn/ComboboxEmpty.vue2.js.map +1 -0
- package/components/shadcn/ComboboxGroup.vue.cjs +2 -0
- package/components/shadcn/ComboboxGroup.vue.cjs.map +1 -0
- package/components/shadcn/ComboboxGroup.vue.js +37 -0
- package/components/shadcn/ComboboxGroup.vue.js.map +1 -0
- package/components/shadcn/ComboboxGroup.vue2.cjs +2 -0
- package/components/shadcn/ComboboxGroup.vue2.cjs.map +1 -0
- package/components/shadcn/ComboboxGroup.vue2.js +5 -0
- package/components/shadcn/ComboboxGroup.vue2.js.map +1 -0
- package/components/shadcn/ComboboxInput.vue.cjs +2 -0
- package/components/shadcn/ComboboxInput.vue.cjs.map +1 -0
- package/components/shadcn/ComboboxInput.vue.js +32 -0
- package/components/shadcn/ComboboxInput.vue.js.map +1 -0
- package/components/shadcn/ComboboxInput.vue2.cjs +2 -0
- package/components/shadcn/ComboboxInput.vue2.cjs.map +1 -0
- package/components/shadcn/ComboboxInput.vue2.js +5 -0
- package/components/shadcn/ComboboxInput.vue2.js.map +1 -0
- package/components/shadcn/ComboboxItem.vue.cjs +2 -0
- package/components/shadcn/ComboboxItem.vue.cjs.map +1 -0
- package/components/shadcn/ComboboxItem.vue.js +31 -0
- package/components/shadcn/ComboboxItem.vue.js.map +1 -0
- package/components/shadcn/ComboboxItem.vue2.cjs +2 -0
- package/components/shadcn/ComboboxItem.vue2.cjs.map +1 -0
- package/components/shadcn/ComboboxItem.vue2.js +5 -0
- package/components/shadcn/ComboboxItem.vue2.js.map +1 -0
- package/components/shadcn/ComboboxList.vue.cjs +2 -0
- package/components/shadcn/ComboboxList.vue.cjs.map +1 -0
- package/components/shadcn/ComboboxList.vue.js +59 -0
- package/components/shadcn/ComboboxList.vue.js.map +1 -0
- package/components/shadcn/ComboboxList.vue2.cjs +2 -0
- package/components/shadcn/ComboboxList.vue2.cjs.map +1 -0
- package/components/shadcn/ComboboxList.vue2.js +5 -0
- package/components/shadcn/ComboboxList.vue2.js.map +1 -0
- package/components/shadcn/ComboboxTrigger.vue.cjs +2 -0
- package/components/shadcn/ComboboxTrigger.vue.cjs.map +1 -0
- package/components/shadcn/ComboboxTrigger.vue.js +29 -0
- package/components/shadcn/ComboboxTrigger.vue.js.map +1 -0
- package/components/shadcn/ComboboxTrigger.vue2.cjs +2 -0
- package/components/shadcn/ComboboxTrigger.vue2.cjs.map +1 -0
- package/components/shadcn/ComboboxTrigger.vue2.js +5 -0
- package/components/shadcn/ComboboxTrigger.vue2.js.map +1 -0
- package/components/shadcn/ContextMenu.vue.cjs +2 -0
- package/components/shadcn/ContextMenu.vue.cjs.map +1 -0
- package/components/shadcn/ContextMenu.vue.js +24 -0
- package/components/shadcn/ContextMenu.vue.js.map +1 -0
- package/components/shadcn/ContextMenu.vue2.cjs +2 -0
- package/components/shadcn/ContextMenu.vue2.cjs.map +1 -0
- package/components/shadcn/ContextMenu.vue2.js +5 -0
- package/components/shadcn/ContextMenu.vue2.js.map +1 -0
- package/components/shadcn/ContextMenuContent.vue.cjs +2 -0
- package/components/shadcn/ContextMenuContent.vue.cjs.map +1 -0
- package/components/shadcn/ContextMenuContent.vue.js +50 -0
- package/components/shadcn/ContextMenuContent.vue.js.map +1 -0
- package/components/shadcn/ContextMenuContent.vue2.cjs +2 -0
- package/components/shadcn/ContextMenuContent.vue2.cjs.map +1 -0
- package/components/shadcn/ContextMenuContent.vue2.js +5 -0
- package/components/shadcn/ContextMenuContent.vue2.js.map +1 -0
- package/components/shadcn/ContextMenuGroup.vue.cjs +2 -0
- package/components/shadcn/ContextMenuGroup.vue.cjs.map +1 -0
- package/components/shadcn/ContextMenuGroup.vue.js +22 -0
- package/components/shadcn/ContextMenuGroup.vue.js.map +1 -0
- package/components/shadcn/ContextMenuGroup.vue2.cjs +2 -0
- package/components/shadcn/ContextMenuGroup.vue2.cjs.map +1 -0
- package/components/shadcn/ContextMenuGroup.vue2.js +5 -0
- package/components/shadcn/ContextMenuGroup.vue2.js.map +1 -0
- package/components/shadcn/ContextMenuItem.vue.cjs +2 -0
- package/components/shadcn/ContextMenuItem.vue.cjs.map +1 -0
- package/components/shadcn/ContextMenuItem.vue.js +35 -0
- package/components/shadcn/ContextMenuItem.vue.js.map +1 -0
- package/components/shadcn/ContextMenuItem.vue2.cjs +2 -0
- package/components/shadcn/ContextMenuItem.vue2.cjs.map +1 -0
- package/components/shadcn/ContextMenuItem.vue2.js +5 -0
- package/components/shadcn/ContextMenuItem.vue2.js.map +1 -0
- package/components/shadcn/ContextMenuLabel.vue.cjs +2 -0
- package/components/shadcn/ContextMenuLabel.vue.cjs.map +1 -0
- package/components/shadcn/ContextMenuLabel.vue.js +32 -0
- package/components/shadcn/ContextMenuLabel.vue.js.map +1 -0
- package/components/shadcn/ContextMenuLabel.vue2.cjs +2 -0
- package/components/shadcn/ContextMenuLabel.vue2.cjs.map +1 -0
- package/components/shadcn/ContextMenuLabel.vue2.js +5 -0
- package/components/shadcn/ContextMenuLabel.vue2.js.map +1 -0
- package/components/shadcn/ContextMenuSeparator.vue.cjs +2 -0
- package/components/shadcn/ContextMenuSeparator.vue.cjs.map +1 -0
- package/components/shadcn/ContextMenuSeparator.vue.js +22 -0
- package/components/shadcn/ContextMenuSeparator.vue.js.map +1 -0
- package/components/shadcn/ContextMenuSeparator.vue2.cjs +2 -0
- package/components/shadcn/ContextMenuSeparator.vue2.cjs.map +1 -0
- package/components/shadcn/ContextMenuSeparator.vue2.js +5 -0
- package/components/shadcn/ContextMenuSeparator.vue2.js.map +1 -0
- package/components/shadcn/ContextMenuSub.vue.cjs +2 -0
- package/components/shadcn/ContextMenuSub.vue.cjs.map +1 -0
- package/components/shadcn/ContextMenuSub.vue.js +23 -0
- package/components/shadcn/ContextMenuSub.vue.js.map +1 -0
- package/components/shadcn/ContextMenuSub.vue2.cjs +2 -0
- package/components/shadcn/ContextMenuSub.vue2.cjs.map +1 -0
- package/components/shadcn/ContextMenuSub.vue2.js +5 -0
- package/components/shadcn/ContextMenuSub.vue2.js.map +1 -0
- package/components/shadcn/ContextMenuSubContent.vue.cjs +2 -0
- package/components/shadcn/ContextMenuSubContent.vue.cjs.map +1 -0
- package/components/shadcn/ContextMenuSubContent.vue.js +48 -0
- package/components/shadcn/ContextMenuSubContent.vue.js.map +1 -0
- package/components/shadcn/ContextMenuSubContent.vue2.cjs +2 -0
- package/components/shadcn/ContextMenuSubContent.vue2.cjs.map +1 -0
- package/components/shadcn/ContextMenuSubContent.vue2.js +5 -0
- package/components/shadcn/ContextMenuSubContent.vue2.js.map +1 -0
- package/components/shadcn/ContextMenuSubTrigger.vue.cjs +2 -0
- package/components/shadcn/ContextMenuSubTrigger.vue.cjs.map +1 -0
- package/components/shadcn/ContextMenuSubTrigger.vue.js +36 -0
- package/components/shadcn/ContextMenuSubTrigger.vue.js.map +1 -0
- package/components/shadcn/ContextMenuSubTrigger.vue2.cjs +2 -0
- package/components/shadcn/ContextMenuSubTrigger.vue2.cjs.map +1 -0
- package/components/shadcn/ContextMenuSubTrigger.vue2.js +5 -0
- package/components/shadcn/ContextMenuSubTrigger.vue2.js.map +1 -0
- package/components/shadcn/ContextMenuTrigger.vue.cjs +2 -0
- package/components/shadcn/ContextMenuTrigger.vue.cjs.map +1 -0
- package/components/shadcn/ContextMenuTrigger.vue.js +23 -0
- package/components/shadcn/ContextMenuTrigger.vue.js.map +1 -0
- package/components/shadcn/ContextMenuTrigger.vue2.cjs +2 -0
- package/components/shadcn/ContextMenuTrigger.vue2.cjs.map +1 -0
- package/components/shadcn/ContextMenuTrigger.vue2.js +5 -0
- package/components/shadcn/ContextMenuTrigger.vue2.js.map +1 -0
- package/components/shadcn/Dialog.vue.cjs +2 -0
- package/components/shadcn/Dialog.vue.cjs.map +1 -0
- package/components/shadcn/Dialog.vue.js +34 -0
- package/components/shadcn/Dialog.vue.js.map +1 -0
- package/components/shadcn/Dialog.vue2.cjs +2 -0
- package/components/shadcn/Dialog.vue2.cjs.map +1 -0
- package/components/shadcn/Dialog.vue2.js +5 -0
- package/components/shadcn/Dialog.vue2.js.map +1 -0
- package/components/shadcn/DialogBody.vue.cjs +2 -0
- package/components/shadcn/DialogBody.vue.cjs.map +1 -0
- package/components/shadcn/DialogBody.vue.js +19 -0
- package/components/shadcn/DialogBody.vue.js.map +1 -0
- package/components/shadcn/DialogBody.vue2.cjs +2 -0
- package/components/shadcn/DialogBody.vue2.cjs.map +1 -0
- package/components/shadcn/DialogBody.vue2.js +5 -0
- package/components/shadcn/DialogBody.vue2.js.map +1 -0
- package/components/shadcn/DialogContent.vue.cjs +2 -0
- package/components/shadcn/DialogContent.vue.cjs.map +1 -0
- package/components/shadcn/DialogContent.vue.js +19 -0
- package/components/shadcn/DialogContent.vue.js.map +1 -0
- package/components/shadcn/DialogContent.vue2.cjs +2 -0
- package/components/shadcn/DialogContent.vue2.cjs.map +1 -0
- package/components/shadcn/DialogContent.vue2.js +5 -0
- package/components/shadcn/DialogContent.vue2.js.map +1 -0
- package/components/shadcn/DialogFooter.vue.cjs +2 -0
- package/components/shadcn/DialogFooter.vue.cjs.map +1 -0
- package/components/shadcn/DialogFooter.vue.js +19 -0
- package/components/shadcn/DialogFooter.vue.js.map +1 -0
- package/components/shadcn/DialogFooter.vue2.cjs +2 -0
- package/components/shadcn/DialogFooter.vue2.cjs.map +1 -0
- package/components/shadcn/DialogFooter.vue2.js +5 -0
- package/components/shadcn/DialogFooter.vue2.js.map +1 -0
- package/components/shadcn/DialogHeader.vue.cjs +2 -0
- package/components/shadcn/DialogHeader.vue.cjs.map +1 -0
- package/components/shadcn/DialogHeader.vue.js +19 -0
- package/components/shadcn/DialogHeader.vue.js.map +1 -0
- package/components/shadcn/DialogHeader.vue2.cjs +2 -0
- package/components/shadcn/DialogHeader.vue2.cjs.map +1 -0
- package/components/shadcn/DialogHeader.vue2.js +5 -0
- package/components/shadcn/DialogHeader.vue2.js.map +1 -0
- package/components/shadcn/DialogTitle.vue.cjs +2 -0
- package/components/shadcn/DialogTitle.vue.cjs.map +1 -0
- package/components/shadcn/DialogTitle.vue.js +19 -0
- package/components/shadcn/DialogTitle.vue.js.map +1 -0
- package/components/shadcn/DialogTitle.vue2.cjs +2 -0
- package/components/shadcn/DialogTitle.vue2.cjs.map +1 -0
- package/components/shadcn/DialogTitle.vue2.js +5 -0
- package/components/shadcn/DialogTitle.vue2.js.map +1 -0
- package/components/shadcn/Field.vue.cjs +2 -0
- package/components/shadcn/Field.vue.cjs.map +1 -0
- package/components/shadcn/Field.vue.js +28 -0
- package/components/shadcn/Field.vue.js.map +1 -0
- package/components/shadcn/Field.vue2.cjs +2 -0
- package/components/shadcn/Field.vue2.cjs.map +1 -0
- package/components/shadcn/Field.vue2.js +5 -0
- package/components/shadcn/Field.vue2.js.map +1 -0
- package/components/shadcn/FieldContent.vue.cjs +2 -0
- package/components/shadcn/FieldContent.vue.cjs.map +1 -0
- package/components/shadcn/FieldContent.vue.js +24 -0
- package/components/shadcn/FieldContent.vue.js.map +1 -0
- package/components/shadcn/FieldContent.vue2.cjs +2 -0
- package/components/shadcn/FieldContent.vue2.cjs.map +1 -0
- package/components/shadcn/FieldContent.vue2.js +5 -0
- package/components/shadcn/FieldContent.vue2.js.map +1 -0
- package/components/shadcn/FieldDescription.vue.cjs +2 -0
- package/components/shadcn/FieldDescription.vue.cjs.map +1 -0
- package/components/shadcn/FieldDescription.vue.js +26 -0
- package/components/shadcn/FieldDescription.vue.js.map +1 -0
- package/components/shadcn/FieldDescription.vue2.cjs +2 -0
- package/components/shadcn/FieldDescription.vue2.cjs.map +1 -0
- package/components/shadcn/FieldDescription.vue2.js +5 -0
- package/components/shadcn/FieldDescription.vue2.js.map +1 -0
- package/components/shadcn/FieldError.vue.cjs +2 -0
- package/components/shadcn/FieldError.vue.cjs.map +1 -0
- package/components/shadcn/FieldError.vue.js +31 -0
- package/components/shadcn/FieldError.vue.js.map +1 -0
- package/components/shadcn/FieldError.vue2.cjs +2 -0
- package/components/shadcn/FieldError.vue2.cjs.map +1 -0
- package/components/shadcn/FieldError.vue2.js +5 -0
- package/components/shadcn/FieldError.vue2.js.map +1 -0
- package/components/shadcn/FieldGroup.vue.cjs +2 -0
- package/components/shadcn/FieldGroup.vue.cjs.map +1 -0
- package/components/shadcn/FieldGroup.vue.js +24 -0
- package/components/shadcn/FieldGroup.vue.js.map +1 -0
- package/components/shadcn/FieldGroup.vue2.cjs +2 -0
- package/components/shadcn/FieldGroup.vue2.cjs.map +1 -0
- package/components/shadcn/FieldGroup.vue2.js +5 -0
- package/components/shadcn/FieldGroup.vue2.js.map +1 -0
- package/components/shadcn/FieldLabel.vue.cjs +2 -0
- package/components/shadcn/FieldLabel.vue.cjs.map +1 -0
- package/components/shadcn/FieldLabel.vue.js +31 -0
- package/components/shadcn/FieldLabel.vue.js.map +1 -0
- package/components/shadcn/FieldLabel.vue2.cjs +2 -0
- package/components/shadcn/FieldLabel.vue2.cjs.map +1 -0
- package/components/shadcn/FieldLabel.vue2.js +5 -0
- package/components/shadcn/FieldLabel.vue2.js.map +1 -0
- package/components/shadcn/Input.vue.cjs +2 -0
- package/components/shadcn/Input.vue.cjs.map +1 -0
- package/components/shadcn/Input.vue.js +28 -0
- package/components/shadcn/Input.vue.js.map +1 -0
- package/components/shadcn/Input.vue2.cjs +2 -0
- package/components/shadcn/Input.vue2.cjs.map +1 -0
- package/components/shadcn/Input.vue2.js +5 -0
- package/components/shadcn/Input.vue2.js.map +1 -0
- package/components/shadcn/Kbd.vue.cjs +2 -0
- package/components/shadcn/Kbd.vue.cjs.map +1 -0
- package/components/shadcn/Kbd.vue.js +25 -0
- package/components/shadcn/Kbd.vue.js.map +1 -0
- package/components/shadcn/Kbd.vue2.cjs +2 -0
- package/components/shadcn/Kbd.vue2.cjs.map +1 -0
- package/components/shadcn/Kbd.vue2.js +5 -0
- package/components/shadcn/Kbd.vue2.js.map +1 -0
- package/components/shadcn/Label.vue.cjs +2 -0
- package/components/shadcn/Label.vue.cjs.map +1 -0
- package/components/shadcn/Label.vue.js +31 -0
- package/components/shadcn/Label.vue.js.map +1 -0
- package/components/shadcn/Label.vue2.cjs +2 -0
- package/components/shadcn/Label.vue2.cjs.map +1 -0
- package/components/shadcn/Label.vue2.js +5 -0
- package/components/shadcn/Label.vue2.js.map +1 -0
- package/components/shadcn/Popover.vue.cjs +2 -0
- package/components/shadcn/Popover.vue.cjs.map +1 -0
- package/components/shadcn/Popover.vue.js +24 -0
- package/components/shadcn/Popover.vue.js.map +1 -0
- package/components/shadcn/Popover.vue2.cjs +2 -0
- package/components/shadcn/Popover.vue2.cjs.map +1 -0
- package/components/shadcn/Popover.vue2.js +5 -0
- package/components/shadcn/Popover.vue2.js.map +1 -0
- package/components/shadcn/PopoverContent.vue.cjs +2 -0
- package/components/shadcn/PopoverContent.vue.cjs.map +1 -0
- package/components/shadcn/PopoverContent.vue.js +56 -0
- package/components/shadcn/PopoverContent.vue.js.map +1 -0
- package/components/shadcn/PopoverContent.vue2.cjs +2 -0
- package/components/shadcn/PopoverContent.vue2.cjs.map +1 -0
- package/components/shadcn/PopoverContent.vue2.js +5 -0
- package/components/shadcn/PopoverContent.vue2.js.map +1 -0
- package/components/shadcn/PopoverTrigger.vue.cjs +2 -0
- package/components/shadcn/PopoverTrigger.vue.cjs.map +1 -0
- package/components/shadcn/PopoverTrigger.vue.js +22 -0
- package/components/shadcn/PopoverTrigger.vue.js.map +1 -0
- package/components/shadcn/PopoverTrigger.vue2.cjs +2 -0
- package/components/shadcn/PopoverTrigger.vue2.cjs.map +1 -0
- package/components/shadcn/PopoverTrigger.vue2.js +5 -0
- package/components/shadcn/PopoverTrigger.vue2.js.map +1 -0
- package/components/shadcn/Progress.vue.cjs +2 -0
- package/components/shadcn/Progress.vue.cjs.map +1 -0
- package/components/shadcn/Progress.vue.js +37 -0
- package/components/shadcn/Progress.vue.js.map +1 -0
- package/components/shadcn/Progress.vue2.cjs +2 -0
- package/components/shadcn/Progress.vue2.cjs.map +1 -0
- package/components/shadcn/Progress.vue2.js +5 -0
- package/components/shadcn/Progress.vue2.js.map +1 -0
- package/components/shadcn/RadioGroup.vue.cjs +2 -0
- package/components/shadcn/RadioGroup.vue.cjs.map +1 -0
- package/components/shadcn/RadioGroup.vue.js +36 -0
- package/components/shadcn/RadioGroup.vue.js.map +1 -0
- package/components/shadcn/RadioGroup.vue2.cjs +2 -0
- package/components/shadcn/RadioGroup.vue2.cjs.map +1 -0
- package/components/shadcn/RadioGroup.vue2.js +5 -0
- package/components/shadcn/RadioGroup.vue2.js.map +1 -0
- package/components/shadcn/RadioGroupItem.vue.cjs +2 -0
- package/components/shadcn/RadioGroupItem.vue.cjs.map +1 -0
- package/components/shadcn/RadioGroupItem.vue.js +41 -0
- package/components/shadcn/RadioGroupItem.vue.js.map +1 -0
- package/components/shadcn/RadioGroupItem.vue2.cjs +2 -0
- package/components/shadcn/RadioGroupItem.vue2.cjs.map +1 -0
- package/components/shadcn/RadioGroupItem.vue2.js +5 -0
- package/components/shadcn/RadioGroupItem.vue2.js.map +1 -0
- package/components/shadcn/Select.vue.cjs +2 -0
- package/components/shadcn/Select.vue.cjs.map +1 -0
- package/components/shadcn/Select.vue.js +32 -0
- package/components/shadcn/Select.vue.js.map +1 -0
- package/components/shadcn/Select.vue2.cjs +2 -0
- package/components/shadcn/Select.vue2.cjs.map +1 -0
- package/components/shadcn/Select.vue2.js +5 -0
- package/components/shadcn/Select.vue2.js.map +1 -0
- package/components/shadcn/SelectContent.vue.cjs +2 -0
- package/components/shadcn/SelectContent.vue.cjs.map +1 -0
- package/components/shadcn/SelectContent.vue.js +69 -0
- package/components/shadcn/SelectContent.vue.js.map +1 -0
- package/components/shadcn/SelectContent.vue2.cjs +2 -0
- package/components/shadcn/SelectContent.vue2.cjs.map +1 -0
- package/components/shadcn/SelectContent.vue2.js +5 -0
- package/components/shadcn/SelectContent.vue2.js.map +1 -0
- package/components/shadcn/SelectGroup.vue.cjs +2 -0
- package/components/shadcn/SelectGroup.vue.cjs.map +1 -0
- package/components/shadcn/SelectGroup.vue.js +27 -0
- package/components/shadcn/SelectGroup.vue.js.map +1 -0
- package/components/shadcn/SelectGroup.vue2.cjs +2 -0
- package/components/shadcn/SelectGroup.vue2.cjs.map +1 -0
- package/components/shadcn/SelectGroup.vue2.js +5 -0
- package/components/shadcn/SelectGroup.vue2.js.map +1 -0
- package/components/shadcn/SelectItem.vue.cjs +2 -0
- package/components/shadcn/SelectItem.vue.cjs.map +1 -0
- package/components/shadcn/SelectItem.vue.js +47 -0
- package/components/shadcn/SelectItem.vue.js.map +1 -0
- package/components/shadcn/SelectItem.vue2.cjs +2 -0
- package/components/shadcn/SelectItem.vue2.cjs.map +1 -0
- package/components/shadcn/SelectItem.vue2.js +5 -0
- package/components/shadcn/SelectItem.vue2.js.map +1 -0
- package/components/shadcn/SelectLabel.vue.cjs +2 -0
- package/components/shadcn/SelectLabel.vue.cjs.map +1 -0
- package/components/shadcn/SelectLabel.vue.js +27 -0
- package/components/shadcn/SelectLabel.vue.js.map +1 -0
- package/components/shadcn/SelectLabel.vue2.cjs +2 -0
- package/components/shadcn/SelectLabel.vue2.cjs.map +1 -0
- package/components/shadcn/SelectLabel.vue2.js +5 -0
- package/components/shadcn/SelectLabel.vue2.js.map +1 -0
- package/components/shadcn/SelectScrollDownButton.vue.cjs +2 -0
- package/components/shadcn/SelectScrollDownButton.vue.cjs.map +1 -0
- package/components/shadcn/SelectScrollDownButton.vue.js +5 -0
- package/components/shadcn/SelectScrollDownButton.vue.js.map +1 -0
- package/components/shadcn/SelectScrollDownButton.vue2.cjs +2 -0
- package/components/shadcn/SelectScrollDownButton.vue2.cjs.map +1 -0
- package/components/shadcn/SelectScrollDownButton.vue2.js +30 -0
- package/components/shadcn/SelectScrollDownButton.vue2.js.map +1 -0
- package/components/shadcn/SelectScrollUpButton.vue.cjs +2 -0
- package/components/shadcn/SelectScrollUpButton.vue.cjs.map +1 -0
- package/components/shadcn/SelectScrollUpButton.vue.js +5 -0
- package/components/shadcn/SelectScrollUpButton.vue.js.map +1 -0
- package/components/shadcn/SelectScrollUpButton.vue2.cjs +2 -0
- package/components/shadcn/SelectScrollUpButton.vue2.cjs.map +1 -0
- package/components/shadcn/SelectScrollUpButton.vue2.js +30 -0
- package/components/shadcn/SelectScrollUpButton.vue2.js.map +1 -0
- package/components/shadcn/SelectTrigger.vue.cjs +2 -0
- package/components/shadcn/SelectTrigger.vue.cjs.map +1 -0
- package/components/shadcn/SelectTrigger.vue.js +39 -0
- package/components/shadcn/SelectTrigger.vue.js.map +1 -0
- package/components/shadcn/SelectTrigger.vue2.cjs +2 -0
- package/components/shadcn/SelectTrigger.vue2.cjs.map +1 -0
- package/components/shadcn/SelectTrigger.vue2.js +5 -0
- package/components/shadcn/SelectTrigger.vue2.js.map +1 -0
- package/components/shadcn/SelectValue.vue.cjs +2 -0
- package/components/shadcn/SelectValue.vue.cjs.map +1 -0
- package/components/shadcn/SelectValue.vue.js +23 -0
- package/components/shadcn/SelectValue.vue.js.map +1 -0
- package/components/shadcn/SelectValue.vue2.cjs +2 -0
- package/components/shadcn/SelectValue.vue2.cjs.map +1 -0
- package/components/shadcn/SelectValue.vue2.js +5 -0
- package/components/shadcn/SelectValue.vue2.js.map +1 -0
- package/components/shadcn/Separator.vue.cjs +2 -0
- package/components/shadcn/Separator.vue.cjs.map +1 -0
- package/components/shadcn/Separator.vue.js +28 -0
- package/components/shadcn/Separator.vue.js.map +1 -0
- package/components/shadcn/Separator.vue2.cjs +2 -0
- package/components/shadcn/Separator.vue2.cjs.map +1 -0
- package/components/shadcn/Separator.vue2.js +5 -0
- package/components/shadcn/Separator.vue2.js.map +1 -0
- package/components/shadcn/Switch.vue.cjs +2 -0
- package/components/shadcn/Switch.vue.cjs.map +1 -0
- package/components/shadcn/Switch.vue.js +45 -0
- package/components/shadcn/Switch.vue.js.map +1 -0
- package/components/shadcn/Switch.vue2.cjs +2 -0
- package/components/shadcn/Switch.vue2.cjs.map +1 -0
- package/components/shadcn/Switch.vue2.js +5 -0
- package/components/shadcn/Switch.vue2.js.map +1 -0
- package/components/shadcn/Tabs.vue.cjs +2 -0
- package/components/shadcn/Tabs.vue.cjs.map +1 -0
- package/components/shadcn/Tabs.vue.js +34 -0
- package/components/shadcn/Tabs.vue.js.map +1 -0
- package/components/shadcn/Tabs.vue2.cjs +2 -0
- package/components/shadcn/Tabs.vue2.cjs.map +1 -0
- package/components/shadcn/Tabs.vue2.js +5 -0
- package/components/shadcn/Tabs.vue2.js.map +1 -0
- package/components/shadcn/TabsContent.vue.cjs +2 -0
- package/components/shadcn/TabsContent.vue.cjs.map +1 -0
- package/components/shadcn/TabsContent.vue.js +32 -0
- package/components/shadcn/TabsContent.vue.js.map +1 -0
- package/components/shadcn/TabsContent.vue2.cjs +2 -0
- package/components/shadcn/TabsContent.vue2.cjs.map +1 -0
- package/components/shadcn/TabsContent.vue2.js +5 -0
- package/components/shadcn/TabsContent.vue2.js.map +1 -0
- package/components/shadcn/TabsList.vue.cjs +2 -0
- package/components/shadcn/TabsList.vue.cjs.map +1 -0
- package/components/shadcn/TabsList.vue.js +31 -0
- package/components/shadcn/TabsList.vue.js.map +1 -0
- package/components/shadcn/TabsList.vue2.cjs +2 -0
- package/components/shadcn/TabsList.vue2.cjs.map +1 -0
- package/components/shadcn/TabsList.vue2.js +5 -0
- package/components/shadcn/TabsList.vue2.js.map +1 -0
- package/components/shadcn/TabsTrigger.vue.cjs +2 -0
- package/components/shadcn/TabsTrigger.vue.cjs.map +1 -0
- package/components/shadcn/TabsTrigger.vue.js +32 -0
- package/components/shadcn/TabsTrigger.vue.js.map +1 -0
- package/components/shadcn/TabsTrigger.vue2.cjs +2 -0
- package/components/shadcn/TabsTrigger.vue2.cjs.map +1 -0
- package/components/shadcn/TabsTrigger.vue2.js +5 -0
- package/components/shadcn/TabsTrigger.vue2.js.map +1 -0
- package/components/shadcn/Textarea.vue.cjs +2 -0
- package/components/shadcn/Textarea.vue.cjs.map +1 -0
- package/components/shadcn/Textarea.vue.js +28 -0
- package/components/shadcn/Textarea.vue.js.map +1 -0
- package/components/shadcn/Textarea.vue2.cjs +2 -0
- package/components/shadcn/Textarea.vue2.cjs.map +1 -0
- package/components/shadcn/Textarea.vue2.js +5 -0
- package/components/shadcn/Textarea.vue2.js.map +1 -0
- package/components/shadcn/Tooltip.vue.cjs +2 -0
- package/components/shadcn/Tooltip.vue.cjs.map +1 -0
- package/components/shadcn/Tooltip.vue.js +28 -0
- package/components/shadcn/Tooltip.vue.js.map +1 -0
- package/components/shadcn/Tooltip.vue2.cjs +2 -0
- package/components/shadcn/Tooltip.vue2.cjs.map +1 -0
- package/components/shadcn/Tooltip.vue2.js +5 -0
- package/components/shadcn/Tooltip.vue2.js.map +1 -0
- package/components/shadcn/TooltipContent.vue.cjs +2 -0
- package/components/shadcn/TooltipContent.vue.cjs.map +1 -0
- package/components/shadcn/TooltipContent.vue.js +48 -0
- package/components/shadcn/TooltipContent.vue.js.map +1 -0
- package/components/shadcn/TooltipContent.vue2.cjs +2 -0
- package/components/shadcn/TooltipContent.vue2.cjs.map +1 -0
- package/components/shadcn/TooltipContent.vue2.js +5 -0
- package/components/shadcn/TooltipContent.vue2.js.map +1 -0
- package/components/shadcn/TooltipProvider.vue.cjs +2 -0
- package/components/shadcn/TooltipProvider.vue.cjs.map +1 -0
- package/components/shadcn/TooltipProvider.vue.js +26 -0
- package/components/shadcn/TooltipProvider.vue.js.map +1 -0
- package/components/shadcn/TooltipProvider.vue2.cjs +2 -0
- package/components/shadcn/TooltipProvider.vue2.cjs.map +1 -0
- package/components/shadcn/TooltipProvider.vue2.js +5 -0
- package/components/shadcn/TooltipProvider.vue2.js.map +1 -0
- package/components/shadcn/TooltipTrigger.vue.cjs +2 -0
- package/components/shadcn/TooltipTrigger.vue.cjs.map +1 -0
- package/components/shadcn/TooltipTrigger.vue.js +23 -0
- package/components/shadcn/TooltipTrigger.vue.js.map +1 -0
- package/components/shadcn/TooltipTrigger.vue2.cjs +2 -0
- package/components/shadcn/TooltipTrigger.vue2.cjs.map +1 -0
- package/components/shadcn/TooltipTrigger.vue2.js +5 -0
- package/components/shadcn/TooltipTrigger.vue2.js.map +1 -0
- package/components/shadcn/alert-variants.cjs +2 -0
- package/components/shadcn/alert-variants.cjs.map +1 -0
- package/components/shadcn/alert-variants.js +19 -0
- package/components/shadcn/alert-variants.js.map +1 -0
- package/components/shadcn/avatar-variants.cjs +2 -0
- package/components/shadcn/avatar-variants.cjs.map +1 -0
- package/components/shadcn/avatar-variants.js +21 -0
- package/components/shadcn/avatar-variants.js.map +1 -0
- package/components/shadcn/badge-variants.cjs +2 -0
- package/components/shadcn/badge-variants.cjs.map +1 -0
- package/components/shadcn/badge-variants.js +21 -0
- package/components/shadcn/badge-variants.js.map +1 -0
- package/components/shadcn/button-group-variants.cjs +2 -0
- package/components/shadcn/button-group-variants.cjs.map +1 -0
- package/components/shadcn/button-group-variants.js +19 -0
- package/components/shadcn/button-group-variants.js.map +1 -0
- package/components/shadcn/index.cjs +2 -0
- package/components/shadcn/index.cjs.map +1 -0
- package/components/shadcn/index.js +40 -0
- package/components/shadcn/index.js.map +1 -0
- package/components/templates/JLayout.vue.cjs +2 -0
- package/components/templates/JLayout.vue.cjs.map +1 -0
- package/components/templates/JLayout.vue.js +46 -0
- package/components/templates/JLayout.vue.js.map +1 -0
- package/components/templates/JLayout.vue2.cjs +2 -0
- package/components/templates/JLayout.vue2.cjs.map +1 -0
- package/components/templates/JLayout.vue2.js +5 -0
- package/components/templates/JLayout.vue2.js.map +1 -0
- package/components/templates/JLayoutAdvanced.vue.cjs +2 -0
- package/components/templates/JLayoutAdvanced.vue.cjs.map +1 -0
- package/components/templates/JLayoutAdvanced.vue.js +146 -0
- package/components/templates/JLayoutAdvanced.vue.js.map +1 -0
- package/components/templates/JLayoutAdvanced.vue2.cjs +2 -0
- package/components/templates/JLayoutAdvanced.vue2.cjs.map +1 -0
- package/components/templates/JLayoutAdvanced.vue2.js +5 -0
- package/components/templates/JLayoutAdvanced.vue2.js.map +1 -0
- package/components/templates/JLayoutSimple.vue.cjs +2 -0
- package/components/templates/JLayoutSimple.vue.cjs.map +1 -0
- package/components/templates/JLayoutSimple.vue.js +65 -0
- package/components/templates/JLayoutSimple.vue.js.map +1 -0
- package/components/templates/JLayoutSimple.vue2.cjs +2 -0
- package/components/templates/JLayoutSimple.vue2.cjs.map +1 -0
- package/components/templates/JLayoutSimple.vue2.js +5 -0
- package/components/templates/JLayoutSimple.vue2.js.map +1 -0
- package/components.json +17 -0
- package/index.cjs +4 -0
- package/index.js +99 -0
- package/lib/styleTypePreset.cjs +2 -0
- package/lib/styleTypePreset.cjs.map +1 -0
- package/lib/styleTypePreset.js +36 -0
- package/lib/styleTypePreset.js.map +1 -0
- package/lib/theme-utils.cjs +2 -0
- package/lib/theme-utils.cjs.map +1 -0
- package/lib/theme-utils.js +75 -0
- package/lib/theme-utils.js.map +1 -0
- package/lib/utils.cjs +2 -0
- package/lib/utils.cjs.map +1 -0
- package/lib/utils.js +15 -0
- package/lib/utils.js.map +1 -0
- package/package.json +96 -0
- package/tailwind.config.js +80 -0
- package/types/index.d.ts +2491 -0
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import { defineComponent as O, ref as c, watch as S, onMounted as A, onUnmounted as P, createBlock as R, openBlock as p, Teleport as N, createVNode as j, Transition as z, withCtx as D, createElementBlock as g, createCommentVNode as v, createElementVNode as t, withModifiers as M, normalizeStyle as K, toDisplayString as V, normalizeClass as _, nextTick as b } from "vue";
|
|
2
|
+
const F = ["aria-label"], I = { class: "search-addr-header" }, U = { class: "search-addr-title" }, J = { class: "search-addr-body" }, q = {
|
|
3
|
+
key: 0,
|
|
4
|
+
class: "search-addr-loading"
|
|
5
|
+
}, H = /* @__PURE__ */ O({
|
|
6
|
+
__name: "JSearchAddr",
|
|
7
|
+
props: {
|
|
8
|
+
isOpen: { type: Boolean, default: !1 },
|
|
9
|
+
title: { default: "주소 검색" },
|
|
10
|
+
width: { default: "600px" },
|
|
11
|
+
height: { default: "600px" },
|
|
12
|
+
closeOnBackdrop: { type: Boolean, default: !0 },
|
|
13
|
+
closeOnEsc: { type: Boolean, default: !0 },
|
|
14
|
+
defaultLanguage: { default: "K" },
|
|
15
|
+
theme: { default: "default" },
|
|
16
|
+
autoComplete: { type: Boolean, default: !0 }
|
|
17
|
+
},
|
|
18
|
+
emits: ["close", "complete", "complete-raw", "search", "error"],
|
|
19
|
+
setup(n, { expose: k, emit: E }) {
|
|
20
|
+
const r = n, l = E, x = c(null), u = c(null), m = c(!1), i = c(!1), f = c(null), B = () => new Promise((e, o) => {
|
|
21
|
+
if (window.daum && window.daum.Postcode) {
|
|
22
|
+
m.value = !0, e();
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
const s = document.getElementById("daum-postcode-script");
|
|
26
|
+
if (s) {
|
|
27
|
+
s.addEventListener("load", () => {
|
|
28
|
+
m.value = !0, e();
|
|
29
|
+
});
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
const a = document.createElement("script");
|
|
33
|
+
a.id = "daum-postcode-script", a.src = "https://t1.daumcdn.net/mapjsapi/bundle/postcode/prod/postcode.v2.js", a.async = !0, a.onload = () => {
|
|
34
|
+
m.value = !0, e();
|
|
35
|
+
}, a.onerror = () => {
|
|
36
|
+
const w = new Error("Failed to load Daum Postcode script");
|
|
37
|
+
l("error", w), o(w);
|
|
38
|
+
}, document.head.appendChild(a);
|
|
39
|
+
}), T = (e) => {
|
|
40
|
+
let o = "", s = "";
|
|
41
|
+
return e.userLanguageType === "K" ? e.userSelectedType === "R" ? (o = e.roadAddress, e.bname !== "" && (s += e.bname), e.buildingName !== "" && (s += s !== "" ? ", " + e.buildingName : e.buildingName)) : o = e.jibunAddress : e.userSelectedType === "R" ? o = e.roadAddressEnglish : o = e.jibunAddressEnglish, {
|
|
42
|
+
zonecode: e.zonecode,
|
|
43
|
+
address: o,
|
|
44
|
+
addressDetail: s || void 0,
|
|
45
|
+
addressType: e.userSelectedType,
|
|
46
|
+
languageType: e.userLanguageType,
|
|
47
|
+
sido: e.sido,
|
|
48
|
+
sigungu: e.sigungu,
|
|
49
|
+
bname: e.bname
|
|
50
|
+
};
|
|
51
|
+
}, C = async () => {
|
|
52
|
+
if (!u.value) {
|
|
53
|
+
console.warn("postcodeLayerRef is not available");
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
try {
|
|
57
|
+
i.value = !0, await B(), await b(), f.value = new window.daum.Postcode({
|
|
58
|
+
oncomplete: (e) => {
|
|
59
|
+
const o = T(e);
|
|
60
|
+
l("complete", o), l("complete-raw", e), d();
|
|
61
|
+
},
|
|
62
|
+
onclose: () => {
|
|
63
|
+
r.isOpen && d();
|
|
64
|
+
},
|
|
65
|
+
onsearch: () => {
|
|
66
|
+
l("search");
|
|
67
|
+
},
|
|
68
|
+
width: "100%",
|
|
69
|
+
height: "100%"
|
|
70
|
+
}), u.value && (f.value.embed(u.value), console.log("Daum Postcode embedded successfully")), i.value = !1;
|
|
71
|
+
} catch (e) {
|
|
72
|
+
i.value = !1, console.error("Failed to initialize Postcode:", e), l("error", e instanceof Error ? e : new Error("Unknown error"));
|
|
73
|
+
}
|
|
74
|
+
}, y = async () => {
|
|
75
|
+
document.body.style.overflow = "hidden", await b(), setTimeout(() => {
|
|
76
|
+
C();
|
|
77
|
+
}, 100);
|
|
78
|
+
}, d = () => {
|
|
79
|
+
document.body.style.overflow = "", l("close");
|
|
80
|
+
}, L = (e) => {
|
|
81
|
+
r.closeOnBackdrop && e.target === e.currentTarget && d();
|
|
82
|
+
}, h = (e) => {
|
|
83
|
+
r.closeOnEsc && e.key === "Escape" && r.isOpen && d();
|
|
84
|
+
};
|
|
85
|
+
return S(
|
|
86
|
+
() => r.isOpen,
|
|
87
|
+
(e) => {
|
|
88
|
+
e ? y() : document.body.style.overflow = "";
|
|
89
|
+
}
|
|
90
|
+
), A(() => {
|
|
91
|
+
document.addEventListener("keydown", h), r.isOpen && y();
|
|
92
|
+
}), P(() => {
|
|
93
|
+
document.removeEventListener("keydown", h), document.body.style.overflow = "";
|
|
94
|
+
}), k({
|
|
95
|
+
close: d
|
|
96
|
+
}), (e, o) => (p(), R(N, { to: "body" }, [
|
|
97
|
+
j(z, { name: "modal-fade" }, {
|
|
98
|
+
default: D(() => [
|
|
99
|
+
n.isOpen ? (p(), g("div", {
|
|
100
|
+
key: 0,
|
|
101
|
+
ref_key: "modalRef",
|
|
102
|
+
ref: x,
|
|
103
|
+
class: "search-addr-overlay",
|
|
104
|
+
onClick: L,
|
|
105
|
+
role: "dialog",
|
|
106
|
+
"aria-modal": "true",
|
|
107
|
+
"aria-label": n.title
|
|
108
|
+
}, [
|
|
109
|
+
t("div", {
|
|
110
|
+
class: "search-addr-modal",
|
|
111
|
+
style: K({ width: n.width, height: n.height }),
|
|
112
|
+
onClick: o[0] || (o[0] = M(() => {
|
|
113
|
+
}, ["stop"]))
|
|
114
|
+
}, [
|
|
115
|
+
t("div", I, [
|
|
116
|
+
t("h2", U, V(n.title), 1),
|
|
117
|
+
t("button", {
|
|
118
|
+
type: "button",
|
|
119
|
+
class: "search-addr-close",
|
|
120
|
+
"aria-label": "닫기",
|
|
121
|
+
onClick: d
|
|
122
|
+
}, [...o[1] || (o[1] = [
|
|
123
|
+
t("svg", {
|
|
124
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
125
|
+
width: "24",
|
|
126
|
+
height: "24",
|
|
127
|
+
viewBox: "0 0 24 24",
|
|
128
|
+
fill: "none",
|
|
129
|
+
stroke: "currentColor",
|
|
130
|
+
"stroke-width": "2",
|
|
131
|
+
"stroke-linecap": "round",
|
|
132
|
+
"stroke-linejoin": "round"
|
|
133
|
+
}, [
|
|
134
|
+
t("line", {
|
|
135
|
+
x1: "18",
|
|
136
|
+
y1: "6",
|
|
137
|
+
x2: "6",
|
|
138
|
+
y2: "18"
|
|
139
|
+
}),
|
|
140
|
+
t("line", {
|
|
141
|
+
x1: "6",
|
|
142
|
+
y1: "6",
|
|
143
|
+
x2: "18",
|
|
144
|
+
y2: "18"
|
|
145
|
+
})
|
|
146
|
+
], -1)
|
|
147
|
+
])])
|
|
148
|
+
]),
|
|
149
|
+
t("div", J, [
|
|
150
|
+
i.value ? (p(), g("div", q, [...o[2] || (o[2] = [
|
|
151
|
+
t("div", { class: "loading-spinner" }, null, -1),
|
|
152
|
+
t("p", null, "주소 검색을 불러오는 중...", -1)
|
|
153
|
+
])])) : v("", !0),
|
|
154
|
+
t("div", {
|
|
155
|
+
ref_key: "postcodeLayerRef",
|
|
156
|
+
ref: u,
|
|
157
|
+
class: _(["postcode-layer", { "is-loading": i.value }])
|
|
158
|
+
}, null, 2)
|
|
159
|
+
])
|
|
160
|
+
], 4)
|
|
161
|
+
], 8, F)) : v("", !0)
|
|
162
|
+
]),
|
|
163
|
+
_: 1
|
|
164
|
+
})
|
|
165
|
+
]));
|
|
166
|
+
}
|
|
167
|
+
});
|
|
168
|
+
export {
|
|
169
|
+
H as default
|
|
170
|
+
};
|
|
171
|
+
//# sourceMappingURL=JSearchAddr.vue2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"JSearchAddr.vue2.js","sources":["../../../../src/components/molecules/JSearchAddr.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { ref, watch, onMounted, onUnmounted, nextTick } from 'vue'\r\nimport type { \r\n JSearchAddrProps, \r\n PostcodeData, \r\n AddressResult \r\n} from '@/types/search-addr.types'\r\n\r\n/**\r\n * JSearchAddr 컴포넌트\r\n * \r\n * Daum Postcode API를 활용한 주소 검색 컴포넌트입니다.\r\n * 모달 형태로 동작하며, 우편번호와 주소를 검색할 수 있습니다.\r\n * \r\n * @emits close - 모달 닫힘 요청\r\n * @emits complete - 주소 선택 완료 (간소화된 데이터)\r\n * @emits complete-raw - 주소 선택 완료 (원본 데이터)\r\n * @emits search - 검색 시작\r\n * @emits error - 에러 발생\r\n */\r\n\r\nconst props = withDefaults(defineProps<JSearchAddrProps>(), {\r\n isOpen: false,\r\n title: '주소 검색',\r\n width: '600px',\r\n height: '600px',\r\n closeOnBackdrop: true,\r\n closeOnEsc: true,\r\n defaultLanguage: 'K',\r\n theme: 'default',\r\n autoComplete: true\r\n})\r\n\r\nconst emit = defineEmits<{\r\n close: []\r\n complete: [result: AddressResult]\r\n 'complete-raw': [data: PostcodeData]\r\n search: []\r\n error: [error: Error]\r\n}>()\r\n\r\n// Refs\r\nconst modalRef = ref<HTMLElement | null>(null)\r\nconst postcodeLayerRef = ref<HTMLElement | null>(null)\r\nconst isScriptLoaded = ref(false)\r\nconst isLoading = ref(false)\r\nconst postcodeInstance = ref<any>(null)\r\n\r\n/**\r\n * Daum Postcode 스크립트 로드\r\n */\r\nconst loadPostcodeScript = (): Promise<void> => {\r\n return new Promise((resolve, reject) => {\r\n if (window.daum && window.daum.Postcode) {\r\n isScriptLoaded.value = true\r\n resolve()\r\n return\r\n }\r\n\r\n const existingScript = document.getElementById('daum-postcode-script')\r\n if (existingScript) {\r\n existingScript.addEventListener('load', () => {\r\n isScriptLoaded.value = true\r\n resolve()\r\n })\r\n return\r\n }\r\n\r\n const script = document.createElement('script')\r\n script.id = 'daum-postcode-script'\r\n script.src = 'https://t1.daumcdn.net/mapjsapi/bundle/postcode/prod/postcode.v2.js'\r\n script.async = true\r\n\r\n script.onload = () => {\r\n isScriptLoaded.value = true\r\n resolve()\r\n }\r\n\r\n script.onerror = () => {\r\n const error = new Error('Failed to load Daum Postcode script')\r\n emit('error', error)\r\n reject(error)\r\n }\r\n\r\n document.head.appendChild(script)\r\n })\r\n}\r\n\r\n/**\r\n * 주소 데이터 변환 (PostcodeData → AddressResult)\r\n */\r\nconst transformAddressData = (data: PostcodeData): AddressResult => {\r\n let mainAddr = ''\r\n let extraAddr = ''\r\n\r\n // 언어에 따라 주소 선택\r\n if (data.userLanguageType === 'K') {\r\n if (data.userSelectedType === 'R') {\r\n mainAddr = data.roadAddress\r\n \r\n // 건물명 등 추가 정보\r\n if (data.bname !== '') {\r\n extraAddr += data.bname\r\n }\r\n if (data.buildingName !== '') {\r\n extraAddr += (extraAddr !== '' ? ', ' + data.buildingName : data.buildingName)\r\n }\r\n } else {\r\n mainAddr = data.jibunAddress\r\n }\r\n } else {\r\n if (data.userSelectedType === 'R') {\r\n mainAddr = data.roadAddressEnglish\r\n } else {\r\n mainAddr = data.jibunAddressEnglish\r\n }\r\n }\r\n\r\n return {\r\n zonecode: data.zonecode,\r\n address: mainAddr,\r\n addressDetail: extraAddr || undefined,\r\n addressType: data.userSelectedType,\r\n languageType: data.userLanguageType,\r\n sido: data.sido,\r\n sigungu: data.sigungu,\r\n bname: data.bname\r\n }\r\n}\r\n\r\n/**\r\n * Postcode 초기화 및 embed\r\n */\r\nconst initPostcode = async () => {\r\n if (!postcodeLayerRef.value) {\r\n console.warn('postcodeLayerRef is not available')\r\n return\r\n }\r\n\r\n try {\r\n isLoading.value = true\r\n\r\n // 스크립트 로드\r\n await loadPostcodeScript()\r\n\r\n // DOM 준비 대기\r\n await nextTick()\r\n\r\n // Postcode 인스턴스 생성 및 embed\r\n postcodeInstance.value = new window.daum.Postcode({\r\n oncomplete: (data: PostcodeData) => {\r\n const result = transformAddressData(data)\r\n emit('complete', result)\r\n emit('complete-raw', data)\r\n closeModal()\r\n },\r\n onclose: () => {\r\n // 사용자가 X 버튼으로 닫을 경우\r\n if (props.isOpen) {\r\n closeModal()\r\n }\r\n },\r\n onsearch: () => {\r\n emit('search')\r\n },\r\n width: '100%',\r\n height: '100%'\r\n })\r\n\r\n // 레이어에 embed\r\n if (postcodeLayerRef.value) {\r\n postcodeInstance.value.embed(postcodeLayerRef.value)\r\n console.log('Daum Postcode embedded successfully')\r\n }\r\n \r\n isLoading.value = false\r\n } catch (error) {\r\n isLoading.value = false\r\n console.error('Failed to initialize Postcode:', error)\r\n emit('error', error instanceof Error ? error : new Error('Unknown error'))\r\n }\r\n}\r\n\r\n/**\r\n * 모달 열기\r\n */\r\nconst openModal = async () => {\r\n // body 스크롤 잠금\r\n document.body.style.overflow = 'hidden'\r\n \r\n // DOM이 완전히 렌더링될 때까지 대기\r\n await nextTick()\r\n \r\n // 약간의 추가 지연 (모달 애니메이션 고려)\r\n setTimeout(() => {\r\n initPostcode()\r\n }, 100)\r\n}\r\n\r\n/**\r\n * 모달 닫기\r\n */\r\nconst closeModal = () => {\r\n // body 스크롤 복원\r\n document.body.style.overflow = ''\r\n \r\n emit('close')\r\n}\r\n\r\n/**\r\n * 배경 클릭 핸들러\r\n */\r\nconst handleBackdropClick = (event: MouseEvent) => {\r\n if (props.closeOnBackdrop && event.target === event.currentTarget) {\r\n closeModal()\r\n }\r\n}\r\n\r\n/**\r\n * ESC 키 핸들러\r\n */\r\nconst handleEscKey = (event: KeyboardEvent) => {\r\n if (props.closeOnEsc && event.key === 'Escape' && props.isOpen) {\r\n closeModal()\r\n }\r\n}\r\n\r\n// Watch isOpen\r\nwatch(\r\n () => props.isOpen,\r\n (newValue) => {\r\n if (newValue) {\r\n openModal()\r\n } else {\r\n document.body.style.overflow = ''\r\n }\r\n }\r\n)\r\n\r\n// Lifecycle\r\nonMounted(() => {\r\n document.addEventListener('keydown', handleEscKey)\r\n \r\n if (props.isOpen) {\r\n openModal()\r\n }\r\n})\r\n\r\nonUnmounted(() => {\r\n document.removeEventListener('keydown', handleEscKey)\r\n document.body.style.overflow = ''\r\n})\r\n\r\n// Expose\r\ndefineExpose({\r\n close: closeModal\r\n})\r\n</script>\r\n\r\n<template>\r\n <Teleport to=\"body\">\r\n <Transition name=\"modal-fade\">\r\n <div\r\n v-if=\"isOpen\"\r\n ref=\"modalRef\"\r\n class=\"search-addr-overlay\"\r\n @click=\"handleBackdropClick\"\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n :aria-label=\"title\"\r\n >\r\n <div\r\n class=\"search-addr-modal\"\r\n :style=\"{ width, height }\"\r\n @click.stop\r\n >\r\n <!-- Header -->\r\n <div class=\"search-addr-header\">\r\n <h2 class=\"search-addr-title\">{{ title }}</h2>\r\n <button\r\n type=\"button\"\r\n class=\"search-addr-close\"\r\n aria-label=\"닫기\"\r\n @click=\"closeModal\"\r\n >\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n >\r\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\r\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n <!-- Body -->\r\n <div class=\"search-addr-body\">\r\n <!-- 로딩 -->\r\n <div v-if=\"isLoading\" class=\"search-addr-loading\">\r\n <div class=\"loading-spinner\"></div>\r\n <p>주소 검색을 불러오는 중...</p>\r\n </div>\r\n\r\n <!-- Postcode Layer -->\r\n <div\r\n ref=\"postcodeLayerRef\"\r\n class=\"postcode-layer\"\r\n :class=\"{ 'is-loading': isLoading }\"\r\n ></div>\r\n </div>\r\n </div>\r\n </div>\r\n </Transition>\r\n </Teleport>\r\n</template>\r\n\r\n<style scoped>\r\n/* Overlay */\r\n.search-addr-overlay {\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n background-color: rgba(0, 0, 0, 0.5);\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n z-index: 9999;\r\n padding: 20px;\r\n}\r\n\r\n/* Modal */\r\n.search-addr-modal {\r\n background: white;\r\n border-radius: 12px;\r\n box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1),\r\n 0 10px 10px -5px rgba(0, 0, 0, 0.04);\r\n display: flex;\r\n flex-direction: column;\r\n max-width: 90vw;\r\n max-height: 90vh;\r\n overflow: hidden;\r\n}\r\n\r\n/* Header */\r\n.search-addr-header {\r\n position: relative;\r\n padding: 20px 24px;\r\n border-bottom: 1px solid #e5e7eb;\r\n flex-shrink: 0;\r\n}\r\n\r\n.search-addr-title {\r\n margin: 0;\r\n font-size: 20px;\r\n font-weight: 600;\r\n color: #111827;\r\n padding-right: 40px;\r\n}\r\n\r\n.search-addr-close {\r\n position: absolute;\r\n top: 16px;\r\n right: 16px;\r\n width: 36px;\r\n height: 36px;\r\n padding: 0;\r\n background: none;\r\n border: none;\r\n border-radius: 6px;\r\n cursor: pointer;\r\n color: #6b7280;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n transition: all 0.2s;\r\n}\r\n\r\n.search-addr-close:hover {\r\n background-color: #f3f4f6;\r\n color: #111827;\r\n}\r\n\r\n.search-addr-close:focus {\r\n outline: 2px solid #3b82f6;\r\n outline-offset: 2px;\r\n}\r\n\r\n.search-addr-close:active {\r\n background-color: #e5e7eb;\r\n}\r\n\r\n/* Body */\r\n.search-addr-body {\r\n flex: 1;\r\n min-height: 0;\r\n position: relative;\r\n}\r\n\r\n.postcode-layer {\r\n width: 100%;\r\n height: 100%;\r\n position: relative;\r\n}\r\n\r\n.postcode-layer.is-loading {\r\n opacity: 0;\r\n pointer-events: none;\r\n}\r\n\r\n/* Loading */\r\n.search-addr-loading {\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n background: #f9fafb;\r\n z-index: 10;\r\n}\r\n\r\n.loading-spinner {\r\n width: 40px;\r\n height: 40px;\r\n border: 4px solid #e5e7eb;\r\n border-top: 4px solid #3b82f6;\r\n border-radius: 50%;\r\n animation: spin 1s linear infinite;\r\n margin-bottom: 16px;\r\n}\r\n\r\n@keyframes spin {\r\n 0% { transform: rotate(0deg); }\r\n 100% { transform: rotate(360deg); }\r\n}\r\n\r\n.search-addr-loading p {\r\n margin: 0;\r\n font-size: 14px;\r\n color: #6b7280;\r\n}\r\n\r\n/* Animation */\r\n.modal-fade-enter-active,\r\n.modal-fade-leave-active {\r\n transition: opacity 0.3s ease;\r\n}\r\n\r\n.modal-fade-enter-active .search-addr-modal,\r\n.modal-fade-leave-active .search-addr-modal {\r\n transition: transform 0.3s ease, opacity 0.3s ease;\r\n}\r\n\r\n.modal-fade-enter-from,\r\n.modal-fade-leave-to {\r\n opacity: 0;\r\n}\r\n\r\n.modal-fade-enter-from .search-addr-modal,\r\n.modal-fade-leave-to .search-addr-modal {\r\n transform: scale(0.95);\r\n opacity: 0;\r\n}\r\n\r\n/* Responsive */\r\n@media (max-width: 768px) {\r\n .search-addr-overlay {\r\n padding: 0;\r\n }\r\n\r\n .search-addr-modal {\r\n width: 100vw !important;\r\n height: 100vh !important;\r\n max-width: 100vw;\r\n max-height: 100vh;\r\n border-radius: 0;\r\n }\r\n\r\n .search-addr-header {\r\n padding: 16px 20px;\r\n }\r\n\r\n .search-addr-title {\r\n font-size: 18px;\r\n }\r\n}\r\n\r\n/* Dark mode */\r\n@media (prefers-color-scheme: dark) {\r\n .search-addr-modal {\r\n background: #1f2937;\r\n }\r\n\r\n .search-addr-header {\r\n border-color: #374151;\r\n }\r\n\r\n .search-addr-title {\r\n color: #f9fafb;\r\n }\r\n\r\n .search-addr-close {\r\n color: #9ca3af;\r\n }\r\n\r\n .search-addr-close:hover {\r\n background-color: #374151;\r\n color: #f9fafb;\r\n }\r\n\r\n .search-addr-loading {\r\n background: #111827;\r\n }\r\n\r\n .search-addr-loading p {\r\n color: #9ca3af;\r\n }\r\n}\r\n</style>\r\n\r\n"],"names":["props","__props","emit","__emit","modalRef","ref","postcodeLayerRef","isScriptLoaded","isLoading","postcodeInstance","loadPostcodeScript","resolve","reject","existingScript","script","error","transformAddressData","data","mainAddr","extraAddr","initPostcode","nextTick","result","closeModal","openModal","handleBackdropClick","event","handleEscKey","watch","newValue","onMounted","onUnmounted","__expose","_createBlock","_Teleport","_createVNode","_Transition","_createElementBlock","_createElementVNode","_normalizeStyle","_hoisted_2","_hoisted_3","_toDisplayString","_hoisted_4","_openBlock","_hoisted_5","_cache","_normalizeClass"],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("./JTabs.vue2.cjs");;/* empty css */const t = (t_comp, t_opts) => {
|
|
2
|
+
const t_merged = t_comp.__vccOpts || t_comp;
|
|
3
|
+
for (const [t_key, t_val] of t_opts)
|
|
4
|
+
t_merged[t_key] = t_val;
|
|
5
|
+
return t_merged;
|
|
6
|
+
};,u=t(e.default,[["__scopeId","data-v-0b269232"]]);exports.default=u;
|
|
7
|
+
//# sourceMappingURL=JTabs.vue.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"JTabs.vue.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import o from "./JTabs.vue2.js";
|
|
2
|
+
/* empty css */
|
|
3
|
+
const t = (t_comp, t_opts) => {
|
|
4
|
+
const t_merged = t_comp.__vccOpts || t_comp;
|
|
5
|
+
for (const [t_key, t_val] of t_opts)
|
|
6
|
+
t_merged[t_key] = t_val;
|
|
7
|
+
return t_merged;
|
|
8
|
+
};
|
|
9
|
+
const p = /* @__PURE__ */ t(o, [["__scopeId", "data-v-0b269232"]]);
|
|
10
|
+
export {
|
|
11
|
+
p as default
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=JTabs.vue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"JTabs.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue");require("../shadcn/index.cjs");const k=require("lucide-vue-next"),h=require("../../lib/utils.cjs"),x=require("../atoms/JIcon.vue.cjs"),y=require("../shadcn/Tabs.vue.cjs"),T=require("../shadcn/TabsList.vue.cjs"),b=require("../shadcn/TabsTrigger.vue.cjs"),B=require("../shadcn/TabsContent.vue.cjs"),N={class:"flex-1 truncate"},S=["aria-label","onClick"],E={class:"flex-1 w-full overflow-auto"},P={key:1,class:"p-4"},q={class:"text-muted-foreground"},V=e.defineComponent({__name:"JTabs",props:{tabs:{},activeTabId:{},className:{},listClassName:{},styletype:{default:"default"}},emits:["tabChange","tabClose","update:activeTabId"],setup(p,{emit:f}){const a=p,r=f,c=e.computed(()=>Array.isArray(a.tabs)?a.tabs:[]),s=e.ref(a.activeTabId||(c.value.length>0?c.value[0]?.id:"")||"");let o=!1;e.watch(()=>a.activeTabId,t=>{t!==void 0&&t!==s.value&&(s.value=t)},{immediate:!0}),e.watch(c,t=>{!a.activeTabId&&t.length>0&&!t.find(n=>n.id===s.value)&&t[0]&&(s.value=t[0].id)});const v=t=>{if(o)return;const n=String(t);n!==s.value&&(o=!0,s.value=n,r("update:activeTabId",n),r("tabChange",n),e.nextTick(()=>{o=!1}))},_=t=>{o||t===s.value||(o=!0,s.value=t,r("update:activeTabId",t),r("tabChange",t),e.nextTick(()=>{o=!1}))},m=(t,n)=>{t.stopPropagation(),r("tabClose",n)},C=e.computed(()=>{const t=["flex","flex-col","w-full","h-full"];return a.className&&t.push(a.className),t.join(" ")}),i={default:{tabPaddingClass:"px-3 py-2",tabTextSizeClass:"text-sm",listPaddingClass:"p-2"},minimal:{tabPaddingClass:"px-2 py-1",tabTextSizeClass:"text-xs",listPaddingClass:"p-1"}},u=e.computed(()=>i[a.styletype]??i.default),g=e.computed(()=>{const t=["w-full","justify-start",u.value.listPaddingClass];return a.listClassName&&t.push(a.listClassName),t.join(" ")});return(t,n)=>(e.openBlock(),e.createBlock(e.unref(y.default),{"model-value":s.value,"onUpdate:modelValue":v,orientation:"horizontal",class:e.normalizeClass(C.value)},{default:e.withCtx(()=>[e.createVNode(e.unref(T.default),{class:e.normalizeClass(g.value)},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,l=>(e.openBlock(),e.createBlock(e.unref(b.default),{key:l.id,value:l.id,onClick:d=>_(l.id),class:e.normalizeClass(e.unref(h.cn)("!flex !items-center !gap-2",u.value.tabPaddingClass,u.value.tabTextSizeClass))},{default:e.withCtx(()=>[l.icon?(e.openBlock(),e.createBlock(x.default,{key:0,name:l.icon,size:"sm",class:"flex-shrink-0"},null,8,["name"])):e.createCommentVNode("",!0),e.createElementVNode("span",N,e.toDisplayString(l.label),1),l.closable?(e.openBlock(),e.createElementBlock("button",{key:1,type:"button",class:"flex-shrink-0 h-4 w-4 rounded-sm hover:bg-destructive/10 hover:text-destructive transition-colors focus:outline-none focus:ring-2 focus:ring-ring flex items-center justify-center","aria-label":`${l.label} 탭 닫기`,onClick:d=>m(d,l.id)},[e.createVNode(e.unref(k.X),{class:"h-3 w-3"})],8,S)):e.createCommentVNode("",!0)]),_:2},1032,["value","onClick","class"]))),128))]),_:1},8,["class"]),e.createElementVNode("div",E,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,l=>(e.openBlock(),e.createBlock(e.unref(B.default),{key:`content-${l.id}`,value:l.id,class:"h-full mt-0 data-[state=active]:flex data-[state=active]:flex-col"},{default:e.withCtx(()=>[e.renderSlot(t.$slots,`content-${l.id}`,{tab:l},()=>[l.component?(e.openBlock(),e.createBlock(e.resolveDynamicComponent(l.component),e.mergeProps({key:0,ref_for:!0},l.props||{}),null,16)):(e.openBlock(),e.createElementBlock("div",P,[e.createElementVNode("p",q,e.toDisplayString(l.label)+" 콘텐츠",1)]))],!0)]),_:2},1032,["value"]))),128))])]),_:3},8,["model-value","class"]))}});exports.default=V;
|
|
2
|
+
//# sourceMappingURL=JTabs.vue2.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"JTabs.vue2.cjs","sources":["../../../../src/components/molecules/JTabs.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { computed, ref, watch, nextTick } from 'vue'\r\nimport { Tabs, TabsList, TabsTrigger, TabsContent } from '@/components/shadcn'\r\nimport type { JTabsProps, JTabsEmits } from '@/types/dynamic-tabs.types'\r\nimport { X } from 'lucide-vue-next'\r\nimport { cn } from '@/lib/utils'\r\nimport JIcon from '@/components/atoms/JIcon.vue'\r\n\r\n/**\r\n * JTabs - 기본 탭 UI 컴포넌트 (molecules)\r\n * Basic Tabs UI Component\r\n * \r\n * @description\r\n * 정적인 탭 목록을 렌더링하는 기본 탭 컴포넌트입니다.\r\n * 닫기 버튼, 아이콘 등을 지원합니다.\r\n * \r\n * @example\r\n * ```vue\r\n * <JTabs \r\n * :tabs=\"tabs\"\r\n * :active-tab-id=\"activeId\"\r\n * @tab-change=\"handleChange\"\r\n * @tab-close=\"handleClose\"\r\n * />\r\n * ```\r\n */\r\n\r\ntype StyleType = 'default' | 'minimal'\r\n\r\nconst props = withDefaults(defineProps<JTabsProps>(), {\r\n styletype: 'default',\r\n})\r\n\r\nconst emit = defineEmits<JTabsEmits>()\r\n\r\n/**\r\n * 안전한 tabs 배열 (undefined/null 체크)\r\n * Safe tabs array (undefined/null check)\r\n */\r\nconst safeTabs = computed(() => {\r\n return Array.isArray(props.tabs) ? props.tabs : []\r\n})\r\n\r\n/**\r\n * 현재 활성화된 탭 ID (내부 상태)\r\n * Current active tab ID (internal state)\r\n */\r\nconst internalActiveId = ref<string>(\r\n props.activeTabId || (safeTabs.value.length > 0 ? safeTabs.value[0]?.id : '') || ''\r\n)\r\n\r\n/**\r\n * 이벤트 처리 중 플래그 (중복 이벤트 방지)\r\n * Flag to prevent duplicate events\r\n */\r\nlet isHandlingEvent = false\r\n\r\n/**\r\n * props.activeTabId가 변경되면 내부 상태 동기화\r\n * Sync internal state when props.activeTabId changes\r\n */\r\nwatch(() => props.activeTabId, (newValue) => {\r\n if (newValue !== undefined && newValue !== internalActiveId.value) {\r\n internalActiveId.value = newValue\r\n }\r\n}, { immediate: true })\r\n\r\n/**\r\n * props.tabs가 변경되고 activeTabId가 없으면 첫 번째 탭 활성화\r\n * Activate first tab when tabs change and no activeTabId\r\n */\r\nwatch(safeTabs, (newTabs) => {\r\n if (!props.activeTabId && newTabs.length > 0 && !newTabs.find(t => t.id === internalActiveId.value) && newTabs[0]) {\r\n internalActiveId.value = newTabs[0].id\r\n }\r\n})\r\n\r\n/**\r\n * 탭 값 변경 핸들러 (reka-ui TabsRoot에서 직접 호출됨)\r\n * Tab value change handler (called directly from reka-ui TabsRoot)\r\n */\r\nconst handleTabValueChange = (value: string | number) => {\r\n if (isHandlingEvent) return\r\n \r\n const stringValue = String(value)\r\n if (stringValue !== internalActiveId.value) {\r\n isHandlingEvent = true\r\n internalActiveId.value = stringValue\r\n emit('update:activeTabId', stringValue)\r\n emit('tabChange', stringValue)\r\n // 다음 tick에서 플래그 리셋\r\n nextTick(() => {\r\n isHandlingEvent = false\r\n })\r\n }\r\n}\r\n\r\n/**\r\n * 탭 클릭 핸들러 (백업 방안 - reka-ui 이벤트가 작동하지 않을 경우)\r\n * Tab click handler (backup - in case reka-ui events don't work)\r\n */\r\nconst handleTabClick = (tabId: string) => {\r\n // reka-ui 이벤트가 작동하지 않을 경우 직접 처리\r\n // handleTabValueChange가 이미 처리했으면 중복 방지\r\n if (isHandlingEvent || tabId === internalActiveId.value) return\r\n \r\n isHandlingEvent = true\r\n internalActiveId.value = tabId\r\n emit('update:activeTabId', tabId)\r\n emit('tabChange', tabId)\r\n // 다음 tick에서 플래그 리셋\r\n nextTick(() => {\r\n isHandlingEvent = false\r\n })\r\n}\r\n\r\n/**\r\n * 탭 닫기 핸들러\r\n * Tab close handler\r\n */\r\nconst handleCloseTab = (e: Event, tabId: string) => {\r\n e.stopPropagation() // 탭 클릭 이벤트 전파 방지\r\n emit('tabClose', tabId)\r\n}\r\n\r\n/**\r\n * 루트 클래스\r\n * Root classes\r\n */\r\nconst rootClasses = computed(() => {\r\n const classes = ['flex', 'flex-col', 'w-full', 'h-full']\r\n \r\n if (props.className) {\r\n classes.push(props.className)\r\n }\r\n \r\n return classes.join(' ')\r\n})\r\n\r\n/**\r\n * 스타일 프리셋\r\n */\r\nconst STYLE_PRESETS: Record<StyleType, {\r\n tabPaddingClass: string\r\n tabTextSizeClass: string\r\n listPaddingClass: string\r\n}> = {\r\n default: {\r\n tabPaddingClass: 'px-3 py-2',\r\n tabTextSizeClass: 'text-sm',\r\n listPaddingClass: 'p-2',\r\n },\r\n minimal: {\r\n tabPaddingClass: 'px-2 py-1',\r\n tabTextSizeClass: 'text-xs',\r\n listPaddingClass: 'p-1',\r\n },\r\n}\r\n\r\nconst preset = computed(() => {\r\n return STYLE_PRESETS[props.styletype] ?? STYLE_PRESETS.default\r\n})\r\n\r\n/**\r\n * 탭 리스트 클래스\r\n * Tabs list classes\r\n */\r\nconst listClasses = computed(() => {\r\n const classes = ['w-full', 'justify-start', preset.value.listPaddingClass]\r\n \r\n if (props.listClassName) {\r\n classes.push(props.listClassName)\r\n }\r\n \r\n return classes.join(' ')\r\n})\r\n</script>\r\n\r\n<template>\r\n <Tabs\r\n :model-value=\"internalActiveId\"\r\n @update:model-value=\"handleTabValueChange\"\r\n orientation=\"horizontal\"\r\n :class=\"rootClasses\"\r\n >\r\n <!-- 탭 헤더 영역 / Tab Headers -->\r\n <TabsList :class=\"listClasses\">\r\n <TabsTrigger\r\n v-for=\"tab in safeTabs\"\r\n :key=\"tab.id\"\r\n :value=\"tab.id\"\r\n @click=\"handleTabClick(tab.id)\"\r\n :class=\"cn('!flex !items-center !gap-2', preset.tabPaddingClass, preset.tabTextSizeClass)\"\r\n >\r\n <!-- 탭 아이콘 (있을 경우) / Tab Icon -->\r\n <JIcon \r\n v-if=\"tab.icon\" \r\n :name=\"tab.icon\" \r\n size=\"sm\"\r\n class=\"flex-shrink-0\"\r\n />\r\n \r\n <!-- 탭 레이블 / Tab Label -->\r\n <span class=\"flex-1 truncate\">{{ tab.label }}</span>\r\n \r\n <!-- 닫기 버튼 / Close Button (항상 표시) -->\r\n <button\r\n v-if=\"tab.closable\"\r\n type=\"button\"\r\n class=\"flex-shrink-0 h-4 w-4 rounded-sm hover:bg-destructive/10 hover:text-destructive transition-colors focus:outline-none focus:ring-2 focus:ring-ring flex items-center justify-center\"\r\n :aria-label=\"`${tab.label} 탭 닫기`\"\r\n @click=\"(e) => handleCloseTab(e, tab.id)\"\r\n >\r\n <X class=\"h-3 w-3\" />\r\n </button>\r\n </TabsTrigger>\r\n </TabsList>\r\n\r\n <!-- 탭 콘텐츠 영역 / Tab Contents -->\r\n <div class=\"flex-1 w-full overflow-auto\">\r\n <TabsContent\r\n v-for=\"tab in safeTabs\"\r\n :key=\"`content-${tab.id}`\"\r\n :value=\"tab.id\"\r\n class=\"h-full mt-0 data-[state=active]:flex data-[state=active]:flex-col\"\r\n >\r\n <!-- 슬롯 우선 / Slot First -->\r\n <slot :name=\"`content-${tab.id}`\" :tab=\"tab\">\r\n <!-- 동적 컴포넌트 렌더링 / Dynamic Component Rendering -->\r\n <component\r\n v-if=\"tab.component\"\r\n :is=\"tab.component\"\r\n v-bind=\"tab.props || {}\"\r\n />\r\n \r\n <!-- 기본 콘텐츠 / Default Content -->\r\n <div v-else class=\"p-4\">\r\n <p class=\"text-muted-foreground\">{{ tab.label }} 콘텐츠</p>\r\n </div>\r\n </slot>\r\n </TabsContent>\r\n </div>\r\n </Tabs>\r\n</template>\r\n\r\n<style scoped>\r\n/**\r\n * 탭 리스트 스타일 - 하단 보더 제거\r\n * Tab list styles without bottom border\r\n */\r\n:deep([role=\"tablist\"]) {\r\n overflow-x: auto;\r\n overflow-y: hidden;\r\n scrollbar-width: thin;\r\n scrollbar-color: rgba(0, 0, 0, 0.2) transparent;\r\n background: hsl(var(--background));\r\n padding: 0 0.5rem;\r\n padding-top: 0.5rem;\r\n gap: 0.25rem;\r\n border-bottom: none;\r\n}\r\n\r\n:deep([role=\"tablist\"]::-webkit-scrollbar) {\r\n height: 6px;\r\n}\r\n\r\n:deep([role=\"tablist\"]::-webkit-scrollbar-track) {\r\n background: transparent;\r\n}\r\n\r\n:deep([role=\"tablist\"]::-webkit-scrollbar-thumb) {\r\n background-color: rgba(0, 0, 0, 0.2);\r\n border-radius: 3px;\r\n}\r\n\r\n:deep([role=\"tablist\"]::-webkit-scrollbar-thumb:hover) {\r\n background-color: rgba(0, 0, 0, 0.3);\r\n}\r\n\r\n/**\r\n * 다크모드에서 스크롤바 스타일\r\n * Scrollbar styles in dark mode\r\n */\r\n.dark :deep([role=\"tablist\"]::-webkit-scrollbar-thumb) {\r\n background-color: rgba(255, 255, 255, 0.2);\r\n}\r\n\r\n.dark :deep([role=\"tablist\"]::-webkit-scrollbar-thumb:hover) {\r\n background-color: rgba(255, 255, 255, 0.3);\r\n}\r\n\r\n.dark :deep([role=\"tablist\"]) {\r\n scrollbar-color: rgba(255, 255, 255, 0.2) transparent;\r\n}\r\n\r\n/**\r\n * 탭 버튼 스타일 - 명확한 구분\r\n * Tab button styles - clear distinction\r\n */\r\n:deep([role=\"tab\"]) {\r\n position: relative;\r\n padding: 0.625rem 1rem;\r\n border-radius: 0.375rem 0.375rem 0 0;\r\n transition: all 0.2s ease;\r\n border: 1px solid transparent;\r\n border-bottom: none;\r\n}\r\n\r\n/**\r\n * Minimal 스타일 탭 버튼 - JSidebarAdvanced와 높이 맞춤\r\n */\r\n:deep([role=\"tablist\"][class*=\"p-1\"] [role=\"tab\"]) {\r\n padding: 0.625rem 0.5rem;\r\n}\r\n\r\n/**\r\n * 비활성 탭 - 명확하게 구분\r\n * Inactive tabs - clear distinction\r\n */\r\n:deep([role=\"tab\"][data-state=\"inactive\"]) {\r\n background: hsl(var(--muted) / 0.2);\r\n color: hsl(var(--muted-foreground));\r\n border-top: 1px solid hsl(var(--border) / 0.4);\r\n border-left: 1px solid hsl(var(--border) / 0.4);\r\n border-right: 1px solid hsl(var(--border) / 0.4);\r\n}\r\n\r\n:deep([role=\"tab\"][data-state=\"inactive\"]:hover) {\r\n background: hsl(var(--muted) / 0.4);\r\n color: hsl(var(--foreground));\r\n}\r\n\r\n/**\r\n * 다크모드에서 비활성 탭 - 다크 배경색 사용\r\n * Inactive tabs in dark mode - use dark background\r\n */\r\n.dark :deep([role=\"tab\"][data-state=\"inactive\"]) {\r\n background: hsl(var(--secondary));\r\n color: hsl(var(--secondary-foreground));\r\n border-top: 1px solid hsl(var(--border) / 0.5);\r\n border-left: 1px solid hsl(var(--border) / 0.5);\r\n border-right: 1px solid hsl(var(--border) / 0.5);\r\n}\r\n\r\n.dark :deep([role=\"tab\"][data-state=\"inactive\"]:hover) {\r\n background: hsl(var(--muted));\r\n color: hsl(var(--muted-foreground));\r\n}\r\n\r\n/**\r\n * 활성 탭 - 강조된 스타일\r\n * Active tab - emphasized style\r\n */\r\n:deep([role=\"tab\"][data-state=\"active\"]) {\r\n background: hsl(var(--background));\r\n color: hsl(var(--foreground));\r\n font-weight: 500;\r\n border-top: 2px solid hsl(var(--primary));\r\n border-left: 1px solid hsl(var(--border));\r\n border-right: 1px solid hsl(var(--border));\r\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);\r\n z-index: 1;\r\n}\r\n\r\n/**\r\n * 다크모드에서 활성 탭 - 배경색 명확히 구분\r\n * Active tab in dark mode - clear background distinction\r\n */\r\n.dark :deep([role=\"tab\"][data-state=\"active\"]) {\r\n background: hsl(var(--card));\r\n color: hsl(var(--card-foreground));\r\n border-top: 2px solid hsl(var(--primary));\r\n border-left: 1px solid hsl(var(--border));\r\n border-right: 1px solid hsl(var(--border));\r\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);\r\n}\r\n\r\n/**\r\n * 콘텐츠 영역에 상단 보더 추가\r\n * Add top border to content area\r\n */\r\n:deep([role=\"tabpanel\"]) {\r\n border-top: 1px solid hsl(var(--border));\r\n}\r\n\r\n/**\r\n * 다크모드에서 콘텐츠 영역 보더 - 더 부드러운 구분\r\n * Content area border in dark mode - subtler separation\r\n */\r\n.dark :deep([role=\"tabpanel\"]) {\r\n border-top: 1px solid hsl(var(--border) / 0.6);\r\n}\r\n</style>\r\n\r\n"],"names":["props","__props","emit","__emit","safeTabs","computed","internalActiveId","ref","isHandlingEvent","watch","newValue","newTabs","t","handleTabValueChange","value","stringValue","nextTick","handleTabClick","tabId","handleCloseTab","e","rootClasses","classes","STYLE_PRESETS","preset","listClasses","_createBlock","_unref","Tabs","_createVNode","TabsList","_createElementBlock","_Fragment","_renderList","tab","TabsTrigger","$event","_normalizeClass","JIcon","_createElementVNode","_hoisted_1","_toDisplayString","X","_hoisted_3","TabsContent","_renderSlot","_ctx","_openBlock","_resolveDynamicComponent","_mergeProps","_hoisted_4","_hoisted_5"],"mappings":"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"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { defineComponent as V, computed as d, ref as w, watch as g, createBlock as u, openBlock as n, unref as o, normalizeClass as v, withCtx as f, createVNode as x, createElementVNode as C, createElementBlock as m, Fragment as y, renderList as k, createCommentVNode as T, toDisplayString as b, renderSlot as A, resolveDynamicComponent as B, mergeProps as D, nextTick as $ } from "vue";
|
|
2
|
+
import "../shadcn/index.js";
|
|
3
|
+
import { X as L } from "lucide-vue-next";
|
|
4
|
+
import { cn as F } from "../../lib/utils.js";
|
|
5
|
+
import H from "../atoms/JIcon.vue.js";
|
|
6
|
+
import J from "../shadcn/Tabs.vue.js";
|
|
7
|
+
import R from "../shadcn/TabsList.vue.js";
|
|
8
|
+
import U from "../shadcn/TabsTrigger.vue.js";
|
|
9
|
+
import X from "../shadcn/TabsContent.vue.js";
|
|
10
|
+
const Y = { class: "flex-1 truncate" }, q = ["aria-label", "onClick"], G = { class: "flex-1 w-full overflow-auto" }, K = {
|
|
11
|
+
key: 1,
|
|
12
|
+
class: "p-4"
|
|
13
|
+
}, M = { class: "text-muted-foreground" }, ne = /* @__PURE__ */ V({
|
|
14
|
+
__name: "JTabs",
|
|
15
|
+
props: {
|
|
16
|
+
tabs: {},
|
|
17
|
+
activeTabId: {},
|
|
18
|
+
className: {},
|
|
19
|
+
listClassName: {},
|
|
20
|
+
styletype: { default: "default" }
|
|
21
|
+
},
|
|
22
|
+
emits: ["tabChange", "tabClose", "update:activeTabId"],
|
|
23
|
+
setup(N, { emit: P }) {
|
|
24
|
+
const s = N, r = P, c = d(() => Array.isArray(s.tabs) ? s.tabs : []), a = w(
|
|
25
|
+
s.activeTabId || (c.value.length > 0 ? c.value[0]?.id : "") || ""
|
|
26
|
+
);
|
|
27
|
+
let i = !1;
|
|
28
|
+
g(() => s.activeTabId, (e) => {
|
|
29
|
+
e !== void 0 && e !== a.value && (a.value = e);
|
|
30
|
+
}, { immediate: !0 }), g(c, (e) => {
|
|
31
|
+
!s.activeTabId && e.length > 0 && !e.find((l) => l.id === a.value) && e[0] && (a.value = e[0].id);
|
|
32
|
+
});
|
|
33
|
+
const S = (e) => {
|
|
34
|
+
if (i) return;
|
|
35
|
+
const l = String(e);
|
|
36
|
+
l !== a.value && (i = !0, a.value = l, r("update:activeTabId", l), r("tabChange", l), $(() => {
|
|
37
|
+
i = !1;
|
|
38
|
+
}));
|
|
39
|
+
}, z = (e) => {
|
|
40
|
+
i || e === a.value || (i = !0, a.value = e, r("update:activeTabId", e), r("tabChange", e), $(() => {
|
|
41
|
+
i = !1;
|
|
42
|
+
}));
|
|
43
|
+
}, E = (e, l) => {
|
|
44
|
+
e.stopPropagation(), r("tabClose", l);
|
|
45
|
+
}, I = d(() => {
|
|
46
|
+
const e = ["flex", "flex-col", "w-full", "h-full"];
|
|
47
|
+
return s.className && e.push(s.className), e.join(" ");
|
|
48
|
+
}), _ = {
|
|
49
|
+
default: {
|
|
50
|
+
tabPaddingClass: "px-3 py-2",
|
|
51
|
+
tabTextSizeClass: "text-sm",
|
|
52
|
+
listPaddingClass: "p-2"
|
|
53
|
+
},
|
|
54
|
+
minimal: {
|
|
55
|
+
tabPaddingClass: "px-2 py-1",
|
|
56
|
+
tabTextSizeClass: "text-xs",
|
|
57
|
+
listPaddingClass: "p-1"
|
|
58
|
+
}
|
|
59
|
+
}, p = d(() => _[s.styletype] ?? _.default), j = d(() => {
|
|
60
|
+
const e = ["w-full", "justify-start", p.value.listPaddingClass];
|
|
61
|
+
return s.listClassName && e.push(s.listClassName), e.join(" ");
|
|
62
|
+
});
|
|
63
|
+
return (e, l) => (n(), u(o(J), {
|
|
64
|
+
"model-value": a.value,
|
|
65
|
+
"onUpdate:modelValue": S,
|
|
66
|
+
orientation: "horizontal",
|
|
67
|
+
class: v(I.value)
|
|
68
|
+
}, {
|
|
69
|
+
default: f(() => [
|
|
70
|
+
x(o(R), {
|
|
71
|
+
class: v(j.value)
|
|
72
|
+
}, {
|
|
73
|
+
default: f(() => [
|
|
74
|
+
(n(!0), m(y, null, k(c.value, (t) => (n(), u(o(U), {
|
|
75
|
+
key: t.id,
|
|
76
|
+
value: t.id,
|
|
77
|
+
onClick: (h) => z(t.id),
|
|
78
|
+
class: v(o(F)("!flex !items-center !gap-2", p.value.tabPaddingClass, p.value.tabTextSizeClass))
|
|
79
|
+
}, {
|
|
80
|
+
default: f(() => [
|
|
81
|
+
t.icon ? (n(), u(H, {
|
|
82
|
+
key: 0,
|
|
83
|
+
name: t.icon,
|
|
84
|
+
size: "sm",
|
|
85
|
+
class: "flex-shrink-0"
|
|
86
|
+
}, null, 8, ["name"])) : T("", !0),
|
|
87
|
+
C("span", Y, b(t.label), 1),
|
|
88
|
+
t.closable ? (n(), m("button", {
|
|
89
|
+
key: 1,
|
|
90
|
+
type: "button",
|
|
91
|
+
class: "flex-shrink-0 h-4 w-4 rounded-sm hover:bg-destructive/10 hover:text-destructive transition-colors focus:outline-none focus:ring-2 focus:ring-ring flex items-center justify-center",
|
|
92
|
+
"aria-label": `${t.label} 탭 닫기`,
|
|
93
|
+
onClick: (h) => E(h, t.id)
|
|
94
|
+
}, [
|
|
95
|
+
x(o(L), { class: "h-3 w-3" })
|
|
96
|
+
], 8, q)) : T("", !0)
|
|
97
|
+
]),
|
|
98
|
+
_: 2
|
|
99
|
+
}, 1032, ["value", "onClick", "class"]))), 128))
|
|
100
|
+
]),
|
|
101
|
+
_: 1
|
|
102
|
+
}, 8, ["class"]),
|
|
103
|
+
C("div", G, [
|
|
104
|
+
(n(!0), m(y, null, k(c.value, (t) => (n(), u(o(X), {
|
|
105
|
+
key: `content-${t.id}`,
|
|
106
|
+
value: t.id,
|
|
107
|
+
class: "h-full mt-0 data-[state=active]:flex data-[state=active]:flex-col"
|
|
108
|
+
}, {
|
|
109
|
+
default: f(() => [
|
|
110
|
+
A(e.$slots, `content-${t.id}`, { tab: t }, () => [
|
|
111
|
+
t.component ? (n(), u(B(t.component), D({
|
|
112
|
+
key: 0,
|
|
113
|
+
ref_for: !0
|
|
114
|
+
}, t.props || {}), null, 16)) : (n(), m("div", K, [
|
|
115
|
+
C("p", M, b(t.label) + " 콘텐츠", 1)
|
|
116
|
+
]))
|
|
117
|
+
], !0)
|
|
118
|
+
]),
|
|
119
|
+
_: 2
|
|
120
|
+
}, 1032, ["value"]))), 128))
|
|
121
|
+
])
|
|
122
|
+
]),
|
|
123
|
+
_: 3
|
|
124
|
+
}, 8, ["model-value", "class"]));
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
export {
|
|
128
|
+
ne as default
|
|
129
|
+
};
|
|
130
|
+
//# sourceMappingURL=JTabs.vue2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"JTabs.vue2.js","sources":["../../../../src/components/molecules/JTabs.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { computed, ref, watch, nextTick } from 'vue'\r\nimport { Tabs, TabsList, TabsTrigger, TabsContent } from '@/components/shadcn'\r\nimport type { JTabsProps, JTabsEmits } from '@/types/dynamic-tabs.types'\r\nimport { X } from 'lucide-vue-next'\r\nimport { cn } from '@/lib/utils'\r\nimport JIcon from '@/components/atoms/JIcon.vue'\r\n\r\n/**\r\n * JTabs - 기본 탭 UI 컴포넌트 (molecules)\r\n * Basic Tabs UI Component\r\n * \r\n * @description\r\n * 정적인 탭 목록을 렌더링하는 기본 탭 컴포넌트입니다.\r\n * 닫기 버튼, 아이콘 등을 지원합니다.\r\n * \r\n * @example\r\n * ```vue\r\n * <JTabs \r\n * :tabs=\"tabs\"\r\n * :active-tab-id=\"activeId\"\r\n * @tab-change=\"handleChange\"\r\n * @tab-close=\"handleClose\"\r\n * />\r\n * ```\r\n */\r\n\r\ntype StyleType = 'default' | 'minimal'\r\n\r\nconst props = withDefaults(defineProps<JTabsProps>(), {\r\n styletype: 'default',\r\n})\r\n\r\nconst emit = defineEmits<JTabsEmits>()\r\n\r\n/**\r\n * 안전한 tabs 배열 (undefined/null 체크)\r\n * Safe tabs array (undefined/null check)\r\n */\r\nconst safeTabs = computed(() => {\r\n return Array.isArray(props.tabs) ? props.tabs : []\r\n})\r\n\r\n/**\r\n * 현재 활성화된 탭 ID (내부 상태)\r\n * Current active tab ID (internal state)\r\n */\r\nconst internalActiveId = ref<string>(\r\n props.activeTabId || (safeTabs.value.length > 0 ? safeTabs.value[0]?.id : '') || ''\r\n)\r\n\r\n/**\r\n * 이벤트 처리 중 플래그 (중복 이벤트 방지)\r\n * Flag to prevent duplicate events\r\n */\r\nlet isHandlingEvent = false\r\n\r\n/**\r\n * props.activeTabId가 변경되면 내부 상태 동기화\r\n * Sync internal state when props.activeTabId changes\r\n */\r\nwatch(() => props.activeTabId, (newValue) => {\r\n if (newValue !== undefined && newValue !== internalActiveId.value) {\r\n internalActiveId.value = newValue\r\n }\r\n}, { immediate: true })\r\n\r\n/**\r\n * props.tabs가 변경되고 activeTabId가 없으면 첫 번째 탭 활성화\r\n * Activate first tab when tabs change and no activeTabId\r\n */\r\nwatch(safeTabs, (newTabs) => {\r\n if (!props.activeTabId && newTabs.length > 0 && !newTabs.find(t => t.id === internalActiveId.value) && newTabs[0]) {\r\n internalActiveId.value = newTabs[0].id\r\n }\r\n})\r\n\r\n/**\r\n * 탭 값 변경 핸들러 (reka-ui TabsRoot에서 직접 호출됨)\r\n * Tab value change handler (called directly from reka-ui TabsRoot)\r\n */\r\nconst handleTabValueChange = (value: string | number) => {\r\n if (isHandlingEvent) return\r\n \r\n const stringValue = String(value)\r\n if (stringValue !== internalActiveId.value) {\r\n isHandlingEvent = true\r\n internalActiveId.value = stringValue\r\n emit('update:activeTabId', stringValue)\r\n emit('tabChange', stringValue)\r\n // 다음 tick에서 플래그 리셋\r\n nextTick(() => {\r\n isHandlingEvent = false\r\n })\r\n }\r\n}\r\n\r\n/**\r\n * 탭 클릭 핸들러 (백업 방안 - reka-ui 이벤트가 작동하지 않을 경우)\r\n * Tab click handler (backup - in case reka-ui events don't work)\r\n */\r\nconst handleTabClick = (tabId: string) => {\r\n // reka-ui 이벤트가 작동하지 않을 경우 직접 처리\r\n // handleTabValueChange가 이미 처리했으면 중복 방지\r\n if (isHandlingEvent || tabId === internalActiveId.value) return\r\n \r\n isHandlingEvent = true\r\n internalActiveId.value = tabId\r\n emit('update:activeTabId', tabId)\r\n emit('tabChange', tabId)\r\n // 다음 tick에서 플래그 리셋\r\n nextTick(() => {\r\n isHandlingEvent = false\r\n })\r\n}\r\n\r\n/**\r\n * 탭 닫기 핸들러\r\n * Tab close handler\r\n */\r\nconst handleCloseTab = (e: Event, tabId: string) => {\r\n e.stopPropagation() // 탭 클릭 이벤트 전파 방지\r\n emit('tabClose', tabId)\r\n}\r\n\r\n/**\r\n * 루트 클래스\r\n * Root classes\r\n */\r\nconst rootClasses = computed(() => {\r\n const classes = ['flex', 'flex-col', 'w-full', 'h-full']\r\n \r\n if (props.className) {\r\n classes.push(props.className)\r\n }\r\n \r\n return classes.join(' ')\r\n})\r\n\r\n/**\r\n * 스타일 프리셋\r\n */\r\nconst STYLE_PRESETS: Record<StyleType, {\r\n tabPaddingClass: string\r\n tabTextSizeClass: string\r\n listPaddingClass: string\r\n}> = {\r\n default: {\r\n tabPaddingClass: 'px-3 py-2',\r\n tabTextSizeClass: 'text-sm',\r\n listPaddingClass: 'p-2',\r\n },\r\n minimal: {\r\n tabPaddingClass: 'px-2 py-1',\r\n tabTextSizeClass: 'text-xs',\r\n listPaddingClass: 'p-1',\r\n },\r\n}\r\n\r\nconst preset = computed(() => {\r\n return STYLE_PRESETS[props.styletype] ?? STYLE_PRESETS.default\r\n})\r\n\r\n/**\r\n * 탭 리스트 클래스\r\n * Tabs list classes\r\n */\r\nconst listClasses = computed(() => {\r\n const classes = ['w-full', 'justify-start', preset.value.listPaddingClass]\r\n \r\n if (props.listClassName) {\r\n classes.push(props.listClassName)\r\n }\r\n \r\n return classes.join(' ')\r\n})\r\n</script>\r\n\r\n<template>\r\n <Tabs\r\n :model-value=\"internalActiveId\"\r\n @update:model-value=\"handleTabValueChange\"\r\n orientation=\"horizontal\"\r\n :class=\"rootClasses\"\r\n >\r\n <!-- 탭 헤더 영역 / Tab Headers -->\r\n <TabsList :class=\"listClasses\">\r\n <TabsTrigger\r\n v-for=\"tab in safeTabs\"\r\n :key=\"tab.id\"\r\n :value=\"tab.id\"\r\n @click=\"handleTabClick(tab.id)\"\r\n :class=\"cn('!flex !items-center !gap-2', preset.tabPaddingClass, preset.tabTextSizeClass)\"\r\n >\r\n <!-- 탭 아이콘 (있을 경우) / Tab Icon -->\r\n <JIcon \r\n v-if=\"tab.icon\" \r\n :name=\"tab.icon\" \r\n size=\"sm\"\r\n class=\"flex-shrink-0\"\r\n />\r\n \r\n <!-- 탭 레이블 / Tab Label -->\r\n <span class=\"flex-1 truncate\">{{ tab.label }}</span>\r\n \r\n <!-- 닫기 버튼 / Close Button (항상 표시) -->\r\n <button\r\n v-if=\"tab.closable\"\r\n type=\"button\"\r\n class=\"flex-shrink-0 h-4 w-4 rounded-sm hover:bg-destructive/10 hover:text-destructive transition-colors focus:outline-none focus:ring-2 focus:ring-ring flex items-center justify-center\"\r\n :aria-label=\"`${tab.label} 탭 닫기`\"\r\n @click=\"(e) => handleCloseTab(e, tab.id)\"\r\n >\r\n <X class=\"h-3 w-3\" />\r\n </button>\r\n </TabsTrigger>\r\n </TabsList>\r\n\r\n <!-- 탭 콘텐츠 영역 / Tab Contents -->\r\n <div class=\"flex-1 w-full overflow-auto\">\r\n <TabsContent\r\n v-for=\"tab in safeTabs\"\r\n :key=\"`content-${tab.id}`\"\r\n :value=\"tab.id\"\r\n class=\"h-full mt-0 data-[state=active]:flex data-[state=active]:flex-col\"\r\n >\r\n <!-- 슬롯 우선 / Slot First -->\r\n <slot :name=\"`content-${tab.id}`\" :tab=\"tab\">\r\n <!-- 동적 컴포넌트 렌더링 / Dynamic Component Rendering -->\r\n <component\r\n v-if=\"tab.component\"\r\n :is=\"tab.component\"\r\n v-bind=\"tab.props || {}\"\r\n />\r\n \r\n <!-- 기본 콘텐츠 / Default Content -->\r\n <div v-else class=\"p-4\">\r\n <p class=\"text-muted-foreground\">{{ tab.label }} 콘텐츠</p>\r\n </div>\r\n </slot>\r\n </TabsContent>\r\n </div>\r\n </Tabs>\r\n</template>\r\n\r\n<style scoped>\r\n/**\r\n * 탭 리스트 스타일 - 하단 보더 제거\r\n * Tab list styles without bottom border\r\n */\r\n:deep([role=\"tablist\"]) {\r\n overflow-x: auto;\r\n overflow-y: hidden;\r\n scrollbar-width: thin;\r\n scrollbar-color: rgba(0, 0, 0, 0.2) transparent;\r\n background: hsl(var(--background));\r\n padding: 0 0.5rem;\r\n padding-top: 0.5rem;\r\n gap: 0.25rem;\r\n border-bottom: none;\r\n}\r\n\r\n:deep([role=\"tablist\"]::-webkit-scrollbar) {\r\n height: 6px;\r\n}\r\n\r\n:deep([role=\"tablist\"]::-webkit-scrollbar-track) {\r\n background: transparent;\r\n}\r\n\r\n:deep([role=\"tablist\"]::-webkit-scrollbar-thumb) {\r\n background-color: rgba(0, 0, 0, 0.2);\r\n border-radius: 3px;\r\n}\r\n\r\n:deep([role=\"tablist\"]::-webkit-scrollbar-thumb:hover) {\r\n background-color: rgba(0, 0, 0, 0.3);\r\n}\r\n\r\n/**\r\n * 다크모드에서 스크롤바 스타일\r\n * Scrollbar styles in dark mode\r\n */\r\n.dark :deep([role=\"tablist\"]::-webkit-scrollbar-thumb) {\r\n background-color: rgba(255, 255, 255, 0.2);\r\n}\r\n\r\n.dark :deep([role=\"tablist\"]::-webkit-scrollbar-thumb:hover) {\r\n background-color: rgba(255, 255, 255, 0.3);\r\n}\r\n\r\n.dark :deep([role=\"tablist\"]) {\r\n scrollbar-color: rgba(255, 255, 255, 0.2) transparent;\r\n}\r\n\r\n/**\r\n * 탭 버튼 스타일 - 명확한 구분\r\n * Tab button styles - clear distinction\r\n */\r\n:deep([role=\"tab\"]) {\r\n position: relative;\r\n padding: 0.625rem 1rem;\r\n border-radius: 0.375rem 0.375rem 0 0;\r\n transition: all 0.2s ease;\r\n border: 1px solid transparent;\r\n border-bottom: none;\r\n}\r\n\r\n/**\r\n * Minimal 스타일 탭 버튼 - JSidebarAdvanced와 높이 맞춤\r\n */\r\n:deep([role=\"tablist\"][class*=\"p-1\"] [role=\"tab\"]) {\r\n padding: 0.625rem 0.5rem;\r\n}\r\n\r\n/**\r\n * 비활성 탭 - 명확하게 구분\r\n * Inactive tabs - clear distinction\r\n */\r\n:deep([role=\"tab\"][data-state=\"inactive\"]) {\r\n background: hsl(var(--muted) / 0.2);\r\n color: hsl(var(--muted-foreground));\r\n border-top: 1px solid hsl(var(--border) / 0.4);\r\n border-left: 1px solid hsl(var(--border) / 0.4);\r\n border-right: 1px solid hsl(var(--border) / 0.4);\r\n}\r\n\r\n:deep([role=\"tab\"][data-state=\"inactive\"]:hover) {\r\n background: hsl(var(--muted) / 0.4);\r\n color: hsl(var(--foreground));\r\n}\r\n\r\n/**\r\n * 다크모드에서 비활성 탭 - 다크 배경색 사용\r\n * Inactive tabs in dark mode - use dark background\r\n */\r\n.dark :deep([role=\"tab\"][data-state=\"inactive\"]) {\r\n background: hsl(var(--secondary));\r\n color: hsl(var(--secondary-foreground));\r\n border-top: 1px solid hsl(var(--border) / 0.5);\r\n border-left: 1px solid hsl(var(--border) / 0.5);\r\n border-right: 1px solid hsl(var(--border) / 0.5);\r\n}\r\n\r\n.dark :deep([role=\"tab\"][data-state=\"inactive\"]:hover) {\r\n background: hsl(var(--muted));\r\n color: hsl(var(--muted-foreground));\r\n}\r\n\r\n/**\r\n * 활성 탭 - 강조된 스타일\r\n * Active tab - emphasized style\r\n */\r\n:deep([role=\"tab\"][data-state=\"active\"]) {\r\n background: hsl(var(--background));\r\n color: hsl(var(--foreground));\r\n font-weight: 500;\r\n border-top: 2px solid hsl(var(--primary));\r\n border-left: 1px solid hsl(var(--border));\r\n border-right: 1px solid hsl(var(--border));\r\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);\r\n z-index: 1;\r\n}\r\n\r\n/**\r\n * 다크모드에서 활성 탭 - 배경색 명확히 구분\r\n * Active tab in dark mode - clear background distinction\r\n */\r\n.dark :deep([role=\"tab\"][data-state=\"active\"]) {\r\n background: hsl(var(--card));\r\n color: hsl(var(--card-foreground));\r\n border-top: 2px solid hsl(var(--primary));\r\n border-left: 1px solid hsl(var(--border));\r\n border-right: 1px solid hsl(var(--border));\r\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);\r\n}\r\n\r\n/**\r\n * 콘텐츠 영역에 상단 보더 추가\r\n * Add top border to content area\r\n */\r\n:deep([role=\"tabpanel\"]) {\r\n border-top: 1px solid hsl(var(--border));\r\n}\r\n\r\n/**\r\n * 다크모드에서 콘텐츠 영역 보더 - 더 부드러운 구분\r\n * Content area border in dark mode - subtler separation\r\n */\r\n.dark :deep([role=\"tabpanel\"]) {\r\n border-top: 1px solid hsl(var(--border) / 0.6);\r\n}\r\n</style>\r\n\r\n"],"names":["props","__props","emit","__emit","safeTabs","computed","internalActiveId","ref","isHandlingEvent","watch","newValue","newTabs","t","handleTabValueChange","value","stringValue","nextTick","handleTabClick","tabId","handleCloseTab","rootClasses","classes","STYLE_PRESETS","preset","listClasses","_createBlock","_unref","Tabs","_createVNode","TabsList","_createElementBlock","_Fragment","_renderList","tab","TabsTrigger","$event","_normalizeClass","JIcon","_createElementVNode","_hoisted_1","_toDisplayString","e","X","_hoisted_3","TabsContent","_renderSlot","_ctx","_openBlock","_resolveDynamicComponent","_mergeProps","_hoisted_4","_hoisted_5"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AA6BA,UAAMA,IAAQC,GAIRC,IAAOC,GAMPC,IAAWC,EAAS,MACjB,MAAM,QAAQL,EAAM,IAAI,IAAIA,EAAM,OAAO,CAAA,CACjD,GAMKM,IAAmBC;AAAA,MACvBP,EAAM,gBAAgBI,EAAS,MAAM,SAAS,IAAIA,EAAS,MAAM,CAAC,GAAG,KAAK,OAAO;AAAA,IAAA;AAOnF,QAAII,IAAkB;AAMtB,IAAAC,EAAM,MAAMT,EAAM,aAAa,CAACU,MAAa;AAC3C,MAAIA,MAAa,UAAaA,MAAaJ,EAAiB,UAC1DA,EAAiB,QAAQI;AAAA,IAE7B,GAAG,EAAE,WAAW,IAAM,GAMtBD,EAAML,GAAU,CAACO,MAAY;AAC3B,MAAI,CAACX,EAAM,eAAeW,EAAQ,SAAS,KAAK,CAACA,EAAQ,KAAK,CAAAC,MAAKA,EAAE,OAAON,EAAiB,KAAK,KAAKK,EAAQ,CAAC,MAC9GL,EAAiB,QAAQK,EAAQ,CAAC,EAAE;AAAA,IAExC,CAAC;AAMD,UAAME,IAAuB,CAACC,MAA2B;AACvD,UAAIN,EAAiB;AAErB,YAAMO,IAAc,OAAOD,CAAK;AAChC,MAAIC,MAAgBT,EAAiB,UACnCE,IAAkB,IAClBF,EAAiB,QAAQS,GACzBb,EAAK,sBAAsBa,CAAW,GACtCb,EAAK,aAAaa,CAAW,GAE7BC,EAAS,MAAM;AACb,QAAAR,IAAkB;AAAA,MACpB,CAAC;AAAA,IAEL,GAMMS,IAAiB,CAACC,MAAkB;AAGxC,MAAIV,KAAmBU,MAAUZ,EAAiB,UAElDE,IAAkB,IAClBF,EAAiB,QAAQY,GACzBhB,EAAK,sBAAsBgB,CAAK,GAChChB,EAAK,aAAagB,CAAK,GAEvBF,EAAS,MAAM;AACb,QAAAR,IAAkB;AAAA,MACpB,CAAC;AAAA,IACH,GAMMW,IAAiB,CAAC,GAAUD,MAAkB;AAClD,QAAE,gBAAA,GACFhB,EAAK,YAAYgB,CAAK;AAAA,IACxB,GAMME,IAAcf,EAAS,MAAM;AACjC,YAAMgB,IAAU,CAAC,QAAQ,YAAY,UAAU,QAAQ;AAEvD,aAAIrB,EAAM,aACRqB,EAAQ,KAAKrB,EAAM,SAAS,GAGvBqB,EAAQ,KAAK,GAAG;AAAA,IACzB,CAAC,GAKKC,IAID;AAAA,MACH,SAAS;AAAA,QACP,iBAAiB;AAAA,QACjB,kBAAkB;AAAA,QAClB,kBAAkB;AAAA,MAAA;AAAA,MAEpB,SAAS;AAAA,QACP,iBAAiB;AAAA,QACjB,kBAAkB;AAAA,QAClB,kBAAkB;AAAA,MAAA;AAAA,IACpB,GAGIC,IAASlB,EAAS,MACfiB,EAActB,EAAM,SAAS,KAAKsB,EAAc,OACxD,GAMKE,IAAcnB,EAAS,MAAM;AACjC,YAAMgB,IAAU,CAAC,UAAU,iBAAiBE,EAAO,MAAM,gBAAgB;AAEzE,aAAIvB,EAAM,iBACRqB,EAAQ,KAAKrB,EAAM,aAAa,GAG3BqB,EAAQ,KAAK,GAAG;AAAA,IACzB,CAAC;2BAICI,EA+DOC,EAAAC,CAAA,GAAA;AAAA,MA9DJ,eAAarB,EAAA;AAAA,MACb,uBAAoBO;AAAA,MACrB,aAAY;AAAA,MACX,SAAOO,EAAA,KAAW;AAAA,IAAA;iBAGnB,MA8BW;AAAA,QA9BXQ,EA8BWF,EAAAG,CAAA,GAAA;AAAA,UA9BA,SAAOL,EAAA,KAAW;AAAA,QAAA;qBAEzB,MAAuB;AAAA,oBADzBM,EA4BcC,GAAA,MAAAC,EA3BE5B,EAAA,OAAQ,CAAf6B,YADTR,EA4BcC,EAAAQ,CAAA,GAAA;AAAA,cA1BX,KAAKD,EAAI;AAAA,cACT,OAAOA,EAAI;AAAA,cACX,SAAK,CAAAE,MAAElB,EAAegB,EAAI,EAAE;AAAA,cAC5B,OAAKG,EAAEV,KAAE,8BAA+BH,EAAA,MAAO,iBAAiBA,EAAA,MAAO,gBAAgB,CAAA;AAAA,YAAA;yBAGxF,MAKE;AAAA,gBAJMU,EAAI,aADZR,EAKEY,GAAA;AAAA;kBAHC,MAAMJ,EAAI;AAAA,kBACX,MAAK;AAAA,kBACL,OAAM;AAAA,gBAAA;gBAIRK,EAAoD,QAApDC,GAAoDC,EAAnBP,EAAI,KAAK,GAAA,CAAA;AAAA,gBAIlCA,EAAI,iBADZH,EAQS,UAAA;AAAA;kBANP,MAAK;AAAA,kBACL,OAAM;AAAA,kBACL,cAAU,GAAKG,EAAI,KAAK;AAAA,kBACxB,SAAK,CAAGQ,MAAMtB,EAAesB,GAAGR,EAAI,EAAE;AAAA,gBAAA;kBAEvCL,EAAqBF,EAAAgB,CAAA,GAAA,EAAlB,OAAM,WAAS;AAAA,gBAAA;;;;;;;QAMxBJ,EAsBM,OAtBNK,GAsBM;AAAA,kBArBJb,EAoBcC,GAAA,MAAAC,EAnBE5B,EAAA,OAAQ,CAAf6B,YADTR,EAoBcC,EAAAkB,CAAA,GAAA;AAAA,YAlBX,KAAG,WAAaX,EAAI,EAAE;AAAA,YACtB,OAAOA,EAAI;AAAA,YACZ,OAAM;AAAA,UAAA;uBAGN,MAYO;AAAA,cAZPY,EAYOC,EAAA,QAAA,WAZiBb,EAAI,EAAE,MAAK,KAAAA,EAAA,GAAnC,MAYO;AAAA,gBATGA,EAAI,aADZc,KAAAtB,EAIEuB,EAFKf,EAAI,SAAS,GAFpBgB,EAIE;AAAA;;mBADQhB,EAAI,SAAK,CAAA,CAAA,GAAA,MAAA,EAAA,MAInBc,EAAA,GAAAjB,EAEM,OAFNoB,GAEM;AAAA,kBADJZ,EAAwD,KAAxDa,GAAwDX,EAApBP,EAAI,KAAK,IAAG,QAAI,CAAA;AAAA,gBAAA;;;;;;;;;;;"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue"),f=require("../atoms/JButton.vue.cjs");require("../shadcn/index.cjs");require("lucide-vue-next");const n=require("../../lib/utils.cjs");require("@internationalized/date");require("../shadcn/badge-variants.cjs");require("@vueuse/core");require("reka-ui");;/* empty css */require("../shadcn/avatar-variants.cjs");const o=require("../atoms/JIcon.vue.cjs"),b=require("../atoms/JLabel.vue.cjs"),x=require("../atoms/JPopover.vue.cjs");require("ag-grid-vue3");require("ag-grid-community");require("ag-grid-enterprise");;/* empty css */;/* empty css */;/* empty css */;/* empty css */const p={class:"flex items-center gap-3 flex-1"},g={class:"flex items-center gap-2"},y={class:"p-2"},C={class:"text-sm text-muted-foreground whitespace-normal break-words"},_={key:0,class:"flex items-center gap-2"},h={key:1},k=e.defineComponent({__name:"JTitlebar",props:{styletype:{default:"default"},icon:{},title:{},description:{},buttons:{default:()=>[]}},emits:["buttonClick"],setup(r,{emit:a}){const c=r,i={default:{class:"flex items-center justify-between w-full h-14 px-4 border-b border-border bg-background",iconClass:"text-primary",titleClass:"text-foreground",infoIconClass:"text-muted-foreground hover:text-primary"},primary:{class:"flex items-center justify-between w-full h-14 px-4 border-b border-blue-400/30 bg-blue-500",iconClass:"text-white",titleClass:"text-white font-semibold",infoIconClass:"text-white/80 hover:text-white"},accent:{class:"flex items-center justify-between w-full h-14 px-4 border-b border-blue-200 bg-blue-50",iconClass:"text-blue-600",titleClass:"text-blue-700 font-semibold",infoIconClass:"text-blue-600/70 hover:text-blue-700"},neutral:{class:"flex items-center justify-between w-full h-14 px-4 border-b border-gray-300 bg-gray-100",iconClass:"text-gray-600",titleClass:"text-gray-700",infoIconClass:"text-gray-500 hover:text-gray-700"},elevated:{class:"flex items-center justify-between w-full h-14 px-4 border-b border-border bg-background shadow-md",iconClass:"text-primary",titleClass:"text-foreground font-semibold",infoIconClass:"text-muted-foreground hover:text-primary"}},l=e.computed(()=>i[c.styletype]??i.default),u=a,d=s=>{s.onClick?.(),u("buttonClick",s)};return(s,v)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(e.unref(n.cn)(l.value.class))},[e.createElementVNode("div",p,[r.icon?(e.openBlock(),e.createBlock(e.unref(o.default),{key:0,name:r.icon,size:"md",class:e.normalizeClass(l.value.iconClass)},null,8,["name","class"])):e.createCommentVNode("",!0),e.createElementVNode("div",g,[e.createVNode(e.unref(b.default),{text:r.title||"",class:e.normalizeClass(e.unref(n.cn)("text-lg font-semibold",l.value.titleClass))},null,8,["text","class"]),r.description?(e.openBlock(),e.createBlock(e.unref(x.default),{key:0,position:"bottom",align:"center","side-offset":8},{trigger:e.withCtx(()=>[e.createVNode(e.unref(o.default),{name:"info",size:"sm",class:e.normalizeClass(e.unref(n.cn)("cursor-help transition-colors inline-flex",l.value.infoIconClass))},null,8,["class"])]),default:e.withCtx(()=>[e.createElementVNode("div",y,[e.createElementVNode("p",C,e.toDisplayString(r.description),1)])]),_:1})):e.createCommentVNode("",!0)])]),r.buttons&&r.buttons.length>0?(e.openBlock(),e.createElementBlock("div",_,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(r.buttons,(t,m)=>(e.openBlock(),e.createBlock(e.unref(f.default),{key:m,variant:t.variant,styletype:t.styletype,disabled:t.disabled,loading:t.loading,class:e.normalizeClass(t.size==="sm"?"h-8":t.size==="lg"?"h-11":"h-9"),onClick:q=>d(t)},{default:e.withCtx(()=>[t.icon?(e.openBlock(),e.createBlock(e.unref(o.default),{key:0,name:t.icon,size:"sm",class:"mr-1.5"},null,8,["name"])):e.createCommentVNode("",!0),t.text?(e.openBlock(),e.createElementBlock("span",h,e.toDisplayString(t.text),1)):e.createCommentVNode("",!0)]),_:2},1032,["variant","styletype","disabled","loading","class","onClick"]))),128))])):e.createCommentVNode("",!0),e.renderSlot(s.$slots,"buttons")],2))}});exports.default=k;
|
|
2
|
+
//# sourceMappingURL=JTitlebar.vue.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"JTitlebar.vue.cjs","sources":["../../../../src/components/molecules/JTitlebar.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from \"vue\"\nimport { JIcon, JLabel, JPopover, JButton } from '@/components/atoms'\nimport type { ButtonVariants } from '@/components/shadcn'\nimport { cn } from \"@/lib/utils\"\n\nexport type TitlebarButton = {\n /** 버튼 아이콘 */\n icon?: string\n /** 버튼 텍스트 */\n text?: string\n /** 버튼 클릭 핸들러 */\n onClick?: () => void\n /** 버튼 variant */\n variant?: ButtonVariants['variant']\n /** 버튼 스타일 타입 */\n styletype?: 'default' | 'primary' | 'secondary' | 'success' | 'warning' | 'danger' | 'outline' | 'ghost' | 'link' | 'sm' | 'lg' | 'icon'\n /** 버튼 size */\n size?: 'sm' | 'md' | 'lg'\n /** 버튼 비활성화 */\n disabled?: boolean\n /** 버튼 로딩 상태 */\n loading?: boolean\n}\n\ntype StyleType =\n | 'default' // 기본 스타일: 일반 페이지용 (흰 배경, 얇은 보더)\n | 'primary' // 강조 스타일: 주요 기능용 (밝은 파란 배경, 흰 텍스트)\n | 'accent' // 액센트 스타일: 부드러운 강조용 (연한 파란 배경, 진한 텍스트)\n | 'neutral' // 중립 스타일: 서브 페이지용 (회색 배경, 회색 텍스트)\n | 'elevated' // 강조 스타일: 깊이감 있는 구분 (흰 배경, 그림자, 보더)\n\nconst props = withDefaults(\n defineProps<{\n /** Titlebar 스타일 타입 */\n styletype?: StyleType\n /** 프로그램 아이콘 */\n icon?: string\n /** 프로그램명 */\n title?: string\n /** 프로그램 설명 (Popover에 표시) */\n description?: string\n /** 메인 버튼 목록 */\n buttons?: TitlebarButton[]\n }>(),\n {\n styletype: 'default',\n buttons: () => [],\n }\n)\n\n/**\n * styletype -> class 매핑 (배경, 보더, 그림자 등)\n */\nconst STYLE_PRESETS: Record<StyleType, { \n class: string\n iconClass: string // 아이콘 색상 클래스\n titleClass: string // 제목 텍스트 색상 클래스\n infoIconClass: string // 정보 아이콘 색상 클래스\n}> = {\n default: {\n // 기본: 흰 배경 + 얇은 보더 (가장 일반적)\n class: 'flex items-center justify-between w-full h-14 px-4 border-b border-border bg-background',\n iconClass: 'text-primary',\n titleClass: 'text-foreground',\n infoIconClass: 'text-muted-foreground hover:text-primary',\n },\n primary: {\n // 강조: 밝은 파란 배경 + 흰 텍스트 (명확한 강조)\n // text-white를 제거하여 버튼이 색상 상속을 받지 않도록 함\n class: 'flex items-center justify-between w-full h-14 px-4 border-b border-blue-400/30 bg-blue-500',\n iconClass: 'text-white',\n titleClass: 'text-white font-semibold',\n infoIconClass: 'text-white/80 hover:text-white',\n },\n accent: {\n // 액센트: 연한 파란 배경 + 진한 파란 텍스트 (부드러운 강조)\n // text-blue-700을 제거하여 버튼이 색상 상속을 받지 않도록 함\n class: 'flex items-center justify-between w-full h-14 px-4 border-b border-blue-200 bg-blue-50',\n iconClass: 'text-blue-600',\n titleClass: 'text-blue-700 font-semibold',\n infoIconClass: 'text-blue-600/70 hover:text-blue-700',\n },\n neutral: {\n // 중립: 회색 배경 + 회색 텍스트 (확실한 구분)\n // text-gray-700을 제거하여 버튼이 색상 상속을 받지 않도록 함\n class: 'flex items-center justify-between w-full h-14 px-4 border-b border-gray-300 bg-gray-100',\n iconClass: 'text-gray-600',\n titleClass: 'text-gray-700',\n infoIconClass: 'text-gray-500 hover:text-gray-700',\n },\n elevated: {\n // 강조: 흰 배경 + 그림자 + 보더 (깊이감 있는 구분)\n class: 'flex items-center justify-between w-full h-14 px-4 border-b border-border bg-background shadow-md',\n iconClass: 'text-primary',\n titleClass: 'text-foreground font-semibold',\n infoIconClass: 'text-muted-foreground hover:text-primary',\n },\n}\n\nconst preset = computed(() => {\n return STYLE_PRESETS[props.styletype] ?? STYLE_PRESETS.default\n})\n\nconst emit = defineEmits<{\n /** 버튼 클릭 이벤트 */\n buttonClick: [button: TitlebarButton]\n}>()\n\nconst handleButtonClick = (button: TitlebarButton) => {\n // 버튼 클릭 핸들러 패턴:\n // 1. button.onClick이 있으면 실행 (인라인 핸들러)\n // 2. 항상 emit('buttonClick', button) 실행 (부모 컴포넌트로 전달)\n // 주의: onClick과 emit이 모두 실행되므로 중복 처리 가능성 있음\n button.onClick?.()\n emit('buttonClick', button)\n}\n</script>\n\n<template>\n <div :class=\"cn(preset.class)\">\n <!-- 왼쪽: 아이콘 + 프로그램명 -->\n <div class=\"flex items-center gap-3 flex-1\">\n <!-- 아이콘 -->\n <JIcon \n v-if=\"icon\" \n :name=\"icon\" \n size=\"md\" \n :class=\"preset.iconClass\"\n />\n \n <!-- 프로그램명 + 정보 아이콘 + Popover -->\n <div class=\"flex items-center gap-2\">\n <!-- 프로그램명 -->\n <JLabel \n :text=\"title || ''\" \n :class=\"cn('text-lg font-semibold', preset.titleClass)\"\n />\n \n <!-- 정보 아이콘 (description이 있을 때만 표시) -->\n <JPopover \n v-if=\"description\" \n position=\"bottom\"\n align=\"center\"\n :side-offset=\"8\"\n >\n <template #trigger>\n <JIcon \n name=\"info\" \n size=\"sm\" \n :class=\"cn('cursor-help transition-colors inline-flex', preset.infoIconClass)\"\n />\n </template>\n <div class=\"p-2\">\n <p class=\"text-sm text-muted-foreground whitespace-normal break-words\">{{ description }}</p>\n </div>\n </JPopover>\n </div>\n </div>\n\n <!-- 오른쪽: 메인 버튼들 -->\n <!-- buttons prop으로 정의된 버튼들 (v-if로 조건부 렌더링) -->\n <div v-if=\"buttons && buttons.length > 0\" class=\"flex items-center gap-2\">\n <JButton\n v-for=\"(button, index) in buttons\"\n :key=\"index\"\n :variant=\"button.variant\"\n :styletype=\"button.styletype\"\n :disabled=\"button.disabled\"\n :loading=\"button.loading\"\n :class=\"button.size === 'sm' ? 'h-8' : button.size === 'lg' ? 'h-11' : 'h-9'\"\n @click=\"handleButtonClick(button)\"\n >\n <JIcon v-if=\"button.icon\" :name=\"button.icon\" size=\"sm\" class=\"mr-1.5\" />\n <span v-if=\"button.text\">{{ button.text }}</span>\n </JButton>\n </div>\n\n <!-- 버튼 슬롯 레이아웃 설명:\n - buttons prop과 buttons slot이 모두 제공되면 함께 표시됨\n - buttons prop: 구조화된 버튼 정의 (JButton 컴포넌트 사용)\n - buttons slot: 완전한 커스텀 버튼 제어 가능\n - 레이아웃: buttons prop이 먼저 렌더링되고, 그 다음 slot이 렌더링됨 -->\n <slot name=\"buttons\" />\n </div>\n</template>\n\n"],"names":["props","__props","STYLE_PRESETS","preset","computed","emit","__emit","handleButtonClick","button","_createElementBlock","_normalizeClass","_unref","cn","_createElementVNode","_hoisted_1","_createBlock","JIcon","_hoisted_2","_createVNode","JLabel","JPopover","_hoisted_3","_hoisted_4","_toDisplayString","_openBlock","_hoisted_5","_Fragment","_renderList","index","JButton","$event","_hoisted_6","_renderSlot","_ctx"],"mappings":"67CAgCA,MAAMA,EAAQC,EAsBRC,EAKD,CACH,QAAS,CAEP,MAAO,0FACP,UAAW,eACX,WAAY,kBACZ,cAAe,0CAAA,EAEjB,QAAS,CAGP,MAAO,6FACP,UAAW,aACX,WAAY,2BACZ,cAAe,gCAAA,EAEjB,OAAQ,CAGN,MAAO,yFACP,UAAW,gBACX,WAAY,8BACZ,cAAe,sCAAA,EAEjB,QAAS,CAGP,MAAO,0FACP,UAAW,gBACX,WAAY,gBACZ,cAAe,mCAAA,EAEjB,SAAU,CAER,MAAO,oGACP,UAAW,eACX,WAAY,gCACZ,cAAe,0CAAA,CACjB,EAGIC,EAASC,EAAAA,SAAS,IACfF,EAAcF,EAAM,SAAS,GAAKE,EAAc,OACxD,EAEKG,EAAOC,EAKPC,EAAqBC,GAA2B,CAKpDA,EAAO,UAAA,EACPH,EAAK,cAAeG,CAAM,CAC5B,8BAIEC,EAAAA,mBAgEM,MAAA,CAhEA,MAAKC,EAAAA,eAAEC,QAAAC,EAAAA,EAAA,EAAGT,EAAA,MAAO,KAAK,CAAA,CAAA,GAE1BU,EAAAA,mBAoCM,MApCNC,EAoCM,CAjCIb,EAAA,oBADRc,EAAAA,YAKEJ,EAAAA,MAAAK,EAAAA,OAAA,EAAA,OAHC,KAAMf,EAAA,KACP,KAAK,KACJ,MAAKS,EAAAA,eAAEP,EAAA,MAAO,SAAS,CAAA,wDAI1BU,EAAAA,mBAyBM,MAzBNI,EAyBM,CAvBJC,cAGEP,EAAAA,MAAAQ,EAAAA,OAAA,EAAA,CAFC,KAAMlB,EAAA,OAAK,GACX,MAAKS,EAAAA,eAAEC,EAAAA,MAAAC,EAAAA,EAAA,EAAE,wBAA0BT,EAAA,MAAO,UAAU,CAAA,CAAA,2BAK/CF,EAAA,2BADRc,EAAAA,YAgBWJ,EAAAA,MAAAS,EAAAA,OAAA,EAAA,OAdT,SAAS,SACT,MAAM,SACL,cAAa,CAAA,GAEH,kBACT,IAIE,CAJFF,cAIEP,EAAAA,MAAAK,EAAAA,OAAA,EAAA,CAHA,KAAK,OACL,KAAK,KACJ,MAAKN,EAAAA,eAAEC,EAAAA,MAAAC,EAAAA,EAAA,EAAE,4CAA8CT,EAAA,MAAO,aAAa,CAAA,CAAA,wCAGhF,IAEM,CAFNU,EAAAA,mBAEM,MAFNQ,EAEM,CADJR,EAAAA,mBAA4F,IAA5FS,EAA4FC,EAAAA,gBAAlBtB,EAAA,WAAW,EAAA,CAAA,CAAA,4CAQlFA,EAAA,SAAWA,EAAA,QAAQ,OAAM,GAApCuB,EAAAA,YAAAf,EAAAA,mBAcM,MAdNgB,EAcM,EAbJD,EAAAA,UAAA,EAAA,EAAAf,EAAAA,mBAYUiB,WAAA,KAAAC,EAAAA,WAXkB1B,EAAA,QAAO,CAAzBO,EAAQoB,mBADlBb,EAAAA,YAYUJ,EAAAA,MAAAkB,EAAAA,OAAA,EAAA,CAVP,IAAKD,EACL,QAASpB,EAAO,QAChB,UAAWA,EAAO,UAClB,SAAUA,EAAO,SACjB,QAASA,EAAO,QAChB,uBAAOA,EAAO,OAAI,KAAA,MAAoBA,EAAO,OAAI,KAAA,OAAA,KAAA,EACjD,QAAKsB,GAAEvB,EAAkBC,CAAM,CAAA,qBAEhC,IAAyE,CAA5DA,EAAO,oBAApBO,EAAAA,YAAyEJ,EAAAA,MAAAK,EAAAA,OAAA,EAAA,OAA9C,KAAMR,EAAO,KAAM,KAAK,KAAK,MAAM,QAAA,gDAClDA,EAAO,oBAAnBC,EAAAA,mBAAiD,OAAAsB,EAAAR,EAAAA,gBAArBf,EAAO,IAAI,EAAA,CAAA,kJAS3CwB,aAAuBC,EAAA,OAAA,SAAA,CAAA"}
|