@clickhouse/click-ui 0.7.0 → 0.8.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/dist/cjs/click-ui.css +1543 -71
- package/dist/cjs/components/AutoComplete/AutoComplete.css +97 -0
- package/dist/cjs/components/AutoComplete/AutoComplete.module.css.cjs +18 -0
- package/dist/cjs/components/AutoComplete/AutoComplete.module.css.cjs.map +1 -0
- package/dist/cjs/components/AutoComplete/index.cjs +14 -74
- package/dist/cjs/components/AutoComplete/index.cjs.map +1 -1
- package/dist/cjs/components/Button/BaseButton.cjs +10 -31
- package/dist/cjs/components/Button/BaseButton.cjs.map +1 -1
- package/dist/cjs/components/Button/BaseButton.css +40 -0
- package/dist/cjs/components/Button/BaseButton.module.css.cjs +10 -0
- package/dist/cjs/components/Button/BaseButton.module.css.cjs.map +1 -0
- package/dist/cjs/components/CardPromotion/CardPromotion.css +52 -0
- package/dist/cjs/components/CardPromotion/CardPromotion.module.css.cjs +21 -0
- package/dist/cjs/components/CardPromotion/CardPromotion.module.css.cjs.map +1 -0
- package/dist/cjs/components/CardPromotion/index.cjs +8 -54
- package/dist/cjs/components/CardPromotion/index.cjs.map +1 -1
- package/dist/cjs/components/CodeBlock/CodeBlock.css +48 -0
- package/dist/cjs/components/CodeBlock/CodeBlock.module.css.cjs +22 -0
- package/dist/cjs/components/CodeBlock/CodeBlock.module.css.cjs.map +1 -0
- package/dist/cjs/components/CodeBlock/InlineCodeBlock.cjs +7 -14
- package/dist/cjs/components/CodeBlock/InlineCodeBlock.cjs.map +1 -1
- package/dist/cjs/components/CodeBlock/InlineCodeBlock.css +10 -0
- package/dist/cjs/components/CodeBlock/InlineCodeBlock.module.css.cjs +12 -0
- package/dist/cjs/components/CodeBlock/InlineCodeBlock.module.css.cjs.map +1 -0
- package/dist/cjs/components/CodeBlock/index.cjs +18 -49
- package/dist/cjs/components/CodeBlock/index.cjs.map +1 -1
- package/dist/cjs/components/CodeBlock/useColorStyle.cjs +15 -0
- package/dist/cjs/components/CodeBlock/useColorStyle.cjs.map +1 -1
- package/dist/cjs/components/ContextMenu/ContextMenu.css +12 -0
- package/dist/cjs/components/ContextMenu/ContextMenu.module.css.cjs +8 -1
- package/dist/cjs/components/ContextMenu/ContextMenu.module.css.cjs.map +1 -1
- package/dist/cjs/components/ContextMenu/index.cjs +8 -20
- package/dist/cjs/components/ContextMenu/index.cjs.map +1 -1
- package/dist/cjs/components/CrossButton/CrossButton.css +12 -0
- package/dist/cjs/components/CrossButton/CrossButton.module.css.cjs +10 -0
- package/dist/cjs/components/CrossButton/CrossButton.module.css.cjs.map +1 -0
- package/dist/cjs/components/CrossButton/index.cjs +11 -18
- package/dist/cjs/components/CrossButton/index.cjs.map +1 -1
- package/dist/cjs/components/DatePicker/DateTimeRangePicker.cjs +1 -1
- package/dist/cjs/components/DatePicker/DateTimeRangePicker.cjs.map +1 -1
- package/dist/cjs/components/Dropdown/Dropdown.css +23 -0
- package/dist/cjs/components/Dropdown/Dropdown.module.css.cjs +3 -1
- package/dist/cjs/components/Dropdown/Dropdown.module.css.cjs.map +1 -1
- package/dist/cjs/components/Dropdown/index.cjs +12 -23
- package/dist/cjs/components/Dropdown/index.cjs.map +1 -1
- package/dist/cjs/components/EllipsisContent/EllipsisContent.css +21 -0
- package/dist/cjs/components/EllipsisContent/EllipsisContent.module.css.cjs +10 -0
- package/dist/cjs/components/EllipsisContent/EllipsisContent.module.css.cjs.map +1 -0
- package/dist/cjs/components/EllipsisContent/index.cjs +7 -6
- package/dist/cjs/components/EllipsisContent/index.cjs.map +1 -1
- package/dist/cjs/components/EmptyButton/EmptyButton.css +21 -0
- package/dist/cjs/components/EmptyButton/EmptyButton.module.css.cjs +10 -0
- package/dist/cjs/components/EmptyButton/EmptyButton.module.css.cjs.map +1 -0
- package/dist/cjs/components/EmptyButton/index.cjs +10 -4
- package/dist/cjs/components/EmptyButton/index.cjs.map +1 -1
- package/dist/cjs/components/FileTabs/FileTabs.css +167 -0
- package/dist/cjs/components/FileTabs/FileTabs.module.css.cjs +38 -0
- package/dist/cjs/components/FileTabs/FileTabs.module.css.cjs.map +1 -0
- package/dist/cjs/components/FileTabs/index.cjs +51 -80
- package/dist/cjs/components/FileTabs/index.cjs.map +1 -1
- package/dist/cjs/components/FileUpload/FileMultiUpload.cjs +3 -9
- package/dist/cjs/components/FileUpload/FileMultiUpload.cjs.map +1 -1
- package/dist/cjs/components/FileUpload/FileMultiUpload.css +8 -0
- package/dist/cjs/components/FileUpload/FileMultiUpload.module.css.cjs +10 -0
- package/dist/cjs/components/FileUpload/FileMultiUpload.module.css.cjs.map +1 -0
- package/dist/cjs/components/FileUpload/FileUpload.stories-common.css +14 -0
- package/dist/cjs/components/FileUpload/FileUploadArea.cjs +87 -64
- package/dist/cjs/components/FileUpload/FileUploadArea.cjs.map +1 -1
- package/dist/cjs/components/FileUpload/FileUploadArea.css +130 -0
- package/dist/cjs/components/FileUpload/FileUploadArea.module.css.cjs +38 -0
- package/dist/cjs/components/FileUpload/FileUploadArea.module.css.cjs.map +1 -0
- package/dist/cjs/components/FileUpload/FileUploadItem.cjs +56 -64
- package/dist/cjs/components/FileUpload/FileUploadItem.cjs.map +1 -1
- package/dist/cjs/components/FileUpload/FileUploadItem.css +82 -0
- package/dist/cjs/components/FileUpload/FileUploadItem.module.css.cjs +27 -0
- package/dist/cjs/components/FileUpload/FileUploadItem.module.css.cjs.map +1 -0
- package/dist/cjs/components/FormContainer/Error.cjs +8 -9
- package/dist/cjs/components/FormContainer/Error.cjs.map +1 -1
- package/dist/cjs/components/FormContainer/Error.css +4 -0
- package/dist/cjs/components/FormContainer/Error.module.css.cjs +12 -0
- package/dist/cjs/components/FormContainer/Error.module.css.cjs.map +1 -0
- package/dist/cjs/components/FormContainer/FormElementContainer.cjs +8 -6
- package/dist/cjs/components/FormContainer/FormElementContainer.cjs.map +1 -1
- package/dist/cjs/components/FormContainer/FormElementContainer.css +14 -0
- package/dist/cjs/components/FormContainer/FormElementContainer.module.css.cjs +10 -0
- package/dist/cjs/components/FormContainer/FormElementContainer.module.css.cjs.map +1 -0
- package/dist/cjs/components/FormContainer/FormRoot.cjs +32 -18
- package/dist/cjs/components/FormContainer/FormRoot.cjs.map +1 -1
- package/dist/cjs/components/FormContainer/FormRoot.css +33 -0
- package/dist/cjs/components/FormContainer/FormRoot.module.css.cjs +15 -0
- package/dist/cjs/components/FormContainer/FormRoot.module.css.cjs.map +1 -0
- package/dist/cjs/components/GridCenter/GridCenter.css +6 -0
- package/dist/cjs/components/GridContainer/GridContainer.css +71 -0
- package/dist/cjs/components/GridContainer/GridContainer.module.css.cjs +12 -0
- package/dist/cjs/components/GridContainer/GridContainer.module.css.cjs.map +1 -0
- package/dist/cjs/components/GridContainer/index.cjs +64 -64
- package/dist/cjs/components/GridContainer/index.cjs.map +1 -1
- package/dist/cjs/components/MiddleTruncator/MiddleTruncator.css +22 -0
- package/dist/cjs/components/MiddleTruncator/MiddleTruncator.module.css.cjs +18 -0
- package/dist/cjs/components/MiddleTruncator/MiddleTruncator.module.css.cjs.map +1 -0
- package/dist/cjs/components/MiddleTruncator/index.cjs +5 -17
- package/dist/cjs/components/MiddleTruncator/index.cjs.map +1 -1
- package/dist/cjs/components/Pagination/Pagination.css +7 -0
- package/dist/cjs/components/Pagination/Pagination.module.css.cjs +10 -0
- package/dist/cjs/components/Pagination/Pagination.module.css.cjs.map +1 -0
- package/dist/cjs/components/Pagination/index.cjs +3 -5
- package/dist/cjs/components/Pagination/index.cjs.map +1 -1
- package/dist/cjs/components/Panel/Panel.css +116 -0
- package/dist/cjs/components/Panel/Panel.module.css.cjs +87 -0
- package/dist/cjs/components/Panel/Panel.module.css.cjs.map +1 -0
- package/dist/cjs/components/Panel/index.cjs +85 -35
- package/dist/cjs/components/Panel/index.cjs.map +1 -1
- package/dist/cjs/components/Popover/Popover.css +20 -0
- package/dist/cjs/components/Popover/Popover.module.css.cjs +5 -1
- package/dist/cjs/components/Popover/Popover.module.css.cjs.map +1 -1
- package/dist/cjs/components/Popover/index.cjs +2 -18
- package/dist/cjs/components/Popover/index.cjs.map +1 -1
- package/dist/cjs/components/Select/MultiSelectValue.cjs +4 -9
- package/dist/cjs/components/Select/MultiSelectValue.cjs.map +1 -1
- package/dist/cjs/components/Select/MultiSelectValue.css +19 -0
- package/dist/cjs/components/Select/MultiSelectValue.module.css.cjs +11 -0
- package/dist/cjs/components/Select/MultiSelectValue.module.css.cjs.map +1 -0
- package/dist/cjs/components/Select/SingleSelectValue.cjs +3 -5
- package/dist/cjs/components/Select/SingleSelectValue.cjs.map +1 -1
- package/dist/cjs/components/Select/SingleSelectValue.css +10 -0
- package/dist/cjs/components/Select/SingleSelectValue.module.css.cjs +10 -0
- package/dist/cjs/components/Select/SingleSelectValue.module.css.cjs.map +1 -0
- package/dist/cjs/components/Select/common/InternalSelect.cjs +18 -23
- package/dist/cjs/components/Select/common/InternalSelect.cjs.map +1 -1
- package/dist/cjs/components/Select/common/SelectComponents.cjs +110 -0
- package/dist/cjs/components/Select/common/SelectComponents.cjs.map +1 -0
- package/dist/cjs/components/Select/common/SelectComponents.css +296 -0
- package/dist/cjs/components/Select/common/SelectComponents.module.css.cjs +31 -0
- package/dist/cjs/components/Select/common/SelectComponents.module.css.cjs.map +1 -0
- package/dist/cjs/components/SplitButton/SplitButton.css +138 -0
- package/dist/cjs/components/SplitButton/SplitButton.module.css.cjs +19 -0
- package/dist/cjs/components/SplitButton/SplitButton.module.css.cjs.map +1 -0
- package/dist/cjs/components/SplitButton/index.cjs +42 -88
- package/dist/cjs/components/SplitButton/index.cjs.map +1 -1
- package/dist/cjs/components/Table/Table.css +0 -1
- package/dist/esm/click-ui.css +1543 -71
- package/dist/esm/components/AutoComplete/AutoComplete.css +97 -0
- package/dist/esm/components/AutoComplete/AutoComplete.module.css.js +14 -0
- package/dist/esm/components/AutoComplete/AutoComplete.module.css.js.map +1 -0
- package/dist/esm/components/AutoComplete/index.js +15 -75
- package/dist/esm/components/AutoComplete/index.js.map +1 -1
- package/dist/esm/components/Button/BaseButton.css +40 -0
- package/dist/esm/components/Button/BaseButton.js +11 -32
- package/dist/esm/components/Button/BaseButton.js.map +1 -1
- package/dist/esm/components/Button/BaseButton.module.css.js +6 -0
- package/dist/esm/components/Button/BaseButton.module.css.js.map +1 -0
- package/dist/esm/components/CardPromotion/CardPromotion.css +52 -0
- package/dist/esm/components/CardPromotion/CardPromotion.module.css.js +13 -0
- package/dist/esm/components/CardPromotion/CardPromotion.module.css.js.map +1 -0
- package/dist/esm/components/CardPromotion/index.js +8 -54
- package/dist/esm/components/CardPromotion/index.js.map +1 -1
- package/dist/esm/components/CodeBlock/CodeBlock.css +48 -0
- package/dist/esm/components/CodeBlock/CodeBlock.module.css.js +14 -0
- package/dist/esm/components/CodeBlock/CodeBlock.module.css.js.map +1 -0
- package/dist/esm/components/CodeBlock/InlineCodeBlock.css +10 -0
- package/dist/esm/components/CodeBlock/InlineCodeBlock.js +7 -14
- package/dist/esm/components/CodeBlock/InlineCodeBlock.js.map +1 -1
- package/dist/esm/components/CodeBlock/InlineCodeBlock.module.css.js +7 -0
- package/dist/esm/components/CodeBlock/InlineCodeBlock.module.css.js.map +1 -0
- package/dist/esm/components/CodeBlock/index.js +20 -51
- package/dist/esm/components/CodeBlock/index.js.map +1 -1
- package/dist/esm/components/CodeBlock/useColorStyle.js +14 -1
- package/dist/esm/components/CodeBlock/useColorStyle.js.map +1 -1
- package/dist/esm/components/ContextMenu/ContextMenu.css +12 -0
- package/dist/esm/components/ContextMenu/ContextMenu.module.css.js +7 -2
- package/dist/esm/components/ContextMenu/ContextMenu.module.css.js.map +1 -1
- package/dist/esm/components/ContextMenu/index.js +8 -20
- package/dist/esm/components/ContextMenu/index.js.map +1 -1
- package/dist/esm/components/CrossButton/CrossButton.css +12 -0
- package/dist/esm/components/CrossButton/CrossButton.module.css.js +6 -0
- package/dist/esm/components/CrossButton/CrossButton.module.css.js.map +1 -0
- package/dist/esm/components/CrossButton/index.js +11 -18
- package/dist/esm/components/CrossButton/index.js.map +1 -1
- package/dist/esm/components/DatePicker/DateTimeRangePicker.js +1 -1
- package/dist/esm/components/DatePicker/DateTimeRangePicker.js.map +1 -1
- package/dist/esm/components/Dropdown/Dropdown.css +23 -0
- package/dist/esm/components/Dropdown/Dropdown.module.css.js +3 -1
- package/dist/esm/components/Dropdown/Dropdown.module.css.js.map +1 -1
- package/dist/esm/components/Dropdown/index.js +12 -23
- package/dist/esm/components/Dropdown/index.js.map +1 -1
- package/dist/esm/components/EllipsisContent/EllipsisContent.css +21 -0
- package/dist/esm/components/EllipsisContent/EllipsisContent.module.css.js +6 -0
- package/dist/esm/components/EllipsisContent/EllipsisContent.module.css.js.map +1 -0
- package/dist/esm/components/EllipsisContent/index.js +7 -6
- package/dist/esm/components/EllipsisContent/index.js.map +1 -1
- package/dist/esm/components/EmptyButton/EmptyButton.css +21 -0
- package/dist/esm/components/EmptyButton/EmptyButton.module.css.js +6 -0
- package/dist/esm/components/EmptyButton/EmptyButton.module.css.js.map +1 -0
- package/dist/esm/components/EmptyButton/index.js +10 -4
- package/dist/esm/components/EmptyButton/index.js.map +1 -1
- package/dist/esm/components/FileTabs/FileTabs.css +167 -0
- package/dist/esm/components/FileTabs/FileTabs.module.css.js +26 -0
- package/dist/esm/components/FileTabs/FileTabs.module.css.js.map +1 -0
- package/dist/esm/components/FileTabs/index.js +51 -80
- package/dist/esm/components/FileTabs/index.js.map +1 -1
- package/dist/esm/components/FileUpload/FileMultiUpload.css +8 -0
- package/dist/esm/components/FileUpload/FileMultiUpload.js +3 -9
- package/dist/esm/components/FileUpload/FileMultiUpload.js.map +1 -1
- package/dist/esm/components/FileUpload/FileMultiUpload.module.css.js +6 -0
- package/dist/esm/components/FileUpload/FileMultiUpload.module.css.js.map +1 -0
- package/dist/esm/components/FileUpload/FileUpload.stories-common.css +14 -0
- package/dist/esm/components/FileUpload/FileUploadArea.css +130 -0
- package/dist/esm/components/FileUpload/FileUploadArea.js +87 -64
- package/dist/esm/components/FileUpload/FileUploadArea.js.map +1 -1
- package/dist/esm/components/FileUpload/FileUploadArea.module.css.js +32 -0
- package/dist/esm/components/FileUpload/FileUploadArea.module.css.js.map +1 -0
- package/dist/esm/components/FileUpload/FileUploadItem.css +82 -0
- package/dist/esm/components/FileUpload/FileUploadItem.js +56 -64
- package/dist/esm/components/FileUpload/FileUploadItem.js.map +1 -1
- package/dist/esm/components/FileUpload/FileUploadItem.module.css.js +21 -0
- package/dist/esm/components/FileUpload/FileUploadItem.module.css.js.map +1 -0
- package/dist/esm/components/FormContainer/Error.css +4 -0
- package/dist/esm/components/FormContainer/Error.js +8 -9
- package/dist/esm/components/FormContainer/Error.js.map +1 -1
- package/dist/esm/components/FormContainer/Error.module.css.js +7 -0
- package/dist/esm/components/FormContainer/Error.module.css.js.map +1 -0
- package/dist/esm/components/FormContainer/FormElementContainer.css +14 -0
- package/dist/esm/components/FormContainer/FormElementContainer.js +8 -6
- package/dist/esm/components/FormContainer/FormElementContainer.js.map +1 -1
- package/dist/esm/components/FormContainer/FormElementContainer.module.css.js +6 -0
- package/dist/esm/components/FormContainer/FormElementContainer.module.css.js.map +1 -0
- package/dist/esm/components/FormContainer/FormRoot.css +33 -0
- package/dist/esm/components/FormContainer/FormRoot.js +32 -18
- package/dist/esm/components/FormContainer/FormRoot.js.map +1 -1
- package/dist/esm/components/FormContainer/FormRoot.module.css.js +11 -0
- package/dist/esm/components/FormContainer/FormRoot.module.css.js.map +1 -0
- package/dist/esm/components/GridCenter/GridCenter.css +6 -0
- package/dist/esm/components/GridContainer/GridContainer.css +71 -0
- package/dist/esm/components/GridContainer/GridContainer.module.css.js +8 -0
- package/dist/esm/components/GridContainer/GridContainer.module.css.js.map +1 -0
- package/dist/esm/components/GridContainer/index.js +65 -65
- package/dist/esm/components/GridContainer/index.js.map +1 -1
- package/dist/esm/components/MiddleTruncator/MiddleTruncator.css +22 -0
- package/dist/esm/components/MiddleTruncator/MiddleTruncator.module.css.js +11 -0
- package/dist/esm/components/MiddleTruncator/MiddleTruncator.module.css.js.map +1 -0
- package/dist/esm/components/MiddleTruncator/index.js +5 -17
- package/dist/esm/components/MiddleTruncator/index.js.map +1 -1
- package/dist/esm/components/Pagination/Pagination.css +7 -0
- package/dist/esm/components/Pagination/Pagination.module.css.js +6 -0
- package/dist/esm/components/Pagination/Pagination.module.css.js.map +1 -0
- package/dist/esm/components/Pagination/index.js +3 -5
- package/dist/esm/components/Pagination/index.js.map +1 -1
- package/dist/esm/components/Panel/Panel.css +116 -0
- package/dist/esm/components/Panel/Panel.module.css.js +58 -0
- package/dist/esm/components/Panel/Panel.module.css.js.map +1 -0
- package/dist/esm/components/Panel/index.js +85 -35
- package/dist/esm/components/Panel/index.js.map +1 -1
- package/dist/esm/components/Popover/Popover.css +20 -0
- package/dist/esm/components/Popover/Popover.module.css.js +5 -2
- package/dist/esm/components/Popover/Popover.module.css.js.map +1 -1
- package/dist/esm/components/Popover/index.js +2 -18
- package/dist/esm/components/Popover/index.js.map +1 -1
- package/dist/esm/components/Select/MultiSelectValue.css +19 -0
- package/dist/esm/components/Select/MultiSelectValue.js +4 -9
- package/dist/esm/components/Select/MultiSelectValue.js.map +1 -1
- package/dist/esm/components/Select/MultiSelectValue.module.css.js +7 -0
- package/dist/esm/components/Select/MultiSelectValue.module.css.js.map +1 -0
- package/dist/esm/components/Select/SingleSelectValue.css +10 -0
- package/dist/esm/components/Select/SingleSelectValue.js +3 -5
- package/dist/esm/components/Select/SingleSelectValue.js.map +1 -1
- package/dist/esm/components/Select/SingleSelectValue.module.css.js +6 -0
- package/dist/esm/components/Select/SingleSelectValue.module.css.js.map +1 -0
- package/dist/esm/components/Select/common/InternalSelect.js +4 -9
- package/dist/esm/components/Select/common/InternalSelect.js.map +1 -1
- package/dist/esm/components/Select/common/SelectComponents.css +296 -0
- package/dist/esm/components/Select/common/SelectComponents.js +92 -0
- package/dist/esm/components/Select/common/SelectComponents.js.map +1 -0
- package/dist/esm/components/Select/common/SelectComponents.module.css.js +27 -0
- package/dist/esm/components/Select/common/SelectComponents.module.css.js.map +1 -0
- package/dist/esm/components/SplitButton/SplitButton.css +138 -0
- package/dist/esm/components/SplitButton/SplitButton.module.css.js +15 -0
- package/dist/esm/components/SplitButton/SplitButton.module.css.js.map +1 -0
- package/dist/esm/components/SplitButton/index.js +43 -89
- package/dist/esm/components/SplitButton/index.js.map +1 -1
- package/dist/esm/components/Table/Table.css +0 -1
- package/dist/types/components/AutoComplete/AutoComplete.d.ts +1 -1
- package/dist/types/components/Button/BaseButton.d.ts +2 -1
- package/dist/types/components/CardPromotion/CardPromotion.d.ts +1 -1
- package/dist/types/components/CodeBlock/CodeBlock.d.ts +1 -1
- package/dist/types/components/CodeBlock/InlineCodeBlock.d.ts +1 -1
- package/dist/types/components/CodeBlock/useColorStyle.d.ts +6 -112
- package/dist/types/components/ContextMenu/ContextMenu.d.ts +1 -1
- package/dist/types/components/CrossButton/CrossButton.d.ts +2 -7
- package/dist/types/components/Dropdown/Dropdown.d.ts +2 -2
- package/dist/types/components/EmptyButton/EmptyButton.d.ts +2 -1
- package/dist/types/components/FileTabs/FileTabs.d.ts +3 -3
- package/dist/types/components/FileUpload/FileUpload.stories-common.d.ts +4 -1
- package/dist/types/components/FormContainer/Error.d.ts +2 -1
- package/dist/types/components/FormContainer/FormElementContainer.d.ts +2 -1
- package/dist/types/components/FormContainer/FormRoot.d.ts +6 -4
- package/dist/types/components/GridCenter/GridCenter.d.ts +9 -1
- package/dist/types/components/Panel/Panel.d.ts +2 -39
- package/dist/types/components/Select/common/SelectComponents.d.ts +33 -0
- package/dist/types/components/SplitButton/SplitButton.d.ts +1 -1
- package/package.json +1 -1
- package/dist/cjs/components/Select/common/SelectStyled.cjs +0 -194
- package/dist/cjs/components/Select/common/SelectStyled.cjs.map +0 -1
- package/dist/esm/components/Select/common/SelectStyled.js +0 -176
- package/dist/esm/components/Select/common/SelectStyled.js.map +0 -1
- package/dist/types/components/Select/common/SelectStyled.d.ts +0 -34
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../../../src/components/FileTabs/FileTabs.tsx"],"sourcesContent":["import {\n HTMLAttributes,\n createContext,\n useContext,\n ReactElement,\n Children,\n useState,\n MouseEvent,\n useEffect,\n ReactNode,\n WheelEvent,\n useRef,\n} from 'react';\nimport { styled } from 'styled-components';\nimport { Icon } from '@/components/Icon';\nimport { IconButton } from '@/components/IconButton';\nimport type { IconName } from '@/components/Icon/Icon.types';\n\n// TODO: Check if react-sortablejs has ESM version\nimport ReactSortableModule from 'react-sortablejs/dist/index.js';\nimport type {\n ItemInterface,\n Sortable,\n Store,\n ReactSortableProps,\n} from 'react-sortablejs';\nconst { ReactSortable } = ReactSortableModule;\n\nexport type FileTabStatusType =\n | 'default'\n | 'success'\n | 'neutral'\n | 'danger'\n | 'warning'\n | 'info';\n\nconst TabsContainer = styled.div<{ $count: number }>`\n display: flex;\n position: relative;\n overflow: auto;\n overscroll-behavior: none;\n scrollbar-width: 0;\n max-width: ${({ $count }) => `${$count * 200}px`};\n &::-webkit-scrollbar {\n height: 0;\n }\n`;\n\nconst TabsSortableContainer = styled(ReactSortable)`\n display: flex;\n & > div {\n height: 100%;\n outline: none;\n min-width: 100px;\n width: clamp(100px, 100%, 200px);\n &.sortable-ghost {\n opacity: 0;\n }\n }\n`;\n\ninterface ContextProps {\n selectedIndex?: number;\n onClose: (index: number) => void;\n}\n\nexport const TabContext = createContext<ContextProps>({\n selectedIndex: undefined,\n onClose: () => null,\n});\n\nexport interface FileTabProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {\n /** Callback when the tab is closed */\n onClose?: () => void;\n /** Index of the tab in the list */\n index: number;\n /** Status indicator for the tab */\n status?: FileTabStatusType;\n /** Icon to display in the tab */\n icon?: IconName | ReactNode;\n /** Text to display in the tab */\n text: string;\n /** Test ID for testing */\n testId?: string;\n /** Whether the tab is in preview mode (italic text) */\n preview?: boolean;\n}\nexport interface FileTabsProps extends Omit<\n ReactSortableProps<ItemInterface>,\n 'onSelect' | 'list' | 'setList'\n> {\n /** Index of the currently selected tab */\n selectedIndex?: number;\n /** The tab elements to render */\n children: ReactElement<FileTabProps> | ReactElement<FileTabProps>[];\n /** Callback when a tab is reordered via drag and drop */\n onReorderTab: (sourcePosition: number, destinationPosition: number) => void;\n /** Callback when a tab is closed */\n onClose: (index: number) => void;\n /** Callback when a tab is selected */\n onSelect: (index: number) => void;\n /** List of items for sortable functionality */\n list?: ItemInterface[];\n /** Setter for the sortable list */\n setList?: (newState: ItemInterface[], sortable: Sortable | null, store: Store) => void;\n}\n\nconst useSelect = () => {\n const result = useContext(TabContext);\n if (!result) {\n throw new Error('Context used outside of its Provider!');\n }\n return result;\n};\n\nexport const FileTabs = ({\n selectedIndex,\n children,\n onReorderTab,\n onClose: onCloseProp,\n onSelect: onSelectProp,\n list: listProp,\n setList: setListProp,\n onEnd,\n direction,\n group,\n ...props\n}: FileTabsProps) => {\n const ref = useRef<HTMLDivElement>(null);\n const [list, setList] = useState<ItemInterface[]>(\n Children.map(children, (_, index) => ({\n id: `tab-element-${index}`,\n }))\n );\n useEffect(() => {\n setList(\n Children.map(children, (_, index) => ({\n id: `tab-element-${index}`,\n }))\n );\n }, [children]);\n\n const onClose = (index: number) => {\n onCloseProp(index);\n setList(list => {\n list.splice(index, 1);\n return [...list];\n });\n };\n\n const onSelect = (index: number) => () => {\n onSelectProp(index);\n };\n\n const value = {\n selectedIndex,\n onClose,\n };\n\n const onWheel = (evt: WheelEvent<HTMLDivElement>) => {\n if (ref.current) {\n ref.current.scrollLeft += evt.deltaY;\n }\n };\n return (\n <TabContext.Provider value={value}>\n <TabsContainer\n ref={ref}\n onWheel={onWheel}\n role=\"tablist\"\n onScroll={e => {\n e.preventDefault();\n e.stopPropagation();\n }}\n $count={(listProp ?? list).length}\n >\n <TabsSortableContainer\n direction={direction ?? 'horizontal'}\n group={group ?? 'tabbar'}\n list={listProp ?? list}\n setList={setListProp ?? setList}\n onEnd={(evt, sortable, store) => {\n const { newDraggableIndex, oldDraggableIndex } = evt;\n if (\n typeof newDraggableIndex === 'number' &&\n typeof oldDraggableIndex === 'number' &&\n oldDraggableIndex !== newDraggableIndex\n ) {\n onReorderTab(oldDraggableIndex, newDraggableIndex);\n }\n if (typeof onEnd === 'function') {\n onEnd(evt, sortable, store);\n }\n }}\n revertOnSpill\n {...props}\n >\n {Children.map(children, (child, index) => (\n <div\n tabIndex={index + 1}\n role=\"tab\"\n onClick={onSelect(index)}\n key={`tab-element-${index}`}\n >\n {child}\n </div>\n ))}\n </TabsSortableContainer>\n </TabsContainer>\n </TabContext.Provider>\n );\n};\n\nconst TabElement = styled.div<{\n $active: boolean;\n $preview?: boolean;\n $dismissable: boolean;\n $fixedTabElement?: boolean;\n}>`\n display: grid;\n justify-content: flex-start;\n align-items: center;\n outline: none;\n max-width: 100%;\n max-width: -webkit-fill-available;\n max-width: fill-available;\n max-width: stretch;\n border: none;\n cursor: pointer;\n height: 100%;\n max-height: 100%;\n box-sizing: border-box;\n ${({ theme, $active, $preview, $dismissable, $fixedTabElement }) => `\n width:${$fixedTabElement ? 'auto' : '100%'};\n grid-template-columns: 1fr ${\n $dismissable ? theme.click.tabs.fileTabs.icon.size.width : ''\n };\n padding: ${theme.click.tabs.fileTabs.space.y} ${theme.click.tabs.fileTabs.space.x};\n gap: ${theme.click.tabs.fileTabs.space.gap};\n border-radius: ${theme.click.tabs.fileTabs.radii.all};\n border-right: 1px solid ${theme.click.tabs.fileTabs.color.stroke.default};\n background: ${theme.click.tabs.fileTabs.color.background.default};\n color: ${theme.click.tabs.fileTabs.color.text.default};\n font: ${theme.click.tabs.fileTabs.typography.label.default};\n svg,\n [data-indicator] {\n height: ${theme.click.tabs.fileTabs.icon.size.height};\n width: ${theme.click.tabs.fileTabs.icon.size.width};\n }\n ${\n $active\n ? `\n background: ${theme.click.tabs.fileTabs.color.background.active};\n color: ${theme.click.tabs.fileTabs.color.text.active};\n font: ${theme.click.tabs.fileTabs.typography.label.active};\n border-right: 1px solid ${theme.click.tabs.fileTabs.color.stroke.active};\n `\n : `\n &:hover {\n background: ${theme.click.tabs.fileTabs.color.background.hover};\n color: ${theme.click.tabs.fileTabs.color.text.hover};\n font: ${theme.click.tabs.fileTabs.typography.label.hover};\n border-right: 1px solid ${theme.click.tabs.fileTabs.color.stroke.hover};\n }\n `\n }\n ${$preview === true ? 'font-style: italic;' : ''}\n `}\n [data-type=\"close\"] {\n display: none;\n }\n [data-indicator] {\n display: block;\n }\n &:hover {\n [data-type='close'] {\n display: block;\n }\n [data-indicator] {\n display: none;\n }\n }\n`;\n\nconst Indicator = styled.div<{ $status: FileTabStatusType }>`\n position: relative;\n &::after {\n position: absolute;\n left: 0.25rem;\n top: 0.25rem;\n content: '';\n width: 0.5rem;\n height: 0.5rem;\n ${({ theme, $status }) => `\n background: ${\n $status === 'default' ? 'transparent' : theme.click.alert.color.text[$status]\n };\n border-radius: 50%;\n `}\n }\n`;\n\nconst TabContent = styled.div`\n display: flex;\n justify-content: flex-start;\n align-items: center;\n flex-wrap: nowrap;\n overflow: hidden;\n gap: ${({ theme }) => theme.click.tabs.fileTabs.space.gap};\n`;\n\nconst TabContentText = styled.span`\n display: inline-block;\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n`;\n\nconst EmptyButton = styled.button`\n padding: 0;\n ${({ theme }) => theme.click.tabs.fileTabs.color.closeButton.background.default};\n &:hover {\n background: ${({ theme }) =>\n theme.click.tabs.fileTabs.color.closeButton.background.hover};\n }\n`;\n\nconst Tab = ({\n text,\n index,\n icon,\n onMouseDown: onMouseDownProp,\n status = 'default',\n testId,\n preview,\n ...props\n}: FileTabProps) => {\n const { selectedIndex, onClose: onCloseProp } = useSelect();\n const onMouseDown = (e: MouseEvent<HTMLDivElement>) => {\n e.currentTarget.scrollIntoView({\n behavior: 'smooth',\n block: 'nearest',\n inline: 'center',\n });\n if (typeof onMouseDownProp === 'function') {\n onMouseDownProp(e);\n }\n };\n\n const onClose = (e: MouseEvent<HTMLButtonElement>): void => {\n e.preventDefault();\n e.stopPropagation();\n onCloseProp(index);\n };\n\n return (\n <TabElement\n $active={selectedIndex === index}\n onMouseDown={onMouseDown}\n data-testid={testId ? `${testId}-${index}` : undefined}\n $preview={preview}\n $dismissable\n {...props}\n >\n <TabContent>\n {typeof icon === 'string' ? <Icon name={icon as IconName} /> : icon}\n <TabContentText>{text}</TabContentText>\n </TabContent>\n <EmptyButton\n as={IconButton}\n htmlType=\"button\"\n icon=\"cross\"\n onClick={onClose}\n data-type=\"close\"\n data-testid={testId ? `${testId}-${index}-close` : undefined}\n />\n <Indicator\n $status={status}\n data-indicator={status}\n data-testid={testId ? `${testId}-${index}-status` : undefined}\n />\n </TabElement>\n );\n};\n\nTab.displayName = 'FileTab';\n\nFileTabs.Tab = Tab;\n\ninterface FileTabElementProps extends HTMLAttributes<HTMLDivElement> {\n icon?: IconName | ReactNode;\n active?: boolean;\n preview?: boolean;\n}\nexport const FileTabElement = ({\n icon,\n children,\n active = false,\n preview,\n ...props\n}: FileTabElementProps) => {\n return (\n <TabElement\n $active={active}\n $preview={preview}\n $dismissable={false}\n $fixedTabElement\n {...props}\n >\n {typeof icon === 'string' ? <Icon name={icon as IconName} /> : icon}\n {children && <TabContentText>{children}</TabContentText>}\n </TabElement>\n );\n};\n"],"names":["ReactSortable","ReactSortableModule","TabsContainer","styled","div","withConfig","componentId","$count","TabsSortableContainer","TabContext","createContext","selectedIndex","undefined","onClose","useSelect","result","useContext","Error","FileTabs","children","onReorderTab","onCloseProp","onSelect","onSelectProp","list","listProp","setList","setListProp","onEnd","direction","group","props","ref","useRef","useState","Children","map","_","index","id","useEffect","splice","value","onWheel","evt","current","scrollLeft","deltaY","jsx","e","preventDefault","stopPropagation","length","sortable","store","newDraggableIndex","oldDraggableIndex","child","TabElement","theme","$active","$preview","$dismissable","$fixedTabElement","click","tabs","fileTabs","icon","size","width","space","y","x","gap","radii","all","color","stroke","default","background","text","typography","label","height","active","hover","Indicator","$status","alert","TabContent","TabContentText","span","EmptyButton","button","closeButton","Tab","onMouseDown","onMouseDownProp","status","testId","preview","currentTarget","scrollIntoView","behavior","block","inline","jsxs","Icon","IconButton","displayName","FileTabElement"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../../src/components/FileTabs/FileTabs.tsx"],"sourcesContent":["import {\n HTMLAttributes,\n createContext,\n useContext,\n ReactElement,\n Children,\n useState,\n MouseEvent,\n useEffect,\n ReactNode,\n WheelEvent,\n useRef,\n CSSProperties,\n} from 'react';\nimport { cn, cva } from '@/lib/cva';\nimport { Icon } from '@/components/Icon';\nimport { IconButton } from '@/components/IconButton';\nimport type { IconName } from '@/components/Icon/Icon.types';\nimport styles from './FileTabs.module.css';\n\n// TODO: Check if react-sortablejs has ESM version\nimport ReactSortableModule from 'react-sortablejs/dist/index.js';\nimport type {\n ItemInterface,\n Sortable,\n Store,\n ReactSortableProps,\n} from 'react-sortablejs';\nconst { ReactSortable } = ReactSortableModule;\n\nexport type FileTabStatusType =\n | 'default'\n | 'success'\n | 'neutral'\n | 'danger'\n | 'warning'\n | 'info';\n\ninterface ContextProps {\n selectedIndex?: number;\n onClose: (index: number) => void;\n}\n\nexport const TabContext = createContext<ContextProps>({\n selectedIndex: undefined,\n onClose: () => null,\n});\n\nexport interface FileTabProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {\n /** Callback when the tab is closed */\n onClose?: () => void;\n /** Index of the tab in the list */\n index: number;\n /** Status indicator for the tab */\n status?: FileTabStatusType;\n /** Icon to display in the tab */\n icon?: IconName | ReactNode;\n /** Text to display in the tab */\n text: string;\n /** Test ID for testing */\n testId?: string;\n /** Whether the tab is in preview mode (italic text) */\n preview?: boolean;\n}\nexport interface FileTabsProps extends Omit<\n ReactSortableProps<ItemInterface>,\n 'onSelect' | 'list' | 'setList'\n> {\n /** Index of the currently selected tab */\n selectedIndex?: number;\n /** The tab elements to render */\n children: ReactElement<FileTabProps> | ReactElement<FileTabProps>[];\n /** Callback when a tab is reordered via drag and drop */\n onReorderTab: (sourcePosition: number, destinationPosition: number) => void;\n /** Callback when a tab is closed */\n onClose: (index: number) => void;\n /** Callback when a tab is selected */\n onSelect: (index: number) => void;\n /** List of items for sortable functionality */\n list?: ItemInterface[];\n /** Setter for the sortable list */\n setList?: (newState: ItemInterface[], sortable: Sortable | null, store: Store) => void;\n}\n\nconst useSelect = () => {\n const result = useContext(TabContext);\n if (!result) {\n throw new Error('Context used outside of its Provider!');\n }\n return result;\n};\n\nexport const FileTabs = ({\n selectedIndex,\n children,\n onReorderTab,\n onClose: onCloseProp,\n onSelect: onSelectProp,\n list: listProp,\n setList: setListProp,\n onEnd,\n direction,\n group,\n className,\n ...props\n}: FileTabsProps) => {\n const ref = useRef<HTMLDivElement>(null);\n const [list, setList] = useState<ItemInterface[]>(\n Children.map(children, (_, index) => ({\n id: `tab-element-${index}`,\n }))\n );\n useEffect(() => {\n setList(\n Children.map(children, (_, index) => ({\n id: `tab-element-${index}`,\n }))\n );\n }, [children]);\n\n const onClose = (index: number) => {\n onCloseProp(index);\n setList(list => {\n list.splice(index, 1);\n return [...list];\n });\n };\n\n const onSelect = (index: number) => () => {\n onSelectProp(index);\n };\n\n const value = {\n selectedIndex,\n onClose,\n };\n\n const onWheel = (evt: WheelEvent<HTMLDivElement>) => {\n if (ref.current) {\n ref.current.scrollLeft += evt.deltaY;\n }\n };\n return (\n <TabContext.Provider value={value}>\n <div\n ref={ref}\n onWheel={onWheel}\n role=\"tablist\"\n onScroll={e => {\n e.preventDefault();\n e.stopPropagation();\n }}\n className={styles.tabs}\n style={\n {\n '--file-tabs-count-width': `${(listProp ?? list).length * 200}px`,\n } as CSSProperties\n }\n >\n <ReactSortable\n direction={direction ?? 'horizontal'}\n group={group ?? 'tabbar'}\n list={listProp ?? list}\n setList={setListProp ?? setList}\n onEnd={(evt, sortable, store) => {\n const { newDraggableIndex, oldDraggableIndex } = evt;\n if (\n typeof newDraggableIndex === 'number' &&\n typeof oldDraggableIndex === 'number' &&\n oldDraggableIndex !== newDraggableIndex\n ) {\n onReorderTab(oldDraggableIndex, newDraggableIndex);\n }\n if (typeof onEnd === 'function') {\n onEnd(evt, sortable, store);\n }\n }}\n revertOnSpill\n {...props}\n className={cn(styles['tabs-sortable'], className)}\n >\n {Children.map(children, (child, index) => (\n <div\n tabIndex={index + 1}\n role=\"tab\"\n onClick={onSelect(index)}\n key={`tab-element-${index}`}\n >\n {child}\n </div>\n ))}\n </ReactSortable>\n </div>\n </TabContext.Provider>\n );\n};\n\nconst tabVariants = cva(styles.tab, {\n variants: {\n active: {\n true: styles.tab_active,\n false: styles.tab_inactive,\n },\n fixed: {\n true: styles.tab_fixed,\n false: styles['tab_full-width'],\n },\n preview: {\n true: styles.tab_preview,\n false: '',\n },\n dismissable: {\n true: styles.tab_dismissable,\n false: '',\n },\n },\n defaultVariants: {\n fixed: false,\n preview: false,\n dismissable: false,\n },\n});\n\nconst Tab = ({\n text,\n index,\n icon,\n onMouseDown: onMouseDownProp,\n status = 'default',\n testId,\n preview,\n className,\n ...props\n}: FileTabProps) => {\n const { selectedIndex, onClose: onCloseProp } = useSelect();\n const onMouseDown = (e: MouseEvent<HTMLDivElement>) => {\n e.currentTarget.scrollIntoView({\n behavior: 'smooth',\n block: 'nearest',\n inline: 'center',\n });\n if (typeof onMouseDownProp === 'function') {\n onMouseDownProp(e);\n }\n };\n\n const onClose = (e: MouseEvent<HTMLButtonElement>): void => {\n e.preventDefault();\n e.stopPropagation();\n onCloseProp(index);\n };\n\n return (\n <div\n onMouseDown={onMouseDown}\n data-testid={testId ? `${testId}-${index}` : undefined}\n {...props}\n className={cn(\n tabVariants({\n active: selectedIndex === index,\n preview,\n dismissable: true,\n }),\n className\n )}\n >\n <div className={styles['tab-content']}>\n {typeof icon === 'string' ? <Icon name={icon as IconName} /> : icon}\n <span className={styles['tab-content-text']}>{text}</span>\n </div>\n <IconButton\n className={styles['empty-button']}\n htmlType=\"button\"\n icon=\"cross\"\n onClick={onClose}\n data-type=\"close\"\n data-testid={testId ? `${testId}-${index}-close` : undefined}\n />\n <div\n className={styles.indicator}\n data-indicator={status}\n data-testid={testId ? `${testId}-${index}-status` : undefined}\n />\n </div>\n );\n};\n\nTab.displayName = 'FileTab';\n\nFileTabs.Tab = Tab;\n\ninterface FileTabElementProps extends HTMLAttributes<HTMLDivElement> {\n icon?: IconName | ReactNode;\n active?: boolean;\n preview?: boolean;\n}\nexport const FileTabElement = ({\n icon,\n children,\n active = false,\n preview,\n className,\n ...props\n}: FileTabElementProps) => {\n return (\n <div\n {...props}\n className={cn(tabVariants({ active, preview, fixed: true }), className)}\n >\n {typeof icon === 'string' ? <Icon name={icon as IconName} /> : icon}\n {children && <span className={styles['tab-content-text']}>{children}</span>}\n </div>\n );\n};\n"],"names":["ReactSortable","ReactSortableModule","TabContext","createContext","selectedIndex","undefined","onClose","useSelect","result","useContext","Error","FileTabs","children","onReorderTab","onCloseProp","onSelect","onSelectProp","list","listProp","setList","setListProp","onEnd","direction","group","className","props","ref","useRef","useState","Children","map","_","index","id","useEffect","splice","value","onWheel","evt","current","scrollLeft","deltaY","jsx","e","preventDefault","stopPropagation","styles","tabs","length","sortable","store","newDraggableIndex","oldDraggableIndex","cn","child","tabVariants","cva","tab","variants","active","true","tab_active","false","tab_inactive","fixed","tab_fixed","preview","tab_preview","dismissable","tab_dismissable","defaultVariants","Tab","text","icon","onMouseDown","onMouseDownProp","status","testId","currentTarget","scrollIntoView","behavior","block","inline","jsxs","Icon","IconButton","indicator","displayName","FileTabElement"],"mappings":"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"}
|
|
@@ -1,21 +1,15 @@
|
|
|
1
|
+
require("./FileMultiUpload.css");
|
|
1
2
|
'use strict';
|
|
2
3
|
|
|
3
4
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
4
5
|
|
|
5
6
|
const jsxRuntime = require('react/jsx-runtime');
|
|
6
7
|
const react = require('react');
|
|
7
|
-
const styledComponents = require('styled-components');
|
|
8
8
|
const FileUploadArea = require('./FileUploadArea.cjs');
|
|
9
9
|
const FileUploadItem = require('./FileUploadItem.cjs');
|
|
10
10
|
const useDragAndDrop = require('./useDragAndDrop.cjs');
|
|
11
|
+
const FileMultiUpload_module = require('./FileMultiUpload.module.css.cjs');
|
|
11
12
|
|
|
12
|
-
const FilesList = styledComponents.styled.div.withConfig({
|
|
13
|
-
componentId: "sc-1w9rsfj-0"
|
|
14
|
-
})(["display:flex;flex-direction:column;gap:", ";width:100%;margin-top:", ";"], ({
|
|
15
|
-
theme
|
|
16
|
-
}) => theme.click.fileUpload.sm.space.gap, ({
|
|
17
|
-
theme
|
|
18
|
-
}) => theme.click.fileUpload.md.space.gap);
|
|
19
13
|
const FileMultiUpload = ({
|
|
20
14
|
title,
|
|
21
15
|
supportedFileTypes = [".txt", ".sql"],
|
|
@@ -61,7 +55,7 @@ const FileMultiUpload = ({
|
|
|
61
55
|
const acceptedFileTypes = supportedFileTypes.join(",");
|
|
62
56
|
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
63
57
|
/* @__PURE__ */ jsxRuntime.jsx(FileUploadArea.FileUploadArea, { title, supportedFileTypes, size: "md", isDragging, isNotSupported, hasFile: false, multiple: true, onDragEnter: handleDragEnter, onDragLeave: handleDragLeave, onDragOver: handleDragOver, onDrop: handleDrop, onClick: handleBrowseClick }),
|
|
64
|
-
files.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
|
|
58
|
+
files.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: FileMultiUpload_module.default["files-list"], children: files.map((file) => /* @__PURE__ */ jsxRuntime.jsx(FileUploadItem.FileUploadItem, { fileName: file.name, fileSize: file.size, progress: file.progress, showSuccess: file.status === "success", showProgress: file.status === "uploading", failureMessage: file.errorMessage || "Upload failed", onRetry: () => handleRetryUpload(file.id), onRemove: () => handleRemoveFile(file.id), size: "sm", inline: false }, file.id)) }),
|
|
65
59
|
/* @__PURE__ */ jsxRuntime.jsx("input", { type: "file", ref: fileInputRef, accept: acceptedFileTypes, onChange: handleFileSelect, multiple: true, style: {
|
|
66
60
|
display: "none"
|
|
67
61
|
} })
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileMultiUpload.cjs","sources":["../../../../src/components/FileUpload/FileMultiUpload.tsx"],"sourcesContent":["import { useCallback } from 'react';\nimport {
|
|
1
|
+
{"version":3,"file":"FileMultiUpload.cjs","sources":["../../../../src/components/FileUpload/FileMultiUpload.tsx"],"sourcesContent":["import { useCallback } from 'react';\nimport { FileUploadArea } from './FileUploadArea';\nimport { FileUploadItem } from './FileUploadItem';\nimport { useDragAndDrop } from './useDragAndDrop';\nimport styles from './FileMultiUpload.module.css';\n\nexport interface FileUploadItem {\n id: string;\n name: string;\n size: number;\n status: 'uploading' | 'success' | 'error';\n progress: number;\n errorMessage?: string;\n}\n\nexport interface FileMultiUploadProps {\n title: string;\n supportedFileTypes?: string[];\n files: FileUploadItem[];\n onFileSelect?: (file: File) => void;\n onFileRetry?: (fileId: string) => void;\n onFileRemove?: (fileId: string) => void;\n onFileFailure?: () => void;\n}\n\nexport const FileMultiUpload = ({\n title,\n supportedFileTypes = ['.txt', '.sql'],\n files,\n onFileSelect,\n onFileRetry,\n onFileRemove,\n onFileFailure,\n}: FileMultiUploadProps) => {\n const handleFilesProcessed = useCallback(\n (processedFiles: File[]) => {\n processedFiles.forEach(file => {\n if (onFileSelect) {\n onFileSelect(file);\n }\n });\n },\n [onFileSelect]\n );\n\n const {\n isDragging,\n isNotSupported,\n fileInputRef,\n handleDragEnter,\n handleDragLeave,\n handleDragOver,\n handleDrop,\n handleFileSelect,\n handleBrowseClick,\n } = useDragAndDrop({\n onFilesProcessed: handleFilesProcessed,\n supportedFileTypes,\n onFileFailure,\n multiple: true,\n });\n\n const handleRemoveFile = useCallback(\n (fileId: string) => {\n if (onFileRemove) {\n onFileRemove(fileId);\n }\n },\n [onFileRemove]\n );\n\n const handleRetryUpload = useCallback(\n (fileId: string) => {\n if (onFileRetry) {\n onFileRetry(fileId);\n }\n },\n [onFileRetry]\n );\n\n const acceptedFileTypes = supportedFileTypes.join(',');\n\n return (\n <>\n <FileUploadArea\n title={title}\n supportedFileTypes={supportedFileTypes}\n size=\"md\"\n isDragging={isDragging}\n isNotSupported={isNotSupported}\n hasFile={false}\n multiple={true}\n onDragEnter={handleDragEnter}\n onDragLeave={handleDragLeave}\n onDragOver={handleDragOver}\n onDrop={handleDrop}\n onClick={handleBrowseClick}\n />\n\n {files.length > 0 && (\n <div className={styles['files-list']}>\n {files.map(file => (\n <FileUploadItem\n key={file.id}\n fileName={file.name}\n fileSize={file.size}\n progress={file.progress}\n showSuccess={file.status === 'success'}\n showProgress={file.status === 'uploading'}\n failureMessage={file.errorMessage || 'Upload failed'}\n onRetry={() => handleRetryUpload(file.id)}\n onRemove={() => handleRemoveFile(file.id)}\n size=\"sm\"\n inline={false}\n />\n ))}\n </div>\n )}\n\n <input\n type=\"file\"\n ref={fileInputRef}\n accept={acceptedFileTypes}\n onChange={handleFileSelect}\n multiple\n style={{ display: 'none' }}\n />\n </>\n );\n};\n"],"names":["FileMultiUpload","title","supportedFileTypes","files","onFileSelect","onFileRetry","onFileRemove","onFileFailure","handleFilesProcessed","useCallback","processedFiles","forEach","file","isDragging","isNotSupported","fileInputRef","handleDragEnter","handleDragLeave","handleDragOver","handleDrop","handleFileSelect","handleBrowseClick","useDragAndDrop","onFilesProcessed","multiple","handleRemoveFile","fileId","handleRetryUpload","acceptedFileTypes","join","jsxs","Fragment","jsx","FileUploadArea","length","styles","map","FileUploadItem","name","size","progress","status","errorMessage","id","display"],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/* stylelint-disable custom-property-pattern -- design tokens use camelCase (e.g. fileUpload) */
|
|
2
|
+
.files-list__Of0Ps {
|
|
3
|
+
display: flex;
|
|
4
|
+
width: 100%;
|
|
5
|
+
margin-top: var(--click-fileUpload-md-space-gap);
|
|
6
|
+
flex-direction: column;
|
|
7
|
+
gap: var(--click-fileUpload-sm-space-gap);
|
|
8
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: 'Module' } });
|
|
4
|
+
|
|
5
|
+
const styles = {
|
|
6
|
+
"files-list": "files-list__Of0Ps"
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
exports.default = styles;
|
|
10
|
+
//# sourceMappingURL=FileMultiUpload.module.css.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FileMultiUpload.module.css.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
.wrapper__LM6zP {
|
|
2
|
+
width: 100%;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
/* 768px == --breakpoint-sizes-md (media queries can't consume a CSS var). */
|
|
6
|
+
/* stylelint-disable-next-line media-feature-range-notation -- prefix notation
|
|
7
|
+
required for browser compatibility per .browserslistrc */
|
|
8
|
+
@media (min-width: 768px) {
|
|
9
|
+
.wrapper__LM6zP {
|
|
10
|
+
width: 100%;
|
|
11
|
+
max-width: 1024px; /* --breakpoint-sizes-lg */
|
|
12
|
+
margin: 0 auto;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -1,71 +1,75 @@
|
|
|
1
|
+
require("./FileUploadArea.css");
|
|
1
2
|
'use strict';
|
|
2
3
|
|
|
3
4
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
4
5
|
|
|
5
6
|
const jsxRuntime = require('react/jsx-runtime');
|
|
6
|
-
const
|
|
7
|
-
const
|
|
7
|
+
const cva = require('../../lib/cva.cjs');
|
|
8
|
+
const FileUploadArea_module = require('./FileUploadArea.module.css.cjs');
|
|
8
9
|
const Icon = require('../Icon/index.cjs');
|
|
9
10
|
const Title = require('../Title/index.cjs');
|
|
10
11
|
const Text = require('../Text/index.cjs');
|
|
12
|
+
const Button = require('../Button/index.cjs');
|
|
13
|
+
const classVarianceAuthority = require('class-variance-authority');
|
|
11
14
|
|
|
12
|
-
const
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
})
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
})
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
}
|
|
15
|
+
const uploadAreaVariants = classVarianceAuthority.cva(FileUploadArea_module.default["upload-area"], {
|
|
16
|
+
variants: {
|
|
17
|
+
radius: {
|
|
18
|
+
sm: FileUploadArea_module.default["upload-area_radius_sm"],
|
|
19
|
+
md: FileUploadArea_module.default["upload-area_radius_md"]
|
|
20
|
+
},
|
|
21
|
+
padding: {
|
|
22
|
+
sm: FileUploadArea_module.default["upload-area_padding_sm"],
|
|
23
|
+
md: FileUploadArea_module.default["upload-area_padding_md"]
|
|
24
|
+
},
|
|
25
|
+
minHeight: {
|
|
26
|
+
sm: FileUploadArea_module.default["upload-area_min-height_sm"],
|
|
27
|
+
md: FileUploadArea_module.default["upload-area_min-height_md"]
|
|
28
|
+
},
|
|
29
|
+
direction: {
|
|
30
|
+
row: FileUploadArea_module.default["upload-area_direction_row"],
|
|
31
|
+
column: FileUploadArea_module.default["upload-area_direction_column"]
|
|
32
|
+
},
|
|
33
|
+
justify: {
|
|
34
|
+
"space-between": FileUploadArea_module.default["upload-area_justify_space-between"],
|
|
35
|
+
center: FileUploadArea_module.default["upload-area_justify_center"]
|
|
36
|
+
},
|
|
37
|
+
gap: {
|
|
38
|
+
sm: FileUploadArea_module.default["upload-area_gap_sm"],
|
|
39
|
+
md: FileUploadArea_module.default["upload-area_gap_md"]
|
|
40
|
+
},
|
|
41
|
+
cursor: {
|
|
42
|
+
default: FileUploadArea_module.default["upload-area_cursor_default"],
|
|
43
|
+
pointer: FileUploadArea_module.default["upload-area_cursor_pointer"]
|
|
44
|
+
},
|
|
45
|
+
dashed: {
|
|
46
|
+
true: FileUploadArea_module.default["upload-area_dashed_true"]
|
|
47
|
+
},
|
|
48
|
+
dragging: {
|
|
49
|
+
true: FileUploadArea_module.default["upload-area_dragging_true"]
|
|
50
|
+
},
|
|
51
|
+
error: {
|
|
52
|
+
true: FileUploadArea_module.default["upload-area_error_true"]
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
const titleVariants = classVarianceAuthority.cva(FileUploadArea_module.default.title, {
|
|
57
|
+
variants: {
|
|
58
|
+
notSupported: {
|
|
59
|
+
true: FileUploadArea_module.default["title_not-supported_true"]
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
const uploadTextVariants = classVarianceAuthority.cva(FileUploadArea_module.default["upload-text"], {
|
|
64
|
+
variants: {
|
|
65
|
+
centered: {
|
|
66
|
+
true: FileUploadArea_module.default["upload-text_centered_true"]
|
|
67
|
+
},
|
|
68
|
+
grow: {
|
|
69
|
+
true: FileUploadArea_module.default["upload-text_grow_true"]
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
});
|
|
69
73
|
const FileUploadArea = ({
|
|
70
74
|
title,
|
|
71
75
|
supportedFileTypes,
|
|
@@ -82,11 +86,30 @@ const FileUploadArea = ({
|
|
|
82
86
|
onClick,
|
|
83
87
|
children
|
|
84
88
|
}) => {
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
89
|
+
const isCompact = hasFile || size === "sm";
|
|
90
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cva.cn(uploadAreaVariants({
|
|
91
|
+
radius: hasFile ? "sm" : "md",
|
|
92
|
+
padding: isCompact ? "sm" : "md",
|
|
93
|
+
minHeight: size === "sm" ? "sm" : "md",
|
|
94
|
+
direction: hasFile || size === "sm" ? "row" : "column",
|
|
95
|
+
justify: hasFile || size === "sm" ? "space-between" : "center",
|
|
96
|
+
gap: size === "sm" ? "sm" : "md",
|
|
97
|
+
cursor: hasFile ? "default" : "pointer",
|
|
98
|
+
dashed: !hasFile,
|
|
99
|
+
dragging: !hasFile && isDragging,
|
|
100
|
+
error: isError
|
|
101
|
+
})), onDragEnter, onDragLeave, onDragOver, onDrop, onClick: !hasFile ? onClick : void 0, children: !hasFile ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
102
|
+
/* @__PURE__ */ jsxRuntime.jsx(Icon.Icon, { name: "upload", className: FileUploadArea_module.default["upload-icon"] }),
|
|
103
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: cva.cn(uploadTextVariants({
|
|
104
|
+
centered: !hasFile && size === "md",
|
|
105
|
+
grow: hasFile || size === "sm"
|
|
106
|
+
})), children: [
|
|
107
|
+
isNotSupported ? /* @__PURE__ */ jsxRuntime.jsx(Title.Title, { type: "h1", className: cva.cn(titleVariants({
|
|
108
|
+
notSupported: true
|
|
109
|
+
})), children: "Unsupported file type" }) : /* @__PURE__ */ jsxRuntime.jsx(Title.Title, { type: "h1", className: cva.cn(titleVariants({
|
|
110
|
+
notSupported: isNotSupported
|
|
111
|
+
})), children: title }),
|
|
112
|
+
/* @__PURE__ */ jsxRuntime.jsxs(Text.Text, { className: FileUploadArea_module.default.description, children: [
|
|
90
113
|
"Files supported: ",
|
|
91
114
|
supportedFileTypes.join(", ")
|
|
92
115
|
] })
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileUploadArea.cjs","sources":["../../../../src/components/FileUpload/FileUploadArea.tsx"],"sourcesContent":["import type { DragEvent, FC, ReactNode } from 'react';\nimport { styled, css } from 'styled-components';\nimport { Text } from '@/components/Text';\nimport { Title } from '@/components/Title';\nimport { Icon } from '@/components/Icon';\nimport { Button } from '@/components/Button';\n\nconst UploadArea = styled.div<{\n $isDragging: boolean;\n $size: 'sm' | 'md';\n $hasFile: boolean;\n $isError?: boolean;\n}>`\n container-type: inline-size;\n container-name: uploadArea;\n box-sizing: border-box;\n width: 100%;\n background-color: ${({ theme }) => theme.click.fileUpload.color.background.default};\n border: ${({ theme }) => `1px solid ${theme.click.fileUpload.color.stroke.default}`};\n border-radius: ${({ theme, $hasFile }) =>\n $hasFile\n ? `${theme.click.fileUpload.sm.radii.all}`\n : `${theme.click.fileUpload.md.radii.all}`};\n padding: ${({ theme, $hasFile, $size }) =>\n $hasFile || $size === 'sm'\n ? `${theme.click.fileUpload.sm.space.y} ${theme.click.fileUpload.sm.space.x}`\n : `${theme.click.fileUpload.md.space.y} ${theme.click.fileUpload.md.space.x}`};\n min-height: ${({ theme, $size }) =>\n $size === 'sm'\n ? `calc(${theme.click.fileUpload.sm.space.y} * 2 + ${theme.sizes[8]})`\n : 'auto'};\n display: flex;\n flex-direction: ${props =>\n props.$hasFile ? 'row' : props.$size === 'sm' ? 'row' : 'column'};\n align-items: center;\n justify-content: ${props =>\n props.$hasFile ? 'space-between' : props.$size === 'sm' ? 'space-between' : 'center'};\n gap: ${({ theme, $size }) =>\n $size === 'sm'\n ? theme.click.fileUpload.sm.space.gap\n : theme.click.fileUpload.md.space.gap};\n cursor: ${props => (props.$hasFile ? 'default' : 'pointer')};\n transition: ${({ theme }) => theme.click.fileUpload.transitions.all};\n\n ${props =>\n !props.$hasFile &&\n css`\n border-style: dashed;\n border-color: ${({ theme }) => theme.click.fileUpload.color.stroke.default};\n\n ${props.$isDragging &&\n css`\n background-color: ${({ theme }) =>\n theme.click.fileUpload.color.background.active};\n border-color: ${({ theme }) => theme.click.fileUpload.color.stroke.active};\n `}\n `}\n\n ${props =>\n props.$isError &&\n css`\n background-color: ${({ theme }) => theme.click.fileUpload.color.background.error};\n border-color: transparent;\n `}\n`;\n\nconst FileUploadTitle = styled(Title)<{ $isNotSupported: boolean }>`\n font: ${({ theme }) => theme.click.fileUpload.typography.title.default};\n color: ${({ theme, $isNotSupported }) =>\n $isNotSupported\n ? theme.click.fileUpload.color.title.error\n : theme.click.fileUpload.color.title.default};\n`;\n\nconst FileUploadDescription = styled(Text)`\n font: ${({ theme }) => theme.click.fileUpload.typography.description.default};\n color: ${({ theme }) => theme.click.fileUpload.color.description.default};\n`;\n\nconst UploadIcon = styled(Icon)`\n svg {\n width: ${({ theme }) => theme.click.fileUpload.md.icon.size.width};\n height: ${({ theme }) => theme.click.fileUpload.md.icon.size.height};\n color: ${({ theme }) => theme.click.fileUpload.md.color.icon.default};\n }\n`;\n\nconst UploadText = styled.div<{ $size: 'sm' | 'md'; $hasFile: boolean }>`\n text-align: ${props => (props.$hasFile || props.$size === 'sm' ? 'left' : 'center')};\n ${props =>\n (props.$hasFile || props.$size === 'sm') &&\n css`\n flex: 1;\n `}\n\n ${props =>\n !props.$hasFile &&\n props.$size === 'md' &&\n css`\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 100%;\n `}\n`;\n\nexport interface FileUploadAreaProps {\n title: string;\n supportedFileTypes: string[];\n size?: 'sm' | 'md';\n isDragging: boolean;\n isNotSupported: boolean;\n hasFile?: boolean;\n isError?: boolean;\n multiple?: boolean;\n onDragEnter: (e: DragEvent<HTMLDivElement>) => void;\n onDragLeave: (e: DragEvent<HTMLDivElement>) => void;\n onDragOver: (e: DragEvent<HTMLDivElement>) => void;\n onDrop: (e: DragEvent<HTMLDivElement>) => void;\n onClick?: () => void;\n children?: ReactNode;\n}\n\nexport const FileUploadArea: FC<FileUploadAreaProps> = ({\n title,\n supportedFileTypes,\n size = 'sm',\n isDragging,\n isNotSupported,\n hasFile = false,\n isError = false,\n multiple = false,\n onDragEnter,\n onDragLeave,\n onDragOver,\n onDrop,\n onClick,\n children,\n}) => {\n return (\n <UploadArea\n $isDragging={isDragging}\n $size={size}\n $hasFile={hasFile}\n $isError={isError}\n onDragEnter={onDragEnter}\n onDragLeave={onDragLeave}\n onDragOver={onDragOver}\n onDrop={onDrop}\n onClick={!hasFile ? onClick : undefined}\n >\n {!hasFile ? (\n <>\n <UploadIcon name=\"upload\" />\n <UploadText\n $size={size}\n $hasFile={false}\n >\n {isNotSupported ? (\n <FileUploadTitle\n $isNotSupported\n type=\"h1\"\n >\n Unsupported file type\n </FileUploadTitle>\n ) : (\n <FileUploadTitle\n $isNotSupported={isNotSupported}\n type=\"h1\"\n >\n {title}\n </FileUploadTitle>\n )}\n <FileUploadDescription>\n Files supported: {supportedFileTypes.join(', ')}\n </FileUploadDescription>\n </UploadText>\n <Button\n type={'secondary'}\n onClick={e => {\n e.stopPropagation();\n onClick?.();\n }}\n >\n {multiple ? 'Browse files' : 'Browse file'}\n </Button>\n </>\n ) : (\n children\n )}\n </UploadArea>\n );\n};\n"],"names":["UploadArea","styled","div","withConfig","componentId","theme","click","fileUpload","color","background","default","stroke","$hasFile","sm","radii","all","md","$size","space","y","x","sizes","props","gap","transitions","css","$isDragging","active","$isError","error","FileUploadTitle","Title","typography","title","$isNotSupported","FileUploadDescription","Text","description","UploadIcon","Icon","icon","size","width","height","UploadText","FileUploadArea","supportedFileTypes","isDragging","isNotSupported","hasFile","isError","multiple","onDragEnter","onDragLeave","onDragOver","onDrop","onClick","children","jsx","undefined","jsxs","Fragment","join","Button","e","stopPropagation"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"FileUploadArea.cjs","sources":["../../../../src/components/FileUpload/FileUploadArea.tsx"],"sourcesContent":["import type { DragEvent, FC, ReactNode } from 'react';\nimport { cn, cva } from '@/lib/cva';\nimport { Text } from '@/components/Text';\nimport { Title } from '@/components/Title';\nimport { Icon } from '@/components/Icon';\nimport { Button } from '@/components/Button';\nimport styles from './FileUploadArea.module.css';\n\nconst uploadAreaVariants = cva(styles['upload-area'], {\n variants: {\n radius: {\n sm: styles['upload-area_radius_sm'],\n md: styles['upload-area_radius_md'],\n },\n padding: {\n sm: styles['upload-area_padding_sm'],\n md: styles['upload-area_padding_md'],\n },\n minHeight: {\n sm: styles['upload-area_min-height_sm'],\n md: styles['upload-area_min-height_md'],\n },\n direction: {\n row: styles['upload-area_direction_row'],\n column: styles['upload-area_direction_column'],\n },\n justify: {\n 'space-between': styles['upload-area_justify_space-between'],\n center: styles['upload-area_justify_center'],\n },\n gap: {\n sm: styles['upload-area_gap_sm'],\n md: styles['upload-area_gap_md'],\n },\n cursor: {\n default: styles['upload-area_cursor_default'],\n pointer: styles['upload-area_cursor_pointer'],\n },\n dashed: {\n true: styles['upload-area_dashed_true'],\n },\n dragging: {\n true: styles['upload-area_dragging_true'],\n },\n error: {\n true: styles['upload-area_error_true'],\n },\n },\n});\n\nconst titleVariants = cva(styles.title, {\n variants: {\n notSupported: {\n true: styles['title_not-supported_true'],\n },\n },\n});\n\nconst uploadTextVariants = cva(styles['upload-text'], {\n variants: {\n centered: {\n true: styles['upload-text_centered_true'],\n },\n grow: {\n true: styles['upload-text_grow_true'],\n },\n },\n});\n\nexport interface FileUploadAreaProps {\n title: string;\n supportedFileTypes: string[];\n size?: 'sm' | 'md';\n isDragging: boolean;\n isNotSupported: boolean;\n hasFile?: boolean;\n isError?: boolean;\n multiple?: boolean;\n onDragEnter: (e: DragEvent<HTMLDivElement>) => void;\n onDragLeave: (e: DragEvent<HTMLDivElement>) => void;\n onDragOver: (e: DragEvent<HTMLDivElement>) => void;\n onDrop: (e: DragEvent<HTMLDivElement>) => void;\n onClick?: () => void;\n children?: ReactNode;\n}\n\nexport const FileUploadArea: FC<FileUploadAreaProps> = ({\n title,\n supportedFileTypes,\n size = 'sm',\n isDragging,\n isNotSupported,\n hasFile = false,\n isError = false,\n multiple = false,\n onDragEnter,\n onDragLeave,\n onDragOver,\n onDrop,\n onClick,\n children,\n}) => {\n const isCompact = hasFile || size === 'sm';\n\n return (\n <div\n className={cn(\n uploadAreaVariants({\n radius: hasFile ? 'sm' : 'md',\n padding: isCompact ? 'sm' : 'md',\n minHeight: size === 'sm' ? 'sm' : 'md',\n direction: hasFile || size === 'sm' ? 'row' : 'column',\n justify: hasFile || size === 'sm' ? 'space-between' : 'center',\n gap: size === 'sm' ? 'sm' : 'md',\n cursor: hasFile ? 'default' : 'pointer',\n dashed: !hasFile,\n dragging: !hasFile && isDragging,\n error: isError,\n })\n )}\n onDragEnter={onDragEnter}\n onDragLeave={onDragLeave}\n onDragOver={onDragOver}\n onDrop={onDrop}\n onClick={!hasFile ? onClick : undefined}\n >\n {!hasFile ? (\n <>\n <Icon\n name=\"upload\"\n className={styles['upload-icon']}\n />\n <div\n className={cn(\n uploadTextVariants({\n centered: !hasFile && size === 'md',\n grow: hasFile || size === 'sm',\n })\n )}\n >\n {isNotSupported ? (\n <Title\n type=\"h1\"\n className={cn(titleVariants({ notSupported: true }))}\n >\n Unsupported file type\n </Title>\n ) : (\n <Title\n type=\"h1\"\n className={cn(titleVariants({ notSupported: isNotSupported }))}\n >\n {title}\n </Title>\n )}\n <Text className={styles.description}>\n Files supported: {supportedFileTypes.join(', ')}\n </Text>\n </div>\n <Button\n type={'secondary'}\n onClick={e => {\n e.stopPropagation();\n onClick?.();\n }}\n >\n {multiple ? 'Browse files' : 'Browse file'}\n </Button>\n </>\n ) : (\n children\n )}\n </div>\n );\n};\n"],"names":["uploadAreaVariants","cva","styles","variants","radius","sm","md","padding","minHeight","direction","row","column","justify","center","gap","cursor","default","pointer","dashed","true","dragging","error","titleVariants","title","notSupported","uploadTextVariants","centered","grow","FileUploadArea","supportedFileTypes","size","isDragging","isNotSupported","hasFile","isError","multiple","onDragEnter","onDragLeave","onDragOver","onDrop","onClick","children","isCompact","jsx","cn","undefined","jsxs","Fragment","Icon","Title","Text","description","join","Button","e","stopPropagation"],"mappings":"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"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/* stylelint-disable custom-property-pattern -- design tokens use camelCase (e.g. fileUpload) */
|
|
2
|
+
.upload-area__3SxAA {
|
|
3
|
+
display: flex;
|
|
4
|
+
box-sizing: border-box;
|
|
5
|
+
width: 100%;
|
|
6
|
+
align-items: center;
|
|
7
|
+
border: 1px solid var(--click-fileUpload-color-stroke-default);
|
|
8
|
+
background-color: var(--click-fileUpload-color-background-default);
|
|
9
|
+
transition: var(--click-fileUpload-transitions-all);
|
|
10
|
+
/* stylelint-disable-next-line container-name-pattern, value-keyword-case -- preserve original container-name from styled-components */
|
|
11
|
+
container-name: uploadArea;
|
|
12
|
+
container-type: inline-size;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/* border-radius: hasFile ? sm : md */
|
|
16
|
+
.upload-area_radius_sm__DW4eQ {
|
|
17
|
+
border-radius: var(--click-fileUpload-sm-radii-all);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
.upload-area_radius_md__k9cZA {
|
|
21
|
+
border-radius: var(--click-fileUpload-md-radii-all);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/* padding: hasFile || size === 'sm' ? sm : md */
|
|
25
|
+
.upload-area_padding_sm__ci1xq {
|
|
26
|
+
padding: var(--click-fileUpload-sm-space-y) var(--click-fileUpload-sm-space-x);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.upload-area_padding_md__SflJQ {
|
|
30
|
+
padding: var(--click-fileUpload-md-space-y) var(--click-fileUpload-md-space-x);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/* min-height: size === 'sm' ? calc : auto */
|
|
34
|
+
.upload-area_min-height_sm__JmKFU {
|
|
35
|
+
min-height: calc(var(--click-fileUpload-sm-space-y) * 2 + var(--sizes-8));
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.upload-area_min-height_md__7BUe3 {
|
|
39
|
+
min-height: auto;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/* flex-direction: hasFile ? row : size === 'sm' ? row : column */
|
|
43
|
+
.upload-area_direction_row__dPIPY {
|
|
44
|
+
flex-direction: row;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
.upload-area_direction_column__Yd-Y9 {
|
|
48
|
+
flex-direction: column;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/* justify-content: hasFile ? space-between : size === 'sm' ? space-between : center */
|
|
52
|
+
.upload-area_justify_space-between__8kSQQ {
|
|
53
|
+
justify-content: space-between;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
.upload-area_justify_center__vW-59 {
|
|
57
|
+
justify-content: center;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/* gap: size === 'sm' ? sm : md */
|
|
61
|
+
.upload-area_gap_sm__fRrTo {
|
|
62
|
+
gap: var(--click-fileUpload-sm-space-gap);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
.upload-area_gap_md__gndXo {
|
|
66
|
+
gap: var(--click-fileUpload-md-space-gap);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/* cursor: hasFile ? default : pointer */
|
|
70
|
+
.upload-area_cursor_default__Yrr8K {
|
|
71
|
+
cursor: default;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
.upload-area_cursor_pointer__nnHd9 {
|
|
75
|
+
cursor: pointer;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/* !hasFile: dashed border */
|
|
79
|
+
.upload-area_dashed_true__-dB8w {
|
|
80
|
+
border-style: dashed;
|
|
81
|
+
border-color: var(--click-fileUpload-color-stroke-default);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/* !hasFile && isDragging */
|
|
85
|
+
.upload-area_dragging_true__wzFjV {
|
|
86
|
+
border-color: var(--click-fileUpload-color-stroke-active);
|
|
87
|
+
background-color: var(--click-fileUpload-color-background-active);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/* isError */
|
|
91
|
+
.upload-area_error_true__gIe8y {
|
|
92
|
+
border-color: transparent;
|
|
93
|
+
background-color: var(--click-fileUpload-color-background-error);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
.title__1rLes {
|
|
97
|
+
color: var(--click-fileUpload-color-title-default);
|
|
98
|
+
font: var(--click-fileUpload-typography-title-default);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
.title_not-supported_true__o7ZXZ {
|
|
102
|
+
color: var(--click-fileUpload-color-title-error);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
.description__QyVSQ {
|
|
106
|
+
color: var(--click-fileUpload-color-description-default);
|
|
107
|
+
font: var(--click-fileUpload-typography-description-default);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
.upload-icon__CeL3E svg {
|
|
111
|
+
width: var(--click-fileUpload-md-icon-size-width);
|
|
112
|
+
height: var(--click-fileUpload-md-icon-size-height);
|
|
113
|
+
color: var(--click-fileUpload-md-color-icon-default);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
.upload-text__4oGA- {
|
|
117
|
+
text-align: left;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
.upload-text_centered_true__brhHN {
|
|
121
|
+
display: flex;
|
|
122
|
+
width: 100%;
|
|
123
|
+
flex-direction: column;
|
|
124
|
+
align-items: center;
|
|
125
|
+
text-align: center;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
.upload-text_grow_true__9MNMX {
|
|
129
|
+
flex: 1;
|
|
130
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: 'Module' } });
|
|
4
|
+
|
|
5
|
+
const title = "title__1rLes";
|
|
6
|
+
const description = "description__QyVSQ";
|
|
7
|
+
const styles = {
|
|
8
|
+
"upload-area": "upload-area__3SxAA",
|
|
9
|
+
"upload-area_radius_sm": "upload-area_radius_sm__DW4eQ",
|
|
10
|
+
"upload-area_radius_md": "upload-area_radius_md__k9cZA",
|
|
11
|
+
"upload-area_padding_sm": "upload-area_padding_sm__ci1xq",
|
|
12
|
+
"upload-area_padding_md": "upload-area_padding_md__SflJQ",
|
|
13
|
+
"upload-area_min-height_sm": "upload-area_min-height_sm__JmKFU",
|
|
14
|
+
"upload-area_min-height_md": "upload-area_min-height_md__7BUe3",
|
|
15
|
+
"upload-area_direction_row": "upload-area_direction_row__dPIPY",
|
|
16
|
+
"upload-area_direction_column": "upload-area_direction_column__Yd-Y9",
|
|
17
|
+
"upload-area_justify_space-between": "upload-area_justify_space-between__8kSQQ",
|
|
18
|
+
"upload-area_justify_center": "upload-area_justify_center__vW-59",
|
|
19
|
+
"upload-area_gap_sm": "upload-area_gap_sm__fRrTo",
|
|
20
|
+
"upload-area_gap_md": "upload-area_gap_md__gndXo",
|
|
21
|
+
"upload-area_cursor_default": "upload-area_cursor_default__Yrr8K",
|
|
22
|
+
"upload-area_cursor_pointer": "upload-area_cursor_pointer__nnHd9",
|
|
23
|
+
"upload-area_dashed_true": "upload-area_dashed_true__-dB8w",
|
|
24
|
+
"upload-area_dragging_true": "upload-area_dragging_true__wzFjV",
|
|
25
|
+
"upload-area_error_true": "upload-area_error_true__gIe8y",
|
|
26
|
+
title: title,
|
|
27
|
+
"title_not-supported_true": "title_not-supported_true__o7ZXZ",
|
|
28
|
+
description: description,
|
|
29
|
+
"upload-icon": "upload-icon__CeL3E",
|
|
30
|
+
"upload-text": "upload-text__4oGA-",
|
|
31
|
+
"upload-text_centered_true": "upload-text_centered_true__brhHN",
|
|
32
|
+
"upload-text_grow_true": "upload-text_grow_true__9MNMX"
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
exports.default = styles;
|
|
36
|
+
exports.description = description;
|
|
37
|
+
exports.title = title;
|
|
38
|
+
//# sourceMappingURL=FileUploadArea.module.css.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FileUploadArea.module.css.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|