@keboola/design 11.0.0 → 11.0.1
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/AIKit-Dre37SJr.js +1320 -0
- package/dist/AIKit-Dre37SJr.js.map +1 -0
- package/dist/Alert-DfZq9kGe.js +133 -0
- package/dist/Alert-DfZq9kGe.js.map +1 -0
- package/dist/AlertModal-BUC4Es8o.js +222 -0
- package/dist/AlertModal-BUC4Es8o.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-B8o9zdZO.js +903 -0
- package/dist/BrandEditor-B8o9zdZO.js.map +1 -0
- package/dist/BrandLogo-CJkRd0F8.js +46 -0
- package/dist/BrandLogo-CJkRd0F8.js.map +1 -0
- package/dist/Breadcrumb-DJp7WwSv.js +330 -0
- package/dist/Breadcrumb-DJp7WwSv.js.map +1 -0
- package/dist/Button-nzmDNS2q.js +391 -0
- package/dist/Button-nzmDNS2q.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-ez5V3fkk.js +43 -0
- package/dist/ClipboardButton-ez5V3fkk.js.map +1 -0
- package/dist/CodeEditor-BfQJfbhL.js +952 -0
- package/dist/CodeEditor-BfQJfbhL.js.map +1 -0
- package/dist/Collapsible-BQXWEOBC.js +34 -0
- package/dist/Collapsible-BQXWEOBC.js.map +1 -0
- package/dist/ColorInput-Dx8Dsv7Y.js +180 -0
- package/dist/ColorInput-Dx8Dsv7Y.js.map +1 -0
- package/dist/ColorModeSwitch-CCqj7tjE.js +77 -0
- package/dist/ColorModeSwitch-CCqj7tjE.js.map +1 -0
- package/dist/Combobox-c_xBjf0P.js +439 -0
- package/dist/Combobox-c_xBjf0P.js.map +1 -0
- package/dist/Command-CQ_bQsJp.js +102 -0
- package/dist/Command-CQ_bQsJp.js.map +1 -0
- package/dist/CopyField-BJ96zvXs.js +322 -0
- package/dist/CopyField-BJ96zvXs.js.map +1 -0
- package/dist/DateInput-CMD3dY-T.js +141 -0
- package/dist/DateInput-CMD3dY-T.js.map +1 -0
- package/dist/DatePicker-BbFbmsGl.js +24 -0
- package/dist/DatePicker-BbFbmsGl.js.map +1 -0
- package/dist/DateRangeInput-D3BhiKyk.js +139 -0
- package/dist/DateRangeInput-D3BhiKyk.js.map +1 -0
- package/dist/DateRangePicker-BiUgtt_M.js +159 -0
- package/dist/DateRangePicker-BiUgtt_M.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-B6ZbYvaM.js +327 -0
- package/dist/DropdownMenu-B6ZbYvaM.js.map +1 -0
- package/dist/FieldBox-D7DYtX_m.js +70 -0
- package/dist/FieldBox-D7DYtX_m.js.map +1 -0
- package/dist/FileUpload-sXRv7JiY.js +2527 -0
- package/dist/FileUpload-sXRv7JiY.js.map +1 -0
- package/dist/Form-BDCef6O9.js +371 -0
- package/dist/Form-BDCef6O9.js.map +1 -0
- package/dist/FormGroup-S9mPNHKH.js +124 -0
- package/dist/FormGroup-S9mPNHKH.js.map +1 -0
- package/dist/FullScreenModal-CJa2VkJ2.js +96 -0
- package/dist/FullScreenModal-CJa2VkJ2.js.map +1 -0
- package/dist/HoverCard-WfDkLK1s.js +31 -0
- package/dist/HoverCard-WfDkLK1s.js.map +1 -0
- package/dist/InputGroup-BJWsI35s.js +292 -0
- package/dist/InputGroup-BJWsI35s.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-BB06gymm.js +399 -0
- package/dist/MermaidDiagram-BB06gymm.js.map +1 -0
- package/dist/Modal-BA5Wc3sx.js +185 -0
- package/dist/Modal-BA5Wc3sx.js.map +1 -0
- package/dist/ModalTitle-C76ke2eo.js +28 -0
- package/dist/ModalTitle-C76ke2eo.js.map +1 -0
- package/dist/MultiActionButtonGroup-CiBHxsSk.js +33 -0
- package/dist/MultiActionButtonGroup-CiBHxsSk.js.map +1 -0
- package/dist/Navbar-t16usFZQ.js +322 -0
- package/dist/Navbar-t16usFZQ.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-0_1OBzaZ.js +153 -0
- package/dist/PageToolbar-0_1OBzaZ.js.map +1 -0
- package/dist/Pagination-CM_Rszz-.js +70 -0
- package/dist/Pagination-CM_Rszz-.js.map +1 -0
- package/dist/Popconfirm-BGe1jLov.js +170 -0
- package/dist/Popconfirm-BGe1jLov.js.map +1 -0
- package/dist/Popover-Ca0V6AD1.js +92 -0
- package/dist/Popover-Ca0V6AD1.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-D2fcOv7E.js +102 -0
- package/dist/SearchInput-D2fcOv7E.js.map +1 -0
- package/dist/SectionNav--7bw2b6u.js +276 -0
- package/dist/SectionNav--7bw2b6u.js.map +1 -0
- package/dist/Select-4YX38G5h.js +181 -0
- package/dist/Select-4YX38G5h.js.map +1 -0
- package/dist/Sheet-BQrX8-h5.js +169 -0
- package/dist/Sheet-BQrX8-h5.js.map +1 -0
- package/dist/Sidebar-ROaR_AqC.js +799 -0
- package/dist/Sidebar-ROaR_AqC.js.map +1 -0
- package/dist/Slider-Da_3mS5v.js +127 -0
- package/dist/Slider-Da_3mS5v.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-EAihyqCt.js +74 -0
- package/dist/Tabs-EAihyqCt.js.map +1 -0
- package/dist/TextInput-BGed-V13.js +110 -0
- package/dist/TextInput-BGed-V13.js.map +1 -0
- package/dist/ThemeProvider-QncUrfJn.js +203 -0
- package/dist/ThemeProvider-QncUrfJn.js.map +1 -0
- package/dist/TimePicker-B_NegL-7.js +98 -0
- package/dist/TimePicker-B_NegL-7.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-DG9PnAm8.js +248 -0
- package/dist/ZoomableSvg-DG9PnAm8.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/constants-D6JcsD4_.d.ts +41 -0
- package/dist/context-KxxeMHbR.js +62 -0
- package/dist/context-KxxeMHbR.js.map +1 -0
- package/dist/editors.d.ts +180 -173
- package/dist/editors.js +747 -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 +6183 -9885
- package/dist/index.js +112 -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.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 +187 -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 +33 -34
- package/dist/rjsf.js +1541 -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/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 +8 -8
- 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 @@
|
|
|
1
|
+
{"version":3,"file":"useMergeDiff-CvowEXJ1.js","names":[],"sources":["../src/components/MergeEditor/helpers.ts","../src/components/MergeEditor/useMergeDiff.ts"],"sourcesContent":["import { diffLines } from 'diff';\n\nimport { type ChangeClassification, CHUNK_TYPE, type DiffChunk } from './constants';\n\n/**\n * Computes diff chunks between oldText and newText using line-level diffing.\n * Adjacent removed+added pairs are kept as separate chunks so the consumer\n * can pair them into \"modifications\" for accept controls.\n */\nexport const computeDiffChunks = (oldText: string, newText: string): DiffChunk[] => {\n const changes = diffLines(oldText, newText);\n const chunks: DiffChunk[] = [];\n let oldLine = 1;\n let newLine = 1;\n\n for (const change of changes) {\n if (change.value === '') continue;\n\n const lineCount = change.count || change.value.replace(/\\n$/, '').split('\\n').length;\n\n if (change.removed) {\n // newStart/newEnd anchor to the current new-side position (insertion point) for alignment\n chunks.push({\n type: CHUNK_TYPE.REMOVED,\n value: change.value,\n oldStart: oldLine,\n oldEnd: oldLine + lineCount - 1,\n newStart: newLine,\n newEnd: newLine,\n });\n oldLine += lineCount;\n } else if (change.added) {\n // oldStart/oldEnd anchor to the current old-side position (insertion point) for alignment\n chunks.push({\n type: CHUNK_TYPE.ADDED,\n value: change.value,\n oldStart: oldLine,\n oldEnd: oldLine,\n newStart: newLine,\n newEnd: newLine + lineCount - 1,\n });\n newLine += lineCount;\n } else {\n chunks.push({\n type: CHUNK_TYPE.UNCHANGED,\n value: change.value,\n oldStart: oldLine,\n oldEnd: oldLine + lineCount - 1,\n newStart: newLine,\n newEnd: newLine + lineCount - 1,\n });\n oldLine += lineCount;\n newLine += lineCount;\n }\n }\n\n return chunks;\n};\n\n/**\n * Collects 1-indexed line numbers that are marked as changed (added or removed)\n * from a set of diff chunks. `side` determines which line range to use.\n */\nexport const getChangedLineNumbers = (chunks: DiffChunk[], side: 'old' | 'new'): Set<number> => {\n const lines = new Set<number>();\n\n for (const chunk of chunks) {\n if (chunk.type === CHUNK_TYPE.UNCHANGED) continue;\n\n if (side === 'old' && chunk.type === CHUNK_TYPE.REMOVED) {\n for (let i = chunk.oldStart; i <= chunk.oldEnd; i++) lines.add(i);\n }\n if (side === 'new' && chunk.type === CHUNK_TYPE.ADDED) {\n for (let i = chunk.newStart; i <= chunk.newEnd; i++) lines.add(i);\n }\n }\n\n return lines;\n};\n\n/**\n * Filters changed line numbers, keeping only those that are classified\n * and not suppressed (resolved/dismissed).\n *\n * `classification` and `suppressedLines` must be keyed by line numbers\n * from the same `side` (old-side lines for 'old', new-side lines for 'new').\n */\nexport const filterHighlightedLines = (\n chunks: DiffChunk[],\n side: 'old' | 'new',\n classification: Map<number, ChangeClassification>,\n suppressedLines: Set<number>,\n): Set<number> => {\n const filtered = new Set<number>();\n for (const line of getChangedLineNumbers(chunks, side)) {\n if (classification.has(line) && !suppressedLines.has(line)) filtered.add(line);\n }\n return filtered;\n};\n\n/**\n * Replaces lines in `text` between `startLine` and `endLine` (1-indexed, inclusive)\n * with `replacementLines`. If startLine > endLine, inserts before startLine.\n */\nexport const replaceLines = (\n text: string,\n startLine: number,\n endLine: number,\n replacement: string,\n): string => {\n const lines = text.split('\\n');\n const before = lines.slice(0, startLine - 1);\n const after = startLine > endLine ? lines.slice(startLine - 1) : lines.slice(endLine);\n\n const replacementArr = replacement === '' ? [] : replacement.replace(/\\n$/, '').split('\\n');\n\n return [...before, ...replacementArr, ...after].join('\\n');\n};\n","import { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport { diff3Merge } from 'node-diff3';\n\nimport {\n CHANGE_CLASS,\n type ChangeClassification,\n CHUNK_TYPE,\n type DiffChunk,\n type MergeConflict,\n} from './constants';\nimport {\n computeDiffChunks,\n filterHighlightedLines,\n getChangedLineNumbers,\n replaceLines,\n} from './helpers';\n\nconst DEBOUNCE_MS = 150;\n\ntype ConflictPair = {\n id: string;\n leftStart: number;\n leftEnd: number;\n rightStart: number;\n rightEnd: number;\n};\n\ntype Side = 'left' | 'right';\n\nconst rangesOverlap = (s1: number, e1: number, s2: number, e2: number) => s1 <= e2 && e1 >= s2;\n\nconst computeSuppressedLines = (\n dismissedLines: Set<number>,\n pairs: ConflictPair[],\n resolvedIds: Set<string>,\n getRange: (p: ConflictPair) => [number, number],\n): Set<number> => {\n const lines = new Set(dismissedLines);\n for (const pair of pairs) {\n if (resolvedIds.has(pair.id)) {\n const [start, end] = getRange(pair);\n for (let i = start; i <= end; i++) lines.add(i);\n }\n }\n return lines;\n};\n\nconst filterVisibleConflicts = (\n conflicts: MergeConflict[],\n classification: Map<number, ChangeClassification>,\n dismissedLines: Set<number>,\n getRange: (c: MergeConflict) => [number, number],\n findPair: (c: MergeConflict) => ConflictPair | undefined,\n fullyResolvedPairIds: Set<string>,\n): MergeConflict[] =>\n conflicts.filter((c) => {\n const [start, end] = getRange(c);\n let hasClassifiedLine = false;\n let allDismissed = true;\n for (let i = start; i <= end; i++) {\n if (classification.has(i)) hasClassifiedLine = true;\n if (!dismissedLines.has(i)) allDismissed = false;\n }\n if (!hasClassifiedLine || allDismissed) return false;\n\n const pair = findPair(c);\n return !pair || !fullyResolvedPairIds.has(pair.id);\n });\n\nexport const useMergeDiff = (baseText: string, leftText: string, rightText: string) => {\n const [mergeValue, setMergeValue] = useState(baseText);\n const debounceRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const [debouncedMergeValue, setDebouncedMergeValue] = useState(mergeValue);\n const [acceptedPairSides, setAcceptedPairSides] = useState<Map<string, Set<Side>>>(\n () => new Map(),\n );\n const [dismissedLeftLines, setDismissedLeftLines] = useState<Set<number>>(() => new Set());\n const [dismissedRightLines, setDismissedRightLines] = useState<Set<number>>(() => new Set());\n\n const reset = useCallback(() => {\n if (debounceRef.current) {\n clearTimeout(debounceRef.current);\n debounceRef.current = null;\n }\n\n setMergeValue(baseText);\n setDebouncedMergeValue(baseText);\n setAcceptedPairSides(new Map());\n setDismissedLeftLines(new Set());\n setDismissedRightLines(new Set());\n }, [baseText]);\n\n // Reset all state when input texts change (e.g. async data arrives).\n // useLayoutEffect prevents a one-frame flash of incorrect diff rendering\n // when mergeValue is still '' but the real texts have arrived.\n useLayoutEffect(() => {\n reset();\n }, [baseText, leftText, rightText]); // eslint-disable-line react-hooks/exhaustive-deps\n\n // Clean up debounce timer on unmount\n useEffect(() => {\n return () => {\n if (debounceRef.current) clearTimeout(debounceRef.current);\n };\n }, []);\n\n const handleMergeChange = useCallback((value: string) => {\n setMergeValue(value);\n\n if (debounceRef.current) {\n clearTimeout(debounceRef.current);\n }\n\n debounceRef.current = setTimeout(() => {\n setDebouncedMergeValue(value);\n }, DEBOUNCE_MS);\n }, []);\n\n // diff(production, mergeResult) — highlights for left pane\n const leftDiffChunks = useMemo(\n () => computeDiffChunks(leftText, debouncedMergeValue),\n [leftText, debouncedMergeValue],\n );\n\n // diff(mergeResult, branch) — highlights for right pane\n const rightDiffChunks = useMemo(\n () => computeDiffChunks(debouncedMergeValue, rightText),\n [debouncedMergeValue, rightText],\n );\n\n // Recompute conflict positions based on current merge value vs both sides\n const leftConflicts = useMemo(() => pairChunksIntoConflicts(leftDiffChunks), [leftDiffChunks]);\n\n const rightConflicts = useMemo(() => pairChunksIntoConflicts(rightDiffChunks), [rightDiffChunks]);\n\n // Base-vs-side diffs (stable unless source texts change)\n const leftVsBase = useMemo(() => computeDiffChunks(baseText, leftText), [baseText, leftText]);\n const rightVsBase = useMemo(() => computeDiffChunks(baseText, rightText), [baseText, rightText]);\n\n const { leftClassification, rightClassification, conflictPairs } = useMemo(() => {\n const baseLines = baseText.split('\\n');\n const leftLines = leftText.split('\\n');\n const rightLines = rightText.split('\\n');\n\n const result = diff3Merge(leftLines, baseLines, rightLines);\n\n const leftConflictLineSet = new Set<number>();\n const rightConflictLineSet = new Set<number>();\n const pairs: ConflictPair[] = [];\n\n for (const block of result) {\n if ('conflict' in block && block.conflict) {\n const { a, aIndex, b, bIndex } = block.conflict;\n for (let i = 0; i < a.length; i++) leftConflictLineSet.add(aIndex + i + 1);\n for (let i = 0; i < b.length; i++) rightConflictLineSet.add(bIndex + i + 1);\n\n pairs.push({\n id: `pair-${aIndex}-${bIndex}`,\n leftStart: aIndex + 1,\n leftEnd: aIndex + a.length,\n rightStart: bIndex + 1,\n rightEnd: bIndex + b.length,\n });\n }\n }\n\n const leftChanged = getChangedLineNumbers(leftVsBase, 'new');\n const rightChanged = getChangedLineNumbers(rightVsBase, 'new');\n\n const leftMap = new Map<number, ChangeClassification>();\n for (const line of leftChanged) {\n leftMap.set(line, leftConflictLineSet.has(line) ? CHANGE_CLASS.CONFLICT : CHANGE_CLASS.SAFE);\n }\n\n const rightMap = new Map<number, ChangeClassification>();\n for (const line of rightChanged) {\n rightMap.set(\n line,\n rightConflictLineSet.has(line) ? CHANGE_CLASS.CONFLICT : CHANGE_CLASS.SAFE,\n );\n }\n\n return {\n leftClassification: leftMap,\n rightClassification: rightMap,\n conflictPairs: pairs,\n };\n }, [baseText, leftText, rightText, leftVsBase, rightVsBase]);\n\n const findPairForLeft = useCallback(\n (conflict: MergeConflict) =>\n conflictPairs.find((p) =>\n rangesOverlap(conflict.oldStartLine, conflict.oldEndLine, p.leftStart, p.leftEnd),\n ),\n [conflictPairs],\n );\n\n const findPairForRight = useCallback(\n (conflict: MergeConflict) =>\n conflictPairs.find((p) =>\n rangesOverlap(conflict.newStartLine, conflict.newEndLine, p.rightStart, p.rightEnd),\n ),\n [conflictPairs],\n );\n\n const markSideAccepted = useCallback((pair: ConflictPair | undefined, side: Side) => {\n if (!pair) return;\n setAcceptedPairSides((prev) => {\n const next = new Map(prev);\n const sides = new Set(prev.get(pair.id) ?? []);\n sides.add(side);\n next.set(pair.id, sides);\n return next;\n });\n }, []);\n\n const isOtherSideAccepted = useCallback(\n (pair: ConflictPair | undefined, side: Side) => {\n if (!pair) return false;\n const otherSide = side === 'left' ? 'right' : 'left';\n return acceptedPairSides.get(pair.id)?.has(otherSide) ?? false;\n },\n [acceptedPairSides],\n );\n\n const acceptSide = useCallback(\n (conflict: MergeConflict, side: Side) => {\n const findPair = side === 'left' ? findPairForLeft : findPairForRight;\n const pair = findPair(conflict);\n const otherAccepted = isOtherSideAccepted(pair, side);\n const sourceValue = side === 'left' ? conflict.oldValue : conflict.newValue;\n const targetStart = side === 'left' ? conflict.newStartLine : conflict.oldStartLine;\n const targetEnd = side === 'left' ? conflict.newEndLine : conflict.oldEndLine;\n\n if (debounceRef.current) {\n clearTimeout(debounceRef.current);\n debounceRef.current = null;\n }\n\n const mergeTargetEmpty =\n side === 'left' ? conflict.newValue === '' : conflict.oldValue === '';\n const newValue = otherAccepted\n ? replaceLines(mergeValue, targetEnd + 1, targetEnd, sourceValue)\n : mergeTargetEmpty\n ? replaceLines(mergeValue, targetStart, targetStart - 1, sourceValue)\n : replaceLines(mergeValue, targetStart, targetEnd, sourceValue);\n\n setMergeValue(newValue);\n setDebouncedMergeValue(newValue);\n markSideAccepted(pair, side);\n\n if (!pair) {\n // Dismiss the source side-pane lines so the change doesn't reappear\n // if the user later edits the accepted text in the merge pane\n const setDismissedSide = side === 'left' ? setDismissedLeftLines : setDismissedRightLines;\n const [sideStart, sideEnd] =\n side === 'left'\n ? [conflict.oldStartLine, conflict.oldEndLine]\n : [conflict.newStartLine, conflict.newEndLine];\n\n setDismissedSide((prev) => {\n const next = new Set(prev);\n for (let i = sideStart; i <= sideEnd; i++) next.add(i);\n return next;\n });\n }\n },\n [mergeValue, findPairForLeft, findPairForRight, isOtherSideAccepted, markSideAccepted],\n );\n\n const acceptLeft = useCallback(\n (conflict: MergeConflict) => acceptSide(conflict, 'left'),\n [acceptSide],\n );\n\n const acceptRight = useCallback(\n (conflict: MergeConflict) => acceptSide(conflict, 'right'),\n [acceptSide],\n );\n\n const dismissSide = useCallback((conflict: MergeConflict, side: Side) => {\n const setDismissed = side === 'left' ? setDismissedLeftLines : setDismissedRightLines;\n const [sideStart, sideEnd] =\n side === 'left'\n ? [conflict.oldStartLine, conflict.oldEndLine]\n : [conflict.newStartLine, conflict.newEndLine];\n\n setDismissed((prev) => {\n const next = new Set(prev);\n for (let i = sideStart; i <= sideEnd; i++) next.add(i);\n return next;\n });\n }, []);\n\n const dismissLeft = useCallback(\n (conflict: MergeConflict) => dismissSide(conflict, 'left'),\n [dismissSide],\n );\n\n const dismissRight = useCallback(\n (conflict: MergeConflict) => dismissSide(conflict, 'right'),\n [dismissSide],\n );\n\n const fullyResolvedPairIds = useMemo(() => {\n const ids = new Set<string>();\n for (const pair of conflictPairs) {\n const leftAccepted = acceptedPairSides.get(pair.id)?.has('left') ?? false;\n const rightAccepted = acceptedPairSides.get(pair.id)?.has('right') ?? false;\n\n let leftDismissed = true;\n for (let i = pair.leftStart; i <= pair.leftEnd; i++) {\n if (!dismissedLeftLines.has(i)) {\n leftDismissed = false;\n break;\n }\n }\n\n let rightDismissed = true;\n for (let i = pair.rightStart; i <= pair.rightEnd; i++) {\n if (!dismissedRightLines.has(i)) {\n rightDismissed = false;\n break;\n }\n }\n\n if ((leftAccepted || leftDismissed) && (rightAccepted || rightDismissed)) {\n ids.add(pair.id);\n }\n }\n return ids;\n }, [conflictPairs, acceptedPairSides, dismissedLeftLines, dismissedRightLines]);\n\n const visibleLeftConflicts = useMemo(\n () =>\n filterVisibleConflicts(\n leftConflicts,\n leftClassification,\n dismissedLeftLines,\n (c) => [c.oldStartLine, c.oldEndLine],\n findPairForLeft,\n fullyResolvedPairIds,\n ),\n [leftConflicts, leftClassification, dismissedLeftLines, findPairForLeft, fullyResolvedPairIds],\n );\n\n const visibleRightConflicts = useMemo(\n () =>\n filterVisibleConflicts(\n rightConflicts,\n rightClassification,\n dismissedRightLines,\n (c) => [c.newStartLine, c.newEndLine],\n findPairForRight,\n fullyResolvedPairIds,\n ),\n [\n rightConflicts,\n rightClassification,\n dismissedRightLines,\n findPairForRight,\n fullyResolvedPairIds,\n ],\n );\n\n const suppressedLeftLines = useMemo(\n () =>\n computeSuppressedLines(dismissedLeftLines, conflictPairs, fullyResolvedPairIds, (p) => [\n p.leftStart,\n p.leftEnd,\n ]),\n [conflictPairs, fullyResolvedPairIds, dismissedLeftLines],\n );\n\n const suppressedRightLines = useMemo(\n () =>\n computeSuppressedLines(dismissedRightLines, conflictPairs, fullyResolvedPairIds, (p) => [\n p.rightStart,\n p.rightEnd,\n ]),\n [conflictPairs, fullyResolvedPairIds, dismissedRightLines],\n );\n\n const { mergeHighlightedLines, mergeClassification } = useMemo(() => {\n const mergeLeftLines = getChangedLineNumbers(leftDiffChunks, 'new');\n const mergeRightLines = getChangedLineNumbers(rightDiffChunks, 'old');\n\n const mergeLineToPair = new Map<number, string>();\n\n for (const conflict of leftConflicts) {\n const pair = findPairForLeft(conflict);\n if (pair) {\n for (let i = conflict.newStartLine; i <= conflict.newEndLine; i++) {\n mergeLineToPair.set(i, pair.id);\n }\n }\n }\n\n for (const conflict of rightConflicts) {\n const pair = findPairForRight(conflict);\n if (pair) {\n for (let i = conflict.oldStartLine; i <= conflict.oldEndLine; i++) {\n mergeLineToPair.set(i, pair.id);\n }\n }\n }\n\n // Derive suppressed merge lines from side-pane dismissals.\n // Side texts are static, so their line numbers never go stale.\n const suppressedMergeLines = new Set<number>();\n\n for (const conflict of leftConflicts) {\n if (findPairForLeft(conflict)) continue;\n if (conflict.oldStartLine > conflict.oldEndLine) continue;\n let allDismissed = true;\n for (let i = conflict.oldStartLine; i <= conflict.oldEndLine; i++) {\n if (!dismissedLeftLines.has(i)) {\n allDismissed = false;\n break;\n }\n }\n if (allDismissed) {\n for (let i = conflict.newStartLine; i <= conflict.newEndLine; i++) {\n suppressedMergeLines.add(i);\n }\n }\n }\n\n for (const conflict of rightConflicts) {\n if (findPairForRight(conflict)) continue;\n if (conflict.newStartLine > conflict.newEndLine) continue;\n let allDismissed = true;\n for (let i = conflict.newStartLine; i <= conflict.newEndLine; i++) {\n if (!dismissedRightLines.has(i)) {\n allDismissed = false;\n break;\n }\n }\n if (allDismissed) {\n for (let i = conflict.oldStartLine; i <= conflict.oldEndLine; i++) {\n suppressedMergeLines.add(i);\n }\n }\n }\n\n const allMergeLines = new Set<number>();\n for (const line of mergeLeftLines) allMergeLines.add(line);\n for (const line of mergeRightLines) allMergeLines.add(line);\n\n const highlighted = new Set<number>();\n const classification = new Map<number, ChangeClassification>();\n\n for (const line of allMergeLines) {\n if (suppressedMergeLines.has(line)) continue;\n\n const pairId = mergeLineToPair.get(line);\n if (pairId && fullyResolvedPairIds.has(pairId)) continue;\n\n highlighted.add(line);\n classification.set(line, pairId ? CHANGE_CLASS.CONFLICT : CHANGE_CLASS.SAFE);\n }\n\n return { mergeHighlightedLines: highlighted, mergeClassification: classification };\n }, [\n leftDiffChunks,\n rightDiffChunks,\n leftConflicts,\n rightConflicts,\n findPairForLeft,\n findPairForRight,\n fullyResolvedPairIds,\n dismissedLeftLines,\n dismissedRightLines,\n ]);\n\n const leftHighlightedLines = useMemo(\n () => filterHighlightedLines(leftDiffChunks, 'old', leftClassification, suppressedLeftLines),\n [leftDiffChunks, leftClassification, suppressedLeftLines],\n );\n\n const rightHighlightedLines = useMemo(\n () => filterHighlightedLines(rightDiffChunks, 'new', rightClassification, suppressedRightLines),\n [rightDiffChunks, rightClassification, suppressedRightLines],\n );\n\n const remainingSafeChanges = useMemo(() => {\n const leftSafe = visibleLeftConflicts.filter((c) => !findPairForLeft(c)).length;\n const rightSafe = visibleRightConflicts.filter((c) => !findPairForRight(c)).length;\n return leftSafe + rightSafe;\n }, [visibleLeftConflicts, visibleRightConflicts, findPairForLeft, findPairForRight]);\n\n return {\n mergeValue,\n handleMergeChange,\n leftConflicts: visibleLeftConflicts,\n rightConflicts: visibleRightConflicts,\n leftHighlightedLines,\n rightHighlightedLines,\n leftClassification,\n rightClassification,\n mergeHighlightedLines,\n mergeClassification,\n acceptLeft,\n acceptRight,\n dismissLeft,\n dismissRight,\n totalConflicts: conflictPairs.length,\n resolvedConflicts: fullyResolvedPairIds.size,\n remainingSafeChanges,\n isDirty: mergeValue !== baseText || dismissedLeftLines.size > 0 || dismissedRightLines.size > 0,\n reset,\n };\n};\n\n/**\n * Pairs adjacent removed+added chunks into MergeConflicts.\n * A standalone REMOVED or ADDED chunk becomes a conflict with\n * the other side empty.\n */\nconst pairChunksIntoConflicts = (chunks: DiffChunk[]): MergeConflict[] => {\n const conflicts: MergeConflict[] = [];\n let i = 0;\n\n while (i < chunks.length) {\n const chunk = chunks[i]!;\n\n if (chunk.type === CHUNK_TYPE.UNCHANGED) {\n i++;\n continue;\n }\n\n if (chunk.type === CHUNK_TYPE.REMOVED) {\n const next = chunks[i + 1];\n\n if (next?.type === CHUNK_TYPE.ADDED) {\n conflicts.push({\n id: `${chunk.oldStart}-${next.newStart}`,\n oldValue: chunk.value,\n oldStartLine: chunk.oldStart,\n oldEndLine: chunk.oldEnd,\n newValue: next.value,\n newStartLine: next.newStart,\n newEndLine: next.newEnd,\n });\n i += 2;\n } else {\n conflicts.push({\n id: `${chunk.oldStart}-del`,\n oldValue: chunk.value,\n oldStartLine: chunk.oldStart,\n oldEndLine: chunk.oldEnd,\n newValue: '',\n newStartLine: chunk.newStart,\n newEndLine: chunk.newStart,\n });\n i++;\n }\n } else {\n conflicts.push({\n id: `add-${chunk.newStart}`,\n oldValue: '',\n oldStartLine: chunk.oldStart,\n oldEndLine: chunk.oldStart,\n newValue: chunk.value,\n newStartLine: chunk.newStart,\n newEndLine: chunk.newEnd,\n });\n i++;\n }\n }\n\n return conflicts;\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
import { cn } from "./classNames-BzrkDnOD.js";
|
|
2
|
+
import { useArgoDesign } from "./context-KxxeMHbR.js";
|
|
3
|
+
import { Slot } from "@radix-ui/react-slot";
|
|
4
|
+
import { useEffect, useState } from "react";
|
|
5
|
+
import { Content, Portal, Provider, Root as Root$1, Trigger } from "@radix-ui/react-tooltip";
|
|
6
|
+
import { cva } from "class-variance-authority";
|
|
7
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
8
|
+
//#region src/utils/copyToClipboard.ts
|
|
9
|
+
/**
|
|
10
|
+
* The async Clipboard API requires the document to be focused and rejects with
|
|
11
|
+
* `NotAllowedError: Document is not focused` otherwise — which is the normal state
|
|
12
|
+
* for a page inside an iframe that has not taken focus, such as Storybook's canvas
|
|
13
|
+
* or an embedded preview. `execCommand` has no such requirement because it copies
|
|
14
|
+
* the selection of a node we focus ourselves, so it covers that gap.
|
|
15
|
+
*/
|
|
16
|
+
const copyViaSelection = (text) => {
|
|
17
|
+
const node = document.createElement("textarea");
|
|
18
|
+
node.value = text;
|
|
19
|
+
node.setAttribute("readonly", "");
|
|
20
|
+
node.style.cssText = "position:fixed;top:0;left:0;opacity:0";
|
|
21
|
+
document.body.append(node);
|
|
22
|
+
node.select();
|
|
23
|
+
try {
|
|
24
|
+
return document.execCommand("copy");
|
|
25
|
+
} finally {
|
|
26
|
+
node.remove();
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
const copyToClipboard = async (text) => {
|
|
30
|
+
try {
|
|
31
|
+
await navigator.clipboard.writeText(text);
|
|
32
|
+
} catch (error) {
|
|
33
|
+
if (!copyViaSelection(text)) throw error;
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
//#endregion
|
|
37
|
+
//#region src/utils/createChangeInputEvent.ts
|
|
38
|
+
const createChangeInputEvent = (input) => {
|
|
39
|
+
const changeEvent = {
|
|
40
|
+
target: input,
|
|
41
|
+
currentTarget: input,
|
|
42
|
+
type: "change",
|
|
43
|
+
nativeEvent: new Event("change", { bubbles: true }),
|
|
44
|
+
bubbles: true,
|
|
45
|
+
cancelable: false,
|
|
46
|
+
defaultPrevented: false,
|
|
47
|
+
eventPhase: 2,
|
|
48
|
+
isTrusted: false,
|
|
49
|
+
preventDefault: () => {},
|
|
50
|
+
isDefaultPrevented: () => false,
|
|
51
|
+
stopPropagation: () => {},
|
|
52
|
+
isPropagationStopped: () => false,
|
|
53
|
+
persist: () => {},
|
|
54
|
+
timeStamp: Date.now()
|
|
55
|
+
};
|
|
56
|
+
Object.defineProperty(changeEvent, "target", {
|
|
57
|
+
value: input,
|
|
58
|
+
writable: false
|
|
59
|
+
});
|
|
60
|
+
return changeEvent;
|
|
61
|
+
};
|
|
62
|
+
//#endregion
|
|
63
|
+
//#region src/constants/keyCodes.ts
|
|
64
|
+
const keyCodes = {
|
|
65
|
+
ENTER: "Enter",
|
|
66
|
+
ESCAPE: "Escape",
|
|
67
|
+
SPACE: " "
|
|
68
|
+
};
|
|
69
|
+
//#endregion
|
|
70
|
+
//#region src/components/Tooltip/TooltipContent.tsx
|
|
71
|
+
const tooltipVariants = cva([
|
|
72
|
+
"tailwindcss-preflight",
|
|
73
|
+
"tw:inline-block",
|
|
74
|
+
"tw:break-anywhere",
|
|
75
|
+
"tw:max-h-96",
|
|
76
|
+
"tw:overflow-y-auto",
|
|
77
|
+
"tw:z-[1060]",
|
|
78
|
+
"tw:rounded",
|
|
79
|
+
"tw:bg-neutral-800",
|
|
80
|
+
"tw:text-white",
|
|
81
|
+
"tw:data-[argo=true]:rounded-2xl",
|
|
82
|
+
"tw:data-[argo=true]:border",
|
|
83
|
+
"tw:data-[argo=true]:border-solid",
|
|
84
|
+
"tw:data-[argo=true]:border-border",
|
|
85
|
+
"tw:data-[argo=true]:bg-popover",
|
|
86
|
+
"tw:data-[argo=true]:text-popover-foreground",
|
|
87
|
+
"tw:data-[argo=true]:shadow-md",
|
|
88
|
+
"tw:data-[argo=true]:data-[state=delayed-open]:animate-in",
|
|
89
|
+
"tw:data-[argo=true]:data-[state=instant-open]:animate-in",
|
|
90
|
+
"tw:data-[argo=true]:data-[state=delayed-open]:fade-in-0",
|
|
91
|
+
"tw:data-[argo=true]:data-[state=instant-open]:fade-in-0",
|
|
92
|
+
"tw:data-[argo=true]:data-[state=delayed-open]:zoom-in-95",
|
|
93
|
+
"tw:data-[argo=true]:data-[state=instant-open]:zoom-in-95",
|
|
94
|
+
"tw:data-[argo=true]:data-[state=closed]:animate-out",
|
|
95
|
+
"tw:data-[argo=true]:data-[state=closed]:fade-out-0",
|
|
96
|
+
"tw:data-[argo=true]:data-[state=closed]:zoom-out-95",
|
|
97
|
+
"tw:data-[argo=true]:data-[side=bottom]:slide-in-from-top-2",
|
|
98
|
+
"tw:data-[argo=true]:data-[side=left]:slide-in-from-right-2",
|
|
99
|
+
"tw:data-[argo=true]:data-[side=right]:slide-in-from-left-2",
|
|
100
|
+
"tw:data-[argo=true]:data-[side=top]:slide-in-from-bottom-2"
|
|
101
|
+
], {
|
|
102
|
+
defaultVariants: { variant: "action" },
|
|
103
|
+
variants: { variant: {
|
|
104
|
+
action: [
|
|
105
|
+
"tw:max-w-fit",
|
|
106
|
+
"tw:px-3",
|
|
107
|
+
"tw:py-2",
|
|
108
|
+
"tw:text-center",
|
|
109
|
+
"tw:text-xs",
|
|
110
|
+
"tw:font-medium",
|
|
111
|
+
"tw:uppercase",
|
|
112
|
+
"tw:tracking-wider",
|
|
113
|
+
"tw:[[data-brand=keboola]_&]:normal-case",
|
|
114
|
+
"tw:[[data-brand=keboola]_&]:tracking-normal"
|
|
115
|
+
],
|
|
116
|
+
explanatory: [
|
|
117
|
+
"tw:max-w-80",
|
|
118
|
+
"tw:px-4",
|
|
119
|
+
"tw:py-3",
|
|
120
|
+
"tw:text-left",
|
|
121
|
+
"tw:text-sm",
|
|
122
|
+
"tw:font-normal"
|
|
123
|
+
]
|
|
124
|
+
} }
|
|
125
|
+
});
|
|
126
|
+
const TooltipContent = ({ className, variant, keepOpenOnPointerDownOutside = false, children, onPointerDownOutside, sideOffset = 8, collisionPadding = 8, hideWhenDetached = true, placement = "right", ...rest }) => {
|
|
127
|
+
const renderArgo = useArgoDesign();
|
|
128
|
+
const handlePointerDownOutside = (event) => {
|
|
129
|
+
if (keepOpenOnPointerDownOutside) event.preventDefault();
|
|
130
|
+
onPointerDownOutside?.(event);
|
|
131
|
+
};
|
|
132
|
+
return /* @__PURE__ */ jsx(Portal, { children: /* @__PURE__ */ jsx(Content, {
|
|
133
|
+
...rest,
|
|
134
|
+
"data-tooltip-content": renderArgo ? void 0 : true,
|
|
135
|
+
"data-argo": renderArgo,
|
|
136
|
+
sideOffset,
|
|
137
|
+
collisionPadding,
|
|
138
|
+
onPointerDownOutside: handlePointerDownOutside,
|
|
139
|
+
className: tooltipVariants({
|
|
140
|
+
className,
|
|
141
|
+
variant
|
|
142
|
+
}),
|
|
143
|
+
hideWhenDetached,
|
|
144
|
+
side: placement,
|
|
145
|
+
children
|
|
146
|
+
}) });
|
|
147
|
+
};
|
|
148
|
+
//#endregion
|
|
149
|
+
//#region src/components/Tooltip/TooltipRoot.tsx
|
|
150
|
+
const DELAY_SHOW_TOOLTIP = 300;
|
|
151
|
+
const TooltipRoot = ({ children, delayDuration = DELAY_SHOW_TOOLTIP, ...rest }) => /* @__PURE__ */ jsx(Root$1, {
|
|
152
|
+
...rest,
|
|
153
|
+
delayDuration,
|
|
154
|
+
children
|
|
155
|
+
});
|
|
156
|
+
//#endregion
|
|
157
|
+
//#region src/components/Tooltip/TooltipTrigger.tsx
|
|
158
|
+
/**
|
|
159
|
+
* Radix stamps the tooltip's own open/closed `data-state` onto the trigger. Merged onto an
|
|
160
|
+
* `asChild` child that keeps a `data-state` of its own — `ToggleGroup.Item`, `Switch`, a `Tabs`
|
|
161
|
+
* trigger — it wins, because those primitives spread incoming props *after* their own attribute.
|
|
162
|
+
* The child then silently loses every `data-[state=…]` style it has, which is usually the only
|
|
163
|
+
* thing marking it as selected.
|
|
164
|
+
*
|
|
165
|
+
* The tooltip's trigger state is styled nowhere, so it is dropped before it reaches the child.
|
|
166
|
+
*/
|
|
167
|
+
const WithoutTooltipState = ({ children, ...props }) => {
|
|
168
|
+
const { "data-state": _tooltipState, ...rest } = props;
|
|
169
|
+
return /* @__PURE__ */ jsx(Slot, {
|
|
170
|
+
...rest,
|
|
171
|
+
children
|
|
172
|
+
});
|
|
173
|
+
};
|
|
174
|
+
const TooltipTrigger = ({ ref, children, className, keepOpenOnClick = false, onClick, onPointerDown, asChild, ...rest }) => {
|
|
175
|
+
const handleClick = (event) => {
|
|
176
|
+
if (keepOpenOnClick) event.preventDefault();
|
|
177
|
+
onClick?.(event);
|
|
178
|
+
};
|
|
179
|
+
const handlePointerDown = (event) => {
|
|
180
|
+
if (keepOpenOnClick) event.preventDefault();
|
|
181
|
+
onPointerDown?.(event);
|
|
182
|
+
};
|
|
183
|
+
return /* @__PURE__ */ jsx(Trigger, {
|
|
184
|
+
...rest,
|
|
185
|
+
asChild: true,
|
|
186
|
+
ref,
|
|
187
|
+
className: cn("tailwindcss-preflight", className),
|
|
188
|
+
onClick: handleClick,
|
|
189
|
+
onPointerDown: handlePointerDown,
|
|
190
|
+
children: asChild ? /* @__PURE__ */ jsx(WithoutTooltipState, { children }) : /* @__PURE__ */ jsx("span", {
|
|
191
|
+
className: "tw:inline-flex tw:items-center",
|
|
192
|
+
children
|
|
193
|
+
})
|
|
194
|
+
});
|
|
195
|
+
};
|
|
196
|
+
//#endregion
|
|
197
|
+
//#region src/components/Tooltip/Tooltip.tsx
|
|
198
|
+
const ACTION_TOOLTIP_LIMIT = 30;
|
|
199
|
+
/** Re-export of Radix `Tooltip.Provider`. Mount once at the app root so tooltips share delay state. */
|
|
200
|
+
const TooltipProvider = Provider;
|
|
201
|
+
/**
|
|
202
|
+
* Short plain-text label that appears on hover or focus.
|
|
203
|
+
*
|
|
204
|
+
* **When to use:** describing an icon-only `Button`, explaining a disabled control, or labelling a
|
|
205
|
+
* truncated value. Plain text only — auto-switches to the longer `"explanatory"` variant when the string
|
|
206
|
+
* exceeds 30 characters.
|
|
207
|
+
* **When NOT to use:** for rich preview content (multiple lines, formatted text, structured data) use
|
|
208
|
+
* `HoverCard`; for tooltips containing links or buttons use `Popover` (interactive elements break a11y
|
|
209
|
+
* inside a `Tooltip`).
|
|
210
|
+
* **Composition:** wrap any focusable element via `triggerAsChild` so the tooltip targets the underlying
|
|
211
|
+
* native element. Mount `TooltipProvider` once at the app root.
|
|
212
|
+
*
|
|
213
|
+
* @see RECIPES.md#disabled-button-tooltip — for the disabled-button + tooltip pattern
|
|
214
|
+
*/
|
|
215
|
+
const Tooltip = ({ tooltip, children, className, keepOpenOnTriggerClick = false, variant, placement = "right", forceHide = false, forceShow = false, delayDuration, triggerAsChild = false }) => {
|
|
216
|
+
const [open, setOpen] = useState(false);
|
|
217
|
+
const resolvedVariant = (() => {
|
|
218
|
+
if (!!variant) return variant;
|
|
219
|
+
if (typeof tooltip === "string" && tooltip.length > ACTION_TOOLTIP_LIMIT) return "explanatory";
|
|
220
|
+
return "action";
|
|
221
|
+
})();
|
|
222
|
+
const isActionVariant = resolvedVariant === "action";
|
|
223
|
+
const handleKeyUp = (event) => {
|
|
224
|
+
if (![keyCodes.ENTER, keyCodes.SPACE].includes(event.key)) return;
|
|
225
|
+
event.stopPropagation();
|
|
226
|
+
};
|
|
227
|
+
return /* @__PURE__ */ jsxs(TooltipRoot, {
|
|
228
|
+
open: !!tooltip && (open || forceShow) && !forceHide,
|
|
229
|
+
onOpenChange: setOpen,
|
|
230
|
+
delayDuration,
|
|
231
|
+
disableHoverableContent: isActionVariant,
|
|
232
|
+
children: [/* @__PURE__ */ jsx(TooltipTrigger, {
|
|
233
|
+
asChild: triggerAsChild,
|
|
234
|
+
keepOpenOnClick: keepOpenOnTriggerClick,
|
|
235
|
+
onKeyUp: handleKeyUp,
|
|
236
|
+
children
|
|
237
|
+
}), /* @__PURE__ */ jsx(TooltipContent, {
|
|
238
|
+
className,
|
|
239
|
+
variant: resolvedVariant,
|
|
240
|
+
placement,
|
|
241
|
+
keepOpenOnPointerDownOutside: keepOpenOnTriggerClick,
|
|
242
|
+
children: tooltip
|
|
243
|
+
})]
|
|
244
|
+
});
|
|
245
|
+
};
|
|
246
|
+
Tooltip.Root = TooltipRoot;
|
|
247
|
+
Tooltip.Content = TooltipContent;
|
|
248
|
+
Tooltip.Trigger = TooltipTrigger;
|
|
249
|
+
//#endregion
|
|
250
|
+
//#region src/utils/decorators.tsx
|
|
251
|
+
const withTooltipProvider = (Story) => /* @__PURE__ */ jsx(TooltipProvider, { children: /* @__PURE__ */ jsx(Story, {}) });
|
|
252
|
+
const withHiddenFullscreen = (Story) => /* @__PURE__ */ jsx("div", {
|
|
253
|
+
className: "tw:[&_[aria-label=Fullscreen]]:hidden",
|
|
254
|
+
children: /* @__PURE__ */ jsx(Story, {})
|
|
255
|
+
});
|
|
256
|
+
//#endregion
|
|
257
|
+
//#region src/utils/createPrefixedString.ts
|
|
258
|
+
const createPrefixedString = (prefix) => (literals) => literals.reduce((acc, literal) => acc + literal, `${prefix}-`);
|
|
259
|
+
//#endregion
|
|
260
|
+
//#region src/utils/noop.ts
|
|
261
|
+
const noop = () => void 0;
|
|
262
|
+
//#endregion
|
|
263
|
+
//#region src/utils/debounce.ts
|
|
264
|
+
const debounce = (fn, delay) => {
|
|
265
|
+
let timeoutId;
|
|
266
|
+
const debounced = (...args) => {
|
|
267
|
+
clearTimeout(timeoutId);
|
|
268
|
+
timeoutId = setTimeout(() => fn(...args), delay);
|
|
269
|
+
};
|
|
270
|
+
debounced.cancel = () => clearTimeout(timeoutId);
|
|
271
|
+
return debounced;
|
|
272
|
+
};
|
|
273
|
+
//#endregion
|
|
274
|
+
//#region src/utils/isMac.ts
|
|
275
|
+
const getIsMac = () => {
|
|
276
|
+
if (typeof navigator !== "undefined" && "userAgentData" in navigator) {
|
|
277
|
+
const platform = navigator.userAgentData.platform;
|
|
278
|
+
if (typeof platform === "string") return platform.toLowerCase() === "macos";
|
|
279
|
+
}
|
|
280
|
+
if (typeof navigator !== "undefined" && typeof navigator.platform === "string") return navigator.platform.toUpperCase().indexOf("MAC") >= 0;
|
|
281
|
+
return false;
|
|
282
|
+
};
|
|
283
|
+
const isMac = getIsMac();
|
|
284
|
+
//#endregion
|
|
285
|
+
//#region src/utils/useSHA256.ts
|
|
286
|
+
const sha256 = async (text) => {
|
|
287
|
+
const msgUint8 = new TextEncoder().encode(text);
|
|
288
|
+
const hashBuffer = await crypto.subtle.digest("SHA-256", msgUint8);
|
|
289
|
+
return Array.from(new Uint8Array(hashBuffer)).map((b) => b.toString(16).padStart(2, "0")).join("");
|
|
290
|
+
};
|
|
291
|
+
const useSHA256 = (text) => {
|
|
292
|
+
const [hash, setHash] = useState("");
|
|
293
|
+
useEffect(() => {
|
|
294
|
+
if (!text) return;
|
|
295
|
+
let cancelled = false;
|
|
296
|
+
sha256(text).then((h) => {
|
|
297
|
+
if (!cancelled) setHash(h);
|
|
298
|
+
});
|
|
299
|
+
return () => {
|
|
300
|
+
cancelled = true;
|
|
301
|
+
};
|
|
302
|
+
}, [text]);
|
|
303
|
+
return text ? hash : "";
|
|
304
|
+
};
|
|
305
|
+
//#endregion
|
|
306
|
+
export { Tooltip, TooltipProvider, copyToClipboard, createChangeInputEvent, createPrefixedString, debounce, isMac, keyCodes, noop, useSHA256, withHiddenFullscreen, withTooltipProvider };
|
|
307
|
+
|
|
308
|
+
//# sourceMappingURL=utils-D0c5VAyF.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils-D0c5VAyF.js","names":["Root"],"sources":["../src/utils/copyToClipboard.ts","../src/utils/createChangeInputEvent.ts","../src/constants/keyCodes.ts","../src/components/Tooltip/TooltipContent.tsx","../src/components/Tooltip/TooltipRoot.tsx","../src/components/Tooltip/TooltipTrigger.tsx","../src/components/Tooltip/Tooltip.tsx","../src/utils/decorators.tsx","../src/utils/createPrefixedString.ts","../src/utils/noop.ts","../src/utils/debounce.ts","../src/utils/isMac.ts","../src/utils/useSHA256.ts"],"sourcesContent":["/**\n * The async Clipboard API requires the document to be focused and rejects with\n * `NotAllowedError: Document is not focused` otherwise — which is the normal state\n * for a page inside an iframe that has not taken focus, such as Storybook's canvas\n * or an embedded preview. `execCommand` has no such requirement because it copies\n * the selection of a node we focus ourselves, so it covers that gap.\n */\nconst copyViaSelection = (text: string) => {\n const node = document.createElement('textarea');\n node.value = text;\n node.setAttribute('readonly', '');\n node.style.cssText = 'position:fixed;top:0;left:0;opacity:0';\n document.body.append(node);\n node.select();\n\n try {\n return document.execCommand('copy');\n } finally {\n node.remove();\n }\n};\n\nexport const copyToClipboard = async (text: string) => {\n try {\n await navigator.clipboard.writeText(text);\n } catch (error) {\n if (!copyViaSelection(text)) throw error;\n }\n};\n","import type { ChangeEvent } from 'react';\n\nexport const createChangeInputEvent = (input: HTMLInputElement) => {\n const changeEvent: ChangeEvent<HTMLInputElement> = {\n target: input,\n currentTarget: input,\n type: 'change',\n nativeEvent: new Event('change', { bubbles: true }),\n bubbles: true,\n cancelable: false,\n defaultPrevented: false,\n eventPhase: 2, // AT_TARGET\n isTrusted: false, // Synthetic events are not trusted\n preventDefault: () => {}, // Provide dummy functions if not needed\n isDefaultPrevented: () => false,\n stopPropagation: () => {},\n isPropagationStopped: () => false,\n persist: () => {},\n timeStamp: Date.now(),\n };\n\n Object.defineProperty(changeEvent, 'target', {\n value: input,\n writable: false,\n });\n\n return changeEvent;\n};\n","export const keyCodes = {\n ENTER: 'Enter',\n ESCAPE: 'Escape',\n SPACE: ' ',\n};\n","import type { ComponentProps } from 'react';\nimport { Content, Portal } from '@radix-ui/react-tooltip';\nimport type { VariantProps } from 'class-variance-authority';\nimport { cva } from 'class-variance-authority';\n\nimport { useArgoDesign } from '../ThemeProvider/context';\n\nconst tooltipVariants = cva(\n [\n 'tailwindcss-preflight',\n 'tw:inline-block',\n 'tw:break-anywhere',\n 'tw:max-h-96',\n 'tw:overflow-y-auto',\n 'tw:z-[1060]',\n\n // legacy (dark) chrome — default\n 'tw:rounded',\n 'tw:bg-neutral-800',\n 'tw:text-white',\n\n // argo chrome overrides — semantic floating-panel tokens\n 'tw:data-[argo=true]:rounded-2xl',\n 'tw:data-[argo=true]:border',\n 'tw:data-[argo=true]:border-solid',\n 'tw:data-[argo=true]:border-border',\n 'tw:data-[argo=true]:bg-popover',\n 'tw:data-[argo=true]:text-popover-foreground',\n 'tw:data-[argo=true]:shadow-md',\n\n // argo open animation\n 'tw:data-[argo=true]:data-[state=delayed-open]:animate-in',\n 'tw:data-[argo=true]:data-[state=instant-open]:animate-in',\n 'tw:data-[argo=true]:data-[state=delayed-open]:fade-in-0',\n 'tw:data-[argo=true]:data-[state=instant-open]:fade-in-0',\n 'tw:data-[argo=true]:data-[state=delayed-open]:zoom-in-95',\n 'tw:data-[argo=true]:data-[state=instant-open]:zoom-in-95',\n\n // argo closed animation\n 'tw:data-[argo=true]:data-[state=closed]:animate-out',\n 'tw:data-[argo=true]:data-[state=closed]:fade-out-0',\n 'tw:data-[argo=true]:data-[state=closed]:zoom-out-95',\n\n // argo position animation\n 'tw:data-[argo=true]:data-[side=bottom]:slide-in-from-top-2',\n 'tw:data-[argo=true]:data-[side=left]:slide-in-from-right-2',\n 'tw:data-[argo=true]:data-[side=right]:slide-in-from-left-2',\n 'tw:data-[argo=true]:data-[side=top]:slide-in-from-bottom-2',\n ],\n {\n defaultVariants: {\n variant: 'action',\n },\n variants: {\n variant: {\n action: [\n 'tw:max-w-fit',\n 'tw:px-3',\n 'tw:py-2',\n\n 'tw:text-center',\n 'tw:text-xs',\n 'tw:font-medium',\n // Legacy chrome uppercases the action tooltip; the Keboola V2 brand\n // (`data-brand=\"keboola\"`) renders it in standard case instead.\n 'tw:uppercase',\n 'tw:tracking-wider',\n 'tw:[[data-brand=keboola]_&]:normal-case',\n 'tw:[[data-brand=keboola]_&]:tracking-normal',\n ],\n explanatory: [\n 'tw:max-w-80',\n 'tw:px-4',\n 'tw:py-3',\n 'tw:text-left',\n\n 'tw:text-sm',\n 'tw:font-normal',\n ],\n },\n },\n },\n);\n\ntype Props = {\n keepOpenOnPointerDownOutside?: boolean;\n placement?: ComponentProps<typeof Content>['side'];\n} & Omit<ComponentProps<typeof Content>, 'side'> &\n VariantProps<typeof tooltipVariants>;\n\nexport const TooltipContent = ({\n className,\n variant,\n keepOpenOnPointerDownOutside = false,\n children,\n onPointerDownOutside,\n sideOffset = 8,\n collisionPadding = 8,\n hideWhenDetached = true,\n placement = 'right',\n ...rest\n}: Props) => {\n const renderArgo = useArgoDesign();\n\n const handlePointerDownOutside: ComponentProps<typeof Content>['onPointerDownOutside'] = (\n event,\n ) => {\n if (keepOpenOnPointerDownOutside) event.preventDefault();\n onPointerDownOutside?.(event);\n };\n\n return (\n <Portal>\n <Content\n {...rest}\n // Marks the dark (non-argo) tooltip chrome so styles.css can invert\n // nested `.tw\\:prose` for contrast.\n data-tooltip-content={renderArgo ? undefined : true}\n data-argo={renderArgo}\n sideOffset={sideOffset}\n collisionPadding={collisionPadding}\n onPointerDownOutside={handlePointerDownOutside}\n className={tooltipVariants({ className, variant })}\n hideWhenDetached={hideWhenDetached}\n side={placement}\n >\n {children}\n </Content>\n </Portal>\n );\n};\n","import type { ComponentProps } from 'react';\nimport { Root } from '@radix-ui/react-tooltip';\n\ntype Props = ComponentProps<typeof Root>;\n\nconst DELAY_SHOW_TOOLTIP = 300;\n\nexport const TooltipRoot = ({ children, delayDuration = DELAY_SHOW_TOOLTIP, ...rest }: Props) => (\n <Root {...rest} delayDuration={delayDuration}>\n {children}\n </Root>\n);\n","import type { ComponentProps } from 'react';\nimport { Slot } from '@radix-ui/react-slot';\nimport { Trigger } from '@radix-ui/react-tooltip';\n\nimport { cn } from '../../utils';\n\n/**\n * Radix stamps the tooltip's own open/closed `data-state` onto the trigger. Merged onto an\n * `asChild` child that keeps a `data-state` of its own — `ToggleGroup.Item`, `Switch`, a `Tabs`\n * trigger — it wins, because those primitives spread incoming props *after* their own attribute.\n * The child then silently loses every `data-[state=…]` style it has, which is usually the only\n * thing marking it as selected.\n *\n * The tooltip's trigger state is styled nowhere, so it is dropped before it reaches the child.\n */\nconst WithoutTooltipState = ({\n children,\n ...props\n // `Slot`'s own props, plus the one attribute this exists to remove: React's types declare no\n // `data-*`, so it has to be named to be destructured away.\n}: ComponentProps<typeof Slot> & { 'data-state'?: string }) => {\n const { 'data-state': _tooltipState, ...rest } = props;\n\n return <Slot {...rest}>{children}</Slot>;\n};\n\ntype Props = {\n keepOpenOnClick?: boolean;\n} & ComponentProps<typeof Trigger>;\n\nexport const TooltipTrigger = ({\n ref,\n children,\n className,\n keepOpenOnClick = false,\n onClick,\n onPointerDown,\n asChild,\n ...rest\n}: Props) => {\n const handleClick: ComponentProps<typeof Trigger>['onClick'] = (event) => {\n if (keepOpenOnClick) event.preventDefault();\n onClick?.(event);\n };\n\n const handlePointerDown: ComponentProps<typeof Trigger>['onPointerDown'] = (event) => {\n if (keepOpenOnClick) event.preventDefault();\n onPointerDown?.(event);\n };\n\n return (\n <Trigger\n {...rest}\n asChild\n ref={ref}\n className={cn('tailwindcss-preflight', className)}\n onClick={handleClick}\n onPointerDown={handlePointerDown}\n >\n {asChild ? (\n <WithoutTooltipState>{children}</WithoutTooltipState>\n ) : (\n // Default-mode trigger wraps children in a span so Radix has a\n // single DOM element to attach handlers to. `tailwindcss-preflight`\n // (merged in via Slot) activates Tailwind's preflight inside the\n // span, which sets `svg { display: block }` — without an inline-flex\n // container that would stack any bare Lucide icon onto its own\n // line. `tw:inline-flex tw:items-center` keeps icon + text aligned.\n <span className=\"tw:inline-flex tw:items-center\">{children}</span>\n )}\n </Trigger>\n );\n};\n","import { useState } from 'react';\nimport type { ComponentProps, ReactNode } from 'react';\nimport type { Content, Trigger } from '@radix-ui/react-tooltip';\nimport { Provider } from '@radix-ui/react-tooltip';\n\nimport { keyCodes } from '../../constants/keyCodes';\n\nimport { TooltipContent } from './TooltipContent';\nimport { TooltipRoot } from './TooltipRoot';\nimport { TooltipTrigger } from './TooltipTrigger';\n\nconst ACTION_TOOLTIP_LIMIT = 30;\n\ntype TriggerProps = {\n triggerAsChild?: boolean;\n};\n\n/**\n * Props for `Tooltip`. `tooltip` is the popup content; `children` is the trigger element.\n * `variant` auto-resolves to `\"explanatory\"` for strings >30 chars, else `\"action\"`.\n */\nexport type Props = {\n /** Keep the tooltip visible when the user clicks the trigger (useful for click-to-copy feedback). */\n keepOpenOnTriggerClick?: boolean;\n /** Content rendered inside the tooltip. Plain text only — no interactive elements (use `HoverCard` or `Popover` for that). */\n tooltip: ReactNode;\n children: ReactNode;\n placement?: ComponentProps<typeof Content>['side'];\n /** Forcibly hide the tooltip regardless of hover state. */\n forceHide?: boolean;\n /** Forcibly show the tooltip regardless of hover state. Useful for guided-tour overlays. */\n forceShow?: boolean;\n /** Hover delay before the tooltip opens, in ms. Defaults to the shared 300ms. */\n delayDuration?: number;\n className?: string;\n} & TriggerProps &\n Pick<ComponentProps<typeof TooltipContent>, 'variant' | 'className'>;\n\n/** Re-export of Radix `Tooltip.Provider`. Mount once at the app root so tooltips share delay state. */\nexport const TooltipProvider = Provider;\n\n/**\n * Short plain-text label that appears on hover or focus.\n *\n * **When to use:** describing an icon-only `Button`, explaining a disabled control, or labelling a\n * truncated value. Plain text only — auto-switches to the longer `\"explanatory\"` variant when the string\n * exceeds 30 characters.\n * **When NOT to use:** for rich preview content (multiple lines, formatted text, structured data) use\n * `HoverCard`; for tooltips containing links or buttons use `Popover` (interactive elements break a11y\n * inside a `Tooltip`).\n * **Composition:** wrap any focusable element via `triggerAsChild` so the tooltip targets the underlying\n * native element. Mount `TooltipProvider` once at the app root.\n *\n * @see RECIPES.md#disabled-button-tooltip — for the disabled-button + tooltip pattern\n */\nexport const Tooltip = ({\n tooltip,\n children,\n className,\n keepOpenOnTriggerClick = false,\n variant,\n placement = 'right',\n forceHide = false,\n forceShow = false,\n delayDuration,\n // trigger props\n triggerAsChild = false,\n}: Props) => {\n const [open, setOpen] = useState(false);\n\n const resolvedVariant = (() => {\n if (!!variant) return variant;\n if (typeof tooltip === 'string' && tooltip.length > ACTION_TOOLTIP_LIMIT) return 'explanatory';\n\n return 'action';\n })();\n\n const isActionVariant = resolvedVariant === 'action';\n\n const handleKeyUp: ComponentProps<typeof Trigger>['onKeyUp'] = (event) => {\n if (![keyCodes.ENTER, keyCodes.SPACE].includes(event.key)) return;\n event.stopPropagation();\n };\n\n return (\n <TooltipRoot\n open={!!tooltip && (open || forceShow) && !forceHide}\n onOpenChange={setOpen}\n delayDuration={delayDuration}\n disableHoverableContent={isActionVariant}\n >\n <TooltipTrigger\n asChild={triggerAsChild}\n keepOpenOnClick={keepOpenOnTriggerClick}\n onKeyUp={handleKeyUp}\n >\n {children}\n </TooltipTrigger>\n\n <TooltipContent\n className={className}\n variant={resolvedVariant}\n placement={placement}\n keepOpenOnPointerDownOutside={keepOpenOnTriggerClick}\n >\n {tooltip}\n </TooltipContent>\n </TooltipRoot>\n );\n};\n\nTooltip.Root = TooltipRoot;\nTooltip.Content = TooltipContent;\nTooltip.Trigger = TooltipTrigger;\n","import type { ComponentType } from 'react';\n\nimport { TooltipProvider } from '../components/Tooltip';\n\nexport const withTooltipProvider = (Story: ComponentType) => (\n <TooltipProvider>\n <Story />\n </TooltipProvider>\n);\n\n// position:fixed only fills the Storybook iframe, not the browser window.\nexport const withHiddenFullscreen = (Story: ComponentType) => (\n <div className=\"tw:[&_[aria-label=Fullscreen]]:hidden\">\n <Story />\n </div>\n);\n","export const createPrefixedString = (prefix: string) => (literals: TemplateStringsArray) =>\n literals.reduce((acc, literal) => acc + literal, `${prefix}-`);\n","export const noop = () => void 0;\n","type DebouncedFn<T extends (...args: any[]) => void> = {\n (...args: Parameters<T>): void;\n cancel: () => void;\n};\n\nexport const debounce = <T extends (...args: any[]) => void>(\n fn: T,\n delay: number,\n): DebouncedFn<T> => {\n let timeoutId: ReturnType<typeof setTimeout>;\n const debounced = (...args: Parameters<T>) => {\n clearTimeout(timeoutId);\n timeoutId = setTimeout(() => fn(...args), delay);\n };\n debounced.cancel = () => clearTimeout(timeoutId);\n return debounced;\n};\n","// Platform detection\ntype NavigatorUAData = {\n platform: string;\n brands: { brand: string; version: string }[];\n mobile: boolean;\n};\n\nconst getIsMac = (): boolean => {\n // Modern approach using navigator.userAgentData\n if (typeof navigator !== 'undefined' && 'userAgentData' in navigator) {\n const platform = (navigator.userAgentData as NavigatorUAData).platform;\n\n if (typeof platform === 'string') {\n return platform.toLowerCase() === 'macos';\n }\n }\n\n if (typeof navigator !== 'undefined' && typeof navigator.platform === 'string') {\n return navigator.platform.toUpperCase().indexOf('MAC') >= 0;\n }\n\n // Server-side rendering fallback\n return false;\n};\n\nexport const isMac = getIsMac();\n","import { useEffect, useState } from 'react';\n\n// https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/digest#converting_a_digest_to_a_hex_string\nconst sha256 = async (text: string) => {\n const msgUint8 = new TextEncoder().encode(text);\n const hashBuffer = await crypto.subtle.digest('SHA-256', msgUint8);\n const hashArray = Array.from(new Uint8Array(hashBuffer));\n return hashArray.map((b) => b.toString(16).padStart(2, '0')).join('');\n};\n\nexport const useSHA256 = (text?: string) => {\n const [hash, setHash] = useState('');\n\n useEffect(() => {\n if (!text) return;\n let cancelled = false;\n sha256(text).then((h) => {\n if (!cancelled) setHash(h);\n });\n return () => {\n cancelled = true;\n };\n }, [text]);\n\n // Empty input has no hash — derive it during render instead of syncing state\n // in the effect (avoids the extra render and a stale-value frame).\n return text ? hash : '';\n};\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@keboola/design",
|
|
3
|
-
"version": "11.0.
|
|
3
|
+
"version": "11.0.1",
|
|
4
4
|
"description": "Keboola UI platform design system — shadcn-aligned React primitives, Keboola-branded blocks, and the form bindings built on TanStack Form.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -140,15 +140,15 @@
|
|
|
140
140
|
"storybook": "^10.2.19",
|
|
141
141
|
"tailwindcss": "^4.3.3",
|
|
142
142
|
"tailwindcss-scoped-preflight": "^4.0.6",
|
|
143
|
-
"
|
|
143
|
+
"tsdown": "^0.22.14",
|
|
144
144
|
"tsx": "^4.19.4",
|
|
145
145
|
"tw-animate-css": "^1.4.0",
|
|
146
146
|
"typescript": "npm:@typescript/typescript6@^6.0.2",
|
|
147
147
|
"vite": "^8.1.5",
|
|
148
148
|
"vitest": "^4.1.10",
|
|
149
|
-
"@keboola/
|
|
149
|
+
"@keboola/oxlint-config": "^10.0.1",
|
|
150
150
|
"@keboola/tsconfig": "^0.2.0",
|
|
151
|
-
"@keboola/
|
|
151
|
+
"@keboola/vitest-config": "^1.0.0"
|
|
152
152
|
},
|
|
153
153
|
"peerDependencies": {
|
|
154
154
|
"@testing-library/react": "^16.3.2",
|
|
@@ -233,18 +233,18 @@
|
|
|
233
233
|
"remark-gfm": "^4.0.1",
|
|
234
234
|
"sonner": "^2.0.7",
|
|
235
235
|
"tailwind-merge": "^3.6.0",
|
|
236
|
-
"@keboola/codemirror-lang-sql": "^0.7.
|
|
236
|
+
"@keboola/codemirror-lang-sql": "^0.7.1",
|
|
237
237
|
"@keboola/tailwind-config": "^1.1.0",
|
|
238
|
-
"@keboola/brand-registry": "^1.9.
|
|
238
|
+
"@keboola/brand-registry": "^1.9.2"
|
|
239
239
|
},
|
|
240
240
|
"scripts": {
|
|
241
241
|
"dev": "storybook dev -p \"${PORT:-6006}\"",
|
|
242
242
|
"build-storybook": "storybook build",
|
|
243
243
|
"transit": "pnpm build",
|
|
244
244
|
"build": "pnpm build:js && pnpm build:css",
|
|
245
|
-
"build:js": "
|
|
245
|
+
"build:js": "tsdown",
|
|
246
246
|
"build:css": "tailwindcss -i src/styles.css -o dist/styles.css --minify",
|
|
247
|
-
"build:check": "attw --pack . --profile esm-only --exclude-entrypoints ./styles ./styles/compiled ./theme",
|
|
247
|
+
"build:check": "node ../../tooling/check-dist-exports.mjs && attw --pack . --profile esm-only --exclude-entrypoints ./styles ./styles/compiled ./theme",
|
|
248
248
|
"test": "vitest run --config vite.config.ts --passWithNoTests --reporter=dot",
|
|
249
249
|
"test:stories": "vitest run --config vitest.config.ts",
|
|
250
250
|
"test:stories:coverage": "vitest run --config vitest.config.ts --coverage",
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
export { MermaidDiagram } from './chunk-MA6RRHDT.js';
|
|
2
|
-
import './chunk-SVBSNSD4.js';
|
|
3
|
-
import './chunk-SFFF2WQP.js';
|
|
4
|
-
import './chunk-PACNBKJV.js';
|
|
5
|
-
import './chunk-IIS7INHF.js';
|
|
6
|
-
import './chunk-FUFMVW7O.js';
|
|
7
|
-
import './chunk-7P6PLZ4B.js';
|
|
8
|
-
import './chunk-IXAYNBOY.js';
|
|
9
|
-
import './chunk-RQVK4IYC.js';
|
|
10
|
-
import './chunk-KR7NXXHC.js';
|
|
11
|
-
import './chunk-SWQFYNYG.js';
|
|
12
|
-
import './chunk-3W27OLK5.js';
|
|
13
|
-
import './chunk-MODE4QIA.js';
|
|
14
|
-
import './chunk-WETKNYZX.js';
|
|
15
|
-
import './chunk-LXLIQ2D6.js';
|
|
16
|
-
import './chunk-G3PMV62Z.js';
|
|
17
|
-
//# sourceMappingURL=MermaidDiagram-ZU5KAVRT.js.map
|
|
18
|
-
//# sourceMappingURL=MermaidDiagram-ZU5KAVRT.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"MermaidDiagram-ZU5KAVRT.js"}
|
package/dist/chunk-2YYJDKSP.js
DELETED
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import { Skeleton } from './chunk-PACNBKJV.js';
|
|
2
|
-
import { cn } from './chunk-LXLIQ2D6.js';
|
|
3
|
-
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
4
|
-
|
|
5
|
-
var duplicateArray = (arr, times) => {
|
|
6
|
-
return Array(times).fill(arr).flat();
|
|
7
|
-
};
|
|
8
|
-
var Item = ({
|
|
9
|
-
className,
|
|
10
|
-
iconHeight = "md",
|
|
11
|
-
rowHeight = "sm",
|
|
12
|
-
iconClassName = "tw:w-6 "
|
|
13
|
-
}) => /* @__PURE__ */ jsxs("div", { className: "tw:flex tw:items-center tw:gap-3", children: [
|
|
14
|
-
/* @__PURE__ */ jsx(Skeleton, { height: iconHeight, className: cn("tw:rounded-full tw:shrink-0", iconClassName) }),
|
|
15
|
-
/* @__PURE__ */ jsx(Skeleton, { height: rowHeight, className })
|
|
16
|
-
] });
|
|
17
|
-
var SkeletonList = ({
|
|
18
|
-
hasHeading = false,
|
|
19
|
-
groups = 3,
|
|
20
|
-
className,
|
|
21
|
-
iconHeight = "md",
|
|
22
|
-
rowHeight = "sm",
|
|
23
|
-
iconClassName
|
|
24
|
-
}) => /* @__PURE__ */ jsxs("div", { className: cn("tw:flex tw:flex-col tw:gap-4", className), children: [
|
|
25
|
-
hasHeading ? /* @__PURE__ */ jsx(Skeleton, { height: "xxs", className: "tw:w-28" }) : null,
|
|
26
|
-
/* @__PURE__ */ jsx(
|
|
27
|
-
"div",
|
|
28
|
-
{
|
|
29
|
-
className: cn(
|
|
30
|
-
"tw:flex tw:flex-col",
|
|
31
|
-
["xxs", "xs"].includes(rowHeight) ? "tw:gap-3" : "tw:gap-4"
|
|
32
|
-
),
|
|
33
|
-
children: duplicateArray(["tw:w-5/6", "tw:w-3/4", "tw:w-4/5", "tw:w-2/3"], groups).map(
|
|
34
|
-
(className2, index) => /* @__PURE__ */ jsx(
|
|
35
|
-
Item,
|
|
36
|
-
{
|
|
37
|
-
iconHeight,
|
|
38
|
-
rowHeight,
|
|
39
|
-
iconClassName,
|
|
40
|
-
className: className2
|
|
41
|
-
},
|
|
42
|
-
`${className2}-${index}`
|
|
43
|
-
)
|
|
44
|
-
)
|
|
45
|
-
}
|
|
46
|
-
)
|
|
47
|
-
] });
|
|
48
|
-
|
|
49
|
-
export { SkeletonList };
|
|
50
|
-
//# sourceMappingURL=chunk-2YYJDKSP.js.map
|
|
51
|
-
//# sourceMappingURL=chunk-2YYJDKSP.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Skeleton/SkeletonList.tsx"],"names":["className"],"mappings":";;;;AAKA,IAAM,cAAA,GAAiB,CAAC,GAAA,EAAe,KAAA,KAAkB;AACvD,EAAA,OAAO,MAAM,KAAK,CAAA,CAAE,IAAA,CAAK,GAAG,EAAE,IAAA,EAAK;AACrC,CAAA;AAEA,IAAM,OAAO,CAAC;AAAA,EACZ,SAAA;AAAA,EACA,UAAA,GAAa,IAAA;AAAA,EACb,SAAA,GAAY,IAAA;AAAA,EACZ,aAAA,GAAgB;AAClB,CAAA,qBAME,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kCAAA,EACb,QAAA,EAAA;AAAA,kBAAA,GAAA,CAAC,YAAS,MAAA,EAAQ,UAAA,EAAY,WAAW,EAAA,CAAG,6BAAA,EAA+B,aAAa,CAAA,EAAG,CAAA;AAAA,kBAC3F,GAAA,CAAC,QAAA,EAAA,EAAS,MAAA,EAAQ,SAAA,EAAW,SAAA,EAAsB;AAAA,CAAA,EACrD,CAAA;AAGK,IAAM,eAAe,CAAC;AAAA,EAC3B,UAAA,GAAa,KAAA;AAAA,EACb,MAAA,GAAS,CAAA;AAAA,EACT,SAAA;AAAA,EACA,UAAA,GAAa,IAAA;AAAA,EACb,SAAA,GAAY,IAAA;AAAA,EACZ;AACF,CAAA,0BAQG,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,8BAAA,EAAgC,SAAS,CAAA,EACzD,QAAA,EAAA;AAAA,EAAA,UAAA,uBAAc,QAAA,EAAA,EAAS,MAAA,EAAO,KAAA,EAAM,SAAA,EAAU,WAAU,CAAA,GAAK,IAAA;AAAA,kBAE9D,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,qBAAA;AAAA,QACA,CAAC,KAAA,EAAO,IAAI,EAAE,QAAA,CAAS,SAAS,IAAI,UAAA,GAAa;AAAA,OACnD;AAAA,MAEC,QAAA,EAAA,cAAA,CAAe,CAAC,UAAA,EAAY,UAAA,EAAY,YAAY,UAAU,CAAA,EAAG,MAAM,CAAA,CAAE,GAAA;AAAA,QACxE,CAACA,YAAW,KAAA,qBACV,GAAA;AAAA,UAAC,IAAA;AAAA,UAAA;AAAA,YAGC,UAAA;AAAA,YACA,SAAA;AAAA,YACA,aAAA;AAAA,YACA,SAAA,EAAWA;AAAA,WAAA;AAAA,UAJN,CAAA,EAAGA,UAAS,CAAA,CAAA,EAAI,KAAK,CAAA;AAAA;AAK5B;AAEJ;AAAA;AACF,CAAA,EACF","file":"chunk-2YYJDKSP.js","sourcesContent":["import { cn } from '../../utils';\n\nimport type { Height } from './Skeleton';\nimport { Skeleton } from './Skeleton';\n\nconst duplicateArray = (arr: string[], times: number) => {\n return Array(times).fill(arr).flat();\n};\n\nconst Item = ({\n className,\n iconHeight = 'md',\n rowHeight = 'sm',\n iconClassName = 'tw:w-6 ',\n}: {\n className: string;\n iconHeight?: Height;\n rowHeight?: Height;\n iconClassName?: string;\n}) => (\n <div className=\"tw:flex tw:items-center tw:gap-3\">\n <Skeleton height={iconHeight} className={cn('tw:rounded-full tw:shrink-0', iconClassName)} />\n <Skeleton height={rowHeight} className={className} />\n </div>\n);\n\nexport const SkeletonList = ({\n hasHeading = false,\n groups = 3,\n className,\n iconHeight = 'md',\n rowHeight = 'sm',\n iconClassName,\n}: {\n hasHeading?: boolean;\n groups?: number;\n className?: string;\n iconHeight?: Height;\n rowHeight?: Height;\n iconClassName?: string;\n}) => (\n <div className={cn('tw:flex tw:flex-col tw:gap-4', className)}>\n {hasHeading ? <Skeleton height=\"xxs\" className=\"tw:w-28\" /> : null}\n\n <div\n className={cn(\n 'tw:flex tw:flex-col',\n ['xxs', 'xs'].includes(rowHeight) ? 'tw:gap-3' : 'tw:gap-4',\n )}\n >\n {duplicateArray(['tw:w-5/6', 'tw:w-3/4', 'tw:w-4/5', 'tw:w-2/3'], groups).map(\n (className, index) => (\n <Item\n // oxlint-disable-next-line react/no-array-index-key\n key={`${className}-${index}`}\n iconHeight={iconHeight}\n rowHeight={rowHeight}\n iconClassName={iconClassName}\n className={className}\n />\n ),\n )}\n </div>\n </div>\n);\n"]}
|