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
@@ -0,0 +1,204 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://gramprokit.dev/schema/passport/1.json",
4
+ "title": "GramproKit Component Passport v1",
5
+ "description": "Machine-readable contract for one component. Generated from TypeScript source and merged with authored semantics. Published so external tooling can validate without depending on the generator.",
6
+ "type": "object",
7
+ "required": ["passportVersion", "identity", "source", "props", "events", "slots", "states", "coverage"],
8
+ "additionalProperties": false,
9
+ "properties": {
10
+ "passportVersion": { "const": "1.0.0" },
11
+
12
+ "identity": {
13
+ "type": "object",
14
+ "required": ["component", "folder", "exports"],
15
+ "additionalProperties": false,
16
+ "properties": {
17
+ "component": { "type": "string", "description": "Primary exported component name." },
18
+ "folder": { "type": "string", "description": "Install folder under component-lib/." },
19
+ "exports": { "type": "array", "items": { "type": "string" } },
20
+ "since": { "type": "string" }
21
+ }
22
+ },
23
+
24
+ "source": {
25
+ "type": "object",
26
+ "required": ["libraryVersion", "files", "sourceHash"],
27
+ "additionalProperties": false,
28
+ "description": "Provenance. sourceHash covers file contents only — no timestamps — so regeneration is byte-stable and CI comparison is meaningful.",
29
+ "properties": {
30
+ "libraryVersion": { "type": "string" },
31
+ "files": { "type": "array", "minItems": 1, "items": { "type": "string" } },
32
+ "sourceHash": { "type": "string", "pattern": "^sha256:[0-9a-f]{64}$" }
33
+ }
34
+ },
35
+
36
+ "purpose": { "type": "string", "description": "Authored. What the component is for." },
37
+
38
+ "props": {
39
+ "type": "array",
40
+ "items": {
41
+ "type": "object",
42
+ "required": ["name", "type", "required", "origin"],
43
+ "properties": {
44
+ "name": { "type": "string" },
45
+ "type": { "enum": ["string", "number", "boolean", "enum", "function", "other"] },
46
+ "values": { "type": "array", "items": { "type": "string" }, "description": "Present when type is enum." },
47
+ "signature": { "type": "string", "description": "Present when type is function." },
48
+ "typeText": { "type": "string", "description": "The TypeScript type as written." },
49
+ "required": { "type": "boolean" },
50
+ "default": { "description": "Derived from the component's destructuring default, when present." },
51
+ "origin": {
52
+ "enum": ["derived", "inherited", "manual", "local"],
53
+ "description": "derived = this project's source; inherited = a library type (React DOM) confirmed by the TypeChecker; manual/local = added by an overlay."
54
+ },
55
+ "description": { "type": "string" },
56
+ "descriptionOrigin": { "enum": ["jsdoc", "readme", "manual", "local"] },
57
+ "note": { "type": "string", "description": "Authored annotation from propNotes." },
58
+ "deprecated": { "type": ["boolean", "string"] }
59
+ },
60
+ "allOf": [
61
+ { "if": { "properties": { "type": { "const": "enum" } }, "required": ["type"] },
62
+ "then": { "required": ["values"] } },
63
+ { "if": { "required": ["description"] },
64
+ "then": { "required": ["descriptionOrigin"] } }
65
+ ]
66
+ }
67
+ },
68
+
69
+ "inherits": {
70
+ "type": "array",
71
+ "description": "External (library) base types. Deliberately NOT flattened: resolving ButtonHTMLAttributes yields hundreds of DOM props and buries the real API. A policy allowlist surfaces the useful ones inline with origin=inherited.",
72
+ "items": {
73
+ "type": "object",
74
+ "required": ["from"],
75
+ "additionalProperties": false,
76
+ "properties": {
77
+ "from": { "type": "string" },
78
+ "omitted": { "type": "array", "items": { "type": "string" } },
79
+ "passthrough": { "type": "boolean" }
80
+ }
81
+ }
82
+ },
83
+
84
+ "events": {
85
+ "type": "array",
86
+ "items": {
87
+ "type": "object",
88
+ "required": ["name"],
89
+ "additionalProperties": false,
90
+ "properties": {
91
+ "name": { "type": "string" },
92
+ "signature": { "type": "string" },
93
+ "description": { "type": "string" }
94
+ }
95
+ }
96
+ },
97
+
98
+ "slots": {
99
+ "type": "array",
100
+ "items": { "type": "string" },
101
+ "description": "classNames slot keys, in declaration order."
102
+ },
103
+
104
+ "states": {
105
+ "type": "array",
106
+ "items": {
107
+ "type": "object",
108
+ "required": ["attr"],
109
+ "additionalProperties": false,
110
+ "properties": {
111
+ "attr": { "type": "string", "pattern": "^data-" },
112
+ "values": { "type": "array", "items": { "type": "string" } }
113
+ }
114
+ }
115
+ },
116
+
117
+ "accessibility": {
118
+ "type": "object",
119
+ "description": "Authored. What the component supplies versus what the consumer must still provide.",
120
+ "additionalProperties": false,
121
+ "properties": {
122
+ "supplied": { "type": "array", "items": { "type": "string" } },
123
+ "required": { "type": "array", "items": { "type": "string" } }
124
+ }
125
+ },
126
+
127
+ "composition": {
128
+ "type": "object",
129
+ "description": "Authored. Structural rules a generator or agent must respect.",
130
+ "properties": {
131
+ "requiresAncestor": { "type": ["string", "null"] },
132
+ "allowedChildren": { "type": "array", "items": { "type": "string" } },
133
+ "mustNotContain": { "type": "array", "items": { "type": "string" } },
134
+ "notes": { "type": "string" }
135
+ }
136
+ },
137
+
138
+ "operations": {
139
+ "type": "object",
140
+ "description": "Authoritative, validator-compatible. Only declared where the component genuinely exposes a deterministic operation surface. An operation is never claimed because an AI use case sounds plausible.",
141
+ "additionalProperties": {
142
+ "type": "object",
143
+ "required": ["summary", "apiMethod"],
144
+ "properties": {
145
+ "summary": { "type": "string" },
146
+ "apiMethod": { "type": "string", "description": "Method on the component's imperative API." },
147
+ "input": { "type": "object", "description": "JSON Schema fragment for the operation's arguments." },
148
+ "effects": { "type": "array", "items": { "type": "string" } },
149
+ "reversible": { "type": "boolean" },
150
+ "requiresConfirmation": { "type": "boolean" }
151
+ }
152
+ }
153
+ },
154
+
155
+ "intentDomains": {
156
+ "type": "array",
157
+ "description": "Advisory routing hints only. Never a substitute for operations, and carrying no execution semantics.",
158
+ "items": {
159
+ "enum": ["Query", "Extraction", "TemporalInterpretation", "ActionIntent", "Summarization", "Classification", "Recommendation"]
160
+ }
161
+ },
162
+
163
+ "safeMutations": {
164
+ "type": "object",
165
+ "description": "Authored. Which props an agent may change without altering behaviour.",
166
+ "additionalProperties": false,
167
+ "properties": {
168
+ "allowed": { "type": "array", "items": { "type": "string" } },
169
+ "forbidden": { "type": "array", "items": { "type": "string" } },
170
+ "rationale": { "type": "string" }
171
+ }
172
+ },
173
+
174
+ "examples": {
175
+ "type": "array",
176
+ "items": {
177
+ "oneOf": [
178
+ { "type": "string" },
179
+ {
180
+ "type": "object",
181
+ "required": ["title", "file"],
182
+ "properties": {
183
+ "title": { "type": "string" },
184
+ "file": { "type": "string" },
185
+ "description": { "type": "string" }
186
+ }
187
+ }
188
+ ]
189
+ }
190
+ },
191
+
192
+ "coverage": {
193
+ "type": "object",
194
+ "required": ["propsTotal", "propsDescribed", "describedPct"],
195
+ "additionalProperties": false,
196
+ "properties": {
197
+ "propsTotal": { "type": "integer", "minimum": 0 },
198
+ "propsDescribed": { "type": "integer", "minimum": 0 },
199
+ "describedPct": { "type": "integer", "minimum": 0, "maximum": 100 },
200
+ "authoredSections": { "type": "array", "items": { "type": "string" } }
201
+ }
202
+ }
203
+ }
204
+ }
@@ -0,0 +1,259 @@
1
+ {
2
+ "passportVersion": "1.0.0",
3
+ "identity": {
4
+ "component": "Accordion",
5
+ "folder": "accordion",
6
+ "exports": [
7
+ "Accordion",
8
+ "AccordionContext",
9
+ "AccordionItem"
10
+ ]
11
+ },
12
+ "source": {
13
+ "libraryVersion": "2.3.0",
14
+ "files": [
15
+ "core/index.ts",
16
+ "core/open.ts",
17
+ "core/types.ts",
18
+ "index.ts",
19
+ "react/Accordion.tsx",
20
+ "react/AccordionItem.tsx",
21
+ "react/context.ts",
22
+ "react/props.ts"
23
+ ],
24
+ "sourceHash": "sha256:ae02f988d3538cf6f78b9f3729cebe38b371f0a929f3c5570edcd543d3769d82"
25
+ },
26
+ "props": [
27
+ {
28
+ "name": "children",
29
+ "type": "other",
30
+ "typeText": "ReactNode",
31
+ "required": false,
32
+ "origin": "derived"
33
+ },
34
+ {
35
+ "name": "className",
36
+ "type": "string",
37
+ "typeText": "string | undefined",
38
+ "required": false,
39
+ "origin": "derived"
40
+ },
41
+ {
42
+ "name": "classNames",
43
+ "type": "other",
44
+ "typeText": "Partial<Record<'root', string>> | undefined",
45
+ "required": false,
46
+ "origin": "derived"
47
+ },
48
+ {
49
+ "name": "collapsible",
50
+ "type": "boolean",
51
+ "typeText": "boolean | undefined",
52
+ "required": false,
53
+ "default": true,
54
+ "origin": "derived",
55
+ "description": "Allow the open panel to be closed again. Default true.",
56
+ "descriptionOrigin": "jsdoc"
57
+ },
58
+ {
59
+ "name": "defaultValue",
60
+ "type": "other",
61
+ "typeText": "string[] | undefined",
62
+ "required": false,
63
+ "origin": "derived"
64
+ },
65
+ {
66
+ "name": "description",
67
+ "type": "other",
68
+ "typeText": "ReactNode",
69
+ "required": false,
70
+ "origin": "derived",
71
+ "description": "A second line under the title.",
72
+ "descriptionOrigin": "jsdoc"
73
+ },
74
+ {
75
+ "name": "disabled",
76
+ "type": "boolean",
77
+ "typeText": "boolean | undefined",
78
+ "required": false,
79
+ "default": false,
80
+ "origin": "derived"
81
+ },
82
+ {
83
+ "name": "icon",
84
+ "type": "other",
85
+ "typeText": "ReactNode",
86
+ "required": false,
87
+ "origin": "derived",
88
+ "description": "Replaces the chevron.",
89
+ "descriptionOrigin": "jsdoc"
90
+ },
91
+ {
92
+ "name": "iconPosition",
93
+ "type": "enum",
94
+ "values": [
95
+ "end",
96
+ "start"
97
+ ],
98
+ "typeText": "AccordionIconPosition | undefined",
99
+ "required": false,
100
+ "default": "end",
101
+ "origin": "derived",
102
+ "description": "Which side the chevron sits on. Default `end`.",
103
+ "descriptionOrigin": "jsdoc"
104
+ },
105
+ {
106
+ "name": "items",
107
+ "type": "other",
108
+ "typeText": "readonly AccordionItemData[] | undefined",
109
+ "required": false,
110
+ "origin": "derived",
111
+ "description": "Render these panels, or pass `<AccordionItem>` children.",
112
+ "descriptionOrigin": "jsdoc"
113
+ },
114
+ {
115
+ "name": "meta",
116
+ "type": "other",
117
+ "typeText": "ReactNode",
118
+ "required": false,
119
+ "origin": "derived",
120
+ "description": "Something at the end of the header: a badge, a count.",
121
+ "descriptionOrigin": "jsdoc"
122
+ },
123
+ {
124
+ "name": "multiple",
125
+ "type": "boolean",
126
+ "typeText": "boolean | undefined",
127
+ "required": false,
128
+ "default": false,
129
+ "origin": "derived",
130
+ "description": "Allow more than one panel open at a time. Default false.",
131
+ "descriptionOrigin": "jsdoc"
132
+ },
133
+ {
134
+ "name": "onValueChange",
135
+ "type": "function",
136
+ "signature": "((value: string[]) => void) | undefined",
137
+ "required": false,
138
+ "origin": "derived"
139
+ },
140
+ {
141
+ "name": "ref",
142
+ "type": "other",
143
+ "typeText": "Ref<HTMLDivElement> | undefined",
144
+ "required": false,
145
+ "origin": "derived"
146
+ },
147
+ {
148
+ "name": "size",
149
+ "type": "enum",
150
+ "values": [
151
+ "lg",
152
+ "md",
153
+ "sm"
154
+ ],
155
+ "typeText": "AccordionSize | undefined",
156
+ "required": false,
157
+ "default": "md",
158
+ "origin": "derived",
159
+ "description": "Default `md`.",
160
+ "descriptionOrigin": "jsdoc"
161
+ },
162
+ {
163
+ "name": "style",
164
+ "type": "other",
165
+ "typeText": "CSSProperties | undefined",
166
+ "required": false,
167
+ "origin": "derived"
168
+ },
169
+ {
170
+ "name": "title",
171
+ "type": "other",
172
+ "typeText": "ReactNode",
173
+ "required": true,
174
+ "origin": "derived"
175
+ },
176
+ {
177
+ "name": "value",
178
+ "type": "other",
179
+ "typeText": "string[] | undefined",
180
+ "required": false,
181
+ "origin": "derived",
182
+ "description": "Open panels, by value (controlled).",
183
+ "descriptionOrigin": "jsdoc"
184
+ },
185
+ {
186
+ "name": "variant",
187
+ "type": "enum",
188
+ "values": [
189
+ "contained",
190
+ "plain",
191
+ "separated"
192
+ ],
193
+ "typeText": "AccordionVariant | undefined",
194
+ "required": false,
195
+ "default": "separated",
196
+ "origin": "derived",
197
+ "description": "Default `separated`.",
198
+ "descriptionOrigin": "jsdoc"
199
+ }
200
+ ],
201
+ "events": [
202
+ {
203
+ "name": "onValueChange",
204
+ "signature": "((value: string[]) => void) | undefined"
205
+ }
206
+ ],
207
+ "slots": [
208
+ "root",
209
+ "header",
210
+ "title",
211
+ "description",
212
+ "icon",
213
+ "content",
214
+ "body"
215
+ ],
216
+ "states": [
217
+ {
218
+ "attr": "data-disabled"
219
+ },
220
+ {
221
+ "attr": "data-size",
222
+ "values": [
223
+ "lg",
224
+ "sm"
225
+ ]
226
+ },
227
+ {
228
+ "attr": "data-theme",
229
+ "values": [
230
+ "dark",
231
+ "light"
232
+ ]
233
+ },
234
+ {
235
+ "attr": "data-variant",
236
+ "values": [
237
+ "contained",
238
+ "plain"
239
+ ]
240
+ }
241
+ ],
242
+ "accessibility": {
243
+ "supplied": [],
244
+ "required": []
245
+ },
246
+ "composition": {},
247
+ "operations": {},
248
+ "intentDomains": [],
249
+ "safeMutations": {},
250
+ "examples": [],
251
+ "coverage": {
252
+ "propsTotal": 19,
253
+ "propsDescribed": 10,
254
+ "describedPct": 53,
255
+ "authoredSections": [
256
+ "accessibility"
257
+ ]
258
+ }
259
+ }