@kerfjs/ui 5.0.0-beta.24 → 5.0.0-beta.25
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.
- package/README.md +44 -23
- package/ai/application-ui-diagnostic-ids-v1.json +3 -0
- package/ai/application-ui-profile.defaults.json +1 -1
- package/ai/compile-time-contracts-v1.json +3 -11
- package/ai/component-catalog-v2-overrides.json +7 -37
- package/ai/component-catalog-v2.d.ts +1 -0
- package/ai/component-catalog-v2.json +415 -91
- package/ai/component-catalog-v2.schema.json +2 -1
- package/ai/component-catalog.json +602 -158
- package/ai/public-api-signatures-v1.md +132 -65
- package/ai/skill.md +20 -20
- package/ai/webawesome-jsx-signatures-v1.md +2 -1
- package/analyzer/cli.mjs +5 -2
- package/analyzer/index.d.mts +1 -0
- package/analyzer/index.mjs +117 -10
- package/dist/app-tab.d.ts +10 -2
- package/dist/app-tab.js +1 -1
- package/dist/browser/list-action-row.js +1 -0
- package/dist/browser/list-item.js +1 -0
- package/dist/browser/surface-scaffold.js +3 -0
- package/dist/catalog.js +5 -4
- package/dist/catalog.js.map +1 -1
- package/dist/{chunk-FEAMR7S4.js → chunk-4EF2CMYS.js} +24 -5
- package/dist/chunk-4EF2CMYS.js.map +1 -0
- package/dist/{chunk-NWSEP5RT.js → chunk-FRVS5RFM.js} +23 -5
- package/dist/chunk-FRVS5RFM.js.map +1 -0
- package/dist/{chunk-PSKN344N.js → chunk-GWEAPEZI.js} +15 -2
- package/dist/chunk-GWEAPEZI.js.map +1 -0
- package/dist/chunk-HP2B2L26.js +102 -0
- package/dist/chunk-HP2B2L26.js.map +1 -0
- package/dist/{chunk-OJWWHFH3.js → chunk-JFGXQBIP.js} +49 -23
- package/dist/chunk-JFGXQBIP.js.map +1 -0
- package/dist/chunk-OBLTAKSX.js +43 -0
- package/dist/chunk-OBLTAKSX.js.map +1 -0
- package/dist/{chunk-Y45PPBDV.js → chunk-OT6RPYAP.js} +16 -2
- package/dist/chunk-OT6RPYAP.js.map +1 -0
- package/dist/{chunk-UFZKLBCF.js → chunk-VCE4MPVE.js} +25 -3
- package/dist/chunk-VCE4MPVE.js.map +1 -0
- package/dist/{chunk-5VTB2BKP.js → chunk-WNWD54GR.js} +16 -2
- package/dist/chunk-WNWD54GR.js.map +1 -0
- package/dist/{chunk-M7JBER5U.js → chunk-X2U3QJCJ.js} +8 -2
- package/dist/chunk-X2U3QJCJ.js.map +1 -0
- package/dist/{chunk-DPDBVKNA.js → chunk-YMKH5XTF.js} +5 -3
- package/dist/chunk-YMKH5XTF.js.map +1 -0
- package/dist/collapsible-panel.d.ts +9 -1
- package/dist/collapsible-panel.js +36 -15
- package/dist/collapsible-panel.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +12 -12
- package/dist/list-action-row.d.ts +11 -1
- package/dist/list-action-row.js +2 -1
- package/dist/list-header.d.ts +15 -2
- package/dist/list-header.js +1 -1
- package/dist/list-item.d.ts +12 -1
- package/dist/list-item.js +2 -1
- package/dist/resizable-region.d.ts +19 -2
- package/dist/resizable-region.js +1 -1
- package/dist/select.d.ts +12 -1
- package/dist/select.js +1 -1
- package/dist/split-view.js +1 -1
- package/dist/styles/app-tab.css +26 -0
- package/dist/styles/collapsible-panel.css +66 -4
- package/dist/styles/list-action-row.css +64 -0
- package/dist/styles/list-header.css +32 -0
- package/dist/styles/list-item.css +39 -0
- package/dist/styles/resizable-region.css +132 -0
- package/dist/styles/select.css +68 -0
- package/dist/styles/styles.css +1 -1
- package/dist/styles/surface-scaffold.css +51 -0
- package/dist/styles/tab-bar.css +24 -0
- package/dist/styles/toolbar-control-group.css +73 -1
- package/dist/styles/toolbar-text.css +1 -1
- package/dist/styles/webawesome.css +12 -0
- package/dist/styles/workbench.css +89 -0
- package/dist/surface-scaffold.d.ts +25 -0
- package/dist/surface-scaffold.js +3 -0
- package/dist/surface-scaffold.js.map +1 -0
- package/dist/tab-bar.d.ts +11 -2
- package/dist/tab-bar.js +1 -1
- package/dist/toolbar-control-group.d.ts +16 -2
- package/dist/toolbar-control-group.js +1 -1
- package/dist/webawesome.d.ts +1 -0
- package/dist/wire-resizable-regions.js +1 -1
- package/dist/wire-sidebar.d.ts +6 -1
- package/dist/wire-sidebar.js +27 -8
- package/dist/wire-sidebar.js.map +1 -1
- package/dist/wire-token-search-fields.js +1 -1
- package/dist/workbench.d.ts +8 -0
- package/dist/workbench.js +42 -0
- package/dist/workbench.js.map +1 -1
- package/docs/accessibility.md +55 -12
- package/docs/collapsible-panel.md +7 -0
- package/docs/component-contract.md +5 -8
- package/docs/component-selection.md +63 -33
- package/docs/design/templates.md +5 -7
- package/docs/examples/component-catalog-extension-v2.json +3 -6
- package/docs/examples/component-catalog-extension.json +1 -1
- package/docs/layout.md +7 -9
- package/docs/recipes.md +8 -7
- package/docs/surface-scaffold.md +17 -0
- package/docs/type-contracts.md +6 -8
- package/docs/ui-analyzer.md +19 -1
- package/docs/ui-doctor.md +1 -1
- package/docs/ux-demo.md +6 -3
- package/docs/webawesome-theme.md +4 -1
- package/docs/workbench.md +49 -2
- package/doctor/eslint-diagnostics.d.mts +16 -0
- package/doctor/eslint-diagnostics.mjs +17 -0
- package/doctor/index.mjs +16 -1
- package/llms.txt +19 -9
- package/package.json +7 -7
- package/ux-demo/recipes/app-shell.tsx +36 -23
- package/ux-demo/recipes/collapsible-sidebar.tsx +22 -16
- package/ux-demo/recipes/composer-form.tsx +15 -6
- package/ux-demo/recipes/list-detail-dialog.tsx +31 -15
- package/ux-demo/recipes/list-workspace-states.tsx +16 -7
- package/ux-demo/recipes/loading-inspector.tsx +39 -18
- package/ux-demo/recipes/recipes.css +7 -2
- package/ux-demo/recipes/workspace-header.tsx +17 -7
- package/dist/browser/panel-header.js +0 -7
- package/dist/chunk-5VTB2BKP.js.map +0 -1
- package/dist/chunk-7XRDUG4Y.js +0 -58
- package/dist/chunk-7XRDUG4Y.js.map +0 -1
- package/dist/chunk-DPDBVKNA.js.map +0 -1
- package/dist/chunk-FEAMR7S4.js.map +0 -1
- package/dist/chunk-M7JBER5U.js.map +0 -1
- package/dist/chunk-NENBUYX5.js +0 -79
- package/dist/chunk-NENBUYX5.js.map +0 -1
- package/dist/chunk-NWSEP5RT.js.map +0 -1
- package/dist/chunk-OJWWHFH3.js.map +0 -1
- package/dist/chunk-PSKN344N.js.map +0 -1
- package/dist/chunk-UFZKLBCF.js.map +0 -1
- package/dist/chunk-Y45PPBDV.js.map +0 -1
- package/dist/panel-header.d.ts +0 -42
- package/dist/panel-header.js +0 -7
- package/dist/panel-header.js.map +0 -1
- package/dist/styles/panel-header.css +0 -64
- package/docs/design/templates/panel-header/icon-actions-dark.svg +0 -1
- package/docs/design/templates/panel-header/icon-actions.svg +0 -1
- package/docs/design/templates/panel-header/icon-summary-actions-dark.svg +0 -1
- package/docs/design/templates/panel-header/icon-summary-actions.svg +0 -1
- package/docs/design/templates/panel-header/no-icon-dark.svg +0 -1
- package/docs/design/templates/panel-header/no-icon.svg +0 -1
- package/docs/design/templates/panel-header/page-heading-dark.svg +0 -1
- package/docs/design/templates/panel-header/page-heading.svg +0 -1
- package/docs/design/templates/panel-header/title-only-dark.svg +0 -1
- package/docs/design/templates/panel-header/title-only.svg +0 -1
- package/docs/design/templates/panel-header-dark.svg +0 -1
- package/docs/design/templates/panel-header.svg +0 -1
|
@@ -433,6 +433,240 @@
|
|
|
433
433
|
"composition": "generated-permissive-default"
|
|
434
434
|
}
|
|
435
435
|
},
|
|
436
|
+
{
|
|
437
|
+
"key": "@kerfjs/ui:nav-stack",
|
|
438
|
+
"package": "@kerfjs/ui",
|
|
439
|
+
"id": "nav-stack",
|
|
440
|
+
"name": "NavStack",
|
|
441
|
+
"kind": "component",
|
|
442
|
+
"source": "kerf",
|
|
443
|
+
"parents": { "mode": "any", "entries": [] },
|
|
444
|
+
"contexts": ["application-ui"],
|
|
445
|
+
"zones": [],
|
|
446
|
+
"children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
|
|
447
|
+
"state": [
|
|
448
|
+
{
|
|
449
|
+
"id": "ordered view stack and stable keys",
|
|
450
|
+
"owner": "application",
|
|
451
|
+
"required": false
|
|
452
|
+
},
|
|
453
|
+
{
|
|
454
|
+
"id": "view content and titles",
|
|
455
|
+
"owner": "application",
|
|
456
|
+
"required": false
|
|
457
|
+
},
|
|
458
|
+
{
|
|
459
|
+
"id": "push and pop actions",
|
|
460
|
+
"owner": "application",
|
|
461
|
+
"required": false
|
|
462
|
+
},
|
|
463
|
+
{
|
|
464
|
+
"id": "focus restoration policy",
|
|
465
|
+
"owner": "application",
|
|
466
|
+
"required": false
|
|
467
|
+
},
|
|
468
|
+
{
|
|
469
|
+
"id": "optional persistent bottom toolbar",
|
|
470
|
+
"owner": "application",
|
|
471
|
+
"required": false
|
|
472
|
+
}
|
|
473
|
+
],
|
|
474
|
+
"wiring": {
|
|
475
|
+
"required": true,
|
|
476
|
+
"helpers": ["wireNavStack"],
|
|
477
|
+
"obligations": ["Use wireNavStack as documented."]
|
|
478
|
+
},
|
|
479
|
+
"responsive": { "owner": "not-applicable", "behaviors": [] },
|
|
480
|
+
"layout": {
|
|
481
|
+
"roles": ["structure"],
|
|
482
|
+
"geometry": {
|
|
483
|
+
"margin": "none",
|
|
484
|
+
"border": "conditional",
|
|
485
|
+
"padding": "child",
|
|
486
|
+
"notes": [
|
|
487
|
+
"The stack owns its full-height chrome and viewport; each view owns its internal content padding and scrollable content."
|
|
488
|
+
]
|
|
489
|
+
}
|
|
490
|
+
},
|
|
491
|
+
"accessibility": {
|
|
492
|
+
"obligations": [
|
|
493
|
+
"Give the stack region an accessible label and every back control a stable action label.",
|
|
494
|
+
"Wire pop behavior and restore focus to the control that opened the departing view after the controlled rerender."
|
|
495
|
+
]
|
|
496
|
+
},
|
|
497
|
+
"boundaries": {
|
|
498
|
+
"rootClass": "kui-nav-stack",
|
|
499
|
+
"publicClasses": [
|
|
500
|
+
"kui-nav-stack",
|
|
501
|
+
"kui-nav-stack__chrome",
|
|
502
|
+
"kui-nav-stack__lead",
|
|
503
|
+
"kui-nav-stack__back",
|
|
504
|
+
"kui-nav-stack__back-icon",
|
|
505
|
+
"kui-nav-stack__title",
|
|
506
|
+
"kui-nav-stack__actions",
|
|
507
|
+
"kui-nav-stack__viewport",
|
|
508
|
+
"kui-nav-stack__view",
|
|
509
|
+
"kui-nav-stack__view--entering",
|
|
510
|
+
"kui-nav-stack__view--exiting",
|
|
511
|
+
"kui-nav-stack__bottom"
|
|
512
|
+
],
|
|
513
|
+
"publicTokens": []
|
|
514
|
+
},
|
|
515
|
+
"diagnostics": [],
|
|
516
|
+
"provenance": {
|
|
517
|
+
"selection": "ai/component-catalog.json",
|
|
518
|
+
"composition": "generated-permissive-default"
|
|
519
|
+
}
|
|
520
|
+
},
|
|
521
|
+
{
|
|
522
|
+
"key": "@kerfjs/ui:split-view",
|
|
523
|
+
"package": "@kerfjs/ui",
|
|
524
|
+
"id": "split-view",
|
|
525
|
+
"name": "SplitView",
|
|
526
|
+
"kind": "component",
|
|
527
|
+
"source": "kerf",
|
|
528
|
+
"parents": { "mode": "any", "entries": [] },
|
|
529
|
+
"contexts": ["application-ui"],
|
|
530
|
+
"zones": [],
|
|
531
|
+
"children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
|
|
532
|
+
"state": [
|
|
533
|
+
{
|
|
534
|
+
"id": "device-class policy",
|
|
535
|
+
"owner": "application",
|
|
536
|
+
"required": false
|
|
537
|
+
},
|
|
538
|
+
{
|
|
539
|
+
"id": "selected item and detail-active state",
|
|
540
|
+
"owner": "application",
|
|
541
|
+
"required": false
|
|
542
|
+
},
|
|
543
|
+
{
|
|
544
|
+
"id": "list and detail content",
|
|
545
|
+
"owner": "application",
|
|
546
|
+
"required": false
|
|
547
|
+
},
|
|
548
|
+
{
|
|
549
|
+
"id": "optional list width and persistence",
|
|
550
|
+
"owner": "application",
|
|
551
|
+
"required": false
|
|
552
|
+
},
|
|
553
|
+
{ "id": "back action", "owner": "application", "required": false }
|
|
554
|
+
],
|
|
555
|
+
"wiring": {
|
|
556
|
+
"required": true,
|
|
557
|
+
"helpers": ["wireResizableRegions", "wireNavStack"],
|
|
558
|
+
"obligations": ["Use wireNavStack as documented."]
|
|
559
|
+
},
|
|
560
|
+
"responsive": { "owner": "not-applicable", "behaviors": [] },
|
|
561
|
+
"layout": {
|
|
562
|
+
"roles": ["structure"],
|
|
563
|
+
"geometry": {
|
|
564
|
+
"margin": "none",
|
|
565
|
+
"border": "self",
|
|
566
|
+
"padding": "child",
|
|
567
|
+
"notes": [
|
|
568
|
+
"The root owns the two-column split and the list pane owns its separator; list and detail content own their internal padding and scroll behavior."
|
|
569
|
+
]
|
|
570
|
+
}
|
|
571
|
+
},
|
|
572
|
+
"accessibility": {
|
|
573
|
+
"obligations": [
|
|
574
|
+
"Give the overall split and both meaningful panes accessible labels.",
|
|
575
|
+
"Wire the compact back action and optional separator keyboard behavior, and restore focus when controlled navigation replaces a view."
|
|
576
|
+
]
|
|
577
|
+
},
|
|
578
|
+
"boundaries": {
|
|
579
|
+
"rootClass": "kui-split-view",
|
|
580
|
+
"publicClasses": [
|
|
581
|
+
"kui-split-view",
|
|
582
|
+
"kui-split-view__list",
|
|
583
|
+
"kui-resizable-region",
|
|
584
|
+
"kui-split-view__detail",
|
|
585
|
+
"kui-split-view--compact"
|
|
586
|
+
],
|
|
587
|
+
"publicTokens": ["--kui-split-view-list-width"]
|
|
588
|
+
},
|
|
589
|
+
"diagnostics": [],
|
|
590
|
+
"provenance": {
|
|
591
|
+
"selection": "ai/component-catalog.json",
|
|
592
|
+
"composition": "generated-permissive-default"
|
|
593
|
+
}
|
|
594
|
+
},
|
|
595
|
+
{
|
|
596
|
+
"key": "@kerfjs/ui:tab-scaffold",
|
|
597
|
+
"package": "@kerfjs/ui",
|
|
598
|
+
"id": "tab-scaffold",
|
|
599
|
+
"name": "TabScaffold",
|
|
600
|
+
"kind": "component",
|
|
601
|
+
"source": "kerf",
|
|
602
|
+
"parents": { "mode": "any", "entries": [] },
|
|
603
|
+
"contexts": ["application-ui"],
|
|
604
|
+
"zones": [],
|
|
605
|
+
"children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
|
|
606
|
+
"state": [
|
|
607
|
+
{
|
|
608
|
+
"id": "controlled active tab id",
|
|
609
|
+
"owner": "application",
|
|
610
|
+
"required": false
|
|
611
|
+
},
|
|
612
|
+
{
|
|
613
|
+
"id": "tab labels, icons, and content",
|
|
614
|
+
"owner": "application",
|
|
615
|
+
"required": false
|
|
616
|
+
},
|
|
617
|
+
{
|
|
618
|
+
"id": "routing and persistence",
|
|
619
|
+
"owner": "application",
|
|
620
|
+
"required": false
|
|
621
|
+
},
|
|
622
|
+
{
|
|
623
|
+
"id": "responsive replacement on larger device classes",
|
|
624
|
+
"owner": "application",
|
|
625
|
+
"required": false
|
|
626
|
+
}
|
|
627
|
+
],
|
|
628
|
+
"wiring": {
|
|
629
|
+
"required": true,
|
|
630
|
+
"helpers": ["wireTabScaffold"],
|
|
631
|
+
"obligations": ["Use wireTabScaffold as documented."]
|
|
632
|
+
},
|
|
633
|
+
"responsive": { "owner": "not-applicable", "behaviors": [] },
|
|
634
|
+
"layout": {
|
|
635
|
+
"roles": ["structure"],
|
|
636
|
+
"geometry": {
|
|
637
|
+
"margin": "none",
|
|
638
|
+
"border": "self",
|
|
639
|
+
"padding": "self",
|
|
640
|
+
"notes": [
|
|
641
|
+
"The scaffold owns the full-height scene region and safe-area-aware bottom bar; scene content owns its internal geometry."
|
|
642
|
+
]
|
|
643
|
+
}
|
|
644
|
+
},
|
|
645
|
+
"accessibility": {
|
|
646
|
+
"obligations": [
|
|
647
|
+
"Give the tablist an accessible label and keep exactly the active tab in the sequential focus order.",
|
|
648
|
+
"Wire selection through the controlled active id while leaving inactive scenes mounted and hidden."
|
|
649
|
+
]
|
|
650
|
+
},
|
|
651
|
+
"boundaries": {
|
|
652
|
+
"rootClass": "kui-tab-scaffold",
|
|
653
|
+
"publicClasses": [
|
|
654
|
+
"kui-tab-scaffold",
|
|
655
|
+
"kui-tab-scaffold__scenes",
|
|
656
|
+
"kui-tab-scaffold__scene",
|
|
657
|
+
"kui-tab-scaffold__bar",
|
|
658
|
+
"kui-tab-scaffold__tab",
|
|
659
|
+
"kui-tab-scaffold__tab-icon",
|
|
660
|
+
"kui-tab-scaffold__tab-label"
|
|
661
|
+
],
|
|
662
|
+
"publicTokens": []
|
|
663
|
+
},
|
|
664
|
+
"diagnostics": [],
|
|
665
|
+
"provenance": {
|
|
666
|
+
"selection": "ai/component-catalog.json",
|
|
667
|
+
"composition": "generated-permissive-default"
|
|
668
|
+
}
|
|
669
|
+
},
|
|
436
670
|
{
|
|
437
671
|
"key": "@kerfjs/ui:workbench",
|
|
438
672
|
"package": "@kerfjs/ui",
|
|
@@ -489,14 +723,106 @@
|
|
|
489
723
|
"kui-workbench__rail",
|
|
490
724
|
"kui-workbench__rail--left",
|
|
491
725
|
"kui-workbench__rail--right",
|
|
726
|
+
"kui-workbench__drawer",
|
|
492
727
|
"kui-workbench__center",
|
|
493
728
|
"kui-workbench__main",
|
|
494
|
-
"kui-
|
|
495
|
-
"kui-
|
|
729
|
+
"kui-workbench__panel-content",
|
|
730
|
+
"kui-workbench__restore"
|
|
496
731
|
],
|
|
497
732
|
"publicTokens": [
|
|
498
733
|
"--kui-workbench-rail-width",
|
|
499
|
-
"--kui-workbench-drawer-height"
|
|
734
|
+
"--kui-workbench-drawer-height",
|
|
735
|
+
"--kui-workbench-popup-z",
|
|
736
|
+
"--kui-workbench-overlay-z",
|
|
737
|
+
"--kui-workbench-overlay-max-width",
|
|
738
|
+
"--kui-workbench-overlay-max-height",
|
|
739
|
+
"--kui-workbench-restore-z",
|
|
740
|
+
"--kui-workbench-restore-inset"
|
|
741
|
+
]
|
|
742
|
+
},
|
|
743
|
+
"diagnostics": [],
|
|
744
|
+
"provenance": {
|
|
745
|
+
"selection": "ai/component-catalog.json",
|
|
746
|
+
"composition": "generated-permissive-default"
|
|
747
|
+
}
|
|
748
|
+
},
|
|
749
|
+
{
|
|
750
|
+
"key": "@kerfjs/ui:collapsible-panel",
|
|
751
|
+
"package": "@kerfjs/ui",
|
|
752
|
+
"id": "collapsible-panel",
|
|
753
|
+
"name": "CollapsiblePanel",
|
|
754
|
+
"kind": "component",
|
|
755
|
+
"source": "kerf",
|
|
756
|
+
"parents": { "mode": "any", "entries": [] },
|
|
757
|
+
"contexts": ["application-ui"],
|
|
758
|
+
"zones": [],
|
|
759
|
+
"children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
|
|
760
|
+
"state": [
|
|
761
|
+
{
|
|
762
|
+
"id": "controlled collapsed state",
|
|
763
|
+
"owner": "application",
|
|
764
|
+
"required": false
|
|
765
|
+
},
|
|
766
|
+
{
|
|
767
|
+
"id": "panel content and size",
|
|
768
|
+
"owner": "application",
|
|
769
|
+
"required": false
|
|
770
|
+
},
|
|
771
|
+
{ "id": "toggle placement", "owner": "application", "required": false },
|
|
772
|
+
{
|
|
773
|
+
"id": "persistence policy",
|
|
774
|
+
"owner": "application",
|
|
775
|
+
"required": false
|
|
776
|
+
},
|
|
777
|
+
{
|
|
778
|
+
"id": "compact-device policy",
|
|
779
|
+
"owner": "application",
|
|
780
|
+
"required": false
|
|
781
|
+
}
|
|
782
|
+
],
|
|
783
|
+
"wiring": {
|
|
784
|
+
"required": true,
|
|
785
|
+
"helpers": ["wireSidebar"],
|
|
786
|
+
"obligations": ["Use wireSidebar as documented."]
|
|
787
|
+
},
|
|
788
|
+
"responsive": { "owner": "not-applicable", "behaviors": [] },
|
|
789
|
+
"layout": {
|
|
790
|
+
"roles": ["structure"],
|
|
791
|
+
"geometry": {
|
|
792
|
+
"margin": "none",
|
|
793
|
+
"border": "self",
|
|
794
|
+
"padding": "child",
|
|
795
|
+
"notes": [
|
|
796
|
+
"The panel owns its dock-edge separator and size track; its child content owns internal padding and scrolling."
|
|
797
|
+
]
|
|
798
|
+
}
|
|
799
|
+
},
|
|
800
|
+
"accessibility": {
|
|
801
|
+
"obligations": [
|
|
802
|
+
"Give the panel region and every collapse or restore control an accessible label.",
|
|
803
|
+
"Keep the restore control outside the disappearing panel and use wireSidebar for focus transfer, Escape, backdrop dismissal, and compact focus trapping."
|
|
804
|
+
]
|
|
805
|
+
},
|
|
806
|
+
"boundaries": {
|
|
807
|
+
"rootClass": "kui-collapsible-panel",
|
|
808
|
+
"publicClasses": [
|
|
809
|
+
"kui-collapsible-panel",
|
|
810
|
+
"kui-collapsible-panel--left",
|
|
811
|
+
"kui-collapsible-panel--right",
|
|
812
|
+
"kui-collapsible-panel--bottom",
|
|
813
|
+
"kui-collapsible-panel__content",
|
|
814
|
+
"kui-collapsible-panel__restore",
|
|
815
|
+
"kui-collapsible-panel__backdrop",
|
|
816
|
+
"kui-collapsible-panel__toggle"
|
|
817
|
+
],
|
|
818
|
+
"publicTokens": [
|
|
819
|
+
"--kui-collapsible-panel-width",
|
|
820
|
+
"--kui-collapsible-panel-height",
|
|
821
|
+
"--kui-collapsible-panel-popup-z",
|
|
822
|
+
"--kui-collapsible-panel-overlay-z",
|
|
823
|
+
"--kui-collapsible-panel-restore-z",
|
|
824
|
+
"--kui-collapsible-panel-restore-inset",
|
|
825
|
+
"--kui-collapsible-panel-backdrop-z"
|
|
500
826
|
]
|
|
501
827
|
},
|
|
502
828
|
"diagnostics": [],
|
|
@@ -573,7 +899,12 @@
|
|
|
573
899
|
"kind": "component",
|
|
574
900
|
"source": "kerf",
|
|
575
901
|
"parents": { "mode": "any", "entries": [] },
|
|
576
|
-
"contexts": [
|
|
902
|
+
"contexts": [
|
|
903
|
+
"application-chrome",
|
|
904
|
+
"page-header",
|
|
905
|
+
"panel-header",
|
|
906
|
+
"dialog-header"
|
|
907
|
+
],
|
|
577
908
|
"zones": [
|
|
578
909
|
{
|
|
579
910
|
"id": "leading",
|
|
@@ -664,10 +995,7 @@
|
|
|
664
995
|
"name": "ToolbarControlGroup",
|
|
665
996
|
"kind": "component",
|
|
666
997
|
"source": "kerf",
|
|
667
|
-
"parents": {
|
|
668
|
-
"mode": "listed",
|
|
669
|
-
"entries": ["@kerfjs/ui:toolbar", "@kerfjs/ui:panel-header"]
|
|
670
|
-
},
|
|
998
|
+
"parents": { "mode": "listed", "entries": ["@kerfjs/ui:toolbar"] },
|
|
671
999
|
"contexts": ["toolbar-zone"],
|
|
672
1000
|
"zones": [
|
|
673
1001
|
{
|
|
@@ -731,6 +1059,51 @@
|
|
|
731
1059
|
"composition": "docs/component-selection.md#toolbar-composition"
|
|
732
1060
|
}
|
|
733
1061
|
},
|
|
1062
|
+
{
|
|
1063
|
+
"key": "@kerfjs/ui:surface-scaffold",
|
|
1064
|
+
"package": "@kerfjs/ui",
|
|
1065
|
+
"id": "surface-scaffold",
|
|
1066
|
+
"name": "Surface scaffolds",
|
|
1067
|
+
"kind": "component",
|
|
1068
|
+
"source": "kerf",
|
|
1069
|
+
"parents": { "mode": "any", "entries": [] },
|
|
1070
|
+
"contexts": ["application-ui"],
|
|
1071
|
+
"zones": [],
|
|
1072
|
+
"children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
|
|
1073
|
+
"state": [
|
|
1074
|
+
{ "id": "open state", "owner": "application", "required": false },
|
|
1075
|
+
{ "id": "focus lifecycle", "owner": "application", "required": false },
|
|
1076
|
+
{ "id": "dismissal policy", "owner": "application", "required": false },
|
|
1077
|
+
{ "id": "content", "owner": "application", "required": false },
|
|
1078
|
+
{ "id": "outer placement", "owner": "application", "required": false }
|
|
1079
|
+
],
|
|
1080
|
+
"wiring": { "required": false, "helpers": [], "obligations": [] },
|
|
1081
|
+
"responsive": { "owner": "not-applicable", "behaviors": [] },
|
|
1082
|
+
"layout": {
|
|
1083
|
+
"roles": ["structure"],
|
|
1084
|
+
"geometry": { "margin": "parent", "border": "child", "padding": "self" }
|
|
1085
|
+
},
|
|
1086
|
+
"accessibility": {
|
|
1087
|
+
"obligations": [
|
|
1088
|
+
"Supply the wrapped wa-dialog label and retain Web Awesome's native modal and focus behavior.",
|
|
1089
|
+
"Use popup surfaces only for real dropdown menus with named triggers."
|
|
1090
|
+
]
|
|
1091
|
+
},
|
|
1092
|
+
"boundaries": {
|
|
1093
|
+
"rootClass": "kui-dialog-surface",
|
|
1094
|
+
"publicClasses": ["kui-dialog-surface", "kui-popup-surface"],
|
|
1095
|
+
"publicTokens": [
|
|
1096
|
+
"--kui-radius-l",
|
|
1097
|
+
"--kui-wa-container-inset",
|
|
1098
|
+
"--kui-wa-surface-inset"
|
|
1099
|
+
]
|
|
1100
|
+
},
|
|
1101
|
+
"diagnostics": [],
|
|
1102
|
+
"provenance": {
|
|
1103
|
+
"selection": "ai/component-catalog.json",
|
|
1104
|
+
"composition": "generated-permissive-default"
|
|
1105
|
+
}
|
|
1106
|
+
},
|
|
734
1107
|
{
|
|
735
1108
|
"key": "@kerfjs/ui:floating-toolbar",
|
|
736
1109
|
"package": "@kerfjs/ui",
|
|
@@ -858,81 +1231,6 @@
|
|
|
858
1231
|
"composition": "generated-permissive-default"
|
|
859
1232
|
}
|
|
860
1233
|
},
|
|
861
|
-
{
|
|
862
|
-
"key": "@kerfjs/ui:panel-header",
|
|
863
|
-
"package": "@kerfjs/ui",
|
|
864
|
-
"id": "panel-header",
|
|
865
|
-
"name": "PanelHeader",
|
|
866
|
-
"kind": "component",
|
|
867
|
-
"source": "kerf",
|
|
868
|
-
"parents": { "mode": "any", "entries": [] },
|
|
869
|
-
"contexts": ["page-header", "panel-header", "dialog-header"],
|
|
870
|
-
"zones": [
|
|
871
|
-
{
|
|
872
|
-
"id": "title",
|
|
873
|
-
"accepts": ["text"],
|
|
874
|
-
"cardinality": { "min": 1, "max": 1 },
|
|
875
|
-
"exclusiveWith": []
|
|
876
|
-
},
|
|
877
|
-
{
|
|
878
|
-
"id": "subtitle",
|
|
879
|
-
"accepts": ["text"],
|
|
880
|
-
"cardinality": { "min": 0, "max": 1 },
|
|
881
|
-
"exclusiveWith": []
|
|
882
|
-
},
|
|
883
|
-
{
|
|
884
|
-
"id": "controls",
|
|
885
|
-
"accepts": ["control"],
|
|
886
|
-
"cardinality": { "min": 0, "max": "unbounded" },
|
|
887
|
-
"exclusiveWith": []
|
|
888
|
-
}
|
|
889
|
-
],
|
|
890
|
-
"children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
|
|
891
|
-
"state": [
|
|
892
|
-
{ "id": "placeholder", "owner": "controlled", "required": false }
|
|
893
|
-
],
|
|
894
|
-
"wiring": { "required": false, "helpers": [], "obligations": [] },
|
|
895
|
-
"responsive": { "owner": "not-applicable", "behaviors": [] },
|
|
896
|
-
"layout": {
|
|
897
|
-
"roles": ["structure"],
|
|
898
|
-
"geometry": { "margin": "none", "border": "child", "padding": "child" }
|
|
899
|
-
},
|
|
900
|
-
"accessibility": {
|
|
901
|
-
"obligations": [
|
|
902
|
-
"Connect the title id and any provided summary id to the dialog or panel host.",
|
|
903
|
-
"Pass the trailing actions as a labeled ToolbarControlGroup when the group needs an accessible name.",
|
|
904
|
-
"For a page/view title pass headingLevel (usually 1) so the title exposes role=heading + aria-level as a heading landmark; omit it for a dialog title, which is referenced via aria-labelledby to titleId."
|
|
905
|
-
]
|
|
906
|
-
},
|
|
907
|
-
"boundaries": {
|
|
908
|
-
"rootClass": "kui-panel-header",
|
|
909
|
-
"publicClasses": [
|
|
910
|
-
"kui-panel-header",
|
|
911
|
-
"kui-panel-header__icon",
|
|
912
|
-
"kui-panel-header__summary"
|
|
913
|
-
],
|
|
914
|
-
"publicTokens": [
|
|
915
|
-
"--kui-color-brand-fill-quiet",
|
|
916
|
-
"--kui-color-brand-on-quiet",
|
|
917
|
-
"--kui-color-text-quiet",
|
|
918
|
-
"--kui-panel-header-icon-background",
|
|
919
|
-
"--kui-panel-header-icon-border",
|
|
920
|
-
"--kui-panel-header-icon-foreground"
|
|
921
|
-
]
|
|
922
|
-
},
|
|
923
|
-
"diagnostics": [
|
|
924
|
-
{
|
|
925
|
-
"id": "KUI-C102",
|
|
926
|
-
"severity": "error",
|
|
927
|
-
"when": "the title is absent",
|
|
928
|
-
"message": "PanelHeader requires a title that names its page, panel, or dialog."
|
|
929
|
-
}
|
|
930
|
-
],
|
|
931
|
-
"provenance": {
|
|
932
|
-
"selection": "ai/component-catalog.json",
|
|
933
|
-
"composition": "docs/component-selection.md#problem-to-component-matrix"
|
|
934
|
-
}
|
|
935
|
-
},
|
|
936
1234
|
{
|
|
937
1235
|
"key": "@kerfjs/ui:value-table",
|
|
938
1236
|
"package": "@kerfjs/ui",
|
|
@@ -1101,7 +1399,11 @@
|
|
|
1101
1399
|
"--kui-layout-item-padding",
|
|
1102
1400
|
"--kui-layout-pill-radius",
|
|
1103
1401
|
"--kui-list-header-count-font-size",
|
|
1104
|
-
"--kui-list-header-hover-background"
|
|
1402
|
+
"--kui-list-header-hover-background",
|
|
1403
|
+
"--kui-list-group-divider-color",
|
|
1404
|
+
"--kui-color-brand-on-normal",
|
|
1405
|
+
"--kui-color-danger-fill-normal",
|
|
1406
|
+
"--kui-color-danger-on-normal"
|
|
1105
1407
|
]
|
|
1106
1408
|
},
|
|
1107
1409
|
"diagnostics": [
|
|
@@ -1161,6 +1463,9 @@
|
|
|
1161
1463
|
"kui-list-action-row",
|
|
1162
1464
|
"kui-list-action-row__icon",
|
|
1163
1465
|
"kui-list-action-row__label",
|
|
1466
|
+
"kui-list-action-row__primary-label",
|
|
1467
|
+
"kui-list-action-row__description",
|
|
1468
|
+
"kui-list-action-row__status",
|
|
1164
1469
|
"kui-list-action-row__primary",
|
|
1165
1470
|
"kui-list-action-row__trailing-action"
|
|
1166
1471
|
],
|
|
@@ -1171,6 +1476,8 @@
|
|
|
1171
1476
|
"--kui-color-neutral-fill-normal",
|
|
1172
1477
|
"--kui-color-neutral-fill-quiet",
|
|
1173
1478
|
"--kui-color-neutral-on-normal",
|
|
1479
|
+
"--kui-color-neutral-on-quiet",
|
|
1480
|
+
"--kui-color-neutral-border-quiet",
|
|
1174
1481
|
"--kui-focus-ring",
|
|
1175
1482
|
"--kui-layout-inline-margin",
|
|
1176
1483
|
"--kui-layout-item-gap",
|
|
@@ -1185,7 +1492,9 @@
|
|
|
1185
1492
|
"--kui-list-action-row-selected-background",
|
|
1186
1493
|
"--kui-list-action-row-selected-border",
|
|
1187
1494
|
"--kui-list-action-row-selected-color",
|
|
1188
|
-
"--kui-list-action-row-trailing-hover-background"
|
|
1495
|
+
"--kui-list-action-row-trailing-hover-background",
|
|
1496
|
+
"--kui-list-group-divider-color",
|
|
1497
|
+
"--kui-font-xs"
|
|
1189
1498
|
]
|
|
1190
1499
|
},
|
|
1191
1500
|
"diagnostics": [],
|
|
@@ -1233,6 +1542,9 @@
|
|
|
1233
1542
|
"kui-list-item",
|
|
1234
1543
|
"kui-list-item__icon",
|
|
1235
1544
|
"kui-list-item__label",
|
|
1545
|
+
"kui-list-item__primary-label",
|
|
1546
|
+
"kui-list-item__description",
|
|
1547
|
+
"kui-list-item__status",
|
|
1236
1548
|
"kui-list-item__trailing"
|
|
1237
1549
|
],
|
|
1238
1550
|
"publicTokens": [
|
|
@@ -1240,11 +1552,14 @@
|
|
|
1240
1552
|
"--kui-color-neutral-fill-quiet",
|
|
1241
1553
|
"--kui-color-neutral-on-normal",
|
|
1242
1554
|
"--kui-color-neutral-on-quiet",
|
|
1555
|
+
"--kui-color-neutral-border-quiet",
|
|
1243
1556
|
"--kui-focus-ring",
|
|
1244
1557
|
"--kui-list-item-color",
|
|
1245
1558
|
"--kui-list-item-hover-background",
|
|
1246
1559
|
"--kui-list-item-selected-background",
|
|
1247
1560
|
"--kui-list-item-selected-color",
|
|
1561
|
+
"--kui-list-group-divider-color",
|
|
1562
|
+
"--kui-font-xs",
|
|
1248
1563
|
"--kui-layout-inline-margin",
|
|
1249
1564
|
"--kui-layout-item-gap",
|
|
1250
1565
|
"--kui-layout-item-padding",
|
|
@@ -1354,7 +1669,8 @@
|
|
|
1354
1669
|
"id": "application data attribute values",
|
|
1355
1670
|
"owner": "application",
|
|
1356
1671
|
"required": false
|
|
1357
|
-
}
|
|
1672
|
+
},
|
|
1673
|
+
{ "id": "outer placement", "owner": "application", "required": false }
|
|
1358
1674
|
],
|
|
1359
1675
|
"wiring": { "required": false, "helpers": [], "obligations": [] },
|
|
1360
1676
|
"responsive": { "owner": "not-applicable", "behaviors": [] },
|
|
@@ -1570,7 +1886,7 @@
|
|
|
1570
1886
|
"obligations": [
|
|
1571
1887
|
"Announce result changes when useful and keep tokens atomic during editing.",
|
|
1572
1888
|
"Keep leading and trailing controls aligned to the first text line while content wraps.",
|
|
1573
|
-
"Wire Enter to submit without inserting a contenteditable line break and preserve focus plus the text-relative caret across controlled keyboard chip deletion;
|
|
1889
|
+
"Wire Enter to submit without inserting a contenteditable line break and preserve focus plus the text-relative caret across controlled keyboard chip deletion before the next keystroke. Select All deletion preserves managed open state and replacement focus; persist both edited query and tokens. Visual wrapping remains available.",
|
|
1574
1890
|
"In collapsible mode, wireTokenSearchFields manages this by default: activating the trigger reveals the searchbox and moves focus into it, Escape on an empty field collapses and returns focus to the trigger, and focus leaving an empty field collapses it; each behavior is individually opt-out."
|
|
1575
1891
|
]
|
|
1576
1892
|
},
|
|
@@ -1664,7 +1980,8 @@
|
|
|
1664
1980
|
"kui-resizable-region",
|
|
1665
1981
|
"kui-resizable-region__content",
|
|
1666
1982
|
"kui-resizable-region__handle",
|
|
1667
|
-
"kui-resizable-region__handle-icon"
|
|
1983
|
+
"kui-resizable-region__handle-icon",
|
|
1984
|
+
"kui-resizable-region__restore"
|
|
1668
1985
|
],
|
|
1669
1986
|
"publicTokens": [
|
|
1670
1987
|
"--kui-color-border",
|
|
@@ -1674,6 +1991,10 @@
|
|
|
1674
1991
|
"--kui-radius-s",
|
|
1675
1992
|
"--kui-resizable-region-handle-active-color",
|
|
1676
1993
|
"--kui-resizable-region-handle-color",
|
|
1994
|
+
"--kui-resizable-region-overlay-z",
|
|
1995
|
+
"--kui-resizable-region-popup-z",
|
|
1996
|
+
"--kui-resizable-region-restore-inset",
|
|
1997
|
+
"--kui-resizable-region-restore-z",
|
|
1677
1998
|
"--kui-resizable-region-separator-color",
|
|
1678
1999
|
"--kui-resizable-region-size"
|
|
1679
2000
|
]
|
|
@@ -1717,7 +2038,9 @@
|
|
|
1717
2038
|
},
|
|
1718
2039
|
"accessibility": {
|
|
1719
2040
|
"obligations": [
|
|
1720
|
-
"Verify the live value, standard events, focus, and rendered output."
|
|
2041
|
+
"Verify the live value, standard events, focus, and rendered output.",
|
|
2042
|
+
"A nonempty label names the internal combobox; otherwise ariaLabel supplies a visually hidden label without adding control height, including custom selected content.",
|
|
2043
|
+
"Hint text is visible below the control through Web Awesome's native hint relationship; placeholderText remains the empty value inside the closed control."
|
|
1721
2044
|
]
|
|
1722
2045
|
},
|
|
1723
2046
|
"boundaries": {
|
|
@@ -1726,6 +2049,7 @@
|
|
|
1726
2049
|
"kui-select",
|
|
1727
2050
|
"kui-select--custom-selected",
|
|
1728
2051
|
"kui-select--fit-menu",
|
|
2052
|
+
"kui-select--label-hidden",
|
|
1729
2053
|
"kui-select__custom-selected",
|
|
1730
2054
|
"kui-select__group",
|
|
1731
2055
|
"kui-select__group--separated",
|
|
@@ -4364,7 +4688,7 @@
|
|
|
4364
4688
|
},
|
|
4365
4689
|
"accessibility": {
|
|
4366
4690
|
"obligations": [
|
|
4367
|
-
"Web Awesome owns modal focus and Escape; the application adapter restores the invoking control after hide, and
|
|
4691
|
+
"Web Awesome owns modal focus and Escape; the application adapter restores the invoking control after hide, and Toolbar plus ToolbarText supply the visible hierarchy."
|
|
4368
4692
|
]
|
|
4369
4693
|
},
|
|
4370
4694
|
"boundaries": {
|
|
@@ -4411,7 +4735,7 @@
|
|
|
4411
4735
|
},
|
|
4412
4736
|
"accessibility": {
|
|
4413
4737
|
"obligations": [
|
|
4414
|
-
"The form references
|
|
4738
|
+
"The form references its ToolbarText title and supporting-summary ids; production fields own labels and help; invalid submission creates an assertive persistent StateBanner while successful submission creates a polite persistent banner."
|
|
4415
4739
|
]
|
|
4416
4740
|
},
|
|
4417
4741
|
"boundaries": {
|
|
@@ -222,7 +222,8 @@
|
|
|
222
222
|
]
|
|
223
223
|
},
|
|
224
224
|
"publicClasses": { "$ref": "#/$defs/stringList" },
|
|
225
|
-
"publicTokens": { "$ref": "#/$defs/stringList" }
|
|
225
|
+
"publicTokens": { "$ref": "#/$defs/stringList" },
|
|
226
|
+
"publicParts": { "$ref": "#/$defs/stringList" }
|
|
226
227
|
},
|
|
227
228
|
"additionalProperties": false
|
|
228
229
|
},
|