@aceshooting/lyra-ui 2.9.0 → 2.11.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 (59) hide show
  1. package/README.md +3 -1
  2. package/custom-elements.json +1302 -56
  3. package/dist/components/button/button.class.d.ts +57 -0
  4. package/dist/components/button/button.class.d.ts.map +1 -0
  5. package/dist/components/button/button.class.js +108 -0
  6. package/dist/components/button/button.class.js.map +1 -0
  7. package/dist/components/button/button.d.ts +2 -0
  8. package/dist/components/button/button.d.ts.map +1 -0
  9. package/dist/components/button/button.js +5 -0
  10. package/dist/components/button/button.js.map +1 -0
  11. package/dist/components/button/button.styles.d.ts +2 -0
  12. package/dist/components/button/button.styles.d.ts.map +1 -0
  13. package/dist/components/button/button.styles.js +121 -0
  14. package/dist/components/button/button.styles.js.map +1 -0
  15. package/dist/components/heatmap/heatmap.class.d.ts +29 -0
  16. package/dist/components/heatmap/heatmap.class.d.ts.map +1 -1
  17. package/dist/components/heatmap/heatmap.class.js +97 -5
  18. package/dist/components/heatmap/heatmap.class.js.map +1 -1
  19. package/dist/components/heatmap/heatmap.styles.d.ts.map +1 -1
  20. package/dist/components/heatmap/heatmap.styles.js +6 -0
  21. package/dist/components/heatmap/heatmap.styles.js.map +1 -1
  22. package/dist/components/input/input.class.d.ts +113 -0
  23. package/dist/components/input/input.class.d.ts.map +1 -0
  24. package/dist/components/input/input.class.js +275 -0
  25. package/dist/components/input/input.class.js.map +1 -0
  26. package/dist/components/input/input.d.ts +2 -0
  27. package/dist/components/input/input.d.ts.map +1 -0
  28. package/dist/components/input/input.js +5 -0
  29. package/dist/components/input/input.js.map +1 -0
  30. package/dist/components/input/input.styles.d.ts +2 -0
  31. package/dist/components/input/input.styles.d.ts.map +1 -0
  32. package/dist/components/input/input.styles.js +111 -0
  33. package/dist/components/input/input.styles.js.map +1 -0
  34. package/dist/components/tool-result-view/tool-result-view.class.d.ts +13 -5
  35. package/dist/components/tool-result-view/tool-result-view.class.d.ts.map +1 -1
  36. package/dist/components/tool-result-view/tool-result-view.class.js +26 -7
  37. package/dist/components/tool-result-view/tool-result-view.class.js.map +1 -1
  38. package/dist/components/tool-result-view/tool-result-view.styles.d.ts.map +1 -1
  39. package/dist/components/tool-result-view/tool-result-view.styles.js +11 -0
  40. package/dist/components/tool-result-view/tool-result-view.styles.js.map +1 -1
  41. package/dist/internal/icons.d.ts +6 -0
  42. package/dist/internal/icons.d.ts.map +1 -1
  43. package/dist/internal/icons.js +20 -0
  44. package/dist/internal/icons.js.map +1 -1
  45. package/dist/internal/localization.d.ts +1 -1
  46. package/dist/internal/localization.d.ts.map +1 -1
  47. package/dist/internal/localization.js +5 -0
  48. package/dist/internal/localization.js.map +1 -1
  49. package/dist/internal/root-registration-allowlist.d.ts +1 -1
  50. package/dist/internal/root-registration-allowlist.d.ts.map +1 -1
  51. package/dist/internal/root-registration-allowlist.js +2 -0
  52. package/dist/internal/root-registration-allowlist.js.map +1 -1
  53. package/dist/lyra.d.ts +7 -0
  54. package/dist/lyra.d.ts.map +1 -1
  55. package/dist/lyra.js +4 -0
  56. package/dist/lyra.js.map +1 -1
  57. package/llms-full.txt +141 -9
  58. package/llms.txt +1 -1
  59. package/package.json +7 -2
@@ -3139,6 +3139,472 @@
3139
3139
  }
3140
3140
  ]
3141
3141
  },
