gbs-add-block 2.1.0 → 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (129) hide show
  1. package/.gbs/skills/gbs-components/SKILL.md +190 -134
  2. package/.gbs/skills/gbs-components/references/install.md +25 -3
  3. package/.gbs/skills/gbs-components/references/styling.md +246 -207
  4. package/CHANGELOG.md +74 -0
  5. package/README.md +154 -23
  6. package/index.cjs +212 -3
  7. package/package.json +41 -10
  8. package/schema/passport-v1.schema.json +204 -0
  9. package/source/beta-components/accordion/passport.json +259 -0
  10. package/source/beta-components/accordion/styles.css +207 -208
  11. package/source/beta-components/alert/passport.json +250 -0
  12. package/source/beta-components/alert/styles.css +154 -155
  13. package/source/beta-components/avatar/passport.json +294 -0
  14. package/source/beta-components/avatar/styles.css +225 -226
  15. package/source/beta-components/badge/passport.json +332 -0
  16. package/source/beta-components/badge/styles.css +203 -204
  17. package/source/beta-components/breadcrumb/passport.json +243 -0
  18. package/source/beta-components/breadcrumb/styles.css +138 -140
  19. package/source/beta-components/button/passport.json +402 -0
  20. package/source/beta-components/button/passport.manual.json +31 -0
  21. package/source/beta-components/button/styles.css +232 -234
  22. package/source/beta-components/card/passport.json +337 -0
  23. package/source/beta-components/card/styles.css +230 -232
  24. package/source/beta-components/checkbox/passport.json +456 -0
  25. package/source/beta-components/checkbox/styles.css +211 -213
  26. package/source/beta-components/combobox/passport.json +456 -0
  27. package/source/beta-components/combobox/styles.css +419 -417
  28. package/source/beta-components/data-grid/agent/coerce.ts +368 -0
  29. package/source/beta-components/data-grid/agent/contract.ts +410 -0
  30. package/source/beta-components/data-grid/agent/dataset.ts +92 -0
  31. package/source/beta-components/data-grid/agent/engine.ts +470 -0
  32. package/source/beta-components/data-grid/agent/executors.ts +155 -0
  33. package/source/beta-components/data-grid/agent/index.ts +79 -0
  34. package/source/beta-components/data-grid/agent/intent.ts +324 -0
  35. package/source/beta-components/data-grid/agent/operations.ts +335 -0
  36. package/source/beta-components/data-grid/agent/validate.ts +630 -0
  37. package/source/beta-components/data-grid/agent/webmcp.ts +107 -0
  38. package/source/beta-components/data-grid/index.ts +14 -7
  39. package/source/beta-components/data-grid/passport.json +1051 -0
  40. package/source/beta-components/data-grid/passport.manual.json +255 -0
  41. package/source/beta-components/data-grid/react/AskGrid.tsx +164 -0
  42. package/source/beta-components/data-grid/react/DataGrid.tsx +39 -0
  43. package/source/beta-components/data-grid/styles.css +874 -716
  44. package/source/beta-components/date-picker/passport.json +407 -0
  45. package/source/beta-components/date-picker/styles.css +445 -446
  46. package/source/beta-components/dialog/passport.json +344 -0
  47. package/source/beta-components/dialog/styles.css +280 -279
  48. package/source/beta-components/file-uploader/passport.json +518 -0
  49. package/source/beta-components/file-uploader/styles.css +394 -396
  50. package/source/beta-components/input/passport.json +536 -0
  51. package/source/beta-components/input/styles.css +295 -297
  52. package/source/beta-components/menu/passport.json +322 -0
  53. package/source/beta-components/menu/styles.css +224 -223
  54. package/source/beta-components/modal/passport.json +289 -0
  55. package/source/beta-components/modal/styles.css +241 -240
  56. package/source/beta-components/number-input/passport.json +541 -0
  57. package/source/beta-components/number-input/styles.css +230 -231
  58. package/source/beta-components/popover/passport.json +238 -0
  59. package/source/beta-components/popover/styles.css +148 -147
  60. package/source/beta-components/progress/passport.json +270 -0
  61. package/source/beta-components/progress/styles.css +200 -201
  62. package/source/beta-components/radio-group/passport.json +477 -0
  63. package/source/beta-components/radio-group/styles.css +269 -270
  64. package/source/beta-components/shared/core/agent/adapter.ts +65 -0
  65. package/source/beta-components/shared/core/agent/history.ts +120 -0
  66. package/source/beta-components/shared/core/agent/index.ts +46 -0
  67. package/source/beta-components/shared/core/agent/numbers.ts +217 -0
  68. package/source/beta-components/shared/core/agent/schema.ts +180 -0
  69. package/source/beta-components/shared/core/agent/types.ts +169 -0
  70. package/source/beta-components/shared/core/agent/webmcp.ts +328 -0
  71. package/source/beta-components/shared/index.ts +9 -0
  72. package/source/beta-components/shared/react/GramproAIProvider.tsx +50 -0
  73. package/source/beta-components/shared/react/useAskAgent.ts +217 -0
  74. package/source/beta-components/shared/styles.css +79 -0
  75. package/source/beta-components/shared/version.json +4 -4
  76. package/source/beta-components/shared/version.ts +6 -6
  77. package/source/beta-components/skeleton/passport.json +251 -0
  78. package/source/beta-components/skeleton/styles.css +185 -187
  79. package/source/beta-components/spinner/passport.json +245 -0
  80. package/source/beta-components/spinner/styles.css +173 -174
  81. package/source/beta-components/switch/passport.json +421 -0
  82. package/source/beta-components/switch/styles.css +227 -229
  83. package/source/beta-components/tabs/passport.json +315 -0
  84. package/source/beta-components/tabs/styles.css +263 -264
  85. package/source/beta-components/textarea/passport.json +382 -0
  86. package/source/beta-components/textarea/styles.css +158 -160
  87. package/source/beta-components/toaster/passport.json +221 -0
  88. package/source/beta-components/toaster/styles.css +282 -282
  89. package/source/beta-components/tooltip/passport.json +170 -0
  90. package/source/beta-components/tooltip/styles.css +71 -73
  91. package/tools/env.cjs +61 -0
  92. package/tools/passport/cli.cjs +79 -0
  93. package/tools/passport/extract.cjs +493 -0
  94. package/tools/passport/index.cjs +185 -0
  95. package/tools/passport/merge.cjs +131 -0
  96. package/tools/passport/policy.cjs +65 -0
  97. package/tools/passport/validate.cjs +277 -0
  98. package/tools/ts-require.cjs +79 -0
  99. package/source/beta-components/accordion/__tests__/core.test.ts +0 -58
  100. package/source/beta-components/alert/__tests__/core.test.ts +0 -17
  101. package/source/beta-components/avatar/__tests__/core.test.ts +0 -88
  102. package/source/beta-components/badge/__tests__/core.test.ts +0 -46
  103. package/source/beta-components/breadcrumb/__tests__/core.test.ts +0 -58
  104. package/source/beta-components/button/__tests__/core.test.ts +0 -31
  105. package/source/beta-components/card/__tests__/core.test.ts +0 -57
  106. package/source/beta-components/checkbox/__tests__/core.test.ts +0 -40
  107. package/source/beta-components/combobox/__tests__/core.test.ts +0 -134
  108. package/source/beta-components/data-grid/__tests__/core.test.ts +0 -356
  109. package/source/beta-components/data-grid/__tests__/export.test.ts +0 -70
  110. package/source/beta-components/data-grid/__tests__/pdf.test.ts +0 -209
  111. package/source/beta-components/date-picker/__tests__/core.test.ts +0 -273
  112. package/source/beta-components/dialog/__tests__/core.test.ts +0 -86
  113. package/source/beta-components/file-uploader/__tests__/core.test.ts +0 -395
  114. package/source/beta-components/input/__tests__/core.test.ts +0 -75
  115. package/source/beta-components/menu/__tests__/core.test.ts +0 -120
  116. package/source/beta-components/modal/__tests__/core.test.ts +0 -55
  117. package/source/beta-components/number-input/__tests__/core.test.ts +0 -151
  118. package/source/beta-components/progress/__tests__/core.test.ts +0 -56
  119. package/source/beta-components/radio-group/__tests__/core.test.ts +0 -64
  120. package/source/beta-components/shared/__tests__/boundaries.test.ts +0 -95
  121. package/source/beta-components/shared/__tests__/core.test.ts +0 -55
  122. package/source/beta-components/shared/__tests__/position.test.ts +0 -143
  123. package/source/beta-components/skeleton/__tests__/core.test.ts +0 -41
  124. package/source/beta-components/spinner/__tests__/core.test.ts +0 -48
  125. package/source/beta-components/switch/__tests__/core.test.ts +0 -64
  126. package/source/beta-components/tabs/__tests__/core.test.ts +0 -51
  127. package/source/beta-components/textarea/__tests__/core.test.ts +0 -38
  128. package/source/beta-components/toaster/__tests__/core.test.ts +0 -256
  129. package/source/beta-components/tooltip/__tests__/core.test.ts +0 -42
