@oods/component-contracts 0.3.2 → 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 +826 -74
- package/dist/index.d.cts +183 -3
- package/dist/index.d.ts +183 -3
- package/dist/index.js +814 -75
- 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.js
CHANGED
|
@@ -4,7 +4,7 @@ var component_intake_v1_default = {
|
|
|
4
4
|
kind: "component-intake",
|
|
5
5
|
baselineCommit: "ae560bc22969c1fd81336730be4330c9115fc316",
|
|
6
6
|
planningCommit: "8ce349076e7e3ba3f0b2f3f667d4fbb5c6a4b63b",
|
|
7
|
-
controllingObligationDenominator:
|
|
7
|
+
controllingObligationDenominator: 112,
|
|
8
8
|
countRule: "Derived from the unique, deterministically sorted rows array; never from an independent counter.",
|
|
9
9
|
rows: [
|
|
10
10
|
{
|
|
@@ -1050,6 +1050,28 @@ var component_intake_v1_default = {
|
|
|
1050
1050
|
"traits/content/Labelled.trait.yaml"
|
|
1051
1051
|
]
|
|
1052
1052
|
},
|
|
1053
|
+
{
|
|
1054
|
+
id: "Dialog",
|
|
1055
|
+
displayName: "Dialog",
|
|
1056
|
+
baselineMetadata: {
|
|
1057
|
+
categories: [
|
|
1058
|
+
"primitive"
|
|
1059
|
+
],
|
|
1060
|
+
tags: [
|
|
1061
|
+
"dialog",
|
|
1062
|
+
"modal",
|
|
1063
|
+
"overlay",
|
|
1064
|
+
"primitive"
|
|
1065
|
+
],
|
|
1066
|
+
contexts: [],
|
|
1067
|
+
regions: []
|
|
1068
|
+
},
|
|
1069
|
+
intakeEvidence: [
|
|
1070
|
+
"packages/component-contracts/src/contracts.ts#Dialog",
|
|
1071
|
+
"packages/mcp-server/src/render/component-map.ts#renderDialog"
|
|
1072
|
+
],
|
|
1073
|
+
addedBy: "s222-m02; decision #2502 ruling 11"
|
|
1074
|
+
},
|
|
1053
1075
|
{
|
|
1054
1076
|
id: "FilterPanel",
|
|
1055
1077
|
displayName: "FilterPanel",
|
|
@@ -2155,6 +2177,36 @@ var component_intake_v1_default = {
|
|
|
2155
2177
|
"traits/lifecycle/Stateful.trait.yaml"
|
|
2156
2178
|
]
|
|
2157
2179
|
},
|
|
2180
|
+
{
|
|
2181
|
+
id: "Switch",
|
|
2182
|
+
displayName: "Switch",
|
|
2183
|
+
baselineMetadata: {
|
|
2184
|
+
categories: [
|
|
2185
|
+
"primitive"
|
|
2186
|
+
],
|
|
2187
|
+
tags: [
|
|
2188
|
+
"boolean",
|
|
2189
|
+
"field",
|
|
2190
|
+
"form",
|
|
2191
|
+
"input",
|
|
2192
|
+
"interactive",
|
|
2193
|
+
"primitive",
|
|
2194
|
+
"switch"
|
|
2195
|
+
],
|
|
2196
|
+
contexts: [
|
|
2197
|
+
"form"
|
|
2198
|
+
],
|
|
2199
|
+
regions: [
|
|
2200
|
+
"form",
|
|
2201
|
+
"main"
|
|
2202
|
+
]
|
|
2203
|
+
},
|
|
2204
|
+
intakeEvidence: [
|
|
2205
|
+
"packages/component-contracts/src/contracts.ts#Switch",
|
|
2206
|
+
"packages/mcp-server/src/render/component-map.ts#renderSwitch"
|
|
2207
|
+
],
|
|
2208
|
+
addedBy: "s222-m02; decision #2502 ruling 11"
|
|
2209
|
+
},
|
|
2158
2210
|
{
|
|
2159
2211
|
id: "Table",
|
|
2160
2212
|
displayName: "Table",
|
|
@@ -3174,9 +3226,9 @@ var component_reconciliation_proposed_v2_default = {
|
|
|
3174
3226
|
baselineCommit: "a5638cf819bdadb86e2336c4aabe9b2184699c13",
|
|
3175
3227
|
planningCommit: "8ce349076e7e3ba3f0b2f3f667d4fbb5c6a4b63b",
|
|
3176
3228
|
status: "proposed-awaiting-approval",
|
|
3177
|
-
controllingObligationDenominator:
|
|
3229
|
+
controllingObligationDenominator: 112,
|
|
3178
3230
|
approvedRuntimeCensus: null,
|
|
3179
|
-
proposedRuntimeCensus:
|
|
3231
|
+
proposedRuntimeCensus: 112,
|
|
3180
3232
|
rows: [
|
|
3181
3233
|
{
|
|
3182
3234
|
id: "AddressCollectionPanel",
|
|
@@ -3896,6 +3948,25 @@ var component_reconciliation_proposed_v2_default = {
|
|
|
3896
3948
|
implementationStatus: "implemented-evidence-complete",
|
|
3897
3949
|
compatibilityNote: "Retain the named public ID and existing HTML discovery contract. Governed framework implementation and measurements are linked; classification remains a proposal."
|
|
3898
3950
|
},
|
|
3951
|
+
{
|
|
3952
|
+
id: "Dialog",
|
|
3953
|
+
proposedClassification: "native",
|
|
3954
|
+
approvalState: "pending-approval",
|
|
3955
|
+
evidence: [
|
|
3956
|
+
"packages/mcp-server/src/render/component-map.ts#renderDialog",
|
|
3957
|
+
"packages/components-react/evidence/react-readiness.v1.json#Dialog",
|
|
3958
|
+
"packages/components-vue/evidence/vue-readiness.v1.json#Dialog",
|
|
3959
|
+
"packages/component-contracts/src/contracts.ts#Dialog"
|
|
3960
|
+
],
|
|
3961
|
+
implementationStatus: "implemented-evidence-complete",
|
|
3962
|
+
proposedResolution: {
|
|
3963
|
+
surface: "react+vue+html",
|
|
3964
|
+
implementation: "Dialog",
|
|
3965
|
+
source: "packages/component-contracts/src/contracts.ts",
|
|
3966
|
+
publicIdRetained: true
|
|
3967
|
+
},
|
|
3968
|
+
compatibilityNote: "New public identity added by decision #2502 (ruling 11). Governed framework implementation and measurements are linked; classification remains a proposal."
|
|
3969
|
+
},
|
|
3899
3970
|
{
|
|
3900
3971
|
id: "FilterPanel",
|
|
3901
3972
|
proposedClassification: "recipe",
|
|
@@ -4671,6 +4742,25 @@ var component_reconciliation_proposed_v2_default = {
|
|
|
4671
4742
|
implementationStatus: "implemented-evidence-complete",
|
|
4672
4743
|
compatibilityNote: "Retain the named public ID and existing HTML discovery contract. Governed framework implementation and measurements are linked; classification remains a proposal."
|
|
4673
4744
|
},
|
|
4745
|
+
{
|
|
4746
|
+
id: "Switch",
|
|
4747
|
+
proposedClassification: "native",
|
|
4748
|
+
approvalState: "pending-approval",
|
|
4749
|
+
evidence: [
|
|
4750
|
+
"packages/mcp-server/src/render/component-map.ts#renderSwitch",
|
|
4751
|
+
"packages/components-react/evidence/react-readiness.v1.json#Switch",
|
|
4752
|
+
"packages/components-vue/evidence/vue-readiness.v1.json#Switch",
|
|
4753
|
+
"packages/component-contracts/src/contracts.ts#Switch"
|
|
4754
|
+
],
|
|
4755
|
+
implementationStatus: "implemented-evidence-complete",
|
|
4756
|
+
proposedResolution: {
|
|
4757
|
+
surface: "react+vue+html",
|
|
4758
|
+
implementation: "Switch",
|
|
4759
|
+
source: "packages/component-contracts/src/contracts.ts",
|
|
4760
|
+
publicIdRetained: true
|
|
4761
|
+
},
|
|
4762
|
+
compatibilityNote: "New public identity added by decision #2502 (ruling 11). Governed framework implementation and measurements are linked; classification remains a proposal."
|
|
4763
|
+
},
|
|
4674
4764
|
{
|
|
4675
4765
|
id: "Table",
|
|
4676
4766
|
proposedClassification: "native",
|
|
@@ -5383,7 +5473,7 @@ var component_capability_ledger_v1_default = {
|
|
|
5383
5473
|
schemaVersion: "1.0.0",
|
|
5384
5474
|
kind: "component-capability-ledger",
|
|
5385
5475
|
generatedAt: "2026-09-11T05:30:00Z",
|
|
5386
|
-
controllingObligationDenominator:
|
|
5476
|
+
controllingObligationDenominator: 112,
|
|
5387
5477
|
approvedRuntimeCensus: null,
|
|
5388
5478
|
source: "refresh_structured_data.py#project_measured_surfaces",
|
|
5389
5479
|
rows: [
|
|
@@ -8451,6 +8541,77 @@ var component_capability_ledger_v1_default = {
|
|
|
8451
8541
|
}
|
|
8452
8542
|
}
|
|
8453
8543
|
},
|
|
8544
|
+
{
|
|
8545
|
+
id: "Dialog",
|
|
8546
|
+
proposedClassification: "native",
|
|
8547
|
+
reconciliationState: "proposed-awaiting-approval",
|
|
8548
|
+
surfaces: {
|
|
8549
|
+
contract: {
|
|
8550
|
+
state: "versioned-v1",
|
|
8551
|
+
evidence: [
|
|
8552
|
+
"packages/component-contracts/src/contracts.ts#Dialog"
|
|
8553
|
+
]
|
|
8554
|
+
},
|
|
8555
|
+
metadata: {
|
|
8556
|
+
state: "available",
|
|
8557
|
+
evidence: [
|
|
8558
|
+
"packages/component-contracts/registry/component-intake.v1.json#Dialog"
|
|
8559
|
+
]
|
|
8560
|
+
},
|
|
8561
|
+
html: {
|
|
8562
|
+
state: "mapped",
|
|
8563
|
+
evidence: [
|
|
8564
|
+
"packages/mcp-server/src/render/component-map.ts#renderDialog"
|
|
8565
|
+
]
|
|
8566
|
+
},
|
|
8567
|
+
react: {
|
|
8568
|
+
state: "implemented-evidence-complete",
|
|
8569
|
+
evidence: [
|
|
8570
|
+
"packages/components-react/evidence/react-readiness.v1.json#Dialog"
|
|
8571
|
+
]
|
|
8572
|
+
},
|
|
8573
|
+
vue: {
|
|
8574
|
+
state: "implemented-evidence-complete",
|
|
8575
|
+
evidence: [
|
|
8576
|
+
"packages/components-vue/evidence/vue-readiness.v1.json#Dialog"
|
|
8577
|
+
]
|
|
8578
|
+
},
|
|
8579
|
+
generatedConsumer: {
|
|
8580
|
+
state: "unavailable",
|
|
8581
|
+
evidence: [
|
|
8582
|
+
"artifacts/product-reality/sprint-193/m07/runtime/runtime-cells.v1.json"
|
|
8583
|
+
],
|
|
8584
|
+
reason: "No current runtime cell places this component; historical receipts do not establish current coverage."
|
|
8585
|
+
},
|
|
8586
|
+
accessibility: {
|
|
8587
|
+
state: "verified",
|
|
8588
|
+
evidence: [
|
|
8589
|
+
"artifacts/product-reality/sprint-222/m02/switch-dialog/react-measured.json#Dialog",
|
|
8590
|
+
"artifacts/product-reality/sprint-222/m02/switch-dialog/vue-measured.json#Dialog",
|
|
8591
|
+
"packages/components-react/evidence/react-readiness.v1.json#Dialog",
|
|
8592
|
+
"packages/components-vue/evidence/vue-readiness.v1.json#Dialog"
|
|
8593
|
+
]
|
|
8594
|
+
},
|
|
8595
|
+
theme: {
|
|
8596
|
+
state: "verified",
|
|
8597
|
+
evidence: [
|
|
8598
|
+
"artifacts/product-reality/sprint-222/m02/switch-dialog/react-theme/report.json#Dialog",
|
|
8599
|
+
"artifacts/product-reality/sprint-222/m02/switch-dialog/vue-theme/report.json#Dialog",
|
|
8600
|
+
"packages/components-react/evidence/react-readiness.v1.json#Dialog",
|
|
8601
|
+
"packages/components-vue/evidence/vue-readiness.v1.json#Dialog"
|
|
8602
|
+
]
|
|
8603
|
+
},
|
|
8604
|
+
interaction: {
|
|
8605
|
+
state: "verified",
|
|
8606
|
+
evidence: [
|
|
8607
|
+
"artifacts/product-reality/sprint-222/m02/switch-dialog/react-measured.json#Dialog",
|
|
8608
|
+
"artifacts/product-reality/sprint-222/m02/switch-dialog/vue-measured.json#Dialog",
|
|
8609
|
+
"packages/components-react/evidence/react-readiness.v1.json#Dialog",
|
|
8610
|
+
"packages/components-vue/evidence/vue-readiness.v1.json#Dialog"
|
|
8611
|
+
]
|
|
8612
|
+
}
|
|
8613
|
+
}
|
|
8614
|
+
},
|
|
8454
8615
|
{
|
|
8455
8616
|
id: "FilterPanel",
|
|
8456
8617
|
proposedClassification: "recipe",
|
|
@@ -12039,6 +12200,77 @@ var component_capability_ledger_v1_default = {
|
|
|
12039
12200
|
}
|
|
12040
12201
|
}
|
|
12041
12202
|
},
|
|
12203
|
+
{
|
|
12204
|
+
id: "Switch",
|
|
12205
|
+
proposedClassification: "native",
|
|
12206
|
+
reconciliationState: "proposed-awaiting-approval",
|
|
12207
|
+
surfaces: {
|
|
12208
|
+
contract: {
|
|
12209
|
+
state: "versioned-v1",
|
|
12210
|
+
evidence: [
|
|
12211
|
+
"packages/component-contracts/src/contracts.ts#Switch"
|
|
12212
|
+
]
|
|
12213
|
+
},
|
|
12214
|
+
metadata: {
|
|
12215
|
+
state: "available",
|
|
12216
|
+
evidence: [
|
|
12217
|
+
"packages/component-contracts/registry/component-intake.v1.json#Switch"
|
|
12218
|
+
]
|
|
12219
|
+
},
|
|
12220
|
+
html: {
|
|
12221
|
+
state: "mapped",
|
|
12222
|
+
evidence: [
|
|
12223
|
+
"packages/mcp-server/src/render/component-map.ts#renderSwitch"
|
|
12224
|
+
]
|
|
12225
|
+
},
|
|
12226
|
+
react: {
|
|
12227
|
+
state: "implemented-evidence-complete",
|
|
12228
|
+
evidence: [
|
|
12229
|
+
"packages/components-react/evidence/react-readiness.v1.json#Switch"
|
|
12230
|
+
]
|
|
12231
|
+
},
|
|
12232
|
+
vue: {
|
|
12233
|
+
state: "implemented-evidence-complete",
|
|
12234
|
+
evidence: [
|
|
12235
|
+
"packages/components-vue/evidence/vue-readiness.v1.json#Switch"
|
|
12236
|
+
]
|
|
12237
|
+
},
|
|
12238
|
+
generatedConsumer: {
|
|
12239
|
+
state: "unavailable",
|
|
12240
|
+
evidence: [
|
|
12241
|
+
"artifacts/product-reality/sprint-193/m07/runtime/runtime-cells.v1.json"
|
|
12242
|
+
],
|
|
12243
|
+
reason: "No current runtime cell places this component; historical receipts do not establish current coverage."
|
|
12244
|
+
},
|
|
12245
|
+
accessibility: {
|
|
12246
|
+
state: "verified",
|
|
12247
|
+
evidence: [
|
|
12248
|
+
"artifacts/product-reality/sprint-222/m02/switch-dialog/react-measured.json#Switch",
|
|
12249
|
+
"artifacts/product-reality/sprint-222/m02/switch-dialog/vue-measured.json#Switch",
|
|
12250
|
+
"packages/components-react/evidence/react-readiness.v1.json#Switch",
|
|
12251
|
+
"packages/components-vue/evidence/vue-readiness.v1.json#Switch"
|
|
12252
|
+
]
|
|
12253
|
+
},
|
|
12254
|
+
theme: {
|
|
12255
|
+
state: "verified",
|
|
12256
|
+
evidence: [
|
|
12257
|
+
"artifacts/product-reality/sprint-222/m02/switch-dialog/react-theme/report.json#Switch",
|
|
12258
|
+
"artifacts/product-reality/sprint-222/m02/switch-dialog/vue-theme/report.json#Switch",
|
|
12259
|
+
"packages/components-react/evidence/react-readiness.v1.json#Switch",
|
|
12260
|
+
"packages/components-vue/evidence/vue-readiness.v1.json#Switch"
|
|
12261
|
+
]
|
|
12262
|
+
},
|
|
12263
|
+
interaction: {
|
|
12264
|
+
state: "verified",
|
|
12265
|
+
evidence: [
|
|
12266
|
+
"artifacts/product-reality/sprint-222/m02/switch-dialog/react-measured.json#Switch",
|
|
12267
|
+
"artifacts/product-reality/sprint-222/m02/switch-dialog/vue-measured.json#Switch",
|
|
12268
|
+
"packages/components-react/evidence/react-readiness.v1.json#Switch",
|
|
12269
|
+
"packages/components-vue/evidence/vue-readiness.v1.json#Switch"
|
|
12270
|
+
]
|
|
12271
|
+
}
|
|
12272
|
+
}
|
|
12273
|
+
},
|
|
12042
12274
|
{
|
|
12043
12275
|
id: "Table",
|
|
12044
12276
|
proposedClassification: "native",
|
|
@@ -15103,6 +15335,7 @@ var NUCLEUS_COMPONENT_IDS = [
|
|
|
15103
15335
|
"CycleProgressCard",
|
|
15104
15336
|
"DatePicker",
|
|
15105
15337
|
"DetailHeader",
|
|
15338
|
+
"Dialog",
|
|
15106
15339
|
"FilterPanel",
|
|
15107
15340
|
"FormLabelGroup",
|
|
15108
15341
|
"GeoFieldMappingForm",
|
|
@@ -15141,6 +15374,7 @@ var NUCLEUS_COMPONENT_IDS = [
|
|
|
15141
15374
|
"StatusColorLegend",
|
|
15142
15375
|
"StatusSelector",
|
|
15143
15376
|
"StatusTimeline",
|
|
15377
|
+
"Switch",
|
|
15144
15378
|
"Table",
|
|
15145
15379
|
"Tabs",
|
|
15146
15380
|
"TagInput",
|
|
@@ -15269,6 +15503,7 @@ var componentBehaviors = {
|
|
|
15269
15503
|
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": [] },
|
|
15270
15504
|
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" } }] },
|
|
15271
15505
|
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": [] },
|
|
15506
|
+
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" }] },
|
|
15272
15507
|
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" } }] },
|
|
15273
15508
|
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": [] },
|
|
15274
15509
|
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": [] },
|
|
@@ -15301,6 +15536,7 @@ var componentBehaviors = {
|
|
|
15301
15536
|
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": [] },
|
|
15302
15537
|
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" }] },
|
|
15303
15538
|
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": [] },
|
|
15539
|
+
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" }] },
|
|
15304
15540
|
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" }] },
|
|
15305
15541
|
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" }] },
|
|
15306
15542
|
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" }] },
|
|
@@ -15346,7 +15582,7 @@ var authoredContracts = {
|
|
|
15346
15582
|
slots: ["default"],
|
|
15347
15583
|
events: [],
|
|
15348
15584
|
states: ["subtle", "solid"],
|
|
15349
|
-
tokenRoles: ["badge.background", "badge.
|
|
15585
|
+
tokenRoles: ["badge.background", "badge.text"],
|
|
15350
15586
|
accessibility: ["Inherits Badge inline noninteractive status label semantics", "The resolved label is always visible text"],
|
|
15351
15587
|
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."
|
|
15352
15588
|
},
|
|
@@ -15369,7 +15605,7 @@ var authoredContracts = {
|
|
|
15369
15605
|
slots: ["default"],
|
|
15370
15606
|
events: [],
|
|
15371
15607
|
states: ["subtle", "solid"],
|
|
15372
|
-
tokenRoles: ["badge.background", "badge.
|
|
15608
|
+
tokenRoles: ["badge.background", "badge.text"],
|
|
15373
15609
|
accessibility: ["false remains visible", "archive is the badge variant"],
|
|
15374
15610
|
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."
|
|
15375
15611
|
},
|
|
@@ -15410,22 +15646,17 @@ var authoredContracts = {
|
|
|
15410
15646
|
AuditTimeline: {
|
|
15411
15647
|
id: "AuditTimeline",
|
|
15412
15648
|
version: COMPONENT_CONTRACT_VERSION,
|
|
15413
|
-
props: [
|
|
15414
|
-
|
|
15415
|
-
"
|
|
15416
|
-
"
|
|
15417
|
-
"
|
|
15418
|
-
"auditLog",
|
|
15649
|
+
props: ["title", "events", "history", "entries", "auditLog", "maxVisible", "showFromState", "showActorId", "showReason"],
|
|
15650
|
+
directives: [
|
|
15651
|
+
"field",
|
|
15652
|
+
"historyField",
|
|
15653
|
+
"statesParameter",
|
|
15419
15654
|
"auditLogField",
|
|
15420
15655
|
"createdField",
|
|
15421
15656
|
"updatedField",
|
|
15422
15657
|
"eventField",
|
|
15423
15658
|
"eventTimestampField",
|
|
15424
|
-
"eventOptionsParameter"
|
|
15425
|
-
"maxVisible",
|
|
15426
|
-
"showFromState",
|
|
15427
|
-
"showActorId",
|
|
15428
|
-
"showReason"
|
|
15659
|
+
"eventOptionsParameter"
|
|
15429
15660
|
],
|
|
15430
15661
|
slots: ["default"],
|
|
15431
15662
|
events: [],
|
|
@@ -15441,7 +15672,7 @@ var authoredContracts = {
|
|
|
15441
15672
|
slots: ["default"],
|
|
15442
15673
|
events: [],
|
|
15443
15674
|
states: ["subtle", "solid"],
|
|
15444
|
-
tokenRoles: ["badge.background", "badge.
|
|
15675
|
+
tokenRoles: ["badge.background", "badge.text", "badge.icon"],
|
|
15445
15676
|
accessibility: ["Inline noninteractive status label", "Decorative icons are hidden from assistive technology"],
|
|
15446
15677
|
compatibility: "The existing React status registry is the starting implementation."
|
|
15447
15678
|
},
|
|
@@ -15518,7 +15749,7 @@ var authoredContracts = {
|
|
|
15518
15749
|
slots: ["default"],
|
|
15519
15750
|
events: [],
|
|
15520
15751
|
states: ["subtle", "solid"],
|
|
15521
|
-
tokenRoles: ["badge.background", "badge.
|
|
15752
|
+
tokenRoles: ["badge.background", "badge.text"],
|
|
15522
15753
|
accessibility: ["false remains visible", "cancellation is the badge variant"],
|
|
15523
15754
|
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."
|
|
15524
15755
|
},
|
|
@@ -15537,18 +15768,8 @@ var authoredContracts = {
|
|
|
15537
15768
|
CancellationSummary: {
|
|
15538
15769
|
id: "CancellationSummary",
|
|
15539
15770
|
version: COMPONENT_CONTRACT_VERSION,
|
|
15540
|
-
props: [
|
|
15541
|
-
|
|
15542
|
-
"label",
|
|
15543
|
-
"cancelAtPeriodEnd",
|
|
15544
|
-
"requestedAt",
|
|
15545
|
-
"reason",
|
|
15546
|
-
"code",
|
|
15547
|
-
"cancelAtPeriodEndField",
|
|
15548
|
-
"requestedAtField",
|
|
15549
|
-
"reasonField",
|
|
15550
|
-
"codeField"
|
|
15551
|
-
],
|
|
15771
|
+
props: ["title", "label", "cancelAtPeriodEnd", "requestedAt", "reason", "code"],
|
|
15772
|
+
directives: ["field", "cancelAtPeriodEndField", "requestedAtField", "reasonField", "codeField"],
|
|
15552
15773
|
slots: ["default"],
|
|
15553
15774
|
events: [],
|
|
15554
15775
|
states: ["scheduled", "not-scheduled"],
|
|
@@ -15597,7 +15818,7 @@ var authoredContracts = {
|
|
|
15597
15818
|
slots: ["default"],
|
|
15598
15819
|
events: [],
|
|
15599
15820
|
states: ["subtle", "solid"],
|
|
15600
|
-
tokenRoles: ["badge.background", "badge.
|
|
15821
|
+
tokenRoles: ["badge.background", "badge.text"],
|
|
15601
15822
|
accessibility: ["category is visible", "mode is the status metadata", "noninteractive badge"],
|
|
15602
15823
|
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."
|
|
15603
15824
|
},
|
|
@@ -15642,7 +15863,7 @@ var authoredContracts = {
|
|
|
15642
15863
|
slots: ["default"],
|
|
15643
15864
|
events: [],
|
|
15644
15865
|
states: ["subtle", "solid"],
|
|
15645
|
-
tokenRoles: ["badge.background", "badge.
|
|
15866
|
+
tokenRoles: ["badge.background", "badge.text", "badge.icon", "badge.color"],
|
|
15646
15867
|
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"],
|
|
15647
15868
|
compatibility: "Mirrors renderColorizedBadge over renderBadgePrimitive label/status/color aliases and default variant colorized; Badge tone and emphasis retain their shared behavior."
|
|
15648
15869
|
},
|
|
@@ -15681,6 +15902,18 @@ var authoredContracts = {
|
|
|
15681
15902
|
accessibility: ["A real heading element follows as/level with default h2", "Subtitle and metadata remain visible beside the heading"],
|
|
15682
15903
|
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."
|
|
15683
15904
|
},
|
|
15905
|
+
Dialog: {
|
|
15906
|
+
id: "Dialog",
|
|
15907
|
+
version: COMPONENT_CONTRACT_VERSION,
|
|
15908
|
+
requiredProps: ["title"],
|
|
15909
|
+
props: ["id", "open", "modal", "title", "description", "dismissLabel", "size", "actions"],
|
|
15910
|
+
slots: ["default", "actions"],
|
|
15911
|
+
events: ["close"],
|
|
15912
|
+
states: ["open", "closed"],
|
|
15913
|
+
tokenRoles: ["dialog.background", "dialog.border", "dialog.shadow", "dialog.backdrop", "dialog.title", "dialog.description"],
|
|
15914
|
+
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"],
|
|
15915
|
+
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."
|
|
15916
|
+
},
|
|
15684
15917
|
FilterPanel: {
|
|
15685
15918
|
id: "FilterPanel",
|
|
15686
15919
|
version: COMPONENT_CONTRACT_VERSION,
|
|
@@ -15791,7 +16024,7 @@ var authoredContracts = {
|
|
|
15791
16024
|
slots: ["default"],
|
|
15792
16025
|
events: [],
|
|
15793
16026
|
states: ["subtle", "solid"],
|
|
15794
|
-
tokenRoles: ["badge.background", "badge.
|
|
16027
|
+
tokenRoles: ["badge.background", "badge.text"],
|
|
15795
16028
|
accessibility: ["Inherits Badge inline noninteractive status label semantics", "The resolved label is always visible text"],
|
|
15796
16029
|
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."
|
|
15797
16030
|
},
|
|
@@ -15802,7 +16035,7 @@ var authoredContracts = {
|
|
|
15802
16035
|
slots: ["default"],
|
|
15803
16036
|
events: [],
|
|
15804
16037
|
states: ["subtle", "solid"],
|
|
15805
|
-
tokenRoles: ["badge.background", "badge.
|
|
16038
|
+
tokenRoles: ["badge.background", "badge.text"],
|
|
15806
16039
|
accessibility: ["owner identity is visible", "owner is the badge variant"],
|
|
15807
16040
|
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."
|
|
15808
16041
|
},
|
|
@@ -15839,7 +16072,9 @@ var authoredContracts = {
|
|
|
15839
16072
|
"pageSizeOptions",
|
|
15840
16073
|
"showPageSizeSelector",
|
|
15841
16074
|
"showGotoPage",
|
|
15842
|
-
"showItemRange"
|
|
16075
|
+
"showItemRange"
|
|
16076
|
+
],
|
|
16077
|
+
directives: [
|
|
15843
16078
|
"pageField",
|
|
15844
16079
|
"pageSizeField",
|
|
15845
16080
|
"totalItemsField",
|
|
@@ -15907,7 +16142,7 @@ var authoredContracts = {
|
|
|
15907
16142
|
slots: ["default"],
|
|
15908
16143
|
events: [],
|
|
15909
16144
|
states: ["subtle", "solid"],
|
|
15910
|
-
tokenRoles: ["badge.background", "badge.
|
|
16145
|
+
tokenRoles: ["badge.background", "badge.text"],
|
|
15911
16146
|
accessibility: ["Inherits Badge inline noninteractive status label semantics", "The resolved label is always visible text"],
|
|
15912
16147
|
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."
|
|
15913
16148
|
},
|
|
@@ -15935,16 +16170,13 @@ var authoredContracts = {
|
|
|
15935
16170
|
"label",
|
|
15936
16171
|
"value",
|
|
15937
16172
|
"emphasis",
|
|
15938
|
-
"amountField",
|
|
15939
|
-
"currencyField",
|
|
15940
|
-
"intervalField",
|
|
15941
|
-
"minorUnitsParameter",
|
|
15942
16173
|
"minorUnits"
|
|
15943
16174
|
],
|
|
16175
|
+
directives: ["field", "amountField", "currencyField", "intervalField", "minorUnitsParameter"],
|
|
15944
16176
|
slots: ["default"],
|
|
15945
16177
|
events: [],
|
|
15946
16178
|
states: ["priced", "missing-price"],
|
|
15947
|
-
tokenRoles: ["badge.background", "badge.
|
|
16179
|
+
tokenRoles: ["badge.background", "badge.text"],
|
|
15948
16180
|
accessibility: ["Formatted amount and currency remain visible text"],
|
|
15949
16181
|
compatibility: "Currency is formatted content; the emitted badge variant remains price."
|
|
15950
16182
|
},
|
|
@@ -15984,10 +16216,9 @@ var authoredContracts = {
|
|
|
15984
16216
|
"text",
|
|
15985
16217
|
"timezone",
|
|
15986
16218
|
"now",
|
|
15987
|
-
"fallbackField",
|
|
15988
|
-
"timezoneParameter",
|
|
15989
16219
|
"hideWhenEmpty"
|
|
15990
16220
|
],
|
|
16221
|
+
directives: ["field", "fallbackField", "timezoneParameter"],
|
|
15991
16222
|
slots: ["default"],
|
|
15992
16223
|
events: [],
|
|
15993
16224
|
states: ["relative", "absolute", "empty"],
|
|
@@ -16013,7 +16244,7 @@ var authoredContracts = {
|
|
|
16013
16244
|
slots: ["default"],
|
|
16014
16245
|
events: [],
|
|
16015
16246
|
states: ["populated", "fallback"],
|
|
16016
|
-
tokenRoles: ["badge.background", "badge.
|
|
16247
|
+
tokenRoles: ["badge.background", "badge.text"],
|
|
16017
16248
|
accessibility: ["Each role is visible text inside one inline noninteractive group", "An empty list falls back to a visible label"],
|
|
16018
16249
|
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."
|
|
16019
16250
|
},
|
|
@@ -16030,12 +16261,9 @@ var authoredContracts = {
|
|
|
16030
16261
|
"debounceMs",
|
|
16031
16262
|
"debounce",
|
|
16032
16263
|
"minQueryLength",
|
|
16033
|
-
"disabled"
|
|
16034
|
-
"placeholderParameter",
|
|
16035
|
-
"debounceParameter",
|
|
16036
|
-
"minQueryLengthParameter",
|
|
16037
|
-
"clearableParameter"
|
|
16264
|
+
"disabled"
|
|
16038
16265
|
],
|
|
16266
|
+
directives: ["field", "placeholderParameter", "debounceParameter", "minQueryLengthParameter", "clearableParameter"],
|
|
16039
16267
|
slots: [],
|
|
16040
16268
|
events: ["valueChange", "update", "search", "clear"],
|
|
16041
16269
|
states: ["empty", "valued", "disabled"],
|
|
@@ -16059,7 +16287,8 @@ var authoredContracts = {
|
|
|
16059
16287
|
Stack: {
|
|
16060
16288
|
id: "Stack",
|
|
16061
16289
|
version: COMPONENT_CONTRACT_VERSION_1_1,
|
|
16062
|
-
props: ["direction", "gap", "align", "justify", "wrap"
|
|
16290
|
+
props: ["direction", "gap", "align", "justify", "wrap"],
|
|
16291
|
+
directives: ["patternComponent", "fields"],
|
|
16063
16292
|
slots: ["default"],
|
|
16064
16293
|
events: [],
|
|
16065
16294
|
states: ["row", "column", "wrapped"],
|
|
@@ -16081,15 +16310,14 @@ var authoredContracts = {
|
|
|
16081
16310
|
"emphasis",
|
|
16082
16311
|
"showIcon",
|
|
16083
16312
|
"variant",
|
|
16084
|
-
"statusField",
|
|
16085
|
-
"domainField",
|
|
16086
16313
|
"readOnly",
|
|
16087
16314
|
"compact"
|
|
16088
16315
|
],
|
|
16316
|
+
directives: ["field", "statusField", "domainField"],
|
|
16089
16317
|
slots: ["default"],
|
|
16090
16318
|
events: [],
|
|
16091
16319
|
states: ["subtle", "solid"],
|
|
16092
|
-
tokenRoles: ["badge.background", "badge.
|
|
16320
|
+
tokenRoles: ["badge.background", "badge.text", "badge.icon"],
|
|
16093
16321
|
accessibility: ["Status label is visible", "Color is not the sole status signal"],
|
|
16094
16322
|
compatibility: "Both targets share the lifecycle status-to-tone table."
|
|
16095
16323
|
},
|
|
@@ -16116,12 +16344,21 @@ var authoredContracts = {
|
|
|
16116
16344
|
"stateHistory",
|
|
16117
16345
|
"status",
|
|
16118
16346
|
"allowedTransitions",
|
|
16119
|
-
"historyField",
|
|
16120
|
-
"statesParameter",
|
|
16121
16347
|
"showActorId",
|
|
16122
16348
|
"showReason",
|
|
16123
16349
|
"maxVisible"
|
|
16124
16350
|
],
|
|
16351
|
+
directives: [
|
|
16352
|
+
"field",
|
|
16353
|
+
"historyField",
|
|
16354
|
+
"statesParameter",
|
|
16355
|
+
"auditLogField",
|
|
16356
|
+
"createdField",
|
|
16357
|
+
"updatedField",
|
|
16358
|
+
"eventField",
|
|
16359
|
+
"eventTimestampField",
|
|
16360
|
+
"eventOptionsParameter"
|
|
16361
|
+
],
|
|
16125
16362
|
slots: ["default"],
|
|
16126
16363
|
events: [],
|
|
16127
16364
|
states: ["populated", "empty"],
|
|
@@ -16129,10 +16366,22 @@ var authoredContracts = {
|
|
|
16129
16366
|
accessibility: ["Ordered status events retain chronological semantics", "Current state is named"],
|
|
16130
16367
|
compatibility: "Configures the shared timeline primitive with status-transition semantics."
|
|
16131
16368
|
},
|
|
16369
|
+
Switch: {
|
|
16370
|
+
id: "Switch",
|
|
16371
|
+
version: COMPONENT_CONTRACT_VERSION,
|
|
16372
|
+
requiredProps: ["id", "label"],
|
|
16373
|
+
props: ["id", "label", "checked", "defaultChecked", "required", "disabled", "help", "validation", "size"],
|
|
16374
|
+
slots: ["label", "help", "validation"],
|
|
16375
|
+
events: ["change", "update"],
|
|
16376
|
+
states: ["off", "on", "disabled", "invalid"],
|
|
16377
|
+
tokenRoles: ["switch.track", "switch.thumb", "switch.border", "switch.focus", "field.message"],
|
|
16378
|
+
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"],
|
|
16379
|
+
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."
|
|
16380
|
+
},
|
|
16132
16381
|
Table: {
|
|
16133
16382
|
id: "Table",
|
|
16134
16383
|
version: COMPONENT_CONTRACT_VERSION,
|
|
16135
|
-
props: ["caption", "columns", "rows", "density", "selectable"],
|
|
16384
|
+
props: ["caption", "showCaption", "columns", "rows", "density", "selectable"],
|
|
16136
16385
|
slots: ["caption", "head", "body", "row", "headerCell", "cell"],
|
|
16137
16386
|
events: ["rowActivate"],
|
|
16138
16387
|
states: ["default", "compact", "selectable"],
|
|
@@ -16180,7 +16429,7 @@ var authoredContracts = {
|
|
|
16180
16429
|
slots: ["default"],
|
|
16181
16430
|
events: [],
|
|
16182
16431
|
states: ["populated", "overflow", "empty"],
|
|
16183
|
-
tokenRoles: ["badge.background", "badge.
|
|
16432
|
+
tokenRoles: ["badge.background", "badge.text"],
|
|
16184
16433
|
accessibility: ["Each visible tag is text inside one noninteractive group", "The overflow label is visible text"],
|
|
16185
16434
|
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."
|
|
16186
16435
|
},
|
|
@@ -16234,35 +16483,35 @@ var authoredContracts = {
|
|
|
16234
16483
|
VizAreaPreview: {
|
|
16235
16484
|
id: "VizAreaPreview",
|
|
16236
16485
|
version: COMPONENT_CONTRACT_VERSION_1_1,
|
|
16237
|
-
props: ["svg", "svgNarrow", "svgWide", "title", "description", "width", "height"],
|
|
16486
|
+
props: ["svg", "svgNarrow", "svgWide", "svgDark", "svgDarkNarrow", "svgDarkWide", "svgHc", "svgHcNarrow", "svgHcWide", "title", "description", "width", "height"],
|
|
16238
16487
|
slots: ["default"],
|
|
16239
16488
|
events: [],
|
|
16240
16489
|
states: ["placeholder", "content"],
|
|
16241
16490
|
tokenRoles: ["preview.frame", "preview.placeholder"],
|
|
16242
16491
|
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"],
|
|
16243
|
-
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."
|
|
16492
|
+
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."
|
|
16244
16493
|
},
|
|
16245
16494
|
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." },
|
|
16246
16495
|
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." },
|
|
16247
16496
|
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." },
|
|
16248
16497
|
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." },
|
|
16249
16498
|
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." },
|
|
16250
|
-
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." },
|
|
16499
|
+
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." },
|
|
16251
16500
|
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." },
|
|
16252
|
-
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." },
|
|
16501
|
+
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." },
|
|
16253
16502
|
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." },
|
|
16254
|
-
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." },
|
|
16503
|
+
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." },
|
|
16255
16504
|
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." },
|
|
16256
|
-
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." },
|
|
16505
|
+
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." },
|
|
16257
16506
|
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." },
|
|
16258
16507
|
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." },
|
|
16259
16508
|
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." },
|
|
16260
|
-
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." },
|
|
16509
|
+
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." },
|
|
16261
16510
|
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." },
|
|
16262
16511
|
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." },
|
|
16263
16512
|
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." },
|
|
16264
16513
|
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." },
|
|
16265
|
-
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." },
|
|
16514
|
+
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." },
|
|
16266
16515
|
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." },
|
|
16267
16516
|
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." },
|
|
16268
16517
|
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." },
|
|
@@ -16346,7 +16595,7 @@ var viz_preview_samples_v1_default = {
|
|
|
16346
16595
|
input: {
|
|
16347
16596
|
name: "Example connected relationships",
|
|
16348
16597
|
description: "Synthetic neighborhood edges illustrating relationships that share an endpoint; these are examples, not live graph data."},
|
|
16349
|
-
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">\n<rect width="360" height="200" x="0" y="0" fill="#
|
|
16598
|
+
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>'}
|
|
16350
16599
|
}
|
|
16351
16600
|
};
|
|
16352
16601
|
|
|
@@ -16428,6 +16677,10 @@ var authoredScenarios = [
|
|
|
16428
16677
|
{ 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"] },
|
|
16429
16678
|
{ 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"] },
|
|
16430
16679
|
{ 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"] },
|
|
16680
|
+
// s222-m02 (#2502 ruling 11): the two components 0.4.0 adds. The dialog example is shown in place (modal false), as a
|
|
16681
|
+
// gallery shows it; modal true is the default.
|
|
16682
|
+
{ 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"] },
|
|
16683
|
+
{ 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"] },
|
|
16431
16684
|
{ 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"] },
|
|
16432
16685
|
{ 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"] },
|
|
16433
16686
|
{ 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"] },
|
|
@@ -16536,6 +16789,18 @@ var sharedScenarios = [...authoredScenarios].sort((a, b) => a.oodsComponentId <
|
|
|
16536
16789
|
event: behavior.event
|
|
16537
16790
|
};
|
|
16538
16791
|
});
|
|
16792
|
+
var relativeTimestampEmptyScenario = {
|
|
16793
|
+
id: "relative-timestamp-empty",
|
|
16794
|
+
oodsComponentId: "RelativeTimestamp",
|
|
16795
|
+
props: { datetime: "" },
|
|
16796
|
+
slots: {},
|
|
16797
|
+
initialState: { content: "empty" },
|
|
16798
|
+
renderExpectation: { name: "render", trigger: "mount with an empty datetime", expected: "Unknown time is visible and no datetime attribute is emitted" },
|
|
16799
|
+
assertions: ["an empty value reads Unknown time", "an empty datetime is omitted, never emitted empty"],
|
|
16800
|
+
interaction: componentBehaviors.RelativeTimestamp.interaction,
|
|
16801
|
+
interactionReason: componentBehaviors.RelativeTimestamp.interactionReason,
|
|
16802
|
+
event: componentBehaviors.RelativeTimestamp.event
|
|
16803
|
+
};
|
|
16539
16804
|
|
|
16540
16805
|
// src/ported-contracts.ts
|
|
16541
16806
|
var portedComponentContracts = Object.fromEntries(
|
|
@@ -16592,6 +16857,453 @@ var RESULT_STATES = ["violation", "passed", "needs_review", "not_applicable", "n
|
|
|
16592
16857
|
var RESULT_STATE_TONE = "neutral";
|
|
16593
16858
|
var SEVERITY_TONES = ["positive", "success", "warning", "critical", "danger"];
|
|
16594
16859
|
|
|
16860
|
+
// src/status-icons.ts
|
|
16861
|
+
var path = (d) => ({ tag: "path", attrs: { d } });
|
|
16862
|
+
var circle = (cx, cy, r, filled = false) => ({
|
|
16863
|
+
tag: "circle",
|
|
16864
|
+
attrs: filled ? { cx, cy, r, fill: "currentColor", stroke: "none" } : { cx, cy, r }
|
|
16865
|
+
});
|
|
16866
|
+
var STATUS_ICON_SHAPES = Object.freeze({
|
|
16867
|
+
check: [path("M3.5 8.5l3 3 6-7")],
|
|
16868
|
+
x: [path("M4.5 4.5l7 7M11.5 4.5l-7 7")],
|
|
16869
|
+
alert: [path("M8 2.5l6 11H2z"), path("M8 6.5v3"), circle("8", "11.5", "0.75", true)],
|
|
16870
|
+
info: [circle("8", "8", "6"), path("M8 7.5V11"), circle("8", "5", "0.75", true)],
|
|
16871
|
+
clock: [circle("8", "8", "6"), path("M8 5v3l2 1.5")],
|
|
16872
|
+
dots: [circle("4", "8", "1", true), circle("8", "8", "1", true), circle("12", "8", "1", true)],
|
|
16873
|
+
refresh: [path("M13 8a5 5 0 1 1-1.5-3.5"), path("M13 2.5v3h-3")],
|
|
16874
|
+
pause: [path("M6 4v8M10 4v8")],
|
|
16875
|
+
ban: [circle("8", "8", "6"), path("M3.8 12.2l8.4-8.4")],
|
|
16876
|
+
pencil: [path("M10.5 3L13 5.5 6 12.5H3.5V10z")],
|
|
16877
|
+
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")],
|
|
16878
|
+
undo: [path("M3 8a5 5 0 1 0 1.5-3.5"), path("M3 2.5v3h3")],
|
|
16879
|
+
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")],
|
|
16880
|
+
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")],
|
|
16881
|
+
dot: [circle("8", "8", "2.5", true)]
|
|
16882
|
+
});
|
|
16883
|
+
var STATUS_ICON_SVG_ATTRS = Object.freeze({
|
|
16884
|
+
width: "1em",
|
|
16885
|
+
height: "1em",
|
|
16886
|
+
viewBox: "0 0 16 16",
|
|
16887
|
+
fill: "none",
|
|
16888
|
+
stroke: "currentColor",
|
|
16889
|
+
"stroke-width": "1.5",
|
|
16890
|
+
"stroke-linecap": "round",
|
|
16891
|
+
"stroke-linejoin": "round",
|
|
16892
|
+
"aria-hidden": "true",
|
|
16893
|
+
focusable: "false"
|
|
16894
|
+
});
|
|
16895
|
+
var STATUS_ICON_ALIASES = Object.freeze({
|
|
16896
|
+
success: "check",
|
|
16897
|
+
paid: "check",
|
|
16898
|
+
warning: "alert",
|
|
16899
|
+
critical: "x",
|
|
16900
|
+
danger: "x",
|
|
16901
|
+
error: "x",
|
|
16902
|
+
negative: "x",
|
|
16903
|
+
pending: "dots",
|
|
16904
|
+
processing: "refresh",
|
|
16905
|
+
paused: "pause",
|
|
16906
|
+
canceled: "ban",
|
|
16907
|
+
cancelled: "ban",
|
|
16908
|
+
void: "ban",
|
|
16909
|
+
draft: "pencil",
|
|
16910
|
+
info: "info",
|
|
16911
|
+
trial: "star",
|
|
16912
|
+
future: "clock",
|
|
16913
|
+
scheduled: "clock",
|
|
16914
|
+
refunded: "undo",
|
|
16915
|
+
locked: "lock",
|
|
16916
|
+
unlocked: "unlock",
|
|
16917
|
+
default: "dot"
|
|
16918
|
+
});
|
|
16919
|
+
function resolveStatusIcon(iconName) {
|
|
16920
|
+
const segment = iconName?.split(".").pop()?.toLowerCase();
|
|
16921
|
+
if (!segment) return void 0;
|
|
16922
|
+
return STATUS_ICON_ALIASES[segment] ?? "dot";
|
|
16923
|
+
}
|
|
16924
|
+
var escapeAttribute = (value) => value.replace(/&/g, "&").replace(/"/g, """).replace(/</g, "<");
|
|
16925
|
+
var attributes = (attrs) => Object.entries(attrs).map(([name, value]) => ` ${name}="${escapeAttribute(value)}"`).join("");
|
|
16926
|
+
function statusIconMarkup(name) {
|
|
16927
|
+
const shapes = STATUS_ICON_SHAPES[name].map((shape) => `<${shape.tag}${attributes(shape.attrs)}></${shape.tag}>`).join("");
|
|
16928
|
+
return `<svg${attributes(STATUS_ICON_SVG_ATTRS)}>${shapes}</svg>`;
|
|
16929
|
+
}
|
|
16930
|
+
|
|
16931
|
+
// registry/status-map.json
|
|
16932
|
+
var status_map_default = {
|
|
16933
|
+
domains: {
|
|
16934
|
+
subscription: {
|
|
16935
|
+
future: {
|
|
16936
|
+
description: "Subscription is scheduled but not yet active.",
|
|
16937
|
+
chip: {
|
|
16938
|
+
foreground: "color.text.info",
|
|
16939
|
+
background: "color.background.info.subtle",
|
|
16940
|
+
border: "color.border.info",
|
|
16941
|
+
icon: "icon.status.scheduled"
|
|
16942
|
+
},
|
|
16943
|
+
banner: {
|
|
16944
|
+
foreground: "color.text.info",
|
|
16945
|
+
background: "color.background.surface.default",
|
|
16946
|
+
border: "color.border.info",
|
|
16947
|
+
icon: "icon.status.scheduled"
|
|
16948
|
+
}
|
|
16949
|
+
},
|
|
16950
|
+
trialing: {
|
|
16951
|
+
description: "Subscription is in a trial period before billing begins.",
|
|
16952
|
+
chip: {
|
|
16953
|
+
foreground: "color.text.accent",
|
|
16954
|
+
background: "color.background.accent.subtle",
|
|
16955
|
+
border: "color.border.accent",
|
|
16956
|
+
icon: "icon.status.trial"
|
|
16957
|
+
},
|
|
16958
|
+
banner: {
|
|
16959
|
+
foreground: "color.text.accent",
|
|
16960
|
+
background: "color.background.surface.default",
|
|
16961
|
+
border: "color.border.accent",
|
|
16962
|
+
icon: "icon.status.trial"
|
|
16963
|
+
}
|
|
16964
|
+
},
|
|
16965
|
+
active: {
|
|
16966
|
+
description: "Subscription is paid and service is provisioned.",
|
|
16967
|
+
chip: {
|
|
16968
|
+
foreground: "color.text.positive",
|
|
16969
|
+
background: "color.background.positive.subtle",
|
|
16970
|
+
border: "color.border.positive",
|
|
16971
|
+
icon: "icon.status.success"
|
|
16972
|
+
},
|
|
16973
|
+
banner: {
|
|
16974
|
+
foreground: "color.text.positive",
|
|
16975
|
+
background: "color.background.surface.default",
|
|
16976
|
+
border: "color.border.positive",
|
|
16977
|
+
icon: "icon.status.success"
|
|
16978
|
+
}
|
|
16979
|
+
},
|
|
16980
|
+
paused: {
|
|
16981
|
+
description: "Billing paused temporarily by finance or customer request.",
|
|
16982
|
+
chip: {
|
|
16983
|
+
foreground: "color.text.neutral",
|
|
16984
|
+
background: "color.background.neutral.subtle",
|
|
16985
|
+
border: "color.border.neutral",
|
|
16986
|
+
icon: "icon.status.paused"
|
|
16987
|
+
},
|
|
16988
|
+
banner: {
|
|
16989
|
+
foreground: "color.text.neutral",
|
|
16990
|
+
background: "color.background.surface.muted",
|
|
16991
|
+
border: "color.border.neutral",
|
|
16992
|
+
icon: "icon.status.paused"
|
|
16993
|
+
}
|
|
16994
|
+
},
|
|
16995
|
+
pending_cancellation: {
|
|
16996
|
+
description: "Subscription will cancel at period end but remains active now.",
|
|
16997
|
+
chip: {
|
|
16998
|
+
foreground: "color.text.info",
|
|
16999
|
+
background: "color.background.info.subtle",
|
|
17000
|
+
border: "color.border.info",
|
|
17001
|
+
icon: "icon.status.pending"
|
|
17002
|
+
},
|
|
17003
|
+
banner: {
|
|
17004
|
+
foreground: "color.text.info",
|
|
17005
|
+
background: "color.background.surface.default",
|
|
17006
|
+
border: "color.border.info",
|
|
17007
|
+
icon: "icon.status.pending"
|
|
17008
|
+
}
|
|
17009
|
+
},
|
|
17010
|
+
past_due: {
|
|
17011
|
+
description: "Renewal payment failed; smart retries ongoing and access retained during the grace window.",
|
|
17012
|
+
chip: {
|
|
17013
|
+
foreground: "color.text.danger",
|
|
17014
|
+
background: "color.background.danger.subtle",
|
|
17015
|
+
border: "color.border.danger",
|
|
17016
|
+
icon: "icon.status.warning"
|
|
17017
|
+
},
|
|
17018
|
+
banner: {
|
|
17019
|
+
foreground: "color.text.onbold",
|
|
17020
|
+
background: "color.background.danger.bold",
|
|
17021
|
+
border: "color.border.danger",
|
|
17022
|
+
icon: "icon.status.warning"
|
|
17023
|
+
}
|
|
17024
|
+
},
|
|
17025
|
+
unpaid: {
|
|
17026
|
+
description: "Payment retries exhausted; service access revoked.",
|
|
17027
|
+
chip: {
|
|
17028
|
+
foreground: "color.text.danger",
|
|
17029
|
+
background: "color.background.danger.subtle",
|
|
17030
|
+
border: "color.border.danger",
|
|
17031
|
+
icon: "icon.status.error"
|
|
17032
|
+
},
|
|
17033
|
+
banner: {
|
|
17034
|
+
foreground: "color.text.onbold",
|
|
17035
|
+
background: "color.background.danger.bold",
|
|
17036
|
+
border: "color.border.danger",
|
|
17037
|
+
icon: "icon.status.error"
|
|
17038
|
+
}
|
|
17039
|
+
},
|
|
17040
|
+
terminated: {
|
|
17041
|
+
description: "Subscription ended; service access revoked and billing stopped.",
|
|
17042
|
+
chip: {
|
|
17043
|
+
foreground: "color.text.disabled",
|
|
17044
|
+
background: "color.background.disabled",
|
|
17045
|
+
border: "color.border.disabled",
|
|
17046
|
+
icon: "icon.status.canceled"
|
|
17047
|
+
},
|
|
17048
|
+
banner: {
|
|
17049
|
+
foreground: "color.text.neutral",
|
|
17050
|
+
background: "color.background.neutral.subtle",
|
|
17051
|
+
border: "color.border.neutral",
|
|
17052
|
+
icon: "icon.status.canceled"
|
|
17053
|
+
}
|
|
17054
|
+
}
|
|
17055
|
+
},
|
|
17056
|
+
invoice: {
|
|
17057
|
+
draft: {
|
|
17058
|
+
description: "Invoice is editable and not yet finalized.",
|
|
17059
|
+
chip: {
|
|
17060
|
+
foreground: "color.text.neutral",
|
|
17061
|
+
background: "color.background.neutral.subtle",
|
|
17062
|
+
border: "color.border.neutral",
|
|
17063
|
+
icon: "icon.status.draft"
|
|
17064
|
+
},
|
|
17065
|
+
banner: {
|
|
17066
|
+
foreground: "color.text.neutral",
|
|
17067
|
+
background: "color.background.surface.muted",
|
|
17068
|
+
border: "color.border.neutral",
|
|
17069
|
+
icon: "icon.status.draft"
|
|
17070
|
+
}
|
|
17071
|
+
},
|
|
17072
|
+
posted: {
|
|
17073
|
+
description: "Invoice finalized with terms before collection.",
|
|
17074
|
+
chip: {
|
|
17075
|
+
foreground: "color.text.info",
|
|
17076
|
+
background: "color.background.info.subtle",
|
|
17077
|
+
border: "color.border.info",
|
|
17078
|
+
icon: "icon.status.pending"
|
|
17079
|
+
},
|
|
17080
|
+
banner: {
|
|
17081
|
+
foreground: "color.text.info",
|
|
17082
|
+
background: "color.background.surface.default",
|
|
17083
|
+
border: "color.border.info",
|
|
17084
|
+
icon: "icon.status.pending"
|
|
17085
|
+
}
|
|
17086
|
+
},
|
|
17087
|
+
paid: {
|
|
17088
|
+
description: "Invoice collected successfully in full.",
|
|
17089
|
+
chip: {
|
|
17090
|
+
foreground: "color.text.positive",
|
|
17091
|
+
background: "color.background.positive.subtle",
|
|
17092
|
+
border: "color.border.positive",
|
|
17093
|
+
icon: "icon.status.success"
|
|
17094
|
+
},
|
|
17095
|
+
banner: {
|
|
17096
|
+
foreground: "color.text.positive",
|
|
17097
|
+
background: "color.background.surface.default",
|
|
17098
|
+
border: "color.border.positive",
|
|
17099
|
+
icon: "icon.status.success"
|
|
17100
|
+
}
|
|
17101
|
+
},
|
|
17102
|
+
past_due: {
|
|
17103
|
+
description: "Invoice is unpaid past its due date.",
|
|
17104
|
+
chip: {
|
|
17105
|
+
foreground: "color.text.danger",
|
|
17106
|
+
background: "color.background.danger.subtle",
|
|
17107
|
+
border: "color.border.danger",
|
|
17108
|
+
icon: "icon.status.error"
|
|
17109
|
+
},
|
|
17110
|
+
banner: {
|
|
17111
|
+
foreground: "color.text.onbold",
|
|
17112
|
+
background: "color.background.danger.bold",
|
|
17113
|
+
border: "color.border.danger",
|
|
17114
|
+
icon: "icon.status.error"
|
|
17115
|
+
}
|
|
17116
|
+
},
|
|
17117
|
+
void: {
|
|
17118
|
+
description: "Invoice canceled and no longer payable.",
|
|
17119
|
+
chip: {
|
|
17120
|
+
foreground: "color.text.disabled",
|
|
17121
|
+
background: "color.background.disabled",
|
|
17122
|
+
border: "color.border.disabled",
|
|
17123
|
+
icon: "icon.status.void"
|
|
17124
|
+
},
|
|
17125
|
+
banner: {
|
|
17126
|
+
foreground: "color.text.neutral",
|
|
17127
|
+
background: "color.background.neutral.subtle",
|
|
17128
|
+
border: "color.border.neutral",
|
|
17129
|
+
icon: "icon.status.void"
|
|
17130
|
+
}
|
|
17131
|
+
}
|
|
17132
|
+
}
|
|
17133
|
+
}
|
|
17134
|
+
};
|
|
17135
|
+
|
|
17136
|
+
// registry/lifecycle-status-tones.json
|
|
17137
|
+
var lifecycle_status_tones_default = {
|
|
17138
|
+
states: {
|
|
17139
|
+
active: { tone: "success", icon: "icon.status.success", description: "Active and in use." },
|
|
17140
|
+
available: { tone: "success", icon: "icon.status.success", description: "Available to use." },
|
|
17141
|
+
published: { tone: "success", icon: "icon.status.success", description: "Published and visible." },
|
|
17142
|
+
settled: { tone: "success", icon: "icon.status.success", description: "Settled in full." },
|
|
17143
|
+
succeeded: { tone: "success", icon: "icon.status.success", description: "Completed successfully." },
|
|
17144
|
+
paid: { tone: "success", icon: "icon.status.paid", description: "Paid in full." },
|
|
17145
|
+
completed: { tone: "success", icon: "icon.status.success", description: "Completed." },
|
|
17146
|
+
good_standing: { tone: "success", icon: "icon.status.success", description: "In good standing." },
|
|
17147
|
+
in_stock: { tone: "success", icon: "icon.status.success", description: "In stock." },
|
|
17148
|
+
ok: { tone: "success", icon: "icon.status.success", description: "Working as expected." },
|
|
17149
|
+
invited: { tone: "info", icon: "icon.status.pending", description: "Invited and not yet joined." },
|
|
17150
|
+
onboarding: { tone: "info", icon: "icon.status.processing", description: "Being set up." },
|
|
17151
|
+
pending: { tone: "info", icon: "icon.status.pending", description: "Waiting to be processed." },
|
|
17152
|
+
authorized: { tone: "info", icon: "icon.status.pending", description: "Authorized and not yet settled." },
|
|
17153
|
+
processing: { tone: "info", icon: "icon.status.processing", description: "Being processed." },
|
|
17154
|
+
in_review: { tone: "info", icon: "icon.status.pending", description: "In review." },
|
|
17155
|
+
scheduled: { tone: "info", icon: "icon.status.scheduled", description: "Scheduled for later." },
|
|
17156
|
+
ingested: { tone: "info", icon: "icon.status.pending", description: "Received and not yet processed." },
|
|
17157
|
+
proposed: { tone: "info", icon: "icon.status.pending", description: "Proposed and not yet agreed." },
|
|
17158
|
+
posted: { tone: "info", icon: "icon.status.pending", description: "Finalized and posted." },
|
|
17159
|
+
open: { tone: "info", icon: "icon.status.pending", description: "Open and awaiting action." },
|
|
17160
|
+
future: { tone: "info", icon: "icon.status.future", description: "Starts later." },
|
|
17161
|
+
trialing: { tone: "accent", icon: "icon.status.trial", description: "In a trial period." },
|
|
17162
|
+
private_beta: { tone: "accent", icon: "icon.status.trial", description: "Available to a limited group." },
|
|
17163
|
+
retrying: { tone: "warning", icon: "icon.status.processing", description: "Failed once and retrying." },
|
|
17164
|
+
delayed: { tone: "warning", icon: "icon.status.warning", description: "Behind schedule." },
|
|
17165
|
+
investigating: { tone: "warning", icon: "icon.status.warning", description: "Being investigated." },
|
|
17166
|
+
low_stock: { tone: "warning", icon: "icon.status.warning", description: "Running low." },
|
|
17167
|
+
backorder: { tone: "warning", icon: "icon.status.warning", description: "Out of stock and on order." },
|
|
17168
|
+
suspended: { tone: "warning", icon: "icon.status.paused", description: "Suspended for now." },
|
|
17169
|
+
deprecated: { tone: "warning", icon: "icon.status.warning", description: "Being phased out." },
|
|
17170
|
+
past_due: { tone: "critical", icon: "icon.status.warning", description: "Past its due date." },
|
|
17171
|
+
failed: { tone: "critical", icon: "icon.status.critical", description: "Failed." },
|
|
17172
|
+
unpaid: { tone: "critical", icon: "icon.status.critical", description: "Unpaid." },
|
|
17173
|
+
uncollectible: { tone: "critical", icon: "icon.status.critical", description: "Could not be collected." },
|
|
17174
|
+
draft: { tone: "neutral", icon: "icon.status.draft", description: "A draft, not yet final." },
|
|
17175
|
+
prospect: { tone: "neutral", icon: "icon.status.default", description: "Not yet a customer." },
|
|
17176
|
+
paused: { tone: "neutral", icon: "icon.status.paused", description: "Paused." },
|
|
17177
|
+
archived: { tone: "neutral", icon: "icon.status.default", description: "Archived." },
|
|
17178
|
+
legacy: { tone: "neutral", icon: "icon.status.default", description: "Kept for existing users and no longer offered." },
|
|
17179
|
+
refunded: { tone: "neutral", icon: "icon.status.refunded", description: "Refunded." },
|
|
17180
|
+
cancelled: { tone: "neutral", icon: "icon.status.cancelled", description: "Cancelled." },
|
|
17181
|
+
canceled: { tone: "neutral", icon: "icon.status.canceled", description: "Cancelled." },
|
|
17182
|
+
void: { tone: "neutral", icon: "icon.status.void", description: "Voided." },
|
|
17183
|
+
retired: { tone: "neutral", icon: "icon.status.canceled", description: "Retired and no longer offered." },
|
|
17184
|
+
discontinued: { tone: "neutral", icon: "icon.status.canceled", description: "Discontinued." },
|
|
17185
|
+
deactivated: { tone: "neutral", icon: "icon.status.canceled", description: "Deactivated." },
|
|
17186
|
+
terminated: { tone: "neutral", icon: "icon.status.canceled", description: "Ended." },
|
|
17187
|
+
churned: { tone: "neutral", icon: "icon.status.canceled", description: "No longer a customer." }
|
|
17188
|
+
}
|
|
17189
|
+
};
|
|
17190
|
+
|
|
17191
|
+
// src/status-registry.ts
|
|
17192
|
+
var TONE_ALIASES = {
|
|
17193
|
+
info: "info",
|
|
17194
|
+
informational: "info",
|
|
17195
|
+
accent: "accent",
|
|
17196
|
+
highlight: "accent",
|
|
17197
|
+
positive: "success",
|
|
17198
|
+
success: "success",
|
|
17199
|
+
ok: "success",
|
|
17200
|
+
warning: "warning",
|
|
17201
|
+
caution: "warning",
|
|
17202
|
+
danger: "critical",
|
|
17203
|
+
critical: "critical",
|
|
17204
|
+
error: "critical",
|
|
17205
|
+
negative: "critical",
|
|
17206
|
+
neutral: "neutral",
|
|
17207
|
+
pending: "info"
|
|
17208
|
+
};
|
|
17209
|
+
var toLabel = (status) => status.split(/[_-]/).filter(Boolean).map((segment) => segment.charAt(0).toUpperCase() + segment.slice(1)).join(" ");
|
|
17210
|
+
var inferTone = (entry) => {
|
|
17211
|
+
if (!entry) return "neutral";
|
|
17212
|
+
for (const reference of [entry.foreground, entry.background, entry.border]) {
|
|
17213
|
+
const segments = reference.replace(/^\{|\}$/g, "").split(/[\s./_-]+/).reverse();
|
|
17214
|
+
for (const segment of segments) {
|
|
17215
|
+
const tone = TONE_ALIASES[segment.toLowerCase()];
|
|
17216
|
+
if (tone) return tone;
|
|
17217
|
+
}
|
|
17218
|
+
}
|
|
17219
|
+
return "neutral";
|
|
17220
|
+
};
|
|
17221
|
+
var componentTokenSet = (tone) => {
|
|
17222
|
+
const normalized = tone === "positive" ? "success" : tone === "danger" ? "critical" : tone;
|
|
17223
|
+
return {
|
|
17224
|
+
background: `var(--sys-status-${normalized}-surface)`,
|
|
17225
|
+
border: `var(--sys-status-${normalized}-border)`,
|
|
17226
|
+
foreground: `var(--sys-status-${normalized}-text)`
|
|
17227
|
+
};
|
|
17228
|
+
};
|
|
17229
|
+
var rawTokenSet = (entry) => {
|
|
17230
|
+
const tone = inferTone(entry);
|
|
17231
|
+
return componentTokenSet(tone);
|
|
17232
|
+
};
|
|
17233
|
+
var bannerFallback = (tone) => tone === "neutral" ? {
|
|
17234
|
+
background: "var(--cmp-banner-background)",
|
|
17235
|
+
border: "var(--cmp-banner-border)",
|
|
17236
|
+
foreground: "var(--cmp-banner-text)"
|
|
17237
|
+
} : componentTokenSet(tone);
|
|
17238
|
+
var fallback = (domain, status, tone = "neutral") => ({
|
|
17239
|
+
domain,
|
|
17240
|
+
status,
|
|
17241
|
+
label: toLabel(status || "Unknown"),
|
|
17242
|
+
description: "Status not found in registry; falling back to the requested token set.",
|
|
17243
|
+
tone,
|
|
17244
|
+
badge: { subtle: componentTokenSet(tone), solid: componentTokenSet(tone) },
|
|
17245
|
+
banner: { subtle: bannerFallback(tone), solid: componentTokenSet(tone) }
|
|
17246
|
+
});
|
|
17247
|
+
var registry = /* @__PURE__ */ new Map();
|
|
17248
|
+
for (const [domain, entries] of Object.entries(status_map_default.domains)) {
|
|
17249
|
+
const domainEntries = /* @__PURE__ */ new Map();
|
|
17250
|
+
for (const [status, entry] of Object.entries(entries)) {
|
|
17251
|
+
const tone = inferTone(entry.chip);
|
|
17252
|
+
domainEntries.set(status.toLowerCase(), {
|
|
17253
|
+
domain,
|
|
17254
|
+
status,
|
|
17255
|
+
label: toLabel(status),
|
|
17256
|
+
description: entry.description,
|
|
17257
|
+
tone,
|
|
17258
|
+
iconName: entry.chip.icon ?? entry.banner?.icon,
|
|
17259
|
+
badge: { subtle: rawTokenSet(entry.chip), solid: componentTokenSet(tone) },
|
|
17260
|
+
banner: {
|
|
17261
|
+
subtle: entry.banner ? rawTokenSet(entry.banner) : bannerFallback(tone),
|
|
17262
|
+
solid: componentTokenSet(tone)
|
|
17263
|
+
}
|
|
17264
|
+
});
|
|
17265
|
+
}
|
|
17266
|
+
registry.set(domain, domainEntries);
|
|
17267
|
+
}
|
|
17268
|
+
var lifecycleEntries = /* @__PURE__ */ new Map();
|
|
17269
|
+
for (const [status, entry] of Object.entries(lifecycle_status_tones_default.states)) {
|
|
17270
|
+
lifecycleEntries.set(status, {
|
|
17271
|
+
domain: "lifecycle",
|
|
17272
|
+
status,
|
|
17273
|
+
label: toLabel(status),
|
|
17274
|
+
description: entry.description,
|
|
17275
|
+
tone: entry.tone,
|
|
17276
|
+
iconName: entry.icon,
|
|
17277
|
+
badge: { subtle: componentTokenSet(entry.tone), solid: componentTokenSet(entry.tone) },
|
|
17278
|
+
banner: { subtle: bannerFallback(entry.tone), solid: componentTokenSet(entry.tone) }
|
|
17279
|
+
});
|
|
17280
|
+
}
|
|
17281
|
+
registry.set("lifecycle", lifecycleEntries);
|
|
17282
|
+
var LEGACY_STATUS_ALIASES = {
|
|
17283
|
+
subscription: { delinquent: "unpaid" }
|
|
17284
|
+
};
|
|
17285
|
+
var STATUS_DOMAINS = Object.freeze([...registry.keys()]);
|
|
17286
|
+
function getStatusPresentation(domain, status) {
|
|
17287
|
+
const entries = registry.get(domain);
|
|
17288
|
+
const normalized = status.toLowerCase();
|
|
17289
|
+
const direct = entries?.get(normalized);
|
|
17290
|
+
if (direct) return direct;
|
|
17291
|
+
const alias = LEGACY_STATUS_ALIASES[domain]?.[normalized];
|
|
17292
|
+
const aliased = alias ? entries?.get(alias) : void 0;
|
|
17293
|
+
if (aliased) return { ...aliased, status, label: toLabel(status) };
|
|
17294
|
+
const shared = lifecycleEntries.get(normalized);
|
|
17295
|
+
return shared ? { ...shared, status, label: toLabel(status) } : fallback(domain, status);
|
|
17296
|
+
}
|
|
17297
|
+
function listStatuses(domain) {
|
|
17298
|
+
return [...registry.get(domain)?.values() ?? []];
|
|
17299
|
+
}
|
|
17300
|
+
function getToneTokenSet(tone) {
|
|
17301
|
+
return componentTokenSet(tone);
|
|
17302
|
+
}
|
|
17303
|
+
function getBannerToneTokenSet(tone) {
|
|
17304
|
+
return bannerFallback(tone);
|
|
17305
|
+
}
|
|
17306
|
+
|
|
16595
17307
|
// src/billing-views.ts
|
|
16596
17308
|
function billingCycle(values) {
|
|
16597
17309
|
const start = Date.parse(values.periodStart ?? "");
|
|
@@ -16695,9 +17407,15 @@ function recordCollectionEvents(record2, options = {}) {
|
|
|
16695
17407
|
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));
|
|
16696
17408
|
events.push({ id: "payment-" + source2.field, title: source2.title, at, description, kind: "payment" });
|
|
16697
17409
|
}
|
|
16698
|
-
|
|
16699
|
-
const
|
|
16700
|
-
|
|
17410
|
+
if (!chronologicalEvents(events).length) {
|
|
17411
|
+
const lastEvent = String(record2.last_event ?? "Updated");
|
|
17412
|
+
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])));
|
|
17413
|
+
const both = dated[0]?.field === "created_at" && dated[1]?.field === "last_event_at" && lastEvent !== "created";
|
|
17414
|
+
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: "" });
|
|
17415
|
+
}
|
|
17416
|
+
for (const [field2, title, reason] of [["archived_at", "Archived", "archive_reason"], ["restored_at", "Restored", void 0], ["cancellation_requested_at", "Cancellation requested", "cancellation_reason"]]) {
|
|
17417
|
+
const at = record2[field2];
|
|
17418
|
+
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]) : "" });
|
|
16701
17419
|
}
|
|
16702
17420
|
return chronologicalEvents(events);
|
|
16703
17421
|
}
|
|
@@ -16747,12 +17465,12 @@ function assertStaticSvg(svg) {
|
|
|
16747
17465
|
for (const match of markup.matchAll(/<\/?([\w:-]+)((?:[^<>"']|"[^"]*"|'[^']*')*)>/g)) {
|
|
16748
17466
|
if (markup.slice(end, match.index).includes("<") || !allowed.has(match[1].toLowerCase())) unsafe();
|
|
16749
17467
|
end = match.index + match[0].length;
|
|
16750
|
-
const
|
|
17468
|
+
const attributes2 = match[2].replace(/\/\s*$/, "");
|
|
16751
17469
|
const attribute = /\s+([\w:-]+)\s*=\s*("[^"]*"|'[^']*')/y;
|
|
16752
17470
|
let offset = 0;
|
|
16753
|
-
while (offset <
|
|
17471
|
+
while (offset < attributes2.trimEnd().length) {
|
|
16754
17472
|
attribute.lastIndex = offset;
|
|
16755
|
-
const found = attribute.exec(
|
|
17473
|
+
const found = attribute.exec(attributes2);
|
|
16756
17474
|
if (!found) unsafe();
|
|
16757
17475
|
offset = attribute.lastIndex;
|
|
16758
17476
|
const name = found[1].toLowerCase();
|
|
@@ -16783,6 +17501,27 @@ function svgCarriesTitle(svg, title) {
|
|
|
16783
17501
|
}
|
|
16784
17502
|
return false;
|
|
16785
17503
|
}
|
|
17504
|
+
var VIZ_THEME_SVG_PROPS = Object.freeze(["svgDark", "svgDarkNarrow", "svgDarkWide", "svgHc", "svgHcNarrow", "svgHcWide"]);
|
|
17505
|
+
var VIZ_SVG_PROPS = Object.freeze(["svg", "svgNarrow", "svgWide", ...VIZ_THEME_SVG_PROPS]);
|
|
17506
|
+
function vizPreviewLayers(props) {
|
|
17507
|
+
if (typeof props.svg !== "string") return [];
|
|
17508
|
+
const sets = [
|
|
17509
|
+
["light", props.svg, props.svgNarrow, props.svgWide],
|
|
17510
|
+
["dark", props.svgDark, props.svgDarkNarrow, props.svgDarkWide],
|
|
17511
|
+
["hc", props.svgHc, props.svgHcNarrow, props.svgHcWide]
|
|
17512
|
+
];
|
|
17513
|
+
const themed = VIZ_THEME_SVG_PROPS.some((key) => typeof props[key] === "string");
|
|
17514
|
+
return (themed ? sets : sets.slice(0, 1)).filter(([, design]) => typeof design === "string").map(([theme, design, narrow, wide]) => ({
|
|
17515
|
+
...themed ? { theme } : {},
|
|
17516
|
+
narrow: typeof narrow === "string",
|
|
17517
|
+
wide: typeof wide === "string",
|
|
17518
|
+
renders: [
|
|
17519
|
+
["data-viz-svg", assertStaticSvg(design)],
|
|
17520
|
+
...typeof narrow === "string" ? [["data-viz-svg-narrow", assertStaticSvg(narrow)]] : [],
|
|
17521
|
+
...typeof wide === "string" ? [["data-viz-svg-wide", assertStaticSvg(wide)]] : []
|
|
17522
|
+
]
|
|
17523
|
+
}));
|
|
17524
|
+
}
|
|
16786
17525
|
|
|
16787
17526
|
// src/disputed.ts
|
|
16788
17527
|
function auditSummary({ auditLog = [], lastN = 5 }) {
|
|
@@ -17007,7 +17746,7 @@ function validateComponentIntakeDocument(input) {
|
|
|
17007
17746
|
if (!Array.isArray(document.rows)) return [...errors, "intake rows must be an array"];
|
|
17008
17747
|
const ids = document.rows.map((row) => row && typeof row === "object" && !Array.isArray(row) && typeof row.id === "string" ? row.id : "");
|
|
17009
17748
|
if (ids.some((id) => id.length === 0)) errors.push("every intake row must have a non-empty id");
|
|
17010
|
-
if (ids.length !==
|
|
17749
|
+
if (ids.length !== 112) errors.push(`intake must contain exactly 112 rows; received ${ids.length}`);
|
|
17011
17750
|
const uniqueCount = new Set(ids).size;
|
|
17012
17751
|
if (uniqueCount !== ids.length) errors.push("intake IDs must be unique");
|
|
17013
17752
|
const sorted = [...ids].sort((a, b) => a < b ? -1 : a > b ? 1 : 0);
|
|
@@ -17021,4 +17760,4 @@ function getBaselineCapability(componentId) {
|
|
|
17021
17760
|
return componentCapabilityBaseline.rows.find((row) => row.id === componentId);
|
|
17022
17761
|
}
|
|
17023
17762
|
|
|
17024
|
-
export { BILLING_AMOUNT_ERROR, BILLING_INTERVALS, BILLING_INTERVAL_ERROR, BILLING_MINOR_UNITS, COMPONENT_CLASSIFICATIONS, COMPONENT_CONTRACT_VERSION, COMPONENT_CONTRACT_VERSION_1_1, DEFAULT_COLOR_STATES, EMISSION_ELIGIBILITY_EVIDENCE_CLASSES, FOUNDATION_V1_EVIDENCE_CLASSES, GOVERNED_DEFINITION, GOVERNED_SURFACES, NO_LAST_PAYMENT, NO_NEXT_PAYMENT, NUCLEUS_COMPONENT_IDS, PORTED_COMPONENT_IDS, RESULT_STATES, RESULT_STATE_TONE, SEVERITY_TONES, UI_WORKFLOW_STATES, VIZ_CONTROL_IDS, VIZ_CONTROL_TITLES, VIZ_PREVIEW_TYPES, VIZ_SUMMARY_IDS, ariaSort, assertStaticSvg, auditSummary, billingAmountMessage, billingAmountText, billingCycle, billingDate, billingIntervalMessage, billingPaymentRows, billingPaymentSummary, billingPeriodEnd, billingSummary, chronologicalEvents, componentBehaviors, componentCapabilityBaseline, componentContracts, componentIntake, componentReconciliationProposal, currencyMinorUnits, dateTimeInputValue, defaultVizIntent, deriveStartingComponentCount, editVizIntent, evaluateEmissionEligibility, evaluateFoundationV1, formatBillingAmount, formatDateTime, formatPriceAmount, formatPriceCode, formatReadOnlyValue, formatRecordLabel, formatReferenceLabel, geoFieldMapping, getBaselineCapability, initialSort, isGovernedComponent, isVizIntentFragment, nextSort, parseBillingAmount, portedComponentContracts, portedScenarios, recipeItemLabels, recordCollectionEvents, restartedBillingPeriod, sharedScenarios, substitutionContractReport, summarizeSubstitutionReport, summaryValue, svgCarriesTitle, traitEventRows, validMinorUnits, validateComponentIntakeDocument, vizControlFields, vizFieldValue, vizSummaryRows };
|
|
17763
|
+
export { BILLING_AMOUNT_ERROR, BILLING_INTERVALS, BILLING_INTERVAL_ERROR, BILLING_MINOR_UNITS, COMPONENT_CLASSIFICATIONS, COMPONENT_CONTRACT_VERSION, COMPONENT_CONTRACT_VERSION_1_1, DEFAULT_COLOR_STATES, EMISSION_ELIGIBILITY_EVIDENCE_CLASSES, FOUNDATION_V1_EVIDENCE_CLASSES, GOVERNED_DEFINITION, GOVERNED_SURFACES, NO_LAST_PAYMENT, NO_NEXT_PAYMENT, NUCLEUS_COMPONENT_IDS, PORTED_COMPONENT_IDS, RESULT_STATES, RESULT_STATE_TONE, SEVERITY_TONES, STATUS_DOMAINS, STATUS_ICON_SHAPES, STATUS_ICON_SVG_ATTRS, UI_WORKFLOW_STATES, VIZ_CONTROL_IDS, VIZ_CONTROL_TITLES, VIZ_PREVIEW_TYPES, VIZ_SUMMARY_IDS, VIZ_SVG_PROPS, VIZ_THEME_SVG_PROPS, ariaSort, assertStaticSvg, auditSummary, billingAmountMessage, billingAmountText, billingCycle, billingDate, billingIntervalMessage, billingPaymentRows, billingPaymentSummary, billingPeriodEnd, billingSummary, chronologicalEvents, componentBehaviors, componentCapabilityBaseline, componentContracts, componentIntake, componentReconciliationProposal, currencyMinorUnits, dateTimeInputValue, defaultVizIntent, deriveStartingComponentCount, editVizIntent, evaluateEmissionEligibility, evaluateFoundationV1, formatBillingAmount, formatDateTime, formatPriceAmount, formatPriceCode, formatReadOnlyValue, formatRecordLabel, formatReferenceLabel, geoFieldMapping, getBannerToneTokenSet, getBaselineCapability, getStatusPresentation, getToneTokenSet, initialSort, isGovernedComponent, isVizIntentFragment, listStatuses, nextSort, parseBillingAmount, portedComponentContracts, portedScenarios, recipeItemLabels, recordCollectionEvents, relativeTimestampEmptyScenario, resolveStatusIcon, restartedBillingPeriod, sharedScenarios, statusIconMarkup, substitutionContractReport, summarizeSubstitutionReport, summaryValue, svgCarriesTitle, traitEventRows, validMinorUnits, validateComponentIntakeDocument, vizControlFields, vizFieldValue, vizPreviewLayers, vizSummaryRows };
|