@oods/component-contracts 0.3.3 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/index.cjs +797 -34
- package/dist/index.d.cts +177 -3
- package/dist/index.d.ts +177 -3
- package/dist/index.js +785 -35
- package/package.json +1 -1
- package/registry/component-capability-additions.v1.json +144 -0
- package/registry/component-capability-ledger.v1.json +143 -1
- package/registry/component-intake.v1.json +53 -1
- package/registry/component-obligation-scope.v1.json +2 -2
- package/registry/component-reconciliation.proposed.v2.json +40 -2
- package/registry/lifecycle-status-tones.json +55 -0
- package/registry/status-map.json +205 -0
package/dist/index.cjs
CHANGED
|
@@ -6,7 +6,7 @@ var component_intake_v1_default = {
|
|
|
6
6
|
kind: "component-intake",
|
|
7
7
|
baselineCommit: "ae560bc22969c1fd81336730be4330c9115fc316",
|
|
8
8
|
planningCommit: "8ce349076e7e3ba3f0b2f3f667d4fbb5c6a4b63b",
|
|
9
|
-
controllingObligationDenominator:
|
|
9
|
+
controllingObligationDenominator: 112,
|
|
10
10
|
countRule: "Derived from the unique, deterministically sorted rows array; never from an independent counter.",
|
|
11
11
|
rows: [
|
|
12
12
|
{
|
|
@@ -1052,6 +1052,28 @@ var component_intake_v1_default = {
|
|
|
1052
1052
|
"traits/content/Labelled.trait.yaml"
|
|
1053
1053
|
]
|
|
1054
1054
|
},
|
|
1055
|
+
{
|
|
1056
|
+
id: "Dialog",
|
|
1057
|
+
displayName: "Dialog",
|
|
1058
|
+
baselineMetadata: {
|
|
1059
|
+
categories: [
|
|
1060
|
+
"primitive"
|
|
1061
|
+
],
|
|
1062
|
+
tags: [
|
|
1063
|
+
"dialog",
|
|
1064
|
+
"modal",
|
|
1065
|
+
"overlay",
|
|
1066
|
+
"primitive"
|
|
1067
|
+
],
|
|
1068
|
+
contexts: [],
|
|
1069
|
+
regions: []
|
|
1070
|
+
},
|
|
1071
|
+
intakeEvidence: [
|
|
1072
|
+
"packages/component-contracts/src/contracts.ts#Dialog",
|
|
1073
|
+
"packages/mcp-server/src/render/component-map.ts#renderDialog"
|
|
1074
|
+
],
|
|
1075
|
+
addedBy: "s222-m02; decision #2502 ruling 11"
|
|
1076
|
+
},
|
|
1055
1077
|
{
|
|
1056
1078
|
id: "FilterPanel",
|
|
1057
1079
|
displayName: "FilterPanel",
|
|
@@ -2157,6 +2179,36 @@ var component_intake_v1_default = {
|
|
|
2157
2179
|
"traits/lifecycle/Stateful.trait.yaml"
|
|
2158
2180
|
]
|
|
2159
2181
|
},
|
|
2182
|
+
{
|
|
2183
|
+
id: "Switch",
|
|
2184
|
+
displayName: "Switch",
|
|
2185
|
+
baselineMetadata: {
|
|
2186
|
+
categories: [
|
|
2187
|
+
"primitive"
|
|
2188
|
+
],
|
|
2189
|
+
tags: [
|
|
2190
|
+
"boolean",
|
|
2191
|
+
"field",
|
|
2192
|
+
"form",
|
|
2193
|
+
"input",
|
|
2194
|
+
"interactive",
|
|
2195
|
+
"primitive",
|
|
2196
|
+
"switch"
|
|
2197
|
+
],
|
|
2198
|
+
contexts: [
|
|
2199
|
+
"form"
|
|
2200
|
+
],
|
|
2201
|
+
regions: [
|
|
2202
|
+
"form",
|
|
2203
|
+
"main"
|
|
2204
|
+
]
|
|
2205
|
+
},
|
|
2206
|
+
intakeEvidence: [
|
|
2207
|
+
"packages/component-contracts/src/contracts.ts#Switch",
|
|
2208
|
+
"packages/mcp-server/src/render/component-map.ts#renderSwitch"
|
|
2209
|
+
],
|
|
2210
|
+
addedBy: "s222-m02; decision #2502 ruling 11"
|
|
2211
|
+
},
|
|
2160
2212
|
{
|
|
2161
2213
|
id: "Table",
|
|
2162
2214
|
displayName: "Table",
|
|
@@ -3176,9 +3228,9 @@ var component_reconciliation_proposed_v2_default = {
|
|
|
3176
3228
|
baselineCommit: "a5638cf819bdadb86e2336c4aabe9b2184699c13",
|
|
3177
3229
|
planningCommit: "8ce349076e7e3ba3f0b2f3f667d4fbb5c6a4b63b",
|
|
3178
3230
|
status: "proposed-awaiting-approval",
|
|
3179
|
-
controllingObligationDenominator:
|
|
3231
|
+
controllingObligationDenominator: 112,
|
|
3180
3232
|
approvedRuntimeCensus: null,
|
|
3181
|
-
proposedRuntimeCensus:
|
|
3233
|
+
proposedRuntimeCensus: 112,
|
|
3182
3234
|
rows: [
|
|
3183
3235
|
{
|
|
3184
3236
|
id: "AddressCollectionPanel",
|
|
@@ -3898,6 +3950,25 @@ var component_reconciliation_proposed_v2_default = {
|
|
|
3898
3950
|
implementationStatus: "implemented-evidence-complete",
|
|
3899
3951
|
compatibilityNote: "Retain the named public ID and existing HTML discovery contract. Governed framework implementation and measurements are linked; classification remains a proposal."
|
|
3900
3952
|
},
|
|
3953
|
+
{
|
|
3954
|
+
id: "Dialog",
|
|
3955
|
+
proposedClassification: "native",
|
|
3956
|
+
approvalState: "pending-approval",
|
|
3957
|
+
evidence: [
|
|
3958
|
+
"packages/mcp-server/src/render/component-map.ts#renderDialog",
|
|
3959
|
+
"packages/components-react/evidence/react-readiness.v1.json#Dialog",
|
|
3960
|
+
"packages/components-vue/evidence/vue-readiness.v1.json#Dialog",
|
|
3961
|
+
"packages/component-contracts/src/contracts.ts#Dialog"
|
|
3962
|
+
],
|
|
3963
|
+
implementationStatus: "implemented-evidence-complete",
|
|
3964
|
+
proposedResolution: {
|
|
3965
|
+
surface: "react+vue+html",
|
|
3966
|
+
implementation: "Dialog",
|
|
3967
|
+
source: "packages/component-contracts/src/contracts.ts",
|
|
3968
|
+
publicIdRetained: true
|
|
3969
|
+
},
|
|
3970
|
+
compatibilityNote: "New public identity added by decision #2502 (ruling 11). Governed framework implementation and measurements are linked; classification remains a proposal."
|
|
3971
|
+
},
|
|
3901
3972
|
{
|
|
3902
3973
|
id: "FilterPanel",
|
|
3903
3974
|
proposedClassification: "recipe",
|
|
@@ -4673,6 +4744,25 @@ var component_reconciliation_proposed_v2_default = {
|
|
|
4673
4744
|
implementationStatus: "implemented-evidence-complete",
|
|
4674
4745
|
compatibilityNote: "Retain the named public ID and existing HTML discovery contract. Governed framework implementation and measurements are linked; classification remains a proposal."
|
|
4675
4746
|
},
|
|
4747
|
+
{
|
|
4748
|
+
id: "Switch",
|
|
4749
|
+
proposedClassification: "native",
|
|
4750
|
+
approvalState: "pending-approval",
|
|
4751
|
+
evidence: [
|
|
4752
|
+
"packages/mcp-server/src/render/component-map.ts#renderSwitch",
|
|
4753
|
+
"packages/components-react/evidence/react-readiness.v1.json#Switch",
|
|
4754
|
+
"packages/components-vue/evidence/vue-readiness.v1.json#Switch",
|
|
4755
|
+
"packages/component-contracts/src/contracts.ts#Switch"
|
|
4756
|
+
],
|
|
4757
|
+
implementationStatus: "implemented-evidence-complete",
|
|
4758
|
+
proposedResolution: {
|
|
4759
|
+
surface: "react+vue+html",
|
|
4760
|
+
implementation: "Switch",
|
|
4761
|
+
source: "packages/component-contracts/src/contracts.ts",
|
|
4762
|
+
publicIdRetained: true
|
|
4763
|
+
},
|
|
4764
|
+
compatibilityNote: "New public identity added by decision #2502 (ruling 11). Governed framework implementation and measurements are linked; classification remains a proposal."
|
|
4765
|
+
},
|
|
4676
4766
|
{
|
|
4677
4767
|
id: "Table",
|
|
4678
4768
|
proposedClassification: "native",
|
|
@@ -5385,7 +5475,7 @@ var component_capability_ledger_v1_default = {
|
|
|
5385
5475
|
schemaVersion: "1.0.0",
|
|
5386
5476
|
kind: "component-capability-ledger",
|
|
5387
5477
|
generatedAt: "2026-09-11T05:30:00Z",
|
|
5388
|
-
controllingObligationDenominator:
|
|
5478
|
+
controllingObligationDenominator: 112,
|
|
5389
5479
|
approvedRuntimeCensus: null,
|
|
5390
5480
|
source: "refresh_structured_data.py#project_measured_surfaces",
|
|
5391
5481
|
rows: [
|
|
@@ -8453,6 +8543,77 @@ var component_capability_ledger_v1_default = {
|
|
|
8453
8543
|
}
|
|
8454
8544
|
}
|
|
8455
8545
|
},
|
|
8546
|
+
{
|
|
8547
|
+
id: "Dialog",
|
|
8548
|
+
proposedClassification: "native",
|
|
8549
|
+
reconciliationState: "proposed-awaiting-approval",
|
|
8550
|
+
surfaces: {
|
|
8551
|
+
contract: {
|
|
8552
|
+
state: "versioned-v1",
|
|
8553
|
+
evidence: [
|
|
8554
|
+
"packages/component-contracts/src/contracts.ts#Dialog"
|
|
8555
|
+
]
|
|
8556
|
+
},
|
|
8557
|
+
metadata: {
|
|
8558
|
+
state: "available",
|
|
8559
|
+
evidence: [
|
|
8560
|
+
"packages/component-contracts/registry/component-intake.v1.json#Dialog"
|
|
8561
|
+
]
|
|
8562
|
+
},
|
|
8563
|
+
html: {
|
|
8564
|
+
state: "mapped",
|
|
8565
|
+
evidence: [
|
|
8566
|
+
"packages/mcp-server/src/render/component-map.ts#renderDialog"
|
|
8567
|
+
]
|
|
8568
|
+
},
|
|
8569
|
+
react: {
|
|
8570
|
+
state: "implemented-evidence-complete",
|
|
8571
|
+
evidence: [
|
|
8572
|
+
"packages/components-react/evidence/react-readiness.v1.json#Dialog"
|
|
8573
|
+
]
|
|
8574
|
+
},
|
|
8575
|
+
vue: {
|
|
8576
|
+
state: "implemented-evidence-complete",
|
|
8577
|
+
evidence: [
|
|
8578
|
+
"packages/components-vue/evidence/vue-readiness.v1.json#Dialog"
|
|
8579
|
+
]
|
|
8580
|
+
},
|
|
8581
|
+
generatedConsumer: {
|
|
8582
|
+
state: "unavailable",
|
|
8583
|
+
evidence: [
|
|
8584
|
+
"artifacts/product-reality/sprint-193/m07/runtime/runtime-cells.v1.json"
|
|
8585
|
+
],
|
|
8586
|
+
reason: "No current runtime cell places this component; historical receipts do not establish current coverage."
|
|
8587
|
+
},
|
|
8588
|
+
accessibility: {
|
|
8589
|
+
state: "verified",
|
|
8590
|
+
evidence: [
|
|
8591
|
+
"artifacts/product-reality/sprint-222/m02/switch-dialog/react-measured.json#Dialog",
|
|
8592
|
+
"artifacts/product-reality/sprint-222/m02/switch-dialog/vue-measured.json#Dialog",
|
|
8593
|
+
"packages/components-react/evidence/react-readiness.v1.json#Dialog",
|
|
8594
|
+
"packages/components-vue/evidence/vue-readiness.v1.json#Dialog"
|
|
8595
|
+
]
|
|
8596
|
+
},
|
|
8597
|
+
theme: {
|
|
8598
|
+
state: "verified",
|
|
8599
|
+
evidence: [
|
|
8600
|
+
"artifacts/product-reality/sprint-222/m02/switch-dialog/react-theme/report.json#Dialog",
|
|
8601
|
+
"artifacts/product-reality/sprint-222/m02/switch-dialog/vue-theme/report.json#Dialog",
|
|
8602
|
+
"packages/components-react/evidence/react-readiness.v1.json#Dialog",
|
|
8603
|
+
"packages/components-vue/evidence/vue-readiness.v1.json#Dialog"
|
|
8604
|
+
]
|
|
8605
|
+
},
|
|
8606
|
+
interaction: {
|
|
8607
|
+
state: "verified",
|
|
8608
|
+
evidence: [
|
|
8609
|
+
"artifacts/product-reality/sprint-222/m02/switch-dialog/react-measured.json#Dialog",
|
|
8610
|
+
"artifacts/product-reality/sprint-222/m02/switch-dialog/vue-measured.json#Dialog",
|
|
8611
|
+
"packages/components-react/evidence/react-readiness.v1.json#Dialog",
|
|
8612
|
+
"packages/components-vue/evidence/vue-readiness.v1.json#Dialog"
|
|
8613
|
+
]
|
|
8614
|
+
}
|
|
8615
|
+
}
|
|
8616
|
+
},
|
|
8456
8617
|
{
|
|
8457
8618
|
id: "FilterPanel",
|
|
8458
8619
|
proposedClassification: "recipe",
|
|
@@ -12041,6 +12202,77 @@ var component_capability_ledger_v1_default = {
|
|
|
12041
12202
|
}
|
|
12042
12203
|
}
|
|
12043
12204
|
},
|
|
12205
|
+
{
|
|
12206
|
+
id: "Switch",
|
|
12207
|
+
proposedClassification: "native",
|
|
12208
|
+
reconciliationState: "proposed-awaiting-approval",
|
|
12209
|
+
surfaces: {
|
|
12210
|
+
contract: {
|
|
12211
|
+
state: "versioned-v1",
|
|
12212
|
+
evidence: [
|
|
12213
|
+
"packages/component-contracts/src/contracts.ts#Switch"
|
|
12214
|
+
]
|
|
12215
|
+
},
|
|
12216
|
+
metadata: {
|
|
12217
|
+
state: "available",
|
|
12218
|
+
evidence: [
|
|
12219
|
+
"packages/component-contracts/registry/component-intake.v1.json#Switch"
|
|
12220
|
+
]
|
|
12221
|
+
},
|
|
12222
|
+
html: {
|
|
12223
|
+
state: "mapped",
|
|
12224
|
+
evidence: [
|
|
12225
|
+
"packages/mcp-server/src/render/component-map.ts#renderSwitch"
|
|
12226
|
+
]
|
|
12227
|
+
},
|
|
12228
|
+
react: {
|
|
12229
|
+
state: "implemented-evidence-complete",
|
|
12230
|
+
evidence: [
|
|
12231
|
+
"packages/components-react/evidence/react-readiness.v1.json#Switch"
|
|
12232
|
+
]
|
|
12233
|
+
},
|
|
12234
|
+
vue: {
|
|
12235
|
+
state: "implemented-evidence-complete",
|
|
12236
|
+
evidence: [
|
|
12237
|
+
"packages/components-vue/evidence/vue-readiness.v1.json#Switch"
|
|
12238
|
+
]
|
|
12239
|
+
},
|
|
12240
|
+
generatedConsumer: {
|
|
12241
|
+
state: "unavailable",
|
|
12242
|
+
evidence: [
|
|
12243
|
+
"artifacts/product-reality/sprint-193/m07/runtime/runtime-cells.v1.json"
|
|
12244
|
+
],
|
|
12245
|
+
reason: "No current runtime cell places this component; historical receipts do not establish current coverage."
|
|
12246
|
+
},
|
|
12247
|
+
accessibility: {
|
|
12248
|
+
state: "verified",
|
|
12249
|
+
evidence: [
|
|
12250
|
+
"artifacts/product-reality/sprint-222/m02/switch-dialog/react-measured.json#Switch",
|
|
12251
|
+
"artifacts/product-reality/sprint-222/m02/switch-dialog/vue-measured.json#Switch",
|
|
12252
|
+
"packages/components-react/evidence/react-readiness.v1.json#Switch",
|
|
12253
|
+
"packages/components-vue/evidence/vue-readiness.v1.json#Switch"
|
|
12254
|
+
]
|
|
12255
|
+
},
|
|
12256
|
+
theme: {
|
|
12257
|
+
state: "verified",
|
|
12258
|
+
evidence: [
|
|
12259
|
+
"artifacts/product-reality/sprint-222/m02/switch-dialog/react-theme/report.json#Switch",
|
|
12260
|
+
"artifacts/product-reality/sprint-222/m02/switch-dialog/vue-theme/report.json#Switch",
|
|
12261
|
+
"packages/components-react/evidence/react-readiness.v1.json#Switch",
|
|
12262
|
+
"packages/components-vue/evidence/vue-readiness.v1.json#Switch"
|
|
12263
|
+
]
|
|
12264
|
+
},
|
|
12265
|
+
interaction: {
|
|
12266
|
+
state: "verified",
|
|
12267
|
+
evidence: [
|
|
12268
|
+
"artifacts/product-reality/sprint-222/m02/switch-dialog/react-measured.json#Switch",
|
|
12269
|
+
"artifacts/product-reality/sprint-222/m02/switch-dialog/vue-measured.json#Switch",
|
|
12270
|
+
"packages/components-react/evidence/react-readiness.v1.json#Switch",
|
|
12271
|
+
"packages/components-vue/evidence/vue-readiness.v1.json#Switch"
|
|
12272
|
+
]
|
|
12273
|
+
}
|
|
12274
|
+
}
|
|
12275
|
+
},
|
|
12044
12276
|
{
|
|
12045
12277
|
id: "Table",
|
|
12046
12278
|
proposedClassification: "native",
|
|
@@ -15105,6 +15337,7 @@ var NUCLEUS_COMPONENT_IDS = [
|
|
|
15105
15337
|
"CycleProgressCard",
|
|
15106
15338
|
"DatePicker",
|
|
15107
15339
|
"DetailHeader",
|
|
15340
|
+
"Dialog",
|
|
15108
15341
|
"FilterPanel",
|
|
15109
15342
|
"FormLabelGroup",
|
|
15110
15343
|
"GeoFieldMappingForm",
|
|
@@ -15143,6 +15376,7 @@ var NUCLEUS_COMPONENT_IDS = [
|
|
|
15143
15376
|
"StatusColorLegend",
|
|
15144
15377
|
"StatusSelector",
|
|
15145
15378
|
"StatusTimeline",
|
|
15379
|
+
"Switch",
|
|
15146
15380
|
"Table",
|
|
15147
15381
|
"Tabs",
|
|
15148
15382
|
"TagInput",
|
|
@@ -15271,6 +15505,7 @@ var componentBehaviors = {
|
|
|
15271
15505
|
CycleProgressCard: { "role": "none", "name": { "strategy": "heading", "target": "h1,h2,h3,h4,h5,h6" }, "keyboard": {}, "interaction": "none", "interactionReason": "CycleProgressCard presents content and owns no focusable control or action; authored child actions remain the consumer's responsibility.", "event": [] },
|
|
15272
15506
|
DatePicker: { "role": "none", "name": { "strategy": "label", "target": 'input[type="date"]' }, "keyboard": { "Tab": "Move focus to the named native control" }, "interaction": "interactive", "event": [{ "trigger": "keyboard", "target": 'input[type="date"]', "key": "Tab", "effect": { "kind": "focus" } }] },
|
|
15273
15507
|
DetailHeader: { "role": "none", "name": { "strategy": "heading", "target": "h1,h2,h3,h4,h5,h6" }, "keyboard": {}, "interaction": "none", "interactionReason": "DetailHeader presents content and owns no focusable control or action; authored child actions remain the consumer's responsibility.", "event": [] },
|
|
15508
|
+
Dialog: { "role": "button", "name": { "strategy": "aria-label", "target": 'button[aria-label="Close"]' }, "keyboard": { "Tab": "Move focus to the named native control", "Enter": "Activate the control", "Escape": "Close the dialog" }, "interaction": "interactive", "event": [{ "trigger": "keyboard", "target": 'button[aria-label="Close"]', "key": "Tab", "effect": { "kind": "focus" } }, { "trigger": "pointer", "target": 'button[aria-label="Close"]', "effect": { "kind": "event" }, "action": "click" }, { "trigger": "keyboard", "target": 'button[aria-label="Close"]', "effect": { "kind": "event" }, "key": "Enter" }, { "trigger": "keyboard", "target": 'button[aria-label="Close"]', "effect": { "kind": "event" }, "key": "Escape" }] },
|
|
15274
15509
|
FilterPanel: { "role": "button", "name": { "strategy": "label", "target": "button[data-filter-apply]" }, "keyboard": { "Tab": "Move focus to the named native control" }, "interaction": "interactive", "event": [{ "trigger": "keyboard", "target": "button[data-filter-apply]", "key": "Tab", "effect": { "kind": "focus" } }] },
|
|
15275
15510
|
FormLabelGroup: { "role": "none", "name": { "strategy": "none", "target": ":root" }, "keyboard": {}, "interaction": "none", "interactionReason": "FormLabelGroup presents content and owns no focusable control or action; authored child actions remain the consumer's responsibility.", "event": [] },
|
|
15276
15511
|
Grid: { "role": "none", "name": { "strategy": "none", "target": ":root" }, "keyboard": {}, "interaction": "none", "interactionReason": "Grid presents content and owns no focusable control or action; authored child actions remain the consumer's responsibility.", "event": [] },
|
|
@@ -15303,6 +15538,7 @@ var componentBehaviors = {
|
|
|
15303
15538
|
StatusBadge: { "role": "none", "name": { "strategy": "none", "target": ":root" }, "keyboard": {}, "interaction": "none", "interactionReason": "StatusBadge presents content and owns no focusable control or action; authored child actions remain the consumer's responsibility.", "event": [] },
|
|
15304
15539
|
StatusSelector: { "role": "combobox", "name": { "strategy": "label", "target": "select" }, "keyboard": { "Tab": "Move focus to the named native control" }, "interaction": "interactive", "event": [{ "trigger": "keyboard", "target": "select", "key": "Tab", "effect": { "kind": "focus" } }, { "trigger": "pointer", "target": "select", "effect": { "kind": "event", "value": "draft" }, "action": "select", "value": "draft" }] },
|
|
15305
15540
|
StatusTimeline: { "role": "none", "name": { "strategy": "heading", "target": "h1,h2,h3,h4,h5,h6" }, "keyboard": {}, "interaction": "none", "interactionReason": "StatusTimeline presents content and owns no focusable control or action; authored child actions remain the consumer's responsibility.", "event": [] },
|
|
15541
|
+
Switch: { "role": "switch", "name": { "strategy": "label", "target": 'button[role="switch"]' }, "keyboard": { "Tab": "Move focus to the named native control", " ": "Toggle the switch", "Enter": "Toggle the switch" }, "interaction": "interactive", "event": [{ "trigger": "keyboard", "target": 'button[role="switch"]', "key": "Tab", "effect": { "kind": "focus" } }, { "trigger": "pointer", "target": 'button[role="switch"]', "effect": { "kind": "event", "value": true }, "action": "click" }, { "trigger": "keyboard", "target": 'button[role="switch"]', "effect": { "kind": "event", "value": true }, "key": " " }, { "trigger": "keyboard", "target": 'button[role="switch"]', "effect": { "kind": "event", "value": true }, "key": "Enter" }] },
|
|
15306
15542
|
Table: { "role": "button", "name": { "strategy": "label", "target": "tbody button" }, "keyboard": { "Tab": "Move focus to the named native control", "Enter": "Activate the control" }, "interaction": "interactive", "event": [{ "trigger": "keyboard", "target": "tbody button", "key": "Tab", "effect": { "kind": "focus" } }, { "trigger": "pointer", "target": "tbody button", "effect": { "kind": "event", "value": "sub-1" }, "action": "click" }, { "trigger": "keyboard", "target": "tbody button", "effect": { "kind": "event", "value": "sub-1" }, "key": "Enter" }] },
|
|
15307
15543
|
Tabs: { "role": "tab", "name": { "strategy": "label", "target": '[role="tab"][data-tab-id="overview"]' }, "keyboard": { "Tab": "Move focus to the named native control", "ArrowRight": "Select and focus the next tab" }, "interaction": "interactive", "event": [{ "trigger": "keyboard", "target": '[role="tab"][data-tab-id="overview"]', "key": "Tab", "effect": { "kind": "focus" } }, { "trigger": "keyboard", "target": '[role="tab"][data-tab-id="overview"]', "effect": { "kind": "selected-tab", "value": "billing", "target": '[role="tab"][data-tab-id="billing"]' }, "key": "ArrowRight" }] },
|
|
15308
15544
|
TagInput: { "role": "textbox", "name": { "strategy": "label", "target": "input" }, "keyboard": { "Tab": "Move focus to the named native control", "x": "Edit the named control" }, "interaction": "interactive", "event": [{ "trigger": "keyboard", "target": "input", "key": "Tab", "effect": { "kind": "focus" } }, { "trigger": "keyboard", "target": "input", "effect": { "kind": "event", "value": "bex" }, "key": "x" }] },
|
|
@@ -15348,7 +15584,7 @@ var authoredContracts = {
|
|
|
15348
15584
|
slots: ["default"],
|
|
15349
15585
|
events: [],
|
|
15350
15586
|
states: ["subtle", "solid"],
|
|
15351
|
-
tokenRoles: ["badge.background", "badge.
|
|
15587
|
+
tokenRoles: ["badge.background", "badge.text"],
|
|
15352
15588
|
accessibility: ["Inherits Badge inline noninteractive status label semantics", "The resolved label is always visible text"],
|
|
15353
15589
|
compatibility: "Mirrors renderAddressSummaryBadge over renderBadgePrimitive with default variant address and default label Address: the label reads label/text/role/value in that order, the status reads status/state/role, and both are exposed as data-badge-status and data-badge-variant on the governed Badge substrate; tone and emphasis retain their shared Badge behaviour. The generic field lowers to role (the address role that names the status), so an authored label stays the visible text while the bound role drives data-badge-status; role is the address role, never an ARIA role, on a noninteractive badge."
|
|
15354
15590
|
},
|
|
@@ -15371,7 +15607,7 @@ var authoredContracts = {
|
|
|
15371
15607
|
slots: ["default"],
|
|
15372
15608
|
events: [],
|
|
15373
15609
|
states: ["subtle", "solid"],
|
|
15374
|
-
tokenRoles: ["badge.background", "badge.
|
|
15610
|
+
tokenRoles: ["badge.background", "badge.text"],
|
|
15375
15611
|
accessibility: ["false remains visible", "archive is the badge variant"],
|
|
15376
15612
|
compatibility: "Mirrors renderArchivePill over renderBadgePrimitive: label/text/status/state/isArchived/value label precedence, status/state/isArchived/value status precedence, Archive fallback and archive variant. Boolean flags read Not archived / Archived while preserving their recorded status; absent flags remain absent and authored labels or children win. field binds isArchived. archivedAtField is consumed unbound because the HTML pill has no date term. Noninteractive; no archive or restore action."
|
|
15377
15613
|
},
|
|
@@ -15438,7 +15674,7 @@ var authoredContracts = {
|
|
|
15438
15674
|
slots: ["default"],
|
|
15439
15675
|
events: [],
|
|
15440
15676
|
states: ["subtle", "solid"],
|
|
15441
|
-
tokenRoles: ["badge.background", "badge.
|
|
15677
|
+
tokenRoles: ["badge.background", "badge.text", "badge.icon"],
|
|
15442
15678
|
accessibility: ["Inline noninteractive status label", "Decorative icons are hidden from assistive technology"],
|
|
15443
15679
|
compatibility: "The existing React status registry is the starting implementation."
|
|
15444
15680
|
},
|
|
@@ -15515,7 +15751,7 @@ var authoredContracts = {
|
|
|
15515
15751
|
slots: ["default"],
|
|
15516
15752
|
events: [],
|
|
15517
15753
|
states: ["subtle", "solid"],
|
|
15518
|
-
tokenRoles: ["badge.background", "badge.
|
|
15754
|
+
tokenRoles: ["badge.background", "badge.text"],
|
|
15519
15755
|
accessibility: ["false remains visible", "cancellation is the badge variant"],
|
|
15520
15756
|
compatibility: "Mirrors renderCancellationBadge over renderBadgePrimitive: label/text/status/state/cancelAtPeriodEnd/value label precedence; status/state/cancelAtPeriodEnd/isCancelled/value status precedence; Cancellation fallback and cancellation variant. Boolean flags read No cancellation scheduled / Cancellation scheduled while preserving their recorded status; absent flags remain absent. field binds cancelAtPeriodEnd. Authored labels or children win. Noninteractive; no cancellation action."
|
|
15521
15757
|
},
|
|
@@ -15584,7 +15820,7 @@ var authoredContracts = {
|
|
|
15584
15820
|
slots: ["default"],
|
|
15585
15821
|
events: [],
|
|
15586
15822
|
states: ["subtle", "solid"],
|
|
15587
|
-
tokenRoles: ["badge.background", "badge.
|
|
15823
|
+
tokenRoles: ["badge.background", "badge.text"],
|
|
15588
15824
|
accessibility: ["category is visible", "mode is the status metadata", "noninteractive badge"],
|
|
15589
15825
|
compatibility: "Mirrors renderClassificationBadge over Badge: label/text/category/value precedence, status/state/mode precedence and classification variant. primaryCategoryField binds category; tagPreviewField is consumed unbound because the HTML badge reads no tag preview. Noninteractive."
|
|
15590
15826
|
},
|
|
@@ -15629,7 +15865,7 @@ var authoredContracts = {
|
|
|
15629
15865
|
slots: ["default"],
|
|
15630
15866
|
events: [],
|
|
15631
15867
|
states: ["subtle", "solid"],
|
|
15632
|
-
tokenRoles: ["badge.background", "badge.
|
|
15868
|
+
tokenRoles: ["badge.background", "badge.text", "badge.icon", "badge.color"],
|
|
15633
15869
|
accessibility: ["Inherits Badge inline noninteractive status label semantics", "A visible text label always accompanies the decorative color marker", "Color is never the sole status signal"],
|
|
15634
15870
|
compatibility: "Mirrors renderColorizedBadge over renderBadgePrimitive label/status/color aliases and default variant colorized; Badge tone and emphasis retain their shared behavior."
|
|
15635
15871
|
},
|
|
@@ -15668,6 +15904,18 @@ var authoredContracts = {
|
|
|
15668
15904
|
accessibility: ["A real heading element follows as/level with default h2", "Subtitle and metadata remain visible beside the heading"],
|
|
15669
15905
|
compatibility: "Mirrors renderDetailHeader title/subtitle/metadata aliases and headingTag(level, 2); saved-schema as selects a heading element, and authored default-slot content is preserved. Saved-schema titleField and subtitleField lower to title and subtitle, and an integer headingLevel lowers to level; none of the three is a public prop."
|
|
15670
15906
|
},
|
|
15907
|
+
Dialog: {
|
|
15908
|
+
id: "Dialog",
|
|
15909
|
+
version: COMPONENT_CONTRACT_VERSION,
|
|
15910
|
+
requiredProps: ["title"],
|
|
15911
|
+
props: ["id", "open", "modal", "title", "description", "dismissLabel", "size", "actions"],
|
|
15912
|
+
slots: ["default", "actions"],
|
|
15913
|
+
events: ["close"],
|
|
15914
|
+
states: ["open", "closed"],
|
|
15915
|
+
tokenRoles: ["dialog.background", "dialog.border", "dialog.shadow", "dialog.backdrop", "dialog.title", "dialog.description"],
|
|
15916
|
+
accessibility: ["A native dialog element named by its h2 title (aria-labelledby) and described by its description (aria-describedby)", "The close control is a ghost icon button named by dismissLabel (default Close)", "Escape and the close control emit close"],
|
|
15917
|
+
compatibility: "The consumer owns open: the close control, Escape and a browser close request emit close, and the dialog stays open until open becomes false. modal (default true) opens it in the browser with showModal(), over a backdrop with the page behind it inert; modal false shows it in place, which a gallery or a static page uses. Server-rendered and static HTML carry the open attribute while open. size sets the largest inline size: sm 400px, md 512px or lg 640px. The default slot is the body; the actions slot (or the actions prop) is the right-aligned footer, and the HTML renderer draws a string or { label, intent } list there as buttons."
|
|
15918
|
+
},
|
|
15671
15919
|
FilterPanel: {
|
|
15672
15920
|
id: "FilterPanel",
|
|
15673
15921
|
version: COMPONENT_CONTRACT_VERSION,
|
|
@@ -15778,7 +16026,7 @@ var authoredContracts = {
|
|
|
15778
16026
|
slots: ["default"],
|
|
15779
16027
|
events: [],
|
|
15780
16028
|
states: ["subtle", "solid"],
|
|
15781
|
-
tokenRoles: ["badge.background", "badge.
|
|
16029
|
+
tokenRoles: ["badge.background", "badge.text"],
|
|
15782
16030
|
accessibility: ["Inherits Badge inline noninteractive status label semantics", "The resolved label is always visible text"],
|
|
15783
16031
|
compatibility: "Mirrors renderMessageStatusBadge over renderBadgePrimitive with default variant message and default label Message: the label reads label/text/status/delivery/value in that order, the status reads status/state/delivery/value, and both are exposed as data-badge-status and data-badge-variant on the governed Badge substrate; tone and emphasis retain their shared Badge behaviour. The saved-schema directive statusesField is consumed and left unbound: the HTML renderer reads no statuses collection."
|
|
15784
16032
|
},
|
|
@@ -15789,7 +16037,7 @@ var authoredContracts = {
|
|
|
15789
16037
|
slots: ["default"],
|
|
15790
16038
|
events: [],
|
|
15791
16039
|
states: ["subtle", "solid"],
|
|
15792
|
-
tokenRoles: ["badge.background", "badge.
|
|
16040
|
+
tokenRoles: ["badge.background", "badge.text"],
|
|
15793
16041
|
accessibility: ["owner identity is visible", "owner is the badge variant"],
|
|
15794
16042
|
compatibility: "Mirrors renderOwnerBadge over renderBadgePrimitive: label/text/owner/ownerType/value precedence, status/state metadata, owner variant and Owner fallback. ownerIdField lowers to the unchanged owner and a display-only label from the declared reference label or honest unavailability; ownerTypeField lowers to ownerType. The badge is noninteractive; no ownership change is implied."
|
|
15795
16043
|
},
|
|
@@ -15896,7 +16144,7 @@ var authoredContracts = {
|
|
|
15896
16144
|
slots: ["default"],
|
|
15897
16145
|
events: [],
|
|
15898
16146
|
states: ["subtle", "solid"],
|
|
15899
|
-
tokenRoles: ["badge.background", "badge.
|
|
16147
|
+
tokenRoles: ["badge.background", "badge.text"],
|
|
15900
16148
|
accessibility: ["Inherits Badge inline noninteractive status label semantics", "The resolved label is always visible text"],
|
|
15901
16149
|
compatibility: "Mirrors renderPreferenceSummaryBadge over renderBadgePrimitive with default variant preference and default label Preferences: the label reads label/text/namespace/value in that order, the status reads status/state/version, and both are exposed as data-badge-status and data-badge-variant on the governed Badge substrate; tone and emphasis retain their shared Badge behaviour. versionField lowers to version; namespacesField is consumed and left unbound because the renderer reads a scalar namespace alias while the field is the preference_namespaces array."
|
|
15902
16150
|
},
|
|
@@ -15930,7 +16178,7 @@ var authoredContracts = {
|
|
|
15930
16178
|
slots: ["default"],
|
|
15931
16179
|
events: [],
|
|
15932
16180
|
states: ["priced", "missing-price"],
|
|
15933
|
-
tokenRoles: ["badge.background", "badge.
|
|
16181
|
+
tokenRoles: ["badge.background", "badge.text"],
|
|
15934
16182
|
accessibility: ["Formatted amount and currency remain visible text"],
|
|
15935
16183
|
compatibility: "Currency is formatted content; the emitted badge variant remains price."
|
|
15936
16184
|
},
|
|
@@ -15998,7 +16246,7 @@ var authoredContracts = {
|
|
|
15998
16246
|
slots: ["default"],
|
|
15999
16247
|
events: [],
|
|
16000
16248
|
states: ["populated", "fallback"],
|
|
16001
|
-
tokenRoles: ["badge.background", "badge.
|
|
16249
|
+
tokenRoles: ["badge.background", "badge.text"],
|
|
16002
16250
|
accessibility: ["Each role is visible text inside one inline noninteractive group", "An empty list falls back to a visible label"],
|
|
16003
16251
|
compatibility: "Mirrors renderRoleBadgeList: roles, then badges, roleLabels or value (records read label/name/role/value/id, scalars render as text) render one data-role-badge item each inside a span carrying data-badge-variant from variant, then tone, then roles; with no items the label, then text, then Roles is the visible fallback; authored children replace the list. rolesField lowers to roles and fallbackRoleParameter is consumed."
|
|
16004
16252
|
},
|
|
@@ -16071,7 +16319,7 @@ var authoredContracts = {
|
|
|
16071
16319
|
slots: ["default"],
|
|
16072
16320
|
events: [],
|
|
16073
16321
|
states: ["subtle", "solid"],
|
|
16074
|
-
tokenRoles: ["badge.background", "badge.
|
|
16322
|
+
tokenRoles: ["badge.background", "badge.text", "badge.icon"],
|
|
16075
16323
|
accessibility: ["Status label is visible", "Color is not the sole status signal"],
|
|
16076
16324
|
compatibility: "Both targets share the lifecycle status-to-tone table."
|
|
16077
16325
|
},
|
|
@@ -16120,10 +16368,22 @@ var authoredContracts = {
|
|
|
16120
16368
|
accessibility: ["Ordered status events retain chronological semantics", "Current state is named"],
|
|
16121
16369
|
compatibility: "Configures the shared timeline primitive with status-transition semantics."
|
|
16122
16370
|
},
|
|
16371
|
+
Switch: {
|
|
16372
|
+
id: "Switch",
|
|
16373
|
+
version: COMPONENT_CONTRACT_VERSION,
|
|
16374
|
+
requiredProps: ["id", "label"],
|
|
16375
|
+
props: ["id", "label", "checked", "defaultChecked", "required", "disabled", "help", "validation", "size"],
|
|
16376
|
+
slots: ["label", "help", "validation"],
|
|
16377
|
+
events: ["change", "update"],
|
|
16378
|
+
states: ["off", "on", "disabled", "invalid"],
|
|
16379
|
+
tokenRoles: ["switch.track", "switch.thumb", "switch.border", "switch.focus", "field.message"],
|
|
16380
|
+
accessibility: ["A native button with role switch reports its state in aria-checked", "The visible label names the switch; help and error text describe it", "Space and Enter toggle it"],
|
|
16381
|
+
compatibility: "Shares the Checkbox field API for a setting that applies at once: checked (controlled) or defaultChecked (uncontrolled), required, disabled, help and validation, in sizes sm and md. Each toggle emits change and update with the next checked value. The HTML renderer paints the same markup without script, so a static page shows the state and does not toggle."
|
|
16382
|
+
},
|
|
16123
16383
|
Table: {
|
|
16124
16384
|
id: "Table",
|
|
16125
16385
|
version: COMPONENT_CONTRACT_VERSION,
|
|
16126
|
-
props: ["caption", "columns", "rows", "density", "selectable"],
|
|
16386
|
+
props: ["caption", "showCaption", "columns", "rows", "density", "selectable"],
|
|
16127
16387
|
slots: ["caption", "head", "body", "row", "headerCell", "cell"],
|
|
16128
16388
|
events: ["rowActivate"],
|
|
16129
16389
|
states: ["default", "compact", "selectable"],
|
|
@@ -16171,7 +16431,7 @@ var authoredContracts = {
|
|
|
16171
16431
|
slots: ["default"],
|
|
16172
16432
|
events: [],
|
|
16173
16433
|
states: ["populated", "overflow", "empty"],
|
|
16174
|
-
tokenRoles: ["badge.background", "badge.
|
|
16434
|
+
tokenRoles: ["badge.background", "badge.text"],
|
|
16175
16435
|
accessibility: ["Each visible tag is text inside one noninteractive group", "The overflow label is visible text"],
|
|
16176
16436
|
compatibility: "Mirrors renderTagPills with data-summary-type=tag-pills: tags, then value (records read label/name/role/value/id, scalars render as text) render one data-tag-pill each up to maxVisible (a number or numeric string; default every tag); when tags remain, overflowLabel replaces {{ tag_count }} with the total tag count exactly as the HTML renderer does, or +N with the hidden count without a template; authored children replace the pills. The generic field lowers to tags; the saved-schema label is consumed and left unbound because the renderer never reads it."
|
|
16177
16437
|
},
|
|
@@ -16225,35 +16485,35 @@ var authoredContracts = {
|
|
|
16225
16485
|
VizAreaPreview: {
|
|
16226
16486
|
id: "VizAreaPreview",
|
|
16227
16487
|
version: COMPONENT_CONTRACT_VERSION_1_1,
|
|
16228
|
-
props: ["svg", "svgNarrow", "svgWide", "title", "description", "width", "height"],
|
|
16488
|
+
props: ["svg", "svgNarrow", "svgWide", "svgDark", "svgDarkNarrow", "svgDarkWide", "svgHc", "svgHcNarrow", "svgHcWide", "title", "description", "width", "height"],
|
|
16229
16489
|
slots: ["default"],
|
|
16230
16490
|
events: [],
|
|
16231
16491
|
states: ["placeholder", "content"],
|
|
16232
16492
|
tokenRoles: ["preview.frame", "preview.placeholder"],
|
|
16233
16493
|
accessibility: ["The empty frame has a visible text placeholder", "Authored default-slot content preserves its own semantics", "Static SVG renders in a labelled figure with role img and preserves SVG IDs and ARIA", "A title the SVG does not paint is the figure heading (figcaption), so a placed chart names itself outside its pixels"],
|
|
16234
|
-
compatibility: "Mirrors renderVizAreaPreview through renderVizPreview with data-viz-preview-type=area and default dimensions 640x360; the placeholder appears only without authored content. With svg, renders a labelled figure preserving static SVG IDs and ARIA; without svg, the placeholder remains unchanged. svgNarrow is the same chart at the narrow size: the figure shows it instead of svg when its own inline size is at most 600px (a container query), so axis text keeps its size on a phone column. svgWide is the same chart at the wide size: the figure shows it instead of svg when its own inline size is at least 900px, and a figure that carries it fills its column, so a detail chart spans a desktop screen at design scale."
|
|
16494
|
+
compatibility: "Mirrors renderVizAreaPreview through renderVizPreview with data-viz-preview-type=area and default dimensions 640x360; the placeholder appears only without authored content. With svg, renders a labelled figure preserving static SVG IDs and ARIA; without svg, the placeholder remains unchanged. svgNarrow is the same chart at the narrow size: the figure shows it instead of svg when its own inline size is at most 600px (a container query), so axis text keeps its size on a phone column. svgWide is the same chart at the wide size: the figure shows it instead of svg when its own inline size is at least 900px, and a figure that carries it fills its column, so a detail chart spans a desktop screen at design scale. svgDark, svgDarkNarrow and svgDarkWide, and svgHc, svgHcNarrow and svgHcWide, are the same chart drawn in the dark and high-contrast themes: with any of them svg, svgNarrow and svgWide are the light renders, the renders of each theme sit in a data-viz-theme wrapper, and the figure shows the one matching the nearest data-theme."
|
|
16235
16495
|
},
|
|
16236
16496
|
VizAxisControls: { "id": "VizAxisControls", "version": "1.1.0", "props": ["title", "value", "channel", "disabled"], "slots": [], "events": ["change"], "states": ["bound", "editing", "invalid", "disabled"], "tokenRoles": ["input.background", "input.border", "input.text", "input.focus", "field.message"], "accessibility": ["Native labelled controls expose focus and invalid-edit feedback; successful edits emit a typed viz.render input fragment."], "compatibility": "Axis: controls the public Cartesian viz.render fragment, not the legacy HTML placeholder's unimplemented styling fields. The consumer supplies rows and calls the renderer. Opacity uses six bounded presets; fields/colors/scale/chart type preserve sibling input bindings. No consumer action is executed by this component." },
|
|
16237
16497
|
VizAxisSummary: { "id": "VizAxisSummary", "version": "1.1.0", "props": ["title", "value", "channel"], "slots": [], "events": [], "states": ["unbound", "bound"], "tokenRoles": ["surface.panel", "text.body"], "accessibility": ["Visible text renders the authored input fragment without implying an executed chart."], "compatibility": "Read-only recipe renders the same Cartesian viz.render input fragment. Missing bindings remain disclosed; renderer defaults are not fabricated as authored values." },
|
|
16238
16498
|
VizColorControls: { "id": "VizColorControls", "version": "1.1.0", "props": ["title", "value", "channel", "disabled"], "slots": [], "events": ["change"], "states": ["bound", "editing", "invalid", "disabled"], "tokenRoles": ["input.background", "input.border", "input.text", "input.focus", "field.message"], "accessibility": ["Native labelled controls expose focus and invalid-edit feedback; successful edits emit a typed viz.render input fragment."], "compatibility": "Color encoding: controls the public Cartesian viz.render fragment, not the legacy HTML placeholder's unimplemented styling fields. The consumer supplies rows and calls the renderer. Opacity uses six bounded presets; fields/colors/scale/chart type preserve sibling input bindings. No consumer action is executed by this component." },
|
|
16239
16499
|
VizColorLegendConfig: { "id": "VizColorLegendConfig", "version": "1.1.0", "props": ["title", "value", "channel", "disabled"], "slots": [], "events": ["change"], "states": ["bound", "editing", "invalid", "disabled"], "tokenRoles": ["input.background", "input.border", "input.text", "input.focus", "field.message"], "accessibility": ["Native labelled controls expose focus and invalid-edit feedback; successful edits emit a typed viz.render input fragment."], "compatibility": "Color legend: controls the public Cartesian viz.render fragment, not the legacy HTML placeholder's unimplemented styling fields. The consumer supplies rows and calls the renderer. Opacity uses six bounded presets; fields/colors/scale/chart type preserve sibling input bindings. No consumer action is executed by this component." },
|
|
16240
16500
|
VizEncodingBadge: { "id": "VizEncodingBadge", "version": "1.1.0", "props": ["title", "value", "channel"], "slots": [], "events": [], "states": ["unbound", "bound"], "tokenRoles": ["surface.panel", "text.body"], "accessibility": ["Visible text renders the authored input fragment without implying an executed chart."], "compatibility": "Read-only recipe renders the same Cartesian viz.render input fragment. Missing bindings remain disclosed; renderer defaults are not fabricated as authored values." },
|
|
16241
|
-
VizGraphPreview: { "id": "VizGraphPreview", "version": "1.1.0", "props": ["svg", "svgNarrow", "svgWide", "title", "description", "width", "height"], "slots": ["default"], "events": [], "states": ["unbound", "rendered"], "tokenRoles": ["surface.panel", "text.body"], "accessibility": ["Static shared-renderer SVG is preserved inside a named image figure; absence is explicitly disclosed."], "compatibility": "Recipe over VizAreaPreview's static SVG mechanism. VizGraphPreview uses the existing force_graph renderer; this is no new chart family. No pixels are invented when svg is absent." },
|
|
16501
|
+
VizGraphPreview: { "id": "VizGraphPreview", "version": "1.1.0", "props": ["svg", "svgNarrow", "svgWide", "svgDark", "svgDarkNarrow", "svgDarkWide", "svgHc", "svgHcNarrow", "svgHcWide", "title", "description", "width", "height"], "slots": ["default"], "events": [], "states": ["unbound", "rendered"], "tokenRoles": ["surface.panel", "text.body"], "accessibility": ["Static shared-renderer SVG is preserved inside a named image figure; absence is explicitly disclosed."], "compatibility": "Recipe over VizAreaPreview's static SVG mechanism. VizGraphPreview uses the existing force_graph renderer; this is no new chart family. No pixels are invented when svg is absent." },
|
|
16242
16502
|
VizHeatmapControls: { "id": "VizHeatmapControls", "version": "1.1.0", "props": ["title", "value", "channel", "disabled"], "slots": [], "events": ["change"], "states": ["bound", "editing", "invalid", "disabled"], "tokenRoles": ["input.background", "input.border", "input.text", "input.focus", "field.message"], "accessibility": ["Native labelled controls expose focus and invalid-edit feedback; successful edits emit a typed viz.render input fragment."], "compatibility": "Heatmap: controls the public Cartesian viz.render fragment, not the legacy HTML placeholder's unimplemented styling fields. The consumer supplies rows and calls the renderer. Opacity uses six bounded presets; fields/colors/scale/chart type preserve sibling input bindings. No consumer action is executed by this component." },
|
|
16243
|
-
VizHeatmapPreview: { "id": "VizHeatmapPreview", "version": "1.1.0", "props": ["svg", "svgNarrow", "svgWide", "title", "description", "width", "height"], "slots": ["default"], "events": [], "states": ["unbound", "rendered"], "tokenRoles": ["surface.panel", "text.body"], "accessibility": ["Static shared-renderer SVG is preserved inside a named image figure; absence is explicitly disclosed."], "compatibility": "Recipe over VizAreaPreview's static SVG mechanism. VizHeatmapPreview uses the existing heatmap renderer; this is no new chart family. No pixels are invented when svg is absent." },
|
|
16503
|
+
VizHeatmapPreview: { "id": "VizHeatmapPreview", "version": "1.1.0", "props": ["svg", "svgNarrow", "svgWide", "svgDark", "svgDarkNarrow", "svgDarkWide", "svgHc", "svgHcNarrow", "svgHcWide", "title", "description", "width", "height"], "slots": ["default"], "events": [], "states": ["unbound", "rendered"], "tokenRoles": ["surface.panel", "text.body"], "accessibility": ["Static shared-renderer SVG is preserved inside a named image figure; absence is explicitly disclosed."], "compatibility": "Recipe over VizAreaPreview's static SVG mechanism. VizHeatmapPreview uses the existing heatmap renderer; this is no new chart family. No pixels are invented when svg is absent." },
|
|
16244
16504
|
VizLineControls: { "id": "VizLineControls", "version": "1.1.0", "props": ["title", "value", "channel", "disabled"], "slots": [], "events": ["change"], "states": ["bound", "editing", "invalid", "disabled"], "tokenRoles": ["input.background", "input.border", "input.text", "input.focus", "field.message"], "accessibility": ["Native labelled controls expose focus and invalid-edit feedback; successful edits emit a typed viz.render input fragment."], "compatibility": "Line chart: controls the public Cartesian viz.render fragment, not the legacy HTML placeholder's unimplemented styling fields. The consumer supplies rows and calls the renderer. Opacity uses six bounded presets; fields/colors/scale/chart type preserve sibling input bindings. No consumer action is executed by this component." },
|
|
16245
|
-
VizLinePreview: { "id": "VizLinePreview", "version": "1.1.0", "props": ["svg", "svgNarrow", "svgWide", "title", "description", "width", "height"], "slots": ["default"], "events": [], "states": ["unbound", "rendered"], "tokenRoles": ["surface.panel", "text.body"], "accessibility": ["Static shared-renderer SVG is preserved inside a named image figure; absence is explicitly disclosed."], "compatibility": "Recipe over VizAreaPreview's static SVG mechanism. VizLinePreview uses the existing line renderer; this is no new chart family. No pixels are invented when svg is absent." },
|
|
16505
|
+
VizLinePreview: { "id": "VizLinePreview", "version": "1.1.0", "props": ["svg", "svgNarrow", "svgWide", "svgDark", "svgDarkNarrow", "svgDarkWide", "svgHc", "svgHcNarrow", "svgHcWide", "title", "description", "width", "height"], "slots": ["default"], "events": [], "states": ["unbound", "rendered"], "tokenRoles": ["surface.panel", "text.body"], "accessibility": ["Static shared-renderer SVG is preserved inside a named image figure; absence is explicitly disclosed."], "compatibility": "Recipe over VizAreaPreview's static SVG mechanism. VizLinePreview uses the existing line renderer; this is no new chart family. No pixels are invented when svg is absent." },
|
|
16246
16506
|
VizMarkControls: { "id": "VizMarkControls", "version": "1.1.0", "props": ["title", "value", "channel", "disabled"], "slots": [], "events": ["change"], "states": ["bound", "editing", "invalid", "disabled"], "tokenRoles": ["input.background", "input.border", "input.text", "input.focus", "field.message"], "accessibility": ["Native labelled controls expose focus and invalid-edit feedback; successful edits emit a typed viz.render input fragment."], "compatibility": "Chart mark: controls the public Cartesian viz.render fragment, not the legacy HTML placeholder's unimplemented styling fields. The consumer supplies rows and calls the renderer. Opacity uses six bounded presets; fields/colors/scale/chart type preserve sibling input bindings. No consumer action is executed by this component." },
|
|
16247
|
-
VizMarkPreview: { "id": "VizMarkPreview", "version": "1.1.0", "props": ["svg", "svgNarrow", "svgWide", "title", "description", "width", "height"], "slots": ["default"], "events": [], "states": ["unbound", "rendered"], "tokenRoles": ["surface.panel", "text.body"], "accessibility": ["Static shared-renderer SVG is preserved inside a named image figure; absence is explicitly disclosed."], "compatibility": "Recipe over VizAreaPreview's static SVG mechanism. VizMarkPreview uses the existing bar renderer; this is no new chart family. No pixels are invented when svg is absent." },
|
|
16507
|
+
VizMarkPreview: { "id": "VizMarkPreview", "version": "1.1.0", "props": ["svg", "svgNarrow", "svgWide", "svgDark", "svgDarkNarrow", "svgDarkWide", "svgHc", "svgHcNarrow", "svgHcWide", "title", "description", "width", "height"], "slots": ["default"], "events": [], "states": ["unbound", "rendered"], "tokenRoles": ["surface.panel", "text.body"], "accessibility": ["Static shared-renderer SVG is preserved inside a named image figure; absence is explicitly disclosed."], "compatibility": "Recipe over VizAreaPreview's static SVG mechanism. VizMarkPreview uses the existing bar renderer; this is no new chart family. No pixels are invented when svg is absent." },
|
|
16248
16508
|
VizOpacityControls: { "id": "VizOpacityControls", "version": "1.1.0", "props": ["title", "value", "channel", "disabled"], "slots": [], "events": ["change"], "states": ["bound", "editing", "invalid", "disabled"], "tokenRoles": ["input.background", "input.border", "input.text", "input.focus", "field.message"], "accessibility": ["Native labelled controls expose focus and invalid-edit feedback; successful edits emit a typed viz.render input fragment."], "compatibility": "Mark opacity: controls the public Cartesian viz.render fragment, not the legacy HTML placeholder's unimplemented styling fields. The consumer supplies rows and calls the renderer. Opacity uses six bounded presets; fields/colors/scale/chart type preserve sibling input bindings. No consumer action is executed by this component." },
|
|
16249
16509
|
VizOpacitySummary: { "id": "VizOpacitySummary", "version": "1.1.0", "props": ["title", "value", "channel"], "slots": [], "events": [], "states": ["unbound", "bound"], "tokenRoles": ["surface.panel", "text.body"], "accessibility": ["Visible text renders the authored input fragment without implying an executed chart."], "compatibility": "Read-only recipe renders the same Cartesian viz.render input fragment. Missing bindings remain disclosed; renderer defaults are not fabricated as authored values." },
|
|
16250
16510
|
VizPointControls: { "id": "VizPointControls", "version": "1.1.0", "props": ["title", "value", "channel", "disabled"], "slots": [], "events": ["change"], "states": ["bound", "editing", "invalid", "disabled"], "tokenRoles": ["input.background", "input.border", "input.text", "input.focus", "field.message"], "accessibility": ["Native labelled controls expose focus and invalid-edit feedback; successful edits emit a typed viz.render input fragment."], "compatibility": "Point chart: controls the public Cartesian viz.render fragment, not the legacy HTML placeholder's unimplemented styling fields. The consumer supplies rows and calls the renderer. Opacity uses six bounded presets; fields/colors/scale/chart type preserve sibling input bindings. No consumer action is executed by this component." },
|
|
16251
|
-
VizPointPreview: { "id": "VizPointPreview", "version": "1.1.0", "props": ["svg", "svgNarrow", "svgWide", "title", "description", "width", "height"], "slots": ["default"], "events": [], "states": ["unbound", "rendered"], "tokenRoles": ["surface.panel", "text.body"], "accessibility": ["Static shared-renderer SVG is preserved inside a named image figure; absence is explicitly disclosed."], "compatibility": "Recipe over VizAreaPreview's static SVG mechanism. VizPointPreview uses the existing scatter renderer; this is no new chart family. No pixels are invented when svg is absent." },
|
|
16511
|
+
VizPointPreview: { "id": "VizPointPreview", "version": "1.1.0", "props": ["svg", "svgNarrow", "svgWide", "svgDark", "svgDarkNarrow", "svgDarkWide", "svgHc", "svgHcNarrow", "svgHcWide", "title", "description", "width", "height"], "slots": ["default"], "events": [], "states": ["unbound", "rendered"], "tokenRoles": ["surface.panel", "text.body"], "accessibility": ["Static shared-renderer SVG is preserved inside a named image figure; absence is explicitly disclosed."], "compatibility": "Recipe over VizAreaPreview's static SVG mechanism. VizPointPreview uses the existing scatter renderer; this is no new chart family. No pixels are invented when svg is absent." },
|
|
16252
16512
|
VizRoleBadge: { "id": "VizRoleBadge", "version": "1.1.0", "props": ["title", "value", "channel"], "slots": [], "events": [], "states": ["unbound", "bound"], "tokenRoles": ["surface.panel", "text.body"], "accessibility": ["Visible text renders the authored input fragment without implying an executed chart."], "compatibility": "Read-only recipe renders the same Cartesian viz.render input fragment. Missing bindings remain disclosed; renderer defaults are not fabricated as authored values." },
|
|
16253
16513
|
VizScaleControls: { "id": "VizScaleControls", "version": "1.1.0", "props": ["title", "value", "channel", "disabled"], "slots": [], "events": ["change"], "states": ["bound", "editing", "invalid", "disabled"], "tokenRoles": ["input.background", "input.border", "input.text", "input.focus", "field.message"], "accessibility": ["Native labelled controls expose focus and invalid-edit feedback; successful edits emit a typed viz.render input fragment."], "compatibility": "Scale: controls the public Cartesian viz.render fragment, not the legacy HTML placeholder's unimplemented styling fields. The consumer supplies rows and calls the renderer. Opacity uses six bounded presets; fields/colors/scale/chart type preserve sibling input bindings. No consumer action is executed by this component." },
|
|
16254
16514
|
VizScaleSummary: { "id": "VizScaleSummary", "version": "1.1.0", "props": ["title", "value", "channel"], "slots": [], "events": [], "states": ["unbound", "bound"], "tokenRoles": ["surface.panel", "text.body"], "accessibility": ["Visible text renders the authored input fragment without implying an executed chart."], "compatibility": "Read-only recipe renders the same Cartesian viz.render input fragment. Missing bindings remain disclosed; renderer defaults are not fabricated as authored values." },
|
|
16255
16515
|
VizScatterControls: { "id": "VizScatterControls", "version": "1.1.0", "props": ["title", "value", "channel", "disabled"], "slots": [], "events": ["change"], "states": ["bound", "editing", "invalid", "disabled"], "tokenRoles": ["input.background", "input.border", "input.text", "input.focus", "field.message"], "accessibility": ["Native labelled controls expose focus and invalid-edit feedback; successful edits emit a typed viz.render input fragment."], "compatibility": "Scatter chart: controls the public Cartesian viz.render fragment, not the legacy HTML placeholder's unimplemented styling fields. The consumer supplies rows and calls the renderer. Opacity uses six bounded presets; fields/colors/scale/chart type preserve sibling input bindings. No consumer action is executed by this component." },
|
|
16256
|
-
VizScatterPreview: { "id": "VizScatterPreview", "version": "1.1.0", "props": ["svg", "svgNarrow", "svgWide", "title", "description", "width", "height"], "slots": ["default"], "events": [], "states": ["unbound", "rendered"], "tokenRoles": ["surface.panel", "text.body"], "accessibility": ["Static shared-renderer SVG is preserved inside a named image figure; absence is explicitly disclosed."], "compatibility": "Recipe over VizAreaPreview's static SVG mechanism. VizScatterPreview uses the existing scatter renderer; this is no new chart family. No pixels are invented when svg is absent." },
|
|
16516
|
+
VizScatterPreview: { "id": "VizScatterPreview", "version": "1.1.0", "props": ["svg", "svgNarrow", "svgWide", "svgDark", "svgDarkNarrow", "svgDarkWide", "svgHc", "svgHcNarrow", "svgHcWide", "title", "description", "width", "height"], "slots": ["default"], "events": [], "states": ["unbound", "rendered"], "tokenRoles": ["surface.panel", "text.body"], "accessibility": ["Static shared-renderer SVG is preserved inside a named image figure; absence is explicitly disclosed."], "compatibility": "Recipe over VizAreaPreview's static SVG mechanism. VizScatterPreview uses the existing scatter renderer; this is no new chart family. No pixels are invented when svg is absent." },
|
|
16257
16517
|
VizShapeControls: { "id": "VizShapeControls", "version": "1.1.0", "props": ["title", "value", "channel", "disabled"], "slots": [], "events": ["change"], "states": ["bound", "editing", "invalid", "disabled"], "tokenRoles": ["input.background", "input.border", "input.text", "input.focus", "field.message"], "accessibility": ["Native labelled controls expose focus and invalid-edit feedback; successful edits emit a typed viz.render input fragment."], "compatibility": "Shape encoding: controls the public Cartesian viz.render fragment, not the legacy HTML placeholder's unimplemented styling fields. The consumer supplies rows and calls the renderer. Opacity uses six bounded presets; fields/colors/scale/chart type preserve sibling input bindings. No consumer action is executed by this component." },
|
|
16258
16518
|
VizShapeLegend: { "id": "VizShapeLegend", "version": "1.1.0", "props": ["title", "value", "channel", "disabled"], "slots": [], "events": ["change"], "states": ["bound", "editing", "invalid", "disabled"], "tokenRoles": ["input.background", "input.border", "input.text", "input.focus", "field.message"], "accessibility": ["Native labelled controls expose focus and invalid-edit feedback; successful edits emit a typed viz.render input fragment."], "compatibility": "Shape legend: controls the public Cartesian viz.render fragment, not the legacy HTML placeholder's unimplemented styling fields. The consumer supplies rows and calls the renderer. Opacity uses six bounded presets; fields/colors/scale/chart type preserve sibling input bindings. No consumer action is executed by this component." },
|
|
16259
16519
|
VizSizeControls: { "id": "VizSizeControls", "version": "1.1.0", "props": ["title", "value", "channel", "disabled"], "slots": [], "events": ["change"], "states": ["bound", "editing", "invalid", "disabled"], "tokenRoles": ["input.background", "input.border", "input.text", "input.focus", "field.message"], "accessibility": ["Native labelled controls expose focus and invalid-edit feedback; successful edits emit a typed viz.render input fragment."], "compatibility": "Size encoding: controls the public Cartesian viz.render fragment, not the legacy HTML placeholder's unimplemented styling fields. The consumer supplies rows and calls the renderer. Opacity uses six bounded presets; fields/colors/scale/chart type preserve sibling input bindings. No consumer action is executed by this component." },
|
|
@@ -16337,7 +16597,7 @@ var viz_preview_samples_v1_default = {
|
|
|
16337
16597
|
input: {
|
|
16338
16598
|
name: "Example connected relationships",
|
|
16339
16599
|
description: "Synthetic neighborhood edges illustrating relationships that share an endpoint; these are examples, not live graph data."},
|
|
16340
|
-
svg: '<svg width="360" height="200" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" baseProfile="full" viewBox="0 0 360 200" role="img" aria-label="Example connected relationships" aria-description="Synthetic neighborhood edges illustrating relationships that share an endpoint; these are examples, not live graph data."><title>Example connected relationships</title><desc>Synthetic neighborhood edges illustrating relationships that share an endpoint; these are examples, not live graph data.</desc>\n<rect width="360" height="200" x="0" y="0" fill="#
|
|
16600
|
+
svg: '<svg width="360" height="200" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" baseProfile="full" viewBox="0 0 360 200" role="img" aria-label="Example connected relationships" aria-description="Synthetic neighborhood edges illustrating relationships that share an endpoint; these are examples, not live graph data."><title>Example connected relationships</title><desc>Synthetic neighborhood edges illustrating relationships that share an endpoint; these are examples, not live graph data.</desc>\n<rect width="360" height="200" x="0" y="0" fill="#FFFFFF"></rect>\n<path d="M239.2 59.3Q245.2 127.2 188.1 164.5" fill="none" pointer-events="visible" stroke="rgb(62, 99, 221)" stroke-opacity="0.75" ecmeta_series_index="0" ecmeta_data_index="0" ecmeta_ssr_type="chart" class="oods-zr-0"></path>\n<path d="M188.1 164.5Q123.9 143 112.7 76.2" fill="none" pointer-events="visible" stroke="rgb(62, 99, 221)" stroke-opacity="0.75" ecmeta_series_index="0" ecmeta_data_index="1" ecmeta_ssr_type="chart" class="oods-zr-0"></path>\n<path d="M112.7 76.2Q176.9 97.7 188.1 164.5" fill="none" pointer-events="visible" stroke="rgb(62, 99, 221)" stroke-opacity="0.75" ecmeta_series_index="0" ecmeta_data_index="2" ecmeta_ssr_type="chart" class="oods-zr-0"></path>\n<path d="M1 0A1 1 0 1 1 1 -0.1A1 1 0 0 1 1 0" transform="matrix(5,0,0,5,112.6711,76.2258)" fill="rgb(62, 99, 221)" ecmeta_series_index="0" ecmeta_data_index="0" ecmeta_ssr_type="chart" class="oods-zr-1"></path>\n<path d="M1 0A1 1 0 1 1 1 -0.1A1 1 0 0 1 1 0" transform="matrix(5,0,0,5,188.0808,164.5013)" fill="rgb(62, 99, 221)" ecmeta_series_index="0" ecmeta_data_index="1" ecmeta_ssr_type="chart" class="oods-zr-1"></path>\n<path d="M1 0A1 1 0 1 1 1 -0.1A1 1 0 0 1 1 0" transform="matrix(5,0,0,5,239.241,59.2736)" fill="rgb(62, 99, 221)" ecmeta_series_index="0" ecmeta_data_index="2" ecmeta_ssr_type="chart" class="oods-zr-1"></path>\n<text dominant-baseline="central" text-anchor="start" style="font-size:12px;font-family:sans-serif;" transform="translate(122.6711 76.2258)" fill="#0A0A0A">example-document</text>\n<text dominant-baseline="central" text-anchor="start" style="font-size:12px;font-family:sans-serif;" transform="translate(198.0808 164.5013)" fill="#0A0A0A">example-project</text>\n<text dominant-baseline="central" text-anchor="start" style="font-size:12px;font-family:sans-serif;" transform="translate(249.241 59.2736)" fill="#0A0A0A">example-team</text>\n<path d="M-108.1 -5l216.2 0l0 24l-216.2 0Z" transform="translate(180 13)" fill="rgb(0,0,0)" fill-opacity="0" stroke="#3c3c41" stroke-width="0" class="oods-zr-2"></path>\n<text dominant-baseline="central" text-anchor="middle" style="font-size:14px;font-family:sans-serif;font-weight:600;" xml:space="preserve" y="7" transform="translate(180 13)" fill="#0A0A0A">Example connected relationships</text>\n<style ><![CDATA[\n.oods-zr-0:hover {\ncursor:pointer;\nstroke-width:4;\n}\n.oods-zr-1:hover {\ncursor:pointer;\nfill:rgba(68,108,243,1);\n}\n.oods-zr-2:hover {\npointer-events:none;\n}\n\n]]>\n\n</style>\n</svg>'}
|
|
16341
16601
|
}
|
|
16342
16602
|
};
|
|
16343
16603
|
|
|
@@ -16419,6 +16679,10 @@ var authoredScenarios = [
|
|
|
16419
16679
|
{ id: "card-elevated-content", oodsComponentId: "Card", props: { elevated: true }, slots: { default: "Account summary" }, initialState: { elevated: true }, renderExpectation: { name: "render", trigger: "mount", expected: "semantic container with visible content" }, assertions: ["content is not empty", "elevated state is exposed"] },
|
|
16420
16680
|
{ id: "card-header-supporting-text", oodsComponentId: "CardHeader", props: { title: "Account summary", supportingText: "Current subscription" }, slots: {}, initialState: { heading: "h2" }, renderExpectation: { name: "render", trigger: "mount", expected: "h2 heading and visible supporting text" }, assertions: ["title is a real h2 heading", "supporting text is visible"] },
|
|
16421
16681
|
{ id: "checkbox-controlled", oodsComponentId: "Checkbox", props: { id: "marketing", label: "Product updates", checked: false, required: true, help: "Choose whether to subscribe" }, slots: {}, initialState: { checked: false }, renderExpectation: { name: "change", trigger: "click checkbox", expected: "checked=true emitted once" }, assertions: ["label targets input", "help describes input"] },
|
|
16682
|
+
// s222-m02 (#2502 ruling 11): the two components 0.4.0 adds. The dialog example is shown in place (modal false), as a
|
|
16683
|
+
// gallery shows it; modal true is the default.
|
|
16684
|
+
{ id: "dialog-confirm", oodsComponentId: "Dialog", props: { id: "archive-workspace", open: true, modal: false, title: "Archive workspace", description: "Members lose access until the workspace is restored.", size: "sm" }, slots: { default: "Invoices and subscriptions stay in the archive for 30 days.", actions: ["Cancel", "Archive workspace"] }, initialState: { open: true }, renderExpectation: { name: "close", trigger: "activate the close button or press Escape", expected: "close emitted once; the dialog stays open until open becomes false" }, assertions: ["the dialog is named by its title and described by its description", "the close button is named", "the actions sit in the footer"] },
|
|
16685
|
+
{ id: "switch-controlled", oodsComponentId: "Switch", props: { id: "payment-alerts", label: "Payment alerts", checked: false, help: "Email the account owner when a payment fails" }, slots: {}, initialState: { checked: false }, renderExpectation: { name: "change", trigger: "click the switch or press Space or Enter", expected: "checked=true emitted once" }, assertions: ["role switch reports aria-checked", "the label names the switch", "help describes the switch"] },
|
|
16422
16686
|
{ id: "classification-badge-category", oodsComponentId: "ClassificationBadge", props: { "category": "Electronics", "mode": "strict" }, slots: {}, initialState: { "content": "populated" }, renderExpectation: { "name": "render", "trigger": "mount", "expected": "category is visible; mode is the status metadata; noninteractive badge" }, assertions: ["category is visible", "mode is the status metadata", "noninteractive badge"] },
|
|
16423
16687
|
{ id: "classification-editor-presentational-controls", oodsComponentId: "ClassificationEditor", props: { "title": "Product classification", "category": "Electronics", "tags": ["alpha", "beta"], "mode": "flexible" }, slots: {}, initialState: { "content": "populated" }, renderExpectation: { "name": "render", "trigger": "mount", "expected": "labelled native inputs retain their values; mode selection is flexible; submit does not navigate or save" }, assertions: ["labelled native inputs retain their values", "mode selection is flexible", "submit does not navigate or save"] },
|
|
16424
16688
|
{ id: "classification-panel-title-and-summary", oodsComponentId: "ClassificationPanel", props: { title: "Classification", subtitle: "Taxonomy and tags", summary: "Electronics > Mobile > Android" }, slots: {}, initialState: { content: "summary" }, renderExpectation: { name: "render", trigger: "mount without authored children", expected: "h2 heading, visible subtitle and the summary text inside the content area" }, assertions: ["title is a real h2 heading", "data-panel-type is classification", "summary text is visible", "panel is noninteractive"] },
|
|
@@ -16527,6 +16791,18 @@ var sharedScenarios = [...authoredScenarios].sort((a, b) => a.oodsComponentId <
|
|
|
16527
16791
|
event: behavior.event
|
|
16528
16792
|
};
|
|
16529
16793
|
});
|
|
16794
|
+
var relativeTimestampEmptyScenario = {
|
|
16795
|
+
id: "relative-timestamp-empty",
|
|
16796
|
+
oodsComponentId: "RelativeTimestamp",
|
|
16797
|
+
props: { datetime: "" },
|
|
16798
|
+
slots: {},
|
|
16799
|
+
initialState: { content: "empty" },
|
|
16800
|
+
renderExpectation: { name: "render", trigger: "mount with an empty datetime", expected: "Unknown time is visible and no datetime attribute is emitted" },
|
|
16801
|
+
assertions: ["an empty value reads Unknown time", "an empty datetime is omitted, never emitted empty"],
|
|
16802
|
+
interaction: componentBehaviors.RelativeTimestamp.interaction,
|
|
16803
|
+
interactionReason: componentBehaviors.RelativeTimestamp.interactionReason,
|
|
16804
|
+
event: componentBehaviors.RelativeTimestamp.event
|
|
16805
|
+
};
|
|
16530
16806
|
|
|
16531
16807
|
// src/ported-contracts.ts
|
|
16532
16808
|
var portedComponentContracts = Object.fromEntries(
|
|
@@ -16583,6 +16859,453 @@ var RESULT_STATES = ["violation", "passed", "needs_review", "not_applicable", "n
|
|
|
16583
16859
|
var RESULT_STATE_TONE = "neutral";
|
|
16584
16860
|
var SEVERITY_TONES = ["positive", "success", "warning", "critical", "danger"];
|
|
16585
16861
|
|
|
16862
|
+
// src/status-icons.ts
|
|
16863
|
+
var path = (d) => ({ tag: "path", attrs: { d } });
|
|
16864
|
+
var circle = (cx, cy, r, filled = false) => ({
|
|
16865
|
+
tag: "circle",
|
|
16866
|
+
attrs: filled ? { cx, cy, r, fill: "currentColor", stroke: "none" } : { cx, cy, r }
|
|
16867
|
+
});
|
|
16868
|
+
var STATUS_ICON_SHAPES = Object.freeze({
|
|
16869
|
+
check: [path("M3.5 8.5l3 3 6-7")],
|
|
16870
|
+
x: [path("M4.5 4.5l7 7M11.5 4.5l-7 7")],
|
|
16871
|
+
alert: [path("M8 2.5l6 11H2z"), path("M8 6.5v3"), circle("8", "11.5", "0.75", true)],
|
|
16872
|
+
info: [circle("8", "8", "6"), path("M8 7.5V11"), circle("8", "5", "0.75", true)],
|
|
16873
|
+
clock: [circle("8", "8", "6"), path("M8 5v3l2 1.5")],
|
|
16874
|
+
dots: [circle("4", "8", "1", true), circle("8", "8", "1", true), circle("12", "8", "1", true)],
|
|
16875
|
+
refresh: [path("M13 8a5 5 0 1 1-1.5-3.5"), path("M13 2.5v3h-3")],
|
|
16876
|
+
pause: [path("M6 4v8M10 4v8")],
|
|
16877
|
+
ban: [circle("8", "8", "6"), path("M3.8 12.2l8.4-8.4")],
|
|
16878
|
+
pencil: [path("M10.5 3L13 5.5 6 12.5H3.5V10z")],
|
|
16879
|
+
star: [path("M8 2.5l1.7 3.5 3.8.5-2.8 2.6.7 3.8L8 11.1l-3.4 1.8.7-3.8-2.8-2.6 3.8-.5z")],
|
|
16880
|
+
undo: [path("M3 8a5 5 0 1 0 1.5-3.5"), path("M3 2.5v3h3")],
|
|
16881
|
+
lock: [{ tag: "rect", attrs: { x: "3.5", y: "7", width: "9", height: "6.5", rx: "1.5" } }, path("M5.5 7V5a2.5 2.5 0 0 1 5 0v2")],
|
|
16882
|
+
unlock: [{ tag: "rect", attrs: { x: "3.5", y: "7", width: "9", height: "6.5", rx: "1.5" } }, path("M5.5 7V5a2.5 2.5 0 0 1 4.8-1")],
|
|
16883
|
+
dot: [circle("8", "8", "2.5", true)]
|
|
16884
|
+
});
|
|
16885
|
+
var STATUS_ICON_SVG_ATTRS = Object.freeze({
|
|
16886
|
+
width: "1em",
|
|
16887
|
+
height: "1em",
|
|
16888
|
+
viewBox: "0 0 16 16",
|
|
16889
|
+
fill: "none",
|
|
16890
|
+
stroke: "currentColor",
|
|
16891
|
+
"stroke-width": "1.5",
|
|
16892
|
+
"stroke-linecap": "round",
|
|
16893
|
+
"stroke-linejoin": "round",
|
|
16894
|
+
"aria-hidden": "true",
|
|
16895
|
+
focusable: "false"
|
|
16896
|
+
});
|
|
16897
|
+
var STATUS_ICON_ALIASES = Object.freeze({
|
|
16898
|
+
success: "check",
|
|
16899
|
+
paid: "check",
|
|
16900
|
+
warning: "alert",
|
|
16901
|
+
critical: "x",
|
|
16902
|
+
danger: "x",
|
|
16903
|
+
error: "x",
|
|
16904
|
+
negative: "x",
|
|
16905
|
+
pending: "dots",
|
|
16906
|
+
processing: "refresh",
|
|
16907
|
+
paused: "pause",
|
|
16908
|
+
canceled: "ban",
|
|
16909
|
+
cancelled: "ban",
|
|
16910
|
+
void: "ban",
|
|
16911
|
+
draft: "pencil",
|
|
16912
|
+
info: "info",
|
|
16913
|
+
trial: "star",
|
|
16914
|
+
future: "clock",
|
|
16915
|
+
scheduled: "clock",
|
|
16916
|
+
refunded: "undo",
|
|
16917
|
+
locked: "lock",
|
|
16918
|
+
unlocked: "unlock",
|
|
16919
|
+
default: "dot"
|
|
16920
|
+
});
|
|
16921
|
+
function resolveStatusIcon(iconName) {
|
|
16922
|
+
const segment = iconName?.split(".").pop()?.toLowerCase();
|
|
16923
|
+
if (!segment) return void 0;
|
|
16924
|
+
return STATUS_ICON_ALIASES[segment] ?? "dot";
|
|
16925
|
+
}
|
|
16926
|
+
var escapeAttribute = (value) => value.replace(/&/g, "&").replace(/"/g, """).replace(/</g, "<");
|
|
16927
|
+
var attributes = (attrs) => Object.entries(attrs).map(([name, value]) => ` ${name}="${escapeAttribute(value)}"`).join("");
|
|
16928
|
+
function statusIconMarkup(name) {
|
|
16929
|
+
const shapes = STATUS_ICON_SHAPES[name].map((shape) => `<${shape.tag}${attributes(shape.attrs)}></${shape.tag}>`).join("");
|
|
16930
|
+
return `<svg${attributes(STATUS_ICON_SVG_ATTRS)}>${shapes}</svg>`;
|
|
16931
|
+
}
|
|
16932
|
+
|
|
16933
|
+
// registry/status-map.json
|
|
16934
|
+
var status_map_default = {
|
|
16935
|
+
domains: {
|
|
16936
|
+
subscription: {
|
|
16937
|
+
future: {
|
|
16938
|
+
description: "Subscription is scheduled but not yet active.",
|
|
16939
|
+
chip: {
|
|
16940
|
+
foreground: "color.text.info",
|
|
16941
|
+
background: "color.background.info.subtle",
|
|
16942
|
+
border: "color.border.info",
|
|
16943
|
+
icon: "icon.status.scheduled"
|
|
16944
|
+
},
|
|
16945
|
+
banner: {
|
|
16946
|
+
foreground: "color.text.info",
|
|
16947
|
+
background: "color.background.surface.default",
|
|
16948
|
+
border: "color.border.info",
|
|
16949
|
+
icon: "icon.status.scheduled"
|
|
16950
|
+
}
|
|
16951
|
+
},
|
|
16952
|
+
trialing: {
|
|
16953
|
+
description: "Subscription is in a trial period before billing begins.",
|
|
16954
|
+
chip: {
|
|
16955
|
+
foreground: "color.text.accent",
|
|
16956
|
+
background: "color.background.accent.subtle",
|
|
16957
|
+
border: "color.border.accent",
|
|
16958
|
+
icon: "icon.status.trial"
|
|
16959
|
+
},
|
|
16960
|
+
banner: {
|
|
16961
|
+
foreground: "color.text.accent",
|
|
16962
|
+
background: "color.background.surface.default",
|
|
16963
|
+
border: "color.border.accent",
|
|
16964
|
+
icon: "icon.status.trial"
|
|
16965
|
+
}
|
|
16966
|
+
},
|
|
16967
|
+
active: {
|
|
16968
|
+
description: "Subscription is paid and service is provisioned.",
|
|
16969
|
+
chip: {
|
|
16970
|
+
foreground: "color.text.positive",
|
|
16971
|
+
background: "color.background.positive.subtle",
|
|
16972
|
+
border: "color.border.positive",
|
|
16973
|
+
icon: "icon.status.success"
|
|
16974
|
+
},
|
|
16975
|
+
banner: {
|
|
16976
|
+
foreground: "color.text.positive",
|
|
16977
|
+
background: "color.background.surface.default",
|
|
16978
|
+
border: "color.border.positive",
|
|
16979
|
+
icon: "icon.status.success"
|
|
16980
|
+
}
|
|
16981
|
+
},
|
|
16982
|
+
paused: {
|
|
16983
|
+
description: "Billing paused temporarily by finance or customer request.",
|
|
16984
|
+
chip: {
|
|
16985
|
+
foreground: "color.text.neutral",
|
|
16986
|
+
background: "color.background.neutral.subtle",
|
|
16987
|
+
border: "color.border.neutral",
|
|
16988
|
+
icon: "icon.status.paused"
|
|
16989
|
+
},
|
|
16990
|
+
banner: {
|
|
16991
|
+
foreground: "color.text.neutral",
|
|
16992
|
+
background: "color.background.surface.muted",
|
|
16993
|
+
border: "color.border.neutral",
|
|
16994
|
+
icon: "icon.status.paused"
|
|
16995
|
+
}
|
|
16996
|
+
},
|
|
16997
|
+
pending_cancellation: {
|
|
16998
|
+
description: "Subscription will cancel at period end but remains active now.",
|
|
16999
|
+
chip: {
|
|
17000
|
+
foreground: "color.text.info",
|
|
17001
|
+
background: "color.background.info.subtle",
|
|
17002
|
+
border: "color.border.info",
|
|
17003
|
+
icon: "icon.status.pending"
|
|
17004
|
+
},
|
|
17005
|
+
banner: {
|
|
17006
|
+
foreground: "color.text.info",
|
|
17007
|
+
background: "color.background.surface.default",
|
|
17008
|
+
border: "color.border.info",
|
|
17009
|
+
icon: "icon.status.pending"
|
|
17010
|
+
}
|
|
17011
|
+
},
|
|
17012
|
+
past_due: {
|
|
17013
|
+
description: "Renewal payment failed; smart retries ongoing and access retained during the grace window.",
|
|
17014
|
+
chip: {
|
|
17015
|
+
foreground: "color.text.danger",
|
|
17016
|
+
background: "color.background.danger.subtle",
|
|
17017
|
+
border: "color.border.danger",
|
|
17018
|
+
icon: "icon.status.warning"
|
|
17019
|
+
},
|
|
17020
|
+
banner: {
|
|
17021
|
+
foreground: "color.text.onbold",
|
|
17022
|
+
background: "color.background.danger.bold",
|
|
17023
|
+
border: "color.border.danger",
|
|
17024
|
+
icon: "icon.status.warning"
|
|
17025
|
+
}
|
|
17026
|
+
},
|
|
17027
|
+
unpaid: {
|
|
17028
|
+
description: "Payment retries exhausted; service access revoked.",
|
|
17029
|
+
chip: {
|
|
17030
|
+
foreground: "color.text.danger",
|
|
17031
|
+
background: "color.background.danger.subtle",
|
|
17032
|
+
border: "color.border.danger",
|
|
17033
|
+
icon: "icon.status.error"
|
|
17034
|
+
},
|
|
17035
|
+
banner: {
|
|
17036
|
+
foreground: "color.text.onbold",
|
|
17037
|
+
background: "color.background.danger.bold",
|
|
17038
|
+
border: "color.border.danger",
|
|
17039
|
+
icon: "icon.status.error"
|
|
17040
|
+
}
|
|
17041
|
+
},
|
|
17042
|
+
terminated: {
|
|
17043
|
+
description: "Subscription ended; service access revoked and billing stopped.",
|
|
17044
|
+
chip: {
|
|
17045
|
+
foreground: "color.text.disabled",
|
|
17046
|
+
background: "color.background.disabled",
|
|
17047
|
+
border: "color.border.disabled",
|
|
17048
|
+
icon: "icon.status.canceled"
|
|
17049
|
+
},
|
|
17050
|
+
banner: {
|
|
17051
|
+
foreground: "color.text.neutral",
|
|
17052
|
+
background: "color.background.neutral.subtle",
|
|
17053
|
+
border: "color.border.neutral",
|
|
17054
|
+
icon: "icon.status.canceled"
|
|
17055
|
+
}
|
|
17056
|
+
}
|
|
17057
|
+
},
|
|
17058
|
+
invoice: {
|
|
17059
|
+
draft: {
|
|
17060
|
+
description: "Invoice is editable and not yet finalized.",
|
|
17061
|
+
chip: {
|
|
17062
|
+
foreground: "color.text.neutral",
|
|
17063
|
+
background: "color.background.neutral.subtle",
|
|
17064
|
+
border: "color.border.neutral",
|
|
17065
|
+
icon: "icon.status.draft"
|
|
17066
|
+
},
|
|
17067
|
+
banner: {
|
|
17068
|
+
foreground: "color.text.neutral",
|
|
17069
|
+
background: "color.background.surface.muted",
|
|
17070
|
+
border: "color.border.neutral",
|
|
17071
|
+
icon: "icon.status.draft"
|
|
17072
|
+
}
|
|
17073
|
+
},
|
|
17074
|
+
posted: {
|
|
17075
|
+
description: "Invoice finalized with terms before collection.",
|
|
17076
|
+
chip: {
|
|
17077
|
+
foreground: "color.text.info",
|
|
17078
|
+
background: "color.background.info.subtle",
|
|
17079
|
+
border: "color.border.info",
|
|
17080
|
+
icon: "icon.status.pending"
|
|
17081
|
+
},
|
|
17082
|
+
banner: {
|
|
17083
|
+
foreground: "color.text.info",
|
|
17084
|
+
background: "color.background.surface.default",
|
|
17085
|
+
border: "color.border.info",
|
|
17086
|
+
icon: "icon.status.pending"
|
|
17087
|
+
}
|
|
17088
|
+
},
|
|
17089
|
+
paid: {
|
|
17090
|
+
description: "Invoice collected successfully in full.",
|
|
17091
|
+
chip: {
|
|
17092
|
+
foreground: "color.text.positive",
|
|
17093
|
+
background: "color.background.positive.subtle",
|
|
17094
|
+
border: "color.border.positive",
|
|
17095
|
+
icon: "icon.status.success"
|
|
17096
|
+
},
|
|
17097
|
+
banner: {
|
|
17098
|
+
foreground: "color.text.positive",
|
|
17099
|
+
background: "color.background.surface.default",
|
|
17100
|
+
border: "color.border.positive",
|
|
17101
|
+
icon: "icon.status.success"
|
|
17102
|
+
}
|
|
17103
|
+
},
|
|
17104
|
+
past_due: {
|
|
17105
|
+
description: "Invoice is unpaid past its due date.",
|
|
17106
|
+
chip: {
|
|
17107
|
+
foreground: "color.text.danger",
|
|
17108
|
+
background: "color.background.danger.subtle",
|
|
17109
|
+
border: "color.border.danger",
|
|
17110
|
+
icon: "icon.status.error"
|
|
17111
|
+
},
|
|
17112
|
+
banner: {
|
|
17113
|
+
foreground: "color.text.onbold",
|
|
17114
|
+
background: "color.background.danger.bold",
|
|
17115
|
+
border: "color.border.danger",
|
|
17116
|
+
icon: "icon.status.error"
|
|
17117
|
+
}
|
|
17118
|
+
},
|
|
17119
|
+
void: {
|
|
17120
|
+
description: "Invoice canceled and no longer payable.",
|
|
17121
|
+
chip: {
|
|
17122
|
+
foreground: "color.text.disabled",
|
|
17123
|
+
background: "color.background.disabled",
|
|
17124
|
+
border: "color.border.disabled",
|
|
17125
|
+
icon: "icon.status.void"
|
|
17126
|
+
},
|
|
17127
|
+
banner: {
|
|
17128
|
+
foreground: "color.text.neutral",
|
|
17129
|
+
background: "color.background.neutral.subtle",
|
|
17130
|
+
border: "color.border.neutral",
|
|
17131
|
+
icon: "icon.status.void"
|
|
17132
|
+
}
|
|
17133
|
+
}
|
|
17134
|
+
}
|
|
17135
|
+
}
|
|
17136
|
+
};
|
|
17137
|
+
|
|
17138
|
+
// registry/lifecycle-status-tones.json
|
|
17139
|
+
var lifecycle_status_tones_default = {
|
|
17140
|
+
states: {
|
|
17141
|
+
active: { tone: "success", icon: "icon.status.success", description: "Active and in use." },
|
|
17142
|
+
available: { tone: "success", icon: "icon.status.success", description: "Available to use." },
|
|
17143
|
+
published: { tone: "success", icon: "icon.status.success", description: "Published and visible." },
|
|
17144
|
+
settled: { tone: "success", icon: "icon.status.success", description: "Settled in full." },
|
|
17145
|
+
succeeded: { tone: "success", icon: "icon.status.success", description: "Completed successfully." },
|
|
17146
|
+
paid: { tone: "success", icon: "icon.status.paid", description: "Paid in full." },
|
|
17147
|
+
completed: { tone: "success", icon: "icon.status.success", description: "Completed." },
|
|
17148
|
+
good_standing: { tone: "success", icon: "icon.status.success", description: "In good standing." },
|
|
17149
|
+
in_stock: { tone: "success", icon: "icon.status.success", description: "In stock." },
|
|
17150
|
+
ok: { tone: "success", icon: "icon.status.success", description: "Working as expected." },
|
|
17151
|
+
invited: { tone: "info", icon: "icon.status.pending", description: "Invited and not yet joined." },
|
|
17152
|
+
onboarding: { tone: "info", icon: "icon.status.processing", description: "Being set up." },
|
|
17153
|
+
pending: { tone: "info", icon: "icon.status.pending", description: "Waiting to be processed." },
|
|
17154
|
+
authorized: { tone: "info", icon: "icon.status.pending", description: "Authorized and not yet settled." },
|
|
17155
|
+
processing: { tone: "info", icon: "icon.status.processing", description: "Being processed." },
|
|
17156
|
+
in_review: { tone: "info", icon: "icon.status.pending", description: "In review." },
|
|
17157
|
+
scheduled: { tone: "info", icon: "icon.status.scheduled", description: "Scheduled for later." },
|
|
17158
|
+
ingested: { tone: "info", icon: "icon.status.pending", description: "Received and not yet processed." },
|
|
17159
|
+
proposed: { tone: "info", icon: "icon.status.pending", description: "Proposed and not yet agreed." },
|
|
17160
|
+
posted: { tone: "info", icon: "icon.status.pending", description: "Finalized and posted." },
|
|
17161
|
+
open: { tone: "info", icon: "icon.status.pending", description: "Open and awaiting action." },
|
|
17162
|
+
future: { tone: "info", icon: "icon.status.future", description: "Starts later." },
|
|
17163
|
+
trialing: { tone: "accent", icon: "icon.status.trial", description: "In a trial period." },
|
|
17164
|
+
private_beta: { tone: "accent", icon: "icon.status.trial", description: "Available to a limited group." },
|
|
17165
|
+
retrying: { tone: "warning", icon: "icon.status.processing", description: "Failed once and retrying." },
|
|
17166
|
+
delayed: { tone: "warning", icon: "icon.status.warning", description: "Behind schedule." },
|
|
17167
|
+
investigating: { tone: "warning", icon: "icon.status.warning", description: "Being investigated." },
|
|
17168
|
+
low_stock: { tone: "warning", icon: "icon.status.warning", description: "Running low." },
|
|
17169
|
+
backorder: { tone: "warning", icon: "icon.status.warning", description: "Out of stock and on order." },
|
|
17170
|
+
suspended: { tone: "warning", icon: "icon.status.paused", description: "Suspended for now." },
|
|
17171
|
+
deprecated: { tone: "warning", icon: "icon.status.warning", description: "Being phased out." },
|
|
17172
|
+
past_due: { tone: "critical", icon: "icon.status.warning", description: "Past its due date." },
|
|
17173
|
+
failed: { tone: "critical", icon: "icon.status.critical", description: "Failed." },
|
|
17174
|
+
unpaid: { tone: "critical", icon: "icon.status.critical", description: "Unpaid." },
|
|
17175
|
+
uncollectible: { tone: "critical", icon: "icon.status.critical", description: "Could not be collected." },
|
|
17176
|
+
draft: { tone: "neutral", icon: "icon.status.draft", description: "A draft, not yet final." },
|
|
17177
|
+
prospect: { tone: "neutral", icon: "icon.status.default", description: "Not yet a customer." },
|
|
17178
|
+
paused: { tone: "neutral", icon: "icon.status.paused", description: "Paused." },
|
|
17179
|
+
archived: { tone: "neutral", icon: "icon.status.default", description: "Archived." },
|
|
17180
|
+
legacy: { tone: "neutral", icon: "icon.status.default", description: "Kept for existing users and no longer offered." },
|
|
17181
|
+
refunded: { tone: "neutral", icon: "icon.status.refunded", description: "Refunded." },
|
|
17182
|
+
cancelled: { tone: "neutral", icon: "icon.status.cancelled", description: "Cancelled." },
|
|
17183
|
+
canceled: { tone: "neutral", icon: "icon.status.canceled", description: "Cancelled." },
|
|
17184
|
+
void: { tone: "neutral", icon: "icon.status.void", description: "Voided." },
|
|
17185
|
+
retired: { tone: "neutral", icon: "icon.status.canceled", description: "Retired and no longer offered." },
|
|
17186
|
+
discontinued: { tone: "neutral", icon: "icon.status.canceled", description: "Discontinued." },
|
|
17187
|
+
deactivated: { tone: "neutral", icon: "icon.status.canceled", description: "Deactivated." },
|
|
17188
|
+
terminated: { tone: "neutral", icon: "icon.status.canceled", description: "Ended." },
|
|
17189
|
+
churned: { tone: "neutral", icon: "icon.status.canceled", description: "No longer a customer." }
|
|
17190
|
+
}
|
|
17191
|
+
};
|
|
17192
|
+
|
|
17193
|
+
// src/status-registry.ts
|
|
17194
|
+
var TONE_ALIASES = {
|
|
17195
|
+
info: "info",
|
|
17196
|
+
informational: "info",
|
|
17197
|
+
accent: "accent",
|
|
17198
|
+
highlight: "accent",
|
|
17199
|
+
positive: "success",
|
|
17200
|
+
success: "success",
|
|
17201
|
+
ok: "success",
|
|
17202
|
+
warning: "warning",
|
|
17203
|
+
caution: "warning",
|
|
17204
|
+
danger: "critical",
|
|
17205
|
+
critical: "critical",
|
|
17206
|
+
error: "critical",
|
|
17207
|
+
negative: "critical",
|
|
17208
|
+
neutral: "neutral",
|
|
17209
|
+
pending: "info"
|
|
17210
|
+
};
|
|
17211
|
+
var toLabel = (status) => status.split(/[_-]/).filter(Boolean).map((segment) => segment.charAt(0).toUpperCase() + segment.slice(1)).join(" ");
|
|
17212
|
+
var inferTone = (entry) => {
|
|
17213
|
+
if (!entry) return "neutral";
|
|
17214
|
+
for (const reference of [entry.foreground, entry.background, entry.border]) {
|
|
17215
|
+
const segments = reference.replace(/^\{|\}$/g, "").split(/[\s./_-]+/).reverse();
|
|
17216
|
+
for (const segment of segments) {
|
|
17217
|
+
const tone = TONE_ALIASES[segment.toLowerCase()];
|
|
17218
|
+
if (tone) return tone;
|
|
17219
|
+
}
|
|
17220
|
+
}
|
|
17221
|
+
return "neutral";
|
|
17222
|
+
};
|
|
17223
|
+
var componentTokenSet = (tone) => {
|
|
17224
|
+
const normalized = tone === "positive" ? "success" : tone === "danger" ? "critical" : tone;
|
|
17225
|
+
return {
|
|
17226
|
+
background: `var(--sys-status-${normalized}-surface)`,
|
|
17227
|
+
border: `var(--sys-status-${normalized}-border)`,
|
|
17228
|
+
foreground: `var(--sys-status-${normalized}-text)`
|
|
17229
|
+
};
|
|
17230
|
+
};
|
|
17231
|
+
var rawTokenSet = (entry) => {
|
|
17232
|
+
const tone = inferTone(entry);
|
|
17233
|
+
return componentTokenSet(tone);
|
|
17234
|
+
};
|
|
17235
|
+
var bannerFallback = (tone) => tone === "neutral" ? {
|
|
17236
|
+
background: "var(--cmp-banner-background)",
|
|
17237
|
+
border: "var(--cmp-banner-border)",
|
|
17238
|
+
foreground: "var(--cmp-banner-text)"
|
|
17239
|
+
} : componentTokenSet(tone);
|
|
17240
|
+
var fallback = (domain, status, tone = "neutral") => ({
|
|
17241
|
+
domain,
|
|
17242
|
+
status,
|
|
17243
|
+
label: toLabel(status || "Unknown"),
|
|
17244
|
+
description: "Status not found in registry; falling back to the requested token set.",
|
|
17245
|
+
tone,
|
|
17246
|
+
badge: { subtle: componentTokenSet(tone), solid: componentTokenSet(tone) },
|
|
17247
|
+
banner: { subtle: bannerFallback(tone), solid: componentTokenSet(tone) }
|
|
17248
|
+
});
|
|
17249
|
+
var registry = /* @__PURE__ */ new Map();
|
|
17250
|
+
for (const [domain, entries] of Object.entries(status_map_default.domains)) {
|
|
17251
|
+
const domainEntries = /* @__PURE__ */ new Map();
|
|
17252
|
+
for (const [status, entry] of Object.entries(entries)) {
|
|
17253
|
+
const tone = inferTone(entry.chip);
|
|
17254
|
+
domainEntries.set(status.toLowerCase(), {
|
|
17255
|
+
domain,
|
|
17256
|
+
status,
|
|
17257
|
+
label: toLabel(status),
|
|
17258
|
+
description: entry.description,
|
|
17259
|
+
tone,
|
|
17260
|
+
iconName: entry.chip.icon ?? entry.banner?.icon,
|
|
17261
|
+
badge: { subtle: rawTokenSet(entry.chip), solid: componentTokenSet(tone) },
|
|
17262
|
+
banner: {
|
|
17263
|
+
subtle: entry.banner ? rawTokenSet(entry.banner) : bannerFallback(tone),
|
|
17264
|
+
solid: componentTokenSet(tone)
|
|
17265
|
+
}
|
|
17266
|
+
});
|
|
17267
|
+
}
|
|
17268
|
+
registry.set(domain, domainEntries);
|
|
17269
|
+
}
|
|
17270
|
+
var lifecycleEntries = /* @__PURE__ */ new Map();
|
|
17271
|
+
for (const [status, entry] of Object.entries(lifecycle_status_tones_default.states)) {
|
|
17272
|
+
lifecycleEntries.set(status, {
|
|
17273
|
+
domain: "lifecycle",
|
|
17274
|
+
status,
|
|
17275
|
+
label: toLabel(status),
|
|
17276
|
+
description: entry.description,
|
|
17277
|
+
tone: entry.tone,
|
|
17278
|
+
iconName: entry.icon,
|
|
17279
|
+
badge: { subtle: componentTokenSet(entry.tone), solid: componentTokenSet(entry.tone) },
|
|
17280
|
+
banner: { subtle: bannerFallback(entry.tone), solid: componentTokenSet(entry.tone) }
|
|
17281
|
+
});
|
|
17282
|
+
}
|
|
17283
|
+
registry.set("lifecycle", lifecycleEntries);
|
|
17284
|
+
var LEGACY_STATUS_ALIASES = {
|
|
17285
|
+
subscription: { delinquent: "unpaid" }
|
|
17286
|
+
};
|
|
17287
|
+
var STATUS_DOMAINS = Object.freeze([...registry.keys()]);
|
|
17288
|
+
function getStatusPresentation(domain, status) {
|
|
17289
|
+
const entries = registry.get(domain);
|
|
17290
|
+
const normalized = status.toLowerCase();
|
|
17291
|
+
const direct = entries?.get(normalized);
|
|
17292
|
+
if (direct) return direct;
|
|
17293
|
+
const alias = LEGACY_STATUS_ALIASES[domain]?.[normalized];
|
|
17294
|
+
const aliased = alias ? entries?.get(alias) : void 0;
|
|
17295
|
+
if (aliased) return { ...aliased, status, label: toLabel(status) };
|
|
17296
|
+
const shared = lifecycleEntries.get(normalized);
|
|
17297
|
+
return shared ? { ...shared, status, label: toLabel(status) } : fallback(domain, status);
|
|
17298
|
+
}
|
|
17299
|
+
function listStatuses(domain) {
|
|
17300
|
+
return [...registry.get(domain)?.values() ?? []];
|
|
17301
|
+
}
|
|
17302
|
+
function getToneTokenSet(tone) {
|
|
17303
|
+
return componentTokenSet(tone);
|
|
17304
|
+
}
|
|
17305
|
+
function getBannerToneTokenSet(tone) {
|
|
17306
|
+
return bannerFallback(tone);
|
|
17307
|
+
}
|
|
17308
|
+
|
|
16586
17309
|
// src/billing-views.ts
|
|
16587
17310
|
function billingCycle(values) {
|
|
16588
17311
|
const start = Date.parse(values.periodStart ?? "");
|
|
@@ -16686,9 +17409,15 @@ function recordCollectionEvents(record2, options = {}) {
|
|
|
16686
17409
|
const description = paid ? formatBillingAmount(paid.amount, String(paid.currency ?? record2.currency), options.minorUnits ?? 100) : billingSummary(Number(record2.amount), String(record2.currency), options.minorUnits ?? 100, String(record2.billing_interval));
|
|
16687
17410
|
events.push({ id: "payment-" + source2.field, title: source2.title, at, description, kind: "payment" });
|
|
16688
17411
|
}
|
|
16689
|
-
|
|
16690
|
-
const
|
|
16691
|
-
|
|
17412
|
+
if (!chronologicalEvents(events).length) {
|
|
17413
|
+
const lastEvent = String(record2.last_event ?? "Updated");
|
|
17414
|
+
const dated = [{ field: "created_at", title: "Created" }, { field: "last_event_at", title: lastEvent.split(/[_-]/).filter(Boolean).map((part) => part.charAt(0).toUpperCase() + part.slice(1)).join(" ") }, { field: "issued_at", title: "Issued" }, { field: "period_start", title: "Period started" }, { field: "ownership_transferred_at", title: "Ownership transferred" }].filter((source2) => typeof record2[source2.field] === "string" && Number.isFinite(Date.parse(record2[source2.field])));
|
|
17415
|
+
const both = dated[0]?.field === "created_at" && dated[1]?.field === "last_event_at" && lastEvent !== "created";
|
|
17416
|
+
for (const source2 of dated.slice(0, both ? 2 : 1)) events.push({ id: "record-" + source2.field, kind: "state", title: source2.title, at: record2[source2.field], description: "" });
|
|
17417
|
+
}
|
|
17418
|
+
for (const [field2, title, reason] of [["archived_at", "Archived", "archive_reason"], ["restored_at", "Restored", void 0], ["cancellation_requested_at", "Cancellation requested", "cancellation_reason"]]) {
|
|
17419
|
+
const at = record2[field2];
|
|
17420
|
+
if (typeof at === "string" && Number.isFinite(Date.parse(at))) events.push({ id: "record-" + field2, kind: "state", title, at, description: reason && typeof record2[reason] === "string" ? String(record2[reason]) : "" });
|
|
16692
17421
|
}
|
|
16693
17422
|
return chronologicalEvents(events);
|
|
16694
17423
|
}
|
|
@@ -16738,12 +17467,12 @@ function assertStaticSvg(svg) {
|
|
|
16738
17467
|
for (const match of markup.matchAll(/<\/?([\w:-]+)((?:[^<>"']|"[^"]*"|'[^']*')*)>/g)) {
|
|
16739
17468
|
if (markup.slice(end, match.index).includes("<") || !allowed.has(match[1].toLowerCase())) unsafe();
|
|
16740
17469
|
end = match.index + match[0].length;
|
|
16741
|
-
const
|
|
17470
|
+
const attributes2 = match[2].replace(/\/\s*$/, "");
|
|
16742
17471
|
const attribute = /\s+([\w:-]+)\s*=\s*("[^"]*"|'[^']*')/y;
|
|
16743
17472
|
let offset = 0;
|
|
16744
|
-
while (offset <
|
|
17473
|
+
while (offset < attributes2.trimEnd().length) {
|
|
16745
17474
|
attribute.lastIndex = offset;
|
|
16746
|
-
const found = attribute.exec(
|
|
17475
|
+
const found = attribute.exec(attributes2);
|
|
16747
17476
|
if (!found) unsafe();
|
|
16748
17477
|
offset = attribute.lastIndex;
|
|
16749
17478
|
const name = found[1].toLowerCase();
|
|
@@ -16774,6 +17503,27 @@ function svgCarriesTitle(svg, title) {
|
|
|
16774
17503
|
}
|
|
16775
17504
|
return false;
|
|
16776
17505
|
}
|
|
17506
|
+
var VIZ_THEME_SVG_PROPS = Object.freeze(["svgDark", "svgDarkNarrow", "svgDarkWide", "svgHc", "svgHcNarrow", "svgHcWide"]);
|
|
17507
|
+
var VIZ_SVG_PROPS = Object.freeze(["svg", "svgNarrow", "svgWide", ...VIZ_THEME_SVG_PROPS]);
|
|
17508
|
+
function vizPreviewLayers(props) {
|
|
17509
|
+
if (typeof props.svg !== "string") return [];
|
|
17510
|
+
const sets = [
|
|
17511
|
+
["light", props.svg, props.svgNarrow, props.svgWide],
|
|
17512
|
+
["dark", props.svgDark, props.svgDarkNarrow, props.svgDarkWide],
|
|
17513
|
+
["hc", props.svgHc, props.svgHcNarrow, props.svgHcWide]
|
|
17514
|
+
];
|
|
17515
|
+
const themed = VIZ_THEME_SVG_PROPS.some((key) => typeof props[key] === "string");
|
|
17516
|
+
return (themed ? sets : sets.slice(0, 1)).filter(([, design]) => typeof design === "string").map(([theme, design, narrow, wide]) => ({
|
|
17517
|
+
...themed ? { theme } : {},
|
|
17518
|
+
narrow: typeof narrow === "string",
|
|
17519
|
+
wide: typeof wide === "string",
|
|
17520
|
+
renders: [
|
|
17521
|
+
["data-viz-svg", assertStaticSvg(design)],
|
|
17522
|
+
...typeof narrow === "string" ? [["data-viz-svg-narrow", assertStaticSvg(narrow)]] : [],
|
|
17523
|
+
...typeof wide === "string" ? [["data-viz-svg-wide", assertStaticSvg(wide)]] : []
|
|
17524
|
+
]
|
|
17525
|
+
}));
|
|
17526
|
+
}
|
|
16777
17527
|
|
|
16778
17528
|
// src/disputed.ts
|
|
16779
17529
|
function auditSummary({ auditLog = [], lastN = 5 }) {
|
|
@@ -16998,7 +17748,7 @@ function validateComponentIntakeDocument(input) {
|
|
|
16998
17748
|
if (!Array.isArray(document.rows)) return [...errors, "intake rows must be an array"];
|
|
16999
17749
|
const ids = document.rows.map((row) => row && typeof row === "object" && !Array.isArray(row) && typeof row.id === "string" ? row.id : "");
|
|
17000
17750
|
if (ids.some((id) => id.length === 0)) errors.push("every intake row must have a non-empty id");
|
|
17001
|
-
if (ids.length !==
|
|
17751
|
+
if (ids.length !== 112) errors.push(`intake must contain exactly 112 rows; received ${ids.length}`);
|
|
17002
17752
|
const uniqueCount = new Set(ids).size;
|
|
17003
17753
|
if (uniqueCount !== ids.length) errors.push("intake IDs must be unique");
|
|
17004
17754
|
const sorted = [...ids].sort((a, b) => a < b ? -1 : a > b ? 1 : 0);
|
|
@@ -17031,11 +17781,16 @@ exports.PORTED_COMPONENT_IDS = PORTED_COMPONENT_IDS;
|
|
|
17031
17781
|
exports.RESULT_STATES = RESULT_STATES;
|
|
17032
17782
|
exports.RESULT_STATE_TONE = RESULT_STATE_TONE;
|
|
17033
17783
|
exports.SEVERITY_TONES = SEVERITY_TONES;
|
|
17784
|
+
exports.STATUS_DOMAINS = STATUS_DOMAINS;
|
|
17785
|
+
exports.STATUS_ICON_SHAPES = STATUS_ICON_SHAPES;
|
|
17786
|
+
exports.STATUS_ICON_SVG_ATTRS = STATUS_ICON_SVG_ATTRS;
|
|
17034
17787
|
exports.UI_WORKFLOW_STATES = UI_WORKFLOW_STATES;
|
|
17035
17788
|
exports.VIZ_CONTROL_IDS = VIZ_CONTROL_IDS;
|
|
17036
17789
|
exports.VIZ_CONTROL_TITLES = VIZ_CONTROL_TITLES;
|
|
17037
17790
|
exports.VIZ_PREVIEW_TYPES = VIZ_PREVIEW_TYPES;
|
|
17038
17791
|
exports.VIZ_SUMMARY_IDS = VIZ_SUMMARY_IDS;
|
|
17792
|
+
exports.VIZ_SVG_PROPS = VIZ_SVG_PROPS;
|
|
17793
|
+
exports.VIZ_THEME_SVG_PROPS = VIZ_THEME_SVG_PROPS;
|
|
17039
17794
|
exports.ariaSort = ariaSort;
|
|
17040
17795
|
exports.assertStaticSvg = assertStaticSvg;
|
|
17041
17796
|
exports.auditSummary = auditSummary;
|
|
@@ -17069,18 +17824,25 @@ exports.formatReadOnlyValue = formatReadOnlyValue;
|
|
|
17069
17824
|
exports.formatRecordLabel = formatRecordLabel;
|
|
17070
17825
|
exports.formatReferenceLabel = formatReferenceLabel;
|
|
17071
17826
|
exports.geoFieldMapping = geoFieldMapping;
|
|
17827
|
+
exports.getBannerToneTokenSet = getBannerToneTokenSet;
|
|
17072
17828
|
exports.getBaselineCapability = getBaselineCapability;
|
|
17829
|
+
exports.getStatusPresentation = getStatusPresentation;
|
|
17830
|
+
exports.getToneTokenSet = getToneTokenSet;
|
|
17073
17831
|
exports.initialSort = initialSort;
|
|
17074
17832
|
exports.isGovernedComponent = isGovernedComponent;
|
|
17075
17833
|
exports.isVizIntentFragment = isVizIntentFragment;
|
|
17834
|
+
exports.listStatuses = listStatuses;
|
|
17076
17835
|
exports.nextSort = nextSort;
|
|
17077
17836
|
exports.parseBillingAmount = parseBillingAmount;
|
|
17078
17837
|
exports.portedComponentContracts = portedComponentContracts;
|
|
17079
17838
|
exports.portedScenarios = portedScenarios;
|
|
17080
17839
|
exports.recipeItemLabels = recipeItemLabels;
|
|
17081
17840
|
exports.recordCollectionEvents = recordCollectionEvents;
|
|
17841
|
+
exports.relativeTimestampEmptyScenario = relativeTimestampEmptyScenario;
|
|
17842
|
+
exports.resolveStatusIcon = resolveStatusIcon;
|
|
17082
17843
|
exports.restartedBillingPeriod = restartedBillingPeriod;
|
|
17083
17844
|
exports.sharedScenarios = sharedScenarios;
|
|
17845
|
+
exports.statusIconMarkup = statusIconMarkup;
|
|
17084
17846
|
exports.substitutionContractReport = substitutionContractReport;
|
|
17085
17847
|
exports.summarizeSubstitutionReport = summarizeSubstitutionReport;
|
|
17086
17848
|
exports.summaryValue = summaryValue;
|
|
@@ -17090,4 +17852,5 @@ exports.validMinorUnits = validMinorUnits;
|
|
|
17090
17852
|
exports.validateComponentIntakeDocument = validateComponentIntakeDocument;
|
|
17091
17853
|
exports.vizControlFields = vizControlFields;
|
|
17092
17854
|
exports.vizFieldValue = vizFieldValue;
|
|
17855
|
+
exports.vizPreviewLayers = vizPreviewLayers;
|
|
17093
17856
|
exports.vizSummaryRows = vizSummaryRows;
|