@adea-ai/ui 0.89.1 → 0.93.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/README.md +22 -5
  2. package/dist/NOTICE +19 -0
  3. package/dist/components/composites/list-row/index.d.ts +1 -0
  4. package/dist/components/composites/list-row/index.d.ts.map +1 -1
  5. package/dist/components/composites/list-row/index.js +2 -1
  6. package/dist/components/composites/list-row/list-row-control.d.ts +20 -0
  7. package/dist/components/composites/list-row/list-row-control.d.ts.map +1 -0
  8. package/dist/components/composites/list-row/list-row-control.js +96 -0
  9. package/dist/components/composites/list-row/list-row-control.js.map +1 -0
  10. package/dist/components/composites/list-row/list-row.d.ts +15 -35
  11. package/dist/components/composites/list-row/list-row.d.ts.map +1 -1
  12. package/dist/components/composites/list-row/list-row.js +88 -135
  13. package/dist/components/composites/list-row/list-row.js.map +1 -1
  14. package/dist/components/composites/tree/index.d.ts +4 -0
  15. package/dist/components/composites/tree/index.d.ts.map +1 -0
  16. package/dist/components/composites/tree/index.js +2 -0
  17. package/dist/components/composites/tree/tree-navigation.d.ts +46 -0
  18. package/dist/components/composites/tree/tree-navigation.d.ts.map +1 -0
  19. package/dist/components/composites/tree/tree-navigation.js +95 -0
  20. package/dist/components/composites/tree/tree-navigation.js.map +1 -0
  21. package/dist/components/composites/tree/tree.d.ts +64 -0
  22. package/dist/components/composites/tree/tree.d.ts.map +1 -0
  23. package/dist/components/composites/tree/tree.js +311 -0
  24. package/dist/components/composites/tree/tree.js.map +1 -0
  25. package/dist/components/conversation/message-composer.d.ts +18 -3
  26. package/dist/components/conversation/message-composer.d.ts.map +1 -1
  27. package/dist/components/conversation/message-composer.js +93 -27
  28. package/dist/components/conversation/message-composer.js.map +1 -1
  29. package/dist/components/layout/sidebar-nav/index.d.ts +1 -1
  30. package/dist/components/layout/sidebar-nav/index.d.ts.map +1 -1
  31. package/dist/components/layout/sidebar-nav/index.js +2 -2
  32. package/dist/components/layout/sidebar-nav/sidebar-nav.d.ts +19 -1
  33. package/dist/components/layout/sidebar-nav/sidebar-nav.d.ts.map +1 -1
  34. package/dist/components/layout/sidebar-nav/sidebar-nav.js +83 -17
  35. package/dist/components/layout/sidebar-nav/sidebar-nav.js.map +1 -1
  36. package/dist/components/layout/top-bar/top-bar.d.ts +6 -5
  37. package/dist/components/layout/top-bar/top-bar.d.ts.map +1 -1
  38. package/dist/components/layout/top-bar/top-bar.js +30 -7
  39. package/dist/components/layout/top-bar/top-bar.js.map +1 -1
  40. package/dist/components/ui/dialog/dialog.d.ts +2 -0
  41. package/dist/components/ui/dialog/dialog.d.ts.map +1 -1
  42. package/dist/components/ui/dialog/dialog.js +4 -3
  43. package/dist/components/ui/dialog/dialog.js.map +1 -1
  44. package/dist/components/ui/modal-dialog/modal-dialog.d.ts +5 -2
  45. package/dist/components/ui/modal-dialog/modal-dialog.d.ts.map +1 -1
  46. package/dist/components/ui/modal-dialog/modal-dialog.js +33 -24
  47. package/dist/components/ui/modal-dialog/modal-dialog.js.map +1 -1
  48. package/dist/components/ui/textarea/index.d.ts +1 -1
  49. package/dist/components/ui/textarea/index.d.ts.map +1 -1
  50. package/dist/components/ui/textarea/index.js +2 -2
  51. package/dist/components/ui/textarea/textarea.d.ts +15 -2
  52. package/dist/components/ui/textarea/textarea.d.ts.map +1 -1
  53. package/dist/components/ui/textarea/textarea.js +47 -3
  54. package/dist/components/ui/textarea/textarea.js.map +1 -1
  55. package/dist/components/ui/tooltip/tooltip.d.ts.map +1 -1
  56. package/dist/components/ui/tooltip/tooltip.js +239 -17
  57. package/dist/components/ui/tooltip/tooltip.js.map +1 -1
  58. package/dist/index.d.ts +1 -0
  59. package/dist/index.d.ts.map +1 -1
  60. package/dist/index.js +5 -3
  61. package/dist/lib/variants.js +2 -2
  62. package/dist/r/conversation.json +1 -0
  63. package/dist/r/list-row.json +5 -0
  64. package/dist/r/registry.json +41 -2
  65. package/dist/r/src/components/composites/list-row/index.ts +1 -0
  66. package/dist/r/src/components/composites/list-row/list-row-control.tsx +108 -0
  67. package/dist/r/src/components/composites/list-row/list-row.tsx +60 -127
  68. package/dist/r/src/components/composites/tree/index.ts +3 -0
  69. package/dist/r/src/components/composites/tree/tree-navigation.ts +114 -0
  70. package/dist/r/src/components/composites/tree/tree.tsx +405 -0
  71. package/dist/r/src/components/conversation/message-composer.tsx +103 -22
  72. package/dist/r/src/components/layout/sidebar-nav/index.ts +3 -0
  73. package/dist/r/src/components/layout/sidebar-nav/sidebar-nav.tsx +75 -6
  74. package/dist/r/src/components/layout/top-bar/top-bar.tsx +34 -11
  75. package/dist/r/src/components/ui/dialog/dialog.tsx +4 -2
  76. package/dist/r/src/components/ui/modal-dialog/modal-dialog.tsx +20 -4
  77. package/dist/r/src/components/ui/textarea/index.ts +1 -1
  78. package/dist/r/src/components/ui/textarea/textarea.tsx +52 -10
  79. package/dist/r/src/components/ui/tooltip/tooltip.tsx +305 -10
  80. package/dist/r/src/styles/base.css +40 -0
  81. package/dist/r/textarea.json +3 -1
  82. package/dist/r/top-bar.json +3 -1
  83. package/dist/r/tree.json +29 -0
  84. package/package.json +4 -1
  85. package/registry.json +41 -2
  86. package/src/components/composites/list-row/index.ts +1 -0
  87. package/src/components/composites/list-row/list-row-control.tsx +108 -0
  88. package/src/components/composites/list-row/list-row.tsx +60 -127
  89. package/src/components/composites/tree/index.ts +3 -0
  90. package/src/components/composites/tree/tree-navigation.ts +114 -0
  91. package/src/components/composites/tree/tree.tsx +405 -0
  92. package/src/components/conversation/message-composer.tsx +103 -22
  93. package/src/components/layout/sidebar-nav/index.ts +3 -0
  94. package/src/components/layout/sidebar-nav/sidebar-nav.tsx +75 -6
  95. package/src/components/layout/top-bar/top-bar.tsx +34 -11
  96. package/src/components/ui/dialog/dialog.tsx +4 -2
  97. package/src/components/ui/modal-dialog/modal-dialog.tsx +20 -4
  98. package/src/components/ui/textarea/index.ts +1 -1
  99. package/src/components/ui/textarea/textarea.tsx +52 -10
  100. package/src/components/ui/tooltip/tooltip.tsx +305 -10
  101. package/src/index.ts +1 -0
  102. package/src/styles/base.css +40 -0