3142
+ {
3143
+ "kind": "javascript-module",
3144
+ "path": "src/components/button/button.class.ts",
3145
+ "declarations": [
3146
+ {
3147
+ "kind": "class",
3148
+ "description": "`<lyra-button>` — a generic action-button primitive, the `lyra-*` equivalent of a plain\n`wa-button`. Renders an internal native `<button part=\"base\">` (never a real `<wa-button>` —\nthis library has no runtime dependency on Web Awesome, matching `<lyra-copy-button>`/\n`<lyra-export-button>`'s own clean-room, API-mirroring approach). `type=\"submit\"`/`type=\"reset\"`\nare handled by this component itself via the host's own `closest('form')` — a shadow-internal\nnative `<button type=\"submit\">` does not participate in an ancestor light-DOM form's submission\non its own, since form-submitter semantics don't cross the shadow boundary.\n\nA host `aria-label` is forwarded to the internal button as a literal string (for an icon-only\nbutton with no visible label); external `aria-labelledby`/`aria-describedby` idrefs are not\ncopied across the shadow boundary.",
3149
+ "name": "LyraButton",
3150
+ "cssParts": [
3151
+ {
3152
+ "description": "The internal native `<button>`.",
3153
+ "name": "base"
3154
+ },
3155
+ {
3156
+ "description": "The `end` slot wrapper.",
3157
+ "name": "end"
3158
+ },
3159
+ {
3160
+ "description": "The default-slot label wrapper.",
3161
+ "name": "label"
3162
+ },
3163
+ {
3164
+ "description": "The loading spinner, present only while `loading` is `true`.",
3165
+ "name": "spinner"
3166
+ },
3167
+ {
3168
+ "description": "The `start` slot wrapper.",
3169
+ "name": "start"
3170
+ }
3171
+ ],
3172
+ "slots": [
3173
+ {
3174
+ "description": "Default slot: the button's label content.",
3175
+ "name": ""
3176
+ },
3177
+ {
3178
+ "description": "Trailing icon/content, rendered after the label.",
3179
+ "name": "end"
3180
+ },
3181
+ {
3182
+ "description": "Leading icon/content, rendered before the label.",
3183
+ "name": "start"
3184
+ }
3185
+ ],
3186
+ "members": [
3187
+ {
3188
+ "kind": "field",
3189
+ "name": "appearance",
3190
+ "type": {
3191
+ "text": "ButtonAppearance"
3192
+ },
3193
+ "default": "'filled'",
3194
+ "attribute": "appearance",
3195
+ "reflects": true
3196
+ },
3197
+ {
3198
+ "kind": "field",
3199
+ "name": "buttonEl",
3200
+ "type": {
3201
+ "text": "HTMLButtonElement | undefined"
3202
+ },
3203
+ "privacy": "private"
3204
+ },
3205
+ {
3206
+ "kind": "field",
3207
+ "name": "disabled",
3208
+ "type": {
3209
+ "text": "boolean"
3210
+ },
3211
+ "default": "false",
3212
+ "attribute": "disabled",
3213
+ "reflects": true
3214
+ },
3215
+ {
3216
+ "kind": "field",
3217
+ "name": "effectiveDirection",
3218
+ "type": {
3219
+ "text": "'ltr' | 'rtl'"
3220
+ },
3221
+ "privacy": "protected",
3222
+ "description": "The effective text direction, including inherited CSS direction.",
3223
+ "readonly": true,
3224
+ "inheritedFrom": {
3225
+ "name": "LyraElement",
3226
+ "module": "src/internal/lyra-element.ts"
3227
+ }
3228
+ },
3229
+ {
3230
+ "kind": "field",
3231
+ "name": "effectiveLocale",
3232
+ "type": {
3233
+ "text": "string"
3234
+ },
3235
+ "privacy": "protected",
3236
+ "description": "The effective locale used by this component.",
3237
+ "readonly": true,
3238
+ "inheritedFrom": {
3239
+ "name": "LyraElement",
3240
+ "module": "src/internal/lyra-element.ts"
3241
+ }
3242
+ },
3243
+ {
3244
+ "kind": "field",
3245
+ "name": "loading",
3246
+ "type": {
3247
+ "text": "boolean"
3248
+ },
3249
+ "default": "false",
3250
+ "description": "Shows an internal spinner in place of interaction affordance and disables the button, without\nclearing `disabled` — a consumer's own `disabled` state and a transient `loading` state are\nindependent (mirrors `<lyra-export-button>`'s own `loading`/`disabled` pair).",
3251
+ "attribute": "loading",
3252
+ "reflects": true
3253
+ },
3254
+ {
3255
+ "kind": "field",
3256
+ "name": "locale",
3257
+ "type": {
3258
+ "text": "string"
3259
+ },
3260
+ "default": "''",
3261
+ "description": "Optional locale override. Otherwise the nearest `locale`/`lang` ancestor is used.",
3262
+ "attribute": "locale",
3263
+ "reflects": true,
3264
+ "inheritedFrom": {
3265
+ "name": "LyraElement",
3266
+ "module": "src/internal/lyra-element.ts"
3267
+ }
3268
+ },
3269
+ {
3270
+ "kind": "field",
3271
+ "name": "onClick",
3272
+ "privacy": "private"
3273
+ },
3274
+ {
3275
+ "kind": "field",
3276
+ "name": "size",
3277
+ "type": {
3278
+ "text": "ButtonSize"
3279
+ },
3280
+ "default": "'m'",
3281
+ "attribute": "size",
3282
+ "reflects": true
3283
+ },
3284
+ {
3285
+ "kind": "field",
3286
+ "name": "stopLocaleSubscription",
3287
+ "type": {
3288
+ "text": "() => void | undefined"
3289
+ },
3290
+ "privacy": "private",
3291
+ "inheritedFrom": {
3292
+ "name": "LyraElement",
3293
+ "module": "src/internal/lyra-element.ts"
3294
+ }
3295
+ },
3296
+ {
3297
+ "kind": "field",
3298
+ "name": "strings",
3299
+ "type": {
3300
+ "text": "LyraLocaleStrings"
3301
+ },
3302
+ "default": "{}",
3303
+ "description": "Per-instance message overrides, useful for application-specific wording.",
3304
+ "inheritedFrom": {
3305
+ "name": "LyraElement",
3306
+ "module": "src/internal/lyra-element.ts"
3307
+ }
3308
+ },
3309
+ {
3310
+ "kind": "field",
3311
+ "name": "type",
3312
+ "type": {
3313
+ "text": "ButtonType"
3314
+ },
3315
+ "default": "'button'",
3316
+ "description": "Forwarded to this component's own submit/reset handling — see the class doc comment above\nfor why this component (not the shadow-internal `<button>`) owns that behavior.",
3317
+ "attribute": "type"
3318
+ },
3319
+ {
3320
+ "kind": "field",
3321
+ "name": "variant",
3322
+ "type": {
3323
+ "text": "ButtonVariant"
3324
+ },
3325
+ "default": "'neutral'",
3326
+ "description": "Tone vocabulary shared with `<lyra-chip>`/`<lyra-avatar>`'s own `tone` property, named\n`variant` here (not `tone`) to mirror `wa-button`'s own attribute name for a mechanical\nmigration off a plain `wa-button`.",
3327
+ "attribute": "variant",
3328
+ "reflects": true
3329
+ },
3330
+ {
3331
+ "kind": "method",
3332
+ "name": "addEventListener",
3333
+ "return": {
3334
+ "type": {
3335
+ "text": "void"
3336
+ }
3337
+ },
3338
+ "parameters": [
3339
+ {
3340
+ "name": "type",
3341
+ "type": {
3342
+ "text": "K"
3343
+ }
3344
+ },
3345
+ {
3346
+ "name": "listener",
3347
+ "type": {
3348
+ "text": "(this: this, event: Events[K]) => unknown"
3349
+ }
3350
+ },
3351
+ {
3352
+ "name": "options",
3353
+ "optional": true,
3354
+ "type": {
3355
+ "text": "boolean | AddEventListenerOptions"
3356
+ }
3357
+ }
3358
+ ],
3359
+ "inheritedFrom": {
3360
+ "name": "LyraElement",
3361
+ "module": "src/internal/lyra-element.ts"
3362
+ }
3363
+ },
3364
+ {
3365
+ "kind": "method",
3366
+ "name": "blur",
3367
+ "return": {
3368
+ "type": {
3369
+ "text": "void"
3370
+ }
3371
+ }
3372
+ },
3373
+ {
3374
+ "kind": "method",
3375
+ "name": "emit",
3376
+ "privacy": "protected",
3377
+ "return": {
3378
+ "type": {
3379
+ "text": "CustomEvent<T>"
3380
+ }
3381
+ },
3382
+ "parameters": [
3383
+ {
3384
+ "name": "name",
3385
+ "type": {
3386
+ "text": "string"
3387
+ }
3388
+ },
3389
+ {
3390
+ "name": "detail",
3391
+ "optional": true,
3392
+ "type": {
3393
+ "text": "T"
3394
+ }
3395
+ },
3396
+ {
3397
+ "name": "options",
3398
+ "optional": true,
3399
+ "type": {
3400
+ "text": "LyraEmitOptions"
3401
+ }
3402
+ }
3403
+ ],
3404
+ "description": "Dispatch a composed, bubbling custom event; notifications are not veto points by default.",
3405
+ "inheritedFrom": {
3406
+ "name": "LyraElement",
3407
+ "module": "src/internal/lyra-element.ts"
3408
+ }
3409
+ },
3410
+ {
3411
+ "kind": "method",
3412
+ "name": "focus",
3413
+ "return": {
3414
+ "type": {
3415
+ "text": "void"
3416
+ }
3417
+ },
3418
+ "parameters": [
3419
+ {
3420
+ "name": "options",
3421
+ "optional": true,
3422
+ "type": {
3423
+ "text": "FocusOptions"
3424
+ }
3425
+ }
3426
+ ]
3427
+ },
3428
+ {
3429
+ "kind": "method",
3430
+ "name": "localize",
3431
+ "privacy": "protected",
3432
+ "return": {
3433
+ "type": {
3434
+ "text": "string"
3435
+ }
3436
+ },
3437
+ "parameters": [
3438
+ {
3439
+ "name": "key",
3440
+ "type": {
3441
+ "text": "string"
3442
+ }
3443
+ },
3444
+ {
3445
+ "name": "fallback",
3446
+ "optional": true,
3447
+ "type": {
3448
+ "text": "string"
3449
+ }
3450
+ },
3451
+ {
3452
+ "name": "values",
3453
+ "optional": true,
3454
+ "type": {
3455
+ "text": "Record<string, string | number>"
3456
+ }
3457
+ }
3458
+ ],
3459
+ "description": "Resolve a localized message using this component's overrides and locale.",
3460
+ "inheritedFrom": {
3461
+ "name": "LyraElement",
3462
+ "module": "src/internal/lyra-element.ts"
3463
+ }
3464
+ },
3465
+ {
3466
+ "kind": "method",
3467
+ "name": "removeEventListener",
3468
+ "return": {
3469
+ "type": {
3470
+ "text": "void"
3471
+ }
3472
+ },
3473
+ "parameters": [
3474
+ {
3475
+ "name": "type",
3476
+ "type": {
3477
+ "text": "K"
3478
+ }
3479
+ },
3480
+ {
3481
+ "name": "listener",
3482
+ "type": {
3483
+ "text": "(this: this, event: Events[K]) => unknown"
3484
+ }
3485
+ },
3486
+ {
3487
+ "name": "options",
3488
+ "optional": true,
3489
+ "type": {
3490
+ "text": "boolean | EventListenerOptions"
3491
+ }
3492
+ }
3493
+ ],
3494
+ "inheritedFrom": {
3495
+ "name": "LyraElement",
3496
+ "module": "src/internal/lyra-element.ts"
3497
+ }
3498
+ }
3499
+ ],
3500
+ "attributes": [
3501
+ {
3502
+ "name": "appearance",
3503
+ "type": {
3504
+ "text": "ButtonAppearance"
3505
+ },
3506
+ "default": "'filled'",
3507
+ "fieldName": "appearance"
3508
+ },
3509
+ {
3510
+ "name": "disabled",
3511
+ "type": {
3512
+ "text": "boolean"
3513
+ },
3514
+ "default": "false",
3515
+ "fieldName": "disabled"
3516
+ },
3517
+ {
3518
+ "name": "loading",
3519
+ "type": {
3520
+ "text": "boolean"
3521
+ },
3522
+ "default": "false",
3523
+ "description": "Shows an internal spinner in place of interaction affordance and disables the button, without\nclearing `disabled` — a consumer's own `disabled` state and a transient `loading` state are\nindependent (mirrors `<lyra-export-button>`'s own `loading`/`disabled` pair).",
3524
+ "fieldName": "loading"
3525
+ },
3526
+ {
3527
+ "name": "locale",
3528
+ "type": {
3529
+ "text": "string"
3530
+ },
3531
+ "default": "''",
3532
+ "description": "Optional locale override. Otherwise the nearest `locale`/`lang` ancestor is used.",
3533
+ "fieldName": "locale",
3534
+ "inheritedFrom": {
3535
+ "name": "LyraElement",
3536
+ "module": "src/internal/lyra-element.ts"
3537
+ }
3538
+ },
3539
+ {
3540
+ "name": "size",
3541
+ "type": {
3542
+ "text": "ButtonSize"
3543
+ },
3544
+ "default": "'m'",
3545
+ "fieldName": "size"
3546
+ },
3547
+ {
3548
+ "name": "type",
3549
+ "type": {
3550
+ "text": "ButtonType"
3551
+ },
3552
+ "default": "'button'",
3553
+ "description": "Forwarded to this component's own submit/reset handling — see the class doc comment above\nfor why this component (not the shadow-internal `<button>`) owns that behavior.",
3554
+ "fieldName": "type"
3555
+ },
3556
+ {
3557
+ "name": "variant",
3558
+ "type": {
3559
+ "text": "ButtonVariant"
3560
+ },
3561
+ "default": "'neutral'",
3562
+ "description": "Tone vocabulary shared with `<lyra-chip>`/`<lyra-avatar>`'s own `tone` property, named\n`variant` here (not `tone`) to mirror `wa-button`'s own attribute name for a mechanical\nmigration off a plain `wa-button`.",
3563
+ "fieldName": "variant"
3564
+ }
3565
+ ],
3566
+ "superclass": {
3567
+ "name": "LyraElement",
3568
+ "module": "/src/internal/lyra-element.js"
3569
+ },
3570
+ "tagName": "lyra-button",
3571
+ "customElement": true
3572
+ }
3573
+ ],
3574
+ "exports": [
3575
+ {
3576
+ "kind": "js",
3577
+ "name": "LyraButton",
3578
+ "declaration": {
3579
+ "name": "LyraButton",
3580
+ "module": "src/components/button/button.class.ts"
3581
+ }
3582
+ }
3583
+ ]
3584
+ },
3585
+ {
3586
+ "kind": "javascript-module",
3587
+ "path": "src/components/button/button.ts",
3588
+ "declarations": [],
3589
+ "exports": [
3590
+ {
3591
+ "kind": "custom-element-definition",
3592
+ "name": "lyra-button",
3593
+ "declaration": {
3594
+ "name": "LyraButton",
3595
+ "module": "src/components/button/button.class.ts"
3596
+ }
3597
+ },
3598
+ {
3599
+ "kind": "js",
3600
+ "name": "*",
3601
+ "declaration": {
3602
+ "name": "*",
3603
+ "module": "src/components/button/button.class.js"
3604
+ }
3605
+ }
3606
+ ]
3607
+ },
3142
3608
  {
3143
3609
  "kind": "javascript-module",
3144
3610
  "path": "src/components/card/card.class.ts",
@@ -34385,6 +34851,15 @@
34385
34851
  "name": "scheduleDraw",
34386
34852
  "privacy": "private"
34387
34853
  },
