@kerfjs/ui 5.0.0-beta.77 → 5.0.0-beta.78
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 +3 -0
- package/ai/application-ui-diagnostic-ids-v1.json +3 -0
- package/ai/component-catalog.json +121 -9
- package/ai/component-composition.json +102 -6
- package/ai/components/nav-stack.md +3 -3
- package/ai/components/surface-scaffold.md +11 -2
- package/ai/components/toolbar-control-group.md +2 -0
- package/ai/components/toolbar-text.md +2 -0
- package/ai/components/toolbar.md +2 -0
- package/ai/public-api-signatures-v1.md +49 -121
- package/ai/skill.md +11 -1
- package/ai/webawesome-jsx-signatures-v1.md +1 -1
- package/dist/browser/nav-stack.js +2 -0
- package/dist/browser/split-view.js +2 -0
- package/dist/catalog-resources.d.ts +3 -3
- package/dist/catalog.d.ts +3 -3
- package/dist/catalog.js +3 -3
- package/dist/{chunk-WJN3V2H5.js → chunk-2GOCOLQL.js} +18 -4
- package/dist/chunk-2GOCOLQL.js.map +1 -0
- package/dist/{chunk-XIZRXI7N.js → chunk-A7DYEERU.js} +13 -1
- package/dist/chunk-A7DYEERU.js.map +1 -0
- package/dist/{chunk-6VQPLV3O.js → chunk-DSLRNR43.js} +9 -8
- package/dist/chunk-DSLRNR43.js.map +1 -0
- package/dist/{chunk-AOAW55JN.js → chunk-DXQZ3BEO.js} +4 -1
- package/dist/chunk-DXQZ3BEO.js.map +1 -0
- package/dist/chunk-IKCUPTR2.js +170 -0
- package/dist/chunk-IKCUPTR2.js.map +1 -0
- package/dist/{chunk-Z6PE5T7N.js → chunk-JL4BBZP4.js} +4 -3
- package/dist/chunk-JL4BBZP4.js.map +1 -0
- package/dist/collapsible-panel.js +2 -2
- package/dist/index.d.ts +1 -1
- package/dist/index.js +5 -5
- package/dist/nav-stack-B1Qc2e5q.d.ts +101 -0
- package/dist/nav-stack.d.ts +11 -93
- package/dist/nav-stack.js +5 -1
- package/dist/pane.d.ts +5 -2
- package/dist/pane.js +1 -1
- package/dist/split-view.d.ts +9 -4
- package/dist/split-view.js +7 -3
- package/dist/split-view.js.map +1 -1
- package/dist/styles/components/actions/toolbar-control-group/toolbar-control-group.css +60 -13
- package/dist/styles/components/actions/toolbar-text/toolbar-text.css +7 -1
- package/dist/styles/components/layout/pane/pane.css +7 -0
- package/dist/styles/components/navigation/nav-stack/nav-stack.css +6 -12
- package/dist/styles/components/navigation/tab-scaffold/tab-scaffold.css +17 -0
- package/dist/styles/components/surfaces/surface-scaffold/surface-scaffold.css +55 -0
- package/dist/styles/nav-stack.css +6 -12
- package/dist/styles/pane.css +7 -0
- package/dist/styles/surface-scaffold.css +55 -0
- package/dist/styles/tab-scaffold.css +17 -0
- package/dist/styles/toolbar-control-group.css +60 -13
- package/dist/styles/toolbar-text.css +7 -1
- package/dist/surface-scaffold-register.d.ts +4 -0
- package/dist/surface-scaffold-register.js +59 -0
- package/dist/surface-scaffold-register.js.map +1 -0
- package/dist/surface-scaffold.d.ts +10 -2
- package/dist/surface-scaffold.js +1 -1
- package/dist/tab-scaffold.d.ts +2 -0
- package/dist/tab-scaffold.js +1 -0
- package/dist/tab-scaffold.js.map +1 -1
- package/dist/wire-toolbar-visibility.js +1 -1
- package/dist/workbench.d.ts +5 -13
- package/dist/workbench.js +1 -1
- package/docs/component-contract.md +8 -1
- package/docs/component-selection.md +1 -1
- package/docs/layout.md +20 -0
- package/docs/nav-stack.md +30 -18
- package/docs/recipes.md +5 -1
- package/docs/split-view.md +7 -4
- package/docs/surface-scaffold.md +46 -0
- package/docs/tab-scaffold.md +57 -0
- package/docs/ui-doctor.md +23 -0
- package/docs/workbench.md +3 -2
- package/doctor/component-style-checks.mjs +224 -0
- package/doctor/index.mjs +42 -13
- package/llms.txt +10 -0
- package/package.json +7 -2
- package/ux-demo/recipes/list-detail-dialog.tsx +4 -0
- package/ux-demo/recipes/navigation-stack.tsx +2 -2
- package/dist/chunk-6VQPLV3O.js.map +0 -1
- package/dist/chunk-AOAW55JN.js.map +0 -1
- package/dist/chunk-WJN3V2H5.js.map +0 -1
- package/dist/chunk-XIZRXI7N.js.map +0 -1
- package/dist/chunk-Z4EPMX25.js +0 -123
- package/dist/chunk-Z4EPMX25.js.map +0 -1
- package/dist/chunk-Z6PE5T7N.js.map +0 -1
package/README.md
CHANGED
|
@@ -37,6 +37,9 @@ back to the root or component-local support code placed in the wrong folder.
|
|
|
37
37
|
Browser verification always builds current source: both `npm run test:e2e`
|
|
38
38
|
and direct focused Playwright commands run the catalog/conformance preflights
|
|
39
39
|
and production build before preview. See the [UX catalog contract](./docs/ux-demo.md).
|
|
40
|
+
Failed Playwright tests retain traces and screenshots alongside an HTML report.
|
|
41
|
+
The CI `ui` job uploads the report and per-test failure evidence for 14 days when
|
|
42
|
+
the browser suite fails; the artifact is named `ui-browser-failure-<run>-<attempt>`.
|
|
40
43
|
|
|
41
44
|
When authoring a component gallery, follow the single
|
|
42
45
|
[Catalog demo authoring contract](./docs/catalog.md#catalog-demo-authoring-contract)
|
|
@@ -761,13 +761,13 @@
|
|
|
761
761
|
],
|
|
762
762
|
"appOwns": [
|
|
763
763
|
"ordered view stack and stable keys",
|
|
764
|
-
"view content and
|
|
764
|
+
"view content and structured top and bottom toolbar configurations",
|
|
765
765
|
"push and pop actions",
|
|
766
766
|
"preferred initial focus targets when DOM order is insufficient",
|
|
767
|
-
"per-view bottom toolbar
|
|
767
|
+
"per-view bottom toolbar or a persistent structured fallback",
|
|
768
768
|
"per-view leading, center, and trailing top-toolbar groups",
|
|
769
|
-
"per-view
|
|
770
|
-
"top-toolbar
|
|
769
|
+
"per-view header and footer with List and Pane configuration",
|
|
770
|
+
"top-toolbar defaults, title size, and heading level",
|
|
771
771
|
"whether the chrome and bottom-toolbar dividers follow the scroll, always show, or never show (chromeDividers)"
|
|
772
772
|
],
|
|
773
773
|
"variants": [
|
|
@@ -859,7 +859,6 @@
|
|
|
859
859
|
"kui-nav-stack__chrome-copy",
|
|
860
860
|
"kui-nav-stack__chrome-copy--bottom",
|
|
861
861
|
"kui-nav-stack__chrome-copy--exiting",
|
|
862
|
-
"kui-nav-stack__header",
|
|
863
862
|
"kui-nav-stack__viewport",
|
|
864
863
|
"kui-nav-stack__view",
|
|
865
864
|
"kui-nav-stack__view--entering",
|
|
@@ -1615,6 +1614,16 @@
|
|
|
1615
1614
|
"name": "data-toolbar-visibility-probe",
|
|
1616
1615
|
"on": "private aria-hidden measurement boxes under Toolbar",
|
|
1617
1616
|
"meaning": "Internal out-of-flow CSS length resolver; created and removed by wireToolbarVisibility."
|
|
1617
|
+
},
|
|
1618
|
+
{
|
|
1619
|
+
"name": "data-morph-preserve",
|
|
1620
|
+
"on": "private aria-hidden measurement boxes and visibility state children",
|
|
1621
|
+
"meaning": "Keeps helper-owned geometry and state across Kerf renders; replacement and explicit removal are repaired, and disposal removes them."
|
|
1622
|
+
},
|
|
1623
|
+
{
|
|
1624
|
+
"name": "data-toolbar-visibility-state",
|
|
1625
|
+
"on": "private hidden children of width-managed items and paired busy statuses",
|
|
1626
|
+
"meaning": "Preserves actual CSS visibility while rendering removes a transient parent marker, preventing geometry-driven render feedback."
|
|
1618
1627
|
}
|
|
1619
1628
|
]
|
|
1620
1629
|
}
|
|
@@ -1747,6 +1756,16 @@
|
|
|
1747
1756
|
"name": "data-toolbar-visibility-probe",
|
|
1748
1757
|
"on": "private aria-hidden measurement boxes under Toolbar",
|
|
1749
1758
|
"meaning": "Internal out-of-flow CSS length resolver; created and removed by wireToolbarVisibility."
|
|
1759
|
+
},
|
|
1760
|
+
{
|
|
1761
|
+
"name": "data-morph-preserve",
|
|
1762
|
+
"on": "private aria-hidden measurement boxes and visibility state children",
|
|
1763
|
+
"meaning": "Keeps helper-owned geometry and state across Kerf renders; replacement and explicit removal are repaired, and disposal removes them."
|
|
1764
|
+
},
|
|
1765
|
+
{
|
|
1766
|
+
"name": "data-toolbar-visibility-state",
|
|
1767
|
+
"on": "private hidden children of width-managed items and paired busy statuses",
|
|
1768
|
+
"meaning": "Preserves actual CSS visibility while rendering removes a transient parent marker, preventing geometry-driven render feedback."
|
|
1750
1769
|
}
|
|
1751
1770
|
]
|
|
1752
1771
|
}
|
|
@@ -1855,7 +1874,7 @@
|
|
|
1855
1874
|
"category": "Structure",
|
|
1856
1875
|
"kind": "component",
|
|
1857
1876
|
"source": "kerf",
|
|
1858
|
-
"description": "Typed Web Awesome dialog and
|
|
1877
|
+
"description": "Typed Web Awesome dialog preferred widths and viewport bounds, presentation, and popup inset composition.",
|
|
1859
1878
|
"uses": [
|
|
1860
1879
|
"wa-dialog",
|
|
1861
1880
|
"wa-dropdown",
|
|
@@ -1868,7 +1887,8 @@
|
|
|
1868
1887
|
],
|
|
1869
1888
|
"useWhen": [
|
|
1870
1889
|
"A Web Awesome dialog or dropdown needs a standard size, presentation, body/footer inset, or list-compatible menu inset.",
|
|
1871
|
-
"A dialog body should compose rows, sections, or aligned bare prose through List and ListInsetText."
|
|
1890
|
+
"A dialog body should compose rows, sections, or aligned bare prose through List and ListInsetText.",
|
|
1891
|
+
"A modal needs a typed preferred width, viewport gutter, or dynamic viewport-bounded height cap while retaining native body scrolling and footer actions."
|
|
1872
1892
|
],
|
|
1873
1893
|
"avoidWhen": [
|
|
1874
1894
|
"Do not use it as a generic layout wrapper or to replace application-owned modal state and focus lifecycle.",
|
|
@@ -1885,6 +1905,7 @@
|
|
|
1885
1905
|
"variants": [
|
|
1886
1906
|
"small, medium, or large dialog",
|
|
1887
1907
|
"modal, side-sheet, or fullscreen dialog",
|
|
1908
|
+
"typed modal preferred width, viewport gutter, and maximum height, including viewport cap",
|
|
1888
1909
|
"none, compact, or comfortable body and footer inset",
|
|
1889
1910
|
"standard, compact, or zero-inset popup menu"
|
|
1890
1911
|
],
|
|
@@ -1900,8 +1921,10 @@
|
|
|
1900
1921
|
"delivery": {
|
|
1901
1922
|
"browserImport": "@kerfjs/ui/surface-scaffold",
|
|
1902
1923
|
"manualCssImport": "@kerfjs/ui/surface-scaffold.css",
|
|
1924
|
+
"registrationImport": "@kerfjs/ui/surface-scaffold/register",
|
|
1903
1925
|
"sideEffects": [
|
|
1904
|
-
"browser-condition-css"
|
|
1926
|
+
"browser-condition-css",
|
|
1927
|
+
"custom-element-registration"
|
|
1905
1928
|
]
|
|
1906
1929
|
},
|
|
1907
1930
|
"wiring": [],
|
|
@@ -1918,7 +1941,86 @@
|
|
|
1918
1941
|
"catalogRoute": "?component=surface-scaffold",
|
|
1919
1942
|
"documentation": "docs/surface-scaffold.md",
|
|
1920
1943
|
"recipe": "docs/component-selection.md#problem-to-component-matrix"
|
|
1921
|
-
}
|
|
1944
|
+
},
|
|
1945
|
+
"cssValueProps": [
|
|
1946
|
+
{
|
|
1947
|
+
"path": "preferredWidth",
|
|
1948
|
+
"grammar": "length",
|
|
1949
|
+
"helpers": [
|
|
1950
|
+
"px",
|
|
1951
|
+
"rem",
|
|
1952
|
+
"remify",
|
|
1953
|
+
"em",
|
|
1954
|
+
"pct",
|
|
1955
|
+
"space",
|
|
1956
|
+
"lengthVar",
|
|
1957
|
+
"calc"
|
|
1958
|
+
],
|
|
1959
|
+
"nonStandaloneHelpers": [
|
|
1960
|
+
"plus"
|
|
1961
|
+
],
|
|
1962
|
+
"shorthands": [],
|
|
1963
|
+
"canonicalShorthands": [],
|
|
1964
|
+
"exceptionalShorthands": [],
|
|
1965
|
+
"rawPolicy": "forbid",
|
|
1966
|
+
"examples": [
|
|
1967
|
+
"preferredWidth={remify(832)}"
|
|
1968
|
+
]
|
|
1969
|
+
},
|
|
1970
|
+
{
|
|
1971
|
+
"path": "viewportGutter",
|
|
1972
|
+
"grammar": "length",
|
|
1973
|
+
"helpers": [
|
|
1974
|
+
"px",
|
|
1975
|
+
"rem",
|
|
1976
|
+
"remify",
|
|
1977
|
+
"em",
|
|
1978
|
+
"pct",
|
|
1979
|
+
"space",
|
|
1980
|
+
"lengthVar",
|
|
1981
|
+
"calc"
|
|
1982
|
+
],
|
|
1983
|
+
"nonStandaloneHelpers": [
|
|
1984
|
+
"plus"
|
|
1985
|
+
],
|
|
1986
|
+
"shorthands": [],
|
|
1987
|
+
"canonicalShorthands": [],
|
|
1988
|
+
"exceptionalShorthands": [],
|
|
1989
|
+
"rawPolicy": "forbid",
|
|
1990
|
+
"examples": [
|
|
1991
|
+
"viewportGutter={remify(8)}"
|
|
1992
|
+
]
|
|
1993
|
+
},
|
|
1994
|
+
{
|
|
1995
|
+
"path": "maxHeight",
|
|
1996
|
+
"grammar": "length",
|
|
1997
|
+
"helpers": [
|
|
1998
|
+
"px",
|
|
1999
|
+
"rem",
|
|
2000
|
+
"remify",
|
|
2001
|
+
"em",
|
|
2002
|
+
"pct",
|
|
2003
|
+
"space",
|
|
2004
|
+
"lengthVar",
|
|
2005
|
+
"calc"
|
|
2006
|
+
],
|
|
2007
|
+
"nonStandaloneHelpers": [
|
|
2008
|
+
"plus"
|
|
2009
|
+
],
|
|
2010
|
+
"shorthands": [
|
|
2011
|
+
"viewport"
|
|
2012
|
+
],
|
|
2013
|
+
"canonicalShorthands": [
|
|
2014
|
+
"viewport"
|
|
2015
|
+
],
|
|
2016
|
+
"exceptionalShorthands": [],
|
|
2017
|
+
"rawPolicy": "forbid",
|
|
2018
|
+
"examples": [
|
|
2019
|
+
"maxHeight=\"viewport\"",
|
|
2020
|
+
"maxHeight={remify(640)}"
|
|
2021
|
+
]
|
|
2022
|
+
}
|
|
2023
|
+
]
|
|
1922
2024
|
},
|
|
1923
2025
|
{
|
|
1924
2026
|
"id": "floating-toolbar",
|
|
@@ -2099,6 +2201,16 @@
|
|
|
2099
2201
|
"name": "data-toolbar-visibility-probe",
|
|
2100
2202
|
"on": "private aria-hidden measurement boxes under Toolbar",
|
|
2101
2203
|
"meaning": "Internal out-of-flow CSS length resolver; created and removed by wireToolbarVisibility."
|
|
2204
|
+
},
|
|
2205
|
+
{
|
|
2206
|
+
"name": "data-morph-preserve",
|
|
2207
|
+
"on": "private aria-hidden measurement boxes and visibility state children",
|
|
2208
|
+
"meaning": "Keeps helper-owned geometry and state across Kerf renders; replacement and explicit removal are repaired, and disposal removes them."
|
|
2209
|
+
},
|
|
2210
|
+
{
|
|
2211
|
+
"name": "data-toolbar-visibility-state",
|
|
2212
|
+
"on": "private hidden children of width-managed items and paired busy statuses",
|
|
2213
|
+
"meaning": "Preserves actual CSS visibility while rendering removes a transient parent marker, preventing geometry-driven render feedback."
|
|
2102
2214
|
}
|
|
2103
2215
|
]
|
|
2104
2216
|
}
|
|
@@ -697,7 +697,7 @@
|
|
|
697
697
|
"required": false
|
|
698
698
|
},
|
|
699
699
|
{
|
|
700
|
-
"id": "view content and
|
|
700
|
+
"id": "view content and structured top and bottom toolbar configurations",
|
|
701
701
|
"owner": "application",
|
|
702
702
|
"required": false
|
|
703
703
|
},
|
|
@@ -712,7 +712,7 @@
|
|
|
712
712
|
"required": false
|
|
713
713
|
},
|
|
714
714
|
{
|
|
715
|
-
"id": "per-view bottom toolbar
|
|
715
|
+
"id": "per-view bottom toolbar or a persistent structured fallback",
|
|
716
716
|
"owner": "application",
|
|
717
717
|
"required": false
|
|
718
718
|
},
|
|
@@ -722,12 +722,12 @@
|
|
|
722
722
|
"required": false
|
|
723
723
|
},
|
|
724
724
|
{
|
|
725
|
-
"id": "per-view
|
|
725
|
+
"id": "per-view header and footer with List and Pane configuration",
|
|
726
726
|
"owner": "application",
|
|
727
727
|
"required": false
|
|
728
728
|
},
|
|
729
729
|
{
|
|
730
|
-
"id": "top-toolbar
|
|
730
|
+
"id": "top-toolbar defaults, title size, and heading level",
|
|
731
731
|
"owner": "application",
|
|
732
732
|
"required": false
|
|
733
733
|
},
|
|
@@ -812,7 +812,6 @@
|
|
|
812
812
|
"kui-nav-stack__chrome-copy",
|
|
813
813
|
"kui-nav-stack__chrome-copy--bottom",
|
|
814
814
|
"kui-nav-stack__chrome-copy--exiting",
|
|
815
|
-
"kui-nav-stack__header",
|
|
816
815
|
"kui-nav-stack__viewport",
|
|
817
816
|
"kui-nav-stack__view",
|
|
818
817
|
"kui-nav-stack__view--entering",
|
|
@@ -1498,6 +1497,18 @@
|
|
|
1498
1497
|
"on": "private aria-hidden measurement boxes under Toolbar",
|
|
1499
1498
|
"helper": "wireToolbarVisibility",
|
|
1500
1499
|
"meaning": "Internal out-of-flow CSS length resolver; created and removed by wireToolbarVisibility."
|
|
1500
|
+
},
|
|
1501
|
+
{
|
|
1502
|
+
"name": "data-morph-preserve",
|
|
1503
|
+
"on": "private aria-hidden measurement boxes and visibility state children",
|
|
1504
|
+
"helper": "wireToolbarVisibility",
|
|
1505
|
+
"meaning": "Keeps helper-owned geometry and state across Kerf renders; replacement and explicit removal are repaired, and disposal removes them."
|
|
1506
|
+
},
|
|
1507
|
+
{
|
|
1508
|
+
"name": "data-toolbar-visibility-state",
|
|
1509
|
+
"on": "private hidden children of width-managed items and paired busy statuses",
|
|
1510
|
+
"helper": "wireToolbarVisibility",
|
|
1511
|
+
"meaning": "Preserves actual CSS visibility while rendering removes a transient parent marker, preventing geometry-driven render feedback."
|
|
1501
1512
|
}
|
|
1502
1513
|
]
|
|
1503
1514
|
},
|
|
@@ -1608,6 +1619,18 @@
|
|
|
1608
1619
|
"on": "private aria-hidden measurement boxes under Toolbar",
|
|
1609
1620
|
"helper": "wireToolbarVisibility",
|
|
1610
1621
|
"meaning": "Internal out-of-flow CSS length resolver; created and removed by wireToolbarVisibility."
|
|
1622
|
+
},
|
|
1623
|
+
{
|
|
1624
|
+
"name": "data-morph-preserve",
|
|
1625
|
+
"on": "private aria-hidden measurement boxes and visibility state children",
|
|
1626
|
+
"helper": "wireToolbarVisibility",
|
|
1627
|
+
"meaning": "Keeps helper-owned geometry and state across Kerf renders; replacement and explicit removal are repaired, and disposal removes them."
|
|
1628
|
+
},
|
|
1629
|
+
{
|
|
1630
|
+
"name": "data-toolbar-visibility-state",
|
|
1631
|
+
"on": "private hidden children of width-managed items and paired busy statuses",
|
|
1632
|
+
"helper": "wireToolbarVisibility",
|
|
1633
|
+
"meaning": "Preserves actual CSS visibility while rendering removes a transient parent marker, preventing geometry-driven render feedback."
|
|
1611
1634
|
}
|
|
1612
1635
|
]
|
|
1613
1636
|
},
|
|
@@ -1742,7 +1765,68 @@
|
|
|
1742
1765
|
"Use popup surfaces only for real dropdown menus with named triggers."
|
|
1743
1766
|
]
|
|
1744
1767
|
},
|
|
1745
|
-
"cssValueProps": [
|
|
1768
|
+
"cssValueProps": [
|
|
1769
|
+
{
|
|
1770
|
+
"path": "preferredWidth",
|
|
1771
|
+
"grammar": "length",
|
|
1772
|
+
"helpers": [
|
|
1773
|
+
"px",
|
|
1774
|
+
"rem",
|
|
1775
|
+
"remify",
|
|
1776
|
+
"em",
|
|
1777
|
+
"pct",
|
|
1778
|
+
"space",
|
|
1779
|
+
"lengthVar",
|
|
1780
|
+
"calc"
|
|
1781
|
+
],
|
|
1782
|
+
"nonStandaloneHelpers": ["plus"],
|
|
1783
|
+
"shorthands": [],
|
|
1784
|
+
"canonicalShorthands": [],
|
|
1785
|
+
"exceptionalShorthands": [],
|
|
1786
|
+
"rawPolicy": "forbid",
|
|
1787
|
+
"examples": ["preferredWidth={remify(832)}"]
|
|
1788
|
+
},
|
|
1789
|
+
{
|
|
1790
|
+
"path": "viewportGutter",
|
|
1791
|
+
"grammar": "length",
|
|
1792
|
+
"helpers": [
|
|
1793
|
+
"px",
|
|
1794
|
+
"rem",
|
|
1795
|
+
"remify",
|
|
1796
|
+
"em",
|
|
1797
|
+
"pct",
|
|
1798
|
+
"space",
|
|
1799
|
+
"lengthVar",
|
|
1800
|
+
"calc"
|
|
1801
|
+
],
|
|
1802
|
+
"nonStandaloneHelpers": ["plus"],
|
|
1803
|
+
"shorthands": [],
|
|
1804
|
+
"canonicalShorthands": [],
|
|
1805
|
+
"exceptionalShorthands": [],
|
|
1806
|
+
"rawPolicy": "forbid",
|
|
1807
|
+
"examples": ["viewportGutter={remify(8)}"]
|
|
1808
|
+
},
|
|
1809
|
+
{
|
|
1810
|
+
"path": "maxHeight",
|
|
1811
|
+
"grammar": "length",
|
|
1812
|
+
"helpers": [
|
|
1813
|
+
"px",
|
|
1814
|
+
"rem",
|
|
1815
|
+
"remify",
|
|
1816
|
+
"em",
|
|
1817
|
+
"pct",
|
|
1818
|
+
"space",
|
|
1819
|
+
"lengthVar",
|
|
1820
|
+
"calc"
|
|
1821
|
+
],
|
|
1822
|
+
"nonStandaloneHelpers": ["plus"],
|
|
1823
|
+
"shorthands": ["viewport"],
|
|
1824
|
+
"canonicalShorthands": ["viewport"],
|
|
1825
|
+
"exceptionalShorthands": [],
|
|
1826
|
+
"rawPolicy": "forbid",
|
|
1827
|
+
"examples": ["maxHeight=\"viewport\"", "maxHeight={remify(640)}"]
|
|
1828
|
+
}
|
|
1829
|
+
],
|
|
1746
1830
|
"boundaries": {
|
|
1747
1831
|
"rootClass": "kui-dialog-surface",
|
|
1748
1832
|
"publicClasses": ["kui-dialog-surface", "kui-popup-surface"],
|
|
@@ -1862,6 +1946,18 @@
|
|
|
1862
1946
|
"on": "private aria-hidden measurement boxes under Toolbar",
|
|
1863
1947
|
"helper": "wireToolbarVisibility",
|
|
1864
1948
|
"meaning": "Internal out-of-flow CSS length resolver; created and removed by wireToolbarVisibility."
|
|
1949
|
+
},
|
|
1950
|
+
{
|
|
1951
|
+
"name": "data-morph-preserve",
|
|
1952
|
+
"on": "private aria-hidden measurement boxes and visibility state children",
|
|
1953
|
+
"helper": "wireToolbarVisibility",
|
|
1954
|
+
"meaning": "Keeps helper-owned geometry and state across Kerf renders; replacement and explicit removal are repaired, and disposal removes them."
|
|
1955
|
+
},
|
|
1956
|
+
{
|
|
1957
|
+
"name": "data-toolbar-visibility-state",
|
|
1958
|
+
"on": "private hidden children of width-managed items and paired busy statuses",
|
|
1959
|
+
"helper": "wireToolbarVisibility",
|
|
1960
|
+
"meaning": "Preserves actual CSS visibility while rendering removes a transient parent marker, preventing geometry-driven render feedback."
|
|
1865
1961
|
}
|
|
1866
1962
|
]
|
|
1867
1963
|
},
|
|
@@ -57,7 +57,7 @@ Exact prop names and types: [`@kerfjs/ui/nav-stack`](../public-api-signatures-v1
|
|
|
57
57
|
|
|
58
58
|
## State and wiring
|
|
59
59
|
|
|
60
|
-
**The app owns:** ordered view stack and stable keys; view content and
|
|
60
|
+
**The app owns:** ordered view stack and stable keys; view content and structured top and bottom toolbar configurations; push and pop actions; preferred initial focus targets when DOM order is insufficient; per-view bottom toolbar or a persistent structured fallback; per-view leading, center, and trailing top-toolbar groups; per-view header and footer with List and Pane configuration; top-toolbar defaults, title size, and heading level; whether the chrome and bottom-toolbar dividers follow the scroll, always show, or never show (chromeDividers).
|
|
61
61
|
|
|
62
62
|
**Wiring:** `wireNavStack`, `wireScrollDividers` is required.
|
|
63
63
|
|
|
@@ -90,9 +90,9 @@ Margin: none · border: conditional · padding: child (layout role: structure).
|
|
|
90
90
|
|
|
91
91
|
The component owns its own styles. Configure it through its props and variants; do not override its internals.
|
|
92
92
|
|
|
93
|
-
Public class hooks (select for layout placement only, never to change the component's look): `kui-nav-stack`, `kui-nav-stack__chrome`, `kui-nav-stack__bottom`, `kui-nav-stack__chrome--entering`, `kui-nav-stack__chrome-copy`, `kui-nav-stack__chrome-copy--bottom`, `kui-nav-stack__chrome-copy--exiting`, `kui-nav-
|
|
93
|
+
Public class hooks (select for layout placement only, never to change the component's look): `kui-nav-stack`, `kui-nav-stack__chrome`, `kui-nav-stack__bottom`, `kui-nav-stack__chrome--entering`, `kui-nav-stack__chrome-copy`, `kui-nav-stack__chrome-copy--bottom`, `kui-nav-stack__chrome-copy--exiting`, `kui-nav-stack__viewport`, `kui-nav-stack__view`, `kui-nav-stack__view--entering`, `kui-nav-stack__view--exiting`.
|
|
94
94
|
|
|
95
|
-
Never put `kui-nav-stack`, `kui-nav-stack__chrome`, `kui-nav-stack__bottom`, `kui-nav-stack__chrome--entering`, `kui-nav-stack__chrome-copy`, `kui-nav-stack__chrome-copy--bottom`, `kui-nav-stack__chrome-copy--exiting`, `kui-nav-
|
|
95
|
+
Never put `kui-nav-stack`, `kui-nav-stack__chrome`, `kui-nav-stack__bottom`, `kui-nav-stack__chrome--entering`, `kui-nav-stack__chrome-copy`, `kui-nav-stack__chrome-copy--bottom`, `kui-nav-stack__chrome-copy--exiting`, `kui-nav-stack__viewport`, `kui-nav-stack__view`, `kui-nav-stack__view--entering`, `kui-nav-stack__view--exiting` on an element you write; render `NavStack` instead (`KUI-L103`).
|
|
96
96
|
|
|
97
97
|
Public tokens it reads: `--kui-nav-stack-transition-duration`. Set a token only where its public contract allows; prefer a prop.
|
|
98
98
|
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
`@kerfjs/ui:surface-scaffold` · Kerf UI · component · Structure
|
|
6
6
|
|
|
7
|
-
Typed Web Awesome dialog and
|
|
7
|
+
Typed Web Awesome dialog preferred widths and viewport bounds, presentation, and popup inset composition.
|
|
8
8
|
|
|
9
9
|
## When to use
|
|
10
10
|
|
|
@@ -12,6 +12,7 @@ Configure recurring dialog and popup geometry without consumer ::part() override
|
|
|
12
12
|
|
|
13
13
|
- A Web Awesome dialog or dropdown needs a standard size, presentation, body/footer inset, or list-compatible menu inset.
|
|
14
14
|
- A dialog body should compose rows, sections, or aligned bare prose through List and ListInsetText.
|
|
15
|
+
- A modal needs a typed preferred width, viewport gutter, or dynamic viewport-bounded height cap while retaining native body scrolling and footer actions.
|
|
15
16
|
|
|
16
17
|
**Not when:**
|
|
17
18
|
|
|
@@ -22,7 +23,8 @@ Configure recurring dialog and popup geometry without consumer ::part() override
|
|
|
22
23
|
|
|
23
24
|
- JavaScript: `@kerfjs/ui/surface-scaffold` — exports `DialogSurface`, `PopupSurface`.
|
|
24
25
|
- CSS: the browser build of `@kerfjs/ui/surface-scaffold` pulls its CSS automatically; import `@kerfjs/ui/surface-scaffold.css` manually only without the `browser` export condition.
|
|
25
|
-
-
|
|
26
|
+
- Registration: import `@kerfjs/ui/surface-scaffold/register` once (a side effect).
|
|
27
|
+
- Declared side effects: browser-condition-css, custom-element-registration.
|
|
26
28
|
|
|
27
29
|
## Props
|
|
28
30
|
|
|
@@ -32,9 +34,16 @@ Exact prop names and types: [`@kerfjs/ui/surface-scaffold`](../public-api-signat
|
|
|
32
34
|
|
|
33
35
|
- small, medium, or large dialog
|
|
34
36
|
- modal, side-sheet, or fullscreen dialog
|
|
37
|
+
- typed modal preferred width, viewport gutter, and maximum height, including viewport cap
|
|
35
38
|
- none, compact, or comfortable body and footer inset
|
|
36
39
|
- standard, compact, or zero-inset popup menu
|
|
37
40
|
|
|
41
|
+
**CSS-value props** (typed builders from `@kerfjs/ui/css-values`; raw CSS strings are rejected):
|
|
42
|
+
|
|
43
|
+
- `preferredWidth`: length grammar; raw values: forbid; helpers `px`, `rem`, `remify`, `em`, `pct`, `space`, `lengthVar`, `calc` — e.g. `preferredWidth={remify(832)}`
|
|
44
|
+
- `viewportGutter`: length grammar; raw values: forbid; helpers `px`, `rem`, `remify`, `em`, `pct`, `space`, `lengthVar`, `calc` — e.g. `viewportGutter={remify(8)}`
|
|
45
|
+
- `maxHeight`: length grammar; raw values: forbid; shorthands `viewport`; helpers `px`, `rem`, `remify`, `em`, `pct`, `space`, `lengthVar`, `calc` — e.g. `maxHeight="viewport"`
|
|
46
|
+
|
|
38
47
|
## Composition
|
|
39
48
|
|
|
40
49
|
- Parents: any.
|
|
@@ -88,6 +88,8 @@ Zones (a zone is bound to JSX only through its listed prop; never assume the zon
|
|
|
88
88
|
|
|
89
89
|
- `data-toolbar-width-hidden` on `ToolbarText, ToolbarControlGroup and its paired busy status` (`wireToolbarVisibility`): True when typed hideBelow/showBelow thresholds hide this item at the nearest Toolbar content width. Re-applied after rendering; disposal restores prior markers.
|
|
90
90
|
- `data-toolbar-visibility-probe` on `private aria-hidden measurement boxes under Toolbar` (`wireToolbarVisibility`): Internal out-of-flow CSS length resolver; created and removed by wireToolbarVisibility.
|
|
91
|
+
- `data-morph-preserve` on `private aria-hidden measurement boxes and visibility state children` (`wireToolbarVisibility`): Keeps helper-owned geometry and state across Kerf renders; replacement and explicit removal are repaired, and disposal removes them.
|
|
92
|
+
- `data-toolbar-visibility-state` on `private hidden children of width-managed items and paired busy statuses` (`wireToolbarVisibility`): Preserves actual CSS visibility while rendering removes a transient parent marker, preventing geometry-driven render feedback.
|
|
91
93
|
|
|
92
94
|
## Geometry
|
|
93
95
|
|
|
@@ -67,6 +67,8 @@ Exact prop names and types: [`@kerfjs/ui/toolbar-text`](../public-api-signatures
|
|
|
67
67
|
|
|
68
68
|
- `data-toolbar-width-hidden` on `ToolbarText, ToolbarControlGroup and its paired busy status` (`wireToolbarVisibility`): True when typed hideBelow/showBelow thresholds hide this item at the nearest Toolbar content width. Re-applied after rendering; disposal restores prior markers.
|
|
69
69
|
- `data-toolbar-visibility-probe` on `private aria-hidden measurement boxes under Toolbar` (`wireToolbarVisibility`): Internal out-of-flow CSS length resolver; created and removed by wireToolbarVisibility.
|
|
70
|
+
- `data-morph-preserve` on `private aria-hidden measurement boxes and visibility state children` (`wireToolbarVisibility`): Keeps helper-owned geometry and state across Kerf renders; replacement and explicit removal are repaired, and disposal removes them.
|
|
71
|
+
- `data-toolbar-visibility-state` on `private hidden children of width-managed items and paired busy statuses` (`wireToolbarVisibility`): Preserves actual CSS visibility while rendering removes a transient parent marker, preventing geometry-driven render feedback.
|
|
70
72
|
|
|
71
73
|
## Geometry
|
|
72
74
|
|
package/ai/components/toolbar.md
CHANGED
|
@@ -68,6 +68,8 @@ Zones (a zone is bound to JSX only through its listed prop; never assume the zon
|
|
|
68
68
|
- `data-scroll-divider` on `a Toolbar named as targets chrome` (`wireScrollDividers`): The sides, in t/r/b/l order, on which this chrome currently draws its scroll divider: the side facing the scroller while content is hidden beyond it. Re-applied if a re-render drops it.
|
|
69
69
|
- `data-toolbar-width-hidden` on `ToolbarText, ToolbarControlGroup and its paired busy status` (`wireToolbarVisibility`): True when typed hideBelow/showBelow thresholds hide this item at the nearest Toolbar content width. Re-applied after rendering; disposal restores prior markers.
|
|
70
70
|
- `data-toolbar-visibility-probe` on `private aria-hidden measurement boxes under Toolbar` (`wireToolbarVisibility`): Internal out-of-flow CSS length resolver; created and removed by wireToolbarVisibility.
|
|
71
|
+
- `data-morph-preserve` on `private aria-hidden measurement boxes and visibility state children` (`wireToolbarVisibility`): Keeps helper-owned geometry and state across Kerf renders; replacement and explicit removal are repaired, and disposal removes them.
|
|
72
|
+
- `data-toolbar-visibility-state` on `private hidden children of width-managed items and paired busy statuses` (`wireToolbarVisibility`): Preserves actual CSS visibility while rendering removes a transient parent marker, preventing geometry-driven render feedback.
|
|
71
73
|
|
|
72
74
|
## Geometry
|
|
73
75
|
|