package/README.md CHANGED
@@ -74,6 +74,13 @@ The library owns the datalist and unique association; a suggestion does not
74
74
  restrict the submitted value. Native `required`, `pattern`, form, event, and
75
75
  ref props still apply to the input.
76
76
 
77
+ `ModalDialog` defaults to a compact surface for short tasks. Use
78
+ `size="settings"` with `SettingsPage` for a wider,
79
+ viewport-bounded settings surface; the shared layout keeps its panel content
80
+ scrollable while the dialog title remains visible.
81
+ The settings navigation and modal sizing browser contracts run against the
82
+ packed artifact in both pull-request validation and publishing.
83
+
77
84
  `ThreadPanel.headerActions` accepts shared controls for host actions such as
78
85
  marking a thread unread. Closing the thread remains a separate labelled,
79
86
  tooltip-backed control. Hosts retain read-marker and message authority.
@@ -86,6 +93,7 @@ focus restoration and is cancelled if the menu unmounts. Authentication,
86
93
  updates, navigation, and other effects remain host callbacks.
87
94
 
88
95
  `SidebarNavTitle` accepts polymorphic `as` for a host's title heading.
96
+ `SidebarNavLabel` keeps a row's complete accessible text while truncating its visible label, leaving room for adjacent controls. The navigation root clamps its preferred width to the containing lane at narrow widths and enlarged root text. `SidebarNavRow` moves adjacent actions onto a second line when the item's preferred label space and the controls cannot fit together.
89
97
  Use `SidebarNavSection.headingAs` (h1 through h6) for section headings.
90
98
  Sections may be uncontrolled with `defaultOpen` or controlled with `open` and
91
99
  `onOpenChange`. Put disclosure-button attributes and host-owned row interactions
@@ -313,6 +321,14 @@ The selected KiroCrew textarea guard is translated to Solid ownership; it adds
313
321
  no document listener or application session state. Source and license details
314
322
  are retained in `NOTICE`.
315
323
 
324
+ The field contract addresses the textarea itself: `inputRef` receives its native
325
+ `HTMLTextAreaElement`, `inputId` assigns its stable id, and `inputLabel`,
326
+ `inputDescription` and `inputDescribedBy` provide its accessible name and help.
327
+ The default `inputSize="comfortable"` uses the shared 4rem minimum and 12rem
328
+ maximum; `inputResize` selects one of the Textarea's named resize behaviors.
329
+ `Textarea` owns both its standalone and borderless `variant="composer"`
330
+ appearances, so consumers do not need to style a nested control.
331
+
316
332
  Run `bun run test:components` for the built Solid component contracts in
317
333
  Chromium and WebKit. The event-sequence tests exercise browser handling of
318
334
  composition flags, timers and focus recovery; manual operating-system IME
@@ -726,11 +742,12 @@ composition evidence; bounded runtime projection, storage and production chat
726
742
  integration remain application acceptance gates. Attribution for the selected
727
743
  KiroCrew source contracts is recorded in the issue-specific `NOTICE` entry.
728
744
 
729
- The shared `TopBar` contracts its middle track on narrow screens. Its side groups
730
- scroll horizontally when enlarged text makes all controls wider than the viewport;
731
- keyboard focus reveals each action. Groups opt out of native window dragging.
732
- Use `TopBarTitle align="center"` for a centered title and layout-only visibility
733
- classes when a title should yield space to essential controls.
745
+ On narrow screens, the shared `TopBar` keeps a usable middle Search target while
746
+ side groups scroll horizontally when their actions do not fit. Keyboard focus
747
+ reveals each action. Groups opt out of native window dragging.
748
+ Use `TopBarTitle align="center"` to center text within its slot; the host controls
749
+ slot placement. Use layout-only visibility classes when a title should yield
750
+ space to essential controls.
734
751
 
735
752
  ### Controlled appearance mode
736
753
 
package/dist/NOTICE CHANGED
@@ -450,3 +450,22 @@ installation/execution authority, provider data and app-specific services are
450
450
  excluded. Its distinct `/apps/library` core-app launchpad is also excluded:
451
451
  this selected unit is the external verified plugin marketplace adapter, while
452
452
  Adea's #757 App Library remains a separate core-view and rail-management flow.
453
+
454
+ ## Windowed tree row composition translated from Terax
455
+
456
+ `packages/ui/src/components/composites/tree/` translates the file-row hierarchy
457
+ from `src/modules/explorer/FileExplorer.tsx` and
458
+ `src/modules/explorer/TreeRow.tsx`, pinned at Terax revision
459
+ `b02a7dcbfe58d22b2352d9618b8ed3199e317a00`.
460
+
461
+ Copyright 2026 Crynta. Licensed under the Apache License, Version 2.0.
462
+
463
+ The shared rows retain the disclosure, leading file/folder affordance, primary
464
+ label, selection, and trailing-action composition. The shared Tree owns ARIA
465
+ tree semantics and roving keyboard focus, including wrapped Up/Down movement;
466
+ the donor's Up/Down behavior clamps at the ends. Hosts supply the complete
467
+ expanded projection and mounted window, and retain filesystem identity,
468
+ selection, open/rename/drop behavior, native services, and the reveal callback.
469
+ React, Tauri, Hugeicons, and Terax runtime state are not included. The donor
470
+ contains no Tree ARIA or row-focus contract, so those semantics are supplied by
471
+ this Solid component and are checked under the packed consumer.
@@ -1,2 +1,3 @@
1
1
  export { ListGroup, ListRow, type ListRowProps } from './list-row';
2
+ export { ListRowControl, type ListRowControlProps } from './list-row-control';
2
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/composites/list-row/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/composites/list-row/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAA;AAClE,OAAO,EAAE,cAAc,EAAE,KAAK,mBAAmB,EAAE,MAAM,oBAAoB,CAAA"}
@@ -1,2 +1,3 @@
1
+ import { ListRowControl } from "./list-row-control.js";
1
2
  import { ListGroup, ListRow } from "./list-row.js";
