@nocoo/basalt 2.2.0 → 3.1.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.
Files changed (320) hide show
  1. package/README.md +2 -0
  2. package/ai/COMPATIBILITY.md +11 -1
  3. package/ai/DESIGN.md +398 -0
  4. package/ai/INTEGRATION.md +255 -129
  5. package/ai/RECIPES.md +51 -26
  6. package/ai/USAGE.md +4 -4
  7. package/ai/registry.json +3018 -271
  8. package/dist/charts/config.d.ts +11 -11
  9. package/dist/charts/config.js +4 -4
  10. package/dist/charts/config.js.map +1 -1
  11. package/dist/charts/date-navigation.js +10 -10
  12. package/dist/charts/date-navigation.js.map +1 -1
  13. package/dist/charts/donut.js +1 -1
  14. package/dist/charts/donut.js.map +1 -1
  15. package/dist/charts/frame.d.ts +1 -1
  16. package/dist/charts/frame.js +4 -4
  17. package/dist/charts/frame.js.map +1 -1
  18. package/dist/charts/gauge.js +5 -5
  19. package/dist/charts/gauge.js.map +1 -1
  20. package/dist/charts/heatmap-calendar.js +11 -11
  21. package/dist/charts/heatmap-calendar.js.map +1 -1
  22. package/dist/charts/heatmap-matrix.js +8 -8
  23. package/dist/charts/heatmap-matrix.js.map +1 -1
  24. package/dist/charts/item-list.js +1 -1
  25. package/dist/charts/item-list.js.map +1 -1
  26. package/dist/charts/legend.js +19 -19
  27. package/dist/charts/legend.js.map +1 -1
  28. package/dist/charts/palette.js +2 -2
  29. package/dist/charts/palette.js.map +1 -1
  30. package/dist/charts/slot-bar.js +2 -2
  31. package/dist/charts/slot-bar.js.map +1 -1
  32. package/dist/charts/sparkline.js +38 -23
  33. package/dist/charts/sparkline.js.map +1 -1
  34. package/dist/charts/stat-card.d.ts +2 -2
  35. package/dist/charts/stat-card.js +61 -58
  36. package/dist/charts/stat-card.js.map +1 -1
  37. package/dist/charts/timeline.js +18 -9
  38. package/dist/charts/timeline.js.map +1 -1
  39. package/dist/charts/tooltip.js +16 -16
  40. package/dist/charts/tooltip.js.map +1 -1
  41. package/dist/components/accordion.js +1 -1
  42. package/dist/components/accordion.js.map +1 -1
  43. package/dist/components/alert-dialog.js +4 -4
  44. package/dist/components/alert-dialog.js.map +1 -1
  45. package/dist/components/app-header.js +8 -8
  46. package/dist/components/app-header.js.map +1 -1
  47. package/dist/components/app-shell.js +1 -1
  48. package/dist/components/app-shell.js.map +1 -1
  49. package/dist/components/approval-card.d.ts +13 -0
  50. package/dist/components/approval-card.js +161 -0
  51. package/dist/components/approval-card.js.map +1 -0
  52. package/dist/components/avatar.d.ts +12 -0
  53. package/dist/components/avatar.js +39 -18
  54. package/dist/components/avatar.js.map +1 -1
  55. package/dist/components/badge.js +8 -8
  56. package/dist/components/badge.js.map +1 -1
  57. package/dist/components/banner.d.ts +2 -2
  58. package/dist/components/banner.js +9 -8
  59. package/dist/components/banner.js.map +1 -1
  60. package/dist/components/basalt-mark.js +1 -1
  61. package/dist/components/basalt-mark.js.map +1 -1
  62. package/dist/components/battery-meter.js +5 -5
  63. package/dist/components/battery-meter.js.map +1 -1
  64. package/dist/components/breadcrumbs.js +6 -6
  65. package/dist/components/breadcrumbs.js.map +1 -1
  66. package/dist/components/button.js +10 -10
  67. package/dist/components/button.js.map +1 -1
  68. package/dist/components/chat-bubble.js +4 -3
  69. package/dist/components/chat-bubble.js.map +1 -1
  70. package/dist/components/chat-composer.d.ts +21 -3
  71. package/dist/components/chat-composer.js +126 -60
  72. package/dist/components/chat-composer.js.map +1 -1
  73. package/dist/components/chat-header.js +6 -6
  74. package/dist/components/chat-header.js.map +1 -1
  75. package/dist/components/chat-inbox.js +34 -30
  76. package/dist/components/chat-inbox.js.map +1 -1
  77. package/dist/components/chat-markdown.d.ts +8 -0
  78. package/dist/components/chat-markdown.js +122 -0
  79. package/dist/components/chat-markdown.js.map +1 -0
  80. package/dist/components/chat-message.d.ts +26 -0
  81. package/dist/components/chat-message.js +145 -0
  82. package/dist/components/chat-message.js.map +1 -0
  83. package/dist/components/checkbox.js +11 -11
  84. package/dist/components/checkbox.js.map +1 -1
  85. package/dist/components/clipboard-text.js +3 -3
  86. package/dist/components/clipboard-text.js.map +1 -1
  87. package/dist/components/code.d.ts +22 -20
  88. package/dist/components/code.js +94 -32
  89. package/dist/components/code.js.map +1 -1
  90. package/dist/components/collapsible.js +8 -4
  91. package/dist/components/collapsible.js.map +1 -1
  92. package/dist/components/command-palette.js +73 -47
  93. package/dist/components/command-palette.js.map +1 -1
  94. package/dist/components/context-cards.d.ts +15 -0
  95. package/dist/components/context-cards.js +148 -0
  96. package/dist/components/context-cards.js.map +1 -0
  97. package/dist/components/context-menu.d.ts +1 -1
  98. package/dist/components/context-menu.js +18 -14
  99. package/dist/components/context-menu.js.map +1 -1
  100. package/dist/components/data-table.d.ts +14 -2
  101. package/dist/components/data-table.js +185 -135
  102. package/dist/components/data-table.js.map +1 -1
  103. package/dist/components/date-picker.js +13 -13
  104. package/dist/components/date-picker.js.map +1 -1
  105. package/dist/components/delete-resource.js +1 -1
  106. package/dist/components/delete-resource.js.map +1 -1
  107. package/dist/components/description-list.js +3 -3
  108. package/dist/components/description-list.js.map +1 -1
  109. package/dist/components/dialog.d.ts +2 -2
  110. package/dist/components/dialog.js +8 -8
  111. package/dist/components/dialog.js.map +1 -1
  112. package/dist/components/diff-table.d.ts +15 -0
  113. package/dist/components/diff-table.js +151 -0
  114. package/dist/components/diff-table.js.map +1 -0
  115. package/dist/components/dock.js +2 -2
  116. package/dist/components/dock.js.map +1 -1
  117. package/dist/components/dropdown-menu.js +23 -18
  118. package/dist/components/dropdown-menu.js.map +1 -1
  119. package/dist/components/editable-nav-item.js +63 -58
  120. package/dist/components/editable-nav-item.js.map +1 -1
  121. package/dist/components/empty.js +6 -6
  122. package/dist/components/empty.js.map +1 -1
  123. package/dist/components/fab.js +1 -1
  124. package/dist/components/fab.js.map +1 -1
  125. package/dist/components/field.js +3 -3
  126. package/dist/components/field.js.map +1 -1
  127. package/dist/components/file-dropzone.js +7 -7
  128. package/dist/components/file-dropzone.js.map +1 -1
  129. package/dist/components/filter-bar.js +6 -6
  130. package/dist/components/filter-bar.js.map +1 -1
  131. package/dist/components/flow.js +4 -3
  132. package/dist/components/flow.js.map +1 -1
  133. package/dist/components/grid.d.ts +3 -1
  134. package/dist/components/grid.js +15 -8
  135. package/dist/components/grid.js.map +1 -1
  136. package/dist/components/hover-card.js +1 -1
  137. package/dist/components/hover-card.js.map +1 -1
  138. package/dist/components/icon-picker.d.ts +8 -2
  139. package/dist/components/icon-picker.js +75 -47
  140. package/dist/components/icon-picker.js.map +1 -1
  141. package/dist/components/inline-editable.js +6 -6
  142. package/dist/components/inline-editable.js.map +1 -1
  143. package/dist/components/input-area.js +3 -3
  144. package/dist/components/input-area.js.map +1 -1
  145. package/dist/components/input-group.js +5 -5
  146. package/dist/components/input-group.js.map +1 -1
  147. package/dist/components/input.js +4 -4
  148. package/dist/components/input.js.map +1 -1
  149. package/dist/components/label.js +3 -3
  150. package/dist/components/label.js.map +1 -1
  151. package/dist/components/layer-card.d.ts +9 -4
  152. package/dist/components/layer-card.js +72 -67
  153. package/dist/components/layer-card.js.map +1 -1
  154. package/dist/components/loader.d.ts +16 -10
  155. package/dist/components/loader.js +46 -53
  156. package/dist/components/loader.js.map +1 -1
  157. package/dist/components/loading-screen.js +3 -3
  158. package/dist/components/loading-screen.js.map +1 -1
  159. package/dist/components/menu-bar.js +32 -27
  160. package/dist/components/menu-bar.js.map +1 -1
  161. package/dist/components/meter.d.ts +5 -5
  162. package/dist/components/meter.js +25 -12
  163. package/dist/components/meter.js.map +1 -1
  164. package/dist/components/multi-select.js +66 -62
  165. package/dist/components/multi-select.js.map +1 -1
  166. package/dist/components/navigation-menu.d.ts +2 -2
  167. package/dist/components/navigation-menu.js +22 -8
  168. package/dist/components/navigation-menu.js.map +1 -1
  169. package/dist/components/overlay.js +2 -2
  170. package/dist/components/overlay.js.map +1 -1
  171. package/dist/components/page-header.d.ts +3 -1
  172. package/dist/components/page-header.js +12 -12
  173. package/dist/components/page-header.js.map +1 -1
  174. package/dist/components/pagination.js +3 -3
  175. package/dist/components/pagination.js.map +1 -1
  176. package/dist/components/popover.js +18 -23
  177. package/dist/components/popover.js.map +1 -1
  178. package/dist/components/prompt-bar.d.ts +16 -0
  179. package/dist/components/prompt-bar.js +49 -0
  180. package/dist/components/prompt-bar.js.map +1 -0
  181. package/dist/components/radio.js +9 -9
  182. package/dist/components/radio.js.map +1 -1
  183. package/dist/components/recommendation-card.d.ts +13 -0
  184. package/dist/components/recommendation-card.js +123 -0
  185. package/dist/components/recommendation-card.js.map +1 -0
  186. package/dist/components/resource-list.js +1 -1
  187. package/dist/components/resource-list.js.map +1 -1
  188. package/dist/components/responsive-master-detail.js +4 -4
  189. package/dist/components/responsive-master-detail.js.map +1 -1
  190. package/dist/components/scroll-area.js +3 -3
  191. package/dist/components/scroll-area.js.map +1 -1
  192. package/dist/components/section-rule.d.ts +5 -3
  193. package/dist/components/section-rule.js +12 -12
  194. package/dist/components/section-rule.js.map +1 -1
  195. package/dist/components/segment-control.js +3 -3
  196. package/dist/components/segment-control.js.map +1 -1
  197. package/dist/components/select.js +47 -32
  198. package/dist/components/select.js.map +1 -1
  199. package/dist/components/sensitive-input.js +17 -19
  200. package/dist/components/sensitive-input.js.map +1 -1
  201. package/dist/components/sheet.d.ts +4 -4
  202. package/dist/components/sheet.js +11 -10
  203. package/dist/components/sheet.js.map +1 -1
  204. package/dist/components/sidebar.js +149 -137
  205. package/dist/components/sidebar.js.map +1 -1
  206. package/dist/components/skeleton-line.d.ts +1 -1
  207. package/dist/components/skeleton-line.js +2 -2
  208. package/dist/components/skeleton-line.js.map +1 -1
  209. package/dist/components/slider.js +2 -2
  210. package/dist/components/slider.js.map +1 -1
  211. package/dist/components/stat-strip.js +5 -4
  212. package/dist/components/stat-strip.js.map +1 -1
  213. package/dist/components/switch.js +6 -6
  214. package/dist/components/switch.js.map +1 -1
  215. package/dist/components/table-of-contents.js +5 -5
  216. package/dist/components/table-of-contents.js.map +1 -1
  217. package/dist/components/table-pager.js +2 -2
  218. package/dist/components/table-pager.js.map +1 -1
  219. package/dist/components/table.d.ts +39 -2
  220. package/dist/components/table.js +48 -17
  221. package/dist/components/table.js.map +1 -1
  222. package/dist/components/tabs.js +7 -6
  223. package/dist/components/tabs.js.map +1 -1
  224. package/dist/components/tag-badge.d.ts +10 -10
  225. package/dist/components/tag-badge.js +11 -11
  226. package/dist/components/tag-badge.js.map +1 -1
  227. package/dist/components/tag-color-picker.d.ts +8 -1
  228. package/dist/components/tag-color-picker.js +33 -25
  229. package/dist/components/tag-color-picker.js.map +1 -1
  230. package/dist/components/text.js +5 -5
  231. package/dist/components/text.js.map +1 -1
  232. package/dist/components/theme-toggle.js +1 -1
  233. package/dist/components/theme-toggle.js.map +1 -1
  234. package/dist/components/thinking.d.ts +16 -0
  235. package/dist/components/thinking.js +85 -0
  236. package/dist/components/thinking.js.map +1 -0
  237. package/dist/components/toast.js +25 -20
  238. package/dist/components/toast.js.map +1 -1
  239. package/dist/components/toggle-group.js +6 -5
  240. package/dist/components/toggle-group.js.map +1 -1
  241. package/dist/components/toggle.js +6 -6
  242. package/dist/components/toggle.js.map +1 -1
  243. package/dist/components/tool-chips.d.ts +12 -0
  244. package/dist/components/tool-chips.js +138 -0
  245. package/dist/components/tool-chips.js.map +1 -0
  246. package/dist/components/toolbar.js +3 -3
  247. package/dist/components/toolbar.js.map +1 -1
  248. package/dist/components/tooltip.js +1 -1
  249. package/dist/components/tooltip.js.map +1 -1
  250. package/dist/components/typeahead-field.js +59 -56
  251. package/dist/components/typeahead-field.js.map +1 -1
  252. package/dist/components/upload-queue.js +15 -14
  253. package/dist/components/upload-queue.js.map +1 -1
  254. package/dist/models/agent-feedback.d.ts +44 -0
  255. package/dist/models/agent-feedback.js +28 -0
  256. package/dist/models/agent-feedback.js.map +1 -0
  257. package/dist/models/avatar.d.ts +2 -0
  258. package/dist/models/avatar.js +15 -0
  259. package/dist/models/avatar.js.map +1 -0
  260. package/dist/models/code.d.ts +6 -0
  261. package/dist/models/code.js +24 -0
  262. package/dist/models/code.js.map +1 -0
  263. package/dist/models/context-cards.d.ts +13 -0
  264. package/dist/models/context-cards.js +17 -0
  265. package/dist/models/context-cards.js.map +1 -0
  266. package/dist/models/diff-table.d.ts +12 -0
  267. package/dist/models/diff-table.js +9 -0
  268. package/dist/models/diff-table.js.map +1 -0
  269. package/dist/models/recommendation.d.ts +26 -0
  270. package/dist/models/recommendation.js +23 -0
  271. package/dist/models/recommendation.js.map +1 -0
  272. package/dist/styles/base.css +14 -2
  273. package/dist/styles/standalone.css +1901 -943
  274. package/dist/styles/tailwind.css +180 -13
  275. package/dist/styles/tokens.css +681 -20
  276. package/dist/utils/cn.js +25 -4
  277. package/dist/utils/cn.js.map +1 -1
  278. package/dist/utils/control-surface.d.ts +1 -1
  279. package/dist/utils/control-surface.js +1 -1
  280. package/dist/utils/control-surface.js.map +1 -1
  281. package/dist/utils/navigation.d.ts +3 -0
  282. package/dist/utils/navigation.js +8 -0
  283. package/dist/utils/navigation.js.map +1 -0
  284. package/dist/utils/selection-indicator.d.ts +1 -1
  285. package/dist/utils/selection-indicator.js +49 -72
  286. package/dist/utils/selection-indicator.js.map +1 -1
  287. package/dist/utils/use-hover-highlight.d.ts +4 -0
  288. package/dist/utils/use-hover-highlight.js +82 -0
  289. package/dist/utils/use-hover-highlight.js.map +1 -0
  290. package/dist/viewmodels/use-approval-card.d.ts +20 -0
  291. package/dist/viewmodels/use-approval-card.js +83 -0
  292. package/dist/viewmodels/use-approval-card.js.map +1 -0
  293. package/dist/viewmodels/use-chat-composer.d.ts +16 -0
  294. package/dist/viewmodels/use-chat-composer.js +34 -0
  295. package/dist/viewmodels/use-chat-composer.js.map +1 -0
  296. package/dist/viewmodels/use-chat-message.d.ts +16 -0
  297. package/dist/viewmodels/use-chat-message.js +26 -0
  298. package/dist/viewmodels/use-chat-message.js.map +1 -0
  299. package/dist/viewmodels/use-code-block.d.ts +8 -0
  300. package/dist/viewmodels/use-code-block.js +38 -0
  301. package/dist/viewmodels/use-code-block.js.map +1 -0
  302. package/dist/viewmodels/use-context-cards.d.ts +17 -0
  303. package/dist/viewmodels/use-context-cards.js +18 -0
  304. package/dist/viewmodels/use-context-cards.js.map +1 -0
  305. package/dist/viewmodels/use-diff-table.d.ts +16 -0
  306. package/dist/viewmodels/use-diff-table.js +42 -0
  307. package/dist/viewmodels/use-diff-table.js.map +1 -0
  308. package/dist/viewmodels/use-loader.d.ts +4 -0
  309. package/dist/viewmodels/use-loader.js +22 -0
  310. package/dist/viewmodels/use-loader.js.map +1 -0
  311. package/dist/viewmodels/use-recommendation-card.d.ts +17 -0
  312. package/dist/viewmodels/use-recommendation-card.js +41 -0
  313. package/dist/viewmodels/use-recommendation-card.js.map +1 -0
  314. package/dist/viewmodels/use-thinking.d.ts +13 -0
  315. package/dist/viewmodels/use-thinking.js +18 -0
  316. package/dist/viewmodels/use-thinking.js.map +1 -0
  317. package/dist/viewmodels/use-tool-chips.d.ts +10 -0
  318. package/dist/viewmodels/use-tool-chips.js +20 -0
  319. package/dist/viewmodels/use-tool-chips.js.map +1 -0
  320. package/package.json +28 -26
