@rotki/ui-library 2.25.1 → 2.26.1

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 (72) hide show
  1. package/dist/components/date-time-picker/RuiDateTimePicker.js.map +1 -1
  2. package/dist/components/date-time-picker/RuiDateTimePicker.vue_vue_type_script_setup_true_lang.js +1 -0
  3. package/dist/components/date-time-picker/RuiDateTimePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
  4. package/dist/components/date-time-picker/date-time-picker-styles.d.ts +6 -0
  5. package/dist/components/forms/auto-complete/RuiAutoComplete.js.map +1 -1
  6. package/dist/components/forms/auto-complete/RuiAutoComplete.vue_vue_type_script_setup_true_lang.js +1 -0
  7. package/dist/components/forms/auto-complete/RuiAutoComplete.vue_vue_type_script_setup_true_lang.js.map +1 -1
  8. package/dist/components/forms/auto-complete/auto-complete-styles.d.ts +6 -0
  9. package/dist/components/forms/category-picker/category-picker-styles.d.ts +6 -0
  10. package/dist/components/forms/select/RuiMenuSelect.js.map +1 -1
  11. package/dist/components/forms/select/RuiMenuSelect.vue_vue_type_script_setup_true_lang.js +1 -0
  12. package/dist/components/forms/select/RuiMenuSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
  13. package/dist/components/forms/select/menu-select-styles.d.ts +6 -0
  14. package/dist/components/forms/text-input-styles.d.ts +3 -0
  15. package/dist/components/forms/text-input-styles.js +3 -1
  16. package/dist/components/forms/text-input-styles.js.map +1 -1
  17. package/dist/components/index.js +1 -1
  18. package/dist/components/overlays/menu/RuiMenu.js.map +1 -1
  19. package/dist/components/overlays/menu/RuiMenu.vue_vue_type_script_setup_true_lang.js +8 -2
  20. package/dist/components/overlays/menu/RuiMenu.vue_vue_type_script_setup_true_lang.js.map +1 -1
  21. package/dist/components/tables/RuiDataTable.js.map +1 -1
  22. package/dist/components/tables/RuiDataTable.vue.d.ts +12 -1
  23. package/dist/components/tables/RuiDataTable.vue_vue_type_script_setup_true_lang.js +71 -17
  24. package/dist/components/tables/RuiDataTable.vue_vue_type_script_setup_true_lang.js.map +1 -1
  25. package/dist/components/tables/RuiTable.vue_vue_type_script_setup_true_lang.js +1 -1
  26. package/dist/components/tables/RuiTableHead.js.map +1 -1
  27. package/dist/components/tables/RuiTableHead.vue_vue_type_script_setup_true_lang.js +38 -13
  28. package/dist/components/tables/RuiTableHead.vue_vue_type_script_setup_true_lang.js.map +1 -1
  29. package/dist/components/tables/RuiTablePagination.js.map +1 -1
  30. package/dist/components/tables/RuiTablePagination.vue.d.ts +3 -3
  31. package/dist/components/tables/RuiTablePagination.vue_vue_type_script_setup_true_lang.js +65 -14
  32. package/dist/components/tables/RuiTablePagination.vue_vue_type_script_setup_true_lang.js.map +1 -1
  33. package/dist/components/tables/data-table/RuiDataTableBody.js.map +1 -1
  34. package/dist/components/tables/data-table/RuiDataTableBody.vue.d.ts +7 -1
  35. package/dist/components/tables/data-table/RuiDataTableBody.vue_vue_type_script_setup_true_lang.js +45 -9
  36. package/dist/components/tables/data-table/RuiDataTableBody.vue_vue_type_script_setup_true_lang.js.map +1 -1
  37. package/dist/components/tables/data-table/RuiDataTableCell.js.map +1 -1
  38. package/dist/components/tables/data-table/RuiDataTableCell.vue_vue_type_script_setup_true_lang.js +13 -2
  39. package/dist/components/tables/data-table/RuiDataTableCell.vue_vue_type_script_setup_true_lang.js.map +1 -1
  40. package/dist/components/tables/data-table/RuiDataTableErrorRow.js +7 -0
  41. package/dist/components/tables/data-table/RuiDataTableErrorRow.js.map +1 -0
  42. package/dist/components/tables/data-table/RuiDataTableErrorRow.vue.d.ts +21 -0
  43. package/dist/components/tables/data-table/RuiDataTableErrorRow.vue_vue_type_script_setup_true_lang.js +40 -0
  44. package/dist/components/tables/data-table/RuiDataTableErrorRow.vue_vue_type_script_setup_true_lang.js.map +1 -0
  45. package/dist/components/tables/data-table/RuiDataTableExpandedRow.js.map +1 -1
  46. package/dist/components/tables/data-table/RuiDataTableExpandedRow.vue_vue_type_script_setup_true_lang.js +12 -1
  47. package/dist/components/tables/data-table/RuiDataTableExpandedRow.vue_vue_type_script_setup_true_lang.js.map +1 -1
  48. package/dist/components/tables/data-table/RuiDataTableGroupRow.js.map +1 -1
  49. package/dist/components/tables/data-table/RuiDataTableGroupRow.vue_vue_type_script_setup_true_lang.js +52 -20
  50. package/dist/components/tables/data-table/RuiDataTableGroupRow.vue_vue_type_script_setup_true_lang.js.map +1 -1
  51. package/dist/components/tables/data-table/RuiDataTableRow.js.map +1 -1
  52. package/dist/components/tables/data-table/RuiDataTableRow.vue_vue_type_script_setup_true_lang.js +29 -14
  53. package/dist/components/tables/data-table/RuiDataTableRow.vue_vue_type_script_setup_true_lang.js.map +1 -1
  54. package/dist/components/tables/data-table/context.d.ts +10 -0
  55. package/dist/components/tables/data-table/context.js +2 -0
  56. package/dist/components/tables/data-table/context.js.map +1 -1
  57. package/dist/components/tables/data-table-styles.d.ts +15 -9
  58. package/dist/components/tables/data-table-styles.js +29 -6
  59. package/dist/components/tables/data-table-styles.js.map +1 -1
  60. package/dist/components/tables/table-props.d.ts +1 -2
  61. package/dist/components/tables/table-props.js +2 -10
  62. package/dist/components/tables/table-props.js.map +1 -1
  63. package/dist/components/tables/use-pagination-navigation.js +1 -1
  64. package/dist/components/tables/use-pagination-navigation.js.map +1 -1
  65. package/dist/composables/sticky-header.d.ts +0 -1
  66. package/dist/composables/sticky-header.js +56 -8
  67. package/dist/composables/sticky-header.js.map +1 -1
  68. package/dist/index.js +1 -1
  69. package/dist/library-icons.json +1 -1
  70. package/dist/style.css +115 -38
  71. package/dist/web-types.json +139 -3
  72. package/package.json +1 -1
