@kerfjs/ui 5.0.0-beta.32 → 5.0.0-beta.34

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/llms.txt CHANGED
@@ -91,7 +91,10 @@ maintain a central style list. Configure JSX with `"jsxImportSource": "kerfjs"`.
91
91
  own the geometry (8px inline margin + 1px border + 8px padding). Do not add a
92
92
  container padding on top of a content-item's own margin — pick one owner. Use
93
93
  `.kui-content` for 24px major vertical rhythm.
94
- - **Use `List` for vertical layout.** It supplies a stretch-aligned column plus
94
+ - **Use `Row` for horizontal and `List` for vertical layout.** Both expose
95
+ physical `hAlign`/`vAlign` props and typed gaps. Row defaults to left/full,
96
+ an `xs` gap, and no wrapping; List retains full/top and zero-gap defaults.
97
+ List additionally supplies
95
98
  optional typed `gap`, `flex`, vertical scrolling, and canonical
96
99
  `dividerSides` (`t`/`r`/`b`/`l` order). It adds no list semantics; children own
97
100
  those, and only one bounded region should own scrolling. Pass a finite spacing
@@ -123,6 +126,9 @@ maintain a central style list. Configure JSX with `"jsxImportSource": "kerfjs"`.
123
126
  - `Select` requires a visible `label` or an `ariaLabel` for a visually hidden
124
127
  accessible name. The package names the internal combobox, including custom
125
128
  selected content; consumers do not need shadow-DOM naming workarounds.
129
+ Import `select/register` once for the canonical animation lifecycle: stale
130
+ close/show completions cannot override a later request. Consumers must not
131
+ repair popup timing or anchor placement; raw Web Awesome selects stay native.
126
132
  Use `hint` for supporting text below the control and `placeholderText` only
127
133
  for the empty value inside it; loading placeholders retain the visible hint.
128
134
  - **Trust the defaults.** Render a control at its natural size and color (a
@@ -151,7 +157,7 @@ maintain a central style list. Configure JSX with `"jsxImportSource": "kerfjs"`.
151
157
  - **Space by the five-step scale, by relationship not by eye.** `0`
152
158
  `--kui-space-none`, `4px` `--kui-space-2xs`, `8px` `--kui-space-xs` (inside a
153
159
  group), `16px` `--kui-space-m`, `24px` `--kui-space-l` (between major differing
154
- regions). 12px/32px are off-scale exceptions. Prefer direct `List.gap`
160
+ regions). 12px/32px are off-scale exceptions. Prefer direct `Row.gap`/`List.gap`
155
161
  shorthands; use `space`, `px`, `rem`, `em`, `pct`, `lengthVar`, and
156
162
  `calc(plus(...))` for typed runtime composition. `remify()` is source-CSS only.
157
163
  - **Keep nested highlight corners concentric.** Inset hover and selection surfaces
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kerfjs/ui",
3
- "version": "5.0.0-beta.32",
3
+ "version": "5.0.0-beta.34",
4
4
  "description": "Accessible, composable UI primitives for kerf applications.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -88,6 +88,11 @@
88
88
  "browser": "./dist/browser/list.js",
89
89
  "import": "./dist/list.js"
90
90
  },
