gbs-add-block 2.0.4 → 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 -201
  4. package/CHANGELOG.md +74 -0
  5. package/README.md +157 -11
  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 +201 -203
  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 -139
  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 -233
  22. package/source/beta-components/card/passport.json +337 -0
  23. package/source/beta-components/card/styles.css +230 -231
  24. package/source/beta-components/checkbox/passport.json +456 -0
  25. package/source/beta-components/checkbox/styles.css +211 -212
  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 -717
  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 -278
  48. package/source/beta-components/file-uploader/passport.json +518 -0
  49. package/source/beta-components/file-uploader/styles.css +394 -395
  50. package/source/beta-components/input/passport.json +536 -0
  51. package/source/beta-components/input/styles.css +295 -296
  52. package/source/beta-components/menu/passport.json +322 -0
  53. package/source/beta-components/menu/styles.css +224 -222
  54. package/source/beta-components/modal/passport.json +289 -0
  55. package/source/beta-components/modal/styles.css +241 -239
  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 -146
  60. package/source/beta-components/progress/passport.json +270 -0
  61. package/source/beta-components/progress/styles.css +200 -202
  62. package/source/beta-components/radio-group/passport.json +477 -0
  63. package/source/beta-components/radio-group/styles.css +241 -242
  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 -186
  79. package/source/beta-components/spinner/passport.json +245 -0
  80. package/source/beta-components/spinner/styles.css +145 -146
  81. package/source/beta-components/switch/passport.json +421 -0
  82. package/source/beta-components/switch/styles.css +194 -196
  83. package/source/beta-components/tabs/passport.json +315 -0
  84. package/source/beta-components/tabs/styles.css +234 -235
  85. package/source/beta-components/textarea/passport.json +382 -0
  86. package/source/beta-components/textarea/styles.css +158 -159
  87. package/source/beta-components/toaster/passport.json +221 -0
  88. package/source/beta-components/toaster/styles.css +282 -283
  89. package/source/beta-components/tooltip/passport.json +170 -0
  90. package/source/beta-components/tooltip/styles.css +71 -72
  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
+ }