@vellira-ui/tokens 2.98.4 → 2.98.6

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.
Files changed (56) hide show
  1. package/dist/css/tokens.css +66 -69
  2. package/dist/dark/components/input.d.ts +1 -1
  3. package/dist/dark/components/input.js +1 -1
  4. package/dist/dark/components/radio.d.ts +1 -2
  5. package/dist/dark/components/radio.d.ts.map +1 -1
  6. package/dist/dark/components/radio.js +1 -1
  7. package/dist/dark/components/select.d.ts +1 -1
  8. package/dist/dark/components/select.js +1 -1
  9. package/dist/dark/semantic/action.d.ts +4 -4
  10. package/dist/dark/semantic/action.js +4 -4
  11. package/dist/dark/semantic/control.d.ts +2 -2
  12. package/dist/dark/semantic/control.js +2 -2
  13. package/dist/dark/semantic/text.d.ts +1 -1
  14. package/dist/dark/semantic/text.js +1 -1
  15. package/dist/factories/createRadioPalette.d.ts +1 -2
  16. package/dist/factories/createRadioPalette.d.ts.map +1 -1
  17. package/dist/factories/createRadioPalette.js +1 -2
  18. package/dist/factories/createSwitchTokens.d.ts +1 -1
  19. package/dist/factories/createSwitchTokens.d.ts.map +1 -1
  20. package/dist/factories/createSwitchTokens.js +3 -3
  21. package/dist/generated/token-types.d.ts +5 -5
  22. package/dist/generated/token-types.d.ts.map +1 -1
  23. package/dist/generated/token-types.js +76 -80
  24. package/dist/highContrast/components/input.d.ts +1 -1
  25. package/dist/highContrast/components/input.js +1 -1
  26. package/dist/highContrast/components/radio.d.ts +1 -2
  27. package/dist/highContrast/components/radio.d.ts.map +1 -1
  28. package/dist/highContrast/components/radio.js +1 -1
  29. package/dist/highContrast/components/select.d.ts +1 -1
  30. package/dist/highContrast/components/select.js +1 -1
  31. package/dist/highContrast/semantic/action.d.ts +4 -4
  32. package/dist/highContrast/semantic/action.js +4 -4
  33. package/dist/highContrast/semantic/control.d.ts +2 -2
  34. package/dist/highContrast/semantic/control.js +2 -2
  35. package/dist/highContrast/semantic/text.d.ts +1 -1
  36. package/dist/highContrast/semantic/text.js +1 -1
  37. package/dist/light/components/input.d.ts +1 -1
  38. package/dist/light/components/input.js +1 -1
  39. package/dist/light/components/radio.d.ts +1 -2
  40. package/dist/light/components/radio.d.ts.map +1 -1
  41. package/dist/light/components/radio.js +1 -1
  42. package/dist/light/components/select.d.ts +1 -1
  43. package/dist/light/components/select.js +1 -1
  44. package/dist/light/semantic/action.d.ts +4 -4
  45. package/dist/light/semantic/action.js +4 -4
  46. package/dist/light/semantic/control.d.ts +2 -2
  47. package/dist/light/semantic/control.js +2 -2
  48. package/dist/light/semantic/text.d.ts +1 -1
  49. package/dist/light/semantic/text.js +1 -1
  50. package/dist/preservation/token-migrations.d.ts +50 -4
  51. package/dist/preservation/token-migrations.d.ts.map +1 -1
  52. package/dist/preservation/token-migrations.js +155 -19
  53. package/dist/token-architecture.d.ts +71 -3
  54. package/dist/token-architecture.d.ts.map +1 -1
  55. package/dist/token-architecture.js +88 -3
  56. package/package.json +1 -1
@@ -144,7 +144,7 @@ export declare const input: {
144
144
  readonly hoverFg: "#BE123C";
145
145
  readonly hoverBg: "#FFE4E6";
146
146
  readonly focusBg: "#FDFCFF";
147
- readonly pressedBg: "#EEE8FA";
147
+ readonly pressedBg: "#E4DDF4";
148
148
  };
