@signalflare-ai/ui 1.2.0 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +77 -1
- package/ai/component-registry.json +208 -550
- package/ai/component-registry.md +3042 -3115
- package/ai/schemas.ts +504 -96
- package/dist/.build-complete +1 -1
- package/dist/ai/schemas.d.ts.map +1 -1
- package/dist/{ai-actions-BdUZI3Gk.js → ai-actions-CBfz5XEf.js} +4 -4
- package/dist/{ai-actions-BdUZI3Gk.js.map → ai-actions-CBfz5XEf.js.map} +1 -1
- package/dist/{ai-agent-card-BR2NIYhi.js → ai-agent-card-CByAUe0q.js} +3 -3
- package/dist/ai-agent-card-CByAUe0q.js.map +1 -0
- package/dist/{ai-approval-Ba7mrKba.js → ai-approval-Ci8N70a7.js} +4 -3
- package/dist/{ai-approval-Ba7mrKba.js.map → ai-approval-Ci8N70a7.js.map} +1 -1
- package/dist/{ai-code-block-CZtoL73R.js → ai-code-block-P9TJHvaC.js} +37 -39
- package/dist/ai-code-block-P9TJHvaC.js.map +1 -0
- package/dist/{ai-conversation-Cc7WlaBg.js → ai-conversation-Qslfdi1t.js} +28 -42
- package/dist/ai-conversation-Qslfdi1t.js.map +1 -0
- package/dist/{ai-info-banner-C7EWPBj7.js → ai-info-banner-B_9vtGK3.js} +3 -3
- package/dist/{ai-info-banner-C7EWPBj7.js.map → ai-info-banner-B_9vtGK3.js.map} +1 -1
- package/dist/{ai-message-Bp7L68U_.js → ai-message-Ci3gwM7G.js} +6 -6
- package/dist/{ai-message-Bp7L68U_.js.map → ai-message-Ci3gwM7G.js.map} +1 -1
- package/dist/{ai-mission-header-TiCJfTNt.js → ai-mission-header-CaBc19-t.js} +2 -2
- package/dist/{ai-mission-header-TiCJfTNt.js.map → ai-mission-header-CaBc19-t.js.map} +1 -1
- package/dist/{ai-part-group-DNb9I446.js → ai-part-group-Dx1Mr92B.js} +5 -4
- package/dist/ai-part-group-Dx1Mr92B.js.map +1 -0
- package/dist/{ai-prompt-input-BVvov_KF.js → ai-prompt-input-Bm4XoSj2.js} +19 -17
- package/dist/ai-prompt-input-Bm4XoSj2.js.map +1 -0
- package/dist/{ai-question-GPPMk7YM.js → ai-question-OyJovxGe.js} +4 -3
- package/dist/{ai-question-GPPMk7YM.js.map → ai-question-OyJovxGe.js.map} +1 -1
- package/dist/{ai-reasoning-_feFjk56.js → ai-reasoning-BLfBXx3F.js} +9 -5
- package/dist/ai-reasoning-BLfBXx3F.js.map +1 -0
- package/dist/{ai-response-CvjV3WhV.js → ai-response-hbVCZJmo.js} +2 -2
- package/dist/{ai-response-CvjV3WhV.js.map → ai-response-hbVCZJmo.js.map} +1 -1
- package/dist/{ai-shimmer-j6lKIrjj.js → ai-shimmer-BamNMNK3.js} +2 -2
- package/dist/{ai-shimmer-j6lKIrjj.js.map → ai-shimmer-BamNMNK3.js.map} +1 -1
- package/dist/{ai-status-badge-CSU_QOdz.js → ai-status-badge-BZLczdkI.js} +2 -2
- package/dist/{ai-status-badge-CSU_QOdz.js.map → ai-status-badge-BZLczdkI.js.map} +1 -1
- package/dist/{ai-streaming-text-IWW1BhvZ.js → ai-streaming-text-DgYu64UH.js} +1 -1
- package/dist/{ai-streaming-text-IWW1BhvZ.js.map → ai-streaming-text-DgYu64UH.js.map} +1 -1
- package/dist/{ai-subagent-JA4iIMW3.js → ai-subagent-p97AI1h9.js} +3 -3
- package/dist/{ai-subagent-JA4iIMW3.js.map → ai-subagent-p97AI1h9.js.map} +1 -1
- package/dist/{ai-suggestion-BdO6MBuH.js → ai-suggestion-Bj6vF7CT.js} +3 -3
- package/dist/{ai-suggestion-BdO6MBuH.js.map → ai-suggestion-Bj6vF7CT.js.map} +1 -1
- package/dist/{ai-task-list-DYw4R1FA.js → ai-task-list-C_UQYpk9.js} +6 -4
- package/dist/{ai-task-list-DYw4R1FA.js.map → ai-task-list-C_UQYpk9.js.map} +1 -1
- package/dist/{ai-timeline-C42tOUT8.js → ai-timeline-CePL1LOU.js} +3 -3
- package/dist/ai-timeline-CePL1LOU.js.map +1 -0
- package/dist/{ai-tool-03jOTwUI.js → ai-tool-CfRcwmHT.js} +17 -11
- package/dist/ai-tool-CfRcwmHT.js.map +1 -0
- package/dist/{ai-usage-bar-BRf5LC_b.js → ai-usage-bar-45pVRCGA.js} +2 -2
- package/dist/{ai-usage-bar-BRf5LC_b.js.map → ai-usage-bar-45pVRCGA.js.map} +1 -1
- package/dist/{badge-BheXjMc8.js → badge-Beb-6uut.js} +5 -5
- package/dist/{badge-BheXjMc8.js.map → badge-Beb-6uut.js.map} +1 -1
- package/dist/{banner-CcsjunJg.js → banner-CCEksxPg.js} +3 -3
- package/dist/{banner-CcsjunJg.js.map → banner-CCEksxPg.js.map} +1 -1
- package/dist/{breadcrumbs-CouSyy3H.js → breadcrumbs-HiTmgaZ4.js} +5 -5
- package/dist/{breadcrumbs-CouSyy3H.js.map → breadcrumbs-HiTmgaZ4.js.map} +1 -1
- package/dist/{button-CO6-qPax.js → button-BHOgXJRU.js} +4 -4
- package/dist/{button-CO6-qPax.js.map → button-BHOgXJRU.js.map} +1 -1
- package/dist/catalog.js +1 -1
- package/dist/catalog.js.map +1 -1
- package/dist/{chart-Dg0qUeSc.js → chart-B9FfZdKs.js} +7 -7
- package/dist/chart-B9FfZdKs.js.map +1 -0
- package/dist/{checkbox-D7p4QKsC.js → checkbox-Cy_OCyay.js} +3 -3
- package/dist/{checkbox-D7p4QKsC.js.map → checkbox-Cy_OCyay.js.map} +1 -1
- package/dist/{clipboard-text-kLaMogs3.js → clipboard-text-CKSvNp9L.js} +6 -5
- package/dist/clipboard-text-CKSvNp9L.js.map +1 -0
- package/dist/{cn-YROP2_ox.js → cn-CmAOpn49.js} +2 -2
- package/dist/{cn-YROP2_ox.js.map → cn-CmAOpn49.js.map} +1 -1
- package/dist/{code-BN8InC0G.js → code-JsQz-0G_.js} +4 -4
- package/dist/{code-BN8InC0G.js.map → code-JsQz-0G_.js.map} +1 -1
- package/dist/{collapsible-D_ueZ0jz.js → collapsible-1kOZ-89L.js} +2 -2
- package/dist/{collapsible-D_ueZ0jz.js.map → collapsible-1kOZ-89L.js.map} +1 -1
- package/dist/{combobox-B7TOK0U2.js → combobox-CQwDmqgA.js} +4 -4
- package/dist/{combobox-B7TOK0U2.js.map → combobox-CQwDmqgA.js.map} +1 -1
- package/dist/command-line/cli.js +3 -3
- package/dist/{command-palette-CuNUyJca.js → command-palette-Bkuv3e6o.js} +20 -5
- package/dist/command-palette-Bkuv3e6o.js.map +1 -0
- package/dist/components/ai-actions.js +1 -1
- package/dist/components/ai-agent-card.js +1 -1
- package/dist/components/ai-approval.js +1 -1
- package/dist/components/ai-code-block.js +1 -1
- package/dist/components/ai-conversation.js +1 -1
- package/dist/components/ai-info-banner.js +1 -1
- package/dist/components/ai-message.js +1 -1
- package/dist/components/ai-mission-header.js +1 -1
- package/dist/components/ai-part-group.js +1 -1
- package/dist/components/ai-prompt-input.js +1 -1
- package/dist/components/ai-question.js +1 -1
- package/dist/components/ai-reasoning.js +1 -1
- package/dist/components/ai-response.js +1 -1
- package/dist/components/ai-shimmer.js +1 -1
- package/dist/components/ai-status-badge.js +1 -1
- package/dist/components/ai-streaming-text.js +1 -1
- package/dist/components/ai-subagent.js +1 -1
- package/dist/components/ai-suggestion.js +1 -1
- package/dist/components/ai-task-list.js +1 -1
- package/dist/components/ai-timeline.js +1 -1
- package/dist/components/ai-tool.js +1 -1
- package/dist/components/ai-usage-bar.js +1 -1
- package/dist/components/badge.js +1 -1
- package/dist/components/banner.js +1 -1
- package/dist/components/breadcrumbs.js +1 -1
- package/dist/components/button.js +1 -1
- package/dist/components/chart.js +2 -2
- package/dist/components/checkbox.js +1 -1
- package/dist/components/clipboard-text.js +1 -1
- package/dist/components/code.js +1 -1
- package/dist/components/collapsible.js +1 -1
- package/dist/components/combobox.js +1 -1
- package/dist/components/command-palette.js +1 -1
- package/dist/components/data-grid.js +1 -1
- package/dist/components/date-picker.js +1 -1
- package/dist/components/date-range-picker.js +1 -1
- package/dist/components/dialog.js +1 -1
- package/dist/components/dropdown.js +1 -1
- package/dist/components/empty.js +1 -1
- package/dist/components/field.js +1 -1
- package/dist/components/filters.js +1 -1
- package/dist/components/flow.js +1 -1
- package/dist/components/grid.js +1 -1
- package/dist/components/input.js +2 -2
- package/dist/components/label.js +1 -1
- package/dist/components/layer-card.js +1 -1
- package/dist/components/link.js +3 -3
- package/dist/components/link.js.map +1 -1
- package/dist/components/loader.js +2 -2
- package/dist/components/menubar.js +1 -1
- package/dist/components/meter.js +1 -1
- package/dist/components/pagination.js +1 -1
- package/dist/components/popover.js +1 -1
- package/dist/components/radio.js +1 -1
- package/dist/components/select.js +1 -1
- package/dist/components/sensitive-input.js +1 -1
- package/dist/components/sidebar.js +1 -1
- package/dist/components/signalflare-ai-logo.js +1 -1
- package/dist/components/sparkline.js +1 -1
- package/dist/components/stat-card.js +1 -1
- package/dist/components/surface.js +1 -1
- package/dist/components/switch.js +1 -1
- package/dist/components/table.js +1 -1
- package/dist/components/tabs.js +1 -1
- package/dist/components/text-roll.js +1 -1
- package/dist/components/text.js +1 -1
- package/dist/components/theme-toggle.js +1 -1
- package/dist/components/toast.js +1 -1
- package/dist/components/tooltip.js +1 -1
- package/dist/components/use-agent-harness.js +1 -1
- package/dist/{data-grid-DGHmU0w3.js → data-grid-DDSFMHud.js} +136 -53
- package/dist/data-grid-DDSFMHud.js.map +1 -0
- package/dist/{date-picker--ox89RBy.js → date-picker-O34AqG3f.js} +2 -2
- package/dist/{date-picker--ox89RBy.js.map → date-picker-O34AqG3f.js.map} +1 -1
- package/dist/{date-range-picker-DVa7QBqE.js → date-range-picker-YKYvum_r.js} +29 -39
- package/dist/{date-range-picker-DVa7QBqE.js.map → date-range-picker-YKYvum_r.js.map} +1 -1
- package/dist/{dialog-Bv1oSFOd.js → dialog-DYqu4aDO.js} +3 -3
- package/dist/{dialog-Bv1oSFOd.js.map → dialog-DYqu4aDO.js.map} +1 -1
- package/dist/{dist-B6iWiWwp.js → dist-6AtBsaJE.js} +153 -47
- package/dist/dist-6AtBsaJE.js.map +1 -0
- package/dist/{dropdown-B_nrGXjV.js → dropdown-XzbnRLYR.js} +15 -5
- package/dist/dropdown-XzbnRLYR.js.map +1 -0
- package/dist/{echart-CdOUaT-r.js → echart-DGBIVAv1.js} +23 -57
- package/dist/{echart-CdOUaT-r.js.map → echart-DGBIVAv1.js.map} +1 -1
- package/dist/{empty-DZnN0zKX.js → empty-C1tAkawe.js} +6 -6
- package/dist/{empty-DZnN0zKX.js.map → empty-C1tAkawe.js.map} +1 -1
- package/dist/{field-B_yVof52.js → field-DBpFzzBS.js} +3 -3
- package/dist/{field-B_yVof52.js.map → field-DBpFzzBS.js.map} +1 -1
- package/dist/{filters-cpJCY21R.js → filters-SmEl93za.js} +10 -10
- package/dist/filters-SmEl93za.js.map +1 -0
- package/dist/{flow-B4v198ot.js → flow-BLzgbq1T.js} +6 -6
- package/dist/flow-BLzgbq1T.js.map +1 -0
- package/dist/genui.js +2 -2
- package/dist/genui.js.map +1 -1
- package/dist/{grid-CEd64Lnh.js → grid-CifjQL-5.js} +2 -2
- package/dist/{grid-CEd64Lnh.js.map → grid-CifjQL-5.js.map} +1 -1
- package/dist/{highlight-to-react-D0Yav4jk.js → highlight-to-react-DN9dUCS2.js} +9 -15
- package/dist/highlight-to-react-DN9dUCS2.js.map +1 -0
- package/dist/index.js +71 -71
- package/dist/index.js.map +1 -1
- package/dist/{input-ClB_E4Lb.js → input-COmx2M_R.js} +5 -5
- package/dist/{input-ClB_E4Lb.js.map → input-COmx2M_R.js.map} +1 -1
- package/dist/{input-B2bbijRh.js → input-GkfMQZC_.js} +3 -3
- package/dist/{input-B2bbijRh.js.map → input-GkfMQZC_.js.map} +1 -1
- package/dist/{label-DUv_urO1.js → label-CiGZ464N.js} +3 -3
- package/dist/{label-DUv_urO1.js.map → label-CiGZ464N.js.map} +1 -1
- package/dist/{layer-card-BK7eYfwn.js → layer-card-8l8GuLQr.js} +2 -2
- package/dist/{layer-card-BK7eYfwn.js.map → layer-card-8l8GuLQr.js.map} +1 -1
- package/dist/{layout-DJHMMap2.js → layout-CWBE0qwx.js} +258 -154
- package/dist/layout-CWBE0qwx.js.map +1 -0
- package/dist/{link-provider-BUZKXaNE.js → link-provider-BSn8YJon.js} +2 -2
- package/dist/link-provider-BSn8YJon.js.map +1 -0
- package/dist/{loader-DAcc-Uag.js → loader-BEMz8pJO.js} +1 -1
- package/dist/{loader-DAcc-Uag.js.map → loader-BEMz8pJO.js.map} +1 -1
- package/dist/{measured-text-BI3dTJmH.js → measured-text-CXkdw9Yr.js} +45 -30
- package/dist/measured-text-CXkdw9Yr.js.map +1 -0
- package/dist/{menubar-Cxf3xeAt.js → menubar-CoOr4ocj.js} +3 -3
- package/dist/{menubar-Cxf3xeAt.js.map → menubar-CoOr4ocj.js.map} +1 -1
- package/dist/{meter-BFFe9l5b.js → meter-Pf_VOl59.js} +2 -2
- package/dist/{meter-BFFe9l5b.js.map → meter-Pf_VOl59.js.map} +1 -1
- package/dist/{pagination-yS372Tr4.js → pagination-DSY279Ta.js} +2 -2
- package/dist/{pagination-yS372Tr4.js.map → pagination-DSY279Ta.js.map} +1 -1
- package/dist/{popover-SRoJaCZr.js → popover-BY-e9co1.js} +2 -2
- package/dist/{popover-SRoJaCZr.js.map → popover-BY-e9co1.js.map} +1 -1
- package/dist/{radio-BcwhwYNB.js → radio-DZwL13j0.js} +2 -2
- package/dist/{radio-BcwhwYNB.js.map → radio-DZwL13j0.js.map} +1 -1
- package/dist/{select-DMhdoHMa.js → select-BFifYqHA.js} +6 -6
- package/dist/{select-DMhdoHMa.js.map → select-BFifYqHA.js.map} +1 -1
- package/dist/{sensitive-input-CJUpIRal.js → sensitive-input-DHLZcM73.js} +4 -4
- package/dist/{sensitive-input-CJUpIRal.js.map → sensitive-input-DHLZcM73.js.map} +1 -1
- package/dist/{sidebar-D4zrlYpn.js → sidebar-odGsdvG4.js} +6 -7
- package/dist/sidebar-odGsdvG4.js.map +1 -0
- package/dist/{signalflare-ai-logo-Bipogceq.js → signalflare-ai-logo-CNaDT_w8.js} +2 -2
- package/dist/{signalflare-ai-logo-Bipogceq.js.map → signalflare-ai-logo-CNaDT_w8.js.map} +1 -1
- package/dist/{skeleton-line-CH1-h6e2.js → skeleton-line-CxxYVTO2.js} +2 -2
- package/dist/{skeleton-line-CH1-h6e2.js.map → skeleton-line-CxxYVTO2.js.map} +1 -1
- package/dist/{sparkline-DHmgj1d0.js → sparkline-BQ-4j2W2.js} +2 -2
- package/dist/{sparkline-DHmgj1d0.js.map → sparkline-BQ-4j2W2.js.map} +1 -1
- package/dist/src/blocks/agent-harness/agent-harness.tsx +11 -11
- package/dist/src/blocks/commander/commander.tsx +15 -15
- package/dist/src/blocks/map-block/map-block.d.ts.map +1 -1
- package/dist/src/blocks/map-block/map-block.tsx +11 -7
- package/dist/src/components/ai-approval/ai-approval.d.ts.map +1 -1
- package/dist/src/components/ai-code-block/ai-code-block.d.ts +14 -13
- package/dist/src/components/ai-code-block/ai-code-block.d.ts.map +1 -1
- package/dist/src/components/ai-conversation/ai-conversation.d.ts.map +1 -1
- package/dist/src/components/ai-part-group/ai-part-group.d.ts.map +1 -1
- package/dist/src/components/ai-prompt-input/ai-prompt-input.d.ts.map +1 -1
- package/dist/src/components/ai-prompt-input/controller.d.ts.map +1 -1
- package/dist/src/components/ai-prompt-input/types.d.ts.map +1 -1
- package/dist/src/components/ai-question/ai-question.d.ts.map +1 -1
- package/dist/src/components/ai-reasoning/ai-reasoning.d.ts.map +1 -1
- package/dist/src/components/ai-response/ai-response.d.ts.map +1 -1
- package/dist/src/components/ai-subagent/ai-subagent.d.ts.map +1 -1
- package/dist/src/components/ai-tool/ai-tool.d.ts.map +1 -1
- package/dist/src/components/chart/echart.d.ts.map +1 -1
- package/dist/src/components/clipboard-text/clipboard-text.d.ts.map +1 -1
- package/dist/src/components/data-grid/data-grid.d.ts +2 -1
- package/dist/src/components/data-grid/data-grid.d.ts.map +1 -1
- package/dist/src/components/data-grid/features.d.ts +20 -0
- package/dist/src/components/data-grid/features.d.ts.map +1 -0
- package/dist/src/components/data-grid/types.d.ts +38 -7
- package/dist/src/components/data-grid/types.d.ts.map +1 -1
- package/dist/src/components/filters/filters.d.ts.map +1 -1
- package/dist/src/components/flow/use-children.d.ts +1 -1
- package/dist/src/components/link/link.d.ts.map +1 -1
- package/dist/src/components/sidebar/sidebar.d.ts +1 -1
- package/dist/src/components/signalflare-ai-logo/signalflare-ai-logo.d.ts.map +1 -1
- package/dist/src/components/text/text.d.ts +2 -1
- package/dist/src/components/text/text.d.ts.map +1 -1
- package/dist/src/components/text-roll/text-roll.d.ts.map +1 -1
- package/dist/src/components/theme-toggle/theme-toggle.d.ts.map +1 -1
- package/dist/src/components/toast/toast.d.ts.map +1 -1
- package/dist/src/utils/highlight-to-react.d.ts.map +1 -1
- package/dist/src/utils/measured-text.d.ts.map +1 -1
- package/dist/src/utils/use-measured-text.d.ts.map +1 -1
- package/dist/{stat-card-Ew-ofzEm.js → stat-card-Bspk4XFr.js} +4 -4
- package/dist/stat-card-Bspk4XFr.js.map +1 -0
- package/dist/styles/sf-standalone.css +1 -1
- package/dist/styles/theme-fedramp.css +3 -12
- package/dist/styles/theme-minimal.css +26 -104
- package/dist/styles/theme-sf.css +37 -142
- package/dist/{surface-DGwRlC0o.js → surface-CWdSFVUx.js} +3 -3
- package/dist/{surface-DGwRlC0o.js.map → surface-CWdSFVUx.js.map} +1 -1
- package/dist/{switch-BxAMfHdt.js → switch-TA4cByCJ.js} +5 -5
- package/dist/switch-TA4cByCJ.js.map +1 -0
- package/dist/{table-BBeAtYVZ.js → table-BM8JBGBs.js} +3 -3
- package/dist/{table-BBeAtYVZ.js.map → table-BM8JBGBs.js.map} +1 -1
- package/dist/{tabs-CeHu7Scn.js → tabs-bnH2vGLv.js} +2 -2
- package/dist/{tabs-CeHu7Scn.js.map → tabs-bnH2vGLv.js.map} +1 -1
- package/dist/{text-Cqryz7rk.js → text-iQ0YUFNg.js} +4 -5
- package/dist/{text-Cqryz7rk.js.map → text-iQ0YUFNg.js.map} +1 -1
- package/dist/{text-roll-Ch52hcQj.js → text-roll-C3U2jd2u.js} +5 -2
- package/dist/text-roll-C3U2jd2u.js.map +1 -0
- package/dist/{theme-toggle-LDfIKEqx.js → theme-toggle-BTVxD-fD.js} +10 -9
- package/dist/theme-toggle-BTVxD-fD.js.map +1 -0
- package/dist/{toast-CaFQNYng.js → toast-CgZVaAkw.js} +3 -3
- package/dist/{toast-CaFQNYng.js.map → toast-CgZVaAkw.js.map} +1 -1
- package/dist/{tooltip-g9lFsvcT.js → tooltip-uobk6Oh-.js} +3 -3
- package/dist/{tooltip-g9lFsvcT.js.map → tooltip-uobk6Oh-.js.map} +1 -1
- package/dist/{use-agent-harness-BTcNJdw4.js → use-agent-harness-Dl8w6X5O.js} +3 -3
- package/dist/{use-agent-harness-BTcNJdw4.js.map → use-agent-harness-Dl8w6X5O.js.map} +1 -1
- package/dist/utils.js +3 -3
- package/package.json +27 -25
- package/scripts/component-registry/discovery.ts +11 -10
- package/scripts/component-registry/example-cleanup.ts +8 -8
- package/scripts/component-registry/index.ts +6 -6
- package/scripts/component-registry/schema-generator.ts +1 -1
- package/scripts/component-registry/sub-components.ts +35 -23
- package/scripts/component-registry/utils.ts +11 -11
- package/scripts/component-registry/variant-parser.ts +17 -15
- package/scripts/convert-demos-to-stories.ts +5 -5
- package/scripts/theme-generator/config.ts +1 -5
- package/scripts/theme-generator/generate-css.ts +1 -1
- package/scripts/theme-generator/migrate.ts +3 -3
- package/dist/ai-agent-card-BR2NIYhi.js.map +0 -1
- package/dist/ai-code-block-CZtoL73R.js.map +0 -1
- package/dist/ai-conversation-Cc7WlaBg.js.map +0 -1
- package/dist/ai-part-group-DNb9I446.js.map +0 -1
- package/dist/ai-prompt-input-BVvov_KF.js.map +0 -1
- package/dist/ai-reasoning-_feFjk56.js.map +0 -1
- package/dist/ai-timeline-C42tOUT8.js.map +0 -1
- package/dist/ai-tool-03jOTwUI.js.map +0 -1
- package/dist/chart-Dg0qUeSc.js.map +0 -1
- package/dist/clipboard-text-kLaMogs3.js.map +0 -1
- package/dist/command-palette-CuNUyJca.js.map +0 -1
- package/dist/data-grid-DGHmU0w3.js.map +0 -1
- package/dist/dist-B6iWiWwp.js.map +0 -1
- package/dist/dropdown-B_nrGXjV.js.map +0 -1
- package/dist/filters-cpJCY21R.js.map +0 -1
- package/dist/flow-B4v198ot.js.map +0 -1
- package/dist/highlight-to-react-D0Yav4jk.js.map +0 -1
- package/dist/layout-DJHMMap2.js.map +0 -1
- package/dist/link-provider-BUZKXaNE.js.map +0 -1
- package/dist/measured-text-BI3dTJmH.js.map +0 -1
- package/dist/sidebar-D4zrlYpn.js.map +0 -1
- package/dist/stat-card-Ew-ofzEm.js.map +0 -1
- package/dist/switch-BxAMfHdt.js.map +0 -1
- package/dist/text-roll-Ch52hcQj.js.map +0 -1
- package/dist/theme-toggle-LDfIKEqx.js.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { t as cn } from "./cn-
|
|
2
|
+
import { t as cn } from "./cn-CmAOpn49.js";
|
|
3
3
|
import { cloneElement, createContext, forwardRef, isValidElement, useCallback, useContext, useEffect, useId, useMemo, useRef, useState } from "react";
|
|
4
4
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
5
5
|
import { motion, useMotionTemplate, useMotionValue, useTransform } from "motion/react";
|
|
@@ -67,7 +67,7 @@ function createRoundedPath({ x1, y1, x2, y2 }, { cornerRadius: maxCornerRadius =
|
|
|
67
67
|
`L ${x2} ${pathEndY}`
|
|
68
68
|
].join(" ");
|
|
69
69
|
}
|
|
70
|
-
var Connectors = forwardRef(
|
|
70
|
+
var Connectors = forwardRef(({ connectors, children, ...pathProps }, svgRef) => {
|
|
71
71
|
const id = useId();
|
|
72
72
|
return /* @__PURE__ */ jsxs("svg", {
|
|
73
73
|
width: "100%",
|
|
@@ -162,7 +162,7 @@ function DescendantsProvider({ value, children }) {
|
|
|
162
162
|
* This allows callers to access the descendants data and register function.
|
|
163
163
|
*
|
|
164
164
|
* @returns The descendants context value
|
|
165
|
-
* @throws Error if used outside of DescendantsProvider
|
|
165
|
+
* @throws {Error} if used outside of DescendantsProvider
|
|
166
166
|
*/
|
|
167
167
|
function useDescendantsContext() {
|
|
168
168
|
const context = useContext(DescendantsContext);
|
|
@@ -460,7 +460,7 @@ function mergeRefs(...refs) {
|
|
|
460
460
|
});
|
|
461
461
|
};
|
|
462
462
|
}
|
|
463
|
-
var FlowNode = forwardRef(
|
|
463
|
+
var FlowNode = forwardRef(({ render, children }, ref) => {
|
|
464
464
|
const nodeRef = useRef(null);
|
|
465
465
|
const startAnchorRef = useRef(null);
|
|
466
466
|
const endAnchorRef = useRef(null);
|
|
@@ -523,7 +523,7 @@ var FlowNode = forwardRef(function FlowNode({ render, children }, ref) {
|
|
|
523
523
|
});
|
|
524
524
|
FlowNode.displayName = "Flow.Node";
|
|
525
525
|
var FlowNodeAnchorContext = createContext(null);
|
|
526
|
-
var FlowAnchor = forwardRef(
|
|
526
|
+
var FlowAnchor = forwardRef(({ type, render, children }, ref) => {
|
|
527
527
|
const context = useContext(FlowNodeAnchorContext);
|
|
528
528
|
const anchorRef = useRef(null);
|
|
529
529
|
if (!context) throw new Error("Flow.Anchor must be used within Flow.Node");
|
|
@@ -738,4 +738,4 @@ var Flow = Object.assign(FlowDiagram, {
|
|
|
738
738
|
//#endregion
|
|
739
739
|
export { Flow as t };
|
|
740
740
|
|
|
741
|
-
//# sourceMappingURL=flow-
|
|
741
|
+
//# sourceMappingURL=flow-BLzgbq1T.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flow-BLzgbq1T.js","names":[],"sources":["../src/components/flow/connectors.tsx","../src/components/flow/use-children.tsx","../src/components/flow/diagram.tsx","../src/components/flow/node.tsx","../src/components/flow/parallel.tsx","../src/components/flow/index.ts"],"sourcesContent":["import { forwardRef, useId, type ReactNode } from \"react\";\n\nexport interface Connector {\n x1: number;\n y1: number;\n x2: number;\n y2: number;\n isBottom?: boolean;\n}\n\ntype ConnectorsProps = {\n connectors: Connector[];\n children?: ReactNode;\n} & Omit<PathProps, \"isBottom\">;\n\ntype PathProps = Partial<{\n cornerRadius: number;\n midOffset: number;\n arrowheadOffset: number;\n isBottom: boolean;\n single: boolean;\n orientation: \"vertical\" | \"horizontal\";\n}>;\n\n/**\n * Maximum vertical/horizontal distance between anchor points where the line\n * would render as straight. Below this number, the line will be drawn as a\n * straight line.\n */\nconst FLAT_THRESHOLD = 2;\n\nexport function createRoundedPath(\n { x1, y1, x2, y2 }: { x1: number; y1: number; x2: number; y2: number },\n {\n cornerRadius: maxCornerRadius = 8,\n midOffset = 32,\n arrowheadOffset = 8,\n isBottom = false,\n single = false,\n orientation = \"vertical\",\n }: PathProps = {}\n) {\n /**\n * Cap the corner radius to half the vertical/horizontal distance between the\n * anchor points so the line still looks smooth even in small gaps.\n */\n const cornerRadius = Math.min(\n maxCornerRadius,\n Math.abs(orientation === \"horizontal\" ? (y2 - y1) / 2 : (x2 - x1) / 2)\n );\n if (orientation === \"horizontal\") {\n if (Math.abs(y2 - y1) <= FLAT_THRESHOLD)\n return `M ${x1} ${y1} L ${x2 - arrowheadOffset} ${y2}`;\n\n // Horizontal orientation: horizontal → vertical → horizontal\n // verticalOffset is used as horizontalOffset (distance from x2 where we turn)\n const verticalX = x2 - midOffset;\n const isGoingRight = x2 > x1;\n const horizontalSign = isGoingRight ? 1 : -1;\n const isGoingDown = y2 > y1;\n const verticalSign = isGoingDown ? 1 : -1;\n\n // First horizontal segment stops before the first corner\n const firstHorizontalEnd = verticalX - horizontalSign * cornerRadius;\n // Vertical segment starts after the first corner\n const verticalStart = y1 + verticalSign * cornerRadius;\n // Vertical segment stops before the second corner\n const verticalEnd = y2 - verticalSign * cornerRadius;\n // Second horizontal segment starts after the second corner\n const secondHorizontalStart = verticalX + horizontalSign * cornerRadius;\n // Path ends before the arrowhead (on x-axis)\n const pathEndX = x2 - horizontalSign * arrowheadOffset;\n\n const bottomCurveCommands = [\n `L ${firstHorizontalEnd} ${y1}`,\n `Q ${verticalX} ${y1} ${verticalX} ${verticalStart}`,\n `L ${verticalX} ${y2}`,\n ];\n\n const topCurveCommands = [\n single\n ? `L ${firstHorizontalEnd} ${y1} Q ${verticalX} ${y1} ${verticalX} ${verticalStart}`\n : `L ${verticalX} ${y1}`,\n `L ${verticalX} ${verticalEnd}`,\n `Q ${verticalX} ${y2} ${secondHorizontalStart} ${y2}`,\n ];\n\n const commands = [\n `M ${x1} ${y1}`,\n isBottom ? [...bottomCurveCommands] : [...topCurveCommands],\n `L ${pathEndX} ${y2}`,\n ];\n\n return commands.join(\" \");\n }\n\n if (Math.abs(x2 - x1) <= FLAT_THRESHOLD)\n return `M ${x1} ${y1} L ${x2} ${y2 - arrowheadOffset}`;\n\n // Vertical orientation: vertical → horizontal → vertical\n // Vertical offset before turning horizontally\n const horizontalY = y2 - midOffset;\n const isGoingRight = x2 > x1;\n const horizontalSign = isGoingRight ? 1 : -1;\n const isGoingDown = y2 > y1;\n const verticalSign = isGoingDown ? 1 : -1;\n\n // First vertical segment stops before the first corner (going down)\n const firstVerticalEnd = horizontalY - cornerRadius;\n // Horizontal segment starts after the first corner\n const horizontalStart = x1 + horizontalSign * cornerRadius;\n // Horizontal segment stops before the second corner\n const horizontalEnd = x2 - horizontalSign * cornerRadius;\n // Second vertical segment starts after the second corner (going down)\n const secondVerticalStart = horizontalY + cornerRadius;\n // Path ends before the arrowhead\n const pathEndY = y2 - verticalSign * arrowheadOffset;\n\n const bottomCurveCommands = [\n `L ${x1} ${firstVerticalEnd}`,\n `Q ${x1} ${horizontalY} ${horizontalStart} ${horizontalY}`,\n `L ${x2} ${horizontalY}`,\n ];\n\n const topCurveCommands = [\n `L ${x1} ${horizontalY}`,\n `L ${horizontalEnd} ${horizontalY}`,\n `Q ${x2} ${horizontalY} ${x2} ${secondVerticalStart}`,\n ];\n\n const commands = [\n `M ${x1} ${y1}`, // Move the cursor to the starting point\n isBottom ? [...bottomCurveCommands] : [...topCurveCommands],\n `L ${x2} ${pathEndY}`, // Draw the final line to the end point\n ];\n\n return commands.join(\" \");\n}\n\nexport const Connectors = forwardRef<SVGSVGElement, ConnectorsProps>(\n ({ connectors, children, ...pathProps }, svgRef) => {\n const id = useId();\n return (\n <svg\n width=\"100%\"\n height=\"100%\"\n aria-hidden=\"true\"\n className=\"text-sf-inactive overflow-visible\"\n ref={svgRef}\n >\n <defs>\n <marker\n id={id}\n markerWidth=\"8\"\n markerHeight=\"8\"\n refX=\"0\"\n refY=\"4\"\n orient=\"auto\"\n markerUnits=\"userSpaceOnUse\"\n >\n <path\n d=\"M 0,1.5 Q 0,0 1.5,0 Q 3.5,1 5.8,3.2 Q 6.5,4 5.8,4.8 Q 3.5,7 1.5,8 Q 0,8 0,6.5 Z\"\n fill=\"currentColor\"\n stroke=\"none\"\n />\n </marker>\n </defs>\n {connectors.map((connector, index) => {\n const path = createRoundedPath(connector, {\n isBottom: connector.isBottom,\n ...pathProps,\n });\n return (\n <path\n key={index}\n d={path}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n markerEnd={`url(#${id})`}\n data-index={index}\n />\n );\n })}\n {children}\n </svg>\n );\n }\n);\n","import {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n type ReactNode,\n} from \"react\";\n\n// ============================================================================\n// Types\n// ============================================================================\nexport type DescendantInfo<T = Record<string, unknown>> = {\n id: string;\n props: T;\n renderOrder: number;\n};\n\ntype DescendantsContextType<DescendantType = Record<string, unknown>> = {\n register: (\n id: string,\n renderOrder: number,\n props?: DescendantType\n ) => { unregister: () => void };\n descendants: DescendantInfo<DescendantType>[];\n claimRenderOrder: (id: string) => number;\n};\n\n// ============================================================================\n// Context\n// ============================================================================\n\nconst DescendantsContext = createContext<DescendantsContextType | null>(null);\n\n// ============================================================================\n// Hook\n// ============================================================================\n\n/**\n * Hook that manages descendant registration and provides access to all registered descendants.\n * This hook contains all the logic for tracking and managing descendants.\n *\n * @returns The descendants context value with register function and descendants array\n */\nexport function useDescendants<\n DescendantType extends Record<string, unknown>,\n>(): DescendantsContextType<DescendantType> {\n const [registeredDescendants, setRegisteredDescendants] = useState<\n DescendantInfo<DescendantType>[]\n >([]);\n const descendantsRef = useRef<Map<string, DescendantInfo<DescendantType>>>(\n new Map()\n );\n\n // Track render order - resets each render cycle\n const renderOrderCounterRef = useRef(0);\n const renderOrderMapRef = useRef<Map<string, number>>(new Map());\n\n // Reset counter at the start of each render cycle\n // This runs synchronously during render, before any children claim their order\n renderOrderCounterRef.current = 0;\n renderOrderMapRef.current.clear();\n\n // Called during render to claim a slot in the render order\n const claimRenderOrder = useCallback((id: string): number => {\n if (!renderOrderMapRef.current.has(id)) {\n renderOrderMapRef.current.set(id, renderOrderCounterRef.current++);\n }\n return renderOrderMapRef.current.get(id) as number;\n }, []);\n\n const register = useCallback(\n (\n id: string,\n renderOrder: number,\n props: DescendantType = {} as DescendantType\n ) => {\n // Add descendant to the map with render order\n const descendantInfo: DescendantInfo<DescendantType> = {\n id,\n props,\n renderOrder,\n };\n descendantsRef.current.set(id, descendantInfo);\n\n // Update state with all descendants sorted by render order\n const sortedDescendants = Array.from(\n descendantsRef.current.values()\n ).sort((a, b) => a.renderOrder - b.renderOrder);\n setRegisteredDescendants(sortedDescendants);\n\n // Return unregister function\n const unregister = () => {\n descendantsRef.current.delete(id);\n const remainingDescendants = Array.from(\n descendantsRef.current.values()\n ).sort((a, b) => a.renderOrder - b.renderOrder);\n setRegisteredDescendants(remainingDescendants);\n };\n\n return { unregister };\n },\n []\n );\n\n const contextValue: DescendantsContextType<DescendantType> = useMemo(\n () => ({\n register,\n descendants: registeredDescendants,\n claimRenderOrder,\n }),\n [register, registeredDescendants, claimRenderOrder]\n );\n\n return contextValue;\n}\n\n// ============================================================================\n// Provider Component\n// ============================================================================\n\ntype DescendantsProviderProps<T extends Record<string, unknown>> = {\n value: DescendantsContextType<T>;\n children: ReactNode;\n};\n\nexport function DescendantsProvider<T extends Record<string, unknown>>({\n value,\n children,\n}: DescendantsProviderProps<T>) {\n return (\n <DescendantsContext.Provider\n value={value as unknown as DescendantsContextType}\n >\n {children}\n </DescendantsContext.Provider>\n );\n}\n\n// ============================================================================\n// Context Hook\n// ============================================================================\n\n/**\n * Hook to access the descendants context from within a DescendantsProvider.\n * This allows callers to access the descendants data and register function.\n *\n * @returns The descendants context value\n * @throws {Error} if used outside of DescendantsProvider\n */\nexport function useDescendantsContext<\n T extends Record<string, unknown>,\n>(): DescendantsContextType<T> {\n const context = useContext(DescendantsContext);\n\n if (!context) {\n throw new Error(\n \"useDescendantsContext must be used within DescendantsProvider\"\n );\n }\n\n return context as DescendantsContextType<T>;\n}\n\n// ============================================================================\n// Hook\n// ============================================================================\n\n/**\n * Hook that allows a descendant component to register itself with a parent\n * and returns the index of the descendant in the parent's list.\n *\n * @example\n * ```tsx\n * function Parent() {\n * return (\n * <DescendantsProvider>\n * <Descendant />\n * <Descendant />\n * <Descendant />\n * </DescendantsProvider>\n * );\n * }\n *\n * function Descendant() {\n * const index = useDescendantIndex();\n * return <div>I am descendant {index}</div>;\n * }\n *\n * // With props\n * function Descendant() {\n * const index = useDescendantIndex({ name: \"Descendant 1\", type: \"primary\" });\n * return <div>I am descendant {index}</div>;\n * }\n * ```\n */\n// ============================================================================\n// Descendant Index Hook\n// ============================================================================\n\nexport function useDescendantIndex<T extends Record<string, unknown>>(\n props?: T\n) {\n const context = useDescendantsContext<T>();\n const id = useId();\n\n // Claim render order during render (synchronously, not in useEffect)\n // This captures the order in which descendants render\n const renderOrder = context.claimRenderOrder(id);\n\n const unregisterRef = useRef<(() => void) | null>(null);\n const registerRef = useRef(context.register);\n\n // Keep refs in sync with context\n registerRef.current = context.register;\n\n useEffect(() => {\n // Register or update this descendant with its render order\n const { unregister } = registerRef.current(id, renderOrder, props);\n\n // Store unregister function if not already stored\n if (!unregisterRef.current) {\n unregisterRef.current = unregister;\n }\n\n // Cleanup: unregister when component unmounts\n return () => {\n if (unregisterRef.current) {\n unregisterRef.current();\n unregisterRef.current = null;\n }\n };\n }, [id, renderOrder, props]);\n\n // Derive index from sorted descendants array\n const index = useMemo(() => {\n return context.descendants.findIndex((descendant) => descendant.id === id);\n }, [context.descendants, id]);\n\n const getPrevious = useCallback((): DescendantInfo<T> | undefined => {\n if (index <= 0) return undefined;\n return context.descendants[index - 1];\n }, [context.descendants, index]);\n\n const getNext = useCallback((): DescendantInfo<T> | undefined => {\n if (index < 0 || index >= context.descendants.length - 1) return undefined;\n return context.descendants[index + 1];\n }, [context.descendants, index]);\n\n return { index, id, getPrevious, getNext };\n}\n","import {\n motion,\n useMotionTemplate,\n useMotionValue,\n useTransform,\n type MotionValue,\n type PanInfo,\n} from \"motion/react\";\nimport {\n createContext,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ReactNode,\n} from \"react\";\n\nimport { cn } from \"../../utils/cn\";\nimport { Connectors, type Connector } from \"./connectors\";\nimport {\n DescendantsProvider,\n useDescendantIndex,\n useDescendants,\n type DescendantInfo,\n} from \"./use-children\";\n\nconst PAN_SPACING = {\n y: 64,\n x: 16,\n};\n\n/** Minimum scrollbar thumb size in percentage to ensure visibility */\nconst MIN_SCROLLBAR_THUMB_SIZE = 10;\n\n// Vertical orientation is currently a no-op\ntype Orientation = \"horizontal\" | \"vertical\";\ntype Align = \"start\" | \"center\";\n\ninterface DiagramContextValue {\n orientation: Orientation;\n align: Align;\n x: MotionValue<number>;\n y: MotionValue<number>;\n /** Ref to the canvas viewport wrapper element */\n wrapperRef: React.RefObject<HTMLDivElement | null>;\n}\n\nconst DiagramContext = createContext<DiagramContextValue | null>(null);\n\nexport function useDiagramContext(): DiagramContextValue {\n const context = useContext(DiagramContext);\n if (context === null) {\n throw new Error(\"useDiagramContext must be used within a FlowDiagram\");\n }\n return context;\n}\n\ninterface FlowDiagramProps {\n orientation?: Orientation;\n /**\n * Controls vertical alignment of nodes in horizontal orientation.\n * - `start`: Nodes align to the top (default)\n * - `center`: Nodes are vertically centered\n */\n align?: Align;\n className?: string;\n children?: ReactNode;\n}\n\nexport function FlowDiagram({\n orientation = \"horizontal\",\n align = \"start\",\n className,\n children,\n}: FlowDiagramProps) {\n const wrapperRef = useRef<HTMLDivElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n\n const x = useMotionValue(0);\n const y = useMotionValue(0);\n const [bounds, setBounds] = useState<{ x: number; y: number } | null>(null);\n const [dimensions, setDimensions] = useState<{\n viewportWidth: number;\n viewportHeight: number;\n contentWidth: number;\n contentHeight: number;\n } | null>(null);\n\n const [isPanning, setIsPanning] = useState(false);\n const [canPan, setCanPan] = useState(false);\n\n useEffect(() => {\n if (!wrapperRef.current || !contentRef.current) return;\n\n const measureBounds = () => {\n if (!wrapperRef.current || !contentRef.current) return;\n\n const wrapper = wrapperRef.current.getBoundingClientRect();\n const content = contentRef.current.getBoundingClientRect();\n\n const availableWidth = wrapper.width - PAN_SPACING.x * 2;\n const availableHeight = wrapper.height - PAN_SPACING.y * 2;\n\n setBounds({\n x: Math.min(0, availableWidth - content.width),\n y: Math.min(0, availableHeight - content.height),\n });\n\n setDimensions({\n viewportWidth: availableWidth,\n viewportHeight: availableHeight,\n contentWidth: content.width,\n contentHeight: content.height,\n });\n\n setCanPan(\n content.width > availableWidth || content.height > availableHeight\n );\n };\n\n measureBounds();\n\n const resizeObserver = new ResizeObserver(measureBounds);\n resizeObserver.observe(wrapperRef.current);\n resizeObserver.observe(contentRef.current);\n\n return () => resizeObserver.disconnect();\n }, []);\n\n useEffect(() => {\n if (!bounds) return;\n\n /**\n * It's possible for the content to resize after the user panned. If we're\n * at the edge of the pan and the content gets smaller, then we've \"panned\n * too far\". In this case, we transition the pan back to the new bounds.\n */\n if (x.get() < bounds.x) {\n x.set(bounds.x);\n }\n if (y.get() < bounds.y) {\n y.set(bounds.y);\n }\n }, [bounds, x, y]);\n\n useEffect(() => {\n return () => {\n document.body.style.cursor = \"\";\n document.body.style.userSelect = \"\";\n };\n }, []);\n\n // Handle wheel/scroll events for panning\n useEffect(() => {\n const wrapper = wrapperRef.current;\n if (!wrapper) return;\n\n const handleWheel = (e: WheelEvent) => {\n if (!bounds) return;\n\n const canScrollX = bounds.x < 0;\n const canScrollY = bounds.y < 0;\n\n if (!canScrollX && !canScrollY) return;\n\n e.preventDefault();\n\n if (canScrollY) {\n const newY = Math.max(bounds.y, Math.min(0, y.get() - e.deltaY));\n y.set(newY);\n }\n\n if (canScrollX) {\n const newX = Math.max(bounds.x, Math.min(0, x.get() - e.deltaX));\n x.set(newX);\n }\n };\n\n wrapper.addEventListener(\"wheel\", handleWheel, { passive: false });\n return () => wrapper.removeEventListener(\"wheel\", handleWheel);\n }, [bounds, x, y]);\n\n const handlePan = (_: PointerEvent, info: PanInfo) => {\n if (!bounds) return;\n x.set(Math.max(bounds.x, Math.min(0, x.get() + info.delta.x)));\n y.set(Math.max(bounds.y, Math.min(0, y.get() + info.delta.y)));\n };\n\n // Calculate scrollbar dimensions\n const canScrollX = bounds && bounds.x < 0;\n const canScrollY = bounds && bounds.y < 0;\n\n const scrollThumbWidth =\n dimensions && dimensions.contentWidth > 0 && dimensions.viewportWidth > 0\n ? Math.max(\n MIN_SCROLLBAR_THUMB_SIZE,\n (dimensions.viewportWidth / dimensions.contentWidth) * 100\n )\n : 0;\n const scrollThumbHeight =\n dimensions && dimensions.contentHeight > 0 && dimensions.viewportHeight > 0\n ? Math.max(\n MIN_SCROLLBAR_THUMB_SIZE,\n (dimensions.viewportHeight / dimensions.contentHeight) * 100\n )\n : 0;\n\n // Transform pan position to scrollbar thumb position (as percentage)\n const scrollbarXPercent = useTransform(\n x,\n [0, bounds?.x ?? 0],\n [0, 100 - scrollThumbWidth]\n );\n const scrollbarYPercent = useTransform(\n y,\n [0, bounds?.y ?? 0],\n [0, 100 - scrollThumbHeight]\n );\n\n const scrollTop = useMotionTemplate`${scrollbarYPercent}%`;\n const scrollLeft = useMotionTemplate`${scrollbarXPercent}%`;\n\n const contextValue = useMemo(\n () => ({ orientation, align, x, y, wrapperRef }),\n [orientation, align, x, y]\n );\n\n return (\n <DiagramContext.Provider value={contextValue}>\n <motion.div\n ref={wrapperRef}\n className={cn(\n \"relative overflow-hidden py-16 px-4 grow isolate group\",\n className\n )}\n style={{\n cursor: canPan && !isPanning ? \"grab\" : undefined,\n }}\n onPanStart={() => {\n setIsPanning(true);\n document.body.style.cursor = \"grabbing\";\n document.body.style.userSelect = \"none\";\n }}\n onPan={handlePan}\n onPanEnd={() => {\n setIsPanning(false);\n document.body.style.cursor = \"\";\n document.body.style.userSelect = \"\";\n }}\n >\n <motion.div ref={contentRef} className=\"w-max mx-auto\" style={{ x, y }}>\n <FlowNodeList>{children}</FlowNodeList>\n </motion.div>\n\n {/* Vertical scrollbar */}\n {canScrollY && (\n <div className=\"absolute right-1 top-4 bottom-4 w-1.5 rounded-full bg-sf-line/50 opacity-0 group-hover:opacity-100\">\n <motion.div\n className=\"absolute w-full rounded-full bg-sf-fill\"\n style={{\n height: `${scrollThumbHeight}%`,\n top: scrollTop,\n }}\n />\n </div>\n )}\n\n {/* Horizontal scrollbar */}\n {canScrollX && (\n <div className=\"absolute bottom-1 left-4 right-4 h-1.5 rounded-full bg-sf-line/50 opacity-0 group-hover:opacity-100\">\n <motion.div\n className=\"absolute h-full rounded-full bg-sf-fill\"\n style={{\n width: `${scrollThumbWidth}%`,\n left: scrollLeft,\n }}\n />\n </div>\n )}\n </motion.div>\n </DiagramContext.Provider>\n );\n}\n\n// ---\n\nexport type RectLike = {\n x: number;\n y: number;\n top: number;\n left: number;\n right: number;\n bottom: number;\n width: number;\n height: number;\n};\n\nexport type NodeData = {\n parallel?: boolean;\n start?: RectLike | null;\n end?: RectLike | null;\n};\n\nexport const useNodeGroup = () => useDescendants<NodeData>();\n\nexport const useNode = (props: NodeData) => useDescendantIndex<NodeData>(props);\n\nexport const getNodeRect = (\n node: DescendantInfo<NodeData> | undefined,\n { type = \"start\" }: { type?: \"start\" | \"end\" }\n): RectLike | null => {\n if (!node) return null;\n return node.props[type] ?? null;\n};\n\nexport function FlowNodeList({ children }: { children: ReactNode }) {\n const { orientation, align } = useDiagramContext();\n const descendants = useNodeGroup();\n const containerRef = useRef<HTMLDivElement>(null);\n\n const connectors = useMemo(() => {\n const edges: Connector[] = [];\n const nodes = descendants.descendants;\n const containerRect = containerRef.current?.getBoundingClientRect();\n\n const offsetX = containerRect?.left ?? 0;\n const offsetY = containerRect?.top ?? 0;\n\n for (let i = 0; i < nodes.length - 1; i++) {\n const currentRect = getNodeRect(nodes[i], { type: \"start\" });\n const nextRect = getNodeRect(nodes[i + 1], { type: \"end\" });\n\n if (currentRect && nextRect) {\n edges.push({\n x1: currentRect.left - offsetX + currentRect.width,\n y1: currentRect.top - offsetY + currentRect.height / 2,\n x2: nextRect.left - offsetX,\n y2: nextRect.top - offsetY + nextRect.height / 2,\n });\n }\n }\n\n return edges;\n }, [descendants.descendants]);\n\n return (\n <DescendantsProvider value={descendants}>\n <div className=\"relative\" ref={containerRef}>\n <ul\n className={cn(\n \"ml-0 list-none\",\n orientation === \"vertical\"\n ? \"grid auto-rows-min gap-16\"\n : \"flex gap-16\",\n orientation === \"horizontal\" &&\n (align === \"center\" ? \"items-center\" : \"items-start\")\n )}\n >\n {children}\n </ul>\n <div className=\"absolute inset-0 pointer-events-none\">\n <Connectors\n connectors={connectors}\n orientation={orientation}\n single\n />\n </div>\n </div>\n </DescendantsProvider>\n );\n}\n","import {\n cloneElement,\n createContext,\n forwardRef,\n isValidElement,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ReactElement,\n type ReactNode,\n} from \"react\";\n\nimport { useNode, type RectLike } from \"./diagram\";\n\n// Utility to merge refs\nfunction mergeRefs<T>(\n ...refs: (React.Ref<T> | undefined)[]\n): React.RefCallback<T> {\n return (value) => {\n refs.forEach((ref) => {\n if (typeof ref === \"function\") {\n ref(value);\n } else if (ref != null) {\n (ref as React.MutableRefObject<T | null>).current = value;\n }\n });\n };\n}\n\n/**\n * FlowNode component props.\n *\n * @example Default styling\n * ```tsx\n * <Flow.Node>Step 1</Flow.Node>\n * ```\n *\n * @example Custom render - completely replaces the default element\n * ```tsx\n * <Flow.Node render={<div className=\"custom-node\">Custom content</div>} />\n * ```\n */\nexport type FlowNodeProps = {\n /**\n * Custom element to render instead of the default styled node.\n * When provided, completely replaces the default element.\n */\n render?: ReactElement;\n children?: ReactNode;\n};\n\nexport const FlowNode = forwardRef<HTMLElement, FlowNodeProps>(\n ({ render, children }, ref) => {\n const nodeRef = useRef<HTMLElement>(null);\n const startAnchorRef = useRef<HTMLElement | null>(null);\n const endAnchorRef = useRef<HTMLElement | null>(null);\n const [measurements, setMeasurements] = useState<{\n start: RectLike | null;\n end: RectLike | null;\n }>({ start: null, end: null });\n\n const nodeProps = useMemo(\n () => ({\n parallel: false,\n ...measurements,\n }),\n [measurements]\n );\n\n const { index, id } = useNode(nodeProps);\n\n /**\n * This effect intentionally has no dependencies because we want it to run on\n * every render to ensure measurements are always up to date.\n */\n useEffect(() => {\n if (!nodeRef.current) return;\n\n const rect = nodeRef.current.getBoundingClientRect();\n const nodeRect = rect;\n\n let startRect: RectLike = nodeRect;\n let endRect: RectLike = nodeRect;\n\n if (startAnchorRef.current) {\n startRect = startAnchorRef.current.getBoundingClientRect();\n }\n\n if (endAnchorRef.current) {\n endRect = endAnchorRef.current.getBoundingClientRect();\n }\n\n setMeasurements((m) => {\n const newVal = { start: startRect, end: endRect };\n if (JSON.stringify(m) === JSON.stringify(newVal)) return m;\n return newVal;\n });\n });\n\n const mergedRef = mergeRefs(ref, nodeRef);\n\n let element: ReactElement;\n if (render && isValidElement(render)) {\n // When render prop is provided, clone it with ref and data attributes\n const renderProps = render.props as { children?: ReactNode };\n // oxlint-disable-next-line react/no-clone-element -- forwarding ref to render prop element\n element = cloneElement(render, {\n ref: mergedRef,\n \"data-node-index\": index,\n \"data-node-id\": id,\n children: renderProps.children ?? children,\n } as React.HTMLAttributes<HTMLElement> & { ref: React.Ref<HTMLElement> });\n } else {\n // Default element\n element = (\n <li\n ref={mergedRef}\n className=\"py-2 px-3 rounded-md shadow bg-sf-base ring ring-sf-line\"\n data-node-index={index}\n data-node-id={id}\n >\n {children}\n </li>\n );\n }\n\n return (\n <FlowNodeAnchorContext.Provider\n value={useMemo(\n () => ({\n registerStartAnchor: (anchorRef) => {\n startAnchorRef.current = anchorRef;\n },\n registerEndAnchor: (anchorRef) => {\n endAnchorRef.current = anchorRef;\n },\n }),\n []\n )}\n >\n {element}\n </FlowNodeAnchorContext.Provider>\n );\n }\n);\n\nFlowNode.displayName = \"Flow.Node\";\n\ntype FlowNodeAnchorContextType = {\n registerStartAnchor: (ref: HTMLElement | null) => void;\n registerEndAnchor: (ref: HTMLElement | null) => void;\n};\n\nconst FlowNodeAnchorContext = createContext<FlowNodeAnchorContextType | null>(\n null\n);\n\n/**\n * FlowAnchor component props.\n *\n * @example Default (unstyled div)\n * ```tsx\n * <Flow.Anchor type=\"start\">Anchor content</Flow.Anchor>\n * ```\n *\n * @example Custom render - completely replaces the default element\n * ```tsx\n * <Flow.Anchor type=\"end\" render={<span className=\"custom-anchor\">Custom anchor</span>} />\n * ```\n */\nexport type FlowAnchorProps = {\n /**\n * Determines if the anchor should serve as a \"start\" point for the\n * _next_ connector or the \"end\" point for the _previous_ connector.\n * When omitted, it serves as both the start and end points.\n */\n type?: \"start\" | \"end\";\n /**\n * Custom element to render instead of the default div.\n * When provided, completely replaces the default element.\n */\n render?: ReactElement;\n children?: ReactNode;\n};\n\nexport const FlowAnchor = forwardRef<HTMLElement, FlowAnchorProps>(\n ({ type, render, children }, ref) => {\n const context = useContext(FlowNodeAnchorContext);\n const anchorRef = useRef<HTMLElement>(null);\n\n if (!context) {\n throw new Error(\"Flow.Anchor must be used within Flow.Node\");\n }\n\n useEffect(() => {\n if (!anchorRef.current) {\n return;\n }\n\n if (type === \"start\" || type === undefined) {\n context.registerStartAnchor(anchorRef.current);\n }\n if (type === \"end\" || type === undefined) {\n context.registerEndAnchor(anchorRef.current);\n }\n\n return () => {\n if (type === \"start\" || type === undefined) {\n context.registerStartAnchor(null);\n }\n if (type === \"end\" || type === undefined) {\n context.registerEndAnchor(null);\n }\n };\n }, [type, context.registerStartAnchor, context.registerEndAnchor]);\n\n const mergedRef = mergeRefs(ref, anchorRef);\n\n if (render && isValidElement(render)) {\n // When render prop is provided, clone it with ref\n const renderProps = render.props as { children?: ReactNode };\n // oxlint-disable-next-line react/no-clone-element -- forwarding ref to render prop element\n return cloneElement(render, {\n ref: mergedRef,\n children: renderProps.children ?? children,\n } as React.HTMLAttributes<HTMLElement> & { ref: React.Ref<HTMLElement> });\n }\n\n // Default element\n return <div ref={mergedRef}>{children}</div>;\n }\n);\n\nFlowAnchor.displayName = \"Flow.Anchor\";\n","import { useMemo, useRef, type ReactNode } from \"react\";\n\nimport { cn } from \"../../utils/cn\";\nimport { Connectors, type Connector } from \"./connectors\";\nimport {\n getNodeRect,\n useDiagramContext,\n useNode,\n useNodeGroup,\n type RectLike,\n} from \"./diagram\";\nimport { DescendantsProvider } from \"./use-children\";\n\nfunction getStartAndEndPoints({\n container,\n previous,\n next,\n orientation,\n}: {\n container: RectLike;\n previous: RectLike | null;\n next: RectLike | null;\n orientation: \"vertical\" | \"horizontal\";\n}): {\n start: { x: number; y: number };\n end: { x: number; y: number };\n} {\n if (orientation === \"vertical\") {\n // we ignore previous/next calculations for vertical orientations for now\n return {\n start: {\n x: container.width / 2,\n y: 0,\n },\n end: {\n x: container.width / 2,\n y: container.height,\n },\n };\n }\n // Default to midpoints\n let start = {\n x: 0,\n y: container.height / 2,\n };\n let end = {\n x: container.width,\n y: container.height / 2,\n };\n if (previous) {\n start.y = previous.top - container.top + previous.height / 2;\n }\n if (next) {\n end.y = next.top - container.top + next.height / 2;\n }\n return { start, end };\n}\n\nexport function FlowParallelNode({ children }: { children: ReactNode }) {\n const { orientation } = useDiagramContext();\n const descendants = useNodeGroup();\n\n const containerRef = useRef<HTMLDivElement>(null);\n\n const { index, getPrevious, getNext } = useNode(\n useMemo(() => ({ parallel: true }), [])\n );\n\n const measure = () => {\n const container = containerRef.current;\n if (!container) return;\n\n const containerRect = container.getBoundingClientRect();\n\n const [prevNode, nextNode] = [getPrevious(), getNext()];\n const previousNodeRect = getNodeRect(prevNode, { type: \"start\" });\n const nextNodeRect = getNodeRect(nextNode, { type: \"end\" });\n\n const { start, end } = getStartAndEndPoints({\n container: containerRect,\n previous: previousNodeRect,\n next: nextNodeRect,\n orientation,\n });\n\n const newConnectors = descendants.descendants.flatMap(({ props }) => {\n const connectors: Connector[] = [];\n\n const [endAnchorRect, startAnchorRect] = [props.end, props.start];\n if (endAnchorRect) {\n let branchStart: { x: number; y: number };\n switch (orientation) {\n case \"vertical\": {\n const anchorCenter =\n endAnchorRect.left - containerRect.left + endAnchorRect.width / 2;\n branchStart = {\n x: anchorCenter,\n y: endAnchorRect.top - containerRect.top,\n };\n break;\n }\n case \"horizontal\": {\n const anchorCenter =\n endAnchorRect.top - containerRect.top + endAnchorRect.height / 2;\n branchStart = {\n x: endAnchorRect.left - containerRect.left,\n y: anchorCenter,\n };\n break;\n }\n default:\n throw new Error(`Unknown orientation: ${orientation as string}`);\n }\n connectors.push({\n x1: start.x,\n y1: start.y,\n x2: branchStart.x,\n y2: branchStart.y,\n isBottom: false,\n });\n }\n\n if (nextNodeRect && startAnchorRect) {\n let branchEnd: { x: number; y: number };\n switch (orientation) {\n case \"vertical\": {\n const anchorCenter =\n startAnchorRect.left -\n containerRect.left +\n startAnchorRect.width / 2;\n branchEnd = {\n x: anchorCenter,\n y: startAnchorRect.bottom - containerRect.top,\n };\n break;\n }\n case \"horizontal\": {\n const anchorCenter =\n startAnchorRect.top -\n containerRect.top +\n startAnchorRect.height / 2;\n branchEnd = {\n x: startAnchorRect.right - containerRect.left,\n y: anchorCenter,\n };\n break;\n }\n default:\n throw new Error(`Unknown orientation: ${orientation as string}`);\n }\n connectors.push({\n x1: branchEnd.x,\n y1: branchEnd.y,\n x2: end.x,\n y2: end.y,\n isBottom: true,\n });\n }\n\n return connectors;\n });\n\n return {\n connectors: newConnectors,\n junctions: {\n start: {\n x: orientation === \"vertical\" ? start.x : start.x + 32,\n y: orientation === \"vertical\" ? start.y + 32 : start.y,\n },\n end: nextNodeRect\n ? {\n x: orientation === \"vertical\" ? end.x : end.x - 32,\n y: orientation === \"vertical\" ? end.y - 32 : end.y,\n }\n : undefined,\n },\n containerRect,\n };\n };\n\n const links = measure();\n\n return (\n <div\n ref={containerRef}\n className={cn(\n \"relative\",\n orientation === \"horizontal\" ? \"px-16 -mx-16\" : \"py-16 -my-16\"\n )}\n data-node-index={index}\n >\n <div className=\"absolute inset-0 pointer-events-none z-10\">\n {links && (\n <Connectors connectors={links.connectors} orientation={orientation}>\n {links.junctions?.start && (\n <g\n transform={`translate(${links.junctions.start.x} ${links.junctions.start.y})`}\n >\n <JunctionBox />\n </g>\n )}\n {links.junctions?.end && (\n <g\n transform={`translate(${links.junctions.end.x} ${links.junctions.end.y})`}\n >\n <JunctionBox />\n </g>\n )}\n </Connectors>\n )}\n </div>\n <ul\n className={cn(\n \"gap-5 list-none flex items-start\",\n orientation === \"horizontal\" ? \"flex-col ml-0\" : \"gap-5 w-fit mx-auto\"\n )}\n >\n <DescendantsProvider value={descendants}>\n {children}\n </DescendantsProvider>\n </ul>\n </div>\n );\n}\n\nfunction JunctionBox({ size = 6 }) {\n const halfSize = size / 2;\n return (\n <rect\n x={-halfSize}\n y={-halfSize}\n width={size}\n height={size}\n fill=\"currentColor\"\n rx=\"1\"\n />\n );\n}\n","import { FlowDiagram, FlowNodeList } from \"./diagram\";\nimport { FlowNode, FlowAnchor } from \"./node\";\nimport { FlowParallelNode } from \"./parallel\";\n\n/**\n * Flow - Components for visualizing workflows and data flows.\n *\n * @example\n * ```tsx\n * <Flow>\n * <Flow.Node>Step 1</Flow.Node>\n * <Flow.Node>Step 2</Flow.Node>\n * <Flow.Parallel>\n * <Flow.Node>Branch A</Flow.Node>\n * <Flow.Node>Branch B</Flow.Node>\n * </Flow.Parallel>\n * <Flow.Node>Step 3</Flow.Node>\n * </Flow>\n * ```\n */\nconst Flow = Object.assign(FlowDiagram, {\n Node: FlowNode,\n Parallel: FlowParallelNode,\n List: FlowNodeList,\n Anchor: FlowAnchor,\n});\n\nexport { Flow };\n"],"mappings":"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"}
|
package/dist/genui.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { t as cn } from "./cn-
|
|
3
|
-
import { T as sfComponents, n as JSONUIProvider, r as Renderer } from "./dist-
|
|
2
|
+
import { t as cn } from "./cn-CmAOpn49.js";
|
|
3
|
+
import { T as sfComponents, n as JSONUIProvider, r as Renderer } from "./dist-6AtBsaJE.js";
|
|
4
4
|
import { useMemo } from "react";
|
|
5
5
|
import { jsx } from "react/jsx-runtime";
|
|
6
6
|
//#region src/genui/genui.tsx
|
package/dist/genui.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"genui.js","names":[],"sources":["../src/genui/genui.tsx"],"sourcesContent":["import type { Spec } from \"@json-render/core\";\nimport {\n Renderer,\n type ComponentRegistry,\n JSONUIProvider,\n} from \"@json-render/react\";\nimport { type ReactNode, useMemo } from \"react\";\n\nimport { sfComponents } from \"../catalog/sf-registry\";\nimport { cn } from \"../utils/cn\";\n\nexport interface GenUIProps {\n /** A json-render Spec to render */\n spec: Spec | null;\n /** Whether the spec is currently being streamed */\n isStreaming?: boolean;\n /** Optional className for the wrapper */\n className?: string;\n /** Fallback for unknown component types */\n fallback?: ReactNode;\n}\n\n/**\n * Build a ComponentRegistry from sfComponents.\n * Each entry maps a component name to a renderer that extracts\n * element.props and passes them to the SignalFlare React component.\n */\nconst sfRegistry: ComponentRegistry = Object.fromEntries(\n Object.entries(sfComponents).map(([name, renderFn]) => [\n name,\n ({ element, children, emit, on, bindings, loading }: any) =>\n renderFn({\n props: element.props,\n children,\n emit,\n on,\n bindings,\n loading,\n }),\n ])\n);\n\nexport function GenUI({ spec, isStreaming, className, fallback }: GenUIProps) {\n const wrapperFallback = useMemo(\n () => (fallback ? () => fallback : undefined),\n [fallback]\n );\n\n if (!spec) return null;\n\n return (\n <div className={cn(\"sf-genui\", className)}>\n <JSONUIProvider registry={sfRegistry}>\n <Renderer\n spec={spec}\n registry={sfRegistry}\n loading={isStreaming}\n fallback={wrapperFallback}\n />\n </JSONUIProvider>\n </div>\n );\n}\n\nGenUI.displayName = \"GenUI\";\n"],"mappings":";;;;;;;;;;;AA2BA,IAAM,aAAgC,OAAO,YAC3C,OAAO,QAAQ,
|
|
1
|
+
{"version":3,"file":"genui.js","names":[],"sources":["../src/genui/genui.tsx"],"sourcesContent":["import type { Spec } from \"@json-render/core\";\nimport {\n Renderer,\n type ComponentRegistry,\n JSONUIProvider,\n} from \"@json-render/react\";\nimport { type ReactNode, useMemo } from \"react\";\n\nimport { sfComponents } from \"../catalog/sf-registry\";\nimport { cn } from \"../utils/cn\";\n\nexport interface GenUIProps {\n /** A json-render Spec to render */\n spec: Spec | null;\n /** Whether the spec is currently being streamed */\n isStreaming?: boolean;\n /** Optional className for the wrapper */\n className?: string;\n /** Fallback for unknown component types */\n fallback?: ReactNode;\n}\n\n/**\n * Build a ComponentRegistry from sfComponents.\n * Each entry maps a component name to a renderer that extracts\n * element.props and passes them to the SignalFlare React component.\n */\nconst sfRegistry: ComponentRegistry = Object.fromEntries(\n Object.entries(sfComponents).map(([name, renderFn]) => [\n name,\n ({ element, children, emit, on, bindings, loading }: any) =>\n renderFn({\n props: element.props,\n children,\n emit,\n on,\n bindings,\n loading,\n }),\n ])\n);\n\nexport function GenUI({ spec, isStreaming, className, fallback }: GenUIProps) {\n const wrapperFallback = useMemo(\n () => (fallback ? () => fallback : undefined),\n [fallback]\n );\n\n if (!spec) return null;\n\n return (\n <div className={cn(\"sf-genui\", className)}>\n <JSONUIProvider registry={sfRegistry}>\n <Renderer\n spec={spec}\n registry={sfRegistry}\n loading={isStreaming}\n fallback={wrapperFallback}\n />\n </JSONUIProvider>\n </div>\n );\n}\n\nGenUI.displayName = \"GenUI\";\n"],"mappings":";;;;;;;;;;;AA2BA,IAAM,aAAgC,OAAO,YAC3C,OAAO,QAAQ,YAAY,EAAE,KAAK,CAAC,MAAM,cAAc,CACrD,OACC,EAAE,SAAS,UAAU,MAAM,IAAI,UAAU,cACxC,SAAS;CACP,OAAO,QAAQ;CACf;CACA;CACA;CACA;CACA;AACF,CAAC,CACL,CAAC,CACH;AAEA,SAAgB,MAAM,EAAE,MAAM,aAAa,WAAW,YAAwB;CAC5E,MAAM,kBAAkB,cACf,iBAAiB,WAAW,KAAA,GACnC,CAAC,QAAQ,CACX;CAEA,IAAI,CAAC,MAAM,OAAO;CAElB,OACE,oBAAC,OAAD;EAAK,WAAW,GAAG,YAAY,SAAS;YACtC,oBAAC,gBAAD;GAAgB,UAAU;aACxB,oBAAC,UAAD;IACQ;IACN,UAAU;IACV,SAAS;IACT,UAAU;GACX,CAAA;EACa,CAAA;CACb,CAAA;AAET;AAEA,MAAM,cAAc"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { t as cn } from "./cn-
|
|
2
|
+
import { t as cn } from "./cn-CmAOpn49.js";
|
|
3
3
|
import React from "react";
|
|
4
4
|
import { jsx } from "react/jsx-runtime";
|
|
5
5
|
//#region src/components/grid/grid.tsx
|
|
@@ -116,4 +116,4 @@ GridItem.displayName = "GridItem";
|
|
|
116
116
|
//#endregion
|
|
117
117
|
export { gridItemVariants as a, SF_GRID_VARIANTS as i, GridItem as n, gridVariants as o, SF_GRID_DEFAULT_VARIANTS as r, Grid as t };
|
|
118
118
|
|
|
119
|
-
//# sourceMappingURL=grid-
|
|
119
|
+
//# sourceMappingURL=grid-CifjQL-5.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grid-
|
|
1
|
+
{"version":3,"file":"grid-CifjQL-5.js","names":[],"sources":["../src/components/grid/grid.tsx"],"sourcesContent":["import React from \"react\";\n\nimport { cn } from \"../../utils/cn\";\n\n/** Grid variant and gap definitions mapping layout names to their responsive Tailwind classes. */\nexport const SF_GRID_VARIANTS = {\n variant: {\n \"2up\": {\n classes: \"grid-cols-1 md:grid-cols-2\",\n description:\n \"Grid items stack on small screens, display side-by-side on medium screens and up\",\n },\n \"side-by-side\": {\n classes: \"grid-cols-2\",\n description: \"Grid items always displayed side-by-side\",\n },\n \"2-1\": {\n classes: \"grid-cols-1 md:grid-cols-[2fr_1fr]\",\n description:\n \"Two-thirds / one-third split (66%/33%) on medium screens and up\",\n },\n \"1-2\": {\n classes: \"grid-cols-1 md:grid-cols-[1fr_2fr]\",\n description:\n \"One-third / two-thirds split (33%/66%) on medium screens and up\",\n },\n \"1-3up\": {\n classes: \"grid-cols-1 lg:grid-cols-3\",\n description:\n \"Grid items stack on small screens, expand to 3 across on large screens\",\n },\n \"3up\": {\n classes: \"grid-cols-1 md:grid-cols-2 lg:grid-cols-3\",\n description:\n \"Grid items stack on small screens, 2 across on medium, 3 across on large\",\n },\n \"4up\": {\n classes: \"grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4\",\n description:\n \"Grid items stack on small screens, progressively increase columns at larger breakpoints\",\n },\n \"6up\": {\n classes: \"grid-cols-2 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-6\",\n description: \"Grid items start at 2 across, expand to 6 across on XL\",\n },\n \"1-2-4up\": {\n classes: \"grid-cols-1 md:grid-cols-2 lg:grid-cols-4\",\n description:\n \"Grid items stack on small screens, 2 across on medium, 4 across on large\",\n },\n },\n gap: {\n none: {\n classes: \"gap-0\",\n description: \"No gap between grid items\",\n },\n sm: {\n classes: \"gap-3\",\n description: \"Small gap between grid items\",\n },\n base: {\n classes: \"gap-2 md:gap-6 lg:gap-8\",\n description: \"Default responsive gap between grid items\",\n },\n lg: {\n classes: \"gap-8\",\n description: \"Large gap between grid items\",\n },\n },\n} as const;\n\nexport const SF_GRID_DEFAULT_VARIANTS = {\n gap: \"base\",\n} as const;\n\nexport type SFGridVariant = keyof typeof SF_GRID_VARIANTS.variant;\nexport type SFGridGap = keyof typeof SF_GRID_VARIANTS.gap;\n\n/**\n * Grid component props.\n *\n * @example\n * ```tsx\n * <Grid variant=\"3up\" gap=\"sm\">\n * <GridItem><Surface className=\"p-4\">1</Surface></GridItem>\n * <GridItem><Surface className=\"p-4\">2</Surface></GridItem>\n * <GridItem><Surface className=\"p-4\">3</Surface></GridItem>\n * </Grid>\n * ```\n */\nexport interface GridProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Grid items to render. */\n children?: React.ReactNode;\n /** Additional CSS classes merged via `cn()`. */\n className?: string;\n /** Show dividers between grid items on mobile (only works with `\"4up\"` variant). */\n mobileDivider?: boolean;\n /**\n * Gap size between grid items.\n * - `\"none\"` — No gap\n * - `\"sm\"` — 12px gap\n * - `\"base\"` — Responsive gap (8px → 24px → 32px)\n * - `\"lg\"` — 32px gap\n * @default \"base\"\n */\n gap?: SFGridGap;\n /**\n * Responsive column layout variant.\n * - `\"2up\"` — 1 col → 2 cols at md\n * - `\"side-by-side\"` — Always 2 cols\n * - `\"2-1\"` — 66%/33% split at md\n * - `\"1-2\"` — 33%/66% split at md\n * - `\"3up\"` — 1 → 2 → 3 cols\n * - `\"4up\"` — 1 → 2 → 3 → 4 cols\n * - `\"6up\"` — 2 → 3 → 4 → 6 cols\n * - `\"1-2-4up\"` — 1 → 2 → 4 cols\n */\n variant?: SFGridVariant;\n}\n\n/** GridItem component props — a single cell within a Grid. */\nexport interface GridItemProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Content for this grid cell. */\n children?: React.ReactNode;\n /** Additional CSS classes merged via `cn()`. */\n className?: string;\n}\n\ninterface GridContextValue {\n variant?: SFGridVariant;\n gap: SFGridGap;\n mobileDivider?: boolean;\n}\n\nconst GridContext = React.createContext<GridContextValue>({\n gap: \"base\",\n});\n\nexport function gridVariants({\n variant,\n gap = SF_GRID_DEFAULT_VARIANTS.gap,\n}: {\n variant?: SFGridVariant;\n gap?: SFGridGap;\n} = {}) {\n return cn(\n \"grid\",\n variant && SF_GRID_VARIANTS.variant[variant].classes,\n SF_GRID_VARIANTS.gap[gap].classes\n );\n}\n\nexport function gridItemVariants({\n variant,\n mobileDivider,\n}: {\n variant?: SFGridVariant;\n mobileDivider?: boolean;\n} = {}) {\n return cn(\n mobileDivider &&\n variant === \"4up\" &&\n \"border-b border-sf-line pb-8 md:border-b-0 md:pb-0\"\n );\n}\n\n/**\n * Responsive CSS grid layout container with preset column configurations.\n *\n * @example\n * ```tsx\n * <Grid variant=\"2up\" gap=\"base\">\n * <GridItem>Left</GridItem>\n * <GridItem>Right</GridItem>\n * </Grid>\n * ```\n */\nexport const Grid = React.forwardRef<HTMLDivElement, GridProps>(\n (\n {\n children,\n className,\n mobileDivider,\n gap = SF_GRID_DEFAULT_VARIANTS.gap,\n variant,\n ...props\n },\n ref\n ) => {\n return (\n <GridContext.Provider value={{ variant, gap, mobileDivider }}>\n <div\n ref={ref}\n className={cn(gridVariants({ variant, gap }), className)}\n {...props}\n >\n {children}\n </div>\n </GridContext.Provider>\n );\n }\n);\n\nGrid.displayName = \"Grid\";\n\nexport const GridItem = React.forwardRef<HTMLDivElement, GridItemProps>(\n ({ children, className, ...props }, ref) => {\n const { variant, mobileDivider } = React.useContext(GridContext);\n\n return (\n <div\n ref={ref}\n className={cn(gridItemVariants({ variant, mobileDivider }), className)}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nGridItem.displayName = \"GridItem\";\n"],"mappings":";;;;;;AAKA,IAAa,mBAAmB;CAC9B,SAAS;EACP,OAAO;GACL,SAAS;GACT,aACE;EACJ;EACA,gBAAgB;GACd,SAAS;GACT,aAAa;EACf;EACA,OAAO;GACL,SAAS;GACT,aACE;EACJ;EACA,OAAO;GACL,SAAS;GACT,aACE;EACJ;EACA,SAAS;GACP,SAAS;GACT,aACE;EACJ;EACA,OAAO;GACL,SAAS;GACT,aACE;EACJ;EACA,OAAO;GACL,SAAS;GACT,aACE;EACJ;EACA,OAAO;GACL,SAAS;GACT,aAAa;EACf;EACA,WAAW;GACT,SAAS;GACT,aACE;EACJ;CACF;CACA,KAAK;EACH,MAAM;GACJ,SAAS;GACT,aAAa;EACf;EACA,IAAI;GACF,SAAS;GACT,aAAa;EACf;EACA,MAAM;GACJ,SAAS;GACT,aAAa;EACf;EACA,IAAI;GACF,SAAS;GACT,aAAa;EACf;CACF;AACF;AAEA,IAAa,2BAA2B,EACtC,KAAK,OACP;AA6DA,IAAM,cAAc,MAAM,cAAgC,EACxD,KAAK,OACP,CAAC;AAED,SAAgB,aAAa,EAC3B,SACA,MAAM,yBAAyB,QAI7B,CAAC,GAAG;CACN,OAAO,GACL,QACA,WAAW,iBAAiB,QAAQ,SAAS,SAC7C,iBAAiB,IAAI,KAAK,OAC5B;AACF;AAEA,SAAgB,iBAAiB,EAC/B,SACA,kBAIE,CAAC,GAAG;CACN,OAAO,GACL,iBACE,YAAY,SACZ,oDACJ;AACF;;;;;;;;;;;;AAaA,IAAa,OAAO,MAAM,YAEtB,EACE,UACA,WACA,eACA,MAAM,yBAAyB,KAC/B,SACA,GAAG,SAEL,QACG;CACH,OACE,oBAAC,YAAY,UAAb;EAAsB,OAAO;GAAE;GAAS;GAAK;EAAc;YACzD,oBAAC,OAAD;GACO;GACL,WAAW,GAAG,aAAa;IAAE;IAAS;GAAI,CAAC,GAAG,SAAS;GACvD,GAAI;GAEH;EACE,CAAA;CACe,CAAA;AAE1B,CACF;AAEA,KAAK,cAAc;AAEnB,IAAa,WAAW,MAAM,YAC3B,EAAE,UAAU,WAAW,GAAG,SAAS,QAAQ;CAC1C,MAAM,EAAE,SAAS,kBAAkB,MAAM,WAAW,WAAW;CAE/D,OACE,oBAAC,OAAD;EACO;EACL,WAAW,GAAG,iBAAiB;GAAE;GAAS;EAAc,CAAC,GAAG,SAAS;EACrE,GAAI;EAEH;CACE,CAAA;AAET,CACF;AAEA,SAAS,cAAc"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { createElement } from "react";
|
|
3
3
|
//#region src/utils/highlight-to-react.tsx
|
|
4
|
-
var TOKEN_RE = /<span class="(sh__[^"]+)" style="color:([^"]+)">([\s\S]*?)<\/span>/
|
|
5
|
-
var
|
|
4
|
+
var TOKEN_RE = /<span class="(sh__[^"]+)" style="color:([^"]+)">([\s\S]*?)<\/span>/gu;
|
|
5
|
+
var LINE_OPEN = "<span class=\"sh__line\">";
|
|
6
6
|
/** Parse the inner HTML of a line into token React elements. */
|
|
7
7
|
function parseTokens(lineHtml) {
|
|
8
8
|
const nodes = [];
|
|
@@ -30,28 +30,22 @@ function unescapeHtml(str) {
|
|
|
30
30
|
* Each element is a `<span class="sh__line">` containing token spans.
|
|
31
31
|
*/
|
|
32
32
|
function highlightToLines(html) {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
let lineIndex = 0;
|
|
37
|
-
while ((match = LINE_RE.exec(html)) !== null) {
|
|
38
|
-
const [, lineHtml] = match;
|
|
39
|
-
lines.push(createElement("span", {
|
|
33
|
+
return html.split(LINE_OPEN).slice(1).map((segment, lineIndex) => {
|
|
34
|
+
const lineHtml = segment.replace(/<\/span>\s*$/u, "");
|
|
35
|
+
return createElement("span", {
|
|
40
36
|
key: lineIndex,
|
|
41
37
|
className: "sh__line"
|
|
42
|
-
}, ...parseTokens(lineHtml))
|
|
43
|
-
|
|
44
|
-
}
|
|
45
|
-
return lines;
|
|
38
|
+
}, ...parseTokens(lineHtml));
|
|
39
|
+
});
|
|
46
40
|
}
|
|
47
41
|
/**
|
|
48
42
|
* Parse sugar-high HTML output into a flat array of token React elements
|
|
49
43
|
* (no line wrappers — for inline use inside a single `<code>` element).
|
|
50
44
|
*/
|
|
51
45
|
function highlightToTokens(html) {
|
|
52
|
-
return parseTokens(html.replace(/<span class="sh__line">/
|
|
46
|
+
return parseTokens(html.replace(/<span class="sh__line">/gu, "").replace(/<\/span>\s*(?=\n|$)/gu, ""));
|
|
53
47
|
}
|
|
54
48
|
//#endregion
|
|
55
49
|
export { highlightToTokens as n, highlightToLines as t };
|
|
56
50
|
|
|
57
|
-
//# sourceMappingURL=highlight-to-react-
|
|
51
|
+
//# sourceMappingURL=highlight-to-react-DN9dUCS2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"highlight-to-react-DN9dUCS2.js","names":[],"sources":["../src/utils/highlight-to-react.tsx"],"sourcesContent":["/**\n * Converts sugar-high HTML output into React elements without dangerouslySetInnerHTML.\n *\n * sugar-high produces:\n * <span class=\"sh__line\">\n * <span class=\"sh__token--keyword\" style=\"color:var(--sh-keyword)\">const</span>\n * ...\n * </span>\n *\n * This parser extracts each token span and returns typed React elements.\n */\n\nimport type { ReactElement, ReactNode } from \"react\";\nimport { createElement } from \"react\";\n\n// Matches a single token span: <span class=\"sh__token--X\" style=\"color:var(--sh-Y)\">content</span>\nconst TOKEN_RE =\n /<span class=\"(sh__[^\"]+)\" style=\"color:([^\"]+)\">([\\s\\S]*?)<\\/span>/gu;\n\nconst LINE_OPEN = '<span class=\"sh__line\">';\n\n/** Parse the inner HTML of a line into token React elements. */\nfunction parseTokens(lineHtml: string): ReactNode[] {\n const nodes: ReactNode[] = [];\n let lastIndex = 0;\n let match: RegExpExecArray | null;\n\n // Reset regex state\n TOKEN_RE.lastIndex = 0;\n\n while ((match = TOKEN_RE.exec(lineHtml)) !== null) {\n // Any text between tokens (shouldn't happen with well-formed sugar-high output, but be safe)\n if (match.index > lastIndex) {\n nodes.push(lineHtml.slice(lastIndex, match.index));\n }\n\n const [, className, color, text] = match;\n nodes.push(\n createElement(\n \"span\",\n { key: match.index, className, style: { color } },\n // Unescape HTML entities sugar-high may produce\n unescapeHtml(text)\n )\n );\n lastIndex = match.index + match[0].length;\n }\n\n // Any trailing text\n if (lastIndex < lineHtml.length) {\n nodes.push(lineHtml.slice(lastIndex));\n }\n\n return nodes.length > 0 ? nodes : [\" \"];\n}\n\nfunction unescapeHtml(str: string): string {\n return str\n .replaceAll(\"&\", \"&\")\n .replaceAll(\"<\", \"<\")\n .replaceAll(\">\", \">\")\n .replaceAll(\""\", '\"')\n .replaceAll(\"'\", \"'\");\n}\n\n/**\n * Parse sugar-high HTML output into an array of per-line React elements.\n * Each element is a `<span class=\"sh__line\">` containing token spans.\n */\nexport function highlightToLines(html: string): ReactElement[] {\n // Each `sh__line` span wraps multiple token spans, so a non-greedy regex would\n // stop at the first token's `</span>` rather than the line's. Split on the line\n // opener instead and strip the single trailing `</span>` that closes each line.\n return html\n .split(LINE_OPEN)\n .slice(1)\n .map((segment, lineIndex) => {\n const lineHtml = segment.replace(/<\\/span>\\s*$/u, \"\");\n return createElement(\n \"span\",\n { key: lineIndex, className: \"sh__line\" },\n ...parseTokens(lineHtml)\n );\n });\n}\n\n/**\n * Parse sugar-high HTML output into a flat array of token React elements\n * (no line wrappers — for inline use inside a single `<code>` element).\n */\nexport function highlightToTokens(html: string): ReactNode[] {\n // Flatten: strip line wrappers (opening tags and their closing </span> at line boundaries)\n const stripped = html\n .replace(/<span class=\"sh__line\">/gu, \"\")\n .replace(/<\\/span>\\s*(?=\\n|$)/gu, \"\");\n return parseTokens(stripped);\n}\n"],"mappings":";;;AAgBA,IAAM,WACJ;AAEF,IAAM,YAAY;;AAGlB,SAAS,YAAY,UAA+B;CAClD,MAAM,QAAqB,CAAC;CAC5B,IAAI,YAAY;CAChB,IAAI;CAGJ,SAAS,YAAY;CAErB,QAAQ,QAAQ,SAAS,KAAK,QAAQ,OAAO,MAAM;EAEjD,IAAI,MAAM,QAAQ,WAChB,MAAM,KAAK,SAAS,MAAM,WAAW,MAAM,KAAK,CAAC;EAGnD,MAAM,GAAG,WAAW,OAAO,QAAQ;EACnC,MAAM,KACJ,cACE,QACA;GAAE,KAAK,MAAM;GAAO;GAAW,OAAO,EAAE,MAAM;EAAE,GAEhD,aAAa,IAAI,CACnB,CACF;EACA,YAAY,MAAM,QAAQ,MAAM,GAAG;CACrC;CAGA,IAAI,YAAY,SAAS,QACvB,MAAM,KAAK,SAAS,MAAM,SAAS,CAAC;CAGtC,OAAO,MAAM,SAAS,IAAI,QAAQ,CAAC,GAAG;AACxC;AAEA,SAAS,aAAa,KAAqB;CACzC,OAAO,IACJ,WAAW,SAAS,GAAG,EACvB,WAAW,QAAQ,GAAG,EACtB,WAAW,QAAQ,GAAG,EACtB,WAAW,UAAU,IAAG,EACxB,WAAW,SAAS,GAAG;AAC5B;;;;;AAMA,SAAgB,iBAAiB,MAA8B;CAI7D,OAAO,KACJ,MAAM,SAAS,EACf,MAAM,CAAC,EACP,KAAK,SAAS,cAAc;EAC3B,MAAM,WAAW,QAAQ,QAAQ,iBAAiB,EAAE;EACpD,OAAO,cACL,QACA;GAAE,KAAK;GAAW,WAAW;EAAW,GACxC,GAAG,YAAY,QAAQ,CACzB;CACF,CAAC;AACL;;;;;AAMA,SAAgB,kBAAkB,MAA2B;CAK3D,OAAO,YAHU,KACd,QAAQ,6BAA6B,EAAE,EACvC,QAAQ,yBAAyB,EACjB,CAAQ;AAC7B"}
|
package/dist/index.js
CHANGED
|
@@ -1,76 +1,76 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { n as safeRandomId, t as cn } from "./cn-
|
|
3
|
-
import { n as useLinkComponent, t as LinkProvider } from "./link-provider-
|
|
4
|
-
import { t as Loader } from "./loader-
|
|
5
|
-
import { t as Text } from "./text-
|
|
6
|
-
import { n as TooltipProvider, t as Tooltip } from "./tooltip-
|
|
7
|
-
import { t as Badge } from "./badge-
|
|
8
|
-
import { n as BannerVariant, t as Banner } from "./banner-
|
|
9
|
-
import { i as buttonVariants, n as LinkButton, r as RefreshButton, t as Button } from "./button-
|
|
10
|
-
import { t as DateRangePicker } from "./date-range-picker-
|
|
11
|
-
import { a as labelVariants, i as labelContentVariants, n as SF_LABEL_DEFAULT_VARIANTS, r as SF_LABEL_VARIANTS, t as Label } from "./label-
|
|
12
|
-
import { t as Checkbox } from "./checkbox-
|
|
13
|
-
import { i as fieldVariants, n as SF_FIELD_DEFAULT_VARIANTS, r as SF_FIELD_VARIANTS, t as Field } from "./field-
|
|
14
|
-
import { r as inputVariants, t as Input } from "./input-
|
|
15
|
-
import { n as InputArea, r as Textarea, t as InputGroup } from "./input-
|
|
16
|
-
import { t as ClipboardText } from "./clipboard-text-
|
|
17
|
-
import { n as CodeBlock, t as Code } from "./code-
|
|
18
|
-
import { t as Combobox } from "./combobox-
|
|
19
|
-
import { t as Surface } from "./surface-
|
|
20
|
-
import { a as DialogTitle, i as DialogRoot, n as DialogClose, o as DialogTrigger, r as DialogDescription, t as Dialog } from "./dialog-
|
|
21
|
-
import { t as DropdownMenu } from "./dropdown-
|
|
22
|
-
import { t as Collapsible } from "./collapsible-
|
|
23
|
-
import { t as LayerCard } from "./layer-card-
|
|
24
|
-
import { t as SkeletonLine } from "./skeleton-line-
|
|
25
|
-
import { n as useMenuNavigation, t as MenuBar } from "./menubar-
|
|
26
|
-
import { t as Meter } from "./meter-
|
|
27
|
-
import { t as Pagination } from "./pagination-
|
|
28
|
-
import { t as Select } from "./select-
|
|
29
|
-
import { r as Switch } from "./switch-
|
|
30
|
-
import { t as Tabs } from "./tabs-
|
|
31
|
-
import { r as Table } from "./table-
|
|
32
|
-
import { c as SF_POPOVER_DEFAULT_VARIANTS, l as SF_POPOVER_VARIANTS, t as Popover } from "./popover-
|
|
33
|
-
import { _ as validateFilterValue, a as DEFAULT_MULTISELECT_OPERATORS, c as DEFAULT_TEXT_OPERATORS, d as formatFilterValue, f as getFieldByKey, g as mergeI18n, h as groupFields, i as DEFAULT_I18N, l as createFilter, m as getValueLabel, n as SF_FILTERS_DEFAULT_VARIANTS, o as DEFAULT_OPERATORS, p as getFieldOperators, r as SF_FILTERS_VARIANTS, s as DEFAULT_SELECT_OPERATORS, t as Filters, u as createFilterGroup } from "./filters-
|
|
34
|
-
import { t as Empty } from "./empty-
|
|
35
|
-
import { n as SF_DATA_GRID_DEFAULT_VARIANTS, r as SF_DATA_GRID_VARIANTS, t as DataGrid } from "./data-grid-
|
|
36
|
-
import { a as useSFToastManager, n as ToastProvider, r as Toasty, t as Toast } from "./toast-
|
|
37
|
-
import { n as SF_SENSITIVE_INPUT_VARIANTS, r as SensitiveInput, t as SF_SENSITIVE_INPUT_DEFAULT_VARIANTS } from "./sensitive-input-
|
|
38
|
-
import { i as SF_RADIO_VARIANTS, n as RadioGroup, r as SF_RADIO_DEFAULT_VARIANTS, t as Radio } from "./radio-
|
|
39
|
-
import { n as SF_COMMAND_PALETTE_DEFAULT_VARIANTS, r as SF_COMMAND_PALETTE_VARIANTS, t as CommandPalette } from "./command-palette-
|
|
2
|
+
import { n as safeRandomId, t as cn } from "./cn-CmAOpn49.js";
|
|
3
|
+
import { n as useLinkComponent, t as LinkProvider } from "./link-provider-BSn8YJon.js";
|
|
4
|
+
import { t as Loader } from "./loader-BEMz8pJO.js";
|
|
5
|
+
import { t as Text } from "./text-iQ0YUFNg.js";
|
|
6
|
+
import { n as TooltipProvider, t as Tooltip } from "./tooltip-uobk6Oh-.js";
|
|
7
|
+
import { t as Badge } from "./badge-Beb-6uut.js";
|
|
8
|
+
import { n as BannerVariant, t as Banner } from "./banner-CCEksxPg.js";
|
|
9
|
+
import { i as buttonVariants, n as LinkButton, r as RefreshButton, t as Button } from "./button-BHOgXJRU.js";
|
|
10
|
+
import { t as DateRangePicker } from "./date-range-picker-YKYvum_r.js";
|
|
11
|
+
import { a as labelVariants, i as labelContentVariants, n as SF_LABEL_DEFAULT_VARIANTS, r as SF_LABEL_VARIANTS, t as Label } from "./label-CiGZ464N.js";
|
|
12
|
+
import { t as Checkbox } from "./checkbox-Cy_OCyay.js";
|
|
13
|
+
import { i as fieldVariants, n as SF_FIELD_DEFAULT_VARIANTS, r as SF_FIELD_VARIANTS, t as Field } from "./field-DBpFzzBS.js";
|
|
14
|
+
import { r as inputVariants, t as Input } from "./input-GkfMQZC_.js";
|
|
15
|
+
import { n as InputArea, r as Textarea, t as InputGroup } from "./input-COmx2M_R.js";
|
|
16
|
+
import { t as ClipboardText } from "./clipboard-text-CKSvNp9L.js";
|
|
17
|
+
import { n as CodeBlock, t as Code } from "./code-JsQz-0G_.js";
|
|
18
|
+
import { t as Combobox } from "./combobox-CQwDmqgA.js";
|
|
19
|
+
import { t as Surface } from "./surface-CWdSFVUx.js";
|
|
20
|
+
import { a as DialogTitle, i as DialogRoot, n as DialogClose, o as DialogTrigger, r as DialogDescription, t as Dialog } from "./dialog-DYqu4aDO.js";
|
|
21
|
+
import { t as DropdownMenu } from "./dropdown-XzbnRLYR.js";
|
|
22
|
+
import { t as Collapsible } from "./collapsible-1kOZ-89L.js";
|
|
23
|
+
import { t as LayerCard } from "./layer-card-8l8GuLQr.js";
|
|
24
|
+
import { t as SkeletonLine } from "./skeleton-line-CxxYVTO2.js";
|
|
25
|
+
import { n as useMenuNavigation, t as MenuBar } from "./menubar-CoOr4ocj.js";
|
|
26
|
+
import { t as Meter } from "./meter-Pf_VOl59.js";
|
|
27
|
+
import { t as Pagination } from "./pagination-DSY279Ta.js";
|
|
28
|
+
import { t as Select } from "./select-BFifYqHA.js";
|
|
29
|
+
import { r as Switch } from "./switch-TA4cByCJ.js";
|
|
30
|
+
import { t as Tabs } from "./tabs-bnH2vGLv.js";
|
|
31
|
+
import { r as Table } from "./table-BM8JBGBs.js";
|
|
32
|
+
import { c as SF_POPOVER_DEFAULT_VARIANTS, l as SF_POPOVER_VARIANTS, t as Popover } from "./popover-BY-e9co1.js";
|
|
33
|
+
import { _ as validateFilterValue, a as DEFAULT_MULTISELECT_OPERATORS, c as DEFAULT_TEXT_OPERATORS, d as formatFilterValue, f as getFieldByKey, g as mergeI18n, h as groupFields, i as DEFAULT_I18N, l as createFilter, m as getValueLabel, n as SF_FILTERS_DEFAULT_VARIANTS, o as DEFAULT_OPERATORS, p as getFieldOperators, r as SF_FILTERS_VARIANTS, s as DEFAULT_SELECT_OPERATORS, t as Filters, u as createFilterGroup } from "./filters-SmEl93za.js";
|
|
34
|
+
import { t as Empty } from "./empty-C1tAkawe.js";
|
|
35
|
+
import { n as SF_DATA_GRID_DEFAULT_VARIANTS, r as SF_DATA_GRID_VARIANTS, t as DataGrid } from "./data-grid-DDSFMHud.js";
|
|
36
|
+
import { a as useSFToastManager, n as ToastProvider, r as Toasty, t as Toast } from "./toast-CgZVaAkw.js";
|
|
37
|
+
import { n as SF_SENSITIVE_INPUT_VARIANTS, r as SensitiveInput, t as SF_SENSITIVE_INPUT_DEFAULT_VARIANTS } from "./sensitive-input-DHLZcM73.js";
|
|
38
|
+
import { i as SF_RADIO_VARIANTS, n as RadioGroup, r as SF_RADIO_DEFAULT_VARIANTS, t as Radio } from "./radio-DZwL13j0.js";
|
|
39
|
+
import { n as SF_COMMAND_PALETTE_DEFAULT_VARIANTS, r as SF_COMMAND_PALETTE_VARIANTS, t as CommandPalette } from "./command-palette-Bkuv3e6o.js";
|
|
40
40
|
import { Link, SF_LINK_DEFAULT_VARIANTS, SF_LINK_VARIANTS, linkVariants } from "./components/link.js";
|
|
41
|
-
import { t as Breadcrumb } from "./breadcrumbs-
|
|
42
|
-
import { a as gridItemVariants, i as SF_GRID_VARIANTS, n as GridItem, o as gridVariants, r as SF_GRID_DEFAULT_VARIANTS, t as Grid } from "./grid-
|
|
43
|
-
import { t as DatePicker } from "./date-picker
|
|
44
|
-
import { t as Flow } from "./flow-
|
|
45
|
-
import { a as SignalFlareAILogo, i as SF_SIGNALFLARE_AI_LOGO_VARIANTS, n as PoweredBySignalFlareAI, o as SignalflareAiLogo, r as SF_SIGNALFLARE_AI_LOGO_DEFAULT_VARIANTS, s as generateSignalFlareAILogoSvg, t as PoweredByNavigator } from "./signalflare-ai-logo-
|
|
46
|
-
import { i as useAiStreamingTextWithMeta, n as SF_AI_STREAMING_TEXT_VARIANTS, r as useAiStreamingText, t as SF_AI_STREAMING_TEXT_DEFAULT_VARIANTS } from "./ai-streaming-text-
|
|
47
|
-
import { i as SF_AI_ACTIONS_VARIANTS, n as AiActions, r as SF_AI_ACTIONS_DEFAULT_VARIANTS, t as AiAction } from "./ai-actions-
|
|
48
|
-
import { n as SF_AI_SHIMMER_DEFAULT_VARIANTS, r as SF_AI_SHIMMER_VARIANTS, t as AiShimmer } from "./ai-shimmer-
|
|
49
|
-
import { i as SF_AI_SUGGESTION_VARIANTS, n as AiSuggestions, r as SF_AI_SUGGESTION_DEFAULT_VARIANTS, t as AiSuggestion } from "./ai-suggestion-
|
|
50
|
-
import { i as SF_AI_CODE_BLOCK_VARIANTS, n as AiCodeBlockCopyButton, r as SF_AI_CODE_BLOCK_DEFAULT_VARIANTS, t as AiCodeBlock } from "./ai-code-block-
|
|
51
|
-
import { n as SF_AI_RESPONSE_DEFAULT_VARIANTS, r as SF_AI_RESPONSE_VARIANTS, t as AiResponse } from "./ai-response-
|
|
52
|
-
import { n as SF_AI_STATUS_BADGE_DEFAULT_VARIANTS, r as SF_AI_STATUS_BADGE_VARIANTS, t as AiStatusBadge } from "./ai-status-badge-
|
|
53
|
-
import { a as extractFirstBoldText, i as SF_AI_REASONING_VARIANTS, n as AiReasoningGroup, o as formatDuration, r as SF_AI_REASONING_DEFAULT_VARIANTS, s as truncateReasoning, t as AiReasoning } from "./ai-reasoning-
|
|
54
|
-
import { a as SF_AI_TOOL_VARIANTS, c as getToolIcon, d as hasToolResult, f as isToolLoading, i as SF_AI_TOOL_DEFAULT_VARIANTS, l as hasToolError, n as AiToolCallGroup, o as getToolDisplayName, r as AiToolCallTimeline, s as getToolErrorText, t as AiToolCall, u as hasToolOutputError } from "./ai-tool-
|
|
55
|
-
import { a as AiMessageAttachments, c as AiMessageBranchSelector, d as SF_AI_MESSAGE_DEFAULT_VARIANTS, f as SF_AI_MESSAGE_VARIANTS, i as AiMessageAttachment, l as AiMessageContent, n as AiMessageAction, o as AiMessageBranch, r as AiMessageActions, s as AiMessageBranchContent, t as AiMessage, u as AiMessageToolbar } from "./ai-message-
|
|
56
|
-
import { a as SF_AI_MEASURE_FONT, c as SF_AI_USER_VERTICAL_PADDING, d as AiConversationContent, f as AiConversationScrollButton, h as useConversationVirtualizer, i as SF_AI_DEFAULT_MESSAGE_GAP, l as SF_AI_USER_WIDTH_FRACTION, m as SF_AI_CONVERSATION_VARIANTS, n as SF_AI_ASSISTANT_VERTICAL_PADDING, o as SF_AI_MEASURE_LINE_HEIGHT, p as SF_AI_CONVERSATION_DEFAULT_VARIANTS, r as SF_AI_ASSISTANT_WIDTH_FRACTION, s as SF_AI_USER_HORIZONTAL_PADDING, t as SF_AI_ASSISTANT_HORIZONTAL_PADDING, u as AiConversation } from "./ai-conversation-
|
|
57
|
-
import { A as SF_AI_PROMPT_INPUT_DEFAULT_VARIANTS, B as useRequestField, C as PromptInputSpeechButton, D as PromptInputTextarea, E as PromptInputTags, F as PromptInputRequestControllerProvider, I as createPromptInputRequestController, L as useDisplayField, M as usePromptInputAttachments, N as usePromptInputController, O as PromptInputToolbar, P as useProviderAttachments, R as useOptionalPromptInputRequestController, S as PromptInputProvider, T as PromptInputTag, V as useSetRequestField, _ as PromptInputModeCycle, a as PromptInputActionMenuItem, b as PromptInputModelCycle, c as PromptInputAttachButton, d as PromptInputBackLayer, f as PromptInputBody, g as PromptInputEditor, h as PromptInputCompactSelect, i as PromptInputActionMenuContent, j as SF_AI_PROMPT_INPUT_VARIANTS, k as PromptInputTools, l as PromptInputAttachment, m as PromptInputCompactCycle, n as PromptInputActionAddAttachments, o as PromptInputActionMenuTrigger, p as PromptInputButton, r as PromptInputActionMenu, s as PromptInputAddTagButton, t as PromptInput, u as PromptInputAttachments, v as PromptInputModeSelect, w as PromptInputSubmit, x as PromptInputModelSelect, y as PromptInputModeSelector, z as usePromptInputRequestController } from "./ai-prompt-input-
|
|
58
|
-
import { i as getStoredThemeMode, n as SF_THEME_TOGGLE_VARIANTS, r as ThemeToggle, t as SF_THEME_TOGGLE_DEFAULT_VARIANTS } from "./theme-toggle-
|
|
59
|
-
import { n as SF_AI_APPROVAL_DEFAULT_VARIANTS, r as SF_AI_APPROVAL_VARIANTS, t as AiApproval } from "./ai-approval-
|
|
60
|
-
import { n as SF_AI_QUESTION_DEFAULT_VARIANTS, r as SF_AI_QUESTION_VARIANTS, t as AiQuestion } from "./ai-question-
|
|
61
|
-
import { i as SF_AI_TASK_LIST_VARIANTS, n as AiTaskListItem, r as SF_AI_TASK_LIST_DEFAULT_VARIANTS, t as AiTaskList } from "./ai-task-list-
|
|
62
|
-
import { n as SF_AI_SUBAGENT_DEFAULT_VARIANTS, r as SF_AI_SUBAGENT_VARIANTS, t as AiSubagent } from "./ai-subagent-
|
|
63
|
-
import { n as SF_AI_INFO_BANNER_DEFAULT_VARIANTS, r as SF_AI_INFO_BANNER_VARIANTS, t as AiInfoBanner } from "./ai-info-banner-
|
|
64
|
-
import { n as SF_AI_USAGE_BAR_DEFAULT_VARIANTS, r as SF_AI_USAGE_BAR_VARIANTS, t as AiUsageBar } from "./ai-usage-bar-
|
|
65
|
-
import { a as useAgentHarness, i as fromMastraHarness, n as SF_USE_AGENT_HARNESS_VARIANTS, r as createAgentHarnessState, t as SF_USE_AGENT_HARNESS_DEFAULT_VARIANTS } from "./use-agent-harness-
|
|
66
|
-
import { n as SF_AI_AGENT_CARD_DEFAULT_VARIANTS, r as SF_AI_AGENT_CARD_VARIANTS, t as AiAgentCard } from "./ai-agent-card-
|
|
67
|
-
import { n as SF_AI_MISSION_HEADER_DEFAULT_VARIANTS, r as SF_AI_MISSION_HEADER_VARIANTS, t as AiMissionHeader } from "./ai-mission-header-
|
|
68
|
-
import { i as SF_AI_TIMELINE_VARIANTS, n as AiTimelineLane, r as SF_AI_TIMELINE_DEFAULT_VARIANTS, t as AiTimeline } from "./ai-timeline-
|
|
69
|
-
import { A as useSidebar, C as SidebarMenuSubItem, D as SidebarRoot, E as SidebarResizeHandle, O as SidebarSeparator, S as SidebarMenuSubButton, T as SidebarRail, _ as SidebarMenuBadge, a as SidebarCollapsible, b as SidebarMenuItem, c as SidebarContent, d as SidebarGroupContent, f as SidebarGroupLabel, g as SidebarMenuAction, h as SidebarMenu, i as Sidebar, k as SidebarTrigger, l as SidebarFooter, m as SidebarInput, n as SF_SIDEBAR_STYLING, o as SidebarCollapsibleContent, p as SidebarHeader, r as SF_SIDEBAR_VARIANTS, s as SidebarCollapsibleTrigger, t as SF_SIDEBAR_DEFAULT_VARIANTS, u as SidebarGroup, v as SidebarMenuButton, w as SidebarProvider, x as SidebarMenuSub, y as SidebarMenuChevron } from "./sidebar-
|
|
70
|
-
import { n as SF_STAT_CARD_VARIANTS, r as StatCard, t as SF_STAT_CARD_DEFAULT_VARIANTS } from "./stat-card-
|
|
71
|
-
import { r as Sparkline } from "./sparkline-
|
|
72
|
-
import { t as TextRoll } from "./text-roll-
|
|
73
|
-
import { r as groupParts, t as AiPartGroup } from "./ai-part-group-
|
|
41
|
+
import { t as Breadcrumb } from "./breadcrumbs-HiTmgaZ4.js";
|
|
42
|
+
import { a as gridItemVariants, i as SF_GRID_VARIANTS, n as GridItem, o as gridVariants, r as SF_GRID_DEFAULT_VARIANTS, t as Grid } from "./grid-CifjQL-5.js";
|
|
43
|
+
import { t as DatePicker } from "./date-picker-O34AqG3f.js";
|
|
44
|
+
import { t as Flow } from "./flow-BLzgbq1T.js";
|
|
45
|
+
import { a as SignalFlareAILogo, i as SF_SIGNALFLARE_AI_LOGO_VARIANTS, n as PoweredBySignalFlareAI, o as SignalflareAiLogo, r as SF_SIGNALFLARE_AI_LOGO_DEFAULT_VARIANTS, s as generateSignalFlareAILogoSvg, t as PoweredByNavigator } from "./signalflare-ai-logo-CNaDT_w8.js";
|
|
46
|
+
import { i as useAiStreamingTextWithMeta, n as SF_AI_STREAMING_TEXT_VARIANTS, r as useAiStreamingText, t as SF_AI_STREAMING_TEXT_DEFAULT_VARIANTS } from "./ai-streaming-text-DgYu64UH.js";
|
|
47
|
+
import { i as SF_AI_ACTIONS_VARIANTS, n as AiActions, r as SF_AI_ACTIONS_DEFAULT_VARIANTS, t as AiAction } from "./ai-actions-CBfz5XEf.js";
|
|
48
|
+
import { n as SF_AI_SHIMMER_DEFAULT_VARIANTS, r as SF_AI_SHIMMER_VARIANTS, t as AiShimmer } from "./ai-shimmer-BamNMNK3.js";
|
|
49
|
+
import { i as SF_AI_SUGGESTION_VARIANTS, n as AiSuggestions, r as SF_AI_SUGGESTION_DEFAULT_VARIANTS, t as AiSuggestion } from "./ai-suggestion-Bj6vF7CT.js";
|
|
50
|
+
import { i as SF_AI_CODE_BLOCK_VARIANTS, n as AiCodeBlockCopyButton, r as SF_AI_CODE_BLOCK_DEFAULT_VARIANTS, t as AiCodeBlock } from "./ai-code-block-P9TJHvaC.js";
|
|
51
|
+
import { n as SF_AI_RESPONSE_DEFAULT_VARIANTS, r as SF_AI_RESPONSE_VARIANTS, t as AiResponse } from "./ai-response-hbVCZJmo.js";
|
|
52
|
+
import { n as SF_AI_STATUS_BADGE_DEFAULT_VARIANTS, r as SF_AI_STATUS_BADGE_VARIANTS, t as AiStatusBadge } from "./ai-status-badge-BZLczdkI.js";
|
|
53
|
+
import { a as extractFirstBoldText, i as SF_AI_REASONING_VARIANTS, n as AiReasoningGroup, o as formatDuration, r as SF_AI_REASONING_DEFAULT_VARIANTS, s as truncateReasoning, t as AiReasoning } from "./ai-reasoning-BLfBXx3F.js";
|
|
54
|
+
import { a as SF_AI_TOOL_VARIANTS, c as getToolIcon, d as hasToolResult, f as isToolLoading, i as SF_AI_TOOL_DEFAULT_VARIANTS, l as hasToolError, n as AiToolCallGroup, o as getToolDisplayName, r as AiToolCallTimeline, s as getToolErrorText, t as AiToolCall, u as hasToolOutputError } from "./ai-tool-CfRcwmHT.js";
|
|
55
|
+
import { a as AiMessageAttachments, c as AiMessageBranchSelector, d as SF_AI_MESSAGE_DEFAULT_VARIANTS, f as SF_AI_MESSAGE_VARIANTS, i as AiMessageAttachment, l as AiMessageContent, n as AiMessageAction, o as AiMessageBranch, r as AiMessageActions, s as AiMessageBranchContent, t as AiMessage, u as AiMessageToolbar } from "./ai-message-Ci3gwM7G.js";
|
|
56
|
+
import { a as SF_AI_MEASURE_FONT, c as SF_AI_USER_VERTICAL_PADDING, d as AiConversationContent, f as AiConversationScrollButton, h as useConversationVirtualizer, i as SF_AI_DEFAULT_MESSAGE_GAP, l as SF_AI_USER_WIDTH_FRACTION, m as SF_AI_CONVERSATION_VARIANTS, n as SF_AI_ASSISTANT_VERTICAL_PADDING, o as SF_AI_MEASURE_LINE_HEIGHT, p as SF_AI_CONVERSATION_DEFAULT_VARIANTS, r as SF_AI_ASSISTANT_WIDTH_FRACTION, s as SF_AI_USER_HORIZONTAL_PADDING, t as SF_AI_ASSISTANT_HORIZONTAL_PADDING, u as AiConversation } from "./ai-conversation-Qslfdi1t.js";
|
|
57
|
+
import { A as SF_AI_PROMPT_INPUT_DEFAULT_VARIANTS, B as useRequestField, C as PromptInputSpeechButton, D as PromptInputTextarea, E as PromptInputTags, F as PromptInputRequestControllerProvider, I as createPromptInputRequestController, L as useDisplayField, M as usePromptInputAttachments, N as usePromptInputController, O as PromptInputToolbar, P as useProviderAttachments, R as useOptionalPromptInputRequestController, S as PromptInputProvider, T as PromptInputTag, V as useSetRequestField, _ as PromptInputModeCycle, a as PromptInputActionMenuItem, b as PromptInputModelCycle, c as PromptInputAttachButton, d as PromptInputBackLayer, f as PromptInputBody, g as PromptInputEditor, h as PromptInputCompactSelect, i as PromptInputActionMenuContent, j as SF_AI_PROMPT_INPUT_VARIANTS, k as PromptInputTools, l as PromptInputAttachment, m as PromptInputCompactCycle, n as PromptInputActionAddAttachments, o as PromptInputActionMenuTrigger, p as PromptInputButton, r as PromptInputActionMenu, s as PromptInputAddTagButton, t as PromptInput, u as PromptInputAttachments, v as PromptInputModeSelect, w as PromptInputSubmit, x as PromptInputModelSelect, y as PromptInputModeSelector, z as usePromptInputRequestController } from "./ai-prompt-input-Bm4XoSj2.js";
|
|
58
|
+
import { i as getStoredThemeMode, n as SF_THEME_TOGGLE_VARIANTS, r as ThemeToggle, t as SF_THEME_TOGGLE_DEFAULT_VARIANTS } from "./theme-toggle-BTVxD-fD.js";
|
|
59
|
+
import { n as SF_AI_APPROVAL_DEFAULT_VARIANTS, r as SF_AI_APPROVAL_VARIANTS, t as AiApproval } from "./ai-approval-Ci8N70a7.js";
|
|
60
|
+
import { n as SF_AI_QUESTION_DEFAULT_VARIANTS, r as SF_AI_QUESTION_VARIANTS, t as AiQuestion } from "./ai-question-OyJovxGe.js";
|
|
61
|
+
import { i as SF_AI_TASK_LIST_VARIANTS, n as AiTaskListItem, r as SF_AI_TASK_LIST_DEFAULT_VARIANTS, t as AiTaskList } from "./ai-task-list-C_UQYpk9.js";
|
|
62
|
+
import { n as SF_AI_SUBAGENT_DEFAULT_VARIANTS, r as SF_AI_SUBAGENT_VARIANTS, t as AiSubagent } from "./ai-subagent-p97AI1h9.js";
|
|
63
|
+
import { n as SF_AI_INFO_BANNER_DEFAULT_VARIANTS, r as SF_AI_INFO_BANNER_VARIANTS, t as AiInfoBanner } from "./ai-info-banner-B_9vtGK3.js";
|
|
64
|
+
import { n as SF_AI_USAGE_BAR_DEFAULT_VARIANTS, r as SF_AI_USAGE_BAR_VARIANTS, t as AiUsageBar } from "./ai-usage-bar-45pVRCGA.js";
|
|
65
|
+
import { a as useAgentHarness, i as fromMastraHarness, n as SF_USE_AGENT_HARNESS_VARIANTS, r as createAgentHarnessState, t as SF_USE_AGENT_HARNESS_DEFAULT_VARIANTS } from "./use-agent-harness-Dl8w6X5O.js";
|
|
66
|
+
import { n as SF_AI_AGENT_CARD_DEFAULT_VARIANTS, r as SF_AI_AGENT_CARD_VARIANTS, t as AiAgentCard } from "./ai-agent-card-CByAUe0q.js";
|
|
67
|
+
import { n as SF_AI_MISSION_HEADER_DEFAULT_VARIANTS, r as SF_AI_MISSION_HEADER_VARIANTS, t as AiMissionHeader } from "./ai-mission-header-CaBc19-t.js";
|
|
68
|
+
import { i as SF_AI_TIMELINE_VARIANTS, n as AiTimelineLane, r as SF_AI_TIMELINE_DEFAULT_VARIANTS, t as AiTimeline } from "./ai-timeline-CePL1LOU.js";
|
|
69
|
+
import { A as useSidebar, C as SidebarMenuSubItem, D as SidebarRoot, E as SidebarResizeHandle, O as SidebarSeparator, S as SidebarMenuSubButton, T as SidebarRail, _ as SidebarMenuBadge, a as SidebarCollapsible, b as SidebarMenuItem, c as SidebarContent, d as SidebarGroupContent, f as SidebarGroupLabel, g as SidebarMenuAction, h as SidebarMenu, i as Sidebar, k as SidebarTrigger, l as SidebarFooter, m as SidebarInput, n as SF_SIDEBAR_STYLING, o as SidebarCollapsibleContent, p as SidebarHeader, r as SF_SIDEBAR_VARIANTS, s as SidebarCollapsibleTrigger, t as SF_SIDEBAR_DEFAULT_VARIANTS, u as SidebarGroup, v as SidebarMenuButton, w as SidebarProvider, x as SidebarMenuSub, y as SidebarMenuChevron } from "./sidebar-odGsdvG4.js";
|
|
70
|
+
import { n as SF_STAT_CARD_VARIANTS, r as StatCard, t as SF_STAT_CARD_DEFAULT_VARIANTS } from "./stat-card-Bspk4XFr.js";
|
|
71
|
+
import { r as Sparkline } from "./sparkline-BQ-4j2W2.js";
|
|
72
|
+
import { t as TextRoll } from "./text-roll-C3U2jd2u.js";
|
|
73
|
+
import { r as groupParts, t as AiPartGroup } from "./ai-part-group-Dx1Mr92B.js";
|
|
74
74
|
import { useCallback, useEffect, useState } from "react";
|
|
75
75
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
76
76
|
import { CheckIcon, CopyIcon, WarningCircleIcon, XIcon } from "@phosphor-icons/react";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../src/blocks/delete-resource/delete-resource.tsx"],"sourcesContent":["import {\n CheckIcon,\n CopyIcon,\n WarningCircleIcon,\n XIcon,\n} from \"@phosphor-icons/react\";\nimport { useState, useCallback, useEffect } from \"react\";\n\nimport { Banner } from \"../../components/banner\";\nimport { Button } from \"../../components/button\";\nimport {\n Dialog,\n DialogRoot,\n DialogTitle,\n DialogClose,\n} from \"../../components/dialog\";\nimport { Input } from \"../../components/input\";\nimport { cn } from \"../../utils/cn\";\n\nexport const SF_DELETE_RESOURCE_VARIANTS = {\n size: {\n sm: {\n classes: \"\",\n description: \"Small dialog for simple delete confirmations\",\n },\n base: {\n classes: \"\",\n description: \"Default delete confirmation dialog size\",\n },\n },\n} as const;\n\nexport const SF_DELETE_RESOURCE_DEFAULT_VARIANTS = {\n size: \"base\",\n} as const;\n\nexport type SFDeleteResourceSize =\n keyof typeof SF_DELETE_RESOURCE_VARIANTS.size;\n\nexport interface SFDeleteResourceVariantsProps {\n size?: SFDeleteResourceSize;\n}\n\nexport interface DeleteResourceProps extends SFDeleteResourceVariantsProps {\n /** Whether the dialog is open */\n open: boolean;\n /** Callback when open state changes */\n onOpenChange: (open: boolean) => void;\n /** The type of resource being deleted (e.g., \"Zone\", \"Worker\", \"KV Namespace\") */\n resourceType: string;\n /** The name of the specific resource being deleted */\n resourceName: string;\n /** Callback when delete is confirmed */\n onDelete: () => void | Promise<void>;\n /** Whether the delete action is in progress */\n isDeleting?: boolean;\n /** Whether the confirmation input should be case-sensitive (default: true) */\n caseSensitive?: boolean;\n /** Custom delete button text (defaults to \"Delete {resourceType}\") */\n deleteButtonText?: string;\n /** Additional className for the dialog */\n className?: string;\n /** Error message to display if the delete action fails */\n errorMessage?: string;\n}\n\nexport function DeleteResource({\n open,\n onOpenChange,\n resourceType,\n resourceName,\n onDelete,\n isDeleting = false,\n caseSensitive = true,\n deleteButtonText,\n size = SF_DELETE_RESOURCE_DEFAULT_VARIANTS.size,\n errorMessage,\n className,\n}: DeleteResourceProps) {\n const [confirmationInput, setConfirmationInput] = useState(\"\");\n const [copied, setCopied] = useState(false);\n\n useEffect(() => {\n if (!open) {\n setConfirmationInput(\"\");\n setCopied(false);\n }\n }, [open]);\n\n const normalizeForComparison = useCallback(\n (str: string) => (caseSensitive ? str : str.toLowerCase()),\n [caseSensitive]\n );\n\n const isConfirmed =\n normalizeForComparison(confirmationInput) ===\n normalizeForComparison(resourceName);\n\n const handleDelete = useCallback(async () => {\n if (!isConfirmed || isDeleting) return;\n await onDelete();\n }, [isConfirmed, isDeleting, onDelete]);\n\n const handleCopy = useCallback(async () => {\n await navigator.clipboard.writeText(resourceName);\n setCopied(true);\n setTimeout(() => setCopied(false), 1500);\n }, [resourceName]);\n\n return (\n <DialogRoot open={open} onOpenChange={onOpenChange}>\n <Dialog size={size} className={cn(\"p-0\", className)}>\n <div className=\"flex items-center justify-between border-b border-sf-line px-6 py-4\">\n <DialogTitle className=\"text-lg font-semibold\">\n Delete {resourceName}\n </DialogTitle>\n <DialogClose\n render={(props) => (\n <Button\n {...props}\n variant=\"ghost\"\n shape=\"square\"\n size=\"sm\"\n aria-label=\"Close\"\n disabled={isDeleting}\n >\n <XIcon size={18} />\n </Button>\n )}\n />\n </div>\n\n <div className=\"flex flex-col p-6 gap-4\">\n <div className=\"flex flex-col gap-2\">\n {errorMessage && (\n <Banner icon={<WarningCircleIcon />} variant=\"error\">\n {errorMessage}\n </Banner>\n )}\n <p className=\"text-base text-sf-subtle max-w-prose text-pretty\">\n This action cannot be undone. This will permanently delete the{\" \"}\n <span className=\"font-medium text-sf-default\">\n {resourceName}\n </span>{\" \"}\n {resourceType.toLowerCase()}.\n </p>\n </div>\n\n <div className=\"flex flex-col gap-2\">\n <div className=\"flex items-center gap-1.5 text-base\">\n <span>\n Type{\" \"}\n <button\n className=\"font-mono text-sm inline font-semibold bg-sf-tint hover:bg-sf-fill rounded-md px-2 py-1 group hover:cursor-pointer\"\n onClick={handleCopy}\n aria-label={`Copy ${resourceName} to clipboard`}\n >\n {resourceName}\n\n {copied ? (\n <CheckIcon\n size={12}\n weight=\"bold\"\n className=\"inline ml-1.5\"\n />\n ) : (\n <CopyIcon\n size={12}\n weight=\"bold\"\n className=\"inline text-sf-subtle group-hover:text-sf-default ml-1.5\"\n />\n )}\n </button>{\" \"}\n to confirm:\n </span>\n </div>\n <Input\n placeholder={resourceName}\n value={confirmationInput}\n onChange={(e) => setConfirmationInput(e.target.value)}\n disabled={isDeleting}\n autoComplete=\"off\"\n autoCorrect=\"off\"\n autoCapitalize=\"off\"\n spellCheck={false}\n aria-label={`Type ${resourceName} to confirm deletion`}\n className=\"w-full\"\n />\n </div>\n </div>\n\n <div className=\"flex justify-end gap-3 border-t border-sf-line px-6 py-4\">\n <DialogClose\n render={(props) => (\n <Button {...props} variant=\"secondary\" disabled={isDeleting}>\n Cancel\n </Button>\n )}\n />\n <Button\n variant=\"destructive\"\n onClick={handleDelete}\n disabled={!isConfirmed || isDeleting}\n loading={isDeleting}\n >\n {deleteButtonText || `Delete ${resourceType}`}\n </Button>\n </div>\n </Dialog>\n </DialogRoot>\n );\n}\n\nDeleteResource.displayName = \"DeleteResource\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmBA,IAAa,8BAA8B,EACzC,MAAM;CACJ,IAAI;EACF,SAAS;EACT,aAAa;
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../src/blocks/delete-resource/delete-resource.tsx"],"sourcesContent":["import {\n CheckIcon,\n CopyIcon,\n WarningCircleIcon,\n XIcon,\n} from \"@phosphor-icons/react\";\nimport { useState, useCallback, useEffect } from \"react\";\n\nimport { Banner } from \"../../components/banner\";\nimport { Button } from \"../../components/button\";\nimport {\n Dialog,\n DialogRoot,\n DialogTitle,\n DialogClose,\n} from \"../../components/dialog\";\nimport { Input } from \"../../components/input\";\nimport { cn } from \"../../utils/cn\";\n\nexport const SF_DELETE_RESOURCE_VARIANTS = {\n size: {\n sm: {\n classes: \"\",\n description: \"Small dialog for simple delete confirmations\",\n },\n base: {\n classes: \"\",\n description: \"Default delete confirmation dialog size\",\n },\n },\n} as const;\n\nexport const SF_DELETE_RESOURCE_DEFAULT_VARIANTS = {\n size: \"base\",\n} as const;\n\nexport type SFDeleteResourceSize =\n keyof typeof SF_DELETE_RESOURCE_VARIANTS.size;\n\nexport interface SFDeleteResourceVariantsProps {\n size?: SFDeleteResourceSize;\n}\n\nexport interface DeleteResourceProps extends SFDeleteResourceVariantsProps {\n /** Whether the dialog is open */\n open: boolean;\n /** Callback when open state changes */\n onOpenChange: (open: boolean) => void;\n /** The type of resource being deleted (e.g., \"Zone\", \"Worker\", \"KV Namespace\") */\n resourceType: string;\n /** The name of the specific resource being deleted */\n resourceName: string;\n /** Callback when delete is confirmed */\n onDelete: () => void | Promise<void>;\n /** Whether the delete action is in progress */\n isDeleting?: boolean;\n /** Whether the confirmation input should be case-sensitive (default: true) */\n caseSensitive?: boolean;\n /** Custom delete button text (defaults to \"Delete {resourceType}\") */\n deleteButtonText?: string;\n /** Additional className for the dialog */\n className?: string;\n /** Error message to display if the delete action fails */\n errorMessage?: string;\n}\n\nexport function DeleteResource({\n open,\n onOpenChange,\n resourceType,\n resourceName,\n onDelete,\n isDeleting = false,\n caseSensitive = true,\n deleteButtonText,\n size = SF_DELETE_RESOURCE_DEFAULT_VARIANTS.size,\n errorMessage,\n className,\n}: DeleteResourceProps) {\n const [confirmationInput, setConfirmationInput] = useState(\"\");\n const [copied, setCopied] = useState(false);\n\n useEffect(() => {\n if (!open) {\n setConfirmationInput(\"\");\n setCopied(false);\n }\n }, [open]);\n\n const normalizeForComparison = useCallback(\n (str: string) => (caseSensitive ? str : str.toLowerCase()),\n [caseSensitive]\n );\n\n const isConfirmed =\n normalizeForComparison(confirmationInput) ===\n normalizeForComparison(resourceName);\n\n const handleDelete = useCallback(async () => {\n if (!isConfirmed || isDeleting) return;\n await onDelete();\n }, [isConfirmed, isDeleting, onDelete]);\n\n const handleCopy = useCallback(async () => {\n await navigator.clipboard.writeText(resourceName);\n setCopied(true);\n setTimeout(() => setCopied(false), 1500);\n }, [resourceName]);\n\n return (\n <DialogRoot open={open} onOpenChange={onOpenChange}>\n <Dialog size={size} className={cn(\"p-0\", className)}>\n <div className=\"flex items-center justify-between border-b border-sf-line px-6 py-4\">\n <DialogTitle className=\"text-lg font-semibold\">\n Delete {resourceName}\n </DialogTitle>\n <DialogClose\n render={(props) => (\n <Button\n {...props}\n variant=\"ghost\"\n shape=\"square\"\n size=\"sm\"\n aria-label=\"Close\"\n disabled={isDeleting}\n >\n <XIcon size={18} />\n </Button>\n )}\n />\n </div>\n\n <div className=\"flex flex-col p-6 gap-4\">\n <div className=\"flex flex-col gap-2\">\n {errorMessage && (\n <Banner icon={<WarningCircleIcon />} variant=\"error\">\n {errorMessage}\n </Banner>\n )}\n <p className=\"text-base text-sf-subtle max-w-prose text-pretty\">\n This action cannot be undone. This will permanently delete the{\" \"}\n <span className=\"font-medium text-sf-default\">\n {resourceName}\n </span>{\" \"}\n {resourceType.toLowerCase()}.\n </p>\n </div>\n\n <div className=\"flex flex-col gap-2\">\n <div className=\"flex items-center gap-1.5 text-base\">\n <span>\n Type{\" \"}\n <button\n className=\"font-mono text-sm inline font-semibold bg-sf-tint hover:bg-sf-fill rounded-md px-2 py-1 group hover:cursor-pointer\"\n onClick={handleCopy}\n aria-label={`Copy ${resourceName} to clipboard`}\n >\n {resourceName}\n\n {copied ? (\n <CheckIcon\n size={12}\n weight=\"bold\"\n className=\"inline ml-1.5\"\n />\n ) : (\n <CopyIcon\n size={12}\n weight=\"bold\"\n className=\"inline text-sf-subtle group-hover:text-sf-default ml-1.5\"\n />\n )}\n </button>{\" \"}\n to confirm:\n </span>\n </div>\n <Input\n placeholder={resourceName}\n value={confirmationInput}\n onChange={(e) => setConfirmationInput(e.target.value)}\n disabled={isDeleting}\n autoComplete=\"off\"\n autoCorrect=\"off\"\n autoCapitalize=\"off\"\n spellCheck={false}\n aria-label={`Type ${resourceName} to confirm deletion`}\n className=\"w-full\"\n />\n </div>\n </div>\n\n <div className=\"flex justify-end gap-3 border-t border-sf-line px-6 py-4\">\n <DialogClose\n render={(props) => (\n <Button {...props} variant=\"secondary\" disabled={isDeleting}>\n Cancel\n </Button>\n )}\n />\n <Button\n variant=\"destructive\"\n onClick={handleDelete}\n disabled={!isConfirmed || isDeleting}\n loading={isDeleting}\n >\n {deleteButtonText || `Delete ${resourceType}`}\n </Button>\n </div>\n </Dialog>\n </DialogRoot>\n );\n}\n\nDeleteResource.displayName = \"DeleteResource\";\n"],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { t as cn } from "./cn-
|
|
3
|
-
import { t as Button$1 } from "./button-
|
|
4
|
-
import { t as Field } from "./field-
|
|
5
|
-
import { r as inputVariants, t as Input$1 } from "./input-
|
|
2
|
+
import { t as cn } from "./cn-CmAOpn49.js";
|
|
3
|
+
import { t as Button$1 } from "./button-BHOgXJRU.js";
|
|
4
|
+
import { t as Field } from "./field-DBpFzzBS.js";
|
|
5
|
+
import { r as inputVariants, t as Input$1 } from "./input-GkfMQZC_.js";
|
|
6
6
|
import * as React$1 from "react";
|
|
7
7
|
import { useCallback, useContext } from "react";
|
|
8
8
|
import { jsx } from "react/jsx-runtime";
|
|
@@ -118,4 +118,4 @@ var InputGroup = Object.assign(Root, {
|
|
|
118
118
|
//#endregion
|
|
119
119
|
export { InputArea as n, Textarea as r, InputGroup as t };
|
|
120
120
|
|
|
121
|
-
//# sourceMappingURL=input-
|
|
121
|
+
//# sourceMappingURL=input-COmx2M_R.js.map
|