@k2b/ui 0.22.0 → 0.24.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 (117) hide show
  1. package/dist/browser/content/Calendar.js +1122 -1065
  2. package/dist/browser/content/Calendar.js.map +1 -1
  3. package/dist/browser/content/CalendarDayView.js +1187 -0
  4. package/dist/browser/content/CalendarDayView.js.map +1 -0
  5. package/dist/browser/content/CalendarWeekView.js +1593 -0
  6. package/dist/browser/content/CalendarWeekView.js.map +1 -0
  7. package/dist/browser/content/ChartExplorer.js +174 -82
  8. package/dist/browser/content/ChartExplorer.js.map +1 -1
  9. package/dist/browser/content/ChartFilterControls.js +90 -33
  10. package/dist/browser/content/ChartFilterControls.js.map +1 -1
  11. package/dist/browser/content/DataTable.js +235 -197
  12. package/dist/browser/content/DataTable.js.map +1 -1
  13. package/dist/browser/content/calendar-day-scroll.js +111 -0
  14. package/dist/browser/content/calendar-day-scroll.js.map +1 -0
  15. package/dist/browser/content/calendar-days.js +408 -0
  16. package/dist/browser/content/calendar-days.js.map +1 -0
  17. package/dist/browser/content/calendar-dialogs.js +236 -0
  18. package/dist/browser/content/calendar-dialogs.js.map +1 -0
  19. package/dist/browser/content/calendar-messages.js +210 -2
  20. package/dist/browser/content/calendar-messages.js.map +1 -1
  21. package/dist/browser/content/calendar-pointer.js +15 -3
  22. package/dist/browser/content/calendar-pointer.js.map +1 -1
  23. package/dist/browser/content/calendar-shared.js +328 -0
  24. package/dist/browser/content/calendar-shared.js.map +1 -0
  25. package/dist/browser/content/calendar-time-view.js +1654 -0
  26. package/dist/browser/content/calendar-time-view.js.map +1 -0
  27. package/dist/browser/content/chart-messages.js +10 -0
  28. package/dist/browser/content/chart-messages.js.map +1 -1
  29. package/dist/browser/content/index.js.map +1 -1
  30. package/dist/browser/inputs/Combobox.js +0 -1
  31. package/dist/browser/inputs/Combobox.js.map +1 -1
  32. package/dist/browser/layout/AppWorkspace.js +125 -97
  33. package/dist/browser/layout/AppWorkspace.js.map +1 -1
  34. package/dist/browser/layout/Navigation.js +18 -3
  35. package/dist/browser/layout/Navigation.js.map +1 -1
  36. package/dist/browser/layout/PageTitle.js +18 -1
  37. package/dist/browser/layout/PageTitle.js.map +1 -1
  38. package/dist/browser/layout/SidebarSwitcher.js +505 -0
  39. package/dist/browser/layout/SidebarSwitcher.js.map +1 -0
  40. package/dist/browser/layout/app-workspace-controller.js +174 -86
  41. package/dist/browser/layout/app-workspace-controller.js.map +1 -1
  42. package/dist/browser/layout/index.js +1 -0
  43. package/dist/browser/layout/index.js.map +1 -1
  44. package/dist/browser/layout/navigation-model.js +1 -0
  45. package/dist/browser/layout/navigation-model.js.map +1 -1
  46. package/dist/browser/surfaces/StatCell.js +18 -6
  47. package/dist/browser/surfaces/StatCell.js.map +1 -1
  48. package/dist/ssr/content/Calendar.js +553 -341
  49. package/dist/ssr/content/Calendar.js.map +1 -1
  50. package/dist/ssr/content/CalendarDayView.js +800 -0
  51. package/dist/ssr/content/CalendarDayView.js.map +1 -0
  52. package/dist/ssr/content/CalendarWeekView.js +1090 -0
  53. package/dist/ssr/content/CalendarWeekView.js.map +1 -0
  54. package/dist/ssr/content/ChartExplorer.js +93 -34
  55. package/dist/ssr/content/ChartExplorer.js.map +1 -1
  56. package/dist/ssr/content/ChartFilterControls.js +49 -7
  57. package/dist/ssr/content/ChartFilterControls.js.map +1 -1
  58. package/dist/ssr/content/DataTable.js +88 -66
  59. package/dist/ssr/content/DataTable.js.map +1 -1
  60. package/dist/ssr/content/calendar-day-scroll.js +111 -0
  61. package/dist/ssr/content/calendar-day-scroll.js.map +1 -0
  62. package/dist/ssr/content/calendar-days.js +408 -0
  63. package/dist/ssr/content/calendar-days.js.map +1 -0
  64. package/dist/ssr/content/calendar-dialogs.js +159 -0
  65. package/dist/ssr/content/calendar-dialogs.js.map +1 -0
  66. package/dist/ssr/content/calendar-messages.js +210 -2
  67. package/dist/ssr/content/calendar-messages.js.map +1 -1
  68. package/dist/ssr/content/calendar-pointer.js +15 -3
  69. package/dist/ssr/content/calendar-pointer.js.map +1 -1
  70. package/dist/ssr/content/calendar-shared.js +261 -0
  71. package/dist/ssr/content/calendar-shared.js.map +1 -0
  72. package/dist/ssr/content/calendar-time-view.js +1311 -0
  73. package/dist/ssr/content/calendar-time-view.js.map +1 -0
  74. package/dist/ssr/content/chart-messages.js +10 -0
  75. package/dist/ssr/content/chart-messages.js.map +1 -1
  76. package/dist/ssr/content/index.js.map +1 -1
  77. package/dist/ssr/inputs/Combobox.js.map +1 -1
  78. package/dist/ssr/layout/AppWorkspace.js +40 -29
  79. package/dist/ssr/layout/AppWorkspace.js.map +1 -1
  80. package/dist/ssr/layout/Navigation.js +12 -2
  81. package/dist/ssr/layout/Navigation.js.map +1 -1
  82. package/dist/ssr/layout/PageTitle.js +18 -1
  83. package/dist/ssr/layout/PageTitle.js.map +1 -1
  84. package/dist/ssr/layout/SidebarSwitcher.js +271 -0
  85. package/dist/ssr/layout/SidebarSwitcher.js.map +1 -0
  86. package/dist/ssr/layout/app-workspace-controller.js +174 -86
  87. package/dist/ssr/layout/app-workspace-controller.js.map +1 -1
  88. package/dist/ssr/layout/index.js +1 -0
  89. package/dist/ssr/layout/index.js.map +1 -1
  90. package/dist/ssr/layout/navigation-model.js +1 -0
  91. package/dist/ssr/layout/navigation-model.js.map +1 -1
  92. package/dist/ssr/surfaces/StatCell.js +2 -2
  93. package/dist/ssr/surfaces/StatCell.js.map +1 -1
  94. package/dist/styles.css +1 -1
  95. package/dist/types/content/Calendar.d.ts +95 -1
  96. package/dist/types/content/CalendarDayView.d.ts +7 -0
  97. package/dist/types/content/CalendarWeekView.d.ts +7 -0
  98. package/dist/types/content/ChartExplorer.d.ts +36 -1
  99. package/dist/types/content/ChartFilterControls.d.ts +6 -1
  100. package/dist/types/content/DataTable.d.ts +14 -0
  101. package/dist/types/content/calendar-day-scroll.d.ts +47 -0
  102. package/dist/types/content/calendar-days.d.ts +192 -0
  103. package/dist/types/content/calendar-dialogs.d.ts +22 -0
  104. package/dist/types/content/calendar-messages.d.ts +99 -0
  105. package/dist/types/content/calendar-pointer.d.ts +9 -0
  106. package/dist/types/content/calendar-shared.d.ts +69 -0
  107. package/dist/types/content/calendar-time-view.d.ts +252 -0
  108. package/dist/types/content/chart-messages.d.ts +5 -0
  109. package/dist/types/content/index.d.ts +2 -2
  110. package/dist/types/layout/AppWorkspace.d.ts +27 -3
  111. package/dist/types/layout/PageTitle.d.ts +2 -1
  112. package/dist/types/layout/SidebarSwitcher.d.ts +65 -0
  113. package/dist/types/layout/app-workspace-controller.d.ts +9 -1
  114. package/dist/types/layout/index.d.ts +1 -0
  115. package/dist/types/layout/navigation-model.d.ts +4 -0
  116. package/dist/types/surfaces/StatCell.d.ts +5 -0
  117. package/package.json +3 -3
