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,541 @@
1
+ {
2
+ "passportVersion": "1.0.0",
3
+ "identity": {
4
+ "component": "NumberInput",
5
+ "folder": "number-input",
6
+ "exports": [
7
+ "NumberInput"
8
+ ]
9
+ },
10
+ "source": {
11
+ "libraryVersion": "2.3.0",
12
+ "files": [
13
+ "core/format.ts",
14
+ "core/index.ts",
15
+ "core/parse.ts",
16
+ "core/step.ts",
17
+ "core/types.ts",
18
+ "index.ts",
19
+ "react/NumberInput.tsx",
20
+ "react/icons.tsx",
21
+ "react/locale.ts",
22
+ "react/props.ts"
23
+ ],
24
+ "sourceHash": "sha256:a00bae0ab24d883ed833a923f6c867eea8642b3fca4bf838b4fbc47ae688a540"
25
+ },
26
+ "props": [
27
+ {
28
+ "name": "aria-describedby",
29
+ "type": "string",
30
+ "typeText": "string | undefined",
31
+ "required": false,
32
+ "origin": "inherited"
33
+ },
34
+ {
35
+ "name": "aria-label",
36
+ "type": "string",
37
+ "typeText": "string | undefined",
38
+ "required": false,
39
+ "origin": "inherited"
40
+ },
41
+ {
42
+ "name": "aria-labelledby",
43
+ "type": "string",
44
+ "typeText": "string | undefined",
45
+ "required": false,
46
+ "origin": "inherited"
47
+ },
48
+ {
49
+ "name": "autoComplete",
50
+ "type": "other",
51
+ "typeText": "HTMLInputAutoCompleteAttribute | undefined",
52
+ "required": false,
53
+ "origin": "inherited"
54
+ },
55
+ {
56
+ "name": "autoFocus",
57
+ "type": "boolean",
58
+ "typeText": "boolean | undefined",
59
+ "required": false,
60
+ "origin": "inherited"
61
+ },
62
+ {
63
+ "name": "checked",
64
+ "type": "boolean",
65
+ "typeText": "boolean | undefined",
66
+ "required": false,
67
+ "origin": "inherited"
68
+ },
69
+ {
70
+ "name": "clampBehavior",
71
+ "type": "enum",
72
+ "values": [
73
+ "blur",
74
+ "none",
75
+ "strict"
76
+ ],
77
+ "typeText": "ClampBehavior | undefined",
78
+ "required": false,
79
+ "default": "blur",
80
+ "origin": "derived",
81
+ "description": "When a value outside the limits is pulled back. Default `blur`.",
82
+ "descriptionOrigin": "jsdoc"
83
+ },
84
+ {
85
+ "name": "className",
86
+ "type": "string",
87
+ "typeText": "string | undefined",
88
+ "required": false,
89
+ "origin": "inherited"
90
+ },
91
+ {
92
+ "name": "classNames",
93
+ "type": "other",
94
+ "typeText": "Partial<Record<NumberInputSlot, string>> | undefined",
95
+ "required": false,
96
+ "origin": "derived"
97
+ },
98
+ {
99
+ "name": "clearable",
100
+ "type": "boolean",
101
+ "typeText": "boolean | undefined",
102
+ "required": false,
103
+ "default": false,
104
+ "origin": "derived",
105
+ "description": "A button that empties the field.",
106
+ "descriptionOrigin": "jsdoc"
107
+ },
108
+ {
109
+ "name": "currency",
110
+ "type": "string",
111
+ "typeText": "string | undefined",
112
+ "required": false,
113
+ "origin": "derived",
114
+ "description": "ISO 4217 code, for `format=\"currency\"`.",
115
+ "descriptionOrigin": "jsdoc"
116
+ },
117
+ {
118
+ "name": "decimals",
119
+ "type": "number",
120
+ "typeText": "number | undefined",
121
+ "required": false,
122
+ "origin": "derived",
123
+ "description": "Fraction digits to show, and to round to. Left out, the number is shown as it is.",
124
+ "descriptionOrigin": "jsdoc"
125
+ },
126
+ {
127
+ "name": "defaultChecked",
128
+ "type": "boolean",
129
+ "typeText": "boolean | undefined",
130
+ "required": false,
131
+ "origin": "inherited"
132
+ },
133
+ {
134
+ "name": "defaultValue",
135
+ "type": "number",
136
+ "typeText": "number | null | undefined",
137
+ "required": false,
138
+ "default": null,
139
+ "origin": "derived"
140
+ },
141
+ {
142
+ "name": "description",
143
+ "type": "other",
144
+ "typeText": "ReactNode",
145
+ "required": false,
146
+ "origin": "derived"
147
+ },
148
+ {
149
+ "name": "disabled",
150
+ "type": "boolean",
151
+ "typeText": "boolean | undefined",
152
+ "required": false,
153
+ "origin": "inherited"
154
+ },
155
+ {
156
+ "name": "error",
157
+ "type": "other",
158
+ "typeText": "ReactNode",
159
+ "required": false,
160
+ "origin": "derived"
161
+ },
162
+ {
163
+ "name": "form",
164
+ "type": "string",
165
+ "typeText": "string | undefined",
166
+ "required": false,
167
+ "origin": "inherited"
168
+ },
169
+ {
170
+ "name": "format",
171
+ "type": "enum",
172
+ "values": [
173
+ "currency",
174
+ "decimal",
175
+ "percent"
176
+ ],
177
+ "typeText": "NumberStyle | undefined",
178
+ "required": false,
179
+ "default": "decimal",
180
+ "origin": "derived",
181
+ "description": "Default `decimal`. `percent` shows 0.45 as 45%, as `Intl` does.",
182
+ "descriptionOrigin": "jsdoc"
183
+ },
184
+ {
185
+ "name": "hidden",
186
+ "type": "boolean",
187
+ "typeText": "boolean | undefined",
188
+ "required": false,
189
+ "origin": "inherited"
190
+ },
191
+ {
192
+ "name": "id",
193
+ "type": "string",
194
+ "typeText": "string | undefined",
195
+ "required": false,
196
+ "origin": "inherited"
197
+ },
198
+ {
199
+ "name": "inputMode",
200
+ "type": "enum",
201
+ "values": [
202
+ "decimal",
203
+ "email",
204
+ "none",
205
+ "numeric",
206
+ "search",
207
+ "tel",
208
+ "text",
209
+ "url"
210
+ ],
211
+ "typeText": "'none' | 'search' | 'email' | 'tel' | 'text' | 'url' | 'numeric' | 'decimal' | undefined",
212
+ "required": false,
213
+ "origin": "inherited"
214
+ },
215
+ {
216
+ "name": "label",
217
+ "type": "other",
218
+ "typeText": "ReactNode",
219
+ "required": false,
220
+ "origin": "derived"
221
+ },
222
+ {
223
+ "name": "largeStep",
224
+ "type": "number",
225
+ "typeText": "number | undefined",
226
+ "required": false,
227
+ "default": "step * 10",
228
+ "origin": "derived",
229
+ "description": "Step with **Page Up** / **Page Down**. Default ten steps.",
230
+ "descriptionOrigin": "jsdoc"
231
+ },
232
+ {
233
+ "name": "leading",
234
+ "type": "other",
235
+ "typeText": "ReactNode",
236
+ "required": false,
237
+ "origin": "derived",
238
+ "description": "Before the number: a currency symbol, a unit.",
239
+ "descriptionOrigin": "jsdoc"
240
+ },
241
+ {
242
+ "name": "locale",
243
+ "type": "string",
244
+ "typeText": "string | undefined",
245
+ "required": false,
246
+ "origin": "derived",
247
+ "description": "BCP 47 tag deciding the separators and digits, for both reading and showing.",
248
+ "descriptionOrigin": "jsdoc"
249
+ },
250
+ {
251
+ "name": "localeText",
252
+ "type": "other",
253
+ "typeText": "Partial<NumberInputLocaleText> | undefined",
254
+ "required": false,
255
+ "origin": "derived"
256
+ },
257
+ {
258
+ "name": "max",
259
+ "type": "number",
260
+ "typeText": "number | undefined",
261
+ "required": false,
262
+ "origin": "derived"
263
+ },
264
+ {
265
+ "name": "maxLength",
266
+ "type": "number",
267
+ "typeText": "number | undefined",
268
+ "required": false,
269
+ "origin": "inherited"
270
+ },
271
+ {
272
+ "name": "min",
273
+ "type": "number",
274
+ "typeText": "number | undefined",
275
+ "required": false,
276
+ "origin": "derived"
277
+ },
278
+ {
279
+ "name": "minLength",
280
+ "type": "number",
281
+ "typeText": "number | undefined",
282
+ "required": false,
283
+ "origin": "inherited"
284
+ },
285
+ {
286
+ "name": "name",
287
+ "type": "string",
288
+ "typeText": "string | undefined",
289
+ "required": false,
290
+ "origin": "inherited"
291
+ },
292
+ {
293
+ "name": "onValueChange",
294
+ "type": "function",
295
+ "signature": "((value: number | null) => void) | undefined",
296
+ "required": false,
297
+ "origin": "derived",
298
+ "description": "Fires with the parsed number, or `null` when the field is emptied.",
299
+ "descriptionOrigin": "jsdoc"
300
+ },
301
+ {
302
+ "name": "pattern",
303
+ "type": "string",
304
+ "typeText": "string | undefined",
305
+ "required": false,
306
+ "origin": "inherited"
307
+ },
308
+ {
309
+ "name": "placeholder",
310
+ "type": "string",
311
+ "typeText": "string | undefined",
312
+ "required": false,
313
+ "origin": "inherited"
314
+ },
315
+ {
316
+ "name": "readOnly",
317
+ "type": "boolean",
318
+ "typeText": "boolean | undefined",
319
+ "required": false,
320
+ "origin": "inherited"
321
+ },
322
+ {
323
+ "name": "ref",
324
+ "type": "other",
325
+ "typeText": "Ref<HTMLInputElement> | undefined",
326
+ "required": false,
327
+ "origin": "derived",
328
+ "description": "The `<input>` element.",
329
+ "descriptionOrigin": "jsdoc"
330
+ },
331
+ {
332
+ "name": "required",
333
+ "type": "boolean",
334
+ "typeText": "boolean | undefined",
335
+ "required": false,
336
+ "origin": "inherited"
337
+ },
338
+ {
339
+ "name": "selectOnFocus",
340
+ "type": "boolean",
341
+ "typeText": "boolean | undefined",
342
+ "required": false,
343
+ "default": false,
344
+ "origin": "derived",
345
+ "description": "Select the whole number when the field is focused, so typing replaces it.",
346
+ "descriptionOrigin": "jsdoc"
347
+ },
348
+ {
349
+ "name": "size",
350
+ "type": "enum",
351
+ "values": [
352
+ "lg",
353
+ "md",
354
+ "sm"
355
+ ],
356
+ "typeText": "NumberSize | undefined",
357
+ "required": false,
358
+ "default": "md",
359
+ "origin": "derived"
360
+ },
361
+ {
362
+ "name": "snapToStep",
363
+ "type": "boolean",
364
+ "typeText": "boolean | undefined",
365
+ "required": false,
366
+ "origin": "derived",
367
+ "description": "Round every committed value onto the step grid, counting from `min`.",
368
+ "descriptionOrigin": "jsdoc"
369
+ },
370
+ {
371
+ "name": "step",
372
+ "type": "number",
373
+ "typeText": "number | undefined",
374
+ "required": false,
375
+ "default": 1,
376
+ "origin": "derived",
377
+ "description": "How much one arrow press or stepper button moves. Default 1.",
378
+ "descriptionOrigin": "jsdoc"
379
+ },
380
+ {
381
+ "name": "stepper",
382
+ "type": "boolean",
383
+ "typeText": "boolean | undefined",
384
+ "required": false,
385
+ "default": true,
386
+ "origin": "derived",
387
+ "description": "The up and down buttons. Default true.",
388
+ "descriptionOrigin": "jsdoc"
389
+ },
390
+ {
391
+ "name": "style",
392
+ "type": "other",
393
+ "typeText": "CSSProperties | undefined",
394
+ "required": false,
395
+ "origin": "inherited"
396
+ },
397
+ {
398
+ "name": "tabIndex",
399
+ "type": "number",
400
+ "typeText": "number | undefined",
401
+ "required": false,
402
+ "origin": "inherited"
403
+ },
404
+ {
405
+ "name": "title",
406
+ "type": "string",
407
+ "typeText": "string | undefined",
408
+ "required": false,
409
+ "origin": "inherited"
410
+ },
411
+ {
412
+ "name": "trailing",
413
+ "type": "other",
414
+ "typeText": "ReactNode",
415
+ "required": false,
416
+ "origin": "derived",
417
+ "description": "After the number: a unit, a suffix.",
418
+ "descriptionOrigin": "jsdoc"
419
+ },
420
+ {
421
+ "name": "useGrouping",
422
+ "type": "boolean",
423
+ "typeText": "boolean | undefined",
424
+ "required": false,
425
+ "default": true,
426
+ "origin": "derived",
427
+ "description": "Thousands separators while the field is not being edited. Default true.",
428
+ "descriptionOrigin": "jsdoc"
429
+ },
430
+ {
431
+ "name": "value",
432
+ "type": "number",
433
+ "typeText": "number | null | undefined",
434
+ "required": false,
435
+ "origin": "derived",
436
+ "description": "The number, or `null` for an empty field (controlled).",
437
+ "descriptionOrigin": "jsdoc"
438
+ },
439
+ {
440
+ "name": "wheel",
441
+ "type": "boolean",
442
+ "typeText": "boolean | undefined",
443
+ "required": false,
444
+ "default": false,
445
+ "origin": "derived",
446
+ "description": "Let the wheel change the value while the field has focus. Default **false**:\r\na wheel that edits a focused field turns an ordinary page scroll into a\r\nsilent change to someone's data.",
447
+ "descriptionOrigin": "jsdoc"
448
+ }
449
+ ],
450
+ "inherits": [
451
+ {
452
+ "from": "InputHTMLAttributes<HTMLInputElement>",
453
+ "omitted": [
454
+ "defaultValue",
455
+ "max",
456
+ "min",
457
+ "onChange",
458
+ "role",
459
+ "size",
460
+ "step",
461
+ "type",
462
+ "value"
463
+ ],
464
+ "passthrough": true
465
+ }
466
+ ],
467
+ "events": [
468
+ {
469
+ "name": "onValueChange",
470
+ "signature": "((value: number | null) => void) | undefined"
471
+ }
472
+ ],
473
+ "slots": [
474
+ "root",
475
+ "label",
476
+ "control",
477
+ "input",
478
+ "stepper",
479
+ "description",
480
+ "error"
481
+ ],
482
+ "states": [
483
+ {
484
+ "attr": "data-direction",
485
+ "values": [
486
+ "down",
487
+ "up"
488
+ ]
489
+ },
490
+ {
491
+ "attr": "data-disabled"
492
+ },
493
+ {
494
+ "attr": "data-invalid"
495
+ },
496
+ {
497
+ "attr": "data-readonly"
498
+ },
499
+ {
500
+ "attr": "data-required"
501
+ },
502
+ {
503
+ "attr": "data-side",
504
+ "values": [
505
+ "leading",
506
+ "trailing"
507
+ ]
508
+ },
509
+ {
510
+ "attr": "data-size",
511
+ "values": [
512
+ "lg",
513
+ "sm"
514
+ ]
515
+ },
516
+ {
517
+ "attr": "data-theme",
518
+ "values": [
519
+ "dark",
520
+ "light"
521
+ ]
522
+ }
523
+ ],
524
+ "accessibility": {
525
+ "supplied": [],
526
+ "required": []
527
+ },
528
+ "composition": {},
529
+ "operations": {},
530
+ "intentDomains": [],
531
+ "safeMutations": {},
532
+ "examples": [],
533
+ "coverage": {
534
+ "propsTotal": 50,
535
+ "propsDescribed": 18,
536
+ "describedPct": 36,
537
+ "authoredSections": [
538
+ "accessibility"
539
+ ]
540
+ }
541
+ }