@@ -29,14 +29,51 @@ function positionHeadAtRest(head) {
29
29
  head.style.left = `${BORDER_PRECISION}px`;
30
30
  head.style.top = "0";
31
31
  }
32
- function positionHeadStuck(head, { clonedRect, lastRowHeight, tableRect, top }) {
33
- head.style.left = `${clonedRect.left + BORDER_PRECISION}px`;
34
- const isNearBottom = tableRect.bottom <= lastRowHeight + clonedRect.height + top;
35
- head.style.top = isNearBottom ? `${tableRect.bottom - lastRowHeight - clonedRect.height}px` : `${top}px`;
32
+ function positionHeadStuck(head, { clonedRect, lastRowHeight, origin, tableRect, top }) {
33
+ head.style.left = `${clonedRect.left - origin.left + BORDER_PRECISION}px`;
34
+ const viewportTop = tableRect.bottom <= lastRowHeight + clonedRect.height + top ? tableRect.bottom - lastRowHeight - clonedRect.height : top;
35
+ head.style.top = `${viewportTop - origin.top}px`;
36
36
  }
37
37
  function isInStickyRange(tableRect, top) {
38
38
  return tableRect.top <= top && tableRect.bottom > top;
39
39
  }
40
+ /**
41
+ * The nearest ancestor that currently scrolls vertically, e.g. a dialog or drawer body, or
42
+ * `undefined` when only the page does. One that could scroll but has nothing to (a card body on a
43
+ * page) is skipped, as is the table's own scroller, which only scrolls sideways.
44
+ */
45
+ function findScrollParent(element) {
46
+ let parent = element.parentElement;
47
+ while (parent && parent !== document.body && parent !== document.documentElement) {
48
+ const { overflowY } = getComputedStyle(parent);
49
+ if ((overflowY === "auto" || overflowY === "scroll") && parent.scrollHeight > parent.clientHeight) return parent;
50
+ parent = parent.parentElement;
51
+ }
52
+ }
53
+ function createsFixedContainingBlock(style) {
54
+ return style.transform !== "none" || style.perspective !== "none" || style.filter !== "none" || style.backdropFilter !== void 0 && style.backdropFilter !== "none" || /transform|perspective|filter/.test(style.willChange) || /paint|layout|strict|content/.test(style.contain);
55
+ }
56
+ /**
57
+ * Where a `position: fixed` descendant's `top: 0; left: 0` lands in the viewport. That is the
58
+ * viewport origin, unless an ancestor (a centred dialog is translated) becomes its containing block.
59
+ */
60
+ function getFixedOrigin(element) {
61
+ let parent = element.parentElement;
62
+ while (parent) {
63
+ if (createsFixedContainingBlock(getComputedStyle(parent))) {
64
+ const rect = parent.getBoundingClientRect();
65
+ return {
66
+ left: rect.left + parent.clientLeft,
67
+ top: rect.top + parent.clientTop
68
+ };
69
+ }
70
+ parent = parent.parentElement;
71
+ }
72
+ return {
73
+ left: 0,
74
+ top: 0
75
+ };
76
+ }
40
77
  function getLastRowHeight(root) {
41
78
  const rows = root.querySelectorAll(SELECTORS.row);
42
79
  if (rows.length <= 1) return void 0;
@@ -46,7 +83,7 @@ function getLastRowHeight(root) {
46
83
  * Setup sticky table header
47
84
  */
48
85
  function useStickyTableHeader(sticky = shallowRef(false), offsetTop, tableRefs) {
49
- const { table, tableScroller } = tableRefs;
86
+ const { table } = tableRefs;
50
87
  const stick = shallowRef(false);
51
88
  let resizeCleanups = [];
52
89
  let syncRafId = null;
@@ -109,7 +146,9 @@ function useStickyTableHeader(sticky = shallowRef(false), offsetTop, tableRefs)
109
146
  const { head, root, theadClone } = elements;
110
147
  const clonedRect = theadClone.getBoundingClientRect();
111
148
  const tableRect = root.getBoundingClientRect();
112
- const top = toValue(offsetTop) ?? 0;
149
+ const pageTop = toValue(offsetTop) ?? 0;
150
+ const scrollParent = findScrollParent(root);
151
+ const top = scrollParent ? Math.max(scrollParent.getBoundingClientRect().top + scrollParent.clientTop, pageTop) : pageTop;
113
152
  head.style.width = `${clonedRect.width}px`;
114
153
  const lastRowHeight = getLastRowHeight(root);
115
154
  if (lastRowHeight === void 0) {
@@ -122,6 +161,7 @@ function useStickyTableHeader(sticky = shallowRef(false), offsetTop, tableRefs)
122
161
  positionHeadStuck(head, {
123
162
  clonedRect,
124
163
  lastRowHeight,
164
+ origin: getFixedOrigin(head),
125
165
  tableRect,
126
166
  top
127
167
  });
@@ -137,10 +177,18 @@ function useStickyTableHeader(sticky = shallowRef(false), offsetTop, tableRefs)
137
177
  rafId = null;
138
178
  });
139
179
  }
180
+ function onScroll(event) {
181
+ const root = get$1(table);
182
+ const target = event.target;
183
+ if (!root || !(target instanceof Node) || !target.contains(root)) return;
184
+ throttledToggleStickyClass();
185
+ }
140
186
  onMounted(() => {
141
187
  toggleStickyClass();
142
- useEventListener(tableScroller, "scroll", throttledToggleStickyClass);
143
- useEventListener(document.body, "scroll", throttledToggleStickyClass);
188
+ useEventListener(document, "scroll", onScroll, {
189
+ capture: true,
190
+ passive: true
191
+ });
144
192
  useEventListener(window, "resize", throttledToggleStickyClass);
145
193
  watchCellWidth();
146
194
  });
@@ -1 +1 @@
1
- {"version":3,"file":"sticky-header.js","names":[],"sources":["../../src/composables/sticky-header.ts"],"sourcesContent":["import type { MaybeRefOrGetter, Ref, ShallowRef } from 'vue';\n\nexport interface UseStickyTableHeaderRefs {\n table: Readonly<ShallowRef<HTMLTableElement | null>>;\n tableScroller: Readonly<ShallowRef<HTMLElement | null>>;\n}\n\ninterface StickyElements {\n head: HTMLElement;\n theadClone: HTMLElement;\n root: HTMLTableElement;\n}\n\ninterface UseStickyTableHeaderReturn {\n stick: Readonly<Ref<boolean>>;\n}\n\nconst SELECTORS = {\n head: ':scope > thead[data-id=head-main]',\n headClone: ':scope > thead[data-id=head-clone]',\n row: ':scope > tbody > tr:not([hidden])',\n th: ':scope > th',\n} as const;\n\nconst BORDER_PRECISION = -0.5;\n\nfunction queryHeadRow(root: HTMLTableElement, selector: string): HTMLTableRowElement | null {\n return root.querySelector(`${selector} > tr`);\n}\n\nfunction queryColumns(row: HTMLTableRowElement | null): HTMLElement[] {\n if (!row)\n return [];\n return Array.from(row.querySelectorAll<HTMLElement>(SELECTORS.th));\n}\n\nfunction readColumnWidths(columns: HTMLElement[]): number[] {\n return columns.map(col => col.getBoundingClientRect().width);\n}\n\nfunction applyColumnWidths(columns: HTMLElement[], widths: number[]): void {\n for (const [i, column] of columns.entries()) {\n const width = widths[i];\n if (width !== undefined)\n column.style.width = `${width}px`;\n }\n}\n\nfunction positionHeadAtRest(head: HTMLElement): void {\n head.style.left = `${BORDER_PRECISION}px`;\n head.style.top = '0';\n}\n\ninterface StuckPosition {\n clonedRect: DOMRect;\n tableRect: DOMRect;\n lastRowHeight: number;\n top: number;\n}\n\nfunction positionHeadStuck(head: HTMLElement, { clonedRect, lastRowHeight, tableRect, top }: StuckPosition): void {\n head.style.left = `${clonedRect.left + BORDER_PRECISION}px`;\n\n const isNearBottom = tableRect.bottom <= lastRowHeight + clonedRect.height + top;\n head.style.top = isNearBottom\n ? `${tableRect.bottom - lastRowHeight - clonedRect.height}px`\n : `${top}px`;\n}\n\nfunction isInStickyRange(tableRect: DOMRect, top: number): boolean {\n return tableRect.top <= top && tableRect.bottom > top;\n}\n\nfunction getLastRowHeight(root: HTMLTableElement): number | undefined {\n const rows = root.querySelectorAll(SELECTORS.row);\n if (rows.length <= 1)\n return undefined;\n return rows.item(rows.length - 1)?.getBoundingClientRect().height ?? 0;\n}\n\n/**\n * Setup sticky table header\n */\nexport function useStickyTableHeader(\n sticky: MaybeRefOrGetter<boolean> = shallowRef(false),\n offsetTop: MaybeRefOrGetter<number | undefined>,\n tableRefs: UseStickyTableHeaderRefs,\n): UseStickyTableHeaderReturn {\n const { table, tableScroller } = tableRefs;\n const stick = shallowRef<boolean>(false);\n\n let resizeCleanups: (() => void)[] = [];\n let syncRafId: number | null = null;\n let rafId: number | null = null;\n\n function cleanupResizeObservers(): void {\n for (const cleanup of resizeCleanups)\n cleanup();\n resizeCleanups = [];\n }\n\n function cancelPendingSync(): void {\n if (syncRafId !== null)\n cancelAnimationFrame(syncRafId);\n syncRafId = null;\n }\n\n function scheduleSyncWidths(cloneColumns: HTMLElement[], mainColumns: HTMLElement[]): void {\n cancelPendingSync();\n\n // One frame is enough: the main thead is positioned, so its widths never feed back into the clone's\n syncRafId = requestAnimationFrame(() => {\n syncRafId = null;\n applyColumnWidths(mainColumns, readColumnWidths(cloneColumns));\n });\n }\n\n function observeColumnResizes(cloneColumns: HTMLElement[], mainColumns: HTMLElement[]): void {\n cleanupResizeObservers();\n\n for (const th of cloneColumns) {\n const { stop } = useResizeObserver(th, () => {\n scheduleSyncWidths(cloneColumns, mainColumns);\n });\n resizeCleanups.push(stop);\n }\n }\n\n function watchCellWidth(): void {\n const root = get(table);\n if (!toValue(sticky) || !root)\n return;\n\n const cloneRow = queryHeadRow(root, SELECTORS.headClone);\n const mainRow = queryHeadRow(root, SELECTORS.head);\n const cloneColumns = queryColumns(cloneRow);\n const mainColumns = queryColumns(mainRow);\n\n useMutationObserver(cloneRow, (mutations) => {\n const hasRelevantMutation = mutations.some(\n m => m.type === 'childList' || m.type === 'attributes',\n );\n if (hasRelevantMutation)\n observeColumnResizes(queryColumns(cloneRow), queryColumns(mainRow));\n }, { attributes: true, childList: true, subtree: true });\n\n observeColumnResizes(cloneColumns, mainColumns);\n }\n\n function queryStickyElements(): StickyElements | undefined {\n const root = get(table);\n if (!toValue(sticky) || !root)\n return undefined;\n\n const theadClone = root.querySelector<HTMLElement>(SELECTORS.headClone);\n const head = root.querySelector<HTMLElement>(SELECTORS.head);\n if (!theadClone || !head)\n return undefined;\n\n return { head, root, theadClone };\n }\n\n function toggleStickyClass(): void {\n const elements = queryStickyElements();\n if (!elements)\n return;\n\n const { head, root, theadClone } = elements;\n const clonedRect = theadClone.getBoundingClientRect();\n const tableRect = root.getBoundingClientRect();\n const top = toValue(offsetTop) ?? 0;\n\n head.style.width = `${clonedRect.width}px`;\n\n const lastRowHeight = getLastRowHeight(root);\n if (lastRowHeight === undefined) {\n set(stick, false);\n positionHeadAtRest(head);\n return;\n }\n\n if (isInStickyRange(tableRect, top)) {\n set(stick, true);\n positionHeadStuck(head, { clonedRect, lastRowHeight, tableRect, top });\n }\n else {\n set(stick, false);\n positionHeadAtRest(head);\n }\n }\n\n function throttledToggleStickyClass(): void {\n if (rafId !== null)\n return;\n rafId = requestAnimationFrame(() => {\n toggleStickyClass();\n rafId = null;\n });\n }\n\n onMounted(() => {\n toggleStickyClass();\n useEventListener(tableScroller, 'scroll', throttledToggleStickyClass);\n useEventListener(document.body, 'scroll', throttledToggleStickyClass);\n useEventListener(window, 'resize', throttledToggleStickyClass);\n watchCellWidth();\n });\n\n return {\n stick: readonly(stick),\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"sticky-header.js","names":[],"sources":["../../src/composables/sticky-header.ts"],"sourcesContent":["import type { MaybeRefOrGetter, Ref, ShallowRef } from 'vue';\n\nexport interface UseStickyTableHeaderRefs {\n table: Readonly<ShallowRef<HTMLTableElement | null>>;\n}\n\ninterface StickyElements {\n head: HTMLElement;\n theadClone: HTMLElement;\n root: HTMLTableElement;\n}\n\ninterface UseStickyTableHeaderReturn {\n stick: Readonly<Ref<boolean>>;\n}\n\nconst SELECTORS = {\n head: ':scope > thead[data-id=head-main]',\n headClone: ':scope > thead[data-id=head-clone]',\n row: ':scope > tbody > tr:not([hidden])',\n th: ':scope > th',\n} as const;\n\nconst BORDER_PRECISION = -0.5;\n\nfunction queryHeadRow(root: HTMLTableElement, selector: string): HTMLTableRowElement | null {\n return root.querySelector(`${selector} > tr`);\n}\n\nfunction queryColumns(row: HTMLTableRowElement | null): HTMLElement[] {\n if (!row)\n return [];\n return Array.from(row.querySelectorAll<HTMLElement>(SELECTORS.th));\n}\n\nfunction readColumnWidths(columns: HTMLElement[]): number[] {\n return columns.map(col => col.getBoundingClientRect().width);\n}\n\nfunction applyColumnWidths(columns: HTMLElement[], widths: number[]): void {\n for (const [i, column] of columns.entries()) {\n const width = widths[i];\n if (width !== undefined)\n column.style.width = `${width}px`;\n }\n}\n\nfunction positionHeadAtRest(head: HTMLElement): void {\n head.style.left = `${BORDER_PRECISION}px`;\n head.style.top = '0';\n}\n\ninterface StuckPosition {\n clonedRect: DOMRect;\n tableRect: DOMRect;\n lastRowHeight: number;\n top: number;\n origin: Point;\n}\n\nfunction positionHeadStuck(head: HTMLElement, { clonedRect, lastRowHeight, origin, tableRect, top }: StuckPosition): void {\n head.style.left = `${clonedRect.left - origin.left + BORDER_PRECISION}px`;\n\n const isNearBottom = tableRect.bottom <= lastRowHeight + clonedRect.height + top;\n const viewportTop = isNearBottom ? tableRect.bottom - lastRowHeight - clonedRect.height : top;\n head.style.top = `${viewportTop - origin.top}px`;\n}\n\nfunction isInStickyRange(tableRect: DOMRect, top: number): boolean {\n return tableRect.top <= top && tableRect.bottom > top;\n}\n\ninterface Point {\n left: number;\n top: number;\n}\n\n/**\n * The nearest ancestor that currently scrolls vertically, e.g. a dialog or drawer body, or\n * `undefined` when only the page does. One that could scroll but has nothing to (a card body on a\n * page) is skipped, as is the table's own scroller, which only scrolls sideways.\n */\nfunction findScrollParent(element: HTMLElement): HTMLElement | undefined {\n let parent = element.parentElement;\n while (parent && parent !== document.body && parent !== document.documentElement) {\n const { overflowY } = getComputedStyle(parent);\n if ((overflowY === 'auto' || overflowY === 'scroll') && parent.scrollHeight > parent.clientHeight)\n return parent;\n parent = parent.parentElement;\n }\n return undefined;\n}\n\nfunction createsFixedContainingBlock(style: CSSStyleDeclaration): boolean {\n return style.transform !== 'none'\n || style.perspective !== 'none'\n || style.filter !== 'none'\n || (style.backdropFilter !== undefined && style.backdropFilter !== 'none')\n || /transform|perspective|filter/.test(style.willChange)\n || /paint|layout|strict|content/.test(style.contain);\n}\n\n/**\n * Where a `position: fixed` descendant's `top: 0; left: 0` lands in the viewport. That is the\n * viewport origin, unless an ancestor (a centred dialog is translated) becomes its containing block.\n */\nfunction getFixedOrigin(element: HTMLElement): Point {\n let parent = element.parentElement;\n while (parent) {\n if (createsFixedContainingBlock(getComputedStyle(parent))) {\n const rect = parent.getBoundingClientRect();\n return { left: rect.left + parent.clientLeft, top: rect.top + parent.clientTop };\n }\n parent = parent.parentElement;\n }\n return { left: 0, top: 0 };\n}\n\nfunction getLastRowHeight(root: HTMLTableElement): number | undefined {\n const rows = root.querySelectorAll(SELECTORS.row);\n if (rows.length <= 1)\n return undefined;\n return rows.item(rows.length - 1)?.getBoundingClientRect().height ?? 0;\n}\n\n/**\n * Setup sticky table header\n */\nexport function useStickyTableHeader(\n sticky: MaybeRefOrGetter<boolean> = shallowRef(false),\n offsetTop: MaybeRefOrGetter<number | undefined>,\n tableRefs: UseStickyTableHeaderRefs,\n): UseStickyTableHeaderReturn {\n const { table } = tableRefs;\n const stick = shallowRef<boolean>(false);\n\n let resizeCleanups: (() => void)[] = [];\n let syncRafId: number | null = null;\n let rafId: number | null = null;\n\n function cleanupResizeObservers(): void {\n for (const cleanup of resizeCleanups)\n cleanup();\n resizeCleanups = [];\n }\n\n function cancelPendingSync(): void {\n if (syncRafId !== null)\n cancelAnimationFrame(syncRafId);\n syncRafId = null;\n }\n\n function scheduleSyncWidths(cloneColumns: HTMLElement[], mainColumns: HTMLElement[]): void {\n cancelPendingSync();\n\n // One frame is enough: the main thead is positioned, so its widths never feed back into the clone's\n syncRafId = requestAnimationFrame(() => {\n syncRafId = null;\n applyColumnWidths(mainColumns, readColumnWidths(cloneColumns));\n });\n }\n\n function observeColumnResizes(cloneColumns: HTMLElement[], mainColumns: HTMLElement[]): void {\n cleanupResizeObservers();\n\n for (const th of cloneColumns) {\n const { stop } = useResizeObserver(th, () => {\n scheduleSyncWidths(cloneColumns, mainColumns);\n });\n resizeCleanups.push(stop);\n }\n }\n\n function watchCellWidth(): void {\n const root = get(table);\n if (!toValue(sticky) || !root)\n return;\n\n const cloneRow = queryHeadRow(root, SELECTORS.headClone);\n const mainRow = queryHeadRow(root, SELECTORS.head);\n const cloneColumns = queryColumns(cloneRow);\n const mainColumns = queryColumns(mainRow);\n\n useMutationObserver(cloneRow, (mutations) => {\n const hasRelevantMutation = mutations.some(\n m => m.type === 'childList' || m.type === 'attributes',\n );\n if (hasRelevantMutation)\n observeColumnResizes(queryColumns(cloneRow), queryColumns(mainRow));\n }, { attributes: true, childList: true, subtree: true });\n\n observeColumnResizes(cloneColumns, mainColumns);\n }\n\n function queryStickyElements(): StickyElements | undefined {\n const root = get(table);\n if (!toValue(sticky) || !root)\n return undefined;\n\n const theadClone = root.querySelector<HTMLElement>(SELECTORS.headClone);\n const head = root.querySelector<HTMLElement>(SELECTORS.head);\n if (!theadClone || !head)\n return undefined;\n\n return { head, root, theadClone };\n }\n\n function toggleStickyClass(): void {\n const elements = queryStickyElements();\n if (!elements)\n return;\n\n const { head, root, theadClone } = elements;\n const clonedRect = theadClone.getBoundingClientRect();\n const tableRect = root.getBoundingClientRect();\n const pageTop = toValue(offsetTop) ?? 0;\n const scrollParent = findScrollParent(root);\n const top = scrollParent\n ? Math.max(scrollParent.getBoundingClientRect().top + scrollParent.clientTop, pageTop)\n : pageTop;\n\n head.style.width = `${clonedRect.width}px`;\n\n const lastRowHeight = getLastRowHeight(root);\n if (lastRowHeight === undefined) {\n set(stick, false);\n positionHeadAtRest(head);\n return;\n }\n\n if (isInStickyRange(tableRect, top)) {\n set(stick, true);\n positionHeadStuck(head, { clonedRect, lastRowHeight, origin: getFixedOrigin(head), tableRect, top });\n }\n else {\n set(stick, false);\n positionHeadAtRest(head);\n }\n }\n\n function throttledToggleStickyClass(): void {\n if (rafId !== null)\n return;\n rafId = requestAnimationFrame(() => {\n toggleStickyClass();\n rafId = null;\n });\n }\n\n function onScroll(event: Event): void {\n const root = get(table);\n const target = event.target;\n // scroll does not bubble, so this runs in capture for every scroll: only an ancestor's matters\n if (!root || !(target instanceof Node) || !target.contains(root))\n return;\n throttledToggleStickyClass();\n }\n\n onMounted(() => {\n toggleStickyClass();\n useEventListener(document, 'scroll', onScroll, { capture: true, passive: true });\n useEventListener(window, 'resize', throttledToggleStickyClass);\n watchCellWidth();\n });\n\n return {\n stick: readonly(stick),\n };\n}\n"],"mappings":"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"}
package/dist/index.js CHANGED
@@ -59,11 +59,11 @@ import RuiNotification_default from "./components/overlays/notification/RuiNotif
59
59
  import RuiFooterStepper_default from "./components/steppers/RuiFooterStepper.js";
60
60
  import RuiStepper_default from "./components/steppers/RuiStepper.js";
61
61
  import RuiTableEmptyState_default from "./components/tables/RuiTableEmptyState.js";
62
+ import RuiTableErrorState_default from "./components/tables/RuiTableErrorState.js";
62
63
  import RuiExpandButton_default from "./components/tables/RuiExpandButton.js";
63
64
  import RuiTableLoadingState_default from "./components/tables/RuiTableLoadingState.js";
64
65
  import RuiTablePagination_default from "./components/tables/RuiTablePagination.js";
65
66
  import RuiDataTable_default from "./components/tables/RuiDataTable.js";
66
- import RuiTableErrorState_default from "./components/tables/RuiTableErrorState.js";
67
67
  import RuiTable_default from "./components/tables/RuiTable.js";
68
68
  import RuiTabItem_default from "./components/tabs/tab-item/RuiTabItem.js";
69
69
  import RuiTabItems_default from "./components/tabs/tab-items/RuiTabItems.js";
@@ -29,7 +29,7 @@
29
29
  "lu-info",
30
30
  "lu-radio-button-fill",
31
31
  "lu-search",
32
- "lu-trash-2",
33
32
  "lu-triangle-alert",
33
+ "lu-ungroup",
34
34
  "lu-x"
35
35
  ]
package/dist/style.css CHANGED
@@ -1064,6 +1064,9 @@ html[data-theme="dark"], html.dark {
1064
1064
  .z-\[10000\] {
1065
1065
  z-index: 10000;
1066
1066
  }
1067
+ .z-\[1\] {
1068
+ z-index: 1;
1069
+ }
1067
1070
  .z-\[2\] {
1068
1071
  z-index: 2;
1069
1072
  }
@@ -1079,6 +1082,10 @@ html[data-theme="dark"], html.dark {
1079
1082
  .m-\[-1px\] {
1080
1083
  margin: -1px;
1081
1084
  }
1085
+ .-mx-1\.5 {
1086
+ margin-left: -0.375rem;
1087
+ margin-right: -0.375rem;
1088
+ }
1082
1089
  .-mx-4 {
1083
1090
  margin-left: -1rem;
1084
1091
  margin-right: -1rem;
@@ -1119,12 +1126,18 @@ html[data-theme="dark"], html.dark {
1119
1126
  .-mb-2 {
1120
1127
  margin-bottom: -0.5rem;
1121
1128
  }
1129
+ .-ml-1\.5 {
1130
+ margin-left: -0.375rem;
1131
+ }
1122
1132
  .-ml-\[0\.5625rem\] {
1123
1133
  margin-left: -0.5625rem;
1124
1134
  }
1125
1135
  .-mr-1 {
1126
1136
  margin-right: -0.25rem;
1127
1137
  }
1138
+ .-mr-1\.5 {
1139
+ margin-right: -0.375rem;
1140
+ }
1128
1141
  .-mt-1 {
1129
1142
  margin-top: -0.25rem;
1130
1143
  }
@@ -1330,6 +1343,9 @@ html[data-theme="dark"], html.dark {
1330
1343
  .max-h-full {
1331
1344
  max-height: 100%;
1332
1345
  }
1346
+ .\!min-h-7 {
1347
+ min-height: 1.75rem !important;
1348
+ }
1333
1349
  .\!min-h-8 {
1334
1350
  min-height: 2rem !important;
1335
1351
  }
@@ -1554,6 +1570,9 @@ html[data-theme="dark"], html.dark {
1554
1570
  .flex-\[1_1_0\] {
1555
1571
  flex: 1 1 0;
1556
1572
  }
1573
+ .shrink {
1574
+ flex-shrink: 1;
1575
+ }
1557
1576
  .shrink-0 {
1558
1577
  flex-shrink: 0;
1559
1578
  }
@@ -1620,14 +1639,6 @@ html[data-theme="dark"], html.dark {
1620
1639
  --tw-translate-y: 100%;
1621
1640
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
1622
1641
  }
1623
- .\!rotate-0 {
1624
- --tw-rotate: 0deg !important;
1625
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)) !important;
1626
- }
1627
- .\!rotate-180 {
1628
- --tw-rotate: 180deg !important;
1629
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)) !important;
1630
- }
1631
1642
  .-rotate-180 {
1632
1643
  --tw-rotate: -180deg;
1633
1644
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
@@ -1644,6 +1655,10 @@ html[data-theme="dark"], html.dark {
1644
1655
  --tw-rotate: -135deg;
1645
1656
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
1646
1657
  }
1658
+ .rotate-0 {
1659
+ --tw-rotate: 0deg;
1660
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
1661
+ }
1647
1662
  .rotate-180 {
1648
1663
  --tw-rotate: 180deg;
1649
1664
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
@@ -1830,6 +1845,9 @@ html[data-theme="dark"], html.dark {
1830
1845
  .items-center {
1831
1846
  align-items: center;
1832
1847
  }
1848
+ .items-baseline {
1849
+ align-items: baseline;
1850
+ }
1833
1851
  .justify-start {
1834
1852
  justify-content: flex-start;
1835
1853
  }
@@ -2003,6 +2021,9 @@ html[data-theme="dark"], html.dark {
2003
2021
  .overflow-hidden {
2004
2022
  overflow: hidden;
2005
2023
  }
2024
+ .overflow-clip {
2025
+ overflow: clip;
2026
+ }
2006
2027
  .\!overflow-visible {
2007
2028
  overflow: visible !important;
2008
2029
  }
@@ -2130,6 +2151,9 @@ html[data-theme="dark"], html.dark {
2130
2151
  .\!border-b {
2131
2152
  border-bottom-width: 1px !important;
2132
2153
  }
2154
+ .\!border-t-0 {
2155
+ border-top-width: 0px !important;
2156
+ }
2133
2157
  .border-b {
2134
2158
  border-bottom-width: 1px;
2135
2159
  }
@@ -2382,10 +2406,6 @@ html[data-theme="dark"], html.dark {
2382
2406
  --tw-bg-opacity: 1;
2383
2407
  background-color: rgb(54 54 54 / var(--tw-bg-opacity, 1));
2384
2408
  }
2385
- .bg-\[\#f9fafb\] {
2386
- --tw-bg-opacity: 1;
2387
- background-color: rgb(249 250 251 / var(--tw-bg-opacity, 1));
2388
- }
2389
2409
  .bg-black {
2390
2410
  --tw-bg-opacity: 1;
2391
2411
  background-color: rgb(0 0 0 / var(--tw-bg-opacity, 1));
@@ -2396,9 +2416,6 @@ html[data-theme="dark"], html.dark {
2396
2416
  .bg-black\/\[\.12\] {
2397
2417
  background-color: rgb(0 0 0 / .12);
2398
2418
  }
2399
- .bg-black\/\[0\.02\] {
2400
- background-color: rgb(0 0 0 / 0.02);
2401
- }
2402
2419
  .bg-black\/\[0\.03\] {
2403
2420
  background-color: rgb(0 0 0 / 0.03);
2404
2421
  }
@@ -2717,9 +2734,8 @@ html[data-theme="dark"], html.dark {
2717
2734
  padding-top: 0.19rem;
2718
2735
  padding-bottom: 0.19rem;
2719
2736
  }
2720
- .py-\[0\.38rem\] {
2721
- padding-top: 0.38rem;
2722
- padding-bottom: 0.38rem;
2737
+ .\!pl-3 {
2738
+ padding-left: 0.75rem !important;
2723
2739
  }
2724
2740
  .\!pt-0 {
2725
2741
  padding-top: 0px !important;
@@ -3065,6 +3081,9 @@ html[data-theme="dark"], html.dark {
3065
3081
  .opacity-20 {
3066
3082
  opacity: 0.2;
3067
3083
  }
3084
+ .opacity-30 {
3085
+ opacity: 0.3;
3086
+ }
3068
3087
  .opacity-40 {
3069
3088
  opacity: 0.4;
3070
3089
  }
@@ -3996,11 +4015,6 @@ body {
3996
4015
  border-color: rgba(var(--rui-primary-main), var(--tw-border-opacity, 1));
3997
4016
  }
3998
4017
 
3999
- .hover\:bg-\[\#f9fafb\]:hover {
4000
- --tw-bg-opacity: 1;
4001
- background-color: rgb(249 250 251 / var(--tw-bg-opacity, 1));
4002
- }
4003
-
4004
4018
  .hover\:bg-black\/\[\.04\]:hover {
4005
4019
  background-color: rgb(0 0 0 / .04);
4006
4020
  }
@@ -4042,6 +4056,11 @@ body {
4042
4056
  background-color: rgba(var(--rui-grey-300), var(--tw-bg-opacity, 1));
4043
4057
  }
4044
4058
 
4059
+ .hover\:bg-rui-grey-50:hover {
4060
+ --tw-bg-opacity: 1;
4061
+ background-color: rgba(var(--rui-grey-50), var(--tw-bg-opacity, 1));
4062
+ }
4063
+
4045
4064
  .hover\:bg-rui-info-darker:hover {
4046
4065
  --tw-bg-opacity: 1;
4047
4066
  background-color: rgba(var(--rui-info-darker), var(--tw-bg-opacity, 1));
@@ -4387,6 +4406,10 @@ body {
4387
4406
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
4388
4407
  }
4389
4408
 
4409
+ .group\/sort:focus-visible .group-focus-visible\/sort\:opacity-60 {
4410
+ opacity: 0.6;
4411
+ }
4412
+
4390
4413
  .peer:-webkit-autofill ~ .peer-autofill\:text-\[0\.75rem\] {
4391
4414
  font-size: 0.75rem;
4392
4415
  }
@@ -4702,14 +4725,18 @@ body {
4702
4725
  background-color: rgb(255 255 255 / .16);
4703
4726
  }
4704
4727
 
4705
- .dark\:bg-white\/\[0\.02\]:is([data-theme="dark"] *) {
4706
- background-color: rgb(255 255 255 / 0.02);
4728
+ .dark\:bg-white\/\[0\.03\]:is([data-theme="dark"] *) {
4729
+ background-color: rgb(255 255 255 / 0.03);
4707
4730
  }
4708
4731
 
4709
4732
  .dark\:bg-white\/\[0\.05\]:is([data-theme="dark"] *) {
4710
4733
  background-color: rgb(255 255 255 / 0.05);
4711
4734
  }
4712
4735
 
4736
+ .dark\:bg-white\/\[0\.08\]:is([data-theme="dark"] *) {
4737
+ background-color: rgb(255 255 255 / 0.08);
4738
+ }
4739
+
4713
4740
  .dark\:bg-white\/\[0\.09\]:is([data-theme="dark"] *) {
4714
4741
  background-color: rgb(255 255 255 / 0.09);
4715
4742
  }
@@ -4881,11 +4908,6 @@ body {
4881
4908
  border-color: rgb(255 255 255 / var(--tw-border-opacity, 1));
4882
4909
  }
4883
4910
 
4884
- .dark\:hover\:bg-\[\#121212\]:hover:is([data-theme="dark"] *) {
4885
- --tw-bg-opacity: 1;
4886
- background-color: rgb(18 18 18 / var(--tw-bg-opacity, 1));
4887
- }
4888
-
4889
4911
  .dark\:hover\:bg-gray-600:hover:is([data-theme="dark"] *) {
4890
4912
  --tw-bg-opacity: 1;
4891
4913
  background-color: rgb(75 85 99 / var(--tw-bg-opacity, 1));
@@ -4932,6 +4954,10 @@ body {
4932
4954
  background-color: rgb(255 255 255 / .04);
4933
4955
  }
4934
4956
 
4957
+ .dark\:hover\:bg-white\/\[0\.03\]:hover:is([data-theme="dark"] *) {
4958
+ background-color: rgb(255 255 255 / 0.03);
4959
+ }
4960
+
4935
4961
  .dark\:hover\:bg-white\/\[0\.04\]:hover:is([data-theme="dark"] *) {
4936
4962
  background-color: rgb(255 255 255 / 0.04);
4937
4963
  }
@@ -5062,32 +5088,73 @@ body {
5062
5088
  opacity: 0;
5063
5089
  }
5064
5090
 
5065
- .even\:\[\&\>tr\]\:bg-rui-grey-50>tr:nth-child(even) {
5066
- --tw-bg-opacity: 1;
5067
- background-color: rgba(var(--rui-grey-50), var(--tw-bg-opacity, 1));
5091
+ .\[\&_input\]\:\!px-1 input {
5092
+ padding-left: 0.25rem !important;
5093
+ padding-right: 0.25rem !important;
5068
5094
  }
5069
5095
 
5070
- .dark\:even\:\[\&\>tr\]\:bg-rui-grey-900>tr:nth-child(even):is([data-theme="dark"] *) {
5071
- --tw-bg-opacity: 1;
5072
- background-color: rgba(var(--rui-grey-900), var(--tw-bg-opacity, 1));
5096
+ .\[\&_input\]\:\!py-1 input {
5097
+ padding-top: 0.25rem !important;
5098
+ padding-bottom: 0.25rem !important;
5073
5099
  }
5074
5100
 
5075
- .\[\&_input\]\:\!pr-0 input {
5076
- padding-right: 0px !important;
5101
+ .\[\&_input\]\:\!py-1\.5 input {
5102
+ padding-top: 0.375rem !important;
5103
+ padding-bottom: 0.375rem !important;
5077
5104
  }
5078
5105
 
5079
5106
  .\[\&_input\]\:text-center input {
5080
5107
  text-align: center;
5081
5108
  }
5082
5109
 
5110
+ .\[\&_input\]\:\!text-xs input {
5111
+ font-size: 0.75rem !important;
5112
+ line-height: 1rem !important;
5113
+ }
5114
+
5083
5115
  .\[\&_input\]\:uppercase input {
5084
5116
  text-transform: uppercase;
5085
5117
  }
5086
5118
 
5119
+ .\[\&_input\]\:\!leading-5 input {
5120
+ line-height: 1.25rem !important;
5121
+ }
5122
+
5087
5123
  .\[\&_label\]\:ml-0 label {
5088
5124
  margin-left: 0px;
5089
5125
  }
5090
5126
 
5127
+ :where(.\[\:where\(\&\)\]\:h-10) {
5128
+ height: 2.5rem;
5129
+ }
5130
+
5131
+ :where(.\[\:where\(\&\)\]\:h-14) {
5132
+ height: 3.5rem;
5133
+ }
5134
+
5135
+ :where(.\[\:where\(\&\)\]\:h-9) {
5136
+ height: 2.25rem;
5137
+ }
5138
+
5139
+ :where(.\[\:where\(\&\)\]\:h-\[3\.25rem\]) {
5140
+ height: 3.25rem;
5141
+ }
5142
+
5143
+ :where(.\[\:where\(\&\)\]\:px-4) {
5144
+ padding-left: 1rem;
5145
+ padding-right: 1rem;
5146
+ }
5147
+
5148
+ :where(.\[\:where\(\&\)\]\:py-1) {
5149
+ padding-top: 0.25rem;
5150
+ padding-bottom: 0.25rem;
5151
+ }
5152
+
5153
+ :where(.\[\:where\(\&\)\]\:py-3) {
5154
+ padding-top: 0.75rem;
5155
+ padding-bottom: 0.75rem;
5156
+ }
5157
+
5091
5158
  :where(.\[\:where\(\&\)_tbody_td\]\:border-b-0) tbody td {
5092
5159
  border-bottom-width: 0px;
5093
5160
  }
@@ -5167,4 +5234,14 @@ body {
5167
5234
  :where(.\[\:where\(\&\)_thead_th\]\:text-rui-text-secondary) thead th {
5168
5235
  color: var(--rui-text-secondary);
5169
5236
  }
5237
+
5238
+ :where(.\[\:where\(\&\>tr\:nth-child\(even\)\)\]\:bg-rui-grey-50>tr:nth-child(even)) {
5239
+ --tw-bg-opacity: 1;
5240
+ background-color: rgba(var(--rui-grey-50), var(--tw-bg-opacity, 1));
5241
+ }
5242
+
5243
+ :where(.dark\:\[\:where\(\&\>tr\:nth-child\(even\)\)\]\:bg-rui-grey-900>tr:nth-child(even)):is([data-theme="dark"] *) {
5244
+ --tw-bg-opacity: 1;
5245
+ background-color: rgba(var(--rui-grey-900), var(--tw-bg-opacity, 1));
5246
+ }
5170
5247
  /*$vite$:1*/