@@ -1,34 +1,36 @@
1
1
  import { template as _$template } from "solid-js/web";
2
2
  import { delegateEvents as _$delegateEvents } from "solid-js/web";
3
3
  import { setStyleProperty as _$setStyleProperty } from "solid-js/web";
4
- import { runHydrationEvents as _$runHydrationEvents } from "solid-js/web";
5
4
  import { use as _$use } from "solid-js/web";
6
5
  import { memo as _$memo } from "solid-js/web";
7
- import { className as _$className } from "solid-js/web";
8
- import { getNextMarker as _$getNextMarker } from "solid-js/web";
6
+ import { runHydrationEvents as _$runHydrationEvents } from "solid-js/web";
9
7
  import { setAttribute as _$setAttribute } from "solid-js/web";
8
+ import { className as _$className } from "solid-js/web";
10
9
  import { effect as _$effect } from "solid-js/web";
10
+ import { getNextMarker as _$getNextMarker } from "solid-js/web";
11
11
  import { createComponent as _$createComponent } from "solid-js/web";
12
12
  import { getNextElement as _$getNextElement } from "solid-js/web";
13
13
  import { insert as _$insert } from "solid-js/web";
14
14
  var _tmpl$ = /*#__PURE__*/_$template(`<span class=k2b-data-table__header-title>`),
15
15
  _tmpl$2 = /*#__PURE__*/_$template(`<span class=k2b-data-table__header-subtitle>`),
16
- _tmpl$3 = /*#__PURE__*/_$template(`<div class=k2b-data-table__header-content>`),
17
- _tmpl$4 = /*#__PURE__*/_$template(`<a class="k2b-data-table__header-content k2b-data-table__sort"><span class=k2b-data-table__header-line><!$><!/><i aria-hidden=true>`),
18
- _tmpl$5 = /*#__PURE__*/_$template(`<tr aria-hidden=true><td class=k2b-data-table__fill>`),
19
- _tmpl$6 = /*#__PURE__*/_$template(`<div class=k2b-data-table__sentinel aria-hidden=true>`),
20
- _tmpl$7 = /*#__PURE__*/_$template(`<div role=region tabindex=0><table><thead class=k2b-data-table__head><tr class=k2b-data-table__head-row></tr></thead><tbody></tbody><!$><!/></table><!$><!/>`),
21
- _tmpl$8 = /*#__PURE__*/_$template(`<th scope=col>`),
22
- _tmpl$9 = /*#__PURE__*/_$template(`<tr><td class=k2b-data-table__empty>`),
23
- _tmpl$0 = /*#__PURE__*/_$template(`<tr>`),
24
- _tmpl$1 = /*#__PURE__*/_$template(`<td><div>`),
25
- _tmpl$10 = /*#__PURE__*/_$template(`<tfoot class=k2b-data-table__foot data-sticky=true><tr class=k2b-data-table__foot-row>`),
26
- _tmpl$11 = /*#__PURE__*/_$template(`<td class=k2b-data-table__footer-cell>`),
27
- _tmpl$12 = /*#__PURE__*/_$template(`<div class=k2b-data-table__scrollbar aria-hidden=true><span>`),
28
- _tmpl$13 = /*#__PURE__*/_$template(`<div>`),
29
- _tmpl$14 = /*#__PURE__*/_$template(`<span>`),
30
- _tmpl$15 = /*#__PURE__*/_$template(`<footer>`);
31
- import { createContext, createEffect, createMemo, createSignal, createUniqueId, For, onCleanup, onMount, Show, useContext } from "solid-js";
16
+ _tmpl$3 = /*#__PURE__*/_$template(`<span class=k2b-data-table__header-line><!$><!/><i aria-hidden=true>`),
17
+ _tmpl$4 = /*#__PURE__*/_$template(`<a class="k2b-data-table__header-content k2b-data-table__sort">`),
18
+ _tmpl$5 = /*#__PURE__*/_$template(`<button type=button class="k2b-data-table__header-content k2b-data-table__sort">`),
19
+ _tmpl$6 = /*#__PURE__*/_$template(`<div class=k2b-data-table__header-content>`),
20
+ _tmpl$7 = /*#__PURE__*/_$template(`<tr aria-hidden=true><td class=k2b-data-table__fill>`),
21
+ _tmpl$8 = /*#__PURE__*/_$template(`<div class=k2b-data-table__sentinel aria-hidden=true>`),
22
+ _tmpl$9 = /*#__PURE__*/_$template(`<div role=region tabindex=0><table><thead class=k2b-data-table__head><tr class=k2b-data-table__head-row></tr></thead><tbody></tbody><!$><!/></table><!$><!/>`),
23
+ _tmpl$0 = /*#__PURE__*/_$template(`<th scope=col>`),
24
+ _tmpl$1 = /*#__PURE__*/_$template(`<tr><td class=k2b-data-table__empty>`),
25
+ _tmpl$10 = /*#__PURE__*/_$template(`<tr>`),
26
+ _tmpl$11 = /*#__PURE__*/_$template(`<td><div>`),
27
+ _tmpl$12 = /*#__PURE__*/_$template(`<tfoot class=k2b-data-table__foot data-sticky=true><tr class=k2b-data-table__foot-row>`),
28
+ _tmpl$13 = /*#__PURE__*/_$template(`<td class=k2b-data-table__footer-cell>`),
29
+ _tmpl$14 = /*#__PURE__*/_$template(`<div class=k2b-data-table__scrollbar aria-hidden=true><span>`),
30
+ _tmpl$15 = /*#__PURE__*/_$template(`<div>`),
31
+ _tmpl$16 = /*#__PURE__*/_$template(`<span>`),
32
+ _tmpl$17 = /*#__PURE__*/_$template(`<footer>`);
33
+ import { createContext, createEffect, createMemo, createSignal, createUniqueId, For, Match, onCleanup, onMount, Show, Switch, useContext } from "solid-js";
32
34
  import { Dynamic } from "solid-js/web";
