@keboola/design 11.0.0 → 11.2.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/AGENTS.md +16 -1
- package/CHANGELOG.md +2138 -0
- package/COMPONENT-API.md +40 -1
- package/dist/AIKit-DiS0CVOW.js +1320 -0
- package/dist/AIKit-DiS0CVOW.js.map +1 -0
- package/dist/Alert-DfZq9kGe.js +133 -0
- package/dist/Alert-DfZq9kGe.js.map +1 -0
- package/dist/AlertModal-Dp_XuJBW.js +219 -0
- package/dist/AlertModal-Dp_XuJBW.js.map +1 -0
- package/dist/AppShell-B5GQN6Zs.js +143 -0
- package/dist/AppShell-B5GQN6Zs.js.map +1 -0
- package/dist/AutoSaveTextarea-BeuWuszr.js +58 -0
- package/dist/{chunk-UGT6DKWM.js.map → AutoSaveTextarea-BeuWuszr.js.map} +1 -1
- package/dist/Badge-Ch26CXoP.js +195 -0
- package/dist/Badge-Ch26CXoP.js.map +1 -0
- package/dist/BrandEditor-DyzgfVkl.js +903 -0
- package/dist/BrandEditor-DyzgfVkl.js.map +1 -0
- package/dist/BrandLogo-CJkRd0F8.js +46 -0
- package/dist/BrandLogo-CJkRd0F8.js.map +1 -0
- package/dist/Breadcrumb-Frst8MTA.js +330 -0
- package/dist/Breadcrumb-Frst8MTA.js.map +1 -0
- package/dist/Button-6xBX0nNl.js +391 -0
- package/dist/Button-6xBX0nNl.js.map +1 -0
- package/dist/Calendar-cG5NIJ4O.js +6768 -0
- package/dist/Calendar-cG5NIJ4O.js.map +1 -0
- package/dist/Card-BAoZ35CV.js +105 -0
- package/dist/Card-BAoZ35CV.js.map +1 -0
- package/dist/Checkbox-GJ8-srt4.js +97 -0
- package/dist/Checkbox-GJ8-srt4.js.map +1 -0
- package/dist/Clipboard-CBJZiviP.js +58 -0
- package/dist/Clipboard-CBJZiviP.js.map +1 -0
- package/dist/ClipboardButton-ClcluT0C.js +43 -0
- package/dist/ClipboardButton-ClcluT0C.js.map +1 -0
- package/dist/CodeEditor-DyaN-Ij2.js +1000 -0
- package/dist/CodeEditor-DyaN-Ij2.js.map +1 -0
- package/dist/Collapsible-BQXWEOBC.js +34 -0
- package/dist/Collapsible-BQXWEOBC.js.map +1 -0
- package/dist/ColorInput-B8z4j4Y_.js +180 -0
- package/dist/ColorInput-B8z4j4Y_.js.map +1 -0
- package/dist/ColorModeSwitch-dZFZyqy1.js +77 -0
- package/dist/ColorModeSwitch-dZFZyqy1.js.map +1 -0
- package/dist/Combobox-Dgm6Z4ib.js +443 -0
- package/dist/Combobox-Dgm6Z4ib.js.map +1 -0
- package/dist/Command-C0aZfVTq.js +102 -0
- package/dist/Command-C0aZfVTq.js.map +1 -0
- package/dist/CopyField-BJ96zvXs.js +322 -0
- package/dist/CopyField-BJ96zvXs.js.map +1 -0
- package/dist/DateInput-B3UdzRfW.js +141 -0
- package/dist/DateInput-B3UdzRfW.js.map +1 -0
- package/dist/DatePicker-Dw3DpbUh.js +24 -0
- package/dist/DatePicker-Dw3DpbUh.js.map +1 -0
- package/dist/DateRangeInput-DTuySEiq.js +139 -0
- package/dist/DateRangeInput-DTuySEiq.js.map +1 -0
- package/dist/DateRangePicker-DCmMHg4s.js +159 -0
- package/dist/DateRangePicker-DCmMHg4s.js.map +1 -0
- package/dist/DiagramSkeleton-lwBS2YBa.js +11 -0
- package/dist/DiagramSkeleton-lwBS2YBa.js.map +1 -0
- package/dist/DiffView-ppTIzh2h.js +429 -0
- package/dist/DiffView-ppTIzh2h.js.map +1 -0
- package/dist/DropdownMenu-t90tVw6l.js +327 -0
- package/dist/DropdownMenu-t90tVw6l.js.map +1 -0
- package/dist/FieldBox-D7DYtX_m.js +70 -0
- package/dist/FieldBox-D7DYtX_m.js.map +1 -0
- package/dist/FieldItem-CAPj9lj3.d.ts +111 -0
- package/dist/FieldItem-D-h1NeBo.js +108 -0
- package/dist/FieldItem-D-h1NeBo.js.map +1 -0
- package/dist/FileUpload-BRv0TaZk.js +2527 -0
- package/dist/FileUpload-BRv0TaZk.js.map +1 -0
- package/dist/Form-DHvcFoEi.js +311 -0
- package/dist/Form-DHvcFoEi.js.map +1 -0
- package/dist/FormGroup-C41n65cE.js +124 -0
- package/dist/FormGroup-C41n65cE.js.map +1 -0
- package/dist/FullScreenModal-Cb3PGgh4.js +96 -0
- package/dist/FullScreenModal-Cb3PGgh4.js.map +1 -0
- package/dist/HoverCard-WfDkLK1s.js +31 -0
- package/dist/HoverCard-WfDkLK1s.js.map +1 -0
- package/dist/InputGroup-CdTq8H7c.js +292 -0
- package/dist/InputGroup-CdTq8H7c.js.map +1 -0
- package/dist/Kbd-CxHAo1oo.js +111 -0
- package/dist/Kbd-CxHAo1oo.js.map +1 -0
- package/dist/MarkedText-Ckbft5mw.js +44 -0
- package/dist/MarkedText-Ckbft5mw.js.map +1 -0
- package/dist/MermaidDiagram-ChL3WIQT.js +399 -0
- package/dist/MermaidDiagram-ChL3WIQT.js.map +1 -0
- package/dist/Modal-wqG8nJiK.js +185 -0
- package/dist/Modal-wqG8nJiK.js.map +1 -0
- package/dist/ModalTitle-C76ke2eo.js +28 -0
- package/dist/ModalTitle-C76ke2eo.js.map +1 -0
- package/dist/MultiActionButtonGroup-BiIIubiL.js +33 -0
- package/dist/MultiActionButtonGroup-BiIIubiL.js.map +1 -0
- package/dist/Navbar-BfaPeLUL.js +325 -0
- package/dist/Navbar-BfaPeLUL.js.map +1 -0
- package/dist/OtpInput-CbbymqYs.js +93 -0
- package/dist/OtpInput-CbbymqYs.js.map +1 -0
- package/dist/PageHeader-Q3IpCnQd.js +177 -0
- package/dist/PageHeader-Q3IpCnQd.js.map +1 -0
- package/dist/PageLayout-DSVM-ASz.js +176 -0
- package/dist/PageLayout-DSVM-ASz.js.map +1 -0
- package/dist/PageToolbar-OQg3mPF-.js +153 -0
- package/dist/PageToolbar-OQg3mPF-.js.map +1 -0
- package/dist/Pagination-Cjfda8KG.js +70 -0
- package/dist/Pagination-Cjfda8KG.js.map +1 -0
- package/dist/Popconfirm-D7_vfxFd.js +167 -0
- package/dist/Popconfirm-D7_vfxFd.js.map +1 -0
- package/dist/Popover-CzeHjvrB.js +85 -0
- package/dist/Popover-CzeHjvrB.js.map +1 -0
- package/dist/RadioGroup-sIveSsNa.js +233 -0
- package/dist/RadioGroup-sIveSsNa.js.map +1 -0
- package/dist/Resizable-D3vYToZH.js +52 -0
- package/dist/Resizable-D3vYToZH.js.map +1 -0
- package/dist/Search-3UiqNZRj.js +184 -0
- package/dist/Search-3UiqNZRj.js.map +1 -0
- package/dist/SearchInput-C7dF_Ir-.js +102 -0
- package/dist/SearchInput-C7dF_Ir-.js.map +1 -0
- package/dist/SectionNav-8NoTOKO8.js +276 -0
- package/dist/SectionNav-8NoTOKO8.js.map +1 -0
- package/dist/Select-Is0VkePH.js +181 -0
- package/dist/Select-Is0VkePH.js.map +1 -0
- package/dist/Sheet-Dw9BDvjI.js +169 -0
- package/dist/Sheet-Dw9BDvjI.js.map +1 -0
- package/dist/Sidebar-Dcb4rinA.js +799 -0
- package/dist/Sidebar-Dcb4rinA.js.map +1 -0
- package/dist/Slider-BOPfMOMm.js +127 -0
- package/dist/Slider-BOPfMOMm.js.map +1 -0
- package/dist/Stepper-C8sm9ZFM.js +325 -0
- package/dist/Stepper-C8sm9ZFM.js.map +1 -0
- package/dist/Switch-CX2A0v50.js +201 -0
- package/dist/Switch-CX2A0v50.js.map +1 -0
- package/dist/Table-CvYuTuNU.js +104 -0
- package/dist/Table-CvYuTuNU.js.map +1 -0
- package/dist/Tabs-UMQuDoW8.js +74 -0
- package/dist/Tabs-UMQuDoW8.js.map +1 -0
- package/dist/TextInput-CMuN1WfY.js +110 -0
- package/dist/TextInput-CMuN1WfY.js.map +1 -0
- package/dist/ThemeProvider-QncUrfJn.js +203 -0
- package/dist/ThemeProvider-QncUrfJn.js.map +1 -0
- package/dist/TimePicker-D9zktB8A.js +98 -0
- package/dist/TimePicker-D9zktB8A.js.map +1 -0
- package/dist/Timeline-6btyJl4D.js +154 -0
- package/dist/Timeline-6btyJl4D.js.map +1 -0
- package/dist/Toast-DQSbs3oA.js +49 -0
- package/dist/Toast-DQSbs3oA.js.map +1 -0
- package/dist/ToggleGroup-Cy_10Mvu.js +47 -0
- package/dist/ToggleGroup-Cy_10Mvu.js.map +1 -0
- package/dist/Workbench-BzE-Vvd9.js +293 -0
- package/dist/Workbench-BzE-Vvd9.js.map +1 -0
- package/dist/ZoomableSvg-CZEu6sAq.js +248 -0
- package/dist/ZoomableSvg-CZEu6sAq.js.map +1 -0
- package/dist/charts.d.ts +110 -103
- package/dist/charts.js +303 -254
- package/dist/charts.js.map +1 -1
- package/dist/classNames-BzrkDnOD.js +9 -0
- package/dist/classNames-BzrkDnOD.js.map +1 -0
- package/dist/context-KxxeMHbR.js +62 -0
- package/dist/context-KxxeMHbR.js.map +1 -0
- package/dist/editors.d.ts +244 -175
- package/dist/editors.js +802 -428
- package/dist/editors.js.map +1 -1
- package/dist/escapeStringRegexp-8MxP2knR.js +6 -0
- package/dist/escapeStringRegexp-8MxP2knR.js.map +1 -0
- package/dist/icons-Cek151jC.js +640 -0
- package/dist/icons-Cek151jC.js.map +1 -0
- package/dist/icons.d.ts +2 -41
- package/dist/icons.js +2 -9
- package/dist/index-m-kQEWiY.d.ts +54 -0
- package/dist/index.d.ts +6191 -9891
- package/dist/index.js +113 -124
- package/dist/internal/blocks/AIKit.js +2 -30
- package/dist/internal/blocks/AppShell.js +2 -11
- package/dist/internal/blocks/AutoSaveTextarea.js +2 -14
- package/dist/internal/blocks/BrandEditor.js +2 -23
- package/dist/internal/blocks/ChartPanel.js +45 -9
- package/dist/internal/blocks/ChartPanel.js.map +1 -1
- package/dist/internal/blocks/ClipboardButton.js +2 -12
- package/dist/internal/blocks/ColorInput.js +2 -13
- package/dist/internal/blocks/ColorModeSwitch.js +2 -13
- package/dist/internal/blocks/Command.js +2 -15
- package/dist/internal/blocks/CopyField.js +2 -11
- package/dist/internal/blocks/DashboardHero.js +58 -8
- package/dist/internal/blocks/DashboardHero.js.map +1 -1
- package/dist/internal/blocks/DateInput.js +2 -16
- package/dist/internal/blocks/DateRangeInput.js +2 -16
- package/dist/internal/blocks/EmptyConfigurationActionCard.js +15 -9
- package/dist/internal/blocks/EmptyConfigurationActionCard.js.map +1 -1
- package/dist/internal/blocks/EmptyState.js +141 -3
- package/dist/internal/blocks/EmptyState.js.map +1 -1
- package/dist/internal/blocks/ErrorState.js +178 -4
- package/dist/internal/blocks/ErrorState.js.map +1 -1
- package/dist/internal/blocks/ExportMenu.js +40 -12
- package/dist/internal/blocks/ExportMenu.js.map +1 -1
- package/dist/internal/blocks/Form/connectors/MultiComboboxField.js +56 -0
- package/dist/internal/blocks/Form/connectors/MultiComboboxField.js.map +1 -0
- package/dist/internal/blocks/Form.js +2 -29
- package/dist/internal/blocks/FormGroup.js +2 -18
- package/dist/internal/blocks/GoogleButton.js +94 -9
- package/dist/internal/blocks/GoogleButton.js.map +1 -1
- package/dist/internal/blocks/MicrosoftButton.js +63 -9
- package/dist/internal/blocks/MicrosoftButton.js.map +1 -1
- package/dist/internal/blocks/MultiActionButtonGroup.js +2 -12
- package/dist/internal/blocks/MultiCombobox.js +192 -13
- package/dist/internal/blocks/MultiCombobox.js.map +1 -1
- package/dist/internal/blocks/NumberInput.js +43 -11
- package/dist/internal/blocks/NumberInput.js.map +1 -1
- package/dist/internal/blocks/OtpInput.js +2 -10
- package/dist/internal/blocks/PageHeader.js +2 -9
- package/dist/internal/blocks/PageLayout.js +2 -9
- package/dist/internal/blocks/PageToolbar.js +2 -13
- package/dist/internal/blocks/PasswordInput.js +96 -12
- package/dist/internal/blocks/PasswordInput.js.map +1 -1
- package/dist/internal/blocks/SearchInput.js +2 -12
- package/dist/internal/blocks/SearchInputWithNavigation.js +64 -15
- package/dist/internal/blocks/SearchInputWithNavigation.js.map +1 -1
- package/dist/internal/blocks/SectionNav.js +2 -15
- package/dist/internal/blocks/SplitButton.js +45 -13
- package/dist/internal/blocks/SplitButton.js.map +1 -1
- package/dist/internal/blocks/StatCard.js +96 -9
- package/dist/internal/blocks/StatCard.js.map +1 -1
- package/dist/internal/blocks/TextInput.js +2 -13
- package/dist/internal/blocks/Textarea.js +31 -12
- package/dist/internal/blocks/Textarea.js.map +1 -1
- package/dist/internal/blocks/TimeInput.js +76 -16
- package/dist/internal/blocks/TimeInput.js.map +1 -1
- package/dist/internal/components/Alert.js +2 -11
- package/dist/internal/components/AlertModal.js +2 -11
- package/dist/internal/components/Avatar.js +52 -8
- package/dist/internal/components/Avatar.js.map +1 -1
- package/dist/internal/components/Badge.js +2 -9
- package/dist/internal/components/BrandLogo.js +2 -11
- package/dist/internal/components/Breadcrumb.js +2 -14
- package/dist/internal/components/Button.js +2 -10
- package/dist/internal/components/ButtonGroup.js +65 -8
- package/dist/internal/components/ButtonGroup.js.map +1 -1
- package/dist/internal/components/Calendar.js +2 -9
- package/dist/internal/components/Card.js +2 -9
- package/dist/internal/components/Checkbox.js +2 -11
- package/dist/internal/components/Clipboard.js +2 -9
- package/dist/internal/components/Collapsible.js +2 -9
- package/dist/internal/components/CollapsiblePanel.js +86 -10
- package/dist/internal/components/CollapsiblePanel.js.map +1 -1
- package/dist/internal/components/Combobox.js +2 -13
- package/dist/internal/components/DatePicker.js +2 -11
- package/dist/internal/components/DateRangePicker.js +2 -17
- package/dist/internal/components/DiffView.js +2 -9
- package/dist/internal/components/DotsLoader.js +17 -4
- package/dist/internal/components/DotsLoader.js.map +1 -1
- package/dist/internal/components/DropdownMenu.js +2 -11
- package/dist/internal/components/EmptySearchContent.js +11 -3
- package/dist/internal/components/EmptySearchContent.js.map +1 -1
- package/dist/internal/components/FileUpload.js +2 -11
- package/dist/internal/components/FullScreenModal.js +2 -12
- package/dist/internal/components/HelpBlock.js +24 -3
- package/dist/internal/components/HelpBlock.js.map +1 -1
- package/dist/internal/components/HoverCard.js +2 -9
- package/dist/internal/components/InputGroup.js +2 -11
- package/dist/internal/components/Kbd.js +2 -9
- package/dist/internal/components/Label.js +38 -8
- package/dist/internal/components/Label.js.map +1 -1
- package/dist/internal/components/Link.js +21 -8
- package/dist/internal/components/Link.js.map +1 -1
- package/dist/internal/components/MarkedText.js +2 -5
- package/dist/internal/components/MergeEditor/ConflictStatus/ConflictStatusIndicator.js +19 -9
- package/dist/internal/components/MergeEditor/ConflictStatus/ConflictStatusIndicator.js.map +1 -1
- package/dist/internal/components/MergeEditor/PaneHeader.js +12 -3
- package/dist/internal/components/MergeEditor/PaneHeader.js.map +1 -1
- package/dist/internal/components/MergeEditor/constants.js +17 -3
- package/dist/internal/components/MergeEditor/constants.js.map +1 -1
- package/dist/internal/components/MergeEditor/useMergeDiff.js +2 -5
- package/dist/internal/components/Modal.js +2 -13
- package/dist/internal/components/Navbar.js +2 -14
- package/dist/internal/components/Pagination.js +2 -11
- package/dist/internal/components/PanelWithDetails.js +30 -10
- package/dist/internal/components/PanelWithDetails.js.map +1 -1
- package/dist/internal/components/Popconfirm.js +2 -12
- package/dist/internal/components/Popover.js +2 -9
- package/dist/internal/components/Progress.js +46 -8
- package/dist/internal/components/Progress.js.map +1 -1
- package/dist/internal/components/RadioGroup.js +2 -12
- package/dist/internal/components/Resizable.js +2 -9
- package/dist/internal/components/ScrollArea.js +41 -8
- package/dist/internal/components/ScrollArea.js.map +1 -1
- package/dist/internal/components/Search.js +2 -10
- package/dist/internal/components/Select.js +2 -12
- package/dist/internal/components/Separator.js +83 -8
- package/dist/internal/components/Separator.js.map +1 -1
- package/dist/internal/components/Sheet.js +2 -12
- package/dist/internal/components/Sidebar.js +2 -20
- package/dist/internal/components/Skeleton/Skeleton.js +38 -8
- package/dist/internal/components/Skeleton/Skeleton.js.map +1 -1
- package/dist/internal/components/Skeleton/SkeletonList.js +40 -9
- package/dist/internal/components/Skeleton/SkeletonList.js.map +1 -1
- package/dist/internal/components/Slider.js +2 -11
- package/dist/internal/components/SpotlightBackdrop.js +131 -8
- package/dist/internal/components/SpotlightBackdrop.js.map +1 -1
- package/dist/internal/components/Stepper.js +2 -10
- package/dist/internal/components/Switch.js +2 -10
- package/dist/internal/components/Table.js +2 -10
- package/dist/internal/components/Tabs.js +2 -12
- package/dist/internal/components/ThemeProvider.js +3 -10
- package/dist/internal/components/TimePicker.js +2 -12
- package/dist/internal/components/Timeline.js +2 -10
- package/dist/internal/components/Toast.js +3 -11
- package/dist/internal/components/Toggle.js +168 -8
- package/dist/internal/components/Toggle.js.map +1 -1
- package/dist/internal/components/ToggleGroup.js +2 -9
- package/dist/internal/components/Tooltip.js +2 -8
- package/dist/internal/components/Truncated.js +44 -8
- package/dist/internal/components/Truncated.js.map +1 -1
- package/dist/internal/components/Workbench.js +2 -11
- package/dist/internal/components/ZoomableSvg.js +2 -13
- package/dist/internal/hooks/useAutosizeInput.js +76 -3
- package/dist/internal/hooks/useAutosizeInput.js.map +1 -1
- package/dist/internal/hooks/useScrollbarPosition.js +44 -4
- package/dist/internal/hooks/useScrollbarPosition.js.map +1 -1
- package/dist/internal/hooks/useStableCallback.js +28 -3
- package/dist/internal/hooks/useStableCallback.js.map +1 -1
- package/dist/internal/utils/mergeRefs.js +19 -3
- package/dist/internal/utils/mergeRefs.js.map +1 -1
- package/dist/internal/utils.js +5 -8
- package/dist/markdown-editor.d.ts +72 -72
- package/dist/markdown-editor.js +1122 -1207
- package/dist/markdown-editor.js.map +1 -1
- package/dist/mermaid.d.ts +12 -12
- package/dist/mermaid.js +2 -18
- package/dist/rjsf.d.ts +45 -34
- package/dist/rjsf.js +1601 -1671
- package/dist/rjsf.js.map +1 -1
- package/dist/rolldown-runtime-Bdc48AWt.js +33 -0
- package/dist/styles-DSUP_-9Z.js +158 -0
- package/dist/styles-DSUP_-9Z.js.map +1 -0
- package/dist/styles.css +1 -1
- package/dist/testing.d.ts +8 -7
- package/dist/testing.js +36 -21
- package/dist/testing.js.map +1 -1
- package/dist/themeTokens-BNg98Mu9.js +85 -0
- package/dist/themeTokens-BNg98Mu9.js.map +1 -0
- package/dist/toast-CjkURw0M.js +184 -0
- package/dist/toast-CjkURw0M.js.map +1 -0
- package/dist/useColorSchemeState-CYqcUfSH.js +61 -0
- package/dist/useColorSchemeState-CYqcUfSH.js.map +1 -0
- package/dist/useControllableState-M6494mCT.js +31 -0
- package/dist/useControllableState-M6494mCT.js.map +1 -0
- package/dist/useElement-DkF6esWL.js +15 -0
- package/dist/useElement-DkF6esWL.js.map +1 -0
- package/dist/useMergeDiff-CvowEXJ1.js +465 -0
- package/dist/useMergeDiff-CvowEXJ1.js.map +1 -0
- package/dist/utils-D0c5VAyF.js +308 -0
- package/dist/utils-D0c5VAyF.js.map +1 -0
- package/package.json +11 -10
- package/dist/MermaidDiagram-ZU5KAVRT.js +0 -18
- package/dist/MermaidDiagram-ZU5KAVRT.js.map +0 -1
- package/dist/chunk-2YYJDKSP.js +0 -51
- package/dist/chunk-2YYJDKSP.js.map +0 -1
- package/dist/chunk-3P5UUCFI.js +0 -385
- package/dist/chunk-3P5UUCFI.js.map +0 -1
- package/dist/chunk-3QDFDDWZ.js +0 -99
- package/dist/chunk-3QDFDDWZ.js.map +0 -1
- package/dist/chunk-3W27OLK5.js +0 -15
- package/dist/chunk-3W27OLK5.js.map +0 -1
- package/dist/chunk-4FIZZONW.js +0 -40
- package/dist/chunk-4FIZZONW.js.map +0 -1
- package/dist/chunk-4GIAXOJG.js +0 -133
- package/dist/chunk-4GIAXOJG.js.map +0 -1
- package/dist/chunk-52NDNMK7.js +0 -99
- package/dist/chunk-52NDNMK7.js.map +0 -1
- package/dist/chunk-576G5OES.js +0 -201
- package/dist/chunk-576G5OES.js.map +0 -1
- package/dist/chunk-5AIE6SET.js +0 -659
- package/dist/chunk-5AIE6SET.js.map +0 -1
- package/dist/chunk-5FTNAZRW.js +0 -327
- package/dist/chunk-5FTNAZRW.js.map +0 -1
- package/dist/chunk-5IG2S7ZY.js +0 -70
- package/dist/chunk-5IG2S7ZY.js.map +0 -1
- package/dist/chunk-5QCXHNCW.js +0 -404
- package/dist/chunk-5QCXHNCW.js.map +0 -1
- package/dist/chunk-6DUMGC7Y.js +0 -105
- package/dist/chunk-6DUMGC7Y.js.map +0 -1
- package/dist/chunk-6J25CVST.js +0 -174
- package/dist/chunk-6J25CVST.js.map +0 -1
- package/dist/chunk-6NN35XOP.js +0 -120
- package/dist/chunk-6NN35XOP.js.map +0 -1
- package/dist/chunk-6NZBVA4T.js +0 -24
- package/dist/chunk-6NZBVA4T.js.map +0 -1
- package/dist/chunk-6W5BHRCL.js +0 -295
- package/dist/chunk-6W5BHRCL.js.map +0 -1
- package/dist/chunk-72BKRCEG.js +0 -409
- package/dist/chunk-72BKRCEG.js.map +0 -1
- package/dist/chunk-7GTI3PPI.js +0 -95
- package/dist/chunk-7GTI3PPI.js.map +0 -1
- package/dist/chunk-7P6PLZ4B.js +0 -74
- package/dist/chunk-7P6PLZ4B.js.map +0 -1
- package/dist/chunk-7WZWY5IA.js +0 -46
- package/dist/chunk-7WZWY5IA.js.map +0 -1
- package/dist/chunk-AIYO2632.js +0 -489
- package/dist/chunk-AIYO2632.js.map +0 -1
- package/dist/chunk-ANFZWPNE.js +0 -112
- package/dist/chunk-ANFZWPNE.js.map +0 -1
- package/dist/chunk-ANZTVAJU.js +0 -73
- package/dist/chunk-ANZTVAJU.js.map +0 -1
- package/dist/chunk-BD5BTJKX.js +0 -166
- package/dist/chunk-BD5BTJKX.js.map +0 -1
- package/dist/chunk-BHGIDSRJ.js +0 -140
- package/dist/chunk-BHGIDSRJ.js.map +0 -1
- package/dist/chunk-BSQWZITZ.js +0 -507
- package/dist/chunk-BSQWZITZ.js.map +0 -1
- package/dist/chunk-D3LAIK62.js +0 -23
- package/dist/chunk-D3LAIK62.js.map +0 -1
- package/dist/chunk-DODCR43C.js +0 -155
- package/dist/chunk-DODCR43C.js.map +0 -1
- package/dist/chunk-EEK5NGZF.js +0 -40
- package/dist/chunk-EEK5NGZF.js.map +0 -1
- package/dist/chunk-ENRG7TXA.js +0 -11
- package/dist/chunk-ENRG7TXA.js.map +0 -1
- package/dist/chunk-EQRMGIGY.js +0 -239
- package/dist/chunk-EQRMGIGY.js.map +0 -1
- package/dist/chunk-ERAHK5YQ.js +0 -495
- package/dist/chunk-ERAHK5YQ.js.map +0 -1
- package/dist/chunk-F3FOFY2P.js +0 -124
- package/dist/chunk-F3FOFY2P.js.map +0 -1
- package/dist/chunk-F6BTWFOC.js +0 -507
- package/dist/chunk-F6BTWFOC.js.map +0 -1
- package/dist/chunk-F6J6NNAL.js +0 -34
- package/dist/chunk-F6J6NNAL.js.map +0 -1
- package/dist/chunk-FCHJ7D5O.js +0 -59
- package/dist/chunk-FCHJ7D5O.js.map +0 -1
- package/dist/chunk-FFJTEQCC.js +0 -80
- package/dist/chunk-FFJTEQCC.js.map +0 -1
- package/dist/chunk-FUFMVW7O.js +0 -64
- package/dist/chunk-FUFMVW7O.js.map +0 -1
- package/dist/chunk-FVPGQ6UE.js +0 -25
- package/dist/chunk-FVPGQ6UE.js.map +0 -1
- package/dist/chunk-G3PMV62Z.js +0 -33
- package/dist/chunk-G3PMV62Z.js.map +0 -1
- package/dist/chunk-GACFOW3E.js +0 -51
- package/dist/chunk-GACFOW3E.js.map +0 -1
- package/dist/chunk-GDT6HQMK.js +0 -42
- package/dist/chunk-GDT6HQMK.js.map +0 -1
- package/dist/chunk-HLGU22C6.js +0 -2589
- package/dist/chunk-HLGU22C6.js.map +0 -1
- package/dist/chunk-HPMYYGP7.js +0 -134
- package/dist/chunk-HPMYYGP7.js.map +0 -1
- package/dist/chunk-I2UCOD45.js +0 -197
- package/dist/chunk-I2UCOD45.js.map +0 -1
- package/dist/chunk-IEGDZUVM.js +0 -75
- package/dist/chunk-IEGDZUVM.js.map +0 -1
- package/dist/chunk-IIS7INHF.js +0 -47
- package/dist/chunk-IIS7INHF.js.map +0 -1
- package/dist/chunk-ITELSEFU.js +0 -256
- package/dist/chunk-ITELSEFU.js.map +0 -1
- package/dist/chunk-IXAYNBOY.js +0 -407
- package/dist/chunk-IXAYNBOY.js.map +0 -1
- package/dist/chunk-JUW2ETEI.js +0 -191
- package/dist/chunk-JUW2ETEI.js.map +0 -1
- package/dist/chunk-K65C7CVE.js +0 -127
- package/dist/chunk-K65C7CVE.js.map +0 -1
- package/dist/chunk-KDI64MCY.js +0 -189
- package/dist/chunk-KDI64MCY.js.map +0 -1
- package/dist/chunk-KN4ASMH5.js +0 -160
- package/dist/chunk-KN4ASMH5.js.map +0 -1
- package/dist/chunk-KQW7QNTU.js +0 -1549
- package/dist/chunk-KQW7QNTU.js.map +0 -1
- package/dist/chunk-KR7NXXHC.js +0 -66
- package/dist/chunk-KR7NXXHC.js.map +0 -1
- package/dist/chunk-KRZKIVMA.js +0 -142
- package/dist/chunk-KRZKIVMA.js.map +0 -1
- package/dist/chunk-KTTLLKGQ.js +0 -185
- package/dist/chunk-KTTLLKGQ.js.map +0 -1
- package/dist/chunk-KWKSHPDP.js +0 -234
- package/dist/chunk-KWKSHPDP.js.map +0 -1
- package/dist/chunk-KZVC7OYG.js +0 -57
- package/dist/chunk-KZVC7OYG.js.map +0 -1
- package/dist/chunk-L5DHUN2V.js +0 -204
- package/dist/chunk-L5DHUN2V.js.map +0 -1
- package/dist/chunk-LCTGEH57.js +0 -1376
- package/dist/chunk-LCTGEH57.js.map +0 -1
- package/dist/chunk-LXLIQ2D6.js +0 -12
- package/dist/chunk-LXLIQ2D6.js.map +0 -1
- package/dist/chunk-M4CTURKX.js +0 -84
- package/dist/chunk-M4CTURKX.js.map +0 -1
- package/dist/chunk-M6LTUPVP.js +0 -301
- package/dist/chunk-M6LTUPVP.js.map +0 -1
- package/dist/chunk-MA6RRHDT.js +0 -291
- package/dist/chunk-MA6RRHDT.js.map +0 -1
- package/dist/chunk-MODE4QIA.js +0 -6
- package/dist/chunk-MODE4QIA.js.map +0 -1
- package/dist/chunk-MVILMVGG.js +0 -118
- package/dist/chunk-MVILMVGG.js.map +0 -1
- package/dist/chunk-MWS4VCLV.js +0 -17
- package/dist/chunk-MWS4VCLV.js.map +0 -1
- package/dist/chunk-NEUX74SO.js +0 -315
- package/dist/chunk-NEUX74SO.js.map +0 -1
- package/dist/chunk-NFHKYBRD.js +0 -156
- package/dist/chunk-NFHKYBRD.js.map +0 -1
- package/dist/chunk-NHJNNXD3.js +0 -89
- package/dist/chunk-NHJNNXD3.js.map +0 -1
- package/dist/chunk-O2BF3HZL.js +0 -33
- package/dist/chunk-O2BF3HZL.js.map +0 -1
- package/dist/chunk-OANXCZYD.js +0 -212
- package/dist/chunk-OANXCZYD.js.map +0 -1
- package/dist/chunk-ODJF7YIP.js +0 -230
- package/dist/chunk-ODJF7YIP.js.map +0 -1
- package/dist/chunk-ON4BJTHI.js +0 -101
- package/dist/chunk-ON4BJTHI.js.map +0 -1
- package/dist/chunk-OTL5WXIJ.js +0 -16
- package/dist/chunk-OTL5WXIJ.js.map +0 -1
- package/dist/chunk-PACNBKJV.js +0 -47
- package/dist/chunk-PACNBKJV.js.map +0 -1
- package/dist/chunk-PROCA7K7.js +0 -23
- package/dist/chunk-PROCA7K7.js.map +0 -1
- package/dist/chunk-QGMIPA67.js +0 -85
- package/dist/chunk-QGMIPA67.js.map +0 -1
- package/dist/chunk-QQA37LFB.js +0 -190
- package/dist/chunk-QQA37LFB.js.map +0 -1
- package/dist/chunk-QZAWRSEB.js +0 -61
- package/dist/chunk-QZAWRSEB.js.map +0 -1
- package/dist/chunk-R74KGWNS.js +0 -699
- package/dist/chunk-R74KGWNS.js.map +0 -1
- package/dist/chunk-RFDLHMKL.js +0 -110
- package/dist/chunk-RFDLHMKL.js.map +0 -1
- package/dist/chunk-RL64HN7S.js +0 -40
- package/dist/chunk-RL64HN7S.js.map +0 -1
- package/dist/chunk-RMRQKPL7.js +0 -115
- package/dist/chunk-RMRQKPL7.js.map +0 -1
- package/dist/chunk-RQVK4IYC.js +0 -606
- package/dist/chunk-RQVK4IYC.js.map +0 -1
- package/dist/chunk-RTW56PWZ.js +0 -59
- package/dist/chunk-RTW56PWZ.js.map +0 -1
- package/dist/chunk-RUTPQNLR.js +0 -266
- package/dist/chunk-RUTPQNLR.js.map +0 -1
- package/dist/chunk-S6TAF63G.js +0 -25
- package/dist/chunk-S6TAF63G.js.map +0 -1
- package/dist/chunk-SBGAUGXY.js +0 -224
- package/dist/chunk-SBGAUGXY.js.map +0 -1
- package/dist/chunk-SC275NHZ.js +0 -407
- package/dist/chunk-SC275NHZ.js.map +0 -1
- package/dist/chunk-SCQPU4UE.js +0 -97
- package/dist/chunk-SCQPU4UE.js.map +0 -1
- package/dist/chunk-SFFF2WQP.js +0 -8
- package/dist/chunk-SFFF2WQP.js.map +0 -1
- package/dist/chunk-SJYMHZKA.js +0 -36
- package/dist/chunk-SJYMHZKA.js.map +0 -1
- package/dist/chunk-SLCCUJVN.js +0 -125
- package/dist/chunk-SLCCUJVN.js.map +0 -1
- package/dist/chunk-SVBSNSD4.js +0 -259
- package/dist/chunk-SVBSNSD4.js.map +0 -1
- package/dist/chunk-SVPLTL35.js +0 -62
- package/dist/chunk-SVPLTL35.js.map +0 -1
- package/dist/chunk-SWQFYNYG.js +0 -338
- package/dist/chunk-SWQFYNYG.js.map +0 -1
- package/dist/chunk-THHB4EWS.js +0 -72
- package/dist/chunk-THHB4EWS.js.map +0 -1
- package/dist/chunk-TUCDD33E.js +0 -246
- package/dist/chunk-TUCDD33E.js.map +0 -1
- package/dist/chunk-TV4WAP2R.js +0 -14
- package/dist/chunk-TV4WAP2R.js.map +0 -1
- package/dist/chunk-U3A6YBTZ.js +0 -134
- package/dist/chunk-U3A6YBTZ.js.map +0 -1
- package/dist/chunk-UGT6DKWM.js +0 -95
- package/dist/chunk-VSERHUWD.js +0 -212
- package/dist/chunk-VSERHUWD.js.map +0 -1
- package/dist/chunk-VYG7BDXC.js +0 -49
- package/dist/chunk-VYG7BDXC.js.map +0 -1
- package/dist/chunk-WETKNYZX.js +0 -52
- package/dist/chunk-WETKNYZX.js.map +0 -1
- package/dist/chunk-WGG4AML3.js +0 -216
- package/dist/chunk-WGG4AML3.js.map +0 -1
- package/dist/chunk-WKAUEL6I.js +0 -30
- package/dist/chunk-WKAUEL6I.js.map +0 -1
- package/dist/chunk-WPOLA5CG.js +0 -81
- package/dist/chunk-WPOLA5CG.js.map +0 -1
- package/dist/chunk-WPVETCGJ.js +0 -254
- package/dist/chunk-WPVETCGJ.js.map +0 -1
- package/dist/chunk-WTSM3A7E.js +0 -13
- package/dist/chunk-WTSM3A7E.js.map +0 -1
- package/dist/chunk-WU3F2K3T.js +0 -148
- package/dist/chunk-WU3F2K3T.js.map +0 -1
- package/dist/chunk-WZZK2DTZ.js +0 -39
- package/dist/chunk-WZZK2DTZ.js.map +0 -1
- package/dist/chunk-X4IHLKRD.js +0 -42
- package/dist/chunk-X4IHLKRD.js.map +0 -1
- package/dist/chunk-XAHEXZJC.js +0 -80
- package/dist/chunk-XAHEXZJC.js.map +0 -1
- package/dist/chunk-XCYGJDUX.js +0 -31
- package/dist/chunk-XCYGJDUX.js.map +0 -1
- package/dist/chunk-Y4W3JORC.js +0 -104
- package/dist/chunk-Y4W3JORC.js.map +0 -1
- package/dist/chunk-YFZJ3ZLG.js +0 -1297
- package/dist/chunk-YFZJ3ZLG.js.map +0 -1
- package/dist/chunk-YI3WLXEN.js +0 -4387
- package/dist/chunk-YI3WLXEN.js.map +0 -1
- package/dist/chunk-ZBKFSPD3.js +0 -29
- package/dist/chunk-ZBKFSPD3.js.map +0 -1
- package/dist/chunk-ZOERRQ6A.js +0 -79
- package/dist/chunk-ZOERRQ6A.js.map +0 -1
- package/dist/chunk-ZSTGUKHU.js +0 -10
- package/dist/chunk-ZSTGUKHU.js.map +0 -1
- package/dist/chunk-ZUEHDL27.js +0 -65
- package/dist/chunk-ZUEHDL27.js.map +0 -1
- package/dist/constants-D3gaMY-W.d.ts +0 -39
- package/dist/icons.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/internal/blocks/AIKit.js.map +0 -1
- package/dist/internal/blocks/AppShell.js.map +0 -1
- package/dist/internal/blocks/AutoSaveTextarea.js.map +0 -1
- package/dist/internal/blocks/BrandEditor.js.map +0 -1
- package/dist/internal/blocks/ClipboardButton.js.map +0 -1
- package/dist/internal/blocks/ColorInput.js.map +0 -1
- package/dist/internal/blocks/ColorModeSwitch.js.map +0 -1
- package/dist/internal/blocks/Command.js.map +0 -1
- package/dist/internal/blocks/CopyField.js.map +0 -1
- package/dist/internal/blocks/DateInput.js.map +0 -1
- package/dist/internal/blocks/DateRangeInput.js.map +0 -1
- package/dist/internal/blocks/Form.js.map +0 -1
- package/dist/internal/blocks/FormGroup.js.map +0 -1
- package/dist/internal/blocks/MultiActionButtonGroup.js.map +0 -1
- package/dist/internal/blocks/OtpInput.js.map +0 -1
- package/dist/internal/blocks/PageHeader.js.map +0 -1
- package/dist/internal/blocks/PageLayout.js.map +0 -1
- package/dist/internal/blocks/PageToolbar.js.map +0 -1
- package/dist/internal/blocks/SearchInput.js.map +0 -1
- package/dist/internal/blocks/SectionNav.js.map +0 -1
- package/dist/internal/blocks/TextInput.js.map +0 -1
- package/dist/internal/components/Alert.js.map +0 -1
- package/dist/internal/components/AlertModal.js.map +0 -1
- package/dist/internal/components/Badge.js.map +0 -1
- package/dist/internal/components/BrandLogo.js.map +0 -1
- package/dist/internal/components/Breadcrumb.js.map +0 -1
- package/dist/internal/components/Button.js.map +0 -1
- package/dist/internal/components/Calendar.js.map +0 -1
- package/dist/internal/components/Card.js.map +0 -1
- package/dist/internal/components/Checkbox.js.map +0 -1
- package/dist/internal/components/Clipboard.js.map +0 -1
- package/dist/internal/components/Collapsible.js.map +0 -1
- package/dist/internal/components/Combobox.js.map +0 -1
- package/dist/internal/components/DatePicker.js.map +0 -1
- package/dist/internal/components/DateRangePicker.js.map +0 -1
- package/dist/internal/components/DiffView.js.map +0 -1
- package/dist/internal/components/DropdownMenu.js.map +0 -1
- package/dist/internal/components/FileUpload.js.map +0 -1
- package/dist/internal/components/FullScreenModal.js.map +0 -1
- package/dist/internal/components/HoverCard.js.map +0 -1
- package/dist/internal/components/InputGroup.js.map +0 -1
- package/dist/internal/components/Kbd.js.map +0 -1
- package/dist/internal/components/MarkedText.js.map +0 -1
- package/dist/internal/components/MergeEditor/useMergeDiff.js.map +0 -1
- package/dist/internal/components/Modal.js.map +0 -1
- package/dist/internal/components/Navbar.js.map +0 -1
- package/dist/internal/components/Pagination.js.map +0 -1
- package/dist/internal/components/Popconfirm.js.map +0 -1
- package/dist/internal/components/Popover.js.map +0 -1
- package/dist/internal/components/RadioGroup.js.map +0 -1
- package/dist/internal/components/Resizable.js.map +0 -1
- package/dist/internal/components/Search.js.map +0 -1
- package/dist/internal/components/Select.js.map +0 -1
- package/dist/internal/components/Sheet.js.map +0 -1
- package/dist/internal/components/Sidebar.js.map +0 -1
- package/dist/internal/components/Slider.js.map +0 -1
- package/dist/internal/components/Stepper.js.map +0 -1
- package/dist/internal/components/Switch.js.map +0 -1
- package/dist/internal/components/Table.js.map +0 -1
- package/dist/internal/components/Tabs.js.map +0 -1
- package/dist/internal/components/ThemeProvider.js.map +0 -1
- package/dist/internal/components/TimePicker.js.map +0 -1
- package/dist/internal/components/Timeline.js.map +0 -1
- package/dist/internal/components/Toast.js.map +0 -1
- package/dist/internal/components/ToggleGroup.js.map +0 -1
- package/dist/internal/components/Tooltip.js.map +0 -1
- package/dist/internal/components/Workbench.js.map +0 -1
- package/dist/internal/components/ZoomableSvg.js.map +0 -1
- package/dist/internal/utils.js.map +0 -1
- package/dist/mermaid.js.map +0 -1
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { cn } from "./classNames-BzrkDnOD.js";
|
|
2
|
+
import { useArgoDesign } from "./context-KxxeMHbR.js";
|
|
3
|
+
import { Check, Circle } from "./icons-Cek151jC.js";
|
|
4
|
+
import { ScrollArea } from "./internal/components/ScrollArea.js";
|
|
5
|
+
import { TextInput } from "./TextInput-CMuN1WfY.js";
|
|
6
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
7
|
+
import { Command, CommandInput, defaultFilter, useCommandState } from "cmdk";
|
|
8
|
+
//#region src/blocks/Command/CommandContent.tsx
|
|
9
|
+
const CommandContent = ({ className, ...rest }) => /* @__PURE__ */ jsx("div", {
|
|
10
|
+
...rest,
|
|
11
|
+
className: cn("tw:flex", "tw:flex-col", "tw:p-2", "tw:group-data-[variant=argo]/command:p-4", "tw:gap-2", className)
|
|
12
|
+
});
|
|
13
|
+
//#endregion
|
|
14
|
+
//#region src/blocks/Command/CommandEmpty.tsx
|
|
15
|
+
const CommandEmpty = ({ ...props }) => /* @__PURE__ */ jsx(Command.Empty, { ...props });
|
|
16
|
+
//#endregion
|
|
17
|
+
//#region src/blocks/Command/CommandGroup.tsx
|
|
18
|
+
const CommandGroup = ({ className, ...props }) => /* @__PURE__ */ jsx(Command.Group, {
|
|
19
|
+
className: cn("tw:[&_[cmdk-group-heading]]:font-semibold", "tw:[&_[cmdk-group-heading]]:font-sans", "tw:[&_[cmdk-group-heading]]:px-4", "tw:[&_[cmdk-group-heading]]:py-0.5", "tw:[&_[cmdk-group-heading]]:uppercase", "tw:[&_[cmdk-group-heading]]:text-[11px]", "tw:[&_[cmdk-group-heading]]:text-muted-foreground", "tw:[&_[cmdk-group-heading]]:tracking-[1px]", "tw:[&_[cmdk-group-heading]]:border-b", "tw:[&_[cmdk-group-heading]]:border-border", "tw:[&_[cmdk-group-heading]]:my-2", className),
|
|
20
|
+
...props
|
|
21
|
+
});
|
|
22
|
+
//#endregion
|
|
23
|
+
//#region src/blocks/Command/CommandInput.tsx
|
|
24
|
+
const CommandInput$1 = ({ ref, className, ...props }) => /* @__PURE__ */ jsx(CommandInput, {
|
|
25
|
+
ref,
|
|
26
|
+
asChild: true,
|
|
27
|
+
children: /* @__PURE__ */ jsx(TextInput, {
|
|
28
|
+
...props,
|
|
29
|
+
className: cn("tw:group-data-[variant=argo]/command:!bg-transparent", "tw:group-data-[variant=argo]/command:!border-transparent", "tw:group-data-[variant=argo]/command:!rounded-none", "tw:group-data-[variant=argo]/command:max-h-12", "tw:group-data-[variant=argo]/command:h-12", className)
|
|
30
|
+
})
|
|
31
|
+
});
|
|
32
|
+
//#endregion
|
|
33
|
+
//#region src/blocks/Command/CommandItem/CheckIndicator.tsx
|
|
34
|
+
const CheckIndicator = ({ variant = "default" }) => {
|
|
35
|
+
if (variant === "default") return null;
|
|
36
|
+
return /* @__PURE__ */ jsx("span", {
|
|
37
|
+
"data-variant": variant,
|
|
38
|
+
className: cn("tw:group/check-indicator", "tw:pointer-events-none", "tw:size-4", "tw:flex", "tw:items-center", "tw:justify-center", "tw:border", "tw:border-solid", "tw:rounded", "tw:group-data-[variant=default]/command:border-neutral-200", "tw:group-data-[variant=argo]/command:border-input", "tw:data-[variant=radio]:rounded-full", "tw:data-[variant=checkbox]:rounded", "tw:data-[variant=checkbox]:group-data-[checked=true]/command-item:border-primary", "tw:data-[variant=checkbox]:group-data-[checked=true]/command-item:bg-primary", "tw:shrink-0"),
|
|
39
|
+
children: variant === "checkbox" ? /* @__PURE__ */ jsx(Check, { className: cn("tw:hidden", "tw:size-3", "tw:stroke-[4px]", "tw:group-data-[checked=true]/command-item:block", "tw:group-data-[variant=checkbox]/check-indicator:text-primary-foreground") }) : /* @__PURE__ */ jsx(Circle, { className: cn("tw:hidden", "tw:size-3", "tw:fill-current", "tw:group-data-[checked=true]/command-item:block", "tw:group-data-[variant=radio]/check-indicator:text-primary") })
|
|
40
|
+
});
|
|
41
|
+
};
|
|
42
|
+
//#endregion
|
|
43
|
+
//#region src/blocks/Command/CommandItem/CommandItem.tsx
|
|
44
|
+
const CommandItem = ({ className, icon, children, checked = false, variant = "default", actions, ...props }) => /* @__PURE__ */ jsxs("div", {
|
|
45
|
+
className: "tw:group tw:flex tw:items-center tw:justify-center",
|
|
46
|
+
children: [/* @__PURE__ */ jsxs(Command.Item, {
|
|
47
|
+
...props,
|
|
48
|
+
"data-checked": checked,
|
|
49
|
+
"data-variant": variant,
|
|
50
|
+
className: cn("tw:group/command-item", "tw:peer/command-item", "tw:relative", "tw:flex", "tw:items-center", "tw:gap-2", "tw:flex-1", "tw:p-2", "tw:font-sans", "tw:text-sm", "tw:leading-6", "tw:cursor-pointer", "tw:transition-colors", "tw:select-none", "tw:outline-hidden", "tw:group-data-[variant=argo]/command:rounded-md", "tw:group-data-[variant=argo]/command:data-[selected=true]:bg-accent", "tw:group-data-[variant=argo]/command:data-[checked=true]:bg-accent", "tw:group-data-[variant=default]/command:rounded", "tw:group-data-[variant=default]/command:data-[selected=true]:bg-neutral-100", "tw:group-data-[variant=default]/command:data-[checked=true]:bg-neutral-100", "tw:aria-disabled:opacity-50", "tw:aria-disabled:cursor-not-allowed", "tw:aria-disabled:hover:bg-transparent", "tw:data-[checked=true]:aria-disabled:opacity-100", "tw:data-[checked=true]:aria-disabled:cursor-default", className),
|
|
51
|
+
children: [
|
|
52
|
+
/* @__PURE__ */ jsx(CheckIndicator, { variant }),
|
|
53
|
+
icon && /* @__PURE__ */ jsx("span", {
|
|
54
|
+
className: "tw:inline-flex tw:size-4 tw:shrink-0 tw:items-center tw:justify-center tw:text-muted-foreground tw:[&_svg:not([class*='tw:size-'])]:size-4",
|
|
55
|
+
children: icon
|
|
56
|
+
}),
|
|
57
|
+
children
|
|
58
|
+
]
|
|
59
|
+
}), actions && /* @__PURE__ */ jsx("span", {
|
|
60
|
+
"data-slot": "command-item-actions",
|
|
61
|
+
className: cn("tw:hidden", "tw:mx-2", "tw:group-hover:flex", "tw:peer-hover/command-item:flex", "tw:peer-data-[selected=true]/command-item:flex"),
|
|
62
|
+
children: actions
|
|
63
|
+
})]
|
|
64
|
+
});
|
|
65
|
+
//#endregion
|
|
66
|
+
//#region src/blocks/Command/CommandList.tsx
|
|
67
|
+
const CommandList = ({ ref, className, children, viewPortClassName, ...props }) => /* @__PURE__ */ jsx(ScrollArea, {
|
|
68
|
+
ref,
|
|
69
|
+
className: cn("tw:group-data-[variant=argo]/command:px-4", "tw:group-data-[variant=argo]/command:pb-4", className),
|
|
70
|
+
viewPortClassName: cn("tw:[&_[cmdk-list-sizer]]:flex", "tw:[&_[cmdk-list-sizer]]:flex-col", viewPortClassName),
|
|
71
|
+
children: /* @__PURE__ */ jsx(Command.List, {
|
|
72
|
+
...props,
|
|
73
|
+
children
|
|
74
|
+
})
|
|
75
|
+
});
|
|
76
|
+
//#endregion
|
|
77
|
+
//#region src/blocks/Command/CommandSeparator.tsx
|
|
78
|
+
const CommandSeparator = ({ className, ...props }) => /* @__PURE__ */ jsx(Command.Separator, {
|
|
79
|
+
className: cn("tw:h-px", "tw:bg-border", "tw:my-2", className),
|
|
80
|
+
...props
|
|
81
|
+
});
|
|
82
|
+
//#endregion
|
|
83
|
+
//#region src/blocks/Command/Command.tsx
|
|
84
|
+
const Command$1 = ({ className, ...rest }) => {
|
|
85
|
+
const effectiveVariant = useArgoDesign() ? "argo" : "default";
|
|
86
|
+
return /* @__PURE__ */ jsx(Command, {
|
|
87
|
+
"data-variant": effectiveVariant,
|
|
88
|
+
className: cn("tw:group/command", "tailwindcss-preflight", className),
|
|
89
|
+
...rest
|
|
90
|
+
});
|
|
91
|
+
};
|
|
92
|
+
Command$1.Content = CommandContent;
|
|
93
|
+
Command$1.Separator = CommandSeparator;
|
|
94
|
+
Command$1.List = CommandList;
|
|
95
|
+
Command$1.Group = CommandGroup;
|
|
96
|
+
Command$1.Empty = CommandEmpty;
|
|
97
|
+
Command$1.Input = CommandInput$1;
|
|
98
|
+
Command$1.Item = CommandItem;
|
|
99
|
+
//#endregion
|
|
100
|
+
export { Command$1 as Command, CommandGroup, CommandInput$1 as CommandInput, CommandItem, CommandList, defaultFilter, useCommandState };
|
|
101
|
+
|
|
102
|
+
//# sourceMappingURL=Command-C0aZfVTq.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Command-C0aZfVTq.js","names":["CommandPrimitive","CommandPrimitive","CommandInput","CmdInput","CommandPrimitive","CommandPrimitive","CommandPrimitive","Command","CommandPrimitive","CommandInput"],"sources":["../src/blocks/Command/CommandContent.tsx","../src/blocks/Command/CommandEmpty.tsx","../src/blocks/Command/CommandGroup.tsx","../src/blocks/Command/CommandInput.tsx","../src/blocks/Command/CommandItem/CheckIndicator.tsx","../src/blocks/Command/CommandItem/CommandItem.tsx","../src/blocks/Command/CommandList.tsx","../src/blocks/Command/CommandSeparator.tsx","../src/blocks/Command/Command.tsx"],"sourcesContent":["import type { ComponentProps } from 'react';\n\nimport { cn } from '../../utils';\n\ntype Props = ComponentProps<'div'>;\n\nexport const CommandContent = ({ className, ...rest }: Props) => (\n <div\n {...rest}\n className={cn(\n 'tw:flex',\n 'tw:flex-col',\n 'tw:p-2',\n 'tw:group-data-[variant=argo]/command:p-4',\n 'tw:gap-2',\n className,\n )}\n />\n);\n","import type { ComponentProps } from 'react';\nimport { Command as CommandPrimitive } from 'cmdk';\n\ntype Props = ComponentProps<typeof CommandPrimitive.Empty>;\n\nexport const CommandEmpty = ({ ...props }: Props) => <CommandPrimitive.Empty {...props} />;\n","import type { ComponentProps } from 'react';\nimport { Command as CommandPrimitive } from 'cmdk';\n\nimport { cn } from '../../utils';\n\ntype Props = ComponentProps<typeof CommandPrimitive.Group>;\n\nexport const CommandGroup = ({ className, ...props }: Props) => (\n <CommandPrimitive.Group\n className={cn(\n 'tw:[&_[cmdk-group-heading]]:font-semibold',\n 'tw:[&_[cmdk-group-heading]]:font-sans',\n 'tw:[&_[cmdk-group-heading]]:px-4',\n 'tw:[&_[cmdk-group-heading]]:py-0.5',\n 'tw:[&_[cmdk-group-heading]]:uppercase',\n 'tw:[&_[cmdk-group-heading]]:text-[11px]',\n 'tw:[&_[cmdk-group-heading]]:text-muted-foreground',\n 'tw:[&_[cmdk-group-heading]]:tracking-[1px]',\n 'tw:[&_[cmdk-group-heading]]:border-b',\n 'tw:[&_[cmdk-group-heading]]:border-border',\n 'tw:[&_[cmdk-group-heading]]:my-2',\n className,\n )}\n {...props}\n />\n);\n","import type { ComponentProps } from 'react';\nimport { CommandInput as CmdInput } from 'cmdk';\n\nimport { cn } from '../../utils';\nimport { TextInput } from '../TextInput';\n\ntype Props = ComponentProps<typeof TextInput>;\n\nexport const CommandInput = ({ ref, className, ...props }: Props) => (\n <CmdInput ref={ref} asChild>\n <TextInput\n {...props}\n className={cn(\n 'tw:group-data-[variant=argo]/command:!bg-transparent',\n 'tw:group-data-[variant=argo]/command:!border-transparent',\n 'tw:group-data-[variant=argo]/command:!rounded-none',\n 'tw:group-data-[variant=argo]/command:max-h-12',\n 'tw:group-data-[variant=argo]/command:h-12',\n className,\n )}\n />\n </CmdInput>\n);\n","import { Check, Circle } from '../../../icons';\nimport { cn } from '../../../utils';\n\ntype Props = {\n variant?: 'checkbox' | 'radio' | 'default';\n};\n\nexport const CheckIndicator = ({ variant = 'default' }: Props) => {\n if (variant === 'default') return null;\n\n return (\n <span\n data-variant={variant}\n className={cn(\n 'tw:group/check-indicator',\n // positioning\n 'tw:pointer-events-none',\n\n // sizing\n 'tw:size-4',\n 'tw:flex',\n 'tw:items-center',\n 'tw:justify-center',\n\n // border\n 'tw:border',\n 'tw:border-solid',\n 'tw:rounded',\n 'tw:group-data-[variant=default]/command:border-neutral-200',\n 'tw:group-data-[variant=argo]/command:border-input',\n\n 'tw:data-[variant=radio]:rounded-full',\n\n 'tw:data-[variant=checkbox]:rounded',\n 'tw:data-[variant=checkbox]:group-data-[checked=true]/command-item:border-primary',\n 'tw:data-[variant=checkbox]:group-data-[checked=true]/command-item:bg-primary',\n 'tw:shrink-0',\n )}\n >\n {variant === 'checkbox' ? (\n <Check\n className={cn(\n 'tw:hidden',\n // Lucide SVGs default to 24×24; constrain to the 16px indicator slot.\n 'tw:size-3',\n 'tw:stroke-[4px]',\n 'tw:group-data-[checked=true]/command-item:block',\n 'tw:group-data-[variant=checkbox]/check-indicator:text-primary-foreground',\n )}\n />\n ) : (\n <Circle\n className={cn(\n 'tw:hidden',\n // Lucide Circle is stroke-only — force fill to match the stroke so\n // the indicator reads as a solid dot.\n 'tw:size-3',\n 'tw:fill-current',\n 'tw:group-data-[checked=true]/command-item:block',\n 'tw:group-data-[variant=radio]/check-indicator:text-primary',\n )}\n />\n )}\n </span>\n );\n};\n","import type { ComponentProps, ReactNode } from 'react';\nimport { Command as CommandPrimitive } from 'cmdk';\n\nimport { cn } from '../../../utils';\n\nimport { CheckIndicator } from './CheckIndicator';\n\ntype Props = ComponentProps<typeof CommandPrimitive.Item> & {\n icon?: ReactNode;\n checked?: boolean;\n variant?: ComponentProps<typeof CheckIndicator>['variant'];\n actions?: ReactNode;\n};\n\nexport const CommandItem = ({\n className,\n icon,\n children,\n checked = false,\n variant = 'default',\n actions,\n ...props\n}: Props) => (\n <div className=\"tw:group tw:flex tw:items-center tw:justify-center\">\n <CommandPrimitive.Item\n {...props}\n data-checked={checked}\n data-variant={variant}\n className={cn(\n 'tw:group/command-item',\n 'tw:peer/command-item',\n\n // positioning\n 'tw:relative',\n 'tw:flex',\n 'tw:items-center',\n 'tw:gap-2',\n 'tw:flex-1',\n 'tw:p-2',\n\n // typography\n 'tw:font-sans',\n 'tw:text-sm',\n 'tw:leading-6',\n 'tw:cursor-pointer',\n 'tw:transition-colors',\n 'tw:select-none',\n 'tw:outline-hidden',\n\n 'tw:group-data-[variant=argo]/command:rounded-md',\n 'tw:group-data-[variant=argo]/command:data-[selected=true]:bg-accent',\n 'tw:group-data-[variant=argo]/command:data-[checked=true]:bg-accent',\n\n 'tw:group-data-[variant=default]/command:rounded',\n 'tw:group-data-[variant=default]/command:data-[selected=true]:bg-neutral-100',\n 'tw:group-data-[variant=default]/command:data-[checked=true]:bg-neutral-100',\n\n // disabled\n 'tw:aria-disabled:opacity-50',\n\n 'tw:aria-disabled:cursor-not-allowed',\n 'tw:aria-disabled:hover:bg-transparent',\n\n // reset styles for checked and disabled\n 'tw:data-[checked=true]:aria-disabled:opacity-100',\n 'tw:data-[checked=true]:aria-disabled:cursor-default',\n className,\n )}\n >\n <CheckIndicator variant={variant} />\n {icon && (\n <span className=\"tw:inline-flex tw:size-4 tw:shrink-0 tw:items-center tw:justify-center tw:text-muted-foreground tw:[&_svg:not([class*='tw:size-'])]:size-4\">\n {icon}\n </span>\n )}\n {children}\n </CommandPrimitive.Item>\n\n {actions && (\n <span\n data-slot=\"command-item-actions\"\n className={cn(\n 'tw:hidden',\n 'tw:mx-2',\n 'tw:group-hover:flex',\n 'tw:peer-hover/command-item:flex',\n 'tw:peer-data-[selected=true]/command-item:flex',\n )}\n >\n {actions}\n </span>\n )}\n </div>\n);\n","import type { ComponentProps } from 'react';\nimport { Command as CommandPrimitive } from 'cmdk';\n\nimport { ScrollArea } from '../../components/ScrollArea';\nimport { cn } from '../../utils';\n\ntype Props = ComponentProps<typeof CommandPrimitive.List> &\n Pick<ComponentProps<typeof ScrollArea>, 'viewPortClassName'>;\n\nexport const CommandList = ({ ref, className, children, viewPortClassName, ...props }: Props) => (\n <ScrollArea\n ref={ref}\n className={cn(\n 'tw:group-data-[variant=argo]/command:px-4',\n 'tw:group-data-[variant=argo]/command:pb-4',\n className,\n )}\n viewPortClassName={cn(\n 'tw:[&_[cmdk-list-sizer]]:flex',\n 'tw:[&_[cmdk-list-sizer]]:flex-col',\n viewPortClassName,\n )}\n >\n <CommandPrimitive.List {...props}>{children}</CommandPrimitive.List>\n </ScrollArea>\n);\n","import type { ComponentProps } from 'react';\nimport { Command as CommandPrimitive } from 'cmdk';\n\nimport { cn } from '../../utils';\n\ntype Props = ComponentProps<typeof CommandPrimitive.Separator>;\n\nexport const CommandSeparator = ({ className, ...props }: Props) => (\n <CommandPrimitive.Separator\n className={cn('tw:h-px', 'tw:bg-border', 'tw:my-2', className)}\n {...props}\n />\n);\n","import type { ComponentProps } from 'react';\nimport { Command as CommandPrimitive } from 'cmdk';\n\nimport { useArgoDesign } from '../../components/ThemeProvider/context';\nimport { cn } from '../../utils';\n\nimport { CommandContent } from './CommandContent';\nimport { CommandEmpty } from './CommandEmpty';\nimport { CommandGroup } from './CommandGroup';\nimport { CommandInput } from './CommandInput';\nimport { CommandItem } from './CommandItem';\nimport { CommandList } from './CommandList';\nimport { CommandSeparator } from './CommandSeparator';\n\ntype Variant = 'default' | 'argo';\n\ntype Props = ComponentProps<typeof CommandPrimitive>;\n\nexport const Command = ({ className, ...rest }: Props) => {\n const effectiveVariant: Variant = useArgoDesign() ? 'argo' : 'default';\n return (\n <CommandPrimitive\n data-variant={effectiveVariant}\n className={cn('tw:group/command', 'tailwindcss-preflight', className)}\n {...rest}\n />\n );\n};\n\nCommand.Content = CommandContent;\n\nCommand.Separator = CommandSeparator;\nCommand.List = CommandList;\nCommand.Group = CommandGroup;\nCommand.Empty = CommandEmpty;\nCommand.Input = CommandInput;\n\n// items\nCommand.Item = CommandItem;\n"],"mappings":"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"}
|
|
@@ -0,0 +1,322 @@
|
|
|
1
|
+
import { cn } from "./classNames-BzrkDnOD.js";
|
|
2
|
+
import { Tooltip, copyToClipboard } from "./utils-D0c5VAyF.js";
|
|
3
|
+
import { Check, Copy, Eye, EyeOff } from "./icons-Cek151jC.js";
|
|
4
|
+
import { Label } from "./internal/components/Label.js";
|
|
5
|
+
import { createContext, use, useCallback, useEffect, useId, useMemo, useRef, useState } from "react";
|
|
6
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
7
|
+
//#region src/blocks/CopyField/CopyContext.tsx
|
|
8
|
+
const CopyContext = createContext(null);
|
|
9
|
+
const useCopyContext = () => {
|
|
10
|
+
const ctx = use(CopyContext);
|
|
11
|
+
if (!ctx) throw new Error("CopyField.* components must be used within a CopyField.Root");
|
|
12
|
+
return ctx;
|
|
13
|
+
};
|
|
14
|
+
//#endregion
|
|
15
|
+
//#region src/blocks/CopyField/CopyBox.tsx
|
|
16
|
+
const LINE_HEIGHT_REM = 1.25;
|
|
17
|
+
const VERTICAL_PADDING_REM = 1.25;
|
|
18
|
+
const COPY_HINT_DELAY_MS = 2e3;
|
|
19
|
+
/**
|
|
20
|
+
* The clickable copy target. Click anywhere to copy; text stays drag-selectable.
|
|
21
|
+
*
|
|
22
|
+
* Rendered as a `role="button"` div (not a native `<button>`) so it can host
|
|
23
|
+
* genuinely interactive children like `CopyField.Reveal` — nesting a `<button>`
|
|
24
|
+
* inside a `<button>` is invalid HTML.
|
|
25
|
+
*/
|
|
26
|
+
const CopyBox = ({ className, children }) => {
|
|
27
|
+
const { copied, handleCopy, mono, minLines, maxLines, boxId, labelId, hasLabel, hoverHint } = useCopyContext();
|
|
28
|
+
const multiline = maxLines > 1;
|
|
29
|
+
const multilineStyle = multiline ? {
|
|
30
|
+
minHeight: `${minLines * LINE_HEIGHT_REM + VERTICAL_PADDING_REM}rem`,
|
|
31
|
+
maxHeight: `${maxLines * LINE_HEIGHT_REM + VERTICAL_PADDING_REM}rem`
|
|
32
|
+
} : void 0;
|
|
33
|
+
const handleKeyDown = (event) => {
|
|
34
|
+
if (event.target !== event.currentTarget) return;
|
|
35
|
+
if (event.key !== "Enter" && event.key !== " ") return;
|
|
36
|
+
event.preventDefault();
|
|
37
|
+
handleCopy();
|
|
38
|
+
};
|
|
39
|
+
return /* @__PURE__ */ jsx(Tooltip, {
|
|
40
|
+
triggerAsChild: true,
|
|
41
|
+
placement: "top",
|
|
42
|
+
tooltip: copied ? "Copied" : hoverHint ? "Copy" : null,
|
|
43
|
+
forceShow: copied,
|
|
44
|
+
delayDuration: COPY_HINT_DELAY_MS,
|
|
45
|
+
children: /* @__PURE__ */ jsx("div", {
|
|
46
|
+
role: "button",
|
|
47
|
+
tabIndex: 0,
|
|
48
|
+
id: boxId,
|
|
49
|
+
"aria-labelledby": hasLabel ? labelId : void 0,
|
|
50
|
+
onClick: handleCopy,
|
|
51
|
+
onKeyDown: handleKeyDown,
|
|
52
|
+
style: multilineStyle,
|
|
53
|
+
className: cn("tw:group tw:relative tw:flex tw:w-fit tw:max-w-full tw:cursor-pointer tw:gap-2 tw:rounded-2xl tw:[corner-shape:superellipse(2)] tw:border tw:border-border tw:bg-card tw:px-3 tw:py-2.5 tw:text-left tw:shadow-sm tw:transition-colors tw:hover:bg-muted", multiline ? "tw:items-start tw:overflow-auto" : "tw:items-center tw:overflow-hidden", mono && "tw:font-mono tw:text-[13px]", className),
|
|
54
|
+
children
|
|
55
|
+
})
|
|
56
|
+
});
|
|
57
|
+
};
|
|
58
|
+
//#endregion
|
|
59
|
+
//#region src/blocks/CopyField/CopyButton.tsx
|
|
60
|
+
/** Copy affordance icon — shows Copy/Check with feedback. */
|
|
61
|
+
const CopyButton = ({ className }) => {
|
|
62
|
+
const { copied, maxLines } = useCopyContext();
|
|
63
|
+
return /* @__PURE__ */ jsx("span", {
|
|
64
|
+
"aria-hidden": true,
|
|
65
|
+
className: cn("tw:pointer-events-none tw:flex tw:shrink-0 tw:items-center tw:text-muted-foreground tw:group-hover:text-foreground", maxLines > 1 && "tw:self-start tw:pt-0.5", className),
|
|
66
|
+
children: copied ? /* @__PURE__ */ jsx(Check, { className: "tw:size-4" }) : /* @__PURE__ */ jsx(Copy, { className: "tw:size-4" })
|
|
67
|
+
});
|
|
68
|
+
};
|
|
69
|
+
//#endregion
|
|
70
|
+
//#region src/blocks/CopyField/CopyChildren.tsx
|
|
71
|
+
/** The displayed value. Truncates on a single line, wraps when multi-line. */
|
|
72
|
+
const CopyChildren = ({ children, className }) => {
|
|
73
|
+
const { maxLines } = useCopyContext();
|
|
74
|
+
return /* @__PURE__ */ jsx("span", {
|
|
75
|
+
className: cn("tw:min-w-0 tw:flex-1 tw:select-text tw:text-card-foreground", maxLines > 1 ? "tw:whitespace-pre-wrap tw:break-words" : "tw:truncate", className),
|
|
76
|
+
children
|
|
77
|
+
});
|
|
78
|
+
};
|
|
79
|
+
//#endregion
|
|
80
|
+
//#region src/blocks/CopyField/CopyFooter.tsx
|
|
81
|
+
/** Small helper text below the box (mirrors `FormGroup.Help` / `HelpBlock` styling). */
|
|
82
|
+
const CopyFooter = ({ children, className }) => {
|
|
83
|
+
if (!children) return null;
|
|
84
|
+
return /* @__PURE__ */ jsx("p", {
|
|
85
|
+
className: cn("tw:m-0 tw:text-xs tw:text-muted-foreground", className),
|
|
86
|
+
children
|
|
87
|
+
});
|
|
88
|
+
};
|
|
89
|
+
//#endregion
|
|
90
|
+
//#region src/blocks/CopyField/CopyHidden.tsx
|
|
91
|
+
const MASK = "*".repeat(12);
|
|
92
|
+
/**
|
|
93
|
+
* Masks its children with asterisks. The real value still lives on `CopyField.Root`,
|
|
94
|
+
* so copy always copies the real value regardless of mask state.
|
|
95
|
+
*/
|
|
96
|
+
const CopyHidden = ({ children, revealable = true, className }) => {
|
|
97
|
+
const { hidden, registerRevealable } = useCopyContext();
|
|
98
|
+
useEffect(() => {
|
|
99
|
+
if (!revealable) return void 0;
|
|
100
|
+
return registerRevealable();
|
|
101
|
+
}, [revealable, registerRevealable]);
|
|
102
|
+
const masked = revealable ? hidden : true;
|
|
103
|
+
return /* @__PURE__ */ jsx("span", {
|
|
104
|
+
className: cn("tw:select-none", className),
|
|
105
|
+
children: masked ? MASK : children
|
|
106
|
+
});
|
|
107
|
+
};
|
|
108
|
+
//#endregion
|
|
109
|
+
//#region src/blocks/CopyField/CopyLabel.tsx
|
|
110
|
+
/**
|
|
111
|
+
* Visible label above the box. The label carries an id and the box is wired via
|
|
112
|
+
* `aria-labelledby` (not `htmlFor`, which would turn label clicks into a copy).
|
|
113
|
+
*
|
|
114
|
+
* Row layout: label text, then `leading` (gap), then `trailing` pushed to the far
|
|
115
|
+
* edge with the space between them growing.
|
|
116
|
+
*/
|
|
117
|
+
const CopyLabel = ({ children, leading, trailing, className }) => {
|
|
118
|
+
const { labelId, registerLabel } = useCopyContext();
|
|
119
|
+
useEffect(() => registerLabel(), [registerLabel]);
|
|
120
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
121
|
+
className: cn("tw:flex tw:items-center tw:gap-1", className),
|
|
122
|
+
children: [
|
|
123
|
+
/* @__PURE__ */ jsx(Label, {
|
|
124
|
+
id: labelId,
|
|
125
|
+
children
|
|
126
|
+
}),
|
|
127
|
+
leading,
|
|
128
|
+
trailing != null && /* @__PURE__ */ jsx("span", {
|
|
129
|
+
className: "tw:ml-auto tw:flex tw:items-center",
|
|
130
|
+
children: trailing
|
|
131
|
+
})
|
|
132
|
+
]
|
|
133
|
+
});
|
|
134
|
+
};
|
|
135
|
+
//#endregion
|
|
136
|
+
//#region src/blocks/CopyField/CopyPrefix.tsx
|
|
137
|
+
/** Muted, non-selectable prefix addon with a trailing divider (not part of the copied value). */
|
|
138
|
+
const CopyPrefix = ({ children, className }) => /* @__PURE__ */ jsx("span", {
|
|
139
|
+
"aria-hidden": true,
|
|
140
|
+
className: cn("tw:shrink-0 tw:select-none tw:self-stretch tw:border-r tw:border-border tw:pr-2 tw:text-muted-foreground", className),
|
|
141
|
+
children
|
|
142
|
+
});
|
|
143
|
+
//#endregion
|
|
144
|
+
//#region src/blocks/CopyField/CopyReveal.tsx
|
|
145
|
+
/** Eye toggle that reveals/masks `CopyField.Hidden` content. Renders nothing without revealable content. */
|
|
146
|
+
const CopyReveal = ({ className }) => {
|
|
147
|
+
const { hidden, toggleHidden, hasRevealable, maxLines } = useCopyContext();
|
|
148
|
+
if (!hasRevealable) return null;
|
|
149
|
+
const handleClick = (event) => {
|
|
150
|
+
event.stopPropagation();
|
|
151
|
+
toggleHidden();
|
|
152
|
+
};
|
|
153
|
+
return /* @__PURE__ */ jsx("button", {
|
|
154
|
+
type: "button",
|
|
155
|
+
onClick: handleClick,
|
|
156
|
+
"aria-label": hidden ? "Show value" : "Hide value",
|
|
157
|
+
className: cn("tw:flex tw:shrink-0 tw:items-center tw:text-muted-foreground tw:hover:text-foreground", maxLines > 1 && "tw:self-start tw:pt-0.5", className),
|
|
158
|
+
children: hidden ? /* @__PURE__ */ jsx(Eye, { className: "tw:size-4" }) : /* @__PURE__ */ jsx(EyeOff, { className: "tw:size-4" })
|
|
159
|
+
});
|
|
160
|
+
};
|
|
161
|
+
//#endregion
|
|
162
|
+
//#region src/blocks/CopyField/CopyRoot.tsx
|
|
163
|
+
/**
|
|
164
|
+
* Container for the Copy block. Owns the copied `value`, copy/mask state, and the
|
|
165
|
+
* shared context consumed by `CopyField.Box`, `CopyField.Reveal`, `CopyField.Button`, etc.
|
|
166
|
+
*/
|
|
167
|
+
const CopyRoot = ({ value, mono = false, onCopy, hiddenByDefault = false, minLines = 1, maxLines, hoverHint = true, className, children }) => {
|
|
168
|
+
const [copied, setCopied] = useState(false);
|
|
169
|
+
const [hidden, setHidden] = useState(hiddenByDefault);
|
|
170
|
+
const [revealableCount, setRevealableCount] = useState(0);
|
|
171
|
+
const [labelCount, setLabelCount] = useState(0);
|
|
172
|
+
const resetTimerRef = useRef(void 0);
|
|
173
|
+
const generatedId = useId();
|
|
174
|
+
const labelId = `${generatedId}-label`;
|
|
175
|
+
const boxId = `${generatedId}-box`;
|
|
176
|
+
useEffect(() => () => clearTimeout(resetTimerRef.current), []);
|
|
177
|
+
const handleCopy = useCallback(() => {
|
|
178
|
+
const selection = window.getSelection();
|
|
179
|
+
const boxEl = document.getElementById(boxId);
|
|
180
|
+
if (selection && !selection.isCollapsed && selection.anchorNode && boxEl?.contains(selection.anchorNode)) return;
|
|
181
|
+
copyToClipboard(value).then(() => {
|
|
182
|
+
onCopy?.();
|
|
183
|
+
setCopied(true);
|
|
184
|
+
clearTimeout(resetTimerRef.current);
|
|
185
|
+
resetTimerRef.current = setTimeout(() => setCopied(false), 1500);
|
|
186
|
+
}).catch((error) => {
|
|
187
|
+
console.error("Copy to clipboard failed", error);
|
|
188
|
+
});
|
|
189
|
+
}, [
|
|
190
|
+
value,
|
|
191
|
+
onCopy,
|
|
192
|
+
boxId
|
|
193
|
+
]);
|
|
194
|
+
const toggleHidden = useCallback(() => setHidden((prev) => !prev), []);
|
|
195
|
+
const registerRevealable = useCallback(() => {
|
|
196
|
+
setRevealableCount((count) => count + 1);
|
|
197
|
+
return () => setRevealableCount((count) => count - 1);
|
|
198
|
+
}, []);
|
|
199
|
+
const registerLabel = useCallback(() => {
|
|
200
|
+
setLabelCount((count) => count + 1);
|
|
201
|
+
return () => setLabelCount((count) => count - 1);
|
|
202
|
+
}, []);
|
|
203
|
+
const contextValue = useMemo(() => ({
|
|
204
|
+
copied,
|
|
205
|
+
handleCopy,
|
|
206
|
+
value,
|
|
207
|
+
mono,
|
|
208
|
+
hidden,
|
|
209
|
+
toggleHidden,
|
|
210
|
+
registerRevealable,
|
|
211
|
+
hasRevealable: revealableCount > 0,
|
|
212
|
+
registerLabel,
|
|
213
|
+
hasLabel: labelCount > 0,
|
|
214
|
+
minLines,
|
|
215
|
+
maxLines: maxLines ?? minLines,
|
|
216
|
+
hoverHint,
|
|
217
|
+
labelId,
|
|
218
|
+
boxId
|
|
219
|
+
}), [
|
|
220
|
+
copied,
|
|
221
|
+
handleCopy,
|
|
222
|
+
value,
|
|
223
|
+
mono,
|
|
224
|
+
hidden,
|
|
225
|
+
toggleHidden,
|
|
226
|
+
registerRevealable,
|
|
227
|
+
revealableCount,
|
|
228
|
+
registerLabel,
|
|
229
|
+
labelCount,
|
|
230
|
+
minLines,
|
|
231
|
+
maxLines,
|
|
232
|
+
hoverHint,
|
|
233
|
+
labelId,
|
|
234
|
+
boxId
|
|
235
|
+
]);
|
|
236
|
+
return /* @__PURE__ */ jsx(CopyContext, {
|
|
237
|
+
value: contextValue,
|
|
238
|
+
children: /* @__PURE__ */ jsx("div", {
|
|
239
|
+
className: cn("tw:flex tw:w-fit tw:max-w-full tw:flex-col tw:gap-1", className),
|
|
240
|
+
children
|
|
241
|
+
})
|
|
242
|
+
});
|
|
243
|
+
};
|
|
244
|
+
//#endregion
|
|
245
|
+
//#region src/blocks/CopyField/CopySuffix.tsx
|
|
246
|
+
/** Muted, non-selectable suffix addon with a leading divider (not part of the copied value). */
|
|
247
|
+
const CopySuffix = ({ children, className }) => /* @__PURE__ */ jsx("span", {
|
|
248
|
+
"aria-hidden": true,
|
|
249
|
+
className: cn("tw:shrink-0 tw:select-none tw:self-stretch tw:border-l tw:border-border tw:pl-2 tw:text-muted-foreground", className),
|
|
250
|
+
children
|
|
251
|
+
});
|
|
252
|
+
//#endregion
|
|
253
|
+
//#region src/blocks/CopyField/CopyField.tsx
|
|
254
|
+
/**
|
|
255
|
+
* Compound component for readonly value/command boxes with inline copy.
|
|
256
|
+
*
|
|
257
|
+
* `CopyField.Root` owns the `value` and copy/mask state; `CopyField.Box` is the clickable
|
|
258
|
+
* copy target. Clicking anywhere in the box copies the real `value` to the
|
|
259
|
+
* clipboard (guarded by text-selection so drag-select does NOT trigger a copy),
|
|
260
|
+
* with a Copy → Check feedback for ~1.5s.
|
|
261
|
+
*
|
|
262
|
+
* Shapes:
|
|
263
|
+
* - **Single-line value row** — default proportional font, value truncates.
|
|
264
|
+
* - **Monospace command box** — `mono` on `CopyField.Root`.
|
|
265
|
+
* - **Multi-line** — `maxLines > 1`; content wraps and scrolls between
|
|
266
|
+
* `minLines` and `maxLines` tall.
|
|
267
|
+
*
|
|
268
|
+
* Masking: wrap sensitive content in `CopyField.Hidden`. Revealable hidden content is
|
|
269
|
+
* toggled by `CopyField.Reveal` (an eye button); copy still copies the real value.
|
|
270
|
+
*
|
|
271
|
+
* @example Monospace command
|
|
272
|
+
* ```tsx
|
|
273
|
+
* <CopyField.Root value={installCommand} mono>
|
|
274
|
+
* <CopyField.Label>Install the Keboola CLI</CopyField.Label>
|
|
275
|
+
* <CopyField.Box>
|
|
276
|
+
* <CopyField.Children>{installCommand}</CopyField.Children>
|
|
277
|
+
* <CopyField.Button />
|
|
278
|
+
* </CopyField.Box>
|
|
279
|
+
* </CopyField.Root>
|
|
280
|
+
* ```
|
|
281
|
+
*
|
|
282
|
+
* @example Masked token with reveal + prefix/suffix
|
|
283
|
+
* ```tsx
|
|
284
|
+
* <CopyField.Root value={dataAppUrl} hiddenByDefault>
|
|
285
|
+
* <CopyField.Label leading={<InfoButton />} trailing={<Switch />}>Data app URL</CopyField.Label>
|
|
286
|
+
* <CopyField.Box>
|
|
287
|
+
* <CopyField.Prefix>https://</CopyField.Prefix>
|
|
288
|
+
* <CopyField.Children><CopyField.Hidden>{slug}</CopyField.Hidden></CopyField.Children>
|
|
289
|
+
* <CopyField.Suffix>.keboola.com</CopyField.Suffix>
|
|
290
|
+
* <CopyField.Reveal />
|
|
291
|
+
* <CopyField.Button />
|
|
292
|
+
* </CopyField.Box>
|
|
293
|
+
* <CopyField.Footer>Click to copy</CopyField.Footer>
|
|
294
|
+
* </CopyField.Root>
|
|
295
|
+
* ```
|
|
296
|
+
*/
|
|
297
|
+
const CopyField = {
|
|
298
|
+
/** Container. Owns the copied `value`, mask state, and copy context. */
|
|
299
|
+
Root: CopyRoot,
|
|
300
|
+
/** Visible label above the box, with optional `leading`/`trailing` slots. */
|
|
301
|
+
Label: CopyLabel,
|
|
302
|
+
/** The clickable copy target row. */
|
|
303
|
+
Box: CopyBox,
|
|
304
|
+
/** Muted, non-selectable prefix addon (not copied). */
|
|
305
|
+
Prefix: CopyPrefix,
|
|
306
|
+
/** Displayed value (truncates single-line, wraps multi-line). */
|
|
307
|
+
Children: CopyChildren,
|
|
308
|
+
/** Muted, non-selectable suffix addon (not copied). */
|
|
309
|
+
Suffix: CopySuffix,
|
|
310
|
+
/** Masks its children with dots; copy still copies the real value. */
|
|
311
|
+
Hidden: CopyHidden,
|
|
312
|
+
/** Eye toggle that reveals/masks revealable `CopyField.Hidden` content. */
|
|
313
|
+
Reveal: CopyReveal,
|
|
314
|
+
/** Copy affordance icon — shows Copy/Check with feedback. */
|
|
315
|
+
Button: CopyButton,
|
|
316
|
+
/** Small helper text below the box. */
|
|
317
|
+
Footer: CopyFooter
|
|
318
|
+
};
|
|
319
|
+
//#endregion
|
|
320
|
+
export { CopyField };
|
|
321
|
+
|
|
322
|
+
//# sourceMappingURL=CopyField-BJ96zvXs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CopyField-BJ96zvXs.js","names":["CopyIcon"],"sources":["../src/blocks/CopyField/CopyContext.tsx","../src/blocks/CopyField/CopyBox.tsx","../src/blocks/CopyField/CopyButton.tsx","../src/blocks/CopyField/CopyChildren.tsx","../src/blocks/CopyField/CopyFooter.tsx","../src/blocks/CopyField/CopyHidden.tsx","../src/blocks/CopyField/CopyLabel.tsx","../src/blocks/CopyField/CopyPrefix.tsx","../src/blocks/CopyField/CopyReveal.tsx","../src/blocks/CopyField/CopyRoot.tsx","../src/blocks/CopyField/CopySuffix.tsx","../src/blocks/CopyField/CopyField.tsx"],"sourcesContent":["import { createContext, use } from 'react';\n\ntype CopyContextValue = {\n /** Whether a copy just happened (drives the Copy → Check feedback for ~1.5s). */\n copied: boolean;\n /** Copies the real `value` to the clipboard, guarded against drag-select. */\n handleCopy: () => void;\n /** The real value copied to the clipboard, regardless of masking. */\n value: string;\n /** Render displayed content in monospace/code style. */\n mono: boolean;\n /** Whether to show the \"Copy\" hint tooltip on hover (else only \"Copied\" on copy). */\n hoverHint: boolean;\n /** Whether revealable `CopyField.Hidden` content is currently masked. */\n hidden: boolean;\n /** Toggles the masked ↔ revealed state. */\n toggleHidden: () => void;\n /**\n * Registers a revealable `CopyField.Hidden` so `CopyField.Reveal` knows to render.\n * Returns a cleanup that unregisters on unmount.\n */\n registerRevealable: () => () => void;\n /** True once at least one revealable `CopyField.Hidden` is mounted. */\n hasRevealable: boolean;\n /**\n * Registers the visible `CopyField.Label` so `CopyField.Box` only points `aria-labelledby`\n * at it when a label actually exists. Returns a cleanup that unregisters on unmount.\n */\n registerLabel: () => () => void;\n /** True once a `CopyField.Label` is mounted. */\n hasLabel: boolean;\n /** Minimum number of visible text lines for a multi-line box. */\n minLines: number;\n /** Maximum number of visible text lines before the box scrolls. */\n maxLines: number;\n /** Stable id of the visible label element (for `aria-labelledby`). */\n labelId: string;\n /** Stable id of the clickable box element. */\n boxId: string;\n};\n\nexport const CopyContext = createContext<CopyContextValue | null>(null);\n\nexport const useCopyContext = () => {\n const ctx = use(CopyContext);\n if (!ctx) throw new Error('CopyField.* components must be used within a CopyField.Root');\n return ctx;\n};\n","import type { CSSProperties, KeyboardEvent, ReactNode } from 'react';\n\nimport { Tooltip } from '../../components/Tooltip';\nimport { cn } from '../../utils';\n\nimport { useCopyContext } from './CopyContext';\n\ntype CopyBoxProps = {\n /** Additional CSS classes on the box. */\n className?: string;\n children: ReactNode;\n};\n\nconst LINE_HEIGHT_REM = 1.25;\nconst VERTICAL_PADDING_REM = 1.25;\n\n// Long delay — the hover \"Copy\" hint doesn't really help UX, it just pulls focus.\nconst COPY_HINT_DELAY_MS = 2000;\n\n/**\n * The clickable copy target. Click anywhere to copy; text stays drag-selectable.\n *\n * Rendered as a `role=\"button\"` div (not a native `<button>`) so it can host\n * genuinely interactive children like `CopyField.Reveal` — nesting a `<button>`\n * inside a `<button>` is invalid HTML.\n */\nexport const CopyBox = ({ className, children }: CopyBoxProps) => {\n const { copied, handleCopy, mono, minLines, maxLines, boxId, labelId, hasLabel, hoverHint } =\n useCopyContext();\n\n const multiline = maxLines > 1;\n const multilineStyle: CSSProperties | undefined = multiline\n ? {\n minHeight: `${minLines * LINE_HEIGHT_REM + VERTICAL_PADDING_REM}rem`,\n maxHeight: `${maxLines * LINE_HEIGHT_REM + VERTICAL_PADDING_REM}rem`,\n }\n : undefined;\n\n const handleKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n if (event.target !== event.currentTarget) return;\n if (event.key !== 'Enter' && event.key !== ' ') return;\n event.preventDefault();\n handleCopy();\n };\n\n return (\n <Tooltip\n triggerAsChild\n placement=\"top\"\n tooltip={copied ? 'Copied' : hoverHint ? 'Copy' : null}\n forceShow={copied}\n delayDuration={COPY_HINT_DELAY_MS}\n >\n <div\n role=\"button\"\n tabIndex={0}\n id={boxId}\n aria-labelledby={hasLabel ? labelId : undefined}\n onClick={handleCopy}\n onKeyDown={handleKeyDown}\n style={multilineStyle}\n className={cn(\n 'tw:group tw:relative tw:flex tw:w-fit tw:max-w-full tw:cursor-pointer tw:gap-2 tw:rounded-2xl tw:[corner-shape:superellipse(2)] tw:border tw:border-border tw:bg-card tw:px-3 tw:py-2.5 tw:text-left tw:shadow-sm tw:transition-colors tw:hover:bg-muted',\n multiline ? 'tw:items-start tw:overflow-auto' : 'tw:items-center tw:overflow-hidden',\n mono && 'tw:font-mono tw:text-[13px]',\n className,\n )}\n >\n {children}\n </div>\n </Tooltip>\n );\n};\n","import { Check, Copy as CopyIcon } from '../../icons';\nimport { cn } from '../../utils';\n\nimport { useCopyContext } from './CopyContext';\n\ntype CopyButtonProps = {\n className?: string;\n};\n\n/** Copy affordance icon — shows Copy/Check with feedback. */\nexport const CopyButton = ({ className }: CopyButtonProps) => {\n const { copied, maxLines } = useCopyContext();\n\n return (\n <span\n aria-hidden\n className={cn(\n 'tw:pointer-events-none tw:flex tw:shrink-0 tw:items-center tw:text-muted-foreground tw:group-hover:text-foreground',\n maxLines > 1 && 'tw:self-start tw:pt-0.5',\n className,\n )}\n >\n {copied ? <Check className=\"tw:size-4\" /> : <CopyIcon className=\"tw:size-4\" />}\n </span>\n );\n};\n","import type { ReactNode } from 'react';\n\nimport { cn } from '../../utils';\n\nimport { useCopyContext } from './CopyContext';\n\ntype CopyChildrenProps = {\n children: ReactNode;\n className?: string;\n};\n\n/** The displayed value. Truncates on a single line, wraps when multi-line. */\nexport const CopyChildren = ({ children, className }: CopyChildrenProps) => {\n const { maxLines } = useCopyContext();\n const multiline = maxLines > 1;\n\n return (\n <span\n className={cn(\n 'tw:min-w-0 tw:flex-1 tw:select-text tw:text-card-foreground',\n multiline ? 'tw:whitespace-pre-wrap tw:break-words' : 'tw:truncate',\n className,\n )}\n >\n {children}\n </span>\n );\n};\n","import type { ReactNode } from 'react';\n\nimport { cn } from '../../utils';\n\ntype CopyFooterProps = {\n children: ReactNode;\n className?: string;\n};\n\n/** Small helper text below the box (mirrors `FormGroup.Help` / `HelpBlock` styling). */\nexport const CopyFooter = ({ children, className }: CopyFooterProps) => {\n if (!children) return null;\n\n return <p className={cn('tw:m-0 tw:text-xs tw:text-muted-foreground', className)}>{children}</p>;\n};\n","import { useEffect } from 'react';\nimport type { ReactNode } from 'react';\n\nimport { cn } from '../../utils';\n\nimport { useCopyContext } from './CopyContext';\n\ntype CopyHiddenProps = {\n children: ReactNode;\n /**\n * When true (default), `CopyField.Reveal` can unmask this content. When false the\n * content is always masked (e.g. an implicit token inside a longer string).\n */\n revealable?: boolean;\n className?: string;\n};\n\nconst MASK = '*'.repeat(12);\n\n/**\n * Masks its children with asterisks. The real value still lives on `CopyField.Root`,\n * so copy always copies the real value regardless of mask state.\n */\nexport const CopyHidden = ({ children, revealable = true, className }: CopyHiddenProps) => {\n const { hidden, registerRevealable } = useCopyContext();\n\n useEffect(() => {\n if (!revealable) return undefined;\n return registerRevealable();\n }, [revealable, registerRevealable]);\n\n const masked = revealable ? hidden : true;\n\n return <span className={cn('tw:select-none', className)}>{masked ? MASK : children}</span>;\n};\n","import { useEffect } from 'react';\nimport type { ReactNode } from 'react';\n\nimport { Label } from '../../components/Label';\nimport { cn } from '../../utils';\n\nimport { useCopyContext } from './CopyContext';\n\ntype CopyLabelProps = {\n children: ReactNode;\n /** Content rendered right after the label text (e.g. an Info tooltip button). */\n leading?: ReactNode;\n /** Content pushed to the trailing edge of the row (e.g. a Switch). */\n trailing?: ReactNode;\n className?: string;\n};\n\n/**\n * Visible label above the box. The label carries an id and the box is wired via\n * `aria-labelledby` (not `htmlFor`, which would turn label clicks into a copy).\n *\n * Row layout: label text, then `leading` (gap), then `trailing` pushed to the far\n * edge with the space between them growing.\n */\nexport const CopyLabel = ({ children, leading, trailing, className }: CopyLabelProps) => {\n const { labelId, registerLabel } = useCopyContext();\n\n useEffect(() => registerLabel(), [registerLabel]);\n\n return (\n <div className={cn('tw:flex tw:items-center tw:gap-1', className)}>\n <Label id={labelId}>{children}</Label>\n {leading}\n {trailing != null && <span className=\"tw:ml-auto tw:flex tw:items-center\">{trailing}</span>}\n </div>\n );\n};\n","import type { ReactNode } from 'react';\n\nimport { cn } from '../../utils';\n\ntype CopyAddonProps = {\n children: ReactNode;\n className?: string;\n};\n\n/** Muted, non-selectable prefix addon with a trailing divider (not part of the copied value). */\nexport const CopyPrefix = ({ children, className }: CopyAddonProps) => (\n <span\n aria-hidden\n className={cn(\n 'tw:shrink-0 tw:select-none tw:self-stretch tw:border-r tw:border-border tw:pr-2 tw:text-muted-foreground',\n className,\n )}\n >\n {children}\n </span>\n);\n","import type { MouseEvent } from 'react';\n\nimport { Eye, EyeOff } from '../../icons';\nimport { cn } from '../../utils';\n\nimport { useCopyContext } from './CopyContext';\n\ntype CopyRevealProps = {\n className?: string;\n};\n\n/** Eye toggle that reveals/masks `CopyField.Hidden` content. Renders nothing without revealable content. */\nexport const CopyReveal = ({ className }: CopyRevealProps) => {\n const { hidden, toggleHidden, hasRevealable, maxLines } = useCopyContext();\n\n if (!hasRevealable) return null;\n\n const handleClick = (event: MouseEvent<HTMLButtonElement>) => {\n event.stopPropagation();\n toggleHidden();\n };\n\n return (\n <button\n type=\"button\"\n onClick={handleClick}\n aria-label={hidden ? 'Show value' : 'Hide value'}\n className={cn(\n 'tw:flex tw:shrink-0 tw:items-center tw:text-muted-foreground tw:hover:text-foreground',\n maxLines > 1 && 'tw:self-start tw:pt-0.5',\n className,\n )}\n >\n {hidden ? <Eye className=\"tw:size-4\" /> : <EyeOff className=\"tw:size-4\" />}\n </button>\n );\n};\n","import { useCallback, useEffect, useId, useMemo, useRef, useState } from 'react';\nimport type { ReactNode } from 'react';\n\nimport { cn, copyToClipboard } from '../../utils';\n\nimport { CopyContext } from './CopyContext';\n\ntype CopyRootProps = {\n /** The value copied to the clipboard on click. */\n value: string;\n /** Render displayed content in monospace/code style. */\n mono?: boolean;\n /** Callback fired after a successful copy. */\n onCopy?: () => void;\n /** Start with revealable `CopyField.Hidden` content masked. */\n hiddenByDefault?: boolean;\n /** Minimum number of visible text lines for a multi-line box. */\n minLines?: number;\n /** Maximum number of visible text lines before the box scrolls. */\n maxLines?: number;\n /** Show the \"Copy\" hover hint (set `false` to only show \"Copied\" on copy). Defaults to `true`. */\n hoverHint?: boolean;\n /** Additional CSS classes on the outer container. */\n className?: string;\n children: ReactNode;\n};\n\n/**\n * Container for the Copy block. Owns the copied `value`, copy/mask state, and the\n * shared context consumed by `CopyField.Box`, `CopyField.Reveal`, `CopyField.Button`, etc.\n */\nexport const CopyRoot = ({\n value,\n mono = false,\n onCopy,\n hiddenByDefault = false,\n minLines = 1,\n maxLines,\n hoverHint = true,\n className,\n children,\n}: CopyRootProps) => {\n const [copied, setCopied] = useState(false);\n const [hidden, setHidden] = useState(hiddenByDefault);\n const [revealableCount, setRevealableCount] = useState(0);\n const [labelCount, setLabelCount] = useState(0);\n const resetTimerRef = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n\n const generatedId = useId();\n const labelId = `${generatedId}-label`;\n const boxId = `${generatedId}-box`;\n\n useEffect(() => () => clearTimeout(resetTimerRef.current), []);\n\n const handleCopy = useCallback(() => {\n const selection = window.getSelection();\n const boxEl = document.getElementById(boxId);\n if (\n selection &&\n !selection.isCollapsed &&\n selection.anchorNode &&\n boxEl?.contains(selection.anchorNode)\n ) {\n return;\n }\n\n copyToClipboard(value)\n .then(() => {\n onCopy?.();\n setCopied(true);\n clearTimeout(resetTimerRef.current);\n resetTimerRef.current = setTimeout(() => setCopied(false), 1500);\n })\n .catch((error: unknown) => {\n // eslint-disable-next-line no-console\n console.error('Copy to clipboard failed', error);\n });\n }, [value, onCopy, boxId]);\n\n const toggleHidden = useCallback(() => setHidden((prev) => !prev), []);\n\n const registerRevealable = useCallback(() => {\n setRevealableCount((count) => count + 1);\n return () => setRevealableCount((count) => count - 1);\n }, []);\n\n const registerLabel = useCallback(() => {\n setLabelCount((count) => count + 1);\n return () => setLabelCount((count) => count - 1);\n }, []);\n\n const contextValue = useMemo(\n () => ({\n copied,\n handleCopy,\n value,\n mono,\n hidden,\n toggleHidden,\n registerRevealable,\n hasRevealable: revealableCount > 0,\n registerLabel,\n hasLabel: labelCount > 0,\n minLines,\n maxLines: maxLines ?? minLines,\n hoverHint,\n labelId,\n boxId,\n }),\n [\n copied,\n handleCopy,\n value,\n mono,\n hidden,\n toggleHidden,\n registerRevealable,\n revealableCount,\n registerLabel,\n labelCount,\n minLines,\n maxLines,\n hoverHint,\n labelId,\n boxId,\n ],\n );\n\n return (\n <CopyContext value={contextValue}>\n <div className={cn('tw:flex tw:w-fit tw:max-w-full tw:flex-col tw:gap-1', className)}>\n {children}\n </div>\n </CopyContext>\n );\n};\n","import type { ReactNode } from 'react';\n\nimport { cn } from '../../utils';\n\ntype CopyAddonProps = {\n children: ReactNode;\n className?: string;\n};\n\n/** Muted, non-selectable suffix addon with a leading divider (not part of the copied value). */\nexport const CopySuffix = ({ children, className }: CopyAddonProps) => (\n <span\n aria-hidden\n className={cn(\n 'tw:shrink-0 tw:select-none tw:self-stretch tw:border-l tw:border-border tw:pl-2 tw:text-muted-foreground',\n className,\n )}\n >\n {children}\n </span>\n);\n","import { CopyBox } from './CopyBox';\nimport { CopyButton } from './CopyButton';\nimport { CopyChildren } from './CopyChildren';\nimport { CopyFooter } from './CopyFooter';\nimport { CopyHidden } from './CopyHidden';\nimport { CopyLabel } from './CopyLabel';\nimport { CopyPrefix } from './CopyPrefix';\nimport { CopyReveal } from './CopyReveal';\nimport { CopyRoot } from './CopyRoot';\nimport { CopySuffix } from './CopySuffix';\n\n/**\n * Compound component for readonly value/command boxes with inline copy.\n *\n * `CopyField.Root` owns the `value` and copy/mask state; `CopyField.Box` is the clickable\n * copy target. Clicking anywhere in the box copies the real `value` to the\n * clipboard (guarded by text-selection so drag-select does NOT trigger a copy),\n * with a Copy → Check feedback for ~1.5s.\n *\n * Shapes:\n * - **Single-line value row** — default proportional font, value truncates.\n * - **Monospace command box** — `mono` on `CopyField.Root`.\n * - **Multi-line** — `maxLines > 1`; content wraps and scrolls between\n * `minLines` and `maxLines` tall.\n *\n * Masking: wrap sensitive content in `CopyField.Hidden`. Revealable hidden content is\n * toggled by `CopyField.Reveal` (an eye button); copy still copies the real value.\n *\n * @example Monospace command\n * ```tsx\n * <CopyField.Root value={installCommand} mono>\n * <CopyField.Label>Install the Keboola CLI</CopyField.Label>\n * <CopyField.Box>\n * <CopyField.Children>{installCommand}</CopyField.Children>\n * <CopyField.Button />\n * </CopyField.Box>\n * </CopyField.Root>\n * ```\n *\n * @example Masked token with reveal + prefix/suffix\n * ```tsx\n * <CopyField.Root value={dataAppUrl} hiddenByDefault>\n * <CopyField.Label leading={<InfoButton />} trailing={<Switch />}>Data app URL</CopyField.Label>\n * <CopyField.Box>\n * <CopyField.Prefix>https://</CopyField.Prefix>\n * <CopyField.Children><CopyField.Hidden>{slug}</CopyField.Hidden></CopyField.Children>\n * <CopyField.Suffix>.keboola.com</CopyField.Suffix>\n * <CopyField.Reveal />\n * <CopyField.Button />\n * </CopyField.Box>\n * <CopyField.Footer>Click to copy</CopyField.Footer>\n * </CopyField.Root>\n * ```\n */\nexport const CopyField = {\n /** Container. Owns the copied `value`, mask state, and copy context. */\n Root: CopyRoot,\n /** Visible label above the box, with optional `leading`/`trailing` slots. */\n Label: CopyLabel,\n /** The clickable copy target row. */\n Box: CopyBox,\n /** Muted, non-selectable prefix addon (not copied). */\n Prefix: CopyPrefix,\n /** Displayed value (truncates single-line, wraps multi-line). */\n Children: CopyChildren,\n /** Muted, non-selectable suffix addon (not copied). */\n Suffix: CopySuffix,\n /** Masks its children with dots; copy still copies the real value. */\n Hidden: CopyHidden,\n /** Eye toggle that reveals/masks revealable `CopyField.Hidden` content. */\n Reveal: CopyReveal,\n /** Copy affordance icon — shows Copy/Check with feedback. */\n Button: CopyButton,\n /** Small helper text below the box. */\n Footer: CopyFooter,\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import { createChangeInputEvent } from "./utils-D0c5VAyF.js";
|
|
2
|
+
import { mergeRefs } from "./internal/utils/mergeRefs.js";
|
|
3
|
+
import { Calendar, X } from "./icons-Cek151jC.js";
|
|
4
|
+
import { InputGroup } from "./InputGroup-CdTq8H7c.js";
|
|
5
|
+
import { useControllableState } from "./useControllableState-M6494mCT.js";
|
|
6
|
+
import { DatePicker } from "./DatePicker-Dw3DpbUh.js";
|
|
7
|
+
import { useRef, useState } from "react";
|
|
8
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
9
|
+
//#region src/blocks/DateInput/helpers.ts
|
|
10
|
+
const formatDate = (date, inputValue) => {
|
|
11
|
+
if (!date) return inputValue;
|
|
12
|
+
return date.toLocaleDateString();
|
|
13
|
+
};
|
|
14
|
+
const datePartOrder = new Intl.DateTimeFormat().formatToParts(new Date(2e3, 0, 2)).filter((p) => p.type === "day" || p.type === "month" || p.type === "year").map((p) => p.type);
|
|
15
|
+
const parseDate = (value) => {
|
|
16
|
+
if (!value.trim()) return null;
|
|
17
|
+
const nums = value.match(/\d+/g)?.map(Number);
|
|
18
|
+
if (nums && nums.length >= 3) {
|
|
19
|
+
const parts = Object.fromEntries(datePartOrder.map((type, i) => [type, nums[i]]));
|
|
20
|
+
const year = parts.year;
|
|
21
|
+
const month = parts.month;
|
|
22
|
+
const day = parts.day;
|
|
23
|
+
if (year != null && month != null && day != null && month >= 1 && month <= 12 && day >= 1 && day <= 31) {
|
|
24
|
+
const date = new Date(year, month - 1, day);
|
|
25
|
+
if (date.getFullYear() === year && date.getMonth() === month - 1 && date.getDate() === day) return date;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
const isoMatch = value.match(/^(\d{4})-(\d{1,2})-(\d{1,2})$/);
|
|
29
|
+
if (isoMatch) {
|
|
30
|
+
const y = Number(isoMatch[1]);
|
|
31
|
+
const m = Number(isoMatch[2]) - 1;
|
|
32
|
+
const d = Number(isoMatch[3]);
|
|
33
|
+
const date = new Date(y, m, d);
|
|
34
|
+
if (date.getFullYear() === y && date.getMonth() === m && date.getDate() === d) return date;
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
const fallback = new Date(value);
|
|
38
|
+
return isNaN(fallback.getTime()) ? null : fallback;
|
|
39
|
+
};
|
|
40
|
+
//#endregion
|
|
41
|
+
//#region src/blocks/DateInput/DateInput.tsx
|
|
42
|
+
const DateInput = ({ ref, state, variant, focusVariant, sizing, className, value, defaultValue, onValueChange, onValueBlur, onChange, onBlur, onFocus, allowClear = false, disabledDays, endMonth, startMonth, disabled, readOnly, placeholder = "Select a date", ...restInputProps }) => {
|
|
43
|
+
const inputRef = useRef(null);
|
|
44
|
+
const [inputValue, setInputValue] = useState("");
|
|
45
|
+
const [hasFocus, setHasFocus] = useState(false);
|
|
46
|
+
const [isOpen, setIsOpen] = useState(false);
|
|
47
|
+
const [month, setMonth] = useState(/* @__PURE__ */ new Date());
|
|
48
|
+
const [currentValue, setCurrentValue] = useControllableState({
|
|
49
|
+
prop: value,
|
|
50
|
+
defaultProp: defaultValue ?? null
|
|
51
|
+
});
|
|
52
|
+
const canClear = allowClear && !!currentValue && !disabled && !readOnly;
|
|
53
|
+
const showPicker = !disabled && !readOnly;
|
|
54
|
+
const handleChange = (event) => {
|
|
55
|
+
const newValue = event.target.value;
|
|
56
|
+
setInputValue(newValue);
|
|
57
|
+
onChange?.(event);
|
|
58
|
+
const parsedDate = parseDate(newValue);
|
|
59
|
+
if (parsedDate !== null || !newValue.trim()) onValueChange?.(parsedDate);
|
|
60
|
+
};
|
|
61
|
+
const handleFocus = (event) => {
|
|
62
|
+
const formatted = formatDate(currentValue, "");
|
|
63
|
+
setInputValue(formatted);
|
|
64
|
+
setHasFocus(true);
|
|
65
|
+
onFocus?.(event);
|
|
66
|
+
};
|
|
67
|
+
const handleBlur = (event) => {
|
|
68
|
+
setHasFocus(false);
|
|
69
|
+
onBlur?.(event);
|
|
70
|
+
const text = event.target.value;
|
|
71
|
+
const parsedDate = text === formatDate(currentValue, "") ? currentValue : parseDate(text);
|
|
72
|
+
onValueBlur?.(parsedDate);
|
|
73
|
+
setCurrentValue(parsedDate);
|
|
74
|
+
};
|
|
75
|
+
const handleDatePickerChange = (newValue) => {
|
|
76
|
+
const dateValue = newValue ?? null;
|
|
77
|
+
setCurrentValue(dateValue);
|
|
78
|
+
onValueChange?.(dateValue);
|
|
79
|
+
setHasFocus(false);
|
|
80
|
+
setIsOpen(false);
|
|
81
|
+
};
|
|
82
|
+
const handleClear = () => {
|
|
83
|
+
if (!inputRef.current) return;
|
|
84
|
+
inputRef.current.value = "";
|
|
85
|
+
setInputValue("");
|
|
86
|
+
setCurrentValue(null);
|
|
87
|
+
onValueChange?.(null);
|
|
88
|
+
onChange?.(createChangeInputEvent(inputRef.current));
|
|
89
|
+
};
|
|
90
|
+
const handleOpenChange = (open) => {
|
|
91
|
+
if (open) setMonth(currentValue ?? /* @__PURE__ */ new Date());
|
|
92
|
+
setIsOpen(open);
|
|
93
|
+
};
|
|
94
|
+
const displayValue = hasFocus ? inputValue : formatDate(currentValue, "");
|
|
95
|
+
return /* @__PURE__ */ jsxs(InputGroup, {
|
|
96
|
+
state,
|
|
97
|
+
variant,
|
|
98
|
+
sizing,
|
|
99
|
+
focusVariant,
|
|
100
|
+
className,
|
|
101
|
+
children: [/* @__PURE__ */ jsx(InputGroup.Input, {
|
|
102
|
+
...restInputProps,
|
|
103
|
+
ref: mergeRefs(ref ?? null, inputRef),
|
|
104
|
+
type: "text",
|
|
105
|
+
value: displayValue,
|
|
106
|
+
placeholder,
|
|
107
|
+
onChange: handleChange,
|
|
108
|
+
onFocus: handleFocus,
|
|
109
|
+
onBlur: handleBlur,
|
|
110
|
+
disabled,
|
|
111
|
+
readOnly
|
|
112
|
+
}), (canClear || showPicker) && /* @__PURE__ */ jsxs(InputGroup.Addon, {
|
|
113
|
+
align: "inline-end",
|
|
114
|
+
children: [canClear && /* @__PURE__ */ jsx(InputGroup.Button, {
|
|
115
|
+
"aria-label": "Clear date",
|
|
116
|
+
onMouseDown: (event) => event.preventDefault(),
|
|
117
|
+
onClick: handleClear,
|
|
118
|
+
children: /* @__PURE__ */ jsx(X, { className: "tw:size-4" })
|
|
119
|
+
}), showPicker && /* @__PURE__ */ jsx(DatePicker, {
|
|
120
|
+
disabled: disabledDays,
|
|
121
|
+
endMonth,
|
|
122
|
+
mode: "single",
|
|
123
|
+
month,
|
|
124
|
+
onMonthChange: setMonth,
|
|
125
|
+
onOpenChange: handleOpenChange,
|
|
126
|
+
onSelect: handleDatePickerChange,
|
|
127
|
+
open: isOpen,
|
|
128
|
+
selected: currentValue ?? void 0,
|
|
129
|
+
startMonth,
|
|
130
|
+
children: /* @__PURE__ */ jsx(InputGroup.Button, {
|
|
131
|
+
"aria-label": "Select Date",
|
|
132
|
+
children: /* @__PURE__ */ jsx(Calendar, { className: "tw:size-4" })
|
|
133
|
+
})
|
|
134
|
+
})]
|
|
135
|
+
})]
|
|
136
|
+
});
|
|
137
|
+
};
|
|
138
|
+
//#endregion
|
|
139
|
+
export { DateInput };
|
|
140
|
+
|
|
141
|
+
//# sourceMappingURL=DateInput-B3UdzRfW.js.map
|