149
149
  readonly revealButton: {
150
150
  readonly fg: "#3D3754";
@@ -122,7 +122,7 @@ export const input = {
122
122
  hoverFg: status.error.fg,
123
123
  hoverBg: status.error.bg,
124
124
  focusBg: surface.subtle,
125
- pressedBg: surface.active,
125
+ pressedBg: surface.pressed,
126
126
  },
127
127
  revealButton: {
128
128
  fg: text.primary,
@@ -30,8 +30,7 @@ export declare const radio: {
30
30
  readonly easing: "cubic-bezier(0.16, 1, 0.3, 1)";
31
31
  readonly indicatorDuration: "180ms";
32
32
  readonly selectedDuration: "260ms";
33
- readonly pressedScale: 0.96;
34
- readonly activeScale: 0.92;
33
+ readonly pressedScale: 0.92;
35
34
  readonly pressedOpacity: 0.8;
36
35
  };
37
36
  readonly default: {
@@ -1 +1 @@
1
- {"version":3,"file":"radio.d.ts","sourceRoot":"","sources":["../../../src/light/components/radio.ts"],"names":[],"mappings":"AA0HA,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmCR,CAAC"}
1
+ {"version":3,"file":"radio.d.ts","sourceRoot":"","sources":["../../../src/light/components/radio.ts"],"names":[],"mappings":"AA0HA,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmCR,CAAC"}
@@ -115,7 +115,7 @@ export const radio = {
115
115
  motion: radioMotionTokens,
116
116
  default: control.default,
117
117
  hover: control.hover,
118
- pressed: control.active,
118
+ pressed: control.pressed,
119
119
  primary,
120
120
  neutral,
121
121
  success,
@@ -2434,7 +2434,7 @@ export declare const select: {
2434
2434
  readonly hoverFg: "#BE123C";
2435
2435
  readonly hoverBg: "#FFE4E6";
2436
2436
  readonly focusBg: "#FDFCFF";
2437
- readonly pressedBg: "#EEE8FA";
2437
+ readonly pressedBg: "#E4DDF4";
2438
2438
  };
2439
2439
  readonly option: {
2440
2440
  readonly default: {
@@ -188,7 +188,7 @@ export const select = {
188
188
  hoverFg: status.error.fg,
189
189
  hoverBg: status.error.bg,
190
190
  focusBg: surface.subtle,
191
- pressedBg: surface.active,
191
+ pressedBg: surface.pressed,
192
192
  },
193
193
  option: {
194
194
  default: {
@@ -10,7 +10,7 @@ export declare const action: {
10
10
  readonly fg: "#FFFFFF";
11
11
  readonly border: "#5037C8";
12
12
  };
13
- readonly active: {
13
+ readonly pressed: {
14
14
  readonly bg: "#402C9F";
15
15
  readonly fg: "#FFFFFF";
16
16
  readonly border: "#402C9F";
@@ -37,7 +37,7 @@ export declare const action: {
37
37
  readonly fg: "#FFFFFF";
38
38
  readonly border: "#0A6175";
39
39
  };
40
- readonly active: {
40
+ readonly pressed: {
41
41
  readonly bg: "#094C5E";
42
42
  readonly fg: "#FFFFFF";
43
43
  readonly border: "#094C5E";
@@ -64,7 +64,7 @@ export declare const action: {
64
64
  readonly fg: "#181521";
65
65
  readonly border: "#BBB2D2";
66
66
  };
67
- readonly active: {
67
+ readonly pressed: {
68
68
  readonly bg: "#958CB0";
69
69
  readonly fg: "#FFFFFF";
70
70
  readonly border: "#958CB0";
@@ -91,7 +91,7 @@ export declare const action: {
91
91
  readonly fg: "#FFFFFF";
92
92
  readonly border: "#9F1239";
93
93
  };
94
- readonly active: {
94
+ readonly pressed: {
95
95
  readonly bg: "#881337";
96
96
  readonly fg: "#FFFFFF";
97
97
  readonly border: "#881337";
@@ -12,7 +12,7 @@ export const action = {
12
12
  fg: text.inverse,
13
13
  border: colors.primary[700],
14
14
  },
15
- active: {
15
+ pressed: {
16
16
  bg: colors.primary[800],
17
17
  fg: text.inverse,
18
18
  border: colors.primary[800],
@@ -39,7 +39,7 @@ export const action = {
39
39
  fg: text.inverse,
40
40
  border: colors.secondary[800],
41
41
  },
42
- active: {
42
+ pressed: {
43
43
  bg: colors.secondary[900],
44
44
  fg: text.inverse,
45
45
  border: colors.secondary[900],
@@ -66,7 +66,7 @@ export const action = {
66
66
  fg: colors.vellira[950],
67
67
  border: colors.vellira[300],
68
68
  },
69
- active: {
69
+ pressed: {
70
70
  bg: colors.vellira[400],
71
71
  fg: text.inverse,
72
72
  border: colors.vellira[400],
@@ -93,7 +93,7 @@ export const action = {
93
93
  fg: text.inverse,
94
94
  border: colors.error[800],
95
95
  },
96
- active: {
96
+ pressed: {
97
97
  bg: colors.error[900],
98
98
  fg: text.inverse,
99
99
  border: colors.error[900],
@@ -9,7 +9,7 @@ export declare const control: {
9
9
  readonly fg: "#402C9F";
10
10
  readonly border: "#5037C8";
11
11
  };
12
- readonly active: {
12
+ readonly pressed: {
13
13
  readonly bg: "#E9E6FF";
14
14
  readonly fg: "#342580";
15
15
  readonly border: "#402C9F";
@@ -30,7 +30,7 @@ export declare const control: {
30
30
  readonly fg: "#FFFFFF";
31
31
  readonly border: "#5037C8";
32
32
  };
33
- readonly active: {
33
+ readonly pressed: {
34
34
  readonly bg: "#402C9F";
35
35
  readonly fg: "#FFFFFF";
36
36
  readonly border: "#402C9F";
@@ -13,7 +13,7 @@ export const control = {
13
13
  fg: colors.primary[800],
14
14
  border: colors.primary[700],
15
15
  },
16
- active: {
16
+ pressed: {
17
17
  bg: colors.primary[100],
18
18
  fg: colors.primary[900],
19
19
  border: colors.primary[800],
@@ -34,7 +34,7 @@ export const control = {
34
34
  fg: colors.mono[50],
35
35
  border: colors.primary[700],
36
36
  },
37
- active: {
37
+ pressed: {
38
38
  bg: colors.primary[800],
39
39
  fg: colors.mono[50],
40
40
  border: colors.primary[800],
@@ -7,7 +7,7 @@ export declare const text: {
7
7
  readonly brand: "#5037C8";
8
8
  readonly interactive: "#5037C8";
9
9
  readonly interactiveHover: "#402C9F";
10
- readonly interactiveActive: "#342580";
10
+ readonly interactivePressed: "#342580";
11
11
  readonly inverse: "#FFFFFF";
12
12
  };
13
13
  //# sourceMappingURL=text.d.ts.map
@@ -8,6 +8,6 @@ export const text = {
8
8
  brand: colors.primary[700],
9
9
  interactive: colors.primary[700],
10
10
  interactiveHover: colors.primary[800],
11
- interactiveActive: colors.primary[900],
11
+ interactivePressed: colors.primary[900],
12
12
  inverse: colors.mono[50],
13
13
  };
@@ -62,6 +62,52 @@ export type TokenMigrationEntry = TokenRenameMigration | TokenAliasMigration | T
62
62
  * the preservation baseline is allowed to accept it.
63
63
  */
64
64
  export declare const tokenMigrationManifestV1: ({
65
+ readonly id: "882-control-active-bg-rename" | "882-control-active-fg-rename" | "882-control-active-border-rename" | "882-control-selected-active-bg-rename" | "882-control-selected-active-fg-rename" | "882-control-selected-active-border-rename" | "882-action-primary-active-bg-rename" | "882-action-primary-active-fg-rename" | "882-action-primary-active-border-rename" | "882-action-secondary-active-bg-rename" | "882-action-secondary-active-fg-rename" | "882-action-secondary-active-border-rename" | "882-action-close-active-bg-rename" | "882-action-close-active-fg-rename" | "882-action-close-active-border-rename" | "882-action-danger-active-bg-rename" | "882-action-danger-active-fg-rename" | "882-action-danger-active-border-rename" | "882-text-interactive-active-rename";
66
+ readonly kind: "rename";
67
+ readonly issue: "#882";
68
+ readonly reason: "Rename a transient physical-interaction role to canonical pressed while preserving its resolved design value.";
69
+ readonly platforms: readonly ["react-native"];
70
+ readonly from: "semantic.control.active.bg" | "semantic.control.active.fg" | "semantic.control.active.border" | "semantic.control.selected.active.bg" | "semantic.control.selected.active.fg" | "semantic.control.selected.active.border" | "semantic.action.primary.active.bg" | "semantic.action.primary.active.fg" | "semantic.action.primary.active.border" | "semantic.action.secondary.active.bg" | "semantic.action.secondary.active.fg" | "semantic.action.secondary.active.border" | "semantic.action.close.active.bg" | "semantic.action.close.active.fg" | "semantic.action.close.active.border" | "semantic.action.danger.active.bg" | "semantic.action.danger.active.fg" | "semantic.action.danger.active.border" | "semantic.text.interactiveActive";
71
+ readonly to: "semantic.action.close.pressed.bg" | "semantic.action.close.pressed.border" | "semantic.action.close.pressed.fg" | "semantic.action.danger.pressed.bg" | "semantic.action.danger.pressed.border" | "semantic.action.danger.pressed.fg" | "semantic.action.primary.pressed.bg" | "semantic.action.primary.pressed.border" | "semantic.action.primary.pressed.fg" | "semantic.action.secondary.pressed.bg" | "semantic.action.secondary.pressed.border" | "semantic.action.secondary.pressed.fg" | "semantic.control.pressed.bg" | "semantic.control.pressed.border" | "semantic.control.pressed.fg" | "semantic.control.selected.pressed.bg" | "semantic.control.selected.pressed.border" | "semantic.control.selected.pressed.fg" | "semantic.text.interactivePressed";
72
+ readonly layer?: undefined;
73
+ readonly equivalence?: undefined;
74
+ readonly evidence?: undefined;
75
+ } | {
76
+ readonly id: "882-control-active-bg-web-identity" | "882-control-active-fg-web-identity" | "882-control-active-border-web-identity" | "882-control-selected-active-bg-web-identity" | "882-control-selected-active-fg-web-identity" | "882-control-selected-active-border-web-identity" | "882-action-primary-active-bg-web-identity" | "882-action-primary-active-fg-web-identity" | "882-action-primary-active-border-web-identity" | "882-action-secondary-active-bg-web-identity" | "882-action-secondary-active-fg-web-identity" | "882-action-secondary-active-border-web-identity" | "882-action-close-active-bg-web-identity" | "882-action-close-active-fg-web-identity" | "882-action-close-active-border-web-identity" | "882-action-danger-active-bg-web-identity" | "882-action-danger-active-fg-web-identity" | "882-action-danger-active-border-web-identity" | "882-text-interactive-active-web-identity";
77
+ readonly kind: "representation-change";
78
+ readonly layer: "platform-output";
79
+ readonly issue: "#882";
80
+ readonly reason: "Align the public Web CSS variable identity with the canonical pressed state name.";
81
+ readonly platforms: readonly ["web"];
82
+ readonly from: "semantic.control.active.bg" | "semantic.control.active.fg" | "semantic.control.active.border" | "semantic.control.selected.active.bg" | "semantic.control.selected.active.fg" | "semantic.control.selected.active.border" | "semantic.action.primary.active.bg" | "semantic.action.primary.active.fg" | "semantic.action.primary.active.border" | "semantic.action.secondary.active.bg" | "semantic.action.secondary.active.fg" | "semantic.action.secondary.active.border" | "semantic.action.close.active.bg" | "semantic.action.close.active.fg" | "semantic.action.close.active.border" | "semantic.action.danger.active.bg" | "semantic.action.danger.active.fg" | "semantic.action.danger.active.border" | "semantic.text.interactiveActive";
83
+ readonly to: "semantic.action.close.pressed.bg" | "semantic.action.close.pressed.border" | "semantic.action.close.pressed.fg" | "semantic.action.danger.pressed.bg" | "semantic.action.danger.pressed.border" | "semantic.action.danger.pressed.fg" | "semantic.action.primary.pressed.bg" | "semantic.action.primary.pressed.border" | "semantic.action.primary.pressed.fg" | "semantic.action.secondary.pressed.bg" | "semantic.action.secondary.pressed.border" | "semantic.action.secondary.pressed.fg" | "semantic.control.pressed.bg" | "semantic.control.pressed.border" | "semantic.control.pressed.fg" | "semantic.control.selected.pressed.bg" | "semantic.control.selected.pressed.border" | "semantic.control.selected.pressed.fg" | "semantic.text.interactivePressed";
84
+ readonly equivalence: "The paired canonical #882 rename preserves the resolved design value; only the Web CSS variable identity changes from active to pressed.";
85
+ readonly evidence: "Token preservation validates the canonical/RN value-preserving rename; generated CSS checks and pinned Linux visual regression validate Web output.";
86
+ } | {
87
+ id: string;
88
+ kind: "remove";
89
+ issue: "#882";
90
+ reason: string;
91
+ from: string;
92
+ approved?: undefined;
93
+ approvalEvidence?: undefined;
94
+ readonly layer?: undefined;
95
+ readonly equivalence?: undefined;
96
+ readonly evidence?: undefined;
97
+ platforms?: undefined;
98
+ } | {
99
+ id: string;
100
+ kind: "visual-change";
101
+ issue: "#882";
102
+ reason: string;
103
+ from: string;
104
+ approved: true;
105
+ approvalEvidence: string;
106
+ readonly layer?: undefined;
107
+ readonly equivalence?: undefined;
108
+ readonly evidence?: undefined;
109
+ platforms?: undefined;
110
+ } | {
65
111
  id: string;
66
112
  kind: "representation-change";
67
113
  layer: "canonical";
@@ -70,9 +116,9 @@ export declare const tokenMigrationManifestV1: ({
70
116
  from: string;
71
117
  equivalence: string;
72
118
  evidence: string;
73
- platforms?: undefined;
74
119
  approved?: undefined;
75
120
  approvalEvidence?: undefined;
121
+ platforms?: undefined;
76
122
  } | {
77
123
  id: string;
78
124
  kind: "visual-change";
@@ -82,9 +128,9 @@ export declare const tokenMigrationManifestV1: ({
82
128
  from: string;
83
129
  approved: true;
84
130
  approvalEvidence: string;
85
- layer?: undefined;
86
- equivalence?: undefined;
87
- evidence?: undefined;
131
+ readonly layer?: undefined;
132
+ readonly equivalence?: undefined;
133
+ readonly evidence?: undefined;
88
134
  })[];
89
135
  export {};
90
136
  //# sourceMappingURL=token-migrations.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"token-migrations.d.ts","sourceRoot":"","sources":["../../src/preservation/token-migrations.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mCAAmC,EAC9C,0CAAmD,CAAC;AAEtD,eAAO,MAAM,mBAAmB,8FAOtB,CAAC;AAEX,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEtE,eAAO,MAAM,wBAAwB,6CAI3B,CAAC;AAEX,MAAM,MAAM,uBAAuB,GAAG,CAAC,OAAO,wBAAwB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEhF,eAAO,MAAM,uBAAuB,kCAAmC,CAAC;AAExE,MAAM,MAAM,sBAAsB,GAAG,CAAC,OAAO,uBAAuB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE9E,KAAK,kBAAkB,GAAG;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,IAAI,MAAM,EAAE,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,SAAS,uBAAuB,EAAE,CAAC;IAC5C,SAAS,CAAC,EAAE,SAAS,sBAAsB,EAAE,CAAC;CAC/C,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,kBAAkB,GAAG;IACtD,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;CACZ,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,kBAAkB,GAAG;IACrD,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;CACZ,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,kBAAkB,GAAG;IACvD,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,kBAAkB,GAAG;IACxD,IAAI,EAAE,UAAU,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;CACZ,CAAC;AAEF,KAAK,gCAAgC,GAAG,IAAI,CAC1C,kBAAkB,EAClB,WAAW,CACZ,GAAG;IACF,IAAI,EAAE,uBAAuB,CAAC;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAIF,MAAM,MAAM,qCAAqC,GAC/C,gCAAgC,GAAG;IACjC,KAAK,EAAE,WAAW,CAAC;IACnB,SAAS,CAAC,EAAE,KAAK,CAAC;CACnB,CAAC;AAEJ,MAAM,MAAM,oCAAoC,GAC9C,gCAAgC,GAAG;IACjC,KAAK,EAAE,iBAAiB,CAAC;IACzB,SAAS,EAAE,SAAS,CAAC,sBAAsB,EAAE,GAAG,sBAAsB,EAAE,CAAC,CAAC;CAC3E,CAAC;AAEJ,MAAM,MAAM,4BAA4B,GACtC,qCAAqC,GAAG,oCAAoC,CAAC;AAE/E,MAAM,MAAM,0BAA0B,GAAG,kBAAkB,GAAG;IAC5D,IAAI,EAAE,eAAe,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,IAAI,CAAC;IACf,gBAAgB,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAC3B,oBAAoB,GACpB,mBAAmB,GACnB,qBAAqB,GACrB,sBAAsB,GACtB,4BAA4B,GAC5B,0BAA0B,CAAC;AAK/B;;;;;;GAMG;AACH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;IAgFK,CAAC"}
1
+ {"version":3,"file":"token-migrations.d.ts","sourceRoot":"","sources":["../../src/preservation/token-migrations.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mCAAmC,EAC9C,0CAAmD,CAAC;AAEtD,eAAO,MAAM,mBAAmB,8FAOtB,CAAC;AAEX,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEtE,eAAO,MAAM,wBAAwB,6CAI3B,CAAC;AAEX,MAAM,MAAM,uBAAuB,GAAG,CAAC,OAAO,wBAAwB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEhF,eAAO,MAAM,uBAAuB,kCAAmC,CAAC;AAExE,MAAM,MAAM,sBAAsB,GAAG,CAAC,OAAO,uBAAuB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE9E,KAAK,kBAAkB,GAAG;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,IAAI,MAAM,EAAE,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,SAAS,uBAAuB,EAAE,CAAC;IAC5C,SAAS,CAAC,EAAE,SAAS,sBAAsB,EAAE,CAAC;CAC/C,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,kBAAkB,GAAG;IACtD,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;CACZ,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,kBAAkB,GAAG;IACrD,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;CACZ,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,kBAAkB,GAAG;IACvD,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,kBAAkB,GAAG;IACxD,IAAI,EAAE,UAAU,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;CACZ,CAAC;AAEF,KAAK,gCAAgC,GAAG,IAAI,CAC1C,kBAAkB,EAClB,WAAW,CACZ,GAAG;IACF,IAAI,EAAE,uBAAuB,CAAC;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAIF,MAAM,MAAM,qCAAqC,GAC/C,gCAAgC,GAAG;IACjC,KAAK,EAAE,WAAW,CAAC;IACnB,SAAS,CAAC,EAAE,KAAK,CAAC;CACnB,CAAC;AAEJ,MAAM,MAAM,oCAAoC,GAC9C,gCAAgC,GAAG;IACjC,KAAK,EAAE,iBAAiB,CAAC;IACzB,SAAS,EAAE,SAAS,CAAC,sBAAsB,EAAE,GAAG,sBAAsB,EAAE,CAAC,CAAC;CAC3E,CAAC;AAEJ,MAAM,MAAM,4BAA4B,GACtC,qCAAqC,GAAG,oCAAoC,CAAC;AAE/E,MAAM,MAAM,0BAA0B,GAAG,kBAAkB,GAAG;IAC5D,IAAI,EAAE,eAAe,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,IAAI,CAAC;IACf,gBAAgB,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAC3B,oBAAoB,GACpB,mBAAmB,GACnB,qBAAqB,GACrB,sBAAsB,GACtB,4BAA4B,GAC5B,0BAA0B,CAAC;AAwI/B;;;;;;GAMG;AACH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAiGK,CAAC"}
@@ -14,6 +14,127 @@ export const tokenMigrationThemeNames = [
14
14
  ];
15
15
  export const tokenMigrationPlatforms = ['web', 'react-native'];
16
16
  const valueKindWebFixApproval = '#881 explicitly requires correcting invalid unitless CSS serialization; targeted serializer regressions and the pinned Linux visual suite are the approval evidence.';
17
+ const stateVocabularyVisualApproval = '#879/#882 explicitly authorizes removal of pressed/active semantic conflation; the change stays inside the existing Vellira palette and requires pinned Linux visual regression.';
18
+ const stateVocabularyRenamePairsV1 = [
19
+ [
20
+ 'control-active-bg',
21
+ 'semantic.control.active.bg',
22
+ 'semantic.control.pressed.bg',
23
+ ],
24
+ [
25
+ 'control-active-fg',
26
+ 'semantic.control.active.fg',
27
+ 'semantic.control.pressed.fg',
28
+ ],
29
+ [
30
+ 'control-active-border',
31
+ 'semantic.control.active.border',
32
+ 'semantic.control.pressed.border',
33
+ ],
34
+ [
35
+ 'control-selected-active-bg',
36
+ 'semantic.control.selected.active.bg',
37
+ 'semantic.control.selected.pressed.bg',
38
+ ],
39
+ [
40
+ 'control-selected-active-fg',
41
+ 'semantic.control.selected.active.fg',
42
+ 'semantic.control.selected.pressed.fg',
43
+ ],
44
+ [
45
+ 'control-selected-active-border',
46
+ 'semantic.control.selected.active.border',
47
+ 'semantic.control.selected.pressed.border',
48
+ ],
49
+ [
50
+ 'action-primary-active-bg',
51
+ 'semantic.action.primary.active.bg',
52
+ 'semantic.action.primary.pressed.bg',
53
+ ],
54
+ [
55
+ 'action-primary-active-fg',
56
+ 'semantic.action.primary.active.fg',
57
+ 'semantic.action.primary.pressed.fg',
58
+ ],
59
+ [
60
+ 'action-primary-active-border',
61
+ 'semantic.action.primary.active.border',
62
+ 'semantic.action.primary.pressed.border',
63
+ ],
64
+ [
65
+ 'action-secondary-active-bg',
66
+ 'semantic.action.secondary.active.bg',
67
+ 'semantic.action.secondary.pressed.bg',
68
+ ],
69
+ [
70
+ 'action-secondary-active-fg',
71
+ 'semantic.action.secondary.active.fg',
72
+ 'semantic.action.secondary.pressed.fg',
73
+ ],
74
+ [
75
+ 'action-secondary-active-border',
76
+ 'semantic.action.secondary.active.border',
77
+ 'semantic.action.secondary.pressed.border',
78
+ ],
79
+ [
80
+ 'action-close-active-bg',
81
+ 'semantic.action.close.active.bg',
82
+ 'semantic.action.close.pressed.bg',
83
+ ],
84
+ [
85
+ 'action-close-active-fg',
86
+ 'semantic.action.close.active.fg',
87
+ 'semantic.action.close.pressed.fg',
88
+ ],
89
+ [
90
+ 'action-close-active-border',
91
+ 'semantic.action.close.active.border',
92
+ 'semantic.action.close.pressed.border',
93
+ ],
94
+ [
95
+ 'action-danger-active-bg',
96
+ 'semantic.action.danger.active.bg',
97
+ 'semantic.action.danger.pressed.bg',
98
+ ],
99
+ [
100
+ 'action-danger-active-fg',
101
+ 'semantic.action.danger.active.fg',
102
+ 'semantic.action.danger.pressed.fg',
103
+ ],
104
+ [
105
+ 'action-danger-active-border',
106
+ 'semantic.action.danger.active.border',
107
+ 'semantic.action.danger.pressed.border',
108
+ ],
109
+ [
110
+ 'text-interactive-active',
111
+ 'semantic.text.interactiveActive',
112
+ 'semantic.text.interactivePressed',
113
+ ],
114
+ ];
115
+ const stateVocabularyRenameMigrationsV1 = stateVocabularyRenamePairsV1.flatMap(([id, from, to]) => [
116
+ {
117
+ id: `882-${id}-rename`,
118
+ kind: 'rename',
119
+ issue: '#882',
120
+ reason: 'Rename a transient physical-interaction role to canonical pressed while preserving its resolved design value.',
121
+ platforms: ['react-native'],
122
+ from,
123
+ to,
124
+ },
125
+ {
126
+ id: `882-${id}-web-identity`,
127
+ kind: 'representation-change',
128
+ layer: 'platform-output',
129
+ issue: '#882',
130
+ reason: 'Align the public Web CSS variable identity with the canonical pressed state name.',
131
+ platforms: ['web'],
132
+ from,
133
+ to,
134
+ equivalence: 'The paired canonical #882 rename preserves the resolved design value; only the Web CSS variable identity changes from active to pressed.',
135
+ evidence: 'Token preservation validates the canonical/RN value-preserving rename; generated CSS checks and pinned Linux visual regression validate Web output.',
136
+ },
137
+ ]);
17
138
  /**
18
139
  * Migration/test metadata only. This is not a runtime token registry.
19
140
  *
@@ -22,35 +143,50 @@ const valueKindWebFixApproval = '#881 explicitly requires correcting invalid uni
22
143
  * the preservation baseline is allowed to accept it.
23
144
  */
24
145
  export const tokenMigrationManifestV1 = [
146
+ ...stateVocabularyRenameMigrationsV1,
25
147
  {
26
- id: '881-modal-z-index-offset-number',
27
- kind: 'representation-change',
28
- layer: 'canonical',
29
- issue: '#881',
30
- reason: 'Remove a stringified-number workaround now that z-index/order has a canonical unitless numeric kind.',
31
- from: 'components.modal.content.zIndexOffset',
32
- equivalence: 'Canonical "1" and numeric 1 represent the same stack offset; Web serialization remains the literal value 1.',
33
- evidence: 'The value-kind serializer regression locks Web output to 1 and current first-party Modal renderers do not consume the old string representation directly.',
148
+ id: '882-radio-active-scale-remove',
149
+ kind: 'remove',
150
+ issue: '#882',
151
+ reason: 'Remove activeScale because it encoded transient physical press rather than a persistent active state.',
152
+ from: 'components.radio.motion.activeScale',
34
153
  },
35
154
  {
36
- id: '881-radio-pressed-scale-web',
155
+ id: '882-radio-pressed-scale-own-effective-press',
37
156
  kind: 'visual-change',
38
- issue: '#881',
39
- platforms: ['web'],
40
- reason: 'Correct Radio pressed scale from invalid px-suffixed transform input to the intended unitless scale.',
157
+ issue: '#882',
158
+ reason: 'Move the existing effective Radio press scale of 0.92 from misleading activeScale ownership to the canonical pressedScale token.',
41
159
  from: 'components.radio.motion.pressedScale',
42
160
  approved: true,
43
- approvalEvidence: valueKindWebFixApproval,
161
+ approvalEvidence: stateVocabularyVisualApproval,
44
162
  },
45
163
  {
46
- id: '881-radio-active-scale-web',
164
+ id: '882-input-clear-button-pressed-surface',
47
165
  kind: 'visual-change',
48
- issue: '#881',
49
- platforms: ['web'],
50
- reason: 'Correct Radio active scale from invalid px-suffixed transform input to the intended unitless scale.',
51
- from: 'components.radio.motion.activeScale',
166
+ issue: '#882',
167
+ reason: 'Map Input clear-button physical press to surface.pressed instead of the persistent/current surface.active role.',
168
+ from: 'components.input.clearButton.pressedBg',
52
169
  approved: true,
53
- approvalEvidence: valueKindWebFixApproval,
170
+ approvalEvidence: stateVocabularyVisualApproval,
171
+ },
172
+ {
173
+ id: '882-select-clear-button-pressed-surface',
174
+ kind: 'visual-change',
175
+ issue: '#882',
176
+ reason: 'Map Select clear-button physical press to surface.pressed instead of the persistent/current surface.active role.',
177
+ from: 'components.select.clearButton.pressedBg',
178
+ approved: true,
179
+ approvalEvidence: stateVocabularyVisualApproval,
180
+ },
181
+ {
182
+ id: '881-modal-z-index-offset-number',
183
+ kind: 'representation-change',
184
+ layer: 'canonical',
185
+ issue: '#881',
186
+ reason: 'Remove a stringified-number workaround now that z-index/order has a canonical unitless numeric kind.',
187
+ from: 'components.modal.content.zIndexOffset',
188
+ equivalence: 'Canonical "1" and numeric 1 represent the same stack offset; Web serialization remains the literal value 1.',
189
+ evidence: 'The value-kind serializer regression locks Web output to 1 and current first-party Modal renderers do not consume the old string representation directly.',
54
190
  },
55
191
  {
56
192
  id: '881-radio-pressed-opacity-web',
@@ -79,15 +79,83 @@ export declare const canonicalComponentNumericRoleFamilies: {
79
79
  */
80
80
  export declare function resolveTokenValueKind(tokenPath: string, value: string | number): TokenValueKind | null;
81
81
  export declare function requireTokenValueKind(tokenPath: string, value: string | number): TokenValueKind;
82
+ export declare const canonicalInteractionStates: readonly ["default", "hover", "pressed", "active", "selected", "disabled", "focus"];
83
+ export type CanonicalInteractionState = (typeof canonicalInteractionStates)[number];
84
+ /**
85
+ * Interaction-state semantics consumed by token audits, Generator V2, and agents.
86
+ * State names describe meaning, never a visual intensity level.
87
+ */
88
+ export declare const interactionStateVocabularyV1: {
89
+ readonly default: {
90
+ readonly temporality: "resting";
91
+ readonly meaning: "Resting enabled state before interaction or persistent selection.";
92
+ };
93
+ readonly hover: {
94
+ readonly temporality: "transient";
95
+ readonly meaning: "Pointer hover only; optional when the input platform has no hover capability.";
96
+ };
97
+ readonly pressed: {
98
+ readonly temporality: "transient";
99
+ readonly meaning: "Physical pointer or key activation while the interaction is held.";
100
+ };
101
+ readonly active: {
102
+ readonly temporality: "persistent-or-current";
103
+ readonly meaning: "Current or persistently active domain state; never an alias for physical press.";
104
+ };
105
+ readonly selected: {
106
+ readonly temporality: "persistent";
107
+ readonly meaning: "Chosen, checked, or selected domain state.";
108
+ };
109
+ readonly disabled: {
110
+ readonly temporality: "persistent";
111
+ readonly meaning: "Unavailable interaction state that cannot be activated.";
112
+ };
113
+ readonly focus: {
114
+ readonly temporality: "transient-or-current";
115
+ readonly meaning: "Current input focus indication, independent from hover, press, or selection.";
116
+ };
117
+ };
118
+ /**
119
+ * Domains where active is intentionally distinct from physical press.
120
+ * Patterns are architecture metadata for #890; they are not runtime selectors.
121
+ */
122
+ export declare const legitimatePersistentActiveStateDomainsV1: readonly [{
123
+ readonly pattern: "semantic.surface.active";
124
+ readonly meaning: "Generic current/active surface role distinct from surface.pressed.";
125
+ }, {
126
+ readonly pattern: "semantic.menu.item.active";
127
+ readonly meaning: "Current/highlighted menu item independent from physical press.";
128
+ }, {
129
+ readonly pattern: "semantic.menu.item.danger.active";
130
+ readonly meaning: "Current/highlighted danger menu item.";
131
+ }, {
132
+ readonly pattern: "semantic.navigation.active";
133
+ readonly meaning: "Current navigation destination.";
134
+ }, {
135
+ readonly pattern: "semantic.navigation.optionActive";
136
+ readonly meaning: "Current/highlighted navigation option.";
137
+ }, {
138
+ readonly pattern: "components.contextMenu.item.active";
139
+ readonly meaning: "Current/highlighted context-menu item.";
140
+ }, {
141
+ readonly pattern: "components.dropdown.*.item.active";
142
+ readonly meaning: "Current/highlighted dropdown item independent from :active press.";
143
+ }, {
144
+ readonly pattern: "components.select.*.option.active";
145
+ readonly meaning: "Current/highlighted Select option independent from aria-selected and press.";
146
+ }, {
147
+ readonly pattern: "components.tabs.*.*.active";
148
+ readonly meaning: "Current active tab presentation; physical press is a separate interaction.";
149
+ }];
82
150
  export declare const canonicalTokenVocabulary: {
83
151
  readonly surface: readonly ["canvas", "default", "subtle", "muted", "elevated", "hover", "active", "pressed", "disabled", "danger", "inverse"];
84
- readonly state: readonly ["default", "hover", "active", "pressed", "selected", "disabled", "focus"];
85
- readonly foreground: readonly ["primary", "secondary", "muted", "subtle", "disabled", "brand", "interactive", "interactiveHover", "interactiveActive", "inverse"];
152
+ readonly state: readonly ["default", "hover", "pressed", "active", "selected", "disabled", "focus"];
153
+ readonly foreground: readonly ["primary", "secondary", "muted", "subtle", "disabled", "brand", "interactive", "interactiveHover", "interactivePressed", "inverse"];
86
154
  readonly border: readonly ["subtle", "muted", "default", "strong", "elevated", "disabled"];
87
155
  readonly intent: readonly ["primary", "neutral", "success", "warning", "danger"];
88
156
  readonly status: readonly ["success", "error", "warning", "info"];
89
157
  };
90
- export declare const canonicalSemanticRolePaths: readonly ["surface.canvas", "surface.default", "surface.subtle", "surface.muted", "surface.elevated", "surface.hover", "surface.active", "surface.pressed", "surface.disabled", "surface.danger", "surface.inverse", "text.primary", "text.secondary", "text.muted", "text.subtle", "text.disabled", "text.brand", "text.interactive", "text.interactiveHover", "text.interactiveActive", "text.inverse", "border.subtle", "border.muted", "border.default", "border.strong", "border.elevated", "border.disabled", "border.focus", "divider.muted", "divider.default", "divider.strong", "focus.ring.color", "focus.ring.width", "focus.ring.shadow", "focus.ring.offset", "status.success.fg", "status.success.bg", "status.success.border", "status.success.ring", "status.success.strong", "status.error.fg", "status.error.bg", "status.error.border", "status.error.ring", "status.error.strong", "status.warning.fg", "status.warning.bg", "status.warning.border", "status.warning.ring", "status.warning.strong", "status.info.fg", "status.info.bg", "status.info.border", "status.info.ring", "status.info.strong", "overlay.backdrop", "overlay.tooltip.bg", "overlay.tooltip.fg", "overlay.tooltip.border", "overlay.popover.bg", "overlay.popover.border", "overlay.modal.bg", "overlay.modal.border"];
158
+ export declare const canonicalSemanticRolePaths: readonly ["surface.canvas", "surface.default", "surface.subtle", "surface.muted", "surface.elevated", "surface.hover", "surface.active", "surface.pressed", "surface.disabled", "surface.danger", "surface.inverse", "text.primary", "text.secondary", "text.muted", "text.subtle", "text.disabled", "text.brand", "text.interactive", "text.interactiveHover", "text.interactivePressed", "text.inverse", "border.subtle", "border.muted", "border.default", "border.strong", "border.elevated", "border.disabled", "border.focus", "divider.muted", "divider.default", "divider.strong", "focus.ring.color", "focus.ring.width", "focus.ring.shadow", "focus.ring.offset", "status.success.fg", "status.success.bg", "status.success.border", "status.success.ring", "status.success.strong", "status.error.fg", "status.error.bg", "status.error.border", "status.error.ring", "status.error.strong", "status.warning.fg", "status.warning.bg", "status.warning.border", "status.warning.ring", "status.warning.strong", "status.info.fg", "status.info.bg", "status.info.border", "status.info.ring", "status.info.strong", "overlay.backdrop", "overlay.tooltip.bg", "overlay.tooltip.fg", "overlay.tooltip.border", "overlay.popover.bg", "overlay.popover.border", "overlay.modal.bg", "overlay.modal.border"];
91
159
  export declare const componentTokenFactoryModel: {
92
160
  readonly canonicalName: "create<Component>Tokens";
93
161
  readonly legacyPaletteName: "create<Component>Palette is retained when the component exposes intent palettes.";
@@ -1 +1 @@
1
- {"version":3,"file":"token-architecture.d.ts","sourceRoot":"","sources":["../src/token-architecture.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,uBAAuB,qGAO1B,CAAC;AAEX,eAAO,MAAM,qBAAqB,EAChC,wFAAiG,CAAC;AAEpG,eAAO,MAAM,eAAe,wLAelB,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;AAE9D,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkBrC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,qCAAqC;;;;;;;;;;CA2BqB,CAAC;AAsHxE;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,GAAG,MAAM,GACrB,cAAc,GAAG,IAAI,CAwCvB;AAED,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,GAAG,MAAM,GACrB,cAAc,CAQhB;AAED,eAAO,MAAM,wBAAwB;;;;;;;CAsC3B,CAAC;AAEX,eAAO,MAAM,0BAA0B,svCAgE7B,CAAC;AAEX,eAAO,MAAM,0BAA0B;;;;;;CAS7B,CAAC;AAEX,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqG/B,CAAC;AAEX,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;;EA+BjC,CAAC"}
1
+ {"version":3,"file":"token-architecture.d.ts","sourceRoot":"","sources":["../src/token-architecture.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,uBAAuB,qGAO1B,CAAC;AAEX,eAAO,MAAM,qBAAqB,EAChC,wFAAiG,CAAC;AAEpG,eAAO,MAAM,eAAe,wLAelB,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;AAE9D,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkBrC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,qCAAqC;;;;;;;;;;CA2BqB,CAAC;AAsHxE;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,GAAG,MAAM,GACrB,cAAc,GAAG,IAAI,CAwCvB;AAED,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,GAAG,MAAM,GACrB,cAAc,CAQhB;AAED,eAAO,MAAM,0BAA0B,qFAQ7B,CAAC;AAEX,MAAM,MAAM,yBAAyB,GACnC,CAAC,OAAO,0BAA0B,CAAC,CAAC,MAAM,CAAC,CAAC;AAE9C;;;GAGG;AACH,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkC/B,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,wCAAwC;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyC3C,CAAC;AAEX,eAAO,MAAM,wBAAwB;;;;;;;CAsC3B,CAAC;AAEX,eAAO,MAAM,0BAA0B,uvCAgE7B,CAAC;AAEX,eAAO,MAAM,0BAA0B;;;;;;CAS7B,CAAC;AAEX,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqG/B,CAAC;AAEX,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;;EA+BjC,CAAC"}