@adminiumjs/adminium 0.1.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +661 -0
- package/README.md +94 -0
- package/dashboard/assets/DeltaPill-dxlsGh-1.js +2 -0
- package/dashboard/assets/DeltaPill-dxlsGh-1.js.map +1 -0
- package/dashboard/assets/DistributionCorrelationWidgets-ztVy_W_R.js +2 -0
- package/dashboard/assets/DistributionCorrelationWidgets-ztVy_W_R.js.map +1 -0
- package/dashboard/assets/PartWholeWidgets-BDn0i0jt.js +2 -0
- package/dashboard/assets/PartWholeWidgets-BDn0i0jt.js.map +1 -0
- package/dashboard/assets/RemapEditor-z3vRY12e.js +2 -0
- package/dashboard/assets/RemapEditor-z3vRY12e.js.map +1 -0
- package/dashboard/assets/ReviewScreen-COkLQ3T7.js +2 -0
- package/dashboard/assets/ReviewScreen-COkLQ3T7.js.map +1 -0
- package/dashboard/assets/Sparkline-Cvwo368J.js +2 -0
- package/dashboard/assets/Sparkline-Cvwo368J.js.map +1 -0
- package/dashboard/assets/WidgetMissingCard-D0bPJKIs.js +2 -0
- package/dashboard/assets/WidgetMissingCard-D0bPJKIs.js.map +1 -0
- package/dashboard/assets/arc-CPxb74pf.js +2 -0
- package/dashboard/assets/arc-CPxb74pf.js.map +1 -0
- package/dashboard/assets/bars-ranking-components-9Asn_0gR.js +2 -0
- package/dashboard/assets/bars-ranking-components-9Asn_0gR.js.map +1 -0
- package/dashboard/assets/blocks-track-components-BST-NjK2.js +2 -0
- package/dashboard/assets/blocks-track-components-BST-NjK2.js.map +1 -0
- package/dashboard/assets/calendar-track-components-RgNtGtZR.js +2 -0
- package/dashboard/assets/calendar-track-components-RgNtGtZR.js.map +1 -0
- package/dashboard/assets/chrome-track-components-ClNsentC.js +2 -0
- package/dashboard/assets/chrome-track-components-ClNsentC.js.map +1 -0
- package/dashboard/assets/common-BY1j__bD.js +2 -0
- package/dashboard/assets/common-BY1j__bD.js.map +1 -0
- package/dashboard/assets/common-BdlXKpcB.js +2 -0
- package/dashboard/assets/common-BdlXKpcB.js.map +1 -0
- package/dashboard/assets/common-BqqhgMgB.js +2 -0
- package/dashboard/assets/common-BqqhgMgB.js.map +1 -0
- package/dashboard/assets/common-BribWmIo.js +2 -0
- package/dashboard/assets/common-BribWmIo.js.map +1 -0
- package/dashboard/assets/common-Cmf0_lKV.js +2 -0
- package/dashboard/assets/common-Cmf0_lKV.js.map +1 -0
- package/dashboard/assets/common-i0r48qY9.js +2 -0
- package/dashboard/assets/common-i0r48qY9.js.map +1 -0
- package/dashboard/assets/common-x8cfkwpc.js +2 -0
- package/dashboard/assets/common-x8cfkwpc.js.map +1 -0
- package/dashboard/assets/communication-track-components-CNLZXOH_.js +2 -0
- package/dashboard/assets/communication-track-components-CNLZXOH_.js.map +1 -0
- package/dashboard/assets/components-Bp5cFm2d.js +2 -0
- package/dashboard/assets/components-Bp5cFm2d.js.map +1 -0
- package/dashboard/assets/components-C4-O3_gD.js +2 -0
- package/dashboard/assets/components-C4-O3_gD.js.map +1 -0
- package/dashboard/assets/domain-ops-track-components-BPa41AU7.js +2 -0
- package/dashboard/assets/domain-ops-track-components-BPa41AU7.js.map +1 -0
- package/dashboard/assets/domain-track-components-CQ1i1X1t.js +2 -0
- package/dashboard/assets/domain-track-components-CQ1i1X1t.js.map +1 -0
- package/dashboard/assets/errors-BHUWiAQ3.js +2 -0
- package/dashboard/assets/errors-BHUWiAQ3.js.map +1 -0
- package/dashboard/assets/errors-BbyKweDG.js +2 -0
- package/dashboard/assets/errors-BbyKweDG.js.map +1 -0
- package/dashboard/assets/errors-CMQ6JC31.js +2 -0
- package/dashboard/assets/errors-CMQ6JC31.js.map +1 -0
- package/dashboard/assets/errors-D3nVgTmf.js +2 -0
- package/dashboard/assets/errors-D3nVgTmf.js.map +1 -0
- package/dashboard/assets/errors-IqJSoANC.js +2 -0
- package/dashboard/assets/errors-IqJSoANC.js.map +1 -0
- package/dashboard/assets/errors-gmIkO9F6.js +2 -0
- package/dashboard/assets/errors-gmIkO9F6.js.map +1 -0
- package/dashboard/assets/errors-vFk058Vh.js +2 -0
- package/dashboard/assets/errors-vFk058Vh.js.map +1 -0
- package/dashboard/assets/feeds-track-f-components-Cl_8SkGs.js +2 -0
- package/dashboard/assets/feeds-track-f-components-Cl_8SkGs.js.map +1 -0
- package/dashboard/assets/format-Lx4cQ8k-.js +2 -0
- package/dashboard/assets/format-Lx4cQ8k-.js.map +1 -0
- package/dashboard/assets/forms-track-components-Bc2Hoxdh.js +2 -0
- package/dashboard/assets/forms-track-components-Bc2Hoxdh.js.map +1 -0
- package/dashboard/assets/generated-1EfWhCMA.js +2 -0
- package/dashboard/assets/generated-1EfWhCMA.js.map +1 -0
- package/dashboard/assets/generated-BB3ZMxvx.js +2 -0
- package/dashboard/assets/generated-BB3ZMxvx.js.map +1 -0
- package/dashboard/assets/generated-C0JVNBRX.js +2 -0
- package/dashboard/assets/generated-C0JVNBRX.js.map +1 -0
- package/dashboard/assets/generated-C1W48_-3.js +2 -0
- package/dashboard/assets/generated-C1W48_-3.js.map +1 -0
- package/dashboard/assets/generated-CluiB_xY.js +2 -0
- package/dashboard/assets/generated-CluiB_xY.js.map +1 -0
- package/dashboard/assets/generated-DDGtlf-4.js +2 -0
- package/dashboard/assets/generated-DDGtlf-4.js.map +1 -0
- package/dashboard/assets/generated-DPCHvNto.js +2 -0
- package/dashboard/assets/generated-DPCHvNto.js.map +1 -0
- package/dashboard/assets/geo-track-components-Ct4-MSRw.js +3 -0
- package/dashboard/assets/geo-track-components-Ct4-MSRw.js.map +1 -0
- package/dashboard/assets/ibm-plex-sans-arabic-arabic-400-normal-CyU-ddYS.woff2 +0 -0
- package/dashboard/assets/ibm-plex-sans-arabic-arabic-500-normal-C4MQITzh.woff2 +0 -0
- package/dashboard/assets/ibm-plex-sans-arabic-arabic-600-normal-0pRdybE_.woff2 +0 -0
- package/dashboard/assets/ibm-plex-sans-arabic-arabic-700-normal-DrtBj6UE.woff2 +0 -0
- package/dashboard/assets/index-DPi4cduu.css +1 -0
- package/dashboard/assets/index-PB1II0WV.js +137 -0
- package/dashboard/assets/index-PB1II0WV.js.map +1 -0
- package/dashboard/assets/jetbrains-mono-latin-ext-wght-italic-BrDczivE.woff2 +0 -0
- package/dashboard/assets/jetbrains-mono-latin-ext-wght-normal-DBQx-q_a.woff2 +0 -0
- package/dashboard/assets/jetbrains-mono-latin-wght-italic-B2M6KQje.woff2 +0 -0
- package/dashboard/assets/jetbrains-mono-latin-wght-normal-B9CIFXIH.woff2 +0 -0
- package/dashboard/assets/leaflet-CIGW-MKW.css +1 -0
- package/dashboard/assets/leaflet-src-D12shr04.js +2 -0
- package/dashboard/assets/leaflet-src-D12shr04.js.map +1 -0
- package/dashboard/assets/manrope-latin-ext-wght-normal-Ch3YOpNY.woff2 +0 -0
- package/dashboard/assets/manrope-latin-wght-normal-DHIcAJRg.woff2 +0 -0
- package/dashboard/assets/media-track-components-CpeII-tT.js +2 -0
- package/dashboard/assets/media-track-components-CpeII-tT.js.map +1 -0
- package/dashboard/assets/scales-e0tkfEy1.js +2 -0
- package/dashboard/assets/scales-e0tkfEy1.js.map +1 -0
- package/dashboard/assets/sparkline-2JUGDrMW.js +2 -0
- package/dashboard/assets/sparkline-2JUGDrMW.js.map +1 -0
- package/dashboard/assets/stats-BNgXz5BD.js +2 -0
- package/dashboard/assets/stats-BNgXz5BD.js.map +1 -0
- package/dashboard/assets/studio-B7hMOwAF.js +2 -0
- package/dashboard/assets/studio-B7hMOwAF.js.map +1 -0
- package/dashboard/assets/studio-BN_9xHY3.js +2 -0
- package/dashboard/assets/studio-BN_9xHY3.js.map +1 -0
- package/dashboard/assets/studio-Cn2MObe8.js +2 -0
- package/dashboard/assets/studio-Cn2MObe8.js.map +1 -0
- package/dashboard/assets/studio-DZEZCCkw.js +2 -0
- package/dashboard/assets/studio-DZEZCCkw.js.map +1 -0
- package/dashboard/assets/studio-DzatTvLl.js +2 -0
- package/dashboard/assets/studio-DzatTvLl.js.map +1 -0
- package/dashboard/assets/studio-cBlD8x90.js +2 -0
- package/dashboard/assets/studio-cBlD8x90.js.map +1 -0
- package/dashboard/assets/studio-cglZPbJK.js +2 -0
- package/dashboard/assets/studio-cglZPbJK.js.map +1 -0
- package/dashboard/assets/system-track-components-GTYYpnfB.js +2 -0
- package/dashboard/assets/system-track-components-GTYYpnfB.js.map +1 -0
- package/dashboard/assets/tables-tail-components-DiA5GeHB.js +2 -0
- package/dashboard/assets/tables-tail-components-DiA5GeHB.js.map +1 -0
- package/dashboard/assets/tables-track-f-components-CVNPd7rq.js +2 -0
- package/dashboard/assets/tables-track-f-components-CVNPd7rq.js.map +1 -0
- package/dashboard/assets/time-flow-components-nKsaryry.js +2 -0
- package/dashboard/assets/time-flow-components-nKsaryry.js.map +1 -0
- package/dashboard/assets/ui-B-kZetor.js +2 -0
- package/dashboard/assets/ui-B-kZetor.js.map +1 -0
- package/dashboard/assets/ui-BEStJ5Pw.js +2 -0
- package/dashboard/assets/ui-BEStJ5Pw.js.map +1 -0
- package/dashboard/assets/ui-BS5_eDN4.js +2 -0
- package/dashboard/assets/ui-BS5_eDN4.js.map +1 -0
- package/dashboard/assets/ui-BZ0EyxRH.js +2 -0
- package/dashboard/assets/ui-BZ0EyxRH.js.map +1 -0
- package/dashboard/assets/ui-BloJDdt6.js +2 -0
- package/dashboard/assets/ui-BloJDdt6.js.map +1 -0
- package/dashboard/assets/ui-CpdrplJH.js +2 -0
- package/dashboard/assets/ui-CpdrplJH.js.map +1 -0
- package/dashboard/assets/ui-YJfT644k.js +2 -0
- package/dashboard/assets/ui-YJfT644k.js.map +1 -0
- package/dashboard/assets/widgets-uDqZWw4A.js +2 -0
- package/dashboard/assets/widgets-uDqZWw4A.js.map +1 -0
- package/dashboard/index.html +41 -0
- package/dist/app.d.ts +48 -0
- package/dist/app.d.ts.map +1 -0
- package/dist/app.js +250 -0
- package/dist/app.js.map +1 -0
- package/dist/auth/audit.d.ts +22 -0
- package/dist/auth/audit.d.ts.map +1 -0
- package/dist/auth/audit.js +17 -0
- package/dist/auth/audit.js.map +1 -0
- package/dist/auth/desktop-session.d.ts +53 -0
- package/dist/auth/desktop-session.d.ts.map +1 -0
- package/dist/auth/desktop-session.js +111 -0
- package/dist/auth/desktop-session.js.map +1 -0
- package/dist/auth/passwords.d.ts +17 -0
- package/dist/auth/passwords.d.ts.map +1 -0
- package/dist/auth/passwords.js +40 -0
- package/dist/auth/passwords.js.map +1 -0
- package/dist/auth/sessions.d.ts +77 -0
- package/dist/auth/sessions.d.ts.map +1 -0
- package/dist/auth/sessions.js +137 -0
- package/dist/auth/sessions.js.map +1 -0
- package/dist/auth/totp.d.ts +30 -0
- package/dist/auth/totp.d.ts.map +1 -0
- package/dist/auth/totp.js +97 -0
- package/dist/auth/totp.js.map +1 -0
- package/dist/backup/backup-service.d.ts +157 -0
- package/dist/backup/backup-service.d.ts.map +1 -0
- package/dist/backup/backup-service.js +354 -0
- package/dist/backup/backup-service.js.map +1 -0
- package/dist/backup/format.d.ts +300 -0
- package/dist/backup/format.d.ts.map +1 -0
- package/dist/backup/format.js +304 -0
- package/dist/backup/format.js.map +1 -0
- package/dist/backup/notify.d.ts +55 -0
- package/dist/backup/notify.d.ts.map +1 -0
- package/dist/backup/notify.js +60 -0
- package/dist/backup/notify.js.map +1 -0
- package/dist/backup/snapshot.d.ts +78 -0
- package/dist/backup/snapshot.d.ts.map +1 -0
- package/dist/backup/snapshot.js +142 -0
- package/dist/backup/snapshot.js.map +1 -0
- package/dist/capabilities/catalog.d.ts +33 -0
- package/dist/capabilities/catalog.d.ts.map +1 -0
- package/dist/capabilities/catalog.js +32 -0
- package/dist/capabilities/catalog.js.map +1 -0
- package/dist/capabilities/grants.d.ts +44 -0
- package/dist/capabilities/grants.d.ts.map +1 -0
- package/dist/capabilities/grants.js +65 -0
- package/dist/capabilities/grants.js.map +1 -0
- package/dist/cli/allowlist.d.ts +46 -0
- package/dist/cli/allowlist.d.ts.map +1 -0
- package/dist/cli/allowlist.js +99 -0
- package/dist/cli/allowlist.js.map +1 -0
- package/dist/cli/args.d.ts +63 -0
- package/dist/cli/args.d.ts.map +1 -0
- package/dist/cli/args.js +92 -0
- package/dist/cli/args.js.map +1 -0
- package/dist/cli/command.d.ts +32 -0
- package/dist/cli/command.d.ts.map +1 -0
- package/dist/cli/command.js +64 -0
- package/dist/cli/command.js.map +1 -0
- package/dist/cli/commands/apply-llm-response.d.ts +32 -0
- package/dist/cli/commands/apply-llm-response.d.ts.map +1 -0
- package/dist/cli/commands/apply-llm-response.js +209 -0
- package/dist/cli/commands/apply-llm-response.js.map +1 -0
- package/dist/cli/commands/export-zip.d.ts +17 -0
- package/dist/cli/commands/export-zip.d.ts.map +1 -0
- package/dist/cli/commands/export-zip.js +111 -0
- package/dist/cli/commands/export-zip.js.map +1 -0
- package/dist/cli/commands/generate-prompt.d.ts +29 -0
- package/dist/cli/commands/generate-prompt.d.ts.map +1 -0
- package/dist/cli/commands/generate-prompt.js +154 -0
- package/dist/cli/commands/generate-prompt.js.map +1 -0
- package/dist/cli/commands/import-zip.d.ts +13 -0
- package/dist/cli/commands/import-zip.d.ts.map +1 -0
- package/dist/cli/commands/import-zip.js +95 -0
- package/dist/cli/commands/import-zip.js.map +1 -0
- package/dist/cli/commands/init.d.ts +47 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +372 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/introspect.d.ts +11 -0
- package/dist/cli/commands/introspect.d.ts.map +1 -0
- package/dist/cli/commands/introspect.js +100 -0
- package/dist/cli/commands/introspect.js.map +1 -0
- package/dist/cli/commands/migrate.d.ts +11 -0
- package/dist/cli/commands/migrate.d.ts.map +1 -0
- package/dist/cli/commands/migrate.js +80 -0
- package/dist/cli/commands/migrate.js.map +1 -0
- package/dist/cli/commands/start.d.ts +22 -0
- package/dist/cli/commands/start.d.ts.map +1 -0
- package/dist/cli/commands/start.js +101 -0
- package/dist/cli/commands/start.js.map +1 -0
- package/dist/cli/exit.d.ts +37 -0
- package/dist/cli/exit.d.ts.map +1 -0
- package/dist/cli/exit.js +39 -0
- package/dist/cli/exit.js.map +1 -0
- package/dist/cli/index.d.ts +10 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +17 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/io.d.ts +49 -0
- package/dist/cli/io.d.ts.map +1 -0
- package/dist/cli/io.js +77 -0
- package/dist/cli/io.js.map +1 -0
- package/dist/cli/run.d.ts +35 -0
- package/dist/cli/run.d.ts.map +1 -0
- package/dist/cli/run.js +139 -0
- package/dist/cli/run.js.map +1 -0
- package/dist/cli/runtime.d.ts +116 -0
- package/dist/cli/runtime.d.ts.map +1 -0
- package/dist/cli/runtime.js +181 -0
- package/dist/cli/runtime.js.map +1 -0
- package/dist/cli/static-root.d.ts +42 -0
- package/dist/cli/static-root.d.ts.map +1 -0
- package/dist/cli/static-root.js +58 -0
- package/dist/cli/static-root.js.map +1 -0
- package/dist/compose.d.ts +135 -0
- package/dist/compose.d.ts.map +1 -0
- package/dist/compose.js +383 -0
- package/dist/compose.js.map +1 -0
- package/dist/config/bootstrap.d.ts +33 -0
- package/dist/config/bootstrap.d.ts.map +1 -0
- package/dist/config/bootstrap.js +81 -0
- package/dist/config/bootstrap.js.map +1 -0
- package/dist/config/env.d.ts +95 -0
- package/dist/config/env.d.ts.map +1 -0
- package/dist/config/env.js +236 -0
- package/dist/config/env.js.map +1 -0
- package/dist/config/secrets.d.ts +24 -0
- package/dist/config/secrets.d.ts.map +1 -0
- package/dist/config/secrets.js +74 -0
- package/dist/config/secrets.js.map +1 -0
- package/dist/connections/crypto.d.ts +9 -0
- package/dist/connections/crypto.d.ts.map +1 -0
- package/dist/connections/crypto.js +16 -0
- package/dist/connections/crypto.js.map +1 -0
- package/dist/connections/dsn.d.ts +42 -0
- package/dist/connections/dsn.d.ts.map +1 -0
- package/dist/connections/dsn.js +131 -0
- package/dist/connections/dsn.js.map +1 -0
- package/dist/connections/effective-schema.d.ts +65 -0
- package/dist/connections/effective-schema.d.ts.map +1 -0
- package/dist/connections/effective-schema.js +249 -0
- package/dist/connections/effective-schema.js.map +1 -0
- package/dist/connections/introspect.d.ts +52 -0
- package/dist/connections/introspect.d.ts.map +1 -0
- package/dist/connections/introspect.js +111 -0
- package/dist/connections/introspect.js.map +1 -0
- package/dist/connections/manager.d.ts +97 -0
- package/dist/connections/manager.d.ts.map +1 -0
- package/dist/connections/manager.js +224 -0
- package/dist/connections/manager.js.map +1 -0
- package/dist/connections/register-adapters.d.ts +42 -0
- package/dist/connections/register-adapters.d.ts.map +1 -0
- package/dist/connections/register-adapters.js +92 -0
- package/dist/connections/register-adapters.js.map +1 -0
- package/dist/crud/filters.d.ts +57 -0
- package/dist/crud/filters.d.ts.map +1 -0
- package/dist/crud/filters.js +177 -0
- package/dist/crud/filters.js.map +1 -0
- package/dist/crud/identifiers.d.ts +58 -0
- package/dist/crud/identifiers.d.ts.map +1 -0
- package/dist/crud/identifiers.js +99 -0
- package/dist/crud/identifiers.js.map +1 -0
- package/dist/crud/list.d.ts +51 -0
- package/dist/crud/list.d.ts.map +1 -0
- package/dist/crud/list.js +126 -0
- package/dist/crud/list.js.map +1 -0
- package/dist/crud/mask.d.ts +23 -0
- package/dist/crud/mask.d.ts.map +1 -0
- package/dist/crud/mask.js +41 -0
- package/dist/crud/mask.js.map +1 -0
- package/dist/crud/records.d.ts +33 -0
- package/dist/crud/records.d.ts.map +1 -0
- package/dist/crud/records.js +126 -0
- package/dist/crud/records.js.map +1 -0
- package/dist/crud/undo.d.ts +55 -0
- package/dist/crud/undo.d.ts.map +1 -0
- package/dist/crud/undo.js +74 -0
- package/dist/crud/undo.js.map +1 -0
- package/dist/data-io/coerce.d.ts +28 -0
- package/dist/data-io/coerce.d.ts.map +1 -0
- package/dist/data-io/coerce.js +123 -0
- package/dist/data-io/coerce.js.map +1 -0
- package/dist/data-io/csv.d.ts +38 -0
- package/dist/data-io/csv.d.ts.map +1 -0
- package/dist/data-io/csv.js +138 -0
- package/dist/data-io/csv.js.map +1 -0
- package/dist/data-io/snapshot-view.d.ts +10 -0
- package/dist/data-io/snapshot-view.d.ts.map +1 -0
- package/dist/data-io/snapshot-view.js +19 -0
- package/dist/data-io/snapshot-view.js.map +1 -0
- package/dist/desktop/demo-seed.d.ts +23 -0
- package/dist/desktop/demo-seed.d.ts.map +1 -0
- package/dist/desktop/demo-seed.js +28 -0
- package/dist/desktop/demo-seed.js.map +1 -0
- package/dist/desktop/lan-share.d.ts +94 -0
- package/dist/desktop/lan-share.d.ts.map +1 -0
- package/dist/desktop/lan-share.js +150 -0
- package/dist/desktop/lan-share.js.map +1 -0
- package/dist/errors.d.ts +72 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +82 -0
- package/dist/errors.js.map +1 -0
- package/dist/export/bundle.d.ts +235 -0
- package/dist/export/bundle.d.ts.map +1 -0
- package/dist/export/bundle.js +172 -0
- package/dist/export/bundle.js.map +1 -0
- package/dist/export/import-service.d.ts +99 -0
- package/dist/export/import-service.d.ts.map +1 -0
- package/dist/export/import-service.js +515 -0
- package/dist/export/import-service.js.map +1 -0
- package/dist/export/readme.d.ts +25 -0
- package/dist/export/readme.d.ts.map +1 -0
- package/dist/export/readme.js +154 -0
- package/dist/export/readme.js.map +1 -0
- package/dist/export/redaction.d.ts +118 -0
- package/dist/export/redaction.d.ts.map +1 -0
- package/dist/export/redaction.js +233 -0
- package/dist/export/redaction.js.map +1 -0
- package/dist/export/zip-service.d.ts +66 -0
- package/dist/export/zip-service.d.ts.map +1 -0
- package/dist/export/zip-service.js +306 -0
- package/dist/export/zip-service.js.map +1 -0
- package/dist/files/storage.d.ts +50 -0
- package/dist/files/storage.d.ts.map +1 -0
- package/dist/files/storage.js +100 -0
- package/dist/files/storage.js.map +1 -0
- package/dist/generate/materialize-llm.d.ts +45 -0
- package/dist/generate/materialize-llm.d.ts.map +1 -0
- package/dist/generate/materialize-llm.js +167 -0
- package/dist/generate/materialize-llm.js.map +1 -0
- package/dist/generate/run.d.ts +48 -0
- package/dist/generate/run.d.ts.map +1 -0
- package/dist/generate/run.js +123 -0
- package/dist/generate/run.js.map +1 -0
- package/dist/index.d.ts +89 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +116 -0
- package/dist/index.js.map +1 -0
- package/dist/jobs/export-run.d.ts +38 -0
- package/dist/jobs/export-run.d.ts.map +1 -0
- package/dist/jobs/export-run.js +172 -0
- package/dist/jobs/export-run.js.map +1 -0
- package/dist/jobs/import-run.d.ts +43 -0
- package/dist/jobs/import-run.d.ts.map +1 -0
- package/dist/jobs/import-run.js +290 -0
- package/dist/jobs/import-run.js.map +1 -0
- package/dist/jobs/llm-run.d.ts +73 -0
- package/dist/jobs/llm-run.d.ts.map +1 -0
- package/dist/jobs/llm-run.js +225 -0
- package/dist/jobs/llm-run.js.map +1 -0
- package/dist/jobs/register.d.ts +90 -0
- package/dist/jobs/register.d.ts.map +1 -0
- package/dist/jobs/register.js +121 -0
- package/dist/jobs/register.js.map +1 -0
- package/dist/jobs/registry.d.ts +74 -0
- package/dist/jobs/registry.d.ts.map +1 -0
- package/dist/jobs/registry.js +78 -0
- package/dist/jobs/registry.js.map +1 -0
- package/dist/jobs/report-run.d.ts +64 -0
- package/dist/jobs/report-run.d.ts.map +1 -0
- package/dist/jobs/report-run.js +221 -0
- package/dist/jobs/report-run.js.map +1 -0
- package/dist/jobs/scheduler.d.ts +72 -0
- package/dist/jobs/scheduler.d.ts.map +1 -0
- package/dist/jobs/scheduler.js +121 -0
- package/dist/jobs/scheduler.js.map +1 -0
- package/dist/jobs/worker.d.ts +110 -0
- package/dist/jobs/worker.d.ts.map +1 -0
- package/dist/jobs/worker.js +282 -0
- package/dist/jobs/worker.js.map +1 -0
- package/dist/llm/apply-service.d.ts +150 -0
- package/dist/llm/apply-service.d.ts.map +1 -0
- package/dist/llm/apply-service.js +463 -0
- package/dist/llm/apply-service.js.map +1 -0
- package/dist/llm/apply-undo-store.d.ts +50 -0
- package/dist/llm/apply-undo-store.d.ts.map +1 -0
- package/dist/llm/apply-undo-store.js +60 -0
- package/dist/llm/apply-undo-store.js.map +1 -0
- package/dist/llm/direct-runner.d.ts +146 -0
- package/dist/llm/direct-runner.d.ts.map +1 -0
- package/dist/llm/direct-runner.js +204 -0
- package/dist/llm/direct-runner.js.map +1 -0
- package/dist/llm/prompt-service.d.ts +90 -0
- package/dist/llm/prompt-service.d.ts.map +1 -0
- package/dist/llm/prompt-service.js +93 -0
- package/dist/llm/prompt-service.js.map +1 -0
- package/dist/llm/provider-resolver.d.ts +25 -0
- package/dist/llm/provider-resolver.d.ts.map +1 -0
- package/dist/llm/provider-resolver.js +81 -0
- package/dist/llm/provider-resolver.js.map +1 -0
- package/dist/llm/run-service.d.ts +215 -0
- package/dist/llm/run-service.d.ts.map +1 -0
- package/dist/llm/run-service.js +343 -0
- package/dist/llm/run-service.js.map +1 -0
- package/dist/llm/stats-collector.d.ts +40 -0
- package/dist/llm/stats-collector.d.ts.map +1 -0
- package/dist/llm/stats-collector.js +74 -0
- package/dist/llm/stats-collector.js.map +1 -0
- package/dist/log-scrub.d.ts +58 -0
- package/dist/log-scrub.d.ts.map +1 -0
- package/dist/log-scrub.js +103 -0
- package/dist/log-scrub.js.map +1 -0
- package/dist/meta/store.d.ts +96 -0
- package/dist/meta/store.d.ts.map +1 -0
- package/dist/meta/store.js +192 -0
- package/dist/meta/store.js.map +1 -0
- package/dist/notifications/notify.d.ts +43 -0
- package/dist/notifications/notify.d.ts.map +1 -0
- package/dist/notifications/notify.js +42 -0
- package/dist/notifications/notify.js.map +1 -0
- package/dist/plugins/auth.d.ts +42 -0
- package/dist/plugins/auth.d.ts.map +1 -0
- package/dist/plugins/auth.js +84 -0
- package/dist/plugins/auth.js.map +1 -0
- package/dist/plugins/core.d.ts +48 -0
- package/dist/plugins/core.d.ts.map +1 -0
- package/dist/plugins/core.js +248 -0
- package/dist/plugins/core.js.map +1 -0
- package/dist/plugins/rbac.d.ts +54 -0
- package/dist/plugins/rbac.d.ts.map +1 -0
- package/dist/plugins/rbac.js +103 -0
- package/dist/plugins/rbac.js.map +1 -0
- package/dist/plugins/static.d.ts +12 -0
- package/dist/plugins/static.d.ts.map +1 -0
- package/dist/plugins/static.js +36 -0
- package/dist/plugins/static.js.map +1 -0
- package/dist/rbac/api-keys.d.ts +30 -0
- package/dist/rbac/api-keys.d.ts.map +1 -0
- package/dist/rbac/api-keys.js +41 -0
- package/dist/rbac/api-keys.js.map +1 -0
- package/dist/rbac/index.d.ts +6 -0
- package/dist/rbac/index.d.ts.map +1 -0
- package/dist/rbac/index.js +6 -0
- package/dist/rbac/index.js.map +1 -0
- package/dist/rbac/permissions.d.ts +107 -0
- package/dist/rbac/permissions.d.ts.map +1 -0
- package/dist/rbac/permissions.js +250 -0
- package/dist/rbac/permissions.js.map +1 -0
- package/dist/rbac/principal.d.ts +33 -0
- package/dist/rbac/principal.d.ts.map +1 -0
- package/dist/rbac/principal.js +31 -0
- package/dist/rbac/principal.js.map +1 -0
- package/dist/rbac/resolver.d.ts +26 -0
- package/dist/rbac/resolver.d.ts.map +1 -0
- package/dist/rbac/resolver.js +46 -0
- package/dist/rbac/resolver.js.map +1 -0
- package/dist/realtime/hub.d.ts +90 -0
- package/dist/realtime/hub.d.ts.map +1 -0
- package/dist/realtime/hub.js +146 -0
- package/dist/realtime/hub.js.map +1 -0
- package/dist/realtime/sse.d.ts +35 -0
- package/dist/realtime/sse.d.ts.map +1 -0
- package/dist/realtime/sse.js +88 -0
- package/dist/realtime/sse.js.map +1 -0
- package/dist/realtime/ws.d.ts +38 -0
- package/dist/realtime/ws.d.ts.map +1 -0
- package/dist/realtime/ws.js +124 -0
- package/dist/realtime/ws.js.map +1 -0
- package/dist/reports/schedule.d.ts +14 -0
- package/dist/reports/schedule.d.ts.map +1 -0
- package/dist/reports/schedule.js +63 -0
- package/dist/reports/schedule.js.map +1 -0
- package/dist/routes/about/index.d.ts +39 -0
- package/dist/routes/about/index.d.ts.map +1 -0
- package/dist/routes/about/index.js +73 -0
- package/dist/routes/about/index.js.map +1 -0
- package/dist/routes/about/schema.d.ts +50 -0
- package/dist/routes/about/schema.d.ts.map +1 -0
- package/dist/routes/about/schema.js +53 -0
- package/dist/routes/about/schema.js.map +1 -0
- package/dist/routes/api-keys/index.d.ts +11 -0
- package/dist/routes/api-keys/index.d.ts.map +1 -0
- package/dist/routes/api-keys/index.js +79 -0
- package/dist/routes/api-keys/index.js.map +1 -0
- package/dist/routes/api-keys/schema.d.ts +62 -0
- package/dist/routes/api-keys/schema.d.ts.map +1 -0
- package/dist/routes/api-keys/schema.js +37 -0
- package/dist/routes/api-keys/schema.js.map +1 -0
- package/dist/routes/audit/index.d.ts +11 -0
- package/dist/routes/audit/index.d.ts.map +1 -0
- package/dist/routes/audit/index.js +107 -0
- package/dist/routes/audit/index.js.map +1 -0
- package/dist/routes/audit/schema.d.ts +129 -0
- package/dist/routes/audit/schema.d.ts.map +1 -0
- package/dist/routes/audit/schema.js +43 -0
- package/dist/routes/audit/schema.js.map +1 -0
- package/dist/routes/auth/desktop-session.d.ts +48 -0
- package/dist/routes/auth/desktop-session.d.ts.map +1 -0
- package/dist/routes/auth/desktop-session.js +132 -0
- package/dist/routes/auth/desktop-session.js.map +1 -0
- package/dist/routes/auth/handlers.d.ts +21 -0
- package/dist/routes/auth/handlers.d.ts.map +1 -0
- package/dist/routes/auth/handlers.js +256 -0
- package/dist/routes/auth/handlers.js.map +1 -0
- package/dist/routes/auth/index.d.ts +27 -0
- package/dist/routes/auth/index.d.ts.map +1 -0
- package/dist/routes/auth/index.js +67 -0
- package/dist/routes/auth/index.js.map +1 -0
- package/dist/routes/auth/schema.d.ts +129 -0
- package/dist/routes/auth/schema.d.ts.map +1 -0
- package/dist/routes/auth/schema.js +84 -0
- package/dist/routes/auth/schema.js.map +1 -0
- package/dist/routes/bootstrap/handlers.d.ts +34 -0
- package/dist/routes/bootstrap/handlers.d.ts.map +1 -0
- package/dist/routes/bootstrap/handlers.js +96 -0
- package/dist/routes/bootstrap/handlers.js.map +1 -0
- package/dist/routes/bootstrap/index.d.ts +9 -0
- package/dist/routes/bootstrap/index.d.ts.map +1 -0
- package/dist/routes/bootstrap/index.js +16 -0
- package/dist/routes/bootstrap/index.js.map +1 -0
- package/dist/routes/bootstrap/schema.d.ts +177 -0
- package/dist/routes/bootstrap/schema.d.ts.map +1 -0
- package/dist/routes/bootstrap/schema.js +55 -0
- package/dist/routes/bootstrap/schema.js.map +1 -0
- package/dist/routes/connections/index.d.ts +21 -0
- package/dist/routes/connections/index.d.ts.map +1 -0
- package/dist/routes/connections/index.js +260 -0
- package/dist/routes/connections/index.js.map +1 -0
- package/dist/routes/connections/schema.d.ts +161 -0
- package/dist/routes/connections/schema.d.ts.map +1 -0
- package/dist/routes/connections/schema.js +91 -0
- package/dist/routes/connections/schema.js.map +1 -0
- package/dist/routes/data/index.d.ts +46 -0
- package/dist/routes/data/index.d.ts.map +1 -0
- package/dist/routes/data/index.js +508 -0
- package/dist/routes/data/index.js.map +1 -0
- package/dist/routes/data/schema.d.ts +128 -0
- package/dist/routes/data/schema.d.ts.map +1 -0
- package/dist/routes/data/schema.js +83 -0
- package/dist/routes/data/schema.js.map +1 -0
- package/dist/routes/desktop/index.d.ts +61 -0
- package/dist/routes/desktop/index.d.ts.map +1 -0
- package/dist/routes/desktop/index.js +91 -0
- package/dist/routes/desktop/index.js.map +1 -0
- package/dist/routes/desktop/schema.d.ts +71 -0
- package/dist/routes/desktop/schema.d.ts.map +1 -0
- package/dist/routes/desktop/schema.js +58 -0
- package/dist/routes/desktop/schema.js.map +1 -0
- package/dist/routes/desktop-capabilities/index.d.ts +9 -0
- package/dist/routes/desktop-capabilities/index.d.ts.map +1 -0
- package/dist/routes/desktop-capabilities/index.js +62 -0
- package/dist/routes/desktop-capabilities/index.js.map +1 -0
- package/dist/routes/desktop-capabilities/schema.d.ts +46 -0
- package/dist/routes/desktop-capabilities/schema.d.ts.map +1 -0
- package/dist/routes/desktop-capabilities/schema.js +30 -0
- package/dist/routes/desktop-capabilities/schema.js.map +1 -0
- package/dist/routes/desktop-demo/handlers.d.ts +94 -0
- package/dist/routes/desktop-demo/handlers.d.ts.map +1 -0
- package/dist/routes/desktop-demo/handlers.js +182 -0
- package/dist/routes/desktop-demo/handlers.js.map +1 -0
- package/dist/routes/desktop-demo/index.d.ts +39 -0
- package/dist/routes/desktop-demo/index.d.ts.map +1 -0
- package/dist/routes/desktop-demo/index.js +73 -0
- package/dist/routes/desktop-demo/index.js.map +1 -0
- package/dist/routes/desktop-demo/schema.d.ts +17 -0
- package/dist/routes/desktop-demo/schema.d.ts.map +1 -0
- package/dist/routes/desktop-demo/schema.js +30 -0
- package/dist/routes/desktop-demo/schema.js.map +1 -0
- package/dist/routes/desktop-lan/index.d.ts +54 -0
- package/dist/routes/desktop-lan/index.d.ts.map +1 -0
- package/dist/routes/desktop-lan/index.js +33 -0
- package/dist/routes/desktop-lan/index.js.map +1 -0
- package/dist/routes/desktop-lan/schema.d.ts +24 -0
- package/dist/routes/desktop-lan/schema.d.ts.map +1 -0
- package/dist/routes/desktop-lan/schema.js +40 -0
- package/dist/routes/desktop-lan/schema.js.map +1 -0
- package/dist/routes/desktop-local-db/handlers.d.ts +92 -0
- package/dist/routes/desktop-local-db/handlers.d.ts.map +1 -0
- package/dist/routes/desktop-local-db/handlers.js +300 -0
- package/dist/routes/desktop-local-db/handlers.js.map +1 -0
- package/dist/routes/desktop-local-db/index.d.ts +39 -0
- package/dist/routes/desktop-local-db/index.d.ts.map +1 -0
- package/dist/routes/desktop-local-db/index.js +83 -0
- package/dist/routes/desktop-local-db/index.js.map +1 -0
- package/dist/routes/desktop-local-db/placeholder.d.ts +75 -0
- package/dist/routes/desktop-local-db/placeholder.d.ts.map +1 -0
- package/dist/routes/desktop-local-db/placeholder.js +420 -0
- package/dist/routes/desktop-local-db/placeholder.js.map +1 -0
- package/dist/routes/desktop-local-db/schema.d.ts +50 -0
- package/dist/routes/desktop-local-db/schema.d.ts.map +1 -0
- package/dist/routes/desktop-local-db/schema.js +71 -0
- package/dist/routes/desktop-local-db/schema.js.map +1 -0
- package/dist/routes/desktop-local-db/sqlite-ddl.d.ts +104 -0
- package/dist/routes/desktop-local-db/sqlite-ddl.d.ts.map +1 -0
- package/dist/routes/desktop-local-db/sqlite-ddl.js +419 -0
- package/dist/routes/desktop-local-db/sqlite-ddl.js.map +1 -0
- package/dist/routes/email-templates/index.d.ts +7 -0
- package/dist/routes/email-templates/index.d.ts.map +1 -0
- package/dist/routes/email-templates/index.js +70 -0
- package/dist/routes/email-templates/index.js.map +1 -0
- package/dist/routes/email-templates/schema.d.ts +54 -0
- package/dist/routes/email-templates/schema.d.ts.map +1 -0
- package/dist/routes/email-templates/schema.js +35 -0
- package/dist/routes/email-templates/schema.js.map +1 -0
- package/dist/routes/exports/index.d.ts +19 -0
- package/dist/routes/exports/index.d.ts.map +1 -0
- package/dist/routes/exports/index.js +145 -0
- package/dist/routes/exports/index.js.map +1 -0
- package/dist/routes/exports/schema.d.ts +183 -0
- package/dist/routes/exports/schema.d.ts.map +1 -0
- package/dist/routes/exports/schema.js +37 -0
- package/dist/routes/exports/schema.js.map +1 -0
- package/dist/routes/generate/index.d.ts +23 -0
- package/dist/routes/generate/index.d.ts.map +1 -0
- package/dist/routes/generate/index.js +80 -0
- package/dist/routes/generate/index.js.map +1 -0
- package/dist/routes/generate/schema.d.ts +43 -0
- package/dist/routes/generate/schema.d.ts.map +1 -0
- package/dist/routes/generate/schema.js +37 -0
- package/dist/routes/generate/schema.js.map +1 -0
- package/dist/routes/imports/index.d.ts +21 -0
- package/dist/routes/imports/index.d.ts.map +1 -0
- package/dist/routes/imports/index.js +288 -0
- package/dist/routes/imports/index.js.map +1 -0
- package/dist/routes/imports/schema.d.ts +292 -0
- package/dist/routes/imports/schema.d.ts.map +1 -0
- package/dist/routes/imports/schema.js +78 -0
- package/dist/routes/imports/schema.js.map +1 -0
- package/dist/routes/index.d.ts +11 -0
- package/dist/routes/index.d.ts.map +1 -0
- package/dist/routes/index.js +8 -0
- package/dist/routes/index.js.map +1 -0
- package/dist/routes/jobs/index.d.ts +29 -0
- package/dist/routes/jobs/index.d.ts.map +1 -0
- package/dist/routes/jobs/index.js +175 -0
- package/dist/routes/jobs/index.js.map +1 -0
- package/dist/routes/jobs/schema.d.ts +170 -0
- package/dist/routes/jobs/schema.d.ts.map +1 -0
- package/dist/routes/jobs/schema.js +57 -0
- package/dist/routes/jobs/schema.js.map +1 -0
- package/dist/routes/llm/config-service.d.ts +48 -0
- package/dist/routes/llm/config-service.d.ts.map +1 -0
- package/dist/routes/llm/config-service.js +102 -0
- package/dist/routes/llm/config-service.js.map +1 -0
- package/dist/routes/llm/index.d.ts +69 -0
- package/dist/routes/llm/index.d.ts.map +1 -0
- package/dist/routes/llm/index.js +412 -0
- package/dist/routes/llm/index.js.map +1 -0
- package/dist/routes/llm/schema.d.ts +605 -0
- package/dist/routes/llm/schema.d.ts.map +1 -0
- package/dist/routes/llm/schema.js +238 -0
- package/dist/routes/llm/schema.js.map +1 -0
- package/dist/routes/me/handlers.d.ts +14 -0
- package/dist/routes/me/handlers.d.ts.map +1 -0
- package/dist/routes/me/handlers.js +88 -0
- package/dist/routes/me/handlers.js.map +1 -0
- package/dist/routes/me/index.d.ts +8 -0
- package/dist/routes/me/index.d.ts.map +1 -0
- package/dist/routes/me/index.js +17 -0
- package/dist/routes/me/index.js.map +1 -0
- package/dist/routes/me/schema.d.ts +270 -0
- package/dist/routes/me/schema.d.ts.map +1 -0
- package/dist/routes/me/schema.js +59 -0
- package/dist/routes/me/schema.js.map +1 -0
- package/dist/routes/me-views/index.d.ts +23 -0
- package/dist/routes/me-views/index.d.ts.map +1 -0
- package/dist/routes/me-views/index.js +76 -0
- package/dist/routes/me-views/index.js.map +1 -0
- package/dist/routes/me-views/schema.d.ts +44 -0
- package/dist/routes/me-views/schema.d.ts.map +1 -0
- package/dist/routes/me-views/schema.js +13 -0
- package/dist/routes/me-views/schema.js.map +1 -0
- package/dist/routes/notifications/index.d.ts +19 -0
- package/dist/routes/notifications/index.d.ts.map +1 -0
- package/dist/routes/notifications/index.js +123 -0
- package/dist/routes/notifications/index.js.map +1 -0
- package/dist/routes/notifications/schema.d.ts +122 -0
- package/dist/routes/notifications/schema.d.ts.map +1 -0
- package/dist/routes/notifications/schema.js +83 -0
- package/dist/routes/notifications/schema.js.map +1 -0
- package/dist/routes/onboarding/derive.d.ts +41 -0
- package/dist/routes/onboarding/derive.d.ts.map +1 -0
- package/dist/routes/onboarding/derive.js +30 -0
- package/dist/routes/onboarding/derive.js.map +1 -0
- package/dist/routes/onboarding/index.d.ts +26 -0
- package/dist/routes/onboarding/index.d.ts.map +1 -0
- package/dist/routes/onboarding/index.js +95 -0
- package/dist/routes/onboarding/index.js.map +1 -0
- package/dist/routes/onboarding/schema.d.ts +22 -0
- package/dist/routes/onboarding/schema.d.ts.map +1 -0
- package/dist/routes/onboarding/schema.js +22 -0
- package/dist/routes/onboarding/schema.js.map +1 -0
- package/dist/routes/pages/index.d.ts +26 -0
- package/dist/routes/pages/index.d.ts.map +1 -0
- package/dist/routes/pages/index.js +119 -0
- package/dist/routes/pages/index.js.map +1 -0
- package/dist/routes/pages/layout-schema.d.ts +19 -0
- package/dist/routes/pages/layout-schema.d.ts.map +1 -0
- package/dist/routes/pages/layout-schema.js +19 -0
- package/dist/routes/pages/layout-schema.js.map +1 -0
- package/dist/routes/pages/schema.d.ts +52 -0
- package/dist/routes/pages/schema.d.ts.map +1 -0
- package/dist/routes/pages/schema.js +35 -0
- package/dist/routes/pages/schema.js.map +1 -0
- package/dist/routes/roles/index.d.ts +17 -0
- package/dist/routes/roles/index.d.ts.map +1 -0
- package/dist/routes/roles/index.js +255 -0
- package/dist/routes/roles/index.js.map +1 -0
- package/dist/routes/roles/schema.d.ts +94 -0
- package/dist/routes/roles/schema.d.ts.map +1 -0
- package/dist/routes/roles/schema.js +57 -0
- package/dist/routes/roles/schema.js.map +1 -0
- package/dist/routes/scheduled-reports/index.d.ts +15 -0
- package/dist/routes/scheduled-reports/index.d.ts.map +1 -0
- package/dist/routes/scheduled-reports/index.js +195 -0
- package/dist/routes/scheduled-reports/index.js.map +1 -0
- package/dist/routes/scheduled-reports/schema.d.ts +154 -0
- package/dist/routes/scheduled-reports/schema.d.ts.map +1 -0
- package/dist/routes/scheduled-reports/schema.js +49 -0
- package/dist/routes/scheduled-reports/schema.js.map +1 -0
- package/dist/routes/schema/index.d.ts +24 -0
- package/dist/routes/schema/index.d.ts.map +1 -0
- package/dist/routes/schema/index.js +224 -0
- package/dist/routes/schema/index.js.map +1 -0
- package/dist/routes/schema/schema.d.ts +92 -0
- package/dist/routes/schema/schema.d.ts.map +1 -0
- package/dist/routes/schema/schema.js +64 -0
- package/dist/routes/schema/schema.js.map +1 -0
- package/dist/routes/schema-import/fallback-parser.d.ts +35 -0
- package/dist/routes/schema-import/fallback-parser.d.ts.map +1 -0
- package/dist/routes/schema-import/fallback-parser.js +349 -0
- package/dist/routes/schema-import/fallback-parser.js.map +1 -0
- package/dist/routes/schema-import/index.d.ts +43 -0
- package/dist/routes/schema-import/index.d.ts.map +1 -0
- package/dist/routes/schema-import/index.js +167 -0
- package/dist/routes/schema-import/index.js.map +1 -0
- package/dist/routes/schema-import/schema.d.ts +65 -0
- package/dist/routes/schema-import/schema.d.ts.map +1 -0
- package/dist/routes/schema-import/schema.js +40 -0
- package/dist/routes/schema-import/schema.js.map +1 -0
- package/dist/routes/search/index.d.ts +71 -0
- package/dist/routes/search/index.d.ts.map +1 -0
- package/dist/routes/search/index.js +361 -0
- package/dist/routes/search/index.js.map +1 -0
- package/dist/routes/search/schema.d.ts +125 -0
- package/dist/routes/search/schema.d.ts.map +1 -0
- package/dist/routes/search/schema.js +70 -0
- package/dist/routes/search/schema.js.map +1 -0
- package/dist/routes/settings/index.d.ts +24 -0
- package/dist/routes/settings/index.d.ts.map +1 -0
- package/dist/routes/settings/index.js +164 -0
- package/dist/routes/settings/index.js.map +1 -0
- package/dist/routes/settings/schema.d.ts +110 -0
- package/dist/routes/settings/schema.d.ts.map +1 -0
- package/dist/routes/settings/schema.js +71 -0
- package/dist/routes/settings/schema.js.map +1 -0
- package/dist/routes/setup/index.d.ts +29 -0
- package/dist/routes/setup/index.d.ts.map +1 -0
- package/dist/routes/setup/index.js +68 -0
- package/dist/routes/setup/index.js.map +1 -0
- package/dist/routes/setup/schema.d.ts +61 -0
- package/dist/routes/setup/schema.d.ts.map +1 -0
- package/dist/routes/setup/schema.js +47 -0
- package/dist/routes/setup/schema.js.map +1 -0
- package/dist/routes/system/handlers.d.ts +63 -0
- package/dist/routes/system/handlers.d.ts.map +1 -0
- package/dist/routes/system/handlers.js +121 -0
- package/dist/routes/system/handlers.js.map +1 -0
- package/dist/routes/system/index.d.ts +34 -0
- package/dist/routes/system/index.d.ts.map +1 -0
- package/dist/routes/system/index.js +18 -0
- package/dist/routes/system/index.js.map +1 -0
- package/dist/routes/system/schema.d.ts +93 -0
- package/dist/routes/system/schema.d.ts.map +1 -0
- package/dist/routes/system/schema.js +109 -0
- package/dist/routes/system/schema.js.map +1 -0
- package/dist/routes/views/index.d.ts +21 -0
- package/dist/routes/views/index.d.ts.map +1 -0
- package/dist/routes/views/index.js +155 -0
- package/dist/routes/views/index.js.map +1 -0
- package/dist/routes/views/schema.d.ts +127 -0
- package/dist/routes/views/schema.d.ts.map +1 -0
- package/dist/routes/views/schema.js +56 -0
- package/dist/routes/views/schema.js.map +1 -0
- package/dist/routes/widget-data/index.d.ts +29 -0
- package/dist/routes/widget-data/index.d.ts.map +1 -0
- package/dist/routes/widget-data/index.js +152 -0
- package/dist/routes/widget-data/index.js.map +1 -0
- package/dist/routes/widget-data/schema.d.ts +252 -0
- package/dist/routes/widget-data/schema.d.ts.map +1 -0
- package/dist/routes/widget-data/schema.js +44 -0
- package/dist/routes/widget-data/schema.js.map +1 -0
- package/dist/setup/service.d.ts +63 -0
- package/dist/setup/service.d.ts.map +1 -0
- package/dist/setup/service.js +103 -0
- package/dist/setup/service.js.map +1 -0
- package/dist/start.d.ts +12 -0
- package/dist/start.d.ts.map +1 -0
- package/dist/start.js +28 -0
- package/dist/start.js.map +1 -0
- package/dist/telemetry/payload.d.ts +66 -0
- package/dist/telemetry/payload.d.ts.map +1 -0
- package/dist/telemetry/payload.js +69 -0
- package/dist/telemetry/payload.js.map +1 -0
- package/dist/telemetry/service.d.ts +67 -0
- package/dist/telemetry/service.d.ts.map +1 -0
- package/dist/telemetry/service.js +103 -0
- package/dist/telemetry/service.js.map +1 -0
- package/dist/telemetry/update-check.d.ts +79 -0
- package/dist/telemetry/update-check.d.ts.map +1 -0
- package/dist/telemetry/update-check.js +103 -0
- package/dist/telemetry/update-check.js.map +1 -0
- package/dist/version.d.ts +14 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +21 -0
- package/dist/version.js.map +1 -0
- package/dist/widget-data/cache.d.ts +35 -0
- package/dist/widget-data/cache.d.ts.map +1 -0
- package/dist/widget-data/cache.js +67 -0
- package/dist/widget-data/cache.js.map +1 -0
- package/dist/widget-data/compiler.d.ts +107 -0
- package/dist/widget-data/compiler.d.ts.map +1 -0
- package/dist/widget-data/compiler.js +362 -0
- package/dist/widget-data/compiler.js.map +1 -0
- package/dist/widget-data/shapers.d.ts +75 -0
- package/dist/widget-data/shapers.d.ts.map +1 -0
- package/dist/widget-data/shapers.js +128 -0
- package/dist/widget-data/shapers.js.map +1 -0
- package/dist/widget-data/stream-publisher.d.ts +42 -0
- package/dist/widget-data/stream-publisher.d.ts.map +1 -0
- package/dist/widget-data/stream-publisher.js +34 -0
- package/dist/widget-data/stream-publisher.js.map +1 -0
- package/package.json +79 -0
- package/vocabulary/llm-allowlist.json +76 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"communication-track-components-CNLZXOH_.js","sources":["../../../../packages/widgets/dist/families/communication/AiChatPanel.js","../../../../packages/widgets/dist/families/communication/CallWidget.js"],"sourcesContent":["import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { Button, EmptyState, IconTile, Input, Spinner } from '@adminium/ui';\nimport { KeyRound, Send, Sparkles } from 'lucide-react';\nimport { useState } from 'react';\nimport { chatRowsOf, fmtClock, formatAbsoluteTime, localeOf, sortBySentAt, sourceOf, stringField, CHAT_DEMO_EPOCH, } from './chat-lib.js';\n// Config schema + deterministic demo payload live in the pure\n// `communication-config` module so the registry metadata graph never eagerly\n// pulls this component's @adminium/ui deps (acceptance #3); re-exported here so\n// the family barrel, stories, and tests keep one import point per widget.\nexport { aiChatPanelConfigSchema, aiChatPanelDemoData } from './communication-config.js';\nexport function AiChatPanel({ turns, suggestions = [], providerConfigured = true, providerLabel, assistantName, composerPlaceholder, sendLabel, pending = false, pendingLabel, configureTitle, configureBody, configureCtaLabel, emptyTitle, emptyBody, onSend, onConfigure, locale: localeProp, dir, testId, }) {\n // `format.locale` is a free-string in the shared config, so '' / 'x-1' are\n // schema-valid and would throw out of every Intl call. Normalize at the edge.\n const locale = localeOf(localeProp);\n const [draft, setDraft] = useState('');\n const ordered = sortBySentAt(turns.map((turn) => ({ ...turn, own: turn.role === 'user', sentAt: turn.sentAt ?? '' })));\n const send = (prompt) => {\n const body = prompt.trim();\n if (body === '')\n return;\n onSend?.(body);\n setDraft('');\n };\n const submit = (event) => {\n event.preventDefault();\n send(draft);\n };\n return (_jsxs(\"div\", { \"data-widget\": \"ai-chat-panel\", \"data-testid\": testId, \"data-provider-configured\": providerConfigured ? '' : undefined, ...(dir === undefined ? {} : { dir }), className: \"flex h-full flex-col\", children: [_jsxs(\"div\", { className: \"flex items-center gap-2.5 border-b border-border/60 px-4 py-3\", children: [_jsx(IconTile, { size: \"sm\", tone: \"accent\", icon: _jsx(Sparkles, {}) }), _jsxs(\"div\", { className: \"min-w-0 flex-1\", children: [_jsx(\"div\", { className: \"truncate text-body-sm font-bold text-fg\", children: assistantName ?? 'Assistant' }), providerLabel !== undefined && (_jsx(\"div\", { className: \"truncate font-mono text-caption text-fg-subtle\", children: providerLabel }))] })] }), !providerConfigured ? (\n // No provider → the panel is inert by design: no composer, no callbacks\n // that could imply a request is possible (06 §4 — the server owns keys).\n _jsx(\"div\", { \"data-part\": \"configure-provider\", className: \"flex-1\", children: _jsx(EmptyState, { compact: true, icon: _jsx(KeyRound, {}), tone: \"warn\", title: configureTitle ?? 'No AI provider configured', body: configureBody ??\n 'Add an Anthropic or OpenAI key — or point Adminium at your own endpoint — to ask questions about your schema.', actions: onConfigure === undefined ? undefined : (_jsx(Button, { variant: \"primary\", size: \"sm\", onClick: onConfigure, children: configureCtaLabel ?? 'Configure a provider' })) }) })) : (_jsxs(_Fragment, { children: [ordered.length === 0 ? (_jsx(\"div\", { className: \"flex-1\", children: _jsx(EmptyState, { compact: true, icon: _jsx(Sparkles, {}), tone: \"accent\", title: emptyTitle ?? 'Ask about your data', body: emptyBody ?? 'Ask a question about your schema, tables, or metrics to get started.' }) })) : (_jsxs(\"div\", { \"data-part\": \"ai-transcript\", className: \"flex flex-1 flex-col gap-2 overflow-auto p-4\", children: [ordered.map((turn) => (_jsx(AiBubble, { turn: turn, locale: locale }, turn.id))), pending && (_jsxs(\"div\", { \"data-part\": \"ai-pending\", className: \"flex items-center gap-2 py-1\", children: [_jsx(Spinner, { size: \"sm\" }), _jsx(\"span\", { className: \"text-caption italic text-fg-subtle\", children: pendingLabel ?? 'Thinking…' })] }))] })), suggestions.length > 0 && (_jsx(\"ul\", { \"data-part\": \"suggestion-chips\", className: \"flex flex-wrap gap-1.5 px-4 pb-2\", children: suggestions.map((suggestion) => (_jsx(\"li\", { children: _jsx(\"button\", { type: \"button\", \"data-part\": \"suggestion-chip\", disabled: pending, onClick: () => send(suggestion), className: \"rounded-full border border-border bg-surface-2 px-2.5 py-1 text-caption font-semibold text-fg-muted hover:border-accent hover:text-accent focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent disabled:pointer-events-none disabled:opacity-40\", children: suggestion }) }, suggestion))) })), _jsxs(\"form\", { \"data-part\": \"composer\", onSubmit: submit, className: \"flex items-center gap-2 border-t border-border/60 p-3\", children: [_jsx(Input, { \"aria-label\": composerPlaceholder ?? 'Ask a question', placeholder: composerPlaceholder ?? 'Ask a question…', value: draft, disabled: pending, onChange: (event) => setDraft(event.currentTarget.value) }), _jsx(\"button\", { type: \"submit\", \"data-part\": \"send-button\", \"aria-label\": sendLabel ?? 'Send', disabled: pending || draft.trim() === '', className: \"grid size-9 shrink-0 place-items-center rounded-md bg-accent text-accent-fg hover:opacity-90 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent disabled:pointer-events-none disabled:opacity-40\", children: _jsx(Send, { className: \"size-4 rtl:-scale-x-100\", \"aria-hidden\": \"true\" }) })] })] }))] }));\n}\nfunction AiBubble({ turn, locale }) {\n const own = turn.own;\n const stamp = turn.sentAt !== undefined && turn.sentAt !== '' ? turn.sentAt : undefined;\n return (_jsxs(\"div\", { \"data-part\": \"ai-turn\", \"data-role\": turn.role, className: `flex items-start gap-2 ${own ? 'justify-end' : 'justify-start'}`, children: [!own && _jsx(IconTile, { size: \"sm\", tone: \"accent\", icon: _jsx(Sparkles, {}), className: \"mt-0.5 shrink-0\" }), _jsxs(\"div\", { \"data-part\": \"ai-bubble\", className: `max-w-[80%] rounded-2xl px-3 py-2 text-body-sm leading-relaxed ${own ? 'rounded-ee-sm bg-accent text-accent-fg' : 'rounded-es-sm border border-border bg-surface text-fg'}`, children: [_jsx(\"p\", { className: \"whitespace-pre-wrap break-words\", children: turn.body }), stamp !== undefined && (_jsx(\"time\", { dateTime: stamp, title: formatAbsoluteTime(stamp, locale), \"data-part\": \"ai-time\", className: `mt-1 block font-mono text-[9.5px] tabular-nums ${own ? 'text-end text-accent-fg/70' : 'text-start text-fg-subtle'}`, children: fmtClock(locale, stamp) }))] })] }));\n}\nfunction turnsOf(data, config) {\n return chatRowsOf(data).map((row, index) => {\n const sentAt = stringField(row, config.sentAtField);\n return {\n id: row['id'] ?? index,\n role: stringField(row, config.roleField) === 'user' ? 'user' : 'assistant',\n body: stringField(row, config.bodyField) ?? '',\n sentAt: sentAt ?? new Date(CHAT_DEMO_EPOCH).toISOString(),\n };\n });\n}\nexport function AiChatPanelWidget({ config, data, onEvent }) {\n const turns = turnsOf(data, config);\n const source = sourceOf(config.binding);\n return (_jsx(AiChatPanel, { turns: turns, suggestions: config.suggestions, providerConfigured: config.providerConfigured, pending: config.pending, ...(config.providerLabel === undefined ? {} : { providerLabel: config.providerLabel }), ...(config.assistantName === undefined ? {} : { assistantName: config.assistantName }), ...(config.composerPlaceholder === undefined ? {} : { composerPlaceholder: config.composerPlaceholder }), ...(config.sendLabel === undefined ? {} : { sendLabel: config.sendLabel }), ...(config.pendingLabel === undefined ? {} : { pendingLabel: config.pendingLabel }), ...(config.configureTitle === undefined ? {} : { configureTitle: config.configureTitle }), ...(config.configureBody === undefined ? {} : { configureBody: config.configureBody }), ...(config.configureCtaLabel === undefined ? {} : { configureCtaLabel: config.configureCtaLabel }), ...(config.emptyTitle === undefined ? {} : { emptyTitle: config.emptyTitle }), ...(config.emptyBody === undefined ? {} : { emptyBody: config.emptyBody }), ...(config.format?.locale === undefined ? {} : { locale: config.format.locale }), ...(config.testId === undefined ? {} : { testId: config.testId }), \n // The host owns the LLM run (POST /api/v1/llm/…): the widget only reports\n // the prompt as an insert intent against the transcript table.\n onSend: (prompt) => {\n onEvent({\n type: 'mutate',\n intent: 'insert',\n ...(source.connectionId === undefined ? {} : { connectionId: source.connectionId }),\n table: source.table,\n values: { [config.roleField]: 'user', [config.bodyField]: prompt },\n });\n }, ...(config.configureHref === undefined\n ? {}\n : {\n onConfigure: () => {\n onEvent({ type: 'drill-through', href: config.configureHref });\n },\n }) }));\n}\n//# sourceMappingURL=AiChatPanel.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Avatar, Button, EmptyState } from '@adminium/ui';\nimport { Phone, PhoneOff, Video } from 'lucide-react';\nimport { callKindOf, callStateOf, localeOf, recordRowOf, sourceOf, stringField } from './chat-lib.js';\n// Config schema + deterministic demo payload live in the pure\n// `communication-config` module so the registry metadata graph never eagerly\n// pulls this component's @adminium/ui deps (acceptance #3); re-exported here so\n// the family barrel, stories, and tests keep one import point per widget.\nexport { callWidgetConfigSchema, callWidgetDemoData } from './communication-config.js';\n/** Ringing is the only state that pulses; a live call is steady. */\nconst RINGS = { ringing: true, connecting: true, active: false, ended: false };\nexport function CallWidget({ peer, kind, state, actions = true, kindLabel, stateLabel, acceptLabel, declineLabel, endLabel, emptyTitle, emptyBody, onAccept, onDecline, locale: localeProp, testId, }) {\n // `format.locale` is a free-string in the shared config, so '' / 'x-1' are\n // schema-valid and would throw out of Avatar's `toLocaleUpperCase`.\n const locale = localeOf(localeProp);\n if (peer.trim() === '') {\n return (_jsx(EmptyState, { compact: true, preset: \"all-caught-up\", title: emptyTitle ?? 'No active call', body: emptyBody ?? 'An incoming call will appear here.' }));\n }\n const ringing = RINGS[state];\n const ended = state === 'ended';\n const KindIcon = kind === 'video' ? Video : Phone;\n return (_jsxs(\"div\", { \"data-widget\": \"call-widget\", \"data-testid\": testId, \"data-call-state\": state, \"data-call-kind\": kind, className: \"flex h-full flex-col items-center justify-center gap-4 p-6 text-center compact:gap-3 compact:p-4\", children: [_jsxs(\"div\", { className: \"relative flex items-center justify-center\", children: [ringing && (_jsx(\"span\", { \"aria-hidden\": \"true\", \"data-part\": \"call-ring\", className: \"absolute inset-0 rounded-full border-2 border-accent motion-safe:animate-ping\" })), _jsx(Avatar, { name: peer, size: \"2xl\", locale: locale })] }), _jsxs(\"div\", { className: \"flex flex-col items-center gap-1\", children: [_jsx(\"p\", { className: \"text-body font-bold text-fg\", children: peer }), _jsxs(\"p\", { \"data-part\": \"call-kind\", className: \"flex items-center gap-1.5 text-caption font-medium text-fg-muted\", children: [_jsx(KindIcon, { \"aria-hidden\": \"true\", className: \"size-3.5\" }), kindLabel ?? (kind === 'video' ? 'Video call' : 'Voice call')] }), _jsx(\"p\", { \"data-part\": \"call-state\", className: \"text-caption text-fg-subtle\", children: stateLabel ?? state })] }), actions && !ended && (_jsxs(\"div\", { className: \"flex items-center gap-3\", children: [state === 'ringing' && (_jsx(Button, { size: \"sm\", variant: \"primary\", iconLeft: _jsx(Phone, {}), onClick: onAccept, children: acceptLabel ?? 'Accept' })), _jsx(Button, { size: \"sm\", variant: \"destructive\", iconLeft: _jsx(PhoneOff, {}), onClick: onDecline, children: state === 'active' ? (endLabel ?? 'End call') : (declineLabel ?? 'Decline') })] }))] }));\n}\n/** The already-translated label for a call state, from the per-state config keys. */\nfunction stateLabelOf(state, config) {\n switch (state) {\n case 'ringing':\n return config.ringingLabel;\n case 'connecting':\n return config.connectingLabel;\n case 'active':\n return config.activeLabel;\n case 'ended':\n return config.endedLabel;\n }\n}\nexport function CallWidgetWidget({ config, data, onEvent }) {\n const row = recordRowOf(data);\n const kind = callKindOf(row?.[config.kindField]);\n const state = callStateOf(row?.[config.stateField]);\n const peer = row === null ? '' : (stringField(row, config.peerField) ?? '');\n const source = sourceOf(config.binding);\n const rawId = row?.['id'];\n const recordId = typeof rawId === 'string' || typeof rawId === 'number' ? rawId : undefined;\n /** Accept/decline are state transitions on the call row — the host writes them. */\n const transition = (next) => {\n onEvent({\n type: 'mutate',\n intent: 'update',\n ...(source.connectionId === undefined ? {} : { connectionId: source.connectionId }),\n table: source.table,\n ...(recordId === undefined ? {} : { recordId }),\n values: { [config.stateField]: next },\n });\n };\n return (_jsx(CallWidget, { peer: peer, kind: kind, state: state, actions: config.actions, ...(kind === 'video'\n ? config.videoLabel === undefined\n ? {}\n : { kindLabel: config.videoLabel }\n : config.voiceLabel === undefined\n ? {}\n : { kindLabel: config.voiceLabel }), ...(stateLabelOf(state, config) === undefined ? {} : { stateLabel: stateLabelOf(state, config) }), ...(config.acceptLabel === undefined ? {} : { acceptLabel: config.acceptLabel }), ...(config.declineLabel === undefined ? {} : { declineLabel: config.declineLabel }), ...(config.endLabel === undefined ? {} : { endLabel: config.endLabel }), ...(config.emptyTitle === undefined ? {} : { emptyTitle: config.emptyTitle }), ...(config.emptyBody === undefined ? {} : { emptyBody: config.emptyBody }), ...(config.format?.locale === undefined ? {} : { locale: config.format.locale }), ...(config.testId === undefined ? {} : { testId: config.testId }), onAccept: () => transition('active'), onDecline: () => transition('ended') }));\n}\n//# sourceMappingURL=CallWidget.js.map"],"names":["AiChatPanel","turns","suggestions","providerConfigured","providerLabel","assistantName","composerPlaceholder","sendLabel","pending","pendingLabel","configureTitle","configureBody","configureCtaLabel","emptyTitle","emptyBody","onSend","onConfigure","localeProp","dir","testId","locale","localeOf","draft","setDraft","useState","ordered","sortBySentAt","turn","send","prompt","body","submit","event","_jsxs","_jsx","IconTile","Sparkles","_Fragment","EmptyState","AiBubble","Spinner","suggestion","Input","Send","KeyRound","Button","own","stamp","formatAbsoluteTime","fmtClock","turnsOf","data","config","chatRowsOf","row","index","sentAt","stringField","CHAT_DEMO_EPOCH","AiChatPanelWidget","onEvent","source","sourceOf","RINGS","CallWidget","peer","kind","state","actions","kindLabel","stateLabel","acceptLabel","declineLabel","endLabel","onAccept","onDecline","ringing","ended","KindIcon","Video","Phone","Avatar","PhoneOff","stateLabelOf","CallWidgetWidget","recordRowOf","callKindOf","callStateOf","rawId","recordId","transition","next"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{r as J,j as t,cq as Z,cr as ae,u as ne,cs as U,ct as W,a3 as re,a5 as se,cu as H}from"./index-PB1II0WV.js";import{a as oe,t as le,c as ie,l as ce,b as K,d as de,n as ue,e as he}from"./scales-e0tkfEy1.js";import{e as _,n as ee}from"./stats-BNgXz5BD.js";import{c as L,f as q,a as te}from"./format-Lx4cQ8k-.js";import{t as X,a as me}from"./arc-CPxb74pf.js";import{S as xe}from"./Sparkline-Cvwo368J.js";import"./sparkline-2JUGDrMW.js";function pe(e,a){return a<e?-1:a>e?1:a>=e?0:NaN}function fe(e){return e}function ge(){var e=fe,a=pe,n=null,c=L(0),l=L(X),y=L(0);function o(s){var u,f=(s=oe(s)).length,v,b,d=0,m=new Array(f),h=new Array(f),g=+c.apply(this,arguments),x=Math.min(X,Math.max(-X,l.apply(this,arguments)-g)),j,i=Math.min(Math.abs(x)/f,y.apply(this,arguments)),w=i*(x<0?-1:1),r;for(u=0;u<f;++u)(r=h[m[u]=u]=+e(s[u],u,s))>0&&(d+=r);for(a!=null?m.sort(function(M,I){return a(h[M],h[I])}):n!=null&&m.sort(function(M,I){return n(s[M],s[I])}),u=0,b=d?(x-f*w)/d:0;u<f;++u,g=j)v=m[u],r=h[v],j=g+(r>0?r*b:0)+w,h[v]={data:s[v],index:u,value:r,startAngle:g,endAngle:j,padAngle:i};return h}return o.value=function(s){return arguments.length?(e=typeof s=="function"?s:L(+s),o):e},o.sortValues=function(s){return arguments.length?(a=s,n=null,o):a},o.sort=function(s){return arguments.length?(n=s,a=null,o):n},o.startAngle=function(s){return arguments.length?(c=typeof s=="function"?s:L(+s),o):c},o.endAngle=function(s){return arguments.length?(l=typeof s=="function"?s:L(+s),o):l},o.padAngle=function(s){return arguments.length?(y=typeof s=="function"?s:L(+s),o):y},o}const ye=e=>e instanceof Date?te(e):String(e);function ve({data:e,comparison:a,labels:n,height:c=240,smooth:l=!0,showAxis:y=!0,formatX:o=ye,formatY:s=q,dir:u,a11yFallback:f,className:v}){const b=J.useId(),[d,m]=J.useState(-1),h=e[0]?.x instanceof Date,g=y?{top:8,bottom:22,near:38,far:12}:{top:4,bottom:4,near:4,far:4};return t.jsx(Z,{labels:n,height:c,...u!==void 0?{dir:u}:{},...f!==void 0?{a11yFallback:f}:{},...v!==void 0?{className:v}:{},padding:{top:g.top,bottom:g.bottom,left:g.near,right:g.far},children:({innerWidth:x,innerHeight:j,rtl:i,mounted:w})=>{if(e.length===0||x<=0||j<=0)return null;const r=h?(()=>{const p=e.map(k=>k.x instanceof Date?k.x:new Date(0)),[C,Y]=[p[0]??new Date(0),p.at(-1)??new Date(0)],z=le([C,Y],x);return k=>z(k.x instanceof Date?k.x:new Date(0))})():(()=>{const p=ie(e.map(C=>String(C.x)),x,i);return C=>p(String(C.x))??0})(),M=[...e,...a??[]].map(p=>p.y),[I,V]=_(M)??[0,1],$=ee(Math.min(0,I),Math.max(1,V),3),B=[$[0]??0,$.at(-1)??1],S=ce(B,j),N=e.map(p=>({x:r(p),y:S(p.y)})),O=K(N,l),P=de(N,j,l),T=a!==void 0&&a.length>0?K(a.map(p=>({x:r(p),y:S(p.y)})),l):null,D=d>=0&&d<e.length?e[d]:void 0,A=D!==void 0?N[d]:void 0,G=p=>{const C=p.currentTarget.getBoundingClientRect();if(C.width<=0)return;const Y=(p.clientX-C.left)/C.width*x;m(ue(N.map(z=>z.x),Y))},E=96,R=A!==void 0&&A.x>x/2?-1:1;return t.jsxs("g",{className:"adm-chart-fade",style:{"--adm-fade":w?"1":"0"},children:[t.jsx("defs",{children:t.jsxs("linearGradient",{id:b,x1:"0",y1:"0",x2:"0",y2:"1",children:[t.jsx("stop",{offset:"0%",stopColor:"var(--accent-area)"}),t.jsx("stop",{offset:"100%",stopColor:"var(--accent-area)",stopOpacity:"0"})]})}),y&&$.map(p=>t.jsxs("g",{children:[t.jsx("line",{className:"adm-chart-gridline",x1:0,x2:x,y1:S(p),y2:S(p)}),t.jsx("text",{className:"adm-chart-axis-label adm-chart-num",x:i?x+6:-6,y:S(p)+3,textAnchor:i?"start":"end",children:s(p)})]},p)),P!==null&&t.jsx("path",{d:P,fill:`url(#${b})`,"data-series":"area"}),T!==null&&t.jsx("path",{d:T,fill:"none",stroke:"var(--viz-2)",strokeWidth:1.5,strokeDasharray:"4 4","data-series":"comparison"}),O!==null&&t.jsx("path",{d:O,fill:"none",stroke:"var(--viz-1)",strokeWidth:2,strokeLinecap:"round","data-series":"line"}),y&&e.length>1&&t.jsxs(t.Fragment,{children:[t.jsx("text",{className:"adm-chart-axis-label",x:r(e[0]),y:j+15,textAnchor:h||!i?"start":"end",children:o(e[0].x)}),t.jsx("text",{className:"adm-chart-axis-label",x:r(e.at(-1)),y:j+15,textAnchor:h||!i?"end":"start",children:o(e.at(-1).x)})]}),D!==void 0&&A!==void 0&&t.jsxs("g",{pointerEvents:"none","data-tooltip":"",children:[t.jsx("line",{className:"adm-chart-gridline",x1:A.x,x2:A.x,y1:0,y2:j}),t.jsx("circle",{cx:A.x,cy:A.y,r:3.5,fill:"var(--viz-1)",stroke:"var(--surface)",strokeWidth:1.5}),t.jsxs("g",{transform:`translate(${A.x+R*10-(R===-1?E:0)}, ${Math.max(0,A.y-34)})`,children:[t.jsx("rect",{className:"adm-chart-tooltip-bg",width:E,height:30,rx:6}),t.jsx("text",{className:"adm-chart-tooltip-label",x:8,y:12,children:o(D.x)}),t.jsx("text",{className:"adm-chart-tooltip-value",x:8,y:25,children:s(D.y)})]})]}),t.jsx("rect",{width:x,height:j,fill:"transparent","data-hover-overlay":"",onPointerMove:G,onPointerLeave:()=>m(-1)})]})}})}function je(e){const{categories:a,series:n,width:c,height:l,rtl:y,paddingInner:o=.3,paddingOuter:s=.15,groupGap:u=3,tickCount:f=3}=e,v=n.flatMap(N=>[...N]),[b,d]=_(v)??[0,1],m=Math.min(0,b),h=Math.max(0,d),g=m===h?[m,m+1]:ee(m,h,f),x=g[0]??m,i=(g.at(-1)??h)-x||1,w=N=>l-(N-x)/i*l,r=w(0),M=he(a,c,y,{paddingInner:o,paddingOuter:s}),I=M.bandwidth(),V=Math.max(1,n.length),$=V===1?I:(I-u*(V-1))/V,B=[];a.forEach((N,O)=>{const P=M(N);P!==void 0&&n.forEach((T,D)=>{const A=T[O];if(A===void 0)return;const G=y?V-1-D:D,E=P+G*($+u),R=w(A);B.push({x:E,y:Math.min(R,r),width:Math.max(0,$),height:Math.abs(R-r),categoryIndex:O,seriesIndex:D,value:A})})});const S=a.map(N=>({label:N,x:(M(N)??0)+I/2}));return{bars:B,categoryCenters:S,yTicks:g,yFor:w,baselineY:r}}function be(e,a){if(a==="none"||e.length===0)return-1;if(a==="current")return e.length-1;let n=0;return e.forEach((c,l)=>{c>(e[n]??-1/0)&&(n=l)}),n}const we=["var(--viz-1)","var(--viz-2)"];function Ne({categories:e,series:a,labels:n,highlight:c="max",height:l=220,showAxis:y=!0,showCategoryLabels:o=!0,barRadius:s=3,formatY:u=q,dir:f,a11yFallback:v,className:b}){const d={top:8,bottom:o?22:6,near:y?38:6,far:8},m=a.length>1;return t.jsx(Z,{labels:n,height:l,...f!==void 0?{dir:f}:{},...v!==void 0?{a11yFallback:v}:{},...b!==void 0?{className:b}:{},padding:{top:d.top,bottom:d.bottom,left:d.near,right:d.far},children:({innerWidth:h,innerHeight:g,rtl:x,mounted:j})=>{if(e.length===0||a.length===0||h<=0||g<=0)return null;const i=je({categories:e,series:a.map(r=>r.values),width:h,height:g,rtl:x}),w=m?-1:be([...a[0]?.values??[]],c);return t.jsxs("g",{children:[y&&i.yTicks.map(r=>t.jsxs("g",{children:[t.jsx("line",{className:"adm-chart-gridline",x1:0,x2:h,y1:i.yFor(r),y2:i.yFor(r)}),t.jsx("text",{className:"adm-chart-axis-label adm-chart-num",x:x?h+6:-6,y:i.yFor(r)+3,textAnchor:x?"start":"end",children:u(r)})]},r)),i.bars.map(r=>{const M=m?we[r.seriesIndex%2]:r.categoryIndex===w?"var(--accent)":"var(--viz-ramp-3)";return t.jsx("rect",{className:"adm-chart-grow",style:{"--adm-grow":j?"1":"0","--adm-stagger":`${r.categoryIndex*80}ms`},x:r.x,y:r.y,width:r.width,height:r.height,rx:s,fill:M,"data-category-index":r.categoryIndex,"data-series-index":r.seriesIndex,"data-highlighted":r.categoryIndex===w?"":void 0},`${r.categoryIndex}-${r.seriesIndex}`)}),o&&i.categoryCenters.map(r=>t.jsx("text",{className:"adm-chart-axis-label",x:r.x,y:g+15,textAnchor:"middle",children:r.label},r.label))]})}})}function Ae(e,a,n="Other"){if(a<=0||e.length<=a)return{slices:[...e],otherIndex:-1};const c=e.slice(0,a),l=e.slice(a).reduce((y,o)=>y+o.value,0);return{slices:[...c,{label:n,value:l}],otherIndex:a}}function Me(e,a){const{outerRadius:n,thickness:c,padAngle:l=.02,cornerRadius:y=2,maxSlices:o=1/0,otherLabel:s}=a,u=Number.isFinite(o)?Ae(e,o,s):{slices:[...e],otherIndex:-1},f=u.slices.reduce((d,m)=>d+Math.max(0,m.value),0);if(f<=0)return[];const v=ge().value(d=>Math.max(0,d.value)).sort(null).padAngle(l),b=me().innerRadius(Math.max(0,n-c)).outerRadius(n).cornerRadius(y);return v(u.slices).map((d,m)=>{const h=m===u.otherIndex;return{label:d.data.label,value:d.data.value,share:Math.max(0,d.data.value)/f,path:b(d)??"",colorVar:h?"var(--fg-subtle)":`var(--viz-${m%8+1})`,isOther:h}})}function Ie({data:e,labels:a,maxSlices:n=5,otherLabel:c="Other",centerLabel:l,centerValue:y,size:o=160,thickness:s=20,showLegend:u=!0,format:f=q,dir:v,a11yFallback:b,className:d}){const m=ae(v),h=ne(),g=Me(e,{outerRadius:o/2,thickness:s,maxSlices:n,otherLabel:c}),x=e.reduce((i,w)=>i+Math.max(0,w.value),0),j=y??f(x);return t.jsxs("div",{className:d===void 0?"adm-donut":`adm-donut ${d}`,...v!==void 0?{dir:m}:{},children:[t.jsxs("svg",{role:"img","aria-label":a.label,width:o,height:o,viewBox:`0 0 ${o} ${o}`,"data-export-node":"",children:[a.description!==void 0&&t.jsx("desc",{children:a.description}),t.jsxs("g",{transform:`translate(${o/2}, ${o/2})`,children:[g.map((i,w)=>t.jsx("path",{className:"adm-chart-fade",style:{"--adm-fade":h?"1":"0","--adm-stagger":`${w*80}ms`},d:i.path,fill:i.colorVar,"data-slice":i.label,"data-other":i.isOther?"":void 0},i.label)),t.jsx("text",{className:"adm-donut-center-value",textAnchor:"middle",dy:l!==void 0?"0.1em":"0.35em",children:j}),l!==void 0&&t.jsx("text",{className:"adm-donut-center-label",textAnchor:"middle",dy:"1.6em",children:l})]})]}),u&&t.jsx("ul",{className:"adm-donut-legend",children:g.map(i=>t.jsxs("li",{className:"adm-donut-legend-row",children:[t.jsx("span",{className:"adm-donut-legend-dot",style:{"--adm-dot":i.colorVar},"aria-hidden":"true"}),t.jsx("span",{children:i.label}),t.jsx("span",{className:"adm-donut-legend-value",children:f(i.value)})]},i.label))}),b!==void 0&&t.jsx("div",{className:"adm-chart-sr",children:b})]})}function F(){return t.jsx("p",{className:"px-4 pb-4 text-body-sm text-fg-muted",children:"Unexpected data shape."})}function Q(e){return e.map(a=>({x:new Date(a.t),y:a.v}))}function ke({config:e,data:a}){const n=U(a);if(n===null||n.points.length===0)return t.jsx(F,{});const c=e.compareToPrior&&n.compare!==void 0?Q(n.compare):void 0;return t.jsx("div",{className:"px-4 pb-4 compact:px-3 compact:pb-3","data-widget":"chart-line-area",children:t.jsx(ve,{data:Q(n.points),...c!==void 0?{comparison:c}:{},labels:{label:e.title??"Line chart"},smooth:e.smooth,showAxis:e.axis,height:e.height})})}function Ce(e,a){const n=U(e);if(n!==null&&n.points.length>0)return{categories:n.points.map(l=>te(new Date(l.t))),series:[{name:a,values:H(n)}]};const c=W(e);return c!==null&&c.items.length>0?{categories:c.items.map(l=>l.label),series:[{name:a,values:c.items.map(l=>l.value)}]}:null}function Be({config:e,data:a}){const n=Ce(a,e.title??"Value");return n===null?t.jsx(F,{}):t.jsx("div",{className:"px-4 pb-4 compact:px-3 compact:pb-3","data-widget":"chart-bar",children:t.jsx(Ne,{categories:n.categories,series:n.series,labels:{label:e.title??"Bar chart"},highlight:e.highlight,showAxis:e.axis,showCategoryLabels:e.labels,barRadius:e.barRadius,height:e.height})})}function Te({config:e,data:a}){const n=W(a);if(n===null||n.items.length===0)return t.jsx(F,{});const c=re(e);return t.jsx("div",{className:"flex justify-center px-4 pb-4 compact:px-3 compact:pb-3","data-widget":"chart-donut",children:t.jsx(Ie,{data:n.items.map(l=>({label:l.label,value:l.value})),labels:{label:e.title??"Donut chart"},maxSlices:e.maxSlices,showLegend:e.showLegend,size:e.size,format:l=>se(l,e.metricFormat,c),...e.centerLabel!==void 0?{centerLabel:e.centerLabel}:{},...e.centerMetric==="none"?{centerValue:""}:{}})})}function De(e){switch(e){case"pos":return"positive";case"danger":return"danger";case"muted":return"muted";default:return"accent"}}function Ee({config:e,data:a}){const n=U(a);return n===null||n.points.length===0?t.jsx(F,{}):t.jsx(xe,{data:H(n),variant:e.variant,emphasisLast:e.emphasisLast,tone:De(e.tone),width:e.width,height:e.height,...e.title!==void 0?{label:e.title}:{}})}export{Be as ChartBarWidget,Te as ChartDonutWidget,ke as ChartLineAreaWidget,Ee as ChartSparklineWidget};
|
|
2
|
+
//# sourceMappingURL=components-Bp5cFm2d.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"components-Bp5cFm2d.js","sources":["../../../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/descending.js","../../../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/identity.js","../../../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/pie.js","../../../../packages/charts/dist/components/LineAreaChart.js","../../../../packages/charts/dist/geometry/bars.js","../../../../packages/charts/dist/components/BarChart.js","../../../../packages/charts/dist/geometry/donut.js","../../../../packages/charts/dist/components/DonutChart.js","../../../../packages/widgets/dist/families/charts/ChartWidgets.js"],"sourcesContent":["export default function(a, b) {\n return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n}\n","export default function(d) {\n return d;\n}\n","import array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport descending from \"./descending.js\";\nimport identity from \"./identity.js\";\nimport {tau} from \"./math.js\";\n\nexport default function() {\n var value = identity,\n sortValues = descending,\n sort = null,\n startAngle = constant(0),\n endAngle = constant(tau),\n padAngle = constant(0);\n\n function pie(data) {\n var i,\n n = (data = array(data)).length,\n j,\n k,\n sum = 0,\n index = new Array(n),\n arcs = new Array(n),\n a0 = +startAngle.apply(this, arguments),\n da = Math.min(tau, Math.max(-tau, endAngle.apply(this, arguments) - a0)),\n a1,\n p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)),\n pa = p * (da < 0 ? -1 : 1),\n v;\n\n for (i = 0; i < n; ++i) {\n if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) {\n sum += v;\n }\n }\n\n // Optionally sort the arcs by previously-computed values or by data.\n if (sortValues != null) index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); });\n else if (sort != null) index.sort(function(i, j) { return sort(data[i], data[j]); });\n\n // Compute the arcs! They are stored in the original data's order.\n for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) {\n j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = {\n data: data[j],\n index: i,\n value: v,\n startAngle: a0,\n endAngle: a1,\n padAngle: p\n };\n }\n\n return arcs;\n }\n\n pie.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), pie) : value;\n };\n\n pie.sortValues = function(_) {\n return arguments.length ? (sortValues = _, sort = null, pie) : sortValues;\n };\n\n pie.sort = function(_) {\n return arguments.length ? (sort = _, sortValues = null, pie) : sort;\n };\n\n pie.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : startAngle;\n };\n\n pie.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : endAngle;\n };\n\n pie.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : padAngle;\n };\n\n return pie;\n}\n","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\n/**\n * `chart-line-area` primitive (research/widget-registry.md §2): SVG line with\n * gradient area fill, optional dashed prior-period comparison series, time or\n * categorical x, linear y, minimal axis labels, nearest-x hover tooltip.\n * Pure data + config props — no fetching.\n */\nimport { useId, useState } from 'react';\nimport { areaPath, linePath, nearestIndexByX } from '../geometry/lineArea.js';\nimport { categoricalPointScale, linearYScale, timeScale } from '../geometry/scales.js';\nimport { extent, niceTicks } from '../utils/stats.js';\nimport { formatCompact, formatShortDate } from '../utils/format.js';\nimport { ChartSurface } from './ChartSurface.js';\nconst defaultFormatX = (x) => (x instanceof Date ? formatShortDate(x) : String(x));\nexport function LineAreaChart({ data, comparison, labels, height = 240, smooth = true, showAxis = true, formatX = defaultFormatX, formatY = formatCompact, dir, a11yFallback, className, }) {\n const gradientId = useId();\n const [hoverIndex, setHoverIndex] = useState(-1);\n const isTime = data[0]?.x instanceof Date;\n const axisPad = showAxis ? { top: 8, bottom: 22, near: 38, far: 12 } : { top: 4, bottom: 4, near: 4, far: 4 };\n return (_jsx(ChartSurface, { labels: labels, height: height, ...(dir !== undefined ? { dir } : {}), ...(a11yFallback !== undefined ? { a11yFallback } : {}), ...(className !== undefined ? { className } : {}), padding: { top: axisPad.top, bottom: axisPad.bottom, left: axisPad.near, right: axisPad.far }, children: ({ innerWidth, innerHeight, rtl, mounted }) => {\n if (data.length === 0 || innerWidth <= 0 || innerHeight <= 0)\n return null;\n // x positions — time axes stay LTR; categorical mirrors via range flip.\n const xFor = isTime\n ? (() => {\n const dates = data.map((d) => (d.x instanceof Date ? d.x : new Date(0)));\n const [lo, hi] = [dates[0] ?? new Date(0), dates.at(-1) ?? new Date(0)];\n const scale = timeScale([lo, hi], innerWidth);\n return (p) => scale(p.x instanceof Date ? p.x : new Date(0));\n })()\n : (() => {\n const scale = categoricalPointScale(data.map((d) => String(d.x)), innerWidth, rtl);\n return (p) => scale(String(p.x)) ?? 0;\n })();\n const ys = [...data, ...(comparison ?? [])].map((d) => d.y);\n const [minY, maxY] = extent(ys) ?? [0, 1];\n const yTicks = niceTicks(Math.min(0, minY), Math.max(1, maxY), 3);\n const yDomain = [yTicks[0] ?? 0, yTicks.at(-1) ?? 1];\n const yScale = linearYScale(yDomain, innerHeight);\n const points = data.map((d) => ({ x: xFor(d), y: yScale(d.y) }));\n const mainLine = linePath(points, smooth);\n const mainArea = areaPath(points, innerHeight, smooth);\n const comparisonLine = comparison !== undefined && comparison.length > 0\n ? linePath(comparison.map((d) => ({ x: xFor(d), y: yScale(d.y) })), smooth)\n : null;\n const hover = hoverIndex >= 0 && hoverIndex < data.length ? data[hoverIndex] : undefined;\n const hoverPoint = hover !== undefined ? points[hoverIndex] : undefined;\n const handlePointerMove = (event) => {\n const rect = event.currentTarget.getBoundingClientRect();\n if (rect.width <= 0)\n return;\n const localX = ((event.clientX - rect.left) / rect.width) * innerWidth;\n setHoverIndex(nearestIndexByX(points.map((p) => p.x), localX));\n };\n // Tooltip flips side so it never clips at the plot edge.\n const tooltipWidth = 96;\n const tooltipSide = hoverPoint !== undefined && hoverPoint.x > innerWidth / 2 ? -1 : 1;\n return (_jsxs(\"g\", { className: \"adm-chart-fade\", style: { '--adm-fade': mounted ? '1' : '0' }, children: [_jsx(\"defs\", { children: _jsxs(\"linearGradient\", { id: gradientId, x1: \"0\", y1: \"0\", x2: \"0\", y2: \"1\", children: [_jsx(\"stop\", { offset: \"0%\", stopColor: \"var(--accent-area)\" }), _jsx(\"stop\", { offset: \"100%\", stopColor: \"var(--accent-area)\", stopOpacity: \"0\" })] }) }), showAxis &&\n yTicks.map((tick) => (_jsxs(\"g\", { children: [_jsx(\"line\", { className: \"adm-chart-gridline\", x1: 0, x2: innerWidth, y1: yScale(tick), y2: yScale(tick) }), _jsx(\"text\", { className: \"adm-chart-axis-label adm-chart-num\", x: rtl ? innerWidth + 6 : -6, y: yScale(tick) + 3, textAnchor: rtl ? 'start' : 'end', children: formatY(tick) })] }, tick))), mainArea !== null && _jsx(\"path\", { d: mainArea, fill: `url(#${gradientId})`, \"data-series\": \"area\" }), comparisonLine !== null && (_jsx(\"path\", { d: comparisonLine, fill: \"none\", stroke: \"var(--viz-2)\", strokeWidth: 1.5, strokeDasharray: \"4 4\", \"data-series\": \"comparison\" })), mainLine !== null && (_jsx(\"path\", { d: mainLine, fill: \"none\", stroke: \"var(--viz-1)\", strokeWidth: 2, strokeLinecap: \"round\", \"data-series\": \"line\" })), showAxis && data.length > 1 && (_jsxs(_Fragment, { children: [_jsx(\"text\", { className: \"adm-chart-axis-label\", x: xFor(data[0]), y: innerHeight + 15, textAnchor: isTime || !rtl ? 'start' : 'end', children: formatX(data[0].x) }), _jsx(\"text\", { className: \"adm-chart-axis-label\", x: xFor(data.at(-1)), y: innerHeight + 15, textAnchor: isTime || !rtl ? 'end' : 'start', children: formatX(data.at(-1).x) })] })), hover !== undefined && hoverPoint !== undefined && (_jsxs(\"g\", { pointerEvents: \"none\", \"data-tooltip\": \"\", children: [_jsx(\"line\", { className: \"adm-chart-gridline\", x1: hoverPoint.x, x2: hoverPoint.x, y1: 0, y2: innerHeight }), _jsx(\"circle\", { cx: hoverPoint.x, cy: hoverPoint.y, r: 3.5, fill: \"var(--viz-1)\", stroke: \"var(--surface)\", strokeWidth: 1.5 }), _jsxs(\"g\", { transform: `translate(${hoverPoint.x + tooltipSide * 10 - (tooltipSide === -1 ? tooltipWidth : 0)}, ${Math.max(0, hoverPoint.y - 34)})`, children: [_jsx(\"rect\", { className: \"adm-chart-tooltip-bg\", width: tooltipWidth, height: 30, rx: 6 }), _jsx(\"text\", { className: \"adm-chart-tooltip-label\", x: 8, y: 12, children: formatX(hover.x) }), _jsx(\"text\", { className: \"adm-chart-tooltip-value\", x: 8, y: 25, children: formatY(hover.y) })] })] })), _jsx(\"rect\", { width: innerWidth, height: innerHeight, fill: \"transparent\", \"data-hover-overlay\": \"\", onPointerMove: handlePointerMove, onPointerLeave: () => setHoverIndex(-1) })] }));\n } }));\n}\n//# sourceMappingURL=LineAreaChart.js.map","/** Pure bar/column layout — no DOM, reusable by server-side report rendering. */\nimport { categoricalBandScale } from './scales.js';\nimport { extent, niceTicks } from '../utils/stats.js';\n/**\n * Categorical column layout. In RTL the category order mirrors (first\n * category at inline-start) via the band-scale range flip; grouped series\n * order also mirrors inside each band so series[0] stays at inline-start.\n */\nexport function layoutBars(options) {\n const { categories, series, width, height, rtl, paddingInner = 0.3, paddingOuter = 0.15, groupGap = 3, tickCount = 3, } = options;\n const all = series.flatMap((s) => [...s]);\n const [minValue, maxValue] = extent(all) ?? [0, 1];\n const lo = Math.min(0, minValue);\n const hi = Math.max(0, maxValue);\n const yTicks = lo === hi ? [lo, lo + 1] : niceTicks(lo, hi, tickCount);\n const domainLo = yTicks[0] ?? lo;\n const domainHi = yTicks.at(-1) ?? hi;\n const span = domainHi - domainLo || 1;\n const yFor = (value) => height - ((value - domainLo) / span) * height;\n const baselineY = yFor(0);\n const band = categoricalBandScale(categories, width, rtl, { paddingInner, paddingOuter });\n const bandwidth = band.bandwidth();\n const seriesCount = Math.max(1, series.length);\n const slotWidth = seriesCount === 1 ? bandwidth : (bandwidth - groupGap * (seriesCount - 1)) / seriesCount;\n const bars = [];\n categories.forEach((category, categoryIndex) => {\n const bandStart = band(category);\n if (bandStart === undefined)\n return;\n series.forEach((values, seriesIndex) => {\n const value = values[categoryIndex];\n if (value === undefined)\n return;\n // Mirror series order inside the group in RTL so series[0] stays at inline-start.\n const slot = rtl ? seriesCount - 1 - seriesIndex : seriesIndex;\n const x = bandStart + slot * (slotWidth + groupGap);\n const yValue = yFor(value);\n bars.push({\n x,\n y: Math.min(yValue, baselineY),\n width: Math.max(0, slotWidth),\n height: Math.abs(yValue - baselineY),\n categoryIndex,\n seriesIndex,\n value,\n });\n });\n });\n const categoryCenters = categories.map((label) => ({\n label,\n x: (band(label) ?? 0) + bandwidth / 2,\n }));\n return { bars, categoryCenters, yTicks, yFor, baselineY };\n}\n/** Index of the highlighted category: max value, last bucket, or none (-1). */\nexport function highlightIndex(values, mode) {\n if (mode === 'none' || values.length === 0)\n return -1;\n if (mode === 'current')\n return values.length - 1;\n let best = 0;\n values.forEach((v, i) => {\n if (v > (values[best] ?? -Infinity))\n best = i;\n });\n return best;\n}\n//# sourceMappingURL=bars.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { highlightIndex, layoutBars } from '../geometry/bars.js';\nimport { formatCompact } from '../utils/format.js';\nimport { ChartSurface } from './ChartSurface.js';\n/** Series color assignment: grouped mode viz-1/viz-2; single series uses the\n * accent ramp with the highlighted column at full accent. */\nconst GROUPED_FILLS = ['var(--viz-1)', 'var(--viz-2)'];\nexport function BarChart({ categories, series, labels, highlight = 'max', height = 220, showAxis = true, showCategoryLabels = true, barRadius = 3, formatY = formatCompact, dir, a11yFallback, className, }) {\n const axisPad = {\n top: 8,\n bottom: showCategoryLabels ? 22 : 6,\n near: showAxis ? 38 : 6,\n far: 8,\n };\n const grouped = series.length > 1;\n return (_jsx(ChartSurface, { labels: labels, height: height, ...(dir !== undefined ? { dir } : {}), ...(a11yFallback !== undefined ? { a11yFallback } : {}), ...(className !== undefined ? { className } : {}), padding: { top: axisPad.top, bottom: axisPad.bottom, left: axisPad.near, right: axisPad.far }, children: ({ innerWidth, innerHeight, rtl, mounted }) => {\n if (categories.length === 0 || series.length === 0 || innerWidth <= 0 || innerHeight <= 0) {\n return null;\n }\n const layout = layoutBars({\n categories,\n series: series.map((s) => s.values),\n width: innerWidth,\n height: innerHeight,\n rtl,\n });\n const highlighted = grouped ? -1 : highlightIndex([...(series[0]?.values ?? [])], highlight);\n return (_jsxs(\"g\", { children: [showAxis &&\n layout.yTicks.map((tick) => (_jsxs(\"g\", { children: [_jsx(\"line\", { className: \"adm-chart-gridline\", x1: 0, x2: innerWidth, y1: layout.yFor(tick), y2: layout.yFor(tick) }), _jsx(\"text\", { className: \"adm-chart-axis-label adm-chart-num\", x: rtl ? innerWidth + 6 : -6, y: layout.yFor(tick) + 3, textAnchor: rtl ? 'start' : 'end', children: formatY(tick) })] }, tick))), layout.bars.map((bar) => {\n const fill = grouped\n ? GROUPED_FILLS[bar.seriesIndex % 2]\n : bar.categoryIndex === highlighted\n ? 'var(--accent)'\n : 'var(--viz-ramp-3)';\n return (_jsx(\"rect\", { className: \"adm-chart-grow\", style: { '--adm-grow': mounted ? '1' : '0', '--adm-stagger': `${bar.categoryIndex * 80}ms` }, x: bar.x, y: bar.y, width: bar.width, height: bar.height, rx: barRadius, fill: fill, \"data-category-index\": bar.categoryIndex, \"data-series-index\": bar.seriesIndex, \"data-highlighted\": bar.categoryIndex === highlighted ? '' : undefined }, `${bar.categoryIndex}-${bar.seriesIndex}`));\n }), showCategoryLabels &&\n layout.categoryCenters.map((center) => (_jsx(\"text\", { className: \"adm-chart-axis-label\", x: center.x, y: innerHeight + 15, textAnchor: \"middle\", children: center.label }, center.label)))] }));\n } }));\n}\n//# sourceMappingURL=BarChart.js.map","/** Pure donut geometry — d3-shape pie/arc, maxSlices + \"other\" bucketing. */\nimport { arc, pie } from 'd3-shape';\n/** Aggregate slices beyond `maxSlices` into a trailing \"other\" bucket. */\nexport function bucketSlices(slices, maxSlices, otherLabel = 'Other') {\n if (maxSlices <= 0 || slices.length <= maxSlices) {\n return { slices: [...slices], otherIndex: -1 };\n }\n const kept = slices.slice(0, maxSlices);\n const rest = slices.slice(maxSlices).reduce((sum, s) => sum + s.value, 0);\n return { slices: [...kept, { label: otherLabel, value: rest }], otherIndex: maxSlices };\n}\n/**\n * Donut arcs in input order (no value sort — legend order matches data).\n * Rotation is always clockwise from 12 o'clock; per the RTL rules\n * (10-i18n-theming.md §5.5) rotation direction does NOT change in RTL — only\n * the surrounding legend/center layout mirrors, which is plain flex/logical CSS.\n */\nexport function donutArcs(slices, options) {\n const { outerRadius, thickness, padAngle = 0.02, cornerRadius = 2, maxSlices = Infinity, otherLabel } = options;\n const bucketed = Number.isFinite(maxSlices)\n ? bucketSlices(slices, maxSlices, otherLabel)\n : { slices: [...slices], otherIndex: -1 };\n const total = bucketed.slices.reduce((sum, s) => sum + Math.max(0, s.value), 0);\n if (total <= 0)\n return [];\n const pieLayout = pie()\n .value((d) => Math.max(0, d.value))\n .sort(null)\n .padAngle(padAngle);\n const arcGenerator = arc()\n .innerRadius(Math.max(0, outerRadius - thickness))\n .outerRadius(outerRadius)\n .cornerRadius(cornerRadius);\n return pieLayout(bucketed.slices).map((piece, i) => {\n const isOther = i === bucketed.otherIndex;\n return {\n label: piece.data.label,\n value: piece.data.value,\n share: Math.max(0, piece.data.value) / total,\n path: arcGenerator(piece) ?? '',\n colorVar: isOther ? 'var(--fg-subtle)' : `var(--viz-${(i % 8) + 1})`,\n isOther,\n };\n });\n}\n//# sourceMappingURL=donut.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { donutArcs } from '../geometry/donut.js';\nimport { useChartDir } from '../hooks/useRtl.js';\nimport { useMountAnimation } from '../hooks/useMountAnimation.js';\nimport { formatCompact } from '../utils/format.js';\nexport function DonutChart({ data, labels, maxSlices = 5, otherLabel = 'Other', centerLabel, centerValue, size = 160, thickness = 20, showLegend = true, format = formatCompact, dir, a11yFallback, className, }) {\n const resolvedDir = useChartDir(dir);\n const mounted = useMountAnimation();\n const arcs = donutArcs(data, {\n outerRadius: size / 2,\n thickness,\n maxSlices,\n otherLabel,\n });\n const total = data.reduce((sum, s) => sum + Math.max(0, s.value), 0);\n const shownCenterValue = centerValue ?? format(total);\n return (_jsxs(\"div\", { className: className === undefined ? 'adm-donut' : `adm-donut ${className}`, ...(dir !== undefined ? { dir: resolvedDir } : {}), children: [_jsxs(\"svg\", { role: \"img\", \"aria-label\": labels.label, width: size, height: size, viewBox: `0 0 ${size} ${size}`, \"data-export-node\": \"\", children: [labels.description !== undefined && _jsx(\"desc\", { children: labels.description }), _jsxs(\"g\", { transform: `translate(${size / 2}, ${size / 2})`, children: [arcs.map((slice, i) => (_jsx(\"path\", { className: \"adm-chart-fade\", style: { '--adm-fade': mounted ? '1' : '0', '--adm-stagger': `${i * 80}ms` }, d: slice.path, fill: slice.colorVar, \"data-slice\": slice.label, \"data-other\": slice.isOther ? '' : undefined }, slice.label))), _jsx(\"text\", { className: \"adm-donut-center-value\", textAnchor: \"middle\", dy: centerLabel !== undefined ? '0.1em' : '0.35em', children: shownCenterValue }), centerLabel !== undefined && (_jsx(\"text\", { className: \"adm-donut-center-label\", textAnchor: \"middle\", dy: \"1.6em\", children: centerLabel }))] })] }), showLegend && (_jsx(\"ul\", { className: \"adm-donut-legend\", children: arcs.map((slice) => (_jsxs(\"li\", { className: \"adm-donut-legend-row\", children: [_jsx(\"span\", { className: \"adm-donut-legend-dot\", style: { '--adm-dot': slice.colorVar }, \"aria-hidden\": \"true\" }), _jsx(\"span\", { children: slice.label }), _jsx(\"span\", { className: \"adm-donut-legend-value\", children: format(slice.value) })] }, slice.label))) })), a11yFallback !== undefined && _jsx(\"div\", { className: \"adm-chart-sr\", children: a11yFallback })] }));\n}\n//# sourceMappingURL=DonutChart.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\n/**\n * `charts` family M4 widgets (annex §2): registry wrappers that map stored\n * instance config + §3 envelopes onto the @adminium/charts primitives.\n * Accessible names come from `config.title` (ChartSurface renders them as\n * the SVG aria-label). Components render only the loaded state.\n */\nimport { BarChart, DonutChart, LineAreaChart, Sparkline, formatShortDate } from '@adminium/charts';\nimport { formatMetricValue, formatOptionsOf } from '../../lib/format.js';\nimport { asCategorical, asTimeseries, timeseriesValues } from '../../lib/shapes.js';\n// Config schemas live in the pure `charts-config` module so the registry\n// metadata graph never reaches this component file (04 §2.3). Re-exported here\n// to keep existing import points stable.\nexport { chartBarConfigSchema, chartDonutConfigSchema, chartLineAreaConfigSchema, chartSparklineConfigSchema, } from './charts-config.js';\nfunction BadShape() {\n return _jsx(\"p\", { className: \"px-4 pb-4 text-body-sm text-fg-muted\", children: \"Unexpected data shape.\" });\n}\nfunction toXY(points) {\n return points.map((point) => ({ x: new Date(point.t), y: point.v }));\n}\n// --- chart-line-area ---------------------------------------------------------\nexport function ChartLineAreaWidget({ config, data }) {\n const series = asTimeseries(data);\n if (series === null || series.points.length === 0)\n return _jsx(BadShape, {});\n const comparison = config.compareToPrior && series.compare !== undefined ? toXY(series.compare) : undefined;\n return (_jsx(\"div\", { className: \"px-4 pb-4 compact:px-3 compact:pb-3\", \"data-widget\": \"chart-line-area\", children: _jsx(LineAreaChart, { data: toXY(series.points), ...(comparison !== undefined ? { comparison } : {}), labels: { label: config.title ?? 'Line chart' }, smooth: config.smooth, showAxis: config.axis, height: config.height }) }));\n}\n// --- chart-bar ---------------------------------------------------------------\n/** `timeseries` or `categorical` → BarChart categories + one series. */\nexport function barInputsOf(data, seriesName) {\n const ts = asTimeseries(data);\n if (ts !== null && ts.points.length > 0) {\n return {\n categories: ts.points.map((point) => formatShortDate(new Date(point.t))),\n series: [{ name: seriesName, values: timeseriesValues(ts) }],\n };\n }\n const cat = asCategorical(data);\n if (cat !== null && cat.items.length > 0) {\n return {\n categories: cat.items.map((item) => item.label),\n series: [{ name: seriesName, values: cat.items.map((item) => item.value) }],\n };\n }\n return null;\n}\nexport function ChartBarWidget({ config, data }) {\n const inputs = barInputsOf(data, config.title ?? 'Value');\n if (inputs === null)\n return _jsx(BadShape, {});\n return (_jsx(\"div\", { className: \"px-4 pb-4 compact:px-3 compact:pb-3\", \"data-widget\": \"chart-bar\", children: _jsx(BarChart, { categories: inputs.categories, series: inputs.series, labels: { label: config.title ?? 'Bar chart' }, highlight: config.highlight, showAxis: config.axis, showCategoryLabels: config.labels, barRadius: config.barRadius, height: config.height }) }));\n}\n// --- chart-donut ---------------------------------------------------------------\nexport function ChartDonutWidget({ config, data }) {\n const categorical = asCategorical(data);\n if (categorical === null || categorical.items.length === 0)\n return _jsx(BadShape, {});\n const opts = formatOptionsOf(config);\n return (_jsx(\"div\", { className: \"flex justify-center px-4 pb-4 compact:px-3 compact:pb-3\", \"data-widget\": \"chart-donut\", children: _jsx(DonutChart, { data: categorical.items.map((item) => ({ label: item.label, value: item.value })), labels: { label: config.title ?? 'Donut chart' }, maxSlices: config.maxSlices, showLegend: config.showLegend, size: config.size, format: (value) => formatMetricValue(value, config.metricFormat, opts), ...(config.centerLabel !== undefined ? { centerLabel: config.centerLabel } : {}), ...(config.centerMetric === 'none' ? { centerValue: '' } : {}) }) }));\n}\n// --- chart-sparkline ------------------------------------------------------------\n/** Shared `tone` → sparkline stroke tone. */\nexport function sparklineToneOf(tone) {\n switch (tone) {\n case 'pos':\n return 'positive';\n case 'danger':\n return 'danger';\n case 'muted':\n return 'muted';\n default:\n return 'accent';\n }\n}\nexport function ChartSparklineWidget({ config, data }) {\n const series = asTimeseries(data);\n if (series === null || series.points.length === 0)\n return _jsx(BadShape, {});\n return (_jsx(Sparkline, { data: timeseriesValues(series), variant: config.variant, emphasisLast: config.emphasisLast, tone: sparklineToneOf(config.tone), width: config.width, height: config.height, ...(config.title !== undefined ? { label: config.title } : {}) }));\n}\n//# sourceMappingURL=ChartWidgets.js.map"],"names":["descending","a","b","identity","d","pie","value","sortValues","sort","startAngle","constant","endAngle","tau","padAngle","data","i","n","array","j","k","sum","index","arcs","a0","da","a1","p","pa","v","_","defaultFormatX","x","formatShortDate","LineAreaChart","comparison","labels","height","smooth","showAxis","formatX","formatY","formatCompact","dir","a11yFallback","className","gradientId","useId","hoverIndex","setHoverIndex","useState","isTime","axisPad","_jsx","ChartSurface","innerWidth","innerHeight","rtl","mounted","xFor","dates","lo","hi","scale","timeScale","categoricalPointScale","ys","minY","maxY","extent","yTicks","niceTicks","yDomain","yScale","linearYScale","points","mainLine","linePath","mainArea","areaPath","comparisonLine","hover","hoverPoint","handlePointerMove","event","rect","localX","nearestIndexByX","tooltipWidth","tooltipSide","_jsxs","tick","_Fragment","layoutBars","options","categories","series","width","paddingInner","paddingOuter","groupGap","tickCount","all","s","minValue","maxValue","domainLo","span","yFor","baselineY","band","categoricalBandScale","bandwidth","seriesCount","slotWidth","bars","category","categoryIndex","bandStart","values","seriesIndex","slot","yValue","categoryCenters","label","highlightIndex","mode","best","GROUPED_FILLS","BarChart","highlight","showCategoryLabels","barRadius","grouped","layout","highlighted","bar","fill","center","bucketSlices","slices","maxSlices","otherLabel","kept","rest","donutArcs","outerRadius","thickness","cornerRadius","bucketed","total","pieLayout","arcGenerator","arc","piece","isOther","DonutChart","centerLabel","centerValue","size","showLegend","format","resolvedDir","useChartDir","useMountAnimation","shownCenterValue","slice","BadShape","toXY","point","ChartLineAreaWidget","config","asTimeseries","barInputsOf","seriesName","ts","timeseriesValues","cat","asCategorical","item","ChartBarWidget","inputs","ChartDonutWidget","categorical","opts","formatOptionsOf","formatMetricValue","sparklineToneOf","tone","ChartSparklineWidget","Sparkline"],"mappings":"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","x_google_ignoreList":[0,1,2]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{eT as g,j as t,a3 as h,a5 as x,eU as b,b as U,eV as _,eW as B,ds as C,bd as W,eX as V,eY as K,dA as H,eZ as q,cE as X,ar as D,M as m,e_ as G,b4 as F,e$ as Z,f0 as Y,r as N,f1 as J,u as E,f2 as k,f3 as Q,f4 as $,f5 as ee,dk as te,V as ae,ct as se,E as ne,f6 as R,f7 as L,f8 as re,f9 as le,fa as ce,fb as oe,bD as ie,T as de,as as ue,fc as pe,fd as xe,b9 as me}from"./index-PB1II0WV.js";import{D as y}from"./DeltaPill-dxlsGh-1.js";import{S as v}from"./Sparkline-Cvwo368J.js";import"./sparkline-2JUGDrMW.js";import"./stats-BNgXz5BD.js";const fe={activity:X,dollar:q,users:H,cart:K,gauge:V,database:W,zap:C,star:B,package:_,trending:U};function Pe({config:e,data:s}){const a=g(s);if(a===null)return t.jsx("p",{className:"px-4 pb-4 text-body-sm text-fg-muted",children:"Unexpected data shape."});const n=h(e),i=x(a.value,e.metricFormat,n),l=b(a,e.deltaMode,e.metricFormat,n),r=e.metricLabel??e.title,c=fe[e.iconName],o=e.showSparkline?a.spark:void 0;return t.jsxs("div",{className:"flex h-full flex-col justify-between gap-2 px-4 pb-4 compact:px-3 compact:pb-3","data-widget":"kpi-stat-card",children:[t.jsxs("div",{className:"flex items-start justify-between gap-2",children:[t.jsx(D,{tone:e.iconTone,size:"md",icon:t.jsx(c,{})}),l!==null&&t.jsx(y,{trend:l.trend,invertGood:e.invertDeltaGood,children:l.text})]}),t.jsxs("div",{className:"flex items-end justify-between gap-3",children:[t.jsxs("div",{className:"min-w-0",children:[r!==void 0&&t.jsx("p",{className:"truncate text-body-sm text-fg-muted",children:r}),t.jsx(m,{className:"block text-[26px] font-bold leading-tight text-fg compact:text-[22px]",children:i})]}),o!==void 0&&t.jsx(v,{data:o,variant:"bar",width:72,height:26,className:"shrink-0"})]})]})}function _e({config:e,data:s,onEvent:a}){const n=G(s);if(n===null)return t.jsx("p",{className:"px-4 pb-4 text-body-sm text-fg-muted",children:"Unexpected data shape."});const i=h(e),l=n.value,r=e.limit,c=r>0?l/r*100:0,o=c>=e.dangerThreshold?"danger":c>=e.warnThreshold?"warn":"accent",d=e.unit??n.unit,u=x(l,"compact",i),p=x(r,"compact",i),f=e.title??"Usage";return t.jsxs("div",{className:`flex h-full flex-col justify-center gap-2 px-4 pb-4 ${e.compact?"gap-1.5 px-3 pb-3":""}`,"data-widget":"usage-meter","data-tone":o,children:[t.jsxs("div",{className:"flex items-baseline justify-between gap-2",children:[t.jsx("span",{className:"truncate text-body-sm text-fg-muted",children:f}),t.jsxs(m,{className:"shrink-0 text-body-sm font-semibold text-fg",children:[u," ",t.jsx("span",{className:"font-normal text-fg-muted",children:"of"})," ",p,d===void 0?"":` ${d}`]})]}),t.jsx(F,{value:Math.min(l,r),max:r,tone:o,size:e.compact?"sm":"md",label:`${f}: ${u} of ${p}${d===void 0?"":` ${d}`}`}),e.ctaLabel!==void 0&&e.ctaHref!==void 0&&!e.compact&&t.jsx("button",{type:"button",className:"self-start text-body-sm font-medium text-accent hover:underline",onClick:()=>a({type:"drill-through",href:e.ctaHref}),children:e.ctaLabel})]})}function Be({config:e,data:s}){const a=g(s);if(a===null)return t.jsx("p",{className:"px-3 pb-3 text-body-sm text-fg-muted",children:"Unexpected data shape."});const n=h(e),i=x(a.value,e.metricFormat,n),l=b(a,e.deltaMode,e.metricFormat,n),r=e.metricLabel??e.title,c=e.showSparkline?a.spark:void 0;return t.jsxs("div",{className:"flex h-full flex-col justify-between gap-1.5 px-3 pb-3 compact:px-2.5 compact:pb-2.5","data-widget":"kpi-stat-tile-compact","data-columns":e.columns,children:[r===void 0?null:t.jsx("p",{className:"truncate text-micro font-bold uppercase tracking-wide text-fg-subtle",children:r}),t.jsxs("div",{className:"flex items-end justify-between gap-2",children:[t.jsxs("div",{className:"flex min-w-0 flex-col gap-1",children:[t.jsx(m,{className:"block truncate text-[19px] font-bold leading-none text-fg",children:i}),l===null?null:t.jsx(y,{trend:l.trend,invertGood:e.invertDeltaGood,className:"self-start",children:l.text})]}),c===void 0?null:t.jsx(v,{data:c,variant:"bar",width:48,height:22,className:"shrink-0"})]})]})}const he=900;function be(e){return 1-(1-e)**3}function je(e,s){const a=Y(),n=s&&!a&&typeof requestAnimationFrame=="function",[i,l]=N.useState(()=>n?0:e),r=N.useRef(0);return N.useEffect(()=>{if(!n){l(e);return}const c=performance.now(),o=d=>{const u=Math.min(1,(d-c)/he);l(e*be(u)),u<1&&(r.current=requestAnimationFrame(o))};return r.current=requestAnimationFrame(o),()=>cancelAnimationFrame(r.current)},[e,n]),i}function ve(e,s){if(s!==void 0)return s;const a=typeof e=="object"&&e!==null?e.goal:void 0;return typeof a=="number"&&Number.isFinite(a)&&a>0?a:void 0}function We({config:e,data:s}){const a=g(s),n=ve(s,e.goalValue),i=je(a?.value??0,e.countUp);if(a===null)return t.jsx("p",{className:"px-4 pb-4 text-body-sm text-fg-muted",children:"Unexpected data shape."});const l=h(e),r=x(i,e.metricFormat,l),c=b(a,e.deltaMode,e.metricFormat,l),o=e.metricLabel??e.title,d=a.spark?.slice(0,e.sparkBars),u=n===void 0?null:Z(a.value,n)*100,p=n===void 0?null:`${e.goalLabel??"Goal"} · ${x(n,e.metricFormat,l)}, ${x(u/100,"percent",l)}`;return t.jsxs("div",{className:"flex h-full flex-col justify-between gap-3 px-4 pb-4 compact:px-3 compact:pb-3","data-widget":"metric-hero",children:[t.jsxs("div",{className:"flex flex-col gap-1.5",children:[o===void 0?null:t.jsx("p",{className:"truncate text-body-sm text-fg-muted",children:o}),t.jsxs("div",{className:"flex flex-wrap items-center gap-2.5",children:[t.jsx(m,{"data-part":"hero-value",className:"text-[38px] font-bold leading-none text-fg compact:text-[30px]",children:r}),c===null?null:t.jsx(y,{trend:c.trend,invertGood:e.invertDeltaGood,children:c.text})]})]}),d===void 0||d.length===0?null:t.jsx(v,{data:d,variant:"bar",width:220,height:40,className:"w-full"}),p===null?null:t.jsxs("div",{className:"flex flex-col gap-1.5","data-part":"goal-track",children:[t.jsx("span",{className:"truncate text-caption text-fg-muted",children:p}),t.jsx(F,{value:u,max:100,tone:"accent",size:"md",label:p})]})]})}function S(e,s){if(typeof e!="object"||e===null)return null;const a=e[s];return typeof a=="number"&&Number.isFinite(a)?a:typeof a=="string"&&a.trim()!==""&&Number.isFinite(Number(a))?Number(a):null}function ge(e,s){const a=S(e,s.valueAField);return s.derivedFormula!=="none"?{a,b:a===null?null:J(a,s.derivedFormula,s.derivedOperand)}:{a,b:S(e,s.valueBField)}}function O({label:e,value:s}){return t.jsxs("div",{className:"flex min-w-0 flex-1 flex-col gap-1",children:[e===void 0?null:t.jsx("p",{className:"truncate text-body-sm text-fg-muted",children:e}),t.jsx(m,{className:"block truncate text-[24px] font-bold leading-tight text-fg compact:text-[20px]",children:s})]})}function Ve({config:e,data:s}){const{a,b:n}=ge(s,e);if(a===null&&n===null)return t.jsx("p",{className:"px-4 pb-4 text-body-sm text-fg-muted",children:"Unexpected data shape."});const i=h(e),l=a===null?"—":x(a,e.metricAFormat,i),r=n===null?"—":x(n,e.metricBFormat,i);return t.jsxs("div",{className:"flex h-full items-center gap-4 px-4 pb-4 compact:gap-3 compact:px-3 compact:pb-3","data-widget":"stat-pair-card","data-derived":e.derivedFormula,children:[t.jsx(O,{label:e.metricALabel,value:l}),t.jsx("div",{className:"flex min-w-0 flex-1 border-s border-border ps-4 compact:ps-3",children:t.jsx(O,{label:e.metricBLabel,value:r})})]})}const Ne={neutral:"stroke-fg-subtle",accent:"stroke-accent",pos:"stroke-pos",warn:"stroke-warn",danger:"stroke-danger",info:"stroke-info"},ye={neutral:"text-fg-muted",accent:"text-accent",pos:"text-pos",warn:"text-warn",danger:"text-danger",info:"text-info"};function we(e){const s=typeof e=="object"&&e!==null?e.avatars:void 0;return Array.isArray(s)?s.filter(a=>typeof a=="string"):[]}function ke(e,s){const a=typeof e=="object"&&e!==null?e.total:void 0;return typeof a=="number"&&Number.isFinite(a)&&a>0?a:s}function Ke({config:e,data:s}){const a=E(),n=g(s);if(n===null)return t.jsx("p",{className:"px-4 pb-4 text-body-sm text-fg-muted",children:"Unexpected data shape."});const i=h(e),l=k(n.value,e.max),r=Q(l,e.max,e.size),c=$(l,e.bands),o=c?.tone??ee(e.tone,"accent"),d=ke(s,e.max),u=b(n,e.deltaMode,e.metricFormat,i),p=e.centerFormat==="percent"?x(r.fraction,"percent",i):e.centerFormat==="fraction"?`${x(l,"plain",i)}/${x(e.max,"plain",i)}`:x(l,"plain",i),f=e.caption??c?.label,T=we(s);return t.jsxs("div",{className:"flex h-full flex-col items-center justify-center gap-3 px-4 pb-4 compact:gap-2 compact:px-3 compact:pb-3","data-widget":"gauge-ring","data-tone":o,children:[t.jsxs("div",{className:"relative shrink-0",children:[t.jsxs("svg",{width:r.size,height:r.size,viewBox:`0 0 ${r.size} ${r.size}`,role:"img","aria-label":`${f===void 0?"":`${f}: `}${p}`,"data-export-node":"",className:"-rotate-90",children:[t.jsx("circle",{cx:r.center,cy:r.center,r:r.radius,fill:"none",strokeWidth:r.thickness,className:"stroke-surface-3"}),t.jsx("circle",{"data-part":"gauge-value",cx:r.center,cy:r.center,r:r.radius,fill:"none",strokeWidth:r.thickness,strokeLinecap:"round",strokeDasharray:r.circumference,strokeDashoffset:a?r.dashOffset:r.circumference,className:`transition-[stroke-dashoffset] duration-700 ease-out motion-reduce:transition-none ${Ne[o]}`})]}),t.jsxs("div",{className:"absolute inset-0 flex flex-col items-center justify-center gap-0.5",children:[t.jsx(m,{"data-part":"gauge-center",className:"text-[20px] font-bold leading-none text-fg",children:p}),f===void 0?null:t.jsx("span",{"data-part":"gauge-caption",className:`text-micro font-bold uppercase tracking-wide ${ye[o]}`,children:f})]})]}),e.footer==="spent-of-total"&&t.jsxs("div",{className:"flex w-full items-center justify-between gap-2","data-part":"gauge-footer",children:[t.jsxs(m,{className:"truncate text-caption text-fg-muted",children:[e.spentLabel===void 0?"":`${e.spentLabel} `,t.jsx("span",{className:"font-semibold text-fg",children:x(l,e.metricFormat,i)}),` / ${x(d,e.metricFormat,i)}`,e.totalLabel===void 0?"":` ${e.totalLabel}`]}),u===null?null:t.jsx(y,{trend:u.trend,invertGood:e.invertDeltaGood,children:u.text})]}),e.footer==="avatar-stack"&&T.length>0&&t.jsx("div",{className:"flex w-full justify-center","data-part":"gauge-footer",children:t.jsx(te,{size:"sm",max:4,label:e.totalLabel,children:T.map(A=>t.jsx(ae,{name:A,size:"sm"},A))})})]})}const w={neutral:"stroke-fg-subtle",accent:"stroke-accent",pos:"stroke-pos",warn:"stroke-warn",danger:"stroke-danger",info:"stroke-info"},$e={neutral:"fill-fg-subtle",accent:"fill-accent",pos:"fill-pos",warn:"fill-warn",danger:"fill-danger",info:"fill-info"},I={neutral:"text-fg-muted",accent:"text-accent",pos:"text-pos",warn:"text-warn",danger:"text-danger",info:"text-info"};function P({value:e,max:s,bands:a,needle:n,width:i,mounted:l,label:r,tone:c}){const o=L(e,s,a,{width:i}),d=L(0,s,a,{width:i});return t.jsxs("svg",{width:o.width,height:o.height,viewBox:`0 0 ${o.width} ${o.height}`,role:"img","aria-label":r,"data-export-node":"",className:"overflow-visible",children:[t.jsx("path",{d:o.trackPath,fill:"none",strokeWidth:o.thickness,strokeLinecap:"round",className:"stroke-surface-3"}),o.bandSegments.map((u,p)=>t.jsx("path",{"data-part":"gauge-band","data-tone":u.tone,d:u.path,fill:"none",strokeWidth:o.thickness,className:`opacity-30 ${w[u.tone]}`},`${u.tone}-${p}`)),t.jsx("path",{"data-part":"gauge-value",d:l?o.valuePath:d.valuePath,fill:"none",strokeWidth:o.thickness,strokeLinecap:"round",className:w[c]}),n?t.jsxs("g",{"data-part":"gauge-needle",className:"transition-opacity duration-500 ease-out motion-reduce:transition-none",opacity:l?1:0,children:[t.jsx("line",{x1:o.cx,y1:o.cy,x2:l?o.needle.x:d.needle.x,y2:l?o.needle.y:d.needle.y,strokeWidth:2.5,strokeLinecap:"round",className:`transition-all duration-700 ease-out motion-reduce:transition-none ${w[c]}`}),t.jsx("circle",{cx:o.cx,cy:o.cy,r:4,className:$e[c]})]}):null]})}function Fe({label:e,value:s,max:a,bands:n,needle:i,mounted:l,text:r,tone:c}){return t.jsxs("div",{className:"flex flex-col items-center gap-1","data-part":"gauge-cell","data-tone":c,children:[t.jsx(P,{value:s,max:a,bands:n,needle:i,width:110,mounted:l,label:`${e}: ${r}`,tone:c}),t.jsx(m,{className:`text-body-sm font-bold leading-none ${I[c]}`,children:r}),t.jsx("span",{className:"max-w-full truncate text-micro uppercase tracking-wide text-fg-subtle",children:e})]})}function M(e,s,a){const n=x(e,s.valueFormat,a);return s.unit===void 0?n:`${n}${s.unit}`}const Te={1:"grid-cols-1",2:"grid-cols-2",3:"grid-cols-3",4:"grid-cols-4",5:"grid-cols-5"};function He({config:e,data:s}){const a=E(),n=h(e);if(e.cluster){const d=se(s);return d===null?t.jsx("p",{className:"px-4 pb-4 text-body-sm text-fg-muted",children:"Unexpected data shape."}):d.items.length===0?t.jsx(ne,{compact:!0,preset:"no-data",title:e.emptyTitle??"No gauges to show",body:e.emptyBody??"Services appear here as gauges once there is a reading for them."}):t.jsx("div",{className:`grid h-full content-center gap-3 px-4 pb-4 compact:px-3 compact:pb-3 ${Te[e.columns]??"grid-cols-2"}`,"data-widget":"gauge-arc","data-cluster":"true",children:d.items.map(u=>{const p=k(u.value,e.max),f=R(u.tone,$(p,e.bands)?.tone??"accent");return t.jsx(Fe,{label:u.label,value:p,max:e.max,bands:e.bands,needle:e.needle,mounted:a,text:M(p,e,n),tone:f},u.key)})})}const i=G(s);if(i===null)return t.jsx("p",{className:"px-4 pb-4 text-body-sm text-fg-muted",children:"Unexpected data shape."});const l=k(i.value,e.max),r=$(l,e.bands),c=r?.tone??"accent",o=M(l,e,n);return t.jsxs("div",{className:"flex h-full flex-col items-center justify-center gap-2 px-4 pb-4 compact:px-3 compact:pb-3","data-widget":"gauge-arc","data-cluster":"false","data-tone":c,children:[t.jsx(P,{value:l,max:e.max,bands:e.bands,needle:e.needle,width:180,mounted:a,label:`${r?.label===void 0?"":`${r.label}: `}${o}`,tone:c}),t.jsx(m,{"data-part":"gauge-value-text",className:"text-[22px] font-bold leading-none text-fg",children:o}),r?.label===void 0?null:t.jsx("span",{className:`text-micro font-bold uppercase tracking-wide ${I[c]}`,children:r.label})]})}function z({label:e,text:s,value:a,max:n,tone:i}){return t.jsxs("div",{className:"flex flex-col gap-1",children:[t.jsxs("div",{className:"flex items-baseline justify-between gap-2",children:[t.jsx("span",{className:"truncate text-caption text-fg-muted",children:e}),t.jsx(m,{className:"shrink-0 text-body-sm font-semibold text-fg",children:s})]}),t.jsx(F,{value:a,max:n,tone:i,size:"md",label:`${e}: ${s}`})]})}function qe({config:e,data:s}){const a=g(s);if(a===null)return t.jsx("p",{className:"px-4 pb-4 text-body-sm text-fg-muted",children:"Unexpected data shape."});const n=h(e),i=a.value,l=a.prior??0,r=Math.max(Math.abs(i),Math.abs(l))||1,c=b(a,"abs",e.metricFormat,n),o=b(a,"pct",e.metricFormat,n),d=c===null||c.trend==="flat"?e.flatLabel??"flat":c.trend==="up"?e.higherLabel??"higher":e.lowerLabel??"lower",u=c===null||c.trend==="flat"?null:e.invertDeltaGood?c.trend==="down":c.trend==="up",p=u===null?"text-fg-muted":u?"text-pos":"text-danger";return t.jsxs("div",{className:"flex h-full flex-col justify-center gap-3 px-4 pb-4 compact:gap-2 compact:px-3 compact:pb-3","data-widget":"period-comparison","data-trend":c?.trend??"flat",children:[t.jsx(z,{label:e.periodALabel??"This period",text:x(i,e.metricFormat,n),value:Math.abs(i),max:r,tone:"accent"}),t.jsx(z,{label:e.periodBLabel??"Last period",text:x(l,e.metricFormat,n),value:Math.abs(l),max:r,tone:"neutral"}),c===null?null:t.jsxs("p",{"data-part":"diff-footer",className:`truncate text-caption font-semibold ${p}`,children:[t.jsx(m,{children:c.text}),o===null?"":t.jsx(m,{children:` (${o.text})`}),` ${d}`]})]})}function Ae(e){if(typeof e!="object"||e===null||Array.isArray(e))return{};const s={};for(const[a,n]of Object.entries(e))(typeof n=="number"&&Number.isFinite(n)||typeof n=="string")&&(s[a]=n);return s}function Xe({config:e,data:s}){const a=Ae(s),n=a[e.zeroKey],i=typeof n=="number"&&n===0,l=i&&e.zeroStateText!==void 0?e.zeroStateText:re(e.template,a,e.metricFormat,h(e));return t.jsx(m,{"data-widget":"micro-kpi-subtitle","data-zero":i,className:"truncate text-caption text-fg-muted",children:l})}const Le={sparkles:()=>t.jsx(ue,{}),"trend-up":()=>t.jsx(U,{}),"trend-down":()=>t.jsx(de,{}),alert:()=>t.jsx(ie,{}),info:()=>t.jsx(oe,{}),target:()=>t.jsx(ce,{}),zap:()=>t.jsx(C,{}),lightbulb:()=>t.jsx(le,{})};function Se(e){return Le[e]()}function j(e,s){const a=e[s];return typeof a=="string"&&a!==""?a:void 0}function Oe(e,s){const a=e[s];return typeof a=="number"&&Number.isFinite(a)?a:void 0}function Me(e,s){const a=typeof e=="object"&&e!==null&&Array.isArray(e.rows)?e.rows:[],n=[];for(const[l,r]of a.entries()){if(typeof r!="object"||r===null)continue;const c=r,o=j(c,s.titleField);if(o===void 0)continue;const d=c[s.sparkField],u=Array.isArray(d)?d.filter(p=>typeof p=="number"&&Number.isFinite(p)):void 0;n.push({id:j(c,s.idField)??`insight-${l}`,icon:xe(c[s.iconField]),tone:R(c[s.toneField]),tag:j(c,s.tagField),title:o,body:j(c,s.bodyField),spark:u!==void 0&&u.length>0?u:void 0,href:j(c,s.hrefField),score:Oe(c,s.scoreField)})}return n.map((l,r)=>({insight:l,index:r})).sort((l,r)=>{const c=l.insight.score,o=r.insight.score;return c===void 0&&o===void 0?l.index-r.index:c===void 0?1:o===void 0?-1:o===c?l.index-r.index:o-c}).map(({insight:l})=>l).slice(0,s.pool)}function ze(e,s,a){if(e.length===0)return[];const n=Math.min(a,e.length);return Array.from({length:n},(i,l)=>e[(s+l)%e.length])}function Ue({insight:e,applyLabel:s,onApply:a,card:n}){return t.jsxs("div",{"data-part":n?"insight-card":"insight-row","data-tone":e.tone,className:n?"flex flex-col gap-2 rounded-lg border border-border bg-surface-2 p-3":"flex items-start gap-2.5",children:[t.jsxs("div",{className:"flex items-start gap-2.5",children:[t.jsx(D,{tone:e.tone,size:"sm",icon:Se(e.icon)}),t.jsxs("div",{className:"flex min-w-0 flex-1 flex-col gap-1",children:[e.tag===void 0?null:t.jsx(me,{tone:e.tone,className:"self-start",children:e.tag}),t.jsx("p",{className:"text-body-sm font-bold leading-snug text-fg",children:e.title}),e.body===void 0?null:t.jsx("p",{className:"text-caption leading-snug text-fg-muted",children:e.body})]}),e.spark===void 0||n?null:t.jsx(v,{data:e.spark,variant:"line",width:56,height:22,className:"mt-0.5 shrink-0"})]}),n&&e.spark!==void 0?t.jsx(v,{data:e.spark,variant:"line",width:120,height:24,className:"w-full"}):null,s===void 0?null:t.jsx("button",{type:"button",onClick:()=>a(e),className:"self-start text-caption font-bold text-accent hover:underline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent",children:s})]})}const Ce={1:"grid-cols-1",2:"grid-cols-2",3:"grid-cols-3"};function Ze({config:e,data:s,onEvent:a}){const[n,i]=N.useState(0),l=Me(s,e),r=ze(l,n,e.count);if(r.length===0)return t.jsx("p",{className:"px-4 pb-4 text-body-sm text-fg-muted",children:"Unexpected data shape."});const c=e.refreshable&&l.length>e.count,o=d=>{const u=d.href??e.href;u!==void 0&&a({type:"drill-through",href:u})};return t.jsxs("div",{className:"flex h-full flex-col gap-3 overflow-y-auto px-4 pb-4 compact:gap-2 compact:px-3 compact:pb-3","data-widget":"auto-insights","data-variant":e.variant,children:[c?t.jsx("div",{className:"flex justify-end",children:t.jsxs("button",{type:"button","data-part":"insights-refresh",onClick:()=>i(d=>(d+e.count)%l.length),className:"inline-flex items-center gap-1 rounded-md px-1.5 py-1 text-caption font-bold text-fg-muted hover:text-fg focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent",children:[t.jsx(pe,{className:"size-3","aria-hidden":"true"}),e.refreshLabel??"Refresh"]})}):null,t.jsx("div",{className:e.variant==="cards"?`grid gap-2.5 ${Ce[e.columns]??"grid-cols-2"}`:"flex flex-col gap-3",children:r.map(d=>t.jsx(Ue,{insight:d,applyLabel:e.applyLabel,onApply:o,card:e.variant==="cards"},d.id))}),c?t.jsx(m,{"data-part":"insights-position",className:"text-micro text-fg-subtle",children:`${Math.floor(n/e.count)+1}/${Math.ceil(l.length/e.count)}`}):null]})}export{Ze as AutoInsights,He as GaugeArc,Ke as GaugeRing,Pe as KpiStatCard,Be as KpiStatTileCompact,We as MetricHero,Xe as MicroKpiSubtitle,qe as PeriodComparison,Ve as StatPairCard,_e as UsageMeter};
|
|
2
|
+
//# sourceMappingURL=components-C4-O3_gD.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"components-C4-O3_gD.js","sources":["../../../../packages/widgets/dist/families/kpi/KpiStatCard.js","../../../../packages/widgets/dist/families/kpi/UsageMeter.js","../../../../packages/widgets/dist/families/kpi/KpiStatTileCompact.js","../../../../packages/widgets/dist/families/kpi/MetricHero.js","../../../../packages/widgets/dist/families/kpi/StatPairCard.js","../../../../packages/widgets/dist/families/kpi/GaugeRing.js","../../../../packages/widgets/dist/families/kpi/GaugeArc.js","../../../../packages/widgets/dist/families/kpi/PeriodComparison.js","../../../../packages/widgets/dist/families/kpi/MicroKpiSubtitle.js","../../../../packages/widgets/dist/families/kpi/kpi-icons.js","../../../../packages/widgets/dist/families/kpi/AutoInsights.js"],"sourcesContent":["import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * `kpi-stat-card` — the workhorse metric card (annex §1, 04 §11): tinted\n * icon tile, label, large mono value, optional delta pill (pos/danger tone\n * with the \"down-is-good\" inversion flag), optional 7–8 bar mini sparkline\n * with the last bar at full accent. Renders only the loaded state —\n * skeleton/empty/error are WidgetFrame's job.\n */\nimport { DeltaPill, IconTile, MonoText } from '@adminium/ui';\nimport { Sparkline } from '@adminium/charts';\nimport { Activity, CircleDollarSign, Database, Gauge, Package, ShoppingCart, Star, TrendingUp, Users, Zap, } from 'lucide-react';\nimport { computeDelta, formatMetricValue, formatOptionsOf } from '../../lib/format.js';\nimport { asMetricDelta } from '../../lib/shapes.js';\n// Config schema + deterministic demo payload live in the pure `kpi-config`\n// module so the registry metadata graph never reaches this component file\n// (04 §2.3). Re-exported here to keep existing import points stable.\nexport { kpiStatCardConfigSchema, kpiStatCardDemoData } from './kpi-config.js';\nconst ICONS = {\n activity: Activity,\n dollar: CircleDollarSign,\n users: Users,\n cart: ShoppingCart,\n gauge: Gauge,\n database: Database,\n zap: Zap,\n star: Star,\n package: Package,\n trending: TrendingUp,\n};\nexport function KpiStatCard({ config, data }) {\n const metric = asMetricDelta(data);\n if (metric === null) {\n return _jsx(\"p\", { className: \"px-4 pb-4 text-body-sm text-fg-muted\", children: \"Unexpected data shape.\" });\n }\n const opts = formatOptionsOf(config);\n const value = formatMetricValue(metric.value, config.metricFormat, opts);\n const delta = computeDelta(metric, config.deltaMode, config.metricFormat, opts);\n const label = config.metricLabel ?? config.title;\n const Icon = ICONS[config.iconName];\n const spark = config.showSparkline ? metric.spark : undefined;\n return (_jsxs(\"div\", { className: \"flex h-full flex-col justify-between gap-2 px-4 pb-4 compact:px-3 compact:pb-3\", \"data-widget\": \"kpi-stat-card\", children: [_jsxs(\"div\", { className: \"flex items-start justify-between gap-2\", children: [_jsx(IconTile, { tone: config.iconTone, size: \"md\", icon: _jsx(Icon, {}) }), delta !== null && (_jsx(DeltaPill, { trend: delta.trend, invertGood: config.invertDeltaGood, children: delta.text }))] }), _jsxs(\"div\", { className: \"flex items-end justify-between gap-3\", children: [_jsxs(\"div\", { className: \"min-w-0\", children: [label !== undefined && (_jsx(\"p\", { className: \"truncate text-body-sm text-fg-muted\", children: label })), _jsx(MonoText, { className: \"block text-[26px] font-bold leading-tight text-fg compact:text-[22px]\", children: value })] }), spark !== undefined && (_jsx(Sparkline, { data: spark, variant: \"bar\", width: 72, height: 26, className: \"shrink-0\" }))] })] }));\n}\n//# sourceMappingURL=KpiStatCard.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * `usage-meter` — quota-consumption card (annex §1): label, \"used of\n * limit\" mono text, horizontal progress bar; bar and caption flip to\n * warn/danger tones past the thresholds. Powers billing quotas, storage\n * and AI-credit sidebars.\n */\nimport { MonoText, ProgressBar } from '@adminium/ui';\nimport { formatMetricValue, formatOptionsOf } from '../../lib/format.js';\nimport { asSingleMetric } from '../../lib/shapes.js';\n// Config schema + deterministic demo payload live in the pure `kpi-config`\n// module so the registry metadata graph never reaches this component file\n// (04 §2.3). Re-exported here to keep existing import points stable.\nexport { usageMeterConfigSchema, usageMeterDemoData } from './kpi-config.js';\nexport function UsageMeter({ config, data, onEvent }) {\n const metric = asSingleMetric(data);\n if (metric === null) {\n return _jsx(\"p\", { className: \"px-4 pb-4 text-body-sm text-fg-muted\", children: \"Unexpected data shape.\" });\n }\n const opts = formatOptionsOf(config);\n const used = metric.value;\n const limit = config.limit;\n const pct = limit > 0 ? (used / limit) * 100 : 0;\n const tone = pct >= config.dangerThreshold ? 'danger' : pct >= config.warnThreshold ? 'warn' : 'accent';\n const unit = config.unit ?? metric.unit;\n const usedText = formatMetricValue(used, 'compact', opts);\n const limitText = formatMetricValue(limit, 'compact', opts);\n const label = config.title ?? 'Usage';\n return (_jsxs(\"div\", { className: `flex h-full flex-col justify-center gap-2 px-4 pb-4 ${config.compact ? 'gap-1.5 px-3 pb-3' : ''}`, \"data-widget\": \"usage-meter\", \"data-tone\": tone, children: [_jsxs(\"div\", { className: \"flex items-baseline justify-between gap-2\", children: [_jsx(\"span\", { className: \"truncate text-body-sm text-fg-muted\", children: label }), _jsxs(MonoText, { className: \"shrink-0 text-body-sm font-semibold text-fg\", children: [usedText, \" \", _jsx(\"span\", { className: \"font-normal text-fg-muted\", children: \"of\" }), \" \", limitText, unit === undefined ? '' : ` ${unit}`] })] }), _jsx(ProgressBar, { value: Math.min(used, limit), max: limit, tone: tone, size: config.compact ? 'sm' : 'md', label: `${label}: ${usedText} of ${limitText}${unit === undefined ? '' : ` ${unit}`}` }), config.ctaLabel !== undefined && config.ctaHref !== undefined && !config.compact && (_jsx(\"button\", { type: \"button\", className: \"self-start text-body-sm font-medium text-accent hover:underline\", onClick: () => onEvent({ type: 'drill-through', href: config.ctaHref }), children: config.ctaLabel }))] }));\n}\n//# sourceMappingURL=UsageMeter.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * `kpi-stat-tile-compact` (annex §1) — the slim tile variant of the workhorse\n * card, for dense \"power\" rows of 4–6: uppercase micro-label, mono value, a tiny\n * delta chip, and a 22px 6-bar sparkline. No icon tile (that is what separates it\n * from `kpi-stat-card`). Renders only the loaded state — skeleton/empty/error\n * are WidgetFrame's job.\n */\nimport { DeltaPill, MonoText } from '@adminium/ui';\nimport { Sparkline } from '@adminium/charts';\nimport { computeDelta, formatMetricValue, formatOptionsOf } from '../../lib/format.js';\nimport { asMetricDelta } from '../../lib/shapes.js';\n// Config schema + deterministic demo payload live in the pure `kpi-config`\n// module so the registry metadata graph never reaches this component file\n// (04 §2.3). Re-exported here to keep existing import points stable.\nexport { kpiStatTileCompactConfigSchema, kpiStatTileCompactDemoData } from './kpi-config.js';\nexport function KpiStatTileCompact({ config, data }) {\n const metric = asMetricDelta(data);\n if (metric === null) {\n return _jsx(\"p\", { className: \"px-3 pb-3 text-body-sm text-fg-muted\", children: \"Unexpected data shape.\" });\n }\n const opts = formatOptionsOf(config);\n const value = formatMetricValue(metric.value, config.metricFormat, opts);\n const delta = computeDelta(metric, config.deltaMode, config.metricFormat, opts);\n const label = config.metricLabel ?? config.title;\n const spark = config.showSparkline ? metric.spark : undefined;\n return (_jsxs(\"div\", { className: \"flex h-full flex-col justify-between gap-1.5 px-3 pb-3 compact:px-2.5 compact:pb-2.5\", \"data-widget\": \"kpi-stat-tile-compact\", \"data-columns\": config.columns, children: [label === undefined ? null : (_jsx(\"p\", { className: \"truncate text-micro font-bold uppercase tracking-wide text-fg-subtle\", children: label })), _jsxs(\"div\", { className: \"flex items-end justify-between gap-2\", children: [_jsxs(\"div\", { className: \"flex min-w-0 flex-col gap-1\", children: [_jsx(MonoText, { className: \"block truncate text-[19px] font-bold leading-none text-fg\", children: value }), delta === null ? null : (_jsx(DeltaPill, { trend: delta.trend, invertGood: config.invertDeltaGood, className: \"self-start\", children: delta.text }))] }), spark === undefined ? null : (_jsx(Sparkline, { data: spark, variant: \"bar\", width: 48, height: 22, className: \"shrink-0\" }))] })] }));\n}\n//# sourceMappingURL=KpiStatTileCompact.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * `metric-hero` (annex §1) — the oversized single metric: a\n * `requestAnimationFrame` count-up to the bound value, a delta pill, a spark\n * strip, and a goal progress track (\"Goal · $650k, 74%\"). Renders only the\n * loaded state — skeleton/empty/error are WidgetFrame's job.\n *\n * REDUCED MOTION (04 §7.5, mandatory): `prefers-reduced-motion: reduce` skips\n * the count-up entirely and paints the final value on the first frame — an\n * animated number is exactly the kind of motion the query exists to suppress,\n * and a KPI that \"spins up\" is unreadable to a vestibular-sensitive user. The\n * hook seeds its state from the query rather than transitioning to it, so the\n * intermediate values never render even once.\n */\nimport { DeltaPill, MonoText, ProgressBar } from '@adminium/ui';\nimport { Sparkline, prefersReducedMotion } from '@adminium/charts';\nimport { useEffect, useRef, useState } from 'react';\nimport { computeDelta, formatMetricValue, formatOptionsOf } from '../../lib/format.js';\nimport { asMetricDelta } from '../../lib/shapes.js';\nimport { fractionOf } from './kpi-lib.js';\n// Config schema + deterministic demo payload live in the pure `kpi-config`\n// module so the registry metadata graph never reaches this component file\n// (04 §2.3). Re-exported here to keep existing import points stable.\nexport { metricHeroConfigSchema, metricHeroDemoData } from './kpi-config.js';\n/** Count-up duration in ms (research/design-system.md §4.3 — \"hero\" tier). */\nconst COUNT_UP_MS = 900;\n/** Cubic ease-out — fast start, settled landing. */\nfunction easeOut(t) {\n return 1 - (1 - t) ** 3;\n}\n/**\n * Animate 0 → `target` over `COUNT_UP_MS` via rAF. Returns `target` immediately\n * when the caller disables it, when the browser has no rAF (SSR / the Node test\n * env), or under `prefers-reduced-motion`.\n */\nexport function useCountUp(target, enabled) {\n const reduced = prefersReducedMotion();\n const animate = enabled && !reduced && typeof requestAnimationFrame === 'function';\n const [value, setValue] = useState(() => (animate ? 0 : target));\n const frameRef = useRef(0);\n useEffect(() => {\n if (!animate) {\n setValue(target);\n return undefined;\n }\n const start = performance.now();\n const tick = (now) => {\n const t = Math.min(1, (now - start) / COUNT_UP_MS);\n setValue(target * easeOut(t));\n if (t < 1)\n frameRef.current = requestAnimationFrame(tick);\n };\n frameRef.current = requestAnimationFrame(tick);\n return () => cancelAnimationFrame(frameRef.current);\n }, [target, animate]);\n return value;\n}\n/** The goal scalar off the payload (config wins when set). */\nfunction goalOf(data, configGoal) {\n if (configGoal !== undefined)\n return configGoal;\n const raw = typeof data === 'object' && data !== null ? data.goal : undefined;\n return typeof raw === 'number' && Number.isFinite(raw) && raw > 0 ? raw : undefined;\n}\nexport function MetricHero({ config, data }) {\n const metric = asMetricDelta(data);\n const goal = goalOf(data, config.goalValue);\n // Hooks must run before any early return (rules-of-hooks); a malformed\n // payload counts up to 0 and is discarded by the guard below.\n const animated = useCountUp(metric?.value ?? 0, config.countUp);\n if (metric === null) {\n return _jsx(\"p\", { className: \"px-4 pb-4 text-body-sm text-fg-muted\", children: \"Unexpected data shape.\" });\n }\n const opts = formatOptionsOf(config);\n const value = formatMetricValue(animated, config.metricFormat, opts);\n const delta = computeDelta(metric, config.deltaMode, config.metricFormat, opts);\n const label = config.metricLabel ?? config.title;\n const spark = metric.spark?.slice(0, config.sparkBars);\n const goalPct = goal === undefined ? null : fractionOf(metric.value, goal) * 100;\n const goalText = goal === undefined\n ? null\n : `${config.goalLabel ?? 'Goal'} · ${formatMetricValue(goal, config.metricFormat, opts)}, ${formatMetricValue(goalPct / 100, 'percent', opts)}`;\n return (_jsxs(\"div\", { className: \"flex h-full flex-col justify-between gap-3 px-4 pb-4 compact:px-3 compact:pb-3\", \"data-widget\": \"metric-hero\", children: [_jsxs(\"div\", { className: \"flex flex-col gap-1.5\", children: [label === undefined ? null : _jsx(\"p\", { className: \"truncate text-body-sm text-fg-muted\", children: label }), _jsxs(\"div\", { className: \"flex flex-wrap items-center gap-2.5\", children: [_jsx(MonoText, { \"data-part\": \"hero-value\", className: \"text-[38px] font-bold leading-none text-fg compact:text-[30px]\", children: value }), delta === null ? null : (_jsx(DeltaPill, { trend: delta.trend, invertGood: config.invertDeltaGood, children: delta.text }))] })] }), spark === undefined || spark.length === 0 ? null : (_jsx(Sparkline, { data: spark, variant: \"bar\", width: 220, height: 40, className: \"w-full\" })), goalText === null ? null : (_jsxs(\"div\", { className: \"flex flex-col gap-1.5\", \"data-part\": \"goal-track\", children: [_jsx(\"span\", { className: \"truncate text-caption text-fg-muted\", children: goalText }), _jsx(ProgressBar, { value: goalPct, max: 100, tone: \"accent\", size: \"md\", label: goalText })] }))] }));\n}\n//# sourceMappingURL=MetricHero.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * `stat-pair-card` (annex §1) — two large mono metrics side by side with a\n * vertical divider (MRR / LTV, where LTV may be a derived formula over MRR).\n * Renders only the loaded state — skeleton/empty/error are WidgetFrame's job.\n *\n * RTL: the divider is a logical `border-s` on the second column, so the pair\n * genuinely swaps sides under `dir=\"rtl\"` and the rule lands between them either\n * way. `flex` handles the ordering; nothing here is physically positioned.\n */\nimport { MonoText } from '@adminium/ui';\nimport { formatMetricValue, formatOptionsOf } from '../../lib/format.js';\nimport { applyDerived } from './kpi-lib.js';\n// Config schema + deterministic demo payload live in the pure `kpi-config`\n// module so the registry metadata graph never reaches this component file\n// (04 §2.3). Re-exported here to keep existing import points stable.\nexport { statPairCardConfigSchema, statPairCardDemoData } from './kpi-config.js';\n/** Read a numeric scalar off the payload by configured field name (04 §5). */\nexport function scalarAt(data, field) {\n if (typeof data !== 'object' || data === null)\n return null;\n const raw = data[field];\n if (typeof raw === 'number' && Number.isFinite(raw))\n return raw;\n if (typeof raw === 'string' && raw.trim() !== '' && Number.isFinite(Number(raw)))\n return Number(raw);\n return null;\n}\n/**\n * The two sides of the pair. Side B is the derived formula's result when one is\n * configured, else the payload's `valueBField`. Either side may be null — an\n * unbound column renders an em-dash rather than \"NaN\".\n */\nexport function statPairValues(data, config) {\n const a = scalarAt(data, config.valueAField);\n if (config.derivedFormula !== 'none') {\n return { a, b: a === null ? null : applyDerived(a, config.derivedFormula, config.derivedOperand) };\n }\n return { a, b: scalarAt(data, config.valueBField) };\n}\nfunction Side({ label, value }) {\n return (_jsxs(\"div\", { className: \"flex min-w-0 flex-1 flex-col gap-1\", children: [label === undefined ? null : _jsx(\"p\", { className: \"truncate text-body-sm text-fg-muted\", children: label }), _jsx(MonoText, { className: \"block truncate text-[24px] font-bold leading-tight text-fg compact:text-[20px]\", children: value })] }));\n}\nexport function StatPairCard({ config, data }) {\n const { a, b } = statPairValues(data, config);\n if (a === null && b === null) {\n return _jsx(\"p\", { className: \"px-4 pb-4 text-body-sm text-fg-muted\", children: \"Unexpected data shape.\" });\n }\n const opts = formatOptionsOf(config);\n const textA = a === null ? '—' : formatMetricValue(a, config.metricAFormat, opts);\n const textB = b === null ? '—' : formatMetricValue(b, config.metricBFormat, opts);\n return (_jsxs(\"div\", { className: \"flex h-full items-center gap-4 px-4 pb-4 compact:gap-3 compact:px-3 compact:pb-3\", \"data-widget\": \"stat-pair-card\", \"data-derived\": config.derivedFormula, children: [_jsx(Side, { label: config.metricALabel, value: textA }), _jsx(\"div\", { className: \"flex min-w-0 flex-1 border-s border-border ps-4 compact:ps-3\", children: _jsx(Side, { label: config.metricBLabel, value: textB }) })] }));\n}\n//# sourceMappingURL=StatPairCard.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * `gauge-ring` (annex §1) — an SVG circle with an animated `stroke-dashoffset`\n * sweep, a center value and a status caption (\"86/100 Healthy\", \"73% of 5M\n * rows\"), plus the annex's footer variants (spent-of-total figures + trend pill,\n * or an avatar stack). Doubles as the budget/allocation donut gauge. Renders only\n * the loaded state — skeleton/empty/error are WidgetFrame's job.\n *\n * COLOUR: the sweep is tinted by the band the value falls in, and bands name\n * semantic TONES (`pos`/`warn`/`danger`/…), never raw colours — so a gauge\n * re-themes with the app and stays legible in dark mode\n * (research/widget-registry.md Conventions: \"CSS variables only\").\n *\n * RTL: the ring geometry does NOT mirror. A clockwise sweep is rotational, not\n * directional — mirroring it would read as \"the gauge runs backwards\", exactly\n * as it would for a donut (@adminium/charts geometry/radialBar.ts states the\n * same policy verbatim). The caption, footer figures and avatar stack around it\n * are ordinary logical-property flex and flip normally.\n *\n * REDUCED MOTION (04 §7.5, mandatory): the sweep animates from empty to its\n * value on mount via `useMountAnimation`, which paints the final frame\n * immediately under `prefers-reduced-motion: reduce`.\n */\nimport { Avatar, AvatarStack, DeltaPill, MonoText } from '@adminium/ui';\nimport { useMountAnimation } from '@adminium/charts';\nimport { computeDelta, formatMetricValue, formatOptionsOf } from '../../lib/format.js';\nimport { asMetricDelta } from '../../lib/shapes.js';\nimport { bandFor, clampValue, gaugeRingGeometry, sharedToneOf } from './kpi-lib.js';\n// Config schema + deterministic demo payload live in the pure `kpi-config`\n// module so the registry metadata graph never reaches this component file\n// (04 §2.3). Re-exported here to keep existing import points stable.\nexport { gaugeRingConfigSchema, gaugeRingDemoData } from './kpi-config.js';\n/**\n * Tone → the `stroke` utility for the value sweep. A lookup table (not an\n * interpolated class name) so Tailwind's scanner sees every literal and never\n * tree-shakes a tone that only appears at runtime.\n */\nconst STROKE_TONE = {\n neutral: 'stroke-fg-subtle',\n accent: 'stroke-accent',\n pos: 'stroke-pos',\n warn: 'stroke-warn',\n danger: 'stroke-danger',\n info: 'stroke-info',\n};\n/** Tone → the caption's text utility. */\nconst TEXT_TONE = {\n neutral: 'text-fg-muted',\n accent: 'text-accent',\n pos: 'text-pos',\n warn: 'text-warn',\n danger: 'text-danger',\n info: 'text-info',\n};\n/** The avatar names off the payload (the annex's avatar-stack footer). */\nfunction avatarsOf(data) {\n const raw = typeof data === 'object' && data !== null ? data.avatars : undefined;\n return Array.isArray(raw) ? raw.filter((name) => typeof name === 'string') : [];\n}\n/** The denominator off the payload (annex \"+ optional numerator/denominator\"). */\nfunction totalOf(data, max) {\n const raw = typeof data === 'object' && data !== null ? data.total : undefined;\n return typeof raw === 'number' && Number.isFinite(raw) && raw > 0 ? raw : max;\n}\nexport function GaugeRing({ config, data }) {\n const mounted = useMountAnimation();\n const metric = asMetricDelta(data);\n if (metric === null) {\n return _jsx(\"p\", { className: \"px-4 pb-4 text-body-sm text-fg-muted\", children: \"Unexpected data shape.\" });\n }\n const opts = formatOptionsOf(config);\n const value = clampValue(metric.value, config.max);\n const geometry = gaugeRingGeometry(value, config.max, config.size);\n const band = bandFor(value, config.bands);\n // The band the value lands in wins; the shared `tone` override only applies\n // to a band-less gauge (an empty `bands` array).\n const tone = band?.tone ?? sharedToneOf(config.tone, 'accent');\n const total = totalOf(data, config.max);\n const delta = computeDelta(metric, config.deltaMode, config.metricFormat, opts);\n const center = config.centerFormat === 'percent'\n ? formatMetricValue(geometry.fraction, 'percent', opts)\n : config.centerFormat === 'fraction'\n ? `${formatMetricValue(value, 'plain', opts)}/${formatMetricValue(config.max, 'plain', opts)}`\n : formatMetricValue(value, 'plain', opts);\n const caption = config.caption ?? band?.label;\n const avatars = avatarsOf(data);\n return (_jsxs(\"div\", { className: \"flex h-full flex-col items-center justify-center gap-3 px-4 pb-4 compact:gap-2 compact:px-3 compact:pb-3\", \"data-widget\": \"gauge-ring\", \"data-tone\": tone, children: [_jsxs(\"div\", { className: \"relative shrink-0\", children: [_jsxs(\"svg\", { width: geometry.size, height: geometry.size, viewBox: `0 0 ${geometry.size} ${geometry.size}`, role: \"img\", \"aria-label\": `${caption === undefined ? '' : `${caption}: `}${center}`, \"data-export-node\": \"\", \n // Rotation is direction-neutral: the sweep starts at 12 o'clock in\n // LTR and RTL alike (see the module note).\n className: \"-rotate-90\", children: [_jsx(\"circle\", { cx: geometry.center, cy: geometry.center, r: geometry.radius, fill: \"none\", strokeWidth: geometry.thickness, className: \"stroke-surface-3\" }), _jsx(\"circle\", { \"data-part\": \"gauge-value\", cx: geometry.center, cy: geometry.center, r: geometry.radius, fill: \"none\", strokeWidth: geometry.thickness, strokeLinecap: \"round\", strokeDasharray: geometry.circumference, \n // Starts fully offset (empty) and settles to the value; under\n // reduced motion `mounted` is true on the first render, so the\n // final frame paints immediately and the transition never runs.\n strokeDashoffset: mounted ? geometry.dashOffset : geometry.circumference, className: `transition-[stroke-dashoffset] duration-700 ease-out motion-reduce:transition-none ${STROKE_TONE[tone]}` })] }), _jsxs(\"div\", { className: \"absolute inset-0 flex flex-col items-center justify-center gap-0.5\", children: [_jsx(MonoText, { \"data-part\": \"gauge-center\", className: \"text-[20px] font-bold leading-none text-fg\", children: center }), caption === undefined ? null : (_jsx(\"span\", { \"data-part\": \"gauge-caption\", className: `text-micro font-bold uppercase tracking-wide ${TEXT_TONE[tone]}`, children: caption }))] })] }), config.footer === 'spent-of-total' && (_jsxs(\"div\", { className: \"flex w-full items-center justify-between gap-2\", \"data-part\": \"gauge-footer\", children: [_jsxs(MonoText, { className: \"truncate text-caption text-fg-muted\", children: [config.spentLabel === undefined ? '' : `${config.spentLabel} `, _jsx(\"span\", { className: \"font-semibold text-fg\", children: formatMetricValue(value, config.metricFormat, opts) }), ` / ${formatMetricValue(total, config.metricFormat, opts)}`, config.totalLabel === undefined ? '' : ` ${config.totalLabel}`] }), delta === null ? null : (_jsx(DeltaPill, { trend: delta.trend, invertGood: config.invertDeltaGood, children: delta.text }))] })), config.footer === 'avatar-stack' && avatars.length > 0 && (_jsx(\"div\", { className: \"flex w-full justify-center\", \"data-part\": \"gauge-footer\", children: _jsx(AvatarStack, { size: \"sm\", max: 4, label: config.totalLabel, children: avatars.map((name) => (_jsx(Avatar, { name: name, size: \"sm\" }, name))) }) }))] }));\n}\n//# sourceMappingURL=GaugeRing.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * `gauge-arc` (annex §1) — a 180° speedometer arc with coloured qualitative\n * bands and a needle (or a plain half-arc dasharray gauge with `needle: false`),\n * plus the annex's grid-of-gauges CLUSTER mode (2×2 / 5-up SLA + system-health\n * clusters). Renders only the loaded state — skeleton/empty/error are\n * WidgetFrame's job.\n *\n * TWO SHAPES, ONE WIDGET (04 §3): the definition declares\n * `['single-metric', 'categorical']` because `cluster` is a CONFIG flag — the\n * single gauge binds a score, the cluster binds a {label, pct, tone} list. The\n * component reads whichever its config selects; `gaugeArcDemoData` emits a\n * payload satisfying both.\n *\n * COLOUR: bands name semantic TONES, never raw colours — a gauge re-themes with\n * the app (research/widget-registry.md Conventions: \"CSS variables only\").\n *\n * RTL: the arc does NOT mirror. The sweep is rotational, not directional (the\n * @adminium/charts donut / radial-bar policy verbatim) — a mirrored speedometer\n * would read as running backwards. The labels, values and the cluster grid\n * around it are logical-property flex/grid and flip normally.\n *\n * REDUCED MOTION (04 §7.5, mandatory): the needle and the value sweep settle in\n * from the arc's start via `useMountAnimation`, which paints the final frame\n * immediately under `prefers-reduced-motion: reduce`.\n */\nimport { EmptyState, MonoText } from '@adminium/ui';\nimport { useMountAnimation } from '@adminium/charts';\nimport { formatMetricValue, formatOptionsOf } from '../../lib/format.js';\nimport { asCategorical, asSingleMetric } from '../../lib/shapes.js';\nimport { bandFor, clampValue, gaugeArcGeometry, toneOf } from './kpi-lib.js';\n// Config schema + deterministic demo payload live in the pure `kpi-config`\n// module so the registry metadata graph never reaches this component file\n// (04 §2.3). Re-exported here to keep existing import points stable.\nexport { gaugeArcConfigSchema, gaugeArcDemoData } from './kpi-config.js';\n/**\n * Tone → `stroke` / `fill` / `text` utilities. Lookup tables (not interpolated\n * class names) so Tailwind's scanner sees every literal and never tree-shakes a\n * tone that only appears at runtime.\n */\nconst STROKE_TONE = {\n neutral: 'stroke-fg-subtle',\n accent: 'stroke-accent',\n pos: 'stroke-pos',\n warn: 'stroke-warn',\n danger: 'stroke-danger',\n info: 'stroke-info',\n};\nconst FILL_TONE = {\n neutral: 'fill-fg-subtle',\n accent: 'fill-accent',\n pos: 'fill-pos',\n warn: 'fill-warn',\n danger: 'fill-danger',\n info: 'fill-info',\n};\nconst TEXT_TONE = {\n neutral: 'text-fg-muted',\n accent: 'text-accent',\n pos: 'text-pos',\n warn: 'text-warn',\n danger: 'text-danger',\n info: 'text-info',\n};\n/** The bare arc canvas — geometry only, no chrome. */\nfunction Arc({ value, max, bands, needle, width, mounted, label, tone }) {\n const geometry = gaugeArcGeometry(value, max, bands, { width });\n const rest = gaugeArcGeometry(0, max, bands, { width });\n return (_jsxs(\"svg\", { width: geometry.width, height: geometry.height, viewBox: `0 0 ${geometry.width} ${geometry.height}`, role: \"img\", \"aria-label\": label, \"data-export-node\": \"\", className: \"overflow-visible\", children: [_jsx(\"path\", { d: geometry.trackPath, fill: \"none\", strokeWidth: geometry.thickness, strokeLinecap: \"round\", className: \"stroke-surface-3\" }), geometry.bandSegments.map((segment, index) => (_jsx(\"path\", { \"data-part\": \"gauge-band\", \"data-tone\": segment.tone, d: segment.path, fill: \"none\", strokeWidth: geometry.thickness, \n // Bands are the qualitative backdrop; the value sweep reads on top.\n className: `opacity-30 ${STROKE_TONE[segment.tone]}` }, `${segment.tone}-${index}`))), _jsx(\"path\", { \"data-part\": \"gauge-value\", d: mounted ? geometry.valuePath : rest.valuePath, fill: \"none\", strokeWidth: geometry.thickness, strokeLinecap: \"round\", className: STROKE_TONE[tone] }), needle ? (_jsxs(\"g\", { \"data-part\": \"gauge-needle\", className: \"transition-opacity duration-500 ease-out motion-reduce:transition-none\", opacity: mounted ? 1 : 0, children: [_jsx(\"line\", { x1: geometry.cx, y1: geometry.cy, x2: mounted ? geometry.needle.x : rest.needle.x, y2: mounted ? geometry.needle.y : rest.needle.y, strokeWidth: 2.5, strokeLinecap: \"round\", className: `transition-all duration-700 ease-out motion-reduce:transition-none ${STROKE_TONE[tone]}` }), _jsx(\"circle\", { cx: geometry.cx, cy: geometry.cy, r: 4, className: FILL_TONE[tone] })] })) : null] }));\n}\n/** One cluster cell: a small arc + its label and value (annex §1 cluster mode). */\nfunction ClusterCell({ label, value, max, bands, needle, mounted, text, tone, }) {\n return (_jsxs(\"div\", { className: \"flex flex-col items-center gap-1\", \"data-part\": \"gauge-cell\", \"data-tone\": tone, children: [_jsx(Arc, { value: value, max: max, bands: bands, needle: needle, width: 110, mounted: mounted, label: `${label}: ${text}`, tone: tone }), _jsx(MonoText, { className: `text-body-sm font-bold leading-none ${TEXT_TONE[tone]}`, children: text }), _jsx(\"span\", { className: \"max-w-full truncate text-micro uppercase tracking-wide text-fg-subtle\", children: label })] }));\n}\n/** Format one gauge reading with the config's unit suffix. */\nfunction readingOf(value, config, opts) {\n const text = formatMetricValue(value, config.valueFormat, opts);\n return config.unit === undefined ? text : `${text}${config.unit}`;\n}\n/** Cluster-mode grid columns — a lookup table so Tailwind sees the literals. */\nconst GRID_COLUMNS = {\n 1: 'grid-cols-1',\n 2: 'grid-cols-2',\n 3: 'grid-cols-3',\n 4: 'grid-cols-4',\n 5: 'grid-cols-5',\n};\nexport function GaugeArc({ config, data }) {\n const mounted = useMountAnimation();\n const opts = formatOptionsOf(config);\n if (config.cluster) {\n const categorical = asCategorical(data);\n if (categorical === null) {\n return _jsx(\"p\", { className: \"px-4 pb-4 text-body-sm text-fg-muted\", children: \"Unexpected data shape.\" });\n }\n // A categorical payload with no items is EMPTY, not malformed — an SLA or\n // system-health query is allowed to return zero rows. The frame can't route\n // it (see `emptyTitle` in kpi-config), so the per-widget empty copy is here\n // rather than the developer-facing \"unexpected shape\" line above.\n if (categorical.items.length === 0) {\n return (_jsx(EmptyState, { compact: true, preset: \"no-data\", title: config.emptyTitle ?? 'No gauges to show', body: config.emptyBody ?? 'Services appear here as gauges once there is a reading for them.' }));\n }\n return (_jsx(\"div\", { className: `grid h-full content-center gap-3 px-4 pb-4 compact:px-3 compact:pb-3 ${GRID_COLUMNS[config.columns] ?? 'grid-cols-2'}`, \"data-widget\": \"gauge-arc\", \"data-cluster\": \"true\", children: categorical.items.map((item) => {\n const value = clampValue(item.value, config.max);\n const tone = toneOf(item.tone, bandFor(value, config.bands)?.tone ?? 'accent');\n return (_jsx(ClusterCell, { label: item.label, value: value, max: config.max, bands: config.bands, needle: config.needle, mounted: mounted, text: readingOf(value, config, opts), tone: tone }, item.key));\n }) }));\n }\n const metric = asSingleMetric(data);\n if (metric === null) {\n return _jsx(\"p\", { className: \"px-4 pb-4 text-body-sm text-fg-muted\", children: \"Unexpected data shape.\" });\n }\n const value = clampValue(metric.value, config.max);\n const band = bandFor(value, config.bands);\n const tone = band?.tone ?? 'accent';\n const text = readingOf(value, config, opts);\n return (_jsxs(\"div\", { className: \"flex h-full flex-col items-center justify-center gap-2 px-4 pb-4 compact:px-3 compact:pb-3\", \"data-widget\": \"gauge-arc\", \"data-cluster\": \"false\", \"data-tone\": tone, children: [_jsx(Arc, { value: value, max: config.max, bands: config.bands, needle: config.needle, width: 180, mounted: mounted, label: `${band?.label === undefined ? '' : `${band.label}: `}${text}`, tone: tone }), _jsx(MonoText, { \"data-part\": \"gauge-value-text\", className: \"text-[22px] font-bold leading-none text-fg\", children: text }), band?.label === undefined ? null : (_jsx(\"span\", { className: `text-micro font-bold uppercase tracking-wide ${TEXT_TONE[tone]}`, children: band.label }))] }));\n}\n//# sourceMappingURL=GaugeArc.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * `period-comparison` (annex §1) — two labeled progress bars (this period vs\n * last) with a computed diff footer (\"+$13.1k (37.3%) higher\"). Renders only the\n * loaded state — skeleton/empty/error are WidgetFrame's job.\n *\n * SHAPE: the annex's \"two `single-metric` values for adjacent windows\" IS the\n * `metric+delta` envelope (`value` = this window, `prior` = last), so the shared\n * `computeDelta` produces the footer figure — no bespoke shape, and the\n * \"down-is-good\" inversion behaves identically to `kpi-stat-card`.\n *\n * Both bars are scaled against the LARGER of the two values, not each against\n * itself: the comparison is the whole point, so the shorter bar must actually\n * read as shorter.\n */\nimport { MonoText, ProgressBar } from '@adminium/ui';\nimport { computeDelta, formatMetricValue, formatOptionsOf } from '../../lib/format.js';\nimport { asMetricDelta } from '../../lib/shapes.js';\n// Config schema + deterministic demo payload live in the pure `kpi-config`\n// module so the registry metadata graph never reaches this component file\n// (04 §2.3). Re-exported here to keep existing import points stable.\nexport { periodComparisonConfigSchema, periodComparisonDemoData } from './kpi-config.js';\nfunction Bar({ label, text, value, max, tone, }) {\n return (_jsxs(\"div\", { className: \"flex flex-col gap-1\", children: [_jsxs(\"div\", { className: \"flex items-baseline justify-between gap-2\", children: [_jsx(\"span\", { className: \"truncate text-caption text-fg-muted\", children: label }), _jsx(MonoText, { className: \"shrink-0 text-body-sm font-semibold text-fg\", children: text })] }), _jsx(ProgressBar, { value: value, max: max, tone: tone, size: \"md\", label: `${label}: ${text}` })] }));\n}\nexport function PeriodComparison({ config, data }) {\n const metric = asMetricDelta(data);\n if (metric === null) {\n return _jsx(\"p\", { className: \"px-4 pb-4 text-body-sm text-fg-muted\", children: \"Unexpected data shape.\" });\n }\n const opts = formatOptionsOf(config);\n const current = metric.value;\n const prior = metric.prior ?? 0;\n // Scale both bars against the larger value so the comparison reads visually.\n const max = Math.max(Math.abs(current), Math.abs(prior)) || 1;\n const delta = computeDelta(metric, 'abs', config.metricFormat, opts);\n const pct = computeDelta(metric, 'pct', config.metricFormat, opts);\n const direction = delta === null || delta.trend === 'flat'\n ? (config.flatLabel ?? 'flat')\n : delta.trend === 'up'\n ? (config.higherLabel ?? 'higher')\n : (config.lowerLabel ?? 'lower');\n // Tone follows \"is this good\", not \"is this up\" — invertDeltaGood flips it\n // for costs / error rates / churn, exactly as the delta pill does.\n const good = delta === null || delta.trend === 'flat' ? null : config.invertDeltaGood ? delta.trend === 'down' : delta.trend === 'up';\n const footerTone = good === null ? 'text-fg-muted' : good ? 'text-pos' : 'text-danger';\n return (_jsxs(\"div\", { className: \"flex h-full flex-col justify-center gap-3 px-4 pb-4 compact:gap-2 compact:px-3 compact:pb-3\", \"data-widget\": \"period-comparison\", \"data-trend\": delta?.trend ?? 'flat', children: [_jsx(Bar, { label: config.periodALabel ?? 'This period', text: formatMetricValue(current, config.metricFormat, opts), value: Math.abs(current), max: max, tone: \"accent\" }), _jsx(Bar, { label: config.periodBLabel ?? 'Last period', text: formatMetricValue(prior, config.metricFormat, opts), value: Math.abs(prior), max: max, tone: \"neutral\" }), delta === null ? null : (_jsxs(\"p\", { \"data-part\": \"diff-footer\", className: `truncate text-caption font-semibold ${footerTone}`, children: [_jsx(MonoText, { children: delta.text }), pct === null ? '' : _jsx(MonoText, { children: ` (${pct.text})` }), ` ${direction}`] }))] }));\n}\n//# sourceMappingURL=PeriodComparison.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\n/**\n * `micro-kpi-subtitle` (annex §1) — the inline header micro-KPI line recomputed\n * from live state (\"3 unread · 10 total\", \"24 members · 8 online\", \"N connected ·\n * 12 available\"). `placement: 'inline'`, so it renders in a page-header slot\n * rather than a grid cell and never carries WidgetFrame chrome.\n *\n * The sentence is a stored TEMPLATE with `{placeholder}` tokens resolved against\n * the bound scalars — see `interpolateTemplate` in `kpi-lib` for why an unknown\n * token degrades to the empty string rather than leaking `{token}` into the UI.\n */\nimport { MonoText } from '@adminium/ui';\nimport { formatOptionsOf } from '../../lib/format.js';\nimport { interpolateTemplate } from './kpi-lib.js';\n// Config schema + deterministic demo payload live in the pure `kpi-config`\n// module so the registry metadata graph never reaches this component file\n// (04 §2.3). Re-exported here to keep existing import points stable.\nexport { microKpiSubtitleConfigSchema, microKpiSubtitleDemoData } from './kpi-config.js';\n/**\n * Every scalar the payload carries, flattened for template interpolation. The\n * annex's contract is \"1–3 derived scalars over a sibling `record-list`\" — the\n * host compiles them into a `single-metric` envelope whose sibling keys are the\n * other scalars, so any number/string column is addressable by name.\n */\nexport function scalarsOf(data) {\n if (typeof data !== 'object' || data === null || Array.isArray(data))\n return {};\n const out = {};\n for (const [key, value] of Object.entries(data)) {\n if (typeof value === 'number' && Number.isFinite(value))\n out[key] = value;\n else if (typeof value === 'string')\n out[key] = value;\n }\n return out;\n}\nexport function MicroKpiSubtitle({ config, data }) {\n const scalars = scalarsOf(data);\n const zero = scalars[config.zeroKey];\n const isZero = typeof zero === 'number' && zero === 0;\n const text = isZero && config.zeroStateText !== undefined\n ? config.zeroStateText\n : interpolateTemplate(config.template, scalars, config.metricFormat, formatOptionsOf(config));\n return (_jsx(MonoText, { \"data-widget\": \"micro-kpi-subtitle\", \"data-zero\": isZero, className: \"truncate text-caption text-fg-muted\", children: text }));\n}\n//# sourceMappingURL=MicroKpiSubtitle.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { AlertTriangle, Info, Lightbulb, Sparkles, Target, TrendingDown, TrendingUp, Zap, } from 'lucide-react';\n/**\n * `kpi` family icon ELEMENTS (annex §1 `auto-insights`: sparkles glyph + the\n * per-insight tone icon). Split out of `kpi-lib.ts` because that module is the\n * PURE leaf the registry's eager metadata graph reaches through `kpi-config.ts`\n * — JSX here would drag lucide-react into the eager chunk (04 §2.3). Only the\n * component files import this.\n */\nconst INSIGHT_GLYPHS = {\n sparkles: () => _jsx(Sparkles, {}),\n 'trend-up': () => _jsx(TrendingUp, {}),\n 'trend-down': () => _jsx(TrendingDown, {}),\n alert: () => _jsx(AlertTriangle, {}),\n info: () => _jsx(Info, {}),\n target: () => _jsx(Target, {}),\n zap: () => _jsx(Zap, {}),\n lightbulb: () => _jsx(Lightbulb, {}),\n};\n/** The glyph for a narrowed insight icon key (`insightIconOf` guarantees the key). */\nexport function insightIcon(icon) {\n return INSIGHT_GLYPHS[icon]();\n}\n/** The family's headline glyph — the auto-insights card header. */\nexport function sparklesIcon() {\n return _jsx(Sparkles, {});\n}\n//# sourceMappingURL=kpi-icons.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * `auto-insights` (annex §1) — a short RANKED list of generated insights:\n * sparkles/tone icon, bold stat + sentence, and a mini sparkline; plus the\n * card-grid variant with tone icon + category tag + recommendation prose and a\n * Refresh that rotates the visible window through the pool. Renders only the\n * loaded state — skeleton/empty/error are WidgetFrame's job.\n *\n * NOT AN LLM CALL. The annex's \"AI-flavoured\" framing describes where the\n * sentences come from UPSTREAM (heuristics or an offline LLM pass over table\n * stats, materialised into the bound table) — this widget never calls a model at\n * render time. It ranks the bound rows by `scoreField` and renders their copy.\n * That keeps it deterministic, offline-safe, server-renderable for scheduled\n * reports, and free of a per-render token cost.\n *\n * Refresh rotates a LOCAL window offset over the already-bound pool — it does not\n * refetch. Re-querying is `refreshInterval` / the host's job (04 §5); rotating\n * locally is what the annex's \"Refresh rotation\" describes and costs nothing.\n */\nimport { IconTile, MonoText, Tag } from '@adminium/ui';\nimport { RotateCw } from 'lucide-react';\nimport { Sparkline } from '@adminium/charts';\nimport { useState } from 'react';\nimport { insightIcon } from './kpi-icons.js';\nimport { insightIconOf, toneOf } from './kpi-lib.js';\n// Config schema + deterministic demo payload live in the pure `kpi-config`\n// module so the registry metadata graph never reaches this component file\n// (04 §2.3). Re-exported here to keep existing import points stable.\nexport { autoInsightsConfigSchema, autoInsightsDemoData } from './kpi-config.js';\nfunction stringAt(row, field) {\n const raw = row[field];\n return typeof raw === 'string' && raw !== '' ? raw : undefined;\n}\nfunction numberAt(row, field) {\n const raw = row[field];\n return typeof raw === 'number' && Number.isFinite(raw) ? raw : undefined;\n}\n/**\n * Project the bound `record-list` onto ranked insights (04 §5 field naming).\n * Ranking is by `scoreField` DESCENDING; rows without a score keep their query\n * order behind the scored ones (a stable sort, so the annex's \"ranked list\" is\n * honest even on a partially-scored pool). Rows without a title are dropped —\n * an insight with no sentence has nothing to say.\n */\nexport function insightsOf(data, config) {\n const rows = typeof data === 'object' && data !== null && Array.isArray(data.rows)\n ? data.rows\n : [];\n const insights = [];\n for (const [index, entry] of rows.entries()) {\n if (typeof entry !== 'object' || entry === null)\n continue;\n const row = entry;\n const title = stringAt(row, config.titleField);\n if (title === undefined)\n continue;\n const rawSpark = row[config.sparkField];\n const spark = Array.isArray(rawSpark)\n ? rawSpark.filter((v) => typeof v === 'number' && Number.isFinite(v))\n : undefined;\n insights.push({\n id: stringAt(row, config.idField) ?? `insight-${index}`,\n icon: insightIconOf(row[config.iconField]),\n tone: toneOf(row[config.toneField]),\n tag: stringAt(row, config.tagField),\n title,\n body: stringAt(row, config.bodyField),\n spark: spark !== undefined && spark.length > 0 ? spark : undefined,\n href: stringAt(row, config.hrefField),\n score: numberAt(row, config.scoreField),\n });\n }\n // Stable rank: scored rows descending, unscored rows after them in query order.\n const ranked = insights\n .map((insight, index) => ({ insight, index }))\n .sort((a, b) => {\n const sa = a.insight.score;\n const sb = b.insight.score;\n if (sa === undefined && sb === undefined)\n return a.index - b.index;\n if (sa === undefined)\n return 1;\n if (sb === undefined)\n return -1;\n return sb === sa ? a.index - b.index : sb - sa;\n })\n .map(({ insight }) => insight);\n return ranked.slice(0, config.pool);\n}\n/** The visible window, wrapping around the pool (Refresh advances `offset`). */\nexport function visibleWindow(insights, offset, count) {\n if (insights.length === 0)\n return [];\n const size = Math.min(count, insights.length);\n return Array.from({ length: size }, (_, i) => insights[(offset + i) % insights.length]);\n}\nfunction InsightRow({ insight, applyLabel, onApply, card, }) {\n return (_jsxs(\"div\", { \"data-part\": card ? 'insight-card' : 'insight-row', \"data-tone\": insight.tone, className: card\n ? 'flex flex-col gap-2 rounded-lg border border-border bg-surface-2 p-3'\n : 'flex items-start gap-2.5', children: [_jsxs(\"div\", { className: \"flex items-start gap-2.5\", children: [_jsx(IconTile, { tone: insight.tone, size: \"sm\", icon: insightIcon(insight.icon) }), _jsxs(\"div\", { className: \"flex min-w-0 flex-1 flex-col gap-1\", children: [insight.tag === undefined ? null : (_jsx(Tag, { tone: insight.tone, className: \"self-start\", children: insight.tag })), _jsx(\"p\", { className: \"text-body-sm font-bold leading-snug text-fg\", children: insight.title }), insight.body === undefined ? null : (_jsx(\"p\", { className: \"text-caption leading-snug text-fg-muted\", children: insight.body }))] }), insight.spark === undefined || card ? null : (_jsx(Sparkline, { data: insight.spark, variant: \"line\", width: 56, height: 22, className: \"mt-0.5 shrink-0\" }))] }), card && insight.spark !== undefined ? (_jsx(Sparkline, { data: insight.spark, variant: \"line\", width: 120, height: 24, className: \"w-full\" })) : null, applyLabel === undefined ? null : (_jsx(\"button\", { type: \"button\", onClick: () => onApply(insight), className: \"self-start text-caption font-bold text-accent hover:underline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent\", children: applyLabel }))] }));\n}\n/** Card-grid columns — a lookup table so Tailwind sees the class literals. */\nconst GRID_COLUMNS = {\n 1: 'grid-cols-1',\n 2: 'grid-cols-2',\n 3: 'grid-cols-3',\n};\nexport function AutoInsights({ config, data, onEvent }) {\n const [offset, setOffset] = useState(0);\n const insights = insightsOf(data, config);\n const visible = visibleWindow(insights, offset, config.count);\n if (visible.length === 0) {\n return _jsx(\"p\", { className: \"px-4 pb-4 text-body-sm text-fg-muted\", children: \"Unexpected data shape.\" });\n }\n // Rotating past the pool's end is pointless when everything already fits.\n const canRotate = config.refreshable && insights.length > config.count;\n const apply = (insight) => {\n const href = insight.href ?? config.href;\n if (href !== undefined)\n onEvent({ type: 'drill-through', href });\n };\n return (_jsxs(\"div\", { className: \"flex h-full flex-col gap-3 overflow-y-auto px-4 pb-4 compact:gap-2 compact:px-3 compact:pb-3\", \"data-widget\": \"auto-insights\", \"data-variant\": config.variant, children: [canRotate ? (_jsx(\"div\", { className: \"flex justify-end\", children: _jsxs(\"button\", { type: \"button\", \"data-part\": \"insights-refresh\", onClick: () => setOffset((current) => (current + config.count) % insights.length), className: \"inline-flex items-center gap-1 rounded-md px-1.5 py-1 text-caption font-bold text-fg-muted hover:text-fg focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent\", children: [_jsx(RotateCw, { className: \"size-3\", \"aria-hidden\": \"true\" }), config.refreshLabel ?? 'Refresh'] }) })) : null, _jsx(\"div\", { className: config.variant === 'cards'\n ? `grid gap-2.5 ${GRID_COLUMNS[config.columns] ?? 'grid-cols-2'}`\n : 'flex flex-col gap-3', children: visible.map((insight) => (_jsx(InsightRow, { insight: insight, applyLabel: config.applyLabel, onApply: apply, card: config.variant === 'cards' }, insight.id))) }), canRotate ? (_jsx(MonoText, { \"data-part\": \"insights-position\", className: \"text-micro text-fg-subtle\", children: `${Math.floor(offset / config.count) + 1}/${Math.ceil(insights.length / config.count)}` })) : null] }));\n}\n//# sourceMappingURL=AutoInsights.js.map"],"names":["ICONS","Activity","CircleDollarSign","Users","ShoppingCart","Gauge","Database","Zap","Star","Package","TrendingUp","KpiStatCard","config","data","metric","asMetricDelta","_jsx","opts","formatOptionsOf","value","formatMetricValue","delta","computeDelta","label","Icon","spark","_jsxs","IconTile","DeltaPill","MonoText","Sparkline","UsageMeter","onEvent","asSingleMetric","used","limit","pct","tone","unit","usedText","limitText","ProgressBar","KpiStatTileCompact","COUNT_UP_MS","easeOut","t","useCountUp","target","enabled","reduced","prefersReducedMotion","animate","setValue","useState","frameRef","useRef","useEffect","start","tick","now","goalOf","configGoal","raw","MetricHero","goal","animated","goalPct","fractionOf","goalText","scalarAt","field","statPairValues","applyDerived","Side","StatPairCard","b","textA","textB","STROKE_TONE","TEXT_TONE","avatarsOf","name","totalOf","max","GaugeRing","mounted","useMountAnimation","clampValue","geometry","gaugeRingGeometry","band","bandFor","sharedToneOf","total","center","caption","avatars","AvatarStack","Avatar","FILL_TONE","Arc","bands","needle","width","gaugeArcGeometry","rest","segment","index","ClusterCell","text","readingOf","GRID_COLUMNS","GaugeArc","categorical","asCategorical","EmptyState","item","toneOf","Bar","PeriodComparison","current","prior","direction","good","footerTone","scalarsOf","out","key","MicroKpiSubtitle","scalars","zero","isZero","interpolateTemplate","INSIGHT_GLYPHS","Sparkles","TrendingDown","AlertTriangle","Info","Target","Lightbulb","insightIcon","icon","stringAt","row","numberAt","insightsOf","rows","insights","entry","title","rawSpark","v","insightIconOf","insight","a","sa","sb","visibleWindow","offset","count","size","_","i","InsightRow","applyLabel","onApply","card","Tag","AutoInsights","setOffset","visible","canRotate","apply","href","RotateCw"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{r as c,j as t,cv as w,cw as A,cx as _,cy as F,cz as O,cA as u,cB as B,cC as re,cD as ie,ar as ee,cE as ce,M as j,S as L,cF as P,cG as g,cH as oe,cI as E,b4 as q,cJ as K,cK as k,cL as $,cM as ue,cN as pe,ai as te,cO as me,cP as xe,cQ as R,s as be,cR as S,by as J,cS as V,cT as he,cU as fe,cV as U,z as ae,cW as C,cX as ye,cY as je,aW as Ne,cZ as X,at as I,c_ as ve,c$ as we,d0 as Q,d1 as Le,cl as H,d2 as Fe,b9 as D,d3 as ke,br as se,aw as Te,d4 as ge,d5 as Se,d6 as Ie,d7 as Ce,d8 as Me,d9 as Y,bd as Ae,da as Oe,bT as Pe,aP as Be,db as Ee,b6 as $e,dc as De,V as Re,dd as ze,de as We,df as _e}from"./index-PB1II0WV.js";import{dg as Vt,dh as Ut,di as qt,dj as Kt}from"./index-PB1II0WV.js";const Ve={operational:"Operational",degraded:"Degraded",down:"Down",unknown:"Unknown"};function Ue({monitor:e,budgetThresholds:n,windowDays:a=30,locale:s,targetLabel:l,budgetLabel:r,latencyLabel:d,testId:m}){const b=B[e.status],i=re(e.budget,n),x=e.history.slice(-Math.max(1,a)),N=e.current>=e.target;return t.jsxs("div",{"data-widget":"slo-monitor-card","data-testid":m,"data-status":e.status,className:`flex h-full flex-col gap-3 overflow-auto border-s-4 ${ie[b]} px-4 pb-4`,children:[t.jsxs("div",{className:"flex items-start gap-2.5",children:[t.jsx(ee,{tone:b,size:"sm",icon:t.jsx(ce,{})}),t.jsxs("div",{className:"min-w-0 flex-1",children:[t.jsx("p",{className:"truncate text-body-sm font-bold text-fg",children:e.name}),e.endpoint===void 0?null:t.jsx(j,{className:"block truncate text-caption text-fg-subtle",children:e.endpoint})]}),t.jsx(L,{tone:b,dot:!0,"data-part":"slo-status",children:Ve[e.status]})]}),t.jsxs("div",{className:"flex items-baseline gap-2",children:[t.jsx(j,{"data-part":"slo-current",className:`text-h2 font-bold tabular-nums ${N?P.pos:P.danger}`,children:g(e.current,s,2)}),t.jsxs("span",{className:"text-caption text-fg-subtle",children:[l??"Target"," ",t.jsx(j,{children:g(e.target,s,2)})]})]}),t.jsx("div",{"aria-hidden":"true","data-testid":"slo-sparkline",className:"flex h-8 items-end gap-px",children:x.map((h,v)=>t.jsx("span",{"data-part":"slo-day","data-state":h,className:`h-[var(--bar-h)] min-w-px flex-1 rounded-xs ${E[B[h]]}`,style:{"--bar-h":`${oe[h]}%`}},`${v}-${h}`))}),t.jsxs("div",{className:"flex flex-col gap-1",children:[t.jsxs("div",{className:"flex items-center justify-between text-caption",children:[t.jsx("span",{className:"text-fg-subtle",children:r??"Error budget"}),t.jsx(j,{className:`font-bold ${P[i]}`,"data-part":"slo-budget",children:g(e.budget,s)})]}),t.jsx(q,{value:e.budget,tone:i,size:"sm",animated:!1,label:r??"Error budget"})]}),e.p95===void 0?null:t.jsxs("p",{className:"text-caption text-fg-subtle",children:[d??"p95 latency"," ",t.jsx(j,{className:"font-semibold text-fg",children:K(e.p95,s)})]})]})}function qe(e,n){const a=A(n);if(a===null)return null;const s=a[e.historyField],l=(Array.isArray(s)?s:[]).map(_);return{name:u(a,e.nameField,"Service"),endpoint:a[e.endpointField]===void 0?void 0:u(a,e.endpointField,""),target:O(a,e.targetField,e.target),current:O(a,e.currentField,0),status:_(a[e.statusField]),budget:O(a,e.budgetField,0),p95:a[e.p95Field]===void 0?void 0:F(a,e.p95Field,0),history:l}}function gt({config:e,data:n}){const a=c.useMemo(()=>qe(e,n),[e,n]);return a===null?t.jsx(w,{title:e.emptyTitle??"No monitor",body:e.emptyBody??"Bind a monitors table with a status and an availability column."}):t.jsx(Ue,{monitor:a,windowDays:e.windowDays,...e.budgetThresholds===void 0?{}:{budgetThresholds:e.budgetThresholds},...e.format?.locale===void 0?{}:{locale:e.format.locale},...e.targetLabel===void 0?{}:{targetLabel:e.targetLabel},...e.budgetLabel===void 0?{}:{budgetLabel:e.budgetLabel},...e.latencyLabel===void 0?{}:{latencyLabel:e.latencyLabel},...e.testId===void 0?{}:{testId:e.testId}})}function Ke(e,n){const a=n?.[e];return a===void 0?B[e]:be(a,B[e])}const He={operational:"Operational",degraded:"Degraded",down:"Down",unknown:"No data"};function Ge({days:e,period:n="90",showToggle:a=!0,stateColors:s,locale:l,daysAgoLabel:r,todayLabel:d,uptimeLabel:m,testId:b}){const[i,x]=c.useState(n),N=i==="30"?30:90,h=c.useMemo(()=>e.slice(-N),[e,N]),v=c.useMemo(()=>ue(h.map(o=>o.state)),[h]);return t.jsx(pe,{children:t.jsxs("div",{"data-widget":"uptime-segment-bar","data-testid":b,"data-period":i,className:"flex h-full flex-col justify-center gap-2 px-4 pb-4",children:[a?t.jsx("div",{className:"flex justify-end",children:t.jsx(te,{value:i,onValueChange:x,"data-testid":"uptime-period-toggle",options:[{value:"30",label:"30d"},{value:"90",label:"90d"}]})}):null,t.jsx("div",{"aria-hidden":"true","data-testid":"uptime-strip",className:"flex h-9 items-stretch gap-[2px]",children:h.map(o=>{const f=Ke(o.state,s),T=`${me(o.ms,l)??""} — ${He[o.state]}`;return t.jsx(xe,{content:T,children:t.jsx("span",{"data-part":"uptime-segment","data-state":o.state,className:`min-w-[3px] flex-1 rounded-xs transition-transform duration-150 hover:scale-y-110 ${E[f]}`})},o.ms)})}),t.jsxs("div",{className:"flex items-center justify-between gap-2 text-caption text-fg-subtle",children:[t.jsx("span",{"data-part":"uptime-axis-start",children:R(r??"{days} days ago",{days:N})}),t.jsxs(j,{className:"font-bold text-fg","data-part":"uptime-pct",children:[g(v,l,2)," ",m??"uptime"]}),t.jsx("span",{"data-part":"uptime-axis-end",children:d??"Today"})]})]})})}function Je(e,n){const a=k(n),s=[];return a.forEach((l,r)=>{const d=$(l,e.dayField);s.push({ms:d??r,state:_(l[e.statusField])})}),s}function St({config:e,data:n}){const a=c.useMemo(()=>Je(e,n),[e,n]);return a.length===0?t.jsx(w,{title:e.emptyTitle??"No uptime history",body:e.emptyBody??"Daily status rows appear here as an uptime strip."}):t.jsx(Ge,{days:a,period:e.period,showToggle:e.showToggle,...e.stateColors===void 0?{}:{stateColors:e.stateColors},...e.format?.locale===void 0?{}:{locale:e.format.locale},...e.daysAgoLabel===void 0?{}:{daysAgoLabel:e.daysAgoLabel},...e.todayLabel===void 0?{}:{todayLabel:e.todayLabel},...e.uptimeLabel===void 0?{}:{uptimeLabel:e.uptimeLabel},...e.testId===void 0?{}:{testId:e.testId}})}function Xe({variants:e,confidence:n,confThresholds:a,showSignificance:s=!0,locale:l,controlLabel:r,winnerLabel:d,significanceLabel:m,verdictSignificantLabel:b,verdictInconclusiveLabel:i,countsLabel:x,testId:N}){const h=c.useMemo(()=>e.reduce((y,p)=>Math.max(y,p.conv),0),[e]),v=c.useMemo(()=>e.find(y=>y.control),[e]),o=a?.high??95,f=c.useMemo(()=>e.reduce((y,p)=>y===null||p.conv>y.conv?p:y,null),[e]),T=n!==void 0&&n>=o&&f!==null&&!f.control?f.id:null,M=n===void 0?"neutral":he(n,a),z=n!==void 0&&n>=o;return t.jsxs("div",{"data-widget":"experiment-variant-compare","data-testid":N,className:"flex h-full flex-col gap-3 overflow-auto px-4 pb-4",children:[t.jsx("div",{className:"flex flex-col gap-2.5",children:e.map(y=>{const p=v===void 0||y.control?null:fe(y.conv,v.conv),W=h<=0?0:V(y.conv/h*100,0,100);return t.jsxs("div",{"data-part":"variant-row","data-variant":y.id,className:"flex flex-col gap-1",children:[t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx("span",{className:"truncate text-body-sm font-semibold text-fg",children:y.name}),y.control?t.jsx(L,{tone:"neutral","data-part":"variant-control",children:r??"CONTROL"}):null,T===y.id?t.jsx(L,{tone:"pos","data-part":"variant-winner",children:d??"WINNER"}):null,t.jsxs("span",{className:"ms-auto flex items-center gap-2",children:[p===null?null:t.jsx(L,{tone:p>=0?"pos":"danger","data-part":"variant-lift",children:`${p>=0?"+":""}${g(Math.abs(p),l,1)}`}),t.jsx(j,{className:"text-body-sm font-bold tabular-nums text-fg",children:g(y.conv,l,2)})]})]}),t.jsx("div",{"aria-hidden":"true",className:"h-2 overflow-hidden rounded-full bg-surface-3",children:t.jsx("div",{"data-part":"variant-bar",className:`h-full w-[var(--bar-w)] rounded-full ${T===y.id?E.pos:E.accent}`,style:{"--bar-w":`${W}%`}})}),t.jsx("p",{className:"text-caption text-fg-subtle",children:R(x??"{users} participants · {conversions} conversions",{users:U(y.users,l),conversions:U(y.conversions,l)})})]},y.id)})}),!s||n===void 0?null:t.jsxs("div",{"data-testid":"significance-meter",className:"mt-auto flex flex-col gap-1 border-t border-border pt-3",children:[t.jsxs("div",{className:"flex items-center justify-between text-caption",children:[t.jsx("span",{className:"text-fg-subtle",children:m??"Confidence"}),t.jsx(j,{className:`font-bold ${P[M]}`,"data-part":"significance-value",children:g(n,l,1)})]}),t.jsx(q,{value:n,tone:M,size:"sm",animated:!1,label:m??"Confidence"}),t.jsx("p",{className:"text-caption text-fg-subtle","data-part":"significance-verdict",children:z?b??"Statistically significant — safe to call.":i??"Not yet significant — keep the test running."})]})]})}function Qe(e,n){return k(n).map((s,l)=>{const r=O(s,e.convField,0),d=F(s,e.usersField,0);return{id:u(s,e.idField,`v${l}`),name:u(s,e.nameField,`Variant ${l+1}`),conv:r,users:d,conversions:F(s,e.conversionsField,Math.round(d*r/100)),control:S(s,e.controlField)??l===0}})}function Ye(e,n,a){const s=ae(n),l=s===null?void 0:J(s,e.confidenceField);if(l!==void 0)return V(l,0,100);for(const r of a){const d=J(r,e.confidenceField);if(d!==void 0)return V(d,0,100)}}function It({config:e,data:n}){const a=c.useMemo(()=>Qe(e,n),[e,n]),s=c.useMemo(()=>Ye(e,n,k(n)),[e,n]);return a.length===0?t.jsx(w,{title:e.emptyTitle??"No variants",body:e.emptyBody??"Bind an experiment variants table with conversion numbers."}):t.jsx(Xe,{variants:a,showSignificance:e.showSignificance,...s===void 0?{}:{confidence:s},...e.confThresholds===void 0?{}:{confThresholds:e.confThresholds},...e.format?.locale===void 0?{}:{locale:e.format.locale},...e.controlLabel===void 0?{}:{controlLabel:e.controlLabel},...e.winnerLabel===void 0?{}:{winnerLabel:e.winnerLabel},...e.significanceLabel===void 0?{}:{significanceLabel:e.significanceLabel},...e.verdictSignificantLabel===void 0?{}:{verdictSignificantLabel:e.verdictSignificantLabel},...e.verdictInconclusiveLabel===void 0?{}:{verdictInconclusiveLabel:e.verdictInconclusiveLabel},...e.countsLabel===void 0?{}:{countsLabel:e.countsLabel},...e.testId===void 0?{}:{testId:e.testId}})}const Z={visa:"bg-gradient-to-br from-info to-accent",mastercard:"bg-gradient-to-br from-warn to-danger",amex:"bg-gradient-to-br from-info to-pos",discover:"bg-gradient-to-br from-warn to-accent",unknown:"bg-gradient-to-br from-fg-subtle to-fg-muted"},Ze={visa:"VISA",mastercard:"Mastercard",amex:"AMEX",discover:"Discover",unknown:"Card"};function et(e,n){return n?.[e]??Ze[e]}function tt({method:e,variant:n="tile",brandMeta:a,defaultLabel:s,setDefaultLabel:l,manageLabel:r,addLabel:d,expiresLabel:m,onSetDefault:b,onManage:i,testId:x}){const N=je(e.last4,e.brand),h=et(e.brand,a);return n==="ghost"?t.jsx("div",{"data-widget":"credit-card-tile","data-testid":x,"data-variant":"ghost",className:"h-full px-4 pb-4",children:t.jsxs("button",{type:"button",onClick:i,"data-part":"add-method",className:"flex h-full min-h-24 w-full flex-col items-center justify-center gap-1.5 rounded-xl border-2 border-dashed border-border-strong text-fg-muted transition-colors hover:border-accent hover:text-accent",children:[t.jsx(Ne,{className:"size-5","aria-hidden":"true"}),t.jsx("span",{className:"text-body-sm font-semibold",children:d??"Add payment method"})]})}):n==="row"?t.jsxs("div",{"data-widget":"credit-card-tile","data-testid":x,"data-variant":"row",className:"flex h-full items-center gap-3 px-4 pb-4",children:[t.jsx("span",{"aria-hidden":"true",className:`flex size-9 shrink-0 items-center justify-center rounded-md text-white ${Z[e.brand]}`,children:t.jsx(X,{className:"size-4"})}),t.jsxs("div",{className:"min-w-0 flex-1",children:[t.jsx(j,{className:"block truncate text-body-sm font-semibold tabular-nums text-fg","data-part":"card-pan",children:N}),e.exp===void 0?null:t.jsx(j,{className:"text-caption text-fg-subtle","data-part":"card-exp",children:e.exp})]}),e.isDefault?t.jsx(L,{tone:"accent","data-part":"card-default",children:s??"Default"}):null,i===void 0?null:t.jsx(I,{variant:"ghost",size:"sm",onClick:i,"data-part":"card-manage",children:r??"Manage"})]}):t.jsx("div",{"data-widget":"credit-card-tile","data-testid":x,"data-variant":"tile",className:"h-full px-4 pb-4",children:t.jsxs("div",{"data-part":"card-tile",className:`group flex h-full min-h-32 flex-col justify-between rounded-xl p-4 text-white shadow-card transition-shadow hover:shadow-lg ${Z[e.brand]}`,children:[t.jsxs("div",{className:"flex items-start justify-between gap-2",children:[t.jsx(X,{className:"size-5 opacity-80","aria-hidden":"true"}),t.jsx("span",{className:"text-body-sm font-black uppercase tracking-wide","data-part":"card-brand",children:h})]}),t.jsx(j,{className:"text-body font-semibold tabular-nums tracking-widest","data-part":"card-pan",children:N}),t.jsxs("div",{className:"flex items-end justify-between gap-2",children:[t.jsxs("div",{className:"min-w-0",children:[e.holder===void 0?null:t.jsx("p",{className:"truncate text-caption font-semibold uppercase tracking-wide opacity-90","data-part":"card-holder",children:e.holder}),e.exp===void 0?null:t.jsxs("p",{className:"text-caption opacity-75",children:[m??"Expires"," ",t.jsx(j,{"data-part":"card-exp",children:e.exp})]})]}),e.isDefault?t.jsx(L,{tone:"neutral","data-part":"card-default",className:"bg-white/25 text-white",children:s??"Default"}):b===void 0?null:t.jsx("button",{type:"button",onClick:b,"data-part":"card-set-default",className:"rounded-full bg-white/20 px-2 py-0.5 text-[11px] font-bold opacity-0 transition-opacity focus-visible:opacity-100 group-hover:opacity-100",children:l??"Set default"})]})]})})}function at(e,n){const a=A(n);return a===null?null:{brand:ye(a[e.brandField]),last4:u(a,e.last4Field,"0000"),holder:a[e.holderField]===void 0?void 0:u(a,e.holderField,""),exp:a[e.expField]===void 0?void 0:u(a,e.expField,""),isDefault:S(a,e.defaultField)??!1}}function Ct({config:e,data:n,onEvent:a}){const s=c.useMemo(()=>at(e,n),[e,n]),l=c.useMemo(()=>C(e.binding),[e.binding]);if(s===null&&e.variant!=="ghost")return t.jsx(w,{title:e.emptyTitle??"No payment method",body:e.emptyBody??"Add a card to see it here."});const r=d=>{a(d)};return t.jsx(tt,{method:s??{brand:"unknown",last4:"0000",isDefault:!1},variant:e.variant,...e.brandMeta===void 0?{}:{brandMeta:e.brandMeta},...e.defaultLabel===void 0?{}:{defaultLabel:e.defaultLabel},...e.setDefaultLabel===void 0?{}:{setDefaultLabel:e.setDefaultLabel},...e.manageLabel===void 0?{}:{manageLabel:e.manageLabel},...e.addLabel===void 0?{}:{addLabel:e.addLabel},...e.expiresLabel===void 0?{}:{expiresLabel:e.expiresLabel},...e.testId===void 0?{}:{testId:e.testId},...l===null||s===null?{}:{onSetDefault:()=>r({type:"mutate",intent:"update",connectionId:l.connectionId,table:l.table,values:{[e.defaultField]:!0}})},...e.href===void 0?{}:{onManage:()=>r({type:"drill-through",href:e.href})}})}function st({plans:e,annualDiscount:n=.2,period:a="monthly",selectable:s=!1,currency:l,locale:r,ctaLabel:d,currentLabel:m,popularLabel:b,monthlyLabel:i,annualLabel:x,perMonthLabel:N,billedAnnuallyLabel:h,onSelect:v,testId:o}){const[f,T]=c.useState(a),[M,z]=c.useState(null),y=f==="annual";return t.jsxs("div",{"data-widget":"plan-pricing-cards","data-testid":o,"data-period":f,className:"flex h-full flex-col gap-3 overflow-auto px-4 pb-4",children:[t.jsx("div",{className:"flex justify-center",children:t.jsx(te,{value:f,onValueChange:T,"data-testid":"pricing-period-toggle",options:[{value:"monthly",label:i??"Monthly"},{value:"annual",label:x??"Annual"}]})}),t.jsx("div",{className:"grid flex-1 grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-3",children:e.map(p=>{const W=y?we(p.monthly,n):p.monthly,ne=M===p.id,G=s&≠return t.jsxs("div",{"data-part":"plan-card","data-plan":p.id,...p.promoted?{"data-promoted":""}:{},...p.current?{"data-current":""}:{},...G?{"data-selected":""}:{},className:["relative flex flex-col gap-3 rounded-xl border bg-surface p-4 transition-shadow",p.promoted||G?"border-accent shadow-glow":"border-border shadow-sm"].join(" "),children:[p.promoted?t.jsx(L,{tone:"accent","data-part":"plan-popular",className:"absolute -top-2 start-4",children:b??"POPULAR"}):null,t.jsxs("div",{children:[t.jsx("p",{className:"text-body font-bold text-fg",children:p.name}),p.tagline===void 0?null:t.jsx("p",{className:"text-caption text-fg-subtle",children:p.tagline})]}),t.jsxs("div",{children:[t.jsx(j,{className:"text-h1 font-black tabular-nums text-fg","data-part":"plan-price",children:Q(W,l,r)}),t.jsx("span",{className:"ms-1 text-caption text-fg-subtle",children:N??"/ month"}),y&&p.monthly>0?t.jsx("p",{className:"text-caption text-fg-subtle","data-part":"plan-billing-note",children:R(h??"Billed {total} yearly",{total:Q(Le(p.monthly,n),l,r)})}):null]}),t.jsx("ul",{className:"flex flex-1 flex-col gap-1.5",children:p.features.map((le,de)=>t.jsxs("li",{className:"flex items-start gap-1.5 text-caption text-fg-muted",children:[t.jsx(H,{className:"mt-px size-3.5 shrink-0 text-pos","aria-hidden":"true"}),t.jsx("span",{children:le})]},`${p.id}-f${de}`))}),t.jsx(I,{variant:p.current?"secondary":p.promoted?"primary":"outline",size:"sm",disabled:p.current,"data-part":"plan-cta",onClick:()=>{s&&z(p.id),v?.(p.id)},children:p.current?m??"Current plan":d??"Choose plan"})]},p.id)})})]})}function nt(e,n){return k(n).map((s,l)=>{const r=u(s,e.idField,`plan-${l}`),d=u(s,e.nameField,`Plan ${l+1}`);return{id:r,name:d,tagline:s[e.taglineField]===void 0?void 0:u(s,e.taglineField,""),monthly:F(s,e.priceField,0),features:ve(s,e.featuresField),promoted:e.promotedTier===void 0?S(s,e.promotedField)??!1:e.promotedTier===r||e.promotedTier===d,current:S(s,e.currentField)??!1}})}function Mt({config:e,data:n,onEvent:a}){const s=c.useMemo(()=>nt(e,n),[e,n]);return s.length===0?t.jsx(w,{title:e.emptyTitle??"No plans",body:e.emptyBody??"Bind a plans table with a name and a monthly price."}):t.jsx(st,{plans:s,annualDiscount:e.annualDiscount,period:e.period,selectable:e.selectable,...e.format?.currency===void 0?{}:{currency:e.format.currency},...e.format?.locale===void 0?{}:{locale:e.format.locale},...e.ctaLabel===void 0?{}:{ctaLabel:e.ctaLabel},...e.currentLabel===void 0?{}:{currentLabel:e.currentLabel},...e.popularLabel===void 0?{}:{popularLabel:e.popularLabel},...e.monthlyLabel===void 0?{}:{monthlyLabel:e.monthlyLabel},...e.annualLabel===void 0?{}:{annualLabel:e.annualLabel},...e.perMonthLabel===void 0?{}:{perMonthLabel:e.perMonthLabel},...e.billedAnnuallyLabel===void 0?{}:{billedAnnuallyLabel:e.billedAnnuallyLabel},...e.testId===void 0?{}:{testId:e.testId},...e.href===void 0?{}:{onSelect:l=>{a({type:"drill-through",href:`${e.href}?plan=${encodeURIComponent(l)}`})}}})}const lt={POST:"insert",PATCH:"update",PUT:"update",DELETE:"delete"};function dt(e){try{return JSON.stringify(e,null,2)??"null"}catch{return String(e)}}function rt({endpoint:e,paradigm:n="REST",locale:a,sendLabel:s,requestLabel:l,responseLabel:r,paramsLabel:d,responsePlaceholder:m,onSend:b,testId:i}){const[x,N]=c.useState(()=>Object.fromEntries(e.params.map(f=>[f.key,f.value]))),[h,v]=c.useState(!1),o=e.status>=500?"danger":e.status>=400?"warn":"pos";return t.jsxs("div",{"data-widget":"api-playground","data-testid":i,"data-paradigm":n,className:"flex h-full flex-col gap-3 overflow-auto px-4 pb-4",children:[t.jsxs("section",{className:"flex flex-col gap-2","aria-label":l??"Request",children:[t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx(D,{mono:!0,tone:ke[e.method],"data-part":"playground-method",children:e.method}),t.jsx(j,{dir:"ltr",className:"min-w-0 flex-1 truncate text-body-sm text-fg","data-part":"playground-path",children:e.path}),t.jsx(I,{size:"sm",iconLeft:t.jsx(se,{className:"size-3.5"}),"data-part":"playground-send",onClick:()=>{v(!0),b?.(x)},children:s??"Send"})]}),e.params.length===0?null:t.jsxs("div",{className:"flex flex-col gap-1.5",children:[t.jsx("p",{className:"text-caption font-semibold text-fg-subtle",children:d??"Parameters"}),e.params.map(f=>t.jsxs("label",{className:"flex items-center gap-2","data-part":"playground-param",children:[t.jsx(j,{className:"w-28 shrink-0 truncate text-caption text-fg-muted",children:f.key}),t.jsx(Te,{mono:!0,value:x[f.key]??"","data-param":f.key,onChange:T=>N(M=>({...M,[f.key]:T.target.value}))})]},f.key))]})]}),t.jsxs("section",{className:"flex min-h-0 flex-1 flex-col gap-1.5","aria-label":r??"Response",children:[t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx("p",{className:"text-caption font-semibold text-fg-subtle",children:r??"Response"}),h?t.jsxs(t.Fragment,{children:[t.jsx(L,{tone:o,dot:!0,"data-part":"playground-status",children:String(e.status)}),t.jsx(j,{className:"text-caption text-fg-subtle","data-part":"playground-latency",children:K(e.latencyMs,a)})]}):null]}),t.jsx("div",{dir:"ltr","data-testid":"playground-response",className:"min-h-24 flex-1 overflow-auto rounded-lg bg-fg p-3",children:h?t.jsx(j,{asChild:!0,children:t.jsx("pre",{className:"whitespace-pre-wrap break-words text-caption text-bg",children:dt(e.sample)})}):t.jsx("p",{className:"text-caption text-bg/60",children:m??"Send the request to see the response."})})]})]})}function it(e,n){const a=A(n);if(a===null)return null;const s=a[e.paramsField],l=[];if(Array.isArray(s))for(const r of s){const d=ae(r);d===null||typeof d.key!="string"||l.push({key:d.key,value:d.value===void 0?"":String(d.value)})}return{method:Fe(a[e.methodField]),path:u(a,e.pathField,"/"),params:l,sample:a[e.sampleField]??null,status:F(a,e.statusField,200),latencyMs:F(a,e.latencyField,0)}}function At({config:e,data:n,onEvent:a}){const s=c.useMemo(()=>it(e,n),[e,n]),l=c.useMemo(()=>C(e.binding),[e.binding]);if(s===null)return t.jsx(w,{title:e.emptyTitle??"No endpoint selected",body:e.emptyBody??"Pick an endpoint to compose a request against it."});const r=lt[s.method];return t.jsx(rt,{endpoint:s,paradigm:e.paradigm,...e.format?.locale===void 0?{}:{locale:e.format.locale},...e.sendLabel===void 0?{}:{sendLabel:e.sendLabel},...e.requestLabel===void 0?{}:{requestLabel:e.requestLabel},...e.responseLabel===void 0?{}:{responseLabel:e.responseLabel},...e.paramsLabel===void 0?{}:{paramsLabel:e.paramsLabel},...e.responsePlaceholder===void 0?{}:{responsePlaceholder:e.responsePlaceholder},...e.testId===void 0?{}:{testId:e.testId},...l===null||r===void 0?{}:{onSend:d=>{a({type:"mutate",intent:r,connectionId:l.connectionId,table:l.table,values:d})}}})}function ct({status:e,locale:n,syncAction:a,connectedLabel:s,disconnectedLabel:l,rowsSyncedLabel:r,tablesLabel:d,lastSyncLabel:m,nextSyncLabel:b,syncingLabel:i,onSync:x,testId:N}){const h=e.phase==="syncing",v=e.connected?e.phase==="failed"?"danger":"pos":"danger",o=Y(e.lastSync,n),f=Y(e.nextSync,n);return t.jsxs("div",{"data-widget":"sync-status-card","data-testid":N,"data-phase":e.phase,className:"flex h-full flex-col gap-3 overflow-auto px-4 pb-4",children:[t.jsxs("div",{className:"flex items-start gap-2.5",children:[t.jsx(ee,{tone:v,size:"sm",icon:t.jsx(Ae,{})}),t.jsxs("div",{className:"min-w-0 flex-1",children:[t.jsx(j,{className:"block truncate text-body-sm font-bold text-fg",children:e.name}),e.engine===void 0?null:t.jsx("p",{className:"truncate text-caption text-fg-subtle",children:e.engine})]}),t.jsx(L,{tone:v,dot:!0,"data-part":"sync-connection",children:e.connected?e.latencyMs===void 0?s??"Connected":`${s??"Connected"} · ${K(e.latencyMs,n)}`:l??"Disconnected"})]}),t.jsxs("div",{children:[t.jsx(j,{"data-part":"sync-rows",className:"text-h2 font-bold tabular-nums text-fg",children:Oe(e.rowsSynced,n)}),t.jsx("p",{className:"text-caption text-fg-subtle",children:r??"Rows synced"})]}),t.jsxs("dl",{className:"grid grid-cols-2 gap-x-3 gap-y-1.5 text-caption",children:[t.jsxs("div",{children:[t.jsx("dt",{className:"text-fg-subtle",children:d??"Tables"}),t.jsx("dd",{children:t.jsx(j,{className:"font-semibold text-fg",children:U(e.tables,n)})})]}),o===void 0?null:t.jsxs("div",{className:"min-w-0",children:[t.jsx("dt",{className:"text-fg-subtle",children:m??"Last sync"}),t.jsx("dd",{className:"truncate text-fg",children:o})]}),f===void 0?null:t.jsxs("div",{className:"min-w-0",children:[t.jsx("dt",{className:"text-fg-subtle",children:b??"Next sync"}),t.jsx("dd",{className:"truncate text-fg",children:f})]})]}),x===void 0?null:t.jsx(I,{variant:"secondary",size:"sm",className:"mt-auto self-start","data-part":"sync-now",disabled:h,iconLeft:t.jsx(Pe,{className:`size-3.5 ${h?"animate-spin":""}`}),onClick:x,children:h?i??"Syncing…":a??"Sync now"})]})}function ot(e,n){const a=A(n);return a===null?null:{name:u(a,e.nameField,"Connection"),engine:a[e.engineField]===void 0?void 0:u(a,e.engineField,""),connected:S(a,e.connectedField)??!0,latencyMs:a[e.latencyField]===void 0?void 0:F(a,e.latencyField,0),rowsSynced:F(a,e.rowsSyncedField,0),tables:F(a,e.tablesField,0),lastSync:$(a,e.lastSyncField),nextSync:$(a,e.nextSyncField),phase:Me(a[e.phaseField],["idle","syncing","synced","failed"],"idle")}}function Ot({config:e,data:n,onEvent:a}){const s=c.useMemo(()=>ot(e,n),[e,n]),l=c.useMemo(()=>C(e.binding),[e.binding]);return s===null?t.jsx(w,{title:e.emptyTitle??"No connection",body:e.emptyBody??"Bind a connection row to show its sync status."}):t.jsx(ct,{status:s,...e.format?.locale===void 0?{}:{locale:e.format.locale},...e.syncAction===void 0?{}:{syncAction:e.syncAction},...e.connectedLabel===void 0?{}:{connectedLabel:e.connectedLabel},...e.disconnectedLabel===void 0?{}:{disconnectedLabel:e.disconnectedLabel},...e.rowsSyncedLabel===void 0?{}:{rowsSyncedLabel:e.rowsSyncedLabel},...e.tablesLabel===void 0?{}:{tablesLabel:e.tablesLabel},...e.lastSyncLabel===void 0?{}:{lastSyncLabel:e.lastSyncLabel},...e.nextSyncLabel===void 0?{}:{nextSyncLabel:e.nextSyncLabel},...e.syncingLabel===void 0?{}:{syncingLabel:e.syncingLabel},...e.testId===void 0?{}:{testId:e.testId},...l===null?{}:{onSync:()=>{a({type:"mutate",intent:"update",connectionId:l.connectionId,table:l.table,values:{phase:"syncing"}})}}})}function ut(e,n){if(!e.running||e.startedAt===void 0)return Math.max(0,e.elapsed);const a=Math.max(0,(n-e.startedAt)/1e3);return Math.max(0,e.elapsed+a)}function pt({timer:e,now:n,locale:a,startLabel:s,stopLabel:l,taskPlaceholder:r,onStart:d,onStop:m,testId:b}){const i=ut(e,n),x=e.running?"destructive":"primary";return t.jsxs("div",{"data-widget":"live-timer","data-testid":b,"data-running":e.running?"":void 0,className:"flex h-full flex-col justify-center gap-3 px-4 pb-4 sm:flex-row sm:items-center",children:[t.jsxs("div",{className:"min-w-0 flex-1",children:[t.jsx("p",{className:"truncate text-body-sm font-semibold text-fg","data-part":"timer-task",children:e.taskName===""?r??"Untitled task":e.taskName}),e.project===void 0?null:t.jsx(L,{tone:"neutral",className:"mt-0.5","data-part":"timer-project",children:e.project})]}),t.jsx(j,{"data-part":"timer-readout","aria-live":"off",className:`text-h1 font-bold tabular-nums ${e.running?"text-danger":"text-fg"}`,children:Se(i,a)}),e.running?m===void 0?null:t.jsx(I,{variant:x,size:"sm","data-part":"timer-stop",iconLeft:t.jsx(Ie,{className:"size-3.5"}),onClick:()=>m(Math.floor(i)),children:l??"Stop"}):d===void 0?null:t.jsx(I,{variant:x,size:"sm","data-part":"timer-start",iconLeft:t.jsx(se,{className:"size-3.5"}),onClick:d,children:s??"Start"})]})}function mt(e,n){const a=A(n);return a===null?null:{taskName:u(a,e.taskField,""),project:a[e.projectField]===void 0?void 0:u(a,e.projectField,""),running:S(a,e.runningField)??!1,elapsed:F(a,e.elapsedField,0),startedAt:$(a,e.startedAtField)}}function xt(e,n,a){const[s,l]=c.useState(a);return c.useEffect(()=>{if(e!==void 0||!n)return;l(Date.now());const r=setInterval(()=>l(Date.now()),1e3);return()=>clearInterval(r)},[e,n]),ge(e,s)}function Pt({config:e,data:n,onEvent:a}){const s=c.useMemo(()=>mt(e,n),[e,n]),l=c.useMemo(()=>C(e.binding),[e.binding]),r=xt(e.format?.referenceTime,s?.running??!1,Ce);return s===null?t.jsx(w,{title:e.emptyTitle??"No timer",body:e.emptyBody??"Bind a time-entry row with a task and a duration column."}):t.jsx(pt,{timer:s,now:r,...e.format?.locale===void 0?{}:{locale:e.format.locale},...e.startLabel===void 0?{}:{startLabel:e.startLabel},...e.stopLabel===void 0?{}:{stopLabel:e.stopLabel},...e.taskPlaceholder===void 0?{}:{taskPlaceholder:e.taskPlaceholder},...e.testId===void 0?{}:{testId:e.testId},...l===null?{}:{onStart:()=>{a({type:"mutate",intent:"update",connectionId:l.connectionId,table:l.table,values:{[e.runningField]:!0,[e.startedAtField]:r}})},onStop:d=>{d>=e.minSeconds&&a({type:"mutate",intent:"insert",connectionId:l.connectionId,table:l.table,values:{[e.taskField]:s.taskName,...s.project===void 0?{}:{[e.projectField]:s.project},[e.elapsedField]:d,billable:e.defaultBillable}}),a({type:"mutate",intent:"update",connectionId:l.connectionId,table:l.table,values:{[e.runningField]:!1,[e.elapsedField]:0}})}}})}const bt={SELECT:"info",INSERT:"pos",UPDATE:"warn",DELETE:"danger",ALL:"danger"};function ht({policies:e,enableLabel:n,onToggle:a,testId:s}){return t.jsx("ul",{"data-widget":"policy-list","data-testid":s,className:"flex h-full flex-col gap-1.5 overflow-auto px-4 pb-4",children:e.map(l=>t.jsxs("li",{"data-part":"policy-row","data-enabled":l.enabled?"":void 0,className:"flex items-center gap-2 rounded-lg border border-border bg-surface-2 p-2.5",children:[t.jsxs("div",{className:`flex min-w-0 flex-1 items-center gap-2 ${l.enabled?"":"opacity-50"}`,children:[t.jsx(D,{mono:!0,tone:bt[l.cmd]??"neutral",className:"shrink-0","data-part":"policy-cmd",children:l.cmd}),t.jsxs("div",{className:"min-w-0 flex-1",children:[t.jsx("p",{className:"truncate text-body-sm text-fg","data-part":"policy-name",children:l.name}),t.jsx(j,{className:"block truncate text-caption text-fg-subtle","data-part":"policy-role",children:l.role})]})]}),t.jsx($e,{"data-part":"policy-toggle",checked:l.enabled,"aria-label":n??l.name,className:"shrink-0",...a===void 0?{disabled:!0}:{onCheckedChange:r=>a(l,r)}})]},l.id))})}function ft(e,n){return k(n).map((a,s)=>({id:u(a,e.idField,`p${s}`),name:u(a,e.nameField,""),cmd:u(a,e.cmdField,"").toUpperCase(),role:u(a,e.roleField,""),enabled:S(a,e.enabledField)??!1}))}function Bt({config:e,data:n,onEvent:a}){const s=c.useMemo(()=>ft(e,n),[e,n]),l=c.useMemo(()=>C(e.binding),[e.binding]);return s.length===0?t.jsx(w,{title:e.emptyTitle??"No policies",body:e.emptyBody??"This table has no row-level security policies yet."}):t.jsx(ht,{policies:s,...e.enableLabel===void 0?{}:{enableLabel:e.enableLabel},...e.testId===void 0?{}:{testId:e.testId},...l===null?{}:{onToggle:(r,d)=>{a({type:"mutate",intent:"update",connectionId:l.connectionId,table:l.table,recordId:r.id,values:{[e.enabledField]:d}})}}})}function yt({entries:e,copyResetMs:n=1400,copyLabel:a,copiedLabel:s,testId:l}){const[r,d]=c.useState(null),m=c.useRef(void 0);c.useEffect(()=>()=>clearTimeout(m.current),[]);const b=i=>{globalThis.navigator?.clipboard?.writeText?.(i)?.catch?.(()=>{}),d(i),clearTimeout(m.current),m.current=setTimeout(()=>d(null),n)};return t.jsx("ul",{"data-widget":"ip-allowlist-card","data-testid":l,className:"flex h-full flex-col gap-1 overflow-auto px-4 pb-4",children:e.map(i=>t.jsxs("li",{"data-part":"allowlist-row",className:"flex items-center gap-2 rounded-md bg-surface-2 px-2.5 py-1.5",children:[t.jsx(j,{dir:"ltr",className:"min-w-0 flex-1 truncate text-caption text-fg","data-part":"allowlist-ip",children:i.ip}),i.label===void 0?null:t.jsx(L,{tone:"neutral",className:"shrink-0","data-part":"allowlist-label",children:i.label}),t.jsx(Be,{size:"sm",variant:"ghost",className:"shrink-0","data-part":"allowlist-copy",label:r===i.ip?s??"Copied":a??"Copy",onClick:()=>b(i.ip),children:r===i.ip?t.jsx(H,{className:"size-3.5 text-pos"}):t.jsx(Ee,{className:"size-3.5"})})]},i.ip))})}function Et({config:e,data:n}){const a=c.useMemo(()=>k(n).map(s=>({ip:u(s,e.ipField,""),label:s[e.labelFieldName]===void 0?void 0:u(s,e.labelFieldName,"")})).filter(s=>s.ip!==""),[e,n]);return a.length===0?t.jsx(w,{title:e.emptyTitle??"No egress IPs",body:e.emptyBody??"Egress addresses appear here once the connection is provisioned."}):t.jsx(yt,{entries:a,copyResetMs:e.copyResetMs,...e.copyLabel===void 0?{}:{copyLabel:e.copyLabel},...e.copiedLabel===void 0?{}:{copiedLabel:e.copiedLabel},...e.testId===void 0?{}:{testId:e.testId}})}function jt({badges:e,testId:n}){return t.jsx("ul",{"data-widget":"trust-badges","data-testid":n,className:"flex flex-wrap items-center gap-x-2 gap-y-1 px-4 pb-4 text-caption text-fg-muted",children:e.map((a,s)=>t.jsxs("li",{className:"flex items-center gap-2","data-part":"trust-badge",children:[s===0?null:t.jsx("span",{"aria-hidden":"true",className:"text-fg-subtle",children:"·"}),t.jsx("span",{children:a})]},a))})}function $t({config:e,data:n}){const a=c.useMemo(()=>e.badges??k(n).map(s=>u(s,e.labelFieldName,"")).filter(s=>s!==""),[e.badges,e.labelFieldName,n]);return a.length===0?t.jsx(w,{title:e.emptyTitle??"No badges",body:e.emptyBody??"Add compliance claims in config or bind a badges table."}):t.jsx(jt,{badges:a,...e.testId===void 0?{}:{testId:e.testId}})}function Nt({testimonial:e,locale:n,testId:a}){const s=[e.role,e.company].filter(l=>l!==void 0&&l!=="");return t.jsxs("figure",{"data-widget":"testimonial-card","data-testid":a,className:"flex h-full flex-col gap-3 overflow-auto px-4 pb-4",children:[t.jsx(De,{"aria-hidden":"true",className:"size-5 shrink-0 text-accent opacity-60"}),t.jsx("blockquote",{className:"flex-1 text-body-sm leading-relaxed text-fg","data-part":"testimonial-quote",children:e.quote}),t.jsxs("figcaption",{className:"flex items-center gap-2.5",children:[t.jsx(Re,{size:"sm",name:e.initials??e.name,label:e.name,"data-part":"testimonial-avatar",...n===void 0?{}:{locale:n}}),t.jsxs("div",{className:"min-w-0",children:[t.jsx("p",{className:"truncate text-body-sm font-semibold text-fg","data-part":"testimonial-name",children:e.name}),s.length===0?null:t.jsx("p",{className:"truncate text-caption text-fg-subtle","data-part":"testimonial-attribution",children:s.join(" · ")})]})]})]})}function Dt({config:e,data:n}){const a=c.useMemo(()=>{const s=A(n);if(s===null)return null;const l=u(s,e.quoteField,"");return l===""?null:{quote:l,name:u(s,e.nameField,""),role:s[e.roleField]===void 0?void 0:u(s,e.roleField,""),company:s[e.companyField]===void 0?void 0:u(s,e.companyField,""),initials:s[e.initialsField]===void 0?void 0:u(s,e.initialsField,"")}},[e,n]);return a===null?t.jsx(w,{title:e.emptyTitle??"No testimonial",body:e.emptyBody??"Bind a quote row to show a customer testimonial."}):t.jsx(Nt,{testimonial:a,...e.format?.locale===void 0?{}:{locale:e.format.locale},...e.testId===void 0?{}:{testId:e.testId}})}const vt={invoice:"Invoice",report:"Report",email:"Email"};function wt({series:e}){const n=Math.max(1,...e);return t.jsx("div",{"aria-hidden":"true",className:"flex h-10 items-end gap-0.5","data-part":"starter-thumb",children:e.map((a,s)=>t.jsx("span",{className:"h-[var(--bar-h)] min-w-px flex-1 rounded-xs bg-accent opacity-70",style:{"--bar-h":`${Math.max(6,a/n*100)}%`}},`${s}-${a}`))})}function Lt({starters:e,docType:n,blankLabel:a,onSelect:s,testId:l}){const r=n===void 0?void 0:vt[n];return t.jsx("ul",{"data-widget":"starter-template-picker","data-testid":l,className:"grid h-full grid-cols-[repeat(auto-fill,minmax(9rem,1fr))] gap-2 overflow-auto px-4 pb-4",children:e.map(d=>t.jsx("li",{children:t.jsx("button",{type:"button","data-part":"starter-card","data-starter":d.id,"data-blank":d.blank?"":void 0,disabled:s===void 0,onClick:()=>s?.(d),className:`flex h-full w-full flex-col gap-2 rounded-lg p-2.5 text-start transition-colors focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent disabled:cursor-default ${d.blank?"border-2 border-dashed border-border-strong text-fg-muted hover:border-accent hover:text-accent":"border border-border bg-surface-2 hover:border-accent"}`,children:d.blank?t.jsxs("span",{className:"flex flex-1 flex-col items-center justify-center gap-1.5 py-2",children:[t.jsx(_e,{"aria-hidden":"true",className:"size-5"}),t.jsx("span",{className:"text-caption font-semibold",children:a??"Blank"})]}):t.jsxs(t.Fragment,{children:[t.jsx("span",{"aria-hidden":"true",className:"block h-1 w-8 shrink-0 rounded-full bg-accent"}),t.jsx(wt,{series:d.series}),t.jsx("span",{className:"line-clamp-2 text-caption font-semibold text-fg","data-part":"starter-title",children:d.title}),t.jsxs("span",{className:"mt-auto flex flex-wrap items-center gap-1",children:[d.category===void 0?null:t.jsx(D,{tone:"neutral","data-part":"starter-category",children:d.category}),r===void 0?null:t.jsx(D,{tone:"accent","data-part":"starter-kicker",children:r})]})]})})},d.id))})}function Rt({config:e,data:n,onEvent:a}){const s=c.useMemo(()=>C(e.binding),[e.binding]),l=c.useMemo(()=>{const d=e.defs?.map(i=>({id:i.id,title:i.title,category:i.category,series:i.series??[],blank:!1})),m=k(n).map((i,x)=>({id:u(i,e.idField,`st${x}`),title:u(i,e.titleField,""),category:i[e.categoryField]===void 0?void 0:u(i,e.categoryField,""),series:ze(i,e.seriesField),blank:!1})),b=d??m;return e.showBlank?[...b,{id:"__blank__",title:"",series:[],blank:!0}]:b},[e,n]);return l.some(d=>!d.blank)?t.jsx(Lt,{starters:l,docType:e.docType,...e.blankLabel===void 0?{}:{blankLabel:e.blankLabel},...e.testId===void 0?{}:{testId:e.testId},...s===null?{}:{onSelect:d=>{a({type:"mutate",intent:"insert",connectionId:s.connectionId,table:s.table,values:{docType:e.docType,...d.blank?{}:{starterId:d.id}}})}}}):t.jsx(w,{title:e.emptyTitle??"No starters",body:e.emptyBody??"Add starter definitions in config or bind a starters table."})}function Ft({pct:e,label:n}){const s=2*Math.PI*20,l=Math.min(100,Math.max(0,e))/100*s;return t.jsxs("svg",{"aria-hidden":"true",viewBox:"0 0 48 48",className:"size-12 shrink-0 -rotate-90","data-part":"checklist-gauge","data-pct":Math.round(e),children:[t.jsx("circle",{cx:"24",cy:"24",r:20,fill:"none",strokeWidth:"4",className:"stroke-surface-3"}),t.jsx("circle",{cx:"24",cy:"24",r:20,fill:"none",strokeWidth:"4",strokeLinecap:"round",strokeDasharray:`${l} ${s-l}`,className:"stroke-accent transition-[stroke-dasharray] duration-300",children:t.jsx("title",{children:n})})]})}function kt({tasks:e,locale:n,progressLabel:a,celebrateOnComplete:s=!0,celebrateTitle:l,celebrateBody:r,onToggle:d,onAction:m,testId:b}){const i=e.filter(o=>o.done).length,x=e.length,N=x===0?0:i/x*100,h=x>0&&i===x,v=R(a??"{done} of {total} done",{done:i.toString(),total:x.toString()});return t.jsxs("div",{"data-widget":"onboarding-checklist","data-testid":b,"data-complete":h?"":void 0,className:"flex h-full flex-col gap-3 overflow-auto px-4 pb-4",children:[h&&s?t.jsxs("div",{className:"flex items-center gap-2.5 rounded-lg bg-pos-soft p-3","data-part":"checklist-celebrate",children:[t.jsx(H,{"aria-hidden":"true",className:"size-5 shrink-0 text-pos"}),t.jsxs("div",{className:"min-w-0",children:[t.jsx("p",{className:"text-body-sm font-bold text-pos",children:l??"All done"}),r===void 0?null:t.jsx("p",{className:"text-caption text-fg-muted",children:r})]})]}):t.jsxs("div",{className:"flex items-center gap-3",children:[t.jsx(Ft,{pct:N,label:v}),t.jsxs("div",{className:"min-w-0 flex-1",children:[t.jsx("p",{className:"text-body-sm font-semibold text-fg","data-part":"checklist-progress",children:v}),t.jsx(q,{value:N,tone:"accent",size:"sm",animated:!1,label:v,className:"mt-1"})]}),t.jsx("span",{className:"shrink-0 text-caption font-bold tabular-nums text-accent","data-part":"checklist-pct",children:g(N,n)})]}),t.jsx("ul",{className:"flex flex-col gap-1.5",children:e.map(o=>t.jsxs("li",{"data-part":"checklist-task","data-done":o.done?"":void 0,className:"flex items-start gap-2.5 rounded-lg border border-border bg-surface-2 p-2.5",children:[t.jsx("input",{type:"checkbox","data-part":"checklist-toggle",className:"mt-0.5 size-4 shrink-0 accent-accent",checked:o.done,disabled:d===void 0,"aria-label":o.title,onChange:f=>d?.(o,f.currentTarget.checked)}),t.jsxs("div",{className:"min-w-0 flex-1",children:[t.jsx("p",{className:`text-body-sm font-semibold ${o.done?"text-fg-muted line-through":"text-fg"}`,"data-part":"checklist-title",children:o.title}),o.desc===void 0?null:t.jsx("p",{className:"mt-0.5 text-caption text-fg-subtle",children:o.desc}),o.minutes===void 0?null:t.jsx(L,{tone:"neutral",className:"mt-1","data-part":"checklist-time",children:We(o.minutes,n)})]}),o.action===void 0||o.done||m===void 0?null:t.jsx(I,{variant:"secondary",size:"sm",className:"shrink-0","data-part":"checklist-cta",onClick:()=>m(o),children:o.action})]},o.id))})]})}function zt({config:e,data:n,onEvent:a}){const s=c.useMemo(()=>C(e.binding),[e.binding]),l=c.useMemo(()=>e.tasks?.map(d=>({id:d.id,title:d.title,desc:d.description,minutes:d.minutes,action:d.action,href:d.href,done:d.done??!1}))??k(n).map((d,m)=>({id:u(d,e.idField,`step${m}`),title:u(d,e.titleField,""),desc:d[e.descField]===void 0?void 0:u(d,e.descField,""),minutes:d[e.minutesField]===void 0?void 0:F(d,e.minutesField,0),action:d[e.actionField]===void 0?void 0:u(d,e.actionField,""),href:d[e.hrefField]===void 0?void 0:u(d,e.hrefField,""),done:S(d,e.doneField)??!1})),[e,n]);return l.length===0?t.jsx(w,{title:e.emptyTitle??"Nothing to set up",body:e.emptyBody??"Add onboarding steps in config or bind a steps table."}):t.jsx(kt,{tasks:l,celebrateOnComplete:e.celebrateOnComplete,...e.format?.locale===void 0?{}:{locale:e.format.locale},...e.progressLabel===void 0?{}:{progressLabel:e.progressLabel},...e.celebrateTitle===void 0?{}:{celebrateTitle:e.celebrateTitle},...e.celebrateBody===void 0?{}:{celebrateBody:e.celebrateBody},...e.testId===void 0?{}:{testId:e.testId},onAction:r=>{r.href===void 0||r.href===""||a({type:"drill-through",href:r.href})},...s===null?{}:{onToggle:(r,d)=>{a({type:"mutate",intent:"update",connectionId:s.connectionId,table:s.table,recordId:r.id,values:{[e.doneField]:d}})}}})}export{Vt as ApiKeysPanelWidget,At as ApiPlaygroundWidget,Ut as CodeSnippetBlockWidget,Ct as CreditCardTileWidget,It as ExperimentVariantCompareWidget,Et as IpAllowlistCardWidget,Pt as LiveTimerWidget,zt as OnboardingChecklistWidget,Mt as PlanPricingCardsWidget,Bt as PolicyListWidget,qt as ResourceApiCardWidget,gt as SloMonitorCardWidget,Rt as StarterTemplatePickerWidget,Ot as SyncStatusCardWidget,Dt as TestimonialCardWidget,$t as TrustBadgesWidget,St as UptimeSegmentBarWidget,Kt as WebhookEndpointsListWidget};
|
|
2
|
+
//# sourceMappingURL=domain-ops-track-components-BPa41AU7.js.map
|