@adea-ai/ui 0.89.2 → 0.94.0
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 +22 -5
- package/dist/NOTICE +19 -0
- package/dist/components/composites/list-row/index.d.ts +1 -0
- package/dist/components/composites/list-row/index.d.ts.map +1 -1
- package/dist/components/composites/list-row/index.js +2 -1
- package/dist/components/composites/list-row/list-row-control.d.ts +20 -0
- package/dist/components/composites/list-row/list-row-control.d.ts.map +1 -0
- package/dist/components/composites/list-row/list-row-control.js +96 -0
- package/dist/components/composites/list-row/list-row-control.js.map +1 -0
- package/dist/components/composites/list-row/list-row.d.ts +15 -35
- package/dist/components/composites/list-row/list-row.d.ts.map +1 -1
- package/dist/components/composites/list-row/list-row.js +88 -135
- package/dist/components/composites/list-row/list-row.js.map +1 -1
- package/dist/components/composites/tree/index.d.ts +4 -0
- package/dist/components/composites/tree/index.d.ts.map +1 -0
- package/dist/components/composites/tree/index.js +2 -0
- package/dist/components/composites/tree/tree-navigation.d.ts +46 -0
- package/dist/components/composites/tree/tree-navigation.d.ts.map +1 -0
- package/dist/components/composites/tree/tree-navigation.js +95 -0
- package/dist/components/composites/tree/tree-navigation.js.map +1 -0
- package/dist/components/composites/tree/tree.d.ts +64 -0
- package/dist/components/composites/tree/tree.d.ts.map +1 -0
- package/dist/components/composites/tree/tree.js +311 -0
- package/dist/components/composites/tree/tree.js.map +1 -0
- package/dist/components/conversation/message-composer.d.ts +18 -3
- package/dist/components/conversation/message-composer.d.ts.map +1 -1
- package/dist/components/conversation/message-composer.js +93 -27
- package/dist/components/conversation/message-composer.js.map +1 -1
- package/dist/components/layout/side-rail/side-rail.d.ts +1 -1
- package/dist/components/layout/side-rail/side-rail.d.ts.map +1 -1
- package/dist/components/layout/side-rail/side-rail.js +8 -8
- package/dist/components/layout/side-rail/side-rail.js.map +1 -1
- package/dist/components/layout/sidebar-nav/index.d.ts +1 -1
- package/dist/components/layout/sidebar-nav/index.d.ts.map +1 -1
- package/dist/components/layout/sidebar-nav/index.js +2 -2
- package/dist/components/layout/sidebar-nav/sidebar-nav.d.ts +19 -1
- package/dist/components/layout/sidebar-nav/sidebar-nav.d.ts.map +1 -1
- package/dist/components/layout/sidebar-nav/sidebar-nav.js +83 -17
- package/dist/components/layout/sidebar-nav/sidebar-nav.js.map +1 -1
- package/dist/components/layout/top-bar/top-bar.d.ts +6 -5
- package/dist/components/layout/top-bar/top-bar.d.ts.map +1 -1
- package/dist/components/layout/top-bar/top-bar.js +30 -7
- package/dist/components/layout/top-bar/top-bar.js.map +1 -1
- package/dist/components/ui/dialog/dialog.d.ts +2 -0
- package/dist/components/ui/dialog/dialog.d.ts.map +1 -1
- package/dist/components/ui/dialog/dialog.js +4 -3
- package/dist/components/ui/dialog/dialog.js.map +1 -1
- package/dist/components/ui/modal-dialog/modal-dialog.d.ts +5 -2
- package/dist/components/ui/modal-dialog/modal-dialog.d.ts.map +1 -1
- package/dist/components/ui/modal-dialog/modal-dialog.js +33 -24
- package/dist/components/ui/modal-dialog/modal-dialog.js.map +1 -1
- package/dist/components/ui/textarea/index.d.ts +1 -1
- package/dist/components/ui/textarea/index.d.ts.map +1 -1
- package/dist/components/ui/textarea/index.js +2 -2
- package/dist/components/ui/textarea/textarea.d.ts +15 -2
- package/dist/components/ui/textarea/textarea.d.ts.map +1 -1
- package/dist/components/ui/textarea/textarea.js +47 -3
- package/dist/components/ui/textarea/textarea.js.map +1 -1
- package/dist/components/ui/tooltip/tooltip.d.ts.map +1 -1
- package/dist/components/ui/tooltip/tooltip.js +239 -17
- package/dist/components/ui/tooltip/tooltip.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -3
- package/dist/lib/tokens.js +1 -1
- package/dist/lib/tokens.js.map +1 -1
- package/dist/lib/variants.js +2 -2
- package/dist/r/conversation.json +1 -0
- package/dist/r/list-row.json +5 -0
- package/dist/r/registry.json +41 -2
- package/dist/r/src/components/composites/list-row/index.ts +1 -0
- package/dist/r/src/components/composites/list-row/list-row-control.tsx +108 -0
- package/dist/r/src/components/composites/list-row/list-row.tsx +60 -127
- package/dist/r/src/components/composites/tree/index.ts +3 -0
- package/dist/r/src/components/composites/tree/tree-navigation.ts +114 -0
- package/dist/r/src/components/composites/tree/tree.tsx +405 -0
- package/dist/r/src/components/conversation/message-composer.tsx +103 -22
- package/dist/r/src/components/layout/side-rail/side-rail.tsx +18 -10
- package/dist/r/src/components/layout/sidebar-nav/index.ts +3 -0
- package/dist/r/src/components/layout/sidebar-nav/sidebar-nav.tsx +75 -6
- package/dist/r/src/components/layout/top-bar/top-bar.tsx +34 -11
- package/dist/r/src/components/ui/dialog/dialog.tsx +4 -2
- package/dist/r/src/components/ui/modal-dialog/modal-dialog.tsx +20 -4
- package/dist/r/src/components/ui/textarea/index.ts +1 -1
- package/dist/r/src/components/ui/textarea/textarea.tsx +52 -10
- package/dist/r/src/components/ui/tooltip/tooltip.tsx +305 -10
- package/dist/r/src/lib/tokens.ts +1 -1
- package/dist/r/src/styles/base.css +39 -0
- package/dist/r/src/styles/theme.css +5 -4
- package/dist/r/textarea.json +3 -1
- package/dist/r/top-bar.json +3 -1
- package/dist/r/tree.json +29 -0
- package/package.json +4 -1
- package/registry.json +41 -2
- package/src/components/composites/list-row/index.ts +1 -0
- package/src/components/composites/list-row/list-row-control.tsx +108 -0
- package/src/components/composites/list-row/list-row.tsx +60 -127
- package/src/components/composites/tree/index.ts +3 -0
- package/src/components/composites/tree/tree-navigation.ts +114 -0
- package/src/components/composites/tree/tree.tsx +405 -0
- package/src/components/conversation/message-composer.tsx +103 -22
- package/src/components/layout/side-rail/side-rail.tsx +18 -10
- package/src/components/layout/sidebar-nav/index.ts +3 -0
- package/src/components/layout/sidebar-nav/sidebar-nav.tsx +75 -6
- package/src/components/layout/top-bar/top-bar.tsx +34 -11
- package/src/components/ui/dialog/dialog.tsx +4 -2
- package/src/components/ui/modal-dialog/modal-dialog.tsx +20 -4
- package/src/components/ui/textarea/index.ts +1 -1
- package/src/components/ui/textarea/textarea.tsx +52 -10
- package/src/components/ui/tooltip/tooltip.tsx +305 -10
- package/src/index.ts +1 -0
- package/src/lib/tokens.ts +1 -1
- package/src/styles/base.css +39 -0
- package/src/styles/theme.css +5 -4
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
|
-
|
|
730
|
-
scroll horizontally when
|
|
731
|
-
|
|
732
|
-
Use `TopBarTitle align="center"`
|
|
733
|
-
classes when a title should yield
|
|
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 +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"}
|
|
@@ -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 [&_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,
|
|
3
|
-
|
|
4
|
-
|
|
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
|
-
|
|
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
|
-
*
|
|
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;
|
|
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 {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
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="
|
|
8
|
-
var _tmpl$2 = /*#__PURE__*/ template(`<
|
|
9
|
-
var _tmpl$3 = /*#__PURE__*/ template(`<
|
|
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, [
|
|
100
|
-
|
|
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, [
|
|
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(
|
|
115
|
-
|
|
116
|
-
|
|
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, {
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
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
|
-
*
|
|
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$
|
|
156
|
-
spread(_el
|
|
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
|
|
112
|
+
insert(_el$, createComponent(Show, {
|
|
160
113
|
get when() {
|
|
161
114
|
return local.label;
|
|
162
115
|
},
|
|
163
116
|
get children() {
|
|
164
|
-
var _el$
|
|
165
|
-
insert(_el$
|
|
166
|
-
insert(_el$
|
|
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$
|
|
172
|
-
insert(_el$
|
|
173
|
-
return _el$
|
|
124
|
+
var _el$4 = _tmpl$();
|
|
125
|
+
insert(_el$4, () => local.action);
|
|
126
|
+
return _el$4;
|
|
174
127
|
}
|
|
175
128
|
}), null);
|
|
176
|
-
return _el$
|
|
129
|
+
return _el$2;
|
|
177
130
|
}
|
|
178
|
-
}), _el$
|
|
179
|
-
insert(_el$
|
|
180
|
-
return _el
|
|
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 @@
|
|
|
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"}
|