2
- export { ListGroup, ListRow };
3
+ export { ListGroup, ListRow, ListRowControl };
@@ -0,0 +1,20 @@
1
+ import type { PolymorphicProps } from '@kobalte/core/polymorphic';
2
+ import type { ComponentProps, JSX, ValidComponent } from 'solid-js';
3
+ export type ListRowControlProps<T extends ValidComponent = 'div'> = PolymorphicProps<T, {
4
+ class?: string;
5
+ /** Marks the row as current. Sets `aria-current` for a link row. */
6
+ selected?: boolean;
7
+ /** Draw the row at the compact height. */
8
+ dense?: boolean;
9
+ /** Leading slot: an avatar, an icon, a checkbox. */
10
+ leading?: JSX.Element;
11
+ /** Trailing slot: a count, a menu trigger, a timestamp. */
12
+ trailing?: JSX.Element;
13
+ /** A second line that wraps and grows the row to fit its content. */
14
+ description?: string;
15
+ /** Native button type; defaults to `button` for button rows. */
16
+ type?: ComponentProps<'button'>['type'];
17
+ }>;
18
+ /** A tree-shakeable ListRow renderer without optional tooltip behavior. */
19
+ export declare function ListRowControl<T extends ValidComponent = 'div'>(props: ListRowControlProps<T>): JSX.Element;
20
+ //# sourceMappingURL=list-row-control.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-row-control.d.ts","sourceRoot":"","sources":["../../../../src/components/composites/list-row/list-row-control.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAEjE,OAAO,KAAK,EAAE,cAAc,EAAE,GAAG,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAInE,MAAM,MAAM,mBAAmB,CAAC,CAAC,SAAS,cAAc,GAAG,KAAK,IAAI,gBAAgB,CAClF,CAAC,EACD;IACE,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,oEAAoE;IACpE,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,0CAA0C;IAC1C,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,oDAAoD;IACpD,OAAO,CAAC,EAAE,GAAG,CAAC,OAAO,CAAA;IACrB,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,GAAG,CAAC,OAAO,CAAA;IACtB,qEAAqE;IACrE,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,gEAAgE;IAChE,IAAI,CAAC,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAA;CACxC,CACF,CAAA;AAMD,2EAA2E;AAC3E,wBAAgB,cAAc,CAAC,CAAC,SAAS,cAAc,GAAG,KAAK,EAAE,KAAK,EAAE,mBAAmB,CAAC,CAAC,CAAC,eA6E7F"}
@@ -0,0 +1,96 @@
1
+ import { cn } from "../../../lib/utils.js";
2
+ import { className, createComponent, effect, insert, memo, mergeProps, template } from "solid-js/web";
3
+ import { Show, splitProps } from "solid-js";
4
+ import { Polymorphic } from "@kobalte/core/polymorphic";
5
+ //#region src/components/composites/list-row/list-row-control.tsx
6
+ var _tmpl$ = /*#__PURE__*/ template(`<span data-slot=list-row-leading class="flex shrink-0 items-center justify-center [&amp;_svg]:size-4">`);
7
+ var _tmpl$2 = /*#__PURE__*/ template(`<span data-slot=list-row-description>`);
8
+ var _tmpl$3 = /*#__PURE__*/ template(`<span data-slot=list-row-trailing>`);
9
+ var _tmpl$4 = /*#__PURE__*/ template(`<div data-slot=list-row-content class="flex min-w-0 flex-1 items-center gap-2.5"><span data-slot=list-row-label class="flex min-w-0 flex-1 flex-col"><span class=truncate>`);
10
+ /** A tree-shakeable ListRow renderer without optional tooltip behavior. */
11
+ function ListRowControl(props) {
12
+ const [local, rest] = splitProps(props, [
13
+ "as",
14
+ "class",
15
+ "selected",
16
+ "dense",
17
+ "leading",
18
+ "trailing",
19
+ "description",
20
+ "type",
21
+ "tabIndex",
22
+ "children"
23
+ ]);
24
+ const hasClickHandler = () => Boolean(rest.onClick || rest["on:click"]);
25
+ const rowAs = () => local.as ?? (hasClickHandler() ? "button" : "div");
26
+ return createComponent(Polymorphic, mergeProps({
27
+ get as() {
28
+ return rowAs();
29
+ },
30
+ get type() {
31
+ return memo(() => rowAs() === "button")() ? local.type ?? "button" : local.type;
32
+ },
33
+ get tabIndex() {
34
+ return local.tabIndex ?? (rowAs() === "button" || rowAs() === "a" ? 0 : void 0);
35
+ },
36
+ get ["aria-current"]() {
37
+ return local.selected ? "true" : void 0;
38
+ },
39
+ get ["data-selected"]() {
40
+ return local.selected ? "" : void 0;
41
+ },
42
+ get ["data-description"]() {
43
+ return local.description ? "" : void 0;
44
+ },
45
+ get ["class"]() {
46
+ return cn("group/row list-row-description flex min-w-0 items-center gap-2.5 rounded-md px-2 text-sm", "transition-colors ease-out outline-none", "focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-primary-subtle", {
47
+ "h-row-sm": local.dense && !local.description,
48
+ "h-row-md": !local.dense && !local.description
49
+ }, {
50
+ "bg-primary-subtle text-foreground": local.selected,
51
+ "hover:bg-surface-hover": !local.selected
52
+ }, local.class);
53
+ }
54
+ }, rest, { get children() {
55
+ return [createComponent(Show, {
56
+ get when() {
57
+ return local.leading;
58
+ },
59
+ get children() {
60
+ var _el$ = _tmpl$();
61
+ insert(_el$, () => local.leading);
62
+ return _el$;
63
+ }
64
+ }), (() => {
65
+ var _el$2 = _tmpl$4(), _el$3 = _el$2.firstChild, _el$4 = _el$3.firstChild;
66
+ insert(_el$4, () => local.children);
67
+ insert(_el$3, createComponent(Show, {
68
+ get when() {
69
+ return local.description;
70
+ },
71
+ get children() {
72
+ var _el$5 = _tmpl$2();
73
+ insert(_el$5, () => local.description);
74
+ effect(() => className(_el$5, cn("text-xs break-words", local.selected ? "text-foreground" : "text-muted-foreground")));
75
+ return _el$5;
76
+ }
77
+ }), null);
78
+ insert(_el$2, createComponent(Show, {
79
+ get when() {
80
+ return local.trailing;
81
+ },
82
+ get children() {
83
+ var _el$6 = _tmpl$3();
84
+ insert(_el$6, () => local.trailing);
85
+ effect(() => className(_el$6, cn("ms-auto flex shrink-0 items-center gap-1", local.selected ? "text-foreground" : "text-muted-foreground")));
86
+ return _el$6;
87
+ }
88
+ }), null);
89
+ return _el$2;
90
+ })()];
91
+ } }));
92
+ }
93
+ //#endregion
94
+ export { ListRowControl };
95
+
96
+ //# sourceMappingURL=list-row-control.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-row-control.js","names":["PolymorphicProps","Polymorphic","ComponentProps","JSX","ValidComponent","Show","splitProps","cn","ListRowControlProps","T","class","selected","dense","leading","Element","trailing","description","type","ListRowControlBaseProps","as","ListRowControl","props","local","rest","hasClickHandler","Boolean","onClick","rowAs","_$createComponent","_$mergeProps","_$memo","tabIndex","undefined","aria-current","data-selected","data-description","children","when","_el$","_tmpl$","_$insert","_el$2","_tmpl$4","_el$3","firstChild","_el$4","_el$5","_tmpl$2","_$effect","_$className","_el$6","_tmpl$3","_$createComponent","_$mergeProps","_$memo","_$className"],"sources":["../../../../src/components/composites/list-row/list-row-control.tsx"],"sourcesContent":["import type { PolymorphicProps } from '@kobalte/core/polymorphic'\nimport { Polymorphic } from '@kobalte/core/polymorphic'\nimport type { ComponentProps, JSX, ValidComponent } from 'solid-js'\nimport { Show, splitProps } from 'solid-js'\nimport { cn } from '#lib/utils'\n\nexport type ListRowControlProps<T extends ValidComponent = 'div'> = PolymorphicProps<\n T,\n {\n class?: string\n /** Marks the row as current. Sets `aria-current` for a link row. */\n selected?: boolean\n /** Draw the row at the compact height. */\n dense?: boolean\n /** Leading slot: an avatar, an icon, a checkbox. */\n leading?: JSX.Element\n /** Trailing slot: a count, a menu trigger, a timestamp. */\n trailing?: JSX.Element\n /** A second line that wraps and grows the row to fit its content. */\n description?: string\n /** Native button type; defaults to `button` for button rows. */\n type?: ComponentProps<'button'>['type']\n }\n>\n\ntype ListRowControlBaseProps<T extends ValidComponent = 'div'> = ListRowControlProps<T> & {\n as?: T\n}\n\n/** A tree-shakeable ListRow renderer without optional tooltip behavior. */\nexport function ListRowControl<T extends ValidComponent = 'div'>(props: ListRowControlProps<T>) {\n const [local, rest] = splitProps(props as ListRowControlBaseProps, [\n 'as',\n 'class',\n 'selected',\n 'dense',\n 'leading',\n 'trailing',\n 'description',\n 'type',\n 'tabIndex',\n 'children',\n ])\n const hasClickHandler = () => Boolean(rest.onClick || rest['on:click'])\n const rowAs = () => (local.as ?? (hasClickHandler() ? 'button' : 'div')) as T\n\n return (\n <Polymorphic\n as={rowAs()}\n type={rowAs() === 'button' ? (local.type ?? 'button') : local.type}\n tabIndex={local.tabIndex ?? (rowAs() === 'button' || rowAs() === 'a' ? 0 : undefined)}\n aria-current={local.selected ? 'true' : undefined}\n data-selected={local.selected ? '' : undefined}\n data-description={local.description ? '' : undefined}\n class={cn(\n 'group/row list-row-description flex min-w-0 items-center gap-2.5 rounded-md px-2 text-sm',\n 'transition-colors ease-out outline-none',\n 'focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-primary-subtle',\n {\n 'h-row-sm': local.dense && !local.description,\n 'h-row-md': !local.dense && !local.description,\n },\n {\n 'bg-primary-subtle text-foreground': local.selected,\n 'hover:bg-surface-hover': !local.selected,\n },\n local.class\n )}\n {...(rest as ComponentProps<'div'>)}\n >\n <Show when={local.leading}>\n <span\n data-slot=\"list-row-leading\"\n class=\"flex shrink-0 items-center justify-center [&_svg]:size-4\"\n >\n {local.leading}\n </span>\n </Show>\n <div data-slot=\"list-row-content\" class=\"flex min-w-0 flex-1 items-center gap-2.5\">\n <span data-slot=\"list-row-label\" class=\"flex min-w-0 flex-1 flex-col\">\n <span class=\"truncate\">{local.children}</span>\n <Show when={local.description}>\n <span\n data-slot=\"list-row-description\"\n class={cn(\n 'text-xs break-words',\n local.selected ? 'text-foreground' : 'text-muted-foreground'\n )}\n >\n {local.description}\n </span>\n </Show>\n </span>\n <Show when={local.trailing}>\n <span\n data-slot=\"list-row-trailing\"\n class={cn(\n 'ms-auto flex shrink-0 items-center gap-1',\n local.selected ? 'text-foreground' : 'text-muted-foreground'\n )}\n >\n {local.trailing}\n </span>\n </Show>\n </div>\n </Polymorphic>\n )\n}\n"],"mappings":";;;;;;;;;;AA8BA,SAAgBoB,eAAiDC,OAA+B;CAC9F,MAAM,CAACC,OAAOC,QAAQjB,WAAWe,OAAkC;EACjE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CAAU,CACX;CACD,MAAMG,wBAAwBC,QAAQF,KAAKG,WAAWH,KAAK,WAAW;CACtE,MAAMI,cAAeL,MAAMH,OAAOK,gBAAgB,IAAI,WAAW;CAEjE,OAAAI,gBACG3B,aAAW4B,WAAA;EAAA,IACVV,KAAE;GAAA,OAAEQ,MAAM;EAAC;EAAA,IACXV,OAAI;GAAA,OAAEa,WAAAH,MAAM,MAAM,QAAQ,CAAA,CAAA,IAAIL,MAAML,QAAQ,WAAYK,MAAML;EAAI;EAAA,IAClEc,WAAQ;GAAA,OAAET,MAAMS,aAAaJ,MAAM,MAAM,YAAYA,MAAM,MAAM,MAAM,IAAIK,KAAAA;EAAU;EAAA,KAAA,kBAAA;GAAA,OACvEV,MAAMX,WAAW,SAASqB,KAAAA;EAAS;EAAA,KAAA,mBAAA;GAAA,OAClCV,MAAMX,WAAW,KAAKqB,KAAAA;EAAS;EAAA,KAAA,sBAAA;GAAA,OAC5BV,MAAMN,cAAc,KAAKgB,KAAAA;EAAS;EAAA,KAAA,WAAA;GAAA,OAC7CzB,GACL,4FACA,2CACA,oFACA;IACE,YAAYe,MAAMV,SAAS,CAACU,MAAMN;IAClC,YAAY,CAACM,MAAMV,SAAS,CAACU,MAAMN;GACrC,GACA;IACE,qCAAqCM,MAAMX;IAC3C,0BAA0B,CAACW,MAAMX;GACnC,GACAW,MAAMZ,KACR;EAAC;CAAA,GACIa,MAA6B,EAAA,IAAAa,WAAA;EAAA,OAAA,CAAAR,gBAEjCvB,MAAI;GAAA,IAACgC,OAAI;IAAA,OAAEf,MAAMT;GAAO;GAAA,IAAAuB,WAAA;IAAA,IAAAE,OAAAC,OAAA;IAAAC,OAAAF,YAKpBhB,MAAMT,OAAO;IAAA,OAAAyB;GAAA;EAAA,CAAA,UAAA;GAAA,IAAAG,QAAAC,QAAA,GAAAC,QAAAF,MAAAG,YAAAC,QAAAF,MAAAC;GAAAJ,OAAAK,aAKUvB,MAAMc,QAAQ;GAAAI,OAAAG,OAAAf,gBACrCvB,MAAI;IAAA,IAACgC,OAAI;KAAA,OAAEf,MAAMN;IAAW;IAAA,IAAAoB,WAAA;KAAA,IAAAU,QAAAC,QAAA;KAAAP,OAAAM,aAQxBxB,MAAMN,WAAW;KAAAgC,aAAAC,UAAAH,OALXvC,GACL,uBACAe,MAAMX,WAAW,oBAAoB,uBACvC,CAAC,CAAA;KAAA,OAAAmC;IAAA;GAAA,CAAA,GAAA,IAAA;GAAAN,OAAAC,OAAAb,gBAMNvB,MAAI;IAAA,IAACgC,OAAI;KAAA,OAAEf,MAAMP;IAAQ;IAAA,IAAAqB,WAAA;KAAA,IAAAc,QAAAC,QAAA;KAAAX,OAAAU,aAQrB5B,MAAMP,QAAQ;KAAAiC,aAAAC,UAAAC,OALR3C,GACL,4CACAe,MAAMX,WAAW,oBAAoB,uBACvC,CAAC,CAAA;KAAA,OAAAuC;IAAA;GAAA,CAAA,GAAA,IAAA;GAAA,OAAAT;EAAA,EAAA,CAAA,CAAA;CAAA,EAAA,CAAA,CAAA;AAQb"}
@@ -1,47 +1,27 @@
1
1
  import type { PolymorphicProps } from '@kobalte/core/polymorphic';