33
35
  import { suppressTextSelection } from "../internal/text-selection";
34
36
  import { useLocale } from "../intl/locale";
@@ -195,61 +197,60 @@ function DataTableRoot(props) {
195
197
  if (col.value) return row[col.value];
196
198
  return undefined;
197
199
  };
198
- const columnAlignments = createMemo(() => {
199
- const alignments = new Map();
200
+ const columnPresentation = createMemo(() => {
201
+ const presentation = new Map();
200
202
  for (const col of props.columns) {
201
- if (col.align) {
202
- alignments.set(col.id, col.align);
203
- continue;
204
- }
205
- let align = "left";
206
- for (const row of props.rows) {
207
- const value = valueOf(row, col);
208
- if (value === null || value === undefined || value === "") continue;
209
- align = typeof value === "number" || typeof value === "bigint" ? "right" : "left";
210
- break;
203
+ let numeric = false;
204
+ let date = false;
205
+ if (col.align === undefined || col.nowrap === undefined) {
206
+ for (const row of props.rows) {
207
+ const value = valueOf(row, col);
208
+ if (value === null || value === undefined || value === "") continue;
209
+ numeric = typeof value === "number" || typeof value === "bigint";
210
+ date = value instanceof Date;
211
+ break;
212
+ }
211
213
  }
212
- alignments.set(col.id, align);
214
+ presentation.set(col.id, {
215
+ align: col.align ?? (numeric ? "right" : "left"),
216
+ nowrap: col.nowrap ?? (numeric || date)
217
+ });
213
218
  }
214
- return alignments;
219
+ return presentation;
215
220
  });
216
221
 
217
222
  /** `data-align` mirrors Cloud's `text-left/center/right` on the same cell. */
218
223
  const alignAttr = col => {
219
- const align = columnAlignments().get(col.id) ?? "left";
224
+ const align = columnPresentation().get(col.id)?.align ?? "left";
220
225
  return align === "left" ? undefined : align;
221
226
  };
227
+ const nowrapAttr = col => columnPresentation().get(col.id)?.nowrap ? "true" : undefined;
222
228
  const sortKeyOf = col => col.sortable === true ? col.id : typeof col.sortable === "string" ? col.sortable : null;
223
229
 
224
230
  /**
225
- * Sorting is a link, not a handler: these tables are server-rendered, so the
226
- * order belongs in the URL. Clicking the active column flips its direction.
231
+ * Sorting is a link by default: server-rendered tables keep the order in the
232
+ * URL. Client tables pass onSortChange instead. Clicking the active column
233
+ * flips its direction.
227
234
  */
228
- const sortLinkFor = col => {
229
- const key = sortKeyOf(col);
230
- if (!key || !props.sortHref) return null;
231
- const active = props.sort?.key === key;
232
- const direction = active && props.sort?.direction === "desc" ? "asc" : "desc";
233
- return {
234
- href: props.sortHref({
235
- key,
236
- direction
237
- }),
238
- active,
239
- direction
240
- };
241
- };
235
+ const nextSortFor = key => ({
236
+ key,
237
+ direction: props.sort?.key === key && props.sort?.direction === "desc" ? "asc" : "desc"
238
+ });
242
239
 
243
240
  /** Only a sortable column carries a sort state; the rest carry none at all. */
244
241
  const ariaSortFor = col => {
245
242
  const key = sortKeyOf(col);
246
- if (!key || !props.sortHref && !props.renderHeader) return undefined;
243
+ if (!key || !props.sortHref && !props.onSortChange && !props.renderHeader) return undefined;
247
244
  if (props.sort?.key !== key) return "none";
248
245
  return props.sort?.direction === "asc" ? "ascending" : "descending";
249
246
  };
250
247
  const renderHeaderDefault = col => {
251
- const sort = sortLinkFor(col);
252
- const title = [(() => {
248
+ const key = sortKeyOf(col);
249
+ // Only how a column sorts decides the element. The order lives in its attributes, so a header button keeps
250
+ // keyboard focus when a click sorts the table and the reader can press it again to reverse the order.
251
+ const mode = createMemo(() => !key ? null : props.sortHref ? "link" : props.onSortChange ? "button" : null);
252
+ const active = () => key !== null && props.sort?.key === key;
253
+ const title = () => [(() => {
253
254
  var _el$ = _$getNextElement(_tmpl$);
254
255
  _$insert(_el$, () => renderColumnPart(col.header, col));
255
256
  return _el$;
@@ -263,37 +264,68 @@ function DataTableRoot(props) {
263
264
  return _el$2;
264
265
  }
265
266
  })];
266
- if (!sort) return (() => {
267
- var _el$3 = _$getNextElement(_tmpl$3);
268
- _$insert(_el$3, title);
269
- _$effect(() => _$setAttribute(_el$3, "data-align", alignAttr(col)));
270
- return _el$3;
271
- })();
272
- return (() => {
273
- var _el$4 = _$getNextElement(_tmpl$4),
274
- _el$5 = _el$4.firstChild,
275
- _el$7 = _el$5.firstChild,
276
- [_el$8, _co$] = _$getNextMarker(_el$7.nextSibling),
277
- _el$6 = _el$8.nextSibling;
278
- _$insert(_el$5, title, _el$8, _co$);
267
+ const line = () => (() => {
268
+ var _el$3 = _$getNextElement(_tmpl$3),
269
+ _el$5 = _el$3.firstChild,
270
+ [_el$6, _co$] = _$getNextMarker(_el$5.nextSibling),
271
+ _el$4 = _el$6.nextSibling;
272
+ _$insert(_el$3, title, _el$6, _co$);
279
273
  _$effect(_p$ => {
280
- var _v$ = sort.href,
281
- _v$2 = alignAttr(col),
282
- _v$3 = `k2b-data-table__sort-icon ti ${props.sort?.direction === "asc" && sort.active ? "ti-arrow-up" : "ti-arrow-down"}`,
283
- _v$4 = sort.active ? "true" : undefined;
284
- _v$ !== _p$.e && _$setAttribute(_el$4, "href", _p$.e = _v$);
285
- _v$2 !== _p$.t && _$setAttribute(_el$4, "data-align", _p$.t = _v$2);
286
- _v$3 !== _p$.a && _$className(_el$6, _p$.a = _v$3);
287
- _v$4 !== _p$.o && _$setAttribute(_el$6, "data-active", _p$.o = _v$4);
274
+ var _v$ = `k2b-data-table__sort-icon ti ${active() && props.sort?.direction === "asc" ? "ti-arrow-up" : "ti-arrow-down"}`,
275
+ _v$2 = active() ? "true" : undefined;
276
+ _v$ !== _p$.e && _$className(_el$4, _p$.e = _v$);
277
+ _v$2 !== _p$.t && _$setAttribute(_el$4, "data-active", _p$.t = _v$2);
288
278
  return _p$;
289
279
  }, {
290
280
  e: undefined,
291
- t: undefined,
292
- a: undefined,
293
- o: undefined
281
+ t: undefined
294
282
  });
295
- return _el$4;
283
+ return _el$3;
296
284
  })();
285
+ return _$createComponent(Switch, {
286
+ get fallback() {
287
+ return (() => {
288
+ var _el$9 = _$getNextElement(_tmpl$6);
289
+ _$insert(_el$9, title);
290
+ _$effect(() => _$setAttribute(_el$9, "data-align", alignAttr(col)));
291
+ return _el$9;
292
+ })();
293
+ },
294
+ get children() {
295
+ return [_$createComponent(Match, {
296
+ get when() {
297
+ return mode() === "link";
298
+ },
299
+ get children() {
300
+ var _el$7 = _$getNextElement(_tmpl$4);
301
+ _$insert(_el$7, line);
302
+ _$effect(_p$ => {
303
+ var _v$3 = key ? props.sortHref?.(nextSortFor(key)) : undefined,
304
+ _v$4 = alignAttr(col);
305
+ _v$3 !== _p$.e && _$setAttribute(_el$7, "href", _p$.e = _v$3);
306
+ _v$4 !== _p$.t && _$setAttribute(_el$7, "data-align", _p$.t = _v$4);
307
+ return _p$;
308
+ }, {
309
+ e: undefined,
310
+ t: undefined
311
+ });
312
+ return _el$7;
313
+ }
314
+ }), _$createComponent(Match, {
315
+ get when() {
316
+ return mode() === "button";
317
+ },
318
+ get children() {
319
+ var _el$8 = _$getNextElement(_tmpl$5);
320
+ _el$8.$$click = () => key && props.onSortChange?.(nextSortFor(key));
321
+ _$insert(_el$8, line);
322
+ _$effect(() => _$setAttribute(_el$8, "data-align", alignAttr(col)));
323
+ _$runHydrationEvents();
324
+ return _el$8;
325
+ }
326
+ })];
327
+ }
328
+ });
297
329
  };
298
330
  const renderValueDefault = value => defaultRender(value, locale(), messages());
299
331
  const renderCellDefault = (row, col) => renderValueDefault(valueOf(row, col));
@@ -397,28 +429,28 @@ function DataTableRoot(props) {
397
429
  onMouseLeave: () => setHoveredColumn(null),
398
430
  get children() {
399
431
  return [(() => {
400
- var _el$9 = _$getNextElement(_tmpl$7),
401
- _el$0 = _el$9.firstChild,
432
+ var _el$0 = _$getNextElement(_tmpl$9),
402
433
  _el$1 = _el$0.firstChild,
403
434
  _el$10 = _el$1.firstChild,
404
- _el$11 = _el$1.nextSibling,
405
- _el$14 = _el$11.nextSibling,
406
- [_el$15, _co$2] = _$getNextMarker(_el$14.nextSibling),
407
- _el$17 = _el$0.nextSibling,
408
- [_el$18, _co$3] = _$getNextMarker(_el$17.nextSibling);
409
- _el$9.addEventListener("scroll", onScroll);
435
+ _el$11 = _el$10.firstChild,
436
+ _el$12 = _el$10.nextSibling,
437
+ _el$15 = _el$12.nextSibling,
438
+ [_el$16, _co$2] = _$getNextMarker(_el$15.nextSibling),
439
+ _el$18 = _el$1.nextSibling,
440
+ [_el$19, _co$3] = _$getNextMarker(_el$18.nextSibling);
441
+ _el$0.addEventListener("scroll", onScroll);
410
442
  var _ref$ = scrollRef;
411
- typeof _ref$ === "function" ? _$use(_ref$, _el$9) : scrollRef = _el$9;
443
+ typeof _ref$ === "function" ? _$use(_ref$, _el$0) : scrollRef = _el$0;
412
444
  var _ref$2 = tableRef;
413
- typeof _ref$2 === "function" ? _$use(_ref$2, _el$0) : tableRef = _el$0;
414
- _$insert(_el$10, _$createComponent(For, {
445
+ typeof _ref$2 === "function" ? _$use(_ref$2, _el$1) : tableRef = _el$1;
446
+ _$insert(_el$11, _$createComponent(For, {
415
447
  get each() {
416
448
  return props.columns;
417
449
  },
418
450
  children: (col, index) => (() => {
419
- var _el$19 = _$getNextElement(_tmpl$8);
420
- _el$19.addEventListener("mouseenter", () => setHoveredColumnIfEnabled(index()));
421
- _$insert(_el$19, (() => {
451
+ var _el$20 = _$getNextElement(_tmpl$0);
452
+ _el$20.addEventListener("mouseenter", () => setHoveredColumnIfEnabled(index()));
453
+ _$insert(_el$20, (() => {
422
454
  var _c$ = _$memo(() => !!props.renderHeader);
423
455
  return () => _c$() ? props.renderHeader({
424
456
  col,
@@ -430,10 +462,10 @@ function DataTableRoot(props) {
430
462
  _v$14 = alignAttr(col),
431
463
  _v$15 = columnHighlighted(index()),
432
464
  _v$16 = ariaSortFor(col);
433
- _v$13 !== _p$.e && _$className(_el$19, _p$.e = _v$13);
434
- _v$14 !== _p$.t && _$setAttribute(_el$19, "data-align", _p$.t = _v$14);
435
- _v$15 !== _p$.a && _$setAttribute(_el$19, "data-highlighted", _p$.a = _v$15);
436
- _v$16 !== _p$.o && _$setAttribute(_el$19, "aria-sort", _p$.o = _v$16);
465
+ _v$13 !== _p$.e && _$className(_el$20, _p$.e = _v$13);
466
+ _v$14 !== _p$.t && _$setAttribute(_el$20, "data-align", _p$.t = _v$14);
467
+ _v$15 !== _p$.a && _$setAttribute(_el$20, "data-highlighted", _p$.a = _v$15);
468
+ _v$16 !== _p$.o && _$setAttribute(_el$20, "aria-sort", _p$.o = _v$16);
437
469
  return _p$;
438
470
  }, {
439
471
  e: undefined,
@@ -441,24 +473,24 @@ function DataTableRoot(props) {
441
473
  a: undefined,
442
474
  o: undefined
443
475
  });
444
- return _el$19;
476
+ return _el$20;
445
477
  })()
446
478
  }));
447
- _$insert(_el$11, _$createComponent(Show, {
479
+ _$insert(_el$12, _$createComponent(Show, {
448
480
  get when() {
449
481
  return props.rows.length > 0;
450
482
  },
451
483
  get fallback() {
452
484
  return (() => {
453
- var _el$20 = _$getNextElement(_tmpl$9),
454
- _el$21 = _el$20.firstChild;
455
- _$insert(_el$21, _$createComponent(Placeholder, {
485
+ var _el$21 = _$getNextElement(_tmpl$1),
486
+ _el$22 = _el$21.firstChild;
487
+ _$insert(_el$22, _$createComponent(Placeholder, {
456
488
  get description() {
457
489
  return _$memo(() => props.empty ?? dataTableMessages().noRecords);
458
490
  }
459
491
  }));
460
- _$effect(() => _$setAttribute(_el$21, "colspan", props.columns.length));
461
- return _el$20;
492
+ _$effect(() => _$setAttribute(_el$22, "colspan", props.columns.length));
493
+ return _el$21;
462
494
  })();
463
495
  },
464
496
  get children() {
@@ -470,30 +502,30 @@ function DataTableRoot(props) {
470
502
  const id = () => rowId(row);
471
503
  const isSelected = () => props.selection ? props.selection.selected().has(id() ?? "") : props.selectedRowId && id() === props.selectedRowId;
472
504
  return (() => {
473
- var _el$22 = _$getNextElement(_tmpl$0);
474
- _el$22.$$keydown = e => onRowKeyDown(e, row);
475
- _el$22.$$contextmenu = () => props.onRowContextMenu?.(row);
476
- _el$22.$$dblclick = event => onRowDoubleClick(event, row);
477
- _el$22.$$click = event => onRowClick(event, row);
478
- _el$22.addEventListener("focus", () => {
505
+ var _el$23 = _$getNextElement(_tmpl$10);
506
+ _el$23.$$keydown = e => onRowKeyDown(e, row);
507
+ _el$23.$$contextmenu = () => props.onRowContextMenu?.(row);
508
+ _el$23.$$dblclick = event => onRowDoubleClick(event, row);
509
+ _el$23.$$click = event => onRowClick(event, row);
510
+ _el$23.addEventListener("focus", () => {
479
511
  const key = id();
480
512
  if (key !== undefined) props.selection?.markFocused(key);
481
513
  });
482
514
  _$use(element => {
483
515
  const key = id();
484
516
  if (key !== undefined) props.selection?.register(key, element);
485
- }, _el$22);
486
- _$insert(_el$22, _$createComponent(For, {
517
+ }, _el$23);
518
+ _$insert(_el$23, _$createComponent(For, {
487
519
  get each() {
488
520
  return props.columns;
489
521
  },
490
522
  children: (col, index) => {
491
523
  const value = () => valueOf(row, col);
492
524
  return (() => {
493
- var _el$23 = _$getNextElement(_tmpl$1),
494
- _el$24 = _el$23.firstChild;
495
- _el$23.addEventListener("mouseenter", () => setHoveredColumnIfEnabled(index()));
496
- _$insert(_el$24, (() => {
525
+ var _el$24 = _$getNextElement(_tmpl$11),
526
+ _el$25 = _el$24.firstChild;
527
+ _el$24.addEventListener("mouseenter", () => setHoveredColumnIfEnabled(index()));
528
+ _$insert(_el$25, (() => {
497
529
  var _c$2 = _$memo(() => !!props.renderCell);
498
530
  return () => _c$2() ? props.renderCell({
499
531
  row,
@@ -507,24 +539,27 @@ function DataTableRoot(props) {
507
539
  })());
508
540
  _$effect(_p$ => {
509
541
  var _v$23 = `${col.cellClass ?? ""} ${col.class ?? ""}`,
510
- _v$24 = alignAttr(col),
511
- _v$25 = props.verticalAlign && props.verticalAlign !== "middle" ? props.verticalAlign : undefined,
512
- _v$26 = columnHighlighted(index()),
513
- _v$27 = cellContentClass();
514
- _v$23 !== _p$.e && _$className(_el$23, _p$.e = _v$23);
515
- _v$24 !== _p$.t && _$setAttribute(_el$23, "data-align", _p$.t = _v$24);
516
- _v$25 !== _p$.a && _$setAttribute(_el$23, "data-valign", _p$.a = _v$25);
517
- _v$26 !== _p$.o && _$setAttribute(_el$23, "data-highlighted", _p$.o = _v$26);
518
- _v$27 !== _p$.i && _$className(_el$24, _p$.i = _v$27);
542
+ _v$24 = nowrapAttr(col),
543
+ _v$25 = alignAttr(col),
544
+ _v$26 = props.verticalAlign && props.verticalAlign !== "middle" ? props.verticalAlign : undefined,
545
+ _v$27 = columnHighlighted(index()),
546
+ _v$28 = cellContentClass();
547
+ _v$23 !== _p$.e && _$className(_el$24, _p$.e = _v$23);
548
+ _v$24 !== _p$.t && _$setAttribute(_el$24, "data-nowrap", _p$.t = _v$24);
549
+ _v$25 !== _p$.a && _$setAttribute(_el$24, "data-align", _p$.a = _v$25);
550
+ _v$26 !== _p$.o && _$setAttribute(_el$24, "data-valign", _p$.o = _v$26);
551
+ _v$27 !== _p$.i && _$setAttribute(_el$24, "data-highlighted", _p$.i = _v$27);
552
+ _v$28 !== _p$.n && _$className(_el$25, _p$.n = _v$28);
519
553
  return _p$;
520
554
  }, {
521
555
  e: undefined,
522
556
  t: undefined,
523
557
  a: undefined,
524
558
  o: undefined,
525
- i: undefined
559
+ i: undefined,
560
+ n: undefined
526
561
  });
527
- return _el$23;
562
+ return _el$24;
528
563
  })();
529
564
  }
530
565
  }));
@@ -535,12 +570,12 @@ function DataTableRoot(props) {
535
570
  _v$20 = isSelected() ? "true" : undefined,
536
571
  _v$21 = props.selection ? !!isSelected() : undefined,
537
572
  _v$22 = props.selection ? props.selection.focused() === id() ? 0 : -1 : isInteractive() ? 0 : undefined;
538
- _v$17 !== _p$.e && _$className(_el$22, _p$.e = _v$17);
539
- _v$18 !== _p$.t && _$setAttribute(_el$22, "data-hover", _p$.t = _v$18);
540
- _v$19 !== _p$.a && _$setAttribute(_el$22, "data-clickable", _p$.a = _v$19);
541
- _v$20 !== _p$.o && _$setAttribute(_el$22, "data-selected", _p$.o = _v$20);
542
- _v$21 !== _p$.i && _$setAttribute(_el$22, "aria-selected", _p$.i = _v$21);
543
- _v$22 !== _p$.n && _$setAttribute(_el$22, "tabindex", _p$.n = _v$22);
573
+ _v$17 !== _p$.e && _$className(_el$23, _p$.e = _v$17);
574
+ _v$18 !== _p$.t && _$setAttribute(_el$23, "data-hover", _p$.t = _v$18);
575
+ _v$19 !== _p$.a && _$setAttribute(_el$23, "data-clickable", _p$.a = _v$19);
576
+ _v$20 !== _p$.o && _$setAttribute(_el$23, "data-selected", _p$.o = _v$20);
577
+ _v$21 !== _p$.i && _$setAttribute(_el$23, "aria-selected", _p$.i = _v$21);
578
+ _v$22 !== _p$.n && _$setAttribute(_el$23, "tabindex", _p$.n = _v$22);
544
579
  return _p$;
545
580
  }, {
546
581
  e: undefined,
@@ -551,7 +586,7 @@ function DataTableRoot(props) {
551
586
  n: undefined
552
587
  });
553
588
  _$runHydrationEvents();
554
- return _el$22;
589
+ return _el$23;
555
590
  })();
556
591
  }
557
592
  }), _$createComponent(Show, {
@@ -559,31 +594,31 @@ function DataTableRoot(props) {
559
594
  return props.fillHeight;
560
595
  },
561
596
  get children() {
562
- var _el$12 = _$getNextElement(_tmpl$5),
563
- _el$13 = _el$12.firstChild;
564
- _$effect(() => _$setAttribute(_el$13, "colspan", props.columns.length));
565
- return _el$12;
597
+ var _el$13 = _$getNextElement(_tmpl$7),
598
+ _el$14 = _el$13.firstChild;
599
+ _$effect(() => _$setAttribute(_el$14, "colspan", props.columns.length));
600
+ return _el$13;
566
601
  }
567
602
  })];
568
603
  }
569
604
  }));
570
- _$insert(_el$0, _$createComponent(Show, {
605
+ _$insert(_el$1, _$createComponent(Show, {
571
606
  get when() {
572
607
  return props.footer;
573
608
  },
574
609
  children: footer => (() => {
575
- var _el$25 = _$getNextElement(_tmpl$10),
576
- _el$26 = _el$25.firstChild;
577
- _$insert(_el$26, _$createComponent(For, {
610
+ var _el$26 = _$getNextElement(_tmpl$12),
611
+ _el$27 = _el$26.firstChild;
612
+ _$insert(_el$27, _$createComponent(For, {
578
613
  get each() {
579
614
  return props.columns;
580
615
  },
581
616
  children: (col, index) => {
582
617
  const value = () => footer().values?.[col.id];
583
618
  return (() => {
584
- var _el$27 = _$getNextElement(_tmpl$11);
585
- _el$27.addEventListener("mouseenter", () => setHoveredColumnIfEnabled(index()));
586
- _$insert(_el$27, (() => {
619
+ var _el$28 = _$getNextElement(_tmpl$13);
620
+ _el$28.addEventListener("mouseenter", () => setHoveredColumnIfEnabled(index()));
621
+ _$insert(_el$28, (() => {
587
622
  var _c$3 = _$memo(() => !!footer().renderCell);
588
623
  return () => _c$3() ? footer().renderCell({
589
624
  col,
@@ -592,33 +627,36 @@ function DataTableRoot(props) {
592
627
  }) : renderValueDefault(value());
593
628
  })());
594
629
  _$effect(_p$ => {
595
- var _v$28 = alignAttr(col),
596
- _v$29 = columnHighlighted(index());
597
- _v$28 !== _p$.e && _$setAttribute(_el$27, "data-align", _p$.e = _v$28);
598
- _v$29 !== _p$.t && _$setAttribute(_el$27, "data-highlighted", _p$.t = _v$29);
630
+ var _v$29 = nowrapAttr(col),
631
+ _v$30 = alignAttr(col),
632
+ _v$31 = columnHighlighted(index());
633
+ _v$29 !== _p$.e && _$setAttribute(_el$28, "data-nowrap", _p$.e = _v$29);
634
+ _v$30 !== _p$.t && _$setAttribute(_el$28, "data-align", _p$.t = _v$30);
635
+ _v$31 !== _p$.a && _$setAttribute(_el$28, "data-highlighted", _p$.a = _v$31);
599
636
  return _p$;
600
637
  }, {
601
638
  e: undefined,
602
- t: undefined
639
+ t: undefined,
640
+ a: undefined
603
641
  });
604
- return _el$27;
642
+ return _el$28;
605
643
  })();
606
644
  }
607
645
  }));
608
- return _el$25;
646
+ return _el$26;
609
647
  })()
610
- }), _el$15, _co$2);
611
- _$insert(_el$9, _$createComponent(Show, {
648
+ }), _el$16, _co$2);
649
+ _$insert(_el$0, _$createComponent(Show, {
612
650
  get when() {
613
651
  return shouldRenderLoadMoreSentinel();
614
652
  },
615
653
  get children() {
616
- var _el$16 = _$getNextElement(_tmpl$6);
654
+ var _el$17 = _$getNextElement(_tmpl$8);
617
655
  var _ref$3 = loadMoreRef;
618
- typeof _ref$3 === "function" ? _$use(_ref$3, _el$16) : loadMoreRef = _el$16;
619
- return _el$16;
656
+ typeof _ref$3 === "function" ? _$use(_ref$3, _el$17) : loadMoreRef = _el$17;
657
+ return _el$17;
620
658
  }
621
- }), _el$18, _co$3);
659
+ }), _el$19, _co$3);
622
660
  _$effect(_p$ => {
623
661
  var _v$5 = labelledBy() ? undefined : props.ariaLabel ?? dataTableMessages().dataTable,
624
662
  _v$6 = labelledBy(),
@@ -630,16 +668,16 @@ function DataTableRoot(props) {
630
668
  _v$10 = tableClass(),
631
669
  _v$11 = props.fillHeight ? "true" : undefined,
632
670
  _v$12 = props.stickyHeader === false ? undefined : "true";
633
- _v$5 !== _p$.e && _$setAttribute(_el$9, "aria-label", _p$.e = _v$5);
634
- _v$6 !== _p$.t && _$setAttribute(_el$9, "aria-labelledby", _p$.t = _v$6);
635
- _v$7 !== _p$.a && _$className(_el$9, _p$.a = _v$7);
636
- _v$8 !== _p$.o && _$setAttribute(_el$9, "data-density", _p$.o = _v$8);
637
- _v$9 !== _p$.i && _$setAttribute(_el$9, "data-has-footer", _p$.i = _v$9);
638
- _v$0 !== _p$.n && _$setAttribute(_el$9, "data-surface", _p$.n = _v$0);
639
- _v$1 !== _p$.s && _$setAttribute(_el$9, "data-scroll-preserve", _p$.s = _v$1);
640
- _v$10 !== _p$.h && _$className(_el$0, _p$.h = _v$10);
641
- _v$11 !== _p$.r && _$setAttribute(_el$0, "data-fill", _p$.r = _v$11);
642
- _v$12 !== _p$.d && _$setAttribute(_el$1, "data-sticky", _p$.d = _v$12);
671
+ _v$5 !== _p$.e && _$setAttribute(_el$0, "aria-label", _p$.e = _v$5);
672
+ _v$6 !== _p$.t && _$setAttribute(_el$0, "aria-labelledby", _p$.t = _v$6);
673
+ _v$7 !== _p$.a && _$className(_el$0, _p$.a = _v$7);
674
+ _v$8 !== _p$.o && _$setAttribute(_el$0, "data-density", _p$.o = _v$8);
675
+ _v$9 !== _p$.i && _$setAttribute(_el$0, "data-has-footer", _p$.i = _v$9);
676
+ _v$0 !== _p$.n && _$setAttribute(_el$0, "data-surface", _p$.n = _v$0);
677
+ _v$1 !== _p$.s && _$setAttribute(_el$0, "data-scroll-preserve", _p$.s = _v$1);
678
+ _v$10 !== _p$.h && _$className(_el$1, _p$.h = _v$10);
679
+ _v$11 !== _p$.r && _$setAttribute(_el$1, "data-fill", _p$.r = _v$11);
680
+ _v$12 !== _p$.d && _$setAttribute(_el$10, "data-sticky", _p$.d = _v$12);
643
681
  return _p$;
644
682
  }, {
645
683
  e: undefined,
@@ -653,26 +691,26 @@ function DataTableRoot(props) {
653
691
  r: undefined,
654
692
  d: undefined
655
693
  });
656
- return _el$9;
694
+ return _el$0;
657
695
  })(), _$createComponent(For, {
658
696
  each: ["y", "x"],
659
697
  children: axis => (() => {
660
- var _el$28 = _$getNextElement(_tmpl$12),
661
- _el$29 = _el$28.firstChild;
662
- _el$28.addEventListener("pointercancel", event => event.currentTarget.releasePointerCapture(event.pointerId));
663
- _el$28.$$pointerup = event => event.currentTarget.releasePointerCapture(event.pointerId);
664
- _el$28.$$pointermove = event => {
698
+ var _el$29 = _$getNextElement(_tmpl$14),
699
+ _el$30 = _el$29.firstChild;
700
+ _el$29.addEventListener("pointercancel", event => event.currentTarget.releasePointerCapture(event.pointerId));
701
+ _el$29.$$pointerup = event => event.currentTarget.releasePointerCapture(event.pointerId);
702
+ _el$29.$$pointermove = event => {
665
703
  if (event.currentTarget.hasPointerCapture(event.pointerId)) scrollFromPointer(event, axis);
666
704
  };
667
- _el$28.$$pointerdown = event => startScrollbarDrag(event, axis);
668
- _$setAttribute(_el$28, "data-axis", axis);
705
+ _el$29.$$pointerdown = event => startScrollbarDrag(event, axis);
706
+ _$setAttribute(_el$29, "data-axis", axis);
669
707
  _$effect(_p$ => {
670
- var _v$30 = scrollbars()[axis].overflow ? "true" : undefined,
671
- _v$31 = `${scrollbars()[axis].offset}px`,
672
- _v$32 = `${scrollbars()[axis].size}px`;
673
- _v$30 !== _p$.e && _$setAttribute(_el$28, "data-overflow", _p$.e = _v$30);
674
- _v$31 !== _p$.t && _$setStyleProperty(_el$29, "--k2b-data-table-scroll-offset", _p$.t = _v$31);
675
- _v$32 !== _p$.a && _$setStyleProperty(_el$29, "--k2b-data-table-scroll-size", _p$.a = _v$32);
708
+ var _v$32 = scrollbars()[axis].overflow ? "true" : undefined,
709
+ _v$33 = `${scrollbars()[axis].offset}px`,
710
+ _v$34 = `${scrollbars()[axis].size}px`;
711
+ _v$32 !== _p$.e && _$setAttribute(_el$29, "data-overflow", _p$.e = _v$32);
712
+ _v$33 !== _p$.t && _$setStyleProperty(_el$30, "--k2b-data-table-scroll-offset", _p$.t = _v$33);
713
+ _v$34 !== _p$.a && _$setStyleProperty(_el$30, "--k2b-data-table-scroll-size", _p$.a = _v$34);
676
714
  return _p$;
677
715
  }, {
678
716
  e: undefined,
@@ -680,7 +718,7 @@ function DataTableRoot(props) {
680
718
  a: undefined
681
719
  });
682
720
  _$runHydrationEvents();
683
- return _el$28;
721
+ return _el$29;
684
722
  })()
685
723
  })];
686
724
  }
@@ -715,14 +753,14 @@ const DataTableHeader = props => {
715
753
  const panel = useContext(DataTablePanelContext);
716
754
  panel?.registerHeading();
717
755
  return (() => {
718
- var _el$30 = _$getNextElement(_tmpl$13);
719
- _$insert(_el$30, _$createComponent(PanelHeader, {
756
+ var _el$31 = _$getNextElement(_tmpl$15);
757
+ _$insert(_el$31, _$createComponent(PanelHeader, {
720
758
  get title() {
721
759
  return (() => {
722
- var _el$31 = _$getNextElement(_tmpl$14);
723
- _$insert(_el$31, () => props.title);
724
- _$effect(() => _$setAttribute(_el$31, "id", panel?.headingId));
725
- return _el$31;
760
+ var _el$32 = _$getNextElement(_tmpl$16);
761
+ _$insert(_el$32, () => props.title);
762
+ _$effect(() => _$setAttribute(_el$32, "id", panel?.headingId));
763
+ return _el$32;
726
764
  })();
727
765
  },
728
766
  get subtitle() {
@@ -738,22 +776,22 @@ const DataTableHeader = props => {
738
776
  return props.size;
739
777
  }
740
778
  }));
741
- _$effect(() => _$className(_el$30, `k2b-data-panel__header ${props.class ?? ""}`));
742
- return _el$30;
779
+ _$effect(() => _$className(_el$31, `k2b-data-panel__header ${props.class ?? ""}`));
780
+ return _el$31;
743
781
  })();
744
782
  };
745
783
  const DataTableControls = props => (() => {
746
- var _el$32 = _$getNextElement(_tmpl$13);
747
- _$insert(_el$32, () => props.children);
748
- _$effect(() => _$className(_el$32, `k2b-data-panel__controls ${props.class ?? ""}`));
749
- return _el$32;
750
- })();
751
- const DataTablePanelFooter = props => (() => {
752
784
  var _el$33 = _$getNextElement(_tmpl$15);
753
785
  _$insert(_el$33, () => props.children);
754
- _$effect(() => _$className(_el$33, `k2b-data-panel__footer ${props.class ?? ""}`));
786
+ _$effect(() => _$className(_el$33, `k2b-data-panel__controls ${props.class ?? ""}`));
755
787
  return _el$33;
756
788
  })();
789
+ const DataTablePanelFooter = props => (() => {
790
+ var _el$34 = _$getNextElement(_tmpl$17);
791
+ _$insert(_el$34, () => props.children);
792
+ _$effect(() => _$className(_el$34, `k2b-data-panel__footer ${props.class ?? ""}`));
793
+ return _el$34;
794
+ })();
757
795
  const DataTable = DataTableRoot;
758
796
  DataTable.Panel = DataTablePanel;
759
797
  DataTable.Header = DataTableHeader;