91
+ "./row": {
92
+ "types": "./dist/row.d.ts",
93
+ "browser": "./dist/browser/row.js",
94
+ "import": "./dist/row.js"
95
+ },
91
96
  "./list-action-row": {
92
97
  "types": "./dist/list-action-row.d.ts",
93
98
  "browser": "./dist/browser/list-action-row.js",
@@ -278,6 +283,7 @@
278
283
  "./floating-toolbar.css": "./dist/styles/floating-toolbar.css",
279
284
  "./toolbar-text.css": "./dist/styles/toolbar-text.css",
280
285
  "./list.css": "./dist/styles/list.css",
286
+ "./row.css": "./dist/styles/row.css",
281
287
  "./list-action-row.css": "./dist/styles/list-action-row.css",
282
288
  "./list-item.css": "./dist/styles/list-item.css",
283
289
  "./list-header.css": "./dist/styles/list-header.css",
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/list.tsx"],"names":[],"mappings":";;;AAUA,IAAM,UAAA,GAAqC;AAAA,EACzC,MAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAA;AAAA,EACA;AACF,CAAA;AAgBO,SAAS,IAAA,CAAK;AAAA,EACnB,QAAA;AAAA,EACA,GAAA,GAAM,KAAA;AAAA,EACN,IAAA,GAAO,KAAA;AAAA,EACP,UAAA,GAAa,KAAA;AAAA,EACb,YAAA,GAAe,EAAA;AAAA,EACf,SAAA,GAAY;AACd,CAAA,EAAc;AACZ,EAAA,MAAM,QAAA,GACJ,GAAA,KAAQ,IAAA,GACJ,qBAAA,GACA,UAAA,CAAW,QAAA,CAAS,GAAkB,CAAA,GACpC,KAAA,CAAM,GAAkB,CAAA,GACxB,GAAA,IAAO,MAAA;AACf,EAAA,MAAM,SAAA,GAAY,IAAA,KAAS,IAAA,GAAO,UAAA,GAAa,IAAA,IAAQ,MAAA;AACvD,EAAA,MAAM,KAAA,GAAQ;AAAA,IACZ,QAAA,GAAW,CAAA,gBAAA,EAAmB,QAAQ,CAAA,CAAA,GAAK,EAAA;AAAA,IAC3C,SAAA,GAAY,CAAA,iBAAA,EAAoB,SAAS,CAAA,CAAA,GAAK;AAAA,GAChD,CACG,MAAA,CAAO,OAAO,CAAA,CACd,KAAK,GAAG,CAAA;AAEX,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,CAAA,SAAA,EAAY,SAAS,CAAA,CAAA,CAAG,IAAA,EAAK;AAAA,MACpC,gBAAA,EAAe,MAAA;AAAA,MACf,UAAA,EAAU,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAC,CAAA;AAAA,MAC7B,WAAA,EAAW,MAAA,CAAO,OAAA,CAAQ,IAAI,CAAC,CAAA;AAAA,MAC/B,iBAAA,EAAiB,OAAO,UAAU,CAAA;AAAA,MAClC,iBAAe,YAAA,IAAgB,MAAA;AAAA,MAC/B,OAAO,KAAA,IAAS,MAAA;AAAA,MAEf;AAAA;AAAA,GACH;AAEJ","file":"chunk-RL6COPKF.js","sourcesContent":["import {\n type CssFlex,\n type CssFlexKeyword,\n type CssLength,\n space,\n type UiSpaceName,\n} from './css-values.js';\nimport type { DividerSides } from './divider-sides.js';\nimport type { KerfUiContent } from './semantic-content.js';\n\nconst spaceNames: readonly UiSpaceName[] = [\n 'none',\n '2xs',\n 'xs',\n 's',\n 'm',\n 'l',\n 'xl',\n];\n\nexport interface ListProps {\n children?: KerfUiContent;\n /** Use the standard item gap, a named UI spacing token, or a typed CSS length. Defaults to no gap. */\n gap?: boolean | UiSpaceName | CssLength;\n /** Allow this list to grow/shrink, use a keyword, or supply a typed CSS flex shorthand. */\n flex?: boolean | CssFlexKeyword | CssFlex;\n /** Own vertical scrolling and overscroll containment. */\n scrollable?: boolean;\n /** Physical divider edges in canonical top/right/bottom/left order. */\n dividerSides?: DividerSides;\n className?: string;\n}\n\n/** A stretch-aligned vertical stack with optional gap, flex, scroll, and dividers. */\nexport function List({\n children,\n gap = false,\n flex = false,\n scrollable = false,\n dividerSides = '',\n className = '',\n}: ListProps) {\n const gapValue =\n gap === true\n ? 'var(--kui-list-gap)'\n : spaceNames.includes(gap as UiSpaceName)\n ? space(gap as UiSpaceName)\n : gap || undefined;\n const flexValue = flex === true ? '1 1 auto' : flex || undefined;\n const style = [\n gapValue ? `--_kui-list-gap:${gapValue}` : '',\n flexValue ? `--_kui-list-flex:${flexValue}` : '',\n ]\n .filter(Boolean)\n .join(';');\n\n return (\n <div\n class={`kui-list ${className}`.trim()}\n data-component=\"list\"\n data-gap={String(Boolean(gap))}\n data-flex={String(Boolean(flex))}\n data-scrollable={String(scrollable)}\n divider-sides={dividerSides || undefined}\n style={style || undefined}\n >\n {children}\n </div>\n );\n}\n\nexport type {\n CssFlex,\n CssFlexKeyword,\n CssLength,\n UiSpaceName,\n} from './css-values.js';\nexport type { DividerSides } from './divider-sides.js';\n"]}