2
- import type { ComponentProps, JSX, ValidComponent } from 'solid-js';
3
- /**
4
- * ListRow.
5
- *
6
- * One row in a list of like things: a project, a session, a file, a person. It
7
- * is the highest-frequency component in an application of this shape, and the
8
- * one where a half-pixel of drift is most visible — twenty rows of a sidebar
9
- * make any inconsistency in height or padding obvious.
10
- *
11
- * The structure is fixed at four slots — `leading`, `children`, `meta`,
12
- * `trailing` — so rows that show an avatar, an icon, a status dot, a timestamp
13
- * and an overflow menu all sit at the same height without the caller doing
14
- * arithmetic.
15
- *
16
- * A row is only interactive when it is given an `as` that can be activated
17
- * (an anchor, a button) or an `onClick`. Click handlers default to a native
18
- * button; a row without either remains a `div` with no hover treatment.
19
- */
20
- export type ListRowProps<T extends ValidComponent = 'div'> = PolymorphicProps<T, {
21
- class?: string;
22
- /** Marks the row as current. Sets `aria-current` for a link row. */
23
- selected?: boolean;
24
- /** Draw the row at the compact height. */
25
- dense?: boolean;
26
- /** Leading slot: an avatar, an icon, a checkbox. */
27
- leading?: JSX.Element;
28
- /** Trailing slot: a count, a menu trigger, a timestamp. */
29
- trailing?: JSX.Element;
30
- /** A dimmed second line under the main content. */
31
- description?: string;
2
+ import type { ComponentProps, ValidComponent } from 'solid-js';
3
+ import { type ListRowControlProps } from './list-row-control';
4
+ export type ListRowProps<T extends ValidComponent = 'div'> = PolymorphicProps<T, ListRowControlProps<T> & {
32
5
  /** A short explanation shown on pointer hover and keyboard focus. */
33
6
  tooltip?: string;
34
7
  /** Native button type; defaults to `button` for button rows. */
35
8
  type?: ComponentProps<'button'>['type'];
9
+ /** Additional accessible description preserved on plain and rich rows. */
10
+ 'aria-describedby'?: string;
36
11
  }>;
37
- export declare function ListRow<T extends ValidComponent = 'div'>(props: ListRowProps<T>): JSX.Element;
12
+ /**
13
+ * Rich row composition with optional hover and keyboard tooltip behavior.
14
+ * Import ListRowControl when the tooltip API is not needed and the consumer
15
+ * wants the plain renderer to tree-shake independently.
16
+ */
17
+ export declare function ListRow<T extends ValidComponent = 'div'>(props: ListRowProps<T>): import("solid-js").JSX.Element;
38
18
  /**
39
19
  * A group of rows with an optional heading and a scrolling body. The heading is
40
- * a plain label rather than a control: grouping is for reading, and a
41
- * disclosure on a list of five rows costs more attention than it saves.
20
+ * a plain label rather than a control: grouping is for reading, and a disclosure
21
+ * on a list of five rows costs more attention than it saves.
42
22
  */
43
23
  export declare function ListGroup(props: ComponentProps<'div'> & {
44
24
  label?: string;
45
- action?: JSX.Element;
46
- }): JSX.Element;
25
+ action?: import('solid-js').JSX.Element;
26
+ }): import("solid-js").JSX.Element;
47
27
  //# sourceMappingURL=list-row.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"list-row.d.ts","sourceRoot":"","sources":["../../../../src/components/composites/list-row/list-row.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAEjE,OAAO,KAAK,EAAE,cAAc,EAAE,GAAG,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAKnE;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,cAAc,GAAG,KAAK,IAAI,gBAAgB,CAC3E,CAAC,EACD;IACE,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,oEAAoE;IACpE,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,0CAA0C;IAC1C,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,oDAAoD;IACpD,OAAO,CAAC,EAAE,GAAG,CAAC,OAAO,CAAA;IACrB,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,GAAG,CAAC,OAAO,CAAA;IACtB,mDAAmD;IACnD,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,qEAAqE;IACrE,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,gEAAgE;IAChE,IAAI,CAAC,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAA;CACxC,CACF,CAAA;AA8FD,wBAAgB,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,KAAK,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,eAwB/E;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,CAAC,KAAK,CAAC,GAAG;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,GAAG,CAAC,OAAO,CAAA;CAAE,eAoBhG"}