@@ -1,232 +1,230 @@
1
- /*
2
- * Card and Stat styles.
3
- *
4
- * Tokens read the shared --gbs-* variables when they are set on an ancestor
5
- * (set them on :root to theme every component at once) and fall back to the
6
- * same default palette otherwise. Rules live in the `gbs` layer. Declare
7
- * where that sits in your global CSS — e.g. `@layer reset, gbs, app,
8
- * utilities;` — and anything in a later layer, Tailwind utilities included,
9
- * overrides them.
10
- */
11
-
12
- @layer gbs {
13
- .cd-root,
14
- .st-root {
15
- --cd-bg: var(--gbs-bg, var(--dg-bg, light-dark(#ffffff, #0b0b0e)));
16
- --cd-fg: var(--gbs-fg, var(--dg-fg, light-dark(#18181b, #f4f4f5)));
17
- --cd-muted: var(--gbs-muted, var(--dg-muted, light-dark(#71717a, #a1a1aa)));
18
- --cd-border: var(--gbs-border, var(--dg-border, light-dark(#e4e4e7, #27272a)));
19
- --cd-hover: var(--gbs-hover, var(--dg-hover, light-dark(#f4f4f5, #1f1f23)));
20
- --cd-focus: var(--gbs-focus, var(--dg-focus, light-dark(#2563eb, #60a5fa)));
21
- --cd-success: var(--gbs-success, light-dark(#15803d, #4ade80));
22
- --cd-danger: var(--gbs-danger, var(--dg-danger, light-dark(#dc2626, #f87171)));
23
- --cd-shadow: var(--gbs-shadow, var(--dg-shadow, 0 10px 30px -8px light-dark(rgb(0 0 0 / 0.18), rgb(0 0 0 / 0.6))));
24
- --cd-radius: var(--gbs-radius, var(--dg-radius, 8px));
25
- --cd-font-size: var(--gbs-font-size, var(--dg-font-size, 13px));
26
- --cd-px: 16px;
27
-
28
- color-scheme: inherit;
29
- font-size: var(--cd-font-size);
30
- line-height: 1.5;
31
- color: var(--cd-fg);
32
- }
33
-
34
- :where(.dark, [data-theme="dark"]) :is(.cd-root, .st-root) {
35
- color-scheme: dark;
36
- }
37
- :where(.light, [data-theme="light"]) :is(.cd-root, .st-root) {
38
- color-scheme: light;
39
- }
40
-
41
- :where(.cd-root, .st-root) *,
42
- :where(.cd-root, .st-root) *::before,
43
- :where(.cd-root, .st-root) *::after {
44
- box-sizing: border-box;
45
- }
46
-
47
- /* ---------------------------------------------------------------- card */
48
-
49
- .cd-root {
50
- display: flex;
51
- flex-direction: column;
52
- min-width: 0;
53
- border-radius: var(--cd-radius);
54
- background: var(--cd-bg);
55
- text-decoration: none;
56
- }
57
- .cd-root[data-variant="outlined"] {
58
- border: 1px solid var(--cd-border);
59
- }
60
- .cd-root[data-variant="elevated"] {
61
- border: 1px solid transparent;
62
- box-shadow: var(--cd-shadow);
63
- }
64
- .cd-root[data-variant="plain"] {
65
- background: transparent;
66
- }
67
-
68
- .cd-root[data-padding="none"] {
69
- --cd-px: 0px;
70
- }
71
- .cd-root[data-padding="sm"] {
72
- --cd-px: 12px;
73
- }
74
- .cd-root[data-padding="lg"] {
75
- --cd-px: 24px;
76
- }
77
-
78
- .cd-root[data-interactive] {
79
- cursor: pointer;
80
- transition:
81
- background-color 120ms ease,
82
- box-shadow 120ms ease,
83
- translate 120ms ease;
84
- }
85
- .cd-root[data-interactive]:hover {
86
- background: var(--cd-hover);
87
- }
88
- .cd-root[data-variant="elevated"][data-interactive]:hover {
89
- translate: 0 -1px;
90
- }
91
- .cd-root[data-interactive]:focus-visible {
92
- outline: 2px solid var(--cd-focus);
93
- outline-offset: 2px;
94
- }
95
-
96
- .cd-header {
97
- display: flex;
98
- align-items: flex-start;
99
- gap: 12px;
100
- padding: var(--cd-px) var(--cd-px) 0;
101
- }
102
- .cd-heading {
103
- flex: 1 1 auto;
104
- min-width: 0;
105
- }
106
- .cd-title {
107
- font-size: 1.05em;
108
- font-weight: 600;
109
- line-height: 1.35;
110
- }
111
- .cd-description {
112
- margin-top: 2px;
113
- color: var(--cd-muted);
114
- }
115
- .cd-actions {
116
- display: flex;
117
- flex: none;
118
- align-items: center;
119
- gap: 4px;
120
- }
121
-
122
- .cd-body {
123
- flex: 1 1 auto;
124
- min-width: 0;
125
- padding: var(--cd-px);
126
- }
127
- /* The header already spaces the top, so the body should not double it. */
128
- .cd-header + .cd-body {
129
- padding-top: 12px;
130
- }
131
-
132
- .cd-footer {
133
- display: flex;
134
- flex-wrap: wrap;
135
- align-items: center;
136
- gap: 8px;
137
- padding: 12px var(--cd-px);
138
- border-top: 1px solid var(--cd-border);
139
- }
140
-
141
- /* ---------------------------------------------------------------- stat */
142
-
143
- .st-root {
144
- display: flex;
145
- flex-direction: column;
146
- gap: 4px;
147
- min-width: 0;
148
- }
149
- .st-head {
150
- display: flex;
151
- align-items: center;
152
- gap: 8px;
153
- }
154
- .st-label {
155
- flex: 1 1 auto;
156
- min-width: 0;
157
- color: var(--cd-muted);
158
- font-weight: 500;
159
- overflow: hidden;
160
- text-overflow: ellipsis;
161
- white-space: nowrap;
162
- }
163
- .st-icon {
164
- display: inline-flex;
165
- flex: none;
166
- color: var(--cd-muted);
167
- }
168
- .st-value {
169
- font-size: 1.9em;
170
- font-weight: 650;
171
- font-variant-numeric: tabular-nums;
172
- line-height: 1.15;
173
- letter-spacing: -0.01em;
174
- }
175
-
176
- .st-trend {
177
- display: flex;
178
- align-items: center;
179
- gap: 4px;
180
- color: var(--cd-muted);
181
- }
182
- /* Colour is a second signal: the arrow and the visually hidden word carry
183
- the direction on their own. */
184
- .st-trend[data-positive="true"] {
185
- color: var(--cd-success);
186
- }
187
- .st-trend[data-positive="false"] {
188
- color: var(--cd-danger);
189
- }
190
- .st-trend-label {
191
- font-variant-numeric: tabular-nums;
192
- font-weight: 500;
193
- }
194
- .st-trend-description {
195
- color: var(--cd-muted);
196
- }
197
-
198
- .st-help {
199
- color: var(--cd-muted);
200
- }
201
-
202
- .st-placeholder {
203
- border-radius: 4px;
204
- background: var(--cd-hover);
205
- }
206
- .st-placeholder-value {
207
- width: 5ch;
208
- height: 1.9em;
209
- }
210
- .st-placeholder-help {
211
- width: 10ch;
212
- height: 1em;
213
- }
214
-
215
- .st-sr-only {
216
- position: absolute;
217
- width: 1px;
218
- height: 1px;
219
- margin: -1px;
220
- padding: 0;
221
- overflow: hidden;
222
- border: 0;
223
- clip-path: inset(50%);
224
- white-space: nowrap;
225
- }
226
-
227
- @media (forced-colors: active) {
228
- .cd-root[data-variant="elevated"] {
229
- border-color: CanvasText;
230
- }
231
- }
232
- }
1
+ /*
2
+ * Card and Stat styles.
3
+ *
4
+ * Tokens read the shared --gbs-* variables when they are set on an ancestor
5
+ * (set them on :root to theme every component at once) and fall back to the
6
+ * same default palette otherwise. Rules are unlayered: they beat a framework
7
+ * reset on specificity, and lose to anything you pass through `className`.
8
+ * With Tailwind v4, import this file after the framework and inside its
9
+ * components layer - see the README.
10
+ */
11
+
12
+ .cd-root,
13
+ .st-root {
14
+ --cd-bg: var(--gbs-bg, var(--dg-bg, light-dark(#ffffff, #0b0b0e)));
15
+ --cd-fg: var(--gbs-fg, var(--dg-fg, light-dark(#18181b, #f4f4f5)));
16
+ --cd-muted: var(--gbs-muted, var(--dg-muted, light-dark(#71717a, #a1a1aa)));
17
+ --cd-border: var(--gbs-border, var(--dg-border, light-dark(#e4e4e7, #27272a)));
18
+ --cd-hover: var(--gbs-hover, var(--dg-hover, light-dark(#f4f4f5, #1f1f23)));
19
+ --cd-focus: var(--gbs-focus, var(--dg-focus, light-dark(#2563eb, #60a5fa)));
20
+ --cd-success: var(--gbs-success, light-dark(#15803d, #4ade80));
21
+ --cd-danger: var(--gbs-danger, var(--dg-danger, light-dark(#dc2626, #f87171)));
22
+ --cd-shadow: var(--gbs-shadow, var(--dg-shadow, 0 10px 30px -8px light-dark(rgb(0 0 0 / 0.18), rgb(0 0 0 / 0.6))));
23
+ --cd-radius: var(--gbs-radius, var(--dg-radius, 8px));
24
+ --cd-font-size: var(--gbs-font-size, var(--dg-font-size, 13px));
25
+ --cd-px: 16px;
26
+
27
+ color-scheme: inherit;
28
+ font-size: var(--cd-font-size);
29
+ line-height: 1.5;
30
+ color: var(--cd-fg);
31
+ }
32
+
33
+ :where(.dark, [data-theme="dark"]) :is(.cd-root, .st-root) {
34
+ color-scheme: dark;
35
+ }
36
+ :where(.light, [data-theme="light"]) :is(.cd-root, .st-root) {
37
+ color-scheme: light;
38
+ }
39
+
40
+ :where(.cd-root, .st-root) *,
41
+ :where(.cd-root, .st-root) *::before,
42
+ :where(.cd-root, .st-root) *::after {
43
+ box-sizing: border-box;
44
+ }
45
+
46
+ /* ---------------------------------------------------------------- card */
47
+
48
+ .cd-root {
49
+ display: flex;
50
+ flex-direction: column;
51
+ min-width: 0;
52
+ border-radius: var(--cd-radius);
53
+ background: var(--cd-bg);
54
+ text-decoration: none;
55
+ }
56
+ .cd-root[data-variant="outlined"] {
57
+ border: 1px solid var(--cd-border);
58
+ }
59
+ .cd-root[data-variant="elevated"] {
60
+ border: 1px solid transparent;
61
+ box-shadow: var(--cd-shadow);
62
+ }
63
+ .cd-root[data-variant="plain"] {
64
+ background: transparent;
65
+ }
66
+
67
+ .cd-root[data-padding="none"] {
68
+ --cd-px: 0px;
69
+ }
70
+ .cd-root[data-padding="sm"] {
71
+ --cd-px: 12px;
72
+ }
73
+ .cd-root[data-padding="lg"] {
74
+ --cd-px: 24px;
75
+ }
76
+
77
+ .cd-root[data-interactive] {
78
+ cursor: pointer;
79
+ transition:
80
+ background-color 120ms ease,
81
+ box-shadow 120ms ease,
82
+ translate 120ms ease;
83
+ }
84
+ .cd-root[data-interactive]:hover {
85
+ background: var(--cd-hover);
86
+ }
87
+ .cd-root[data-variant="elevated"][data-interactive]:hover {
88
+ translate: 0 -1px;
89
+ }
90
+ .cd-root[data-interactive]:focus-visible {
91
+ outline: 2px solid var(--cd-focus);
92
+ outline-offset: 2px;
93
+ }
94
+
95
+ .cd-header {
96
+ display: flex;
97
+ align-items: flex-start;
98
+ gap: 12px;
99
+ padding: var(--cd-px) var(--cd-px) 0;
100
+ }
101
+ .cd-heading {
102
+ flex: 1 1 auto;
103
+ min-width: 0;
104
+ }
105
+ .cd-title {
106
+ font-size: 1.05em;
107
+ font-weight: 600;
108
+ line-height: 1.35;
109
+ }
110
+ .cd-description {
111
+ margin-top: 2px;
112
+ color: var(--cd-muted);
113
+ }
114
+ .cd-actions {
115
+ display: flex;
116
+ flex: none;
117
+ align-items: center;
118
+ gap: 4px;
119
+ }
120
+
121
+ .cd-body {
122
+ flex: 1 1 auto;
123
+ min-width: 0;
124
+ padding: var(--cd-px);
125
+ }
126
+ /* The header already spaces the top, so the body should not double it. */
127
+ .cd-header + .cd-body {
128
+ padding-top: 12px;
129
+ }
130
+
131
+ .cd-footer {
132
+ display: flex;
133
+ flex-wrap: wrap;
134
+ align-items: center;
135
+ gap: 8px;
136
+ padding: 12px var(--cd-px);
137
+ border-top: 1px solid var(--cd-border);
138
+ }
139
+
140
+ /* ---------------------------------------------------------------- stat */
141
+
142
+ .st-root {
143
+ display: flex;
144
+ flex-direction: column;
145
+ gap: 4px;
146
+ min-width: 0;
147
+ }
148
+ .st-head {
149
+ display: flex;
150
+ align-items: center;
151
+ gap: 8px;
152
+ }
153
+ .st-label {
154
+ flex: 1 1 auto;
155
+ min-width: 0;
156
+ color: var(--cd-muted);
157
+ font-weight: 500;
158
+ overflow: hidden;
159
+ text-overflow: ellipsis;
160
+ white-space: nowrap;
161
+ }
162
+ .st-icon {
163
+ display: inline-flex;
164
+ flex: none;
165
+ color: var(--cd-muted);
166
+ }
167
+ .st-value {
168
+ font-size: 1.9em;
169
+ font-weight: 650;
170
+ font-variant-numeric: tabular-nums;
171
+ line-height: 1.15;
172
+ letter-spacing: -0.01em;
173
+ }
174
+
175
+ .st-trend {
176
+ display: flex;
177
+ align-items: center;
178
+ gap: 4px;
179
+ color: var(--cd-muted);
180
+ }
181
+ /* Colour is a second signal: the arrow and the visually hidden word carry
182
+ the direction on their own. */
183
+ .st-trend[data-positive="true"] {
184
+ color: var(--cd-success);
185
+ }
186
+ .st-trend[data-positive="false"] {
187
+ color: var(--cd-danger);
188
+ }
189
+ .st-trend-label {
190
+ font-variant-numeric: tabular-nums;
191
+ font-weight: 500;
192
+ }
193
+ .st-trend-description {
194
+ color: var(--cd-muted);
195
+ }
196
+
197
+ .st-help {
198
+ color: var(--cd-muted);
199
+ }
200
+
201
+ .st-placeholder {
202
+ border-radius: 4px;
203
+ background: var(--cd-hover);
204
+ }
205
+ .st-placeholder-value {
206
+ width: 5ch;
207
+ height: 1.9em;
208
+ }
209
+ .st-placeholder-help {
210
+ width: 10ch;
211
+ height: 1em;
212
+ }
213
+
214
+ .st-sr-only {
215
+ position: absolute;
216
+ width: 1px;
217
+ height: 1px;
218
+ margin: -1px;
219
+ padding: 0;
220
+ overflow: hidden;
221
+ border: 0;
222
+ clip-path: inset(50%);
223
+ white-space: nowrap;
224
+ }
225
+
226
+ @media (forced-colors: active) {
227
+ .cd-root[data-variant="elevated"] {
228
+ border-color: CanvasText;
229
+ }
230
+ }