@kerfjs/ui 5.0.0-beta.50 → 5.0.0-beta.52
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 +29 -5
- package/ai/compile-time-contracts-v1.json +5 -2
- package/ai/component-catalog-v2.d.ts +19 -1
- package/ai/component-catalog-v2.json +842 -127
- package/ai/component-catalog-v2.schema.json +33 -1
- package/ai/component-catalog.json +603 -126
- package/ai/component-catalog.schema.json +21 -1
- package/ai/public-api-signatures-v1.md +218 -31
- package/ai/skill.md +27 -24
- package/ai/webawesome-jsx-signatures-v1.md +1 -1
- package/analyzer/index.mjs +105 -35
- package/dist/app-tab.d.ts +10 -1
- package/dist/app-tab.js +1 -1
- package/dist/catalog-resources.d.ts +1 -1
- package/dist/catalog.d.ts +28 -5
- package/dist/catalog.js +66 -25
- package/dist/catalog.js.map +1 -1
- package/dist/{chunk-OL4TC3U2.js → chunk-2CE22Q2K.js} +9 -2
- package/dist/chunk-2CE22Q2K.js.map +1 -0
- package/dist/{chunk-SIU2AC5W.js → chunk-2S7OWAEV.js} +3 -3
- package/dist/{chunk-SIU2AC5W.js.map → chunk-2S7OWAEV.js.map} +1 -1
- package/dist/{chunk-2YOUUEWR.js → chunk-3S7OUHUN.js} +4 -4
- package/dist/{chunk-2YOUUEWR.js.map → chunk-3S7OUHUN.js.map} +1 -1
- package/dist/{chunk-2WMSE4MK.js → chunk-4XE2CDYB.js} +2 -2
- package/dist/{chunk-2WMSE4MK.js.map → chunk-4XE2CDYB.js.map} +1 -1
- package/dist/{chunk-V6RZWDII.js → chunk-7GUQYHKA.js} +19 -2
- package/dist/chunk-7GUQYHKA.js.map +1 -0
- package/dist/{chunk-ZNZ2JDBW.js → chunk-7IUSV4XG.js} +1 -1
- package/dist/chunk-7IUSV4XG.js.map +1 -0
- package/dist/{chunk-UMGY5JSP.js → chunk-7XJO4D6A.js} +22 -2
- package/dist/chunk-7XJO4D6A.js.map +1 -0
- package/dist/{chunk-KKNK3JUT.js → chunk-ABAXNUXU.js} +5 -5
- package/dist/chunk-ABAXNUXU.js.map +1 -0
- package/dist/{chunk-AQSKJ6U6.js → chunk-DNCOFEUL.js} +21 -2
- package/dist/chunk-DNCOFEUL.js.map +1 -0
- package/dist/chunk-EKYZCRCX.js +256 -0
- package/dist/chunk-EKYZCRCX.js.map +1 -0
- package/dist/{chunk-COUPLRZG.js → chunk-IR53BQUJ.js} +16 -12
- package/dist/chunk-IR53BQUJ.js.map +1 -0
- package/dist/{chunk-3V75EQIP.js → chunk-JGFZ42ZF.js} +3 -3
- package/dist/{chunk-3V75EQIP.js.map → chunk-JGFZ42ZF.js.map} +1 -1
- package/dist/{chunk-54HM36IQ.js → chunk-KAQUUTZR.js} +4 -2
- package/dist/chunk-KAQUUTZR.js.map +1 -0
- package/dist/{chunk-ZSYLBVWG.js → chunk-LIOXPQ7N.js} +4 -4
- package/dist/chunk-LIOXPQ7N.js.map +1 -0
- package/dist/{chunk-S6ZTTTV7.js → chunk-M6GLI6A6.js} +3 -3
- package/dist/{chunk-S6ZTTTV7.js.map → chunk-M6GLI6A6.js.map} +1 -1
- package/dist/{chunk-OQI7RCRP.js → chunk-MTM43SJO.js} +7 -1
- package/dist/chunk-MTM43SJO.js.map +1 -0
- package/dist/{chunk-5CE64WGC.js → chunk-OSCL5TKR.js} +3 -3
- package/dist/{chunk-5CE64WGC.js.map → chunk-OSCL5TKR.js.map} +1 -1
- package/dist/{chunk-DARTMI5Z.js → chunk-SV22UIW4.js} +2 -2
- package/dist/{chunk-DARTMI5Z.js.map → chunk-SV22UIW4.js.map} +1 -1
- package/dist/{chunk-ELRMBQEC.js → chunk-T7C2VZUB.js} +17 -2
- package/dist/chunk-T7C2VZUB.js.map +1 -0
- package/dist/{chunk-DJKWFYAA.js → chunk-YZV2PTY4.js} +3 -3
- package/dist/{chunk-DJKWFYAA.js.map → chunk-YZV2PTY4.js.map} +1 -1
- package/dist/collapsible-panel.d.ts +1 -1
- package/dist/collapsible-panel.js.map +1 -1
- package/dist/css-values.d.ts +41 -3
- package/dist/css-values.js +1 -1
- package/dist/grid.d.ts +15 -1
- package/dist/grid.js +2 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +19 -19
- package/dist/list-action-row.js +1 -1
- package/dist/list-header.js +1 -1
- package/dist/list-item.js +1 -1
- package/dist/list.d.ts +21 -2
- package/dist/list.js +2 -1
- package/dist/nav-stack.js +1 -1
- package/dist/pane.d.ts +17 -2
- package/dist/pane.js +1 -1
- package/dist/row.d.ts +19 -1
- package/dist/row.js +2 -1
- package/dist/segmented-control.js +1 -1
- package/dist/select.d.ts +13 -3
- package/dist/select.js +1 -1
- package/dist/skeleton.d.ts +5 -1
- package/dist/skeleton.js +1 -1
- package/dist/spacer.js +1 -1
- package/dist/split-view.js +1 -1
- package/dist/state-banner.js +1 -1
- package/dist/styles/app-tab.css +9 -0
- package/dist/styles/catalog/components/catalog-example-stack.css +4 -1
- package/dist/styles/catalog/components/catalog-example.css +145 -0
- package/dist/styles/collapsible-panel.css +132 -4
- package/dist/styles/document.css +23 -0
- package/dist/styles/foundation.css +21 -7
- package/dist/styles/grid.css +10 -0
- package/dist/styles/list-header.css +45 -0
- package/dist/styles/list-inset-control.css +8 -1
- package/dist/styles/list-item.css +6 -0
- package/dist/styles/list.css +11 -0
- package/dist/styles/nav-stack.css +89 -2
- package/dist/styles/pane.css +86 -1
- package/dist/styles/resizable-region.css +93 -5
- package/dist/styles/row.css +10 -0
- package/dist/styles/select.css +39 -4
- package/dist/styles/skeleton.css +4 -1
- package/dist/styles/split-view.css +107 -1
- package/dist/styles/tab-scaffold.css +64 -1
- package/dist/styles/text.css +6 -0
- package/dist/styles/toolbar-control-group.css +90 -11
- package/dist/styles/toolbar-text.css +4 -1
- package/dist/styles/toolbar.css +130 -38
- package/dist/styles/webawesome.css +48 -2
- package/dist/styles/workbench.css +136 -4
- package/dist/text.d.ts +4 -3
- package/dist/text.js +1 -1
- package/dist/toolbar-text.js +1 -1
- package/dist/toolbar.d.ts +24 -3
- package/dist/toolbar.js +1 -1
- package/dist/{types-CzgSrFXP.d.ts → types-CEsieBZi.d.ts} +6 -1
- package/dist/value-table.js +1 -1
- package/dist/wire-resizable-regions.js +1 -1
- package/dist/wire-sidebar.d.ts +18 -3
- package/dist/wire-sidebar.js +96 -15
- package/dist/wire-sidebar.js.map +1 -1
- package/docs/accessibility.md +49 -9
- package/docs/app-layouts.md +73 -0
- package/docs/catalog.md +23 -2
- package/docs/collapsible-panel.md +83 -9
- package/docs/component-contract.md +36 -12
- package/docs/component-integration.md +9 -4
- package/docs/component-selection.md +25 -6
- package/docs/design/templates/list/stack-dark.svg +1 -1
- package/docs/design/templates/list/stack.svg +1 -1
- package/docs/design/templates/list-dark.svg +1 -1
- package/docs/design/templates/list-header/action-dark.svg +1 -1
- package/docs/design/templates/list-header/action.svg +1 -1
- package/docs/design/templates/list-header/count-dark.svg +1 -1
- package/docs/design/templates/list-header/count.svg +1 -1
- package/docs/design/templates/list-header/inline-action-dark.svg +1 -1
- package/docs/design/templates/list-header/inline-action.svg +1 -1
- package/docs/design/templates/list-header/toggle-expanded-dark.svg +1 -1
- package/docs/design/templates/list-header/toggle-expanded.svg +1 -1
- package/docs/design/templates/list-header-dark.svg +1 -1
- package/docs/design/templates/list-header.svg +1 -1
- package/docs/design/templates/list.svg +1 -1
- package/docs/design/templates/state-banner/info-badge-dark.svg +1 -1
- package/docs/design/templates/state-banner/info-badge.svg +1 -1
- package/docs/design/templates/state-banner-dark.svg +1 -1
- package/docs/design/templates/state-banner.svg +1 -1
- package/docs/design/templates/toolbar/title-and-actions-dark.svg +1 -1
- package/docs/design/templates/toolbar/title-and-actions.svg +1 -1
- package/docs/design/templates/toolbar-control-group/with-text-dark.svg +1 -1
- package/docs/design/templates/toolbar-control-group/with-text.svg +1 -1
- package/docs/design/templates/toolbar-control-group-dark.svg +1 -1
- package/docs/design/templates/toolbar-control-group.svg +1 -1
- package/docs/design/templates/toolbar-dark.svg +1 -1
- package/docs/design/templates/toolbar-text/default-dark.svg +1 -1
- package/docs/design/templates/toolbar-text/default.svg +1 -1
- package/docs/design/templates/toolbar-text/large-dark.svg +1 -1
- package/docs/design/templates/toolbar-text/large.svg +1 -1
- package/docs/design/templates/toolbar-text/small-dark.svg +1 -1
- package/docs/design/templates/toolbar-text/small.svg +1 -1
- package/docs/design/templates/toolbar-text-dark.svg +1 -1
- package/docs/design/templates/toolbar-text.svg +1 -1
- package/docs/design/templates/toolbar.svg +1 -1
- package/docs/document-baseline.md +31 -0
- package/docs/layout.md +86 -21
- package/docs/nav-stack.md +8 -0
- package/docs/recipes.md +81 -44
- package/docs/split-view.md +8 -0
- package/docs/tab-scaffold.md +4 -2
- package/docs/type-contracts.md +21 -17
- package/docs/ui-analyzer.md +19 -0
- package/docs/ui-evaluator.md +17 -0
- package/docs/ux-demo.md +5 -5
- package/docs/webawesome-theme.md +20 -2
- package/docs/workbench.md +20 -1
- package/evaluator/index.mjs +73 -8
- package/llms.txt +32 -14
- package/package.json +4 -2
- package/ux-demo/recipes/app-shell.tsx +209 -178
- package/ux-demo/recipes/collapsible-sidebar.tsx +189 -159
- package/ux-demo/recipes/compact-toolbar.tsx +48 -35
- package/ux-demo/recipes/composer-form.tsx +87 -79
- package/ux-demo/recipes/list-detail-dialog.tsx +124 -142
- package/ux-demo/recipes/list-workspace-states.tsx +83 -83
- package/ux-demo/recipes/loaders.ts +5 -2
- package/ux-demo/recipes/loading-inspector.tsx +157 -160
- package/ux-demo/recipes/navigation-sidebar.tsx +111 -109
- package/ux-demo/recipes/navigation-stack.tsx +50 -49
- package/ux-demo/recipes/types.ts +14 -0
- package/ux-demo/recipes/workspace-header.tsx +73 -56
- package/dist/chunk-54HM36IQ.js.map +0 -1
- package/dist/chunk-AQSKJ6U6.js.map +0 -1
- package/dist/chunk-COUPLRZG.js.map +0 -1
- package/dist/chunk-ELRMBQEC.js.map +0 -1
- package/dist/chunk-J3EE6XWD.js +0 -115
- package/dist/chunk-J3EE6XWD.js.map +0 -1
- package/dist/chunk-KKNK3JUT.js.map +0 -1
- package/dist/chunk-OL4TC3U2.js.map +0 -1
- package/dist/chunk-OQI7RCRP.js.map +0 -1
- package/dist/chunk-UMGY5JSP.js.map +0 -1
- package/dist/chunk-V6RZWDII.js.map +0 -1
- package/dist/chunk-ZNZ2JDBW.js.map +0 -1
- package/dist/chunk-ZSYLBVWG.js.map +0 -1
- package/ux-demo/recipes/app-shell.css +0 -87
- package/ux-demo/recipes/collapsible-sidebar.css +0 -83
- package/ux-demo/recipes/compact-toolbar.css +0 -35
- package/ux-demo/recipes/composer-form.css +0 -19
- package/ux-demo/recipes/list-detail-dialog.css +0 -42
- package/ux-demo/recipes/list-workspace-states.css +0 -30
- package/ux-demo/recipes/loading-inspector.css +0 -7
- package/ux-demo/recipes/navigation-sidebar.css +0 -12
- package/ux-demo/recipes/navigation-stack.css +0 -12
- package/ux-demo/recipes/recipe-root.css +0 -67
- package/ux-demo/recipes/recipe-root.tsx +0 -87
- package/ux-demo/recipes/workspace-header.css +0 -7
package/dist/grid.d.ts
CHANGED
|
@@ -2,6 +2,12 @@ import * as kerfjs from 'kerfjs';
|
|
|
2
2
|
import { UiSpaceName, CssLength, CssFlexKeyword, CssFlex } from './css-values.js';
|
|
3
3
|
import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
|
|
4
4
|
|
|
5
|
+
type GridRootAttributes = Readonly<Record<`data-${string}`, string | undefined> & {
|
|
6
|
+
'data-component'?: never;
|
|
7
|
+
'data-columns'?: never;
|
|
8
|
+
'data-flex'?: never;
|
|
9
|
+
'data-fill'?: never;
|
|
10
|
+
}>;
|
|
5
11
|
interface GridProps {
|
|
6
12
|
children?: KerfUiContent;
|
|
7
13
|
/** Number of equal-width columns. Must be a positive safe integer. */
|
|
@@ -10,11 +16,19 @@ interface GridProps {
|
|
|
10
16
|
gap?: UiSpaceName | CssLength;
|
|
11
17
|
/** Allow this grid to grow/shrink, use a keyword, or supply a typed CSS flex shorthand. */
|
|
12
18
|
flex?: boolean | CssFlexKeyword | CssFlex;
|
|
19
|
+
/**
|
|
20
|
+
* Fill the height of a parent with a definite height, such as an app root or
|
|
21
|
+
* a fixed-height frame, when this grid is that parent's layout root. Inside a
|
|
22
|
+
* flex layout use `flex` instead. Defaults to false.
|
|
23
|
+
*/
|
|
24
|
+
fill?: boolean;
|
|
13
25
|
className?: string;
|
|
26
|
+
/** Safe `data-*` metadata; Grid-owned structural attributes remain protected. */
|
|
27
|
+
rootAttributes?: GridRootAttributes;
|
|
14
28
|
/** Native named-slot assignment when composed inside a web component. */
|
|
15
29
|
slot?: string;
|
|
16
30
|
}
|
|
17
31
|
/** A fixed-count grid whose columns share the available width equally. */
|
|
18
|
-
declare function Grid({ children, columns, gap, flex, className, slot, }: GridProps): kerfjs.SafeHtml;
|
|
32
|
+
declare function Grid({ children, columns, gap, flex, fill, className, rootAttributes, slot, }: GridProps): kerfjs.SafeHtml;
|
|
19
33
|
|
|
20
34
|
export { CssFlex, CssFlexKeyword, CssLength, Grid, type GridProps, UiSpaceName };
|
package/dist/grid.js
CHANGED
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { AppTab, AppTabPresentation, AppTabProps, AppTabSize } from './app-tab.js';
|
|
2
2
|
export { Badge, BadgeAppearance, BadgeProps, BadgeShape, BadgeSize, BadgeTone } from './badge.js';
|
|
3
|
-
export { CssColor, CssFlex, CssFlexBasis, CssFlexKeyword, CssLength, CssLengthExpression, CssSize, CssSizeKeyword, CssValue, UiColorName, UiSpaceName, calc, colorVar, em, flex, lengthVar, pct, plus, px, rem, space, uiColor } from './css-values.js';
|
|
3
|
+
export { CssColor, CssFlex, CssFlexBasis, CssFlexKeyword, CssForegroundColor, CssLength, CssLengthExpression, CssSize, CssSizeKeyword, CssValue, UiColor, UiColorName, UiForegroundColorName, UiSpaceName, calc, colorVar, em, flex, foregroundColorVar, lengthVar, pct, plus, px, rem, space, uiColor } from './css-values.js';
|
|
4
4
|
export { DisclosureArrow, DisclosureArrowProps, DisclosureDirection } from './disclosure-arrow.js';
|
|
5
5
|
export { EmptyState, EmptyStateProps } from './empty-state.js';
|
|
6
6
|
export { FloatingToolbar, FloatingToolbarPosition, FloatingToolbarProps } from './floating-toolbar.js';
|
package/dist/index.js
CHANGED
|
@@ -1,38 +1,38 @@
|
|
|
1
1
|
export { wireTokenSearchFields } from './chunk-CMUIXJZM.js';
|
|
2
|
-
export { ValueTable, ValueTableRow } from './chunk-
|
|
3
|
-
export { wireResizableRegions } from './chunk-
|
|
2
|
+
export { ValueTable, ValueTableRow } from './chunk-2S7OWAEV.js';
|
|
3
|
+
export { wireResizableRegions } from './chunk-EKYZCRCX.js';
|
|
4
4
|
export { reorderTabs, wireTabBars } from './chunk-UKKSMZYT.js';
|
|
5
5
|
export { DialogSurface, PopupSurface } from './chunk-NN6GYOA2.js';
|
|
6
6
|
export { TabBar } from './chunk-N3GKMPDW.js';
|
|
7
7
|
export { TokenSearchField, placeTokenSearchCaret, readTokenSearchField } from './chunk-HJKRCKDR.js';
|
|
8
|
-
export { SegmentedControl } from './chunk-
|
|
9
|
-
export { Select } from './chunk-
|
|
10
|
-
export { Spacer } from './chunk-
|
|
11
|
-
export { StateBanner } from './chunk-
|
|
8
|
+
export { SegmentedControl } from './chunk-M6GLI6A6.js';
|
|
9
|
+
export { Select } from './chunk-ABAXNUXU.js';
|
|
10
|
+
export { Spacer } from './chunk-4XE2CDYB.js';
|
|
11
|
+
export { StateBanner } from './chunk-JGFZ42ZF.js';
|
|
12
12
|
export { SunkenPanel } from './chunk-6ZXOQEAN.js';
|
|
13
13
|
export { ResizableRegion, clampRegionSize, resizeRegionFromPointer } from './chunk-VOCPXGQN.js';
|
|
14
|
-
export { Row } from './chunk-
|
|
14
|
+
export { Row } from './chunk-DNCOFEUL.js';
|
|
15
15
|
export { EmptyState } from './chunk-E36EVCKG.js';
|
|
16
16
|
export { FloatingToolbar } from './chunk-NDUGJ4TU.js';
|
|
17
|
-
export { Grid } from './chunk-
|
|
18
|
-
export { ListActionRow } from './chunk-
|
|
17
|
+
export { Grid } from './chunk-T7C2VZUB.js';
|
|
18
|
+
export { ListActionRow } from './chunk-OSCL5TKR.js';
|
|
19
19
|
export { ListInsetControl } from './chunk-D7GWXIAS.js';
|
|
20
20
|
export { ListInsetText } from './chunk-ZK5EGVFP.js';
|
|
21
|
-
export { AppTab } from './chunk-
|
|
21
|
+
export { AppTab } from './chunk-IR53BQUJ.js';
|
|
22
22
|
export { ToolbarActionLink, ToolbarControlGroup } from './chunk-ZIYOJFZD.js';
|
|
23
|
-
export { Toolbar } from './chunk-
|
|
24
|
-
export { ListItem } from './chunk-
|
|
25
|
-
export { List } from './chunk-
|
|
26
|
-
export { ToolbarText } from './chunk-
|
|
27
|
-
export { Pane } from './chunk-
|
|
23
|
+
export { Toolbar } from './chunk-MTM43SJO.js';
|
|
24
|
+
export { ListItem } from './chunk-LIOXPQ7N.js';
|
|
25
|
+
export { List } from './chunk-7XJO4D6A.js';
|
|
26
|
+
export { ToolbarText } from './chunk-YZV2PTY4.js';
|
|
27
|
+
export { Pane } from './chunk-7GUQYHKA.js';
|
|
28
28
|
|
|
29
29
|
export { LoadingSpinner } from './chunk-ZLWQZUGF.js';
|
|
30
|
-
export { ListHeader } from './chunk-
|
|
31
|
-
export { Text } from './chunk-
|
|
32
|
-
export { Skeleton } from './chunk-
|
|
30
|
+
export { ListHeader } from './chunk-3S7OUHUN.js';
|
|
31
|
+
export { Text } from './chunk-7IUSV4XG.js';
|
|
32
|
+
export { Skeleton } from './chunk-KAQUUTZR.js';
|
|
33
33
|
|
|
34
34
|
export { Badge } from './chunk-XD7DWYXG.js';
|
|
35
|
-
export { calc, colorVar, em, flex, lengthVar, pct, plus, px, rem, space, uiColor } from './chunk-
|
|
35
|
+
export { calc, colorVar, em, flex, foregroundColorVar, lengthVar, pct, plus, px, rem, space, uiColor } from './chunk-2CE22Q2K.js';
|
|
36
36
|
export { DisclosureArrow } from './chunk-HMQ2ZDGG.js';
|
|
37
37
|
export { LucideIcon } from './chunk-4R777DUZ.js';
|
|
38
38
|
|
package/dist/list-action-row.js
CHANGED
package/dist/list-header.js
CHANGED
package/dist/list-item.js
CHANGED
package/dist/list.d.ts
CHANGED
|
@@ -5,12 +5,29 @@ import { H as HorizontalAlignment, L as ListVerticalAlignment } from './flex-ali
|
|
|
5
5
|
export { V as VerticalAlignment } from './flex-alignment-4ms8ZbV8.js';
|
|
6
6
|
import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
|
|
7
7
|
|
|
8
|
+
type ListRootAttributes = Readonly<Record<`data-${string}`, string | undefined> & {
|
|
9
|
+
'data-component'?: never;
|
|
10
|
+
'data-gap'?: never;
|
|
11
|
+
'data-flex'?: never;
|
|
12
|
+
'data-fill'?: never;
|
|
13
|
+
'data-h-align'?: never;
|
|
14
|
+
'data-v-align'?: never;
|
|
15
|
+
'data-scrollable'?: never;
|
|
16
|
+
'data-text-insets'?: never;
|
|
17
|
+
'data-control-insets'?: never;
|
|
18
|
+
}>;
|
|
8
19
|
interface ListProps {
|
|
9
20
|
children?: KerfUiContent;
|
|
10
21
|
/** Use the standard item gap, a named UI spacing token, or a typed CSS length. Defaults to no gap. */
|
|
11
22
|
gap?: boolean | UiSpaceName | CssLength;
|
|
12
23
|
/** Allow this list to grow/shrink, use a keyword, or supply a typed CSS flex shorthand. */
|
|
13
24
|
flex?: boolean | CssFlexKeyword | CssFlex;
|
|
25
|
+
/**
|
|
26
|
+
* Fill the height of a parent with a definite height, such as an app root or
|
|
27
|
+
* a fixed-height frame, when this list is that parent's layout root. Inside a
|
|
28
|
+
* flex layout use `flex` instead. Defaults to false.
|
|
29
|
+
*/
|
|
30
|
+
fill?: boolean;
|
|
14
31
|
/** Horizontal alignment. Defaults to full to preserve stretch-aligned list children. */
|
|
15
32
|
hAlign?: HorizontalAlignment;
|
|
16
33
|
/** Vertical distribution. Defaults to top. */
|
|
@@ -24,10 +41,12 @@ interface ListProps {
|
|
|
24
41
|
/** Physical sides that receive the standard 8px control inset. Text insets win on overlap. */
|
|
25
42
|
controlInsets?: Sides;
|
|
26
43
|
className?: string;
|
|
44
|
+
/** Safe `data-*` metadata; List-owned structural attributes remain protected. */
|
|
45
|
+
rootAttributes?: ListRootAttributes;
|
|
27
46
|
/** Native named-slot assignment when composed inside a web component. */
|
|
28
47
|
slot?: string;
|
|
29
48
|
}
|
|
30
|
-
/** A stretch-aligned vertical stack with optional gap, flex, scroll, and dividers. */
|
|
31
|
-
declare function List({ children, gap, flex, hAlign, vAlign, scrollable, dividerSides, textInsets, controlInsets, className, slot, }: ListProps): kerfjs.SafeHtml;
|
|
49
|
+
/** A stretch-aligned vertical stack with optional gap, flex, fill, scroll, and dividers. */
|
|
50
|
+
declare function List({ children, gap, flex, fill, hAlign, vAlign, scrollable, dividerSides, textInsets, controlInsets, className, rootAttributes, slot, }: ListProps): kerfjs.SafeHtml;
|
|
32
51
|
|
|
33
52
|
export { CssFlex, CssFlexKeyword, CssLength, DividerSides, HorizontalAlignment, List, type ListProps, ListVerticalAlignment, Sides, UiSpaceName };
|
package/dist/list.js
CHANGED
package/dist/nav-stack.js
CHANGED
package/dist/pane.d.ts
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import * as kerfjs from 'kerfjs';
|
|
2
2
|
import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
|
|
3
3
|
|
|
4
|
-
/**
|
|
4
|
+
/**
|
|
5
|
+
* Logical pane sides: where a {@link Pane} can show a separator and where it can
|
|
6
|
+
* compensate for a device safe-area inset.
|
|
7
|
+
*/
|
|
5
8
|
type PaneSeparatorSide = 'block-start' | 'block-end' | 'inline-start' | 'inline-end';
|
|
6
9
|
/** Semantic root elements supported by {@link Pane}. */
|
|
7
10
|
type PaneElement = 'article' | 'aside' | 'div' | 'main' | 'section';
|
|
@@ -13,6 +16,10 @@ type PaneRootAttributes = Readonly<Record<`data-${string}`, string | undefined>
|
|
|
13
16
|
'data-separator-block-end'?: never;
|
|
14
17
|
'data-separator-inline-start'?: never;
|
|
15
18
|
'data-separator-inline-end'?: never;
|
|
19
|
+
'data-safe-area-block-start'?: never;
|
|
20
|
+
'data-safe-area-block-end'?: never;
|
|
21
|
+
'data-safe-area-inline-start'?: never;
|
|
22
|
+
'data-safe-area-inline-end'?: never;
|
|
16
23
|
}>;
|
|
17
24
|
interface PaneProps {
|
|
18
25
|
/** Optional fixed chrome above the scrolling content, arranged vertically. */
|
|
@@ -27,6 +34,14 @@ interface PaneProps {
|
|
|
27
34
|
contentElement?: PaneContentElement;
|
|
28
35
|
/** Independent logical-edge separator lines. Defaults to none. */
|
|
29
36
|
separators?: readonly PaneSeparatorSide[];
|
|
37
|
+
/**
|
|
38
|
+
* Sides on which the pane may compensate for a device safe-area inset.
|
|
39
|
+
* Defaults to every side: the pane pads its slots for each side that still
|
|
40
|
+
* reaches an unsafe screen edge, as its surrounding layout reports, while its
|
|
41
|
+
* background and separators paint through. List only the sides an app-owned
|
|
42
|
+
* layout places at a screen edge, or pass `[]` to opt out.
|
|
43
|
+
*/
|
|
44
|
+
safeAreaEdges?: readonly PaneSeparatorSide[];
|
|
30
45
|
id?: string;
|
|
31
46
|
/** Accessible name for a landmark root such as `aside` or `main`. */
|
|
32
47
|
label?: string;
|
|
@@ -47,6 +62,6 @@ interface PaneProps {
|
|
|
47
62
|
* each logical edge, so the same component works as a sidebar, main area,
|
|
48
63
|
* inspector, or dialog column.
|
|
49
64
|
*/
|
|
50
|
-
declare function Pane({ header, children, footer, element, contentElement, separators, id, label, contentLabel, className, headerClassName, contentClassName, footerClassName, rootAttributes, slot, }: PaneProps): kerfjs.SafeHtml;
|
|
65
|
+
declare function Pane({ header, children, footer, element, contentElement, separators, safeAreaEdges, id, label, contentLabel, className, headerClassName, contentClassName, footerClassName, rootAttributes, slot, }: PaneProps): kerfjs.SafeHtml;
|
|
51
66
|
|
|
52
67
|
export { Pane, type PaneContentElement, type PaneElement, type PaneProps, type PaneSeparatorSide };
|
package/dist/pane.js
CHANGED
package/dist/row.d.ts
CHANGED
|
@@ -4,6 +4,16 @@ import { S as Sides } from './divider-sides-BzB6rphT.js';
|
|
|
4
4
|
import { H as HorizontalAlignment, V as VerticalAlignment } from './flex-alignment-4ms8ZbV8.js';
|
|
5
5
|
import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
|
|
6
6
|
|
|
7
|
+
type RowRootAttributes = Readonly<Record<`data-${string}`, string | undefined> & {
|
|
8
|
+
'data-component'?: never;
|
|
9
|
+
'data-h-align'?: never;
|
|
10
|
+
'data-v-align'?: never;
|
|
11
|
+
'data-flex'?: never;
|
|
12
|
+
'data-fill'?: never;
|
|
13
|
+
'data-wrap'?: never;
|
|
14
|
+
'data-text-insets'?: never;
|
|
15
|
+
'data-control-insets'?: never;
|
|
16
|
+
}>;
|
|
7
17
|
interface RowProps {
|
|
8
18
|
children?: KerfUiContent;
|
|
9
19
|
/** Horizontal distribution. Defaults to left. */
|
|
@@ -14,6 +24,12 @@ interface RowProps {
|
|
|
14
24
|
gap?: UiSpaceName | CssLength;
|
|
15
25
|
/** Allow this row to grow/shrink, use a keyword, or supply a typed CSS flex shorthand. */
|
|
16
26
|
flex?: boolean | CssFlexKeyword | CssFlex;
|
|
27
|
+
/**
|
|
28
|
+
* Fill the height of a parent with a definite height, such as an app root or
|
|
29
|
+
* a fixed-height frame, when this row is that parent's layout root. Inside a
|
|
30
|
+
* flex layout use `flex` instead. Defaults to false.
|
|
31
|
+
*/
|
|
32
|
+
fill?: boolean;
|
|
17
33
|
/** Allow children to wrap onto additional lines. */
|
|
18
34
|
wrap?: boolean;
|
|
19
35
|
/** Physical sides that receive the standard 17px text inset. */
|
|
@@ -21,10 +37,12 @@ interface RowProps {
|
|
|
21
37
|
/** Physical sides that receive the standard 8px control inset. Text insets win on overlap. */
|
|
22
38
|
controlInsets?: Sides;
|
|
23
39
|
className?: string;
|
|
40
|
+
/** Safe `data-*` metadata; Row-owned structural attributes remain protected. */
|
|
41
|
+
rootAttributes?: RowRootAttributes;
|
|
24
42
|
/** Native named-slot assignment when composed inside a web component. */
|
|
25
43
|
slot?: string;
|
|
26
44
|
}
|
|
27
45
|
/** A horizontal flex row with explicit physical-axis alignment and spacing. */
|
|
28
|
-
declare function Row({ children, hAlign, vAlign, gap, flex, wrap, textInsets, controlInsets, className, slot, }: RowProps): kerfjs.SafeHtml;
|
|
46
|
+
declare function Row({ children, hAlign, vAlign, gap, flex, fill, wrap, textInsets, controlInsets, className, rootAttributes, slot, }: RowProps): kerfjs.SafeHtml;
|
|
29
47
|
|
|
30
48
|
export { CssFlex, CssFlexKeyword, CssLength, HorizontalAlignment, Row, type RowProps, Sides, UiSpaceName, VerticalAlignment };
|
package/dist/row.js
CHANGED
package/dist/select.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { SafeHtml } from 'kerfjs';
|
|
2
|
-
import {
|
|
2
|
+
import { CssForegroundColor } from './css-values.js';
|
|
3
3
|
import { LucideNode } from './lucide-icon.js';
|
|
4
4
|
import 'lucide';
|
|
5
5
|
|
|
@@ -8,9 +8,19 @@ interface SelectChoice<Value extends string = string> {
|
|
|
8
8
|
label: string;
|
|
9
9
|
icon?: LucideNode;
|
|
10
10
|
iconName?: string;
|
|
11
|
-
/**
|
|
12
|
-
|
|
11
|
+
/**
|
|
12
|
+
* Foreground color for the optional icon: a semantic foreground token such
|
|
13
|
+
* as `uiColor('success-on-quiet')`, or an application-owned
|
|
14
|
+
* `foregroundColorVar('--app-icon-color')`. Fill tokens such as
|
|
15
|
+
* `uiColor('success')` are pale background tints and do not type-check.
|
|
16
|
+
*/
|
|
17
|
+
color?: CssForegroundColor;
|
|
13
18
|
group?: string;
|
|
19
|
+
/**
|
|
20
|
+
* Draw a divider between this choice and the previous choice in the same
|
|
21
|
+
* list. A group boundary is already a separator, so the first choice of a
|
|
22
|
+
* group (or of the whole menu) never draws a second one.
|
|
23
|
+
*/
|
|
14
24
|
separatorBefore?: boolean;
|
|
15
25
|
}
|
|
16
26
|
type SelectAccessibleName = {
|
package/dist/select.js
CHANGED
package/dist/skeleton.d.ts
CHANGED
|
@@ -10,6 +10,10 @@ interface SkeletonProps {
|
|
|
10
10
|
radius?: CssLength;
|
|
11
11
|
/** Render this many stacked lines (the last one shorter), for multi-line text. */
|
|
12
12
|
lines?: number;
|
|
13
|
+
/** Lay the block out as `display: block` instead of the default
|
|
14
|
+
* `inline-block`, so it takes no text line of its own: no baseline gap
|
|
15
|
+
* below it, and it centers like an icon in a slot. Defaults to `false`. */
|
|
16
|
+
block?: boolean;
|
|
13
17
|
/** Accessible label. Omit to keep the block decorative (`aria-hidden`). */
|
|
14
18
|
label?: string;
|
|
15
19
|
className?: string;
|
|
@@ -22,6 +26,6 @@ interface SkeletonProps {
|
|
|
22
26
|
* `placeholder` prop. Decorative by default (`aria-hidden`); pass `label` to
|
|
23
27
|
* announce it. Sizes to its slot unless `width`/`height` are given.
|
|
24
28
|
*/
|
|
25
|
-
declare function Skeleton({ width, height, radius, lines, label, className, slot, }: SkeletonProps): kerfjs.SafeHtml;
|
|
29
|
+
declare function Skeleton({ width, height, radius, lines, block, label, className, slot, }: SkeletonProps): kerfjs.SafeHtml;
|
|
26
30
|
|
|
27
31
|
export { Skeleton, type SkeletonProps };
|
package/dist/skeleton.js
CHANGED
package/dist/spacer.js
CHANGED
package/dist/split-view.js
CHANGED
package/dist/state-banner.js
CHANGED
package/dist/styles/app-tab.css
CHANGED
|
@@ -148,6 +148,15 @@
|
|
|
148
148
|
.kui-app-tab__close:hover {
|
|
149
149
|
color: var(--kui-color-text);
|
|
150
150
|
}
|
|
151
|
+
/* A dormant tab keeps its close button's space, so it matches the live tab's
|
|
152
|
+
geometry, but never shows a control it has disabled. */
|
|
153
|
+
.kui-app-tab:is([data-placeholder="true"], [data-pending="true"])
|
|
154
|
+
.kui-app-tab__close {
|
|
155
|
+
visibility: hidden;
|
|
156
|
+
}
|
|
157
|
+
.kui-app-tab[data-pending="true"] .kui-app-tab__name {
|
|
158
|
+
color: var(--kui-color-text-quiet);
|
|
159
|
+
}
|
|
151
160
|
.kui-app-tab__close-icon {
|
|
152
161
|
display: grid;
|
|
153
162
|
width: 0.6375rem;
|
|
@@ -21,6 +21,151 @@
|
|
|
21
21
|
font-size: var(--kui-font-xs);
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
+
.kui-catalog-example__viewport {
|
|
25
|
+
position: relative;
|
|
26
|
+
max-width: 100%;
|
|
27
|
+
box-sizing: border-box;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.kui-catalog-example__viewport > * {
|
|
31
|
+
max-width: 100%;
|
|
32
|
+
box-sizing: border-box;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.kui-catalog-example__viewport[data-layout="grid"] {
|
|
36
|
+
display: grid;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
.kui-catalog-example__viewport[data-layout="flex"] {
|
|
40
|
+
display: flex;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
.kui-catalog-example__viewport[data-layout="flex-column"] {
|
|
44
|
+
display: flex;
|
|
45
|
+
flex-direction: column;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
.kui-catalog-example__viewport[data-width="full"] {
|
|
49
|
+
width: 100%;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
.kui-catalog-example__viewport[data-width="compact"] {
|
|
53
|
+
width: min(100%, 27.5rem);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
.kui-catalog-example__viewport[data-width="medium"] {
|
|
57
|
+
width: min(100%, 40rem);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
.kui-catalog-example__viewport[data-width="wide"] {
|
|
61
|
+
width: 100%;
|
|
62
|
+
max-width: 54rem;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
.kui-catalog-example__viewport[data-width="text"] {
|
|
66
|
+
width: 17.5rem;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
.kui-catalog-example__viewport[data-width="control"] {
|
|
70
|
+
min-width: min(24rem, 100%);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
.kui-catalog-example__viewport[data-height="short"] {
|
|
74
|
+
height: 13.75rem;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
.kui-catalog-example__viewport[data-height="reduced"] {
|
|
78
|
+
height: 17.5rem;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
.kui-catalog-example__viewport[data-height="medium"] {
|
|
82
|
+
height: 20rem;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
.kui-catalog-example__viewport[data-height="tall"] {
|
|
86
|
+
height: 22.5rem;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/* An application-sized frame for app shells and whole-screen layouts, which
|
|
90
|
+
read cramped in the component-sized heights above. The frame stands in for
|
|
91
|
+
the screen, so it is the containing block for screen-fixed chrome: a compact
|
|
92
|
+
CollapsiblePanel overlay, its backdrop, and restore controls dock to the
|
|
93
|
+
frame's edges instead of the page's, where the frame's inset and clip would
|
|
94
|
+
cut them off. An identity transform establishes that containing block.
|
|
95
|
+
`contain: layout` does too, but WebKit then mis-hit-tests any transformed
|
|
96
|
+
descendant of that fixed chrome once the frame also clips (every pressed
|
|
97
|
+
ListItem scales), so taps on an open overlay's items were lost. */
|
|
98
|
+
.kui-catalog-example__viewport[data-height="app"] {
|
|
99
|
+
height: 37rem;
|
|
100
|
+
transform: translate(0);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
.kui-catalog-example__viewport[data-min-height="short"] {
|
|
104
|
+
min-height: 16rem;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
.kui-catalog-example__viewport[data-min-height="medium"] {
|
|
108
|
+
min-height: 20rem;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
.kui-catalog-example__viewport[data-frame] {
|
|
112
|
+
border: 1px solid var(--kui-color-border);
|
|
113
|
+
border-radius: var(--kui-radius-m);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
.kui-catalog-example__viewport[data-frame="dashed"] {
|
|
117
|
+
border-style: dashed;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
.kui-catalog-example__viewport[data-surface="default"] {
|
|
121
|
+
background: var(--kui-color-surface);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
.kui-catalog-example__viewport[data-surface="lowered"] {
|
|
125
|
+
background: var(--kui-color-surface-lowered);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
.kui-catalog-example__viewport[data-overflow="hidden"] {
|
|
129
|
+
overflow: hidden;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
.kui-catalog-example__viewport[data-overflow="auto-x"] {
|
|
133
|
+
overflow-x: auto;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
.kui-catalog-example__viewport[data-shadow="true"] {
|
|
137
|
+
box-shadow: var(--kui-shadow-s);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
.kui-catalog-example__compact-fallback {
|
|
141
|
+
display: none;
|
|
142
|
+
margin: 0;
|
|
143
|
+
color: var(--kui-color-text-quiet);
|
|
144
|
+
font-size: var(--kui-font-s);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
@media ((max-width: 52rem)) {
|
|
148
|
+
.kui-catalog-example__viewport[data-responsive="roomy-only"] {
|
|
149
|
+
display: none;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
.kui-catalog-example__compact-fallback {
|
|
153
|
+
display: block;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
@media ((max-width: 30rem)) {
|
|
158
|
+
.kui-catalog-example__viewport[data-min-height="medium"] {
|
|
159
|
+
min-height: 16rem;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
@media ((forced-colors: active)) {
|
|
164
|
+
.kui-catalog-example__viewport[data-frame] {
|
|
165
|
+
forced-color-adjust: auto;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
|
|
24
169
|
/* The published inset lets the geometry overlay exclude this authoring aid. */
|
|
25
170
|
.kui-catalog-example[data-align="glyph"]
|
|
26
171
|
> :not([data-catalog-example-label]):not([data-catalog-example-note]) {
|