34854
+ {
34855
+ "kind": "field",
34856
+ "name": "selectedCell",
34857
+ "type": {
34858
+ "text": "HeatmapSelectedCell | null"
34859
+ },
34860
+ "default": "null",
34861
+ "description": "The single cell to mark as persistently selected -- `row`/`col` in matrix mode, `date` in\ncalendar mode. Purely a controlled, consumer-owned visual/accessibility marker, mirroring\n`<lyra-lite-chart>`'s `selectedIndex` -- this component never mutates it itself; a consumer\nwires it up from `lyra-cell-click` (or any other source) to build a toggle-select\ninteraction. Unset (the default, `null`) draws no selection ring, adds no selected-cell text\nto the host's `aria-label`, and adds no \"(selected)\" suffix to the live-region announcement,\nreproducing today's exact output."
34862
+ },
34388
34863
  {
34389
34864
  "kind": "field",
34390
34865
  "name": "stopLocaleSubscription",
@@ -34882,6 +35357,25 @@
34882
35357
  ],
34883
35358
  "description": "Dispatches to the host-provided `cellInteractive` predicate when set, otherwise `true`\n(every cell interactive, today's unchanged default)."
34884
35359
  },
35360
+ {
35361
+ "kind": "method",
35362
+ "name": "isSelectedPos",
35363
+ "privacy": "private",
35364
+ "return": {
35365
+ "type": {
35366
+ "text": "boolean"
35367
+ }
35368
+ },
35369
+ "parameters": [
35370
+ {
35371
+ "name": "pos",
35372
+ "type": {
35373
+ "text": "CellPos"
35374
+ }
35375
+ }
35376
+ ],
35377
+ "description": "Whether `selectedCell` refers to the given grid position, in whichever mode is active --\n`row`/`col` equality in matrix mode, resolved-date equality in calendar mode (looking the\nposition's actual date up via `calendarCellAt()`, the same way the annotation ring resolves\n`ann.date` against `cells`). Shared by the live-region announcement, which needs to know\nwhether the just-announced cell *is* the selection."
35378
+ },
34885
35379
  {
34886
35380
  "kind": "method",
34887
35381
  "name": "labelColor",
@@ -35254,6 +35748,28 @@
35254
35748
  },
35255
35749
  "description": "Reads the customizable ramp endpoints off the host's computed style."
35256
35750
  },
35751
+ {
35752
+ "kind": "method",
35753
+ "name": "selectedCellDescription",
35754
+ "privacy": "private",
35755
+ "return": {
35756
+ "type": {
35757
+ "text": "string"
35758
+ }
35759
+ },
35760
+ "description": "The localized \"Selected: <cell>.\" description appended to the host `aria-label`, or `''` when\n`selectedCell` is unset or doesn't resolve to a real cell in the current grid."
35761
+ },
35762
+ {
35763
+ "kind": "method",
35764
+ "name": "selectedColor",
35765
+ "privacy": "private",
35766
+ "return": {
35767
+ "type": {
35768
+ "text": "string"
35769
+ }
35770
+ },
35771
+ "description": "Reads the customizable canvas-drawn selected-cell-ring stroke color off the host's computed style."
35772
+ },
35257
35773
  {
35258
35774
  "kind": "method",
35259
35775
  "name": "tooltipStyle",
@@ -35646,74 +36162,75 @@
35646
36162
  },
