@oods/component-contracts 0.3.3 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/index.cjs +1131 -49
- package/dist/index.d.cts +355 -5
- package/dist/index.d.ts +355 -5
- package/dist/index.js +1116 -50
- package/package.json +1 -1
- package/registry/component-capability-additions.v1.json +288 -0
- package/registry/component-capability-ledger.v1.json +285 -1
- package/registry/component-intake.v1.json +116 -1
- package/registry/component-obligation-scope.v1.json +2 -2
- package/registry/component-reconciliation.proposed.v2.json +78 -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: 114,
|
|
8
8
|
countRule: "Derived from the unique, deterministically sorted rows array; never from an independent counter.",
|
|
9
9
|
rows: [
|
|
10
10
|
{
|
|
@@ -935,6 +935,38 @@ var component_intake_v1_default = {
|
|
|
935
935
|
"traits/visual/Colorized.trait.yaml"
|
|
936
936
|
]
|
|
937
937
|
},
|
|
938
|
+
{
|
|
939
|
+
id: "Combobox",
|
|
940
|
+
displayName: "Combobox",
|
|
941
|
+
baselineMetadata: {
|
|
942
|
+
categories: [
|
|
943
|
+
"primitive"
|
|
944
|
+
],
|
|
945
|
+
tags: [
|
|
946
|
+
"autocomplete",
|
|
947
|
+
"combobox",
|
|
948
|
+
"field",
|
|
949
|
+
"filter",
|
|
950
|
+
"form",
|
|
951
|
+
"input",
|
|
952
|
+
"interactive",
|
|
953
|
+
"primitive",
|
|
954
|
+
"select"
|
|
955
|
+
],
|
|
956
|
+
contexts: [
|
|
957
|
+
"form"
|
|
958
|
+
],
|
|
959
|
+
regions: [
|
|
960
|
+
"form",
|
|
961
|
+
"main"
|
|
962
|
+
]
|
|
963
|
+
},
|
|
964
|
+
intakeEvidence: [
|
|
965
|
+
"packages/component-contracts/src/contracts.ts#Combobox",
|
|
966
|
+
"packages/mcp-server/src/render/component-map.ts#renderCombobox"
|
|
967
|
+
],
|
|
968
|
+
addedBy: "s223-m02; decision #2527 ruling 11"
|
|
969
|
+
},
|
|
938
970
|
{
|
|
939
971
|
id: "CommunicationDetailPanel",
|
|
940
972
|
displayName: "CommunicationDetailPanel",
|
|
@@ -1050,6 +1082,28 @@ var component_intake_v1_default = {
|
|
|
1050
1082
|
"traits/content/Labelled.trait.yaml"
|
|
1051
1083
|
]
|
|
1052
1084
|
},
|
|
1085
|
+
{
|
|
1086
|
+
id: "Dialog",
|
|
1087
|
+
displayName: "Dialog",
|
|
1088
|
+
baselineMetadata: {
|
|
1089
|
+
categories: [
|
|
1090
|
+
"primitive"
|
|
1091
|
+
],
|
|
1092
|
+
tags: [
|
|
1093
|
+
"dialog",
|
|
1094
|
+
"modal",
|
|
1095
|
+
"overlay",
|
|
1096
|
+
"primitive"
|
|
1097
|
+
],
|
|
1098
|
+
contexts: [],
|
|
1099
|
+
regions: []
|
|
1100
|
+
},
|
|
1101
|
+
intakeEvidence: [
|
|
1102
|
+
"packages/component-contracts/src/contracts.ts#Dialog",
|
|
1103
|
+
"packages/mcp-server/src/render/component-map.ts#renderDialog"
|
|
1104
|
+
],
|
|
1105
|
+
addedBy: "s222-m02; decision #2502 ruling 11"
|
|
1106
|
+
},
|
|
1053
1107
|
{
|
|
1054
1108
|
id: "FilterPanel",
|
|
1055
1109
|
displayName: "FilterPanel",
|
|
@@ -1898,6 +1952,37 @@ var component_intake_v1_default = {
|
|
|
1898
1952
|
"traits/behavioral/Searchable.trait.yaml"
|
|
1899
1953
|
]
|
|
1900
1954
|
},
|
|
1955
|
+
{
|
|
1956
|
+
id: "SegmentedControl",
|
|
1957
|
+
displayName: "SegmentedControl",
|
|
1958
|
+
baselineMetadata: {
|
|
1959
|
+
categories: [
|
|
1960
|
+
"primitive"
|
|
1961
|
+
],
|
|
1962
|
+
tags: [
|
|
1963
|
+
"choice",
|
|
1964
|
+
"field",
|
|
1965
|
+
"form",
|
|
1966
|
+
"input",
|
|
1967
|
+
"interactive",
|
|
1968
|
+
"primitive",
|
|
1969
|
+
"radio",
|
|
1970
|
+
"segmented-control"
|
|
1971
|
+
],
|
|
1972
|
+
contexts: [
|
|
1973
|
+
"form"
|
|
1974
|
+
],
|
|
1975
|
+
regions: [
|
|
1976
|
+
"form",
|
|
1977
|
+
"main"
|
|
1978
|
+
]
|
|
1979
|
+
},
|
|
1980
|
+
intakeEvidence: [
|
|
1981
|
+
"packages/component-contracts/src/contracts.ts#SegmentedControl",
|
|
1982
|
+
"packages/mcp-server/src/render/component-map.ts#renderSegmentedControl"
|
|
1983
|
+
],
|
|
1984
|
+
addedBy: "s223-m02; decision #2527 ruling 10"
|
|
1985
|
+
},
|
|
1901
1986
|
{
|
|
1902
1987
|
id: "Select",
|
|
1903
1988
|
displayName: "Select",
|
|
@@ -2155,6 +2240,36 @@ var component_intake_v1_default = {
|
|
|
2155
2240
|
"traits/lifecycle/Stateful.trait.yaml"
|
|
2156
2241
|
]
|
|
2157
2242
|
},
|
|
2243
|
+
{
|
|
2244
|
+
id: "Switch",
|
|
2245
|
+
displayName: "Switch",
|
|
2246
|
+
baselineMetadata: {
|
|
2247
|
+
categories: [
|
|
2248
|
+
"primitive"
|
|
2249
|
+
],
|
|
2250
|
+
tags: [
|
|
2251
|
+
"boolean",
|
|
2252
|
+
"field",
|
|
2253
|
+
"form",
|
|
2254
|
+
"input",
|
|
2255
|
+
"interactive",
|
|
2256
|
+
"primitive",
|
|
2257
|
+
"switch"
|
|
2258
|
+
],
|
|
2259
|
+
contexts: [
|
|
2260
|
+
"form"
|
|
2261
|
+
],
|
|
2262
|
+
regions: [
|
|
2263
|
+
"form",
|
|
2264
|
+
"main"
|
|
2265
|
+
]
|
|
2266
|
+
},
|
|
2267
|
+
intakeEvidence: [
|
|
2268
|
+
"packages/component-contracts/src/contracts.ts#Switch",
|
|
2269
|
+
"packages/mcp-server/src/render/component-map.ts#renderSwitch"
|
|
2270
|
+
],
|
|
2271
|
+
addedBy: "s222-m02; decision #2502 ruling 11"
|
|
2272
|
+
},
|
|
2158
2273
|
{
|
|
2159
2274
|
id: "Table",
|
|
2160
2275
|
displayName: "Table",
|
|
@@ -3174,9 +3289,9 @@ var component_reconciliation_proposed_v2_default = {
|
|
|
3174
3289
|
baselineCommit: "a5638cf819bdadb86e2336c4aabe9b2184699c13",
|
|
3175
3290
|
planningCommit: "8ce349076e7e3ba3f0b2f3f667d4fbb5c6a4b63b",
|
|
3176
3291
|
status: "proposed-awaiting-approval",
|
|
3177
|
-
controllingObligationDenominator:
|
|
3292
|
+
controllingObligationDenominator: 114,
|
|
3178
3293
|
approvedRuntimeCensus: null,
|
|
3179
|
-
proposedRuntimeCensus:
|
|
3294
|
+
proposedRuntimeCensus: 114,
|
|
3180
3295
|
rows: [
|
|
3181
3296
|
{
|
|
3182
3297
|
id: "AddressCollectionPanel",
|
|
@@ -3816,6 +3931,25 @@ var component_reconciliation_proposed_v2_default = {
|
|
|
3816
3931
|
implementationStatus: "implemented-evidence-complete",
|
|
3817
3932
|
compatibilityNote: "Retain the named public ID and existing HTML discovery contract. Governed framework implementation and measurements are linked; classification remains a proposal."
|
|
3818
3933
|
},
|
|
3934
|
+
{
|
|
3935
|
+
id: "Combobox",
|
|
3936
|
+
proposedClassification: "native",
|
|
3937
|
+
approvalState: "pending-approval",
|
|
3938
|
+
evidence: [
|
|
3939
|
+
"packages/mcp-server/src/render/component-map.ts#renderCombobox",
|
|
3940
|
+
"packages/components-react/evidence/react-readiness.v1.json#Combobox",
|
|
3941
|
+
"packages/components-vue/evidence/vue-readiness.v1.json#Combobox",
|
|
3942
|
+
"packages/component-contracts/src/contracts.ts#Combobox"
|
|
3943
|
+
],
|
|
3944
|
+
implementationStatus: "implemented-evidence-complete",
|
|
3945
|
+
proposedResolution: {
|
|
3946
|
+
surface: "react+vue+html",
|
|
3947
|
+
implementation: "Combobox",
|
|
3948
|
+
source: "packages/component-contracts/src/contracts.ts",
|
|
3949
|
+
publicIdRetained: true
|
|
3950
|
+
},
|
|
3951
|
+
compatibilityNote: "New public identity added by decision #2527 (ruling 11). Governed framework implementation and measurements are linked; classification remains a proposal."
|
|
3952
|
+
},
|
|
3819
3953
|
{
|
|
3820
3954
|
id: "CommunicationDetailPanel",
|
|
3821
3955
|
proposedClassification: "recipe",
|
|
@@ -3896,6 +4030,25 @@ var component_reconciliation_proposed_v2_default = {
|
|
|
3896
4030
|
implementationStatus: "implemented-evidence-complete",
|
|
3897
4031
|
compatibilityNote: "Retain the named public ID and existing HTML discovery contract. Governed framework implementation and measurements are linked; classification remains a proposal."
|
|
3898
4032
|
},
|
|
4033
|
+
{
|
|
4034
|
+
id: "Dialog",
|
|
4035
|
+
proposedClassification: "native",
|
|
4036
|
+
approvalState: "pending-approval",
|
|
4037
|
+
evidence: [
|
|
4038
|
+
"packages/mcp-server/src/render/component-map.ts#renderDialog",
|
|
4039
|
+
"packages/components-react/evidence/react-readiness.v1.json#Dialog",
|
|
4040
|
+
"packages/components-vue/evidence/vue-readiness.v1.json#Dialog",
|
|
4041
|
+
"packages/component-contracts/src/contracts.ts#Dialog"
|
|
4042
|
+
],
|
|
4043
|
+
implementationStatus: "implemented-evidence-complete",
|
|
4044
|
+
proposedResolution: {
|
|
4045
|
+
surface: "react+vue+html",
|
|
4046
|
+
implementation: "Dialog",
|
|
4047
|
+
source: "packages/component-contracts/src/contracts.ts",
|
|
4048
|
+
publicIdRetained: true
|
|
4049
|
+
},
|
|
4050
|
+
compatibilityNote: "New public identity added by decision #2502 (ruling 11). Governed framework implementation and measurements are linked; classification remains a proposal."
|
|
4051
|
+
},
|
|
3899
4052
|
{
|
|
3900
4053
|
id: "FilterPanel",
|
|
3901
4054
|
proposedClassification: "recipe",
|
|
@@ -4510,6 +4663,25 @@ var component_reconciliation_proposed_v2_default = {
|
|
|
4510
4663
|
implementationStatus: "implemented-evidence-complete",
|
|
4511
4664
|
compatibilityNote: "Retain the named public ID and existing HTML discovery contract. Governed framework implementation and measurements are linked; classification remains a proposal."
|
|
4512
4665
|
},
|
|
4666
|
+
{
|
|
4667
|
+
id: "SegmentedControl",
|
|
4668
|
+
proposedClassification: "native",
|
|
4669
|
+
approvalState: "pending-approval",
|
|
4670
|
+
evidence: [
|
|
4671
|
+
"packages/mcp-server/src/render/component-map.ts#renderSegmentedControl",
|
|
4672
|
+
"packages/components-react/evidence/react-readiness.v1.json#SegmentedControl",
|
|
4673
|
+
"packages/components-vue/evidence/vue-readiness.v1.json#SegmentedControl",
|
|
4674
|
+
"packages/component-contracts/src/contracts.ts#SegmentedControl"
|
|
4675
|
+
],
|
|
4676
|
+
implementationStatus: "implemented-evidence-complete",
|
|
4677
|
+
proposedResolution: {
|
|
4678
|
+
surface: "react+vue+html",
|
|
4679
|
+
implementation: "SegmentedControl",
|
|
4680
|
+
source: "packages/component-contracts/src/contracts.ts",
|
|
4681
|
+
publicIdRetained: true
|
|
4682
|
+
},
|
|
4683
|
+
compatibilityNote: "New public identity added by decision #2527 (ruling 10). Governed framework implementation and measurements are linked; classification remains a proposal."
|
|
4684
|
+
},
|
|
4513
4685
|
{
|
|
4514
4686
|
id: "Select",
|
|
4515
4687
|
proposedClassification: "native",
|
|
@@ -4671,6 +4843,25 @@ var component_reconciliation_proposed_v2_default = {
|
|
|
4671
4843
|
implementationStatus: "implemented-evidence-complete",
|
|
4672
4844
|
compatibilityNote: "Retain the named public ID and existing HTML discovery contract. Governed framework implementation and measurements are linked; classification remains a proposal."
|
|
4673
4845
|
},
|
|
4846
|
+
{
|
|
4847
|
+
id: "Switch",
|
|
4848
|
+
proposedClassification: "native",
|
|
4849
|
+
approvalState: "pending-approval",
|
|
4850
|
+
evidence: [
|
|
4851
|
+
"packages/mcp-server/src/render/component-map.ts#renderSwitch",
|
|
4852
|
+
"packages/components-react/evidence/react-readiness.v1.json#Switch",
|
|
4853
|
+
"packages/components-vue/evidence/vue-readiness.v1.json#Switch",
|
|
4854
|
+
"packages/component-contracts/src/contracts.ts#Switch"
|
|
4855
|
+
],
|
|
4856
|
+
implementationStatus: "implemented-evidence-complete",
|
|
4857
|
+
proposedResolution: {
|
|
4858
|
+
surface: "react+vue+html",
|
|
4859
|
+
implementation: "Switch",
|
|
4860
|
+
source: "packages/component-contracts/src/contracts.ts",
|
|
4861
|
+
publicIdRetained: true
|
|
4862
|
+
},
|
|
4863
|
+
compatibilityNote: "New public identity added by decision #2502 (ruling 11). Governed framework implementation and measurements are linked; classification remains a proposal."
|
|
4864
|
+
},
|
|
4674
4865
|
{
|
|
4675
4866
|
id: "Table",
|
|
4676
4867
|
proposedClassification: "native",
|
|
@@ -5383,7 +5574,7 @@ var component_capability_ledger_v1_default = {
|
|
|
5383
5574
|
schemaVersion: "1.0.0",
|
|
5384
5575
|
kind: "component-capability-ledger",
|
|
5385
5576
|
generatedAt: "2026-09-11T05:30:00Z",
|
|
5386
|
-
controllingObligationDenominator:
|
|
5577
|
+
controllingObligationDenominator: 114,
|
|
5387
5578
|
approvedRuntimeCensus: null,
|
|
5388
5579
|
source: "refresh_structured_data.py#project_measured_surfaces",
|
|
5389
5580
|
rows: [
|
|
@@ -8092,6 +8283,77 @@ var component_capability_ledger_v1_default = {
|
|
|
8092
8283
|
}
|
|
8093
8284
|
}
|
|
8094
8285
|
},
|
|
8286
|
+
{
|
|
8287
|
+
id: "Combobox",
|
|
8288
|
+
proposedClassification: "native",
|
|
8289
|
+
reconciliationState: "proposed-awaiting-approval",
|
|
8290
|
+
surfaces: {
|
|
8291
|
+
contract: {
|
|
8292
|
+
state: "versioned-v1",
|
|
8293
|
+
evidence: [
|
|
8294
|
+
"packages/component-contracts/src/contracts.ts#Combobox"
|
|
8295
|
+
]
|
|
8296
|
+
},
|
|
8297
|
+
metadata: {
|
|
8298
|
+
state: "available",
|
|
8299
|
+
evidence: [
|
|
8300
|
+
"packages/component-contracts/registry/component-intake.v1.json#Combobox"
|
|
8301
|
+
]
|
|
8302
|
+
},
|
|
8303
|
+
html: {
|
|
8304
|
+
state: "mapped",
|
|
8305
|
+
evidence: [
|
|
8306
|
+
"packages/mcp-server/src/render/component-map.ts#renderCombobox"
|
|
8307
|
+
]
|
|
8308
|
+
},
|
|
8309
|
+
react: {
|
|
8310
|
+
state: "implemented-evidence-complete",
|
|
8311
|
+
evidence: [
|
|
8312
|
+
"packages/components-react/evidence/react-readiness.v1.json#Combobox"
|
|
8313
|
+
]
|
|
8314
|
+
},
|
|
8315
|
+
vue: {
|
|
8316
|
+
state: "implemented-evidence-complete",
|
|
8317
|
+
evidence: [
|
|
8318
|
+
"packages/components-vue/evidence/vue-readiness.v1.json#Combobox"
|
|
8319
|
+
]
|
|
8320
|
+
},
|
|
8321
|
+
generatedConsumer: {
|
|
8322
|
+
state: "unavailable",
|
|
8323
|
+
evidence: [
|
|
8324
|
+
"artifacts/product-reality/sprint-193/m07/runtime/runtime-cells.v1.json"
|
|
8325
|
+
],
|
|
8326
|
+
reason: "No current runtime cell places this component; historical receipts do not establish current coverage."
|
|
8327
|
+
},
|
|
8328
|
+
accessibility: {
|
|
8329
|
+
state: "verified",
|
|
8330
|
+
evidence: [
|
|
8331
|
+
"artifacts/product-reality/sprint-223/m02/combobox/react-measured.json#Combobox",
|
|
8332
|
+
"artifacts/product-reality/sprint-223/m02/combobox/vue-measured.json#Combobox",
|
|
8333
|
+
"packages/components-react/evidence/react-readiness.v1.json#Combobox",
|
|
8334
|
+
"packages/components-vue/evidence/vue-readiness.v1.json#Combobox"
|
|
8335
|
+
]
|
|
8336
|
+
},
|
|
8337
|
+
theme: {
|
|
8338
|
+
state: "verified",
|
|
8339
|
+
evidence: [
|
|
8340
|
+
"artifacts/product-reality/sprint-223/m02/combobox/react-theme/report.json#Combobox",
|
|
8341
|
+
"artifacts/product-reality/sprint-223/m02/combobox/vue-theme/report.json#Combobox",
|
|
8342
|
+
"packages/components-react/evidence/react-readiness.v1.json#Combobox",
|
|
8343
|
+
"packages/components-vue/evidence/vue-readiness.v1.json#Combobox"
|
|
8344
|
+
]
|
|
8345
|
+
},
|
|
8346
|
+
interaction: {
|
|
8347
|
+
state: "verified",
|
|
8348
|
+
evidence: [
|
|
8349
|
+
"artifacts/product-reality/sprint-223/m02/combobox/react-measured.json#Combobox",
|
|
8350
|
+
"artifacts/product-reality/sprint-223/m02/combobox/vue-measured.json#Combobox",
|
|
8351
|
+
"packages/components-react/evidence/react-readiness.v1.json#Combobox",
|
|
8352
|
+
"packages/components-vue/evidence/vue-readiness.v1.json#Combobox"
|
|
8353
|
+
]
|
|
8354
|
+
}
|
|
8355
|
+
}
|
|
8356
|
+
},
|
|
8095
8357
|
{
|
|
8096
8358
|
id: "CommunicationDetailPanel",
|
|
8097
8359
|
proposedClassification: "recipe",
|
|
@@ -8451,6 +8713,77 @@ var component_capability_ledger_v1_default = {
|
|
|
8451
8713
|
}
|
|
8452
8714
|
}
|
|
8453
8715
|
},
|
|
8716
|
+
{
|
|
8717
|
+
id: "Dialog",
|
|
8718
|
+
proposedClassification: "native",
|
|
8719
|
+
reconciliationState: "proposed-awaiting-approval",
|
|
8720
|
+
surfaces: {
|
|
8721
|
+
contract: {
|
|
8722
|
+
state: "versioned-v1",
|
|
8723
|
+
evidence: [
|
|
8724
|
+
"packages/component-contracts/src/contracts.ts#Dialog"
|
|
8725
|
+
]
|
|
8726
|
+
},
|
|
8727
|
+
metadata: {
|
|
8728
|
+
state: "available",
|
|
8729
|
+
evidence: [
|
|
8730
|
+
"packages/component-contracts/registry/component-intake.v1.json#Dialog"
|
|
8731
|
+
]
|
|
8732
|
+
},
|
|
8733
|
+
html: {
|
|
8734
|
+
state: "mapped",
|
|
8735
|
+
evidence: [
|
|
8736
|
+
"packages/mcp-server/src/render/component-map.ts#renderDialog"
|
|
8737
|
+
]
|
|
8738
|
+
},
|
|
8739
|
+
react: {
|
|
8740
|
+
state: "implemented-evidence-complete",
|
|
8741
|
+
evidence: [
|
|
8742
|
+
"packages/components-react/evidence/react-readiness.v1.json#Dialog"
|
|
8743
|
+
]
|
|
8744
|
+
},
|
|
8745
|
+
vue: {
|
|
8746
|
+
state: "implemented-evidence-complete",
|
|
8747
|
+
evidence: [
|
|
8748
|
+
"packages/components-vue/evidence/vue-readiness.v1.json#Dialog"
|
|
8749
|
+
]
|
|
8750
|
+
},
|
|
8751
|
+
generatedConsumer: {
|
|
8752
|
+
state: "unavailable",
|
|
8753
|
+
evidence: [
|
|
8754
|
+
"artifacts/product-reality/sprint-193/m07/runtime/runtime-cells.v1.json"
|
|
8755
|
+
],
|
|
8756
|
+
reason: "No current runtime cell places this component; historical receipts do not establish current coverage."
|
|
8757
|
+
},
|
|
8758
|
+
accessibility: {
|
|
8759
|
+
state: "verified",
|
|
8760
|
+
evidence: [
|
|
8761
|
+
"artifacts/product-reality/sprint-222/m02/switch-dialog/react-measured.json#Dialog",
|
|
8762
|
+
"artifacts/product-reality/sprint-222/m02/switch-dialog/vue-measured.json#Dialog",
|
|
8763
|
+
"packages/components-react/evidence/react-readiness.v1.json#Dialog",
|
|
8764
|
+
"packages/components-vue/evidence/vue-readiness.v1.json#Dialog"
|
|
8765
|
+
]
|
|
8766
|
+
},
|
|
8767
|
+
theme: {
|
|
8768
|
+
state: "verified",
|
|
8769
|
+
evidence: [
|
|
8770
|
+
"artifacts/product-reality/sprint-222/m02/switch-dialog/react-theme/report.json#Dialog",
|
|
8771
|
+
"artifacts/product-reality/sprint-222/m02/switch-dialog/vue-theme/report.json#Dialog",
|
|
8772
|
+
"packages/components-react/evidence/react-readiness.v1.json#Dialog",
|
|
8773
|
+
"packages/components-vue/evidence/vue-readiness.v1.json#Dialog"
|
|
8774
|
+
]
|
|
8775
|
+
},
|
|
8776
|
+
interaction: {
|
|
8777
|
+
state: "verified",
|
|
8778
|
+
evidence: [
|
|
8779
|
+
"artifacts/product-reality/sprint-222/m02/switch-dialog/react-measured.json#Dialog",
|
|
8780
|
+
"artifacts/product-reality/sprint-222/m02/switch-dialog/vue-measured.json#Dialog",
|
|
8781
|
+
"packages/components-react/evidence/react-readiness.v1.json#Dialog",
|
|
8782
|
+
"packages/components-vue/evidence/vue-readiness.v1.json#Dialog"
|
|
8783
|
+
]
|
|
8784
|
+
}
|
|
8785
|
+
}
|
|
8786
|
+
},
|
|
8454
8787
|
{
|
|
8455
8788
|
id: "FilterPanel",
|
|
8456
8789
|
proposedClassification: "recipe",
|
|
@@ -11072,6 +11405,77 @@ var component_capability_ledger_v1_default = {
|
|
|
11072
11405
|
}
|
|
11073
11406
|
}
|
|
11074
11407
|
},
|
|
11408
|
+
{
|
|
11409
|
+
id: "SegmentedControl",
|
|
11410
|
+
proposedClassification: "native",
|
|
11411
|
+
reconciliationState: "proposed-awaiting-approval",
|
|
11412
|
+
surfaces: {
|
|
11413
|
+
contract: {
|
|
11414
|
+
state: "versioned-v1",
|
|
11415
|
+
evidence: [
|
|
11416
|
+
"packages/component-contracts/src/contracts.ts#SegmentedControl"
|
|
11417
|
+
]
|
|
11418
|
+
},
|
|
11419
|
+
metadata: {
|
|
11420
|
+
state: "available",
|
|
11421
|
+
evidence: [
|
|
11422
|
+
"packages/component-contracts/registry/component-intake.v1.json#SegmentedControl"
|
|
11423
|
+
]
|
|
11424
|
+
},
|
|
11425
|
+
html: {
|
|
11426
|
+
state: "mapped",
|
|
11427
|
+
evidence: [
|
|
11428
|
+
"packages/mcp-server/src/render/component-map.ts#renderSegmentedControl"
|
|
11429
|
+
]
|
|
11430
|
+
},
|
|
11431
|
+
react: {
|
|
11432
|
+
state: "implemented-evidence-complete",
|
|
11433
|
+
evidence: [
|
|
11434
|
+
"packages/components-react/evidence/react-readiness.v1.json#SegmentedControl"
|
|
11435
|
+
]
|
|
11436
|
+
},
|
|
11437
|
+
vue: {
|
|
11438
|
+
state: "implemented-evidence-complete",
|
|
11439
|
+
evidence: [
|
|
11440
|
+
"packages/components-vue/evidence/vue-readiness.v1.json#SegmentedControl"
|
|
11441
|
+
]
|
|
11442
|
+
},
|
|
11443
|
+
generatedConsumer: {
|
|
11444
|
+
state: "unavailable",
|
|
11445
|
+
evidence: [
|
|
11446
|
+
"artifacts/product-reality/sprint-193/m07/runtime/runtime-cells.v1.json"
|
|
11447
|
+
],
|
|
11448
|
+
reason: "No current runtime cell places this component; historical receipts do not establish current coverage."
|
|
11449
|
+
},
|
|
11450
|
+
accessibility: {
|
|
11451
|
+
state: "verified",
|
|
11452
|
+
evidence: [
|
|
11453
|
+
"artifacts/product-reality/sprint-223/m02/segmented-control/react-measured.json#SegmentedControl",
|
|
11454
|
+
"artifacts/product-reality/sprint-223/m02/segmented-control/vue-measured.json#SegmentedControl",
|
|
11455
|
+
"packages/components-react/evidence/react-readiness.v1.json#SegmentedControl",
|
|
11456
|
+
"packages/components-vue/evidence/vue-readiness.v1.json#SegmentedControl"
|
|
11457
|
+
]
|
|
11458
|
+
},
|
|
11459
|
+
theme: {
|
|
11460
|
+
state: "verified",
|
|
11461
|
+
evidence: [
|
|
11462
|
+
"artifacts/product-reality/sprint-223/m02/segmented-control/react-theme/report.json#SegmentedControl",
|
|
11463
|
+
"artifacts/product-reality/sprint-223/m02/segmented-control/vue-theme/report.json#SegmentedControl",
|
|
11464
|
+
"packages/components-react/evidence/react-readiness.v1.json#SegmentedControl",
|
|
11465
|
+
"packages/components-vue/evidence/vue-readiness.v1.json#SegmentedControl"
|
|
11466
|
+
]
|
|
11467
|
+
},
|
|
11468
|
+
interaction: {
|
|
11469
|
+
state: "verified",
|
|
11470
|
+
evidence: [
|
|
11471
|
+
"artifacts/product-reality/sprint-223/m02/segmented-control/react-measured.json#SegmentedControl",
|
|
11472
|
+
"artifacts/product-reality/sprint-223/m02/segmented-control/vue-measured.json#SegmentedControl",
|
|
11473
|
+
"packages/components-react/evidence/react-readiness.v1.json#SegmentedControl",
|
|
11474
|
+
"packages/components-vue/evidence/vue-readiness.v1.json#SegmentedControl"
|
|
11475
|
+
]
|
|
11476
|
+
}
|
|
11477
|
+
}
|
|
11478
|
+
},
|
|
11075
11479
|
{
|
|
11076
11480
|
id: "Select",
|
|
11077
11481
|
proposedClassification: "native",
|
|
@@ -12039,6 +12443,77 @@ var component_capability_ledger_v1_default = {
|
|
|
12039
12443
|
}
|
|
12040
12444
|
}
|
|
12041
12445
|
},
|
|
12446
|
+
{
|
|
12447
|
+
id: "Switch",
|
|
12448
|
+
proposedClassification: "native",
|
|
12449
|
+
reconciliationState: "proposed-awaiting-approval",
|
|
12450
|
+
surfaces: {
|
|
12451
|
+
contract: {
|
|
12452
|
+
state: "versioned-v1",
|
|
12453
|
+
evidence: [
|
|
12454
|
+
"packages/component-contracts/src/contracts.ts#Switch"
|
|
12455
|
+
]
|
|
12456
|
+
},
|
|
12457
|
+
metadata: {
|
|
12458
|
+
state: "available",
|
|
12459
|
+
evidence: [
|
|
12460
|
+
"packages/component-contracts/registry/component-intake.v1.json#Switch"
|
|
12461
|
+
]
|
|
12462
|
+
},
|
|
12463
|
+
html: {
|
|
12464
|
+
state: "mapped",
|
|
12465
|
+
evidence: [
|
|
12466
|
+
"packages/mcp-server/src/render/component-map.ts#renderSwitch"
|
|
12467
|
+
]
|
|
12468
|
+
},
|
|
12469
|
+
react: {
|
|
12470
|
+
state: "implemented-evidence-complete",
|
|
12471
|
+
evidence: [
|
|
12472
|
+
"packages/components-react/evidence/react-readiness.v1.json#Switch"
|
|
12473
|
+
]
|
|
12474
|
+
},
|
|
12475
|
+
vue: {
|
|
12476
|
+
state: "implemented-evidence-complete",
|
|
12477
|
+
evidence: [
|
|
12478
|
+
"packages/components-vue/evidence/vue-readiness.v1.json#Switch"
|
|
12479
|
+
]
|
|
12480
|
+
},
|
|
12481
|
+
generatedConsumer: {
|
|
12482
|
+
state: "unavailable",
|
|
12483
|
+
evidence: [
|
|
12484
|
+
"artifacts/product-reality/sprint-193/m07/runtime/runtime-cells.v1.json"
|
|
12485
|
+
],
|
|
12486
|
+
reason: "No current runtime cell places this component; historical receipts do not establish current coverage."
|
|
12487
|
+
},
|
|
12488
|
+
accessibility: {
|
|
12489
|
+
state: "verified",
|
|
12490
|
+
evidence: [
|
|
12491
|
+
"artifacts/product-reality/sprint-222/m02/switch-dialog/react-measured.json#Switch",
|
|
12492
|
+
"artifacts/product-reality/sprint-222/m02/switch-dialog/vue-measured.json#Switch",
|
|
12493
|
+
"packages/components-react/evidence/react-readiness.v1.json#Switch",
|
|
12494
|
+
"packages/components-vue/evidence/vue-readiness.v1.json#Switch"
|
|
12495
|
+
]
|
|
12496
|
+
},
|
|
12497
|
+
theme: {
|
|
12498
|
+
state: "verified",
|
|
12499
|
+
evidence: [
|
|
12500
|
+
"artifacts/product-reality/sprint-222/m02/switch-dialog/react-theme/report.json#Switch",
|
|
12501
|
+
"artifacts/product-reality/sprint-222/m02/switch-dialog/vue-theme/report.json#Switch",
|
|
12502
|
+
"packages/components-react/evidence/react-readiness.v1.json#Switch",
|
|
12503
|
+
"packages/components-vue/evidence/vue-readiness.v1.json#Switch"
|
|
12504
|
+
]
|
|
12505
|
+
},
|
|
12506
|
+
interaction: {
|
|
12507
|
+
state: "verified",
|
|
12508
|
+
evidence: [
|
|
12509
|
+
"artifacts/product-reality/sprint-222/m02/switch-dialog/react-measured.json#Switch",
|
|
12510
|
+
"artifacts/product-reality/sprint-222/m02/switch-dialog/vue-measured.json#Switch",
|
|
12511
|
+
"packages/components-react/evidence/react-readiness.v1.json#Switch",
|
|
12512
|
+
"packages/components-vue/evidence/vue-readiness.v1.json#Switch"
|
|
12513
|
+
]
|
|
12514
|
+
}
|
|
12515
|
+
}
|
|
12516
|
+
},
|
|
12042
12517
|
{
|
|
12043
12518
|
id: "Table",
|
|
12044
12519
|
proposedClassification: "native",
|
|
@@ -15099,10 +15574,12 @@ var NUCLEUS_COMPONENT_IDS = [
|
|
|
15099
15574
|
"ColorStatePicker",
|
|
15100
15575
|
"ColorSwatch",
|
|
15101
15576
|
"ColorizedBadge",
|
|
15577
|
+
"Combobox",
|
|
15102
15578
|
"CommunicationDetailPanel",
|
|
15103
15579
|
"CycleProgressCard",
|
|
15104
15580
|
"DatePicker",
|
|
15105
15581
|
"DetailHeader",
|
|
15582
|
+
"Dialog",
|
|
15106
15583
|
"FilterPanel",
|
|
15107
15584
|
"FormLabelGroup",
|
|
15108
15585
|
"GeoFieldMappingForm",
|
|
@@ -15133,6 +15610,7 @@ var NUCLEUS_COMPONENT_IDS = [
|
|
|
15133
15610
|
"RoleAssignmentForm",
|
|
15134
15611
|
"RoleBadgeList",
|
|
15135
15612
|
"SearchInput",
|
|
15613
|
+
"SegmentedControl",
|
|
15136
15614
|
"Select",
|
|
15137
15615
|
"SortIndicator",
|
|
15138
15616
|
"Stack",
|
|
@@ -15141,6 +15619,7 @@ var NUCLEUS_COMPONENT_IDS = [
|
|
|
15141
15619
|
"StatusColorLegend",
|
|
15142
15620
|
"StatusSelector",
|
|
15143
15621
|
"StatusTimeline",
|
|
15622
|
+
"Switch",
|
|
15144
15623
|
"Table",
|
|
15145
15624
|
"Tabs",
|
|
15146
15625
|
"TagInput",
|
|
@@ -15266,9 +15745,15 @@ var componentBehaviors = {
|
|
|
15266
15745
|
ClassificationPanel: { "role": "none", "name": { "strategy": "heading", "target": "h1,h2,h3,h4,h5,h6" }, "keyboard": {}, "interaction": "none", "interactionReason": "ClassificationPanel presents content and owns no focusable control or action; authored child actions remain the consumer's responsibility.", "event": [] },
|
|
15267
15746
|
ColorSwatch: { "role": "none", "name": { "strategy": "none", "target": ":root" }, "keyboard": {}, "interaction": "none", "interactionReason": "ColorSwatch presents content and owns no focusable control or action; authored child actions remain the consumer's responsibility.", "event": [] },
|
|
15268
15747
|
ColorizedBadge: { "role": "none", "name": { "strategy": "none", "target": ":root" }, "keyboard": {}, "interaction": "none", "interactionReason": "ColorizedBadge presents content and owns no focusable control or action; authored child actions remain the consumer's responsibility.", "event": [] },
|
|
15748
|
+
// s223-m02 (#2527 ruling 11): each trigger starts from the documented example (Canada chosen, the list closed). Tab reaches
|
|
15749
|
+
// the input; typing edits the filter text; Down opens the list at the first option and Up at the last (Japan, disabled,
|
|
15750
|
+
// is never reached); Home and End act on the list a key has opened; Enter picks the active option (France, after three
|
|
15751
|
+
// Downs); and Escape with the list closed clears the field and emits an empty value.
|
|
15752
|
+
Combobox: { "role": "combobox", "name": { "strategy": "label", "target": 'input[role="combobox"]' }, "keyboard": { "Tab": "Move focus to the named native control; an open list closes without picking", "x": "Type to filter the options by label", "ArrowDown": "Open the list and move to the next option", "ArrowUp": "Move to the previous option; with the list closed, open it at the last option", "Home": "Move to the first option of an open list", "End": "Move to the last option of an open list", "Enter": "Pick the active option and close the list", "Escape": "Close the list; with the list closed, clear the field" }, "interaction": "interactive", "event": [{ "trigger": "keyboard", "target": 'input[role="combobox"]', "key": "Tab", "effect": { "kind": "focus" } }, { "trigger": "keyboard", "target": 'input[role="combobox"]', "key": "x", "effect": { "kind": "value", "value": "Canadax" } }, { "trigger": "keyboard", "target": 'input[role="combobox"]', "key": "ArrowDown", "effect": { "kind": "active-option", "value": "Australia" } }, { "trigger": "keyboard", "target": 'input[role="combobox"]', "key": "ArrowUp", "effect": { "kind": "active-option", "value": "United States" } }, { "trigger": "keyboard", "target": 'input[role="combobox"]', "keys": ["ArrowUp"], "key": "Home", "effect": { "kind": "active-option", "value": "Australia" } }, { "trigger": "keyboard", "target": 'input[role="combobox"]', "keys": ["ArrowDown"], "key": "End", "effect": { "kind": "active-option", "value": "United States" } }, { "trigger": "keyboard", "target": 'input[role="combobox"]', "keys": ["ArrowDown", "ArrowDown", "ArrowDown"], "key": "Enter", "effect": { "kind": "event", "value": "fr" } }, { "trigger": "keyboard", "target": 'input[role="combobox"]', "key": "Escape", "effect": { "kind": "event", "value": "" } }] },
|
|
15269
15753
|
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
15754
|
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
15755
|
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": [] },
|
|
15756
|
+
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
15757
|
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
15758
|
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
15759
|
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": [] },
|
|
@@ -15296,11 +15781,15 @@ var componentBehaviors = {
|
|
|
15296
15781
|
RoleAssignmentForm: { "role": "textbox", "name": { "strategy": "label", "target": 'input[name="assignee"]' }, "keyboard": { "Tab": "Move focus to the named native control", "x": "Edit the named control" }, "interaction": "interactive", "event": [{ "trigger": "keyboard", "target": 'input[name="assignee"]', "key": "Tab", "effect": { "kind": "focus" } }, { "trigger": "keyboard", "target": 'input[name="assignee"]', "effect": { "kind": "value", "value": "ada@example.testx" }, "key": "x" }] },
|
|
15297
15782
|
RoleBadgeList: { "role": "none", "name": { "strategy": "none", "target": ":root" }, "keyboard": {}, "interaction": "none", "interactionReason": "RoleBadgeList presents content and owns no focusable control or action; authored child actions remain the consumer's responsibility.", "event": [] },
|
|
15298
15783
|
SearchInput: { "role": "searchbox", "name": { "strategy": "label", "target": "input" }, "keyboard": { "Tab": "Move focus to the named native control", "Escape": "Clear the current search" }, "interaction": "interactive", "event": [{ "trigger": "keyboard", "target": "input", "key": "Escape", "effect": { "kind": "event", "value": "" } }, { "trigger": "keyboard", "target": "input", "key": "Tab", "effect": { "kind": "focus" } }, { "trigger": "pointer", "target": 'button[aria-label="Clear search"]', "action": "click", "effect": { "kind": "event", "value": "" } }] },
|
|
15784
|
+
// s223-m02 (#2527 ruling 10): the focus target is the checked radio, as Tabs names its tab; the radiogroup and its name
|
|
15785
|
+
// are asserted in each framework's scenario spec. The browser owns the keys, so each is a native radio-group move.
|
|
15786
|
+
SegmentedControl: { "role": "radio", "name": { "strategy": "label", "target": 'input[type="radio"]:checked' }, "keyboard": { "Tab": "Move focus to the checked option", "ArrowRight": "Check and focus the next option", "ArrowDown": "Check and focus the next option", "ArrowLeft": "Check and focus the previous option", "ArrowUp": "Check and focus the previous option" }, "interaction": "interactive", "event": [{ "trigger": "keyboard", "target": 'input[type="radio"]:checked', "key": "Tab", "effect": { "kind": "focus" } }, { "trigger": "keyboard", "target": 'input[type="radio"]:checked', "key": "ArrowRight", "effect": { "kind": "event", "value": "yearly" } }, { "trigger": "keyboard", "target": 'input[type="radio"]:checked', "key": "ArrowDown", "effect": { "kind": "event", "value": "yearly" } }, { "trigger": "keyboard", "target": 'input[type="radio"]:checked', "key": "ArrowLeft", "effect": { "kind": "event", "value": "monthly" } }, { "trigger": "keyboard", "target": 'input[type="radio"]:checked', "key": "ArrowUp", "effect": { "kind": "event", "value": "monthly" } }, { "trigger": "pointer", "target": 'input[value="yearly"]', "effect": { "kind": "event", "value": "yearly" }, "action": "click" }] },
|
|
15299
15787
|
Select: { "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": "basic" }, "action": "select", "value": "basic" }] },
|
|
15300
15788
|
Stack: { "role": "none", "name": { "strategy": "none", "target": ":root" }, "keyboard": {}, "interaction": "none", "interactionReason": "Stack presents content and owns no focusable control or action; authored child actions remain the consumer's responsibility.", "event": [] },
|
|
15301
15789
|
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
15790
|
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
15791
|
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": [] },
|
|
15792
|
+
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
15793
|
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
15794
|
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
15795
|
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" }] },
|
|
@@ -15326,7 +15815,7 @@ var authoredContracts = {
|
|
|
15326
15815
|
states: ["summary", "content"],
|
|
15327
15816
|
tokenRoles: ["panel.background", "panel.border", "panel.title", "panel.subtitle"],
|
|
15328
15817
|
accessibility: ["A real h3 heading names the panel section", "Subtitle and summary text remain visible beside the heading", "The panel is noninteractive"],
|
|
15329
|
-
compatibility: "Mirrors renderAddressCollectionPanel over renderPanelSection with data-panel-type=address: title aliases title/label/heading/name (default Addresses), subtitle aliases subtitle/description/metadata, and summary/text/body/emptyMessage fill the content area only without authored children. The saved-schema directives roleField, defaultRoleField and roleParameter are consumed by codegen and left unbound
|
|
15818
|
+
compatibility: "Mirrors renderAddressCollectionPanel over renderPanelSection with data-panel-type=address: title aliases title/label/heading/name (default Addresses), subtitle aliases subtitle/description/metadata, and summary/text/body/emptyMessage fill the content area only without authored children. The saved-schema directives roleField, defaultRoleField and roleParameter are consumed by codegen and left unbound. The generic field (the addresses collection) lowers to summary, the record's addresses one line each (addressCollectionSummary; a generated workflow's store prints the same line), in every renderer and on a single screen as in a workflow."
|
|
15330
15819
|
},
|
|
15331
15820
|
AddressEditor: {
|
|
15332
15821
|
id: "AddressEditor",
|
|
@@ -15346,7 +15835,7 @@ var authoredContracts = {
|
|
|
15346
15835
|
slots: ["default"],
|
|
15347
15836
|
events: [],
|
|
15348
15837
|
states: ["subtle", "solid"],
|
|
15349
|
-
tokenRoles: ["badge.background", "badge.
|
|
15838
|
+
tokenRoles: ["badge.background", "badge.text"],
|
|
15350
15839
|
accessibility: ["Inherits Badge inline noninteractive status label semantics", "The resolved label is always visible text"],
|
|
15351
15840
|
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
15841
|
},
|
|
@@ -15361,17 +15850,17 @@ var authoredContracts = {
|
|
|
15361
15850
|
accessibility: ["A log region named by its title, which is also a real h3 heading", "Events are an ordered list with machine-readable timestamps", "An empty timeline is named No events"],
|
|
15362
15851
|
compatibility: "Mirrors renderAddressValidationTimeline over renderTimelineContainer with data-timeline-type=address-validation and role=log: title aliases title/label/heading/name (default Address Validation Timeline); the first array among events/validations/history supplies the events, each rendered as label, time and detail exactly as normalizeTimelineItems reads them (records use label/title/event/status/state/text/name, timestamp/datetime/time/at/createdAt/updatedAt and detail/description/reason/message/from/to; scalars render as text); no events renders the named empty item; authored children replace the list. The generic field (the addresses collection) lowers to events."
|
|
15363
15852
|
},
|
|
15364
|
-
ArchiveEvent: { "id": "ArchiveEvent", "version": "1.1.0", "props": ["title", "archivedAt", "restoredAt", "archivedBy", "reason", "showActor", "showReason"], "slots": [], "events": [], "states": ["empty", "populated"], "tokenRoles": ["surface.panel", "text.body"], "accessibility": ["Visible text exposes values without relying on color", "Named semantic container or noninteractive span"], "compatibility": "Archive and restoration instants remain distinct and ordered as declared; valid dates render stable UTC time, missing dates remain disclosed. Actor and reason are visible when supplied. metadataField and restorationMetadataField are consumed unbound, matching the retained renderer; metadata inspection is not claimed." },
|
|
15853
|
+
ArchiveEvent: { "id": "ArchiveEvent", "version": "1.1.0", "props": ["title", "archivedAt", "restoredAt", "archivedBy", "reason", "showActor", "showReason"], "slots": [], "events": [], "states": ["empty", "populated"], "tokenRoles": ["surface.panel", "text.body"], "accessibility": ["Visible text exposes values without relying on color", "Named semantic container or noninteractive span"], "compatibility": "Archive and restoration instants remain distinct and ordered as declared; valid dates render stable UTC time, missing dates remain disclosed. Actor and reason are visible when supplied; with no archive or restore recorded the card renders nothing (s223-m01). metadataField and restorationMetadataField are consumed unbound, matching the retained renderer; metadata inspection is not claimed." },
|
|
15365
15854
|
ArchivePill: {
|
|
15366
15855
|
id: "ArchivePill",
|
|
15367
15856
|
version: COMPONENT_CONTRACT_VERSION,
|
|
15368
|
-
props: ["label", "text", "status", "state", "value", "variant", "tone", "emphasis", "isArchived"],
|
|
15857
|
+
props: ["label", "text", "status", "state", "value", "variant", "tone", "emphasis", "isArchived", "hideWhenFalse"],
|
|
15369
15858
|
slots: ["default"],
|
|
15370
15859
|
events: [],
|
|
15371
15860
|
states: ["subtle", "solid"],
|
|
15372
|
-
tokenRoles: ["badge.background", "badge.
|
|
15861
|
+
tokenRoles: ["badge.background", "badge.text"],
|
|
15373
15862
|
accessibility: ["false remains visible", "archive is the badge variant"],
|
|
15374
|
-
compatibility:
|
|
15863
|
+
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. With hideWhenFalse a false flag renders nothing (s223-m01: a card shows "Archived", never the default "Not archived"); a true flag still reads Archived. archivedAtField is consumed unbound because the HTML pill has no date term. Noninteractive; no archive or restore action.'
|
|
15375
15864
|
},
|
|
15376
15865
|
ArchiveSummary: {
|
|
15377
15866
|
id: "ArchiveSummary",
|
|
@@ -15436,7 +15925,7 @@ var authoredContracts = {
|
|
|
15436
15925
|
slots: ["default"],
|
|
15437
15926
|
events: [],
|
|
15438
15927
|
states: ["subtle", "solid"],
|
|
15439
|
-
tokenRoles: ["badge.background", "badge.
|
|
15928
|
+
tokenRoles: ["badge.background", "badge.text", "badge.icon"],
|
|
15440
15929
|
accessibility: ["Inline noninteractive status label", "Decorative icons are hidden from assistive technology"],
|
|
15441
15930
|
compatibility: "The existing React status registry is the starting implementation."
|
|
15442
15931
|
},
|
|
@@ -15509,15 +15998,15 @@ var authoredContracts = {
|
|
|
15509
15998
|
CancellationBadge: {
|
|
15510
15999
|
id: "CancellationBadge",
|
|
15511
16000
|
version: COMPONENT_CONTRACT_VERSION,
|
|
15512
|
-
props: ["label", "text", "status", "state", "value", "variant", "tone", "emphasis", "cancelAtPeriodEnd", "isCancelled"],
|
|
16001
|
+
props: ["label", "text", "status", "state", "value", "variant", "tone", "emphasis", "cancelAtPeriodEnd", "isCancelled", "hideWhenFalse"],
|
|
15513
16002
|
slots: ["default"],
|
|
15514
16003
|
events: [],
|
|
15515
16004
|
states: ["subtle", "solid"],
|
|
15516
|
-
tokenRoles: ["badge.background", "badge.
|
|
16005
|
+
tokenRoles: ["badge.background", "badge.text"],
|
|
15517
16006
|
accessibility: ["false remains visible", "cancellation is the badge variant"],
|
|
15518
|
-
compatibility:
|
|
16007
|
+
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. With hideWhenFalse a false flag renders nothing (s223-m01: a card shows "Cancellation scheduled", never the default "No cancellation scheduled"); a true flag still reads Cancellation scheduled. Authored labels or children win. Noninteractive; no cancellation action.'
|
|
15519
16008
|
},
|
|
15520
|
-
CancellationEvent: { "id": "CancellationEvent", "version": "1.1.0", "props": ["title", "timestamp", "reason", "code", "showReason"], "slots": [], "events": [], "states": ["empty", "populated"], "tokenRoles": ["surface.panel", "text.body"], "accessibility": ["Visible text exposes values without relying on color", "Named semantic container or noninteractive span"], "compatibility": "Cancellation timestamp, reason and code are visible without initiating cancellation;
|
|
16009
|
+
CancellationEvent: { "id": "CancellationEvent", "version": "1.1.0", "props": ["title", "timestamp", "reason", "code", "showReason"], "slots": [], "events": [], "states": ["empty", "populated"], "tokenRoles": ["surface.panel", "text.body"], "accessibility": ["Visible text exposes values without relying on color", "Named semantic container or noninteractive span"], "compatibility": "Cancellation timestamp, reason and code are visible without initiating cancellation; with no request recorded the card renders nothing (s223-m01: an empty card is not content)." },
|
|
15521
16010
|
CancellationForm: {
|
|
15522
16011
|
id: "CancellationForm",
|
|
15523
16012
|
version: COMPONENT_CONTRACT_VERSION,
|
|
@@ -15582,7 +16071,7 @@ var authoredContracts = {
|
|
|
15582
16071
|
slots: ["default"],
|
|
15583
16072
|
events: [],
|
|
15584
16073
|
states: ["subtle", "solid"],
|
|
15585
|
-
tokenRoles: ["badge.background", "badge.
|
|
16074
|
+
tokenRoles: ["badge.background", "badge.text"],
|
|
15586
16075
|
accessibility: ["category is visible", "mode is the status metadata", "noninteractive badge"],
|
|
15587
16076
|
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."
|
|
15588
16077
|
},
|
|
@@ -15627,10 +16116,29 @@ var authoredContracts = {
|
|
|
15627
16116
|
slots: ["default"],
|
|
15628
16117
|
events: [],
|
|
15629
16118
|
states: ["subtle", "solid"],
|
|
15630
|
-
tokenRoles: ["badge.background", "badge.
|
|
16119
|
+
tokenRoles: ["badge.background", "badge.text", "badge.icon", "badge.color"],
|
|
15631
16120
|
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"],
|
|
15632
16121
|
compatibility: "Mirrors renderColorizedBadge over renderBadgePrimitive label/status/color aliases and default variant colorized; Badge tone and emphasis retain their shared behavior."
|
|
15633
16122
|
},
|
|
16123
|
+
// s223-m02 (#2527 ruling 11): pick one value from a list by typing to filter it, the WAI-ARIA combobox pattern with a
|
|
16124
|
+
// listbox popup. One markup in React, Vue and HTML; HTML's inline script gives it the same behaviour.
|
|
16125
|
+
Combobox: {
|
|
16126
|
+
id: "Combobox",
|
|
16127
|
+
version: COMPONENT_CONTRACT_VERSION,
|
|
16128
|
+
requiredProps: ["id", "label"],
|
|
16129
|
+
props: ["id", "label", "options", "value", "defaultValue", "placeholder", "name", "required", "disabled", "help", "validation", "size"],
|
|
16130
|
+
slots: ["label", "help", "validation"],
|
|
16131
|
+
events: ["change", "update"],
|
|
16132
|
+
states: ["closed", "open", "no-matches", "selected", "disabled", "invalid"],
|
|
16133
|
+
tokenRoles: ["input.background", "input.border", "input.text", "input.placeholder", "input.focus", "combobox.popup", "combobox.shadow", "combobox.option", "combobox.optionActive", "combobox.check", "field.message"],
|
|
16134
|
+
accessibility: [
|
|
16135
|
+
"An input with role combobox controls a listbox popup and reports aria-expanded, aria-autocomplete list and, while an option is active, aria-activedescendant; focus stays in the input",
|
|
16136
|
+
"The visible label names the combobox and its listbox; help and error text describe the input",
|
|
16137
|
+
"The chosen option reports aria-selected and shows a check mark; a disabled option reports aria-disabled and is skipped",
|
|
16138
|
+
"Down opens the list and moves, Up moves, Home and End go to the ends, Enter picks the active option, Escape closes the list and then clears the field, and Tab closes the list without picking"
|
|
16139
|
+
],
|
|
16140
|
+
compatibility: 'Typing filters the options to those whose label contains the typed text, ignoring case, and opens the list; when none matches the popup says No matches, which is not an option. value (controlled) or defaultValue (uncontrolled) names the chosen option, and the input shows its label. Picking an option (Enter on the active one, or a click) emits change and update with its value and closes the list; Escape with the list closed empties the input and, when an option was chosen, emits them with an empty value. An outside click or Tab closes the list without picking, and leaving the field restores the chosen label. size is the control height: xs 24, sm 28, md 32 (default) or lg 40, as Input, Select and Button. name submits the chosen value through a hidden input. The HTML renderer writes the same markup with the list closed and appends an inline script (data-oods-runtime="combobox") that gives it the same behaviour; without the script the input still shows the chosen label. One value only: no multiple selection, async loading, created values, grouped options or virtualization.'
|
|
16141
|
+
},
|
|
15634
16142
|
CommunicationDetailPanel: { "id": "CommunicationDetailPanel", "version": "1.1.0", "props": ["title", "channels", "templates", "policies", "conversations"], "slots": [], "events": [], "states": ["empty", "populated"], "tokenRoles": ["surface.panel", "text.body"], "accessibility": ["Visible text exposes values without relying on color", "Named semantic container or noninteractive span"], "compatibility": "A named read-only section renders declared channel, template, delivery policy and conversation entries. A polite status announces the conversation count; it performs no delivery or network operation." },
|
|
15635
16143
|
CycleProgressCard: {
|
|
15636
16144
|
id: "CycleProgressCard",
|
|
@@ -15666,6 +16174,18 @@ var authoredContracts = {
|
|
|
15666
16174
|
accessibility: ["A real heading element follows as/level with default h2", "Subtitle and metadata remain visible beside the heading"],
|
|
15667
16175
|
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."
|
|
15668
16176
|
},
|
|
16177
|
+
Dialog: {
|
|
16178
|
+
id: "Dialog",
|
|
16179
|
+
version: COMPONENT_CONTRACT_VERSION,
|
|
16180
|
+
requiredProps: ["title"],
|
|
16181
|
+
props: ["id", "open", "modal", "title", "description", "dismissLabel", "size", "actions"],
|
|
16182
|
+
slots: ["default", "actions"],
|
|
16183
|
+
events: ["close"],
|
|
16184
|
+
states: ["open", "closed"],
|
|
16185
|
+
tokenRoles: ["dialog.background", "dialog.border", "dialog.shadow", "dialog.backdrop", "dialog.title", "dialog.description"],
|
|
16186
|
+
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"],
|
|
16187
|
+
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 and not scrolling (the page's own overflow and padding come back exactly when it closes, by any route, or unmounts), and a click on the backdrop emits close; 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, and on a static page an inline runtime script makes the close control close it. 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."
|
|
16188
|
+
},
|
|
15669
16189
|
FilterPanel: {
|
|
15670
16190
|
id: "FilterPanel",
|
|
15671
16191
|
version: COMPONENT_CONTRACT_VERSION,
|
|
@@ -15776,7 +16296,7 @@ var authoredContracts = {
|
|
|
15776
16296
|
slots: ["default"],
|
|
15777
16297
|
events: [],
|
|
15778
16298
|
states: ["subtle", "solid"],
|
|
15779
|
-
tokenRoles: ["badge.background", "badge.
|
|
16299
|
+
tokenRoles: ["badge.background", "badge.text"],
|
|
15780
16300
|
accessibility: ["Inherits Badge inline noninteractive status label semantics", "The resolved label is always visible text"],
|
|
15781
16301
|
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."
|
|
15782
16302
|
},
|
|
@@ -15787,20 +16307,20 @@ var authoredContracts = {
|
|
|
15787
16307
|
slots: ["default"],
|
|
15788
16308
|
events: [],
|
|
15789
16309
|
states: ["subtle", "solid"],
|
|
15790
|
-
tokenRoles: ["badge.background", "badge.
|
|
16310
|
+
tokenRoles: ["badge.background", "badge.text"],
|
|
15791
16311
|
accessibility: ["owner identity is visible", "owner is the badge variant"],
|
|
15792
16312
|
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."
|
|
15793
16313
|
},
|
|
15794
16314
|
OwnershipMeta: {
|
|
15795
16315
|
id: "OwnershipMeta",
|
|
15796
16316
|
version: COMPONENT_CONTRACT_VERSION,
|
|
15797
|
-
props: ["title", "label", "heading", "name", "ownerType", "owner_type", "role", "ownershipRole"],
|
|
16317
|
+
props: ["title", "label", "heading", "name", "ownerType", "owner_type", "role", "ownershipRole", "ownerLabel"],
|
|
15798
16318
|
slots: ["default"],
|
|
15799
16319
|
events: [],
|
|
15800
16320
|
states: ["populated", "empty"],
|
|
15801
16321
|
tokenRoles: ["meta.text", "meta.label"],
|
|
15802
16322
|
accessibility: ["metadata has inline term labels", "role is visible text not an ARIA role"],
|
|
15803
|
-
compatibility:
|
|
16323
|
+
compatibility: 'Mirrors renderOwnershipMeta over renderMetaInline: title/label/heading/name (default Ownership), Owner Type ownerType/owner_type, Role role/ownershipRole. Each value is an inline span with a strong term and separator; children replace the entire body including its title. ownerTypeField and roleField lower to their consumed keys. s223-m01: given ownerLabel (ownerIdField binds the display label of the owner reference) the body is one phrase, "Owned by <label> \xB7 <type> \xB7 <role>", or "<Type>-owned" when the reference has no name. role is displayed data, never an ARIA role. Noninteractive.'
|
|
15804
16324
|
},
|
|
15805
16325
|
OwnershipSummary: {
|
|
15806
16326
|
id: "OwnershipSummary",
|
|
@@ -15894,7 +16414,7 @@ var authoredContracts = {
|
|
|
15894
16414
|
slots: ["default"],
|
|
15895
16415
|
events: [],
|
|
15896
16416
|
states: ["subtle", "solid"],
|
|
15897
|
-
tokenRoles: ["badge.background", "badge.
|
|
16417
|
+
tokenRoles: ["badge.background", "badge.text"],
|
|
15898
16418
|
accessibility: ["Inherits Badge inline noninteractive status label semantics", "The resolved label is always visible text"],
|
|
15899
16419
|
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."
|
|
15900
16420
|
},
|
|
@@ -15928,7 +16448,7 @@ var authoredContracts = {
|
|
|
15928
16448
|
slots: ["default"],
|
|
15929
16449
|
events: [],
|
|
15930
16450
|
states: ["priced", "missing-price"],
|
|
15931
|
-
tokenRoles: ["badge.background", "badge.
|
|
16451
|
+
tokenRoles: ["badge.background", "badge.text"],
|
|
15932
16452
|
accessibility: ["Formatted amount and currency remain visible text"],
|
|
15933
16453
|
compatibility: "Currency is formatted content; the emitted badge variant remains price."
|
|
15934
16454
|
},
|
|
@@ -15996,7 +16516,7 @@ var authoredContracts = {
|
|
|
15996
16516
|
slots: ["default"],
|
|
15997
16517
|
events: [],
|
|
15998
16518
|
states: ["populated", "fallback"],
|
|
15999
|
-
tokenRoles: ["badge.background", "badge.
|
|
16519
|
+
tokenRoles: ["badge.background", "badge.text"],
|
|
16000
16520
|
accessibility: ["Each role is visible text inside one inline noninteractive group", "An empty list falls back to a visible label"],
|
|
16001
16521
|
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."
|
|
16002
16522
|
},
|
|
@@ -16023,6 +16543,19 @@ var authoredContracts = {
|
|
|
16023
16543
|
accessibility: ["Native search input semantics", "Clear control has an accessible label"],
|
|
16024
16544
|
compatibility: "Debounce and minimum-query settings preserve value updates across both targets."
|
|
16025
16545
|
},
|
|
16546
|
+
// s223-m02 (#2527 ruling 10): one choice from two to five options, shown as joined segments.
|
|
16547
|
+
SegmentedControl: {
|
|
16548
|
+
id: "SegmentedControl",
|
|
16549
|
+
version: COMPONENT_CONTRACT_VERSION,
|
|
16550
|
+
requiredProps: ["id", "label"],
|
|
16551
|
+
props: ["id", "label", "options", "value", "defaultValue", "name", "size", "disabled"],
|
|
16552
|
+
slots: ["label"],
|
|
16553
|
+
events: ["change", "update"],
|
|
16554
|
+
states: ["selected", "unselected", "disabled"],
|
|
16555
|
+
tokenRoles: ["segmented.track", "segmented.selected", "segmented.ring", "segmented.text", "segmented.focus"],
|
|
16556
|
+
accessibility: ["Native radio inputs in a radiogroup named by its visible label through aria-labelledby", "Each option is a radio inside its own label, so the option text names it", "The browser gives the radio-group keyboard: the arrows move and check, and Tab enters at the checked option"],
|
|
16557
|
+
compatibility: "One choice from two to five options, each { value, label, disabled }, shown as joined segments in sizes xs, sm, md and lg: 24, 28, 32 and 40px, the button, input and select heights at each size. value (controlled) or defaultValue (uncontrolled) checks one option; with neither, none is checked and Tab enters at the first. name groups the radios and defaults to the id; disabled disables every option. Each change emits change and update with the chosen value. React, Vue and the HTML renderer write one markup, and the HTML needs no script: the native radios carry the keyboard. Icon-only segments and more than one selection are not part of it."
|
|
16558
|
+
},
|
|
16026
16559
|
Select: {
|
|
16027
16560
|
id: "Select",
|
|
16028
16561
|
version: COMPONENT_CONTRACT_VERSION_1_1,
|
|
@@ -16048,7 +16581,7 @@ var authoredContracts = {
|
|
|
16048
16581
|
accessibility: ["Does not alter child semantics"],
|
|
16049
16582
|
compatibility: "Maps saved-schema stack and inline modes to one flex primitive; patternComponent and fields are executed composition directives. Trait recipe directives authored on pattern-group Stacks are consumed by codegen: channelsField, templatesField, policiesField, conversationsField, labelField and showActor are left unbound (a layout container reads no data and the lowered StatusTimeline never governed them), while historyField and showReason travel with the lowering to the StatusTimeline whose contract governs them. Two more authoring leftovers are consumed unbound: the form composer leaves as on a Stack when it expands a heading title slot into several components, and a pattern-group Stack restates its first fields entry as a generic field; a layout container renders neither."
|
|
16050
16583
|
},
|
|
16051
|
-
StateTransitionEvent: { "id": "StateTransitionEvent", "version": "1.1.0", "props": ["title", "history", "status", "showActor", "showReason"], "slots": [], "events": [], "states": ["empty", "populated"], "tokenRoles": ["surface.panel", "text.body"], "accessibility": ["Visible text exposes values without relying on color", "Named semantic container or noninteractive span"], "compatibility": "Declared history order, from/to states, actor and reason remain visible; showActor/showReason suppress their respective details. No history is invented." },
|
|
16584
|
+
StateTransitionEvent: { "id": "StateTransitionEvent", "version": "1.1.0", "props": ["title", "history", "status", "showActor", "showReason"], "slots": [], "events": [], "states": ["empty", "populated"], "tokenRoles": ["surface.panel", "text.body"], "accessibility": ["Visible text exposes values without relying on color", "Named semantic container or noninteractive span"], "compatibility": "Declared history order, from/to states, actor and reason remain visible; showActor/showReason suppress their respective details. No history is invented; with no history the card renders nothing (s223-m01)." },
|
|
16052
16585
|
StatusBadge: {
|
|
16053
16586
|
id: "StatusBadge",
|
|
16054
16587
|
version: COMPONENT_CONTRACT_VERSION,
|
|
@@ -16069,7 +16602,7 @@ var authoredContracts = {
|
|
|
16069
16602
|
slots: ["default"],
|
|
16070
16603
|
events: [],
|
|
16071
16604
|
states: ["subtle", "solid"],
|
|
16072
|
-
tokenRoles: ["badge.background", "badge.
|
|
16605
|
+
tokenRoles: ["badge.background", "badge.text", "badge.icon"],
|
|
16073
16606
|
accessibility: ["Status label is visible", "Color is not the sole status signal"],
|
|
16074
16607
|
compatibility: "Both targets share the lifecycle status-to-tone table."
|
|
16075
16608
|
},
|
|
@@ -16118,10 +16651,22 @@ var authoredContracts = {
|
|
|
16118
16651
|
accessibility: ["Ordered status events retain chronological semantics", "Current state is named"],
|
|
16119
16652
|
compatibility: "Configures the shared timeline primitive with status-transition semantics."
|
|
16120
16653
|
},
|
|
16654
|
+
Switch: {
|
|
16655
|
+
id: "Switch",
|
|
16656
|
+
version: COMPONENT_CONTRACT_VERSION,
|
|
16657
|
+
requiredProps: ["id", "label"],
|
|
16658
|
+
props: ["id", "label", "checked", "defaultChecked", "required", "disabled", "help", "validation", "size"],
|
|
16659
|
+
slots: ["label", "help", "validation"],
|
|
16660
|
+
events: ["change", "update"],
|
|
16661
|
+
states: ["off", "on", "disabled", "invalid"],
|
|
16662
|
+
tokenRoles: ["switch.track", "switch.thumb", "switch.border", "switch.focus", "field.message"],
|
|
16663
|
+
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"],
|
|
16664
|
+
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 and an inline runtime script turns it over on a static page (aria-checked, from a click, Space or Enter); bound to a form field it also carries the field's value, "true" or "false", in a hidden input the script keeps. Bound to a record field in a generated form, it reads and writes the field's boolean as Checkbox does.`
|
|
16665
|
+
},
|
|
16121
16666
|
Table: {
|
|
16122
16667
|
id: "Table",
|
|
16123
16668
|
version: COMPONENT_CONTRACT_VERSION,
|
|
16124
|
-
props: ["caption", "columns", "rows", "density", "selectable"],
|
|
16669
|
+
props: ["caption", "showCaption", "columns", "rows", "density", "selectable"],
|
|
16125
16670
|
slots: ["caption", "head", "body", "row", "headerCell", "cell"],
|
|
16126
16671
|
events: ["rowActivate"],
|
|
16127
16672
|
states: ["default", "compact", "selectable"],
|
|
@@ -16169,7 +16714,7 @@ var authoredContracts = {
|
|
|
16169
16714
|
slots: ["default"],
|
|
16170
16715
|
events: [],
|
|
16171
16716
|
states: ["populated", "overflow", "empty"],
|
|
16172
|
-
tokenRoles: ["badge.background", "badge.
|
|
16717
|
+
tokenRoles: ["badge.background", "badge.text"],
|
|
16173
16718
|
accessibility: ["Each visible tag is text inside one noninteractive group", "The overflow label is visible text"],
|
|
16174
16719
|
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."
|
|
16175
16720
|
},
|
|
@@ -16223,35 +16768,35 @@ var authoredContracts = {
|
|
|
16223
16768
|
VizAreaPreview: {
|
|
16224
16769
|
id: "VizAreaPreview",
|
|
16225
16770
|
version: COMPONENT_CONTRACT_VERSION_1_1,
|
|
16226
|
-
props: ["svg", "svgNarrow", "svgWide", "title", "description", "width", "height"],
|
|
16771
|
+
props: ["svg", "svgNarrow", "svgWide", "svgDark", "svgDarkNarrow", "svgDarkWide", "svgHc", "svgHcNarrow", "svgHcWide", "title", "description", "width", "height"],
|
|
16227
16772
|
slots: ["default"],
|
|
16228
16773
|
events: [],
|
|
16229
16774
|
states: ["placeholder", "content"],
|
|
16230
16775
|
tokenRoles: ["preview.frame", "preview.placeholder"],
|
|
16231
16776
|
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"],
|
|
16232
|
-
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."
|
|
16777
|
+
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."
|
|
16233
16778
|
},
|
|
16234
16779
|
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." },
|
|
16235
16780
|
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." },
|
|
16236
16781
|
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." },
|
|
16237
16782
|
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." },
|
|
16238
16783
|
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." },
|
|
16239
|
-
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." },
|
|
16784
|
+
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." },
|
|
16240
16785
|
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." },
|
|
16241
|
-
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." },
|
|
16786
|
+
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." },
|
|
16242
16787
|
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." },
|
|
16243
|
-
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." },
|
|
16788
|
+
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." },
|
|
16244
16789
|
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." },
|
|
16245
|
-
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." },
|
|
16790
|
+
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." },
|
|
16246
16791
|
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." },
|
|
16247
16792
|
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." },
|
|
16248
16793
|
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." },
|
|
16249
|
-
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." },
|
|
16794
|
+
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." },
|
|
16250
16795
|
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." },
|
|
16251
16796
|
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." },
|
|
16252
16797
|
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." },
|
|
16253
16798
|
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." },
|
|
16254
|
-
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." },
|
|
16799
|
+
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." },
|
|
16255
16800
|
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." },
|
|
16256
16801
|
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." },
|
|
16257
16802
|
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." },
|
|
@@ -16335,7 +16880,7 @@ var viz_preview_samples_v1_default = {
|
|
|
16335
16880
|
input: {
|
|
16336
16881
|
name: "Example connected relationships",
|
|
16337
16882
|
description: "Synthetic neighborhood edges illustrating relationships that share an endpoint; these are examples, not live graph data."},
|
|
16338
|
-
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="#
|
|
16883
|
+
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>'}
|
|
16339
16884
|
}
|
|
16340
16885
|
};
|
|
16341
16886
|
|
|
@@ -16368,7 +16913,7 @@ var authoredScenarios = [
|
|
|
16368
16913
|
{ "id": "VizSizeControls", "oodsComponentId": "VizSizeControls", "props": { "value": { "encodings": { "size": { "field": "size", "scale": "linear" } } } }, "slots": {}, "initialState": { "encodings": { "size": { "field": "size", "scale": "linear" } } }, "renderExpectation": { "name": "change", "trigger": "append x to the first field", "expected": '{"encodings":{"size":{"field":"sizex","scale":"linear"}}}' }, "assertions": ["emitted payload is a typed public input fragment", "untouched sibling bindings are preserved", "labels name native controls"] },
|
|
16369
16914
|
{ "id": "VizSizeSummary", "oodsComponentId": "VizSizeSummary", "props": { "value": { "encodings": { "size": { "field": "size", "scale": "linear" } } } }, "slots": {}, "initialState": { "authored": true }, "renderExpectation": { "name": "render", "trigger": "mount the authored fragment or shared-renderer SVG", "expected": '{"encodings":{"size":{"field":"size","scale":"linear"}}}' }, "assertions": ["authored binding values remain readable", "no interactive chart action is implied"] },
|
|
16370
16915
|
{ "id": "ArchiveEvent", "oodsComponentId": "ArchiveEvent", "props": { "archivedAt": "2026-09-01T12:00:00Z", "restoredAt": "2026-09-02T12:00:00Z", "archivedBy": "operator-1", "reason": "Duplicate record" }, "slots": {}, "initialState": {}, "renderExpectation": { "name": "render", "trigger": "mount and declared input triggers", "expected": "Archive and restoration instants remain distinct and ordered as declared; valid dates render stable UTC time, missing dates remain disclosed. Actor and reason are visible when supplied." }, "assertions": ["Visible text exposes values without relying on color", "Named semantic container or noninteractive span"] },
|
|
16371
|
-
{ "id": "CancellationEvent", "oodsComponentId": "CancellationEvent", "props": { "timestamp": "2026-09-01T12:00:00Z", "reason": "Customer request", "code": "customer_request" }, "slots": {}, "initialState": {}, "renderExpectation": { "name": "render", "trigger": "mount and declared input triggers", "expected": "Cancellation timestamp, reason and code are visible without initiating cancellation;
|
|
16916
|
+
{ "id": "CancellationEvent", "oodsComponentId": "CancellationEvent", "props": { "timestamp": "2026-09-01T12:00:00Z", "reason": "Customer request", "code": "customer_request" }, "slots": {}, "initialState": {}, "renderExpectation": { "name": "render", "trigger": "mount and declared input triggers", "expected": "Cancellation timestamp, reason and code are visible without initiating cancellation; with no request recorded the card renders nothing." }, "assertions": ["Visible text exposes values without relying on color", "Named semantic container or noninteractive span"] },
|
|
16372
16917
|
{ "id": "StateTransitionEvent", "oodsComponentId": "StateTransitionEvent", "props": { "history": [{ "from_state": "draft", "to_state": "active", "transitioned_at": "2026-09-01T12:00:00Z", "actor_id": "operator-1", "reason": "Approved" }] }, "slots": {}, "initialState": {}, "renderExpectation": { "name": "render", "trigger": "mount and declared input triggers", "expected": "Declared history order, from/to states, actor and reason remain visible; showActor/showReason suppress their respective details. No history is invented." }, "assertions": ["Visible text exposes values without relying on color", "Named semantic container or noninteractive span"] },
|
|
16373
16918
|
{ "id": "ColorStatePicker", "oodsComponentId": "ColorStatePicker", "props": { "colorStates": ["neutral", "success"], "value": "neutral" }, "slots": {}, "initialState": {}, "renderExpectation": { "name": "render", "trigger": "mount and declared input triggers", "expected": "A labelled Select inside a fieldset edits only declared semantic color states and emits one string change; prop changes resynchronise local selection." }, "assertions": ["Visible text explains the declared trait values", "Every native control has a visible label"] },
|
|
16374
16919
|
{ "id": "StatusColorLegend", "oodsComponentId": "StatusColorLegend", "props": { "colorStates": ["neutral", "success"], "value": "success", "showTokenReferences": true }, "slots": {}, "initialState": {}, "renderExpectation": { "name": "render", "trigger": "mount and declared input triggers", "expected": "A named section pairs semantic color swatches with visible state names, the current state and optional token references. Meaning is never color alone." }, "assertions": ["Visible text exposes values without relying on color", "Named semantic container or noninteractive span"] },
|
|
@@ -16383,7 +16928,7 @@ var authoredScenarios = [
|
|
|
16383
16928
|
{ id: "address-editor-fields-and-change", oodsComponentId: "AddressEditor", props: { title: "Shipping address", street: "1 Main St", city: "Springfield", region: "IL", postalCode: "62701" }, slots: {}, initialState: { street: "1 Main St" }, renderExpectation: { name: "change", trigger: "type into the City input", expected: "change emitted with the current street/city/region/postalCode record" }, assertions: ["title is a real h2 heading", "four labelled inputs are prefilled", "change carries the whole address record", "submitting is a no-op"] },
|
|
16384
16929
|
{ id: "address-summary-badge-role", oodsComponentId: "AddressSummaryBadge", props: { label: "Billing address", role: "billing" }, slots: {}, initialState: { status: "billing" }, renderExpectation: { name: "render", trigger: "mount", expected: "visible Billing address label with data-badge-status billing and the address variant" }, assertions: ["label is visible text", "data-badge-status is billing", "data-badge-variant is address", "badge is noninteractive"] },
|
|
16385
16930
|
{ id: "address-validation-timeline-events", oodsComponentId: "AddressValidationTimeline", props: { title: "Address checks", validations: [{ label: "Postal code verified", timestamp: "2026-09-05T12:00:00Z", detail: "Matched carrier database" }, "Geocoded"] }, slots: {}, initialState: { events: 2 }, renderExpectation: { name: "render", trigger: "mount", expected: "a log region titled Address checks with two ordered events, the first timestamped and detailed" }, assertions: ["region has role log and an h2 title", "events are ordered list items", "the timestamp is a time element", "scalar entries render as text"] },
|
|
16386
|
-
{ id: "archive-pill-false", oodsComponentId: "ArchivePill", props: { "isArchived": false }, slots: {}, initialState: { content: "populated" }, renderExpectation: { name: "render", trigger: "mount", expected: "Not archived remains visible; machine status remains false; archive is the badge variant" }, assertions: ["Not archived remains visible; machine status remains false", "archive is the badge variant"] },
|
|
16931
|
+
{ id: "archive-pill-false", oodsComponentId: "ArchivePill", props: { "isArchived": false }, slots: {}, initialState: { content: "populated" }, renderExpectation: { name: "render", trigger: "mount", expected: "Not archived remains visible; machine status remains false; archive is the badge variant; with hideWhenFalse a false flag renders nothing and a true flag reads Archived" }, assertions: ["Not archived remains visible; machine status remains false", "archive is the badge variant", "hideWhenFalse hides only the default"] },
|
|
16387
16932
|
{ id: "archive-summary-false-and-reason", oodsComponentId: "ArchiveSummary", props: { "isArchived": false, "archivedAt": "2026-09-05T12:00:00Z", "reason": "Retention policy" }, slots: {}, initialState: { content: "populated" }, renderExpectation: { name: "render", trigger: "mount", expected: "No remains visible in its named term; archive date and reason remain associated terms" }, assertions: ["No remains visible in its named term", "archive date and reason remain associated terms"] },
|
|
16388
16933
|
{ id: "archived-row-presentation", oodsComponentId: "ArchivedRowOverlay", props: { "isArchived": true, "showBadge": true, "separateTab": true, "tabLabel": "Archived", "label": "Team subscription" }, slots: {}, initialState: {}, renderExpectation: { name: "render", trigger: "mount", expected: "Archived row stays accessible and its badge and tab label agree" }, assertions: ["Archived row stays accessible and its badge and tab label agree"] },
|
|
16389
16934
|
{ id: "audit-event-type-and-timestamp", oodsComponentId: "AuditEvent", props: { event: "user.updated", timestamp: "2026-09-05T12:00:00Z", detail: "Display name changed" }, slots: {}, initialState: { timestamped: true }, renderExpectation: { name: "render", trigger: "mount", expected: "one audit article with a machine-readable time, the event label and the detail" }, assertions: ["article carries data-event-type audit", "time element has a datetime", "label and detail are visible text"] },
|
|
@@ -16403,7 +16948,7 @@ var authoredScenarios = [
|
|
|
16403
16948
|
{ id: "billing-interval-subscription", oodsComponentId: "BillingIntervalSelector", props: { interval: "monthly", intervals: ["monthly", "yearly"], label: "Billing interval" }, slots: {}, initialState: { interval: "monthly" }, renderExpectation: { name: "change", trigger: "ArrowDown from monthly", expected: "yearly selected and emitted" }, assertions: ["only the resolved object intervals are selectable", "a native select supports keyboard selection", "invalid interval is announced"] },
|
|
16404
16949
|
{ id: "billing-summary-minor-units", oodsComponentId: "BillingSummaryBadge", props: { amount: 1999, currency: "usd", minorUnits: 100, interval: "monthly" }, slots: {}, initialState: {}, renderExpectation: { name: "render", trigger: "mount", expected: "$19.99 \xB7 monthly" }, assertions: ["integer minor units format as a currency amount", "one visible phrase includes interval"] },
|
|
16405
16950
|
{ id: "button-activate", oodsComponentId: "Button", props: { content: "Save changes", intent: "neutral", size: "md" }, slots: { default: "Save changes" }, initialState: { disabled: false }, renderExpectation: { name: "activate", trigger: "pointer click or Enter", expected: "activation handler called once" }, assertions: ["native type defaults to button", "focus is visible"] },
|
|
16406
|
-
{ id: "cancellation-badge-false", oodsComponentId: "CancellationBadge", props: { "cancelAtPeriodEnd": false }, slots: {}, initialState: { content: "populated" }, renderExpectation: { name: "render", trigger: "mount", expected: "No cancellation scheduled remains visible; machine status remains false; cancellation is the badge variant" }, assertions: ["No cancellation scheduled remains visible; machine status remains false", "cancellation is the badge variant"] },
|
|
16951
|
+
{ id: "cancellation-badge-false", oodsComponentId: "CancellationBadge", props: { "cancelAtPeriodEnd": false }, slots: {}, initialState: { content: "populated" }, renderExpectation: { name: "render", trigger: "mount", expected: "No cancellation scheduled remains visible; machine status remains false; cancellation is the badge variant; with hideWhenFalse a false flag renders nothing and a true flag reads Cancellation scheduled" }, assertions: ["No cancellation scheduled remains visible; machine status remains false", "cancellation is the badge variant", "hideWhenFalse hides only the default"] },
|
|
16407
16952
|
{ id: "cancellation-form-presentational-controls", oodsComponentId: "CancellationForm", props: { "title": "Cancellation request", "reasonCode": "budget", "reason": "Costs changed" }, slots: {}, initialState: { content: "populated" }, renderExpectation: { name: "render", trigger: "mount", expected: "reason and code retain their initial values; native controls are labelled; submit does not cancel or save" }, assertions: ["reason and code retain their initial values", "native controls are labelled", "submit does not cancel or save"] },
|
|
16408
16953
|
{
|
|
16409
16954
|
id: "cancellation-summary-boolean",
|
|
@@ -16417,6 +16962,12 @@ var authoredScenarios = [
|
|
|
16417
16962
|
{ 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"] },
|
|
16418
16963
|
{ 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"] },
|
|
16419
16964
|
{ 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"] },
|
|
16965
|
+
// s222-m02 (#2502 ruling 11): the two components 0.4.0 adds. The dialog example is shown in place (modal false), as a
|
|
16966
|
+
// gallery shows it; modal true is the default.
|
|
16967
|
+
{ 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"] },
|
|
16968
|
+
// s223-m02 (#2527 ruling 11): the combobox example; Japan is disabled, so the keyboard skips it and a click cannot pick it.
|
|
16969
|
+
{ id: "combobox-filter-and-pick", oodsComponentId: "Combobox", props: { id: "shipping-country", label: "Shipping country", value: "ca", placeholder: "Search countries", help: "Type to filter. We do not ship to Japan yet.", options: [{ value: "au", label: "Australia" }, { value: "ca", label: "Canada" }, { value: "fr", label: "France" }, { value: "de", label: "Germany" }, { value: "jp", label: "Japan", disabled: true }, { value: "mx", label: "Mexico" }, { value: "gb", label: "United Kingdom" }, { value: "us", label: "United States" }] }, slots: {}, initialState: { open: false, value: "ca" }, renderExpectation: { name: "change", trigger: "type to filter, then Down and Enter, or click an option", expected: "the picked value emitted once and the list closed" }, assertions: ["role combobox controls its listbox and reports aria-expanded", "the label names the combobox and the listbox; help describes the input", "typing filters by label and an empty result says No matches", "the chosen option reports aria-selected and shows a check mark"] },
|
|
16970
|
+
{ 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"] },
|
|
16420
16971
|
{ 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"] },
|
|
16421
16972
|
{ 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"] },
|
|
16422
16973
|
{ 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"] },
|
|
@@ -16436,7 +16987,7 @@ var authoredScenarios = [
|
|
|
16436
16987
|
{ id: "message-event-timeline-statuses", oodsComponentId: "MessageEventTimeline", props: { heading: "Delivery", statuses: [{ status: "delivered", at: "2026-09-02T09:00:00Z" }] }, slots: {}, initialState: { events: 1 }, renderExpectation: { name: "render", trigger: "mount with statuses only", expected: "statuses supply the events when messages are absent, in the message timeline type" }, assertions: ["region has role log and an h2 title", "status doubles as the event label", "data-timeline-type is message"] },
|
|
16437
16988
|
{ id: "message-status-badge-delivery", oodsComponentId: "MessageStatusBadge", props: { delivery: "delivered" }, slots: {}, initialState: { status: "delivered" }, renderExpectation: { name: "render", trigger: "mount", expected: "delivery doubles as the visible label and the status in the message variant" }, assertions: ["label is visible text", "data-badge-status is delivered", "data-badge-variant is message", "badge is noninteractive"] },
|
|
16438
16989
|
{ id: "owner-badge-principal", oodsComponentId: "OwnerBadge", props: { "owner": "user-7", "ownerType": "person", "status": "active" }, slots: {}, initialState: { content: "populated" }, renderExpectation: { name: "render", trigger: "mount", expected: "owner identity is visible; owner is the badge variant" }, assertions: ["owner identity is visible", "owner is the badge variant"] },
|
|
16439
|
-
{ id: "ownership-meta-inline-terms", oodsComponentId: "OwnershipMeta", props: { "ownerType": "organization", "role": "custodian" }, slots: {}, initialState: { content: "populated" }, renderExpectation: { name: "render", trigger: "mount", expected: "metadata has inline term labels; role is visible text not an ARIA role" }, assertions: ["metadata has inline term labels", "role is visible text not an ARIA role"] },
|
|
16990
|
+
{ id: "ownership-meta-inline-terms", oodsComponentId: "OwnershipMeta", props: { "ownerType": "organization", "role": "custodian" }, slots: {}, initialState: { content: "populated" }, renderExpectation: { name: "render", trigger: "mount", expected: "metadata has inline term labels; role is visible text not an ARIA role; given ownerLabel one phrase names the owner" }, assertions: ["metadata has inline term labels", "role is visible text not an ARIA role", "ownerLabel reads as one phrase"] },
|
|
16440
16991
|
{ id: "ownership-summary-terms", oodsComponentId: "OwnershipSummary", props: { "ownerId": "user-7", "ownerType": "person", "role": "administrator" }, slots: {}, initialState: { content: "populated" }, renderExpectation: { name: "render", trigger: "mount", expected: "a real h2 names the description list; owner label or honest unavailability, type and role remain associated terms" }, assertions: ["a real h2 names the description list", "owner label or honest unavailability, type and role remain associated terms"] },
|
|
16441
16992
|
{
|
|
16442
16993
|
id: "pagination-bar-navigation",
|
|
@@ -16484,6 +17035,9 @@ var authoredScenarios = [
|
|
|
16484
17035
|
renderExpectation: { name: "clear", trigger: "activate clear control", expected: "empty value emitted once" },
|
|
16485
17036
|
assertions: ["input has search semantics", "clear control is named"]
|
|
16486
17037
|
},
|
|
17038
|
+
// s223-m02 (#2527 ruling 10): the middle option is checked, so Tab landing on it shows the group's one tab stop is the
|
|
17039
|
+
// checked option, and both arrow directions have a neighbour.
|
|
17040
|
+
{ id: "segmented-control-billing-period", oodsComponentId: "SegmentedControl", props: { id: "billing-period", label: "Billing period", value: "quarterly", options: [{ value: "monthly", label: "Monthly" }, { value: "quarterly", label: "Quarterly" }, { value: "yearly", label: "Yearly" }] }, slots: {}, initialState: { value: "quarterly" }, renderExpectation: { name: "change", trigger: "ArrowRight or ArrowLeft from Quarterly, or click Yearly", expected: "the neighbouring value emitted once; the consumer owns value" }, assertions: ["the radiogroup is named by its visible label", "each option is a native radio named by its own label", "the checked option is the value and is the one tab stop"] },
|
|
16487
17041
|
{ id: "select-controlled", oodsComponentId: "Select", props: { id: "plan", label: "Plan", value: "pro", options: [{ value: "basic", label: "Basic" }, { value: "pro", label: "Pro" }] }, slots: {}, initialState: { value: "pro" }, renderExpectation: { name: "change", trigger: "choose Basic", expected: "basic emitted once" }, assertions: ["label targets select", "selected option is visible"] },
|
|
16488
17042
|
{ id: "stack-wrapped-row", oodsComponentId: "Stack", props: { direction: "row", gap: "sm", align: "center", wrap: true }, slots: { default: ["Primary", "Secondary"] }, initialState: { direction: "row", wrap: true }, renderExpectation: { name: "render", trigger: "resize to phone width", expected: "children wrap in DOM order" }, assertions: ["two children remain visible", "gap token is used"] },
|
|
16489
17043
|
{
|
|
@@ -16525,6 +17079,18 @@ var sharedScenarios = [...authoredScenarios].sort((a, b) => a.oodsComponentId <
|
|
|
16525
17079
|
event: behavior.event
|
|
16526
17080
|
};
|
|
16527
17081
|
});
|
|
17082
|
+
var relativeTimestampEmptyScenario = {
|
|
17083
|
+
id: "relative-timestamp-empty",
|
|
17084
|
+
oodsComponentId: "RelativeTimestamp",
|
|
17085
|
+
props: { datetime: "" },
|
|
17086
|
+
slots: {},
|
|
17087
|
+
initialState: { content: "empty" },
|
|
17088
|
+
renderExpectation: { name: "render", trigger: "mount with an empty datetime", expected: "Unknown time is visible and no datetime attribute is emitted" },
|
|
17089
|
+
assertions: ["an empty value reads Unknown time", "an empty datetime is omitted, never emitted empty"],
|
|
17090
|
+
interaction: componentBehaviors.RelativeTimestamp.interaction,
|
|
17091
|
+
interactionReason: componentBehaviors.RelativeTimestamp.interactionReason,
|
|
17092
|
+
event: componentBehaviors.RelativeTimestamp.event
|
|
17093
|
+
};
|
|
16528
17094
|
|
|
16529
17095
|
// src/ported-contracts.ts
|
|
16530
17096
|
var portedComponentContracts = Object.fromEntries(
|
|
@@ -16581,6 +17147,454 @@ var RESULT_STATES = ["violation", "passed", "needs_review", "not_applicable", "n
|
|
|
16581
17147
|
var RESULT_STATE_TONE = "neutral";
|
|
16582
17148
|
var SEVERITY_TONES = ["positive", "success", "warning", "critical", "danger"];
|
|
16583
17149
|
|
|
17150
|
+
// src/status-icons.ts
|
|
17151
|
+
var path = (d) => ({ tag: "path", attrs: { d } });
|
|
17152
|
+
var circle = (cx, cy, r, filled = false) => ({
|
|
17153
|
+
tag: "circle",
|
|
17154
|
+
attrs: filled ? { cx, cy, r, fill: "currentColor", stroke: "none" } : { cx, cy, r }
|
|
17155
|
+
});
|
|
17156
|
+
var STATUS_ICON_SHAPES = Object.freeze({
|
|
17157
|
+
check: [path("M3.5 8.5l3 3 6-7")],
|
|
17158
|
+
x: [path("M4.5 4.5l7 7M11.5 4.5l-7 7")],
|
|
17159
|
+
alert: [path("M8 2.5l6 11H2z"), path("M8 6.5v3"), circle("8", "11.5", "0.75", true)],
|
|
17160
|
+
info: [circle("8", "8", "6"), path("M8 7.5V11"), circle("8", "5", "0.75", true)],
|
|
17161
|
+
clock: [circle("8", "8", "6"), path("M8 5v3l2 1.5")],
|
|
17162
|
+
dots: [circle("4", "8", "1", true), circle("8", "8", "1", true), circle("12", "8", "1", true)],
|
|
17163
|
+
refresh: [path("M13 8a5 5 0 1 1-1.5-3.5"), path("M13 2.5v3h-3")],
|
|
17164
|
+
pause: [path("M6 4v8M10 4v8")],
|
|
17165
|
+
ban: [circle("8", "8", "6"), path("M3.8 12.2l8.4-8.4")],
|
|
17166
|
+
pencil: [path("M10.5 3L13 5.5 6 12.5H3.5V10z")],
|
|
17167
|
+
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")],
|
|
17168
|
+
undo: [path("M3 8a5 5 0 1 0 1.5-3.5"), path("M3 2.5v3h3")],
|
|
17169
|
+
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")],
|
|
17170
|
+
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")],
|
|
17171
|
+
dot: [circle("8", "8", "2.5", true)],
|
|
17172
|
+
"chevron-down": [path("M4 6l4 4 4-4")]
|
|
17173
|
+
});
|
|
17174
|
+
var STATUS_ICON_SVG_ATTRS = Object.freeze({
|
|
17175
|
+
width: "1em",
|
|
17176
|
+
height: "1em",
|
|
17177
|
+
viewBox: "0 0 16 16",
|
|
17178
|
+
fill: "none",
|
|
17179
|
+
stroke: "currentColor",
|
|
17180
|
+
"stroke-width": "1.5",
|
|
17181
|
+
"stroke-linecap": "round",
|
|
17182
|
+
"stroke-linejoin": "round",
|
|
17183
|
+
"aria-hidden": "true",
|
|
17184
|
+
focusable: "false"
|
|
17185
|
+
});
|
|
17186
|
+
var STATUS_ICON_ALIASES = Object.freeze({
|
|
17187
|
+
success: "check",
|
|
17188
|
+
paid: "check",
|
|
17189
|
+
warning: "alert",
|
|
17190
|
+
critical: "x",
|
|
17191
|
+
danger: "x",
|
|
17192
|
+
error: "x",
|
|
17193
|
+
negative: "x",
|
|
17194
|
+
pending: "dots",
|
|
17195
|
+
processing: "refresh",
|
|
17196
|
+
paused: "pause",
|
|
17197
|
+
canceled: "ban",
|
|
17198
|
+
cancelled: "ban",
|
|
17199
|
+
void: "ban",
|
|
17200
|
+
draft: "pencil",
|
|
17201
|
+
info: "info",
|
|
17202
|
+
trial: "star",
|
|
17203
|
+
future: "clock",
|
|
17204
|
+
scheduled: "clock",
|
|
17205
|
+
refunded: "undo",
|
|
17206
|
+
locked: "lock",
|
|
17207
|
+
unlocked: "unlock",
|
|
17208
|
+
default: "dot"
|
|
17209
|
+
});
|
|
17210
|
+
function resolveStatusIcon(iconName) {
|
|
17211
|
+
const segment = iconName?.split(".").pop()?.toLowerCase();
|
|
17212
|
+
if (!segment) return void 0;
|
|
17213
|
+
return STATUS_ICON_ALIASES[segment] ?? "dot";
|
|
17214
|
+
}
|
|
17215
|
+
var escapeAttribute = (value) => value.replace(/&/g, "&").replace(/"/g, """).replace(/</g, "<");
|
|
17216
|
+
var attributes = (attrs) => Object.entries(attrs).map(([name, value]) => ` ${name}="${escapeAttribute(value)}"`).join("");
|
|
17217
|
+
function statusIconMarkup(name) {
|
|
17218
|
+
const shapes = STATUS_ICON_SHAPES[name].map((shape) => `<${shape.tag}${attributes(shape.attrs)}></${shape.tag}>`).join("");
|
|
17219
|
+
return `<svg${attributes(STATUS_ICON_SVG_ATTRS)}>${shapes}</svg>`;
|
|
17220
|
+
}
|
|
17221
|
+
|
|
17222
|
+
// registry/status-map.json
|
|
17223
|
+
var status_map_default = {
|
|
17224
|
+
domains: {
|
|
17225
|
+
subscription: {
|
|
17226
|
+
future: {
|
|
17227
|
+
description: "Subscription is scheduled but not yet active.",
|
|
17228
|
+
chip: {
|
|
17229
|
+
foreground: "color.text.info",
|
|
17230
|
+
background: "color.background.info.subtle",
|
|
17231
|
+
border: "color.border.info",
|
|
17232
|
+
icon: "icon.status.scheduled"
|
|
17233
|
+
},
|
|
17234
|
+
banner: {
|
|
17235
|
+
foreground: "color.text.info",
|
|
17236
|
+
background: "color.background.surface.default",
|
|
17237
|
+
border: "color.border.info",
|
|
17238
|
+
icon: "icon.status.scheduled"
|
|
17239
|
+
}
|
|
17240
|
+
},
|
|
17241
|
+
trialing: {
|
|
17242
|
+
description: "Subscription is in a trial period before billing begins.",
|
|
17243
|
+
chip: {
|
|
17244
|
+
foreground: "color.text.accent",
|
|
17245
|
+
background: "color.background.accent.subtle",
|
|
17246
|
+
border: "color.border.accent",
|
|
17247
|
+
icon: "icon.status.trial"
|
|
17248
|
+
},
|
|
17249
|
+
banner: {
|
|
17250
|
+
foreground: "color.text.accent",
|
|
17251
|
+
background: "color.background.surface.default",
|
|
17252
|
+
border: "color.border.accent",
|
|
17253
|
+
icon: "icon.status.trial"
|
|
17254
|
+
}
|
|
17255
|
+
},
|
|
17256
|
+
active: {
|
|
17257
|
+
description: "Subscription is paid and service is provisioned.",
|
|
17258
|
+
chip: {
|
|
17259
|
+
foreground: "color.text.positive",
|
|
17260
|
+
background: "color.background.positive.subtle",
|
|
17261
|
+
border: "color.border.positive",
|
|
17262
|
+
icon: "icon.status.success"
|
|
17263
|
+
},
|
|
17264
|
+
banner: {
|
|
17265
|
+
foreground: "color.text.positive",
|
|
17266
|
+
background: "color.background.surface.default",
|
|
17267
|
+
border: "color.border.positive",
|
|
17268
|
+
icon: "icon.status.success"
|
|
17269
|
+
}
|
|
17270
|
+
},
|
|
17271
|
+
paused: {
|
|
17272
|
+
description: "Billing paused temporarily by finance or customer request.",
|
|
17273
|
+
chip: {
|
|
17274
|
+
foreground: "color.text.neutral",
|
|
17275
|
+
background: "color.background.neutral.subtle",
|
|
17276
|
+
border: "color.border.neutral",
|
|
17277
|
+
icon: "icon.status.paused"
|
|
17278
|
+
},
|
|
17279
|
+
banner: {
|
|
17280
|
+
foreground: "color.text.neutral",
|
|
17281
|
+
background: "color.background.surface.muted",
|
|
17282
|
+
border: "color.border.neutral",
|
|
17283
|
+
icon: "icon.status.paused"
|
|
17284
|
+
}
|
|
17285
|
+
},
|
|
17286
|
+
pending_cancellation: {
|
|
17287
|
+
description: "Subscription will cancel at period end but remains active now.",
|
|
17288
|
+
chip: {
|
|
17289
|
+
foreground: "color.text.info",
|
|
17290
|
+
background: "color.background.info.subtle",
|
|
17291
|
+
border: "color.border.info",
|
|
17292
|
+
icon: "icon.status.pending"
|
|
17293
|
+
},
|
|
17294
|
+
banner: {
|
|
17295
|
+
foreground: "color.text.info",
|
|
17296
|
+
background: "color.background.surface.default",
|
|
17297
|
+
border: "color.border.info",
|
|
17298
|
+
icon: "icon.status.pending"
|
|
17299
|
+
}
|
|
17300
|
+
},
|
|
17301
|
+
past_due: {
|
|
17302
|
+
description: "Renewal payment failed; smart retries ongoing and access retained during the grace window.",
|
|
17303
|
+
chip: {
|
|
17304
|
+
foreground: "color.text.danger",
|
|
17305
|
+
background: "color.background.danger.subtle",
|
|
17306
|
+
border: "color.border.danger",
|
|
17307
|
+
icon: "icon.status.warning"
|
|
17308
|
+
},
|
|
17309
|
+
banner: {
|
|
17310
|
+
foreground: "color.text.onbold",
|
|
17311
|
+
background: "color.background.danger.bold",
|
|
17312
|
+
border: "color.border.danger",
|
|
17313
|
+
icon: "icon.status.warning"
|
|
17314
|
+
}
|
|
17315
|
+
},
|
|
17316
|
+
unpaid: {
|
|
17317
|
+
description: "Payment retries exhausted; service access revoked.",
|
|
17318
|
+
chip: {
|
|
17319
|
+
foreground: "color.text.danger",
|
|
17320
|
+
background: "color.background.danger.subtle",
|
|
17321
|
+
border: "color.border.danger",
|
|
17322
|
+
icon: "icon.status.error"
|
|
17323
|
+
},
|
|
17324
|
+
banner: {
|
|
17325
|
+
foreground: "color.text.onbold",
|
|
17326
|
+
background: "color.background.danger.bold",
|
|
17327
|
+
border: "color.border.danger",
|
|
17328
|
+
icon: "icon.status.error"
|
|
17329
|
+
}
|
|
17330
|
+
},
|
|
17331
|
+
terminated: {
|
|
17332
|
+
description: "Subscription ended; service access revoked and billing stopped.",
|
|
17333
|
+
chip: {
|
|
17334
|
+
foreground: "color.text.disabled",
|
|
17335
|
+
background: "color.background.disabled",
|
|
17336
|
+
border: "color.border.disabled",
|
|
17337
|
+
icon: "icon.status.canceled"
|
|
17338
|
+
},
|
|
17339
|
+
banner: {
|
|
17340
|
+
foreground: "color.text.neutral",
|
|
17341
|
+
background: "color.background.neutral.subtle",
|
|
17342
|
+
border: "color.border.neutral",
|
|
17343
|
+
icon: "icon.status.canceled"
|
|
17344
|
+
}
|
|
17345
|
+
}
|
|
17346
|
+
},
|
|
17347
|
+
invoice: {
|
|
17348
|
+
draft: {
|
|
17349
|
+
description: "Invoice is editable and not yet finalized.",
|
|
17350
|
+
chip: {
|
|
17351
|
+
foreground: "color.text.neutral",
|
|
17352
|
+
background: "color.background.neutral.subtle",
|
|
17353
|
+
border: "color.border.neutral",
|
|
17354
|
+
icon: "icon.status.draft"
|
|
17355
|
+
},
|
|
17356
|
+
banner: {
|
|
17357
|
+
foreground: "color.text.neutral",
|
|
17358
|
+
background: "color.background.surface.muted",
|
|
17359
|
+
border: "color.border.neutral",
|
|
17360
|
+
icon: "icon.status.draft"
|
|
17361
|
+
}
|
|
17362
|
+
},
|
|
17363
|
+
posted: {
|
|
17364
|
+
description: "Invoice finalized with terms before collection.",
|
|
17365
|
+
chip: {
|
|
17366
|
+
foreground: "color.text.info",
|
|
17367
|
+
background: "color.background.info.subtle",
|
|
17368
|
+
border: "color.border.info",
|
|
17369
|
+
icon: "icon.status.pending"
|
|
17370
|
+
},
|
|
17371
|
+
banner: {
|
|
17372
|
+
foreground: "color.text.info",
|
|
17373
|
+
background: "color.background.surface.default",
|
|
17374
|
+
border: "color.border.info",
|
|
17375
|
+
icon: "icon.status.pending"
|
|
17376
|
+
}
|
|
17377
|
+
},
|
|
17378
|
+
paid: {
|
|
17379
|
+
description: "Invoice collected successfully in full.",
|
|
17380
|
+
chip: {
|
|
17381
|
+
foreground: "color.text.positive",
|
|
17382
|
+
background: "color.background.positive.subtle",
|
|
17383
|
+
border: "color.border.positive",
|
|
17384
|
+
icon: "icon.status.success"
|
|
17385
|
+
},
|
|
17386
|
+
banner: {
|
|
17387
|
+
foreground: "color.text.positive",
|
|
17388
|
+
background: "color.background.surface.default",
|
|
17389
|
+
border: "color.border.positive",
|
|
17390
|
+
icon: "icon.status.success"
|
|
17391
|
+
}
|
|
17392
|
+
},
|
|
17393
|
+
past_due: {
|
|
17394
|
+
description: "Invoice is unpaid past its due date.",
|
|
17395
|
+
chip: {
|
|
17396
|
+
foreground: "color.text.danger",
|
|
17397
|
+
background: "color.background.danger.subtle",
|
|
17398
|
+
border: "color.border.danger",
|
|
17399
|
+
icon: "icon.status.error"
|
|
17400
|
+
},
|
|
17401
|
+
banner: {
|
|
17402
|
+
foreground: "color.text.onbold",
|
|
17403
|
+
background: "color.background.danger.bold",
|
|
17404
|
+
border: "color.border.danger",
|
|
17405
|
+
icon: "icon.status.error"
|
|
17406
|
+
}
|
|
17407
|
+
},
|
|
17408
|
+
void: {
|
|
17409
|
+
description: "Invoice canceled and no longer payable.",
|
|
17410
|
+
chip: {
|
|
17411
|
+
foreground: "color.text.disabled",
|
|
17412
|
+
background: "color.background.disabled",
|
|
17413
|
+
border: "color.border.disabled",
|
|
17414
|
+
icon: "icon.status.void"
|
|
17415
|
+
},
|
|
17416
|
+
banner: {
|
|
17417
|
+
foreground: "color.text.neutral",
|
|
17418
|
+
background: "color.background.neutral.subtle",
|
|
17419
|
+
border: "color.border.neutral",
|
|
17420
|
+
icon: "icon.status.void"
|
|
17421
|
+
}
|
|
17422
|
+
}
|
|
17423
|
+
}
|
|
17424
|
+
}
|
|
17425
|
+
};
|
|
17426
|
+
|
|
17427
|
+
// registry/lifecycle-status-tones.json
|
|
17428
|
+
var lifecycle_status_tones_default = {
|
|
17429
|
+
states: {
|
|
17430
|
+
active: { tone: "success", icon: "icon.status.success", description: "Active and in use." },
|
|
17431
|
+
available: { tone: "success", icon: "icon.status.success", description: "Available to use." },
|
|
17432
|
+
published: { tone: "success", icon: "icon.status.success", description: "Published and visible." },
|
|
17433
|
+
settled: { tone: "success", icon: "icon.status.success", description: "Settled in full." },
|
|
17434
|
+
succeeded: { tone: "success", icon: "icon.status.success", description: "Completed successfully." },
|
|
17435
|
+
paid: { tone: "success", icon: "icon.status.paid", description: "Paid in full." },
|
|
17436
|
+
completed: { tone: "success", icon: "icon.status.success", description: "Completed." },
|
|
17437
|
+
good_standing: { tone: "success", icon: "icon.status.success", description: "In good standing." },
|
|
17438
|
+
in_stock: { tone: "success", icon: "icon.status.success", description: "In stock." },
|
|
17439
|
+
ok: { tone: "success", icon: "icon.status.success", description: "Working as expected." },
|
|
17440
|
+
invited: { tone: "info", icon: "icon.status.pending", description: "Invited and not yet joined." },
|
|
17441
|
+
onboarding: { tone: "info", icon: "icon.status.processing", description: "Being set up." },
|
|
17442
|
+
pending: { tone: "info", icon: "icon.status.pending", description: "Waiting to be processed." },
|
|
17443
|
+
authorized: { tone: "info", icon: "icon.status.pending", description: "Authorized and not yet settled." },
|
|
17444
|
+
processing: { tone: "info", icon: "icon.status.processing", description: "Being processed." },
|
|
17445
|
+
in_review: { tone: "info", icon: "icon.status.pending", description: "In review." },
|
|
17446
|
+
scheduled: { tone: "info", icon: "icon.status.scheduled", description: "Scheduled for later." },
|
|
17447
|
+
ingested: { tone: "info", icon: "icon.status.pending", description: "Received and not yet processed." },
|
|
17448
|
+
proposed: { tone: "info", icon: "icon.status.pending", description: "Proposed and not yet agreed." },
|
|
17449
|
+
posted: { tone: "info", icon: "icon.status.pending", description: "Finalized and posted." },
|
|
17450
|
+
open: { tone: "info", icon: "icon.status.pending", description: "Open and awaiting action." },
|
|
17451
|
+
future: { tone: "info", icon: "icon.status.future", description: "Starts later." },
|
|
17452
|
+
trialing: { tone: "accent", icon: "icon.status.trial", description: "In a trial period." },
|
|
17453
|
+
private_beta: { tone: "accent", icon: "icon.status.trial", description: "Available to a limited group." },
|
|
17454
|
+
retrying: { tone: "warning", icon: "icon.status.processing", description: "Failed once and retrying." },
|
|
17455
|
+
delayed: { tone: "warning", icon: "icon.status.warning", description: "Behind schedule." },
|
|
17456
|
+
investigating: { tone: "warning", icon: "icon.status.warning", description: "Being investigated." },
|
|
17457
|
+
low_stock: { tone: "warning", icon: "icon.status.warning", description: "Running low." },
|
|
17458
|
+
backorder: { tone: "warning", icon: "icon.status.warning", description: "Out of stock and on order." },
|
|
17459
|
+
suspended: { tone: "warning", icon: "icon.status.paused", description: "Suspended for now." },
|
|
17460
|
+
deprecated: { tone: "warning", icon: "icon.status.warning", description: "Being phased out." },
|
|
17461
|
+
past_due: { tone: "critical", icon: "icon.status.warning", description: "Past its due date." },
|
|
17462
|
+
failed: { tone: "critical", icon: "icon.status.critical", description: "Failed." },
|
|
17463
|
+
unpaid: { tone: "critical", icon: "icon.status.critical", description: "Unpaid." },
|
|
17464
|
+
uncollectible: { tone: "critical", icon: "icon.status.critical", description: "Could not be collected." },
|
|
17465
|
+
draft: { tone: "neutral", icon: "icon.status.draft", description: "A draft, not yet final." },
|
|
17466
|
+
prospect: { tone: "neutral", icon: "icon.status.default", description: "Not yet a customer." },
|
|
17467
|
+
paused: { tone: "neutral", icon: "icon.status.paused", description: "Paused." },
|
|
17468
|
+
archived: { tone: "neutral", icon: "icon.status.default", description: "Archived." },
|
|
17469
|
+
legacy: { tone: "neutral", icon: "icon.status.default", description: "Kept for existing users and no longer offered." },
|
|
17470
|
+
refunded: { tone: "neutral", icon: "icon.status.refunded", description: "Refunded." },
|
|
17471
|
+
cancelled: { tone: "neutral", icon: "icon.status.cancelled", description: "Cancelled." },
|
|
17472
|
+
canceled: { tone: "neutral", icon: "icon.status.canceled", description: "Cancelled." },
|
|
17473
|
+
void: { tone: "neutral", icon: "icon.status.void", description: "Voided." },
|
|
17474
|
+
retired: { tone: "neutral", icon: "icon.status.canceled", description: "Retired and no longer offered." },
|
|
17475
|
+
discontinued: { tone: "neutral", icon: "icon.status.canceled", description: "Discontinued." },
|
|
17476
|
+
deactivated: { tone: "neutral", icon: "icon.status.canceled", description: "Deactivated." },
|
|
17477
|
+
terminated: { tone: "neutral", icon: "icon.status.canceled", description: "Ended." },
|
|
17478
|
+
churned: { tone: "neutral", icon: "icon.status.canceled", description: "No longer a customer." }
|
|
17479
|
+
}
|
|
17480
|
+
};
|
|
17481
|
+
|
|
17482
|
+
// src/status-registry.ts
|
|
17483
|
+
var TONE_ALIASES = {
|
|
17484
|
+
info: "info",
|
|
17485
|
+
informational: "info",
|
|
17486
|
+
accent: "accent",
|
|
17487
|
+
highlight: "accent",
|
|
17488
|
+
positive: "success",
|
|
17489
|
+
success: "success",
|
|
17490
|
+
ok: "success",
|
|
17491
|
+
warning: "warning",
|
|
17492
|
+
caution: "warning",
|
|
17493
|
+
danger: "critical",
|
|
17494
|
+
critical: "critical",
|
|
17495
|
+
error: "critical",
|
|
17496
|
+
negative: "critical",
|
|
17497
|
+
neutral: "neutral",
|
|
17498
|
+
pending: "info"
|
|
17499
|
+
};
|
|
17500
|
+
var toLabel = (status) => status.split(/[_-]/).filter(Boolean).map((segment) => segment.charAt(0).toUpperCase() + segment.slice(1)).join(" ");
|
|
17501
|
+
var inferTone = (entry) => {
|
|
17502
|
+
if (!entry) return "neutral";
|
|
17503
|
+
for (const reference of [entry.foreground, entry.background, entry.border]) {
|
|
17504
|
+
const segments = reference.replace(/^\{|\}$/g, "").split(/[\s./_-]+/).reverse();
|
|
17505
|
+
for (const segment of segments) {
|
|
17506
|
+
const tone = TONE_ALIASES[segment.toLowerCase()];
|
|
17507
|
+
if (tone) return tone;
|
|
17508
|
+
}
|
|
17509
|
+
}
|
|
17510
|
+
return "neutral";
|
|
17511
|
+
};
|
|
17512
|
+
var componentTokenSet = (tone) => {
|
|
17513
|
+
const normalized = tone === "positive" ? "success" : tone === "danger" ? "critical" : tone;
|
|
17514
|
+
return {
|
|
17515
|
+
background: `var(--sys-status-${normalized}-surface)`,
|
|
17516
|
+
border: `var(--sys-status-${normalized}-border)`,
|
|
17517
|
+
foreground: `var(--sys-status-${normalized}-text)`
|
|
17518
|
+
};
|
|
17519
|
+
};
|
|
17520
|
+
var rawTokenSet = (entry) => {
|
|
17521
|
+
const tone = inferTone(entry);
|
|
17522
|
+
return componentTokenSet(tone);
|
|
17523
|
+
};
|
|
17524
|
+
var bannerFallback = (tone) => tone === "neutral" ? {
|
|
17525
|
+
background: "var(--cmp-banner-background)",
|
|
17526
|
+
border: "var(--cmp-banner-border)",
|
|
17527
|
+
foreground: "var(--cmp-banner-text)"
|
|
17528
|
+
} : componentTokenSet(tone);
|
|
17529
|
+
var fallback = (domain, status, tone = "neutral") => ({
|
|
17530
|
+
domain,
|
|
17531
|
+
status,
|
|
17532
|
+
label: toLabel(status || "Unknown"),
|
|
17533
|
+
description: "Status not found in registry; falling back to the requested token set.",
|
|
17534
|
+
tone,
|
|
17535
|
+
badge: { subtle: componentTokenSet(tone), solid: componentTokenSet(tone) },
|
|
17536
|
+
banner: { subtle: bannerFallback(tone), solid: componentTokenSet(tone) }
|
|
17537
|
+
});
|
|
17538
|
+
var registry = /* @__PURE__ */ new Map();
|
|
17539
|
+
for (const [domain, entries] of Object.entries(status_map_default.domains)) {
|
|
17540
|
+
const domainEntries = /* @__PURE__ */ new Map();
|
|
17541
|
+
for (const [status, entry] of Object.entries(entries)) {
|
|
17542
|
+
const tone = inferTone(entry.chip);
|
|
17543
|
+
domainEntries.set(status.toLowerCase(), {
|
|
17544
|
+
domain,
|
|
17545
|
+
status,
|
|
17546
|
+
label: toLabel(status),
|
|
17547
|
+
description: entry.description,
|
|
17548
|
+
tone,
|
|
17549
|
+
iconName: entry.chip.icon ?? entry.banner?.icon,
|
|
17550
|
+
badge: { subtle: rawTokenSet(entry.chip), solid: componentTokenSet(tone) },
|
|
17551
|
+
banner: {
|
|
17552
|
+
subtle: entry.banner ? rawTokenSet(entry.banner) : bannerFallback(tone),
|
|
17553
|
+
solid: componentTokenSet(tone)
|
|
17554
|
+
}
|
|
17555
|
+
});
|
|
17556
|
+
}
|
|
17557
|
+
registry.set(domain, domainEntries);
|
|
17558
|
+
}
|
|
17559
|
+
var lifecycleEntries = /* @__PURE__ */ new Map();
|
|
17560
|
+
for (const [status, entry] of Object.entries(lifecycle_status_tones_default.states)) {
|
|
17561
|
+
lifecycleEntries.set(status, {
|
|
17562
|
+
domain: "lifecycle",
|
|
17563
|
+
status,
|
|
17564
|
+
label: toLabel(status),
|
|
17565
|
+
description: entry.description,
|
|
17566
|
+
tone: entry.tone,
|
|
17567
|
+
iconName: entry.icon,
|
|
17568
|
+
badge: { subtle: componentTokenSet(entry.tone), solid: componentTokenSet(entry.tone) },
|
|
17569
|
+
banner: { subtle: bannerFallback(entry.tone), solid: componentTokenSet(entry.tone) }
|
|
17570
|
+
});
|
|
17571
|
+
}
|
|
17572
|
+
registry.set("lifecycle", lifecycleEntries);
|
|
17573
|
+
var LEGACY_STATUS_ALIASES = {
|
|
17574
|
+
subscription: { delinquent: "unpaid" }
|
|
17575
|
+
};
|
|
17576
|
+
var STATUS_DOMAINS = Object.freeze([...registry.keys()]);
|
|
17577
|
+
function getStatusPresentation(domain, status) {
|
|
17578
|
+
const entries = registry.get(domain);
|
|
17579
|
+
const normalized = status.toLowerCase();
|
|
17580
|
+
const direct = entries?.get(normalized);
|
|
17581
|
+
if (direct) return direct;
|
|
17582
|
+
const alias = LEGACY_STATUS_ALIASES[domain]?.[normalized];
|
|
17583
|
+
const aliased = alias ? entries?.get(alias) : void 0;
|
|
17584
|
+
if (aliased) return { ...aliased, status, label: toLabel(status) };
|
|
17585
|
+
const shared = lifecycleEntries.get(normalized);
|
|
17586
|
+
return shared ? { ...shared, status, label: toLabel(status) } : fallback(domain, status);
|
|
17587
|
+
}
|
|
17588
|
+
function listStatuses(domain) {
|
|
17589
|
+
return [...registry.get(domain)?.values() ?? []];
|
|
17590
|
+
}
|
|
17591
|
+
function getToneTokenSet(tone) {
|
|
17592
|
+
return componentTokenSet(tone);
|
|
17593
|
+
}
|
|
17594
|
+
function getBannerToneTokenSet(tone) {
|
|
17595
|
+
return bannerFallback(tone);
|
|
17596
|
+
}
|
|
17597
|
+
|
|
16584
17598
|
// src/billing-views.ts
|
|
16585
17599
|
function billingCycle(values) {
|
|
16586
17600
|
const start = Date.parse(values.periodStart ?? "");
|
|
@@ -16656,10 +17670,19 @@ function summaryValue(value) {
|
|
|
16656
17670
|
function chronologicalEvents(events) {
|
|
16657
17671
|
return events.filter((event) => Number.isFinite(Date.parse(event.at))).map((event, index) => ({ event, index })).sort((a, b) => Date.parse(a.event.at) - Date.parse(b.event.at) || a.index - b.index).map(({ event }) => event);
|
|
16658
17672
|
}
|
|
16659
|
-
function
|
|
17673
|
+
function formatDeclaredNumber(value, format) {
|
|
17674
|
+
const number = typeof value === "number" ? value : typeof value === "string" && value.trim() ? Number(value) : NaN;
|
|
17675
|
+
if (!Number.isFinite(number)) return void 0;
|
|
17676
|
+
return format === "percent" ? new Intl.NumberFormat("en-US", { style: "percent", maximumFractionDigits: 2 }).format(number / 100) : new Intl.NumberFormat("en-US", { maximumFractionDigits: 2 }).format(number);
|
|
17677
|
+
}
|
|
17678
|
+
function formatReadOnlyValue(value, type, code = false, format) {
|
|
16660
17679
|
if (value == null || value === "") return "Not recorded";
|
|
16661
17680
|
if (type === "date" || type === "datetime") return formatDateTime(value) || "Invalid date";
|
|
16662
17681
|
if (typeof value === "boolean") return value ? "Yes" : "No";
|
|
17682
|
+
if (format && !Array.isArray(value)) {
|
|
17683
|
+
const formatted = formatDeclaredNumber(value, format);
|
|
17684
|
+
if (formatted !== void 0) return formatted;
|
|
17685
|
+
}
|
|
16663
17686
|
if (Array.isArray(value)) {
|
|
16664
17687
|
if (value.some((item) => item !== null && typeof item === "object")) return `${value.length} ${value.length === 1 ? "record" : "records"}`;
|
|
16665
17688
|
return value.map((item) => summaryValue(item) ?? "").join(", ") || "None recorded";
|
|
@@ -16684,18 +17707,40 @@ function recordCollectionEvents(record2, options = {}) {
|
|
|
16684
17707
|
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));
|
|
16685
17708
|
events.push({ id: "payment-" + source2.field, title: source2.title, at, description, kind: "payment" });
|
|
16686
17709
|
}
|
|
16687
|
-
|
|
16688
|
-
const
|
|
16689
|
-
|
|
17710
|
+
if (!chronologicalEvents(events).length) {
|
|
17711
|
+
const lastEvent = String(record2.last_event ?? "Updated");
|
|
17712
|
+
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])));
|
|
17713
|
+
const both = dated[0]?.field === "created_at" && dated[1]?.field === "last_event_at" && lastEvent !== "created";
|
|
17714
|
+
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: "" });
|
|
17715
|
+
}
|
|
17716
|
+
for (const [field2, title, reason] of [["archived_at", "Archived", "archive_reason"], ["restored_at", "Restored", void 0], ["cancellation_requested_at", "Cancellation requested", "cancellation_reason"]]) {
|
|
17717
|
+
const at = record2[field2];
|
|
17718
|
+
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]) : "" });
|
|
16690
17719
|
}
|
|
16691
17720
|
return chronologicalEvents(events);
|
|
16692
17721
|
}
|
|
17722
|
+
function addressCollectionSummary(entries) {
|
|
17723
|
+
const asRecord = (value) => value && typeof value === "object" ? value : {};
|
|
17724
|
+
return (Array.isArray(entries) ? entries : []).map((entry) => {
|
|
17725
|
+
const address = asRecord(asRecord(entry).address);
|
|
17726
|
+
const street = Array.isArray(address.addressLines) ? address.addressLines.map(String).join(", ") : "";
|
|
17727
|
+
return [asRecord(entry).role, street, String(address.locality ?? ""), String(address.administrativeArea ?? ""), String(address.postalCode ?? "")].filter(Boolean).join(", ");
|
|
17728
|
+
}).join("; ");
|
|
17729
|
+
}
|
|
16693
17730
|
var UUID_REFERENCE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
16694
17731
|
function formatReferenceLabel(identifier, label, subject = "Reference") {
|
|
16695
17732
|
if (identifier == null || identifier === "") return `${subject} unavailable`;
|
|
16696
17733
|
if (typeof label === "string" && label.trim() && !UUID_REFERENCE.test(label.trim())) return label;
|
|
16697
17734
|
return `${subject} reference not resolved`;
|
|
16698
17735
|
}
|
|
17736
|
+
var UNRESOLVED_REFERENCE_LABEL = / (?:unavailable|reference not resolved)$/;
|
|
17737
|
+
function ownershipPhrase(ownerLabel, ownerType, role) {
|
|
17738
|
+
const text2 = (value) => typeof value === "string" && value.trim() ? value.trim() : void 0;
|
|
17739
|
+
const name = text2(ownerLabel) && !UNRESOLVED_REFERENCE_LABEL.test(text2(ownerLabel)) ? text2(ownerLabel) : void 0;
|
|
17740
|
+
const type = text2(ownerType)?.replace(/[_-]+/g, " ");
|
|
17741
|
+
const parts = name ? [`Owned by ${name}`, type, text2(role)] : type ? [`${type.charAt(0).toUpperCase()}${type.slice(1)}-owned`, text2(role)] : [];
|
|
17742
|
+
return parts.filter(Boolean).join(" \xB7 ") || void 0;
|
|
17743
|
+
}
|
|
16699
17744
|
function formatRecordLabel(value) {
|
|
16700
17745
|
return typeof value === "string" && UUID_REFERENCE.test(value.trim()) ? "Record name unavailable" : String(value ?? "");
|
|
16701
17746
|
}
|
|
@@ -16736,12 +17781,12 @@ function assertStaticSvg(svg) {
|
|
|
16736
17781
|
for (const match of markup.matchAll(/<\/?([\w:-]+)((?:[^<>"']|"[^"]*"|'[^']*')*)>/g)) {
|
|
16737
17782
|
if (markup.slice(end, match.index).includes("<") || !allowed.has(match[1].toLowerCase())) unsafe();
|
|
16738
17783
|
end = match.index + match[0].length;
|
|
16739
|
-
const
|
|
17784
|
+
const attributes2 = match[2].replace(/\/\s*$/, "");
|
|
16740
17785
|
const attribute = /\s+([\w:-]+)\s*=\s*("[^"]*"|'[^']*')/y;
|
|
16741
17786
|
let offset = 0;
|
|
16742
|
-
while (offset <
|
|
17787
|
+
while (offset < attributes2.trimEnd().length) {
|
|
16743
17788
|
attribute.lastIndex = offset;
|
|
16744
|
-
const found = attribute.exec(
|
|
17789
|
+
const found = attribute.exec(attributes2);
|
|
16745
17790
|
if (!found) unsafe();
|
|
16746
17791
|
offset = attribute.lastIndex;
|
|
16747
17792
|
const name = found[1].toLowerCase();
|
|
@@ -16772,6 +17817,27 @@ function svgCarriesTitle(svg, title) {
|
|
|
16772
17817
|
}
|
|
16773
17818
|
return false;
|
|
16774
17819
|
}
|
|
17820
|
+
var VIZ_THEME_SVG_PROPS = Object.freeze(["svgDark", "svgDarkNarrow", "svgDarkWide", "svgHc", "svgHcNarrow", "svgHcWide"]);
|
|
17821
|
+
var VIZ_SVG_PROPS = Object.freeze(["svg", "svgNarrow", "svgWide", ...VIZ_THEME_SVG_PROPS]);
|
|
17822
|
+
function vizPreviewLayers(props) {
|
|
17823
|
+
if (typeof props.svg !== "string") return [];
|
|
17824
|
+
const sets = [
|
|
17825
|
+
["light", props.svg, props.svgNarrow, props.svgWide],
|
|
17826
|
+
["dark", props.svgDark, props.svgDarkNarrow, props.svgDarkWide],
|
|
17827
|
+
["hc", props.svgHc, props.svgHcNarrow, props.svgHcWide]
|
|
17828
|
+
];
|
|
17829
|
+
const themed = VIZ_THEME_SVG_PROPS.some((key) => typeof props[key] === "string");
|
|
17830
|
+
return (themed ? sets : sets.slice(0, 1)).filter(([, design]) => typeof design === "string").map(([theme, design, narrow, wide]) => ({
|
|
17831
|
+
...themed ? { theme } : {},
|
|
17832
|
+
narrow: typeof narrow === "string",
|
|
17833
|
+
wide: typeof wide === "string",
|
|
17834
|
+
renders: [
|
|
17835
|
+
["data-viz-svg", assertStaticSvg(design)],
|
|
17836
|
+
...typeof narrow === "string" ? [["data-viz-svg-narrow", assertStaticSvg(narrow)]] : [],
|
|
17837
|
+
...typeof wide === "string" ? [["data-viz-svg-wide", assertStaticSvg(wide)]] : []
|
|
17838
|
+
]
|
|
17839
|
+
}));
|
|
17840
|
+
}
|
|
16775
17841
|
|
|
16776
17842
|
// src/disputed.ts
|
|
16777
17843
|
function auditSummary({ auditLog = [], lastN = 5 }) {
|
|
@@ -16996,7 +18062,7 @@ function validateComponentIntakeDocument(input) {
|
|
|
16996
18062
|
if (!Array.isArray(document.rows)) return [...errors, "intake rows must be an array"];
|
|
16997
18063
|
const ids = document.rows.map((row) => row && typeof row === "object" && !Array.isArray(row) && typeof row.id === "string" ? row.id : "");
|
|
16998
18064
|
if (ids.some((id) => id.length === 0)) errors.push("every intake row must have a non-empty id");
|
|
16999
|
-
if (ids.length !==
|
|
18065
|
+
if (ids.length !== 114) errors.push(`intake must contain exactly 114 rows; received ${ids.length}`);
|
|
17000
18066
|
const uniqueCount = new Set(ids).size;
|
|
17001
18067
|
if (uniqueCount !== ids.length) errors.push("intake IDs must be unique");
|
|
17002
18068
|
const sorted = [...ids].sort((a, b) => a < b ? -1 : a > b ? 1 : 0);
|
|
@@ -17010,4 +18076,4 @@ function getBaselineCapability(componentId) {
|
|
|
17010
18076
|
return componentCapabilityBaseline.rows.find((row) => row.id === componentId);
|
|
17011
18077
|
}
|
|
17012
18078
|
|
|
17013
|
-
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 };
|
|
18079
|
+
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, addressCollectionSummary, 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, formatDeclaredNumber, formatPriceAmount, formatPriceCode, formatReadOnlyValue, formatRecordLabel, formatReferenceLabel, geoFieldMapping, getBannerToneTokenSet, getBaselineCapability, getStatusPresentation, getToneTokenSet, initialSort, isGovernedComponent, isVizIntentFragment, listStatuses, nextSort, ownershipPhrase, parseBillingAmount, portedComponentContracts, portedScenarios, recipeItemLabels, recordCollectionEvents, relativeTimestampEmptyScenario, resolveStatusIcon, restartedBillingPeriod, sharedScenarios, statusIconMarkup, substitutionContractReport, summarizeSubstitutionReport, summaryValue, svgCarriesTitle, traitEventRows, validMinorUnits, validateComponentIntakeDocument, vizControlFields, vizFieldValue, vizPreviewLayers, vizSummaryRows };
|