@signalflare-ai/ui 0.5.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 +96 -0
- package/README.md +527 -0
- package/ai/USAGE.md +200 -0
- package/ai/component-registry.json +7103 -0
- package/ai/component-registry.md +3046 -0
- package/ai/schemas.ts +1230 -0
- package/bin/intent.js +23 -0
- package/bin/sf.js +34 -0
- package/dist/.build-complete +1 -0
- package/dist/ai/schemas.d.ts +7056 -0
- package/dist/ai/schemas.d.ts.map +1 -0
- package/dist/ai-actions-DG1dhDMP.js +57 -0
- package/dist/ai-actions-DG1dhDMP.js.map +1 -0
- package/dist/ai-agent-card-BbtL4NII.js +171 -0
- package/dist/ai-agent-card-BbtL4NII.js.map +1 -0
- package/dist/ai-approval-Mb7-BY6i.js +184 -0
- package/dist/ai-approval-Mb7-BY6i.js.map +1 -0
- package/dist/ai-code-block-BI_z0UVR.js +110 -0
- package/dist/ai-code-block-BI_z0UVR.js.map +1 -0
- package/dist/ai-conversation-DYtExcrw.js +184 -0
- package/dist/ai-conversation-DYtExcrw.js.map +1 -0
- package/dist/ai-info-banner-BpzauUAY.js +76 -0
- package/dist/ai-info-banner-BpzauUAY.js.map +1 -0
- package/dist/ai-loader-Cr3eQkNS.js +134 -0
- package/dist/ai-loader-Cr3eQkNS.js.map +1 -0
- package/dist/ai-message-CV8SBoHM.js +286 -0
- package/dist/ai-message-CV8SBoHM.js.map +1 -0
- package/dist/ai-mission-header-ByYkJ6YP.js +171 -0
- package/dist/ai-mission-header-ByYkJ6YP.js.map +1 -0
- package/dist/ai-prompt-input-Bo1YuJly.js +769 -0
- package/dist/ai-prompt-input-Bo1YuJly.js.map +1 -0
- package/dist/ai-question-Dp1g9k2o.js +149 -0
- package/dist/ai-question-Dp1g9k2o.js.map +1 -0
- package/dist/ai-reasoning-UAmNx_LD.js +270 -0
- package/dist/ai-reasoning-UAmNx_LD.js.map +1 -0
- package/dist/ai-response-BWoVsNQG.js +42 -0
- package/dist/ai-response-BWoVsNQG.js.map +1 -0
- package/dist/ai-shimmer-BpOmfonu.js +43 -0
- package/dist/ai-shimmer-BpOmfonu.js.map +1 -0
- package/dist/ai-status-badge-WhbKVeqn.js +63 -0
- package/dist/ai-status-badge-WhbKVeqn.js.map +1 -0
- package/dist/ai-streaming-text-ClL7FwvD.js +81 -0
- package/dist/ai-streaming-text-ClL7FwvD.js.map +1 -0
- package/dist/ai-subagent-BruGN1UE.js +133 -0
- package/dist/ai-subagent-BruGN1UE.js.map +1 -0
- package/dist/ai-suggestion-CNsCZj5P.js +55 -0
- package/dist/ai-suggestion-CNsCZj5P.js.map +1 -0
- package/dist/ai-task-list-B9CpMDYN.js +120 -0
- package/dist/ai-task-list-B9CpMDYN.js.map +1 -0
- package/dist/ai-timeline-Bb5ntsr3.js +373 -0
- package/dist/ai-timeline-Bb5ntsr3.js.map +1 -0
- package/dist/ai-tool-BGH8nQ_D.js +437 -0
- package/dist/ai-tool-BGH8nQ_D.js.map +1 -0
- package/dist/ai-usage-bar-BI-p-JBk.js +70 -0
- package/dist/ai-usage-bar-BI-p-JBk.js.map +1 -0
- package/dist/badge-D_eaA6wv.js +128 -0
- package/dist/badge-D_eaA6wv.js.map +1 -0
- package/dist/banner-B_6oBrsu.js +54 -0
- package/dist/banner-B_6oBrsu.js.map +1 -0
- package/dist/breadcrumbs-BlmeYfgq.js +128 -0
- package/dist/breadcrumbs-BlmeYfgq.js.map +1 -0
- package/dist/button-De0267YU.js +170 -0
- package/dist/button-De0267YU.js.map +1 -0
- package/dist/catalog.js +506 -0
- package/dist/catalog.js.map +1 -0
- package/dist/chart-Bes4MN3C.js +618 -0
- package/dist/chart-Bes4MN3C.js.map +1 -0
- package/dist/checkbox-CPX7lBaU.js +153 -0
- package/dist/checkbox-CPX7lBaU.js.map +1 -0
- package/dist/clipboard-text-92YeCybc.js +176 -0
- package/dist/clipboard-text-92YeCybc.js.map +1 -0
- package/dist/cn-YROP2_ox.js +25 -0
- package/dist/cn-YROP2_ox.js.map +1 -0
- package/dist/code-DE1Yy1Cu.js +97 -0
- package/dist/code-DE1Yy1Cu.js.map +1 -0
- package/dist/collapsible-DWsXeXmS.js +72 -0
- package/dist/collapsible-DWsXeXmS.js.map +1 -0
- package/dist/combobox-B0bLdsX8.js +197 -0
- package/dist/combobox-B0bLdsX8.js.map +1 -0
- package/dist/command-line/cli.js +823 -0
- package/dist/command-palette-CBTY8EiF.js +484 -0
- package/dist/command-palette-CBTY8EiF.js.map +1 -0
- package/dist/components/ai-actions.js +3 -0
- package/dist/components/ai-agent-card.js +3 -0
- package/dist/components/ai-approval.js +3 -0
- package/dist/components/ai-code-block.js +3 -0
- package/dist/components/ai-conversation.js +3 -0
- package/dist/components/ai-info-banner.js +3 -0
- package/dist/components/ai-loader.js +3 -0
- package/dist/components/ai-message.js +3 -0
- package/dist/components/ai-mission-header.js +3 -0
- package/dist/components/ai-prompt-input.js +3 -0
- package/dist/components/ai-question.js +3 -0
- package/dist/components/ai-reasoning.js +3 -0
- package/dist/components/ai-response.js +3 -0
- package/dist/components/ai-shimmer.js +3 -0
- package/dist/components/ai-status-badge.js +3 -0
- package/dist/components/ai-streaming-text.js +3 -0
- package/dist/components/ai-subagent.js +3 -0
- package/dist/components/ai-suggestion.js +3 -0
- package/dist/components/ai-task-list.js +3 -0
- package/dist/components/ai-timeline.js +3 -0
- package/dist/components/ai-tool.js +3 -0
- package/dist/components/ai-usage-bar.js +3 -0
- package/dist/components/badge.js +3 -0
- package/dist/components/banner.js +3 -0
- package/dist/components/breadcrumbs.js +3 -0
- package/dist/components/button.js +3 -0
- package/dist/components/chart.js +3 -0
- package/dist/components/checkbox.js +3 -0
- package/dist/components/clipboard-text.js +3 -0
- package/dist/components/code.js +3 -0
- package/dist/components/collapsible.js +3 -0
- package/dist/components/combobox.js +3 -0
- package/dist/components/command-palette.js +3 -0
- package/dist/components/data-grid.js +3 -0
- package/dist/components/date-picker.js +3 -0
- package/dist/components/date-range-picker.js +3 -0
- package/dist/components/dialog.js +3 -0
- package/dist/components/dropdown.js +3 -0
- package/dist/components/empty.js +3 -0
- package/dist/components/field.js +3 -0
- package/dist/components/filters.js +3 -0
- package/dist/components/flow.js +3 -0
- package/dist/components/grid.js +3 -0
- package/dist/components/input.js +4 -0
- package/dist/components/label.js +3 -0
- package/dist/components/layer-card.js +3 -0
- package/dist/components/link.js +92 -0
- package/dist/components/link.js.map +1 -0
- package/dist/components/loader.js +4 -0
- package/dist/components/menubar.js +3 -0
- package/dist/components/meter.js +3 -0
- package/dist/components/pagination.js +3 -0
- package/dist/components/popover.js +3 -0
- package/dist/components/radio.js +3 -0
- package/dist/components/select.js +3 -0
- package/dist/components/sensitive-input.js +3 -0
- package/dist/components/sidebar.js +3 -0
- package/dist/components/signalflare-ai-logo.js +3 -0
- package/dist/components/surface.js +3 -0
- package/dist/components/switch.js +3 -0
- package/dist/components/table.js +3 -0
- package/dist/components/tabs.js +3 -0
- package/dist/components/text.js +3 -0
- package/dist/components/theme-toggle.js +3 -0
- package/dist/components/toast.js +3 -0
- package/dist/components/tooltip.js +3 -0
- package/dist/components/use-agent-harness.js +3 -0
- package/dist/data-grid-UJ9ja5cu.js +305 -0
- package/dist/data-grid-UJ9ja5cu.js.map +1 -0
- package/dist/date-picker-ebekkC3R.js +57 -0
- package/dist/date-picker-ebekkC3R.js.map +1 -0
- package/dist/date-range-picker-D75LLINc.js +347 -0
- package/dist/date-range-picker-D75LLINc.js.map +1 -0
- package/dist/dialog-CyHEQXEY.js +104 -0
- package/dist/dialog-CyHEQXEY.js.map +1 -0
- package/dist/dist-BNlyONdD.js +3546 -0
- package/dist/dist-BNlyONdD.js.map +1 -0
- package/dist/dropdown-J5T4pHaR.js +202 -0
- package/dist/dropdown-J5T4pHaR.js.map +1 -0
- package/dist/empty-D2TypIId.js +90 -0
- package/dist/empty-D2TypIId.js.map +1 -0
- package/dist/favicon.svg +4 -0
- package/dist/field-Y_UK1_Cg.js +57 -0
- package/dist/field-Y_UK1_Cg.js.map +1 -0
- package/dist/filters-BdBogf7D.js +682 -0
- package/dist/filters-BdBogf7D.js.map +1 -0
- package/dist/flow-BRsYUCJa.js +741 -0
- package/dist/flow-BRsYUCJa.js.map +1 -0
- package/dist/genui.js +40 -0
- package/dist/genui.js.map +1 -0
- package/dist/grid-qUAN9hFx.js +119 -0
- package/dist/grid-qUAN9hFx.js.map +1 -0
- package/dist/highlight-to-react-ClEfL81q.js +57 -0
- package/dist/highlight-to-react-ClEfL81q.js.map +1 -0
- package/dist/index.js +215 -0
- package/dist/index.js.map +1 -0
- package/dist/input-BxQAnXki.js +81 -0
- package/dist/input-BxQAnXki.js.map +1 -0
- package/dist/input-Cn25I4o5.js +121 -0
- package/dist/input-Cn25I4o5.js.map +1 -0
- package/dist/label-QtJxtJ4u.js +70 -0
- package/dist/label-QtJxtJ4u.js.map +1 -0
- package/dist/layer-card-BME0eljh.js +44 -0
- package/dist/layer-card-BME0eljh.js.map +1 -0
- package/dist/link-provider-BUZKXaNE.js +25 -0
- package/dist/link-provider-BUZKXaNE.js.map +1 -0
- package/dist/loader-DAcc-Uag.js +84 -0
- package/dist/loader-DAcc-Uag.js.map +1 -0
- package/dist/logo.svg +1 -0
- package/dist/menubar-C8NzAjfd.js +102 -0
- package/dist/menubar-C8NzAjfd.js.map +1 -0
- package/dist/meter-CpmTenEr.js +37 -0
- package/dist/meter-CpmTenEr.js.map +1 -0
- package/dist/pagination-C_YqCy8l.js +117 -0
- package/dist/pagination-C_YqCy8l.js.map +1 -0
- package/dist/popover-BRQZ2b6z.js +147 -0
- package/dist/popover-BRQZ2b6z.js.map +1 -0
- package/dist/primitives/accordion.js +2 -0
- package/dist/primitives/alert-dialog.js +2 -0
- package/dist/primitives/autocomplete.js +2 -0
- package/dist/primitives/avatar.js +2 -0
- package/dist/primitives/button.js +2 -0
- package/dist/primitives/checkbox-group.js +2 -0
- package/dist/primitives/checkbox.js +2 -0
- package/dist/primitives/collapsible.js +2 -0
- package/dist/primitives/combobox.js +2 -0
- package/dist/primitives/context-menu.js +2 -0
- package/dist/primitives/csp-provider.js +2 -0
- package/dist/primitives/dialog.js +2 -0
- package/dist/primitives/direction-provider.js +2 -0
- package/dist/primitives/drawer.js +2 -0
- package/dist/primitives/field.js +2 -0
- package/dist/primitives/fieldset.js +2 -0
- package/dist/primitives/form.js +2 -0
- package/dist/primitives/input.js +2 -0
- package/dist/primitives/menu.js +2 -0
- package/dist/primitives/menubar.js +2 -0
- package/dist/primitives/meter.js +2 -0
- package/dist/primitives/navigation-menu.js +2 -0
- package/dist/primitives/number-field.js +2 -0
- package/dist/primitives/popover.js +2 -0
- package/dist/primitives/preview-card.js +2 -0
- package/dist/primitives/progress.js +2 -0
- package/dist/primitives/radio-group.js +2 -0
- package/dist/primitives/radio.js +2 -0
- package/dist/primitives/scroll-area.js +2 -0
- package/dist/primitives/select.js +2 -0
- package/dist/primitives/separator.js +2 -0
- package/dist/primitives/slider.js +2 -0
- package/dist/primitives/switch.js +2 -0
- package/dist/primitives/tabs.js +2 -0
- package/dist/primitives/toast.js +2 -0
- package/dist/primitives/toggle-group.js +2 -0
- package/dist/primitives/toggle.js +2 -0
- package/dist/primitives/toolbar.js +2 -0
- package/dist/primitives/tooltip.js +2 -0
- package/dist/primitives.js +40 -0
- package/dist/radio-B7zg1wUI.js +101 -0
- package/dist/radio-B7zg1wUI.js.map +1 -0
- package/dist/registry.js +1 -0
- package/dist/select-9p721G00.js +95 -0
- package/dist/select-9p721G00.js.map +1 -0
- package/dist/sensitive-input-D5je2NLl.js +248 -0
- package/dist/sensitive-input-D5je2NLl.js.map +1 -0
- package/dist/sidebar-DOwBrq57.js +964 -0
- package/dist/sidebar-DOwBrq57.js.map +1 -0
- package/dist/signalflare-ai-logo-DDhxMJD6.js +260 -0
- package/dist/signalflare-ai-logo-DDhxMJD6.js.map +1 -0
- package/dist/skeleton-line-Do3UmGk9.js +36 -0
- package/dist/skeleton-line-Do3UmGk9.js.map +1 -0
- package/dist/src/blocks/agent-harness/agent-harness.d.ts +177 -0
- package/dist/src/blocks/agent-harness/agent-harness.d.ts.map +1 -0
- package/dist/src/blocks/agent-harness/agent-harness.tsx +1122 -0
- package/dist/src/blocks/agent-harness/index.d.ts +2 -0
- package/dist/src/blocks/agent-harness/index.d.ts.map +1 -0
- package/dist/src/blocks/commander/commander.d.ts +101 -0
- package/dist/src/blocks/commander/commander.d.ts.map +1 -0
- package/dist/src/blocks/commander/commander.tsx +477 -0
- package/dist/src/blocks/commander/index.d.ts +2 -0
- package/dist/src/blocks/commander/index.d.ts.map +1 -0
- package/dist/src/blocks/delete-resource/delete-resource.d.ts +46 -0
- package/dist/src/blocks/delete-resource/delete-resource.d.ts.map +1 -0
- package/dist/src/blocks/delete-resource/delete-resource.tsx +214 -0
- package/dist/src/blocks/delete-resource/index.d.ts +2 -0
- package/dist/src/blocks/delete-resource/index.d.ts.map +1 -0
- package/dist/src/blocks/map-block/index.d.ts +2 -0
- package/dist/src/blocks/map-block/index.d.ts.map +1 -0
- package/dist/src/blocks/map-block/map-block.d.ts +79 -0
- package/dist/src/blocks/map-block/map-block.d.ts.map +1 -0
- package/dist/src/blocks/map-block/map-block.tsx +522 -0
- package/dist/src/blocks/page-header/index.d.ts +2 -0
- package/dist/src/blocks/page-header/index.d.ts.map +1 -0
- package/dist/src/blocks/page-header/page-header.d.ts +38 -0
- package/dist/src/blocks/page-header/page-header.d.ts.map +1 -0
- package/dist/src/blocks/page-header/page-header.tsx +96 -0
- package/dist/src/blocks/resource-list/index.d.ts +2 -0
- package/dist/src/blocks/resource-list/index.d.ts.map +1 -0
- package/dist/src/blocks/resource-list/resource-list.d.ts +18 -0
- package/dist/src/blocks/resource-list/resource-list.d.ts.map +1 -0
- package/dist/src/blocks/resource-list/resource-list.test.tsx +27 -0
- package/dist/src/blocks/resource-list/resource-list.tsx +65 -0
- package/dist/src/catalog/catalog.d.ts +75 -0
- package/dist/src/catalog/catalog.d.ts.map +1 -0
- package/dist/src/catalog/data.d.ts +44 -0
- package/dist/src/catalog/data.d.ts.map +1 -0
- package/dist/src/catalog/index.d.ts +35 -0
- package/dist/src/catalog/index.d.ts.map +1 -0
- package/dist/src/catalog/sf-components.d.ts +8 -0
- package/dist/src/catalog/sf-components.d.ts.map +1 -0
- package/dist/src/catalog/sf-registry.d.ts +4 -0
- package/dist/src/catalog/sf-registry.d.ts.map +1 -0
- package/dist/src/catalog/types.d.ts +226 -0
- package/dist/src/catalog/types.d.ts.map +1 -0
- package/dist/src/catalog/visibility.d.ts +37 -0
- package/dist/src/catalog/visibility.d.ts.map +1 -0
- package/dist/src/command-line/build-cli.d.ts +7 -0
- package/dist/src/command-line/build-cli.d.ts.map +1 -0
- package/dist/src/command-line/cli.d.ts +13 -0
- package/dist/src/command-line/cli.d.ts.map +1 -0
- package/dist/src/command-line/commands/add.d.ts +10 -0
- package/dist/src/command-line/commands/add.d.ts.map +1 -0
- package/dist/src/command-line/commands/ai.d.ts +10 -0
- package/dist/src/command-line/commands/ai.d.ts.map +1 -0
- package/dist/src/command-line/commands/blocks.d.ts +10 -0
- package/dist/src/command-line/commands/blocks.d.ts.map +1 -0
- package/dist/src/command-line/commands/doc.d.ts +14 -0
- package/dist/src/command-line/commands/doc.d.ts.map +1 -0
- package/dist/src/command-line/commands/init.d.ts +18 -0
- package/dist/src/command-line/commands/init.d.ts.map +1 -0
- package/dist/src/command-line/commands/ls.d.ts +10 -0
- package/dist/src/command-line/commands/ls.d.ts.map +1 -0
- package/dist/src/command-line/commands/migrate.d.ts +10 -0
- package/dist/src/command-line/commands/migrate.d.ts.map +1 -0
- package/dist/src/command-line/utils/config.d.ts +42 -0
- package/dist/src/command-line/utils/config.d.ts.map +1 -0
- package/dist/src/command-line/utils/transformer.d.ts +21 -0
- package/dist/src/command-line/utils/transformer.d.ts.map +1 -0
- package/dist/src/components/ai-actions/ai-actions.d.ts +35 -0
- package/dist/src/components/ai-actions/ai-actions.d.ts.map +1 -0
- package/dist/src/components/ai-actions/index.d.ts +2 -0
- package/dist/src/components/ai-actions/index.d.ts.map +1 -0
- package/dist/src/components/ai-agent-card/ai-agent-card.d.ts +82 -0
- package/dist/src/components/ai-agent-card/ai-agent-card.d.ts.map +1 -0
- package/dist/src/components/ai-agent-card/index.d.ts +2 -0
- package/dist/src/components/ai-agent-card/index.d.ts.map +1 -0
- package/dist/src/components/ai-approval/ai-approval.d.ts +102 -0
- package/dist/src/components/ai-approval/ai-approval.d.ts.map +1 -0
- package/dist/src/components/ai-approval/index.d.ts +2 -0
- package/dist/src/components/ai-approval/index.d.ts.map +1 -0
- package/dist/src/components/ai-code-block/ai-code-block.d.ts +48 -0
- package/dist/src/components/ai-code-block/ai-code-block.d.ts.map +1 -0
- package/dist/src/components/ai-code-block/index.d.ts +2 -0
- package/dist/src/components/ai-code-block/index.d.ts.map +1 -0
- package/dist/src/components/ai-conversation/ai-conversation.d.ts +125 -0
- package/dist/src/components/ai-conversation/ai-conversation.d.ts.map +1 -0
- package/dist/src/components/ai-conversation/index.d.ts +2 -0
- package/dist/src/components/ai-conversation/index.d.ts.map +1 -0
- package/dist/src/components/ai-info-banner/ai-info-banner.d.ts +55 -0
- package/dist/src/components/ai-info-banner/ai-info-banner.d.ts.map +1 -0
- package/dist/src/components/ai-info-banner/index.d.ts +2 -0
- package/dist/src/components/ai-info-banner/index.d.ts.map +1 -0
- package/dist/src/components/ai-loader/ai-loader.d.ts +44 -0
- package/dist/src/components/ai-loader/ai-loader.d.ts.map +1 -0
- package/dist/src/components/ai-loader/index.d.ts +2 -0
- package/dist/src/components/ai-loader/index.d.ts.map +1 -0
- package/dist/src/components/ai-message/ai-message.d.ts +97 -0
- package/dist/src/components/ai-message/ai-message.d.ts.map +1 -0
- package/dist/src/components/ai-message/index.d.ts +2 -0
- package/dist/src/components/ai-message/index.d.ts.map +1 -0
- package/dist/src/components/ai-mission-header/ai-mission-header.d.ts +62 -0
- package/dist/src/components/ai-mission-header/ai-mission-header.d.ts.map +1 -0
- package/dist/src/components/ai-mission-header/index.d.ts +2 -0
- package/dist/src/components/ai-mission-header/index.d.ts.map +1 -0
- package/dist/src/components/ai-prompt-input/ai-prompt-input.d.ts +260 -0
- package/dist/src/components/ai-prompt-input/ai-prompt-input.d.ts.map +1 -0
- package/dist/src/components/ai-prompt-input/index.d.ts +2 -0
- package/dist/src/components/ai-prompt-input/index.d.ts.map +1 -0
- package/dist/src/components/ai-question/ai-question.d.ts +73 -0
- package/dist/src/components/ai-question/ai-question.d.ts.map +1 -0
- package/dist/src/components/ai-question/index.d.ts +2 -0
- package/dist/src/components/ai-question/index.d.ts.map +1 -0
- package/dist/src/components/ai-reasoning/ai-reasoning.d.ts +107 -0
- package/dist/src/components/ai-reasoning/ai-reasoning.d.ts.map +1 -0
- package/dist/src/components/ai-reasoning/index.d.ts +2 -0
- package/dist/src/components/ai-reasoning/index.d.ts.map +1 -0
- package/dist/src/components/ai-response/ai-response.d.ts +26 -0
- package/dist/src/components/ai-response/ai-response.d.ts.map +1 -0
- package/dist/src/components/ai-response/index.d.ts +2 -0
- package/dist/src/components/ai-response/index.d.ts.map +1 -0
- package/dist/src/components/ai-shimmer/ai-shimmer.d.ts +29 -0
- package/dist/src/components/ai-shimmer/ai-shimmer.d.ts.map +1 -0
- package/dist/src/components/ai-shimmer/index.d.ts +2 -0
- package/dist/src/components/ai-shimmer/index.d.ts.map +1 -0
- package/dist/src/components/ai-status-badge/ai-status-badge.d.ts +46 -0
- package/dist/src/components/ai-status-badge/ai-status-badge.d.ts.map +1 -0
- package/dist/src/components/ai-status-badge/index.d.ts +2 -0
- package/dist/src/components/ai-status-badge/index.d.ts.map +1 -0
- package/dist/src/components/ai-streaming-text/ai-streaming-text.d.ts +27 -0
- package/dist/src/components/ai-streaming-text/ai-streaming-text.d.ts.map +1 -0
- package/dist/src/components/ai-streaming-text/index.d.ts +2 -0
- package/dist/src/components/ai-streaming-text/index.d.ts.map +1 -0
- package/dist/src/components/ai-subagent/ai-subagent.d.ts +74 -0
- package/dist/src/components/ai-subagent/ai-subagent.d.ts.map +1 -0
- package/dist/src/components/ai-subagent/index.d.ts +2 -0
- package/dist/src/components/ai-subagent/index.d.ts.map +1 -0
- package/dist/src/components/ai-suggestion/ai-suggestion.d.ts +40 -0
- package/dist/src/components/ai-suggestion/ai-suggestion.d.ts.map +1 -0
- package/dist/src/components/ai-suggestion/index.d.ts +2 -0
- package/dist/src/components/ai-suggestion/index.d.ts.map +1 -0
- package/dist/src/components/ai-task-list/ai-task-list.d.ts +61 -0
- package/dist/src/components/ai-task-list/ai-task-list.d.ts.map +1 -0
- package/dist/src/components/ai-task-list/index.d.ts +2 -0
- package/dist/src/components/ai-task-list/index.d.ts.map +1 -0
- package/dist/src/components/ai-timeline/ai-timeline.d.ts +130 -0
- package/dist/src/components/ai-timeline/ai-timeline.d.ts.map +1 -0
- package/dist/src/components/ai-timeline/index.d.ts +2 -0
- package/dist/src/components/ai-timeline/index.d.ts.map +1 -0
- package/dist/src/components/ai-tool/ai-tool.d.ts +138 -0
- package/dist/src/components/ai-tool/ai-tool.d.ts.map +1 -0
- package/dist/src/components/ai-tool/index.d.ts +2 -0
- package/dist/src/components/ai-tool/index.d.ts.map +1 -0
- package/dist/src/components/ai-usage-bar/ai-usage-bar.d.ts +38 -0
- package/dist/src/components/ai-usage-bar/ai-usage-bar.d.ts.map +1 -0
- package/dist/src/components/ai-usage-bar/index.d.ts +2 -0
- package/dist/src/components/ai-usage-bar/index.d.ts.map +1 -0
- package/dist/src/components/badge/badge.d.ts +129 -0
- package/dist/src/components/badge/badge.d.ts.map +1 -0
- package/dist/src/components/badge/index.d.ts +2 -0
- package/dist/src/components/badge/index.d.ts.map +1 -0
- package/dist/src/components/banner/banner.d.ts +80 -0
- package/dist/src/components/banner/banner.d.ts.map +1 -0
- package/dist/src/components/banner/index.d.ts +2 -0
- package/dist/src/components/banner/index.d.ts.map +1 -0
- package/dist/src/components/breadcrumbs/breadcrumbs.d.ts +78 -0
- package/dist/src/components/breadcrumbs/breadcrumbs.d.ts.map +1 -0
- package/dist/src/components/breadcrumbs/index.d.ts +2 -0
- package/dist/src/components/breadcrumbs/index.d.ts.map +1 -0
- package/dist/src/components/button/button.d.ts +212 -0
- package/dist/src/components/button/button.d.ts.map +1 -0
- package/dist/src/components/button/index.d.ts +2 -0
- package/dist/src/components/button/index.d.ts.map +1 -0
- package/dist/src/components/chart/color.d.ts +98 -0
- package/dist/src/components/chart/color.d.ts.map +1 -0
- package/dist/src/components/chart/echart.d.ts +135 -0
- package/dist/src/components/chart/echart.d.ts.map +1 -0
- package/dist/src/components/chart/index.d.ts +5 -0
- package/dist/src/components/chart/index.d.ts.map +1 -0
- package/dist/src/components/chart/legend.d.ts +42 -0
- package/dist/src/components/chart/legend.d.ts.map +1 -0
- package/dist/src/components/chart/timeseries-chart.d.ts +119 -0
- package/dist/src/components/chart/timeseries-chart.d.ts.map +1 -0
- package/dist/src/components/checkbox/checkbox.d.ts +174 -0
- package/dist/src/components/checkbox/checkbox.d.ts.map +1 -0
- package/dist/src/components/checkbox/index.d.ts +2 -0
- package/dist/src/components/checkbox/index.d.ts.map +1 -0
- package/dist/src/components/clipboard-text/clipboard-text.d.ts +86 -0
- package/dist/src/components/clipboard-text/clipboard-text.d.ts.map +1 -0
- package/dist/src/components/clipboard-text/index.d.ts +2 -0
- package/dist/src/components/clipboard-text/index.d.ts.map +1 -0
- package/dist/src/components/code/code.d.ts +165 -0
- package/dist/src/components/code/code.d.ts.map +1 -0
- package/dist/src/components/code/index.d.ts +4 -0
- package/dist/src/components/code/index.d.ts.map +1 -0
- package/dist/src/components/collapsible/collapsible.d.ts +72 -0
- package/dist/src/components/collapsible/collapsible.d.ts.map +1 -0
- package/dist/src/components/collapsible/index.d.ts +2 -0
- package/dist/src/components/collapsible/index.d.ts.map +1 -0
- package/dist/src/components/combobox/combobox.d.ts +188 -0
- package/dist/src/components/combobox/combobox.d.ts.map +1 -0
- package/dist/src/components/combobox/index.d.ts +2 -0
- package/dist/src/components/combobox/index.d.ts.map +1 -0
- package/dist/src/components/command-palette/command-palette.d.ts +260 -0
- package/dist/src/components/command-palette/command-palette.d.ts.map +1 -0
- package/dist/src/components/command-palette/index.d.ts +3 -0
- package/dist/src/components/command-palette/index.d.ts.map +1 -0
- package/dist/src/components/command-palette/types.d.ts +149 -0
- package/dist/src/components/command-palette/types.d.ts.map +1 -0
- package/dist/src/components/data-grid/data-grid.d.ts +78 -0
- package/dist/src/components/data-grid/data-grid.d.ts.map +1 -0
- package/dist/src/components/data-grid/index.d.ts +3 -0
- package/dist/src/components/data-grid/index.d.ts.map +1 -0
- package/dist/src/components/data-grid/types.d.ts +236 -0
- package/dist/src/components/data-grid/types.d.ts.map +1 -0
- package/dist/src/components/date-picker/date-picker.d.ts +65 -0
- package/dist/src/components/date-picker/date-picker.d.ts.map +1 -0
- package/dist/src/components/date-picker/index.d.ts +4 -0
- package/dist/src/components/date-picker/index.d.ts.map +1 -0
- package/dist/src/components/date-range-picker/date-range-picker.d.ts +125 -0
- package/dist/src/components/date-range-picker/date-range-picker.d.ts.map +1 -0
- package/dist/src/components/date-range-picker/index.d.ts +5 -0
- package/dist/src/components/date-range-picker/index.d.ts.map +1 -0
- package/dist/src/components/dialog/dialog.d.ts +189 -0
- package/dist/src/components/dialog/dialog.d.ts.map +1 -0
- package/dist/src/components/dialog/index.d.ts +2 -0
- package/dist/src/components/dialog/index.d.ts.map +1 -0
- package/dist/src/components/dropdown/dropdown.d.ts +91 -0
- package/dist/src/components/dropdown/dropdown.d.ts.map +1 -0
- package/dist/src/components/dropdown/index.d.ts +2 -0
- package/dist/src/components/dropdown/index.d.ts.map +1 -0
- package/dist/src/components/empty/empty.d.ts +69 -0
- package/dist/src/components/empty/empty.d.ts.map +1 -0
- package/dist/src/components/empty/index.d.ts +2 -0
- package/dist/src/components/empty/index.d.ts.map +1 -0
- package/dist/src/components/field/field.d.ts +68 -0
- package/dist/src/components/field/field.d.ts.map +1 -0
- package/dist/src/components/field/index.d.ts +2 -0
- package/dist/src/components/field/index.d.ts.map +1 -0
- package/dist/src/components/filters/filters.d.ts +54 -0
- package/dist/src/components/filters/filters.d.ts.map +1 -0
- package/dist/src/components/filters/helpers.d.ts +56 -0
- package/dist/src/components/filters/helpers.d.ts.map +1 -0
- package/dist/src/components/filters/index.d.ts +3 -0
- package/dist/src/components/filters/index.d.ts.map +1 -0
- package/dist/src/components/filters/types.d.ts +148 -0
- package/dist/src/components/filters/types.d.ts.map +1 -0
- package/dist/src/components/flow/connectors.d.ts +35 -0
- package/dist/src/components/flow/connectors.d.ts.map +1 -0
- package/dist/src/components/flow/diagram.d.ts +62 -0
- package/dist/src/components/flow/diagram.d.ts.map +1 -0
- package/dist/src/components/flow/index.d.ts +26 -0
- package/dist/src/components/flow/index.d.ts.map +1 -0
- package/dist/src/components/flow/node.d.ts +52 -0
- package/dist/src/components/flow/node.d.ts.map +1 -0
- package/dist/src/components/flow/parallel.d.ts +5 -0
- package/dist/src/components/flow/parallel.d.ts.map +1 -0
- package/dist/src/components/flow/use-children.d.ts +69 -0
- package/dist/src/components/flow/use-children.d.ts.map +1 -0
- package/dist/src/components/grid/grid.d.ts +135 -0
- package/dist/src/components/grid/grid.d.ts.map +1 -0
- package/dist/src/components/grid/index.d.ts +2 -0
- package/dist/src/components/grid/index.d.ts.map +1 -0
- package/dist/src/components/input/index.d.ts +4 -0
- package/dist/src/components/input/index.d.ts.map +1 -0
- package/dist/src/components/input/input-area.d.ts +65 -0
- package/dist/src/components/input/input-area.d.ts.map +1 -0
- package/dist/src/components/input/input-group.d.ts +39 -0
- package/dist/src/components/input/input-group.d.ts.map +1 -0
- package/dist/src/components/input/input.d.ts +172 -0
- package/dist/src/components/input/input.d.ts.map +1 -0
- package/dist/src/components/label/index.d.ts +2 -0
- package/dist/src/components/label/index.d.ts.map +1 -0
- package/dist/src/components/label/label.d.ts +67 -0
- package/dist/src/components/label/label.d.ts.map +1 -0
- package/dist/src/components/layer-card/index.d.ts +2 -0
- package/dist/src/components/layer-card/index.d.ts.map +1 -0
- package/dist/src/components/layer-card/layer-card.d.ts +29 -0
- package/dist/src/components/layer-card/layer-card.d.ts.map +1 -0
- package/dist/src/components/link/index.d.ts +2 -0
- package/dist/src/components/link/index.d.ts.map +1 -0
- package/dist/src/components/link/link.d.ts +55 -0
- package/dist/src/components/link/link.d.ts.map +1 -0
- package/dist/src/components/loader/index.d.ts +3 -0
- package/dist/src/components/loader/index.d.ts.map +1 -0
- package/dist/src/components/loader/loader.d.ts +65 -0
- package/dist/src/components/loader/loader.d.ts.map +1 -0
- package/dist/src/components/loader/skeleton-line.d.ts +10 -0
- package/dist/src/components/loader/skeleton-line.d.ts.map +1 -0
- package/dist/src/components/menubar/index.d.ts +3 -0
- package/dist/src/components/menubar/index.d.ts.map +1 -0
- package/dist/src/components/menubar/menubar.d.ts +66 -0
- package/dist/src/components/menubar/menubar.d.ts.map +1 -0
- package/dist/src/components/menubar/use-menu-navigation.d.ts +8 -0
- package/dist/src/components/menubar/use-menu-navigation.d.ts.map +1 -0
- package/dist/src/components/meter/index.d.ts +2 -0
- package/dist/src/components/meter/index.d.ts.map +1 -0
- package/dist/src/components/meter/meter.d.ts +44 -0
- package/dist/src/components/meter/meter.d.ts.map +1 -0
- package/dist/src/components/pagination/index.d.ts +2 -0
- package/dist/src/components/pagination/index.d.ts.map +1 -0
- package/dist/src/components/pagination/pagination.d.ts +60 -0
- package/dist/src/components/pagination/pagination.d.ts.map +1 -0
- package/dist/src/components/popover/index.d.ts +3 -0
- package/dist/src/components/popover/index.d.ts.map +1 -0
- package/dist/src/components/popover/popover.d.ts +138 -0
- package/dist/src/components/popover/popover.d.ts.map +1 -0
- package/dist/src/components/radio/index.d.ts +2 -0
- package/dist/src/components/radio/index.d.ts.map +1 -0
- package/dist/src/components/radio/radio.d.ts +163 -0
- package/dist/src/components/radio/radio.d.ts.map +1 -0
- package/dist/src/components/select/index.d.ts +2 -0
- package/dist/src/components/select/index.d.ts.map +1 -0
- package/dist/src/components/select/select.d.ts +150 -0
- package/dist/src/components/select/select.d.ts.map +1 -0
- package/dist/src/components/sensitive-input/index.d.ts +2 -0
- package/dist/src/components/sensitive-input/index.d.ts.map +1 -0
- package/dist/src/components/sensitive-input/sensitive-input.d.ts +94 -0
- package/dist/src/components/sensitive-input/sensitive-input.d.ts.map +1 -0
- package/dist/src/components/sidebar/index.d.ts +2 -0
- package/dist/src/components/sidebar/index.d.ts.map +1 -0
- package/dist/src/components/sidebar/sidebar.d.ts +556 -0
- package/dist/src/components/sidebar/sidebar.d.ts.map +1 -0
- package/dist/src/components/signalflare-ai-logo/index.d.ts +2 -0
- package/dist/src/components/signalflare-ai-logo/index.d.ts.map +1 -0
- package/dist/src/components/signalflare-ai-logo/signalflare-ai-logo.d.ts +171 -0
- package/dist/src/components/signalflare-ai-logo/signalflare-ai-logo.d.ts.map +1 -0
- package/dist/src/components/surface/index.d.ts +2 -0
- package/dist/src/components/surface/index.d.ts.map +1 -0
- package/dist/src/components/surface/surface.d.ts +60 -0
- package/dist/src/components/surface/surface.d.ts.map +1 -0
- package/dist/src/components/switch/index.d.ts +2 -0
- package/dist/src/components/switch/index.d.ts.map +1 -0
- package/dist/src/components/switch/switch.d.ts +169 -0
- package/dist/src/components/switch/switch.d.ts.map +1 -0
- package/dist/src/components/table/index.d.ts +2 -0
- package/dist/src/components/table/index.d.ts.map +1 -0
- package/dist/src/components/table/table.d.ts +89 -0
- package/dist/src/components/table/table.d.ts.map +1 -0
- package/dist/src/components/tabs/index.d.ts +3 -0
- package/dist/src/components/tabs/index.d.ts.map +1 -0
- package/dist/src/components/tabs/tabs.d.ts +105 -0
- package/dist/src/components/tabs/tabs.d.ts.map +1 -0
- package/dist/src/components/text/index.d.ts +2 -0
- package/dist/src/components/text/index.d.ts.map +1 -0
- package/dist/src/components/text/text.d.ts +181 -0
- package/dist/src/components/text/text.d.ts.map +1 -0
- package/dist/src/components/theme-toggle/index.d.ts +2 -0
- package/dist/src/components/theme-toggle/index.d.ts.map +1 -0
- package/dist/src/components/theme-toggle/theme-toggle.d.ts +68 -0
- package/dist/src/components/theme-toggle/theme-toggle.d.ts.map +1 -0
- package/dist/src/components/toast/index.d.ts +5 -0
- package/dist/src/components/toast/index.d.ts.map +1 -0
- package/dist/src/components/toast/toast.d.ts +152 -0
- package/dist/src/components/toast/toast.d.ts.map +1 -0
- package/dist/src/components/tooltip/index.d.ts +2 -0
- package/dist/src/components/tooltip/index.d.ts.map +1 -0
- package/dist/src/components/tooltip/tooltip.d.ts +82 -0
- package/dist/src/components/tooltip/tooltip.d.ts.map +1 -0
- package/dist/src/components/use-agent-harness/index.d.ts +2 -0
- package/dist/src/components/use-agent-harness/index.d.ts.map +1 -0
- package/dist/src/components/use-agent-harness/use-agent-harness.d.ts +642 -0
- package/dist/src/components/use-agent-harness/use-agent-harness.d.ts.map +1 -0
- package/dist/src/genui/genui.d.ts +17 -0
- package/dist/src/genui/genui.d.ts.map +1 -0
- package/dist/src/genui/index.d.ts +19 -0
- package/dist/src/genui/index.d.ts.map +1 -0
- package/dist/src/index.d.ts +102 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/lib/utils.d.ts +2 -0
- package/dist/src/lib/utils.d.ts.map +1 -0
- package/dist/src/primitives/accordion.d.ts +13 -0
- package/dist/src/primitives/accordion.d.ts.map +1 -0
- package/dist/src/primitives/alert-dialog.d.ts +13 -0
- package/dist/src/primitives/alert-dialog.d.ts.map +1 -0
- package/dist/src/primitives/autocomplete.d.ts +13 -0
- package/dist/src/primitives/autocomplete.d.ts.map +1 -0
- package/dist/src/primitives/avatar.d.ts +13 -0
- package/dist/src/primitives/avatar.d.ts.map +1 -0
- package/dist/src/primitives/button.d.ts +13 -0
- package/dist/src/primitives/button.d.ts.map +1 -0
- package/dist/src/primitives/checkbox-group.d.ts +13 -0
- package/dist/src/primitives/checkbox-group.d.ts.map +1 -0
- package/dist/src/primitives/checkbox.d.ts +13 -0
- package/dist/src/primitives/checkbox.d.ts.map +1 -0
- package/dist/src/primitives/collapsible.d.ts +13 -0
- package/dist/src/primitives/collapsible.d.ts.map +1 -0
- package/dist/src/primitives/combobox.d.ts +13 -0
- package/dist/src/primitives/combobox.d.ts.map +1 -0
- package/dist/src/primitives/context-menu.d.ts +13 -0
- package/dist/src/primitives/context-menu.d.ts.map +1 -0
- package/dist/src/primitives/csp-provider.d.ts +13 -0
- package/dist/src/primitives/csp-provider.d.ts.map +1 -0
- package/dist/src/primitives/dialog.d.ts +13 -0
- package/dist/src/primitives/dialog.d.ts.map +1 -0
- package/dist/src/primitives/direction-provider.d.ts +13 -0
- package/dist/src/primitives/direction-provider.d.ts.map +1 -0
- package/dist/src/primitives/drawer.d.ts +13 -0
- package/dist/src/primitives/drawer.d.ts.map +1 -0
- package/dist/src/primitives/field.d.ts +13 -0
- package/dist/src/primitives/field.d.ts.map +1 -0
- package/dist/src/primitives/fieldset.d.ts +13 -0
- package/dist/src/primitives/fieldset.d.ts.map +1 -0
- package/dist/src/primitives/form.d.ts +13 -0
- package/dist/src/primitives/form.d.ts.map +1 -0
- package/dist/src/primitives/index.d.ts +54 -0
- package/dist/src/primitives/index.d.ts.map +1 -0
- package/dist/src/primitives/input.d.ts +13 -0
- package/dist/src/primitives/input.d.ts.map +1 -0
- package/dist/src/primitives/menu.d.ts +13 -0
- package/dist/src/primitives/menu.d.ts.map +1 -0
- package/dist/src/primitives/menubar.d.ts +13 -0
- package/dist/src/primitives/menubar.d.ts.map +1 -0
- package/dist/src/primitives/meter.d.ts +13 -0
- package/dist/src/primitives/meter.d.ts.map +1 -0
- package/dist/src/primitives/navigation-menu.d.ts +13 -0
- package/dist/src/primitives/navigation-menu.d.ts.map +1 -0
- package/dist/src/primitives/number-field.d.ts +13 -0
- package/dist/src/primitives/number-field.d.ts.map +1 -0
- package/dist/src/primitives/popover.d.ts +13 -0
- package/dist/src/primitives/popover.d.ts.map +1 -0
- package/dist/src/primitives/preview-card.d.ts +13 -0
- package/dist/src/primitives/preview-card.d.ts.map +1 -0
- package/dist/src/primitives/progress.d.ts +13 -0
- package/dist/src/primitives/progress.d.ts.map +1 -0
- package/dist/src/primitives/radio-group.d.ts +13 -0
- package/dist/src/primitives/radio-group.d.ts.map +1 -0
- package/dist/src/primitives/radio.d.ts +13 -0
- package/dist/src/primitives/radio.d.ts.map +1 -0
- package/dist/src/primitives/scroll-area.d.ts +13 -0
- package/dist/src/primitives/scroll-area.d.ts.map +1 -0
- package/dist/src/primitives/select.d.ts +13 -0
- package/dist/src/primitives/select.d.ts.map +1 -0
- package/dist/src/primitives/separator.d.ts +13 -0
- package/dist/src/primitives/separator.d.ts.map +1 -0
- package/dist/src/primitives/slider.d.ts +13 -0
- package/dist/src/primitives/slider.d.ts.map +1 -0
- package/dist/src/primitives/switch.d.ts +13 -0
- package/dist/src/primitives/switch.d.ts.map +1 -0
- package/dist/src/primitives/tabs.d.ts +13 -0
- package/dist/src/primitives/tabs.d.ts.map +1 -0
- package/dist/src/primitives/toast.d.ts +13 -0
- package/dist/src/primitives/toast.d.ts.map +1 -0
- package/dist/src/primitives/toggle-group.d.ts +13 -0
- package/dist/src/primitives/toggle-group.d.ts.map +1 -0
- package/dist/src/primitives/toggle.d.ts +13 -0
- package/dist/src/primitives/toggle.d.ts.map +1 -0
- package/dist/src/primitives/toolbar.d.ts +13 -0
- package/dist/src/primitives/toolbar.d.ts.map +1 -0
- package/dist/src/primitives/tooltip.d.ts +13 -0
- package/dist/src/primitives/tooltip.d.ts.map +1 -0
- package/dist/src/registry/index.d.ts +8 -0
- package/dist/src/registry/index.d.ts.map +1 -0
- package/dist/src/registry/types.d.ts +191 -0
- package/dist/src/registry/types.d.ts.map +1 -0
- package/dist/src/utils/cn.d.ts +4 -0
- package/dist/src/utils/cn.d.ts.map +1 -0
- package/dist/src/utils/highlight-to-react.d.ts +12 -0
- package/dist/src/utils/highlight-to-react.d.ts.map +1 -0
- package/dist/src/utils/index.d.ts +3 -0
- package/dist/src/utils/index.d.ts.map +1 -0
- package/dist/src/utils/link-provider.d.ts +12 -0
- package/dist/src/utils/link-provider.d.ts.map +1 -0
- package/dist/src/utils/prop-examples.d.ts +36 -0
- package/dist/src/utils/prop-examples.d.ts.map +1 -0
- package/dist/styles/sf-binding.css +255 -0
- package/dist/styles/sf-standalone.css +2 -0
- package/dist/styles/sf.css +596 -0
- package/dist/styles/theme-fedramp.css +22 -0
- package/dist/styles/theme-minimal.css +127 -0
- package/dist/styles/theme-navigator.css +137 -0
- package/dist/styles/theme-sf.css +191 -0
- package/dist/surface-BduI7Ehl.js +18 -0
- package/dist/surface-BduI7Ehl.js.map +1 -0
- package/dist/switch-CzZBRBL7.js +169 -0
- package/dist/switch-CzZBRBL7.js.map +1 -0
- package/dist/table-CIMx0Oq0.js +200 -0
- package/dist/table-CIMx0Oq0.js.map +1 -0
- package/dist/tabs-1cHrYoel.js +54 -0
- package/dist/tabs-1cHrYoel.js.map +1 -0
- package/dist/text-KJmGkwnf.js +103 -0
- package/dist/text-KJmGkwnf.js.map +1 -0
- package/dist/theme-toggle-Dpgnoj_Q.js +129 -0
- package/dist/theme-toggle-Dpgnoj_Q.js.map +1 -0
- package/dist/toast-Nw28a5Cx.js +161 -0
- package/dist/toast-Nw28a5Cx.js.map +1 -0
- package/dist/tooltip-Cb7QW-7H.js +79 -0
- package/dist/tooltip-Cb7QW-7H.js.map +1 -0
- package/dist/use-agent-harness-DZzcn96L.js +929 -0
- package/dist/use-agent-harness-DZzcn96L.js.map +1 -0
- package/dist/utils.js +4 -0
- package/package.json +620 -0
- package/scripts/component-registry/cache.ts +124 -0
- package/scripts/component-registry/discovery.ts +464 -0
- package/scripts/component-registry/example-cleanup.ts +168 -0
- package/scripts/component-registry/index.test.ts +678 -0
- package/scripts/component-registry/index.ts +931 -0
- package/scripts/component-registry/markdown-generator.ts +222 -0
- package/scripts/component-registry/metadata.ts +653 -0
- package/scripts/component-registry/props-filter.ts +313 -0
- package/scripts/component-registry/schema-generator.ts +332 -0
- package/scripts/component-registry/sub-components.ts +350 -0
- package/scripts/component-registry/types.ts +156 -0
- package/scripts/component-registry/utils.ts +280 -0
- package/scripts/component-registry/variant-parser.ts +262 -0
- package/scripts/css-build.ts +117 -0
- package/scripts/generate-primitives.ts +178 -0
- package/scripts/theme-generator/config.ts +538 -0
- package/scripts/theme-generator/generate-css.ts +256 -0
- package/scripts/theme-generator/index.ts +161 -0
- package/scripts/theme-generator/migrate.ts +584 -0
- package/scripts/theme-generator/types.ts +86 -0
- package/skills/component-selection/SKILL.md +64 -0
- package/skills/installing-blocks/SKILL.md +47 -0
- package/skills/theming-and-tokens/SKILL.md +62 -0
|
@@ -0,0 +1,522 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* MapBlock — a self-contained Leaflet 2.0 map block.
|
|
5
|
+
*
|
|
6
|
+
* Pieces:
|
|
7
|
+
* - Dark CartoDB tile layer by default (swappable via `tileUrl`)
|
|
8
|
+
* - H3 hex overlay support via `h3Cells` prop and `h3-js`
|
|
9
|
+
* - Dot markers grouped by category with auto-assigned colors
|
|
10
|
+
* - Floating legend panel (bottom-left) with click-to-filter
|
|
11
|
+
* - Optional floating filter bar (top-center) via `filters` slot
|
|
12
|
+
* - `onMapReady` callback for imperative Leaflet access
|
|
13
|
+
*
|
|
14
|
+
* Peer deps: `leaflet@2.0.0-alpha.1`, `h3-js`
|
|
15
|
+
* Import `leaflet/dist/leaflet.css` once at your app entry.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```tsx
|
|
19
|
+
* <MapBlock
|
|
20
|
+
* markers={results.map(r => ({
|
|
21
|
+
* lat: r.lat, lng: r.lng,
|
|
22
|
+
* category: r.match_type,
|
|
23
|
+
* tooltip: r.label,
|
|
24
|
+
* }))}
|
|
25
|
+
* h3Cells={results.filter(r => r.h3_index).map(r => ({
|
|
26
|
+
* index: r.h3_index,
|
|
27
|
+
* category: r.match_type,
|
|
28
|
+
* }))}
|
|
29
|
+
* legend={legendItems}
|
|
30
|
+
* />
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
|
|
34
|
+
import { XIcon, FunnelIcon, PlusIcon, MinusIcon } from "@phosphor-icons/react";
|
|
35
|
+
import type { ReactNode } from "react";
|
|
36
|
+
import { useCallback, useEffect, useRef, useState } from "react";
|
|
37
|
+
|
|
38
|
+
import { Badge } from "../../components/badge";
|
|
39
|
+
import { Button } from "../../components/button";
|
|
40
|
+
import { Loader } from "../../components/loader";
|
|
41
|
+
import { Tooltip } from "../../components/tooltip";
|
|
42
|
+
import { cn } from "../../utils/cn";
|
|
43
|
+
|
|
44
|
+
// ─── Types ────────────────────────────────────────────────────────────────────
|
|
45
|
+
|
|
46
|
+
export interface MapMarker {
|
|
47
|
+
/** Latitude */
|
|
48
|
+
lat: number;
|
|
49
|
+
/** Longitude */
|
|
50
|
+
lng: number;
|
|
51
|
+
/** Groups the marker for legend filtering and color assignment */
|
|
52
|
+
category?: string;
|
|
53
|
+
/** HTML string or plain text shown on hover */
|
|
54
|
+
tooltip?: string;
|
|
55
|
+
/** Override the auto-generated dot color */
|
|
56
|
+
color?: string;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export interface MapH3Cell {
|
|
60
|
+
/** H3 cell index (e.g. "8a2a1072b59ffff") */
|
|
61
|
+
index: string;
|
|
62
|
+
/** Groups the cell for color assignment — should match a marker category */
|
|
63
|
+
category?: string;
|
|
64
|
+
/** Override the auto-generated fill color */
|
|
65
|
+
color?: string;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export interface MapLegendItem {
|
|
69
|
+
/** Category key — must match `MapMarker.category` / `MapH3Cell.category` */
|
|
70
|
+
key: string;
|
|
71
|
+
/** Display label */
|
|
72
|
+
label: string;
|
|
73
|
+
/** Dot color override — auto-generated from key if omitted */
|
|
74
|
+
color?: string;
|
|
75
|
+
/** Count badge shown next to the label */
|
|
76
|
+
count?: number;
|
|
77
|
+
/** Tooltip content shown on hover */
|
|
78
|
+
description?: string;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
export interface MapHandle {
|
|
82
|
+
/** The raw Leaflet map instance */
|
|
83
|
+
map: import("leaflet").Map;
|
|
84
|
+
/** Fit the viewport to all current markers */
|
|
85
|
+
fitToMarkers: () => void;
|
|
86
|
+
/** Clear all markers and H3 cells */
|
|
87
|
+
clearLayers: () => void;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
export interface MapProps {
|
|
91
|
+
/** Initial map center [lat, lng]. @default [38.9, -77.03] (Washington DC) */
|
|
92
|
+
center?: [number, number];
|
|
93
|
+
/** Initial zoom level. @default 12 */
|
|
94
|
+
zoom?: number;
|
|
95
|
+
/** Leaflet tile URL template. @default CartoDB Dark Matter */
|
|
96
|
+
tileUrl?: string;
|
|
97
|
+
/** Extra options forwarded to Leaflet TileLayer */
|
|
98
|
+
tileOptions?: Record<string, unknown>;
|
|
99
|
+
/** Markers to plot on the map */
|
|
100
|
+
markers?: MapMarker[];
|
|
101
|
+
/** H3 hex cells to render as filled polygons */
|
|
102
|
+
h3Cells?: MapH3Cell[];
|
|
103
|
+
/** Legend items. Pass an array to show the legend panel; omit to hide it. */
|
|
104
|
+
legend?: MapLegendItem[];
|
|
105
|
+
/** Called whenever the user toggles a legend filter row */
|
|
106
|
+
onLegendFilter?: (activeKeys: Set<string>) => void;
|
|
107
|
+
/**
|
|
108
|
+
* Content rendered in the floating filter bar at the top-center of the map.
|
|
109
|
+
* Use this slot for search inputs, dropdowns, chip filters, etc.
|
|
110
|
+
*/
|
|
111
|
+
filters?: ReactNode;
|
|
112
|
+
/** Called once after the Leaflet map is initialized */
|
|
113
|
+
onMapReady?: (handle: MapHandle) => void;
|
|
114
|
+
/** Called when the map viewport finishes moving (debounced 300ms) */
|
|
115
|
+
onMoveEnd?: (center: { lat: number; lng: number }, zoom: number) => void;
|
|
116
|
+
/** Called when the user clicks the map canvas */
|
|
117
|
+
onClick?: (lat: number, lng: number) => void;
|
|
118
|
+
/** Extra class names on the root wrapper div */
|
|
119
|
+
className?: string;
|
|
120
|
+
/** Height of the map container. @default "100%" */
|
|
121
|
+
height?: string | number;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
// ─── Helpers ──────────────────────────────────────────────────────────────────
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Deterministic HSL color from a string key.
|
|
128
|
+
* Same djb2-style hash used in the geocode playground for category coloring.
|
|
129
|
+
*/
|
|
130
|
+
function hashColor(key: string): string {
|
|
131
|
+
let h = 0;
|
|
132
|
+
for (let i = 0; i < key.length; i++) {
|
|
133
|
+
h = Math.trunc(Math.imul(31, h) + (key.codePointAt(i) ?? 0));
|
|
134
|
+
}
|
|
135
|
+
return `hsl(${Math.abs(h) % 360},65%,60%)`;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
function resolveColor(category?: string, override?: string): string {
|
|
139
|
+
if (override) return override;
|
|
140
|
+
return category ? hashColor(category) : "hsl(220,15%,55%)";
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
// ─── MapBlock ─────────────────────────────────────────────────────────────────
|
|
144
|
+
// Named MapBlock internally to avoid conflict with the JS global Map object.
|
|
145
|
+
// Exported as `Map` via the index.ts alias so `bun sf add Map` works.
|
|
146
|
+
|
|
147
|
+
export function MapBlock({
|
|
148
|
+
center = [38.9, -77.03],
|
|
149
|
+
zoom = 12,
|
|
150
|
+
tileUrl = "https://{s}.basemaps.cartocdn.com/dark_all/{z}/{x}/{y}{r}.png",
|
|
151
|
+
tileOptions,
|
|
152
|
+
markers = [],
|
|
153
|
+
h3Cells = [],
|
|
154
|
+
legend,
|
|
155
|
+
onLegendFilter,
|
|
156
|
+
filters,
|
|
157
|
+
onMapReady,
|
|
158
|
+
onMoveEnd,
|
|
159
|
+
onClick,
|
|
160
|
+
className,
|
|
161
|
+
height = "100%",
|
|
162
|
+
}: MapProps) {
|
|
163
|
+
const canvasRef = useRef<HTMLDivElement>(null);
|
|
164
|
+
const mapRef = useRef<import("leaflet").Map | null>(null);
|
|
165
|
+
const markerLayerRef = useRef<import("leaflet").LayerGroup | null>(null);
|
|
166
|
+
const hexLayerRef = useRef<import("leaflet").LayerGroup | null>(null);
|
|
167
|
+
// category → marker DOM elements, for opacity-only filter (no re-render)
|
|
168
|
+
const markerElsByCat = useRef<Map<string, HTMLElement[]>>(new Map());
|
|
169
|
+
|
|
170
|
+
const [ready, setReady] = useState(false);
|
|
171
|
+
const [activeFilters, setActiveFilters] = useState<Set<string>>(new Set());
|
|
172
|
+
const [currentZoom, setCurrentZoom] = useState(zoom);
|
|
173
|
+
|
|
174
|
+
// ── Initialize map ────────────────────────────────────────────────────────
|
|
175
|
+
|
|
176
|
+
useEffect(() => {
|
|
177
|
+
if (!canvasRef.current || mapRef.current) return;
|
|
178
|
+
|
|
179
|
+
// oxlint-disable-next-line typescript/no-floating-promises
|
|
180
|
+
(async () => {
|
|
181
|
+
const L = await import("leaflet");
|
|
182
|
+
if (!canvasRef.current || mapRef.current) return;
|
|
183
|
+
|
|
184
|
+
// Registry block targets leaflet@^1.9 where the class is L.Map.
|
|
185
|
+
// (The docs sf copy uses leaflet 2.x alpha which renames it to L.LeafletMap.)
|
|
186
|
+
const map = new (L.Map as unknown as new (
|
|
187
|
+
...a: unknown[]
|
|
188
|
+
) => import("leaflet").Map)(canvasRef.current, {
|
|
189
|
+
zoomControl: false,
|
|
190
|
+
attributionControl: false,
|
|
191
|
+
}).setView(center, zoom);
|
|
192
|
+
|
|
193
|
+
map.on("zoomend", () => setCurrentZoom(map.getZoom()));
|
|
194
|
+
|
|
195
|
+
new L.TileLayer(tileUrl, {
|
|
196
|
+
maxZoom: 19,
|
|
197
|
+
subdomains: "abcd",
|
|
198
|
+
...tileOptions,
|
|
199
|
+
}).addTo(map);
|
|
200
|
+
|
|
201
|
+
markerLayerRef.current = new L.LayerGroup().addTo(map);
|
|
202
|
+
hexLayerRef.current = new L.LayerGroup().addTo(map);
|
|
203
|
+
mapRef.current = map;
|
|
204
|
+
setReady(true);
|
|
205
|
+
|
|
206
|
+
// Click
|
|
207
|
+
if (onClick) {
|
|
208
|
+
map.on("click", (e: import("leaflet").LeafletMouseEvent) => {
|
|
209
|
+
onClick(e.latlng.lat, e.latlng.lng);
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
// MoveEnd (debounced)
|
|
214
|
+
if (onMoveEnd) {
|
|
215
|
+
let timer: ReturnType<typeof setTimeout> | null = null;
|
|
216
|
+
map.on("moveend", () => {
|
|
217
|
+
if (timer) clearTimeout(timer);
|
|
218
|
+
timer = setTimeout(() => {
|
|
219
|
+
onMoveEnd(map.getCenter(), map.getZoom());
|
|
220
|
+
}, 300);
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
// onMapReady handle
|
|
225
|
+
if (onMapReady) {
|
|
226
|
+
onMapReady({
|
|
227
|
+
map,
|
|
228
|
+
fitToMarkers() {
|
|
229
|
+
const pts = markers.map(
|
|
230
|
+
(m) => [m.lat, m.lng] as import("leaflet").LatLngTuple
|
|
231
|
+
);
|
|
232
|
+
if (!pts.length) return;
|
|
233
|
+
// oxlint-disable-next-line typescript/no-floating-promises
|
|
234
|
+
(async () => {
|
|
235
|
+
const LL = await import("leaflet");
|
|
236
|
+
map.fitBounds(new LL.LatLngBounds(pts).pad(0.3), {
|
|
237
|
+
maxZoom: 16,
|
|
238
|
+
});
|
|
239
|
+
})();
|
|
240
|
+
},
|
|
241
|
+
clearLayers() {
|
|
242
|
+
markerLayerRef.current?.clearLayers();
|
|
243
|
+
hexLayerRef.current?.clearLayers();
|
|
244
|
+
markerElsByCat.current.clear();
|
|
245
|
+
},
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
})();
|
|
249
|
+
|
|
250
|
+
return () => {
|
|
251
|
+
mapRef.current?.remove();
|
|
252
|
+
mapRef.current = null;
|
|
253
|
+
};
|
|
254
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
255
|
+
}, []);
|
|
256
|
+
|
|
257
|
+
// ── Plot markers ──────────────────────────────────────────────────────────
|
|
258
|
+
|
|
259
|
+
useEffect(() => {
|
|
260
|
+
const layer = markerLayerRef.current;
|
|
261
|
+
const map = mapRef.current;
|
|
262
|
+
if (!layer || !map) return;
|
|
263
|
+
|
|
264
|
+
// oxlint-disable-next-line typescript/no-floating-promises
|
|
265
|
+
(async () => {
|
|
266
|
+
const L = await import("leaflet");
|
|
267
|
+
layer.clearLayers();
|
|
268
|
+
markerElsByCat.current.clear();
|
|
269
|
+
if (!markers.length) return;
|
|
270
|
+
|
|
271
|
+
for (const m of markers) {
|
|
272
|
+
const color = resolveColor(m.category, m.color);
|
|
273
|
+
const icon = new L.DivIcon({
|
|
274
|
+
className: "",
|
|
275
|
+
html: `<div style="
|
|
276
|
+
width:12px;height:12px;
|
|
277
|
+
background:${color};
|
|
278
|
+
border:2px solid rgba(0,0,0,0.55);
|
|
279
|
+
border-radius:50%;
|
|
280
|
+
box-shadow:0 0 8px ${color}55;
|
|
281
|
+
"></div>`,
|
|
282
|
+
iconSize: [12, 12],
|
|
283
|
+
iconAnchor: [6, 6],
|
|
284
|
+
popupAnchor: [0, -8],
|
|
285
|
+
});
|
|
286
|
+
|
|
287
|
+
const marker = new L.Marker([m.lat, m.lng], { icon }).addTo(layer);
|
|
288
|
+
|
|
289
|
+
if (m.tooltip) {
|
|
290
|
+
marker.bindTooltip(m.tooltip, {
|
|
291
|
+
direction: "top",
|
|
292
|
+
offset: [0, -8],
|
|
293
|
+
className: "sf-map-tooltip",
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
// Track DOM element by category for filter-dimming
|
|
298
|
+
if (m.category) {
|
|
299
|
+
const el = (marker as unknown as { _icon?: HTMLElement })._icon;
|
|
300
|
+
if (el) {
|
|
301
|
+
const arr = markerElsByCat.current.get(m.category) ?? [];
|
|
302
|
+
arr.push(el);
|
|
303
|
+
markerElsByCat.current.set(m.category, arr);
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
// Auto-fit on first plot
|
|
309
|
+
const pts = markers.map(
|
|
310
|
+
(m) => [m.lat, m.lng] as import("leaflet").LatLngTuple
|
|
311
|
+
);
|
|
312
|
+
map.fitBounds(new L.LatLngBounds(pts).pad(0.3), { maxZoom: 16 });
|
|
313
|
+
})();
|
|
314
|
+
}, [markers]);
|
|
315
|
+
|
|
316
|
+
// ── Plot H3 cells ─────────────────────────────────────────────────────────
|
|
317
|
+
|
|
318
|
+
useEffect(() => {
|
|
319
|
+
const layer = hexLayerRef.current;
|
|
320
|
+
if (!layer || !h3Cells.length) return;
|
|
321
|
+
|
|
322
|
+
// oxlint-disable-next-line typescript/no-floating-promises
|
|
323
|
+
(async () => {
|
|
324
|
+
const [L, { cellToBoundary }] = await Promise.all([
|
|
325
|
+
import("leaflet"),
|
|
326
|
+
import("h3-js"),
|
|
327
|
+
]);
|
|
328
|
+
layer.clearLayers();
|
|
329
|
+
for (const cell of h3Cells) {
|
|
330
|
+
const color = resolveColor(cell.category, cell.color);
|
|
331
|
+
const boundary = cellToBoundary(
|
|
332
|
+
cell.index
|
|
333
|
+
) as import("leaflet").LatLngTuple[];
|
|
334
|
+
new L.Polygon(boundary, {
|
|
335
|
+
color,
|
|
336
|
+
fillColor: color,
|
|
337
|
+
fillOpacity: 0.18,
|
|
338
|
+
weight: 1.5,
|
|
339
|
+
opacity: 0.7,
|
|
340
|
+
}).addTo(layer);
|
|
341
|
+
}
|
|
342
|
+
})();
|
|
343
|
+
}, [h3Cells]);
|
|
344
|
+
|
|
345
|
+
// ── Apply legend filter via opacity (no re-render) ────────────────────────
|
|
346
|
+
|
|
347
|
+
useEffect(() => {
|
|
348
|
+
markerElsByCat.current.forEach((els, cat) => {
|
|
349
|
+
const dimmed = activeFilters.size > 0 && !activeFilters.has(cat);
|
|
350
|
+
for (const el of els) {
|
|
351
|
+
el.style.opacity = dimmed ? "0.1" : "1";
|
|
352
|
+
el.style.transition = "opacity 0.15s ease";
|
|
353
|
+
}
|
|
354
|
+
});
|
|
355
|
+
}, [activeFilters]);
|
|
356
|
+
|
|
357
|
+
// ── Legend interactions ───────────────────────────────────────────────────
|
|
358
|
+
|
|
359
|
+
const toggleFilter = useCallback(
|
|
360
|
+
(key: string) => {
|
|
361
|
+
setActiveFilters((prev) => {
|
|
362
|
+
const next = new Set(prev);
|
|
363
|
+
if (next.has(key)) next.delete(key);
|
|
364
|
+
else next.add(key);
|
|
365
|
+
onLegendFilter?.(next);
|
|
366
|
+
return next;
|
|
367
|
+
});
|
|
368
|
+
},
|
|
369
|
+
[onLegendFilter]
|
|
370
|
+
);
|
|
371
|
+
|
|
372
|
+
const clearFilters = useCallback(() => {
|
|
373
|
+
setActiveFilters(new Set());
|
|
374
|
+
onLegendFilter?.(new Set());
|
|
375
|
+
}, [onLegendFilter]);
|
|
376
|
+
|
|
377
|
+
// ── Render ────────────────────────────────────────────────────────────────
|
|
378
|
+
|
|
379
|
+
const hasLegend = legend && legend.length > 0;
|
|
380
|
+
const anyActive = activeFilters.size > 0;
|
|
381
|
+
|
|
382
|
+
return (
|
|
383
|
+
<div
|
|
384
|
+
className={cn("relative overflow-hidden", className)}
|
|
385
|
+
style={{ height }}
|
|
386
|
+
>
|
|
387
|
+
{/* Leaflet canvas — bg matches CartoDB dark tile void color */}
|
|
388
|
+
<div
|
|
389
|
+
ref={canvasRef}
|
|
390
|
+
className="absolute inset-0"
|
|
391
|
+
style={{ background: "#0a0a0f" }}
|
|
392
|
+
/>
|
|
393
|
+
|
|
394
|
+
{/* Loading state — shown until Leaflet initializes */}
|
|
395
|
+
{!ready ? (
|
|
396
|
+
<div className="absolute inset-0 z-[1001] flex items-center justify-center bg-sf-base/80 backdrop-blur-sm">
|
|
397
|
+
<Loader />
|
|
398
|
+
</div>
|
|
399
|
+
) : null}
|
|
400
|
+
|
|
401
|
+
{/* ── Zoom controls — top right ── */}
|
|
402
|
+
{ready ? (
|
|
403
|
+
<div
|
|
404
|
+
className={cn(
|
|
405
|
+
"absolute top-3 right-3 z-[1000]",
|
|
406
|
+
"flex flex-col overflow-hidden rounded-lg",
|
|
407
|
+
"border border-sf-line/50 bg-sf-elevated/92 shadow-lg backdrop-blur-md"
|
|
408
|
+
)}
|
|
409
|
+
>
|
|
410
|
+
<Button
|
|
411
|
+
variant="ghost"
|
|
412
|
+
size="sm"
|
|
413
|
+
aria-label="Zoom in"
|
|
414
|
+
disabled={currentZoom >= 19}
|
|
415
|
+
onClick={() => mapRef.current?.zoomIn()}
|
|
416
|
+
>
|
|
417
|
+
<PlusIcon className="size-3.5" />
|
|
418
|
+
</Button>
|
|
419
|
+
<div className="h-px bg-sf-line/40" />
|
|
420
|
+
<Button
|
|
421
|
+
variant="ghost"
|
|
422
|
+
size="sm"
|
|
423
|
+
aria-label="Zoom out"
|
|
424
|
+
disabled={currentZoom <= 1}
|
|
425
|
+
onClick={() => mapRef.current?.zoomOut()}
|
|
426
|
+
>
|
|
427
|
+
<MinusIcon className="size-3.5" />
|
|
428
|
+
</Button>
|
|
429
|
+
</div>
|
|
430
|
+
) : null}
|
|
431
|
+
|
|
432
|
+
{/* ── Floating filter bar — top center ── */}
|
|
433
|
+
{filters ? (
|
|
434
|
+
<div
|
|
435
|
+
className={cn(
|
|
436
|
+
"absolute top-3 left-1/2 z-[1000] -translate-x-1/2",
|
|
437
|
+
"flex items-center gap-2 rounded-lg",
|
|
438
|
+
"border border-sf-line/50 bg-sf-elevated/92 px-3 py-2",
|
|
439
|
+
"shadow-lg backdrop-blur-md"
|
|
440
|
+
)}
|
|
441
|
+
>
|
|
442
|
+
<FunnelIcon className="size-3.5 shrink-0 text-sf-subtle" />
|
|
443
|
+
{filters}
|
|
444
|
+
</div>
|
|
445
|
+
) : null}
|
|
446
|
+
|
|
447
|
+
{/* ── Legend panel — bottom left ── */}
|
|
448
|
+
{hasLegend ? (
|
|
449
|
+
<div
|
|
450
|
+
className={cn(
|
|
451
|
+
"absolute bottom-4 left-3 z-[1000] min-w-[140px]",
|
|
452
|
+
"flex flex-col gap-px rounded-lg",
|
|
453
|
+
"border border-sf-line/50 bg-sf-elevated/92 px-2.5 py-2",
|
|
454
|
+
"shadow-lg backdrop-blur-md"
|
|
455
|
+
)}
|
|
456
|
+
>
|
|
457
|
+
{/* Header */}
|
|
458
|
+
<div className="mb-1.5 flex items-center justify-between gap-3">
|
|
459
|
+
<span className="select-none text-[10px] uppercase tracking-wider text-sf-subtle/60">
|
|
460
|
+
Legend
|
|
461
|
+
</span>
|
|
462
|
+
{anyActive ? (
|
|
463
|
+
<Button
|
|
464
|
+
variant="ghost"
|
|
465
|
+
size="sm"
|
|
466
|
+
onClick={clearFilters}
|
|
467
|
+
aria-label="Clear filter"
|
|
468
|
+
>
|
|
469
|
+
<XIcon className="size-3" />
|
|
470
|
+
</Button>
|
|
471
|
+
) : null}
|
|
472
|
+
</div>
|
|
473
|
+
|
|
474
|
+
{/* Rows */}
|
|
475
|
+
{legend.map((item) => {
|
|
476
|
+
const color = item.color ?? hashColor(item.key);
|
|
477
|
+
const isActive = activeFilters.has(item.key);
|
|
478
|
+
const row = (
|
|
479
|
+
<button
|
|
480
|
+
key={item.key}
|
|
481
|
+
type="button"
|
|
482
|
+
onClick={() => toggleFilter(item.key)}
|
|
483
|
+
className={cn(
|
|
484
|
+
"flex w-full items-center gap-2 rounded px-1 py-0.5 text-left",
|
|
485
|
+
"text-xs transition-colors",
|
|
486
|
+
isActive
|
|
487
|
+
? "text-sf-default"
|
|
488
|
+
: anyActive
|
|
489
|
+
? "text-sf-subtle/40 hover:text-sf-subtle"
|
|
490
|
+
: "text-sf-subtle hover:text-sf-default"
|
|
491
|
+
)}
|
|
492
|
+
>
|
|
493
|
+
{/* Color dot */}
|
|
494
|
+
<span
|
|
495
|
+
className="size-2 shrink-0 rounded-full transition-colors"
|
|
496
|
+
style={{
|
|
497
|
+
background: isActive || !anyActive ? color : "#3a3a50",
|
|
498
|
+
}}
|
|
499
|
+
/>
|
|
500
|
+
{/* Label */}
|
|
501
|
+
<span className="flex-1 font-mono">{item.label}</span>
|
|
502
|
+
{/* Count badge */}
|
|
503
|
+
{item.count !== undefined ? (
|
|
504
|
+
<Badge variant="secondary">{item.count}</Badge>
|
|
505
|
+
) : null}
|
|
506
|
+
</button>
|
|
507
|
+
);
|
|
508
|
+
|
|
509
|
+
// Wrap in Tooltip if description provided
|
|
510
|
+
return item.description ? (
|
|
511
|
+
<Tooltip key={item.key} content={item.description} side="right">
|
|
512
|
+
{row}
|
|
513
|
+
</Tooltip>
|
|
514
|
+
) : (
|
|
515
|
+
row
|
|
516
|
+
);
|
|
517
|
+
})}
|
|
518
|
+
</div>
|
|
519
|
+
) : null}
|
|
520
|
+
</div>
|
|
521
|
+
);
|
|
522
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/blocks/page-header/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,kBAAkB,EAClB,uBAAuB,EACvB,+BAA+B,EAC/B,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,yBAAyB,GAC/B,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import { TabsItem } from '../../components/tabs';
|
|
3
|
+
export declare const SF_PAGE_HEADER_VARIANTS: {
|
|
4
|
+
readonly spacing: {
|
|
5
|
+
readonly compact: {
|
|
6
|
+
readonly classes: "gap-1";
|
|
7
|
+
readonly description: "Compact spacing between header elements";
|
|
8
|
+
};
|
|
9
|
+
readonly base: {
|
|
10
|
+
readonly classes: "gap-2";
|
|
11
|
+
readonly description: "Default spacing between header elements";
|
|
12
|
+
};
|
|
13
|
+
readonly relaxed: {
|
|
14
|
+
readonly classes: "gap-4";
|
|
15
|
+
readonly description: "Relaxed spacing for more prominent headers";
|
|
16
|
+
};
|
|
17
|
+
};
|
|
18
|
+
};
|
|
19
|
+
export declare const SF_PAGE_HEADER_DEFAULT_VARIANTS: {
|
|
20
|
+
readonly spacing: "base";
|
|
21
|
+
};
|
|
22
|
+
export type SFPageHeaderSpacing = keyof typeof SF_PAGE_HEADER_VARIANTS.spacing;
|
|
23
|
+
export interface SFPageHeaderVariantsProps {
|
|
24
|
+
spacing?: SFPageHeaderSpacing;
|
|
25
|
+
}
|
|
26
|
+
export declare function pageHeaderVariants({ spacing, }?: SFPageHeaderVariantsProps): string;
|
|
27
|
+
export interface PageHeaderProps extends SFPageHeaderVariantsProps {
|
|
28
|
+
breadcrumbs: ReactNode;
|
|
29
|
+
title?: string;
|
|
30
|
+
description?: string;
|
|
31
|
+
tabs?: TabsItem[];
|
|
32
|
+
defaultTab?: string;
|
|
33
|
+
onValueChange?: (value: string) => void;
|
|
34
|
+
className?: string;
|
|
35
|
+
children?: React.ReactNode;
|
|
36
|
+
}
|
|
37
|
+
export declare function PageHeader({ breadcrumbs, title, description, tabs, defaultTab, onValueChange, spacing, className, children, }: PageHeaderProps): import("react/jsx-runtime").JSX.Element;
|
|
38
|
+
//# sourceMappingURL=page-header.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page-header.d.ts","sourceRoot":"","sources":["../../../../src/blocks/page-header/page-header.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAElC,OAAO,EAAQ,KAAK,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAG5D,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;CAe1B,CAAC;AAEX,eAAO,MAAM,+BAA+B;;CAElC,CAAC;AAEX,MAAM,MAAM,mBAAmB,GAAG,MAAM,OAAO,uBAAuB,CAAC,OAAO,CAAC;AAE/E,MAAM,WAAW,yBAAyB;IACxC,OAAO,CAAC,EAAE,mBAAmB,CAAC;CAC/B;AAED,wBAAgB,kBAAkB,CAAC,EACjC,OAAiD,GAClD,GAAE,yBAA8B,UAEhC;AAED,MAAM,WAAW,eAAgB,SAAQ,yBAAyB;IAChE,WAAW,EAAE,SAAS,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAED,wBAAgB,UAAU,CAAC,EACzB,WAAW,EACX,KAAK,EACL,WAAW,EACX,IAAI,EACJ,UAAU,EACV,aAAa,EACb,OAAgB,EAChB,SAAS,EACT,QAAQ,GACT,EAAE,eAAe,2CAoCjB"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { ReactNode } from "react";
|
|
2
|
+
|
|
3
|
+
import { Tabs, type TabsItem } from "../../components/tabs";
|
|
4
|
+
import { cn } from "../../utils/cn";
|
|
5
|
+
|
|
6
|
+
export const SF_PAGE_HEADER_VARIANTS = {
|
|
7
|
+
spacing: {
|
|
8
|
+
compact: {
|
|
9
|
+
classes: "gap-1",
|
|
10
|
+
description: "Compact spacing between header elements",
|
|
11
|
+
},
|
|
12
|
+
base: {
|
|
13
|
+
classes: "gap-2",
|
|
14
|
+
description: "Default spacing between header elements",
|
|
15
|
+
},
|
|
16
|
+
relaxed: {
|
|
17
|
+
classes: "gap-4",
|
|
18
|
+
description: "Relaxed spacing for more prominent headers",
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
} as const;
|
|
22
|
+
|
|
23
|
+
export const SF_PAGE_HEADER_DEFAULT_VARIANTS = {
|
|
24
|
+
spacing: "base",
|
|
25
|
+
} as const;
|
|
26
|
+
|
|
27
|
+
export type SFPageHeaderSpacing = keyof typeof SF_PAGE_HEADER_VARIANTS.spacing;
|
|
28
|
+
|
|
29
|
+
export interface SFPageHeaderVariantsProps {
|
|
30
|
+
spacing?: SFPageHeaderSpacing;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export function pageHeaderVariants({
|
|
34
|
+
spacing = SF_PAGE_HEADER_DEFAULT_VARIANTS.spacing,
|
|
35
|
+
}: SFPageHeaderVariantsProps = {}) {
|
|
36
|
+
return cn("flex flex-col", SF_PAGE_HEADER_VARIANTS.spacing[spacing].classes);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export interface PageHeaderProps extends SFPageHeaderVariantsProps {
|
|
40
|
+
breadcrumbs: ReactNode;
|
|
41
|
+
title?: string;
|
|
42
|
+
description?: string;
|
|
43
|
+
tabs?: TabsItem[];
|
|
44
|
+
defaultTab?: string;
|
|
45
|
+
onValueChange?: (value: string) => void;
|
|
46
|
+
className?: string;
|
|
47
|
+
children?: React.ReactNode;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export function PageHeader({
|
|
51
|
+
breadcrumbs,
|
|
52
|
+
title,
|
|
53
|
+
description,
|
|
54
|
+
tabs,
|
|
55
|
+
defaultTab,
|
|
56
|
+
onValueChange,
|
|
57
|
+
spacing = "base",
|
|
58
|
+
className,
|
|
59
|
+
children,
|
|
60
|
+
}: PageHeaderProps) {
|
|
61
|
+
return (
|
|
62
|
+
<div className={cn(pageHeaderVariants({ spacing }), className)}>
|
|
63
|
+
<div className="border-b border-sf-line">{breadcrumbs}</div>
|
|
64
|
+
|
|
65
|
+
{(title || description) && (
|
|
66
|
+
<div className="flex flex-col gap-2 py-3 pl-3">
|
|
67
|
+
{title && (
|
|
68
|
+
<h1 className="font-heading text-3xl font-semibold text-sf-default">
|
|
69
|
+
{title}
|
|
70
|
+
</h1>
|
|
71
|
+
)}
|
|
72
|
+
{description && (
|
|
73
|
+
<p className="max-w-prose text-base text-sf-subtle">
|
|
74
|
+
{description}
|
|
75
|
+
</p>
|
|
76
|
+
)}
|
|
77
|
+
</div>
|
|
78
|
+
)}
|
|
79
|
+
|
|
80
|
+
{tabs && (
|
|
81
|
+
<div className="flex w-full items-center justify-between border-b border-sf-line pt-1 pb-3 pl-3">
|
|
82
|
+
<Tabs
|
|
83
|
+
tabs={tabs}
|
|
84
|
+
selectedValue={defaultTab}
|
|
85
|
+
onValueChange={(nextValue) => {
|
|
86
|
+
const stringValue = String(nextValue);
|
|
87
|
+
onValueChange?.(stringValue);
|
|
88
|
+
}}
|
|
89
|
+
/>
|
|
90
|
+
|
|
91
|
+
<div className="flex items-center gap-2">{children}</div>
|
|
92
|
+
</div>
|
|
93
|
+
)}
|
|
94
|
+
</div>
|
|
95
|
+
);
|
|
96
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/blocks/resource-list/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,KAAK,qBAAqB,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
export interface ResourceListPageProps {
|
|
3
|
+
title?: string;
|
|
4
|
+
description?: string;
|
|
5
|
+
icon?: ReactNode;
|
|
6
|
+
usage?: ReactNode;
|
|
7
|
+
additionalContent?: ReactNode;
|
|
8
|
+
children: ReactNode;
|
|
9
|
+
className?: string;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* ResourceListPage - A layout component for resource list pages
|
|
13
|
+
*
|
|
14
|
+
* Layouts are page-level components that provide consistent structure
|
|
15
|
+
* for common page patterns like resource lists, dashboards, and settings.
|
|
16
|
+
*/
|
|
17
|
+
export declare function ResourceListPage({ title, description, icon, usage, additionalContent, children, className, }: ResourceListPageProps): import("react/jsx-runtime").JSX.Element;
|
|
18
|
+
//# sourceMappingURL=resource-list.d.ts.map
|