@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.
- package/dist/components/date-time-picker/RuiDateTimePicker.js.map +1 -1
- package/dist/components/date-time-picker/RuiDateTimePicker.vue_vue_type_script_setup_true_lang.js +1 -0
- package/dist/components/date-time-picker/RuiDateTimePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/date-time-picker/date-time-picker-styles.d.ts +6 -0
- package/dist/components/forms/auto-complete/RuiAutoComplete.js.map +1 -1
- package/dist/components/forms/auto-complete/RuiAutoComplete.vue_vue_type_script_setup_true_lang.js +1 -0
- package/dist/components/forms/auto-complete/RuiAutoComplete.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/forms/auto-complete/auto-complete-styles.d.ts +6 -0
- package/dist/components/forms/category-picker/category-picker-styles.d.ts +6 -0
- package/dist/components/forms/select/RuiMenuSelect.js.map +1 -1
- package/dist/components/forms/select/RuiMenuSelect.vue_vue_type_script_setup_true_lang.js +1 -0
- package/dist/components/forms/select/RuiMenuSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/forms/select/menu-select-styles.d.ts +6 -0
- package/dist/components/forms/text-input-styles.d.ts +3 -0
- package/dist/components/forms/text-input-styles.js +3 -1
- package/dist/components/forms/text-input-styles.js.map +1 -1
- package/dist/components/index.js +1 -1
- package/dist/components/overlays/menu/RuiMenu.js.map +1 -1
- package/dist/components/overlays/menu/RuiMenu.vue_vue_type_script_setup_true_lang.js +8 -2
- package/dist/components/overlays/menu/RuiMenu.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/tables/RuiDataTable.js.map +1 -1
- package/dist/components/tables/RuiDataTable.vue.d.ts +12 -1
- package/dist/components/tables/RuiDataTable.vue_vue_type_script_setup_true_lang.js +71 -17
- package/dist/components/tables/RuiDataTable.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/tables/RuiTable.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/tables/RuiTableHead.js.map +1 -1
- package/dist/components/tables/RuiTableHead.vue_vue_type_script_setup_true_lang.js +38 -13
- package/dist/components/tables/RuiTableHead.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/tables/RuiTablePagination.js.map +1 -1
- package/dist/components/tables/RuiTablePagination.vue.d.ts +3 -3
- package/dist/components/tables/RuiTablePagination.vue_vue_type_script_setup_true_lang.js +65 -14
- package/dist/components/tables/RuiTablePagination.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/tables/data-table/RuiDataTableBody.js.map +1 -1
- package/dist/components/tables/data-table/RuiDataTableBody.vue.d.ts +7 -1
- package/dist/components/tables/data-table/RuiDataTableBody.vue_vue_type_script_setup_true_lang.js +45 -9
- package/dist/components/tables/data-table/RuiDataTableBody.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/tables/data-table/RuiDataTableCell.js.map +1 -1
- package/dist/components/tables/data-table/RuiDataTableCell.vue_vue_type_script_setup_true_lang.js +13 -2
- package/dist/components/tables/data-table/RuiDataTableCell.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/tables/data-table/RuiDataTableErrorRow.js +7 -0
- package/dist/components/tables/data-table/RuiDataTableErrorRow.js.map +1 -0
- package/dist/components/tables/data-table/RuiDataTableErrorRow.vue.d.ts +21 -0
- package/dist/components/tables/data-table/RuiDataTableErrorRow.vue_vue_type_script_setup_true_lang.js +40 -0
- package/dist/components/tables/data-table/RuiDataTableErrorRow.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/tables/data-table/RuiDataTableExpandedRow.js.map +1 -1
- package/dist/components/tables/data-table/RuiDataTableExpandedRow.vue_vue_type_script_setup_true_lang.js +12 -1
- package/dist/components/tables/data-table/RuiDataTableExpandedRow.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/tables/data-table/RuiDataTableGroupRow.js.map +1 -1
- package/dist/components/tables/data-table/RuiDataTableGroupRow.vue_vue_type_script_setup_true_lang.js +52 -20
- package/dist/components/tables/data-table/RuiDataTableGroupRow.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/tables/data-table/RuiDataTableRow.js.map +1 -1
- package/dist/components/tables/data-table/RuiDataTableRow.vue_vue_type_script_setup_true_lang.js +29 -14
- package/dist/components/tables/data-table/RuiDataTableRow.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/tables/data-table/context.d.ts +10 -0
- package/dist/components/tables/data-table/context.js +2 -0
- package/dist/components/tables/data-table/context.js.map +1 -1
- package/dist/components/tables/data-table-styles.d.ts +15 -9
- package/dist/components/tables/data-table-styles.js +29 -6
- package/dist/components/tables/data-table-styles.js.map +1 -1
- package/dist/components/tables/table-props.d.ts +1 -2
- package/dist/components/tables/table-props.js +2 -10
- package/dist/components/tables/table-props.js.map +1 -1
- package/dist/components/tables/use-pagination-navigation.js +1 -1
- package/dist/components/tables/use-pagination-navigation.js.map +1 -1
- package/dist/composables/sticky-header.d.ts +0 -1
- package/dist/composables/sticky-header.js +56 -8
- package/dist/composables/sticky-header.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/library-icons.json +1 -1
- package/dist/style.css +115 -38
- package/dist/web-types.json +139 -3
- 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
|
|
35
|
-
head.style.top =
|
|
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
|
|
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
|
|
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(
|
|
143
|
-
|
|
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";
|
package/dist/library-icons.json
CHANGED
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
|
-
|
|
2721
|
-
padding-
|
|
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\.
|
|
4706
|
-
background-color: rgb(255 255 255 / 0.
|
|
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
|
-
|
|
5066
|
-
|
|
5067
|
-
|
|
5091
|
+
.\[\&_input\]\:\!px-1 input {
|
|
5092
|
+
padding-left: 0.25rem !important;
|
|
5093
|
+
padding-right: 0.25rem !important;
|
|
5068
5094
|
}
|
|
5069
5095
|
|
|
5070
|
-
|
|
5071
|
-
|
|
5072
|
-
|
|
5096
|
+
.\[\&_input\]\:\!py-1 input {
|
|
5097
|
+
padding-top: 0.25rem !important;
|
|
5098
|
+
padding-bottom: 0.25rem !important;
|
|
5073
5099
|
}
|
|
5074
5100
|
|
|
5075
|
-
.\[\&_input\]\:\!
|
|
5076
|
-
padding-
|
|
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*/
|