@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":"ReviewScreen-COkLQ3T7.js","sources":["../../../../node_modules/.pnpm/@radix-ui+number@1.1.2/node_modules/@radix-ui/number/dist/index.mjs","../../../../node_modules/.pnpm/@radix-ui+react-slider@1.4.3_@types+react-dom@19.2.3_@types+react@19.2.17__@types+react_4e4a8565b010f45b4ea9e88c764e76eb/node_modules/@radix-ui/react-slider/dist/index.mjs","../../../../packages/ui/dist/components/slider/Slider.js","../../src/studio/llm-runs/model.ts","../../src/studio/llm-runs/ApplyDialog.tsx","../../src/studio/llm-runs/valueViews.tsx","../../src/studio/llm-runs/SuggestionRow.tsx","../../src/studio/llm-runs/CategorySection.tsx","../../src/studio/llm-runs/ReviewHeader.tsx","../../src/studio/llm-runs/persistence.ts","../../src/studio/llm-runs/ReviewScreen.tsx"],"sourcesContent":["// src/number.ts\nfunction clamp(value, [min, max]) {\n return Math.min(max, Math.max(min, value));\n}\nexport {\n clamp\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/slider.tsx\nimport * as React from \"react\";\nimport { clamp } from \"@radix-ui/number\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { usePrevious } from \"@radix-ui/react-use-previous\";\nimport { useSize } from \"@radix-ui/react-use-size\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { createCollection } from \"@radix-ui/react-collection\";\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nvar PAGE_KEYS = [\"PageUp\", \"PageDown\"];\nvar ARROW_KEYS = [\"ArrowUp\", \"ArrowDown\", \"ArrowLeft\", \"ArrowRight\"];\nvar BACK_KEYS = {\n \"from-left\": [\"Home\", \"PageDown\", \"ArrowDown\", \"ArrowLeft\"],\n \"from-right\": [\"Home\", \"PageDown\", \"ArrowDown\", \"ArrowRight\"],\n \"from-bottom\": [\"Home\", \"PageDown\", \"ArrowDown\", \"ArrowLeft\"],\n \"from-top\": [\"Home\", \"PageDown\", \"ArrowUp\", \"ArrowLeft\"]\n};\nvar SLIDER_NAME = \"Slider\";\nvar [Collection, useCollection, createCollectionScope] = createCollection(SLIDER_NAME);\nvar [createSliderContext, createSliderScope] = createContextScope(SLIDER_NAME, [\n createCollectionScope\n]);\nvar [SliderProvider, useSliderContext] = createSliderContext(SLIDER_NAME);\nvar Slider = React.forwardRef(\n (props, forwardedRef) => {\n const {\n name,\n min = 0,\n max = 100,\n step = 1,\n orientation = \"horizontal\",\n disabled = false,\n minStepsBetweenThumbs = 0,\n defaultValue = [min],\n value,\n onValueChange = () => {\n },\n onValueCommit = () => {\n },\n inverted = false,\n form,\n ...sliderProps\n } = props;\n const thumbRefs = React.useRef(/* @__PURE__ */ new Set());\n const valueIndexToChangeRef = React.useRef(0);\n const isKeyboardInteractionRef = React.useRef(false);\n const isHorizontal = orientation === \"horizontal\";\n const SliderOrientation = isHorizontal ? SliderHorizontal : SliderVertical;\n const [control, setControl] = React.useState(null);\n const composedRefs = useComposedRefs(forwardedRef, setControl);\n const [values = [], setValues] = useControllableState({\n prop: value,\n defaultProp: defaultValue,\n onChange: (value2) => {\n const thumbs = [...thumbRefs.current];\n thumbs[valueIndexToChangeRef.current]?.focus({\n preventScroll: true,\n focusVisible: isKeyboardInteractionRef.current\n });\n isKeyboardInteractionRef.current = false;\n onValueChange(value2);\n }\n });\n const valuesBeforeSlideStartRef = React.useRef(values);\n const initialValuesRef = React.useRef(values);\n React.useEffect(() => {\n const associatedForm = form ? control?.ownerDocument.getElementById(form) : control?.closest(\"form\");\n if (associatedForm instanceof HTMLFormElement) {\n const reset = () => setValues(initialValuesRef.current);\n associatedForm.addEventListener(\"reset\", reset);\n return () => associatedForm.removeEventListener(\"reset\", reset);\n }\n }, [control, form, setValues]);\n function handleSlideStart(value2) {\n const closestIndex = getClosestValueIndex(values, value2);\n updateValues(value2, closestIndex);\n }\n function handleSlideMove(value2) {\n updateValues(value2, valueIndexToChangeRef.current);\n }\n function handleSlideEnd() {\n const prevValue = valuesBeforeSlideStartRef.current[valueIndexToChangeRef.current];\n const nextValue = values[valueIndexToChangeRef.current];\n const hasChanged = nextValue !== prevValue;\n if (hasChanged) onValueCommit(values);\n }\n function updateValues(value2, atIndex, { commit } = { commit: false }) {\n const decimalCount = getDecimalCount(step);\n const snapToStep = roundValue(Math.round((value2 - min) / step) * step + min, decimalCount);\n const nextValue = clamp(snapToStep, [min, max]);\n setValues((prevValues = []) => {\n const nextValues = getNextSortedValues(prevValues, nextValue, atIndex);\n if (hasMinStepsBetweenValues(nextValues, minStepsBetweenThumbs * step)) {\n valueIndexToChangeRef.current = nextValues.indexOf(nextValue);\n const hasChanged = String(nextValues) !== String(prevValues);\n if (hasChanged && commit) onValueCommit(nextValues);\n return hasChanged ? nextValues : prevValues;\n } else {\n return prevValues;\n }\n });\n }\n return /* @__PURE__ */ jsx(\n SliderProvider,\n {\n scope: props.__scopeSlider,\n name,\n disabled,\n min,\n max,\n valueIndexToChangeRef,\n thumbs: thumbRefs.current,\n values,\n orientation,\n form,\n children: /* @__PURE__ */ jsx(Collection.Provider, { scope: props.__scopeSlider, children: /* @__PURE__ */ jsx(Collection.Slot, { scope: props.__scopeSlider, children: /* @__PURE__ */ jsx(\n SliderOrientation,\n {\n \"aria-disabled\": disabled,\n \"data-disabled\": disabled ? \"\" : void 0,\n ...sliderProps,\n ref: composedRefs,\n onPointerDown: composeEventHandlers(sliderProps.onPointerDown, () => {\n if (!disabled) {\n valuesBeforeSlideStartRef.current = values;\n isKeyboardInteractionRef.current = false;\n }\n }),\n min,\n max,\n inverted,\n onSlideStart: disabled ? void 0 : handleSlideStart,\n onSlideMove: disabled ? void 0 : handleSlideMove,\n onSlideEnd: disabled ? void 0 : handleSlideEnd,\n onHomeKeyDown: () => {\n if (!disabled) {\n isKeyboardInteractionRef.current = true;\n updateValues(min, 0, { commit: true });\n }\n },\n onEndKeyDown: () => {\n if (!disabled) {\n isKeyboardInteractionRef.current = true;\n updateValues(max, values.length - 1, { commit: true });\n }\n },\n onStepKeyDown: ({ event, direction: stepDirection }) => {\n if (!disabled) {\n isKeyboardInteractionRef.current = true;\n const isPageKey = PAGE_KEYS.includes(event.key);\n const isSkipKey = isPageKey || event.shiftKey && ARROW_KEYS.includes(event.key);\n const multiplier = isSkipKey ? 10 : 1;\n const atIndex = valueIndexToChangeRef.current;\n const value2 = values[atIndex];\n const nextValue = getNextStepValue(value2, {\n min,\n step,\n direction: stepDirection,\n multiplier\n });\n updateValues(nextValue, atIndex, { commit: true });\n }\n }\n }\n ) }) })\n }\n );\n }\n);\nSlider.displayName = SLIDER_NAME;\nvar [SliderOrientationProvider, useSliderOrientationContext] = createSliderContext(SLIDER_NAME, {\n startEdge: \"left\",\n endEdge: \"right\",\n size: \"width\",\n direction: 1\n});\nvar SliderHorizontal = React.forwardRef(\n (props, forwardedRef) => {\n const {\n min,\n max,\n dir,\n inverted,\n onSlideStart,\n onSlideMove,\n onSlideEnd,\n onStepKeyDown,\n ...sliderProps\n } = props;\n const [slider, setSlider] = React.useState(null);\n const composedRefs = useComposedRefs(forwardedRef, setSlider);\n const rectRef = React.useRef(void 0);\n const direction = useDirection(dir);\n const isDirectionLTR = direction === \"ltr\";\n const isSlidingFromLeft = isDirectionLTR && !inverted || !isDirectionLTR && inverted;\n function getValueFromPointer(pointerPosition) {\n const rect = rectRef.current || slider.getBoundingClientRect();\n const input = [0, rect.width];\n const output = isSlidingFromLeft ? [min, max] : [max, min];\n const value = linearScale(input, output);\n rectRef.current = rect;\n return value(pointerPosition - rect.left);\n }\n return /* @__PURE__ */ jsx(\n SliderOrientationProvider,\n {\n scope: props.__scopeSlider,\n startEdge: isSlidingFromLeft ? \"left\" : \"right\",\n endEdge: isSlidingFromLeft ? \"right\" : \"left\",\n direction: isSlidingFromLeft ? 1 : -1,\n size: \"width\",\n children: /* @__PURE__ */ jsx(\n SliderImpl,\n {\n dir: direction,\n \"data-orientation\": \"horizontal\",\n ...sliderProps,\n ref: composedRefs,\n style: {\n ...sliderProps.style,\n \"--radix-slider-thumb-transform\": \"translateX(-50%)\"\n },\n onSlideStart: (event) => {\n const value = getValueFromPointer(event.clientX);\n onSlideStart?.(value);\n },\n onSlideMove: (event) => {\n const value = getValueFromPointer(event.clientX);\n onSlideMove?.(value);\n },\n onSlideEnd: () => {\n rectRef.current = void 0;\n onSlideEnd?.();\n },\n onStepKeyDown: (event) => {\n const slideDirection = isSlidingFromLeft ? \"from-left\" : \"from-right\";\n const isBackKey = BACK_KEYS[slideDirection].includes(event.key);\n onStepKeyDown?.({ event, direction: isBackKey ? -1 : 1 });\n }\n }\n )\n }\n );\n }\n);\nvar SliderVertical = React.forwardRef(\n (props, forwardedRef) => {\n const {\n min,\n max,\n inverted,\n onSlideStart,\n onSlideMove,\n onSlideEnd,\n onStepKeyDown,\n ...sliderProps\n } = props;\n const sliderRef = React.useRef(null);\n const ref = useComposedRefs(forwardedRef, sliderRef);\n const rectRef = React.useRef(void 0);\n const isSlidingFromBottom = !inverted;\n function getValueFromPointer(pointerPosition) {\n const rect = rectRef.current || sliderRef.current.getBoundingClientRect();\n const input = [0, rect.height];\n const output = isSlidingFromBottom ? [max, min] : [min, max];\n const value = linearScale(input, output);\n rectRef.current = rect;\n return value(pointerPosition - rect.top);\n }\n return /* @__PURE__ */ jsx(\n SliderOrientationProvider,\n {\n scope: props.__scopeSlider,\n startEdge: isSlidingFromBottom ? \"bottom\" : \"top\",\n endEdge: isSlidingFromBottom ? \"top\" : \"bottom\",\n size: \"height\",\n direction: isSlidingFromBottom ? 1 : -1,\n children: /* @__PURE__ */ jsx(\n SliderImpl,\n {\n \"data-orientation\": \"vertical\",\n ...sliderProps,\n ref,\n style: {\n ...sliderProps.style,\n \"--radix-slider-thumb-transform\": \"translateY(50%)\"\n },\n onSlideStart: (event) => {\n const value = getValueFromPointer(event.clientY);\n onSlideStart?.(value);\n },\n onSlideMove: (event) => {\n const value = getValueFromPointer(event.clientY);\n onSlideMove?.(value);\n },\n onSlideEnd: () => {\n rectRef.current = void 0;\n onSlideEnd?.();\n },\n onStepKeyDown: (event) => {\n const slideDirection = isSlidingFromBottom ? \"from-bottom\" : \"from-top\";\n const isBackKey = BACK_KEYS[slideDirection].includes(event.key);\n onStepKeyDown?.({ event, direction: isBackKey ? -1 : 1 });\n }\n }\n )\n }\n );\n }\n);\nvar SliderImpl = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeSlider,\n onSlideStart,\n onSlideMove,\n onSlideEnd,\n onHomeKeyDown,\n onEndKeyDown,\n onStepKeyDown,\n ...sliderProps\n } = props;\n const context = useSliderContext(SLIDER_NAME, __scopeSlider);\n return /* @__PURE__ */ jsx(\n Primitive.span,\n {\n ...sliderProps,\n ref: forwardedRef,\n onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n if (event.key === \"Home\") {\n onHomeKeyDown(event);\n event.preventDefault();\n } else if (event.key === \"End\") {\n onEndKeyDown(event);\n event.preventDefault();\n } else if (PAGE_KEYS.concat(ARROW_KEYS).includes(event.key)) {\n onStepKeyDown(event);\n event.preventDefault();\n }\n }),\n onPointerDown: composeEventHandlers(props.onPointerDown, (event) => {\n const target = event.target;\n target.setPointerCapture(event.pointerId);\n event.preventDefault();\n if (context.thumbs.has(target)) {\n target.focus({ preventScroll: true, focusVisible: false });\n } else {\n onSlideStart(event);\n }\n }),\n onPointerMove: composeEventHandlers(props.onPointerMove, (event) => {\n const target = event.target;\n if (target.hasPointerCapture(event.pointerId)) onSlideMove(event);\n }),\n onPointerUp: composeEventHandlers(props.onPointerUp, (event) => {\n const target = event.target;\n if (target.hasPointerCapture(event.pointerId)) {\n target.releasePointerCapture(event.pointerId);\n onSlideEnd(event);\n }\n })\n }\n );\n }\n);\nvar TRACK_NAME = \"SliderTrack\";\nvar SliderTrack = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSlider, ...trackProps } = props;\n const context = useSliderContext(TRACK_NAME, __scopeSlider);\n return /* @__PURE__ */ jsx(\n Primitive.span,\n {\n \"data-disabled\": context.disabled ? \"\" : void 0,\n \"data-orientation\": context.orientation,\n ...trackProps,\n ref: forwardedRef\n }\n );\n }\n);\nSliderTrack.displayName = TRACK_NAME;\nvar RANGE_NAME = \"SliderRange\";\nvar SliderRange = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSlider, ...rangeProps } = props;\n const context = useSliderContext(RANGE_NAME, __scopeSlider);\n const orientation = useSliderOrientationContext(RANGE_NAME, __scopeSlider);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const valuesCount = context.values.length;\n const percentages = context.values.map(\n (value) => convertValueToPercentage(value, context.min, context.max)\n );\n const offsetStart = valuesCount > 1 ? Math.min(...percentages) : 0;\n const offsetEnd = 100 - Math.max(...percentages);\n return /* @__PURE__ */ jsx(\n Primitive.span,\n {\n \"data-orientation\": context.orientation,\n \"data-disabled\": context.disabled ? \"\" : void 0,\n ...rangeProps,\n ref: composedRefs,\n style: {\n ...props.style,\n [orientation.startEdge]: offsetStart + \"%\",\n [orientation.endEdge]: offsetEnd + \"%\"\n }\n }\n );\n }\n);\nSliderRange.displayName = RANGE_NAME;\nvar THUMB_NAME = \"SliderThumb\";\nvar [SliderThumbContextProvider, useSliderThumbContext] = createSliderContext(THUMB_NAME);\nvar THUMB_PROVIDER_NAME = \"SliderThumbProvider\";\nfunction SliderThumbProvider(props) {\n const {\n __scopeSlider,\n name,\n children,\n // @ts-expect-error internal render prop\n internal_do_not_use_render\n } = props;\n const context = useSliderContext(THUMB_PROVIDER_NAME, __scopeSlider);\n const getItems = useCollection(__scopeSlider);\n const [thumb, setThumb] = React.useState(null);\n const index = React.useMemo(\n () => thumb ? getItems().findIndex((item) => item.ref.current === thumb) : -1,\n [getItems, thumb]\n );\n const size = useSize(thumb);\n const isFormControl = thumb ? !!context.form || !!thumb.closest(\"form\") : true;\n const value = context.values[index];\n const resolvedName = name ?? (context.name ? context.name + (context.values.length > 1 ? \"[]\" : \"\") : void 0);\n const percent = value === void 0 ? 0 : convertValueToPercentage(value, context.min, context.max);\n React.useEffect(() => {\n if (thumb) {\n context.thumbs.add(thumb);\n return () => {\n context.thumbs.delete(thumb);\n };\n }\n }, [thumb, context.thumbs]);\n const thumbContext = {\n value,\n name: resolvedName,\n form: context.form,\n isFormControl,\n index,\n thumb,\n onThumbChange: setThumb,\n percent,\n size\n };\n return /* @__PURE__ */ jsx(SliderThumbContextProvider, { scope: __scopeSlider, ...thumbContext, children: isFunction(internal_do_not_use_render) ? internal_do_not_use_render(thumbContext) : children });\n}\nSliderThumbProvider.displayName = THUMB_PROVIDER_NAME;\nvar THUMB_TRIGGER_NAME = \"SliderThumbTrigger\";\nvar SliderThumbTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSlider, ...thumbProps } = props;\n const context = useSliderContext(THUMB_TRIGGER_NAME, __scopeSlider);\n const orientation = useSliderOrientationContext(THUMB_TRIGGER_NAME, __scopeSlider);\n const { index, value, percent, size, onThumbChange } = useSliderThumbContext(\n THUMB_TRIGGER_NAME,\n __scopeSlider\n );\n const composedRefs = useComposedRefs(forwardedRef, onThumbChange);\n const label = getLabel(index, context.values.length);\n const orientationSize = size?.[orientation.size];\n const thumbInBoundsOffset = orientationSize ? getThumbInBoundsOffset(orientationSize, percent, orientation.direction) : 0;\n return /* @__PURE__ */ jsx(\n \"span\",\n {\n style: {\n transform: \"var(--radix-slider-thumb-transform)\",\n position: \"absolute\",\n [orientation.startEdge]: `calc(${percent}% + ${thumbInBoundsOffset}px)`\n },\n children: /* @__PURE__ */ jsx(Collection.ItemSlot, { scope: __scopeSlider, children: /* @__PURE__ */ jsx(\n Primitive.span,\n {\n role: \"slider\",\n \"aria-label\": props[\"aria-label\"] || label,\n \"aria-valuemin\": context.min,\n \"aria-valuenow\": value,\n \"aria-valuemax\": context.max,\n \"aria-orientation\": context.orientation,\n \"data-orientation\": context.orientation,\n \"data-disabled\": context.disabled ? \"\" : void 0,\n tabIndex: context.disabled ? void 0 : 0,\n ...thumbProps,\n ref: composedRefs,\n style: value === void 0 ? { display: \"none\" } : props.style,\n onFocus: composeEventHandlers(props.onFocus, () => {\n context.valueIndexToChangeRef.current = index;\n })\n }\n ) })\n }\n );\n }\n);\nSliderThumbTrigger.displayName = THUMB_TRIGGER_NAME;\nvar SliderThumb = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSlider, name, ...thumbProps } = props;\n return /* @__PURE__ */ jsx(\n SliderThumbProvider,\n {\n __scopeSlider,\n name,\n internal_do_not_use_render: ({ index, isFormControl }) => /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(\n SliderThumbTrigger,\n {\n ...thumbProps,\n ref: forwardedRef,\n __scopeSlider\n }\n ),\n isFormControl ? /* @__PURE__ */ jsx(\n SliderBubbleInput,\n {\n __scopeSlider\n },\n index\n ) : null\n ] })\n }\n );\n }\n);\nSliderThumb.displayName = THUMB_NAME;\nvar BUBBLE_INPUT_NAME = \"SliderBubbleInput\";\nvar SliderBubbleInput = React.forwardRef(\n ({ __scopeSlider, ...props }, forwardedRef) => {\n const { value, name, form } = useSliderThumbContext(BUBBLE_INPUT_NAME, __scopeSlider);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(ref, forwardedRef);\n const prevValue = usePrevious(value);\n React.useEffect(() => {\n const input = ref.current;\n if (!input) return;\n const inputProto = window.HTMLInputElement.prototype;\n const descriptor = Object.getOwnPropertyDescriptor(inputProto, \"value\");\n const setValue = descriptor.set;\n if (prevValue !== value && setValue) {\n const event = new Event(\"input\", { bubbles: true });\n setValue.call(input, value);\n input.dispatchEvent(event);\n }\n }, [prevValue, value]);\n return /* @__PURE__ */ jsx(\n Primitive.input,\n {\n style: { display: \"none\" },\n name,\n form,\n ...props,\n ref: composedRefs,\n defaultValue: value\n }\n );\n }\n);\nSliderBubbleInput.displayName = BUBBLE_INPUT_NAME;\nfunction getNextSortedValues(prevValues = [], nextValue, atIndex) {\n const nextValues = [...prevValues];\n nextValues[atIndex] = nextValue;\n return nextValues.sort((a, b) => a - b);\n}\nfunction convertValueToPercentage(value, min, max) {\n const maxSteps = max - min;\n const percentPerStep = 100 / maxSteps;\n const percentage = percentPerStep * (value - min);\n return clamp(percentage, [0, 100]);\n}\nfunction getLabel(index, totalValues) {\n if (totalValues > 2) {\n return `Value ${index + 1} of ${totalValues}`;\n } else if (totalValues === 2) {\n return [\"Minimum\", \"Maximum\"][index];\n } else {\n return void 0;\n }\n}\nfunction getClosestValueIndex(values, nextValue) {\n if (values.length === 1) return 0;\n const distances = values.map((value) => Math.abs(value - nextValue));\n const closestDistance = Math.min(...distances);\n return distances.indexOf(closestDistance);\n}\nfunction getThumbInBoundsOffset(width, left, direction) {\n const halfWidth = width / 2;\n const halfPercent = 50;\n const offset = linearScale([0, halfPercent], [0, halfWidth]);\n return (halfWidth - offset(left) * direction) * direction;\n}\nfunction getStepsBetweenValues(values) {\n return values.slice(0, -1).map((value, index) => values[index + 1] - value);\n}\nfunction hasMinStepsBetweenValues(values, minStepsBetweenValues) {\n if (minStepsBetweenValues > 0) {\n const stepsBetweenValues = getStepsBetweenValues(values);\n const actualMinStepsBetweenValues = Math.min(...stepsBetweenValues);\n return actualMinStepsBetweenValues >= minStepsBetweenValues;\n }\n return true;\n}\nfunction linearScale(input, output) {\n return (value) => {\n if (input[0] === input[1] || output[0] === output[1]) return output[0];\n const ratio = (output[1] - output[0]) / (input[1] - input[0]);\n return output[0] + ratio * (value - input[0]);\n };\n}\nfunction getDecimalCount(value) {\n if (!Number.isFinite(value)) return 0;\n const str = value.toString();\n if (str.includes(\"e\")) {\n const [coefficient, exponent] = str.split(\"e\");\n const decimalPart2 = coefficient.split(\".\")[1] || \"\";\n const exponentNum = Number(exponent);\n return Math.max(0, decimalPart2.length - exponentNum);\n }\n const decimalPart = str.split(\".\")[1];\n return decimalPart ? decimalPart.length : 0;\n}\nfunction roundValue(value, decimalCount) {\n const rounder = Math.pow(10, decimalCount);\n return Math.round(value * rounder) / rounder;\n}\nfunction getNextStepValue(value, {\n min,\n step,\n direction,\n multiplier\n}) {\n const decimalCount = getDecimalCount(step);\n const stepsFromMin = (value - min) / step;\n const nearestSteps = Math.round(stepsFromMin);\n const isAligned = roundValue(nearestSteps * step + min, decimalCount) === roundValue(value, decimalCount);\n let nextSteps;\n if (isAligned) {\n nextSteps = nearestSteps + multiplier * direction;\n } else if (direction > 0) {\n nextSteps = Math.ceil(stepsFromMin);\n } else {\n nextSteps = Math.floor(stepsFromMin);\n }\n return roundValue(nextSteps * step + min, decimalCount);\n}\nfunction isFunction(value) {\n return typeof value === \"function\";\n}\nexport {\n SliderRange as Range,\n Slider as Root,\n Slider,\n SliderRange,\n SliderThumb,\n SliderTrack,\n SliderThumb as Thumb,\n SliderTrack as Track,\n createSliderScope,\n SliderBubbleInput as unstable_BubbleInput,\n SliderBubbleInput as unstable_SliderBubbleInput,\n SliderThumbProvider as unstable_SliderThumbProvider,\n SliderThumbTrigger as unstable_SliderThumbTrigger,\n SliderThumbProvider as unstable_ThumbProvider,\n SliderThumbTrigger as unstable_ThumbTrigger\n};\n//# sourceMappingURL=index.mjs.map\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport * as SliderPrimitive from '@radix-ui/react-slider';\nimport { cn } from '../../lib/cn.js';\n/**\n * Slider — Radix slider with an accent range on a `--surface-3` track\n * (research/design-system.md §3 Tier 2). Arrow keys step (RTL-mirrored),\n * PageUp/Down large-step, Home/End clamp. Pass a two-element `value`/\n * `defaultValue` for a range slider.\n */\nexport function Slider({ className, thumbLabels, value, defaultValue, ...props }) {\n const thumbCount = (value ?? defaultValue ?? [0]).length;\n return (_jsxs(SliderPrimitive.Root, { ...(value === undefined ? {} : { value }), ...(defaultValue === undefined ? {} : { defaultValue }), className: cn('relative flex h-5 w-full touch-none select-none items-center data-[disabled]:pointer-events-none data-[disabled]:opacity-40', className), ...props, children: [_jsx(SliderPrimitive.Track, { className: \"relative h-1.5 grow overflow-hidden rounded-full bg-surface-3\", children: _jsx(SliderPrimitive.Range, { className: \"absolute h-full bg-accent\" }) }), Array.from({ length: thumbCount }, (_, index) => (_jsx(SliderPrimitive.Thumb, { ...(thumbLabels?.[index] === undefined ? {} : { 'aria-label': thumbLabels[index] }), className: cn('block size-4 rounded-full border-2 border-accent bg-surface shadow-card ', 'transition-shadow duration-150 ', 'focus-visible:outline-none focus-visible:ring-[3px] focus-visible:ring-accent-soft') }, index)))] }));\n}\n//# sourceMappingURL=Slider.js.map","/**\n * Review-diff model (06-llm-assist.md §8.2, §10.3) — the pure logic behind the\n * `/studio/llm-runs/:id/review` screen: it maps the server's per-suggestion\n * diff categories into the ten §10.3 display groups, derives the default\n * accept/reject selection from each row's status + confidence, computes the\n * confidence-gated \"Accept all ≥ threshold\" set, and summarizes the accepted\n * writes for the apply-confirmation modal.\n *\n * Kept framework-free (no React, no DOM) so acceptance criterion 12 — \"'Accept\n * all ≥ 0.8' never selects rejects-heuristic or user-locked rows\" — is pinned\n * by a fast unit test rather than a rendered one. The dashboard cannot import\n * `@adminium/llm` (01 §2.3), so the selection semantics of `apply/diff.ts`\n * (`CONFIDENCE_SELECTABLE_STATUSES`, `isBulkAcceptable`) are re-stated here\n * structurally against the mirrored `SuggestionDiff` DTO.\n */\nimport type { SuggestionDiff, SuggestionStatus } from '../ai/api.js';\n\n/** The confidence at/above which conflict + llm-new rows pre-check (§8.2). */\nexport const DEFAULT_ACCEPT_THRESHOLD = 0.8;\n\n// ─── Display groups (§10.3) ──────────────────────────────────────────────────\n\nexport type ReviewGroupId =\n | 'labels'\n | 'groups'\n | 'enums'\n | 'relations'\n | 'keys'\n | 'templates'\n | 'dashboards'\n | 'pii'\n | 'icons'\n | 'microcopy';\n\nexport interface ReviewGroupDef {\n id: ReviewGroupId;\n /** Server diff `category` tokens (§8.1 id prefixes) folded into this group. */\n categories: readonly string[];\n /** Kebab-case lucide icon (resolved via `lucideByName`). */\n icon: string;\n labelKey: string;\n labelDefault: string;\n}\n\n/**\n * The ten review groups in §10.3 order. `dashboard` + `widget` diff rows share\n * one group; `icon` has no dedicated diff category today (the table label\n * bundle carries the icon), so that group renders only if the server ever emits\n * one — grouping is data-driven and skips empty groups.\n */\nexport const REVIEW_GROUPS: readonly ReviewGroupDef[] = [\n {\n id: 'labels',\n categories: ['label'],\n icon: 'tag',\n labelKey: 'studio.llmRuns.review.group.labels',\n labelDefault: 'Labels & translations',\n },\n {\n id: 'groups',\n categories: ['group'],\n icon: 'layout-grid',\n labelKey: 'studio.llmRuns.review.group.navigation',\n labelDefault: 'Navigation & domains',\n },\n {\n id: 'enums',\n categories: ['enum'],\n icon: 'list-checks',\n labelKey: 'studio.llmRuns.review.group.enums',\n labelDefault: 'Enum semantics',\n },\n {\n id: 'relations',\n categories: ['relation'],\n icon: 'git-fork',\n labelKey: 'studio.llmRuns.review.group.relations',\n labelDefault: 'Relations',\n },\n {\n id: 'keys',\n categories: ['key'],\n icon: 'key-round',\n labelKey: 'studio.llmRuns.review.group.keys',\n labelDefault: 'Key columns',\n },\n {\n id: 'templates',\n categories: ['template'],\n icon: 'layout-template',\n labelKey: 'studio.llmRuns.review.group.templates',\n labelDefault: 'Page templates',\n },\n {\n id: 'dashboards',\n categories: ['dashboard', 'widget'],\n icon: 'bar-chart-3',\n labelKey: 'studio.llmRuns.review.group.dashboards',\n labelDefault: 'Dashboards & widgets',\n },\n {\n id: 'pii',\n categories: ['pii'],\n icon: 'shield',\n labelKey: 'studio.llmRuns.review.group.pii',\n labelDefault: 'PII & masking',\n },\n {\n id: 'icons',\n categories: ['icon'],\n icon: 'shapes',\n labelKey: 'studio.llmRuns.review.group.icons',\n labelDefault: 'Icons',\n },\n {\n id: 'microcopy',\n categories: ['copy'],\n icon: 'message-square-text',\n labelKey: 'studio.llmRuns.review.group.microcopy',\n labelDefault: 'Micro-copy',\n },\n];\n\nconst CATEGORY_TO_GROUP: ReadonlyMap<string, ReviewGroupId> = new Map(\n REVIEW_GROUPS.flatMap((group) => group.categories.map((category) => [category, group.id] as const)),\n);\n\nexport function groupIdForCategory(category: string): ReviewGroupId | null {\n return CATEGORY_TO_GROUP.get(category) ?? null;\n}\n\nexport interface ReviewGroup {\n def: ReviewGroupDef;\n rows: SuggestionDiff[];\n}\n\n/**\n * Bucket the diff rows into the §10.3 display groups, preserving the server's\n * stable row order within each group and dropping empty groups. Rows whose\n * category maps to no group are collected under a trailing `labels`-like\n * fallback so nothing is silently lost.\n */\nexport function groupDiffs(diffs: readonly SuggestionDiff[]): ReviewGroup[] {\n const byId = new Map<ReviewGroupId, SuggestionDiff[]>();\n for (const diff of diffs) {\n const groupId = groupIdForCategory(diff.category);\n if (groupId === null) continue;\n const bucket = byId.get(groupId);\n if (bucket === undefined) byId.set(groupId, [diff]);\n else bucket.push(diff);\n }\n const groups: ReviewGroup[] = [];\n for (const def of REVIEW_GROUPS) {\n const rows = byId.get(def.id);\n if (rows !== undefined && rows.length > 0) groups.push({ def, rows });\n }\n return groups;\n}\n\n// ─── Selection semantics (§8.2, acceptance criterion 12) ─────────────────────\n\n/**\n * A row the human can toggle. `heuristic-only` has nothing to accept and\n * `user-locked` is frozen behind a user edit, so neither is checkable.\n * `rejects-heuristic` IS checkable (a human may confirm the rejection) but is\n * never pre-checked and never entered by a bulk control.\n */\nexport function isCheckable(status: SuggestionStatus): boolean {\n return status === 'agree' || status === 'conflict' || status === 'llm-new' || status === 'rejects-heuristic';\n}\n\n/** Locked behind an existing `source: 'user'` override — rendered disabled. */\nexport function isUserLocked(status: SuggestionStatus): boolean {\n return status === 'user-locked';\n}\n\n/**\n * The only statuses a bulk control (confidence slider or per-category\n * select-all) may auto-select. Deliberately excludes `rejects-heuristic` and\n * `user-locked` (acceptance criterion 12) and `agree` (pre-accepted\n * separately, not confidence-gated).\n */\nfunction isBulkEligible(status: SuggestionStatus): boolean {\n return status === 'conflict' || status === 'llm-new';\n}\n\n/** Whether a row is pre-checked at `threshold` (§8.2 \"Review default\"). */\nexport function isDefaultChecked(diff: SuggestionDiff, threshold = DEFAULT_ACCEPT_THRESHOLD): boolean {\n if (diff.status === 'agree') return true; // pre-accepted, collapsed\n if (isBulkEligible(diff.status)) return diff.confidence >= threshold;\n return false; // rejects-heuristic, heuristic-only, user-locked\n}\n\n/** The initial accept set: every `agree` row + confident conflict/llm-new rows. */\nexport function defaultSelection(\n diffs: readonly SuggestionDiff[],\n threshold = DEFAULT_ACCEPT_THRESHOLD,\n): Set<string> {\n const selected = new Set<string>();\n for (const diff of diffs) if (isDefaultChecked(diff, threshold)) selected.add(diff.id);\n return selected;\n}\n\n/**\n * The accept set produced by \"Accept all ≥ threshold\" — identical to the\n * default selection at that threshold (`agree` ∪ confident conflict/llm-new).\n * Never contains `rejects-heuristic` or `user-locked` ids (acceptance\n * criterion 12).\n */\nexport function bulkAcceptSelection(\n diffs: readonly SuggestionDiff[],\n threshold: number,\n): Set<string> {\n return defaultSelection(diffs, threshold);\n}\n\n/** The bulk-selectable ids within a set of rows — for per-category select-all. */\nexport function selectableIds(rows: readonly SuggestionDiff[]): string[] {\n return rows.filter((row) => row.status === 'agree' || isBulkEligible(row.status)).map((row) => row.id);\n}\n\n/** Tri-state of a category/global select-all checkbox over its selectable rows. */\nexport type SelectAllState = 'none' | 'some' | 'all';\n\nexport function selectAllState(rows: readonly SuggestionDiff[], selected: ReadonlySet<string>): SelectAllState {\n const ids = selectableIds(rows);\n if (ids.length === 0) return 'none';\n let checked = 0;\n for (const id of ids) if (selected.has(id)) checked += 1;\n if (checked === 0) return 'none';\n return checked === ids.length ? 'all' : 'some';\n}\n\n// ─── Header counts (§10.3: agree / conflict / new / rejects) ─────────────────\n\nexport interface StatusCounts {\n agree: number;\n conflict: number;\n new: number;\n rejects: number;\n locked: number;\n heuristicOnly: number;\n total: number;\n}\n\nexport function countStatuses(diffs: readonly SuggestionDiff[]): StatusCounts {\n const counts: StatusCounts = {\n agree: 0,\n conflict: 0,\n new: 0,\n rejects: 0,\n locked: 0,\n heuristicOnly: 0,\n total: diffs.length,\n };\n for (const diff of diffs) {\n switch (diff.status) {\n case 'agree':\n counts.agree += 1;\n break;\n case 'conflict':\n counts.conflict += 1;\n break;\n case 'llm-new':\n counts.new += 1;\n break;\n case 'rejects-heuristic':\n counts.rejects += 1;\n break;\n case 'user-locked':\n counts.locked += 1;\n break;\n case 'heuristic-only':\n counts.heuristicOnly += 1;\n break;\n }\n }\n return counts;\n}\n\n// ─── Apply-write summary (§10.3 confirmation modal) ──────────────────────────\n\n/**\n * Counts of the writes an apply would perform, derived on the client from the\n * accepted rows' categories (the server owns the authoritative plan; this is\n * the pre-apply preview text \"Creates 2 dashboard pages, updates 41 labels…\").\n */\nexport interface ApplySummary {\n labels: number;\n keys: number;\n enums: number;\n relations: number;\n templates: number;\n dashboards: number;\n widgets: number;\n navGroups: number;\n pii: number;\n icons: number;\n microcopy: number;\n total: number;\n}\n\nexport function summarizeAccepted(\n diffs: readonly SuggestionDiff[],\n accepted: ReadonlySet<string>,\n): ApplySummary {\n const summary: ApplySummary = {\n labels: 0,\n keys: 0,\n enums: 0,\n relations: 0,\n templates: 0,\n dashboards: 0,\n widgets: 0,\n navGroups: 0,\n pii: 0,\n icons: 0,\n microcopy: 0,\n total: 0,\n };\n for (const diff of diffs) {\n if (!accepted.has(diff.id)) continue;\n summary.total += 1;\n switch (diff.category) {\n case 'label':\n summary.labels += 1;\n break;\n case 'key':\n summary.keys += 1;\n break;\n case 'enum':\n summary.enums += 1;\n break;\n case 'relation':\n summary.relations += 1;\n break;\n case 'template':\n summary.templates += 1;\n break;\n case 'dashboard':\n summary.dashboards += 1;\n break;\n case 'widget':\n summary.widgets += 1;\n break;\n case 'group':\n summary.navGroups += 1;\n break;\n case 'pii':\n summary.pii += 1;\n break;\n case 'icon':\n summary.icons += 1;\n break;\n case 'copy':\n summary.microcopy += 1;\n break;\n }\n }\n return summary;\n}\n\n/** The count shown in the footer's \"Apply N accepted suggestions\" button. */\nexport function acceptedCount(diffs: readonly SuggestionDiff[], accepted: ReadonlySet<string>): number {\n let count = 0;\n for (const diff of diffs) if (accepted.has(diff.id)) count += 1;\n return count;\n}\n\n/**\n * A compact human identifier for a row's target, derived from its §8.1\n * suggestion id (`label:public.orders.total_cents` → `orders.total_cents`),\n * with the `public.` schema qualifier stripped for readability.\n */\nexport function rowIdentifier(diff: SuggestionDiff): string {\n const colon = diff.id.indexOf(':');\n const rest = colon === -1 ? diff.id : diff.id.slice(colon + 1);\n return rest.replace(/(^|[.:>-])public\\./g, '$1');\n}\n","/**\n * Apply-confirmation modal (§10.3 footer): summarizes the writes an apply would\n * perform (\"Creates 2 dashboard pages, updates 41 labels…\") derived from the\n * accepted rows, then commits via `POST /runs/:id/apply` in one transaction.\n * Not the type-to-confirm `ConfirmModal` — applying is additive and reversible\n * (an Undo toast follows, §10.3), so a plain confirm suffices.\n */\nimport { Sparkles } from 'lucide-react';\nimport { Button, Modal, ModalBody, ModalFooter, ModalHeader } from '@adminium/ui';\n\nimport { t } from '../../i18n/t.js';\nimport { REVIEW_GROUPS, type ApplySummary } from './model.js';\n\n/** Group-labelled, non-zero write counts, in §10.3 display order. */\nfunction summaryLines(summary: ApplySummary): { id: string; label: string; count: number }[] {\n const byGroup: Record<string, number> = {\n labels: summary.labels,\n groups: summary.navGroups,\n enums: summary.enums,\n relations: summary.relations,\n keys: summary.keys,\n templates: summary.templates,\n dashboards: summary.dashboards + summary.widgets,\n pii: summary.pii,\n icons: summary.icons,\n microcopy: summary.microcopy,\n };\n const lines: { id: string; label: string; count: number }[] = [];\n for (const group of REVIEW_GROUPS) {\n const count = byGroup[group.id] ?? 0;\n if (count > 0) lines.push({ id: group.id, label: t(group.labelKey, group.labelDefault), count });\n }\n return lines;\n}\n\nexport interface ApplyDialogProps {\n open: boolean;\n summary: ApplySummary;\n applying: boolean;\n onConfirm: () => void;\n onOpenChange: (open: boolean) => void;\n}\n\nexport function ApplyDialog({ open, summary, applying, onConfirm, onOpenChange }: ApplyDialogProps) {\n const lines = summaryLines(summary);\n return (\n <Modal\n size=\"sm\"\n open={open}\n onOpenChange={(next) => {\n if (applying && !next) return;\n onOpenChange(next);\n }}\n >\n <ModalHeader\n tone=\"accent\"\n icon={<Sparkles />}\n title={t('studio.llmRuns.review.apply.title', 'Apply {n} suggestions', { n: summary.total })}\n subtitle={t('studio.llmRuns.review.apply.subtitle', 'These changes are written in one transaction and can be undone.')}\n closeLabel={t('common.dismiss', 'Dismiss')}\n />\n <ModalBody>\n {lines.length === 0 ? (\n <p className=\"text-body-sm text-fg-muted\">\n {t('studio.llmRuns.review.apply.empty', 'Nothing selected to apply.')}\n </p>\n ) : (\n <ul className=\"flex flex-col gap-1.5\">\n {lines.map((line) => (\n <li key={line.id} className=\"flex items-center justify-between gap-3 text-body-sm\">\n <span className=\"text-fg-muted\">{line.label}</span>\n <span className=\"font-semibold tabular-nums text-fg\">{line.count}</span>\n </li>\n ))}\n </ul>\n )}\n </ModalBody>\n <ModalFooter>\n <Button variant=\"ghost\" disabled={applying} onClick={() => onOpenChange(false)}>\n {t('common.cancel', 'Cancel')}\n </Button>\n <Button loading={applying} disabled={summary.total === 0} onClick={onConfirm}>\n {t('studio.llmRuns.review.apply.confirm', 'Apply changes')}\n </Button>\n </ModalFooter>\n </Modal>\n );\n}\n","/**\n * Value renderers for the review-diff rows (§10.3 \"row anatomy\"): each diff\n * category carries a differently-shaped `llmValue`/`heuristicValue` (the\n * projections in `@adminium/llm` `apply/diff.ts`), and these helpers turn one\n * side of a row into a compact, localized React node — a label bundle, an\n * ordered enum with tone chips, an `orders.product_id → products.id` relation,\n * a PII masking pair, a dashboard-widget binding preview, and so on.\n *\n * Every reader narrows defensively from `unknown`: a chattier model or a future\n * schema tweak must degrade to a readable fallback, never crash the reviewer.\n */\nimport type { ReactNode } from 'react';\nimport { Badge, MonoText, Tag, type Tone } from '@adminium/ui';\n\nimport { t } from '../../i18n/t.js';\nimport { lucideByName } from '../../lib/lucide.js';\n\n// ─── Localized text (L10n = { locale: string }) ──────────────────────────────\n\n/** Canonical locale order (en_US first); mirrors `@adminium/llm` `LOCALES`. */\nconst LOCALE_ORDER = ['en_US', 'de_DE', 'fr_FR', 'cs_CZ', 'da_DK', 'zh_CN', 'zh_TW', 'ar_EG'];\n\nexport type L10n = Record<string, string>;\n\nfunction isL10n(value: unknown): value is L10n {\n if (value === null || typeof value !== 'object') return false;\n return Object.values(value as Record<string, unknown>).every((v) => typeof v === 'string');\n}\n\n/** The en_US string (or the first available locale) of a localized object. */\nexport function primaryText(value: unknown): string | null {\n if (!isL10n(value)) return null;\n if (typeof value['en_US'] === 'string') return value['en_US'];\n const first = Object.values(value)[0];\n return typeof first === 'string' ? first : null;\n}\n\nfunction localeEntries(value: L10n): [string, string][] {\n return Object.entries(value).sort(([a], [b]) => {\n const ia = LOCALE_ORDER.indexOf(a);\n const ib = LOCALE_ORDER.indexOf(b);\n return (ia === -1 ? LOCALE_ORDER.length : ia) - (ib === -1 ? LOCALE_ORDER.length : ib);\n });\n}\n\n/** Per-locale rows for the expanded view of a localized field. */\nexport function LocalizedField({ label, value }: { label: string; value: unknown }) {\n if (!isL10n(value)) return null;\n const entries = localeEntries(value);\n if (entries.length === 0) return null;\n return (\n <div className=\"flex flex-col gap-1\">\n <span className=\"text-caption font-semibold uppercase tracking-wide text-fg-subtle\">{label}</span>\n <ul className=\"flex flex-col gap-0.5\">\n {entries.map(([locale, text]) => (\n <li key={locale} className=\"flex items-baseline gap-2\">\n <MonoText className=\"shrink-0 text-caption text-fg-subtle\">{locale}</MonoText>\n <span className=\"text-body-sm text-fg\" dir=\"auto\">\n {text}\n </span>\n </li>\n ))}\n </ul>\n </div>\n );\n}\n\n// ─── Categories whose values carry per-locale text (expander applies) ────────\n\nconst LOCALIZED_CATEGORIES = new Set(['label', 'group', 'copy']);\n\nexport function hasLocalizedDetail(category: string): boolean {\n return LOCALIZED_CATEGORIES.has(category);\n}\n\n// ─── Small building blocks ───────────────────────────────────────────────────\n\nfunction Placeholder({ children }: { children: ReactNode }) {\n return <span className=\"text-body-sm italic text-fg-subtle\">{children}</span>;\n}\n\nconst ENUM_TONE: Record<string, Tone> = {\n pos: 'pos',\n warn: 'warn',\n danger: 'danger',\n accent: 'accent',\n muted: 'neutral',\n};\n\nfunction asRecord(value: unknown): Record<string, unknown> | null {\n return value !== null && typeof value === 'object' && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : null;\n}\n\nfunction asStringArray(value: unknown): string[] {\n return Array.isArray(value) ? value.filter((v): v is string => typeof v === 'string') : [];\n}\n\n// ─── Per-category compact summaries ──────────────────────────────────────────\n\nfunction LabelSummary({ value }: { value: unknown }) {\n const record = asRecord(value);\n const label = primaryText(record?.['label']);\n const icon = typeof record?.['icon'] === 'string' ? (record['icon'] as string) : null;\n if (label === null && icon === null) return <Placeholder>{t('studio.llmRuns.review.value.none', 'No value')}</Placeholder>;\n const IconGlyph = icon !== null ? lucideByName(icon) : null;\n return (\n <span className=\"inline-flex items-center gap-1.5\">\n {IconGlyph !== null ? <IconGlyph aria-hidden className=\"size-3.5 text-fg-muted\" /> : null}\n <span className=\"text-body-sm font-medium text-fg\" dir=\"auto\">\n {label ?? t('studio.llmRuns.review.value.none', 'No value')}\n </span>\n </span>\n );\n}\n\nfunction KeySummary({ value }: { value: unknown }) {\n const record = asRecord(value);\n if (record === null) return <Placeholder>{t('studio.llmRuns.review.value.none', 'No value')}</Placeholder>;\n const displayColumn = typeof record['displayColumn'] === 'string' ? record['displayColumn'] : null;\n const naturalKey = asStringArray(record['naturalKey']);\n return (\n <span className=\"inline-flex flex-wrap items-center gap-1\">\n <span className=\"text-caption text-fg-subtle\">{t('studio.llmRuns.review.value.display', 'Display')}</span>\n {displayColumn !== null ? (\n <Tag mono>{displayColumn}</Tag>\n ) : (\n <Placeholder>{t('studio.llmRuns.review.value.dash', '—')}</Placeholder>\n )}\n <span className=\"ms-1 text-caption text-fg-subtle\">{t('studio.llmRuns.review.value.key', 'Key')}</span>\n {naturalKey.length > 0 ? (\n naturalKey.map((column) => (\n <Tag key={column} mono>\n {column}\n </Tag>\n ))\n ) : (\n <Placeholder>{t('studio.llmRuns.review.value.dash', '—')}</Placeholder>\n )}\n </span>\n );\n}\n\nfunction EnumSummary({ value }: { value: unknown }) {\n const record = asRecord(value);\n if (record === null) return <Placeholder>{t('studio.llmRuns.review.value.none', 'No value')}</Placeholder>;\n const kind = typeof record['kind'] === 'string' ? record['kind'] : null;\n const order = asStringArray(record['order']);\n const tones = asRecord(record['tones']) ?? {};\n const terminal = new Set(asStringArray(record['terminal']));\n const values = order.length > 0 ? order : Object.keys(tones);\n return (\n <span className=\"inline-flex flex-wrap items-center gap-1\">\n {kind !== null ? (\n <Badge tone={kind === 'workflow' ? 'accent' : 'neutral'}>\n {kind === 'workflow'\n ? t('studio.llmRuns.review.value.enumWorkflow', 'Workflow')\n : t('studio.llmRuns.review.value.enumCategory', 'Category')}\n </Badge>\n ) : null}\n {values.map((entry) => {\n const tone = ENUM_TONE[String(tones[entry] ?? 'muted')] ?? 'neutral';\n return (\n <Badge key={entry} tone={tone} dot={terminal.has(entry)}>\n {entry}\n </Badge>\n );\n })}\n </span>\n );\n}\n\n/** Relation identifier chips: `orders.product_id → products.id` (§10.3). */\nexport function RelationChips({ value }: { value: unknown }) {\n const record = asRecord(value);\n if (record === null) return <Placeholder>{t('studio.llmRuns.review.value.none', 'No value')}</Placeholder>;\n const from = `${short(record['fromTable'])}.${asStringArray(record['fromColumns']).join(', ')}`;\n const to = `${short(record['toTable'])}.${asStringArray(record['toColumns']).join(', ')}`;\n const kind = typeof record['kind'] === 'string' ? record['kind'] : null;\n return (\n <span className=\"inline-flex flex-wrap items-center gap-1.5\">\n <Tag mono>{from}</Tag>\n {/* U+2192 is not a bidi-mirrored glyph — flip it under RTL so the relation\n reads from→to after the flexbox visual order reverses (ar_EG). The\n transform needs a non-inline box, hence `inline-block`. */}\n <span aria-hidden className=\"inline-block text-fg-subtle rtl:-scale-x-100\">\n →\n </span>\n <Tag mono>{to}</Tag>\n {kind !== null ? <Badge tone=\"info\">{kind}</Badge> : null}\n </span>\n );\n}\n\nfunction PiiSummary({ value }: { value: unknown }) {\n if (value === null) {\n return <Badge tone=\"neutral\">{t('studio.llmRuns.review.value.notPii', 'Not PII')}</Badge>;\n }\n const record = asRecord(value);\n if (record === null) return <Placeholder>{t('studio.llmRuns.review.value.none', 'No value')}</Placeholder>;\n const kind = typeof record['kind'] === 'string' ? record['kind'] : null;\n const masking = typeof record['masking'] === 'string' ? record['masking'] : null;\n return (\n <span className=\"inline-flex flex-wrap items-center gap-1\">\n {kind !== null ? <Badge tone=\"warn\">{kind}</Badge> : null}\n {masking !== null ? (\n <Tag mono tone=\"warn\">\n {masking}\n </Tag>\n ) : null}\n </span>\n );\n}\n\nfunction TemplateSummary({ value }: { value: unknown }) {\n const record = asRecord(value);\n if (record === null) return <Placeholder>{t('studio.llmRuns.review.value.none', 'No value')}</Placeholder>;\n const template = typeof record['template'] === 'string' ? record['template'] : null;\n const rank = typeof record['rank'] === 'number' ? record['rank'] : null;\n return (\n <span className=\"inline-flex items-center gap-1.5\">\n {template !== null ? <Tag mono tone=\"accent\">{template}</Tag> : null}\n {rank !== null ? (\n <span className=\"text-caption text-fg-subtle\">\n {t('studio.llmRuns.review.value.rank', 'rank {n}', { n: rank })}\n </span>\n ) : null}\n </span>\n );\n}\n\nfunction GroupSummary({ value }: { value: unknown }) {\n const record = asRecord(value);\n if (record === null) return <Placeholder>{t('studio.llmRuns.review.value.none', 'No value')}</Placeholder>;\n const label = primaryText(record['label']);\n const icon = typeof record['icon'] === 'string' ? (record['icon'] as string) : null;\n const tables = asStringArray(record['tables']);\n const IconGlyph = icon !== null ? lucideByName(icon) : null;\n return (\n <span className=\"inline-flex items-center gap-1.5\">\n {IconGlyph !== null ? <IconGlyph aria-hidden className=\"size-3.5 text-fg-muted\" /> : null}\n <span className=\"text-body-sm font-medium text-fg\" dir=\"auto\">\n {label ?? t('studio.llmRuns.review.value.none', 'No value')}\n </span>\n <span className=\"text-caption text-fg-subtle\">\n {t('studio.llmRuns.review.value.tableCount', '{n} tables', { n: tables.length })}\n </span>\n </span>\n );\n}\n\nfunction DashboardSummary({ value }: { value: unknown }) {\n const record = asRecord(value);\n if (record === null) return <Placeholder>{t('studio.llmRuns.review.value.none', 'No value')}</Placeholder>;\n const label = primaryText(record['label']);\n const domain = typeof record['domain'] === 'string' ? record['domain'] : null;\n const widgets = Array.isArray(record['widgets']) ? record['widgets'].length : 0;\n return (\n <span className=\"inline-flex flex-wrap items-center gap-1.5\">\n <span className=\"text-body-sm font-medium text-fg\" dir=\"auto\">\n {label ?? domain ?? t('studio.llmRuns.review.value.none', 'No value')}\n </span>\n <span className=\"text-caption text-fg-subtle\">\n {t('studio.llmRuns.review.value.widgetCount', '{n} widgets', { n: widgets })}\n </span>\n </span>\n );\n}\n\n/** Dashboard-widget preview: name + span + column binding (§10.3). */\nexport function WidgetPreview({ value }: { value: unknown }) {\n const record = asRecord(value);\n if (record === null) return <Placeholder>{t('studio.llmRuns.review.value.none', 'No value')}</Placeholder>;\n const widget = typeof record['widget'] === 'string' ? record['widget'] : null;\n const span = typeof record['span'] === 'number' ? record['span'] : null;\n const table = typeof record['table'] === 'string' ? record['table'] : null;\n const metric = typeof record['metricColumn'] === 'string' ? record['metricColumn'] : null;\n const dimension = typeof record['dimensionColumn'] === 'string' ? record['dimensionColumn'] : null;\n const time = typeof record['timeColumn'] === 'string' ? record['timeColumn'] : null;\n const agg = typeof record['agg'] === 'string' ? record['agg'] : null;\n const binding = [agg, metric ?? dimension ?? time].filter((part) => part !== null).join(' · ');\n return (\n <span className=\"inline-flex flex-wrap items-center gap-1.5\">\n {widget !== null ? <Tag mono tone=\"accent\">{widget}</Tag> : null}\n {span !== null ? (\n <span className=\"text-caption text-fg-subtle\">\n {t('studio.llmRuns.review.value.span', 'span {n}', { n: span })}\n </span>\n ) : null}\n {table !== null ? (\n <MonoText className=\"text-caption text-fg-muted\">\n {short(table)}\n {binding.length > 0 ? ` · ${binding}` : ''}\n </MonoText>\n ) : null}\n </span>\n );\n}\n\nfunction CopySummary({ value }: { value: unknown }) {\n const record = asRecord(value);\n const subtitle = primaryText(record?.['pageSubtitle']);\n if (subtitle === null) return <Placeholder>{t('studio.llmRuns.review.value.none', 'No value')}</Placeholder>;\n return (\n <span className=\"text-body-sm text-fg\" dir=\"auto\">\n {subtitle}\n </span>\n );\n}\n\n/** Strip the leading `schema.` from a qualified table name for compact chips. */\nfunction short(qualified: unknown): string {\n if (typeof qualified !== 'string') return '';\n const dot = qualified.indexOf('.');\n return dot === -1 ? qualified : qualified.slice(dot + 1);\n}\n\n// ─── Dispatch: compact single-line value for a diff side ─────────────────────\n\nexport function DiffValue({ category, value }: { category: string; value: unknown }) {\n if (value === undefined) {\n return <Placeholder>{t('studio.llmRuns.review.value.absent', 'None')}</Placeholder>;\n }\n switch (category) {\n case 'label':\n return <LabelSummary value={value} />;\n case 'key':\n return <KeySummary value={value} />;\n case 'enum':\n return <EnumSummary value={value} />;\n case 'relation':\n return <RelationChips value={value} />;\n case 'pii':\n return <PiiSummary value={value} />;\n case 'template':\n return <TemplateSummary value={value} />;\n case 'group':\n return <GroupSummary value={value} />;\n case 'dashboard':\n return <DashboardSummary value={value} />;\n case 'widget':\n return <WidgetPreview value={value} />;\n case 'copy':\n return <CopySummary value={value} />;\n default:\n return <Placeholder>{t('studio.llmRuns.review.value.none', 'No value')}</Placeholder>;\n }\n}\n\n/** The localized fields to expand per-row, in display order, for a category. */\nexport function localizedFieldsOf(category: string, value: unknown): { key: string; label: string; value: unknown }[] {\n const record = asRecord(value);\n if (record === null) return [];\n if (category === 'label' || category === 'group') {\n const fields: { key: string; label: string; value: unknown }[] = [];\n if (isL10n(record['label']))\n fields.push({ key: 'label', label: t('studio.llmRuns.review.value.label', 'Label'), value: record['label'] });\n if (isL10n(record['description']))\n fields.push({\n key: 'description',\n label: t('studio.llmRuns.review.value.description', 'Description'),\n value: record['description'],\n });\n return fields;\n }\n if (category === 'copy') {\n const fields: { key: string; label: string; value: unknown }[] = [];\n if (isL10n(record['pageSubtitle']))\n fields.push({\n key: 'pageSubtitle',\n label: t('studio.llmRuns.review.value.subtitle', 'Page subtitle'),\n value: record['pageSubtitle'],\n });\n const emptyState = asRecord(record['emptyState']);\n if (emptyState !== null) {\n if (isL10n(emptyState['headline']))\n fields.push({\n key: 'headline',\n label: t('studio.llmRuns.review.value.headline', 'Empty-state headline'),\n value: emptyState['headline'],\n });\n if (isL10n(emptyState['guidance']))\n fields.push({\n key: 'guidance',\n label: t('studio.llmRuns.review.value.guidance', 'Empty-state guidance'),\n value: emptyState['guidance'],\n });\n }\n return fields;\n }\n return [];\n}\n","/**\n * One review-diff row (§10.3 \"row anatomy\"): checkbox · table/column identifier\n * chip · heuristic value → LLM value side-by-side · confidence meter · reason ·\n * status pill. `rejects-heuristic` rows carry a warn-tone callout and are never\n * pre-checked; `user-locked` rows render a disabled \"kept — edited by you\"\n * badge (acceptance criteria 11/12). Localized values (labels, groups,\n * micro-copy) get a per-row \"Show translations\" disclosure.\n */\nimport { useId, useState } from 'react';\nimport { ChevronRight, Lock, TriangleAlert } from 'lucide-react';\nimport { Badge, Checkbox, MonoText, ProgressBar, StatusPill, Tag, cn, type Tone } from '@adminium/ui';\n\nimport { t } from '../../i18n/t.js';\nimport type { SuggestionDiff, SuggestionStatus } from '../ai/api.js';\nimport { isCheckable, isUserLocked, rowIdentifier } from './model.js';\nimport { DiffValue, LocalizedField, hasLocalizedDetail, localizedFieldsOf } from './valueViews.js';\n\ninterface StatusMeta {\n tone: Tone;\n label: string;\n}\n\nfunction statusMeta(status: SuggestionStatus): StatusMeta {\n switch (status) {\n case 'agree':\n return { tone: 'pos', label: t('studio.llmRuns.review.status.agree', 'Agrees') };\n case 'conflict':\n return { tone: 'warn', label: t('studio.llmRuns.review.status.conflict', 'Conflict') };\n case 'llm-new':\n return { tone: 'accent', label: t('studio.llmRuns.review.status.new', 'New') };\n case 'heuristic-only':\n return { tone: 'neutral', label: t('studio.llmRuns.review.status.heuristicOnly', 'Heuristic only') };\n case 'rejects-heuristic':\n return { tone: 'danger', label: t('studio.llmRuns.review.status.rejects', 'Rejects heuristic') };\n case 'user-locked':\n return { tone: 'info', label: t('studio.llmRuns.review.status.locked', 'Locked') };\n }\n}\n\nfunction confidenceTone(confidence: number): Tone {\n if (confidence >= 0.8) return 'pos';\n if (confidence >= 0.5) return 'accent';\n return 'warn';\n}\n\n/**\n * A localized category noun for the checkbox accessible name. Multiple rows can\n * share a target identifier (a table has a label, a key and a micro-copy row,\n * all reading `orders`), so the category disambiguates each checkbox for both\n * assistive tech (acceptance criterion 14) and the tests.\n */\nfunction categoryNoun(category: string): string {\n switch (category) {\n case 'label':\n return t('studio.llmRuns.review.cat.label', 'label');\n case 'key':\n return t('studio.llmRuns.review.cat.key', 'key columns');\n case 'enum':\n return t('studio.llmRuns.review.cat.enum', 'enum');\n case 'relation':\n return t('studio.llmRuns.review.cat.relation', 'relation');\n case 'pii':\n return t('studio.llmRuns.review.cat.pii', 'PII');\n case 'template':\n return t('studio.llmRuns.review.cat.template', 'page template');\n case 'group':\n return t('studio.llmRuns.review.cat.group', 'navigation group');\n case 'dashboard':\n return t('studio.llmRuns.review.cat.dashboard', 'dashboard');\n case 'widget':\n return t('studio.llmRuns.review.cat.widget', 'widget');\n case 'copy':\n return t('studio.llmRuns.review.cat.copy', 'micro-copy');\n default:\n return category;\n }\n}\n\nexport interface SuggestionRowProps {\n diff: SuggestionDiff;\n checked: boolean;\n /** Read-only once the run is applied — the whole row locks. */\n readOnly: boolean;\n onToggle: (id: string, next: boolean) => void;\n}\n\nexport function SuggestionRow({ diff, checked, readOnly, onToggle }: SuggestionRowProps) {\n const [expanded, setExpanded] = useState(false);\n const checkboxId = useId();\n const meta = statusMeta(diff.status);\n const locked = isUserLocked(diff.status);\n const checkable = isCheckable(diff.status) && !readOnly && !locked;\n const rejects = diff.status === 'rejects-heuristic';\n const identifier = rowIdentifier(diff);\n const showConfidence = diff.status !== 'heuristic-only';\n const localizedFields = expanded ? localizedFieldsOf(diff.category, diff.llmValue) : [];\n const canExpand = hasLocalizedDetail(diff.category) && localizedFieldsOf(diff.category, diff.llmValue).length > 0;\n\n return (\n <li\n data-testid=\"suggestion-row\"\n data-status={diff.status}\n data-checked={checked}\n className={cn(\n 'flex flex-col gap-2 rounded-lg border p-3',\n rejects ? 'border-border bg-warn-soft' : 'border-border bg-surface',\n locked && 'opacity-90',\n )}\n >\n <div className=\"flex items-start gap-3\">\n <Checkbox\n id={checkboxId}\n className=\"mt-0.5\"\n checked={checked}\n disabled={!checkable}\n aria-label={t('studio.llmRuns.review.row.acceptAria', 'Accept {noun} suggestion for {target}', {\n noun: categoryNoun(diff.category),\n target: identifier,\n })}\n onCheckedChange={(next) => onToggle(diff.id, next === true)}\n />\n\n <div className=\"flex min-w-0 flex-1 flex-col gap-1.5\">\n <div className=\"flex flex-wrap items-center gap-2\">\n <MonoText className=\"text-caption font-semibold text-fg-muted\">{identifier}</MonoText>\n <StatusPill status={diff.status} tone={meta.tone}>\n {meta.label}\n </StatusPill>\n {locked ? (\n <Badge tone=\"info\">\n <Lock aria-hidden className=\"me-1 size-3\" />\n {t('studio.llmRuns.review.row.keptEdited', 'kept — edited by you')}\n </Badge>\n ) : null}\n </div>\n\n {/* heuristic → llm side-by-side */}\n <div className=\"flex flex-wrap items-center gap-x-2 gap-y-1\">\n <span className=\"min-w-0\" data-testid=\"heuristic-value\">\n <DiffValue category={diff.category} value={diff.heuristicValue} />\n </span>\n <ChevronRight aria-hidden className=\"size-3.5 shrink-0 text-fg-subtle rtl:-scale-x-100\" />\n <span className=\"min-w-0\" data-testid=\"llm-value\">\n <DiffValue category={diff.category} value={diff.llmValue} />\n </span>\n </div>\n\n {rejects ? (\n <p className=\"flex items-start gap-1.5 text-body-sm text-warn\">\n <TriangleAlert aria-hidden className=\"mt-0.5 size-3.5 shrink-0\" />\n <span>{t('studio.llmRuns.review.row.rejectsCallout', 'The AI rejects a heuristic decision — confirm before accepting.')}</span>\n </p>\n ) : null}\n\n {diff.reason !== undefined && diff.reason !== '' ? (\n <p className=\"text-body-sm text-fg-muted\" dir=\"auto\">\n {diff.reason}\n </p>\n ) : null}\n\n {canExpand ? (\n <div>\n <button\n type=\"button\"\n aria-expanded={expanded}\n className=\"inline-flex items-center gap-1 rounded-sm text-caption font-semibold text-accent hover:underline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent\"\n onClick={() => setExpanded((value) => !value)}\n >\n <ChevronRight\n aria-hidden\n className={cn('size-3 transition-transform rtl:-scale-x-100', expanded && 'rotate-90')}\n />\n {expanded\n ? t('studio.llmRuns.review.row.hideTranslations', 'Hide translations')\n : t('studio.llmRuns.review.row.showTranslations', 'Show translations')}\n </button>\n {expanded ? (\n <div className=\"mt-2 flex flex-col gap-2 rounded-md border border-border bg-surface-2 p-2\">\n {localizedFields.map((field) => (\n <LocalizedField key={field.key} label={field.label} value={field.value} />\n ))}\n </div>\n ) : null}\n </div>\n ) : null}\n </div>\n\n {showConfidence ? (\n <div className=\"flex w-24 shrink-0 flex-col items-end gap-1\">\n <span className=\"text-caption font-semibold tabular-nums text-fg-muted\">\n {Math.round(diff.confidence * 100)}%\n </span>\n <ProgressBar\n value={Math.round(diff.confidence * 100)}\n tone={confidenceTone(diff.confidence)}\n size=\"sm\"\n animated={false}\n label={t('studio.llmRuns.review.row.confidenceAria', 'Confidence {pct}%', {\n pct: Math.round(diff.confidence * 100),\n })}\n />\n </div>\n ) : (\n <Tag className=\"shrink-0\">{t('studio.llmRuns.review.row.noAi', 'No AI suggestion')}</Tag>\n )}\n </div>\n </li>\n );\n}\n","/**\n * One collapsible category section of the review screen (§10.3 body): a header\n * with the group icon, localized name, a total-count badge and an accepted\n * count, plus a per-category select-all (tri-state) that never selects\n * `rejects-heuristic` or `user-locked` rows (acceptance criterion 12). The body\n * is the group's `SuggestionRow` list.\n */\nimport { useId, useState } from 'react';\nimport { ChevronRight } from 'lucide-react';\nimport { Badge, Checkbox, CountBadge, cn } from '@adminium/ui';\n\nimport { t } from '../../i18n/t.js';\nimport { lucideByName } from '../../lib/lucide.js';\nimport type { SuggestionDiff } from '../ai/api.js';\nimport { SuggestionRow } from './SuggestionRow.js';\nimport { acceptedCount, selectAllState, type ReviewGroup } from './model.js';\n\nexport interface CategorySectionProps {\n group: ReviewGroup;\n selected: ReadonlySet<string>;\n readOnly: boolean;\n /** Collapsed by default when the whole group agrees (§8.2). */\n defaultCollapsed: boolean;\n onToggleRow: (id: string, next: boolean) => void;\n onSelectAll: (ids: readonly SuggestionDiff[], next: boolean) => void;\n}\n\nexport function CategorySection({\n group,\n selected,\n readOnly,\n defaultCollapsed,\n onToggleRow,\n onSelectAll,\n}: CategorySectionProps) {\n const [open, setOpen] = useState(!defaultCollapsed);\n const bodyId = useId();\n const GroupIcon = lucideByName(group.def.icon);\n const label = t(group.def.labelKey, group.def.labelDefault);\n const accepted = acceptedCount(group.rows, selected);\n const state = selectAllState(group.rows, selected);\n\n return (\n <section\n data-testid=\"category-section\"\n data-group={group.def.id}\n className=\"overflow-hidden rounded-xl border border-border bg-surface\"\n >\n <div className=\"flex items-center gap-2 bg-surface-2 px-3 py-2\">\n {readOnly ? null : (\n <Checkbox\n checked={state === 'all' ? true : state === 'some' ? 'indeterminate' : false}\n aria-label={t('studio.llmRuns.review.section.selectAllAria', 'Select all in {group}', { group: label })}\n onCheckedChange={(next) => onSelectAll(group.rows, next === true)}\n />\n )}\n <button\n type=\"button\"\n aria-expanded={open}\n aria-controls={bodyId}\n className=\"flex min-w-0 flex-1 items-center gap-2 rounded-sm text-start focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent\"\n onClick={() => setOpen((value) => !value)}\n >\n <ChevronRight\n aria-hidden\n className={cn('size-4 shrink-0 text-fg-subtle transition-transform rtl:-scale-x-100', open && 'rotate-90')}\n />\n <GroupIcon aria-hidden className=\"size-4 shrink-0 text-fg-muted\" />\n <span className=\"truncate text-body-sm font-semibold text-fg\">{label}</span>\n <CountBadge>{group.rows.length}</CountBadge>\n {accepted > 0 ? (\n <Badge tone=\"pos\">\n {t('studio.llmRuns.review.section.acceptedCount', '{n} accepted', { n: accepted })}\n </Badge>\n ) : null}\n </button>\n </div>\n\n {open ? (\n <ul id={bodyId} className=\"flex flex-col gap-2 p-3\">\n {group.rows.map((diff) => (\n <SuggestionRow\n key={diff.id}\n diff={diff}\n checked={selected.has(diff.id)}\n readOnly={readOnly}\n onToggle={onToggleRow}\n />\n ))}\n </ul>\n ) : null}\n </section>\n );\n}\n","/**\n * Review-screen header (§10.3): a run summary (path · model-or-\"BYO\" · snapshot\n * · counts agree/conflict/new/rejects) plus the bulk controls — an \"Accept all\n * ≥ threshold\" confidence slider driving a bulk-select action that can never\n * pick `rejects-heuristic` or `user-locked` rows (acceptance criterion 12).\n */\nimport { Badge, Button, MonoText, Slider } from '@adminium/ui';\n\nimport { t } from '../../i18n/t.js';\nimport type { LlmRunDetail } from '../ai/api.js';\nimport type { StatusCounts } from './model.js';\n\nfunction pct(threshold: number): number {\n return Math.round(threshold * 100);\n}\n\nexport interface ReviewHeaderProps {\n run: LlmRunDetail;\n counts: StatusCounts;\n threshold: number;\n readOnly: boolean;\n onThresholdChange: (threshold: number) => void;\n onBulkAccept: () => void;\n onClear: () => void;\n}\n\nexport function ReviewHeader({\n run,\n counts,\n threshold,\n readOnly,\n onThresholdChange,\n onBulkAccept,\n onClear,\n}: ReviewHeaderProps) {\n const isByo = run.mode === 'byo';\n const modelLabel = isByo ? t('studio.llmRuns.review.header.byo', 'BYO') : (run.model ?? t('studio.llmRuns.review.value.dash', '—'));\n\n return (\n <header className=\"flex flex-col gap-4 rounded-xl border border-border bg-surface p-4\">\n <div className=\"flex flex-wrap items-start justify-between gap-3\">\n <div className=\"flex flex-col gap-1\">\n <h1 className=\"text-title-sm font-semibold text-fg\">\n {t('studio.llmRuns.review.header.title', 'Review AI suggestions')}\n </h1>\n <div className=\"flex flex-wrap items-center gap-x-3 gap-y-1 text-caption text-fg-muted\">\n <Badge tone={isByo ? 'info' : 'accent'}>\n {isByo ? t('studio.llmRuns.review.header.pathByo', 'Copy-paste') : t('studio.llmRuns.review.header.pathDirect', 'Direct API')}\n </Badge>\n <span className=\"inline-flex items-center gap-1\">\n {t('studio.llmRuns.review.header.model', 'Model')}\n <MonoText className=\"text-fg\">{modelLabel}</MonoText>\n </span>\n <span className=\"inline-flex items-center gap-1\">\n {t('studio.llmRuns.review.header.snapshot', 'Snapshot')}\n <MonoText className=\"text-fg\">{run.snapshotId}</MonoText>\n </span>\n </div>\n </div>\n\n <ul className=\"flex flex-wrap items-center gap-2\" aria-label={t('studio.llmRuns.review.header.countsAria', 'Suggestion counts')}>\n <li>\n <Badge tone=\"pos\">{t('studio.llmRuns.review.header.agree', '{n} agree', { n: counts.agree })}</Badge>\n </li>\n <li>\n <Badge tone=\"warn\">{t('studio.llmRuns.review.header.conflict', '{n} conflict', { n: counts.conflict })}</Badge>\n </li>\n <li>\n <Badge tone=\"accent\">{t('studio.llmRuns.review.header.new', '{n} new', { n: counts.new })}</Badge>\n </li>\n <li>\n <Badge tone=\"danger\">{t('studio.llmRuns.review.header.rejects', '{n} rejects', { n: counts.rejects })}</Badge>\n </li>\n </ul>\n </div>\n\n {readOnly ? null : (\n <div className=\"flex flex-wrap items-end gap-4 border-t border-border pt-4\">\n <div className=\"flex min-w-[220px] flex-1 flex-col gap-1.5\">\n <label className=\"flex items-center justify-between text-caption font-semibold text-fg-muted\">\n <span>{t('studio.llmRuns.review.bulk.thresholdLabel', 'Confidence threshold')}</span>\n <MonoText className=\"text-fg\">{pct(threshold)}%</MonoText>\n </label>\n <Slider\n value={[pct(threshold)]}\n min={0}\n max={100}\n step={5}\n thumbLabels={[t('studio.llmRuns.review.bulk.thresholdAria', 'Accept-all confidence threshold')]}\n onValueChange={(value) => {\n const next = value[0];\n if (typeof next === 'number') onThresholdChange(next / 100);\n }}\n />\n </div>\n <div className=\"flex items-center gap-2\">\n <Button variant=\"soft\" size=\"sm\" onClick={onBulkAccept}>\n {t('studio.llmRuns.review.bulk.acceptAll', 'Accept all ≥ {pct}%', { pct: pct(threshold) })}\n </Button>\n <Button variant=\"ghost\" size=\"sm\" onClick={onClear}>\n {t('studio.llmRuns.review.bulk.clear', 'Clear selection')}\n </Button>\n </div>\n </div>\n )}\n </header>\n );\n}\n","/**\n * Draft review-state persistence (acceptance criterion 12: \"accept/reject state\n * persists across reload until applied\"). Before a run is applied there is no\n * server column for the in-progress accept set — the server only records the\n * `review` id-lists at apply time (§8.3) — so the reviewer's checkbox state is\n * parked in `localStorage`, keyed by run id, and cleared once the run is\n * applied (its state then lives authoritatively on the run).\n *\n * All access is defensively wrapped: a storage-less or quota-exhausted\n * environment degrades to \"no draft\" rather than throwing into React render.\n */\n\nconst KEY_PREFIX = 'adminium.llmReview.';\n\nfunction storage(): Storage | null {\n try {\n return globalThis.localStorage ?? null;\n } catch {\n return null; // access can throw under strict privacy modes\n }\n}\n\n/** Load the persisted accept-id list for a run, or `null` when none is stored. */\nexport function loadDraftSelection(runId: string): string[] | null {\n const store = storage();\n if (store === null) return null;\n try {\n const raw = store.getItem(KEY_PREFIX + runId);\n if (raw === null) return null;\n const parsed: unknown = JSON.parse(raw);\n if (!Array.isArray(parsed)) return null;\n return parsed.filter((value): value is string => typeof value === 'string');\n } catch {\n return null;\n }\n}\n\n/** Persist the current accept-id set for a run (idempotent, best-effort). */\nexport function saveDraftSelection(runId: string, ids: Iterable<string>): void {\n const store = storage();\n if (store === null) return;\n try {\n store.setItem(KEY_PREFIX + runId, JSON.stringify([...ids]));\n } catch {\n // Quota or serialization failure — a lost draft is preferable to a crash.\n }\n}\n\n/** Drop a run's draft (called after a successful apply). */\nexport function clearDraftSelection(runId: string): void {\n const store = storage();\n if (store === null) return;\n try {\n store.removeItem(KEY_PREFIX + runId);\n } catch {\n // ignore\n }\n}\n","/**\n * `/studio/llm-runs/:id/review` — the review-diff screen (06-llm-assist.md\n * §8.2, §10.3). Loads the run detail + `SuggestionDiff[]`, groups them into the\n * ten §10.3 categories, and drives the accept/reject selection: default checks\n * follow the §8.2 review defaults, the header slider bulk-accepts by confidence\n * (never `rejects-heuristic`/`user-locked` — acceptance criterion 12), and the\n * selection persists across reload until the run is applied (criterion 12).\n * Applying commits `POST /runs/:id/apply` in one transaction and raises an Undo\n * toast via the app-wide undo contract; an applied run renders read-only.\n *\n * Exported as `ReviewScreen({ runId })` — the lazy contract `studio/routes.tsx`\n * loads from `./llm-runs/ReviewScreen.tsx`.\n */\nimport { queryOptions, useMutation, useQuery, useQueryClient } from '@tanstack/react-query';\nimport { useEffect, useMemo, useRef, useState } from 'react';\nimport { Alert, Badge, Button, EmptyState, Spinner } from '@adminium/ui';\n\nimport { t } from '../../i18n/t.js';\nimport { useAppToasts } from '../../pages/toasts.js';\nimport { aiApi, type RunApplyResult, type SuggestionDiff } from '../ai/api.js';\nimport { ApplyDialog } from './ApplyDialog.js';\nimport { CategorySection } from './CategorySection.js';\nimport { ReviewHeader } from './ReviewHeader.js';\nimport {\n DEFAULT_ACCEPT_THRESHOLD,\n acceptedCount,\n bulkAcceptSelection,\n countStatuses,\n defaultSelection,\n groupDiffs,\n selectableIds,\n summarizeAccepted,\n} from './model.js';\nimport { clearDraftSelection, loadDraftSelection, saveDraftSelection } from './persistence.js';\n\nfunction runQuery(runId: string) {\n return queryOptions({\n queryKey: ['llm', 'run', runId] as const,\n queryFn: () => aiApi.getRun(runId),\n });\n}\n\nfunction diffQuery(runId: string) {\n return queryOptions({\n queryKey: ['llm', 'diff', runId] as const,\n queryFn: () => aiApi.getDiff(runId),\n });\n}\n\nconst REVIEWABLE_STATUSES = new Set(['validated', 'applied', 'partially_applied']);\n\n/** The app-wide undo token an apply may return (parked in the undo store, §10.3). */\nfunction undoTokenOf(result: RunApplyResult): string | null {\n const token = result.undoToken;\n return typeof token === 'string' && token.length > 0 ? token : null;\n}\n\nexport interface ReviewScreenProps {\n runId: string;\n}\n\nexport function ReviewScreen({ runId }: ReviewScreenProps) {\n const queryClient = useQueryClient();\n const toasts = useAppToasts();\n\n const runResult = useQuery(runQuery(runId));\n const diffResult = useQuery(diffQuery(runId));\n const run = runResult.data;\n const diffs = diffResult.data;\n\n const isApplied = run !== undefined && (run.status === 'applied' || run.status === 'partially_applied');\n const readOnly = isApplied;\n\n const [selected, setSelected] = useState<Set<string>>(new Set());\n const [threshold, setThreshold] = useState(DEFAULT_ACCEPT_THRESHOLD);\n const [applyOpen, setApplyOpen] = useState(false);\n const initRef = useRef<string | null>(null);\n\n // Initialize selection once, from the server review (applied) or the persisted\n // draft (falling back to the §8.2 defaults) for an unapplied run.\n useEffect(() => {\n if (run === undefined || diffs === undefined) return;\n if (initRef.current === runId) return;\n initRef.current = runId;\n if (run.status === 'applied' || run.status === 'partially_applied') {\n setSelected(new Set(run.review?.accepted ?? []));\n return;\n }\n const existing = new Set(diffs.map((diff) => diff.id));\n const draft = loadDraftSelection(runId);\n setSelected(\n draft !== null ? new Set(draft.filter((id) => existing.has(id))) : defaultSelection(diffs),\n );\n }, [run, diffs, runId]);\n\n // Persist the draft on every change while the run is still reviewable.\n useEffect(() => {\n if (initRef.current !== runId || isApplied) return;\n saveDraftSelection(runId, selected);\n }, [selected, runId, isApplied]);\n\n const groups = useMemo(() => (diffs === undefined ? [] : groupDiffs(diffs)), [diffs]);\n const counts = useMemo(() => (diffs === undefined ? null : countStatuses(diffs)), [diffs]);\n const summary = useMemo(\n () => (diffs === undefined ? null : summarizeAccepted(diffs, selected)),\n [diffs, selected],\n );\n const nAccepted = diffs === undefined ? 0 : acceptedCount(diffs, selected);\n\n const applyMutation = useMutation({\n mutationFn: () => aiApi.applyRun(runId, [...selected]),\n onSuccess: (result) => {\n clearDraftSelection(runId);\n setSelected(new Set(result.review.accepted));\n setApplyOpen(false);\n void queryClient.invalidateQueries({ queryKey: ['llm', 'run', runId] });\n void queryClient.invalidateQueries({ queryKey: ['llm', 'diff', runId] });\n pushUndoToast(result);\n },\n onError: (error: unknown) => {\n toasts.push({\n variant: 'error',\n title: t('studio.llmRuns.review.toast.applyFailed', 'Could not apply suggestions'),\n description: error instanceof Error ? error.message : undefined,\n });\n },\n });\n\n function pushUndoToast(result: RunApplyResult) {\n const token = undoTokenOf(result);\n const title = result.partial\n ? t('studio.llmRuns.review.toast.appliedPartial', 'Applied {n} suggestions (some skipped)', {\n n: result.review.accepted.length,\n })\n : t('studio.llmRuns.review.toast.applied', 'Applied {n} suggestions', {\n n: result.review.accepted.length,\n });\n toasts.push({\n variant: 'success',\n title,\n ...(token === null\n ? {}\n : {\n action: {\n label: t('common.undo', 'Undo'),\n onAction: () => {\n aiApi\n .undoApply(runId, token)\n .then(() => {\n void queryClient.invalidateQueries({ queryKey: ['llm', 'run', runId] });\n void queryClient.invalidateQueries({ queryKey: ['llm', 'diff', runId] });\n toasts.push({ variant: 'info', title: t('undo.done', 'Change undone') });\n })\n .catch((error: unknown) => {\n toasts.push({\n variant: 'error',\n title: t('studio.llmRuns.review.toast.undoFailed', 'Could not undo this change'),\n description: error instanceof Error ? error.message : undefined,\n });\n });\n },\n },\n }),\n });\n }\n\n // ── Selection handlers ──────────────────────────────────────────────────────\n function toggleRow(id: string, next: boolean) {\n setSelected((prev) => {\n const draft = new Set(prev);\n if (next) draft.add(id);\n else draft.delete(id);\n return draft;\n });\n }\n\n function selectAll(rows: readonly SuggestionDiff[], next: boolean) {\n setSelected((prev) => {\n const draft = new Set(prev);\n if (next) for (const id of selectableIds(rows)) draft.add(id);\n else for (const row of rows) draft.delete(row.id);\n return draft;\n });\n }\n\n function bulkAccept() {\n if (diffs === undefined) return;\n setSelected(bulkAcceptSelection(diffs, threshold));\n }\n\n // ── Render states ───────────────────────────────────────────────────────────\n if (runResult.isLoading || diffResult.isLoading) {\n return (\n <div className=\"flex items-center justify-center p-16\">\n <Spinner size=\"md\" />\n </div>\n );\n }\n\n if (runResult.isError || run === undefined) {\n return (\n <div className=\"mx-auto max-w-narrow p-6\">\n <Alert\n tone=\"danger\"\n title={t('studio.llmRuns.review.error.title', 'Could not load this run')}\n body={runResult.error instanceof Error ? runResult.error.message : undefined}\n />\n </div>\n );\n }\n\n if (!REVIEWABLE_STATUSES.has(run.status)) {\n return (\n <div className=\"mx-auto max-w-narrow p-6\">\n <Alert\n tone=\"info\"\n title={t('studio.llmRuns.review.notReady.title', 'This run has no suggestions to review yet')}\n body={t(\n 'studio.llmRuns.review.notReady.body',\n 'A run must be validated before its suggestions can be reviewed. Generate or paste a response first.',\n )}\n />\n </div>\n );\n }\n\n return (\n <div className=\"mx-auto flex max-w-wide flex-col gap-4 p-4 pb-24 md:p-6\">\n {counts !== null ? (\n <ReviewHeader\n run={run}\n counts={counts}\n threshold={threshold}\n readOnly={readOnly}\n onThresholdChange={setThreshold}\n onBulkAccept={bulkAccept}\n onClear={() => setSelected(new Set())}\n />\n ) : null}\n\n {isApplied ? (\n <Alert\n tone=\"pos\"\n title={t('studio.llmRuns.review.applied.title', 'This run has been applied')}\n body={t('studio.llmRuns.review.applied.body', 'The accepted suggestions below are read-only.')}\n />\n ) : null}\n\n {groups.length === 0 ? (\n <EmptyState\n title={t('studio.llmRuns.review.empty.title', 'No suggestions')}\n body={t('studio.llmRuns.review.empty.body', 'This run produced no suggestions to review.')}\n />\n ) : (\n <div className=\"flex flex-col gap-3\">\n {groups.map((group) => (\n <CategorySection\n key={group.def.id}\n group={group}\n selected={selected}\n readOnly={readOnly}\n defaultCollapsed={group.rows.every((row) => row.status === 'agree')}\n onToggleRow={toggleRow}\n onSelectAll={selectAll}\n />\n ))}\n </div>\n )}\n\n {readOnly ? null : (\n <div className=\"fixed inset-x-0 bottom-0 z-10 border-t border-border bg-surface/95 px-4 py-3 backdrop-blur md:px-6\">\n <div className=\"mx-auto flex max-w-wide items-center justify-between gap-3\">\n <span className=\"text-body-sm text-fg-muted\">\n {t('studio.llmRuns.review.footer.count', '{n} suggestions selected', { n: nAccepted })}\n </span>\n <div className=\"flex items-center gap-2\">\n {applyMutation.isError ? (\n <Badge tone=\"danger\">{t('studio.llmRuns.review.footer.failed', 'Apply failed')}</Badge>\n ) : null}\n <Button disabled={nAccepted === 0} onClick={() => setApplyOpen(true)}>\n {t('studio.llmRuns.review.footer.apply', 'Apply {n} accepted suggestions', { n: nAccepted })}\n </Button>\n </div>\n </div>\n </div>\n )}\n\n {summary !== null ? (\n <ApplyDialog\n open={applyOpen}\n summary={summary}\n applying={applyMutation.isPending}\n onConfirm={() => applyMutation.mutate()}\n onOpenChange={setApplyOpen}\n />\n ) : null}\n </div>\n );\n}\n"],"names":["clamp","value","min","max","PAGE_KEYS","ARROW_KEYS","BACK_KEYS","SLIDER_NAME","Collection","useCollection","createCollectionScope","createCollection","createSliderContext","createContextScope","SliderProvider","useSliderContext","Slider","React.forwardRef","props","forwardedRef","name","step","orientation","disabled","minStepsBetweenThumbs","defaultValue","onValueChange","onValueCommit","inverted","form","sliderProps","thumbRefs","React.useRef","valueIndexToChangeRef","isKeyboardInteractionRef","SliderOrientation","SliderHorizontal","SliderVertical","control","setControl","React.useState","composedRefs","useComposedRefs","values","setValues","useControllableState","value2","valuesBeforeSlideStartRef","initialValuesRef","React.useEffect","associatedForm","reset","handleSlideStart","closestIndex","getClosestValueIndex","updateValues","handleSlideMove","handleSlideEnd","prevValue","atIndex","commit","decimalCount","getDecimalCount","snapToStep","roundValue","nextValue","prevValues","nextValues","getNextSortedValues","hasMinStepsBetweenValues","hasChanged","jsx","composeEventHandlers","event","stepDirection","multiplier","getNextStepValue","SliderOrientationProvider","useSliderOrientationContext","dir","onSlideStart","onSlideMove","onSlideEnd","onStepKeyDown","slider","setSlider","rectRef","direction","useDirection","isDirectionLTR","isSlidingFromLeft","getValueFromPointer","pointerPosition","rect","input","linearScale","SliderImpl","isBackKey","sliderRef","ref","isSlidingFromBottom","__scopeSlider","onHomeKeyDown","onEndKeyDown","context","Primitive","target","TRACK_NAME","SliderTrack","trackProps","RANGE_NAME","SliderRange","rangeProps","valuesCount","percentages","convertValueToPercentage","offsetStart","offsetEnd","THUMB_NAME","SliderThumbContextProvider","useSliderThumbContext","THUMB_PROVIDER_NAME","SliderThumbProvider","children","internal_do_not_use_render","getItems","thumb","setThumb","index","React.useMemo","item","size","useSize","isFormControl","resolvedName","percent","thumbContext","isFunction","THUMB_TRIGGER_NAME","SliderThumbTrigger","thumbProps","onThumbChange","label","getLabel","orientationSize","thumbInBoundsOffset","getThumbInBoundsOffset","SliderThumb","jsxs","Fragment","SliderBubbleInput","BUBBLE_INPUT_NAME","usePrevious","inputProto","setValue","a","b","percentage","totalValues","distances","closestDistance","width","left","halfWidth","offset","getStepsBetweenValues","minStepsBetweenValues","stepsBetweenValues","output","ratio","str","coefficient","exponent","decimalPart2","exponentNum","decimalPart","rounder","stepsFromMin","nearestSteps","isAligned","nextSteps","className","thumbLabels","thumbCount","_jsxs","SliderPrimitive.Root","cn","_jsx","SliderPrimitive.Track","SliderPrimitive.Range","_","SliderPrimitive.Thumb","DEFAULT_ACCEPT_THRESHOLD","REVIEW_GROUPS","CATEGORY_TO_GROUP","group","category","groupIdForCategory","groupDiffs","diffs","byId","diff","groupId","bucket","groups","def","rows","isCheckable","status","isUserLocked","isBulkEligible","isDefaultChecked","threshold","defaultSelection","selected","bulkAcceptSelection","selectableIds","row","selectAllState","ids","checked","id","countStatuses","counts","summarizeAccepted","accepted","summary","acceptedCount","count","rowIdentifier","colon","summaryLines","byGroup","lines","t","ApplyDialog","open","applying","onConfirm","onOpenChange","Modal","next","ModalHeader","Sparkles","ModalBody","line","ModalFooter","Button","LOCALE_ORDER","isL10n","v","primaryText","first","localeEntries","ia","ib","LocalizedField","entries","locale","text","MonoText","LOCALIZED_CATEGORIES","hasLocalizedDetail","Placeholder","ENUM_TONE","asRecord","asStringArray","LabelSummary","record","icon","IconGlyph","lucideByName","KeySummary","displayColumn","naturalKey","Tag","column","EnumSummary","kind","order","tones","terminal","Badge","entry","tone","RelationChips","from","short","to","PiiSummary","masking","TemplateSummary","template","rank","GroupSummary","tables","DashboardSummary","domain","widgets","WidgetPreview","widget","span","table","metric","dimension","time","binding","part","CopySummary","subtitle","qualified","dot","DiffValue","localizedFieldsOf","fields","emptyState","statusMeta","confidenceTone","confidence","categoryNoun","SuggestionRow","readOnly","onToggle","expanded","setExpanded","useState","checkboxId","useId","meta","locked","checkable","rejects","identifier","showConfidence","localizedFields","canExpand","Checkbox","StatusPill","Lock","ChevronRight","TriangleAlert","field","ProgressBar","CategorySection","defaultCollapsed","onToggleRow","onSelectAll","setOpen","bodyId","GroupIcon","state","CountBadge","pct","ReviewHeader","run","onThresholdChange","onBulkAccept","onClear","isByo","modelLabel","KEY_PREFIX","storage","loadDraftSelection","runId","store","raw","parsed","saveDraftSelection","clearDraftSelection","runQuery","queryOptions","aiApi","diffQuery","REVIEWABLE_STATUSES","undoTokenOf","result","token","ReviewScreen","queryClient","useQueryClient","toasts","useAppToasts","runResult","useQuery","diffResult","isApplied","setSelected","setThreshold","applyOpen","setApplyOpen","initRef","useRef","useEffect","existing","draft","useMemo","nAccepted","applyMutation","useMutation","pushUndoToast","error","title","toggleRow","prev","selectAll","bulkAccept","Spinner","Alert","EmptyState"],"mappings":"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","x_google_ignoreList":[0,1]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{u as x,j as s}from"./index-PB1II0WV.js";import{s as f,a as g}from"./sparkline-2JUGDrMW.js";const y={accent:"var(--accent)",positive:"var(--pos)",danger:"var(--danger)",muted:"var(--fg-subtle)"};function v({data:r,variant:m="bar",width:t=96,height:e=28,emphasisLast:o=!0,tone:u="accent",label:i,className:d}){const l=x(),n=y[u],p=i!==void 0?{role:"img","aria-label":i}:{"aria-hidden":!0};return s.jsx("svg",{className:d===void 0?"adm-spark":`adm-spark ${d}`,width:t,height:e,viewBox:`0 0 ${t} ${e}`,"data-export-node":"",...p,children:m==="bar"?f(r,t,e).map((a,c)=>s.jsx("rect",{className:"adm-chart-grow",style:{"--adm-grow":l?"1":"0","--adm-stagger":`${c*40}ms`},x:a.x,y:a.y,width:a.width,height:a.height,rx:1.5,fill:n,opacity:o&&!a.isLast?.45:1,"data-last":a.isLast?"":void 0},c)):(()=>{const a=g(r,t,e);return s.jsxs("g",{className:"adm-chart-fade",style:{"--adm-fade":l?"1":"0"},children:[a.points!==""&&s.jsx("polyline",{points:a.points,fill:"none",stroke:n,strokeWidth:1.5,strokeLinejoin:"round"}),o&&a.last!==null&&s.jsx("circle",{cx:a.last.x,cy:a.last.y,r:2.5,fill:n,"data-last":""})]})})()})}export{v as S};
|
|
2
|
+
//# sourceMappingURL=Sparkline-Cvwo368J.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Sparkline-Cvwo368J.js","sources":["../../../../packages/charts/dist/components/Sparkline.js"],"sourcesContent":["import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * `chart-sparkline` primitive (research/widget-registry.md §2): inline 6–12\n * point micro-chart, bar|line variant, last point emphasized. No axes, no\n * tooltip — embeds in KPI cards, table cells and list rows. Decorative by\n * default (aria-hidden) unless a label is provided.\n */\nimport { sparkBars, sparkLine } from '../geometry/sparkline.js';\nimport { useMountAnimation } from '../hooks/useMountAnimation.js';\nconst TONE_VAR = {\n accent: 'var(--accent)',\n positive: 'var(--pos)',\n danger: 'var(--danger)',\n muted: 'var(--fg-subtle)',\n};\nexport function Sparkline({ data, variant = 'bar', width = 96, height = 28, emphasisLast = true, tone = 'accent', label, className, }) {\n const mounted = useMountAnimation();\n const color = TONE_VAR[tone];\n const a11y = label !== undefined\n ? { role: 'img', 'aria-label': label }\n : { 'aria-hidden': true };\n return (_jsx(\"svg\", { className: className === undefined ? 'adm-spark' : `adm-spark ${className}`, width: width, height: height, viewBox: `0 0 ${width} ${height}`, \"data-export-node\": \"\", ...a11y, children: variant === 'bar' ? (sparkBars(data, width, height).map((bar, i) => (_jsx(\"rect\", { className: \"adm-chart-grow\", style: { '--adm-grow': mounted ? '1' : '0', '--adm-stagger': `${i * 40}ms` }, x: bar.x, y: bar.y, width: bar.width, height: bar.height, rx: 1.5, fill: color, opacity: emphasisLast && !bar.isLast ? 0.45 : 1, \"data-last\": bar.isLast ? '' : undefined }, i)))) : ((() => {\n const layout = sparkLine(data, width, height);\n return (_jsxs(\"g\", { className: \"adm-chart-fade\", style: { '--adm-fade': mounted ? '1' : '0' }, children: [layout.points !== '' && (_jsx(\"polyline\", { points: layout.points, fill: \"none\", stroke: color, strokeWidth: 1.5, strokeLinejoin: \"round\" })), emphasisLast && layout.last !== null && (_jsx(\"circle\", { cx: layout.last.x, cy: layout.last.y, r: 2.5, fill: color, \"data-last\": \"\" }))] }));\n })()) }));\n}\n//# sourceMappingURL=Sparkline.js.map"],"names":["TONE_VAR","Sparkline","data","variant","width","height","emphasisLast","tone","label","className","mounted","useMountAnimation","color","a11y","_jsx","sparkBars","bar","i","layout","sparkLine","_jsxs"],"mappings":"kGASA,MAAMA,EAAW,CACb,OAAQ,gBACR,SAAU,aACV,OAAQ,gBACR,MAAO,kBACX,EACO,SAASC,EAAU,CAAE,KAAAC,EAAM,QAAAC,EAAU,MAAO,MAAAC,EAAQ,GAAI,OAAAC,EAAS,GAAI,aAAAC,EAAe,GAAM,KAAAC,EAAO,SAAU,MAAAC,EAAO,UAAAC,GAAc,CACnI,MAAMC,EAAUC,EAAiB,EAC3BC,EAAQZ,EAASO,CAAI,EACrBM,EAAOL,IAAU,OACjB,CAAE,KAAM,MAAO,aAAcA,CAAK,EAClC,CAAE,cAAe,EAAI,EAC3B,OAAQM,EAAAA,IAAK,MAAO,CAAE,UAAWL,IAAc,OAAY,YAAc,aAAaA,CAAS,GAAI,MAAOL,EAAO,OAAQC,EAAQ,QAAS,OAAOD,CAAK,IAAIC,CAAM,GAAI,mBAAoB,GAAI,GAAGQ,EAAM,SAAUV,IAAY,MAASY,EAAUb,EAAME,EAAOC,CAAM,EAAE,IAAI,CAACW,EAAKC,IAAOH,EAAAA,IAAK,OAAQ,CAAE,UAAW,iBAAkB,MAAO,CAAE,aAAcJ,EAAU,IAAM,IAAK,gBAAiB,GAAGO,EAAI,EAAE,IAAI,EAAI,EAAGD,EAAI,EAAG,EAAGA,EAAI,EAAG,MAAOA,EAAI,MAAO,OAAQA,EAAI,OAAQ,GAAI,IAAK,KAAMJ,EAAO,QAASN,GAAgB,CAACU,EAAI,OAAS,IAAO,EAAG,YAAaA,EAAI,OAAS,GAAK,MAAS,EAAIC,CAAC,CAAE,GAAO,IAAM,CACnkB,MAAMC,EAASC,EAAUjB,EAAME,EAAOC,CAAM,EAC5C,OAAQe,OAAM,IAAK,CAAE,UAAW,iBAAkB,MAAO,CAAE,aAAcV,EAAU,IAAM,GAAG,EAAI,SAAU,CAACQ,EAAO,SAAW,IAAOJ,EAAAA,IAAK,WAAY,CAAE,OAAQI,EAAO,OAAQ,KAAM,OAAQ,OAAQN,EAAO,YAAa,IAAK,eAAgB,OAAO,CAAE,EAAIN,GAAgBY,EAAO,OAAS,MAASJ,EAAAA,IAAK,SAAU,CAAE,GAAII,EAAO,KAAK,EAAG,GAAIA,EAAO,KAAK,EAAG,EAAG,IAAK,KAAMN,EAAO,YAAa,GAAI,CAAE,CAAC,CAAE,CACzY,GAAC,CAAI,CAAE,CACf"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{j as t,E as n,M as i,P as a}from"./index-PB1II0WV.js";function r({config:e}){const s=typeof e.missingId=="string"?e.missingId:"unknown";return t.jsx(n,{compact:!0,preset:"no-data",icon:t.jsx(a,{}),tone:"warn",title:"Widget unavailable",body:t.jsxs(t.Fragment,{children:["No widget is registered as ",t.jsx(i,{children:s}),". It may belong to a newer version or an uninstalled extension."]}),"data-widget-missing":s})}export{r as WidgetMissingCard,r as default};
|
|
2
|
+
//# sourceMappingURL=WidgetMissingCard-D0bPJKIs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WidgetMissingCard-D0bPJKIs.js","sources":["../../../../packages/widgets/dist/registry/WidgetMissingCard.js"],"sourcesContent":["import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { EmptyState, MonoText } from '@adminium/ui';\nimport { PackageX } from 'lucide-react';\n/**\n * Fallback card for unknown registry ids in stored page configs (04 §2.2).\n * Page configs written by older/newer versions or uninstalled manifests must\n * never crash a dashboard — this system-family card names the missing id.\n */\nexport function WidgetMissingCard({ config }) {\n const missingId = typeof config.missingId === 'string' ? config.missingId : 'unknown';\n return (_jsx(EmptyState, { compact: true, preset: \"no-data\", icon: _jsx(PackageX, {}), tone: \"warn\", title: \"Widget unavailable\", body: _jsxs(_Fragment, { children: [\"No widget is registered as \", _jsx(MonoText, { children: missingId }), \". It may belong to a newer version or an uninstalled extension.\"] }), \"data-widget-missing\": missingId }));\n}\nexport default WidgetMissingCard;\n//# sourceMappingURL=WidgetMissingCard.js.map"],"names":["WidgetMissingCard","config","missingId","_jsx","EmptyState","PackageX","_jsxs","_Fragment","MonoText"],"mappings":"6DAQO,SAASA,EAAkB,CAAE,OAAAC,GAAU,CAC1C,MAAMC,EAAY,OAAOD,EAAO,WAAc,SAAWA,EAAO,UAAY,UAC5E,OAAQE,EAAAA,IAAKC,EAAY,CAAE,QAAS,GAAM,OAAQ,UAAW,KAAMD,EAAAA,IAAKE,EAAU,CAAA,CAAE,EAAG,KAAM,OAAQ,MAAO,qBAAsB,KAAMC,EAAAA,KAAMC,EAAAA,SAAW,CAAE,SAAU,CAAC,8BAA+BJ,EAAAA,IAAKK,EAAU,CAAE,SAAUN,CAAS,CAAE,EAAG,iEAAiE,CAAC,CAAE,EAAG,sBAAuBA,EAAW,CAC3V"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{w as tn,c as z}from"./format-Lx4cQ8k-.js";const un=Math.abs,c=Math.atan2,G=Math.cos,on=Math.max,en=Math.min,w=Math.sin,K=Math.sqrt,y=1e-12,L=Math.PI,Y=L/2,cn=2*L;function ln(u){return u>1?0:u<-1?L:Math.acos(u)}function sn(u){return u>=1?Y:u<=-1?-Y:Math.asin(u)}function fn(u){return u.innerRadius}function yn(u){return u.outerRadius}function gn(u){return u.startAngle}function hn(u){return u.endAngle}function mn(u){return u&&u.padAngle}function pn(u,x,D,q,v,A,B,a){var E=D-u,s=q-x,n=B-v,h=a-A,r=h*E-n*s;if(!(r*r<y))return r=(n*(x-A)-h*(u-v))/r,[u+r*E,x+r*s]}function X(u,x,D,q,v,A,B){var a=u-D,E=x-q,s=(B?A:-A)/K(a*a+E*E),n=s*E,h=-s*a,r=u+n,t=x+h,l=D+n,f=q+h,C=(r+l)/2,o=(t+f)/2,m=l-r,g=f-t,R=m*m+g*g,M=v-A,T=r*f-l*t,O=(g<0?-1:1)*K(on(0,M*M*R-T*T)),S=(T*g-m*O)/R,j=(-T*m-g*O)/R,P=(T*g+m*O)/R,p=(-T*m+g*O)/R,d=S-C,e=j-o,i=P-C,F=p-o;return d*d+e*e>i*i+F*F&&(S=P,j=p),{cx:S,cy:j,x01:-n,y01:-h,x11:S*(v/M-1),y11:j*(v/M-1)}}function xn(){var u=fn,x=yn,D=z(0),q=null,v=gn,A=hn,B=mn,a=null,E=tn(s);function s(){var n,h,r=+u.apply(this,arguments),t=+x.apply(this,arguments),l=v.apply(this,arguments)-Y,f=A.apply(this,arguments)-Y,C=un(f-l),o=f>l;if(a||(a=n=E()),t<r&&(h=t,t=r,r=h),!(t>y))a.moveTo(0,0);else if(C>cn-y)a.moveTo(t*G(l),t*w(l)),a.arc(0,0,t,l,f,!o),r>y&&(a.moveTo(r*G(f),r*w(f)),a.arc(0,0,r,f,l,o));else{var m=l,g=f,R=l,M=f,T=C,O=C,S=B.apply(this,arguments)/2,j=S>y&&(q?+q.apply(this,arguments):K(r*r+t*t)),P=en(un(t-r)/2,+D.apply(this,arguments)),p=P,d=P,e,i;if(j>y){var F=sn(j/r*w(S)),N=sn(j/t*w(S));(T-=F*2)>y?(F*=o?1:-1,R+=F,M-=F):(T=0,R=M=(l+f)/2),(O-=N*2)>y?(N*=o?1:-1,m+=N,g-=N):(O=0,m=g=(l+f)/2)}var H=t*G(m),J=t*w(m),Q=r*G(M),U=r*w(M);if(P>y){var V=t*G(g),W=t*w(g),Z=r*G(R),$=r*w(R),I;if(C<L)if(I=pn(H,J,Z,$,V,W,Q,U)){var b=H-I[0],k=J-I[1],_=V-I[0],nn=W-I[1],an=1/w(ln((b*_+k*nn)/(K(b*b+k*k)*K(_*_+nn*nn)))/2),rn=K(I[0]*I[0]+I[1]*I[1]);p=en(P,(r-rn)/(an-1)),d=en(P,(t-rn)/(an+1))}else p=d=0}O>y?d>y?(e=X(Z,$,H,J,t,d,o),i=X(V,W,Q,U,t,d,o),a.moveTo(e.cx+e.x01,e.cy+e.y01),d<P?a.arc(e.cx,e.cy,d,c(e.y01,e.x01),c(i.y01,i.x01),!o):(a.arc(e.cx,e.cy,d,c(e.y01,e.x01),c(e.y11,e.x11),!o),a.arc(0,0,t,c(e.cy+e.y11,e.cx+e.x11),c(i.cy+i.y11,i.cx+i.x11),!o),a.arc(i.cx,i.cy,d,c(i.y11,i.x11),c(i.y01,i.x01),!o))):(a.moveTo(H,J),a.arc(0,0,t,m,g,!o)):a.moveTo(H,J),!(r>y)||!(T>y)?a.lineTo(Q,U):p>y?(e=X(Q,U,V,W,r,-p,o),i=X(H,J,Z,$,r,-p,o),a.lineTo(e.cx+e.x01,e.cy+e.y01),p<P?a.arc(e.cx,e.cy,p,c(e.y01,e.x01),c(i.y01,i.x01),!o):(a.arc(e.cx,e.cy,p,c(e.y01,e.x01),c(e.y11,e.x11),!o),a.arc(0,0,r,c(e.cy+e.y11,e.cx+e.x11),c(i.cy+i.y11,i.cx+i.x11),o),a.arc(i.cx,i.cy,p,c(i.y11,i.x11),c(i.y01,i.x01),!o))):a.arc(0,0,r,M,R,o)}if(a.closePath(),n)return a=null,n+""||null}return s.centroid=function(){var n=(+u.apply(this,arguments)+ +x.apply(this,arguments))/2,h=(+v.apply(this,arguments)+ +A.apply(this,arguments))/2-L/2;return[G(h)*n,w(h)*n]},s.innerRadius=function(n){return arguments.length?(u=typeof n=="function"?n:z(+n),s):u},s.outerRadius=function(n){return arguments.length?(x=typeof n=="function"?n:z(+n),s):x},s.cornerRadius=function(n){return arguments.length?(D=typeof n=="function"?n:z(+n),s):D},s.padRadius=function(n){return arguments.length?(q=n==null?null:typeof n=="function"?n:z(+n),s):q},s.startAngle=function(n){return arguments.length?(v=typeof n=="function"?n:z(+n),s):v},s.endAngle=function(n){return arguments.length?(A=typeof n=="function"?n:z(+n),s):A},s.padAngle=function(n){return arguments.length?(B=typeof n=="function"?n:z(+n),s):B},s.context=function(n){return arguments.length?(a=n??null,s):a},s}export{xn as a,cn as t};
|
|
2
|
+
//# sourceMappingURL=arc-CPxb74pf.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arc-CPxb74pf.js","sources":["../../../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/math.js","../../../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/arc.js"],"sourcesContent":["export const abs = Math.abs;\nexport const atan2 = Math.atan2;\nexport const cos = Math.cos;\nexport const max = Math.max;\nexport const min = Math.min;\nexport const sin = Math.sin;\nexport const sqrt = Math.sqrt;\n\nexport const epsilon = 1e-12;\nexport const pi = Math.PI;\nexport const halfPi = pi / 2;\nexport const tau = 2 * pi;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n","import constant from \"./constant.js\";\nimport {abs, acos, asin, atan2, cos, epsilon, halfPi, max, min, pi, sin, sqrt, tau} from \"./math.js\";\nimport {withPath} from \"./path.js\";\n\nfunction arcInnerRadius(d) {\n return d.innerRadius;\n}\n\nfunction arcOuterRadius(d) {\n return d.outerRadius;\n}\n\nfunction arcStartAngle(d) {\n return d.startAngle;\n}\n\nfunction arcEndAngle(d) {\n return d.endAngle;\n}\n\nfunction arcPadAngle(d) {\n return d && d.padAngle; // Note: optional!\n}\n\nfunction intersect(x0, y0, x1, y1, x2, y2, x3, y3) {\n var x10 = x1 - x0, y10 = y1 - y0,\n x32 = x3 - x2, y32 = y3 - y2,\n t = y32 * x10 - x32 * y10;\n if (t * t < epsilon) return;\n t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t;\n return [x0 + t * x10, y0 + t * y10];\n}\n\n// Compute perpendicular offset line of length rc.\n// http://mathworld.wolfram.com/Circle-LineIntersection.html\nfunction cornerTangents(x0, y0, x1, y1, r1, rc, cw) {\n var x01 = x0 - x1,\n y01 = y0 - y1,\n lo = (cw ? rc : -rc) / sqrt(x01 * x01 + y01 * y01),\n ox = lo * y01,\n oy = -lo * x01,\n x11 = x0 + ox,\n y11 = y0 + oy,\n x10 = x1 + ox,\n y10 = y1 + oy,\n x00 = (x11 + x10) / 2,\n y00 = (y11 + y10) / 2,\n dx = x10 - x11,\n dy = y10 - y11,\n d2 = dx * dx + dy * dy,\n r = r1 - rc,\n D = x11 * y10 - x10 * y11,\n d = (dy < 0 ? -1 : 1) * sqrt(max(0, r * r * d2 - D * D)),\n cx0 = (D * dy - dx * d) / d2,\n cy0 = (-D * dx - dy * d) / d2,\n cx1 = (D * dy + dx * d) / d2,\n cy1 = (-D * dx + dy * d) / d2,\n dx0 = cx0 - x00,\n dy0 = cy0 - y00,\n dx1 = cx1 - x00,\n dy1 = cy1 - y00;\n\n // Pick the closer of the two intersection points.\n // TODO Is there a faster way to determine which intersection to use?\n if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n\n return {\n cx: cx0,\n cy: cy0,\n x01: -ox,\n y01: -oy,\n x11: cx0 * (r1 / r - 1),\n y11: cy0 * (r1 / r - 1)\n };\n}\n\nexport default function() {\n var innerRadius = arcInnerRadius,\n outerRadius = arcOuterRadius,\n cornerRadius = constant(0),\n padRadius = null,\n startAngle = arcStartAngle,\n endAngle = arcEndAngle,\n padAngle = arcPadAngle,\n context = null,\n path = withPath(arc);\n\n function arc() {\n var buffer,\n r,\n r0 = +innerRadius.apply(this, arguments),\n r1 = +outerRadius.apply(this, arguments),\n a0 = startAngle.apply(this, arguments) - halfPi,\n a1 = endAngle.apply(this, arguments) - halfPi,\n da = abs(a1 - a0),\n cw = a1 > a0;\n\n if (!context) context = buffer = path();\n\n // Ensure that the outer radius is always larger than the inner radius.\n if (r1 < r0) r = r1, r1 = r0, r0 = r;\n\n // Is it a point?\n if (!(r1 > epsilon)) context.moveTo(0, 0);\n\n // Or is it a circle or annulus?\n else if (da > tau - epsilon) {\n context.moveTo(r1 * cos(a0), r1 * sin(a0));\n context.arc(0, 0, r1, a0, a1, !cw);\n if (r0 > epsilon) {\n context.moveTo(r0 * cos(a1), r0 * sin(a1));\n context.arc(0, 0, r0, a1, a0, cw);\n }\n }\n\n // Or is it a circular or annular sector?\n else {\n var a01 = a0,\n a11 = a1,\n a00 = a0,\n a10 = a1,\n da0 = da,\n da1 = da,\n ap = padAngle.apply(this, arguments) / 2,\n rp = (ap > epsilon) && (padRadius ? +padRadius.apply(this, arguments) : sqrt(r0 * r0 + r1 * r1)),\n rc = min(abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),\n rc0 = rc,\n rc1 = rc,\n t0,\n t1;\n\n // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.\n if (rp > epsilon) {\n var p0 = asin(rp / r0 * sin(ap)),\n p1 = asin(rp / r1 * sin(ap));\n if ((da0 -= p0 * 2) > epsilon) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;\n else da0 = 0, a00 = a10 = (a0 + a1) / 2;\n if ((da1 -= p1 * 2) > epsilon) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;\n else da1 = 0, a01 = a11 = (a0 + a1) / 2;\n }\n\n var x01 = r1 * cos(a01),\n y01 = r1 * sin(a01),\n x10 = r0 * cos(a10),\n y10 = r0 * sin(a10);\n\n // Apply rounded corners?\n if (rc > epsilon) {\n var x11 = r1 * cos(a11),\n y11 = r1 * sin(a11),\n x00 = r0 * cos(a00),\n y00 = r0 * sin(a00),\n oc;\n\n // Restrict the corner radius according to the sector angle. If this\n // intersection fails, it’s probably because the arc is too small, so\n // disable the corner radius entirely.\n if (da < pi) {\n if (oc = intersect(x01, y01, x00, y00, x11, y11, x10, y10)) {\n var ax = x01 - oc[0],\n ay = y01 - oc[1],\n bx = x11 - oc[0],\n by = y11 - oc[1],\n kc = 1 / sin(acos((ax * bx + ay * by) / (sqrt(ax * ax + ay * ay) * sqrt(bx * bx + by * by))) / 2),\n lc = sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n rc0 = min(rc, (r0 - lc) / (kc - 1));\n rc1 = min(rc, (r1 - lc) / (kc + 1));\n } else {\n rc0 = rc1 = 0;\n }\n }\n }\n\n // Is the sector collapsed to a line?\n if (!(da1 > epsilon)) context.moveTo(x01, y01);\n\n // Does the sector’s outer ring have rounded corners?\n else if (rc1 > epsilon) {\n t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);\n t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);\n\n context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r1, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);\n context.arc(t1.cx, t1.cy, rc1, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the outer ring just a circular arc?\n else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);\n\n // Is there no inner ring, and it’s a circular sector?\n // Or perhaps it’s an annular sector collapsed due to padding?\n if (!(r0 > epsilon) || !(da0 > epsilon)) context.lineTo(x10, y10);\n\n // Does the sector’s inner ring (or point) have rounded corners?\n else if (rc0 > epsilon) {\n t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);\n t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);\n\n context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r0, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw);\n context.arc(t1.cx, t1.cy, rc0, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the inner ring just a circular arc?\n else context.arc(0, 0, r0, a10, a00, cw);\n }\n\n context.closePath();\n\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n arc.centroid = function() {\n var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,\n a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi / 2;\n return [cos(a) * r, sin(a) * r];\n };\n\n arc.innerRadius = function(_) {\n return arguments.length ? (innerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : innerRadius;\n };\n\n arc.outerRadius = function(_) {\n return arguments.length ? (outerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : outerRadius;\n };\n\n arc.cornerRadius = function(_) {\n return arguments.length ? (cornerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : cornerRadius;\n };\n\n arc.padRadius = function(_) {\n return arguments.length ? (padRadius = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), arc) : padRadius;\n };\n\n arc.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : startAngle;\n };\n\n arc.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : endAngle;\n };\n\n arc.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : padAngle;\n };\n\n arc.context = function(_) {\n return arguments.length ? ((context = _ == null ? null : _), arc) : context;\n };\n\n return arc;\n}\n"],"names":["abs","atan2","cos","max","min","sin","sqrt","epsilon","pi","halfPi","tau","acos","x","asin","arcInnerRadius","d","arcOuterRadius","arcStartAngle","arcEndAngle","arcPadAngle","intersect","x0","y0","x1","y1","x2","y2","x3","y3","x10","y10","x32","y32","t","cornerTangents","r1","rc","cw","x01","y01","lo","ox","oy","x11","y11","x00","y00","dx","dy","d2","r","D","cx0","cy0","cx1","cy1","dx0","dy0","dx1","dy1","arc","innerRadius","outerRadius","cornerRadius","constant","padRadius","startAngle","endAngle","padAngle","context","path","withPath","buffer","r0","a0","a1","da","a01","a11","a00","a10","da0","da1","ap","rp","rc0","rc1","t0","t1","p0","p1","oc","ax","ay","bx","by","kc","lc","a","_"],"mappings":"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","x_google_ignoreList":[0,1]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{j as n,cq as C,cr as q,a3 as L,a5 as Y,ct as $}from"./index-PB1II0WV.js";import{f as T}from"./format-Lx4cQ8k-.js";import{e as H,b as V}from"./scales-e0tkfEy1.js";import{n as D,e as U}from"./stats-BNgXz5BD.js";function O(t,s,e){return s<=0?0:Math.max(0,Math.min(t,s))/s*e}function W(t,s,e,o){const l=O(t,s,e);return o?e-l:l}function J(t,s){const{width:e,height:o,rtl:l}=s,u=t.length;if(u===0||e<=0||o<=0)return{rows:[],rowHeight:0};const x=o/u,y=Math.max(6,x*.55),p=Math.max(3,y*.34);return{rows:t.map((f,m)=>{const h=[...f.bandCutoffs??[]].filter(c=>c>0).sort((c,v)=>c-v),j=f.max??Math.max(f.measure,f.target,h.at(-1)??0,1),a=m*x,d=a+(x-y)/2,i=[0,...h.filter(c=>c<j),j],g=i.length-1,w=[];for(let c=0;c<g;c+=1){const v=i[c]??0,k=i[c+1]??j,M=W(v,j,e,l),A=W(k,j,e,l);w.push({index:c,x:Math.min(M,A),width:Math.abs(A-M),level:g<=1?1:c/(g-1)})}const r=O(f.measure,j,e);return{index:m,label:f.label,measure:f.measure,target:f.target,max:j,rowY:a,trackY:d,trackHeight:y,bands:w,measureX:l?e-r:0,measureWidth:r,measureY:a+(x-p)/2,measureHeight:p,targetX:W(f.target,j,e,l)}}),rowHeight:x}}function Q(t){return`var(--viz-ramp-${1+Math.round(t*2)})`}function Z({data:t,labels:s,height:e=200,labelGutter:o=92,valueGutter:l=52,formatValue:u=T,dir:x,a11yFallback:y,className:p}){return n.jsx(C,{labels:s,height:e,...x!==void 0?{dir:x}:{},...y!==void 0?{a11yFallback:y}:{},...p!==void 0?{className:p}:{},padding:{top:4,bottom:4,left:2,right:2},children:({innerWidth:b,innerHeight:f,rtl:m,mounted:h})=>{const j=Math.max(0,b-o-l);if(t.length===0||j<=0||f<=0)return null;const a=m?l:o,d=J(t,{width:j,height:f,rtl:m}),i=m?b:0,g=m?0:b;return n.jsx("g",{className:"adm-chart-fade",style:{"--adm-fade":h?"1":"0"},children:d.rows.map(w=>{const r=w.rowY+d.rowHeight/2+3;return n.jsxs("g",{"data-bullet-row":w.index,children:[w.bands.map(c=>n.jsx("rect",{x:a+c.x,y:w.trackY,width:c.width,height:w.trackHeight,rx:2,fill:Q(c.level),"data-band":c.index},c.index)),n.jsx("rect",{x:a+w.measureX,y:w.measureY,width:w.measureWidth,height:w.measureHeight,rx:1.5,fill:"var(--fg)","data-measure":""}),n.jsx("rect",{x:a+w.targetX-1,y:w.trackY-2,width:2,height:w.trackHeight+4,fill:"var(--danger)","data-target":""}),n.jsx("text",{className:"adm-chart-axis-label",x:i,y:r,textAnchor:m?"end":"start",children:w.label}),n.jsx("text",{className:"adm-chart-num",x:g,y:r,textAnchor:m?"start":"end",fontSize:11,fontWeight:700,fill:"var(--fg)",children:u(w.measure)})]},w.label)})})}})}function G(t,s){const{width:e,height:o,rtl:l,barRatio:u=.5,max:x}=s,y=x!==void 0?t.slice(0,x):[...t],p=y.length;if(p===0||e<=0||o<=0)return{bars:[],rowHeight:0};const b=o/p,f=b*u,m=y.reduce((a,d)=>Math.max(a,d.value),0),h=y.reduce((a,d,i)=>d.value>(y[a]?.value??-1/0)?i:a,0);return{bars:y.map((a,d)=>{const g=(m>0?Math.max(0,a.value)/m:0)*e,w=d*b;return{index:d,label:a.label,value:a.value,rowY:w,y:w+(b-f)/2,x:l?e-g:0,width:g,barHeight:f,isLeader:d===h}}),rowHeight:b}}function tt({data:t,labels:s,max:e,height:o=220,labelGutter:l=104,valueGutter:u=52,formatValue:x=T,dir:y,a11yFallback:p,className:b}){return n.jsx(C,{labels:s,height:o,...y!==void 0?{dir:y}:{},...p!==void 0?{a11yFallback:p}:{},...b!==void 0?{className:b}:{},padding:{top:4,bottom:4,left:2,right:2},children:({innerWidth:f,innerHeight:m,rtl:h,mounted:j})=>{const a=Math.max(0,f-l-u);if(t.length===0||a<=0||m<=0)return null;const d=h?u:l,i=G(t,{width:a,height:m,rtl:h,...e!==void 0?{max:e}:{}}),g=h?f:0,w=h?0:f;return n.jsx("g",{className:"adm-chart-fade",style:{"--adm-fade":j?"1":"0"},children:i.bars.map(r=>{const c=r.rowY+i.rowHeight/2+3;return n.jsxs("g",{"data-rank":r.index,children:[n.jsx("rect",{x:d+r.x,y:r.y,width:r.width,height:r.barHeight,rx:3,fill:r.isLeader?"var(--accent)":"var(--viz-ramp-3)","data-leader":r.isLeader?"":void 0}),n.jsx("text",{className:"adm-chart-axis-label",x:g,y:c,textAnchor:h?"end":"start",children:r.label}),n.jsx("text",{className:"adm-chart-num",x:w,y:c,textAnchor:h?"start":"end",fontSize:11,fontWeight:700,fill:"var(--fg)",children:x(r.value)})]},r.label)})})}})}function et(t,s){const{width:e,height:o,rtl:l,cutline:u=.8,smooth:x=!1,tickCount:y=3}=s,p={bars:[],linePath:null,linePoints:[],yTicks:[],yFor:()=>0,cutlineY:null,cutline:u??.8,total:0};if(t.length===0||e<=0||o<=0)return p;const b=t.reduce((c,v)=>c+Math.max(0,v.value),0),f=t.reduce((c,v)=>Math.max(c,v.value),0),m=f<=0?[0,1]:D(0,f,y),h=m.at(-1)??Math.max(f,1),j=c=>o-Math.max(0,c)/(h||1)*o,a=c=>o-Math.max(0,Math.min(1,c))*o,d=H(t.map(c=>c.label),e,l,{paddingInner:.28,paddingOuter:.16}),i=d.bandwidth();let g=0;const w=t.map((c,v)=>{g+=Math.max(0,c.value);const k=b>0?g/b:0,M=d(c.label)??0,A=j(c.value);return{index:v,label:c.label,value:c.value,cumulative:k,x:M,y:A,width:i,height:o-A,centerX:M+i/2,lineY:a(k)}}),r=w.map(c=>({x:c.centerX,y:c.lineY}));return{bars:w,linePath:V(r,x),linePoints:r,yTicks:m,yFor:j,cutlineY:u===null?null:a(u),cutline:u??.8,total:b}}const at=[0,.5,1];function nt({data:t,labels:s,height:e=240,cutline:o=.8,smooth:l=!1,showAxis:u=!0,formatValue:x=T,dir:y,a11yFallback:p,className:b}){const f=u?34:6;return n.jsx(C,{labels:s,height:e,...y!==void 0?{dir:y}:{},...p!==void 0?{a11yFallback:p}:{},...b!==void 0?{className:b}:{},padding:{top:10,bottom:22,left:f,right:f},children:({innerWidth:m,innerHeight:h,rtl:j,mounted:a})=>{if(t.length===0||m<=0||h<=0)return null;const d=et(t,{width:m,height:h,rtl:j,cutline:o,smooth:l}),i=j?m+6:-6,g=j?-6:m+6,w=r=>h-r*h;return n.jsxs("g",{children:[u&&d.yTicks.map(r=>n.jsxs("g",{children:[n.jsx("line",{className:"adm-chart-gridline",x1:0,x2:m,y1:d.yFor(r),y2:d.yFor(r)}),n.jsx("text",{className:"adm-chart-axis-label adm-chart-num",x:i,y:d.yFor(r)+3,textAnchor:j?"start":"end",children:x(r)})]},`v-${r}`)),d.bars.map(r=>n.jsx("rect",{className:"adm-chart-grow",style:{"--adm-grow":a?"1":"0","--adm-stagger":`${r.index*80}ms`},x:r.x,y:r.y,width:r.width,height:r.height,rx:2,fill:"var(--viz-ramp-3)","data-bar":r.index},r.label)),d.cutlineY!==null&&n.jsx("line",{x1:0,x2:m,y1:d.cutlineY,y2:d.cutlineY,stroke:"var(--border-strong)",strokeWidth:1,strokeDasharray:"4 4","data-cutline":""}),n.jsxs("g",{className:"adm-chart-fade",style:{"--adm-fade":a?"1":"0"},children:[d.linePath!==null&&n.jsx("path",{d:d.linePath,fill:"none",stroke:"var(--accent)",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round","data-cumulative":""}),d.linePoints.map((r,c)=>n.jsx("circle",{cx:r.x,cy:r.y,r:3,fill:"var(--accent)",stroke:"var(--surface)",strokeWidth:1.5},c))]}),u&&at.map(r=>n.jsx("text",{className:"adm-chart-axis-label adm-chart-num",x:g,y:w(r)+3,textAnchor:j?"end":"start",children:`${Math.round(r*100)}%`},`p-${r}`)),d.bars.map(r=>n.jsx("text",{className:"adm-chart-axis-label",x:r.centerX,y:h+15,textAnchor:"middle",children:r.label},`c-${r.label}`))]})}})}function rt(t,s){const{width:e,height:o,rtl:l,tickCount:u=3}=s;if(t.length===0||e<=0||o<=0)return{bars:[],connectors:[],yTicks:[],yFor:()=>0};let x=0;const y=t.map(r=>{const c=Math.max(0,r.value);let v,k;return r.type==="total"?(x=r.value,v=Math.min(0,r.value),k=Math.max(0,r.value)):r.type==="down"?(k=x,x-=c,v=x):(v=x,x+=c,k=x),{low:v,high:k,exitLevel:x}}),p=y.reduce((r,c)=>Math.max(r,c.high),0),b=y.reduce((r,c)=>Math.min(r,c.low),0),f=D(Math.min(0,b),Math.max(1,p),u),m=f[0]??Math.min(0,b),j=(f.at(-1)??Math.max(1,p))-m||1,a=r=>o-(r-m)/j*o,d=H(t.map(r=>r.label),e,l,{paddingInner:.34,paddingOuter:.18}),i=d.bandwidth(),g=t.map((r,c)=>{const v=y[c]??{low:0,high:0,exitLevel:0},k=d(r.label)??0,M=a(v.high),A=a(v.low);return{index:c,label:r.label,value:r.value,type:r.type,exitLevel:v.exitLevel,x:k,y:Math.min(M,A),width:i,height:Math.max(0,Math.abs(A-M)),centerX:k+i/2}}),w=[];for(let r=0;r<g.length-1;r+=1){const c=g[r],v=g[r+1];c===void 0||v===void 0||w.push({fromIndex:r,x1:l?c.x:c.x+c.width,x2:l?v.x+v.width:v.x,y:a(c.exitLevel)})}return{bars:g,connectors:w,yTicks:f,yFor:a}}function st(t){return t==="up"?"var(--pos)":t==="down"?"var(--danger)":"var(--viz-ramp-4)"}function lt(t,s,e){return t==="up"?`+${e(s)}`:t==="down"?`−${e(s)}`:e(s)}function ot({data:t,labels:s,height:e=260,showAxis:o=!0,formatValue:l=T,dir:u,a11yFallback:x,className:y}){return n.jsx(C,{labels:s,height:e,...u!==void 0?{dir:u}:{},...x!==void 0?{a11yFallback:x}:{},...y!==void 0?{className:y}:{},padding:{top:18,bottom:22,left:o?36:6,right:8},children:({innerWidth:p,innerHeight:b,rtl:f,mounted:m})=>{if(t.length===0||p<=0||b<=0)return null;const h=rt(t,{width:p,height:b,rtl:f}),j=f?p+6:-6;return n.jsxs("g",{children:[o&&h.yTicks.map(a=>n.jsxs("g",{children:[n.jsx("line",{className:"adm-chart-gridline",x1:0,x2:p,y1:h.yFor(a),y2:h.yFor(a)}),n.jsx("text",{className:"adm-chart-axis-label adm-chart-num",x:j,y:h.yFor(a)+3,textAnchor:f?"start":"end",children:l(a)})]},a)),h.connectors.map(a=>n.jsx("line",{x1:a.x1,x2:a.x2,y1:a.y,y2:a.y,stroke:"var(--border-strong)",strokeWidth:1,strokeDasharray:"3 3","data-connector":a.fromIndex},a.fromIndex)),n.jsx("g",{className:"adm-chart-fade",style:{"--adm-fade":m?"1":"0"},children:h.bars.map(a=>n.jsxs("g",{"data-step":a.index,"data-type":a.type,children:[n.jsx("rect",{x:a.x,y:a.y,width:a.width,height:Math.max(1,a.height),rx:2,fill:st(a.type)}),n.jsx("text",{className:"adm-chart-num",x:a.centerX,y:a.y-5,textAnchor:"middle",fontSize:10,fontWeight:700,fill:"var(--fg-muted)",children:lt(a.type,a.value,l)}),n.jsx("text",{className:"adm-chart-axis-label",x:a.centerX,y:b+15,textAnchor:"middle",children:a.label})]},a.label))})]})}})}function ct(t,s,e,o){const{width:l,height:u,rtl:x,gap:y=2}=o,p=s.length;if(p===0||t.length===0||l<=0||u<=0)return{columns:[],grandTotal:0};const b=s.map((d,i)=>t.reduce((g,w,r)=>g+Math.max(0,e[r]?.[i]??0),0)),f=b.reduce((d,i)=>d+i,0),m=y*Math.max(0,p-1),h=Math.max(0,l-m);let j=0;return{columns:s.map((d,i)=>{const g=b[i]??0,w=f>0?g/f:1/p,r=h*w,c=j;j+=r+y;const v=x?l-c-r:c;let k=0;const M=t.map((A,E)=>{const R=Math.max(0,e[E]?.[i]??0),X=g>0?R/g:0,I=X*u,_=k;return k+=I,{rowIndex:E,rowKey:A,value:R,share:X,y:_,height:I}});return{colIndex:i,colKey:d,total:g,share:w,x:v,width:r,segments:M}}),grandTotal:f}}function dt(t){return`${Math.round(t*100)}%`}function it({rowKeys:t,colKeys:s,cells:e,labels:o,height:l=260,labelThreshold:u=18,dir:x,a11yFallback:y,className:p}){return n.jsx(C,{labels:o,height:l,...x!==void 0?{dir:x}:{},...y!==void 0?{a11yFallback:y}:{},...p!==void 0?{className:p}:{},padding:{top:18,bottom:4,left:2,right:2},children:({innerWidth:b,innerHeight:f,rtl:m,mounted:h})=>{if(t.length===0||s.length===0||b<=0||f<=0)return null;const j=ct(t,s,e,{width:b,height:f,rtl:m});return n.jsx("g",{className:"adm-chart-fade",style:{"--adm-fade":h?"1":"0"},children:j.columns.map(a=>n.jsxs("g",{"data-col":a.colIndex,children:[a.segments.map(d=>n.jsxs("g",{"data-seg":`${a.colIndex}-${d.rowIndex}`,children:[n.jsx("rect",{x:a.x,y:d.y,width:a.width,height:Math.max(0,d.height-1),fill:`var(--viz-${d.rowIndex%8+1})`}),d.height>=u&&a.width>=44&&n.jsx("text",{className:"adm-chart-label",x:a.x+a.width/2,y:d.y+d.height/2+3,textAnchor:"middle",fill:"var(--surface)",children:d.rowKey})]},d.rowKey)),n.jsx("text",{className:"adm-chart-axis-label",x:a.x+a.width/2,y:-10,textAnchor:"middle",children:a.colKey}),n.jsx("text",{className:"adm-chart-num",x:a.x+a.width/2,y:-1,textAnchor:"middle",fontSize:9,fill:"var(--fg-subtle)",children:dt(a.share)})]},a.colKey))})}})}function ht(t,s){const{width:e,rtl:o,gap:l=2}=s,u=t.length;if(u===0||e<=0)return{segments:[],total:0};const x=t.reduce((m,h)=>m+Math.max(0,h.value),0),y=l*Math.max(0,u-1),p=Math.max(0,e-y);let b=0;return{segments:t.map((m,h)=>{const j=Math.max(0,m.value),a=x>0?j/x:1/u,d=p*a,i=b;return b+=d+l,{index:h,key:m.key,label:m.label,value:m.value,share:a,x:o?e-i-d:i,width:d}}),total:x}}function K(t){return`${Math.round(t*100)}%`}function ut({data:t,labels:s,barHeight:e=26,gapPx:o=2,showLegend:l=!0,legendColumns:u=2,showSegmentLabels:x=!0,formatValue:y,dir:p,a11yFallback:b,className:f}){const m=q(p);return n.jsxs("div",{className:f===void 0?"adm-stacked":`adm-stacked ${f}`,...p!==void 0?{dir:m}:{},children:[n.jsx(C,{labels:s,height:e,...p!==void 0?{dir:p}:{},...b!==void 0?{a11yFallback:b}:{},padding:{top:0,bottom:0,left:0,right:0},children:({innerWidth:h,rtl:j,mounted:a})=>{if(t.length===0||h<=0)return null;const d=ht(t,{width:h,rtl:j,gap:o});return n.jsx("g",{className:"adm-chart-fade",style:{"--adm-fade":a?"1":"0"},children:d.segments.map(i=>n.jsxs("g",{"data-seg":i.index,children:[n.jsx("rect",{x:i.x,y:0,width:Math.max(0,i.width),height:e,rx:4,fill:`var(--viz-${i.index%8+1})`}),x&&i.width>=34&&n.jsx("text",{className:"adm-chart-num",x:i.x+i.width/2,y:e/2+3,textAnchor:"middle",fontSize:10,fontWeight:700,fill:"var(--surface)",children:K(i.share)})]},i.key))})}}),l&&n.jsx("ul",{className:"adm-legend",style:{"--adm-legend-cols":String(Math.max(1,u))},children:t.map((h,j)=>{const a=t.reduce((i,g)=>i+Math.max(0,g.value),0),d=a>0?Math.max(0,h.value)/a:0;return n.jsxs("li",{className:"adm-legend-row",children:[n.jsx("span",{className:"adm-legend-dot",style:{"--adm-dot":`var(--viz-${j%8+1})`},"aria-hidden":"true"}),n.jsx("span",{children:h.label}),n.jsx("span",{className:"adm-legend-value",children:y!==void 0?y(h.value):K(d)})]},h.key)})})]})}function xt(t,s){const{width:e,height:o,rtl:l}=s;if(t.length===0||e<=0||o<=0)return{lines:[],xA:0,xB:e,yFor:()=>0};const u=t.flatMap(i=>[i.a,i.b]),[x,y]=U(u)??[0,1],p=(y-x)*.08||1,b=x-p,m=y+p-b||1,h=i=>o-(i-b)/m*o,j=l?e:0,a=l?0:e;return{lines:t.map((i,g)=>{const w=h(i.a),r=h(i.b);return{index:g,label:i.label,a:i.a,b:i.b,xA:j,yA:w,xB:a,yB:r,rising:i.b>=i.a,path:V([{x:j,y:w},{x:a,y:r}])}}),xA:j,xB:a,yFor:h}}function mt({data:t,labels:s,height:e=260,periodLabels:o,labelGutter:l=84,valueGutter:u=56,formatValue:x=T,dir:y,a11yFallback:p,className:b}){return n.jsx(C,{labels:s,height:e,...y!==void 0?{dir:y}:{},...p!==void 0?{a11yFallback:p}:{},...b!==void 0?{className:b}:{},padding:{top:18,bottom:8,left:l,right:u},children:({innerWidth:f,innerHeight:m,rtl:h,mounted:j})=>{if(t.length===0||f<=0||m<=0)return null;const a=xt(t,{width:f,height:m,rtl:h}),d=o?.[0],i=o?.[1];return n.jsxs("g",{children:[n.jsx("line",{x1:a.xA,x2:a.xA,y1:0,y2:m,stroke:"var(--border)",strokeWidth:1}),n.jsx("line",{x1:a.xB,x2:a.xB,y1:0,y2:m,stroke:"var(--border)",strokeWidth:1}),d!==void 0&&n.jsx("text",{className:"adm-chart-axis-label",x:a.xA,y:-6,textAnchor:"middle",children:d}),i!==void 0&&n.jsx("text",{className:"adm-chart-axis-label",x:a.xB,y:-6,textAnchor:"middle",children:i}),n.jsx("g",{className:"adm-chart-fade",style:{"--adm-fade":j?"1":"0"},children:a.lines.map(g=>{const w=g.rising?"var(--pos)":"var(--danger)";return n.jsxs("g",{"data-slope":g.index,"data-rising":g.rising?"":void 0,children:[g.path!==null&&n.jsx("path",{d:g.path,fill:"none",stroke:w,strokeWidth:2,strokeLinecap:"round"}),n.jsx("circle",{cx:g.xA,cy:g.yA,r:3,fill:w}),n.jsx("circle",{cx:g.xB,cy:g.yB,r:3,fill:w}),n.jsx("text",{className:"adm-chart-axis-label",x:g.xA+(h?8:-8),y:g.yA+3,textAnchor:h?"start":"end",children:g.label}),n.jsx("text",{className:"adm-chart-num",x:g.xB+(h?-8:8),y:g.yB+3,textAnchor:h?"end":"start",fontSize:10,fontWeight:700,fill:w,children:x(g.b)})]},g.label)})})]})}})}function P(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)?t:null}function N(t){if(typeof t=="number"&&Number.isFinite(t))return t;if(typeof t=="string"&&t.trim()!==""){const s=Number(t);if(Number.isFinite(s))return s}}function F(t){return typeof t=="string"?t:void 0}function z(t){const s=P(t);if(s===null)return null;const e=Array.isArray(s.rows)?s.rows:Array.isArray(s.data)?s.data:null;if(e===null)return null;const o=[];for(const l of e){const u=P(l);if(u===null)return null;o.push(u)}return o}function ft(t){const s=z(t);if(s===null)return null;const e=[];for(const o of s){const l=N(o.measure),u=N(o.target),x=F(o.label);if(x===void 0||l===void 0||u===void 0)return null;const y=N(o.max),p=Array.isArray(o.bandCutoffs)?o.bandCutoffs.map(N).filter(b=>b!==void 0):void 0;e.push({label:x,measure:l,target:u,...y!==void 0?{max:y}:{},...p!==void 0?{bandCutoffs:p}:{}})}return e.length>0?e:null}function gt(t){return t==="down"||t==="total"?t:"up"}function yt(t){const s=z(t);if(s===null)return null;const e=[];for(const o of s){const l=F(o.label),u=N(o.value);if(l===void 0||u===void 0)return null;e.push({label:l,value:u,type:gt(o.type)})}return e.length>0?e:null}function pt(t){const s=z(t);if(s===null)return null;const e=[];for(const o of s){const l=F(o.label),u=N(o.a),x=N(o.b);if(l===void 0||u===void 0||x===void 0)return null;e.push({label:l,a:u,b:x})}return e.length>0?e:null}function bt(t){const s=P(t);if(s===null||!Array.isArray(s.rowKeys)||!Array.isArray(s.colKeys)||!Array.isArray(s.cells))return null;const e=s.rowKeys.map(String),o=s.colKeys.map(String),l=[];for(const u of s.cells){if(!Array.isArray(u))return null;l.push(u.map(x=>N(x)??0))}return e.length===0||o.length===0?null:{rowKeys:e,colKeys:o,cells:l}}function S(){return n.jsx("p",{className:"px-4 pb-4 text-body-sm text-fg-muted",children:"Unexpected data shape."})}const B="px-4 pb-4 compact:px-3 compact:pb-3";function Mt({config:t,data:s}){const e=ft(s);if(e===null)return n.jsx(S,{});const o=L(t);return n.jsx("div",{className:B,"data-widget":"chart-bullet",children:n.jsx(Z,{data:e,labels:{label:t.title??"Bullet chart"},height:t.height,formatValue:l=>Y(l,t.metricFormat,o)})})}function At({config:t,data:s}){const e=$(s);if(e===null||e.items.length===0)return n.jsx(S,{});const o=L(t);return n.jsx("div",{className:B,"data-widget":"chart-ranking-bars",children:n.jsx(tt,{data:e.items.map(l=>({label:l.label,value:l.value})),labels:{label:t.title??"Ranking"},max:t.n,formatValue:l=>Y(l,t.metricFormat,o)})})}function Nt({config:t,data:s}){const e=$(s);if(e===null||e.items.length===0)return n.jsx(S,{});const o=L(t);return n.jsx("div",{className:B,"data-widget":"chart-pareto",children:n.jsx(nt,{data:e.items.map(l=>({label:l.label,value:l.value})),labels:{label:t.title??"Pareto chart"},cutline:t.cutline,smooth:t.smooth,showAxis:t.axis,height:t.height,formatValue:l=>Y(l,t.metricFormat,o)})})}function Ct({config:t,data:s}){const e=yt(s);if(e===null)return n.jsx(S,{});const o=L(t);return n.jsx("div",{className:B,"data-widget":"chart-waterfall",children:n.jsx(ot,{data:e,labels:{label:t.title??"Waterfall chart"},showAxis:t.axis,height:t.height,formatValue:l=>Y(l,t.metricFormat,o)})})}function St({config:t,data:s}){const e=bt(s);return e===null?n.jsx(S,{}):n.jsx("div",{className:B,"data-widget":"chart-marimekko",children:n.jsx(it,{rowKeys:e.rowKeys,colKeys:e.colKeys,cells:e.cells,labels:{label:t.title??"Marimekko chart"},labelThreshold:t.labelThreshold,height:t.height})})}function Bt({config:t,data:s}){const e=$(s);if(e===null||e.items.length===0)return n.jsx(S,{});const o=L(t);return n.jsx("div",{className:B,"data-widget":"chart-stacked-bar-100",children:n.jsx(ut,{data:e.items.map(l=>({key:l.key,label:l.label,value:l.value})),labels:{label:t.title??"100% stacked bar"},showLegend:t.showLegend,legendColumns:t.legendColumns,gapPx:t.gapPx,showSegmentLabels:t.showTotal,...t.metricFormat!=="percent"?{formatValue:l=>Y(l,t.metricFormat,o)}:{}})})}function Lt({config:t,data:s}){const e=pt(s);if(e===null)return n.jsx(S,{});const o=L(t);return n.jsx("div",{className:B,"data-widget":"chart-slope",children:n.jsx(mt,{data:e,labels:{label:t.title??"Slope chart"},height:t.height,...t.periodLabels!==void 0?{periodLabels:t.periodLabels}:{},formatValue:l=>Y(l,t.metricFormat,o)})})}export{Mt as ChartBulletWidget,St as ChartMarimekkoWidget,Nt as ChartParetoWidget,At as ChartRankingBarsWidget,Lt as ChartSlopeWidget,Bt as ChartStackedBar100Widget,Ct as ChartWaterfallWidget};
|
|
2
|
+
//# sourceMappingURL=bars-ranking-components-9Asn_0gR.js.map
|