35647
36163
  {
35648
36164
  "kind": "javascript-module",
35649
- "path": "src/components/json-viewer/json-viewer.class.ts",
36165
+ "path": "src/components/input/input.class.ts",
35650
36166
  "declarations": [
35651
36167
  {
35652
36168
  "kind": "class",
35653
- "description": "`<lyra-json-viewer>` — a collapsible, copyable tree view for an arbitrary\nJSON-serializable value (object/array/string/number/boolean/null/\nundefined). Serves as the fallback renderer wherever a raw payload (tool\ncall arguments, a tool result, an API response) needs inspecting without a\nbespoke view.\n\nExpand/collapse state is keyed by structural path (not by object identity),\nso it survives a `data` reassignment that keeps the same shape -- e.g. a\nstreaming tool result being patched in place.",
35654
- "name": "LyraJsonViewer",
36169
+ "description": "`<lyra-input>` — a single-line plain-text input primitive, the `lyra-*` equivalent of a plain\n`wa-input`, form-associated via the `FormAssociated` mixin (same shape as `<lyra-textarea>`).\n\nShips the same opt-in `label`/`hint`/`errorText` form-control chrome as `<lyra-textarea>`/\n`<lyra-select>` (props + matching named slots + `form-control`/`form-control-label`/`hint`/`error`\nparts) — left unset, the chrome stays hidden. `size` uses the same `xs`–`xl` scale as\n`<lyra-select>`/`<lyra-combobox>`. `type=\"password\"` always renders a\n`password-toggle` eye-icon button that flips the internal native input between\n`type=\"password\"`/`type=\"text\"` and tracks `passwordVisible`. `type=\"email\"`/`type=\"number\"`\n(with `min`/`max`/`step`) delegate constraint validation to the internal native `<input>`'s own\nbrowser-computed `validity`, bridged into this element's `ElementInternals` by `updateValidity()`.\n\nA host `aria-label` is forwarded to the internal textbox via the typed `accessibleLabel` property;\nexternal `aria-labelledby`/`aria-describedby` idrefs are not copied across the shadow boundary.",
36170
+ "name": "LyraInput",
35655
36171
  "cssParts": [
35656
36172
  {
35657
- "description": "The root scroll container; respects `max-height`.",
35658
- "name": "base"
36173
+ "description": "The error message.",
36174
+ "name": "error"
35659
36175
  },
35660
36176
  {
35661
- "description": "A `{`, `}`, `[`, or `]` delimiter.",
35662
- "name": "bracket"
36177
+ "description": "The outer wrapper around label, input, error and hint.",
36178
+ "name": "form-control"
35663
36179
  },
35664
36180
  {
35665
- "description": "A copy-to-clipboard button -- the top-level one (in `toolbar`, labelled \"Copy JSON to clipboard\") or a per-node one (only rendered when `copyable`; labelled with its own key/type, e.g. \"Copy age\", so assistive tech can tell rows apart).",
35666
- "name": "copy-button"
36181
+ "description": "The `<label>` element.",
36182
+ "name": "form-control-label"
35667
36183
  },
35668
36184
  {
35669
- "description": "An object property key or array index label.",
35670
- "name": "key"
36185
+ "description": "The hint message.",
36186
+ "name": "hint"
35671
36187
  },
35672
36188
  {
35673
- "description": "A container node's expand/collapse button (hidden, but present for row alignment, on leaf/empty nodes).",
35674
- "name": "toggle"
36189
+ "description": "The native `<input>` element.",
36190
+ "name": "input"
35675
36191
  },
35676
36192
  {
35677
- "description": "The wrapper around the top-level copy button (only rendered when `copyable`).",
35678
- "name": "toolbar"
36193
+ "description": "The row wrapping the native input and the password-toggle button.",
36194
+ "name": "input-wrapper"
35679
36195
  },
35680
36196
  {
35681
- "description": "The wrapper around the rendered node tree.",
35682
- "name": "tree"
36197
+ "description": "The show/hide-password button, present only when `type=\"password\"`.",
36198
+ "name": "password-toggle"
36199
+ }
36200
+ ],
36201
+ "slots": [
36202
+ {
36203
+ "description": "Custom error content.",
36204
+ "name": "error"
35683
36205
  },
35684
36206
  {
35685
- "description": "A primitive value's text -- carries `data-type` (`string`/`number`/`boolean`/`null`/`undefined`, or `circular` for a self-reference marker in place of a re-visited container's subtree) for per-type coloring, and `data-match` while it matches `search`.",
35686
- "name": "value"
36207
+ "description": "Custom hint content.",
36208
+ "name": "hint"
36209
+ },
36210
+ {
36211
+ "description": "Custom label content.",
36212
+ "name": "label"
35687
36213
  }
35688
36214
  ],
35689
36215
  "members": [
35690
36216
  {
35691
36217
  "kind": "field",
35692
- "name": "collapsedDepth",
35693
- "type": {
35694
- "text": "number | undefined"
35695
- },
35696
- "description": "Nodes at or beyond this nesting depth (root = 0) start collapsed. Omit/undefined: nothing auto-collapses.",
35697
- "attribute": "collapsed-depth"
35698
- },
35699
- {
35700
- "kind": "field",
35701
- "name": "copyable",
36218
+ "name": "accessibleLabel",
35702
36219
  "type": {
35703
- "text": "boolean"
36220
+ "text": "string | null"
35704
36221
  },
35705
- "default": "false",
35706
- "description": "Shows copy-to-clipboard affordances: one for the whole value, plus one per node.",
35707
- "attribute": "copyable",
35708
- "reflects": true
36222
+ "default": "null",
36223
+ "description": "Accessible name overriding the label/placeholder-derived default. Takes precedence over both\n`label` and `placeholder` when set, matching `<lyra-textarea>`'s `accessibleLabel`.",
36224
+ "attribute": "aria-label"
35709
36225
  },
35710
36226
  {
35711
36227
  "kind": "field",
35712
- "name": "data",
36228
+ "name": "autocomplete",
35713
36229
  "type": {
35714
- "text": "unknown"
36230
+ "text": "string"
35715
36231
  },
35716
- "description": "The value to render. Any JSON-serializable value, plus `undefined`."
36232
+ "default": "''",
36233
+ "attribute": "autocomplete"
35717
36234
  },
35718
36235
  {
35719
36236
  "kind": "field",
@@ -35745,10 +36262,74 @@
35745
36262
  },
35746
36263
  {
35747
36264
  "kind": "field",
35748
- "name": "expandedOverrides",
36265
+ "name": "errorText",
36266
+ "type": {
36267
+ "text": "string"
36268
+ },
36269
+ "default": "''",
36270
+ "attribute": "error-text"
36271
+ },
36272
+ {
36273
+ "kind": "field",
36274
+ "name": "hasErrorSlot",
36275
+ "type": {
36276
+ "text": "boolean"
36277
+ },
35749
36278
  "privacy": "private",
35750
- "default": "new Map<string, boolean>()",
35751
- "description": "Per-path (`JSON.stringify(path)`) explicit expand/collapse, overriding\nthe `collapsedDepth`/search defaults once a node's toggle has been used.\nPruned in `willUpdate()` (to the paths still reachable in the tree)\nwhenever `data` changes, so a long-lived instance bound to reshaping\ndata -- this component's own stated streaming use case -- doesn't\naccumulate one entry per path ever toggled for the life of the instance."
36279
+ "default": "false"
36280
+ },
36281
+ {
36282
+ "kind": "field",
36283
+ "name": "hasHintSlot",
36284
+ "type": {
36285
+ "text": "boolean"
36286
+ },
36287
+ "privacy": "private",
36288
+ "default": "false"
36289
+ },
36290
+ {
36291
+ "kind": "field",
36292
+ "name": "hasLabelSlot",
36293
+ "type": {
36294
+ "text": "boolean"
36295
+ },
36296
+ "privacy": "private",
36297
+ "default": "false"
36298
+ },
36299
+ {
36300
+ "kind": "field",
36301
+ "name": "hint",
36302
+ "type": {
36303
+ "text": "string"
36304
+ },
36305
+ "default": "''",
36306
+ "attribute": "hint"
36307
+ },
36308
+ {
36309
+ "kind": "field",
36310
+ "name": "input",
36311
+ "type": {
36312
+ "text": "HTMLInputElement | null"
36313
+ },
36314
+ "description": "The internal native `<input>` element, for direct DOM access — mirrors `<lyra-textarea>`'s own `input` getter.",
36315
+ "readonly": true
36316
+ },
36317
+ {
36318
+ "kind": "field",
36319
+ "name": "inputEl",
36320
+ "type": {
36321
+ "text": "HTMLInputElement | undefined"
36322
+ },
36323
+ "privacy": "private"
36324
+ },
36325
+ {
36326
+ "kind": "field",
36327
+ "name": "label",
36328
+ "type": {
36329
+ "text": "string"
36330
+ },
36331
+ "default": "''",
36332
+ "attribute": "label"
35752
36333
  },
35753
36334
  {
35754
36335
  "kind": "field",
@@ -35767,33 +36348,660 @@
35767
36348
  },
35768
36349
  {
35769
36350
  "kind": "field",
35770
- "name": "maxHeight",
36351
+ "name": "max",
35771
36352
  "type": {
35772
- "text": "string"
36353
+ "text": "number | undefined"
35773
36354
  },
35774
- "default": "''",
35775
- "description": "A CSS length (e.g. `\"20rem\"`); once set, the viewer scrolls internally past this height instead of growing the page.",
35776
- "attribute": "max-height"
36355
+ "attribute": "max"
35777
36356
  },
35778
36357
  {
35779
36358
  "kind": "field",
35780
- "name": "search",
36359
+ "name": "min",
36360
+ "type": {
36361
+ "text": "number | undefined"
36362
+ },
36363
+ "description": "`type=\"number\"` only — forwarded to the internal native `<input>`'s own `min`/`max`/`step`\nand consulted by that same native input's constraint validation (see `updateValidity()`).",
36364
+ "attribute": "min"
36365
+ },
36366
+ {
36367
+ "kind": "field",
36368
+ "name": "onBlur",
36369
+ "privacy": "private"
36370
+ },
36371
+ {
36372
+ "kind": "field",
36373
+ "name": "onChange",
36374
+ "privacy": "private"
36375
+ },
36376
+ {
36377
+ "kind": "field",
36378
+ "name": "onErrorSlotChange",
36379
+ "privacy": "private"
36380
+ },
36381
+ {
36382
+ "kind": "field",
36383
+ "name": "onFocus",
36384
+ "privacy": "private"
36385
+ },
36386
+ {
36387
+ "kind": "field",
36388
+ "name": "onHintSlotChange",
36389
+ "privacy": "private"
36390
+ },
36391
+ {
36392
+ "kind": "field",
36393
+ "name": "onInput",
36394
+ "privacy": "private"
36395
+ },
36396
+ {
36397
+ "kind": "field",
36398
+ "name": "onLabelSlotChange",
36399
+ "privacy": "private"
36400
+ },
36401
+ {
36402
+ "kind": "field",
36403
+ "name": "onTogglePasswordVisible",
36404
+ "privacy": "private"
36405
+ },
36406
+ {
36407
+ "kind": "field",
36408
+ "name": "passwordVisible",
36409
+ "type": {
36410
+ "text": "boolean"
36411
+ },
36412
+ "default": "false",
36413
+ "description": "`type=\"password\"` only — whether the field currently reveals its raw text. Toggled by the\nbuilt-in `password-toggle` button; also settable by a consumer up front.",
36414
+ "attribute": "password-visible"
36415
+ },
36416
+ {
36417
+ "kind": "field",
36418
+ "name": "placeholder",
35781
36419
  "type": {
35782
36420
  "text": "string"
35783
36421
  },
35784
36422
  "default": "''",
35785
- "description": "Case-insensitive substring match against keys/values; matches are highlighted and their ancestors auto-expanded.",
35786
- "attribute": "search"
36423
+ "attribute": "placeholder"
35787
36424
  },
35788
36425
  {
35789
36426
  "kind": "field",
35790
- "name": "searchState",
36427
+ "name": "size",
35791
36428
  "type": {
35792
- "text": "SearchState"
36429
+ "text": "LyraInputSize"
35793
36430
  },
35794
- "privacy": "private",
35795
- "default": "{ keyMatches: new Set(), valueMatches: new Set(), forceExpand: new Set(), paths: new Set(), }",
35796
- "description": "Memoized result of the last `computeSearch()` walk -- see `willUpdate()`."
36431
+ "default": "'m'",
36432
+ "description": "Visual size same `xs`–`xl` scale as `lyra-select`/`lyra-combobox`'s own `size`.",
36433
+ "attribute": "size",
36434
+ "reflects": true
36435
+ },
36436
+ {
36437
+ "kind": "field",
36438
+ "name": "step",
36439
+ "type": {
36440
+ "text": "number | undefined"
36441
+ },
36442
+ "attribute": "step"
36443
+ },
36444
+ {
36445
+ "kind": "field",
36446
+ "name": "stopLocaleSubscription",
36447
+ "type": {
36448
+ "text": "() => void | undefined"
36449
+ },
36450
+ "privacy": "private",
36451
+ "inheritedFrom": {
36452
+ "name": "LyraElement",
36453
+ "module": "src/internal/lyra-element.ts"
36454
+ }
36455
+ },
36456
+ {
36457
+ "kind": "field",
36458
+ "name": "strings",
36459
+ "type": {
36460
+ "text": "LyraLocaleStrings"
36461
+ },
36462
+ "default": "{}",
36463
+ "description": "Per-instance message overrides, useful for application-specific wording.",
36464
+ "inheritedFrom": {
36465
+ "name": "LyraElement",
36466
+ "module": "src/internal/lyra-element.ts"
36467
+ }
36468
+ },
36469
+ {
36470
+ "kind": "field",
36471
+ "name": "touched",
36472
+ "type": {
36473
+ "text": "boolean"
36474
+ },
36475
+ "privacy": "private",
36476
+ "default": "false"
36477
+ },
36478
+ {
36479
+ "kind": "field",
36480
+ "name": "type",
36481
+ "type": {
36482
+ "text": "LyraInputType"
36483
+ },
36484
+ "default": "'text'",
36485
+ "attribute": "type"
36486
+ },
36487
+ {
36488
+ "kind": "method",
36489
+ "name": "addEventListener",
36490
+ "return": {
36491
+ "type": {
36492
+ "text": "void"
36493
+ }
36494
+ },
36495
+ "parameters": [
36496
+ {
36497
+ "name": "type",
36498
+ "type": {
36499
+ "text": "K"
36500
+ }
36501
+ },
36502
+ {
36503
+ "name": "listener",
36504
+ "type": {
36505
+ "text": "(this: this, event: Events[K]) => unknown"
36506
+ }
36507
+ },
36508
+ {
36509
+ "name": "options",
36510
+ "optional": true,
36511
+ "type": {
36512
+ "text": "boolean | AddEventListenerOptions"
36513
+ }
36514
+ }
36515
+ ],
36516
+ "inheritedFrom": {
36517
+ "name": "LyraElement",
36518
+ "module": "src/internal/lyra-element.ts"
36519
+ }
36520
+ },
36521
+ {
36522
+ "kind": "method",
36523
+ "name": "blur",
36524
+ "return": {
36525
+ "type": {
36526
+ "text": "void"
36527
+ }
36528
+ }
36529
+ },
36530
+ {
36531
+ "kind": "method",
36532
+ "name": "emit",
36533
+ "privacy": "protected",
36534
+ "return": {
36535
+ "type": {
36536
+ "text": "CustomEvent<T>"
36537
+ }
36538
+ },
36539
+ "parameters": [
36540
+ {
36541
+ "name": "name",
36542
+ "type": {
36543
+ "text": "string"
36544
+ }
36545
+ },
36546
+ {
36547
+ "name": "detail",
36548
+ "optional": true,
36549
+ "type": {
36550
+ "text": "T"
36551
+ }
36552
+ },
36553
+ {
36554
+ "name": "options",
36555
+ "optional": true,
36556
+ "type": {
36557
+ "text": "LyraEmitOptions"
36558
+ }
36559
+ }
36560
+ ],
36561
+ "description": "Dispatch a composed, bubbling custom event; notifications are not veto points by default.",
36562
+ "inheritedFrom": {
36563
+ "name": "LyraElement",
36564
+ "module": "src/internal/lyra-element.ts"
36565
+ }
36566
+ },
36567
+ {
36568
+ "kind": "method",
36569
+ "name": "focus",
36570
+ "return": {
36571
+ "type": {
36572
+ "text": "void"
36573
+ }
36574
+ },
36575
+ "parameters": [
36576
+ {
36577
+ "name": "options",
36578
+ "optional": true,
36579
+ "type": {
36580
+ "text": "FocusOptions"
36581
+ }
36582
+ }
36583
+ ]
36584
+ },
36585
+ {
36586
+ "kind": "method",
36587
+ "name": "localize",
36588
+ "privacy": "protected",
36589
+ "return": {
36590
+ "type": {
36591
+ "text": "string"
36592
+ }
36593
+ },
36594
+ "parameters": [
36595
+ {
36596
+ "name": "key",
36597
+ "type": {
36598
+ "text": "string"
36599
+ }
36600
+ },
36601
+ {
36602
+ "name": "fallback",
36603
+ "optional": true,
36604
+ "type": {
36605
+ "text": "string"
36606
+ }
36607
+ },
36608
+ {
36609
+ "name": "values",
36610
+ "optional": true,
36611
+ "type": {
36612
+ "text": "Record<string, string | number>"
36613
+ }
36614
+ }
36615
+ ],
36616
+ "description": "Resolve a localized message using this component's overrides and locale.",
36617
+ "inheritedFrom": {
36618
+ "name": "LyraElement",
36619
+ "module": "src/internal/lyra-element.ts"
36620
+ }
36621
+ },
36622
+ {
36623
+ "kind": "method",
36624
+ "name": "removeEventListener",
36625
+ "return": {
36626
+ "type": {
36627
+ "text": "void"
36628
+ }
36629
+ },
36630
+ "parameters": [
36631
+ {
36632
+ "name": "type",
36633
+ "type": {
36634
+ "text": "K"
36635
+ }
36636
+ },
36637
+ {
36638
+ "name": "listener",
36639
+ "type": {
36640
+ "text": "(this: this, event: Events[K]) => unknown"
36641
+ }
36642
+ },
36643
+ {
36644
+ "name": "options",
36645
+ "optional": true,
36646
+ "type": {
36647
+ "text": "boolean | EventListenerOptions"
36648
+ }
36649
+ }
36650
+ ],
36651
+ "inheritedFrom": {
36652
+ "name": "LyraElement",
36653
+ "module": "src/internal/lyra-element.ts"
36654
+ }
36655
+ },
36656
+ {
36657
+ "kind": "method",
36658
+ "name": "select",
36659
+ "return": {
36660
+ "type": {
36661
+ "text": "void"
36662
+ }
36663
+ }
36664
+ },
36665
+ {
36666
+ "kind": "method",
36667
+ "name": "updateValidity",
36668
+ "privacy": "protected",
36669
+ "return": {
36670
+ "type": {
36671
+ "text": "void"
36672
+ }
36673
+ },
36674
+ "description": "Bridges the internal native `<input>`'s own browser-computed constraint validation (format for\n`type=\"email\"`, range/step for `type=\"number\"`) into this element's `ElementInternals`, instead\nof hand-rolling a second regex-based check — a real native input of the right `type` already\ncomputes `typeMismatch`/`rangeUnderflow`/`rangeOverflow`/`stepMismatch` correctly. Falls back to\nthe base mixin's plain required-and-empty check before the first render (`inputEl` unset).\n\nA typed native input (`number`, `email`, …) also runs its own value-sanitization algorithm on\nassignment, which silently rewrites an unparseable non-empty value to `''` without setting any\n`ValidityState` flag — left unchecked, `native.validity.valid` would then read `true` (empty is\nfine when not required) while `this.value`/the bridged form value still held the literal invalid\nstring. Detect that mismatch and report it as `badInput` instead of trusting native blindly."
36675
+ }
36676
+ ],
36677
+ "events": [
36678
+ {
36679
+ "description": "Re-dispatched from the internal native `<input>`'s own `blur` — bubbling and composed (unlike the native event, which is neither).",
36680
+ "name": "blur"
36681
+ },
36682
+ {
36683
+ "description": "Re-dispatched from the internal native `<input>`'s own `focus`, for the same reason as `blur`.",
36684
+ "name": "focus"
36685
+ },
36686
+ {
36687
+ "description": "Fired on the native `change` timing (control loses focus after a committed edit). `detail: { value }`.",
36688
+ "name": "lyra-change"
36689
+ },
36690
+ {
36691
+ "description": "Fired on every user-driven edit (not a programmatic `.value` assignment). `detail: { value }`.",
36692
+ "name": "lyra-input"
36693
+ }
36694
+ ],
36695
+ "attributes": [
36696
+ {
36697
+ "name": "aria-label",
36698
+ "type": {
36699
+ "text": "string | null"
36700
+ },
36701
+ "default": "null",
36702
+ "description": "Accessible name overriding the label/placeholder-derived default. Takes precedence over both\n`label` and `placeholder` when set, matching `<lyra-textarea>`'s `accessibleLabel`.",
36703
+ "fieldName": "accessibleLabel"
36704
+ },
36705
+ {
36706
+ "name": "autocomplete",
36707
+ "type": {
36708
+ "text": "string"
36709
+ },
36710
+ "default": "''",
36711
+ "fieldName": "autocomplete"
36712
+ },
36713
+ {
36714
+ "name": "error-text",
36715
+ "type": {
36716
+ "text": "string"
36717
+ },
36718
+ "default": "''",
36719
+ "fieldName": "errorText"
36720
+ },
36721
+ {
36722
+ "name": "hint",
36723
+ "type": {
36724
+ "text": "string"
36725
+ },
36726
+ "default": "''",
36727
+ "fieldName": "hint"
36728
+ },
36729
+ {
36730
+ "name": "label",
36731
+ "type": {
36732
+ "text": "string"
36733
+ },
36734
+ "default": "''",
36735
+ "fieldName": "label"
36736
+ },
36737
+ {
36738
+ "name": "locale",
36739
+ "type": {
36740
+ "text": "string"
36741
+ },
36742
+ "default": "''",
36743
+ "description": "Optional locale override. Otherwise the nearest `locale`/`lang` ancestor is used.",
36744
+ "fieldName": "locale",
36745
+ "inheritedFrom": {
36746
+ "name": "LyraElement",
36747
+ "module": "src/internal/lyra-element.ts"
36748
+ }
36749
+ },
36750
+ {
36751
+ "name": "max",
36752
+ "type": {
36753
+ "text": "number | undefined"
36754
+ },
36755
+ "fieldName": "max"
36756
+ },
36757
+ {
36758
+ "name": "min",
36759
+ "type": {
36760
+ "text": "number | undefined"
36761
+ },
36762
+ "description": "`type=\"number\"` only — forwarded to the internal native `<input>`'s own `min`/`max`/`step`\nand consulted by that same native input's constraint validation (see `updateValidity()`).",
36763
+ "fieldName": "min"
36764
+ },
36765
+ {
36766
+ "name": "password-visible",
36767
+ "type": {
36768
+ "text": "boolean"
36769
+ },
36770
+ "default": "false",
36771
+ "description": "`type=\"password\"` only — whether the field currently reveals its raw text. Toggled by the\nbuilt-in `password-toggle` button; also settable by a consumer up front.",
36772
+ "fieldName": "passwordVisible"
36773
+ },
36774
+ {
36775
+ "name": "placeholder",
36776
+ "type": {
36777
+ "text": "string"
36778
+ },
36779
+ "default": "''",
36780
+ "fieldName": "placeholder"
36781
+ },
36782
+ {
36783
+ "name": "size",
36784
+ "type": {
36785
+ "text": "LyraInputSize"
36786
+ },
36787
+ "default": "'m'",
36788
+ "description": "Visual size — same `xs`–`xl` scale as `lyra-select`/`lyra-combobox`'s own `size`.",
36789
+ "fieldName": "size"
36790
+ },
36791
+ {
36792
+ "name": "step",
36793
+ "type": {
36794
+ "text": "number | undefined"
36795
+ },
36796
+ "fieldName": "step"
36797
+ },
36798
+ {
36799
+ "name": "type",
36800
+ "type": {
36801
+ "text": "LyraInputType"
36802
+ },
36803
+ "default": "'text'",
36804
+ "fieldName": "type"
36805
+ }
36806
+ ],
36807
+ "mixins": [
36808
+ {
36809
+ "name": "FormAssociated",
36810
+ "module": "/src/internal/form-associated.js"
36811
+ }
36812
+ ],
36813
+ "superclass": {
36814
+ "name": "LyraInputBase",
36815
+ "module": "src/components/input/input.class.ts"
36816
+ },
36817
+ "tagName": "lyra-input",
36818
+ "customElement": true
36819
+ }
36820
+ ],
36821
+ "exports": [
36822
+ {
36823
+ "kind": "js",
36824
+ "name": "LyraInput",
36825
+ "declaration": {
36826
+ "name": "LyraInput",
36827
+ "module": "src/components/input/input.class.ts"
36828
+ }
36829
+ }
36830
+ ]
36831
+ },
36832
+ {
36833
+ "kind": "javascript-module",
36834
+ "path": "src/components/input/input.ts",
36835
+ "declarations": [],
36836
+ "exports": [
36837
+ {
36838
+ "kind": "custom-element-definition",
36839
+ "name": "lyra-input",
36840
+ "declaration": {
36841
+ "name": "LyraInput",
36842
+ "module": "src/components/input/input.class.ts"
36843
+ }
36844
+ },
36845
+ {
36846
+ "kind": "js",
36847
+ "name": "*",
36848
+ "declaration": {
36849
+ "name": "*",
36850
+ "module": "src/components/input/input.class.js"
36851
+ }
36852
+ }
36853
+ ]
36854
+ },
36855
+ {
36856
+ "kind": "javascript-module",
36857
+ "path": "src/components/json-viewer/json-viewer.class.ts",
36858
+ "declarations": [
36859
+ {
36860
+ "kind": "class",
36861
+ "description": "`<lyra-json-viewer>` — a collapsible, copyable tree view for an arbitrary\nJSON-serializable value (object/array/string/number/boolean/null/\nundefined). Serves as the fallback renderer wherever a raw payload (tool\ncall arguments, a tool result, an API response) needs inspecting without a\nbespoke view.\n\nExpand/collapse state is keyed by structural path (not by object identity),\nso it survives a `data` reassignment that keeps the same shape -- e.g. a\nstreaming tool result being patched in place.",
36862
+ "name": "LyraJsonViewer",
36863
+ "cssParts": [
36864
+ {
36865
+ "description": "The root scroll container; respects `max-height`.",
36866
+ "name": "base"
36867
+ },
36868
+ {
36869
+ "description": "A `{`, `}`, `[`, or `]` delimiter.",
36870
+ "name": "bracket"
36871
+ },
36872
+ {
36873
+ "description": "A copy-to-clipboard button -- the top-level one (in `toolbar`, labelled \"Copy JSON to clipboard\") or a per-node one (only rendered when `copyable`; labelled with its own key/type, e.g. \"Copy age\", so assistive tech can tell rows apart).",
36874
+ "name": "copy-button"
36875
+ },
36876
+ {
36877
+ "description": "An object property key or array index label.",
36878
+ "name": "key"
36879
+ },
36880
+ {
36881
+ "description": "A container node's expand/collapse button (hidden, but present for row alignment, on leaf/empty nodes).",
36882
+ "name": "toggle"
36883
+ },
36884
+ {
36885
+ "description": "The wrapper around the top-level copy button (only rendered when `copyable`).",
36886
+ "name": "toolbar"
36887
+ },
36888
+ {
36889
+ "description": "The wrapper around the rendered node tree.",
36890
+ "name": "tree"
36891
+ },
36892
+ {
36893
+ "description": "A primitive value's text -- carries `data-type` (`string`/`number`/`boolean`/`null`/`undefined`, or `circular` for a self-reference marker in place of a re-visited container's subtree) for per-type coloring, and `data-match` while it matches `search`.",
36894
+ "name": "value"
36895
+ }
36896
+ ],
36897
+ "members": [
36898
+ {
36899
+ "kind": "field",
36900
+ "name": "collapsedDepth",
36901
+ "type": {
36902
+ "text": "number | undefined"
36903
+ },
36904
+ "description": "Nodes at or beyond this nesting depth (root = 0) start collapsed. Omit/undefined: nothing auto-collapses.",
36905
+ "attribute": "collapsed-depth"
36906
+ },
36907
+ {
36908
+ "kind": "field",
36909
+ "name": "copyable",
36910
+ "type": {
36911
+ "text": "boolean"
36912
+ },
36913
+ "default": "false",
36914
+ "description": "Shows copy-to-clipboard affordances: one for the whole value, plus one per node.",
36915
+ "attribute": "copyable",
36916
+ "reflects": true
36917
+ },
36918
+ {
36919
+ "kind": "field",
36920
+ "name": "data",
36921
+ "type": {
36922
+ "text": "unknown"
36923
+ },
36924
+ "description": "The value to render. Any JSON-serializable value, plus `undefined`."
36925
+ },
36926
+ {
36927
+ "kind": "field",
36928
+ "name": "effectiveDirection",
36929
+ "type": {
36930
+ "text": "'ltr' | 'rtl'"
36931
+ },
36932
+ "privacy": "protected",
36933
+ "description": "The effective text direction, including inherited CSS direction.",
36934
+ "readonly": true,
36935
+ "inheritedFrom": {
36936
+ "name": "LyraElement",
36937
+ "module": "src/internal/lyra-element.ts"
36938
+ }
36939
+ },
36940
+ {
36941
+ "kind": "field",
36942
+ "name": "effectiveLocale",
36943
+ "type": {
36944
+ "text": "string"
36945
+ },
36946
+ "privacy": "protected",
36947
+ "description": "The effective locale used by this component.",
36948
+ "readonly": true,
36949
+ "inheritedFrom": {
36950
+ "name": "LyraElement",
36951
+ "module": "src/internal/lyra-element.ts"
36952
+ }
36953
+ },
36954
+ {
36955
+ "kind": "field",
36956
+ "name": "expandedOverrides",
36957
+ "privacy": "private",
36958
+ "default": "new Map<string, boolean>()",
36959
+ "description": "Per-path (`JSON.stringify(path)`) explicit expand/collapse, overriding\nthe `collapsedDepth`/search defaults once a node's toggle has been used.\nPruned in `willUpdate()` (to the paths still reachable in the tree)\nwhenever `data` changes, so a long-lived instance bound to reshaping\ndata -- this component's own stated streaming use case -- doesn't\naccumulate one entry per path ever toggled for the life of the instance."
36960
+ },
36961
+ {
36962
+ "kind": "field",
36963
+ "name": "locale",
36964
+ "type": {
36965
+ "text": "string"
36966
+ },
36967
+ "default": "''",
36968
+ "description": "Optional locale override. Otherwise the nearest `locale`/`lang` ancestor is used.",
36969
+ "attribute": "locale",
36970
+ "reflects": true,
36971
+ "inheritedFrom": {
36972
+ "name": "LyraElement",
36973
+ "module": "src/internal/lyra-element.ts"
36974
+ }
36975
+ },
36976
+ {
36977
+ "kind": "field",
36978
+ "name": "maxHeight",
36979
+ "type": {
36980
+ "text": "string"
36981
+ },
36982
+ "default": "''",
36983
+ "description": "A CSS length (e.g. `\"20rem\"`); once set, the viewer scrolls internally past this height instead of growing the page.",
36984
+ "attribute": "max-height"
36985
+ },
36986
+ {
36987
+ "kind": "field",
36988
+ "name": "search",
36989
+ "type": {
36990
+ "text": "string"
36991
+ },
36992
+ "default": "''",
36993
+ "description": "Case-insensitive substring match against keys/values; matches are highlighted and their ancestors auto-expanded.",
36994
+ "attribute": "search"
36995
+ },
36996
+ {
36997
+ "kind": "field",
36998
+ "name": "searchState",
36999
+ "type": {
37000
+ "text": "SearchState"
37001
+ },
37002
+ "privacy": "private",
37003
+ "default": "{ keyMatches: new Set(), valueMatches: new Set(), forceExpand: new Set(), paths: new Set(), }",
37004
+ "description": "Memoized result of the last `computeSearch()` walk -- see `willUpdate()`."
35797
37005
  },
35798
37006
  {
35799
37007
  "kind": "field",
@@ -61139,12 +62347,20 @@
61139
62347
  "declarations": [
61140
62348
  {
61141
62349
  "kind": "class",
61142
- "description": "`<lyra-tool-result-view>` — renders a tool call's result via whichever\ncustom renderer a host app has registered for it (see `registerToolRenderer()`\nin `registry.ts`), falling back to `<lyra-json-viewer>` whenever no\nrenderer matches, a candidate renderer's `matches()` predicate throws during\ndispatch, a renderer's optional `load()` rejects, or its `render()` throws.\nThis component owns none of the actual visual weight of a\npopulated tool result — that's entirely whatever the registered renderer\nreturns; this is just the dispatch + fallback + loading-state shell.\n\nDispatch runs against `registry` when set, otherwise against the\nmodule-level default registry `registerToolRenderer()` writes to — see\n`findToolRenderer()`'s two-step (exact name, then shape-based `matches()`)\nlookup order for the full rule.\n\n`fallback` only implements `\"json\"` today (an unconditional\n`<lyra-json-viewer>`) but is still accepted/reflected as an attribute so a\nconsumer's markup that already sets `fallback=\"…\"` for some future value\ndoesn't need to change again once more fallback kinds land.",
62350
+ "description": "`<lyra-tool-result-view>` — renders a tool call's result via whichever\ncustom renderer a host app has registered for it (see `registerToolRenderer()`\nin `registry.ts`), falling back to `<lyra-json-viewer>` whenever no\nrenderer matches, a candidate renderer's `matches()` predicate throws during\ndispatch, a renderer's optional `load()` rejects, or its `render()` throws.\nThis component owns none of the actual visual weight of a\npopulated tool result — that's entirely whatever the registered renderer\nreturns; this is just the dispatch + fallback + loading-state shell.\n\nDispatch runs against `registry` when set, otherwise against the\nmodule-level default registry `registerToolRenderer()` writes to — see\n`findToolRenderer()`'s two-step (exact name, then shape-based `matches()`)\nlookup order for the full rule.\n\n`fallback` implements two kinds: `\"json\"` (the default, an unconditional `<lyra-json-viewer>`)\nand `\"text\"`, which renders a *string* `result` as preformatted text instead — falling back to\nthe `\"json\"` behavior when `result` isn't a string, so setting `fallback=\"text\"` defensively\nagainst an unpredictable result shape never renders broken output. `copyable` adds a\ncopy-to-clipboard affordance to either fallback kind (forwarded to `<lyra-json-viewer>`'s own\n`copyable` for `\"json\"`; a `<lyra-copy-button>` alongside the text for `\"text\"`).",
61143
62351
  "name": "LyraToolResultView",
61144
62352
  "cssParts": [
61145
62353
  {
61146
62354
  "description": "The root wrapper around the resolved renderer's output (or the loading/fallback view).",
61147
62355
  "name": "base"
62356
+ },
62357
+ {
62358
+ "description": "The `<lyra-copy-button>` shown when `copyable` is set alongside the `fallback=\"text\"` kind (only present when both are set).",
62359
+ "name": "fallback-copy"
62360
+ },
62361
+ {
62362
+ "description": "The `<pre>` element for the `fallback=\"text\"` kind's preformatted result text (only present in that mode).",
62363
+ "name": "fallback-text"
61148
62364
  }
61149
62365
  ],
61150
62366
  "members": [
@@ -61156,6 +62372,17 @@
61156
62372
  },
61157
62373
  "description": "The tool call's original arguments, if available — handed to the matched renderer's `render()` alongside `result`."
61158
62374
  },
62375
+ {
62376
+ "kind": "field",
62377
+ "name": "copyable",
62378
+ "type": {
62379
+ "text": "boolean"
62380
+ },
62381
+ "default": "false",
62382
+ "description": "Shows a copy-to-clipboard affordance alongside the fallback view (both `\"json\"` and `\"text\"` kinds) — forwarded to `<lyra-json-viewer>`'s own `copyable`, or renders a `<lyra-copy-button>` next to the text fallback.",
62383
+ "attribute": "copyable",
62384
+ "reflects": true
62385
+ },
61159
62386
  {
61160
62387
  "kind": "field",
61161
62388
  "name": "effectiveDirection",
@@ -61191,7 +62418,7 @@
61191
62418
  "text": "string"
61192
62419
  },
61193
62420
  "default": "'json'",
61194
- "description": "Forward-compatible fallback-kind selector — see the class doc; only `\"json\"` is implemented today.",
62421
+ "description": "Fallback-kind selector — see the class doc's `fallback` paragraph for the full \"json\" vs \"text\" behavior.",
61195
62422
  "attribute": "fallback",
61196
62423
  "reflects": true
61197
62424
  },
@@ -61447,6 +62674,16 @@
61447
62674
  "module": "src/internal/lyra-element.ts"
61448
62675
  }
61449
62676
  },
62677
+ {
62678
+ "kind": "method",
62679
+ "name": "renderFallback",
62680
+ "privacy": "private",
62681
+ "return": {
62682
+ "type": {
62683
+ "text": "unknown"
62684
+ }
62685
+ }
62686
+ },
61450
62687
  {
61451
62688
  "kind": "method",
61452
62689
  "name": "renderWith",
@@ -61483,13 +62720,22 @@
61483
62720
  }
61484
62721
  ],
61485
62722
  "attributes": [
62723
+ {
62724
+ "name": "copyable",
62725
+ "type": {
62726
+ "text": "boolean"
62727
+ },
62728
+ "default": "false",
62729
+ "description": "Shows a copy-to-clipboard affordance alongside the fallback view (both `\"json\"` and `\"text\"` kinds) — forwarded to `<lyra-json-viewer>`'s own `copyable`, or renders a `<lyra-copy-button>` next to the text fallback.",
62730
+ "fieldName": "copyable"
62731
+ },
61486
62732
  {
61487
62733
  "name": "fallback",
61488
62734
  "type": {
61489
62735
  "text": "string"
61490
62736
  },
61491
62737
  "default": "'json'",
61492
- "description": "Forward-compatible fallback-kind selector — see the class doc; only `\"json\"` is implemented today.",
62738
+ "description": "Fallback-kind selector — see the class doc's `fallback` paragraph for the full \"json\" vs \"text\" behavior.",
61493
62739
  "fieldName": "fallback"
61494
62740
  },
61495
62741
  {