1
+ {"version":3,"file":"list-row.d.ts","sourceRoot":"","sources":["../../../../src/components/composites/list-row/list-row.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAI9D,OAAO,EAAkB,KAAK,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAE7E,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,cAAc,GAAG,KAAK,IAAI,gBAAgB,CAC3E,CAAC,EACD,mBAAmB,CAAC,CAAC,CAAC,GAAG;IACvB,qEAAqE;IACrE,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,gEAAgE;IAChE,IAAI,CAAC,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAA;IACvC,0EAA0E;IAC1E,kBAAkB,CAAC,EAAE,MAAM,CAAA;CAC5B,CACF,CAAA;AAuCD;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,KAAK,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,kCAgC/E;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CACvB,KAAK,EAAE,cAAc,CAAC,KAAK,CAAC,GAAG;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,UAAU,EAAE,GAAG,CAAC,OAAO,CAAA;CAAE,kCAoB3F"}
@@ -1,148 +1,101 @@
1
1
  import { cn } from "../../../lib/utils.js";
2
2
  import { Tooltip, TooltipContent, TooltipTrigger } from "../../ui/tooltip/tooltip.js";
3
- import { className, createComponent, effect, insert, memo, mergeProps, spread, template } from "solid-js/web";
4
- import { Show, splitProps } from "solid-js";
5
- import { Polymorphic } from "@kobalte/core/polymorphic";
3
+ import { ListRowControl } from "./list-row-control.js";
4
+ import { createComponent, insert, mergeProps, spread, template } from "solid-js/web";
5
+ import { Show, createSignal, createUniqueId, splitProps } from "solid-js";
6
6
  //#region src/components/composites/list-row/list-row.tsx
7
- var _tmpl$ = /*#__PURE__*/ template(`<span class="flex size-4 shrink-0 items-center justify-center [&amp;_svg]:size-4">`);
8
- var _tmpl$2 = /*#__PURE__*/ template(`<span data-slot=list-row-description>`);
9
- var _tmpl$3 = /*#__PURE__*/ template(`<span class="flex min-w-0 flex-1 flex-col"><span class=truncate>`);
10
- var _tmpl$4 = /*#__PURE__*/ template(`<span data-slot=list-row-trailing>`);
11
- var _tmpl$5 = /*#__PURE__*/ template(`<span class="shrink-0 opacity-0 transition-opacity ease-out group-hover/list-header:opacity-100 focus-within:opacity-100">`);
12
- var _tmpl$6 = /*#__PURE__*/ template(`<div class="group/list-header flex items-center gap-1 px-2 py-1"><span class="min-w-0 flex-1 truncate text-2xs font-medium tracking-wide text-muted-foreground uppercase">`);
13
- var _tmpl$7 = /*#__PURE__*/ template(`<div data-slot=list-group><div class="flex flex-col gap-0.5">`);
14
- function ListRowBase(props) {
15
- const [local, rest] = splitProps(props, [
16
- "as",
17
- "class",
18
- "selected",
19
- "dense",
20
- "leading",
21
- "trailing",
22
- "description",
23
- "tooltip",
24
- "type",
25
- "tabIndex",
26
- "children"
27
- ]);
28
- return createComponent(Polymorphic, mergeProps({
29
- get as() {
30
- return local.as ?? "div";
31
- },
32
- get type() {
33
- return memo(() => local.as === "button")() ? local.type ?? "button" : local.type;
34
- },
35
- get tabIndex() {
36
- return local.tabIndex ?? (local.as === "button" || local.as === "a" ? 0 : void 0);
37
- },
38
- get ["aria-current"]() {
39
- return local.selected ? "true" : void 0;
40
- },
41
- get ["data-selected"]() {
42
- return local.selected ? "" : void 0;
43
- },
44
- get ["class"]() {
45
- return cn("group/row flex min-w-0 items-center gap-2.5 rounded-md px-2 text-sm", "transition-colors ease-out outline-none", "focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-primary-subtle", {
46
- "h-row-sm": local.dense && !local.description,
47
- "h-row-md": !local.dense && !local.description,
48
- "min-h-row-sm py-1": local.dense && local.description,
49
- "min-h-row-md py-1.5": !local.dense && local.description
50
- }, {
51
- "bg-primary-subtle text-foreground": local.selected,
52
- "hover:bg-surface-hover": !local.selected
53
- }, local.class);
54
- }
55
- }, rest, { get children() {
56
- return [
57
- createComponent(Show, {
58
- get when() {
59
- return local.leading;
60
- },
61
- get children() {
62
- var _el$ = _tmpl$();
63
- insert(_el$, () => local.leading);
64
- return _el$;
65
- }
66
- }),
67
- (() => {
68
- var _el$2 = _tmpl$3(), _el$3 = _el$2.firstChild;
69
- insert(_el$3, () => local.children);
70
- insert(_el$2, createComponent(Show, {
71
- get when() {
72
- return local.description;
73
- },
74
- get children() {
75
- var _el$4 = _tmpl$2();
76
- insert(_el$4, () => local.description);
77
- effect(() => className(_el$4, cn("truncate text-xs", local.selected ? "text-foreground" : "text-muted-foreground")));
78
- return _el$4;
79
- }
80
- }), null);
81
- return _el$2;
82
- })(),
83
- createComponent(Show, {
84
- get when() {
85
- return local.trailing;
86
- },
87
- get children() {
88
- var _el$5 = _tmpl$4();
89
- insert(_el$5, () => local.trailing);
90
- effect(() => className(_el$5, cn("ms-auto flex shrink-0 items-center gap-1", local.selected ? "text-foreground" : "text-muted-foreground")));
91
- return _el$5;
92
- }
93
- })
94
- ];
95
- } }));
96
- }
7
+ var _tmpl$ = /*#__PURE__*/ template(`<span class="shrink-0 opacity-0 transition-opacity ease-out group-hover/list-header:opacity-100 focus-within:opacity-100">`);
8
+ var _tmpl$2 = /*#__PURE__*/ template(`<div class="group/list-header flex items-center gap-1 px-2 py-1"><span class="min-w-0 flex-1 truncate text-2xs font-medium tracking-wide text-muted-foreground uppercase">`);
9
+ var _tmpl$3 = /*#__PURE__*/ template(`<div data-slot=list-group><div class="flex flex-col gap-0.5">`);
97
10
  /** Adapts TooltipTrigger's polymorphic target to ListRow's semantic element. */
98
11
  function ListRowTooltipTarget(props) {
99
- const [local, rest] = splitProps(props, ["rowAs"]);
100
- return createComponent(ListRowBase, mergeProps({ get as() {
12
+ const [local, rest] = splitProps(props, [
13
+ "rowAs",
14
+ "externalDescribedBy",
15
+ "tooltipId",
16
+ "tooltipOpen"
17
+ ]);
18
+ const describedBy = () => {
19
+ const ids = [
20
+ rest["aria-describedby"],
21
+ local.externalDescribedBy,
22
+ local.tooltipOpen?.() ? local.tooltipId : void 0
23
+ ].flatMap((value) => value?.split(/\s+/) ?? []).filter(Boolean);
24
+ return [...new Set(ids)].join(" ") || void 0;
25
+ };
26
+ return createComponent(ListRowControl, mergeProps({ get as() {
101
27
  return local.rowAs;
102
- } }, rest));
28
+ } }, rest, { get ["aria-describedby"]() {
29
+ return describedBy();
30
+ } }));
103
31
  }
32
+ /**
33
+ * Rich row composition with optional hover and keyboard tooltip behavior.
34
+ * Import ListRowControl when the tooltip API is not needed and the consumer
35
+ * wants the plain renderer to tree-shake independently.
36
+ */
104
37
  function ListRow(props) {
105
- const [local, rest] = splitProps(props, ["as", "tooltip"]);
38
+ const [local, rest] = splitProps(props, [
39
+ "as",
40
+ "tooltip",
41
+ "aria-describedby"
42
+ ]);
43
+ const [tooltipOpen, setTooltipOpen] = createSignal(false);
44
+ const tooltipId = `list-row-tooltip-${createUniqueId()}`;
106
45
  const hasClickHandler = () => Boolean(rest.onClick || rest["on:click"]);
107
46
  const rowAs = () => local.as ?? (hasClickHandler() ? "button" : "div");
108
47
  const rowType = () => rowAs() === "button" ? rest.type ?? "button" : rest.type;
48
+ const rowProps = () => ({
49
+ ...rest,
50
+ type: rowType(),
51
+ "aria-describedby": local["aria-describedby"]
52
+ });
109
53
  return createComponent(Show, {
110
54
  get when() {
111
55
  return local.tooltip;
112
56
  },
113
57
  get fallback() {
114
- return createComponent(ListRowBase, mergeProps({
115
- get as() {
116
- return rowAs();
117
- },
118
- get type() {
119
- return rowType();
120
- }
121
- }, rest));
58
+ return createComponent(ListRowControl, mergeProps({ get as() {
59
+ return rowAs();
60
+ } }, rowProps));
122
61
  },
123
62
  get children() {
124
- return createComponent(Tooltip, { get children() {
125
- return [createComponent(TooltipTrigger, mergeProps({
126
- as: ListRowTooltipTarget,
127
- get rowAs() {
128
- return rowAs();
129
- },
130
- get type() {
131
- return rowType();
132
- }
133
- }, rest, { get children() {
134
- return rest.children;
135
- } })), createComponent(TooltipContent, { get children() {
136
- return local.tooltip;
137
- } })];
138
- } });
63
+ return createComponent(Tooltip, {
64
+ get open() {
65
+ return tooltipOpen();
66
+ },
67
+ onOpenChange: setTooltipOpen,
68
+ get children() {
69
+ return [createComponent(TooltipTrigger, mergeProps({
70
+ as: ListRowTooltipTarget,
71
+ get rowAs() {
72
+ return rowAs();
73
+ },
74
+ get type() {
75
+ return rowType();
76
+ },
77
+ get externalDescribedBy() {
78
+ return local["aria-describedby"];
79
+ },
80
+ tooltipId,
81
+ tooltipOpen
82
+ }, rest, { get children() {
83
+ return rest.children;
84
+ } })), createComponent(TooltipContent, {
85
+ id: tooltipId,
86
+ get children() {
87
+ return local.tooltip;
88
+ }
89
+ })];
90
+ }
91
+ });
139
92
  }
140
93
  });
141
94
  }
142
95
  /**
143
96
  * A group of rows with an optional heading and a scrolling body. The heading is
144
- * a plain label rather than a control: grouping is for reading, and a
145
- * disclosure on a list of five rows costs more attention than it saves.
97
+ * a plain label rather than a control: grouping is for reading, and a disclosure
98
+ * on a list of five rows costs more attention than it saves.
146
99
  */
147
100
  function ListGroup(props) {
148
101
  const [local, rest] = splitProps(props, [
@@ -152,32 +105,32 @@ function ListGroup(props) {
152
105
  "children"
153
106
  ]);
154
107
  return (() => {
155
- var _el$6 = _tmpl$7(), _el$0 = _el$6.firstChild;
156
- spread(_el$6, mergeProps({ get ["class"]() {
108
+ var _el$ = _tmpl$3(), _el$5 = _el$.firstChild;
109
+ spread(_el$, mergeProps({ get ["class"]() {
157
110
  return cn("flex flex-col gap-0.5", local.class);
158
111
  } }, rest), false, true);
159
- insert(_el$6, createComponent(Show, {
112
+ insert(_el$, createComponent(Show, {
160
113
  get when() {
161
114
  return local.label;
162
115
  },
163
116
  get children() {
164
- var _el$7 = _tmpl$6(), _el$8 = _el$7.firstChild;
165
- insert(_el$8, () => local.label);
166
- insert(_el$7, createComponent(Show, {
117
+ var _el$2 = _tmpl$2(), _el$3 = _el$2.firstChild;
118
+ insert(_el$3, () => local.label);
119
+ insert(_el$2, createComponent(Show, {
167
120
  get when() {
168
121
  return local.action;
169
122
  },
170
123
  get children() {
171
- var _el$9 = _tmpl$5();
172
- insert(_el$9, () => local.action);
173
- return _el$9;
124
+ var _el$4 = _tmpl$();
125
+ insert(_el$4, () => local.action);
126
+ return _el$4;
174
127
  }
175
128
  }), null);
176
- return _el$7;
129
+ return _el$2;
177
130
  }
178
- }), _el$0);
179
- insert(_el$0, () => local.children);
180
- return _el$6;
131
+ }), _el$5);
132
+ insert(_el$5, () => local.children);
133
+ return _el$;
181
134
  })();
182
135
  }
183
136
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"list-row.js","names":["PolymorphicProps","Polymorphic","ComponentProps","JSX","ValidComponent","Show","splitProps","Tooltip","TooltipContent","TooltipTrigger","cn","ListRowProps","T","class","selected","dense","leading","Element","trailing","description","tooltip","type","ListRowBaseProps","as","ListRowBase","props","local","rest","_$createComponent","_$mergeProps","_$memo","tabIndex","undefined","aria-current","data-selected","children","when","_el$","_tmpl$","_$insert","_el$2","_tmpl$3","_el$3","firstChild","_el$4","_tmpl$2","_$effect","_$className","_el$5","_tmpl$4","ListRowTooltipTargetProps","Omit","rowAs","ListRowTooltipTarget","ListRow","hasClickHandler","Boolean","onClick","rowType","fallback","ListGroup","label","action","_el$6","_tmpl$7","_el$0","_$spread","_el$7","_tmpl$6","_el$8","_el$9","_tmpl$5","_$createComponent","_$mergeProps","_$memo","_$className"],"sources":["../../../../src/components/composites/list-row/list-row.tsx"],"sourcesContent":["import type { PolymorphicProps } from '@kobalte/core/polymorphic'\nimport { Polymorphic } from '@kobalte/core/polymorphic'\nimport type { ComponentProps, JSX, ValidComponent } from 'solid-js'\nimport { Show, splitProps } from 'solid-js'\nimport { Tooltip, TooltipContent, TooltipTrigger } from '../../ui/tooltip'\nimport { cn } from '#lib/utils'\n\n/**\n * ListRow.\n *\n * One row in a list of like things: a project, a session, a file, a person. It\n * is the highest-frequency component in an application of this shape, and the\n * one where a half-pixel of drift is most visible — twenty rows of a sidebar\n * make any inconsistency in height or padding obvious.\n *\n * The structure is fixed at four slots — `leading`, `children`, `meta`,\n * `trailing` — so rows that show an avatar, an icon, a status dot, a timestamp\n * and an overflow menu all sit at the same height without the caller doing\n * arithmetic.\n *\n * A row is only interactive when it is given an `as` that can be activated\n * (an anchor, a button) or an `onClick`. Click handlers default to a native\n * button; a row without either remains a `div` with no hover treatment.\n */\nexport type ListRowProps<T extends ValidComponent = 'div'> = PolymorphicProps<\n T,\n {\n class?: string\n /** Marks the row as current. Sets `aria-current` for a link row. */\n selected?: boolean\n /** Draw the row at the compact height. */\n dense?: boolean\n /** Leading slot: an avatar, an icon, a checkbox. */\n leading?: JSX.Element\n /** Trailing slot: a count, a menu trigger, a timestamp. */\n trailing?: JSX.Element\n /** A dimmed second line under the main content. */\n description?: string\n /** A short explanation shown on pointer hover and keyboard focus. */\n tooltip?: string\n /** Native button type; defaults to `button` for button rows. */\n type?: ComponentProps<'button'>['type']\n }\n>\n\ntype ListRowBaseProps<T extends ValidComponent = 'div'> = ListRowProps<T> & {\n as?: T\n type?: ComponentProps<'button'>['type']\n}\n\nfunction ListRowBase<T extends ValidComponent = 'div'>(props: ListRowBaseProps<T>) {\n const [local, rest] = splitProps(props as ListRowProps, [\n 'as',\n 'class',\n 'selected',\n 'dense',\n 'leading',\n 'trailing',\n 'description',\n 'tooltip',\n 'type',\n 'tabIndex',\n 'children',\n ])\n\n return (\n <Polymorphic\n as={(local.as ?? 'div') as T}\n type={local.as === 'button' ? (local.type ?? 'button') : local.type}\n tabIndex={local.tabIndex ?? (local.as === 'button' || local.as === 'a' ? 0 : undefined)}\n aria-current={local.selected ? 'true' : undefined}\n data-selected={local.selected ? '' : undefined}\n class={cn(\n 'group/row flex min-w-0 items-center gap-2.5 rounded-md px-2 text-sm',\n 'transition-colors ease-out outline-none',\n 'focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-primary-subtle',\n {\n 'h-row-sm': local.dense && !local.description,\n 'h-row-md': !local.dense && !local.description,\n 'min-h-row-sm py-1': local.dense && local.description,\n 'min-h-row-md py-1.5': !local.dense && local.description,\n },\n {\n 'bg-primary-subtle text-foreground': local.selected,\n 'hover:bg-surface-hover': !local.selected,\n },\n local.class\n )}\n {...(rest as ComponentProps<'div'>)}\n >\n <Show when={local.leading}>\n <span class=\"flex size-4 shrink-0 items-center justify-center [&_svg]:size-4\">\n {local.leading}\n </span>\n </Show>\n <span class=\"flex min-w-0 flex-1 flex-col\">\n <span class=\"truncate\">{local.children}</span>\n <Show when={local.description}>\n <span\n data-slot=\"list-row-description\"\n class={cn(\n 'truncate text-xs',\n local.selected ? 'text-foreground' : 'text-muted-foreground'\n )}\n >\n {local.description}\n </span>\n </Show>\n </span>\n <Show when={local.trailing}>\n <span\n data-slot=\"list-row-trailing\"\n class={cn(\n 'ms-auto flex shrink-0 items-center gap-1',\n local.selected ? 'text-foreground' : 'text-muted-foreground'\n )}\n >\n {local.trailing}\n </span>\n </Show>\n </Polymorphic>\n )\n}\n\ntype ListRowTooltipTargetProps<T extends ValidComponent = 'div'> = Omit<\n ListRowBaseProps<T>,\n 'as'\n> & { rowAs?: T }\n\n/** Adapts TooltipTrigger's polymorphic target to ListRow's semantic element. */\nfunction ListRowTooltipTarget<T extends ValidComponent = 'div'>(\n props: ListRowTooltipTargetProps<T>\n) {\n const [local, rest] = splitProps(props as ListRowTooltipTargetProps, ['rowAs'])\n return <ListRowBase as={local.rowAs} {...(rest as ListRowBaseProps<T>)} />\n}\n\nexport function ListRow<T extends ValidComponent = 'div'>(props: ListRowProps<T>) {\n const [local, rest] = splitProps(props as ListRowProps, ['as', 'tooltip'])\n const hasClickHandler = () => Boolean(rest.onClick || rest['on:click'])\n const rowAs = () => (local.as ?? (hasClickHandler() ? 'button' : 'div')) as T\n const rowType = () => (rowAs() === 'button' ? (rest.type ?? 'button') : rest.type)\n\n return (\n <Show\n when={local.tooltip}\n fallback={<ListRowBase as={rowAs()} type={rowType()} {...(rest as ListRowBaseProps<T>)} />}\n >\n <Tooltip>\n <TooltipTrigger\n as={ListRowTooltipTarget}\n rowAs={rowAs()}\n type={rowType()}\n {...(rest as ListRowTooltipTargetProps<T>)}\n >\n {rest.children}\n </TooltipTrigger>\n <TooltipContent>{local.tooltip}</TooltipContent>\n </Tooltip>\n </Show>\n )\n}\n\n/**\n * A group of rows with an optional heading and a scrolling body. The heading is\n * a plain label rather than a control: grouping is for reading, and a\n * disclosure on a list of five rows costs more attention than it saves.\n */\nexport function ListGroup(props: ComponentProps<'div'> & { label?: string; action?: JSX.Element }) {\n const [local, rest] = splitProps(props, ['class', 'label', 'action', 'children'])\n\n return (\n <div data-slot=\"list-group\" class={cn('flex flex-col gap-0.5', local.class)} {...rest}>\n <Show when={local.label}>\n <div class=\"group/list-header flex items-center gap-1 px-2 py-1\">\n <span class=\"min-w-0 flex-1 truncate text-2xs font-medium tracking-wide text-muted-foreground uppercase\">\n {local.label}\n </span>\n <Show when={local.action}>\n <span class=\"shrink-0 opacity-0 transition-opacity ease-out group-hover/list-header:opacity-100 focus-within:opacity-100\">\n {local.action}\n </span>\n </Show>\n </div>\n </Show>\n <div class=\"flex flex-col gap-0.5\">{local.children}</div>\n </div>\n )\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"list-row.js","names":["PolymorphicProps","ComponentProps","ValidComponent","createSignal","createUniqueId","Show","splitProps","Tooltip","TooltipContent","TooltipTrigger","cn","ListRowControl","ListRowControlProps","ListRowProps","T","tooltip","type","ListRowTooltipTargetProps","Omit","rowAs","externalDescribedBy","tooltipId","tooltipOpen","ListRowTooltipTarget","props","local","rest","describedBy","ids","undefined","flatMap","value","split","filter","Boolean","Set","join","_$createComponent","_$mergeProps","as","aria-describedby","ListRow","setTooltipOpen","hasClickHandler","onClick","rowType","rowProps","when","fallback","children","open","onOpenChange","id","ListGroup","label","action","JSX","Element","_el$","_tmpl$3","_el$5","firstChild","_$spread","class","_$insert","_el$2","_tmpl$2","_el$3","_el$4","_tmpl$","_$createComponent","_$mergeProps"],"sources":["../../../../src/components/composites/list-row/list-row.tsx"],"sourcesContent":["import type { PolymorphicProps } from '@kobalte/core/polymorphic'\nimport type { ComponentProps, ValidComponent } from 'solid-js'\nimport { createSignal, createUniqueId, Show, splitProps } from 'solid-js'\nimport { Tooltip, TooltipContent, TooltipTrigger } from '../../ui/tooltip'\nimport { cn } from '#lib/utils'\nimport { ListRowControl, type ListRowControlProps } from './list-row-control'\n\nexport type ListRowProps<T extends ValidComponent = 'div'> = PolymorphicProps<\n T,\n ListRowControlProps<T> & {\n /** A short explanation shown on pointer hover and keyboard focus. */\n tooltip?: string\n /** Native button type; defaults to `button` for button rows. */\n type?: ComponentProps<'button'>['type']\n /** Additional accessible description preserved on plain and rich rows. */\n 'aria-describedby'?: string\n }\n>\n\ntype ListRowTooltipTargetProps<T extends ValidComponent = 'div'> = Omit<ListRowProps<T>, 'as'> & {\n rowAs?: T\n externalDescribedBy?: string\n tooltipId?: string\n tooltipOpen?: () => boolean\n}\n\n/** Adapts TooltipTrigger's polymorphic target to ListRow's semantic element. */\nfunction ListRowTooltipTarget<T extends ValidComponent = 'div'>(\n props: ListRowTooltipTargetProps<T>\n) {\n const [local, rest] = splitProps(props as ListRowTooltipTargetProps, [\n 'rowAs',\n 'externalDescribedBy',\n 'tooltipId',\n 'tooltipOpen',\n ])\n const describedBy = () => {\n const ids = [\n rest['aria-describedby'],\n local.externalDescribedBy,\n local.tooltipOpen?.() ? local.tooltipId : undefined,\n ]\n .flatMap((value) => value?.split(/\\s+/) ?? [])\n .filter(Boolean)\n return [...new Set(ids)].join(' ') || undefined\n }\n\n return (\n <ListRowControl\n as={local.rowAs}\n {...(rest as unknown as ListRowControlProps<T>)}\n aria-describedby={describedBy()}\n />\n )\n}\n\n/**\n * Rich row composition with optional hover and keyboard tooltip behavior.\n * Import ListRowControl when the tooltip API is not needed and the consumer\n * wants the plain renderer to tree-shake independently.\n */\nexport function ListRow<T extends ValidComponent = 'div'>(props: ListRowProps<T>) {\n const [local, rest] = splitProps(props as ListRowProps<T>, ['as', 'tooltip', 'aria-describedby'])\n const [tooltipOpen, setTooltipOpen] = createSignal(false)\n const tooltipId = `list-row-tooltip-${createUniqueId()}`\n const hasClickHandler = () => Boolean(rest.onClick || rest['on:click'])\n const rowAs = () => (local.as ?? (hasClickHandler() ? 'button' : 'div')) as T\n const rowType = () => (rowAs() === 'button' ? (rest.type ?? 'button') : rest.type)\n const rowProps = () =>\n ({\n ...rest,\n type: rowType(),\n 'aria-describedby': local['aria-describedby'],\n }) as unknown as ListRowControlProps<T>\n\n return (\n <Show when={local.tooltip} fallback={<ListRowControl as={rowAs()} {...rowProps()} />}>\n <Tooltip open={tooltipOpen()} onOpenChange={setTooltipOpen}>\n <TooltipTrigger\n as={ListRowTooltipTarget}\n rowAs={rowAs()}\n type={rowType()}\n externalDescribedBy={local['aria-describedby']}\n tooltipId={tooltipId}\n tooltipOpen={tooltipOpen}\n {...(rest as ListRowTooltipTargetProps<T>)}\n >\n {rest.children}\n </TooltipTrigger>\n <TooltipContent id={tooltipId}>{local.tooltip}</TooltipContent>\n </Tooltip>\n </Show>\n )\n}\n\n/**\n * A group of rows with an optional heading and a scrolling body. The heading is\n * a plain label rather than a control: grouping is for reading, and a disclosure\n * on a list of five rows costs more attention than it saves.\n */\nexport function ListGroup(\n props: ComponentProps<'div'> & { label?: string; action?: import('solid-js').JSX.Element }\n) {\n const [local, rest] = splitProps(props, ['class', 'label', 'action', 'children'])\n return (\n <div data-slot=\"list-group\" class={cn('flex flex-col gap-0.5', local.class)} {...rest}>\n <Show when={local.label}>\n <div class=\"group/list-header flex items-center gap-1 px-2 py-1\">\n <span class=\"min-w-0 flex-1 truncate text-2xs font-medium tracking-wide text-muted-foreground uppercase\">\n {local.label}\n </span>\n <Show when={local.action}>\n <span class=\"shrink-0 opacity-0 transition-opacity ease-out group-hover/list-header:opacity-100 focus-within:opacity-100\">\n {local.action}\n </span>\n </Show>\n </div>\n </Show>\n <div class=\"flex flex-col gap-0.5\">{local.children}</div>\n </div>\n )\n}\n"],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ /** Keyboard-accessible tree rows with virtualization-aware focus handoff. */
2
+ export { Tree, TreeRow, type TreeProps, type TreeRowProps } from './tree';
3
+ export type { TreeItemDescriptor } from './tree-navigation';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/composites/tree/index.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,YAAY,EAAE,MAAM,QAAQ,CAAA;AACzE,YAAY,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA"}