@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":"bars-ranking-components-9Asn_0gR.js","sources":["../../../../packages/charts/dist/geometry/bullet.js","../../../../packages/charts/dist/components/BulletChart.js","../../../../packages/charts/dist/geometry/ranking.js","../../../../packages/charts/dist/components/RankingBars.js","../../../../packages/charts/dist/geometry/pareto.js","../../../../packages/charts/dist/components/ParetoChart.js","../../../../packages/charts/dist/geometry/waterfall.js","../../../../packages/charts/dist/components/WaterfallChart.js","../../../../packages/charts/dist/geometry/marimekko.js","../../../../packages/charts/dist/components/MarimekkoChart.js","../../../../packages/charts/dist/geometry/stacked100.js","../../../../packages/charts/dist/components/StackedBar100.js","../../../../packages/charts/dist/geometry/slope.js","../../../../packages/charts/dist/components/SlopeChart.js","../../../../packages/widgets/dist/families/charts/bars-ranking-shapes.js","../../../../packages/widgets/dist/families/charts/BarsRankingWidgets.js"],"sourcesContent":["/**\n * Pure bullet-graph layout (`chart-bullet`, research/widget-registry.md §2):\n * per row a stack of qualitative bands + a measure bar + a target tick. DOM-free.\n * The horizontal value axis mirrors in RTL (annex §7.4): bands/measure anchor at\n * inline-start (the right edge under `rtl`) and grow toward inline-end.\n */\n/** Map a value in [0, max] to an inline-start-anchored pixel length. */\nfunction lengthFor(value, max, width) {\n if (max <= 0)\n return 0;\n return (Math.max(0, Math.min(value, max)) / max) * width;\n}\n/** Map a value to a pixel x honoring the RTL axis flip. */\nfunction xFor(value, max, width, rtl) {\n const len = lengthFor(value, max, width);\n return rtl ? width - len : len;\n}\nexport function layoutBullet(items, options) {\n const { width, height, rtl } = options;\n const n = items.length;\n if (n === 0 || width <= 0 || height <= 0)\n return { rows: [], rowHeight: 0 };\n const rowHeight = height / n;\n const trackHeight = Math.max(6, rowHeight * 0.55);\n const measureHeight = Math.max(3, trackHeight * 0.34);\n const rows = items.map((item, index) => {\n const cutoffs = [...(item.bandCutoffs ?? [])].filter((c) => c > 0).sort((a, b) => a - b);\n const max = item.max ?? Math.max(item.measure, item.target, cutoffs.at(-1) ?? 0, 1);\n const rowY = index * rowHeight;\n const trackY = rowY + (rowHeight - trackHeight) / 2;\n // Band edges: 0, ...cutoffs, max → contiguous zones.\n const edges = [0, ...cutoffs.filter((c) => c < max), max];\n const zoneCount = edges.length - 1;\n const bands = [];\n for (let i = 0; i < zoneCount; i += 1) {\n const lo = edges[i] ?? 0;\n const hi = edges[i + 1] ?? max;\n const xLo = xFor(lo, max, width, rtl);\n const xHi = xFor(hi, max, width, rtl);\n bands.push({\n index: i,\n x: Math.min(xLo, xHi),\n width: Math.abs(xHi - xLo),\n level: zoneCount <= 1 ? 1 : i / (zoneCount - 1),\n });\n }\n const measureLen = lengthFor(item.measure, max, width);\n return {\n index,\n label: item.label,\n measure: item.measure,\n target: item.target,\n max,\n rowY,\n trackY,\n trackHeight,\n bands,\n measureX: rtl ? width - measureLen : 0,\n measureWidth: measureLen,\n measureY: rowY + (rowHeight - measureHeight) / 2,\n measureHeight,\n targetX: xFor(item.target, max, width, rtl),\n };\n });\n return { rows, rowHeight };\n}\n//# sourceMappingURL=bullet.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { layoutBullet } from '../geometry/bullet.js';\nimport { formatCompact } from '../utils/format.js';\nimport { ChartSurface } from './ChartSurface.js';\n/** Band level (0..1) → accent ramp token (ramp-1 lightest → ramp-3). */\nfunction bandColor(level) {\n return `var(--viz-ramp-${1 + Math.round(level * 2)})`;\n}\nexport function BulletChart({ data, labels, height = 200, labelGutter = 92, valueGutter = 52, formatValue = formatCompact, dir, a11yFallback, className, }) {\n return (_jsx(ChartSurface, { labels: labels, height: height, ...(dir !== undefined ? { dir } : {}), ...(a11yFallback !== undefined ? { a11yFallback } : {}), ...(className !== undefined ? { className } : {}), padding: { top: 4, bottom: 4, left: 2, right: 2 }, children: ({ innerWidth, innerHeight, rtl, mounted }) => {\n const trackWidth = Math.max(0, innerWidth - labelGutter - valueGutter);\n if (data.length === 0 || trackWidth <= 0 || innerHeight <= 0)\n return null;\n const trackStart = rtl ? valueGutter : labelGutter;\n const layout = layoutBullet(data, { width: trackWidth, height: innerHeight, rtl });\n const labelEdge = rtl ? innerWidth : 0;\n const valueEdge = rtl ? 0 : innerWidth;\n return (_jsx(\"g\", { className: \"adm-chart-fade\", style: { '--adm-fade': mounted ? '1' : '0' }, children: layout.rows.map((row) => {\n const midY = row.rowY + layout.rowHeight / 2 + 3;\n return (_jsxs(\"g\", { \"data-bullet-row\": row.index, children: [row.bands.map((bandSeg) => (_jsx(\"rect\", { x: trackStart + bandSeg.x, y: row.trackY, width: bandSeg.width, height: row.trackHeight, rx: 2, fill: bandColor(bandSeg.level), \"data-band\": bandSeg.index }, bandSeg.index))), _jsx(\"rect\", { x: trackStart + row.measureX, y: row.measureY, width: row.measureWidth, height: row.measureHeight, rx: 1.5, fill: \"var(--fg)\", \"data-measure\": \"\" }), _jsx(\"rect\", { x: trackStart + row.targetX - 1, y: row.trackY - 2, width: 2, height: row.trackHeight + 4, fill: \"var(--danger)\", \"data-target\": \"\" }), _jsx(\"text\", { className: \"adm-chart-axis-label\", x: labelEdge, y: midY, textAnchor: rtl ? 'end' : 'start', children: row.label }), _jsx(\"text\", { className: \"adm-chart-num\", x: valueEdge, y: midY, textAnchor: rtl ? 'start' : 'end', fontSize: 11, fontWeight: 700, fill: \"var(--fg)\", children: formatValue(row.measure) })] }, row.label));\n }) }));\n } }));\n}\n//# sourceMappingURL=BulletChart.js.map","/**\n * Pure ranking-bar layout (`chart-ranking-bars`, research/widget-registry.md\n * §2): label + proportional horizontal bar (leader solid, rest dimmed) + mono\n * value. DOM-free so scheduled-report workers reuse it. Horizontal value axis\n * mirrors in RTL (annex §7.4: categorical/ranking scales flip; bars anchor at\n * inline-start, which is the right edge under `rtl`).\n */\n/**\n * Lay out top-N horizontal bars. Input is assumed pre-sorted descending (the\n * server returns sorted `categorical`); the leader is whichever row holds the\n * maximum value. Bar length is proportional to the maximum value so the leader\n * fills the track.\n */\nexport function layoutRanking(items, options) {\n const { width, height, rtl, barRatio = 0.5, max } = options;\n const rows = max !== undefined ? items.slice(0, max) : [...items];\n const n = rows.length;\n if (n === 0 || width <= 0 || height <= 0)\n return { bars: [], rowHeight: 0 };\n const rowHeight = height / n;\n const barHeight = rowHeight * barRatio;\n const peak = rows.reduce((m, r) => Math.max(m, r.value), 0);\n const leaderIndex = rows.reduce((best, r, i) => (r.value > (rows[best]?.value ?? -Infinity) ? i : best), 0);\n const bars = rows.map((row, index) => {\n const frac = peak > 0 ? Math.max(0, row.value) / peak : 0;\n const barWidth = frac * width;\n const rowY = index * rowHeight;\n return {\n index,\n label: row.label,\n value: row.value,\n rowY,\n y: rowY + (rowHeight - barHeight) / 2,\n x: rtl ? width - barWidth : 0,\n width: barWidth,\n barHeight,\n isLeader: index === leaderIndex,\n };\n });\n return { bars, rowHeight };\n}\n//# sourceMappingURL=ranking.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { layoutRanking } from '../geometry/ranking.js';\nimport { formatCompact } from '../utils/format.js';\nimport { ChartSurface } from './ChartSurface.js';\nexport function RankingBars({ data, labels, max, height = 220, labelGutter = 104, valueGutter = 52, formatValue = formatCompact, dir, a11yFallback, className, }) {\n return (_jsx(ChartSurface, { labels: labels, height: height, ...(dir !== undefined ? { dir } : {}), ...(a11yFallback !== undefined ? { a11yFallback } : {}), ...(className !== undefined ? { className } : {}), padding: { top: 4, bottom: 4, left: 2, right: 2 }, children: ({ innerWidth, innerHeight, rtl, mounted }) => {\n const trackWidth = Math.max(0, innerWidth - labelGutter - valueGutter);\n if (data.length === 0 || trackWidth <= 0 || innerHeight <= 0)\n return null;\n const trackStart = rtl ? valueGutter : labelGutter;\n const layout = layoutRanking(data, {\n width: trackWidth,\n height: innerHeight,\n rtl,\n ...(max !== undefined ? { max } : {}),\n });\n const labelEdge = rtl ? innerWidth : 0;\n const valueEdge = rtl ? 0 : innerWidth;\n return (_jsx(\"g\", { className: \"adm-chart-fade\", style: { '--adm-fade': mounted ? '1' : '0' }, children: layout.bars.map((bar) => {\n const midY = bar.rowY + layout.rowHeight / 2 + 3;\n return (_jsxs(\"g\", { \"data-rank\": bar.index, children: [_jsx(\"rect\", { x: trackStart + bar.x, y: bar.y, width: bar.width, height: bar.barHeight, rx: 3, fill: bar.isLeader ? 'var(--accent)' : 'var(--viz-ramp-3)', \"data-leader\": bar.isLeader ? '' : undefined }), _jsx(\"text\", { className: \"adm-chart-axis-label\", x: labelEdge, y: midY, textAnchor: rtl ? 'end' : 'start', children: bar.label }), _jsx(\"text\", { className: \"adm-chart-num\", x: valueEdge, y: midY, textAnchor: rtl ? 'start' : 'end', fontSize: 11, fontWeight: 700, fill: \"var(--fg)\", children: formatValue(bar.value) })] }, bar.label));\n }) }));\n } }));\n}\n//# sourceMappingURL=RankingBars.js.map","/**\n * Pure Pareto layout (`chart-pareto`, research/widget-registry.md §2): sorted\n * bars + a cumulative-% line, with an optional cutline (default 80%). DOM-free.\n * Categorical x mirrors in RTL (band-scale range flip); the cumulative line is\n * built in the same visual order so it tracks the mirrored bars. Y for bars is\n * value-scaled (left axis); the line uses the 0..1 cumulative axis (right).\n */\nimport { categoricalBandScale } from './scales.js';\nimport { linePath } from './lineArea.js';\nimport { niceTicks } from '../utils/stats.js';\nexport function layoutPareto(items, options) {\n const { width, height, rtl, cutline = 0.8, smooth = false, tickCount = 3 } = options;\n const empty = {\n bars: [],\n linePath: null,\n linePoints: [],\n yTicks: [],\n yFor: () => 0,\n cutlineY: null,\n cutline: cutline ?? 0.8,\n total: 0,\n };\n if (items.length === 0 || width <= 0 || height <= 0)\n return empty;\n const total = items.reduce((sum, item) => sum + Math.max(0, item.value), 0);\n const peak = items.reduce((m, item) => Math.max(m, item.value), 0);\n const yTicks = peak <= 0 ? [0, 1] : niceTicks(0, peak, tickCount);\n const domainHi = yTicks.at(-1) ?? Math.max(peak, 1);\n const yFor = (value) => height - (Math.max(0, value) / (domainHi || 1)) * height;\n /** Right (cumulative) axis maps 0..1 → bottom..top. */\n const cumulativeY = (frac) => height - Math.max(0, Math.min(1, frac)) * height;\n const band = categoricalBandScale(items.map((item) => item.label), width, rtl, { paddingInner: 0.28, paddingOuter: 0.16 });\n const bandwidth = band.bandwidth();\n let running = 0;\n const bars = items.map((item, index) => {\n running += Math.max(0, item.value);\n const cumulative = total > 0 ? running / total : 0;\n const x = band(item.label) ?? 0;\n const barTop = yFor(item.value);\n return {\n index,\n label: item.label,\n value: item.value,\n cumulative,\n x,\n y: barTop,\n width: bandwidth,\n height: height - barTop,\n centerX: x + bandwidth / 2,\n lineY: cumulativeY(cumulative),\n };\n });\n const linePoints = bars.map((bar) => ({ x: bar.centerX, y: bar.lineY }));\n return {\n bars,\n linePath: linePath(linePoints, smooth),\n linePoints,\n yTicks,\n yFor,\n cutlineY: cutline === null ? null : cumulativeY(cutline),\n cutline: cutline ?? 0.8,\n total,\n };\n}\n//# sourceMappingURL=pareto.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { layoutPareto } from '../geometry/pareto.js';\nimport { formatCompact } from '../utils/format.js';\nimport { ChartSurface } from './ChartSurface.js';\nconst PERCENT_TICKS = [0, 0.5, 1];\nexport function ParetoChart({ data, labels, height = 240, cutline = 0.8, smooth = false, showAxis = true, formatValue = formatCompact, dir, a11yFallback, className, }) {\n const gutter = showAxis ? 34 : 6;\n return (_jsx(ChartSurface, { labels: labels, height: height, ...(dir !== undefined ? { dir } : {}), ...(a11yFallback !== undefined ? { a11yFallback } : {}), ...(className !== undefined ? { className } : {}), padding: { top: 10, bottom: 22, left: gutter, right: gutter }, children: ({ innerWidth, innerHeight, rtl, mounted }) => {\n if (data.length === 0 || innerWidth <= 0 || innerHeight <= 0)\n return null;\n const layout = layoutPareto(data, {\n width: innerWidth,\n height: innerHeight,\n rtl,\n cutline,\n smooth,\n });\n const valueEdge = rtl ? innerWidth + 6 : -6;\n const percentEdge = rtl ? -6 : innerWidth + 6;\n const percentY = (frac) => innerHeight - frac * innerHeight;\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: valueEdge, y: layout.yFor(tick) + 3, textAnchor: rtl ? 'start' : 'end', children: formatValue(tick) })] }, `v-${tick}`))), layout.bars.map((bar) => (_jsx(\"rect\", { className: \"adm-chart-grow\", style: { '--adm-grow': mounted ? '1' : '0', '--adm-stagger': `${bar.index * 80}ms` }, x: bar.x, y: bar.y, width: bar.width, height: bar.height, rx: 2, fill: \"var(--viz-ramp-3)\", \"data-bar\": bar.index }, bar.label))), layout.cutlineY !== null && (_jsx(\"line\", { x1: 0, x2: innerWidth, y1: layout.cutlineY, y2: layout.cutlineY, stroke: \"var(--border-strong)\", strokeWidth: 1, strokeDasharray: \"4 4\", \"data-cutline\": \"\" })), _jsxs(\"g\", { className: \"adm-chart-fade\", style: { '--adm-fade': mounted ? '1' : '0' }, children: [layout.linePath !== null && (_jsx(\"path\", { d: layout.linePath, fill: \"none\", stroke: \"var(--accent)\", strokeWidth: 2, strokeLinecap: \"round\", strokeLinejoin: \"round\", \"data-cumulative\": \"\" })), layout.linePoints.map((point, index) => (_jsx(\"circle\", { cx: point.x, cy: point.y, r: 3, fill: \"var(--accent)\", stroke: \"var(--surface)\", strokeWidth: 1.5 }, index)))] }), showAxis &&\n PERCENT_TICKS.map((frac) => (_jsx(\"text\", { className: \"adm-chart-axis-label adm-chart-num\", x: percentEdge, y: percentY(frac) + 3, textAnchor: rtl ? 'end' : 'start', children: `${Math.round(frac * 100)}%` }, `p-${frac}`))), layout.bars.map((bar) => (_jsx(\"text\", { className: \"adm-chart-axis-label\", x: bar.centerX, y: innerHeight + 15, textAnchor: \"middle\", children: bar.label }, `c-${bar.label}`)))] }));\n } }));\n}\n//# sourceMappingURL=ParetoChart.js.map","/**\n * Pure waterfall / bridge layout (`chart-waterfall`, research/widget-registry.md\n * §2): floating bars for signed steps plus total anchors, with connector\n * segments riding the running level. DOM-free. Categorical x mirrors in RTL\n * (band-scale flip); connectors bridge adjacent bars on the correct logical\n * side so they read left→right in LTR and right→left in RTL.\n */\nimport { categoricalBandScale } from './scales.js';\nimport { niceTicks } from '../utils/stats.js';\nexport function layoutWaterfall(items, options) {\n const { width, height, rtl, tickCount = 3 } = options;\n if (items.length === 0 || width <= 0 || height <= 0) {\n return { bars: [], connectors: [], yTicks: [], yFor: () => 0 };\n }\n // First pass in value-space: resolve each bar's low/high band and exit level.\n let running = 0;\n const spans = items.map((item) => {\n const magnitude = Math.max(0, item.value);\n let low;\n let high;\n if (item.type === 'total') {\n running = item.value;\n low = Math.min(0, item.value);\n high = Math.max(0, item.value);\n }\n else if (item.type === 'down') {\n high = running;\n running -= magnitude;\n low = running;\n }\n else {\n low = running;\n running += magnitude;\n high = running;\n }\n return { low, high, exitLevel: running };\n });\n const highest = spans.reduce((m, s) => Math.max(m, s.high), 0);\n const lowest = spans.reduce((m, s) => Math.min(m, s.low), 0);\n const ticks = niceTicks(Math.min(0, lowest), Math.max(1, highest), tickCount);\n const domainLo = ticks[0] ?? Math.min(0, lowest);\n const domainHi = ticks.at(-1) ?? Math.max(1, highest);\n const span = domainHi - domainLo || 1;\n const yFor = (value) => height - ((value - domainLo) / span) * height;\n const band = categoricalBandScale(items.map((item) => item.label), width, rtl, { paddingInner: 0.34, paddingOuter: 0.18 });\n const bandwidth = band.bandwidth();\n const bars = items.map((item, index) => {\n const s = spans[index] ?? { low: 0, high: 0, exitLevel: 0 };\n const x = band(item.label) ?? 0;\n const yHigh = yFor(s.high);\n const yLow = yFor(s.low);\n return {\n index,\n label: item.label,\n value: item.value,\n type: item.type,\n exitLevel: s.exitLevel,\n x,\n y: Math.min(yHigh, yLow),\n width: bandwidth,\n height: Math.max(0, Math.abs(yLow - yHigh)),\n centerX: x + bandwidth / 2,\n };\n });\n const connectors = [];\n for (let i = 0; i < bars.length - 1; i += 1) {\n const a = bars[i];\n const b = bars[i + 1];\n if (a === undefined || b === undefined)\n continue;\n connectors.push({\n fromIndex: i,\n x1: rtl ? a.x : a.x + a.width,\n x2: rtl ? b.x + b.width : b.x,\n y: yFor(a.exitLevel),\n });\n }\n return { bars, connectors, yTicks: ticks, yFor };\n}\n//# sourceMappingURL=waterfall.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { layoutWaterfall } from '../geometry/waterfall.js';\nimport { formatCompact } from '../utils/format.js';\nimport { ChartSurface } from './ChartSurface.js';\nfunction typeColor(type) {\n if (type === 'up')\n return 'var(--pos)';\n if (type === 'down')\n return 'var(--danger)';\n return 'var(--viz-ramp-4)';\n}\nfunction signedText(type, value, format) {\n if (type === 'up')\n return `+${format(value)}`;\n if (type === 'down')\n return `−${format(value)}`;\n return format(value);\n}\nexport function WaterfallChart({ data, labels, height = 260, showAxis = true, formatValue = formatCompact, dir, a11yFallback, className, }) {\n return (_jsx(ChartSurface, { labels: labels, height: height, ...(dir !== undefined ? { dir } : {}), ...(a11yFallback !== undefined ? { a11yFallback } : {}), ...(className !== undefined ? { className } : {}), padding: { top: 18, bottom: 22, left: showAxis ? 36 : 6, right: 8 }, children: ({ innerWidth, innerHeight, rtl, mounted }) => {\n if (data.length === 0 || innerWidth <= 0 || innerHeight <= 0)\n return null;\n const layout = layoutWaterfall(data, { width: innerWidth, height: innerHeight, rtl });\n const valueEdge = rtl ? innerWidth + 6 : -6;\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: valueEdge, y: layout.yFor(tick) + 3, textAnchor: rtl ? 'start' : 'end', children: formatValue(tick) })] }, tick))), layout.connectors.map((connector) => (_jsx(\"line\", { x1: connector.x1, x2: connector.x2, y1: connector.y, y2: connector.y, stroke: \"var(--border-strong)\", strokeWidth: 1, strokeDasharray: \"3 3\", \"data-connector\": connector.fromIndex }, connector.fromIndex))), _jsx(\"g\", { className: \"adm-chart-fade\", style: { '--adm-fade': mounted ? '1' : '0' }, children: layout.bars.map((bar) => (_jsxs(\"g\", { \"data-step\": bar.index, \"data-type\": bar.type, children: [_jsx(\"rect\", { x: bar.x, y: bar.y, width: bar.width, height: Math.max(1, bar.height), rx: 2, fill: typeColor(bar.type) }), _jsx(\"text\", { className: \"adm-chart-num\", x: bar.centerX, y: bar.y - 5, textAnchor: \"middle\", fontSize: 10, fontWeight: 700, fill: \"var(--fg-muted)\", children: signedText(bar.type, bar.value, formatValue) }), _jsx(\"text\", { className: \"adm-chart-axis-label\", x: bar.centerX, y: innerHeight + 15, textAnchor: \"middle\", children: bar.label })] }, bar.label))) })] }));\n } }));\n}\n//# sourceMappingURL=WaterfallChart.js.map","/**\n * Pure Marimekko / Mekko layout (`chart-marimekko`, research/widget-registry.md\n * §2): column width = outer share, vertical segments = inner mix. DOM-free.\n * Input is a `matrix` (rowKeys = inner categories, colKeys = outer columns,\n * cells[row][col] = value). Columns mirror in RTL (first column at inline-start,\n * the right edge under `rtl`); vertical stacking is direction-invariant.\n */\n/**\n * `cells[rowIndex][colIndex]` — the widget adapts the §3 `matrix` envelope\n * (rowKeys × colKeys × cells) into this shape.\n */\nexport function layoutMarimekko(rowKeys, colKeys, cells, options) {\n const { width, height, rtl, gap = 2 } = options;\n const cols = colKeys.length;\n if (cols === 0 || rowKeys.length === 0 || width <= 0 || height <= 0) {\n return { columns: [], grandTotal: 0 };\n }\n const columnTotals = colKeys.map((_col, colIndex) => rowKeys.reduce((sum, _row, rowIndex) => sum + Math.max(0, cells[rowIndex]?.[colIndex] ?? 0), 0));\n const grandTotal = columnTotals.reduce((sum, t) => sum + t, 0);\n const totalGap = gap * Math.max(0, cols - 1);\n const usableWidth = Math.max(0, width - totalGap);\n // Column x positions accumulate inline-start → inline-end; the whole strip\n // mirrors by reflecting the accumulated inline-start offset in RTL.\n let cursor = 0;\n const columns = colKeys.map((colKey, colIndex) => {\n const total = columnTotals[colIndex] ?? 0;\n const share = grandTotal > 0 ? total / grandTotal : 1 / cols;\n const colWidth = usableWidth * share;\n const inlineStart = cursor;\n cursor += colWidth + gap;\n const x = rtl ? width - inlineStart - colWidth : inlineStart;\n let segCursor = 0;\n const segments = rowKeys.map((rowKey, rowIndex) => {\n const value = Math.max(0, cells[rowIndex]?.[colIndex] ?? 0);\n const segShare = total > 0 ? value / total : 0;\n const segHeight = segShare * height;\n const y = segCursor;\n segCursor += segHeight;\n return { rowIndex, rowKey, value, share: segShare, y, height: segHeight };\n });\n return { colIndex, colKey, total, share, x, width: colWidth, segments };\n });\n return { columns, grandTotal };\n}\n//# sourceMappingURL=marimekko.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { layoutMarimekko } from '../geometry/marimekko.js';\nimport { ChartSurface } from './ChartSurface.js';\nfunction formatPercent(share) {\n return `${Math.round(share * 100)}%`;\n}\nexport function MarimekkoChart({ rowKeys, colKeys, cells, labels, height = 260, labelThreshold = 18, dir, a11yFallback, className, }) {\n return (_jsx(ChartSurface, { labels: labels, height: height, ...(dir !== undefined ? { dir } : {}), ...(a11yFallback !== undefined ? { a11yFallback } : {}), ...(className !== undefined ? { className } : {}), padding: { top: 18, bottom: 4, left: 2, right: 2 }, children: ({ innerWidth, innerHeight, rtl, mounted }) => {\n if (rowKeys.length === 0 || colKeys.length === 0 || innerWidth <= 0 || innerHeight <= 0) {\n return null;\n }\n const layout = layoutMarimekko(rowKeys, colKeys, cells, {\n width: innerWidth,\n height: innerHeight,\n rtl,\n });\n return (_jsx(\"g\", { className: \"adm-chart-fade\", style: { '--adm-fade': mounted ? '1' : '0' }, children: layout.columns.map((column) => (_jsxs(\"g\", { \"data-col\": column.colIndex, children: [column.segments.map((segment) => (_jsxs(\"g\", { \"data-seg\": `${column.colIndex}-${segment.rowIndex}`, children: [_jsx(\"rect\", { x: column.x, y: segment.y, width: column.width, height: Math.max(0, segment.height - 1), fill: `var(--viz-${(segment.rowIndex % 8) + 1})` }), segment.height >= labelThreshold && column.width >= 44 && (_jsx(\"text\", { className: \"adm-chart-label\", x: column.x + column.width / 2, y: segment.y + segment.height / 2 + 3, textAnchor: \"middle\", fill: \"var(--surface)\", children: segment.rowKey }))] }, segment.rowKey))), _jsx(\"text\", { className: \"adm-chart-axis-label\", x: column.x + column.width / 2, y: -10, textAnchor: \"middle\", children: column.colKey }), _jsx(\"text\", { className: \"adm-chart-num\", x: column.x + column.width / 2, y: -1, textAnchor: \"middle\", fontSize: 9, fill: \"var(--fg-subtle)\", children: formatPercent(column.share) })] }, column.colKey))) }));\n } }));\n}\n//# sourceMappingURL=MarimekkoChart.js.map","/**\n * Pure 100%-stacked horizontal bar layout (`chart-stacked-bar-100`,\n * research/widget-registry.md §2): one bar split into shares with small gaps.\n * DOM-free. Segment order mirrors in RTL (first share at inline-start = the\n * right edge under `rtl`).\n */\nexport function layoutStacked100(items, options) {\n const { width, rtl, gap = 2 } = options;\n const n = items.length;\n if (n === 0 || width <= 0)\n return { segments: [], total: 0 };\n const total = items.reduce((sum, item) => sum + Math.max(0, item.value), 0);\n const totalGap = gap * Math.max(0, n - 1);\n const usableWidth = Math.max(0, width - totalGap);\n let cursor = 0;\n const segments = items.map((item, index) => {\n const value = Math.max(0, item.value);\n const share = total > 0 ? value / total : 1 / n;\n const segWidth = usableWidth * share;\n const inlineStart = cursor;\n cursor += segWidth + gap;\n return {\n index,\n key: item.key,\n label: item.label,\n value: item.value,\n share,\n x: rtl ? width - inlineStart - segWidth : inlineStart,\n width: segWidth,\n };\n });\n return { segments, total };\n}\n//# sourceMappingURL=stacked100.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { layoutStacked100 } from '../geometry/stacked100.js';\nimport { useChartDir } from '../hooks/useRtl.js';\nimport { ChartSurface } from './ChartSurface.js';\nfunction formatPercent(share) {\n return `${Math.round(share * 100)}%`;\n}\nexport function StackedBar100({ data, labels, barHeight = 26, gapPx = 2, showLegend = true, legendColumns = 2, showSegmentLabels = true, formatValue, dir, a11yFallback, className, }) {\n const resolvedDir = useChartDir(dir);\n return (_jsxs(\"div\", { className: className === undefined ? 'adm-stacked' : `adm-stacked ${className}`, ...(dir !== undefined ? { dir: resolvedDir } : {}), children: [_jsx(ChartSurface, { labels: labels, height: barHeight, ...(dir !== undefined ? { dir } : {}), ...(a11yFallback !== undefined ? { a11yFallback } : {}), padding: { top: 0, bottom: 0, left: 0, right: 0 }, children: ({ innerWidth, rtl, mounted }) => {\n if (data.length === 0 || innerWidth <= 0)\n return null;\n const layout = layoutStacked100(data, { width: innerWidth, rtl, gap: gapPx });\n return (_jsx(\"g\", { className: \"adm-chart-fade\", style: { '--adm-fade': mounted ? '1' : '0' }, children: layout.segments.map((segment) => (_jsxs(\"g\", { \"data-seg\": segment.index, children: [_jsx(\"rect\", { x: segment.x, y: 0, width: Math.max(0, segment.width), height: barHeight, rx: 4, fill: `var(--viz-${(segment.index % 8) + 1})` }), showSegmentLabels && segment.width >= 34 && (_jsx(\"text\", { className: \"adm-chart-num\", x: segment.x + segment.width / 2, y: barHeight / 2 + 3, textAnchor: \"middle\", fontSize: 10, fontWeight: 700, fill: \"var(--surface)\", children: formatPercent(segment.share) }))] }, segment.key))) }));\n } }), showLegend && (_jsx(\"ul\", { className: \"adm-legend\", style: { '--adm-legend-cols': String(Math.max(1, legendColumns)) }, children: data.map((item, index) => {\n const total = data.reduce((sum, entry) => sum + Math.max(0, entry.value), 0);\n const share = total > 0 ? Math.max(0, item.value) / total : 0;\n return (_jsxs(\"li\", { className: \"adm-legend-row\", children: [_jsx(\"span\", { className: \"adm-legend-dot\", style: { '--adm-dot': `var(--viz-${(index % 8) + 1})` }, \"aria-hidden\": \"true\" }), _jsx(\"span\", { children: item.label }), _jsx(\"span\", { className: \"adm-legend-value\", children: formatValue !== undefined ? formatValue(item.value) : formatPercent(share) })] }, item.key));\n }) }))] }));\n}\n//# sourceMappingURL=StackedBar100.js.map","/**\n * Pure slope-chart layout (`chart-slope`, research/widget-registry.md §2): two\n * period axes (A → B) with one connecting line per record, colored by\n * direction, end labels. DOM-free. The two period columns are categorical, so\n * they mirror in RTL (A stays at inline-start — the right edge under `rtl`).\n */\nimport { linePath } from './lineArea.js';\nimport { extent } from '../utils/stats.js';\nexport function layoutSlope(items, options) {\n const { width, height, rtl } = options;\n if (items.length === 0 || width <= 0 || height <= 0) {\n return { lines: [], xA: 0, xB: width, yFor: () => 0 };\n }\n const values = items.flatMap((item) => [item.a, item.b]);\n const [lo, hi] = extent(values) ?? [0, 1];\n const pad = (hi - lo) * 0.08 || 1;\n const domainLo = lo - pad;\n const domainHi = hi + pad;\n const span = domainHi - domainLo || 1;\n const yFor = (value) => height - ((value - domainLo) / span) * height;\n const xA = rtl ? width : 0;\n const xB = rtl ? 0 : width;\n const lines = items.map((item, index) => {\n const yA = yFor(item.a);\n const yB = yFor(item.b);\n return {\n index,\n label: item.label,\n a: item.a,\n b: item.b,\n xA,\n yA,\n xB,\n yB,\n rising: item.b >= item.a,\n path: linePath([\n { x: xA, y: yA },\n { x: xB, y: yB },\n ]),\n };\n });\n return { lines, xA, xB, yFor };\n}\n//# sourceMappingURL=slope.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { layoutSlope } from '../geometry/slope.js';\nimport { formatCompact } from '../utils/format.js';\nimport { ChartSurface } from './ChartSurface.js';\nexport function SlopeChart({ data, labels, height = 260, periodLabels, labelGutter = 84, valueGutter = 56, formatValue = formatCompact, dir, a11yFallback, className, }) {\n return (_jsx(ChartSurface, { labels: labels, height: height, ...(dir !== undefined ? { dir } : {}), ...(a11yFallback !== undefined ? { a11yFallback } : {}), ...(className !== undefined ? { className } : {}), padding: { top: 18, bottom: 8, left: labelGutter, right: valueGutter }, children: ({ innerWidth, innerHeight, rtl, mounted }) => {\n if (data.length === 0 || innerWidth <= 0 || innerHeight <= 0)\n return null;\n const layout = layoutSlope(data, { width: innerWidth, height: innerHeight, rtl });\n const captionA = periodLabels?.[0];\n const captionB = periodLabels?.[1];\n return (_jsxs(\"g\", { children: [_jsx(\"line\", { x1: layout.xA, x2: layout.xA, y1: 0, y2: innerHeight, stroke: \"var(--border)\", strokeWidth: 1 }), _jsx(\"line\", { x1: layout.xB, x2: layout.xB, y1: 0, y2: innerHeight, stroke: \"var(--border)\", strokeWidth: 1 }), captionA !== undefined && (_jsx(\"text\", { className: \"adm-chart-axis-label\", x: layout.xA, y: -6, textAnchor: \"middle\", children: captionA })), captionB !== undefined && (_jsx(\"text\", { className: \"adm-chart-axis-label\", x: layout.xB, y: -6, textAnchor: \"middle\", children: captionB })), _jsx(\"g\", { className: \"adm-chart-fade\", style: { '--adm-fade': mounted ? '1' : '0' }, children: layout.lines.map((slope) => {\n const stroke = slope.rising ? 'var(--pos)' : 'var(--danger)';\n return (_jsxs(\"g\", { \"data-slope\": slope.index, \"data-rising\": slope.rising ? '' : undefined, children: [slope.path !== null && (_jsx(\"path\", { d: slope.path, fill: \"none\", stroke: stroke, strokeWidth: 2, strokeLinecap: \"round\" })), _jsx(\"circle\", { cx: slope.xA, cy: slope.yA, r: 3, fill: stroke }), _jsx(\"circle\", { cx: slope.xB, cy: slope.yB, r: 3, fill: stroke }), _jsx(\"text\", { className: \"adm-chart-axis-label\", x: slope.xA + (rtl ? 8 : -8), y: slope.yA + 3, textAnchor: rtl ? 'start' : 'end', children: slope.label }), _jsx(\"text\", { className: \"adm-chart-num\", x: slope.xB + (rtl ? -8 : 8), y: slope.yB + 3, textAnchor: rtl ? 'end' : 'start', fontSize: 10, fontWeight: 700, fill: stroke, children: formatValue(slope.b) })] }, slope.label));\n }) })] }));\n } }));\n}\n//# sourceMappingURL=SlopeChart.js.map","/**\n * Lenient payload narrowing for the \"bars & ranking\" group's §3 envelopes\n * (04 §3). Widget components receive `data: unknown` (already non-empty per the\n * definition's isEmpty predicate) and narrow it here; a malformed payload\n * returns null so the component renders its own fallback rather than throwing\n * into the error boundary. Pure module — no chart-primitive imports.\n */\nfunction rec(value) {\n return typeof value === 'object' && value !== null && !Array.isArray(value) ? value : null;\n}\nfunction num(value) {\n if (typeof value === 'number' && Number.isFinite(value))\n return value;\n if (typeof value === 'string' && value.trim() !== '') {\n const parsed = Number(value);\n if (Number.isFinite(parsed))\n return parsed;\n }\n return undefined;\n}\nfunction str(value) {\n return typeof value === 'string' ? value : undefined;\n}\n/** `record-list` rows ride under `rows` (§3) or `data` (CRUD envelope). */\nexport function recordRows(data) {\n const r = rec(data);\n if (r === null)\n return null;\n const source = Array.isArray(r.rows) ? r.rows : Array.isArray(r.data) ? r.data : null;\n if (source === null)\n return null;\n const out = [];\n for (const entry of source) {\n const row = rec(entry);\n if (row === null)\n return null;\n out.push(row);\n }\n return out;\n}\nexport function asBulletRows(data) {\n const rows = recordRows(data);\n if (rows === null)\n return null;\n const out = [];\n for (const row of rows) {\n const measure = num(row.measure);\n const target = num(row.target);\n const label = str(row.label);\n if (label === undefined || measure === undefined || target === undefined)\n return null;\n const max = num(row.max);\n const bandCutoffs = Array.isArray(row.bandCutoffs)\n ? row.bandCutoffs.map(num).filter((v) => v !== undefined)\n : undefined;\n out.push({\n label,\n measure,\n target,\n ...(max !== undefined ? { max } : {}),\n ...(bandCutoffs !== undefined ? { bandCutoffs } : {}),\n });\n }\n return out.length > 0 ? out : null;\n}\nfunction stepType(value) {\n return value === 'down' || value === 'total' ? value : 'up';\n}\nexport function asWaterfallSteps(data) {\n const rows = recordRows(data);\n if (rows === null)\n return null;\n const out = [];\n for (const row of rows) {\n const label = str(row.label);\n const value = num(row.value);\n if (label === undefined || value === undefined)\n return null;\n out.push({ label, value, type: stepType(row.type) });\n }\n return out.length > 0 ? out : null;\n}\nexport function asSlopeRecords(data) {\n const rows = recordRows(data);\n if (rows === null)\n return null;\n const out = [];\n for (const row of rows) {\n const label = str(row.label);\n const a = num(row.a);\n const b = num(row.b);\n if (label === undefined || a === undefined || b === undefined)\n return null;\n out.push({ label, a, b });\n }\n return out.length > 0 ? out : null;\n}\nexport function asMatrix(data) {\n const r = rec(data);\n if (r === null || !Array.isArray(r.rowKeys) || !Array.isArray(r.colKeys) || !Array.isArray(r.cells)) {\n return null;\n }\n const rowKeys = r.rowKeys.map(String);\n const colKeys = r.colKeys.map(String);\n const cells = [];\n for (const rowCells of r.cells) {\n if (!Array.isArray(rowCells))\n return null;\n cells.push(rowCells.map((cell) => num(cell) ?? 0));\n }\n if (rowKeys.length === 0 || colKeys.length === 0)\n return null;\n return { rowKeys, colKeys, cells };\n}\n//# sourceMappingURL=bars-ranking-shapes.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\n/**\n * `charts` family \"bars & ranking\" widgets (04-T09; annex §2): registry\n * wrappers mapping stored instance config + §3 envelopes onto the\n * @adminium/charts primitives. Accessible names come from `config.title`\n * (ChartSurface renders them as the SVG aria-label). Components render only the\n * loaded state — WidgetFrame owns skeleton/empty/error (04 §4).\n */\nimport { BulletChart, MarimekkoChart, ParetoChart, RankingBars, SlopeChart, StackedBar100, WaterfallChart, } from '@adminium/charts';\nimport { formatMetricValue, formatOptionsOf } from '../../lib/format.js';\nimport { asCategorical } from '../../lib/shapes.js';\nimport { asBulletRows, asMatrix, asSlopeRecords, asWaterfallSteps, } from './bars-ranking-shapes.js';\nfunction BadShape() {\n return _jsx(\"p\", { className: \"px-4 pb-4 text-body-sm text-fg-muted\", children: \"Unexpected data shape.\" });\n}\nconst wrap = 'px-4 pb-4 compact:px-3 compact:pb-3';\n// --- chart-bullet ------------------------------------------------------------\nexport function ChartBulletWidget({ config, data }) {\n const rows = asBulletRows(data);\n if (rows === null)\n return _jsx(BadShape, {});\n const opts = formatOptionsOf(config);\n return (_jsx(\"div\", { className: wrap, \"data-widget\": \"chart-bullet\", children: _jsx(BulletChart, { data: rows, labels: { label: config.title ?? 'Bullet chart' }, height: config.height, formatValue: (value) => formatMetricValue(value, config.metricFormat, opts) }) }));\n}\n// --- chart-ranking-bars ------------------------------------------------------\nexport function ChartRankingBarsWidget({ 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: wrap, \"data-widget\": \"chart-ranking-bars\", children: _jsx(RankingBars, { data: categorical.items.map((item) => ({ label: item.label, value: item.value })), labels: { label: config.title ?? 'Ranking' }, max: config.n, formatValue: (value) => formatMetricValue(value, config.metricFormat, opts) }) }));\n}\n// --- chart-pareto ------------------------------------------------------------\nexport function ChartParetoWidget({ 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: wrap, \"data-widget\": \"chart-pareto\", children: _jsx(ParetoChart, { data: categorical.items.map((item) => ({ label: item.label, value: item.value })), labels: { label: config.title ?? 'Pareto chart' }, cutline: config.cutline, smooth: config.smooth, showAxis: config.axis, height: config.height, formatValue: (value) => formatMetricValue(value, config.metricFormat, opts) }) }));\n}\n// --- chart-waterfall ---------------------------------------------------------\nexport function ChartWaterfallWidget({ config, data }) {\n const steps = asWaterfallSteps(data);\n if (steps === null)\n return _jsx(BadShape, {});\n const opts = formatOptionsOf(config);\n return (_jsx(\"div\", { className: wrap, \"data-widget\": \"chart-waterfall\", children: _jsx(WaterfallChart, { data: steps, labels: { label: config.title ?? 'Waterfall chart' }, showAxis: config.axis, height: config.height, formatValue: (value) => formatMetricValue(value, config.metricFormat, opts) }) }));\n}\n// --- chart-marimekko ---------------------------------------------------------\nexport function ChartMarimekkoWidget({ config, data }) {\n const matrix = asMatrix(data);\n if (matrix === null)\n return _jsx(BadShape, {});\n return (_jsx(\"div\", { className: wrap, \"data-widget\": \"chart-marimekko\", children: _jsx(MarimekkoChart, { rowKeys: matrix.rowKeys, colKeys: matrix.colKeys, cells: matrix.cells, labels: { label: config.title ?? 'Marimekko chart' }, labelThreshold: config.labelThreshold, height: config.height }) }));\n}\n// --- chart-stacked-bar-100 ---------------------------------------------------\nexport function ChartStackedBar100Widget({ 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: wrap, \"data-widget\": \"chart-stacked-bar-100\", children: _jsx(StackedBar100, { data: categorical.items.map((item) => ({ key: item.key, label: item.label, value: item.value })), labels: { label: config.title ?? '100% stacked bar' }, showLegend: config.showLegend, legendColumns: config.legendColumns, gapPx: config.gapPx, showSegmentLabels: config.showTotal, ...(config.metricFormat !== 'percent'\n ? { formatValue: (value) => formatMetricValue(value, config.metricFormat, opts) }\n : {}) }) }));\n}\n// --- chart-slope -------------------------------------------------------------\nexport function ChartSlopeWidget({ config, data }) {\n const records = asSlopeRecords(data);\n if (records === null)\n return _jsx(BadShape, {});\n const opts = formatOptionsOf(config);\n return (_jsx(\"div\", { className: wrap, \"data-widget\": \"chart-slope\", children: _jsx(SlopeChart, { data: records, labels: { label: config.title ?? 'Slope chart' }, height: config.height, ...(config.periodLabels !== undefined ? { periodLabels: config.periodLabels } : {}), formatValue: (value) => formatMetricValue(value, config.metricFormat, opts) }) }));\n}\n//# sourceMappingURL=BarsRankingWidgets.js.map"],"names":["lengthFor","value","max","width","xFor","rtl","len","layoutBullet","items","options","height","n","rowHeight","trackHeight","measureHeight","item","index","cutoffs","a","b","rowY","trackY","edges","zoneCount","bands","i","lo","hi","xLo","xHi","measureLen","bandColor","level","BulletChart","data","labels","labelGutter","valueGutter","formatValue","formatCompact","dir","a11yFallback","className","_jsx","ChartSurface","innerWidth","innerHeight","mounted","trackWidth","trackStart","layout","labelEdge","valueEdge","row","midY","_jsxs","bandSeg","layoutRanking","barRatio","rows","barHeight","peak","m","r","leaderIndex","best","barWidth","RankingBars","bar","layoutPareto","cutline","smooth","tickCount","empty","total","sum","yTicks","niceTicks","domainHi","yFor","cumulativeY","frac","band","categoricalBandScale","bandwidth","running","bars","cumulative","x","barTop","linePoints","linePath","PERCENT_TICKS","ParetoChart","showAxis","gutter","percentEdge","percentY","tick","point","layoutWaterfall","spans","magnitude","low","high","highest","s","lowest","ticks","domainLo","span","yHigh","yLow","connectors","typeColor","type","signedText","format","WaterfallChart","connector","layoutMarimekko","rowKeys","colKeys","cells","gap","cols","columnTotals","_col","colIndex","_row","rowIndex","grandTotal","t","totalGap","usableWidth","cursor","colKey","share","colWidth","inlineStart","segCursor","segments","rowKey","segShare","segHeight","y","formatPercent","MarimekkoChart","labelThreshold","column","segment","layoutStacked100","segWidth","StackedBar100","gapPx","showLegend","legendColumns","showSegmentLabels","resolvedDir","useChartDir","entry","layoutSlope","values","extent","pad","xA","xB","yA","yB","SlopeChart","periodLabels","captionA","captionB","slope","stroke","rec","num","parsed","str","recordRows","source","out","asBulletRows","measure","target","label","bandCutoffs","v","stepType","asWaterfallSteps","asSlopeRecords","asMatrix","rowCells","cell","BadShape","wrap","ChartBulletWidget","config","opts","formatOptionsOf","formatMetricValue","ChartRankingBarsWidget","categorical","asCategorical","ChartParetoWidget","ChartWaterfallWidget","steps","ChartMarimekkoWidget","matrix","ChartStackedBar100Widget","ChartSlopeWidget","records"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{j as t,E as G,bx as T,by as B,bz as p,M as m,bA as k,bB as h,bC as H,bD as Z,bE as M,bF as F,bG as R,bH as $,bI as J,b3 as X,bJ as Y,bK as ee,bL as te,bM as ae,aE as se,bN as le,bO as re,bP as _,bQ as g,bR as ne,S as ce,at as O,bS as de,bT as oe,bU as ie,bV as ue,bW as me,r as q,bX as E,aP as L,bY as be,bZ as pe,aR as xe,b_ as he,b$ as ye,c0 as je,c1 as fe,c2 as ke,c3 as Ne,c4 as ge,c5 as ve,c6 as we,c7 as Be,c8 as Ce,c9 as Te,ca as Ie,cb as Se,cc as $e,cd as Ae,ce as Le,cf as Fe,cg as Re,ch as We,ci as De,cj as Pe,ck as ze}from"./index-PB1II0WV.js";import{s as Oe,a as qe}from"./sparkline-2JUGDrMW.js";import"./stats-BNgXz5BD.js";function i({title:e,body:n}){return t.jsx(G,{compact:!0,preset:"no-data",title:e??"Nothing to show",body:n})}function w({label:e,value:n,tone:a="default",emphasis:l=!1,testId:r}){const s=a==="pos"?"text-pos":a==="accent"?"text-accent":a==="muted"?"text-fg-subtle":"text-fg";return t.jsxs("div",{"data-part":"money-row","data-testid":r,className:`flex items-baseline justify-between gap-4 py-1.5 ${l?"border-t border-border pt-2.5":""}`,children:[t.jsx("span",{className:`text-body-sm ${l?"font-bold text-fg":"text-fg-muted"}`,children:e}),t.jsx("span",{className:`font-mono tabular-nums text-end ${s} ${l?"text-section font-bold":"text-body-sm"}`,children:n})]})}function W({tone:e,icon:n,children:a,block:l,testId:r}){const s=e==="pos"?"bg-pos-soft text-fg":e==="warn"?"bg-warn-soft text-fg":e==="info"?"bg-info-soft text-fg":e==="accent"?"bg-accent-soft text-fg":"bg-surface-2 text-fg",c=e==="pos"?"text-pos":e==="warn"?"text-warn":e==="info"?"text-info":e==="accent"?"text-accent":"text-fg-subtle";return t.jsxs("div",{"data-widget":l,"data-testid":r,className:`flex items-center gap-3 rounded-md px-3 py-2.5 ${s}`,children:[n!==void 0&&t.jsx("span",{className:`shrink-0 ${c}`,children:n}),t.jsx("div",{className:"min-w-0 flex-1 text-body-sm",children:a})]})}function A(e,n){return e.replace(/\{(\w+)\}/g,(a,l)=>n[l]??a)}function Ee({config:e,data:n,onEvent:a}){const l=M(n,e),r=F(e.binding),s=e.format?.locale,c=e.format?.currency;if(l.length===0)return t.jsx(i,{title:e.emptyTitle??"No line items",body:e.emptyBody??"Add a line item to build this document."});const d=(o,y,x)=>{if(r===null||x.trim()==="")return;const f=Number(x);!Number.isFinite(f)||f<0||a({type:"mutate",intent:"update",connectionId:r.connectionId,table:r.table,recordId:o,values:{[y]:f}})};return t.jsxs("table",{"data-widget":"block-line-items","data-testid":e.testId,className:"w-full text-body-sm",children:[t.jsx("thead",{children:t.jsxs("tr",{className:"border-b border-border text-micro uppercase text-fg-subtle",children:[t.jsx("th",{scope:"col",className:"py-2 text-start font-bold",children:e.descHeader??"Description"}),t.jsx("th",{scope:"col",className:"w-16 py-2 text-end font-bold",children:e.qtyHeader??"Qty"}),t.jsx("th",{scope:"col",className:"w-24 py-2 text-end font-bold",children:e.rateHeader??"Rate"}),e.showAmountColumn&&t.jsx("th",{scope:"col",className:"w-28 py-2 text-end font-bold",children:e.amountHeader??"Amount"})]})}),t.jsx("tbody",{children:l.map(o=>t.jsxs("tr",{"data-part":"line-item",className:"border-b border-border/60 last:border-0",children:[t.jsx("td",{className:"py-2 text-start text-fg",children:o.desc}),t.jsx("td",{className:"py-2 text-end",children:e.editable?t.jsx("input",{type:"number",min:0,defaultValue:o.qty,"aria-label":`${e.qtyHeader??"Qty"} — ${o.desc}`,onChange:y=>d(o.id,e.qtyField,y.target.value),className:"w-full rounded-sm bg-transparent px-1 py-0.5 text-end font-mono tabular-nums text-body-sm text-fg hover:bg-surface-2 focus-visible:bg-surface-2"}):t.jsx(m,{children:o.qty})}),t.jsx("td",{className:"py-2 text-end",children:e.editable?t.jsx("input",{type:"number",min:0,step:.01,defaultValue:o.rate,"aria-label":`${e.rateHeader??"Rate"} — ${o.desc}`,onChange:y=>d(o.id,e.rateField,y.target.value),className:"w-full rounded-sm bg-transparent px-1 py-0.5 text-end font-mono tabular-nums text-body-sm text-fg hover:bg-surface-2 focus-visible:bg-surface-2"}):t.jsx(m,{children:k(o.rate,{locale:s,currency:c})})}),e.showAmountColumn&&t.jsx("td",{className:"py-2 text-end",children:t.jsx(m,{className:"text-fg",children:k(R(o.qty*o.rate),{locale:s,currency:c})})})]},o.id))})]})}function He({config:e,data:n}){const a=h(n);if(a===null)return t.jsx(i,{title:e.emptyTitle??"No totals",body:e.emptyBody??"Totals appear once the document has line items."});const l=a[e.itemsField],r=a[e.ratesField],s=M({rows:Array.isArray(l)?l:[]},e),d=Y(s,typeof r=="object"&&r!==null?r:void 0,e.format?.currency||"USD"),o=e.format?.locale,y=e.format?.currency||d.currency,x=f=>k(f,{locale:o,currency:y});return t.jsxs("div",{"data-widget":"block-totals-summary","data-testid":e.testId,className:"w-full",children:[t.jsx(w,{label:e.subtotalLabel??"Subtotal",value:x(d.subtotal)}),(d.discount>0||!e.hideZeroDiscount)&&t.jsx(w,{testId:"block-totals-discount",label:e.discountLabel??"Discount",value:`−${x(d.discount)}`,tone:"pos"}),t.jsx(w,{label:e.taxLabel??"Tax",value:x(d.tax)}),t.jsx(w,{label:e.totalLabel??"Total due",value:x(d.total),tone:"accent",emphasis:!0})]})}function Me({config:e,data:n}){const a=T(n).map((s,c)=>({id:p(s,e.idField)??`tax-${c}`,label:p(s,e.labelField)??"",rate:B(s,e.rateField)??0,amount:B(s,e.amountField)}));if(a.length===0)return t.jsx(i,{title:e.emptyTitle??"No tax lines",body:e.emptyBody??"Tax lines appear once a rate applies to this document."});const l=e.format?.locale,r=e.format?.currency;return t.jsx("div",{"data-widget":"block-tax-breakdown","data-testid":e.testId,className:"w-full",children:a.map(s=>t.jsx(w,{label:e.showRateColumn?t.jsxs(t.Fragment,{children:[s.label," ",t.jsx("span",{className:"text-fg-subtle",children:H(s.rate,l)})]}):s.label,value:k(s.amount??R(e.subtotal*s.rate),{locale:l,currency:r})},s.id))})}function _e({config:e,data:n}){const a=h(n),l=Array.isArray(a?.fx)?a.fx:[];if(a===null||l.length===0)return t.jsx(i,{title:e.emptyTitle??"No conversions",body:e.emptyBody??"Currency conversions appear once exchange rates are available."});const r=e.format?.locale,s=typeof a.amount=="number"?a.amount:0,c=a.baseCurrency||e.format?.currency||"USD";return t.jsxs("div",{"data-widget":"block-multi-currency","data-testid":e.testId,className:"w-full",children:[t.jsx(w,{label:c,value:k(s,{locale:r,currency:c}),emphasis:!0}),l.map(d=>t.jsx(w,{label:d.currency,value:k(R(s*d.rate),{locale:r,currency:d.currency}),tone:"muted"},d.currency)),e.footnote!==void 0&&t.jsx("p",{className:"mt-2 text-caption text-fg-subtle",children:e.footnote})]})}function Ve({config:e,data:n}){const a=T(n).slice(0,e.maxRows).map((s,c)=>({id:p(s,e.idField)??`pay-${c}`,date:p(s,e.dateField)??"",method:p(s,e.methodField)??"",last4:p(s,e.last4Field),amount:B(s,e.amountField)??0,status:p(s,e.statusField)??"pending"}));if(a.length===0)return t.jsx(i,{title:e.emptyTitle??"No payments yet",body:e.emptyBody??"Payments against this document will appear here."});const l=e.format?.locale,r=e.format?.currency;return t.jsx("ul",{"data-widget":"block-payment-history","data-testid":e.testId,className:"w-full space-y-1",children:a.map(s=>t.jsxs("li",{"data-part":"payment-row",className:"flex items-center gap-3 py-1.5 text-body-sm",children:[t.jsx(m,{className:"shrink-0 text-caption text-fg-subtle",children:$(s.date,l)}),t.jsx("span",{className:"min-w-0 flex-1 truncate text-fg",children:J(s.method,s.last4)}),t.jsx(m,{className:"shrink-0 text-fg",children:k(s.amount,{locale:l,currency:r})}),t.jsx(X,{status:s.status,className:"shrink-0"})]},s.id))})}function Ue({config:e,data:n}){const a=T(n).map((s,c)=>({id:p(s,e.idField)??`disc-${c}`,code:p(s,e.codeField)??"",label:p(s,e.labelField)??"",amount:B(s,e.amountField)??0}));if(a.length===0)return t.jsx(i,{title:e.emptyTitle??"No discount codes",body:e.emptyBody??"Applied discount codes will appear here."});const l=e.format?.locale,r=e.format?.currency;return t.jsx("ul",{"data-widget":"block-discount-codes","data-testid":e.testId,className:"w-full space-y-1.5",children:a.map(s=>t.jsxs("li",{"data-part":"discount-row",className:"flex items-center gap-2.5 text-body-sm",children:[t.jsx(m,{className:"shrink-0 rounded-sm bg-surface-2 px-1.5 py-0.5 text-caption text-fg",children:s.code}),t.jsx("span",{className:"min-w-0 flex-1 truncate text-fg-muted",children:s.label}),t.jsxs(m,{className:"shrink-0 text-pos",children:["−",k(s.amount,{locale:l,currency:r})]})]},s.id))})}function Ke({config:e,data:n}){const a=h(n);if(a===null)return t.jsx(i,{title:e.emptyTitle??"No late fee",body:e.emptyBody??"Late-fee terms appear once they are set on this document."});const l=e.format?.locale,r=typeof a.rate=="number"?a.rate:0,s=typeof a.days=="number"?a.days:0,c=e.template??"A {rate} late fee applies after {days} days.";return t.jsx(W,{block:"block-late-fees",tone:"warn",testId:e.testId,icon:t.jsx(Z,{className:"size-4"}),children:A(c,{rate:H(r,l),days:String(s)})})}function Qe({modules:e,seed:n}){const a=ee(n||1),l=[],r=(c,d)=>{const o=(y,x)=>c>=y&&c<y+7&&d>=x&&d<x+7;return o(0,0)||o(e-7,0)||o(0,e-7)};for(let c=0;c<e;c+=1)for(let d=0;d<e;d+=1)r(d,c)||a()<.45&&l.push({x:d,y:c});const s=(c,d)=>t.jsxs("g",{children:[t.jsx("rect",{x:c,y:d,width:7,height:7,fill:"currentColor"}),t.jsx("rect",{x:c+1,y:d+1,width:5,height:5,className:"fill-surface"}),t.jsx("rect",{x:c+2,y:d+2,width:3,height:3,fill:"currentColor"})]},`f-${c}-${d}`);return t.jsxs("svg",{viewBox:`0 0 ${e} ${e}`,className:"adm-always-light size-28 shrink-0 rounded-sm bg-surface p-1 text-fg",role:"img","aria-hidden":!0,"data-part":"qr-placeholder",children:[s(0,0),s(e-7,0),s(0,e-7),l.map(c=>t.jsx("rect",{x:c.x,y:c.y,width:1,height:1,fill:"currentColor"},`${c.x}-${c.y}`))]})}function Ge({config:e,data:n}){const a=h(n);if(a===null)return t.jsx(i,{title:e.emptyTitle??"No payment link",body:e.emptyBody??"A scannable payment code appears once an amount is due."});const l=e.format?.locale,r=e.format?.currency||a.currency||"USD",s=typeof a.total=="number"?a.total:0;return t.jsxs("div",{"data-widget":"block-qr-pay","data-testid":e.testId,className:"flex w-full items-center gap-4",children:[t.jsx(Qe,{modules:e.modules,seed:e.qrSeed}),t.jsxs("div",{className:"min-w-0 flex-1",children:[t.jsx("p",{className:"text-body-sm text-fg-muted",children:a.caption}),t.jsx("p",{className:"mt-1 text-caption text-fg-subtle",children:e.amountLabel??"Amount due"}),t.jsx(m,{className:"text-title font-bold text-accent",children:k(s,{locale:l,currency:r})})]})]})}function Ze({config:e,data:n}){const a=h(n);if(a===null)return t.jsx(i,{title:e.emptyTitle??"No contact",body:e.emptyBody??"Contact details appear once this document names a recipient."});const l=[{key:"name",icon:te,value:a.name,mono:!1},{key:"email",icon:ae,value:a.email,mono:!0},{key:"phone",icon:se,value:a.phone,mono:!0}];return t.jsx("ul",{"data-widget":"block-contact","data-testid":e.testId,className:"w-full space-y-1.5",children:l.filter(r=>r.value!==void 0&&r.value!=="").map(r=>{const s=r.icon;return t.jsxs("li",{"data-part":`contact-${r.key}`,className:"flex items-center gap-2.5 text-body-sm",children:[t.jsx(s,{className:"size-3.5 shrink-0 text-fg-subtle","aria-hidden":!0}),r.mono?t.jsx(m,{className:"min-w-0 truncate text-fg",children:r.value}):t.jsx("span",{className:"min-w-0 truncate font-bold text-fg",children:r.value})]},r.key)})})}function Je({config:e,data:n}){const a=h(n);return a===null?t.jsx(i,{title:e.emptyTitle??"Nothing highlighted",body:e.emptyBody??"A highlighted figure appears once this block is bound."}):t.jsxs("div",{"data-widget":"block-highlight-box","data-testid":e.testId,className:"w-full rounded-md bg-surface-2 px-4 py-3 text-center",children:[t.jsx("p",{className:"text-caption text-fg-subtle",children:a.label}),t.jsx(m,{className:"mt-0.5 block text-title font-bold text-fg",children:a.value})]})}function Xe(e,n){return e===0?"text-fg-subtle":(n?e<0:e>0)?"text-pos":"text-danger"}function Ye(e,n,a){return e.unit==="currency"?k(e.value,{locale:n,currency:a}):e.unit==="percent"?`${g(Math.round(e.value*1e3)/10,n)}%`:g(e.value,n)}function et({config:e,data:n}){const a=T(n).slice(0,e.maxTiles).map((s,c)=>({id:p(s,e.idField)??`kpi-${c}`,label:p(s,e.labelField)??"",value:B(s,e.valueField)??0,delta:B(s,e.deltaField),unit:p(s,e.unitField)??"plain"}));if(a.length===0)return t.jsx(i,{title:e.emptyTitle??"No metrics",body:e.emptyBody??"Report metrics will appear here once the document is bound."});const l=e.format?.locale,r=e.format?.currency;return t.jsx("div",{"data-widget":"block-kpi-row","data-testid":e.testId,className:"grid w-full grid-cols-2 gap-2 sm:grid-cols-4",children:a.map(s=>t.jsxs("div",{"data-part":"kpi-tile",className:"rounded-md bg-surface-2 p-2.5",children:[t.jsx("p",{className:"truncate text-caption text-fg-subtle",children:s.label}),t.jsx(m,{className:"block text-section font-bold text-fg",children:Ye(s,l,r)}),s.delta!==void 0&&t.jsxs(m,{"data-part":"kpi-delta",className:`block text-caption ${Xe(s.delta,e.invertDelta)}`,children:[s.delta>0?"+":"",g(Math.round(s.delta*1e3)/10,l),"%"]})]},s.id))})}const S=240,C=64;function V({labels:e}){return t.jsx("div",{"data-part":"chart-axis",className:"mt-1 flex justify-between text-micro text-fg-subtle",children:e.map((n,a)=>t.jsx("span",{children:n},`${n}-${a}`))})}function tt({config:e,data:n}){const a=_(n).slice(0,e.maxPoints);if(a.length===0)return t.jsx(i,{title:e.emptyTitle??"No chart data",body:e.emptyBody??"A mini bar chart appears once this block is bound to a series."});const l=Oe(a.map(s=>s.value),S,C,3),r=e.format?.locale;return t.jsxs("div",{"data-widget":"block-bar-chart","data-testid":e.testId,className:"w-full text-accent",children:[t.jsx("svg",{viewBox:`0 0 ${S} ${C}`,className:"h-16 w-full",preserveAspectRatio:"none",role:"img","aria-label":e.title??"Bar chart",children:l.map((s,c)=>t.jsx("rect",{x:s.x,y:s.y,width:s.width,height:s.height,rx:1,fill:"currentColor",opacity:s.isLast?1:.45},a[c]?.label??c))}),e.showValues&&t.jsx("div",{className:"mt-1 flex justify-between text-micro text-fg-subtle",children:a.map(s=>t.jsx(m,{children:g(s.value,r)},s.label))}),e.showAxis&&t.jsx(V,{labels:a.map(s=>s.label)})]})}function at({config:e,data:n}){const a=_(n).slice(0,e.maxPoints);if(a.length===0)return t.jsx(i,{title:e.emptyTitle??"No chart data",body:e.emptyBody??"A mini line chart appears once this block is bound to a series."});const l=qe(a.map(c=>c.value),S,C,3),r=e.format?.locale,s=l.points===""?"":`0,${C} ${l.points} ${S},${C}`;return t.jsxs("div",{"data-widget":"block-line-chart","data-testid":e.testId,className:"w-full text-accent",children:[t.jsxs("svg",{viewBox:`0 0 ${S} ${C}`,className:"h-16 w-full",preserveAspectRatio:"none",role:"img","aria-label":e.title??"Line chart",children:[e.area&&s!==""&&t.jsx("polygon",{"data-part":"line-area",points:s,fill:"currentColor",opacity:.14}),t.jsx("polyline",{"data-part":"line-stroke",points:l.points,fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round",vectorEffect:"non-scaling-stroke"}),l.last!==null&&t.jsx("circle",{cx:l.last.x,cy:l.last.y,r:2.5,fill:"currentColor"})]}),e.showValues&&t.jsx("div",{className:"mt-1 flex justify-between text-micro text-fg-subtle",children:a.map(c=>t.jsx(m,{children:g(c.value,r)},c.label))}),e.showAxis&&t.jsx(V,{labels:a.map(c=>c.label)})]})}function st({config:e,data:n}){const a=ne(n);if(a.length===0)return t.jsx(i,{title:e.emptyTitle??"No rows",body:e.emptyBody??"Two-column rows will appear here."});const l=e.headerRow?a[0]:void 0,r=e.headerRow?a.slice(1):a;return t.jsxs("table",{"data-widget":"block-two-col-table","data-testid":e.testId,className:"w-full text-body-sm",children:[l!==void 0&&t.jsx("thead",{children:t.jsxs("tr",{className:"border-b border-border text-micro uppercase text-fg-subtle",children:[t.jsx("th",{scope:"col",className:"py-2 text-start font-bold",children:l[0]}),t.jsx("th",{scope:"col",className:"py-2 text-end font-bold",children:l[1]})]})}),t.jsx("tbody",{children:r.map((s,c)=>t.jsxs("tr",{className:"border-b border-border/60 last:border-0",children:[t.jsx("td",{className:"py-1.5 text-start text-fg-muted",children:s[0]}),t.jsx("td",{className:"py-1.5 text-end text-fg",children:e.monoRightColumn?t.jsx(m,{children:s[1]}):s[1]})]},`${s[0]}-${c}`))})]})}function lt({config:e,data:n}){const a=T(n).slice(0,e.maxRows).map((r,s)=>({id:p(r,e.idField)??`att-${s}`,name:p(r,e.nameField)??"",size:B(r,e.sizeField)??0}));if(a.length===0)return t.jsx(i,{title:e.emptyTitle??"No attachments",body:e.emptyBody??"Files attached to this document will appear here."});const l=e.format?.locale;return t.jsx("ul",{"data-widget":"block-attachments","data-testid":e.testId,className:"w-full space-y-1",children:a.map(r=>t.jsxs("li",{"data-part":"attachment-row",className:"flex items-center gap-2.5 py-1 text-body-sm",children:[t.jsx(le,{className:"size-3.5 shrink-0 text-fg-subtle","aria-hidden":!0}),t.jsx("span",{className:"min-w-0 flex-1 truncate text-fg",children:r.name}),t.jsx(m,{className:"shrink-0 text-caption text-fg-subtle",children:re(r.size,l)})]},r.id))})}const rt={"16/9":"aspect-video","4/3":"aspect-4/3","1/1":"aspect-square"};function nt({config:e,data:n}){const a=h(n);if(a===null)return t.jsx(i,{title:e.emptyTitle??"No image slot",body:e.emptyBody??"An image placeholder appears once this block is bound."});const l=p({text:a.text},"text")??"";return t.jsx("div",{"data-widget":"block-image-placeholder","data-testid":e.testId,className:"w-full",children:t.jsx("div",{"data-part":"image-slot",className:`flex w-full items-center justify-center rounded-md border border-dashed border-border-strong bg-[repeating-linear-gradient(45deg,var(--surface-2)_0px,var(--surface-2)_6px,var(--surface-3)_6px,var(--surface-3)_12px)] ${rt[e.ratio]}`,children:t.jsx("span",{className:"px-3 text-center text-caption text-fg-subtle",children:l})})})}function ct({config:e,data:n}){const a=h(n);if(a===null)return t.jsx(i,{title:e.emptyTitle??"No loyalty balance",body:e.emptyBody??"Loyalty points appear once this customer is enrolled."});const l=e.format?.locale,r=typeof a.balance=="number"?a.balance:0,s=typeof a.earned=="number"?a.earned:0,c=a.tier??"";return t.jsx(W,{block:"block-loyalty-banner",tone:"accent",testId:e.testId,icon:t.jsx(de,{className:"size-4"}),children:t.jsxs("div",{className:"flex flex-wrap items-baseline justify-between gap-2",children:[t.jsx("span",{className:"text-fg",children:A(e.balanceLabel??"{balance} pts · {tier}",{balance:g(r,l),tier:c})}),t.jsx(m,{className:"text-pos",children:A(e.earnedLabel??"+{earned} earned",{earned:g(s,l)})})]})})}function dt({config:e,data:n}){const a=h(n);if(a===null)return t.jsx(i,{title:e.emptyTitle??"Not recurring",body:e.emptyBody??"Recurrence details appear once a schedule is set."});const l=e.format?.locale,r=e.template??"Recurring — {freq} · Next on {next} · {count} cycles";return t.jsx(W,{block:"block-recurring-banner",tone:"info",testId:e.testId,icon:t.jsx(oe,{className:"size-4"}),children:A(r,{freq:a.freq??"",next:$(a.next,l),count:g(typeof a.count=="number"?a.count:0,l)})})}const ot=new Set(["done","current","todo"]);function it({config:e,data:n}){const a=T(n).map((l,r)=>{const s=p(l,e.stateField);return{id:p(l,e.idField)??`step-${r}`,label:p(l,e.labelField)??"",state:s!==void 0&&ot.has(s)?s:"todo"}});return a.length===0?t.jsx(i,{title:e.emptyTitle??"No delivery steps",body:e.emptyBody??"Fulfilment progress will appear here."}):t.jsx("ol",{"data-widget":"block-delivery-stepper","data-testid":e.testId,className:"flex w-full items-start",children:a.map((l,r)=>t.jsxs("li",{"data-part":"step","data-state":l.state,className:"flex min-w-0 flex-1 flex-col items-center",children:[t.jsxs("div",{className:"flex w-full items-center",children:[t.jsx("span",{"aria-hidden":!0,className:`h-0.5 flex-1 ${r===0?"bg-transparent":l.state==="todo"?"bg-border":"bg-accent"}`}),t.jsx("span",{className:`size-2.5 shrink-0 rounded-full ${l.state==="done"?"bg-accent":l.state==="current"?"bg-accent ring-2 ring-accent-soft":"bg-border-strong"}`}),t.jsx("span",{"aria-hidden":!0,className:`h-0.5 flex-1 ${r===a.length-1?"bg-transparent":a[r+1]?.state==="todo"?"bg-border":"bg-accent"}`})]}),t.jsx("span",{className:`mt-1.5 truncate px-1 text-center text-micro ${l.state==="todo"?"text-fg-subtle":"text-fg"}`,children:l.label})]},l.id))})}function ut({config:e,data:n}){const a=h(n);if(a===null)return t.jsx(i,{title:e.emptyTitle??"No signature",body:e.emptyBody??"A signature line appears once this document requires one."});const l=e.format?.locale,r=a.sigName??"",s=a.sigTitle??"";return t.jsxs("div",{"data-widget":"block-signature","data-testid":e.testId,className:"flex w-full flex-wrap items-end gap-6",children:[t.jsxs("div",{className:"min-w-0 flex-1",children:[t.jsx("div",{className:"border-b border-border-strong pb-1",children:e.editable?t.jsx("input",{defaultValue:r,"aria-label":e.namePlaceholder??"Signature name",placeholder:e.namePlaceholder??"Name",className:"w-full bg-transparent text-section text-fg outline-none placeholder:text-fg-subtle"}):t.jsx("p",{className:"text-section text-fg",children:r})}),t.jsx("p",{className:"mt-1 text-caption text-fg-subtle",children:s})]}),e.showDate&&t.jsxs("div",{className:"min-w-24",children:[t.jsx("div",{className:"border-b border-border-strong pb-1",children:t.jsx(m,{className:"text-body-sm text-fg",children:$(a.sigDate,l)})}),t.jsx("p",{className:"mt-1 text-caption text-fg-subtle",children:e.dateLabel??"Date"})]})]})}function mt({config:e,data:n,onEvent:a}){const l=h(n),r=l?.label??e.defaultLabel??"I accept the terms",s=l?.checked===!0,c=F(e.binding);return t.jsxs("div",{"data-widget":"block-terms-checkbox","data-testid":e.testId,className:"flex w-full items-start gap-2.5",children:[t.jsx(ie,{defaultChecked:s,"aria-label":r,onCheckedChange:d=>{c!==null&&a({type:"mutate",intent:"update",connectionId:c.connectionId,table:c.table,values:{[e.checkedField]:d===!0}})}}),t.jsx("span",{className:"text-body-sm text-fg",children:r})]})}const bt={pending:"warn",approved:"pos",rejected:"danger"};function pt({config:e,data:n,onEvent:a}){const l=h(n);if(l===null)return t.jsx(i,{title:e.emptyTitle??"No approver",body:e.emptyBody??"The approval chain appears once a reviewer is assigned."});const r=l.status==="approved"||l.status==="rejected"?l.status:"pending",s=r==="approved"?e.approvedLabel??"Approved":r==="rejected"?e.rejectedLabel??"Rejected":e.pendingLabel??"Pending",c=F(e.binding),d=o=>{c!==null&&a({type:"mutate",intent:"update",connectionId:c.connectionId,table:c.table,values:{[e.statusField]:o}})};return t.jsxs("div",{"data-widget":"block-approval","data-testid":e.testId,"data-status":r,className:"flex w-full flex-wrap items-center gap-3 rounded-md border border-border p-3",children:[t.jsxs("div",{className:"min-w-0 flex-1",children:[t.jsx("p",{className:"truncate text-body-sm font-bold text-fg",children:l.name}),t.jsx("p",{className:"truncate text-caption text-fg-subtle",children:l.title})]}),t.jsx(ce,{tone:bt[r],dot:!0,"data-part":"approval-pill",children:s}),e.actionable&&r==="pending"&&t.jsxs("div",{className:"flex shrink-0 gap-1.5",children:[t.jsx(O,{size:"sm",variant:"secondary",onClick:()=>d("approved"),children:e.approveLabel??"Approve"}),t.jsx(O,{size:"sm",variant:"ghost",onClick:()=>d("rejected"),children:e.rejectLabel??"Reject"})]})]})}function u(e,n){return function({base:l,data:r,instanceId:s,onEvent:c}){return t.jsx(e,{config:n.parse(l),data:r,instanceId:s,onEvent:c})}}const xt={"block-totals-summary":u(He,ze),"block-line-items":u(Ee,Pe),"block-kpi-row":u(et,De),"block-bar-chart":u(tt,We),"block-line-chart":u(at,Re),"block-two-col-table":u(st,Fe),"block-tax-breakdown":u(Me,Le),"block-multi-currency":u(_e,Ae),"block-payment-history":u(Ve,$e),"block-discount-codes":u(Ue,Se),"block-loyalty-banner":u(ct,Ie),"block-recurring-banner":u(dt,Te),"block-qr-pay":u(Ge,Ce),"block-delivery-stepper":u(it,Be),"block-signature":u(ut,we),"block-terms-checkbox":u(mt,ve),"block-approval":u(pt,ge),"block-attachments":u(lt,Ne),"block-late-fees":u(Ke,ke),"block-image-placeholder":u(nt,fe),"block-contact":u(Ze,je),"block-highlight-box":u(Je,ye)},ht={accent:"ring-accent",info:"ring-info",pos:"ring-pos",warn:"ring-warn",danger:"ring-danger",neutral:"ring-border-strong"};function yt({doc:e,config:n,locale:a}){const l=n.brand?.logo;return t.jsxs("header",{"data-part":"doc-header",className:"mb-6 border-b border-border pb-5",children:[t.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-4",children:[t.jsxs("div",{className:"min-w-0",children:[l!==void 0&&l!==""&&t.jsx("p",{"data-part":"doc-logo",className:"mb-1 text-section font-bold text-accent",children:l}),t.jsx("h2",{className:"text-title text-fg",children:e.title??""}),e.number!==void 0&&t.jsx(m,{className:"text-body-sm text-fg-subtle",children:e.number})]}),t.jsxs("dl",{className:"text-body-sm text-end",children:[e.issuedAt!==void 0&&t.jsxs("div",{className:"flex justify-between gap-4",children:[t.jsx("dt",{className:"text-fg-subtle",children:n.issuedLabel??"Issued"}),t.jsx("dd",{children:t.jsx(m,{className:"text-fg",children:$(e.issuedAt,a)})})]}),e.dueAt!==void 0&&t.jsxs("div",{className:"flex justify-between gap-4",children:[t.jsx("dt",{className:"text-fg-subtle",children:n.dueLabel??"Due"}),t.jsx("dd",{children:t.jsx(m,{className:"text-fg",children:$(e.dueAt,a)})})]})]})]}),t.jsx("div",{className:"mt-4 flex flex-wrap gap-8",children:[e.fromLines,e.toLines].map((r,s)=>Array.isArray(r)&&r.length>0?t.jsxs("address",{"data-part":s===0?"doc-from":"doc-to",className:"not-italic",children:[s===1&&t.jsx("p",{className:"mb-0.5 text-micro uppercase text-fg-subtle",children:n.billedToLabel??"Billed to"}),r.map(c=>t.jsx("p",{className:"text-body-sm text-fg-muted",children:c},c))]},s===0?"from":"to"):null)})]})}function Nt({config:e,data:n,instanceId:a,onEvent:l}){const r=h(n),s=ue(r?.docType,e.docType),c=me(r,{docType:s,...e.enabledBlocks===void 0?{}:{enabledBlocks:e.enabledBlocks}}),[d,o]=q.useState(null),[y,x]=q.useState(e.selectedBlockId),f=d??c;if(r===null)return t.jsx(i,{title:e.emptyTitle??"No document yet",body:e.emptyBody??"Pick a starter template or add a block to begin."});const U=e.format?.locale,K=ht[e.brand?.accent??"accent"],D=e.format===void 0?{}:{format:e.format},P=(b,j)=>{o(b),l(j)},z=(b,j)=>{const N=he(f,b,j);P(N,{type:"mutate",intent:"update",table:"document",recordId:a,values:{blockOrder:N.map(v=>v.block)}})},Q=b=>{const j=f.filter((N,v)=>v!==b);P(j,{type:"mutate",intent:"update",table:"document",recordId:a,values:{blockOrder:j.map(N=>N.block)}})};return t.jsxs("article",{"data-widget":"document-canvas","data-testid":e.testId,"data-doc-type":s,className:`h-full overflow-auto rounded-lg border border-border bg-surface p-6 ${s==="email"?"adm-always-light":""}`,children:[t.jsx(yt,{doc:r,config:e,locale:U}),f.length===0?t.jsx(i,{title:e.emptyTitle??"No blocks yet",body:e.emptyBody??"Add a block from the palette to build this document."}):t.jsx("ol",{"data-part":"block-list","aria-label":e.blockListLabel??"Document blocks",className:"space-y-4",children:f.map((b,j)=>{const N=xt[b.block];if(N===void 0)return null;const v=y===b.id;return t.jsxs("li",{"data-part":"block-instance","data-block":b.block,"data-selected":v,className:"group relative",children:[t.jsx("div",{className:`rounded-md p-2 transition-shadow ${v?`ring-2 ${K}`:"ring-1 ring-transparent hover:ring-border"}`,children:e.selectable?t.jsxs("div",{role:"button",tabIndex:0,"aria-pressed":v,"aria-label":b.label??b.block,onClick:()=>x(b.id),onKeyDown:I=>{I.key!=="Enter"&&I.key!==" "||I.target===I.currentTarget&&(I.preventDefault(),x(b.id))},className:"outline-none",children:[b.label!==void 0&&t.jsx("h3",{className:"mb-2 text-micro uppercase text-fg-subtle",children:b.label}),t.jsx(N,{base:D,data:E(b.block,r),instanceId:`${a}-${b.id}`,onEvent:l})]}):t.jsx(N,{base:D,data:E(b.block,r),instanceId:`${a}-${b.id}`,onEvent:l})}),e.reorderable&&t.jsxs("div",{"data-part":"block-controls",className:"absolute end-1 top-1 flex gap-0.5 opacity-0 transition-opacity duration-100 group-focus-within:opacity-100 group-hover:opacity-100",children:[t.jsx(L,{size:"sm","data-part":"block-move-up",label:e.moveUpLabel??"Move block up",disabled:j===0,onClick:()=>z(j,-1),children:t.jsx(be,{className:"size-3.5"})}),t.jsx(L,{size:"sm","data-part":"block-move-down",label:e.moveDownLabel??"Move block down",disabled:j===f.length-1,onClick:()=>z(j,1),children:t.jsx(pe,{className:"size-3.5"})}),t.jsx(L,{size:"sm","data-part":"block-remove",label:e.removeBlockLabel??"Remove block",onClick:()=>Q(j),className:"hover:text-danger",children:t.jsx(xe,{className:"size-3.5"})})]})]},b.id)})})]})}export{pt as BlockApprovalWidget,lt as BlockAttachmentsWidget,tt as BlockBarChartWidget,Ze as BlockContactWidget,it as BlockDeliveryStepperWidget,Ue as BlockDiscountCodesWidget,Je as BlockHighlightBoxWidget,nt as BlockImagePlaceholderWidget,et as BlockKpiRowWidget,Ke as BlockLateFeesWidget,at as BlockLineChartWidget,Ee as BlockLineItemsWidget,ct as BlockLoyaltyBannerWidget,_e as BlockMultiCurrencyWidget,Ve as BlockPaymentHistoryWidget,Ge as BlockQrPayWidget,dt as BlockRecurringBannerWidget,ut as BlockSignatureWidget,Me as BlockTaxBreakdownWidget,mt as BlockTermsCheckboxWidget,He as BlockTotalsSummaryWidget,st as BlockTwoColTableWidget,Nt as DocumentCanvasWidget};
|
|
2
|
+
//# sourceMappingURL=blocks-track-components-BST-NjK2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blocks-track-components-BST-NjK2.js","sources":["../../../../packages/widgets/dist/families/domain/BlockShell.js","../../../../packages/widgets/dist/families/domain/BlockFinancial.js","../../../../packages/widgets/dist/families/domain/BlockContent.js","../../../../packages/widgets/dist/families/domain/BlockReport.js","../../../../packages/widgets/dist/families/domain/BlockStatus.js","../../../../packages/widgets/dist/families/domain/DocumentCanvas.js"],"sourcesContent":["import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { EmptyState } from '@adminium/ui';\n/**\n * TRACK BUILDER — presentational primitives shared by the 22 `block-*` document\n * blocks (annex §13). Not registry widgets themselves: they are the paper-surface\n * vocabulary (a section wrapper, the money row, the empty card) the blocks are\n * assembled from, kept here so 22 blocks agree on their spacing, type scale and\n * empty copy instead of drifting apart.\n *\n * PAPER SURFACE: blocks render inside `document-canvas`'s paper pane, so they\n * carry no card chrome of their own — `WidgetFrame` supplies it when a block is\n * placed standalone on a grid, and the canvas supplies the section outline when\n * it is composed. That is why these primitives are transparent by default.\n */\n/** Every block's empty card — one shape, per-widget copy (04 §4). */\nexport function BlockEmpty({ title, body }) {\n return _jsx(EmptyState, { compact: true, preset: \"no-data\", title: title ?? 'Nothing to show', body: body });\n}\n/**\n * A labelled block section. `label` is already-translated copy from config (04\n * §2 — widgets are locale-agnostic).\n */\nexport function BlockSection({ label, testId, block, children, }) {\n return (_jsxs(\"section\", { \"data-widget\": block, \"data-testid\": testId, className: \"w-full\", children: [label !== undefined && (_jsx(\"h3\", { className: \"mb-2 text-micro uppercase text-fg-subtle\", children: label })), children] }));\n}\n/**\n * One money line: label at the inline start, mono figure at the inline end.\n *\n * RTL: the row is a flex with `justify-between`, and the figure is `text-end` —\n * both logical, so the whole row mirrors under `dir=\"rtl\"` with no physical\n * direction utility anywhere (the repo bans `ml-`/`pr-`/`left-`/`right-`).\n */\nexport function MoneyRow({ label, value, tone = 'default', emphasis = false, testId, }) {\n const valueTone = tone === 'pos'\n ? 'text-pos'\n : tone === 'accent'\n ? 'text-accent'\n : tone === 'muted'\n ? 'text-fg-subtle'\n : 'text-fg';\n return (_jsxs(\"div\", { \"data-part\": \"money-row\", \"data-testid\": testId, className: `flex items-baseline justify-between gap-4 py-1.5 ${emphasis ? 'border-t border-border pt-2.5' : ''}`, children: [_jsx(\"span\", { className: `text-body-sm ${emphasis ? 'font-bold text-fg' : 'text-fg-muted'}`, children: label }), _jsx(\"span\", { className: `font-mono tabular-nums text-end ${valueTone} ${emphasis ? 'text-section font-bold' : 'text-body-sm'}`, children: value })] }));\n}\n/** A callout box — the tinted banner shape behind loyalty/recurring/late-fees. */\nexport function BlockCallout({ tone, icon, children, block, testId, }) {\n const skin = tone === 'pos'\n ? 'bg-pos-soft text-fg'\n : tone === 'warn'\n ? 'bg-warn-soft text-fg'\n : tone === 'info'\n ? 'bg-info-soft text-fg'\n : tone === 'accent'\n ? 'bg-accent-soft text-fg'\n : 'bg-surface-2 text-fg';\n const iconTone = tone === 'pos'\n ? 'text-pos'\n : tone === 'warn'\n ? 'text-warn'\n : tone === 'info'\n ? 'text-info'\n : tone === 'accent'\n ? 'text-accent'\n : 'text-fg-subtle';\n return (_jsxs(\"div\", { \"data-widget\": block, \"data-testid\": testId, className: `flex items-center gap-3 rounded-md px-3 py-2.5 ${skin}`, children: [icon !== undefined && _jsx(\"span\", { className: `shrink-0 ${iconTone}`, children: icon }), _jsx(\"div\", { className: \"min-w-0 flex-1 text-body-sm\", children: children })] }));\n}\n/**\n * Fill a `{placeholder}` template with already-translated values.\n *\n * The blocks' templated copy (\"Recurring — {freq} · Next on {next} · {count}\n * cycles\") arrives from config as ONE translated string with placeholders, so\n * translators control word order — the block must never concatenate fragments,\n * which is exactly what breaks in RTL and in languages that reorder clauses.\n */\nexport function fillTemplate(template, values) {\n return template.replace(/\\{(\\w+)\\}/g, (match, key) => values[key] ?? match);\n}\n//# sourceMappingURL=BlockShell.js.map","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { MonoText, StatusPill } from '@adminium/ui';\nimport { AlertTriangle } from 'lucide-react';\nimport { BlockCallout, BlockEmpty, MoneyRow, fillTemplate } from './BlockShell.js';\nimport { blockBindingSourceOf, computeTotals, formatBlockDate, formatBlockMoney, formatBlockRate, lineItemsOf, maskMethod, rowOf, rowsOf, round2, } from './block-lib.js';\nimport { blockDiscountCodesConfigSchema, blockDiscountCodesDemoData, blockLateFeesConfigSchema, blockLateFeesDemoData, blockLineItemsConfigSchema, blockLineItemsDemoData, blockMultiCurrencyConfigSchema, blockMultiCurrencyDemoData, blockPaymentHistoryConfigSchema, blockPaymentHistoryDemoData, blockQrPayConfigSchema, blockQrPayDemoData, blockTaxBreakdownConfigSchema, blockTaxBreakdownDemoData, blockTotalsSummaryConfigSchema, blockTotalsSummaryDemoData, } from './blocks-config.js';\nimport { mulberry32, numberField, stringField } from './domain-lib.js';\nexport { blockDiscountCodesConfigSchema, blockDiscountCodesDemoData, blockLateFeesConfigSchema, blockLateFeesDemoData, blockLineItemsConfigSchema, blockLineItemsDemoData, blockMultiCurrencyConfigSchema, blockMultiCurrencyDemoData, blockPaymentHistoryConfigSchema, blockPaymentHistoryDemoData, blockQrPayConfigSchema, blockQrPayDemoData, blockTaxBreakdownConfigSchema, blockTaxBreakdownDemoData, blockTotalsSummaryConfigSchema, blockTotalsSummaryDemoData, };\n/**\n * TRACK BUILDER — the INVOICE/PAYMENT half of the annex §13 document-block\n * vocabulary, grouped in one module because the annex specifies them as one\n * shared library and they share the money helpers (`computeTotals`,\n * `formatBlockMoney`) end to end:\n *\n * `block-line-items`, `block-totals-summary`, `block-tax-breakdown`,\n * `block-multi-currency`, `block-payment-history`, `block-discount-codes`,\n * `block-late-fees`, `block-qr-pay`.\n *\n * NEVER WRITES: `block-line-items`' qty/rate edits emit `mutate` intents through\n * `onEvent` and the host runs them through the CRUD API with undo + audit\n * (04 §2.1). An unbound (demo) block has no table to address, so it renders the\n * inputs but emits nothing.\n *\n * MONEY IS ALWAYS RECOMPUTED, never read from a stored column: the totals, the\n * tax lines and the QR amount all derive from the same `computeTotals`, so a\n * canvas edit can never leave one block disagreeing with another.\n */\n// ── block-line-items ────────────────────────────────────────────────────────\nexport function BlockLineItemsWidget({ config, data, onEvent }) {\n const items = lineItemsOf(data, config);\n const source = blockBindingSourceOf(config.binding);\n const locale = config.format?.locale;\n const currency = config.format?.currency;\n if (items.length === 0) {\n return _jsx(BlockEmpty, { title: config.emptyTitle ?? 'No line items', body: config.emptyBody ?? 'Add a line item to build this document.' });\n }\n const emit = (id, field, raw) => {\n if (source === null)\n return; // unbound: nothing to write to\n /*\n An EMPTY field is not a write of zero. `<input type=\"number\">` reports\n value === '' both while the user is clearing it to retype and for any\n input the control rejects as non-numeric — and `Number('')` is 0, not NaN,\n so without this guard the finite-check below passes and clearing a qty\n silently persists `qty: 0`, zeroing the line item's amount mid-keystroke.\n */\n if (raw.trim() === '')\n return;\n const value = Number(raw);\n if (!Number.isFinite(value) || value < 0)\n return;\n onEvent({\n type: 'mutate',\n intent: 'update',\n connectionId: source.connectionId,\n table: source.table,\n recordId: id,\n values: { [field]: value },\n });\n };\n return (_jsxs(\"table\", { \"data-widget\": \"block-line-items\", \"data-testid\": config.testId, className: \"w-full text-body-sm\", children: [_jsx(\"thead\", { children: _jsxs(\"tr\", { className: \"border-b border-border text-micro uppercase text-fg-subtle\", children: [_jsx(\"th\", { scope: \"col\", className: \"py-2 text-start font-bold\", children: config.descHeader ?? 'Description' }), _jsx(\"th\", { scope: \"col\", className: \"w-16 py-2 text-end font-bold\", children: config.qtyHeader ?? 'Qty' }), _jsx(\"th\", { scope: \"col\", className: \"w-24 py-2 text-end font-bold\", children: config.rateHeader ?? 'Rate' }), config.showAmountColumn && (_jsx(\"th\", { scope: \"col\", className: \"w-28 py-2 text-end font-bold\", children: config.amountHeader ?? 'Amount' }))] }) }), _jsx(\"tbody\", { children: items.map((item) => (_jsxs(\"tr\", { \"data-part\": \"line-item\", className: \"border-b border-border/60 last:border-0\", children: [_jsx(\"td\", { className: \"py-2 text-start text-fg\", children: item.desc }), _jsx(\"td\", { className: \"py-2 text-end\", children: config.editable ? (_jsx(\"input\", { type: \"number\", min: 0, defaultValue: item.qty, \"aria-label\": `${config.qtyHeader ?? 'Qty'} — ${item.desc}`, onChange: (event) => emit(item.id, config.qtyField, event.target.value), className: \"w-full rounded-sm bg-transparent px-1 py-0.5 text-end font-mono tabular-nums text-body-sm text-fg hover:bg-surface-2 focus-visible:bg-surface-2\" })) : (_jsx(MonoText, { children: item.qty })) }), _jsx(\"td\", { className: \"py-2 text-end\", children: config.editable ? (_jsx(\"input\", { type: \"number\", min: 0, step: 0.01, defaultValue: item.rate, \"aria-label\": `${config.rateHeader ?? 'Rate'} — ${item.desc}`, onChange: (event) => emit(item.id, config.rateField, event.target.value), className: \"w-full rounded-sm bg-transparent px-1 py-0.5 text-end font-mono tabular-nums text-body-sm text-fg hover:bg-surface-2 focus-visible:bg-surface-2\" })) : (_jsx(MonoText, { children: formatBlockMoney(item.rate, { locale, currency }) })) }), config.showAmountColumn && (_jsx(\"td\", { className: \"py-2 text-end\", children: _jsx(MonoText, { className: \"text-fg\", children: formatBlockMoney(round2(item.qty * item.rate), { locale, currency }) }) }))] }, item.id))) })] }));\n}\n// ── block-totals-summary ────────────────────────────────────────────────────\nexport function BlockTotalsSummaryWidget({ config, data }) {\n const payload = rowOf(data);\n if (payload === null) {\n return _jsx(BlockEmpty, { title: config.emptyTitle ?? 'No totals', body: config.emptyBody ?? 'Totals appear once the document has line items.' });\n }\n // The doc's items/rates live under CONFIG-NAMED keys (04 §5) — hardcoding\n // `payload.items` would read `undefined` off a doc whose line items are a\n // `lines` column and print a silent $0.00 invoice rather than an empty state.\n const rawItems = payload[config.itemsField];\n const rawRates = payload[config.ratesField];\n const items = lineItemsOf({ rows: Array.isArray(rawItems) ? rawItems : [] }, config);\n const rates = (typeof rawRates === 'object' && rawRates !== null ? rawRates : undefined);\n const totals = computeTotals(items, rates, config.format?.currency || 'USD');\n const locale = config.format?.locale;\n const currency = config.format?.currency || totals.currency;\n const money = (value) => formatBlockMoney(value, { locale, currency });\n return (_jsxs(\"div\", { \"data-widget\": \"block-totals-summary\", \"data-testid\": config.testId, className: \"w-full\", children: [_jsx(MoneyRow, { label: config.subtotalLabel ?? 'Subtotal', value: money(totals.subtotal) }), (totals.discount > 0 || !config.hideZeroDiscount) && (_jsx(MoneyRow, { testId: \"block-totals-discount\", label: config.discountLabel ?? 'Discount', value: `−${money(totals.discount)}`, tone: \"pos\" })), _jsx(MoneyRow, { label: config.taxLabel ?? 'Tax', value: money(totals.tax) }), _jsx(MoneyRow, { label: config.totalLabel ?? 'Total due', value: money(totals.total), tone: \"accent\", emphasis: true })] }));\n}\n// ── block-tax-breakdown ─────────────────────────────────────────────────────\nexport function BlockTaxBreakdownWidget({ config, data }) {\n const lines = rowsOf(data).map((row, index) => ({\n id: stringField(row, config.idField) ?? `tax-${index}`,\n label: stringField(row, config.labelField) ?? '',\n rate: numberField(row, config.rateField) ?? 0,\n amount: numberField(row, config.amountField),\n }));\n if (lines.length === 0) {\n return _jsx(BlockEmpty, { title: config.emptyTitle ?? 'No tax lines', body: config.emptyBody ?? 'Tax lines appear once a rate applies to this document.' });\n }\n const locale = config.format?.locale;\n const currency = config.format?.currency;\n return (_jsx(\"div\", { \"data-widget\": \"block-tax-breakdown\", \"data-testid\": config.testId, className: \"w-full\", children: lines.map((line) => (_jsx(MoneyRow, { label: config.showRateColumn ? (_jsxs(_Fragment, { children: [line.label, \" \", _jsx(\"span\", { className: \"text-fg-subtle\", children: formatBlockRate(line.rate, locale) })] })) : (line.label), \n // Derived from `rate × subtotal` unless the row carries its own amount\n // (annex: \"applied to subtotal\") — an item edit reflows the tax.\n value: formatBlockMoney(line.amount ?? round2(config.subtotal * line.rate), { locale, currency }) }, line.id))) }));\n}\n// ── block-multi-currency ────────────────────────────────────────────────────\nexport function BlockMultiCurrencyWidget({ config, data }) {\n const payload = rowOf(data);\n const fx = Array.isArray(payload?.fx) ? payload.fx : [];\n if (payload === null || fx.length === 0) {\n return _jsx(BlockEmpty, { title: config.emptyTitle ?? 'No conversions', body: config.emptyBody ?? 'Currency conversions appear once exchange rates are available.' });\n }\n const locale = config.format?.locale;\n const amount = typeof payload.amount === 'number' ? payload.amount : 0;\n const base = payload.baseCurrency || config.format?.currency || 'USD';\n return (_jsxs(\"div\", { \"data-widget\": \"block-multi-currency\", \"data-testid\": config.testId, className: \"w-full\", children: [_jsx(MoneyRow, { label: base, value: formatBlockMoney(amount, { locale, currency: base }), emphasis: true }), fx.map((line) => (_jsx(MoneyRow, { label: line.currency, value: formatBlockMoney(round2(amount * line.rate), { locale, currency: line.currency }), tone: \"muted\" }, line.currency))), config.footnote !== undefined && (_jsx(\"p\", { className: \"mt-2 text-caption text-fg-subtle\", children: config.footnote }))] }));\n}\n// ── block-payment-history ───────────────────────────────────────────────────\nexport function BlockPaymentHistoryWidget({ config, data }) {\n const rows = rowsOf(data)\n .slice(0, config.maxRows)\n .map((row, index) => ({\n id: stringField(row, config.idField) ?? `pay-${index}`,\n date: stringField(row, config.dateField) ?? '',\n method: stringField(row, config.methodField) ?? '',\n last4: stringField(row, config.last4Field),\n amount: numberField(row, config.amountField) ?? 0,\n status: stringField(row, config.statusField) ?? 'pending',\n }));\n if (rows.length === 0) {\n return _jsx(BlockEmpty, { title: config.emptyTitle ?? 'No payments yet', body: config.emptyBody ?? 'Payments against this document will appear here.' });\n }\n const locale = config.format?.locale;\n const currency = config.format?.currency;\n return (_jsx(\"ul\", { \"data-widget\": \"block-payment-history\", \"data-testid\": config.testId, className: \"w-full space-y-1\", children: rows.map((row) => (_jsxs(\"li\", { \"data-part\": \"payment-row\", className: \"flex items-center gap-3 py-1.5 text-body-sm\", children: [_jsx(MonoText, { className: \"shrink-0 text-caption text-fg-subtle\", children: formatBlockDate(row.date, locale) }), _jsx(\"span\", { className: \"min-w-0 flex-1 truncate text-fg\", children: maskMethod(row.method, row.last4) }), _jsx(MonoText, { className: \"shrink-0 text-fg\", children: formatBlockMoney(row.amount, { locale, currency }) }), _jsx(StatusPill, { status: row.status, className: \"shrink-0\" })] }, row.id))) }));\n}\n// ── block-discount-codes ────────────────────────────────────────────────────\nexport function BlockDiscountCodesWidget({ config, data }) {\n const rows = rowsOf(data).map((row, index) => ({\n id: stringField(row, config.idField) ?? `disc-${index}`,\n code: stringField(row, config.codeField) ?? '',\n label: stringField(row, config.labelField) ?? '',\n amount: numberField(row, config.amountField) ?? 0,\n }));\n if (rows.length === 0) {\n return _jsx(BlockEmpty, { title: config.emptyTitle ?? 'No discount codes', body: config.emptyBody ?? 'Applied discount codes will appear here.' });\n }\n const locale = config.format?.locale;\n const currency = config.format?.currency;\n return (_jsx(\"ul\", { \"data-widget\": \"block-discount-codes\", \"data-testid\": config.testId, className: \"w-full space-y-1.5\", children: rows.map((row) => (_jsxs(\"li\", { \"data-part\": \"discount-row\", className: \"flex items-center gap-2.5 text-body-sm\", children: [_jsx(MonoText, { className: \"shrink-0 rounded-sm bg-surface-2 px-1.5 py-0.5 text-caption text-fg\", children: row.code }), _jsx(\"span\", { className: \"min-w-0 flex-1 truncate text-fg-muted\", children: row.label }), _jsxs(MonoText, { className: \"shrink-0 text-pos\", children: [\"\\u2212\", formatBlockMoney(row.amount, { locale, currency })] })] }, row.id))) }));\n}\n// ── block-late-fees ─────────────────────────────────────────────────────────\nexport function BlockLateFeesWidget({ config, data }) {\n const payload = rowOf(data);\n if (payload === null) {\n return _jsx(BlockEmpty, { title: config.emptyTitle ?? 'No late fee', body: config.emptyBody ?? 'Late-fee terms appear once they are set on this document.' });\n }\n const locale = config.format?.locale;\n const rate = typeof payload.rate === 'number' ? payload.rate : 0;\n const days = typeof payload.days === 'number' ? payload.days : 0;\n // ONE translated template with placeholders — never concatenated fragments,\n // so translators keep control of word order (and RTL stays correct).\n const template = config.template ?? 'A {rate} late fee applies after {days} days.';\n return (_jsx(BlockCallout, { block: \"block-late-fees\", tone: \"warn\", testId: config.testId, icon: _jsx(AlertTriangle, { className: \"size-4\" }), children: fillTemplate(template, {\n rate: formatBlockRate(rate, locale),\n days: String(days),\n }) }));\n}\n// ── block-qr-pay ────────────────────────────────────────────────────────────\n/**\n * A deterministic QR-shaped PLACEHOLDER: three finder squares + a seeded module\n * field. It encodes nothing — the annex specifies the visual, and a real codec\n * would be a runtime dependency for a block whose payment URL the host owns.\n * Seeded (never `Math.random`) so VRT captures stay byte-identical.\n *\n * FORCED LIGHT, NOT RAW WHITE: the annex's \"forced-white QR tile\" is the\n * canonical theming exception `adm-always-light` (@adminium/tokens\n * exceptions.css — \"Email previews and QR tiles are ALWAYS light, both themes\n * … QR needs dark-on-light contrast\"). The scope re-declares the token set on\n * this subtree, so `bg-surface` / `fill-surface` / `currentColor` stay token-driven\n * and no literal color is written here.\n */\nfunction QrPlaceholder({ modules, seed }) {\n const random = mulberry32(seed || 1);\n const cells = [];\n const inFinder = (x, y) => {\n const near = (ox, oy) => x >= ox && x < ox + 7 && y >= oy && y < oy + 7;\n return near(0, 0) || near(modules - 7, 0) || near(0, modules - 7);\n };\n for (let y = 0; y < modules; y += 1) {\n for (let x = 0; x < modules; x += 1) {\n if (inFinder(x, y))\n continue;\n if (random() < 0.45)\n cells.push({ x, y });\n }\n }\n const finder = (ox, oy) => (_jsxs(\"g\", { children: [_jsx(\"rect\", { x: ox, y: oy, width: 7, height: 7, fill: \"currentColor\" }), _jsx(\"rect\", { x: ox + 1, y: oy + 1, width: 5, height: 5, className: \"fill-surface\" }), _jsx(\"rect\", { x: ox + 2, y: oy + 2, width: 3, height: 3, fill: \"currentColor\" })] }, `f-${ox}-${oy}`));\n return (_jsxs(\"svg\", { viewBox: `0 0 ${modules} ${modules}`, className: \"adm-always-light size-28 shrink-0 rounded-sm bg-surface p-1 text-fg\", role: \"img\", \"aria-hidden\": true, \"data-part\": \"qr-placeholder\", children: [finder(0, 0), finder(modules - 7, 0), finder(0, modules - 7), cells.map((cell) => (_jsx(\"rect\", { x: cell.x, y: cell.y, width: 1, height: 1, fill: \"currentColor\" }, `${cell.x}-${cell.y}`)))] }));\n}\nexport function BlockQrPayWidget({ config, data }) {\n const payload = rowOf(data);\n if (payload === null) {\n return _jsx(BlockEmpty, { title: config.emptyTitle ?? 'No payment link', body: config.emptyBody ?? 'A scannable payment code appears once an amount is due.' });\n }\n const locale = config.format?.locale;\n const currency = config.format?.currency || payload.currency || 'USD';\n const total = typeof payload.total === 'number' ? payload.total : 0;\n return (_jsxs(\"div\", { \"data-widget\": \"block-qr-pay\", \"data-testid\": config.testId, className: \"flex w-full items-center gap-4\", children: [_jsx(QrPlaceholder, { modules: config.modules, seed: config.qrSeed }), _jsxs(\"div\", { className: \"min-w-0 flex-1\", children: [_jsx(\"p\", { className: \"text-body-sm text-fg-muted\", children: payload.caption }), _jsx(\"p\", { className: \"mt-1 text-caption text-fg-subtle\", children: config.amountLabel ?? 'Amount due' }), _jsx(MonoText, { className: \"text-title font-bold text-accent\", children: formatBlockMoney(total, { locale, currency }) })] })] }));\n}\n//# sourceMappingURL=BlockFinancial.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { MonoText } from '@adminium/ui';\nimport { Mail, Phone, User } from 'lucide-react';\nimport { BlockEmpty } from './BlockShell.js';\nimport { rowOf } from './block-lib.js';\nimport { blockContactConfigSchema, blockContactDemoData, blockHighlightBoxConfigSchema, blockHighlightBoxDemoData, } from './blocks-config.js';\nexport { blockContactConfigSchema, blockContactDemoData, blockHighlightBoxConfigSchema, blockHighlightBoxDemoData, };\n/**\n * TRACK BUILDER — the CONTENT tail of the annex §13 document-block vocabulary:\n * `block-contact` and `block-highlight-box`.\n */\n// ── block-contact ───────────────────────────────────────────────────────────\nexport function BlockContactWidget({ config, data }) {\n const payload = rowOf(data);\n if (payload === null) {\n return _jsx(BlockEmpty, { title: config.emptyTitle ?? 'No contact', body: config.emptyBody ?? 'Contact details appear once this document names a recipient.' });\n }\n const rows = [\n { key: 'name', icon: User, value: payload.name, mono: false },\n { key: 'email', icon: Mail, value: payload.email, mono: true },\n { key: 'phone', icon: Phone, value: payload.phone, mono: true },\n ];\n return (_jsx(\"ul\", { \"data-widget\": \"block-contact\", \"data-testid\": config.testId, className: \"w-full space-y-1.5\", children: rows\n .filter((row) => row.value !== undefined && row.value !== '')\n .map((row) => {\n const Icon = row.icon;\n return (_jsxs(\"li\", { \"data-part\": `contact-${row.key}`, className: \"flex items-center gap-2.5 text-body-sm\", children: [_jsx(Icon, { className: \"size-3.5 shrink-0 text-fg-subtle\", \"aria-hidden\": true }), row.mono ? (_jsx(MonoText, { className: \"min-w-0 truncate text-fg\", children: row.value })) : (_jsx(\"span\", { className: \"min-w-0 truncate font-bold text-fg\", children: row.value }))] }, row.key));\n }) }));\n}\n// ── block-highlight-box ─────────────────────────────────────────────────────\nexport function BlockHighlightBoxWidget({ config, data }) {\n const payload = rowOf(data);\n if (payload === null) {\n return _jsx(BlockEmpty, { title: config.emptyTitle ?? 'Nothing highlighted', body: config.emptyBody ?? 'A highlighted figure appears once this block is bound.' });\n }\n return (\n // The annex's \"gray callout, label + large mono value (\"Amount charged /\n // $290.00\")\" — centered, because it is the one figure an email surface wants\n // the reader to land on.\n _jsxs(\"div\", { \"data-widget\": \"block-highlight-box\", \"data-testid\": config.testId, className: \"w-full rounded-md bg-surface-2 px-4 py-3 text-center\", children: [_jsx(\"p\", { className: \"text-caption text-fg-subtle\", children: payload.label }), _jsx(MonoText, { className: \"mt-0.5 block text-title font-bold text-fg\", children: payload.value })] }));\n}\n//# sourceMappingURL=BlockContent.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { sparkBars, sparkLine } from '@adminium/charts';\nimport { MonoText } from '@adminium/ui';\nimport { Paperclip } from 'lucide-react';\nimport { BlockEmpty } from './BlockShell.js';\nimport { categoricalItemsOf, formatBlockMoney, formatBlockNumber, formatBlockSize, rowOf, rowsOf, twoColRowsOf, } from './block-lib.js';\nimport { blockAttachmentsConfigSchema, blockAttachmentsDemoData, blockBarChartConfigSchema, blockBarChartDemoData, blockImagePlaceholderConfigSchema, blockImagePlaceholderDemoData, blockKpiRowConfigSchema, blockKpiRowDemoData, blockLineChartConfigSchema, blockLineChartDemoData, blockTwoColTableConfigSchema, blockTwoColTableDemoData, } from './blocks-config.js';\nimport { numberField, stringField } from './domain-lib.js';\nexport { blockAttachmentsConfigSchema, blockAttachmentsDemoData, blockBarChartConfigSchema, blockBarChartDemoData, blockImagePlaceholderConfigSchema, blockImagePlaceholderDemoData, blockKpiRowConfigSchema, blockKpiRowDemoData, blockLineChartConfigSchema, blockLineChartDemoData, blockTwoColTableConfigSchema, blockTwoColTableDemoData, };\n/**\n * TRACK BUILDER — the REPORT half of the annex §13 document-block vocabulary:\n *\n * `block-kpi-row`, `block-bar-chart`, `block-line-chart`,\n * `block-two-col-table`, `block-attachments`, `block-image-placeholder`.\n *\n * MINI CHARTS: the annex specifies \"mini pure-div/SVG charts, currentColor\n * accent\" — deliberately NOT the full `chart-bar` / `chart-line-area` widgets,\n * which carry axes, tooltips and legends a ~200px paper block has no room for.\n * They reuse @adminium/charts' PURE geometry primitives (`sparkBars`,\n * `sparkLine`) and paint a bare SVG in `currentColor`, so the doc's accent flows\n * through and the block adds no chart-runtime weight to the document chunk.\n */\n// ── block-kpi-row ───────────────────────────────────────────────────────────\n/**\n * Sign-aware delta tone (annex: \"stat tiles with sign-aware delta coloring\").\n * `invertDelta` flips it for metrics where up is bad (churn, latency, refunds) —\n * a green +18% churn would be an actively misleading report.\n */\nfunction deltaTone(delta, invert) {\n if (delta === 0)\n return 'text-fg-subtle';\n const good = invert ? delta < 0 : delta > 0;\n return good ? 'text-pos' : 'text-danger';\n}\nfunction formatKpiValue(kpi, locale, currency) {\n if (kpi.unit === 'currency')\n return formatBlockMoney(kpi.value, { locale, currency });\n if (kpi.unit === 'percent')\n return `${formatBlockNumber(Math.round(kpi.value * 1000) / 10, locale)}%`;\n return formatBlockNumber(kpi.value, locale);\n}\nexport function BlockKpiRowWidget({ config, data }) {\n const kpis = rowsOf(data)\n .slice(0, config.maxTiles)\n .map((row, index) => ({\n id: stringField(row, config.idField) ?? `kpi-${index}`,\n label: stringField(row, config.labelField) ?? '',\n value: numberField(row, config.valueField) ?? 0,\n delta: numberField(row, config.deltaField),\n unit: stringField(row, config.unitField) ?? 'plain',\n }));\n if (kpis.length === 0) {\n return _jsx(BlockEmpty, { title: config.emptyTitle ?? 'No metrics', body: config.emptyBody ?? 'Report metrics will appear here once the document is bound.' });\n }\n const locale = config.format?.locale;\n const currency = config.format?.currency;\n return (_jsx(\"div\", { \"data-widget\": \"block-kpi-row\", \"data-testid\": config.testId, className: \"grid w-full grid-cols-2 gap-2 sm:grid-cols-4\", children: kpis.map((kpi) => (_jsxs(\"div\", { \"data-part\": \"kpi-tile\", className: \"rounded-md bg-surface-2 p-2.5\", children: [_jsx(\"p\", { className: \"truncate text-caption text-fg-subtle\", children: kpi.label }), _jsx(MonoText, { className: \"block text-section font-bold text-fg\", children: formatKpiValue(kpi, locale, currency) }), kpi.delta !== undefined && (_jsxs(MonoText, { \"data-part\": \"kpi-delta\", className: `block text-caption ${deltaTone(kpi.delta, config.invertDelta)}`, children: [kpi.delta > 0 ? '+' : '', formatBlockNumber(Math.round(kpi.delta * 1000) / 10, locale), \"%\"] }))] }, kpi.id))) }));\n}\n// ── block-bar-chart / block-line-chart ──────────────────────────────────────\nconst CHART_W = 240;\nconst CHART_H = 64;\nfunction ChartAxis({ labels }) {\n return (_jsx(\"div\", { \"data-part\": \"chart-axis\", className: \"mt-1 flex justify-between text-micro text-fg-subtle\", children: labels.map((label, index) => (_jsx(\"span\", { children: label }, `${label}-${index}`))) }));\n}\nexport function BlockBarChartWidget({ config, data }) {\n const items = categoricalItemsOf(data).slice(0, config.maxPoints);\n if (items.length === 0) {\n return _jsx(BlockEmpty, { title: config.emptyTitle ?? 'No chart data', body: config.emptyBody ?? 'A mini bar chart appears once this block is bound to a series.' });\n }\n const bars = sparkBars(items.map((item) => item.value), CHART_W, CHART_H, 3);\n const locale = config.format?.locale;\n return (_jsxs(\"div\", { \"data-widget\": \"block-bar-chart\", \"data-testid\": config.testId, className: \"w-full text-accent\", children: [_jsx(\"svg\", { viewBox: `0 0 ${CHART_W} ${CHART_H}`, className: \"h-16 w-full\", preserveAspectRatio: \"none\", role: \"img\", \"aria-label\": config.title ?? 'Bar chart', children: bars.map((bar, index) => (_jsx(\"rect\", { x: bar.x, y: bar.y, width: bar.width, height: bar.height, rx: 1, fill: \"currentColor\", \n // The annex's emphasis: the latest bar reads full-tone, the rest\n // recede — the same convention @adminium/charts' Sparkline uses.\n opacity: bar.isLast ? 1 : 0.45 }, items[index]?.label ?? index))) }), config.showValues && (_jsx(\"div\", { className: \"mt-1 flex justify-between text-micro text-fg-subtle\", children: items.map((item) => (_jsx(MonoText, { children: formatBlockNumber(item.value, locale) }, item.label))) })), config.showAxis && _jsx(ChartAxis, { labels: items.map((item) => item.label) })] }));\n}\nexport function BlockLineChartWidget({ config, data }) {\n const items = categoricalItemsOf(data).slice(0, config.maxPoints);\n if (items.length === 0) {\n return _jsx(BlockEmpty, { title: config.emptyTitle ?? 'No chart data', body: config.emptyBody ?? 'A mini line chart appears once this block is bound to a series.' });\n }\n const layout = sparkLine(items.map((item) => item.value), CHART_W, CHART_H, 3);\n const locale = config.format?.locale;\n // Close the polyline down to the baseline for the filled variant.\n const areaPoints = layout.points === '' ? '' : `0,${CHART_H} ${layout.points} ${CHART_W},${CHART_H}`;\n return (_jsxs(\"div\", { \"data-widget\": \"block-line-chart\", \"data-testid\": config.testId, className: \"w-full text-accent\", children: [_jsxs(\"svg\", { viewBox: `0 0 ${CHART_W} ${CHART_H}`, className: \"h-16 w-full\", preserveAspectRatio: \"none\", role: \"img\", \"aria-label\": config.title ?? 'Line chart', children: [config.area && areaPoints !== '' && (_jsx(\"polygon\", { \"data-part\": \"line-area\", points: areaPoints, fill: \"currentColor\", opacity: 0.14 })), _jsx(\"polyline\", { \"data-part\": \"line-stroke\", points: layout.points, fill: \"none\", stroke: \"currentColor\", strokeWidth: 2, strokeLinecap: \"round\", strokeLinejoin: \"round\", vectorEffect: \"non-scaling-stroke\" }), layout.last !== null && (_jsx(\"circle\", { cx: layout.last.x, cy: layout.last.y, r: 2.5, fill: \"currentColor\" }))] }), config.showValues && (_jsx(\"div\", { className: \"mt-1 flex justify-between text-micro text-fg-subtle\", children: items.map((item) => (_jsx(MonoText, { children: formatBlockNumber(item.value, locale) }, item.label))) })), config.showAxis && _jsx(ChartAxis, { labels: items.map((item) => item.label) })] }));\n}\n// ── block-two-col-table ─────────────────────────────────────────────────────\nexport function BlockTwoColTableWidget({ config, data }) {\n const rows = twoColRowsOf(data);\n if (rows.length === 0) {\n return _jsx(BlockEmpty, { title: config.emptyTitle ?? 'No rows', body: config.emptyBody ?? 'Two-column rows will appear here.' });\n }\n // annex: \"first row styled header\" — but only when `headerRow` says so, in\n // which case that row leaves the body rather than rendering twice.\n const head = config.headerRow ? rows[0] : undefined;\n const body = config.headerRow ? rows.slice(1) : rows;\n return (_jsxs(\"table\", { \"data-widget\": \"block-two-col-table\", \"data-testid\": config.testId, className: \"w-full text-body-sm\", children: [head !== undefined && (_jsx(\"thead\", { children: _jsxs(\"tr\", { className: \"border-b border-border text-micro uppercase text-fg-subtle\", children: [_jsx(\"th\", { scope: \"col\", className: \"py-2 text-start font-bold\", children: head[0] }), _jsx(\"th\", { scope: \"col\", className: \"py-2 text-end font-bold\", children: head[1] })] }) })), _jsx(\"tbody\", { children: body.map((row, index) => (_jsxs(\"tr\", { className: \"border-b border-border/60 last:border-0\", children: [_jsx(\"td\", { className: \"py-1.5 text-start text-fg-muted\", children: row[0] }), _jsx(\"td\", { className: \"py-1.5 text-end text-fg\", children: config.monoRightColumn ? _jsx(MonoText, { children: row[1] }) : row[1] })] }, `${row[0]}-${index}`))) })] }));\n}\n// ── block-attachments ───────────────────────────────────────────────────────\nexport function BlockAttachmentsWidget({ config, data }) {\n const files = rowsOf(data)\n .slice(0, config.maxRows)\n .map((row, index) => ({\n id: stringField(row, config.idField) ?? `att-${index}`,\n name: stringField(row, config.nameField) ?? '',\n size: numberField(row, config.sizeField) ?? 0,\n }));\n if (files.length === 0) {\n return _jsx(BlockEmpty, { title: config.emptyTitle ?? 'No attachments', body: config.emptyBody ?? 'Files attached to this document will appear here.' });\n }\n const locale = config.format?.locale;\n return (_jsx(\"ul\", { \"data-widget\": \"block-attachments\", \"data-testid\": config.testId, className: \"w-full space-y-1\", children: files.map((file) => (_jsxs(\"li\", { \"data-part\": \"attachment-row\", className: \"flex items-center gap-2.5 py-1 text-body-sm\", children: [_jsx(Paperclip, { className: \"size-3.5 shrink-0 text-fg-subtle\", \"aria-hidden\": true }), _jsx(\"span\", { className: \"min-w-0 flex-1 truncate text-fg\", children: file.name }), _jsx(MonoText, { className: \"shrink-0 text-caption text-fg-subtle\", children: formatBlockSize(file.size, locale) })] }, file.id))) }));\n}\n// ── block-image-placeholder ─────────────────────────────────────────────────\nconst RATIO_CLASS = {\n '16/9': 'aspect-video',\n '4/3': 'aspect-4/3',\n '1/1': 'aspect-square',\n};\nexport function BlockImagePlaceholderWidget({ config, data }) {\n const payload = rowOf(data);\n if (payload === null) {\n return _jsx(BlockEmpty, { title: config.emptyTitle ?? 'No image slot', body: config.emptyBody ?? 'An image placeholder appears once this block is bound.' });\n }\n const caption = stringField({ text: payload.text }, 'text') ?? '';\n return (_jsx(\"div\", { \"data-widget\": \"block-image-placeholder\", \"data-testid\": config.testId, className: \"w-full\", children: _jsx(\"div\", { \"data-part\": \"image-slot\", className: `flex w-full items-center justify-center rounded-md border border-dashed border-border-strong bg-[repeating-linear-gradient(45deg,var(--surface-2)_0px,var(--surface-2)_6px,var(--surface-3)_6px,var(--surface-3)_12px)] ${RATIO_CLASS[config.ratio]}`, children: _jsx(\"span\", { className: \"px-3 text-center text-caption text-fg-subtle\", children: caption }) }) }));\n}\n//# sourceMappingURL=BlockReport.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Badge, Button, Checkbox, MonoText } from '@adminium/ui';\nimport { Award, RefreshCw } from 'lucide-react';\nimport { BlockCallout, BlockEmpty, fillTemplate } from './BlockShell.js';\nimport { blockBindingSourceOf, formatBlockDate, formatBlockNumber, rowOf, rowsOf, } from './block-lib.js';\nimport { blockApprovalConfigSchema, blockApprovalDemoData, blockDeliveryStepperConfigSchema, blockDeliveryStepperDemoData, blockLoyaltyBannerConfigSchema, blockLoyaltyBannerDemoData, blockRecurringBannerConfigSchema, blockRecurringBannerDemoData, blockSignatureConfigSchema, blockSignatureDemoData, blockTermsCheckboxConfigSchema, blockTermsCheckboxDemoData, } from './blocks-config.js';\nimport { stringField } from './domain-lib.js';\nexport { blockApprovalConfigSchema, blockApprovalDemoData, blockDeliveryStepperConfigSchema, blockDeliveryStepperDemoData, blockLoyaltyBannerConfigSchema, blockLoyaltyBannerDemoData, blockRecurringBannerConfigSchema, blockRecurringBannerDemoData, blockSignatureConfigSchema, blockSignatureDemoData, blockTermsCheckboxConfigSchema, blockTermsCheckboxDemoData, };\n/**\n * TRACK BUILDER — the STATUS/APPROVAL half of the annex §13 document-block\n * vocabulary:\n *\n * `block-loyalty-banner`, `block-recurring-banner`, `block-delivery-stepper`,\n * `block-signature`, `block-terms-checkbox`, `block-approval`.\n *\n * TEMPLATED COPY: the banners render ONE translated string with `{placeholder}`\n * slots, never concatenated fragments — translators keep control of word order,\n * which is what keeps these correct in RTL and in clause-reordering languages.\n *\n * NEVER WRITES: `block-approval`'s Approve/Reject and `block-terms-checkbox`'s\n * toggle emit `mutate` intents; the host commits them (04 §2.1).\n */\n// ── block-loyalty-banner ────────────────────────────────────────────────────\nexport function BlockLoyaltyBannerWidget({ config, data }) {\n const payload = rowOf(data);\n if (payload === null) {\n return _jsx(BlockEmpty, { title: config.emptyTitle ?? 'No loyalty balance', body: config.emptyBody ?? 'Loyalty points appear once this customer is enrolled.' });\n }\n const locale = config.format?.locale;\n const balance = typeof payload.balance === 'number' ? payload.balance : 0;\n const earned = typeof payload.earned === 'number' ? payload.earned : 0;\n const tier = payload.tier ?? '';\n return (_jsx(BlockCallout, { block: \"block-loyalty-banner\", tone: \"accent\", testId: config.testId, icon: _jsx(Award, { className: \"size-4\" }), children: _jsxs(\"div\", { className: \"flex flex-wrap items-baseline justify-between gap-2\", children: [_jsx(\"span\", { className: \"text-fg\", children: fillTemplate(config.balanceLabel ?? '{balance} pts · {tier}', {\n balance: formatBlockNumber(balance, locale),\n tier,\n }) }), _jsx(MonoText, { className: \"text-pos\", children: fillTemplate(config.earnedLabel ?? '+{earned} earned', {\n earned: formatBlockNumber(earned, locale),\n }) })] }) }));\n}\n// ── block-recurring-banner ──────────────────────────────────────────────────\nexport function BlockRecurringBannerWidget({ config, data }) {\n const payload = rowOf(data);\n if (payload === null) {\n return _jsx(BlockEmpty, { title: config.emptyTitle ?? 'Not recurring', body: config.emptyBody ?? 'Recurrence details appear once a schedule is set.' });\n }\n const locale = config.format?.locale;\n const template = config.template ?? 'Recurring — {freq} · Next on {next} · {count} cycles';\n return (_jsx(BlockCallout, { block: \"block-recurring-banner\", tone: \"info\", testId: config.testId, icon: _jsx(RefreshCw, { className: \"size-4\" }), children: fillTemplate(template, {\n freq: payload.freq ?? '',\n next: formatBlockDate(payload.next, locale),\n count: formatBlockNumber(typeof payload.count === 'number' ? payload.count : 0, locale),\n }) }));\n}\n// ── block-delivery-stepper ──────────────────────────────────────────────────\nconst STEP_STATES = new Set(['done', 'current', 'todo']);\nexport function BlockDeliveryStepperWidget({ config, data }) {\n const steps = rowsOf(data).map((row, index) => {\n const raw = stringField(row, config.stateField);\n return {\n id: stringField(row, config.idField) ?? `step-${index}`,\n label: stringField(row, config.labelField) ?? '',\n state: (raw !== undefined && STEP_STATES.has(raw) ? raw : 'todo'),\n };\n });\n if (steps.length === 0) {\n return _jsx(BlockEmpty, { title: config.emptyTitle ?? 'No delivery steps', body: config.emptyBody ?? 'Fulfilment progress will appear here.' });\n }\n return (\n // RTL: the connector rail is a flex row, so the whole stepper mirrors with\n // the writing direction — the steps are a sequence in reading order, not a\n // time axis, so mirroring is correct here (10 §5.5).\n _jsx(\"ol\", { \"data-widget\": \"block-delivery-stepper\", \"data-testid\": config.testId, className: \"flex w-full items-start\", children: steps.map((step, index) => (_jsxs(\"li\", { \"data-part\": \"step\", \"data-state\": step.state, className: \"flex min-w-0 flex-1 flex-col items-center\", children: [_jsxs(\"div\", { className: \"flex w-full items-center\", children: [_jsx(\"span\", { \"aria-hidden\": true, className: `h-0.5 flex-1 ${index === 0 ? 'bg-transparent' : step.state === 'todo' ? 'bg-border' : 'bg-accent'}` }), _jsx(\"span\", { className: `size-2.5 shrink-0 rounded-full ${step.state === 'done'\n ? 'bg-accent'\n : step.state === 'current'\n ? 'bg-accent ring-2 ring-accent-soft'\n : 'bg-border-strong'}` }), _jsx(\"span\", { \"aria-hidden\": true, className: `h-0.5 flex-1 ${index === steps.length - 1 ? 'bg-transparent' : steps[index + 1]?.state === 'todo' ? 'bg-border' : 'bg-accent'}` })] }), _jsx(\"span\", { className: `mt-1.5 truncate px-1 text-center text-micro ${step.state === 'todo' ? 'text-fg-subtle' : 'text-fg'}`, children: step.label })] }, step.id))) }));\n}\n// ── block-signature ─────────────────────────────────────────────────────────\nexport function BlockSignatureWidget({ config, data }) {\n const payload = rowOf(data);\n if (payload === null) {\n return _jsx(BlockEmpty, { title: config.emptyTitle ?? 'No signature', body: config.emptyBody ?? 'A signature line appears once this document requires one.' });\n }\n const locale = config.format?.locale;\n const name = payload.sigName ?? '';\n const title = payload.sigTitle ?? '';\n return (_jsxs(\"div\", { \"data-widget\": \"block-signature\", \"data-testid\": config.testId, className: \"flex w-full flex-wrap items-end gap-6\", children: [_jsxs(\"div\", { className: \"min-w-0 flex-1\", children: [_jsx(\"div\", { className: \"border-b border-border-strong pb-1\", children: config.editable ? (_jsx(\"input\", { defaultValue: name, \"aria-label\": config.namePlaceholder ?? 'Signature name', placeholder: config.namePlaceholder ?? 'Name', className: \"w-full bg-transparent text-section text-fg outline-none placeholder:text-fg-subtle\" })) : (_jsx(\"p\", { className: \"text-section text-fg\", children: name })) }), _jsx(\"p\", { className: \"mt-1 text-caption text-fg-subtle\", children: title })] }), config.showDate && (_jsxs(\"div\", { className: \"min-w-24\", children: [_jsx(\"div\", { className: \"border-b border-border-strong pb-1\", children: _jsx(MonoText, { className: \"text-body-sm text-fg\", children: formatBlockDate(payload.sigDate, locale) }) }), _jsx(\"p\", { className: \"mt-1 text-caption text-fg-subtle\", children: config.dateLabel ?? 'Date' })] }))] }));\n}\n// ── block-terms-checkbox ────────────────────────────────────────────────────\n/**\n * `form-state` (04 §3): the payload IS this control's own state, so it is never\n * \"empty\" — the shared predicate correctly never routes it to the empty card,\n * and an absent payload just means \"unchecked, default label\".\n */\nexport function BlockTermsCheckboxWidget({ config, data, onEvent }) {\n const payload = rowOf(data);\n const label = payload?.label ?? config.defaultLabel ?? 'I accept the terms';\n const checked = payload?.checked === true;\n const source = blockBindingSourceOf(config.binding);\n return (_jsxs(\"div\", { \"data-widget\": \"block-terms-checkbox\", \"data-testid\": config.testId, className: \"flex w-full items-start gap-2.5\", children: [_jsx(Checkbox, { defaultChecked: checked, \"aria-label\": label, onCheckedChange: (next) => {\n if (source === null)\n return; // unbound: nothing to write to\n onEvent({\n type: 'mutate',\n intent: 'update',\n connectionId: source.connectionId,\n table: source.table,\n values: { [config.checkedField]: next === true },\n });\n } }), _jsx(\"span\", { className: \"text-body-sm text-fg\", children: label })] }));\n}\n// ── block-approval ──────────────────────────────────────────────────────────\nconst APPROVAL_TONE = {\n pending: 'warn',\n approved: 'pos',\n rejected: 'danger',\n};\nexport function BlockApprovalWidget({ config, data, onEvent }) {\n const payload = rowOf(data);\n if (payload === null) {\n return _jsx(BlockEmpty, { title: config.emptyTitle ?? 'No approver', body: config.emptyBody ?? 'The approval chain appears once a reviewer is assigned.' });\n }\n const status = payload.status === 'approved' || payload.status === 'rejected' ? payload.status : 'pending';\n const statusLabel = status === 'approved'\n ? (config.approvedLabel ?? 'Approved')\n : status === 'rejected'\n ? (config.rejectedLabel ?? 'Rejected')\n : (config.pendingLabel ?? 'Pending');\n const source = blockBindingSourceOf(config.binding);\n const decide = (next) => {\n if (source === null)\n return;\n onEvent({\n type: 'mutate',\n intent: 'update',\n connectionId: source.connectionId,\n table: source.table,\n values: { [config.statusField]: next },\n });\n };\n return (_jsxs(\"div\", { \"data-widget\": \"block-approval\", \"data-testid\": config.testId, \"data-status\": status, className: \"flex w-full flex-wrap items-center gap-3 rounded-md border border-border p-3\", children: [_jsxs(\"div\", { className: \"min-w-0 flex-1\", children: [_jsx(\"p\", { className: \"truncate text-body-sm font-bold text-fg\", children: payload.name }), _jsx(\"p\", { className: \"truncate text-caption text-fg-subtle\", children: payload.title })] }), _jsx(Badge, { tone: APPROVAL_TONE[status], dot: true, \"data-part\": \"approval-pill\", children: statusLabel }), config.actionable && status === 'pending' && (_jsxs(\"div\", { className: \"flex shrink-0 gap-1.5\", children: [_jsx(Button, { size: \"sm\", variant: \"secondary\", onClick: () => decide('approved'), children: config.approveLabel ?? 'Approve' }), _jsx(Button, { size: \"sm\", variant: \"ghost\", onClick: () => decide('rejected'), children: config.rejectLabel ?? 'Reject' })] }))] }));\n}\n//# sourceMappingURL=BlockStatus.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { IconButton, MonoText } from '@adminium/ui';\nimport { ChevronDown, ChevronUp, Trash2 } from 'lucide-react';\nimport { useState } from 'react';\nimport { BlockEmpty } from './BlockShell.js';\nimport { BlockDiscountCodesWidget, BlockLateFeesWidget, BlockLineItemsWidget, BlockMultiCurrencyWidget, BlockPaymentHistoryWidget, BlockQrPayWidget, BlockTaxBreakdownWidget, BlockTotalsSummaryWidget, } from './BlockFinancial.js';\nimport { BlockContactWidget, BlockHighlightBoxWidget } from './BlockContent.js';\nimport { BlockAttachmentsWidget, BlockBarChartWidget, BlockImagePlaceholderWidget, BlockKpiRowWidget, BlockLineChartWidget, BlockTwoColTableWidget, } from './BlockReport.js';\nimport { BlockApprovalWidget, BlockDeliveryStepperWidget, BlockLoyaltyBannerWidget, BlockRecurringBannerWidget, BlockSignatureWidget, BlockTermsCheckboxWidget, } from './BlockStatus.js';\nimport { blockDataOf, blockOrderOf, docTypeOf, formatBlockDate, moveBlock, } from './block-lib.js';\nimport { blockApprovalConfigSchema, blockAttachmentsConfigSchema, blockBarChartConfigSchema, blockContactConfigSchema, blockDeliveryStepperConfigSchema, blockDiscountCodesConfigSchema, blockHighlightBoxConfigSchema, blockImagePlaceholderConfigSchema, blockKpiRowConfigSchema, blockLateFeesConfigSchema, blockLineChartConfigSchema, blockLineItemsConfigSchema, blockLoyaltyBannerConfigSchema, blockMultiCurrencyConfigSchema, blockPaymentHistoryConfigSchema, blockQrPayConfigSchema, blockRecurringBannerConfigSchema, blockSignatureConfigSchema, blockTaxBreakdownConfigSchema, blockTermsCheckboxConfigSchema, blockTotalsSummaryConfigSchema, blockTwoColTableConfigSchema, documentCanvasConfigSchema, documentCanvasDemoData, } from './blocks-config.js';\nimport { rowOf } from './block-lib.js';\nexport { documentCanvasConfigSchema, documentCanvasDemoData };\n/**\n * Pair one block component with its OWN config schema. Generic in `C`, so the\n * compiler checks that the schema on the right produces the config the component\n * on the left demands — the pairing that a `config={config as never}` cast is\n * exactly what silences.\n */\nfunction blockRenderer(Component, schema) {\n return function Block({ base, data, instanceId, onEvent }) {\n return _jsx(Component, { config: schema.parse(base), data: data, instanceId: instanceId, onEvent: onEvent });\n };\n}\n/** Block registry id → the component that renders it (one lazy chunk, 04 §2.3). */\nconst BLOCK_COMPONENTS = {\n 'block-totals-summary': blockRenderer(BlockTotalsSummaryWidget, blockTotalsSummaryConfigSchema),\n 'block-line-items': blockRenderer(BlockLineItemsWidget, blockLineItemsConfigSchema),\n 'block-kpi-row': blockRenderer(BlockKpiRowWidget, blockKpiRowConfigSchema),\n 'block-bar-chart': blockRenderer(BlockBarChartWidget, blockBarChartConfigSchema),\n 'block-line-chart': blockRenderer(BlockLineChartWidget, blockLineChartConfigSchema),\n 'block-two-col-table': blockRenderer(BlockTwoColTableWidget, blockTwoColTableConfigSchema),\n 'block-tax-breakdown': blockRenderer(BlockTaxBreakdownWidget, blockTaxBreakdownConfigSchema),\n 'block-multi-currency': blockRenderer(BlockMultiCurrencyWidget, blockMultiCurrencyConfigSchema),\n 'block-payment-history': blockRenderer(BlockPaymentHistoryWidget, blockPaymentHistoryConfigSchema),\n 'block-discount-codes': blockRenderer(BlockDiscountCodesWidget, blockDiscountCodesConfigSchema),\n 'block-loyalty-banner': blockRenderer(BlockLoyaltyBannerWidget, blockLoyaltyBannerConfigSchema),\n 'block-recurring-banner': blockRenderer(BlockRecurringBannerWidget, blockRecurringBannerConfigSchema),\n 'block-qr-pay': blockRenderer(BlockQrPayWidget, blockQrPayConfigSchema),\n 'block-delivery-stepper': blockRenderer(BlockDeliveryStepperWidget, blockDeliveryStepperConfigSchema),\n 'block-signature': blockRenderer(BlockSignatureWidget, blockSignatureConfigSchema),\n 'block-terms-checkbox': blockRenderer(BlockTermsCheckboxWidget, blockTermsCheckboxConfigSchema),\n 'block-approval': blockRenderer(BlockApprovalWidget, blockApprovalConfigSchema),\n 'block-attachments': blockRenderer(BlockAttachmentsWidget, blockAttachmentsConfigSchema),\n 'block-late-fees': blockRenderer(BlockLateFeesWidget, blockLateFeesConfigSchema),\n 'block-image-placeholder': blockRenderer(BlockImagePlaceholderWidget, blockImagePlaceholderConfigSchema),\n 'block-contact': blockRenderer(BlockContactWidget, blockContactConfigSchema),\n 'block-highlight-box': blockRenderer(BlockHighlightBoxWidget, blockHighlightBoxConfigSchema),\n};\n/** Accent token → the outline a selected block wears. */\nconst ACCENT_RING = {\n accent: 'ring-accent',\n info: 'ring-info',\n pos: 'ring-pos',\n warn: 'ring-warn',\n danger: 'ring-danger',\n neutral: 'ring-border-strong',\n};\nfunction DocHeader({ doc, config, locale }) {\n const logo = config.brand?.logo;\n return (_jsxs(\"header\", { \"data-part\": \"doc-header\", className: \"mb-6 border-b border-border pb-5\", children: [_jsxs(\"div\", { className: \"flex flex-wrap items-start justify-between gap-4\", children: [_jsxs(\"div\", { className: \"min-w-0\", children: [logo !== undefined && logo !== '' && (_jsx(\"p\", { \"data-part\": \"doc-logo\", className: \"mb-1 text-section font-bold text-accent\", children: logo })), _jsx(\"h2\", { className: \"text-title text-fg\", children: doc.title ?? '' }), doc.number !== undefined && (_jsx(MonoText, { className: \"text-body-sm text-fg-subtle\", children: doc.number }))] }), _jsxs(\"dl\", { className: \"text-body-sm text-end\", children: [doc.issuedAt !== undefined && (_jsxs(\"div\", { className: \"flex justify-between gap-4\", children: [_jsx(\"dt\", { className: \"text-fg-subtle\", children: config.issuedLabel ?? 'Issued' }), _jsx(\"dd\", { children: _jsx(MonoText, { className: \"text-fg\", children: formatBlockDate(doc.issuedAt, locale) }) })] })), doc.dueAt !== undefined && (_jsxs(\"div\", { className: \"flex justify-between gap-4\", children: [_jsx(\"dt\", { className: \"text-fg-subtle\", children: config.dueLabel ?? 'Due' }), _jsx(\"dd\", { children: _jsx(MonoText, { className: \"text-fg\", children: formatBlockDate(doc.dueAt, locale) }) })] }))] })] }), _jsx(\"div\", { className: \"mt-4 flex flex-wrap gap-8\", children: [doc.fromLines, doc.toLines].map((lines, index) => Array.isArray(lines) && lines.length > 0 ? (_jsxs(\"address\", { \"data-part\": index === 0 ? 'doc-from' : 'doc-to', className: \"not-italic\", children: [index === 1 && (_jsx(\"p\", { className: \"mb-0.5 text-micro uppercase text-fg-subtle\", children: config.billedToLabel ?? 'Billed to' })), lines.map((line) => (_jsx(\"p\", { className: \"text-body-sm text-fg-muted\", children: line }, line)))] }, index === 0 ? 'from' : 'to')) : null) })] }));\n}\nexport function DocumentCanvasWidget({ config, data, instanceId, onEvent }) {\n const doc = rowOf(data);\n const docType = docTypeOf(doc?.docType, config.docType);\n const resolved = blockOrderOf(doc, {\n docType,\n ...(config.enabledBlocks === undefined ? {} : { enabledBlocks: config.enabledBlocks }),\n });\n // Local order/selection keep the interaction responsive; the host owns\n // persistence and re-enters the committed order through `data`.\n const [order, setOrder] = useState(null);\n const [selected, setSelected] = useState(config.selectedBlockId);\n const blocks = order ?? resolved;\n if (doc === null) {\n return (_jsx(BlockEmpty, { title: config.emptyTitle ?? 'No document yet', body: config.emptyBody ?? 'Pick a starter template or add a block to begin.' }));\n }\n const locale = config.format?.locale;\n const ring = ACCENT_RING[config.brand?.accent ?? 'accent'];\n // The doc's money/date formatting is a property of the DOCUMENT, so it is the\n // one thing every block inherits; everything else resolves from the block's\n // own schema (see `BlockBaseConfig`).\n const blockBase = config.format === undefined ? {} : { format: config.format };\n const commit = (next, event) => {\n setOrder(next);\n onEvent(event);\n };\n const reorder = (index, delta) => {\n const next = moveBlock(blocks, index, delta);\n commit(next, {\n type: 'mutate',\n intent: 'update',\n table: 'document',\n recordId: instanceId,\n values: { blockOrder: next.map((instance) => instance.block) },\n });\n };\n const remove = (index) => {\n const next = blocks.filter((_, at) => at !== index);\n commit(next, {\n type: 'mutate',\n intent: 'update',\n table: 'document',\n recordId: instanceId,\n values: { blockOrder: next.map((instance) => instance.block) },\n });\n };\n return (_jsxs(\"article\", { \"data-widget\": \"document-canvas\", \"data-testid\": config.testId, \"data-doc-type\": docType, \n /*\n The paper surface. An `email` doc renders in the `adm-always-light`\n scope: email clients we don't control render light, so previewing one on\n a dark theme would be lying about the artifact (@adminium/tokens\n exceptions.css — \"Email previews and QR tiles are ALWAYS light\").\n */\n className: `h-full overflow-auto rounded-lg border border-border bg-surface p-6 ${docType === 'email' ? 'adm-always-light' : ''}`, children: [_jsx(DocHeader, { doc: doc, config: config, locale: locale }), blocks.length === 0 ? (_jsx(BlockEmpty, { title: config.emptyTitle ?? 'No blocks yet', body: config.emptyBody ?? 'Add a block from the palette to build this document.' })) : (_jsx(\"ol\", { \"data-part\": \"block-list\", \"aria-label\": config.blockListLabel ?? 'Document blocks', className: \"space-y-4\", children: blocks.map((instance, index) => {\n const Block = BLOCK_COMPONENTS[instance.block];\n if (Block === undefined)\n return null; // unknown id: never resolve arbitrarily\n const isSelected = selected === instance.id;\n return (_jsxs(\"li\", { \"data-part\": \"block-instance\", \"data-block\": instance.block, \"data-selected\": isSelected, className: \"group relative\", children: [_jsx(\"div\", { className: `rounded-md p-2 transition-shadow ${isSelected ? `ring-2 ${ring}` : 'ring-1 ring-transparent hover:ring-border'}`, children: config.selectable ? (\n /*\n Click-to-select. A real <button> wrapper would nest the\n blocks' own inputs/buttons inside a button (invalid, and it\n swallows their keyboard events), so selection rides a\n focusable region with an explicit key handler instead.\n */\n _jsxs(\"div\", { role: \"button\", tabIndex: 0, \"aria-pressed\": isSelected, \"aria-label\": instance.label ?? instance.block, onClick: () => setSelected(instance.id), onKeyDown: (event) => {\n if (event.key !== 'Enter' && event.key !== ' ')\n return;\n if (event.target !== event.currentTarget)\n return; // let inputs keep their keys\n event.preventDefault();\n setSelected(instance.id);\n }, className: \"outline-none\", children: [instance.label !== undefined && (_jsx(\"h3\", { className: \"mb-2 text-micro uppercase text-fg-subtle\", children: instance.label })), _jsx(Block, { base: blockBase, data: blockDataOf(instance.block, doc), instanceId: `${instanceId}-${instance.id}`, onEvent: onEvent })] })) : (_jsx(Block, { base: blockBase, data: blockDataOf(instance.block, doc), instanceId: `${instanceId}-${instance.id}`, onEvent: onEvent })) }), config.reorderable && (\n /*\n Controls sit on the inline-end edge and are revealed on\n hover/focus — `opacity-0` keeps them focusable, and\n `focus-within` brings them back into view when tabbed to, so\n they are never keyboard-unreachable.\n */\n _jsxs(\"div\", { \"data-part\": \"block-controls\", className: \"absolute end-1 top-1 flex gap-0.5 opacity-0 transition-opacity duration-100 group-focus-within:opacity-100 group-hover:opacity-100\", children: [_jsx(IconButton, { size: \"sm\", \"data-part\": \"block-move-up\", label: config.moveUpLabel ?? 'Move block up', disabled: index === 0, onClick: () => reorder(index, -1), children: _jsx(ChevronUp, { className: \"size-3.5\" }) }), _jsx(IconButton, { size: \"sm\", \"data-part\": \"block-move-down\", label: config.moveDownLabel ?? 'Move block down', disabled: index === blocks.length - 1, onClick: () => reorder(index, 1), children: _jsx(ChevronDown, { className: \"size-3.5\" }) }), _jsx(IconButton, { size: \"sm\", \"data-part\": \"block-remove\", label: config.removeBlockLabel ?? 'Remove block', onClick: () => remove(index), className: \"hover:text-danger\", children: _jsx(Trash2, { className: \"size-3.5\" }) })] }))] }, instance.id));\n }) }))] }));\n}\n//# sourceMappingURL=DocumentCanvas.js.map"],"names":["BlockEmpty","title","body","_jsx","EmptyState","MoneyRow","label","value","tone","emphasis","testId","valueTone","_jsxs","BlockCallout","icon","children","block","skin","iconTone","fillTemplate","template","values","match","key","BlockLineItemsWidget","config","data","onEvent","items","lineItemsOf","source","blockBindingSourceOf","locale","currency","emit","id","field","raw","item","event","MonoText","formatBlockMoney","round2","BlockTotalsSummaryWidget","payload","rowOf","rawItems","rawRates","totals","computeTotals","money","BlockTaxBreakdownWidget","lines","rowsOf","row","index","stringField","numberField","line","_Fragment","formatBlockRate","BlockMultiCurrencyWidget","fx","amount","base","BlockPaymentHistoryWidget","rows","formatBlockDate","maskMethod","StatusPill","BlockDiscountCodesWidget","BlockLateFeesWidget","rate","days","AlertTriangle","QrPlaceholder","modules","seed","random","mulberry32","cells","inFinder","x","y","near","ox","oy","finder","cell","BlockQrPayWidget","total","BlockContactWidget","User","Mail","Phone","Icon","BlockHighlightBoxWidget","deltaTone","delta","invert","formatKpiValue","kpi","formatBlockNumber","BlockKpiRowWidget","kpis","CHART_W","CHART_H","ChartAxis","labels","BlockBarChartWidget","categoricalItemsOf","bars","sparkBars","bar","BlockLineChartWidget","layout","sparkLine","areaPoints","BlockTwoColTableWidget","twoColRowsOf","head","BlockAttachmentsWidget","files","file","Paperclip","formatBlockSize","RATIO_CLASS","BlockImagePlaceholderWidget","caption","BlockLoyaltyBannerWidget","balance","earned","tier","Award","BlockRecurringBannerWidget","RefreshCw","STEP_STATES","BlockDeliveryStepperWidget","steps","step","BlockSignatureWidget","name","BlockTermsCheckboxWidget","checked","Checkbox","next","APPROVAL_TONE","BlockApprovalWidget","status","statusLabel","decide","Badge","Button","blockRenderer","Component","schema","instanceId","BLOCK_COMPONENTS","blockTotalsSummaryConfigSchema","blockLineItemsConfigSchema","blockKpiRowConfigSchema","blockBarChartConfigSchema","blockLineChartConfigSchema","blockTwoColTableConfigSchema","blockTaxBreakdownConfigSchema","blockMultiCurrencyConfigSchema","blockPaymentHistoryConfigSchema","blockDiscountCodesConfigSchema","blockLoyaltyBannerConfigSchema","blockRecurringBannerConfigSchema","blockQrPayConfigSchema","blockDeliveryStepperConfigSchema","blockSignatureConfigSchema","blockTermsCheckboxConfigSchema","blockApprovalConfigSchema","blockAttachmentsConfigSchema","blockLateFeesConfigSchema","blockImagePlaceholderConfigSchema","blockContactConfigSchema","blockHighlightBoxConfigSchema","ACCENT_RING","DocHeader","doc","logo","DocumentCanvasWidget","docType","docTypeOf","resolved","blockOrderOf","order","setOrder","useState","selected","setSelected","blocks","ring","blockBase","commit","reorder","moveBlock","instance","remove","_","at","Block","isSelected","blockDataOf","IconButton","ChevronUp","ChevronDown","Trash2"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{j as t,A as H,C as J,F as K,G as Y,r as j,H as Q,I as E,J as M,E as z,n as P,K as I,L as A,N as V,Q as L,R as X,S as Z,M as $,U as q,V as ee,W as te,X as R}from"./index-PB1II0WV.js";import{Y as me,Z as ue,_ as pe,$ as fe,a0 as xe,a1 as he}from"./index-PB1II0WV.js";function S(e){if(e.time===void 0||!/^\d{1,2}:\d{2}$/.test(e.time))return-1;const[a,o]=e.time.split(":").map(Number);return a*60+o}function _({event:e,locale:a,categoryColorMap:o}){const d=e.tone!==void 0?A(e.tone):V(e.category,o),c=L(a,e),w=e.end!==void 0?L(a,{date:e.date,time:e.end}):"",N=w!==""?`${c} – ${w}`:c;return t.jsxs("li",{className:`flex items-start gap-3 rounded-md border-s-4 bg-surface px-3 py-2 ${X[d]}`,children:[t.jsxs("div",{className:"min-w-0 flex-1",children:[t.jsx("p",{className:"truncate text-body-sm font-semibold text-fg",children:e.title}),e.category!==void 0&&t.jsx(Z,{tone:d,dot:!0,className:"mt-1",children:e.category})]}),N!==""&&t.jsx($,{className:"shrink-0 whitespace-nowrap text-caption tabular-nums text-fg-muted",children:N})]})}function se({events:e,date:a,range:o="day",firstDayOfWeek:d,showCount:c=!0,locale:w,emptyTitle:N,emptyBody:D,testId:T}){const f=J(w),h=a??(e.length>0?e[0]?.date:void 0)??K,v=Y(f,d),i=j.useMemo(()=>o==="week"?Q(h,v).map(n=>n.key):[E(M(h))],[o,h,v]),y=j.useMemo(()=>{const n=new Map;for(const l of i)n.set(l,[]);for(const l of e){const g=E(M(l.date)),x=n.get(g);x!==void 0&&x.push(l)}for(const l of n.values())l.sort((g,x)=>S(g)-S(x));return n},[e,i]),m=i.reduce((n,l)=>n+(y.get(l)?.length??0),0);if(m===0)return t.jsx(z,{compact:!0,preset:"nothing-scheduled",title:N??"Nothing scheduled",body:D??"Events for the selected day will appear here."});const u=`${P(f).number(m)} ${m===1?"event":"events"}`;return t.jsxs("div",{"data-widget":"day-agenda","data-testid":T,className:"flex h-full flex-col",children:[t.jsxs("div",{className:"flex items-baseline justify-between border-b border-border/60 px-3 py-2",children:[t.jsx("h3",{className:"text-body-sm font-bold text-fg",children:I(f,M(i[0]))}),c&&t.jsx("span",{className:"text-caption font-semibold text-fg-subtle",children:u})]}),t.jsx("div",{className:"flex-1 space-y-2 overflow-auto p-3",children:o==="week"?i.map(n=>{const l=y.get(n)??[];return l.length===0?null:t.jsxs("section",{children:[t.jsx("h4",{className:"mb-1 text-caption font-bold uppercase tracking-wide text-fg-subtle",children:I(f,M(n))}),t.jsx("ul",{className:"space-y-1.5",children:l.map((g,x)=>t.jsx(_,{event:g,locale:f},`${n}-${x}`))})]},n)}):t.jsx("ul",{className:"space-y-1.5",children:(y.get(i[0])??[]).map((n,l)=>t.jsx(_,{event:n,locale:f},l))})})]})}function oe({config:e,data:a}){return t.jsx(se,{events:H(a),...e.date===void 0?{}:{date:e.date},range:e.range,...e.firstDayOfWeek===void 0?{}:{firstDayOfWeek:e.firstDayOfWeek},showCount:e.showCount,...e.format?.locale===void 0?{}:{locale:e.format.locale},...e.emptyTitle===void 0?{}:{emptyTitle:e.emptyTitle},...e.emptyBody===void 0?{}:{emptyBody:e.emptyBody}})}function ae(e,a){if(a===void 0||e.length===0)return e;const o=c=>(M(c).getUTCDay()+6)%7+1,d=e.findIndex(c=>o(c)===a);return d<=0?e:[...e.slice(d),...e.slice(0,d)]}function F(e,a){return`${e}|${a}`}function re({data:e,weekStart:a,maxPerCell:o=2,targetCoverage:d,showCoverage:c=!0,showLegend:w=!0,locale:N,emptyTitle:D,emptyBody:T,testId:f}){const h=J(N),v=P(h),{rows:i,shiftTypes:y,assignments:m}=e,u=j.useMemo(()=>ae(e.days,a),[e.days,a]),n=j.useMemo(()=>{const s=new Map;for(const r of y)s.set(r.id,r);return s},[y]),l=j.useMemo(()=>{const s=new Map;for(const r of m){const p=F(r.resourceId,r.date),b=s.get(p);b===void 0?s.set(p,[r]):b.push(r)}return s},[m]),g=j.useMemo(()=>{const s=new Map;for(const r of m){const p=n.get(r.typeId)?.hours??0;s.set(r.resourceId,(s.get(r.resourceId)??0)+p)}return s},[m,n]),x=j.useMemo(()=>{const s=new Map;for(const r of u)s.set(r,0);for(const r of m)s.has(r.date)&&s.set(r.date,(s.get(r.date)??0)+1);return s},[m,u]);if(i.length===0||u.length===0)return t.jsx(z,{compact:!0,preset:"nothing-scheduled",title:D??"No shifts scheduled",body:T??"Assigned shifts will appear on this schedule."});const C=d??Math.max(1,Math.ceil(i.length/2)),O=`minmax(9rem,1.4fr) repeat(${u.length}, minmax(4.5rem,1fr))`;return t.jsxs("div",{"data-widget":"schedule-matrix","data-testid":f,className:"flex h-full flex-col overflow-auto",children:[t.jsxs("div",{role:"table",className:"min-w-full",children:[t.jsxs("div",{role:"row",className:"sticky top-0 z-[1] grid items-end gap-1 border-b border-border bg-surface-2 px-2 py-2 grid-cols-[var(--adm-cols)]",style:{"--adm-cols":O},children:[t.jsx("span",{className:"text-caption font-bold uppercase tracking-wide text-fg-subtle",children:"Resource"}),u.map(s=>{const r=q(h,M(s));return t.jsxs("div",{role:"columnheader",className:"text-center",children:[t.jsx("div",{className:"text-caption font-bold uppercase tracking-wide text-fg-subtle",children:r.weekday}),t.jsx($,{className:"text-caption tabular-nums text-fg-muted",children:r.day})]},s)})]}),i.map(s=>t.jsxs("div",{role:"row",className:"grid items-stretch gap-1 border-b border-border/50 px-2 py-1.5 grid-cols-[var(--adm-cols)] hover:bg-surface-2/50",style:{"--adm-cols":O},children:[t.jsxs("div",{className:"flex min-w-0 items-center gap-2",children:[t.jsx(ee,{name:s.name,size:"sm",locale:h}),t.jsxs("div",{className:"min-w-0",children:[t.jsx("p",{className:"truncate text-caption font-semibold text-fg",children:s.name}),t.jsxs("p",{className:"truncate text-[10px] text-fg-subtle",children:[s.role," · ",t.jsxs($,{className:"tabular-nums",children:[v.number(g.get(s.id)??0),"h"]})]})]})]}),u.map(r=>{const p=l.get(F(s.id,r))??[],b=p.slice(0,o),W=p.length-b.length;return t.jsxs("div",{className:"flex flex-col gap-0.5",role:"cell",children:[b.map((B,U)=>{const k=n.get(B.typeId),G=A(k?.tone,"accent");return t.jsx("span",{title:k===void 0?B.typeId:`${k.label} · ${k.start}–${k.end}`,className:`truncate rounded-e-sm border-s-2 px-1 py-px text-[10px] font-semibold leading-tight ${te[G]}`,children:k?.label??B.typeId},U)}),W>0&&t.jsxs("span",{className:"text-[10px] font-semibold text-fg-subtle",children:["+",v.number(W)]})]},r)})]},s.id)),c&&t.jsxs("div",{role:"row",className:"grid items-center gap-1 border-t border-border bg-surface-2/40 px-2 py-2 grid-cols-[var(--adm-cols)]",style:{"--adm-cols":O},children:[t.jsx("span",{className:"text-caption font-bold uppercase tracking-wide text-fg-subtle",children:"Coverage"}),u.map(s=>{const r=x.get(s)??0,p=Math.min(100,Math.round(r/C*100)),b=r===0?"danger":r>=C?"pos":"warn";return t.jsxs("div",{className:"flex flex-col items-center gap-1",title:`${r}/${C}`,children:[t.jsx("div",{className:"h-1.5 w-full overflow-hidden rounded-full bg-surface-3",children:t.jsx("div",{className:`h-full w-[var(--cov)] rounded-full ${R[b]}`,style:{"--cov":`${p}%`}})}),t.jsx($,{className:"text-[10px] tabular-nums text-fg-subtle",children:v.number(r)})]},s)})]})]}),w&&t.jsx("div",{className:"flex flex-wrap items-center gap-x-4 gap-y-1 border-t border-border px-3 py-2",children:y.map(s=>t.jsxs("span",{className:"flex items-center gap-1.5 text-caption text-fg-muted",children:[t.jsx("span",{className:`size-2 shrink-0 rounded-full ${R[A(s.tone,"accent")]}`,"aria-hidden":"true"}),s.label,t.jsxs($,{className:"tabular-nums text-fg-subtle",children:[s.start,"–",s.end]})]},s.id))})]})}function ne(e){const a=typeof e=="object"&&e!==null?e:{};return{rows:Array.isArray(a.rows)?a.rows:[],total:typeof a.total=="number"?a.total:a.rows?.length??0,days:Array.isArray(a.days)?a.days:[],shiftTypes:Array.isArray(a.shiftTypes)?a.shiftTypes:[],assignments:Array.isArray(a.assignments)?a.assignments:[]}}function de({config:e,data:a}){return t.jsx(re,{data:ne(a),...e.weekStart===void 0?{}:{weekStart:e.weekStart},maxPerCell:e.maxPerCell,...e.targetCoverage===void 0?{}:{targetCoverage:e.targetCoverage},showCoverage:e.showCoverage,showLegend:e.showLegend,...e.format?.locale===void 0?{}:{locale:e.format.locale},...e.emptyTitle===void 0?{}:{emptyTitle:e.emptyTitle},...e.emptyBody===void 0?{}:{emptyBody:e.emptyBody}})}export{me as CalendarLegendFilterWidget,ue as CalendarMonthWidget,pe as CapacityBoardWidget,fe as DateRangePickerWidget,oe as DayAgendaWidget,de as ScheduleMatrixWidget,xe as ScheduledJobsListWidget,he as UpcomingEventsListWidget};
|
|
2
|
+
//# sourceMappingURL=calendar-track-components-RgNtGtZR.js.map
|