@@ -1,4 +1,6 @@
1
1
  import { type CSSProperties, type ReactNode } from "react";
2
+ import { type TableTextAlign } from "./table.js";
3
+ export type DataTableEdge = "inset" | "attached";
2
4
  export type DataTableColumn<T> = {
3
5
  id: string;
4
6
  header: string;
@@ -9,12 +11,16 @@ export type DataTableColumn<T> = {
9
11
  headerContent?: ReactNode;
10
12
  /** Whether the header changes sorting. @default true */
11
13
  sortable?: boolean;
12
- /** Width of the header and its column. */
14
+ /** Preferred and minimum column width; narrow viewports scroll instead of squeezing it. */
13
15
  width?: CSSProperties["width"];
16
+ /** Allow multiline cell content. Default false keeps dense records on one line. */
17
+ wrap?: boolean;
14
18
  /** Classes applied to the header cell. */
15
19
  headerClassName?: string;
16
20
  /** Classes applied to each data cell. */
17
21
  cellClassName?: string;
22
+ /** Logical header and cell alignment. Omitted cells inherit from the table. */
23
+ textAlign?: TableTextAlign;
18
24
  };
19
25
  export type DataTableSort = {
20
26
  id: string;
@@ -86,6 +92,10 @@ export type DataTableProps<T = unknown> = {
86
92
  * Additional classes for the table.
87
93
  */
88
94
  className?: string;
95
+ /** Bound the local scroll region; column headers stay visible while scrolling. */
96
+ maxHeight?: CSSProperties["maxHeight"];
97
+ /** Show display-order row numbers, continuous across pages. @default false */
98
+ rowNumbers?: boolean;
89
99
  /** Controlled sorting. null explicitly disables sorting. */
90
100
  sort?: DataTableSort | null;
91
101
  /** Initial sorting for uncontrolled usage. @default null */
@@ -110,5 +120,7 @@ export type DataTableProps<T = unknown> = {
110
120
  "aria-label"?: string;
111
121
  /** ID of additional table instructions or summary. */
112
122
  "aria-describedby"?: string;
123
+ /** Direct-card rails on the first and last display columns. @default "inset" */
124
+ edge?: DataTableEdge;
113
125
  };
114
- export declare function DataTable<T>({ data, columns, filter, loading, empty, selected, defaultSelected, onSelectedChange, multiple, page, defaultPage, pageSize, onPageChange, getRowId, className, sort: controlledSort, defaultSort, onSortChange, manualSorting, manualPagination, manualFiltering, total, error, onRetry, retryLabel, "aria-label": ariaLabel, "aria-describedby": ariaDescribedBy, }: DataTableProps<T>): import("react").JSX.Element;
126
+ export declare function DataTable<T>({ data, columns, filter, loading, empty, selected, defaultSelected, onSelectedChange, multiple, page, defaultPage, pageSize, onPageChange, getRowId, className, maxHeight, rowNumbers, sort: controlledSort, defaultSort, onSortChange, manualSorting, manualPagination, manualFiltering, total, error, onRetry, retryLabel, "aria-label": ariaLabel, "aria-describedby": ariaDescribedBy, edge, }: DataTableProps<T>): import("react").JSX.Element;
@@ -1,17 +1,21 @@
1
1
  "use client";
2
2
  import { cn as e } from "../utils/cn.js";
3
3
  import { Button as t } from "./button.js";
4
- import { SkeletonLine as n } from "./skeleton-line.js";
5
- import { Pagination as r } from "./pagination.js";
6
- import { Table as i, TableBody as a, TableCell as o, TableHead as s, TableHeader as c, TableRow as l } from "./table.js";
7
- import { useCallback as u, useEffect as d, useLayoutEffect as ee, useMemo as te, useRef as f, useState as p } from "react";
8
- import { jsx as m, jsxs as h } from "react/jsx-runtime";
4
+ import { Checkbox as n } from "./checkbox.js";
5
+ import { SkeletonLine as r } from "./skeleton-line.js";
6
+ import { Pagination as i } from "./pagination.js";
7
+ import { Table as a, TableBody as o, TableCell as s, TableHead as c, TableHeader as l, TableRow as u, TableSortableHeader as d } from "./table.js";
8
+ import { useCallback as f, useEffect as ee, useLayoutEffect as te, useMemo as ne, useRef as p, useState as m } from "react";
9
+ import { jsx as h, jsxs as g } from "react/jsx-runtime";
9
10
  //#region src/components/data-table.tsx
10
- function g(e) {
11
+ function _(t, n, r) {
12
+ if (t === "attached") return e(n === 0 && "ps-basalt-table-edge", n === r - 1 && "pe-basalt-table-edge");
13
+ }
14
+ function v(e) {
11
15
  return e === -Infinity ? 0 : typeof e == "bigint" || typeof e == "number" && Number.isFinite(e) ? 1 : e === Infinity ? 2 : typeof e == "number" ? 3 : typeof e == "string" ? 4 : 5;
12
16
  }
13
- function ne(e, t) {
14
- let n = g(e), r = g(t);
17
+ function re(e, t) {
18
+ let n = v(e), r = v(t);
15
19
  if (n !== r) return n - r;
16
20
  if (n === 1) {
17
21
  let n = e, r = t;
@@ -20,7 +24,7 @@ function ne(e, t) {
20
24
  let i = String(e), a = String(t);
21
25
  return i < a ? -1 : +(i > a);
22
26
  }
23
- function re(e, t, n, r) {
27
+ function ie(e, t, n, r) {
24
28
  if (e === null) return "prim:null";
25
29
  if (e === void 0) return "prim:undefined";
26
30
  if (typeof e == "symbol") {
@@ -30,33 +34,33 @@ function re(e, t, n, r) {
30
34
  let i = typeof e;
31
35
  return i === "number" ? Object.is(e, -0) ? "prim:number:-0" : `prim:number:${String(e)}` : i === "string" || i === "bigint" || i === "boolean" ? `prim:${i}:${String(e)}` : `prim:${t}`;
32
36
  }
33
- function _(e) {
37
+ function y(e) {
34
38
  return e.startsWith("dup:") || e.startsWith("gen:");
35
39
  }
36
- function v(e) {
40
+ function b(e) {
37
41
  return typeof e == "function" || typeof e == "object" && !!e;
38
42
  }
39
- function ie(e, t) {
43
+ function ae(e, t) {
40
44
  if (e.filterValue) return String(e.filterValue(t));
41
45
  if (e.sortValue) return String(e.sortValue(t));
42
46
  let n = e.accessor(t);
43
47
  return typeof n == "string" || typeof n == "number" || typeof n == "bigint" ? String(n) : "";
44
48
  }
45
- function y(e, t, n, r) {
49
+ function x(e, t, n, r) {
46
50
  let i = r?.(e, t);
47
- return i === void 0 ? v(e) && "id" in e && e.id != null ? String(e.id) : n : i;
51
+ return i === void 0 ? b(e) && "id" in e && e.id != null ? String(e.id) : n : i;
48
52
  }
49
- function b({ data: g, columns: b, filter: ae = "", loading: x = !1, empty: oe = "No results", selected: S, defaultSelected: C, onSelectedChange: w, multiple: se = !1, page: T, defaultPage: ce = 1, pageSize: E, onPageChange: le, getRowId: D, className: ue, sort: O, defaultSort: de = null, onSortChange: fe, manualSorting: k = !1, manualPagination: A = !1, manualFiltering: j = !1, total: M, error: N, onRetry: P, retryLabel: pe = "Try again", "aria-label": F = "Data table", "aria-describedby": me }) {
50
- let [he, ge] = p(de), I = O === void 0 ? he : O, _e = (e) => {
51
- O === void 0 && ge(e), fe?.(e);
52
- }, [ve, ye] = p(C ?? []), [L, be] = p(ce), R = f(/* @__PURE__ */ new WeakMap()), z = f(0), B = f(/* @__PURE__ */ new WeakMap()), V = f(/* @__PURE__ */ new Map()), H = f(/* @__PURE__ */ new Map()), U = f(/* @__PURE__ */ new Map()), xe = f(/* @__PURE__ */ new Map()), W = ae.trim().toLowerCase(), G = te(() => {
53
+ function S({ data: v, columns: S, filter: oe = "", loading: C = !1, empty: se = "No results", selected: w, defaultSelected: ce, onSelectedChange: T, multiple: le = !1, page: E, defaultPage: ue = 1, pageSize: D, onPageChange: O, getRowId: k, className: de, maxHeight: fe, rowNumbers: A = !1, sort: j, defaultSort: pe = null, onSortChange: me, manualSorting: M = !1, manualPagination: N = !1, manualFiltering: P = !1, total: F, error: I, onRetry: L, retryLabel: he = "Try again", "aria-label": R = "Data table", "aria-describedby": ge, edge: z }) {
54
+ let [_e, ve] = m(pe), B = j === void 0 ? _e : j, ye = (e) => {
55
+ j === void 0 && ve(e), me?.(e);
56
+ }, [be, xe] = m(ce ?? []), [V, Se] = m(ue), H = p(/* @__PURE__ */ new WeakMap()), U = p(0), W = p(/* @__PURE__ */ new WeakMap()), G = p(/* @__PURE__ */ new Map()), Ce = p(/* @__PURE__ */ new Map()), we = p(/* @__PURE__ */ new Map()), Te = p(/* @__PURE__ */ new Map()), K = oe.trim().toLowerCase(), q = ne(() => {
53
57
  let e = (e) => {
54
- let t = R.current.get(e);
55
- return t || (t = `basalt-row-${z.current++}`, R.current.set(e, t)), t;
58
+ let t = H.current.get(e);
59
+ return t || (t = `basalt-row-${U.current++}`, H.current.set(e, t)), t;
56
60
  }, t = (e, t) => {
57
- let n = D?.(e, t);
61
+ let n = k?.(e, t);
58
62
  if (n !== void 0) return `get:${n}`;
59
- if (v(e) && "id" in e) {
63
+ if (b(e) && "id" in e) {
60
64
  let t = e.id;
61
65
  if (t != null) return `id:${String(t)}`;
62
66
  }
@@ -65,12 +69,12 @@ function b({ data: g, columns: b, filter: ae = "", loading: x = !1, empty: oe =
65
69
  let l = a.get(c) ?? [];
66
70
  l.push(s), a.set(c, l), o.set(s, c);
67
71
  let u = t(e, n);
68
- if (u && (r.set(u, s), _(s))) {
72
+ if (u && (r.set(u, s), y(s))) {
69
73
  let e = i.get(u) ?? [];
70
74
  e.push(s), i.set(u, e);
71
75
  }
72
- }, c = /* @__PURE__ */ new WeakMap(), l = g.map((e, t) => {
73
- let n = v(e) ? e : null, r = n ? c.get(n) ?? 0 : 0;
76
+ }, c = /* @__PURE__ */ new WeakMap(), l = v.map((e, t) => {
77
+ let n = b(e) ? e : null, r = n ? c.get(n) ?? 0 : 0;
74
78
  return n && c.set(n, r + 1), {
75
79
  row: e,
76
80
  index: t,
@@ -79,29 +83,29 @@ function b({ data: g, columns: b, filter: ae = "", loading: x = !1, empty: oe =
79
83
  };
80
84
  });
81
85
  for (let e of l) {
82
- let t = v(e.row) ? e.row : null;
86
+ let t = b(e.row) ? e.row : null;
83
87
  if (!t) continue;
84
- let r = B.current.get(t)?.[e.occurrence];
85
- r && !n.has(r) && V.current.get(r) === t && (e.key = r, n.add(r));
88
+ let r = W.current.get(t)?.[e.occurrence];
89
+ r && !n.has(r) && G.current.get(r) === t && (e.key = r, n.add(r));
86
90
  }
87
91
  let u = l.map(({ row: r, index: i, occurrence: a, key: o }) => {
88
- let c = v(r) ? r : null;
92
+ let c = b(r) ? r : null;
89
93
  if (o) return s(r, i, o, c), {
90
94
  row: r,
91
95
  key: o,
92
- selectId: y(r, i, o, D)
96
+ selectId: x(r, i, o, k)
93
97
  };
94
98
  let l = a > 0, u, d = t(r, i);
95
99
  if (d && (u = d), c) {
96
100
  let t = e(c);
97
101
  if (!u) u = l ? `gen:${t}#${a}` : `gen:${t}`;
98
- else if (n.has(u) || l) u = (U.current.get(u) ?? []).find((e) => !n.has(e)) ?? (l ? `dup:${t}#${a}` : `dup:${t}`);
102
+ else if (n.has(u) || l) u = (we.current.get(u) ?? []).find((e) => !n.has(e)) ?? (l ? `dup:${t}#${a}` : `dup:${t}`);
99
103
  else {
100
- let e = H.current.get(u);
101
- e && !n.has(e) && _(e) && (u = e);
104
+ let e = Ce.current.get(u);
105
+ e && !n.has(e) && y(e) && (u = e);
102
106
  }
103
107
  }
104
- if (u ??= re(r, i, xe.current, z), n.has(u)) {
108
+ if (u ??= ie(r, i, Te.current, U), n.has(u)) {
105
109
  let e = 0, t = `occ:${u}#${e}`;
106
110
  for (; n.has(t);) e += 1, t = `occ:${u}#${e}`;
107
111
  u = t;
@@ -109,16 +113,16 @@ function b({ data: g, columns: b, filter: ae = "", loading: x = !1, empty: oe =
109
113
  return n.add(u), s(r, i, u, c), {
110
114
  row: r,
111
115
  key: u,
112
- selectId: y(r, i, u, D)
116
+ selectId: x(r, i, u, k)
113
117
  };
114
- }), d = W && !j ? u.filter(({ row: e }) => b.some((t) => ie(t, e).toLowerCase().includes(W))) : u;
118
+ }), d = K && !P ? u.filter(({ row: e }) => S.some((t) => ae(t, e).toLowerCase().includes(K))) : u;
115
119
  return {
116
120
  rows: (() => {
117
- if (!I || k) return d;
118
- let e = b.find((e) => e.id === I.id);
121
+ if (!B || M) return d;
122
+ let e = S.find((e) => e.id === B.id);
119
123
  return e ? [...d].sort((t, n) => {
120
- let r = ne(e.sortValue?.(t.row) ?? e.accessor(t.row), e.sortValue?.(n.row) ?? e.accessor(n.row));
121
- return I.dir === "asc" ? r : -r;
124
+ let r = re(e.sortValue?.(t.row) ?? e.accessor(t.row), e.sortValue?.(n.row) ?? e.accessor(n.row));
125
+ return B.dir === "asc" ? r : -r;
122
126
  }) : d;
123
127
  })(),
124
128
  assigned: a,
@@ -127,140 +131,186 @@ function b({ data: g, columns: b, filter: ae = "", loading: x = !1, empty: oe =
127
131
  dups: i
128
132
  };
129
133
  }, [
130
- b,
131
- g,
132
- D,
133
- W,
134
- I,
135
- j,
136
- k
134
+ S,
135
+ v,
136
+ k,
137
+ K,
138
+ B,
139
+ P,
140
+ M
137
141
  ]);
142
+ te(() => {
143
+ for (let [e, t] of q.assigned) W.current.set(e, t);
144
+ G.current = q.owner, Ce.current = q.lastKey, we.current = q.dups;
145
+ }, [q]);
146
+ let J = w !== void 0 || ce !== void 0 || T !== void 0, Y = w ?? be, Ee = f((e) => {
147
+ w === void 0 && xe(e), T?.(e);
148
+ }, [T, w]), De = N && F !== void 0 ? Math.max(0, F) : q.rows.length, Oe = D && D > 0 ? Math.max(1, Math.ceil(De / D)) : 1, X = Math.min(Oe, Math.max(1, E ?? V)), Z = f((e) => {
149
+ E === void 0 && Se(e), O?.(e);
150
+ }, [O, E]), Q = p(null);
138
151
  ee(() => {
139
- for (let [e, t] of G.assigned) B.current.set(e, t);
140
- V.current = G.owner, H.current = G.lastKey, U.current = G.dups;
141
- }, [G]);
142
- let K = S !== void 0 || C !== void 0 || w !== void 0, q = S ?? ve, J = u((e) => {
143
- S === void 0 && ye(e), w?.(e);
144
- }, [w, S]), Se = A && M !== void 0 ? Math.max(0, M) : G.rows.length, Y = E && E > 0 ? Math.max(1, Math.ceil(Se / E)) : 1, X = Math.min(Y, Math.max(1, T ?? L)), Z = u((e) => {
145
- T === void 0 && be(e), le?.(e);
146
- }, [le, T]), Q = f(null);
147
- d(() => {
148
- let e = T ?? L;
149
- if (e === X || x) {
152
+ let e = E ?? V;
153
+ if (e === X || C) {
150
154
  Q.current = null;
151
155
  return;
152
156
  }
153
157
  let t = `${e}:${X}`;
154
158
  Q.current !== t && (Q.current = t, Z(X));
155
159
  }, [
156
- T,
157
- L,
160
+ E,
161
+ V,
158
162
  X,
159
- x,
163
+ C,
160
164
  Z
161
165
  ]);
162
- let Ce = !A && E && E > 0 ? G.rows.slice((X - 1) * E, X * E) : G.rows, $ = b.length + +!!K, we = (e) => {
163
- if (se) {
164
- J(q.includes(e) ? q.filter((t) => t !== e) : [...q, e]);
166
+ let ke = !N && D && D > 0 ? q.rows.slice((X - 1) * D, X * D) : q.rows, $ = S.length + +!!J + +!!A, Ae = (e) => {
167
+ if (le) {
168
+ Ee(Y.includes(e) ? Y.filter((t) => t !== e) : [...Y, e]);
165
169
  return;
166
170
  }
167
- J(q.includes(e) ? [] : [e]);
171
+ Ee(Y.includes(e) ? [] : [e]);
168
172
  };
169
- return /* @__PURE__ */ h("div", {
170
- className: "flex min-w-0 flex-col gap-3",
171
- children: [/* @__PURE__ */ m("div", {
173
+ return /* @__PURE__ */ g("div", {
174
+ className: "flex min-w-0 flex-col gap-basalt-space-lg",
175
+ children: [/* @__PURE__ */ h("div", {
172
176
  role: "region",
173
- "aria-label": `${F} scroll area`,
177
+ "aria-label": `${R} scroll area`,
174
178
  tabIndex: 0,
175
- className: "min-w-0 overflow-x-auto rounded-basalt-md focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-basalt-primary",
176
- children: /* @__PURE__ */ h(i, {
177
- className: e("w-full", ue),
178
- "aria-label": F,
179
- "aria-describedby": me,
180
- "aria-busy": x || void 0,
181
- children: [/* @__PURE__ */ m(c, { children: /* @__PURE__ */ h(l, { children: [K ? /* @__PURE__ */ m(s, { children: /* @__PURE__ */ m("span", {
182
- className: "sr-only",
183
- children: "Select"
184
- }) }) : null, b.map((e) => /* @__PURE__ */ m(s, {
185
- className: e.headerClassName,
186
- style: { width: e.width },
187
- scope: "col",
188
- "aria-sort": e.sortable === !1 ? void 0 : I?.id === e.id ? I.dir === "asc" ? "ascending" : "descending" : "none",
189
- children: e.sortable === !1 ? e.headerContent ?? e.header : /* @__PURE__ */ h("button", {
190
- type: "button",
191
- "aria-label": e.header,
192
- className: "appearance-none border-0 bg-transparent p-0 font-inherit text-inherit font-medium cursor-pointer rounded-sm focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-basalt-primary",
193
- onClick: () => _e(I?.id === e.id && I.dir === "asc" ? {
194
- id: e.id,
195
- dir: "desc"
196
- } : {
197
- id: e.id,
198
- dir: "asc"
199
- }),
200
- children: [e.headerContent ?? e.header, I?.id === e.id ? I.dir === "asc" ? " ↑" : " ↓" : ""]
201
- })
202
- }, e.id))] }) }), /* @__PURE__ */ m(a, { children: x ? /* @__PURE__ */ m(l, { children: /* @__PURE__ */ m(o, {
179
+ className: "relative min-w-0 overflow-auto rounded-basalt-md focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-basalt-primary",
180
+ style: { maxHeight: fe },
181
+ children: /* @__PURE__ */ g(a, {
182
+ className: e("w-full", de),
183
+ "aria-label": R,
184
+ "aria-describedby": ge,
185
+ "aria-busy": C || void 0,
186
+ "data-basalt-data-table": "",
187
+ children: [/* @__PURE__ */ h(l, { children: /* @__PURE__ */ g(u, { children: [
188
+ A && /* @__PURE__ */ g(c, {
189
+ scope: "col",
190
+ textAlign: "end",
191
+ className: e("sticky top-0 z-10 w-basalt-10 min-w-basalt-10 bg-basalt-control", _(z, 0, $)),
192
+ children: [/* @__PURE__ */ h("span", {
193
+ "aria-hidden": "true",
194
+ children: "#"
195
+ }), /* @__PURE__ */ h("span", {
196
+ className: "sr-only",
197
+ children: "Row number"
198
+ })]
199
+ }),
200
+ J ? /* @__PURE__ */ h(c, {
201
+ scope: "col",
202
+ className: e("sticky top-0 z-10 w-basalt-10 min-w-basalt-10 bg-basalt-control text-center", _(z, +!!A, $)),
203
+ children: /* @__PURE__ */ h("span", {
204
+ className: "sr-only",
205
+ children: "Select"
206
+ })
207
+ }) : null,
208
+ S.map((t, n) => /* @__PURE__ */ h(c, {
209
+ textAlign: t.textAlign,
210
+ className: e("sticky top-0 z-10 bg-basalt-control", _(z, +!!A + +!!J + n, $), t.headerClassName),
211
+ style: {
212
+ width: t.width,
213
+ minWidth: t.width
214
+ },
215
+ scope: "col",
216
+ "aria-sort": t.sortable === !1 ? void 0 : B?.id === t.id ? B.dir === "asc" ? "ascending" : "descending" : "none",
217
+ children: t.sortable === !1 ? /* @__PURE__ */ h("span", {
218
+ className: e("flex items-center gap-basalt-control-gap", t.textAlign === "end" && "w-full justify-end text-end"),
219
+ children: t.headerContent ?? t.header
220
+ }) : /* @__PURE__ */ h(d, {
221
+ textAlign: t.textAlign,
222
+ sorted: B?.id === t.id ? B.dir : void 0,
223
+ "aria-label": t.header,
224
+ onClick: () => ye(B?.id === t.id && B.dir === "asc" ? {
225
+ id: t.id,
226
+ dir: "desc"
227
+ } : {
228
+ id: t.id,
229
+ dir: "asc"
230
+ }),
231
+ children: t.headerContent ?? t.header
232
+ })
233
+ }, t.id))
234
+ ] }) }), /* @__PURE__ */ h(o, { children: C ? /* @__PURE__ */ h(u, { children: /* @__PURE__ */ h(s, {
203
235
  colSpan: $,
204
- children: /* @__PURE__ */ h("div", {
236
+ className: _(z, 0, 1),
237
+ children: /* @__PURE__ */ g("div", {
205
238
  role: "status",
206
- className: "flex flex-col gap-2 py-2",
239
+ className: "flex flex-col gap-basalt-space-lg py-basalt-space-lg",
207
240
  children: [
208
- /* @__PURE__ */ m("span", {
241
+ /* @__PURE__ */ h("span", {
209
242
  className: "sr-only",
210
243
  children: "Loading"
211
244
  }),
212
- /* @__PURE__ */ m(n, {}),
213
- /* @__PURE__ */ m(n, {}),
214
- /* @__PURE__ */ m(n, {})
245
+ /* @__PURE__ */ h(r, {}),
246
+ /* @__PURE__ */ h(r, {}),
247
+ /* @__PURE__ */ h(r, {})
215
248
  ]
216
249
  })
217
- }) }) : N != null && N !== !1 ? /* @__PURE__ */ m(l, { children: /* @__PURE__ */ m(o, {
250
+ }) }) : I != null && I !== !1 ? /* @__PURE__ */ h(u, { children: /* @__PURE__ */ h(s, {
218
251
  colSpan: $,
219
- children: /* @__PURE__ */ h("div", {
252
+ className: _(z, 0, 1),
253
+ children: /* @__PURE__ */ g("div", {
220
254
  role: "alert",
221
- className: "flex flex-wrap items-center justify-between gap-3 py-6",
222
- children: [/* @__PURE__ */ m("div", { children: N }), P ? /* @__PURE__ */ m(t, {
255
+ className: "flex flex-wrap items-center justify-between gap-basalt-space-lg py-basalt-space-lg",
256
+ children: [/* @__PURE__ */ h("div", { children: I }), L ? /* @__PURE__ */ h(t, {
223
257
  variant: "outline",
224
258
  size: "sm",
225
- onClick: P,
226
- children: pe
259
+ onClick: L,
260
+ children: he
227
261
  }) : null]
228
262
  })
229
- }) }) : Ce.length === 0 ? /* @__PURE__ */ m(l, { children: /* @__PURE__ */ m(o, {
263
+ }) }) : ke.length === 0 ? /* @__PURE__ */ h(u, { children: /* @__PURE__ */ h(s, {
230
264
  colSpan: $,
231
- children: /* @__PURE__ */ m("div", {
265
+ className: _(z, 0, 1),
266
+ children: /* @__PURE__ */ h("div", {
232
267
  role: "status",
233
- children: oe
268
+ children: se
234
269
  })
235
- }) }) : Ce.map(({ row: e, key: t, selectId: n }) => {
236
- let r = q.includes(n);
237
- return /* @__PURE__ */ h(l, {
238
- variant: r ? "selected" : "default",
239
- "aria-selected": K ? r : void 0,
240
- children: [K ? /* @__PURE__ */ m(o, { children: /* @__PURE__ */ m("input", {
241
- type: "checkbox",
242
- checked: r,
243
- "aria-label": `Select ${n}`,
244
- onChange: () => we(n)
245
- }) }) : null, b.map((t) => {
246
- let n = t.accessor(e);
247
- return /* @__PURE__ */ m(o, {
248
- className: t.cellClassName,
249
- children: typeof n == "bigint" ? String(n) : n
250
- }, t.id);
251
- })]
252
- }, t);
270
+ }) }) : ke.map(({ row: t, key: r, selectId: i }, a) => {
271
+ let o = Y.includes(i);
272
+ return /* @__PURE__ */ g(u, {
273
+ variant: o ? "selected" : "default",
274
+ "aria-selected": J ? o : void 0,
275
+ children: [
276
+ A && /* @__PURE__ */ h(s, {
277
+ "data-row-number": "",
278
+ textAlign: "end",
279
+ className: e("text-basalt-sm text-basalt-muted-foreground", _(z, 0, $)),
280
+ children: (D && D > 0 ? (X - 1) * D : 0) + a + 1
281
+ }),
282
+ J ? /* @__PURE__ */ h(s, {
283
+ className: e("text-center", _(z, +!!A, $)),
284
+ children: /* @__PURE__ */ h(n, {
285
+ checked: o,
286
+ "aria-label": `Select ${i}`,
287
+ onCheckedChange: () => Ae(i),
288
+ className: "align-middle"
289
+ })
290
+ }) : null,
291
+ S.map((n, r) => {
292
+ let i = n.accessor(t);
293
+ return /* @__PURE__ */ h(s, {
294
+ textAlign: n.textAlign,
295
+ className: e(n.wrap ? "whitespace-normal break-words" : "whitespace-nowrap", _(z, +!!A + +!!J + r, $), n.cellClassName),
296
+ style: { minWidth: n.width },
297
+ children: typeof i == "bigint" ? String(i) : i
298
+ }, n.id);
299
+ })
300
+ ]
301
+ }, r);
253
302
  }) })]
254
303
  })
255
- }), E && E > 0 ? /* @__PURE__ */ m(r, {
304
+ }), D && D > 0 ? /* @__PURE__ */ h(i, {
256
305
  page: X,
257
- pageCount: Y,
258
- disabled: x,
259
- onPageChange: Z
306
+ pageCount: Oe,
307
+ disabled: C,
308
+ onPageChange: Z,
309
+ className: z === "attached" ? "px-basalt-panel-x pb-basalt-panel-y" : void 0
260
310
  }) : null]
261
311
  });
262
312
  }
263
313
  //#endregion
264
- export { b as DataTable };
314
+ export { S as DataTable };
265
315
 
266
316
  //# sourceMappingURL=data-table.js.map