@signalflare-ai/ui 0.5.0 → 1.0.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 +117 -1
- package/ai/USAGE.md +64 -0
- package/ai/component-registry.json +492 -618
- package/ai/component-registry.md +167 -85
- package/ai/schemas.ts +545 -102
- package/bin/sf.js +2 -3
- package/dist/.build-complete +1 -1
- package/dist/ai/schemas.d.ts +1659 -5532
- package/dist/ai/schemas.d.ts.map +1 -1
- package/dist/{ai-actions-DG1dhDMP.js → ai-actions-DSVeQn4e.js} +1 -1
- package/dist/{ai-actions-DG1dhDMP.js.map → ai-actions-DSVeQn4e.js.map} +1 -1
- package/dist/{ai-agent-card-BbtL4NII.js → ai-agent-card-BXHwhWAU.js} +1 -1
- package/dist/{ai-agent-card-BbtL4NII.js.map → ai-agent-card-BXHwhWAU.js.map} +1 -1
- package/dist/{ai-approval-Mb7-BY6i.js → ai-approval-aa0qvjFN.js} +1 -1
- package/dist/{ai-approval-Mb7-BY6i.js.map → ai-approval-aa0qvjFN.js.map} +1 -1
- package/dist/{ai-code-block-BI_z0UVR.js → ai-code-block-BgtIxtZZ.js} +1 -1
- package/dist/{ai-code-block-BI_z0UVR.js.map → ai-code-block-BgtIxtZZ.js.map} +1 -1
- package/dist/{ai-conversation-DYtExcrw.js → ai-conversation-CArP7C8K.js} +1 -1
- package/dist/{ai-conversation-DYtExcrw.js.map → ai-conversation-CArP7C8K.js.map} +1 -1
- package/dist/{ai-info-banner-BpzauUAY.js → ai-info-banner-uFxHHwBA.js} +1 -1
- package/dist/{ai-info-banner-BpzauUAY.js.map → ai-info-banner-uFxHHwBA.js.map} +1 -1
- package/dist/{ai-message-CV8SBoHM.js → ai-message-BjnFznXy.js} +1 -1
- package/dist/{ai-message-CV8SBoHM.js.map → ai-message-BjnFznXy.js.map} +1 -1
- package/dist/{ai-mission-header-ByYkJ6YP.js → ai-mission-header-08__gULL.js} +1 -1
- package/dist/{ai-mission-header-ByYkJ6YP.js.map → ai-mission-header-08__gULL.js.map} +1 -1
- package/dist/ai-part-group-DBtgTgAn.js +277 -0
- package/dist/ai-part-group-DBtgTgAn.js.map +1 -0
- package/dist/ai-prompt-input-Dy1LfxPk.js +1541 -0
- package/dist/ai-prompt-input-Dy1LfxPk.js.map +1 -0
- package/dist/{ai-question-Dp1g9k2o.js → ai-question-CHHoDJMg.js} +1 -1
- package/dist/{ai-question-Dp1g9k2o.js.map → ai-question-CHHoDJMg.js.map} +1 -1
- package/dist/{ai-reasoning-UAmNx_LD.js → ai-reasoning-CnL6ZSr5.js} +84 -5
- package/dist/ai-reasoning-CnL6ZSr5.js.map +1 -0
- package/dist/{ai-response-BWoVsNQG.js → ai-response-BEUg3xvd.js} +13 -16
- package/dist/ai-response-BEUg3xvd.js.map +1 -0
- package/dist/{ai-shimmer-BpOmfonu.js → ai-shimmer-By5_L05p.js} +1 -1
- package/dist/{ai-shimmer-BpOmfonu.js.map → ai-shimmer-By5_L05p.js.map} +1 -1
- package/dist/{ai-status-badge-WhbKVeqn.js → ai-status-badge-BGYGWYF6.js} +1 -1
- package/dist/{ai-status-badge-WhbKVeqn.js.map → ai-status-badge-BGYGWYF6.js.map} +1 -1
- package/dist/{ai-streaming-text-ClL7FwvD.js → ai-streaming-text-CMfoThV0.js} +1 -1
- package/dist/{ai-streaming-text-ClL7FwvD.js.map → ai-streaming-text-CMfoThV0.js.map} +1 -1
- package/dist/{ai-subagent-BruGN1UE.js → ai-subagent-DcPRqkAA.js} +1 -1
- package/dist/{ai-subagent-BruGN1UE.js.map → ai-subagent-DcPRqkAA.js.map} +1 -1
- package/dist/{ai-suggestion-CNsCZj5P.js → ai-suggestion-MgeCg5Ar.js} +1 -1
- package/dist/{ai-suggestion-CNsCZj5P.js.map → ai-suggestion-MgeCg5Ar.js.map} +1 -1
- package/dist/{ai-task-list-B9CpMDYN.js → ai-task-list-Da9zIm00.js} +9 -12
- package/dist/ai-task-list-Da9zIm00.js.map +1 -0
- package/dist/{ai-timeline-Bb5ntsr3.js → ai-timeline-Cwu045IR.js} +1 -1
- package/dist/ai-timeline-Cwu045IR.js.map +1 -0
- package/dist/{ai-tool-BGH8nQ_D.js → ai-tool-Cn1O4xjP.js} +168 -11
- package/dist/ai-tool-Cn1O4xjP.js.map +1 -0
- package/dist/{ai-usage-bar-BI-p-JBk.js → ai-usage-bar-DjS12DMp.js} +1 -1
- package/dist/{ai-usage-bar-BI-p-JBk.js.map → ai-usage-bar-DjS12DMp.js.map} +1 -1
- package/dist/catalog.js +3 -3
- package/dist/catalog.js.map +1 -1
- package/dist/{chart-Bes4MN3C.js → chart-BK3sVPnD.js} +442 -248
- package/dist/chart-BK3sVPnD.js.map +1 -0
- package/dist/{checkbox-CPX7lBaU.js → checkbox-DYhUmZNw.js} +4 -4
- package/dist/checkbox-DYhUmZNw.js.map +1 -0
- package/dist/{clipboard-text-92YeCybc.js → clipboard-text-ssybngLw.js} +2 -2
- package/dist/{clipboard-text-92YeCybc.js.map → clipboard-text-ssybngLw.js.map} +1 -1
- package/dist/{code-DE1Yy1Cu.js → code-Cx-QSoOT.js} +2 -2
- package/dist/{code-DE1Yy1Cu.js.map → code-Cx-QSoOT.js.map} +1 -1
- package/dist/{combobox-B0bLdsX8.js → combobox-C0iW6a0r.js} +2 -2
- package/dist/{combobox-B0bLdsX8.js.map → combobox-C0iW6a0r.js.map} +1 -1
- package/dist/command-line/cli.js +22 -27
- package/dist/{command-palette-CBTY8EiF.js → command-palette-DGzioeki.js} +2 -2
- package/dist/command-palette-DGzioeki.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 +3 -0
- package/dist/components/ai-prompt-input.js +2 -2
- 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/chart.js +3 -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/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/dropdown.js +1 -1
- package/dist/components/filters.js +1 -1
- package/dist/components/input.js +2 -2
- package/dist/components/link.js +2 -2
- package/dist/components/link.js.map +1 -1
- package/dist/components/pagination.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/sparkline.js +3 -0
- package/dist/components/stat-card.js +3 -0
- package/dist/components/table.js +1 -1
- package/dist/components/text-roll.js +3 -0
- package/dist/components/theme-toggle.js +1 -1
- package/dist/components/use-agent-harness.js +1 -1
- package/dist/{data-grid-UJ9ja5cu.js → data-grid-CG76N_hK.js} +6 -6
- package/dist/data-grid-CG76N_hK.js.map +1 -0
- package/dist/{date-picker-ebekkC3R.js → date-picker-Dqg9L4xu.js} +2 -2
- package/dist/{date-picker-ebekkC3R.js.map → date-picker-Dqg9L4xu.js.map} +1 -1
- package/dist/{dist-BNlyONdD.js → dist-1-gcEL2L.js} +224 -135
- package/dist/dist-1-gcEL2L.js.map +1 -0
- package/dist/{dropdown-J5T4pHaR.js → dropdown-qnEYRFXZ.js} +2 -2
- package/dist/{dropdown-J5T4pHaR.js.map → dropdown-qnEYRFXZ.js.map} +1 -1
- package/dist/echart-DURZEyai.js +314 -0
- package/dist/echart-DURZEyai.js.map +1 -0
- package/dist/{filters-BdBogf7D.js → filters-Bw_U6ZTx.js} +5 -5
- package/dist/filters-Bw_U6ZTx.js.map +1 -0
- package/dist/flow-BRsYUCJa.js.map +1 -1
- package/dist/genui.js +2 -2
- package/dist/genui.js.map +1 -1
- package/dist/index.js +45 -42
- package/dist/index.js.map +1 -1
- package/dist/{input-BxQAnXki.js → input-DXYUjGgD.js} +2 -2
- package/dist/{input-BxQAnXki.js.map → input-DXYUjGgD.js.map} +1 -1
- package/dist/{input-Cn25I4o5.js → input-DddtBN-g.js} +2 -2
- package/dist/{input-Cn25I4o5.js.map → input-DddtBN-g.js.map} +1 -1
- package/dist/layer-card-BME0eljh.js.map +1 -1
- package/dist/{pagination-C_YqCy8l.js → pagination-BVqdlONY.js} +2 -2
- package/dist/{pagination-C_YqCy8l.js.map → pagination-BVqdlONY.js.map} +1 -1
- package/dist/primitives/otp-field.js +2 -0
- package/dist/primitives.js +1 -0
- package/dist/{radio-B7zg1wUI.js → radio-BNSwOt3B.js} +3 -3
- package/dist/radio-BNSwOt3B.js.map +1 -0
- package/dist/{select-9p721G00.js → select-1w2aebGQ.js} +2 -2
- package/dist/select-1w2aebGQ.js.map +1 -0
- package/dist/{sensitive-input-D5je2NLl.js → sensitive-input-82Cez3vj.js} +2 -2
- package/dist/{sensitive-input-D5je2NLl.js.map → sensitive-input-82Cez3vj.js.map} +1 -1
- package/dist/{sidebar-DOwBrq57.js → sidebar-CAsCmSpM.js} +3 -3
- package/dist/sidebar-CAsCmSpM.js.map +1 -0
- package/dist/sparkline-DdbeM4Ai.js +108 -0
- package/dist/sparkline-DdbeM4Ai.js.map +1 -0
- package/dist/src/blocks/agent-harness/agent-harness.d.ts +30 -9
- package/dist/src/blocks/agent-harness/agent-harness.d.ts.map +1 -1
- package/dist/src/blocks/agent-harness/agent-harness.stories.tsx +114 -0
- package/dist/src/blocks/agent-harness/agent-harness.tsx +144 -63
- package/dist/src/blocks/commander/commander.stories.tsx +31 -0
- package/dist/src/blocks/dashboard-grid/dashboard-grid.d.ts +48 -0
- package/dist/src/blocks/dashboard-grid/dashboard-grid.d.ts.map +1 -0
- package/dist/src/blocks/dashboard-grid/dashboard-grid.stories.tsx +19 -0
- package/dist/src/blocks/dashboard-grid/dashboard-grid.tsx +110 -0
- package/dist/src/blocks/dashboard-grid/index.d.ts +2 -0
- package/dist/src/blocks/dashboard-grid/index.d.ts.map +1 -0
- package/dist/src/blocks/delete-resource/delete-resource.stories.tsx +31 -0
- package/dist/src/blocks/map-block/map-block.stories.tsx +41 -0
- package/dist/src/blocks/metrics-overview/index.d.ts +2 -0
- package/dist/src/blocks/metrics-overview/index.d.ts.map +1 -0
- package/dist/src/blocks/metrics-overview/metrics-overview.d.ts +67 -0
- package/dist/src/blocks/metrics-overview/metrics-overview.d.ts.map +1 -0
- package/dist/src/blocks/metrics-overview/metrics-overview.stories.tsx +26 -0
- package/dist/src/blocks/metrics-overview/metrics-overview.tsx +139 -0
- package/dist/src/blocks/page-header/page-header.stories.tsx +56 -0
- package/dist/src/blocks/resource-list/resource-list.stories.tsx +31 -0
- package/dist/src/catalog/catalog.d.ts +1 -1
- package/dist/src/catalog/index.d.ts +1 -1
- package/dist/src/catalog/types.d.ts +1 -1
- package/dist/src/command-line/build-cli.d.ts +1 -1
- package/dist/src/command-line/cli.d.ts +1 -1
- package/dist/src/command-line/commands/add.d.ts +1 -1
- package/dist/src/command-line/commands/add.d.ts.map +1 -1
- package/dist/src/command-line/commands/ai.d.ts.map +1 -1
- package/dist/src/command-line/commands/blocks.d.ts +1 -1
- package/dist/src/command-line/commands/blocks.d.ts.map +1 -1
- package/dist/src/command-line/commands/doc.d.ts +1 -1
- package/dist/src/command-line/commands/doc.d.ts.map +1 -1
- package/dist/src/command-line/commands/ls.d.ts +1 -1
- package/dist/src/command-line/commands/ls.d.ts.map +1 -1
- package/dist/src/command-line/commands/migrate.d.ts +3 -3
- package/dist/src/command-line/commands/migrate.d.ts.map +1 -1
- package/dist/src/command-line/utils/config.d.ts +1 -1
- package/dist/src/command-line/utils/transformer.d.ts +1 -1
- package/dist/src/components/ai-part-group/ai-part-group.d.ts +134 -0
- package/dist/src/components/ai-part-group/ai-part-group.d.ts.map +1 -0
- package/dist/src/components/ai-part-group/index.d.ts +2 -0
- package/dist/src/components/ai-part-group/index.d.ts.map +1 -0
- package/dist/src/components/ai-prompt-input/ai-prompt-input.d.ts +196 -7
- 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 +41 -0
- package/dist/src/components/ai-prompt-input/controller.d.ts.map +1 -0
- package/dist/src/components/ai-prompt-input/index.d.ts +3 -1
- package/dist/src/components/ai-prompt-input/index.d.ts.map +1 -1
- package/dist/src/components/ai-prompt-input/types.d.ts +86 -0
- package/dist/src/components/ai-prompt-input/types.d.ts.map +1 -0
- package/dist/src/components/ai-reasoning/ai-reasoning.d.ts +17 -1
- package/dist/src/components/ai-reasoning/ai-reasoning.d.ts.map +1 -1
- package/dist/src/components/ai-response/ai-response.d.ts +1 -2
- package/dist/src/components/ai-response/ai-response.d.ts.map +1 -1
- package/dist/src/components/ai-task-list/ai-task-list.d.ts.map +1 -1
- package/dist/src/components/ai-tool/ai-tool.d.ts +17 -1
- package/dist/src/components/ai-tool/ai-tool.d.ts.map +1 -1
- package/dist/src/components/chart/area-chart.d.ts +69 -0
- package/dist/src/components/chart/area-chart.d.ts.map +1 -0
- package/dist/src/components/chart/bar-chart.d.ts +60 -0
- package/dist/src/components/chart/bar-chart.d.ts.map +1 -0
- package/dist/src/components/chart/color.d.ts +56 -0
- package/dist/src/components/chart/color.d.ts.map +1 -1
- package/dist/src/components/chart/echart.d.ts.map +1 -1
- package/dist/src/components/chart/index.d.ts +5 -0
- package/dist/src/components/chart/index.d.ts.map +1 -1
- package/dist/src/components/chart/pie-chart.d.ts +64 -0
- package/dist/src/components/chart/pie-chart.d.ts.map +1 -0
- package/dist/src/components/chart/scatter-chart.d.ts +57 -0
- package/dist/src/components/chart/scatter-chart.d.ts.map +1 -0
- package/dist/src/components/chart/stacked-bar-chart.d.ts +59 -0
- package/dist/src/components/chart/stacked-bar-chart.d.ts.map +1 -0
- package/dist/src/components/chart/timeseries-chart.d.ts.map +1 -1
- package/dist/src/components/code/code.d.ts +1 -1
- package/dist/src/components/command-palette/command-palette.d.ts +1 -1
- package/dist/src/components/data-grid/data-grid.d.ts.map +1 -1
- package/dist/src/components/data-grid/index.d.ts +1 -1
- package/dist/src/components/data-grid/index.d.ts.map +1 -1
- package/dist/src/components/data-grid/types.d.ts.map +1 -1
- package/dist/src/components/date-picker/date-picker.d.ts +2 -2
- package/dist/src/components/filters/filters.d.ts.map +1 -1
- package/dist/src/components/filters/helpers.d.ts.map +1 -1
- package/dist/src/components/filters/types.d.ts.map +1 -1
- package/dist/src/components/layer-card/layer-card.d.ts +1 -1
- package/dist/src/components/link/link.d.ts +2 -2
- package/dist/src/components/radio/radio.d.ts +1 -1
- package/dist/src/components/select/select.d.ts +1 -1
- package/dist/src/components/sidebar/sidebar.d.ts +2 -2
- package/dist/src/components/sparkline/index.d.ts +2 -0
- package/dist/src/components/sparkline/index.d.ts.map +1 -0
- package/dist/src/components/sparkline/sparkline.d.ts +52 -0
- package/dist/src/components/sparkline/sparkline.d.ts.map +1 -0
- package/dist/src/components/stat-card/index.d.ts +2 -0
- package/dist/src/components/{ai-loader → stat-card}/index.d.ts.map +1 -1
- package/dist/src/components/stat-card/stat-card.d.ts +80 -0
- package/dist/src/components/stat-card/stat-card.d.ts.map +1 -0
- package/dist/src/components/text-roll/index.d.ts +2 -0
- package/dist/src/components/text-roll/index.d.ts.map +1 -0
- package/dist/src/components/text-roll/text-roll.d.ts +49 -0
- package/dist/src/components/text-roll/text-roll.d.ts.map +1 -0
- package/dist/src/components/toast/toast.d.ts.map +1 -1
- package/dist/src/components/use-agent-harness/use-agent-harness.d.ts +2 -2
- package/dist/src/genui/genui.d.ts.map +1 -1
- package/dist/src/index.d.ts +5 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/primitives/index.d.ts +1 -0
- package/dist/src/primitives/index.d.ts.map +1 -1
- package/dist/src/primitives/otp-field.d.ts +13 -0
- package/dist/src/primitives/otp-field.d.ts.map +1 -0
- package/dist/src/registry/index.d.ts +1 -1
- package/dist/src/registry/types.d.ts +1 -1
- package/dist/stat-card-CEZscNh8.js +103 -0
- package/dist/stat-card-CEZscNh8.js.map +1 -0
- package/dist/styles/sf-binding.css +20 -62
- package/dist/styles/sf-standalone.css +2 -2
- package/dist/styles/shadcn.css +120 -0
- package/dist/styles/theme-blue-tint.css +98 -0
- package/dist/styles/theme-fedramp.css +3 -12
- package/dist/styles/theme-minimal.css +26 -104
- package/dist/styles/theme-sf.css +96 -114
- package/dist/{table-CIMx0Oq0.js → table-Rv4JMy0B.js} +2 -2
- package/dist/{table-CIMx0Oq0.js.map → table-Rv4JMy0B.js.map} +1 -1
- package/dist/text-roll-BZ3I1umc.js +79 -0
- package/dist/text-roll-BZ3I1umc.js.map +1 -0
- package/dist/{theme-toggle-Dpgnoj_Q.js → theme-toggle-Bhu681D7.js} +1 -1
- package/dist/{theme-toggle-Dpgnoj_Q.js.map → theme-toggle-Bhu681D7.js.map} +1 -1
- package/dist/{use-agent-harness-DZzcn96L.js → use-agent-harness-BMyF8pTq.js} +5 -5
- package/dist/use-agent-harness-BMyF8pTq.js.map +1 -0
- package/package.json +48 -19
- package/scripts/component-registry/discovery.ts +2 -2
- package/scripts/component-registry/index.ts +1 -1
- package/scripts/component-registry/props-filter.ts +1 -1
- package/scripts/component-registry/utils.ts +5 -5
- package/scripts/component-registry/variant-parser.ts +124 -19
- package/scripts/convert-demos-to-stories.ts +253 -0
- package/scripts/css-build.ts +4 -3
- package/scripts/generate-primitives.ts +11 -3
- package/scripts/theme-generator/config.ts +339 -71
- package/scripts/theme-generator/generate-css.ts +17 -3
- package/scripts/theme-generator/index.ts +3 -3
- package/scripts/theme-generator/migrate.ts +1 -1
- package/dist/ai-loader-Cr3eQkNS.js +0 -134
- package/dist/ai-loader-Cr3eQkNS.js.map +0 -1
- package/dist/ai-prompt-input-Bo1YuJly.js +0 -769
- package/dist/ai-prompt-input-Bo1YuJly.js.map +0 -1
- package/dist/ai-reasoning-UAmNx_LD.js.map +0 -1
- package/dist/ai-response-BWoVsNQG.js.map +0 -1
- package/dist/ai-task-list-B9CpMDYN.js.map +0 -1
- package/dist/ai-timeline-Bb5ntsr3.js.map +0 -1
- package/dist/ai-tool-BGH8nQ_D.js.map +0 -1
- package/dist/chart-Bes4MN3C.js.map +0 -1
- package/dist/checkbox-CPX7lBaU.js.map +0 -1
- package/dist/command-palette-CBTY8EiF.js.map +0 -1
- package/dist/components/ai-loader.js +0 -3
- package/dist/data-grid-UJ9ja5cu.js.map +0 -1
- package/dist/dist-BNlyONdD.js.map +0 -1
- package/dist/filters-BdBogf7D.js.map +0 -1
- package/dist/radio-B7zg1wUI.js.map +0 -1
- package/dist/select-9p721G00.js.map +0 -1
- package/dist/sidebar-DOwBrq57.js.map +0 -1
- package/dist/src/components/ai-loader/ai-loader.d.ts +0 -44
- package/dist/src/components/ai-loader/ai-loader.d.ts.map +0 -1
- package/dist/src/components/ai-loader/index.d.ts +0 -2
- package/dist/styles/theme-navigator.css +0 -137
- package/dist/use-agent-harness-DZzcn96L.js.map +0 -1
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { t as cn } from "./cn-YROP2_ox.js";
|
|
3
|
+
import { forwardRef } from "react";
|
|
4
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
5
|
+
//#region src/components/stat-card/stat-card.tsx
|
|
6
|
+
/** StatCard variant definitions (indexed by variant name) */
|
|
7
|
+
var SF_STAT_CARD_VARIANTS = { size: {
|
|
8
|
+
sm: {
|
|
9
|
+
root: "gap-1 p-3",
|
|
10
|
+
label: "text-xs",
|
|
11
|
+
value: "text-xl",
|
|
12
|
+
hint: "text-xs"
|
|
13
|
+
},
|
|
14
|
+
base: {
|
|
15
|
+
root: "gap-2 p-4",
|
|
16
|
+
label: "text-sm",
|
|
17
|
+
value: "text-3xl",
|
|
18
|
+
hint: "text-xs"
|
|
19
|
+
}
|
|
20
|
+
} };
|
|
21
|
+
/** Default variants applied when none are passed explicitly. */
|
|
22
|
+
var SF_STAT_CARD_DEFAULT_VARIANTS = { size: "base" };
|
|
23
|
+
function inferDirection(value, override) {
|
|
24
|
+
if (override) return override;
|
|
25
|
+
if (value > 0) return "up";
|
|
26
|
+
if (value < 0) return "down";
|
|
27
|
+
return "flat";
|
|
28
|
+
}
|
|
29
|
+
function deltaColor(direction, positiveDirection) {
|
|
30
|
+
if (direction === "flat") return "text-sf-subtle";
|
|
31
|
+
return direction === positiveDirection ? "text-sf-success" : "text-sf-danger";
|
|
32
|
+
}
|
|
33
|
+
function deltaArrow(direction) {
|
|
34
|
+
if (direction === "up") return "↑";
|
|
35
|
+
if (direction === "down") return "↓";
|
|
36
|
+
return "→";
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* StatCard — compact KPI tile displaying a label, a primary value, and an
|
|
40
|
+
* optional delta + trend sparkline.
|
|
41
|
+
*
|
|
42
|
+
* @example
|
|
43
|
+
* ```tsx
|
|
44
|
+
* <StatCard
|
|
45
|
+
* label="Active users"
|
|
46
|
+
* value="12,384"
|
|
47
|
+
* delta={{ value: 0.12, label: "vs last week" }}
|
|
48
|
+
* />
|
|
49
|
+
* ```
|
|
50
|
+
*/
|
|
51
|
+
var StatCard = forwardRef(function StatCard({ label, value, hint, delta, trend, loading, size = SF_STAT_CARD_DEFAULT_VARIANTS.size, className }, ref) {
|
|
52
|
+
const sizeClasses = SF_STAT_CARD_VARIANTS.size[size];
|
|
53
|
+
const direction = delta ? inferDirection(delta.value, delta.direction) : void 0;
|
|
54
|
+
const deltaClass = delta && direction ? deltaColor(direction, delta.positiveDirection ?? "up") : void 0;
|
|
55
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
56
|
+
ref,
|
|
57
|
+
className: cn("flex flex-col rounded-lg bg-sf-elevated text-sf-default", sizeClasses.root, className),
|
|
58
|
+
children: [/* @__PURE__ */ jsx("div", {
|
|
59
|
+
className: cn("text-sf-subtle", sizeClasses.label),
|
|
60
|
+
children: label
|
|
61
|
+
}), /* @__PURE__ */ jsxs("div", {
|
|
62
|
+
className: "flex items-start justify-between gap-3",
|
|
63
|
+
children: [/* @__PURE__ */ jsxs("div", {
|
|
64
|
+
className: "flex flex-col gap-1",
|
|
65
|
+
children: [
|
|
66
|
+
loading ? /* @__PURE__ */ jsx("div", {
|
|
67
|
+
"aria-busy": "true",
|
|
68
|
+
className: cn("h-8 w-24 animate-pulse rounded-md bg-sf-fill", size === "sm" && "h-6 w-20")
|
|
69
|
+
}) : /* @__PURE__ */ jsx("div", {
|
|
70
|
+
className: cn("font-semibold tabular-nums text-sf-strong", sizeClasses.value),
|
|
71
|
+
children: value
|
|
72
|
+
}),
|
|
73
|
+
delta && !loading ? /* @__PURE__ */ jsxs("div", {
|
|
74
|
+
className: cn("flex items-baseline gap-1 tabular-nums", sizeClasses.hint),
|
|
75
|
+
children: [/* @__PURE__ */ jsxs("span", {
|
|
76
|
+
className: cn("font-medium", deltaClass),
|
|
77
|
+
children: [
|
|
78
|
+
deltaArrow(direction),
|
|
79
|
+
" ",
|
|
80
|
+
Math.abs(delta.value).toLocaleString(void 0, { maximumFractionDigits: 2 })
|
|
81
|
+
]
|
|
82
|
+
}), delta.label ? /* @__PURE__ */ jsx("span", {
|
|
83
|
+
className: "text-sf-subtle",
|
|
84
|
+
children: delta.label
|
|
85
|
+
}) : null]
|
|
86
|
+
}) : null,
|
|
87
|
+
hint && !loading ? /* @__PURE__ */ jsx("div", {
|
|
88
|
+
className: cn("text-sf-subtle", sizeClasses.hint),
|
|
89
|
+
children: hint
|
|
90
|
+
}) : null
|
|
91
|
+
]
|
|
92
|
+
}), trend ? /* @__PURE__ */ jsx("div", {
|
|
93
|
+
className: "pointer-events-none shrink-0",
|
|
94
|
+
children: trend
|
|
95
|
+
}) : null]
|
|
96
|
+
})]
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
StatCard.displayName = "StatCard";
|
|
100
|
+
//#endregion
|
|
101
|
+
export { SF_STAT_CARD_VARIANTS as n, StatCard as r, SF_STAT_CARD_DEFAULT_VARIANTS as t };
|
|
102
|
+
|
|
103
|
+
//# sourceMappingURL=stat-card-CEZscNh8.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stat-card-CEZscNh8.js","names":[],"sources":["../src/components/stat-card/stat-card.tsx"],"sourcesContent":["import { forwardRef, type ReactNode } from \"react\";\n\nimport { cn } from \"../../utils/cn\";\n\n/** StatCard variant definitions (indexed by variant name) */\nexport const SF_STAT_CARD_VARIANTS = {\n size: {\n sm: {\n root: \"gap-1 p-3\",\n label: \"text-xs\",\n value: \"text-xl\",\n hint: \"text-xs\",\n },\n base: {\n root: \"gap-2 p-4\",\n label: \"text-sm\",\n value: \"text-3xl\",\n hint: \"text-xs\",\n },\n },\n} as const;\n\n/** Default variants applied when none are passed explicitly. */\nexport const SF_STAT_CARD_DEFAULT_VARIANTS = {\n size: \"base\",\n} as const;\n\nexport interface SFStatCardVariantsProps {\n /** Size of the card. Defaults to `\"base\"`. */\n size?: keyof typeof SF_STAT_CARD_VARIANTS.size;\n}\n\n/** Describes a change in the metric over a comparison period. */\nexport interface StatCardDelta {\n /** Numeric delta (e.g. `0.12` for +12% or `-4` for a drop of 4). */\n value: number;\n /**\n * Override the arrow direction. By default, direction is inferred from the\n * sign of `value`.\n */\n direction?: \"up\" | \"down\" | \"flat\";\n /** Optional context label shown after the delta (e.g. `\"vs last week\"`). */\n label?: string;\n /**\n * Whether an \"up\" direction means \"good\" (green) or \"bad\" (red). For metrics\n * like error rate, set this to `\"down\"` so downward movement is coloured\n * green.\n * @default \"up\"\n */\n positiveDirection?: \"up\" | \"down\";\n}\n\n/** Props for `StatCard` */\nexport interface StatCardProps extends SFStatCardVariantsProps {\n /** Short descriptive label (e.g. `\"Active users\"`). */\n label: ReactNode;\n /** Primary value to emphasise (pre-formatted). */\n value: ReactNode;\n /** Optional secondary text displayed under the value. */\n hint?: ReactNode;\n /** Optional change indicator (arrow + number + label). */\n delta?: StatCardDelta;\n /**\n * Optional content slot rendered on the right-hand side — typically a\n * `Sparkline` showing the metric's trend.\n */\n trend?: ReactNode;\n /** When `true`, renders a skeleton placeholder in place of value + delta. */\n loading?: boolean;\n /** Additional CSS classes merged via `cn()`. */\n className?: string;\n}\n\nfunction inferDirection(\n value: number,\n override?: \"up\" | \"down\" | \"flat\"\n): \"up\" | \"down\" | \"flat\" {\n if (override) return override;\n if (value > 0) return \"up\";\n if (value < 0) return \"down\";\n return \"flat\";\n}\n\nfunction deltaColor(\n direction: \"up\" | \"down\" | \"flat\",\n positiveDirection: \"up\" | \"down\"\n): string {\n if (direction === \"flat\") return \"text-sf-subtle\";\n const isPositive = direction === positiveDirection;\n return isPositive ? \"text-sf-success\" : \"text-sf-danger\";\n}\n\nfunction deltaArrow(direction: \"up\" | \"down\" | \"flat\"): string {\n if (direction === \"up\") return \"↑\";\n if (direction === \"down\") return \"↓\";\n return \"→\";\n}\n\n/**\n * StatCard — compact KPI tile displaying a label, a primary value, and an\n * optional delta + trend sparkline.\n *\n * @example\n * ```tsx\n * <StatCard\n * label=\"Active users\"\n * value=\"12,384\"\n * delta={{ value: 0.12, label: \"vs last week\" }}\n * />\n * ```\n */\nexport const StatCard = forwardRef<HTMLDivElement, StatCardProps>(\n function StatCard(\n {\n label,\n value,\n hint,\n delta,\n trend,\n loading,\n size = SF_STAT_CARD_DEFAULT_VARIANTS.size,\n className,\n },\n ref\n ) {\n const sizeClasses = SF_STAT_CARD_VARIANTS.size[size];\n const direction = delta\n ? inferDirection(delta.value, delta.direction)\n : undefined;\n const deltaClass =\n delta && direction\n ? deltaColor(direction, delta.positiveDirection ?? \"up\")\n : undefined;\n\n return (\n <div\n ref={ref}\n className={cn(\n \"flex flex-col rounded-lg bg-sf-elevated text-sf-default\",\n sizeClasses.root,\n className\n )}\n >\n <div className={cn(\"text-sf-subtle\", sizeClasses.label)}>{label}</div>\n <div className=\"flex items-start justify-between gap-3\">\n <div className=\"flex flex-col gap-1\">\n {loading ? (\n <div\n aria-busy=\"true\"\n className={cn(\n \"h-8 w-24 animate-pulse rounded-md bg-sf-fill\",\n size === \"sm\" && \"h-6 w-20\"\n )}\n />\n ) : (\n <div\n className={cn(\n \"font-semibold tabular-nums text-sf-strong\",\n sizeClasses.value\n )}\n >\n {value}\n </div>\n )}\n {delta && !loading ? (\n <div\n className={cn(\n \"flex items-baseline gap-1 tabular-nums\",\n sizeClasses.hint\n )}\n >\n <span className={cn(\"font-medium\", deltaClass)}>\n {deltaArrow(direction!)}{\" \"}\n {Math.abs(delta.value).toLocaleString(undefined, {\n maximumFractionDigits: 2,\n })}\n </span>\n {delta.label ? (\n <span className=\"text-sf-subtle\">{delta.label}</span>\n ) : null}\n </div>\n ) : null}\n {hint && !loading ? (\n <div className={cn(\"text-sf-subtle\", sizeClasses.hint)}>\n {hint}\n </div>\n ) : null}\n </div>\n {trend ? (\n <div className=\"pointer-events-none shrink-0\">{trend}</div>\n ) : null}\n </div>\n </div>\n );\n }\n);\n\nStatCard.displayName = \"StatCard\";\n"],"mappings":";;;;;;AAKA,IAAa,wBAAwB,EACnC,MAAM;CACJ,IAAI;EACF,MAAM;EACN,OAAO;EACP,OAAO;EACP,MAAM;EACP;CACD,MAAM;EACJ,MAAM;EACN,OAAO;EACP,OAAO;EACP,MAAM;EACP;CACF,EACF;;AAGD,IAAa,gCAAgC,EAC3C,MAAM,QACP;AAgDD,SAAS,eACP,OACA,UACwB;AACxB,KAAI,SAAU,QAAO;AACrB,KAAI,QAAQ,EAAG,QAAO;AACtB,KAAI,QAAQ,EAAG,QAAO;AACtB,QAAO;;AAGT,SAAS,WACP,WACA,mBACQ;AACR,KAAI,cAAc,OAAQ,QAAO;AAEjC,QADmB,cAAc,oBACb,oBAAoB;;AAG1C,SAAS,WAAW,WAA2C;AAC7D,KAAI,cAAc,KAAM,QAAO;AAC/B,KAAI,cAAc,OAAQ,QAAO;AACjC,QAAO;;;;;;;;;;;;;;;AAgBT,IAAa,WAAW,WACtB,SAAS,SACP,EACE,OACA,OACA,MACA,OACA,OACA,SACA,OAAO,8BAA8B,MACrC,aAEF,KACA;CACA,MAAM,cAAc,sBAAsB,KAAK;CAC/C,MAAM,YAAY,QACd,eAAe,MAAM,OAAO,MAAM,UAAU,GAC5C,KAAA;CACJ,MAAM,aACJ,SAAS,YACL,WAAW,WAAW,MAAM,qBAAqB,KAAK,GACtD,KAAA;AAEN,QACE,qBAAC,OAAD;EACO;EACL,WAAW,GACT,2DACA,YAAY,MACZ,UACD;YANH,CAQE,oBAAC,OAAD;GAAK,WAAW,GAAG,kBAAkB,YAAY,MAAM;aAAG;GAAY,CAAA,EACtE,qBAAC,OAAD;GAAK,WAAU;aAAf,CACE,qBAAC,OAAD;IAAK,WAAU;cAAf;KACG,UACC,oBAAC,OAAD;MACE,aAAU;MACV,WAAW,GACT,gDACA,SAAS,QAAQ,WAClB;MACD,CAAA,GAEF,oBAAC,OAAD;MACE,WAAW,GACT,6CACA,YAAY,MACb;gBAEA;MACG,CAAA;KAEP,SAAS,CAAC,UACT,qBAAC,OAAD;MACE,WAAW,GACT,0CACA,YAAY,KACb;gBAJH,CAME,qBAAC,QAAD;OAAM,WAAW,GAAG,eAAe,WAAW;iBAA9C;QACG,WAAW,UAAW;QAAE;QACxB,KAAK,IAAI,MAAM,MAAM,CAAC,eAAe,KAAA,GAAW,EAC/C,uBAAuB,GACxB,CAAC;QACG;UACN,MAAM,QACL,oBAAC,QAAD;OAAM,WAAU;iBAAkB,MAAM;OAAa,CAAA,GACnD,KACA;UACJ;KACH,QAAQ,CAAC,UACR,oBAAC,OAAD;MAAK,WAAW,GAAG,kBAAkB,YAAY,KAAK;gBACnD;MACG,CAAA,GACJ;KACA;OACL,QACC,oBAAC,OAAD;IAAK,WAAU;cAAgC;IAAY,CAAA,GACzD,KACA;KACF;;EAGX;AAED,SAAS,cAAc"}
|
|
@@ -1,73 +1,31 @@
|
|
|
1
1
|
@import "./theme-sf.css";
|
|
2
2
|
@import "./theme-fedramp.css";
|
|
3
3
|
@import "./theme-minimal.css";
|
|
4
|
-
@import "./theme-
|
|
4
|
+
@import "./theme-blue-tint.css";
|
|
5
5
|
|
|
6
6
|
/*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
7
|
+
* The shadcn compatibility layer (--background, --foreground, --border, …) is
|
|
8
|
+
* opt-in. Consumers who copy-paste shadcn/TanStack/navigator components import
|
|
9
|
+
* it explicitly via `@signalflare-ai/ui/styles/shadcn`. The default SF bundle
|
|
10
|
+
* stays free of shadcn-named variables.
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
--sh-string: oklch(0.48 0.16 25); /* orange/brown — strings */
|
|
19
|
-
--sh-comment: oklch(0.62 0 0); /* grey — comments */
|
|
20
|
-
--sh-jsxliterals: oklch(0.52 0.2 265); /* blue — JSX tags */
|
|
21
|
-
--sh-property: oklch(0.38 0.12 220); /* teal — object keys */
|
|
22
|
-
--sh-entity: oklch(0.46 0.18 30); /* orange — class names */
|
|
23
|
-
--sh-sign: oklch(0.45 0 0); /* dark grey — punctuation */
|
|
24
|
-
--sh-space: inherit;
|
|
25
|
-
|
|
26
|
-
--background: oklch(1 0 0);
|
|
27
|
-
--foreground: oklch(0.145 0 0);
|
|
28
|
-
--primary: oklch(0.205 0 0);
|
|
29
|
-
--primary-foreground: oklch(0.985 0 0);
|
|
30
|
-
--muted: oklch(0.96 0 0);
|
|
31
|
-
--muted-foreground: oklch(0.556 0 0);
|
|
32
|
-
--destructive: oklch(0.577 0.245 27.325);
|
|
33
|
-
--border: oklch(0.922 0 0);
|
|
34
|
-
--ring: oklch(0.708 0 0);
|
|
35
|
-
/* Streamdown uses bg-sidebar for code block containers */
|
|
36
|
-
--sidebar: oklch(0.99 0 0);
|
|
37
|
-
--sidebar-foreground: oklch(0.145 0 0);
|
|
38
|
-
--sidebar-border: oklch(0.922 0 0);
|
|
39
|
-
--card: oklch(1 0 0);
|
|
40
|
-
--card-foreground: oklch(0.145 0 0);
|
|
41
|
-
}
|
|
13
|
+
/* ─── sugar-high syntax bridge ───────────────────────────────────────── */
|
|
14
|
+
/*
|
|
15
|
+
* sugar-high injects inline `style="color: var(--sh-*)"` on its tokens.
|
|
16
|
+
* Aliased to sf-syntax-* tokens so themes can override in one place.
|
|
17
|
+
*/
|
|
42
18
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
--sh-space: inherit;
|
|
54
|
-
|
|
55
|
-
--background: oklch(0.21 0.005 252);
|
|
56
|
-
--foreground: oklch(0.985 0 0);
|
|
57
|
-
--primary: oklch(0.55 0.01 40);
|
|
58
|
-
--primary-foreground: oklch(0.98 0 0);
|
|
59
|
-
--muted: oklch(0.27 0.005 252);
|
|
60
|
-
--muted-foreground: oklch(0.65 0 0);
|
|
61
|
-
--destructive: oklch(0.55 0.18 25);
|
|
62
|
-
--border: oklch(0.3 0.015 250);
|
|
63
|
-
--ring: oklch(0.439 0 0);
|
|
64
|
-
/* Streamdown uses bg-sidebar for code block containers */
|
|
65
|
-
--sidebar: oklch(0.24 0.005 252);
|
|
66
|
-
--sidebar-foreground: oklch(0.985 0 0);
|
|
67
|
-
--sidebar-border: oklch(0.3 0.015 250);
|
|
68
|
-
--card: oklch(0.24 0.005 252);
|
|
69
|
-
--card-foreground: oklch(0.985 0 0);
|
|
70
|
-
}
|
|
19
|
+
:root {
|
|
20
|
+
--sh-keyword: var(--color-sf-syntax-keyword);
|
|
21
|
+
--sh-identifier: var(--color-sf-syntax-identifier);
|
|
22
|
+
--sh-string: var(--color-sf-syntax-string);
|
|
23
|
+
--sh-comment: var(--color-sf-syntax-comment);
|
|
24
|
+
--sh-jsxliterals: var(--color-sf-syntax-jsxliterals);
|
|
25
|
+
--sh-property: var(--color-sf-syntax-property);
|
|
26
|
+
--sh-entity: var(--color-sf-syntax-entity);
|
|
27
|
+
--sh-sign: var(--color-sf-syntax-sign);
|
|
28
|
+
--sh-space: inherit;
|
|
71
29
|
}
|
|
72
30
|
|
|
73
31
|
@theme {
|