@thewrong/ui 0.1.0 → 0.3.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/README.md +25 -4
- package/dist/_virtual/_rolldown/runtime.cjs +1 -0
- package/dist/components/_shared/form-size-tokens.cjs +1 -0
- package/dist/{src/components → components}/_shared/form-size-tokens.d.ts +3 -1
- package/dist/components/_shared/form-size-tokens.esm.js +34 -0
- package/dist/components/action-toast/ActionToast.cjs +1 -0
- package/dist/{src/components → components}/action-toast/ActionToast.d.ts +17 -3
- package/dist/components/action-toast/ActionToast.esm.js +238 -0
- package/dist/{src/components → components}/action-toast/index.d.ts +2 -2
- package/dist/components/animated-height/AnimatedHeight.cjs +1 -0
- package/dist/components/animated-height/AnimatedHeight.esm.js +36 -0
- package/dist/components/animated-height/index.d.ts +2 -0
- package/dist/components/badge/Badge.cjs +1 -0
- package/dist/{src/components → components}/badge/Badge.d.ts +1 -1
- package/dist/components/badge/Badge.esm.js +26 -0
- package/dist/components/badge/index.d.ts +2 -0
- package/dist/components/badge/utils.cjs +1 -0
- package/dist/{src/components → components}/badge/utils.d.ts +1 -1
- package/dist/components/badge/utils.esm.js +38 -0
- package/dist/components/button/Button.cjs +1 -0
- package/dist/components/button/Button.d.ts +19 -0
- package/dist/components/button/Button.esm.js +77 -0
- package/dist/{src/components → components}/button/index.d.ts +2 -2
- package/dist/components/button/utils.cjs +1 -0
- package/dist/{src/components → components}/button/utils.d.ts +1 -1
- package/dist/components/button/utils.esm.js +38 -0
- package/dist/components/checkbox/Checkbox.cjs +1 -0
- package/dist/{src/components → components}/checkbox/Checkbox.d.ts +1 -1
- package/dist/components/checkbox/Checkbox.esm.js +69 -0
- package/dist/components/checkbox/index.d.ts +2 -0
- package/dist/components/checkbox/utils.cjs +1 -0
- package/dist/{src/components → components}/checkbox/utils.d.ts +1 -1
- package/dist/components/checkbox/utils.esm.js +44 -0
- package/dist/components/collapsible/Collapsible.cjs +1 -0
- package/dist/components/collapsible/Collapsible.esm.js +20 -0
- package/dist/components/collapsible/index.d.ts +2 -0
- package/dist/components/copyable-text/CopyableText.cjs +1 -0
- package/dist/components/copyable-text/CopyableText.d.ts +22 -0
- package/dist/components/copyable-text/CopyableText.esm.js +50 -0
- package/dist/components/copyable-text/index.d.ts +2 -0
- package/dist/components/date-input/DateInput.cjs +1 -0
- package/dist/{src/components → components}/date-input/DateInput.d.ts +1 -0
- package/dist/components/date-input/DateInput.esm.js +40 -0
- package/dist/components/date-input/index.d.ts +1 -0
- package/dist/components/date-picker/PickerSheet.cjs +1 -0
- package/dist/components/date-picker/PickerSheet.d.ts +22 -0
- package/dist/components/date-picker/PickerSheet.esm.js +77 -0
- package/dist/components/date-picker/date-picker.cjs +1 -0
- package/dist/{src/components → components}/date-picker/date-picker.d.ts +1 -0
- package/dist/components/date-picker/date-picker.esm.js +183 -0
- package/dist/components/date-picker/date-range-picker.cjs +1 -0
- package/dist/{src/components → components}/date-picker/date-range-picker.d.ts +3 -1
- package/dist/components/date-picker/date-range-picker.esm.js +238 -0
- package/dist/components/date-picker/index.d.ts +5 -0
- package/dist/components/date-picker/month-picker.cjs +1 -0
- package/dist/{src/components → components}/date-picker/month-picker.d.ts +1 -0
- package/dist/components/date-picker/month-picker.esm.js +103 -0
- package/dist/components/drawer/Drawer.cjs +1 -0
- package/dist/components/drawer/Drawer.d.ts +45 -0
- package/dist/components/drawer/Drawer.esm.js +143 -0
- package/dist/components/drawer/index.d.ts +2 -0
- package/dist/components/error-boundary/ErrorBoundary.cjs +1 -0
- package/dist/components/error-boundary/ErrorBoundary.d.ts +23 -0
- package/dist/components/error-boundary/ErrorBoundary.esm.js +46 -0
- package/dist/components/error-boundary/chunk-reload.cjs +1 -0
- package/dist/components/error-boundary/chunk-reload.d.ts +77 -0
- package/dist/components/error-boundary/chunk-reload.esm.js +73 -0
- package/dist/components/error-boundary/index.d.ts +4 -0
- package/dist/components/error-boundary/types.d.ts +23 -0
- package/dist/components/field/Field.cjs +1 -0
- package/dist/components/field/Field.d.ts +16 -0
- package/dist/components/field/Field.esm.js +34 -0
- package/dist/components/field/FieldMessage.cjs +1 -0
- package/dist/components/field/FieldMessage.d.ts +19 -0
- package/dist/components/field/FieldMessage.esm.js +12 -0
- package/dist/components/field/index.d.ts +3 -0
- package/dist/components/field/types.d.ts +24 -0
- package/dist/components/info-tooltip/InfoTooltip.cjs +1 -0
- package/dist/{src/components → components}/info-tooltip/InfoTooltip.d.ts +7 -0
- package/dist/components/info-tooltip/InfoTooltip.esm.js +25 -0
- package/dist/components/info-tooltip/index.d.ts +2 -0
- package/dist/components/input/DecimalInput.cjs +1 -0
- package/dist/components/input/DecimalInput.d.ts +18 -0
- package/dist/components/input/DecimalInput.esm.js +40 -0
- package/dist/components/input/Input.cjs +1 -0
- package/dist/{src/components → components}/input/Input.d.ts +1 -1
- package/dist/components/input/Input.esm.js +89 -0
- package/dist/components/input/PasswordInput.cjs +1 -0
- package/dist/{src/components → components}/input/PasswordInput.d.ts +1 -1
- package/dist/components/input/PasswordInput.esm.js +29 -0
- package/dist/components/input/decimal-validation.cjs +1 -0
- package/dist/components/input/decimal-validation.d.ts +7 -0
- package/dist/components/input/decimal-validation.esm.js +66 -0
- package/dist/components/input/format.cjs +1 -0
- package/dist/{src/components → components}/input/format.d.ts +17 -1
- package/dist/components/input/format.esm.js +44 -0
- package/dist/components/input/index.d.ts +7 -0
- package/dist/{src/components → components}/input/types.d.ts +2 -2
- package/dist/components/input/use-input-format.cjs +1 -0
- package/dist/components/input/use-input-format.d.ts +43 -0
- package/dist/components/input/use-input-format.esm.js +75 -0
- package/dist/components/input/utils.cjs +1 -0
- package/dist/{src/components → components}/input/utils.d.ts +1 -1
- package/dist/components/input/utils.esm.js +24 -0
- package/dist/components/loading-spinner/LoadingSpinner.cjs +1 -0
- package/dist/{src/components → components}/loading-spinner/LoadingSpinner.d.ts +7 -0
- package/dist/components/loading-spinner/LoadingSpinner.esm.js +48 -0
- package/dist/components/loading-spinner/index.d.ts +2 -0
- package/dist/components/modal/Modal.cjs +1 -0
- package/dist/{src/components → components}/modal/Modal.d.ts +34 -2
- package/dist/components/modal/Modal.esm.js +167 -0
- package/dist/components/modal/ModalFocusTrapContext.cjs +1 -0
- package/dist/components/modal/ModalFocusTrapContext.d.ts +18 -0
- package/dist/components/modal/ModalFocusTrapContext.esm.js +36 -0
- package/dist/components/modal/ModalSubView.cjs +1 -0
- package/dist/{src/components → components}/modal/ModalSubView.d.ts +6 -1
- package/dist/components/modal/ModalSubView.esm.js +111 -0
- package/dist/components/modal/StandardModal.cjs +1 -0
- package/dist/{src/components → components}/modal/StandardModal.d.ts +8 -2
- package/dist/components/modal/StandardModal.esm.js +57 -0
- package/dist/components/modal/index.d.ts +6 -0
- package/dist/components/month-range-picker/index.d.ts +2 -0
- package/dist/components/month-range-picker/month-range-picker.cjs +1 -0
- package/dist/components/month-range-picker/month-range-picker.d.ts +16 -0
- package/dist/components/month-range-picker/month-range-picker.esm.js +227 -0
- package/dist/components/month-range-picker/month-range-utils.cjs +1 -0
- package/dist/components/month-range-picker/month-range-utils.d.ts +9 -0
- package/dist/components/month-range-picker/month-range-utils.esm.js +28 -0
- package/dist/components/page-title/PageTitle.cjs +1 -0
- package/dist/components/page-title/PageTitle.esm.js +17 -0
- package/dist/components/page-title/index.d.ts +1 -0
- package/dist/components/popover/Popover.cjs +1 -0
- package/dist/{src/components → components}/popover/Popover.d.ts +19 -1
- package/dist/components/popover/Popover.esm.js +57 -0
- package/dist/components/popover/index.d.ts +2 -0
- package/dist/components/progress/Progress.cjs +1 -0
- package/dist/components/progress/Progress.d.ts +13 -0
- package/dist/components/progress/Progress.esm.js +24 -0
- package/dist/components/progress/index.d.ts +2 -0
- package/dist/components/progress/types.d.ts +13 -0
- package/dist/components/radio/Radio.cjs +1 -0
- package/dist/components/radio/Radio.d.ts +31 -0
- package/dist/components/radio/Radio.esm.js +118 -0
- package/dist/components/radio/index.d.ts +2 -0
- package/dist/components/radio/types.d.ts +24 -0
- package/dist/components/search-box/ExactMatchToggle.cjs +1 -0
- package/dist/components/search-box/ExactMatchToggle.esm.js +28 -0
- package/dist/components/search-box/SearchBox.cjs +1 -0
- package/dist/{src/components → components}/search-box/SearchBox.d.ts +1 -1
- package/dist/components/search-box/SearchBox.esm.js +155 -0
- package/dist/components/search-box/SearchBoxChips.cjs +1 -0
- package/dist/components/search-box/SearchBoxChips.esm.js +36 -0
- package/dist/components/search-box/SearchBoxDateRange.cjs +1 -0
- package/dist/{src/components → components}/search-box/SearchBoxDateRange.d.ts +1 -1
- package/dist/components/search-box/SearchBoxDateRange.esm.js +60 -0
- package/dist/components/search-box/SearchBoxDateSingle.cjs +1 -0
- package/dist/{src/components → components}/search-box/SearchBoxDateSingle.d.ts +1 -1
- package/dist/components/search-box/SearchBoxDateSingle.esm.js +39 -0
- package/dist/components/search-box/SearchBoxField.cjs +1 -0
- package/dist/{src/components → components}/search-box/SearchBoxField.d.ts +1 -1
- package/dist/components/search-box/SearchBoxField.esm.js +48 -0
- package/dist/components/search-box/SearchBoxFloatingInput.cjs +1 -0
- package/dist/components/search-box/SearchBoxFloatingInput.esm.js +43 -0
- package/dist/components/search-box/SearchBoxFloatingSelect.cjs +1 -0
- package/dist/{src/components → components}/search-box/SearchBoxFloatingSelect.d.ts +1 -1
- package/dist/components/search-box/SearchBoxFloatingSelect.esm.js +79 -0
- package/dist/components/search-box/SearchBoxMonth.cjs +1 -0
- package/dist/components/search-box/SearchBoxMonth.esm.js +36 -0
- package/dist/components/search-box/SearchBoxMultiSelect.cjs +1 -0
- package/dist/{src/components → components}/search-box/SearchBoxMultiSelect.d.ts +2 -2
- package/dist/components/search-box/SearchBoxMultiSelect.esm.js +83 -0
- package/dist/components/search-box/SearchBoxSheetContext.cjs +1 -0
- package/dist/components/search-box/SearchBoxSheetContext.esm.js +5 -0
- package/dist/components/search-box/dateRangePresets.cjs +1 -0
- package/dist/{src/components → components}/search-box/dateRangePresets.d.ts +1 -1
- package/dist/components/search-box/dateRangePresets.esm.js +59 -0
- package/dist/{src/components → components}/search-box/index.d.ts +5 -5
- package/dist/components/search-box/parseDateRange.cjs +1 -0
- package/dist/components/search-box/parseDateRange.esm.js +21 -0
- package/dist/components/search-box/parseSearchValues.cjs +1 -0
- package/dist/{src/components → components}/search-box/parseSearchValues.d.ts +2 -2
- package/dist/components/search-box/parseSearchValues.esm.js +15 -0
- package/dist/{src/components → components}/search-box/types.d.ts +1 -1
- package/dist/components/search-box/useSearchBoxState.cjs +1 -0
- package/dist/{src/components → components}/search-box/useSearchBoxState.d.ts +1 -1
- package/dist/components/search-box/useSearchBoxState.esm.js +87 -0
- package/dist/components/segmented-code-input/SegmentedCodeInput.cjs +1 -0
- package/dist/components/segmented-code-input/SegmentedCodeInput.d.ts +49 -0
- package/dist/components/segmented-code-input/SegmentedCodeInput.esm.js +87 -0
- package/dist/components/segmented-code-input/code-utils.cjs +1 -0
- package/dist/components/segmented-code-input/code-utils.d.ts +4 -0
- package/dist/components/segmented-code-input/code-utils.esm.js +9 -0
- package/dist/components/segmented-code-input/index.d.ts +2 -0
- package/dist/components/segmented-control/SegmentedControl.cjs +1 -0
- package/dist/components/segmented-control/SegmentedControl.d.ts +27 -0
- package/dist/components/segmented-control/SegmentedControl.esm.js +84 -0
- package/dist/components/segmented-control/index.d.ts +2 -0
- package/dist/components/segmented-control/types.d.ts +30 -0
- package/dist/components/select/MultiSelect.cjs +1 -0
- package/dist/{src/components → components}/select/MultiSelect.d.ts +11 -3
- package/dist/components/select/MultiSelect.esm.js +279 -0
- package/dist/components/select/Select.cjs +1 -0
- package/dist/{src/components → components}/select/Select.d.ts +16 -2
- package/dist/components/select/Select.esm.js +320 -0
- package/dist/components/select/index.d.ts +4 -0
- package/dist/components/select/loading-dots.cjs +1 -0
- package/dist/components/select/loading-dots.d.ts +3 -0
- package/dist/components/select/loading-dots.esm.js +24 -0
- package/dist/components/select/panel-width.cjs +1 -0
- package/dist/components/select/panel-width.d.ts +2 -0
- package/dist/components/select/panel-width.esm.js +7 -0
- package/dist/{src/components → components}/select/utils.d.ts +1 -1
- package/dist/components/skeleton/Skeleton.cjs +1 -0
- package/dist/components/skeleton/Skeleton.d.ts +6 -0
- package/dist/components/skeleton/Skeleton.esm.js +12 -0
- package/dist/components/skeleton/index.d.ts +2 -0
- package/dist/components/skeleton/types.d.ts +2 -0
- package/dist/components/stepper/Stepper.cjs +1 -0
- package/dist/components/stepper/Stepper.d.ts +51 -0
- package/dist/components/stepper/Stepper.esm.js +142 -0
- package/dist/components/stepper/index.d.ts +4 -0
- package/dist/components/stepper/use-stepper.cjs +1 -0
- package/dist/components/stepper/use-stepper.d.ts +43 -0
- package/dist/components/stepper/use-stepper.esm.js +57 -0
- package/dist/components/switch/Switch.cjs +1 -0
- package/dist/{src/components → components}/switch/Switch.d.ts +1 -1
- package/dist/components/switch/Switch.esm.js +37 -0
- package/dist/components/switch/index.d.ts +2 -0
- package/dist/components/switch/utils.cjs +1 -0
- package/dist/{src/components → components}/switch/utils.d.ts +2 -2
- package/dist/components/switch/utils.esm.js +40 -0
- package/dist/components/table/accordion-table.cjs +1 -0
- package/dist/{src/components → components}/table/accordion-table.d.ts +1 -1
- package/dist/components/table/accordion-table.esm.js +418 -0
- package/dist/components/table/column-group-utils.cjs +1 -0
- package/dist/{src/components → components}/table/column-group-utils.d.ts +1 -1
- package/dist/components/table/column-group-utils.esm.js +53 -0
- package/dist/components/table/components/ColumnPresetSelector.cjs +1 -0
- package/dist/{src/components → components}/table/components/ColumnPresetSelector.d.ts +2 -2
- package/dist/components/table/components/ColumnPresetSelector.esm.js +166 -0
- package/dist/components/table/components/ColumnSettingsTable.cjs +1 -0
- package/dist/{src/components → components}/table/components/ColumnSettingsTable.d.ts +1 -1
- package/dist/components/table/components/ColumnSettingsTable.esm.js +194 -0
- package/dist/components/table/components/KeyboardNavButton.cjs +1 -0
- package/dist/components/table/components/KeyboardNavButton.esm.js +24 -0
- package/dist/components/table/components/PageJumpInput.cjs +1 -0
- package/dist/components/table/components/PageJumpInput.esm.js +54 -0
- package/dist/components/table/components/Pagination.cjs +1 -0
- package/dist/components/table/components/Pagination.esm.js +163 -0
- package/dist/components/table/components/PaginationFooter.cjs +1 -0
- package/dist/components/table/components/PaginationFooter.esm.js +80 -0
- package/dist/components/table/components/SortableHeaderCell.cjs +1 -0
- package/dist/components/table/components/SortableHeaderCell.esm.js +30 -0
- package/dist/components/table/hooks/useColumnPresets.cjs +1 -0
- package/dist/{src/components → components}/table/hooks/useColumnPresets.d.ts +2 -2
- package/dist/components/table/hooks/useColumnPresets.esm.js +165 -0
- package/dist/components/table/hooks/useColumnResize.cjs +1 -0
- package/dist/{src/components → components}/table/hooks/useColumnResize.d.ts +12 -0
- package/dist/components/table/hooks/useColumnResize.esm.js +118 -0
- package/dist/components/table/hooks/useFillEmptyRows.d.ts +2 -0
- package/dist/components/table/hooks/useInfiniteScroll.d.ts +2 -0
- package/dist/components/table/hooks/useTableColumnState.cjs +1 -0
- package/dist/{src/components → components}/table/hooks/useTableColumnState.d.ts +1 -1
- package/dist/components/table/hooks/useTableColumnState.esm.js +46 -0
- package/dist/components/table/hooks/useTableDragSelection.d.ts +2 -0
- package/dist/components/table/hooks/useTableSort.cjs +1 -0
- package/dist/{src/components → components}/table/hooks/useTableSort.d.ts +1 -1
- package/dist/components/table/hooks/useTableSort.esm.js +30 -0
- package/dist/components/table/hooks/useVirtualTable.cjs +1 -0
- package/dist/components/table/hooks/useVirtualTable.esm.js +18 -0
- package/dist/components/table/index.d.ts +27 -0
- package/dist/components/table/mini-table.cjs +1 -0
- package/dist/{src/components → components}/table/mini-table.d.ts +1 -1
- package/dist/components/table/mini-table.esm.js +127 -0
- package/dist/components/table/paginated-mini-table.cjs +1 -0
- package/dist/{src/components → components}/table/paginated-mini-table.d.ts +1 -1
- package/dist/components/table/paginated-mini-table.esm.js +31 -0
- package/dist/components/table/paginated-table.cjs +1 -0
- package/dist/{src/components → components}/table/paginated-table.d.ts +1 -1
- package/dist/components/table/paginated-table.esm.js +31 -0
- package/dist/components/table/table.cjs +1 -0
- package/dist/{src/components → components}/table/table.d.ts +2 -1
- package/dist/components/table/table.esm.js +343 -0
- package/dist/components/table/utils.cjs +35 -0
- package/dist/{src/components → components}/table/utils.d.ts +2 -2
- package/dist/components/table/utils.esm.js +16 -0
- package/dist/components/table-checkbox/TableCheckbox.cjs +1 -0
- package/dist/components/table-checkbox/TableCheckbox.esm.js +40 -0
- package/dist/components/table-checkbox/index.d.ts +1 -0
- package/dist/components/table-page-layout/TablePageLayout.cjs +1 -0
- package/dist/components/table-page-layout/TablePageLayout.esm.js +37 -0
- package/dist/{src/components → components}/table-page-layout/index.d.ts +1 -1
- package/dist/components/textarea/Textarea.cjs +1 -0
- package/dist/{src/components → components}/textarea/Textarea.d.ts +1 -1
- package/dist/components/textarea/Textarea.esm.js +64 -0
- package/dist/components/textarea/index.d.ts +2 -0
- package/dist/components/time-picker/index.d.ts +2 -0
- package/dist/components/time-picker/time-picker.cjs +1 -0
- package/dist/components/time-picker/time-picker.d.ts +35 -0
- package/dist/components/time-picker/time-picker.esm.js +193 -0
- package/dist/components/time-picker/time-utils.cjs +1 -0
- package/dist/components/time-picker/time-utils.d.ts +12 -0
- package/dist/components/time-picker/time-utils.esm.js +56 -0
- package/dist/components/toast/ToastProvider.cjs +1 -0
- package/dist/{src/components → components}/toast/ToastProvider.d.ts +3 -0
- package/dist/components/toast/ToastProvider.esm.js +86 -0
- package/dist/components/toast/index.d.ts +3 -0
- package/dist/components/toast/index.esm.js +3 -0
- package/dist/components/toolbar/Toolbar.cjs +1 -0
- package/dist/{src/components → components}/toolbar/Toolbar.d.ts +1 -1
- package/dist/components/toolbar/Toolbar.esm.js +149 -0
- package/dist/components/toolbar/index.d.ts +2 -0
- package/dist/components/tooltip/Tooltip.cjs +1 -0
- package/dist/{src/components → components}/tooltip/Tooltip.d.ts +10 -0
- package/dist/components/tooltip/Tooltip.esm.js +39 -0
- package/dist/components/tooltip/index.d.ts +2 -0
- package/dist/components/typewriter-text/TypewriterText.cjs +1 -0
- package/dist/components/typewriter-text/TypewriterText.d.ts +7 -0
- package/dist/components/typewriter-text/TypewriterText.esm.js +58 -0
- package/dist/components/typewriter-text/index.d.ts +2 -0
- package/dist/components/typewriter-text/types.d.ts +12 -0
- package/dist/components/typing-dots/TypingDots.cjs +1 -0
- package/dist/components/typing-dots/TypingDots.d.ts +10 -0
- package/dist/components/typing-dots/TypingDots.esm.js +37 -0
- package/dist/components/typing-dots/index.d.ts +2 -0
- package/dist/components/typing-dots/types.d.ts +4 -0
- package/dist/hooks/awaitableOverlayController.cjs +1 -0
- package/dist/hooks/awaitableOverlayController.d.ts +6 -0
- package/dist/hooks/awaitableOverlayController.esm.js +18 -0
- package/dist/hooks/index.d.ts +17 -0
- package/dist/hooks/useAwaitableOverlay.cjs +1 -0
- package/dist/hooks/useAwaitableOverlay.d.ts +16 -0
- package/dist/hooks/useAwaitableOverlay.esm.js +22 -0
- package/dist/hooks/useBottomSheetDrag.cjs +1 -0
- package/dist/hooks/useBottomSheetDrag.esm.js +17 -0
- package/dist/hooks/useClickOutside.cjs +1 -0
- package/dist/hooks/useClickOutside.esm.js +20 -0
- package/dist/hooks/useFillEmptyRows.cjs +1 -0
- package/dist/{src/components/table/hooks → hooks}/useFillEmptyRows.d.ts +10 -1
- package/dist/hooks/useFillEmptyRows.esm.js +60 -0
- package/dist/hooks/useFocusTrap.cjs +1 -0
- package/dist/hooks/useFocusTrap.d.ts +47 -0
- package/dist/hooks/useFocusTrap.esm.js +210 -0
- package/dist/hooks/useInfiniteScroll.cjs +1 -0
- package/dist/hooks/useInfiniteScroll.d.ts +36 -0
- package/dist/hooks/useInfiniteScroll.esm.js +31 -0
- package/dist/hooks/useMediaQuery.cjs +1 -0
- package/dist/hooks/useMediaQuery.esm.js +15 -0
- package/dist/hooks/useScrollLock.cjs +1 -0
- package/dist/hooks/useScrollLock.esm.js +16 -0
- package/dist/hooks/useTableDragSelection.cjs +1 -0
- package/dist/{src/components/table/hooks → hooks}/useTableDragSelection.d.ts +3 -4
- package/dist/hooks/useTableDragSelection.esm.js +79 -0
- package/dist/hooks/useVirtualRows.cjs +1 -0
- package/dist/hooks/useVirtualRows.d.ts +56 -0
- package/dist/hooks/useVirtualRows.esm.js +20 -0
- package/dist/hooks.cjs +1 -0
- package/dist/hooks.esm.js +12 -0
- package/dist/index.cjs +1 -0
- package/dist/index.d.ts +40 -0
- package/dist/index.esm.js +81 -0
- package/dist/lib/Portal.cjs +1 -0
- package/dist/lib/Portal.esm.js +11 -0
- package/dist/lib/column-preset-storage.cjs +1 -0
- package/dist/lib/column-preset-storage.esm.js +123 -0
- package/dist/lib/index.d.ts +6 -0
- package/dist/lib/overlay-stack.cjs +1 -0
- package/dist/lib/overlay-stack.esm.js +28 -0
- package/dist/lib/utils.cjs +1 -0
- package/dist/{src/lib → lib}/utils.d.ts +2 -1
- package/dist/lib/utils.esm.js +114 -0
- package/dist/node_modules/clsx/dist/clsx.cjs +1 -0
- package/dist/node_modules/clsx/dist/clsx.esm.js +16 -0
- package/dist/node_modules/lucide-react/dist/esm/Icon.cjs +1 -0
- package/dist/node_modules/lucide-react/dist/esm/Icon.esm.js +23 -0
- package/dist/node_modules/lucide-react/dist/esm/context.cjs +1 -0
- package/dist/node_modules/lucide-react/dist/esm/context.esm.js +6 -0
- package/dist/node_modules/lucide-react/dist/esm/createLucideIcon.cjs +1 -0
- package/dist/node_modules/lucide-react/dist/esm/createLucideIcon.esm.js +17 -0
- package/dist/node_modules/lucide-react/dist/esm/defaultAttributes.cjs +1 -0
- package/dist/node_modules/lucide-react/dist/esm/defaultAttributes.esm.js +14 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/arrow-left.cjs +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/arrow-left.esm.js +10 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/calendar.cjs +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/calendar.esm.js +25 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/check.cjs +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/check.esm.js +7 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/chevron-down.cjs +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/chevron-down.esm.js +7 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/chevron-left.cjs +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/chevron-left.esm.js +7 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/chevron-right.cjs +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/chevron-right.esm.js +7 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/chevrons-left.cjs +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/chevrons-left.esm.js +10 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/chevrons-right.cjs +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/chevrons-right.esm.js +10 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/circle-check.cjs +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/circle-check.esm.js +12 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/circle-x.cjs +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/circle-x.esm.js +19 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/clock.cjs +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/clock.esm.js +12 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/copy.cjs +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/copy.esm.js +15 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/eye-off.cjs +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/eye-off.esm.js +21 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/eye.cjs +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/eye.esm.js +12 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/grip-vertical.cjs +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/grip-vertical.esm.js +41 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/info.cjs +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/info.esm.js +19 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/keyboard.cjs +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/keyboard.esm.js +45 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/list-filter.cjs +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/list-filter.esm.js +17 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/loader-circle.cjs +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/loader-circle.esm.js +7 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/minus.cjs +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/minus.esm.js +7 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/rotate-ccw.cjs +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/rotate-ccw.esm.js +10 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/save.cjs +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/save.esm.js +17 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/search.cjs +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/search.esm.js +12 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/settings.cjs +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/settings.esm.js +12 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/triangle-alert.cjs +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/triangle-alert.esm.js +17 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/wrench.cjs +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/wrench.esm.js +7 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/x.cjs +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/x.esm.js +10 -0
- package/dist/node_modules/lucide-react/dist/esm/shared/src/utils/hasA11yProp.cjs +1 -0
- package/dist/node_modules/lucide-react/dist/esm/shared/src/utils/hasA11yProp.esm.js +7 -0
- package/dist/node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.cjs +1 -0
- package/dist/node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.esm.js +4 -0
- package/dist/node_modules/lucide-react/dist/esm/shared/src/utils/toCamelCase.cjs +1 -0
- package/dist/node_modules/lucide-react/dist/esm/shared/src/utils/toCamelCase.esm.js +4 -0
- package/dist/node_modules/lucide-react/dist/esm/shared/src/utils/toKebabCase.cjs +1 -0
- package/dist/node_modules/lucide-react/dist/esm/shared/src/utils/toKebabCase.esm.js +4 -0
- package/dist/node_modules/lucide-react/dist/esm/shared/src/utils/toPascalCase.cjs +1 -0
- package/dist/node_modules/lucide-react/dist/esm/shared/src/utils/toPascalCase.esm.js +8 -0
- package/dist/node_modules/tailwind-merge/dist/bundle-mjs.cjs +1 -0
- package/dist/node_modules/tailwind-merge/dist/bundle-mjs.esm.js +1723 -0
- package/dist/node_modules/use-debounce/dist/index.module.cjs +1 -0
- package/dist/node_modules/use-debounce/dist/index.module.esm.js +70 -0
- package/dist/tokens.css +1085 -0
- package/dist/ui.css +1 -1
- package/llms.txt +117 -0
- package/package.json +18 -9
- package/dist/index.cjs.js +0 -40
- package/dist/index.es.js +0 -8066
- package/dist/src/components/animated-height/index.d.ts +0 -2
- package/dist/src/components/badge/index.d.ts +0 -2
- package/dist/src/components/button/Button.d.ts +0 -2
- package/dist/src/components/checkbox/index.d.ts +0 -2
- package/dist/src/components/collapsible/index.d.ts +0 -2
- package/dist/src/components/date-input/index.d.ts +0 -1
- package/dist/src/components/date-picker/index.d.ts +0 -5
- package/dist/src/components/drawer/Drawer.d.ts +0 -18
- package/dist/src/components/drawer/index.d.ts +0 -2
- package/dist/src/components/info-tooltip/index.d.ts +0 -2
- package/dist/src/components/input/index.d.ts +0 -4
- package/dist/src/components/loading-spinner/index.d.ts +0 -2
- package/dist/src/components/modal/index.d.ts +0 -6
- package/dist/src/components/page-title/index.d.ts +0 -1
- package/dist/src/components/popover/index.d.ts +0 -2
- package/dist/src/components/select/index.d.ts +0 -4
- package/dist/src/components/select/loading-dots.d.ts +0 -9
- package/dist/src/components/switch/index.d.ts +0 -2
- package/dist/src/components/table/hooks/useInfiniteScroll.d.ts +0 -58
- package/dist/src/components/table/index.d.ts +0 -27
- package/dist/src/components/table-checkbox/index.d.ts +0 -1
- package/dist/src/components/textarea/index.d.ts +0 -2
- package/dist/src/components/toast/index.d.ts +0 -3
- package/dist/src/components/toolbar/index.d.ts +0 -2
- package/dist/src/components/tooltip/index.d.ts +0 -2
- package/dist/src/hooks/index.d.ts +0 -4
- package/dist/src/index.d.ts +0 -27
- package/dist/src/lib/index.d.ts +0 -6
- /package/dist/{src/components → components}/animated-height/AnimatedHeight.d.ts +0 -0
- /package/dist/{src/components → components}/badge/types.d.ts +0 -0
- /package/dist/{src/components → components}/button/types.d.ts +0 -0
- /package/dist/{src/components → components}/checkbox/types.d.ts +0 -0
- /package/dist/{src/components → components}/collapsible/Collapsible.d.ts +0 -0
- /package/dist/{src/components → components}/page-title/PageTitle.d.ts +0 -0
- /package/dist/{src/components → components}/search-box/ExactMatchToggle.d.ts +0 -0
- /package/dist/{src/components → components}/search-box/SearchBoxChips.d.ts +0 -0
- /package/dist/{src/components → components}/search-box/SearchBoxFloatingInput.d.ts +0 -0
- /package/dist/{src/components → components}/search-box/SearchBoxMonth.d.ts +0 -0
- /package/dist/{src/components → components}/search-box/SearchBoxSheetContext.d.ts +0 -0
- /package/dist/{src/components → components}/search-box/parseDateRange.d.ts +0 -0
- /package/dist/{src/components → components}/select/types.d.ts +0 -0
- /package/dist/{src/components → components}/switch/types.d.ts +0 -0
- /package/dist/{src/components → components}/table/components/KeyboardNavButton.d.ts +0 -0
- /package/dist/{src/components → components}/table/components/PageJumpInput.d.ts +0 -0
- /package/dist/{src/components → components}/table/components/Pagination.d.ts +0 -0
- /package/dist/{src/components → components}/table/components/PaginationFooter.d.ts +0 -0
- /package/dist/{src/components → components}/table/components/SortableHeaderCell.d.ts +0 -0
- /package/dist/{src/components → components}/table/hooks/useVirtualTable.d.ts +0 -0
- /package/dist/{src/components → components}/table/types.d.ts +0 -0
- /package/dist/{src/components → components}/table-checkbox/TableCheckbox.d.ts +0 -0
- /package/dist/{src/components → components}/table-page-layout/TablePageLayout.d.ts +0 -0
- /package/dist/{src/components → components}/textarea/types.d.ts +0 -0
- /package/dist/{src/hooks → hooks}/useBottomSheetDrag.d.ts +0 -0
- /package/dist/{src/hooks → hooks}/useClickOutside.d.ts +0 -0
- /package/dist/{src/hooks → hooks}/useMediaQuery.d.ts +0 -0
- /package/dist/{src/hooks → hooks}/useScrollLock.d.ts +0 -0
- /package/dist/{src/lib → lib}/Portal.d.ts +0 -0
- /package/dist/{src/lib → lib}/column-preset-storage.d.ts +0 -0
- /package/dist/{src/lib → lib}/overlay-stack.d.ts +0 -0
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { cn as e } from "../../lib/utils.esm.js";
|
|
2
|
+
import { useIsMobile as t } from "../../hooks/useMediaQuery.esm.js";
|
|
3
|
+
import { useScrollLock as n } from "../../hooks/useScrollLock.esm.js";
|
|
4
|
+
import { useFocusTrap as r } from "../../hooks/useFocusTrap.esm.js";
|
|
5
|
+
import { overlayStack as i } from "../../lib/overlay-stack.esm.js";
|
|
6
|
+
import { Portal as a } from "../../lib/Portal.esm.js";
|
|
7
|
+
import { ModalFocusTrapContext as o, useModalSubViews as s } from "../modal/ModalFocusTrapContext.esm.js";
|
|
8
|
+
import { useEffect as c, useId as l, useLayoutEffect as u, useState as d } from "react";
|
|
9
|
+
import { jsx as f, jsxs as p } from "react/jsx-runtime";
|
|
10
|
+
import { AnimatePresence as m, motion as h, useDragControls as g, useReducedMotion as _ } from "motion/react";
|
|
11
|
+
//#region src/components/drawer/Drawer.tsx
|
|
12
|
+
function v({ open: v, onClose: y, title: b, dismissible: x = !0, trapFocus: S = !0, onExitComplete: C, widthPx: w = 480, className: T, children: E }) {
|
|
13
|
+
let D = t(), O = {
|
|
14
|
+
width: w,
|
|
15
|
+
maxWidth: "100vw"
|
|
16
|
+
}, k = l(), A = l(), j = g(), M = _(), [N, P] = d(null), { context: F, isTop: I } = s(v, S, k);
|
|
17
|
+
u(() => {
|
|
18
|
+
N && (N.inert = !v);
|
|
19
|
+
}, [N, v]);
|
|
20
|
+
let L = (e, t) => {
|
|
21
|
+
x && (t.offset.y > 100 || t.velocity.y > 500) && y();
|
|
22
|
+
};
|
|
23
|
+
c(() => {
|
|
24
|
+
if (v) return i.push(k), () => {
|
|
25
|
+
i.pop(k);
|
|
26
|
+
};
|
|
27
|
+
}, [v, k]), n(v), r(N, {
|
|
28
|
+
enabled: v,
|
|
29
|
+
trapFocus: S,
|
|
30
|
+
canTrap: I
|
|
31
|
+
}), c(() => {
|
|
32
|
+
let e = (e) => {
|
|
33
|
+
e.key !== "Escape" || !x || I() && y();
|
|
34
|
+
};
|
|
35
|
+
return v && window.addEventListener("keydown", e), () => window.removeEventListener("keydown", e);
|
|
36
|
+
}, [
|
|
37
|
+
v,
|
|
38
|
+
y,
|
|
39
|
+
x,
|
|
40
|
+
I
|
|
41
|
+
]);
|
|
42
|
+
let R = /* @__PURE__ */ p(a, { children: [/* @__PURE__ */ f(m, { children: v && /* @__PURE__ */ f(h.div, {
|
|
43
|
+
initial: { opacity: 0 },
|
|
44
|
+
animate: { opacity: 1 },
|
|
45
|
+
exit: { opacity: 0 },
|
|
46
|
+
transition: { duration: M ? 0 : .2 },
|
|
47
|
+
onClick: () => {
|
|
48
|
+
!x || !I() || y();
|
|
49
|
+
},
|
|
50
|
+
className: "fixed inset-0 z-overlay bg-bg-overlay"
|
|
51
|
+
}, "drawer-backdrop") }), /* @__PURE__ */ f(m, {
|
|
52
|
+
onExitComplete: C,
|
|
53
|
+
children: v && /* @__PURE__ */ p(h.div, {
|
|
54
|
+
ref: P,
|
|
55
|
+
role: "dialog",
|
|
56
|
+
"aria-modal": "true",
|
|
57
|
+
"aria-labelledby": b ? A : void 0,
|
|
58
|
+
tabIndex: -1,
|
|
59
|
+
initial: D ? { y: "100%" } : { x: "100%" },
|
|
60
|
+
animate: D ? { y: 0 } : { x: 0 },
|
|
61
|
+
exit: D ? {
|
|
62
|
+
y: "100%",
|
|
63
|
+
transition: {
|
|
64
|
+
duration: M ? 0 : .2,
|
|
65
|
+
ease: [
|
|
66
|
+
.4,
|
|
67
|
+
0,
|
|
68
|
+
1,
|
|
69
|
+
1
|
|
70
|
+
]
|
|
71
|
+
}
|
|
72
|
+
} : { x: "100%" },
|
|
73
|
+
transition: M ? { duration: 0 } : D ? {
|
|
74
|
+
type: "spring",
|
|
75
|
+
damping: 38,
|
|
76
|
+
stiffness: 320
|
|
77
|
+
} : {
|
|
78
|
+
type: "spring",
|
|
79
|
+
damping: 30,
|
|
80
|
+
stiffness: 280
|
|
81
|
+
},
|
|
82
|
+
drag: D && x ? "y" : !1,
|
|
83
|
+
dragListener: !1,
|
|
84
|
+
dragControls: j,
|
|
85
|
+
dragConstraints: {
|
|
86
|
+
top: 0,
|
|
87
|
+
bottom: 0
|
|
88
|
+
},
|
|
89
|
+
dragElastic: {
|
|
90
|
+
top: 0,
|
|
91
|
+
bottom: .4
|
|
92
|
+
},
|
|
93
|
+
onDragEnd: L,
|
|
94
|
+
className: e("fixed z-overlay flex flex-col overflow-x-hidden bg-bg-surface text-fg-default outline-none -bottom-8 left-0 right-0 max-h-[88vh] w-full rounded-t-sheet pb-8 sm:bottom-0 sm:left-auto sm:right-0 sm:top-0 sm:max-h-none sm:h-full sm:w-auto sm:rounded-none sm:pb-0", T),
|
|
95
|
+
style: D ? void 0 : O,
|
|
96
|
+
children: [
|
|
97
|
+
/* @__PURE__ */ f("div", {
|
|
98
|
+
className: e("flex justify-center pt-2 pb-1 cursor-grab touch-none active:cursor-grabbing sm:hidden", !x && "pointer-events-none opacity-0"),
|
|
99
|
+
onPointerDown: (e) => {
|
|
100
|
+
x && j.start(e);
|
|
101
|
+
},
|
|
102
|
+
children: /* @__PURE__ */ f("div", { className: "h-1 w-10 rounded-full bg-bg-handle" })
|
|
103
|
+
}),
|
|
104
|
+
b && /* @__PURE__ */ p("div", {
|
|
105
|
+
className: "flex items-center justify-between border-b border-border-subtle px-4 py-3",
|
|
106
|
+
children: [/* @__PURE__ */ f("h3", {
|
|
107
|
+
id: A,
|
|
108
|
+
className: "text-base font-semibold text-fg-default sm:text-lg",
|
|
109
|
+
children: b
|
|
110
|
+
}), /* @__PURE__ */ f("button", {
|
|
111
|
+
type: "button",
|
|
112
|
+
onClick: y,
|
|
113
|
+
disabled: !x,
|
|
114
|
+
className: e("rounded-control-medium p-1 text-fg-muted hover:text-fg-default", !x && "pointer-events-none opacity-0"),
|
|
115
|
+
"aria-label": "닫기",
|
|
116
|
+
children: /* @__PURE__ */ f("svg", {
|
|
117
|
+
className: "h-5 w-5",
|
|
118
|
+
fill: "none",
|
|
119
|
+
stroke: "currentColor",
|
|
120
|
+
viewBox: "0 0 24 24",
|
|
121
|
+
children: /* @__PURE__ */ f("path", {
|
|
122
|
+
strokeLinecap: "round",
|
|
123
|
+
strokeLinejoin: "round",
|
|
124
|
+
strokeWidth: 2,
|
|
125
|
+
d: "M6 18L18 6M6 6l12 12"
|
|
126
|
+
})
|
|
127
|
+
})
|
|
128
|
+
})]
|
|
129
|
+
}),
|
|
130
|
+
/* @__PURE__ */ f("div", {
|
|
131
|
+
className: "flex-1 overflow-auto",
|
|
132
|
+
children: E
|
|
133
|
+
})
|
|
134
|
+
]
|
|
135
|
+
}, "drawer-sheet")
|
|
136
|
+
})] });
|
|
137
|
+
return /* @__PURE__ */ f(o.Provider, {
|
|
138
|
+
value: F,
|
|
139
|
+
children: R
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
//#endregion
|
|
143
|
+
export { v as Drawer };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const e=require("./chunk-reload.cjs");let t=require("react"),n=require("react/jsx-runtime");var r={error:null,isChunkError:!1},i=class extends t.Component{constructor(...t){super(...t),this.state=r,this.reset=()=>{this.setState(r)},this.reload=()=>{this.props.chunkReloadPort?e.reloadAfterClearingChunkGuard(this.props.chunkReloadPort):typeof window<`u`&&window.location.reload()}}static getDerivedStateFromError(t){return{error:t,isChunkError:e.isChunkLoadError(t)}}componentDidCatch(t,n){let r=e.isChunkLoadError(t);this.props.onError?.(t,n,r),r&&this.props.chunkReloadPort&&e.reloadOnceForChunkError(this.props.chunkReloadPort)}render(){let{error:e,isChunkError:t}=this.state;return e?this.props.fallbackRender?this.props.fallbackRender({error:e,isChunkError:t,reset:this.reset,reload:this.reload}):(0,n.jsxs)(`div`,{role:`alert`,className:`flex flex-col items-start gap-3 rounded-control-medium border-control border-border-subtle bg-bg-surface p-4 text-fg-default`,children:[(0,n.jsx)(`p`,{children:this.props.message??`문제가 발생했습니다.`}),(0,n.jsx)(`button`,{type:`button`,className:`rounded-control-small bg-primary px-3 py-2 text-fg-inverse`,onClick:t?this.reload:this.reset,children:t?this.props.reloadLabel??`새로고침`:this.props.retryLabel??`다시 시도`})]}):this.props.children}};exports.ErrorBoundary=i;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Component, ErrorInfo, ReactNode } from 'react';
|
|
2
|
+
import { ErrorBoundaryProps } from './types.js';
|
|
3
|
+
interface ErrorBoundaryState {
|
|
4
|
+
error: Error | null;
|
|
5
|
+
isChunkError: boolean;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* 자손의 렌더 오류를 포착하고 다시 시도할 수 있는 경계.
|
|
9
|
+
*
|
|
10
|
+
* 청크 오류의 자동 새로고침에는 영속 가드가 필요하다. 저장소 접근이 막히거나
|
|
11
|
+
* chunkReloadPort가 없으면 반복 새로고침을 피하기 위해 폴백을 유지한다.
|
|
12
|
+
* 포트와 fallbackRender를 주입하면 복구·안내 방식을 직접 지정할 수 있다.
|
|
13
|
+
* 이벤트 핸들러나 비동기 콜백의 오류는 React 경계가 포착하지 않으므로 호출부에서 처리한다.
|
|
14
|
+
*/
|
|
15
|
+
export declare class ErrorBoundary extends Component<ErrorBoundaryProps, ErrorBoundaryState> {
|
|
16
|
+
state: ErrorBoundaryState;
|
|
17
|
+
static getDerivedStateFromError(error: Error): ErrorBoundaryState;
|
|
18
|
+
componentDidCatch(error: Error, info: ErrorInfo): void;
|
|
19
|
+
private reset;
|
|
20
|
+
private reload;
|
|
21
|
+
render(): ReactNode;
|
|
22
|
+
}
|
|
23
|
+
export {};
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { isChunkLoadError as e, reloadAfterClearingChunkGuard as t, reloadOnceForChunkError as n } from "./chunk-reload.esm.js";
|
|
2
|
+
import { Component as r } from "react";
|
|
3
|
+
import { jsx as i, jsxs as a } from "react/jsx-runtime";
|
|
4
|
+
//#region src/components/error-boundary/ErrorBoundary.tsx
|
|
5
|
+
var o = {
|
|
6
|
+
error: null,
|
|
7
|
+
isChunkError: !1
|
|
8
|
+
}, s = class extends r {
|
|
9
|
+
constructor(...e) {
|
|
10
|
+
super(...e), this.state = o, this.reset = () => {
|
|
11
|
+
this.setState(o);
|
|
12
|
+
}, this.reload = () => {
|
|
13
|
+
this.props.chunkReloadPort ? t(this.props.chunkReloadPort) : typeof window < "u" && window.location.reload();
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
static getDerivedStateFromError(t) {
|
|
17
|
+
return {
|
|
18
|
+
error: t,
|
|
19
|
+
isChunkError: e(t)
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
componentDidCatch(t, r) {
|
|
23
|
+
let i = e(t);
|
|
24
|
+
this.props.onError?.(t, r, i), i && this.props.chunkReloadPort && n(this.props.chunkReloadPort);
|
|
25
|
+
}
|
|
26
|
+
render() {
|
|
27
|
+
let { error: e, isChunkError: t } = this.state;
|
|
28
|
+
return e ? this.props.fallbackRender ? this.props.fallbackRender({
|
|
29
|
+
error: e,
|
|
30
|
+
isChunkError: t,
|
|
31
|
+
reset: this.reset,
|
|
32
|
+
reload: this.reload
|
|
33
|
+
}) : /* @__PURE__ */ a("div", {
|
|
34
|
+
role: "alert",
|
|
35
|
+
className: "flex flex-col items-start gap-3 rounded-control-medium border-control border-border-subtle bg-bg-surface p-4 text-fg-default",
|
|
36
|
+
children: [/* @__PURE__ */ i("p", { children: this.props.message ?? "문제가 발생했습니다." }), /* @__PURE__ */ i("button", {
|
|
37
|
+
type: "button",
|
|
38
|
+
className: "rounded-control-small bg-primary px-3 py-2 text-fg-inverse",
|
|
39
|
+
onClick: t ? this.reload : this.reset,
|
|
40
|
+
children: t ? this.props.reloadLabel ?? "새로고침" : this.props.retryLabel ?? "다시 시도"
|
|
41
|
+
})]
|
|
42
|
+
}) : this.props.children;
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
//#endregion
|
|
46
|
+
export { s as ErrorBoundary };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e=3e4,t=null;function n(e,t){if(typeof e!=`object`||!e||!(t in e))return;let n=e[t];return typeof n==`string`?n:void 0}function r(e){if(n(e,`name`)===`ChunkLoadError`)return!0;let t=n(e,`message`);return t?/Loading chunk [\w-]+ failed/i.test(t)||/Failed to fetch dynamically imported module/i.test(t)||/error loading dynamically imported module/i.test(t)||/Importing a module script failed/i.test(t)||/Unable to preload CSS for/i.test(t):!1}function i(e,t,n){return e===null||!Number.isFinite(e)?!1:t-e<n}function a(e,n={}){let r=(n.now??Date.now)(),a=n.ttlMs??3e4,o;try{o=e.get()}catch{return!1}if(i(o,r,a)||i(t,r,a))return!1;try{if(e.set(r),e.get()!==r)return!1}catch{return!1}return t=r,!0}function o(e,t={}){let n=a(e,t);return n&&e.reload(),n}function s(e){t=null;try{e.remove()}catch{}}function c(e){s(e),e.reload()}function l(e,t=window,r=()=>!0,i,o){let s=new Set,c=t=>{let c=t.payload,l=c instanceof Error?c:Error(typeof c==`string`?c:n(c,`message`)??`Vite preload failed`),u=r(t),d=!0;try{d=o?.(t)??!0}catch{}let f=()=>{try{(typeof d==`function`?d():d)&&e.report(l,u?`navigation`:`preload`)}catch{}},p=typeof d==`function`;if(p||f(),!u&&!p)return;let m=()=>{a(e)&&e.reload()};if(i||p){let e=setTimeout(()=>{s.delete(e),p&&f(),u&&!i?.(t)&&m()},0);s.add(e)}else m()};return t.addEventListener(`vite:preloadError`,c),()=>{t.removeEventListener(`vite:preloadError`,c);for(let e of s)clearTimeout(e);s.clear()}}exports.CHUNK_RELOAD_TTL_MS=e,exports.clearChunkReloadGuard=s,exports.isChunkLoadError=r,exports.listenForChunkPreloadError=l,exports.reloadAfterClearingChunkGuard=c,exports.reloadOnceForChunkError=o,exports.tryAcquireChunkReloadGuard=a;
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/** 저장·보고·새로고침을 소비자가 제공하는 청크 복구 포트. */
|
|
2
|
+
export interface ChunkReloadPort {
|
|
3
|
+
get(): number | null;
|
|
4
|
+
set(reloadedAt: number): void;
|
|
5
|
+
remove(): void;
|
|
6
|
+
report(error: Error, trigger: "navigation" | "preload"): void;
|
|
7
|
+
/** 새로고침 전 필요한 대기를 마친 뒤 reload한다. */
|
|
8
|
+
reload(): Promise<void>;
|
|
9
|
+
}
|
|
10
|
+
export declare const CHUNK_RELOAD_TTL_MS = 30000;
|
|
11
|
+
/** 브라우저와 번들러마다 다른 dynamic import 실패 형태를 판별한다. */
|
|
12
|
+
export declare function isChunkLoadError(error: unknown): boolean;
|
|
13
|
+
interface ReloadOnceOptions {
|
|
14
|
+
now?: () => number;
|
|
15
|
+
ttlMs?: number;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* TTL 가드를 판정하고 통과하면 가드 상태를 영속한다. 이 함수는 보고나 reload를
|
|
19
|
+
* 실행하지 않는다. `reloadOnceForChunkError`는 가드 통과 뒤 reload까지 잇는 래퍼다.
|
|
20
|
+
*/
|
|
21
|
+
export declare function tryAcquireChunkReloadGuard(port: ChunkReloadPort, options?: ReloadOnceOptions): boolean;
|
|
22
|
+
/**
|
|
23
|
+
* 청크 실패를 한 번만 자동 새로고침한다.
|
|
24
|
+
*
|
|
25
|
+
* hard reload 뒤에도 가드가 남는다는 것을 쓰기 후 재조회로 확인한 경우에만
|
|
26
|
+
* reload한다. 스토리지가 차단되거나 가득 찬 환경에서는 자동 복구를 포기하고
|
|
27
|
+
* 앱 fallback에 머문다. 메모리 가드는 영속에 성공한 같은 페이지 생명주기의
|
|
28
|
+
* 중복 호출만 보조한다. TTL 뒤에는 다음 배포의 복구를 허용한다.
|
|
29
|
+
*
|
|
30
|
+
* `port.reload()`를 즉시 호출한다. 가드 통과 여부만 알고 reload는 직접 제어하려는
|
|
31
|
+
* 호출자는 `tryAcquireChunkReloadGuard`를 쓴다.
|
|
32
|
+
*/
|
|
33
|
+
export declare function reloadOnceForChunkError(port: ChunkReloadPort, options?: ReloadOnceOptions): boolean;
|
|
34
|
+
/** 사용자가 명시적으로 reload를 선택했을 때 다음 복구 사이클을 연다. */
|
|
35
|
+
export declare function clearChunkReloadGuard(port: ChunkReloadPort): void;
|
|
36
|
+
export declare function reloadAfterClearingChunkGuard(port: ChunkReloadPort): void;
|
|
37
|
+
/**
|
|
38
|
+
* Vite의 `vite:preloadError` payload를 보고한 뒤, 허용된 경우 1회 reload한다.
|
|
39
|
+
* 기본 보고는 동기이며, import catch의 식별이 필요하면 기존 다음 task에서 보고한다.
|
|
40
|
+
* `preventDefault()`를 호출하지 않아 Vite가 원래 실패를 다시 throw하게 둔다.
|
|
41
|
+
*
|
|
42
|
+
* 동적 import 실패에서 `preventDefault()`로 Vite의 throw를 막으면 import promise가
|
|
43
|
+
* `undefined`로 완료된다. TanStack `lazyRouteComponent`가 그 값을 `res[exportName]`에서
|
|
44
|
+
* 읽다가 원래 오류 대신 TypeError를 만들기 때문에, 원래 오류가 그대로 전파되도록 둔다.
|
|
45
|
+
*
|
|
46
|
+
* TanStack `lazyRouteComponent`는 세션의 `tanstack_router_reload:<message>` 표식이 없는
|
|
47
|
+
* 첫 인식 실패를 컴포넌트 렌더 중 reload한다. 이때 pending promise를 던져 route boundary를
|
|
48
|
+
* 건너뛸 수 있다. 실패한 import를 캐시해 후속 클릭에서 다시 import하거나 Vite 이벤트를
|
|
49
|
+
* 내지 않고, 캐시된 실패를 렌더에서 처리한다: 표식이 없으면 TanStack이 자체 reload하고,
|
|
50
|
+
* 표식이 있으면 같은 Error를 던진다. 앱의 `reportError`는 같은 Error 객체를 중복 제거한다.
|
|
51
|
+
*
|
|
52
|
+
* Vite 이벤트는 TanStack의 동작보다 먼저 발생한다. `shouldReload`는 이벤트 시점에
|
|
53
|
+
* 한 번 평가해 네비게이션 상태와 보고용 trigger를 보존한다. 결과가 false인 intent
|
|
54
|
+
* preload 실패도 보고하되 TTL 가드를 소모하거나 자체 reload를 예약하지 않는다.
|
|
55
|
+
* 다음 task에서 평가하는 `shouldIgnoreAfterImport`와 평가 시점이 다르다.
|
|
56
|
+
*
|
|
57
|
+
* 이동 보존: 네비게이션 발 이벤트 시점에는 주소창이 이미 목표 URL이다.
|
|
58
|
+
* 같은 URL을 reload하면 목표 화면에 착지하므로 별도 경로 저장은 필요 없다.
|
|
59
|
+
* 실측: Vite 8.1.3 + @tanstack/react-router 1.170.17의 코드 분할 라우트 이동.
|
|
60
|
+
*
|
|
61
|
+
* 무한 루프 가드: TTL 30초(`CHUNK_RELOAD_TTL_MS`) 안에서는 reload를 다시 예약하지 않는다.
|
|
62
|
+
* 가드에 걸리면 원래 오류가 전파되고, 경계가 수동 새로고침 화면을 보여준다.
|
|
63
|
+
*
|
|
64
|
+
* @param port 앱이 조립한 스토리지·보고·reload 경계. 다른 청크 복구 층과 같은 포트를 써야
|
|
65
|
+
* TTL 가드가 공유된다.
|
|
66
|
+
* @param target 리스너를 붙일 대상. 기본값은 `window`이며 테스트에서 교체한다.
|
|
67
|
+
* @param shouldReload 네비게이션 발 이벤트에 reload를 허용할지 판별한다. 원본 이벤트도
|
|
68
|
+
* 전달하므로 선택 기능 청크를 구분해 제외할 수 있다. 기본값은 true.
|
|
69
|
+
* @param shouldIgnoreAfterImport 선택 기능 import의 catch가 오류 객체를 식별할 시간을
|
|
70
|
+
* 주도록 다음 task에서 평가하는 reload 제외 조건. 보고는 이 판정과 무관하게 먼저 한다.
|
|
71
|
+
* 제외된 오류는 TTL 가드를 소모하지 않는다.
|
|
72
|
+
* @param shouldReport 보고 허용 조건. 함수를 반환하면 import catch 뒤 기존 다음 task에서
|
|
73
|
+
* 평가한다. 이 경우에도 이벤트 시점 trigger를 쓰고 reload 전에 보고한다.
|
|
74
|
+
* @returns 리스너를 해제하는 함수.
|
|
75
|
+
*/
|
|
76
|
+
export declare function listenForChunkPreloadError(port: ChunkReloadPort, target?: Pick<Window, "addEventListener" | "removeEventListener">, shouldReload?: (event: Event) => boolean, shouldIgnoreAfterImport?: (event: Event) => boolean, shouldReport?: (event: Event) => boolean | (() => boolean)): () => void;
|
|
77
|
+
export {};
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
//#region src/components/error-boundary/chunk-reload.ts
|
|
2
|
+
var e = 3e4, t = null;
|
|
3
|
+
function n(e, t) {
|
|
4
|
+
if (typeof e != "object" || !e || !(t in e)) return;
|
|
5
|
+
let n = e[t];
|
|
6
|
+
return typeof n == "string" ? n : void 0;
|
|
7
|
+
}
|
|
8
|
+
function r(e) {
|
|
9
|
+
if (n(e, "name") === "ChunkLoadError") return !0;
|
|
10
|
+
let t = n(e, "message");
|
|
11
|
+
return t ? /Loading chunk [\w-]+ failed/i.test(t) || /Failed to fetch dynamically imported module/i.test(t) || /error loading dynamically imported module/i.test(t) || /Importing a module script failed/i.test(t) || /Unable to preload CSS for/i.test(t) : !1;
|
|
12
|
+
}
|
|
13
|
+
function i(e, t, n) {
|
|
14
|
+
return e === null || !Number.isFinite(e) ? !1 : t - e < n;
|
|
15
|
+
}
|
|
16
|
+
function a(e, n = {}) {
|
|
17
|
+
let r = (n.now ?? Date.now)(), a = n.ttlMs ?? 3e4, o;
|
|
18
|
+
try {
|
|
19
|
+
o = e.get();
|
|
20
|
+
} catch {
|
|
21
|
+
return !1;
|
|
22
|
+
}
|
|
23
|
+
if (i(o, r, a) || i(t, r, a)) return !1;
|
|
24
|
+
try {
|
|
25
|
+
if (e.set(r), e.get() !== r) return !1;
|
|
26
|
+
} catch {
|
|
27
|
+
return !1;
|
|
28
|
+
}
|
|
29
|
+
return t = r, !0;
|
|
30
|
+
}
|
|
31
|
+
function o(e, t = {}) {
|
|
32
|
+
let n = a(e, t);
|
|
33
|
+
return n && e.reload(), n;
|
|
34
|
+
}
|
|
35
|
+
function s(e) {
|
|
36
|
+
t = null;
|
|
37
|
+
try {
|
|
38
|
+
e.remove();
|
|
39
|
+
} catch {}
|
|
40
|
+
}
|
|
41
|
+
function c(e) {
|
|
42
|
+
s(e), e.reload();
|
|
43
|
+
}
|
|
44
|
+
function l(e, t = window, r = () => !0, i, o) {
|
|
45
|
+
let s = /* @__PURE__ */ new Set(), c = (t) => {
|
|
46
|
+
let c = t.payload, l = c instanceof Error ? c : Error(typeof c == "string" ? c : n(c, "message") ?? "Vite preload failed"), u = r(t), d = !0;
|
|
47
|
+
try {
|
|
48
|
+
d = o?.(t) ?? !0;
|
|
49
|
+
} catch {}
|
|
50
|
+
let f = () => {
|
|
51
|
+
try {
|
|
52
|
+
(typeof d == "function" ? d() : d) && e.report(l, u ? "navigation" : "preload");
|
|
53
|
+
} catch {}
|
|
54
|
+
}, p = typeof d == "function";
|
|
55
|
+
if (p || f(), !u && !p) return;
|
|
56
|
+
let m = () => {
|
|
57
|
+
a(e) && e.reload();
|
|
58
|
+
};
|
|
59
|
+
if (i || p) {
|
|
60
|
+
let e = setTimeout(() => {
|
|
61
|
+
s.delete(e), p && f(), u && !i?.(t) && m();
|
|
62
|
+
}, 0);
|
|
63
|
+
s.add(e);
|
|
64
|
+
} else m();
|
|
65
|
+
};
|
|
66
|
+
return t.addEventListener("vite:preloadError", c), () => {
|
|
67
|
+
t.removeEventListener("vite:preloadError", c);
|
|
68
|
+
for (let e of s) clearTimeout(e);
|
|
69
|
+
s.clear();
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
//#endregion
|
|
73
|
+
export { e as CHUNK_RELOAD_TTL_MS, s as clearChunkReloadGuard, r as isChunkLoadError, l as listenForChunkPreloadError, c as reloadAfterClearingChunkGuard, o as reloadOnceForChunkError, a as tryAcquireChunkReloadGuard };
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { ErrorBoundary } from './ErrorBoundary.js';
|
|
2
|
+
export type { ErrorBoundaryProps, ErrorBoundaryFallbackProps } from './types.js';
|
|
3
|
+
export { CHUNK_RELOAD_TTL_MS, isChunkLoadError, tryAcquireChunkReloadGuard, reloadOnceForChunkError, clearChunkReloadGuard, reloadAfterClearingChunkGuard, listenForChunkPreloadError, } from './chunk-reload.js';
|
|
4
|
+
export type { ChunkReloadPort } from './chunk-reload.js';
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { ErrorInfo, ReactNode } from 'react';
|
|
2
|
+
import { ChunkReloadPort } from './chunk-reload.js';
|
|
3
|
+
export interface ErrorBoundaryFallbackProps {
|
|
4
|
+
error: Error;
|
|
5
|
+
isChunkError: boolean;
|
|
6
|
+
reset: () => void;
|
|
7
|
+
reload: () => void;
|
|
8
|
+
}
|
|
9
|
+
export interface ErrorBoundaryProps {
|
|
10
|
+
children: ReactNode;
|
|
11
|
+
/** 영속 가드와 보고·새로고침 구현. 없으면 청크 자동 새로고침을 시도하지 않는다. */
|
|
12
|
+
chunkReloadPort?: ChunkReloadPort;
|
|
13
|
+
/** 기본 안내 대신 표시할 폴백. reset과 reload를 직접 연결할 수 있다. */
|
|
14
|
+
fallbackRender?: (props: ErrorBoundaryFallbackProps) => ReactNode;
|
|
15
|
+
/** 기본 폴백의 안내 문구. */
|
|
16
|
+
message?: string;
|
|
17
|
+
/** 일반 오류에서 다시 렌더할 버튼의 문구. */
|
|
18
|
+
retryLabel?: string;
|
|
19
|
+
/** 청크 오류에서 페이지를 새로고침할 버튼의 문구. */
|
|
20
|
+
reloadLabel?: string;
|
|
21
|
+
/** 청크 오류를 포함한 렌더 오류마다 호출된다. */
|
|
22
|
+
onError?: (error: Error, errorInfo: ErrorInfo, isChunkError: boolean) => void;
|
|
23
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const e=require("../../lib/utils.cjs");let t=require("react/jsx-runtime");function n({label:n,htmlFor:r,rightLabel:i,className:a,required:o,optional:s,children:c}){let l=i!=null&&typeof i!=`string`;return(0,t.jsxs)(`div`,{className:e.cn(`space-y-1.5`,a),children:[(0,t.jsxs)(`div`,{className:e.cn(`flex items-center justify-between`,!l&&`h-4`),children:[(0,t.jsxs)(`label`,{htmlFor:r,className:`block text-xs leading-4 font-medium text-fg-muted`,children:[n,o&&(0,t.jsx)(`span`,{"aria-hidden":`true`,className:`ml-1 text-fg-danger`,children:`*`}),!o&&s&&(0,t.jsx)(`span`,{className:`ml-1 text-fg-subtle`,children:`(선택)`})]}),typeof i==`string`?(0,t.jsx)(`span`,{style:{lineHeight:`16px`},className:`text-[11px] text-fg-subtle`,children:i}):i]}),c]})}exports.Field=n;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { FieldProps } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* 라벨 + 우측 보조 텍스트 + 컨트롤을 묶는 폼 필드 래퍼.
|
|
4
|
+
* 모달 폼 및 일반 폼에서 공통 사용.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* <Field label="이름" required>
|
|
8
|
+
* <Input variant="box" placeholder="이름을 입력하세요" />
|
|
9
|
+
* </Field>
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* <Field label="금액" rightLabel="최대 100만원">
|
|
13
|
+
* <Input variant="box" suffix="원" />
|
|
14
|
+
* </Field>
|
|
15
|
+
*/
|
|
16
|
+
export declare function Field({ label, htmlFor, rightLabel, className, required, optional, children, }: FieldProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { cn as e } from "../../lib/utils.esm.js";
|
|
2
|
+
import { jsx as t, jsxs as n } from "react/jsx-runtime";
|
|
3
|
+
//#region src/components/field/Field.tsx
|
|
4
|
+
function r({ label: r, htmlFor: i, rightLabel: a, className: o, required: s, optional: c, children: l }) {
|
|
5
|
+
let u = a != null && typeof a != "string";
|
|
6
|
+
return /* @__PURE__ */ n("div", {
|
|
7
|
+
className: e("space-y-1.5", o),
|
|
8
|
+
children: [/* @__PURE__ */ n("div", {
|
|
9
|
+
className: e("flex items-center justify-between", !u && "h-4"),
|
|
10
|
+
children: [/* @__PURE__ */ n("label", {
|
|
11
|
+
htmlFor: i,
|
|
12
|
+
className: "block text-xs leading-4 font-medium text-fg-muted",
|
|
13
|
+
children: [
|
|
14
|
+
r,
|
|
15
|
+
s && /* @__PURE__ */ t("span", {
|
|
16
|
+
"aria-hidden": "true",
|
|
17
|
+
className: "ml-1 text-fg-danger",
|
|
18
|
+
children: "*"
|
|
19
|
+
}),
|
|
20
|
+
!s && c && /* @__PURE__ */ t("span", {
|
|
21
|
+
className: "ml-1 text-fg-subtle",
|
|
22
|
+
children: "(선택)"
|
|
23
|
+
})
|
|
24
|
+
]
|
|
25
|
+
}), typeof a == "string" ? /* @__PURE__ */ t("span", {
|
|
26
|
+
style: { lineHeight: "16px" },
|
|
27
|
+
className: "text-[11px] text-fg-subtle",
|
|
28
|
+
children: a
|
|
29
|
+
}) : a]
|
|
30
|
+
}), l]
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
//#endregion
|
|
34
|
+
export { r as Field };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const e=require("../animated-height/AnimatedHeight.cjs");let t=require("react/jsx-runtime");function n({children:n,animated:r=!1,...i}){let a=n?(0,t.jsx)(`div`,{...i,children:n}):null;return r?(0,t.jsx)(e.AnimatedHeight,{children:a}):a}exports.FieldMessage=n;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { HTMLAttributes, ReactNode } from 'react';
|
|
2
|
+
export interface FieldMessageProps extends Omit<HTMLAttributes<HTMLDivElement>, "children"> {
|
|
3
|
+
children?: ReactNode;
|
|
4
|
+
/** 메시지가 나타나고 사라질 때 높이를 부드럽게 전환한다. */
|
|
5
|
+
animated?: boolean;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* 폼 컨트롤 아래의 도움말·검증 메시지 영역.
|
|
9
|
+
*
|
|
10
|
+
* 조건부 메시지를 애니메이션하려면 컴포넌트 자체는 유지하고 children만 바꾼다.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```tsx
|
|
14
|
+
* <FieldMessage animated className="mt-1 text-xs text-fg-danger">
|
|
15
|
+
* {errorMessage}
|
|
16
|
+
* </FieldMessage>
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
export declare function FieldMessage({ children, animated, ...messageProps }: FieldMessageProps): import("react").JSX.Element | null;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { AnimatedHeight as e } from "../animated-height/AnimatedHeight.esm.js";
|
|
2
|
+
import { jsx as t } from "react/jsx-runtime";
|
|
3
|
+
//#region src/components/field/FieldMessage.tsx
|
|
4
|
+
function n({ children: n, animated: r = !1, ...i }) {
|
|
5
|
+
let a = n ? /* @__PURE__ */ t("div", {
|
|
6
|
+
...i,
|
|
7
|
+
children: n
|
|
8
|
+
}) : null;
|
|
9
|
+
return r ? /* @__PURE__ */ t(e, { children: a }) : a;
|
|
10
|
+
}
|
|
11
|
+
//#endregion
|
|
12
|
+
export { n as FieldMessage };
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export interface FieldProps {
|
|
2
|
+
/** 라벨 텍스트. */
|
|
3
|
+
label: string;
|
|
4
|
+
/** 연결할 폼 컨트롤 id. 제공하면 label의 htmlFor로 전달된다. */
|
|
5
|
+
htmlFor?: string;
|
|
6
|
+
/**
|
|
7
|
+
* 라벨 우측 보조 텍스트 또는 노드(버튼·뱃지 등).
|
|
8
|
+
* string이면 자동으로 옅은 보조 스타일(fg-subtle) 적용.
|
|
9
|
+
*/
|
|
10
|
+
rightLabel?: React.ReactNode;
|
|
11
|
+
/** 외부 그리드에서 필드 셀의 배치를 조정할 때 사용하는 추가 className. */
|
|
12
|
+
className?: string;
|
|
13
|
+
/**
|
|
14
|
+
* 필수 표시를 라벨 뒤에 추가한다. 접근성을 위해 실제 입력에도 required를 지정한다.
|
|
15
|
+
* `optional`과 동시 사용 시 `required`가 우선한다.
|
|
16
|
+
*/
|
|
17
|
+
required?: boolean;
|
|
18
|
+
/**
|
|
19
|
+
* 선택 필드 — 라벨 뒤에 `(선택)` 표시.
|
|
20
|
+
* `required`와 동시 사용 시 `required` 우선.
|
|
21
|
+
*/
|
|
22
|
+
optional?: boolean;
|
|
23
|
+
children: React.ReactNode;
|
|
24
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const e=require("../../lib/utils.cjs");let t=require("react/jsx-runtime");function n({content:n,position:r=`top`}){return(0,t.jsxs)(`div`,{className:`relative inline-flex items-center group`,children:[(0,t.jsx)(`div`,{className:`w-3.5 h-3.5 rounded-full bg-primary flex items-center justify-center cursor-help hover:bg-primary-hover transition-colors`,children:(0,t.jsx)(`span`,{className:`text-[9px] font-bold text-fg-inverse`,children:`?`})}),(0,t.jsxs)(`div`,{className:e.cn(`absolute z-floating px-3 py-2 bg-bg-tooltip text-fg-tooltip text-xs rounded-tooltip shadow-overlay opacity-0 invisible group-hover:opacity-100 group-hover:visible transition-all duration-200 pointer-events-none w-64 whitespace-normal`,{top:`bottom-full left-1/2 -translate-x-1/2 mb-2`,bottom:`top-full left-1/2 -translate-x-1/2 mt-2`,left:`right-full top-1/2 -translate-y-1/2 mr-2`,right:`left-full top-1/2 -translate-y-1/2 ml-2`}[r]),children:[n,(0,t.jsx)(`div`,{className:e.cn(`absolute w-2 h-2 bg-bg-tooltip transform rotate-45`,r===`top`?`bottom-[-4px] left-1/2 -translate-x-1/2`:r===`bottom`?`top-[-4px] left-1/2 -translate-x-1/2`:r===`left`?`right-[-4px] top-1/2 -translate-y-1/2`:`left-[-4px] top-1/2 -translate-y-1/2`)})]})]})}exports.InfoTooltip=n;
|
|
@@ -7,5 +7,12 @@ export interface InfoTooltipProps {
|
|
|
7
7
|
* 정보 툴팁 컴포넌트
|
|
8
8
|
*
|
|
9
9
|
* `?` 아이콘에 마우스 호버 시 툴팁을 표시해요. CSS group-hover 기반의 단순 구현.
|
|
10
|
+
*
|
|
11
|
+
* 라벨 옆 보조 설명에 쓴다. `content`가 ReactNode라 강조·줄바꿈이 자유롭다(string만이면 `Tooltip`).
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```tsx
|
|
15
|
+
* <label>정산 주기 <InfoTooltip content={<>영업일 기준 <b>D+2</b></>} /></label>
|
|
16
|
+
* ```
|
|
10
17
|
*/
|
|
11
18
|
export declare function InfoTooltip({ content, position }: InfoTooltipProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { cn as e } from "../../lib/utils.esm.js";
|
|
2
|
+
import { jsx as t, jsxs as n } from "react/jsx-runtime";
|
|
3
|
+
//#region src/components/info-tooltip/InfoTooltip.tsx
|
|
4
|
+
function r({ content: r, position: i = "top" }) {
|
|
5
|
+
return /* @__PURE__ */ n("div", {
|
|
6
|
+
className: "relative inline-flex items-center group",
|
|
7
|
+
children: [/* @__PURE__ */ t("div", {
|
|
8
|
+
className: "w-3.5 h-3.5 rounded-full bg-primary flex items-center justify-center cursor-help hover:bg-primary-hover transition-colors",
|
|
9
|
+
children: /* @__PURE__ */ t("span", {
|
|
10
|
+
className: "text-[9px] font-bold text-fg-inverse",
|
|
11
|
+
children: "?"
|
|
12
|
+
})
|
|
13
|
+
}), /* @__PURE__ */ n("div", {
|
|
14
|
+
className: e("absolute z-floating px-3 py-2 bg-bg-tooltip text-fg-tooltip text-xs rounded-tooltip shadow-overlay opacity-0 invisible group-hover:opacity-100 group-hover:visible transition-all duration-200 pointer-events-none w-64 whitespace-normal", {
|
|
15
|
+
top: "bottom-full left-1/2 -translate-x-1/2 mb-2",
|
|
16
|
+
bottom: "top-full left-1/2 -translate-x-1/2 mt-2",
|
|
17
|
+
left: "right-full top-1/2 -translate-y-1/2 mr-2",
|
|
18
|
+
right: "left-full top-1/2 -translate-y-1/2 ml-2"
|
|
19
|
+
}[i]),
|
|
20
|
+
children: [r, /* @__PURE__ */ t("div", { className: e("absolute w-2 h-2 bg-bg-tooltip transform rotate-45", i === "top" ? "bottom-[-4px] left-1/2 -translate-x-1/2" : i === "bottom" ? "top-[-4px] left-1/2 -translate-x-1/2" : i === "left" ? "right-[-4px] top-1/2 -translate-y-1/2" : "left-[-4px] top-1/2 -translate-y-1/2") })]
|
|
21
|
+
})]
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
//#endregion
|
|
25
|
+
export { r as InfoTooltip };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const e=require("./Input.cjs"),t=require("./decimal-validation.cjs");let n=require("react"),r=require("react/jsx-runtime");function i(e){return e==null?``:String(e)}var a=(0,n.forwardRef)(({value:a,defaultValue:o,onChange:s,decimalPlaces:c=2,allowNegative:l=!1,emitEmpty:u=!1,min:d,max:f,onBlur:p,...m},h)=>{let g=a!==void 0,[_,v]=(0,n.useState)(()=>i(a??o)),[y,b]=(0,n.useState)(()=>i(a??o));(0,n.useEffect)(()=>{if(g){let e=i(a);v(e),b(e)}},[g,a]);let x=e=>{let n=t.validateDecimalDraft(e,{decimalPlaces:c,allowNegative:l,min:d,max:f});n!==`reject`&&(v(e),n===`empty`?u&&s?.(e):n===`value`&&(b(e),s?.(e)))};return(0,r.jsx)(e.Input,{...m,ref:h,type:`text`,inputMode:`decimal`,value:_,onChange:e=>x(e.target.value),onBlur:e=>{_!==y&&v(y),p?.(e)}})});a.displayName=`DecimalInput`,exports.DecimalInput=a;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { InputProps } from './types.js';
|
|
2
|
+
export interface DecimalInputProps extends Omit<InputProps, "value" | "defaultValue" | "onChange" | "type"> {
|
|
3
|
+
value?: string | number | null;
|
|
4
|
+
defaultValue?: string | number | null;
|
|
5
|
+
onChange?: (value: string) => void;
|
|
6
|
+
/** 허용할 소수 자릿수. 0 이상의 유한한 정수로 지정한다. 기본 2. */
|
|
7
|
+
decimalPlaces?: number;
|
|
8
|
+
/** 음수 입력 허용. 기본 false. */
|
|
9
|
+
allowNegative?: boolean;
|
|
10
|
+
/** 빈 값을 onChange로 전달할지 여부. 기본 false. */
|
|
11
|
+
emitEmpty?: boolean;
|
|
12
|
+
min?: number;
|
|
13
|
+
max?: number;
|
|
14
|
+
}
|
|
15
|
+
/** 소수 입력을 문자열로 전달한다. 범위 밖이지만 완성 가능한 접두사는 임시로 유지하고
|
|
16
|
+
* 포커스를 잃으면 마지막 유효 값으로 복원한다. 빈 값도 전달하려면 emitEmpty를 켠다.
|
|
17
|
+
* Input의 variant는 필수이며 소수점 자릿수와 범위는 호출부에서 지정한다. */
|
|
18
|
+
export declare const DecimalInput: import('react').ForwardRefExoticComponent<DecimalInputProps & import('react').RefAttributes<HTMLInputElement>>;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { Input as e } from "./Input.esm.js";
|
|
2
|
+
import { validateDecimalDraft as t } from "./decimal-validation.esm.js";
|
|
3
|
+
import { forwardRef as n, useEffect as r, useState as i } from "react";
|
|
4
|
+
import { jsx as a } from "react/jsx-runtime";
|
|
5
|
+
//#region src/components/input/DecimalInput.tsx
|
|
6
|
+
function o(e) {
|
|
7
|
+
return e == null ? "" : String(e);
|
|
8
|
+
}
|
|
9
|
+
var s = n(({ value: n, defaultValue: s, onChange: c, decimalPlaces: l = 2, allowNegative: u = !1, emitEmpty: d = !1, min: f, max: p, onBlur: m, ...h }, g) => {
|
|
10
|
+
let _ = n !== void 0, [v, y] = i(() => o(n ?? s)), [b, x] = i(() => o(n ?? s));
|
|
11
|
+
r(() => {
|
|
12
|
+
if (_) {
|
|
13
|
+
let e = o(n);
|
|
14
|
+
y(e), x(e);
|
|
15
|
+
}
|
|
16
|
+
}, [_, n]);
|
|
17
|
+
let S = (e) => {
|
|
18
|
+
let n = t(e, {
|
|
19
|
+
decimalPlaces: l,
|
|
20
|
+
allowNegative: u,
|
|
21
|
+
min: f,
|
|
22
|
+
max: p
|
|
23
|
+
});
|
|
24
|
+
n !== "reject" && (y(e), n === "empty" ? d && c?.(e) : n === "value" && (x(e), c?.(e)));
|
|
25
|
+
};
|
|
26
|
+
return /* @__PURE__ */ a(e, {
|
|
27
|
+
...h,
|
|
28
|
+
ref: g,
|
|
29
|
+
type: "text",
|
|
30
|
+
inputMode: "decimal",
|
|
31
|
+
value: v,
|
|
32
|
+
onChange: (e) => S(e.target.value),
|
|
33
|
+
onBlur: (e) => {
|
|
34
|
+
v !== b && y(b), m?.(e);
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
s.displayName = "DecimalInput";
|
|
39
|
+
//#endregion
|
|
40
|
+
export { s as DecimalInput };
|