juxscript 1.1.178 → 1.1.180
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.
|
@@ -69,7 +69,7 @@ export declare class DataFrameComponent extends BaseComponent<DataFrameState> {
|
|
|
69
69
|
paginated(v: boolean): this;
|
|
70
70
|
rowsPerPage(v: number): this;
|
|
71
71
|
/**
|
|
72
|
-
* ✅
|
|
72
|
+
* ✅ FIXED: Render multiple Excel sheets as tabs
|
|
73
73
|
*/
|
|
74
74
|
private _renderMultiSheet;
|
|
75
75
|
private _updateStatus;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataframe.d.ts","sourceRoot":"","sources":["dataframe.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"dataframe.d.ts","sourceRoot":"","sources":["dataframe.ts"],"names":[],"mappings":"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"}
|
|
@@ -212,7 +212,7 @@ export class DataFrameComponent extends BaseComponent {
|
|
|
212
212
|
* MULTI-SHEET RENDERING
|
|
213
213
|
* ═══════════════════════════════════════════════════ */
|
|
214
214
|
/**
|
|
215
|
-
* ✅
|
|
215
|
+
* ✅ FIXED: Render multiple Excel sheets as tabs
|
|
216
216
|
*/
|
|
217
217
|
_renderMultiSheet(sheets, sourceName) {
|
|
218
218
|
this.state.loading = false;
|
|
@@ -228,25 +228,27 @@ export class DataFrameComponent extends BaseComponent {
|
|
|
228
228
|
Object.entries(sheets).forEach(([name, df]) => {
|
|
229
229
|
this._sheets.set(name, df);
|
|
230
230
|
});
|
|
231
|
-
// Create tabs
|
|
232
231
|
const sheetNames = Object.keys(sheets);
|
|
232
|
+
// ✅ FIX: Create tabs with EMPTY content first (just placeholders)
|
|
233
233
|
const tabs = new Tabs(`${this._id}-tabs`, {
|
|
234
234
|
tabs: sheetNames.map(name => ({
|
|
235
235
|
id: name,
|
|
236
236
|
label: name,
|
|
237
|
-
content: '' //
|
|
237
|
+
content: '' // Empty - we'll fill after render
|
|
238
238
|
})),
|
|
239
239
|
activeTab: sheetNames[0]
|
|
240
240
|
});
|
|
241
241
|
this._tabs = tabs;
|
|
242
|
-
// Render tabs
|
|
242
|
+
// Render tabs container
|
|
243
243
|
const tabsContainer = document.createElement('div');
|
|
244
244
|
tabsContainer.className = 'jux-dataframe-tabs';
|
|
245
245
|
wrapper.appendChild(tabsContainer);
|
|
246
|
+
// ✅ Render tabs NOW (creates all tab panels in DOM)
|
|
246
247
|
tabs.render(tabsContainer);
|
|
247
|
-
//
|
|
248
|
+
// ✅ NOW populate each tab with its DataFrame table (panels exist now)
|
|
248
249
|
sheetNames.forEach(sheetName => {
|
|
249
250
|
const df = sheets[sheetName];
|
|
251
|
+
// Create table
|
|
250
252
|
const table = new Table(`${this._id}-table-${sheetName}`, {
|
|
251
253
|
striped: this._tableOptions.striped,
|
|
252
254
|
hoverable: this._tableOptions.hoverable,
|
|
@@ -255,14 +257,20 @@ export class DataFrameComponent extends BaseComponent {
|
|
|
255
257
|
paginated: this._tableOptions.paginated,
|
|
256
258
|
rowsPerPage: this._tableOptions.rowsPerPage
|
|
257
259
|
});
|
|
258
|
-
//
|
|
260
|
+
// Convert columns to ColumnDef[]
|
|
259
261
|
const columnDefs = df.columns.map(col => ({
|
|
260
262
|
key: col,
|
|
261
263
|
label: col
|
|
262
264
|
}));
|
|
263
265
|
table.columns(columnDefs).rows(df.toRows());
|
|
264
|
-
//
|
|
265
|
-
|
|
266
|
+
// ✅ Find the tab panel (it exists now because tabs.render() was called)
|
|
267
|
+
const tabPanel = document.getElementById(`${this._id}-tabs-${sheetName}-panel`);
|
|
268
|
+
if (!tabPanel) {
|
|
269
|
+
console.error(`Tab panel not found: ${this._id}-tabs-${sheetName}-panel`);
|
|
270
|
+
return;
|
|
271
|
+
}
|
|
272
|
+
// ✅ Render table directly into tab panel
|
|
273
|
+
table.render(tabPanel);
|
|
266
274
|
// Add filter if enabled
|
|
267
275
|
if (this._tableOptions.filterable) {
|
|
268
276
|
const filterContainer = document.createElement('div');
|
|
@@ -290,13 +298,10 @@ export class DataFrameComponent extends BaseComponent {
|
|
|
290
298
|
});
|
|
291
299
|
table.rows(filtered.toRows());
|
|
292
300
|
});
|
|
293
|
-
// Insert filter
|
|
294
|
-
const
|
|
295
|
-
if (
|
|
296
|
-
|
|
297
|
-
if (tableWrapper) {
|
|
298
|
-
tabPanel.insertBefore(filterContainer, tableWrapper);
|
|
299
|
-
}
|
|
301
|
+
// ✅ Insert filter BEFORE the table wrapper (which exists now)
|
|
302
|
+
const tableWrapper = tabPanel.querySelector('.jux-table-wrapper');
|
|
303
|
+
if (tableWrapper) {
|
|
304
|
+
tabPanel.insertBefore(filterContainer, tableWrapper);
|
|
300
305
|
}
|
|
301
306
|
}
|
|
302
307
|
});
|
|
@@ -305,7 +310,6 @@ export class DataFrameComponent extends BaseComponent {
|
|
|
305
310
|
this._updateStatus(`${sourceName} — ${sheetNames.length} sheets, ${totalRows} total rows`, 'success');
|
|
306
311
|
// Set first sheet as active DataFrame
|
|
307
312
|
this._df = sheets[sheetNames[0]];
|
|
308
|
-
this._table = tabs._tabsWrapper?.querySelector(`#${this._id}-table-${sheetNames[0]}`);
|
|
309
313
|
this._triggerCallback('load', this._df, null, this);
|
|
310
314
|
}
|
|
311
315
|
/* ═══════════════════════════════════════════════════
|
|
@@ -262,7 +262,7 @@ export class DataFrameComponent extends BaseComponent<DataFrameState> {
|
|
|
262
262
|
* ═══════════════════════════════════════════════════ */
|
|
263
263
|
|
|
264
264
|
/**
|
|
265
|
-
* ✅
|
|
265
|
+
* ✅ FIXED: Render multiple Excel sheets as tabs
|
|
266
266
|
*/
|
|
267
267
|
private _renderMultiSheet(sheets: Record<string, DataFrame>, sourceName: string): void {
|
|
268
268
|
this.state.loading = false;
|
|
@@ -280,28 +280,33 @@ export class DataFrameComponent extends BaseComponent<DataFrameState> {
|
|
|
280
280
|
this._sheets.set(name, df);
|
|
281
281
|
});
|
|
282
282
|
|
|
283
|
-
// Create tabs
|
|
284
283
|
const sheetNames = Object.keys(sheets);
|
|
284
|
+
|
|
285
|
+
// ✅ FIX: Create tabs with EMPTY content first (just placeholders)
|
|
285
286
|
const tabs = new Tabs(`${this._id}-tabs`, {
|
|
286
287
|
tabs: sheetNames.map(name => ({
|
|
287
288
|
id: name,
|
|
288
289
|
label: name,
|
|
289
|
-
content: '' //
|
|
290
|
+
content: '' // Empty - we'll fill after render
|
|
290
291
|
})),
|
|
291
292
|
activeTab: sheetNames[0]
|
|
292
293
|
});
|
|
293
294
|
|
|
294
295
|
this._tabs = tabs;
|
|
295
296
|
|
|
296
|
-
// Render tabs
|
|
297
|
+
// Render tabs container
|
|
297
298
|
const tabsContainer = document.createElement('div');
|
|
298
299
|
tabsContainer.className = 'jux-dataframe-tabs';
|
|
299
300
|
wrapper.appendChild(tabsContainer);
|
|
301
|
+
|
|
302
|
+
// ✅ Render tabs NOW (creates all tab panels in DOM)
|
|
300
303
|
tabs.render(tabsContainer);
|
|
301
304
|
|
|
302
|
-
//
|
|
305
|
+
// ✅ NOW populate each tab with its DataFrame table (panels exist now)
|
|
303
306
|
sheetNames.forEach(sheetName => {
|
|
304
307
|
const df = sheets[sheetName];
|
|
308
|
+
|
|
309
|
+
// Create table
|
|
305
310
|
const table = new Table(`${this._id}-table-${sheetName}`, {
|
|
306
311
|
striped: this._tableOptions.striped,
|
|
307
312
|
hoverable: this._tableOptions.hoverable,
|
|
@@ -311,7 +316,7 @@ export class DataFrameComponent extends BaseComponent<DataFrameState> {
|
|
|
311
316
|
rowsPerPage: this._tableOptions.rowsPerPage
|
|
312
317
|
});
|
|
313
318
|
|
|
314
|
-
//
|
|
319
|
+
// Convert columns to ColumnDef[]
|
|
315
320
|
const columnDefs = df.columns.map(col => ({
|
|
316
321
|
key: col,
|
|
317
322
|
label: col
|
|
@@ -319,8 +324,15 @@ export class DataFrameComponent extends BaseComponent<DataFrameState> {
|
|
|
319
324
|
|
|
320
325
|
table.columns(columnDefs).rows(df.toRows());
|
|
321
326
|
|
|
322
|
-
//
|
|
323
|
-
|
|
327
|
+
// ✅ Find the tab panel (it exists now because tabs.render() was called)
|
|
328
|
+
const tabPanel = document.getElementById(`${this._id}-tabs-${sheetName}-panel`);
|
|
329
|
+
if (!tabPanel) {
|
|
330
|
+
console.error(`Tab panel not found: ${this._id}-tabs-${sheetName}-panel`);
|
|
331
|
+
return;
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
// ✅ Render table directly into tab panel
|
|
335
|
+
table.render(tabPanel);
|
|
324
336
|
|
|
325
337
|
// Add filter if enabled
|
|
326
338
|
if (this._tableOptions.filterable) {
|
|
@@ -357,13 +369,10 @@ export class DataFrameComponent extends BaseComponent<DataFrameState> {
|
|
|
357
369
|
table.rows(filtered.toRows());
|
|
358
370
|
});
|
|
359
371
|
|
|
360
|
-
// Insert filter
|
|
361
|
-
const
|
|
362
|
-
if (
|
|
363
|
-
|
|
364
|
-
if (tableWrapper) {
|
|
365
|
-
tabPanel.insertBefore(filterContainer, tableWrapper);
|
|
366
|
-
}
|
|
372
|
+
// ✅ Insert filter BEFORE the table wrapper (which exists now)
|
|
373
|
+
const tableWrapper = tabPanel.querySelector('.jux-table-wrapper');
|
|
374
|
+
if (tableWrapper) {
|
|
375
|
+
tabPanel.insertBefore(filterContainer, tableWrapper);
|
|
367
376
|
}
|
|
368
377
|
}
|
|
369
378
|
});
|
|
@@ -377,7 +386,6 @@ export class DataFrameComponent extends BaseComponent<DataFrameState> {
|
|
|
377
386
|
|
|
378
387
|
// Set first sheet as active DataFrame
|
|
379
388
|
this._df = sheets[sheetNames[0]];
|
|
380
|
-
this._table = (tabs as any)._tabsWrapper?.querySelector(`#${this._id}-table-${sheetNames[0]}`);
|
|
381
389
|
|
|
382
390
|
this._triggerCallback('load', this._df, null, this);
|
|
383
391
|
}
|
package/lib/styles/shadcn.css
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap');
|
|
2
2
|
|
|
3
3
|
/* ═══════════════════════════════════════════════════════════════════
|
|
4
|
-
* DESIGN TOKENS
|
|
4
|
+
* DESIGN TOKENS
|
|
5
5
|
* ═══════════════════════════════════════════════════════════════════ */
|
|
6
6
|
|
|
7
7
|
:root {
|
|
8
|
-
/* Base colors */
|
|
9
8
|
--background: 0 0% 100%;
|
|
10
9
|
--foreground: 0 0% 3.9%;
|
|
11
10
|
--muted: 0 0% 96.1%;
|
|
@@ -13,27 +12,19 @@
|
|
|
13
12
|
--border: 0 0% 89.8%;
|
|
14
13
|
--input: 0 0% 89.8%;
|
|
15
14
|
--ring: 0 0% 3.9%;
|
|
16
|
-
|
|
17
|
-
/* Accent colors */
|
|
18
15
|
--primary: 0 0% 9%;
|
|
19
16
|
--primary-foreground: 0 0% 98%;
|
|
20
17
|
--secondary: 0 0% 96.1%;
|
|
21
18
|
--secondary-foreground: 0 0% 9%;
|
|
22
19
|
--accent: 0 0% 96.1%;
|
|
23
20
|
--accent-foreground: 0 0% 9%;
|
|
24
|
-
|
|
25
|
-
/* Semantic colors */
|
|
26
21
|
--destructive: 0 84.2% 60.2%;
|
|
27
22
|
--destructive-foreground: 0 0% 98%;
|
|
28
23
|
--success: 142 71% 45%;
|
|
29
24
|
--success-foreground: 0 0% 98%;
|
|
30
25
|
--warning: 48 96% 53%;
|
|
31
26
|
--warning-foreground: 0 0% 9%;
|
|
32
|
-
|
|
33
|
-
/* Sizes */
|
|
34
|
-
--radius: 0.375rem;
|
|
35
|
-
|
|
36
|
-
/* Font */
|
|
27
|
+
--radius: 0.5rem;
|
|
37
28
|
font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
|
|
38
29
|
}
|
|
39
30
|
|
|
@@ -54,13 +45,12 @@
|
|
|
54
45
|
}
|
|
55
46
|
|
|
56
47
|
/* ═══════════════════════════════════════════════════════════════════
|
|
57
|
-
* BASE
|
|
48
|
+
* BASE INPUTS
|
|
58
49
|
* ═══════════════════════════════════════════════════════════════════ */
|
|
59
50
|
|
|
60
51
|
.jux-input-element,
|
|
61
52
|
.jux-table-filter,
|
|
62
53
|
.jux-dataframe-filter-input {
|
|
63
|
-
display: flex;
|
|
64
54
|
height: 2.5rem;
|
|
65
55
|
width: 100%;
|
|
66
56
|
border-radius: var(--radius);
|
|
@@ -70,8 +60,7 @@
|
|
|
70
60
|
font-size: 0.875rem;
|
|
71
61
|
color: hsl(var(--foreground));
|
|
72
62
|
outline: none !important;
|
|
73
|
-
transition:
|
|
74
|
-
box-sizing: border-box;
|
|
63
|
+
transition: border-color 0.2s, box-shadow 0.2s;
|
|
75
64
|
}
|
|
76
65
|
|
|
77
66
|
.jux-input-element::placeholder,
|
|
@@ -83,25 +72,18 @@
|
|
|
83
72
|
.jux-input-element:focus,
|
|
84
73
|
.jux-table-filter:focus,
|
|
85
74
|
.jux-dataframe-filter-input:focus {
|
|
86
|
-
|
|
87
|
-
box-shadow: 0 0 0
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
.jux-input-element:disabled {
|
|
91
|
-
cursor: not-allowed;
|
|
92
|
-
opacity: 0.5;
|
|
75
|
+
border-color: hsl(var(--ring));
|
|
76
|
+
box-shadow: 0 0 0 3px hsl(var(--ring) / 0.1);
|
|
93
77
|
}
|
|
94
78
|
|
|
95
79
|
/* ═══════════════════════════════════════════════════════════════════
|
|
96
|
-
*
|
|
80
|
+
* BUTTONS
|
|
97
81
|
* ═══════════════════════════════════════════════════════════════════ */
|
|
98
82
|
|
|
99
83
|
.jux-button,
|
|
100
84
|
.jux-modal-action,
|
|
101
85
|
.jux-table-pagination button,
|
|
102
|
-
.jux-fileupload-button
|
|
103
|
-
.jux-dropdown-trigger,
|
|
104
|
-
.jux-dmenu-trigger {
|
|
86
|
+
.jux-fileupload-button {
|
|
105
87
|
display: inline-flex;
|
|
106
88
|
align-items: center;
|
|
107
89
|
justify-content: center;
|
|
@@ -112,37 +94,24 @@
|
|
|
112
94
|
height: 2.5rem;
|
|
113
95
|
padding: 0 1rem;
|
|
114
96
|
cursor: pointer;
|
|
115
|
-
transition: all 0.
|
|
116
|
-
border:
|
|
97
|
+
transition: all 0.2s;
|
|
98
|
+
border: none;
|
|
117
99
|
background: hsl(var(--primary));
|
|
118
100
|
color: hsl(var(--primary-foreground));
|
|
119
101
|
}
|
|
120
102
|
|
|
121
103
|
.jux-button:hover,
|
|
122
|
-
.jux-
|
|
123
|
-
.jux-table-pagination button:hover:not(:disabled),
|
|
124
|
-
.jux-fileupload-button:hover,
|
|
125
|
-
.jux-dropdown-trigger:hover,
|
|
126
|
-
.jux-dmenu-trigger:hover {
|
|
104
|
+
.jux-table-pagination button:hover:not(:disabled) {
|
|
127
105
|
opacity: 0.9;
|
|
128
106
|
}
|
|
129
107
|
|
|
130
|
-
.jux-button:focus-visible,
|
|
131
|
-
.jux-modal-action:focus-visible,
|
|
132
|
-
.jux-fileupload-button:focus-visible {
|
|
133
|
-
outline: 2px solid hsl(var(--ring));
|
|
134
|
-
outline-offset: 2px;
|
|
135
|
-
}
|
|
136
|
-
|
|
137
108
|
.jux-button:disabled,
|
|
138
109
|
.jux-table-pagination button:disabled {
|
|
139
110
|
pointer-events: none;
|
|
140
111
|
opacity: 0.5;
|
|
141
112
|
}
|
|
142
113
|
|
|
143
|
-
/* Button variants */
|
|
144
114
|
.jux-button-outline,
|
|
145
|
-
.jux-modal-action-secondary,
|
|
146
115
|
.jux-fileupload-button {
|
|
147
116
|
border: 1px solid hsl(var(--input));
|
|
148
117
|
background: hsl(var(--background));
|
|
@@ -150,101 +119,75 @@
|
|
|
150
119
|
}
|
|
151
120
|
|
|
152
121
|
.jux-button-outline:hover,
|
|
153
|
-
.jux-modal-action-secondary:hover,
|
|
154
122
|
.jux-fileupload-button:hover {
|
|
155
123
|
background: hsl(var(--accent));
|
|
156
124
|
}
|
|
157
125
|
|
|
158
|
-
.jux-button-ghost
|
|
159
|
-
.jux-modal-action-ghost {
|
|
126
|
+
.jux-button-ghost {
|
|
160
127
|
background: transparent;
|
|
161
128
|
color: hsl(var(--foreground));
|
|
162
|
-
border: none;
|
|
163
129
|
}
|
|
164
130
|
|
|
165
|
-
.jux-button-ghost:hover
|
|
166
|
-
.jux-modal-action-ghost:hover {
|
|
131
|
+
.jux-button-ghost:hover {
|
|
167
132
|
background: hsl(var(--accent));
|
|
168
133
|
}
|
|
169
134
|
|
|
170
|
-
.jux-button-destructive,
|
|
171
|
-
.jux-modal-action-destructive {
|
|
172
|
-
background: hsl(var(--destructive));
|
|
173
|
-
color: hsl(var(--destructive-foreground));
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
.jux-button-destructive:hover,
|
|
177
|
-
.jux-modal-action-destructive:hover {
|
|
178
|
-
opacity: 0.9;
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
/* Button sizes */
|
|
182
|
-
.jux-button-sm { height: 2.25rem; padding: 0 0.875rem; font-size: 0.8125rem; }
|
|
183
|
-
.jux-button-lg { height: 2.75rem; padding: 0 1.25rem; font-size: 0.9375rem; }
|
|
184
|
-
.jux-button-xl { height: 3rem; padding: 0 1.5rem; font-size: 1rem; font-weight: 600; }
|
|
185
|
-
|
|
186
135
|
/* ═══════════════════════════════════════════════════════════════════
|
|
187
|
-
* TYPOGRAPHY
|
|
136
|
+
* TYPOGRAPHY
|
|
188
137
|
* ═══════════════════════════════════════════════════════════════════ */
|
|
189
138
|
|
|
190
|
-
h1, h2, h3, h4, h5, h6
|
|
191
|
-
.jux-heading-1, .jux-heading-2, .jux-heading-3, .jux-heading-4, .jux-heading-5, .jux-heading-6 {
|
|
192
|
-
scroll-margin: 5rem;
|
|
139
|
+
h1, h2, h3, h4, h5, h6 {
|
|
193
140
|
font-weight: 600;
|
|
194
141
|
letter-spacing: -0.025em;
|
|
195
142
|
color: hsl(var(--foreground));
|
|
196
143
|
}
|
|
197
144
|
|
|
198
|
-
h1
|
|
199
|
-
h2
|
|
200
|
-
h3
|
|
201
|
-
h4
|
|
202
|
-
h5, .jux-heading-5 { font-size: 1.125rem; }
|
|
203
|
-
h6, .jux-heading-6 { font-size: 1rem; }
|
|
145
|
+
h1 { font-size: 2.25rem; font-weight: 800; }
|
|
146
|
+
h2 { font-size: 1.875rem; padding-bottom: 0.5rem; border-bottom: 1px solid hsl(var(--border)); }
|
|
147
|
+
h3 { font-size: 1.5rem; }
|
|
148
|
+
h4 { font-size: 1.25rem; }
|
|
204
149
|
|
|
205
|
-
p
|
|
206
|
-
p:not(:first-child) { margin-top: 1.5rem; }
|
|
207
|
-
|
|
208
|
-
.jux-muted { font-size: 0.875rem; color: hsl(var(--muted-foreground)); }
|
|
150
|
+
p { line-height: 1.75; color: hsl(var(--foreground)); }
|
|
209
151
|
|
|
210
152
|
/* ═══════════════════════════════════════════════════════════════════
|
|
211
|
-
* DATAFRAME
|
|
153
|
+
* DATAFRAME
|
|
212
154
|
* ═══════════════════════════════════════════════════════════════════ */
|
|
213
155
|
|
|
214
156
|
.jux-dataframe {
|
|
215
157
|
display: flex;
|
|
216
158
|
flex-direction: column;
|
|
217
|
-
gap:
|
|
159
|
+
gap: 1rem;
|
|
218
160
|
width: 100%;
|
|
219
161
|
}
|
|
220
162
|
|
|
221
163
|
.jux-dataframe-status {
|
|
222
164
|
display: flex;
|
|
223
165
|
align-items: center;
|
|
224
|
-
|
|
225
|
-
|
|
166
|
+
gap: 0.5rem;
|
|
167
|
+
padding: 0.75rem 1rem;
|
|
168
|
+
font-size: 0.875rem;
|
|
226
169
|
font-weight: 500;
|
|
227
170
|
border-radius: var(--radius);
|
|
228
171
|
border: 1px solid hsl(var(--border));
|
|
229
|
-
background: hsl(var(--muted));
|
|
172
|
+
background: hsl(var(--muted) / 0.5);
|
|
230
173
|
color: hsl(var(--muted-foreground));
|
|
231
174
|
}
|
|
232
175
|
|
|
233
176
|
.jux-dataframe-status-success {
|
|
234
177
|
background: hsl(var(--success) / 0.1);
|
|
235
|
-
border-color: hsl(var(--success) / 0.
|
|
178
|
+
border-color: hsl(var(--success) / 0.2);
|
|
236
179
|
color: hsl(var(--success));
|
|
237
180
|
}
|
|
238
181
|
|
|
239
182
|
.jux-dataframe-status-loading {
|
|
240
183
|
background: hsl(var(--warning) / 0.1);
|
|
241
|
-
border-color: hsl(var(--warning) / 0.
|
|
184
|
+
border-color: hsl(var(--warning) / 0.2);
|
|
242
185
|
color: hsl(var(--warning));
|
|
243
186
|
}
|
|
244
187
|
|
|
245
188
|
.jux-dataframe-status-error {
|
|
246
189
|
background: hsl(var(--destructive) / 0.1);
|
|
247
|
-
border-color: hsl(var(--destructive) / 0.
|
|
190
|
+
border-color: hsl(var(--destructive) / 0.2);
|
|
248
191
|
color: hsl(var(--destructive));
|
|
249
192
|
}
|
|
250
193
|
|
|
@@ -252,7 +195,6 @@ p:not(:first-child) { margin-top: 1.5rem; }
|
|
|
252
195
|
position: relative;
|
|
253
196
|
display: flex;
|
|
254
197
|
align-items: center;
|
|
255
|
-
width: 100%;
|
|
256
198
|
margin-bottom: 0.75rem;
|
|
257
199
|
}
|
|
258
200
|
|
|
@@ -263,316 +205,220 @@ p:not(:first-child) { margin-top: 1.5rem; }
|
|
|
263
205
|
transform: translateY(-50%);
|
|
264
206
|
color: hsl(var(--muted-foreground));
|
|
265
207
|
pointer-events: none;
|
|
266
|
-
display: flex;
|
|
267
|
-
align-items: center;
|
|
268
208
|
z-index: 1;
|
|
269
209
|
}
|
|
270
210
|
|
|
271
211
|
.jux-dataframe-filter-input {
|
|
272
|
-
padding-left: 2.
|
|
212
|
+
padding-left: 2.5rem !important;
|
|
273
213
|
}
|
|
274
214
|
|
|
275
215
|
/* ═══════════════════════════════════════════════════════════════════
|
|
276
|
-
*
|
|
216
|
+
* TABS
|
|
277
217
|
* ═══════════════════════════════════════════════════════════════════ */
|
|
278
218
|
|
|
279
|
-
.jux-
|
|
219
|
+
.jux-tabs {
|
|
220
|
+
width: 100%;
|
|
221
|
+
}
|
|
280
222
|
|
|
281
|
-
.jux-
|
|
282
|
-
display: flex;
|
|
223
|
+
.jux-tabs-list {
|
|
224
|
+
display: inline-flex;
|
|
225
|
+
height: 2.5rem;
|
|
283
226
|
align-items: center;
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
background: hsl(var(--muted));
|
|
287
|
-
border: 1px solid hsl(var(--border));
|
|
227
|
+
justify-content: flex-start;
|
|
228
|
+
gap: 0.25rem;
|
|
288
229
|
border-radius: var(--radius);
|
|
289
|
-
|
|
290
|
-
|
|
230
|
+
background: hsl(var(--muted) / 0.3);
|
|
231
|
+
padding: 0.25rem;
|
|
232
|
+
border: 1px solid hsl(var(--border));
|
|
291
233
|
}
|
|
292
234
|
|
|
293
|
-
.jux-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
text-overflow: ellipsis;
|
|
235
|
+
.jux-tabs-button {
|
|
236
|
+
display: inline-flex;
|
|
237
|
+
align-items: center;
|
|
238
|
+
justify-content: center;
|
|
298
239
|
white-space: nowrap;
|
|
240
|
+
border-radius: calc(var(--radius) - 0.125rem);
|
|
241
|
+
padding: 0.5rem 1rem;
|
|
242
|
+
font-size: 0.875rem;
|
|
243
|
+
font-weight: 500;
|
|
244
|
+
color: hsl(var(--muted-foreground));
|
|
245
|
+
cursor: pointer;
|
|
246
|
+
border: none;
|
|
247
|
+
background: transparent;
|
|
248
|
+
transition: all 0.2s;
|
|
299
249
|
}
|
|
300
250
|
|
|
301
|
-
.jux-
|
|
302
|
-
|
|
303
|
-
|
|
251
|
+
.jux-tabs-button:hover {
|
|
252
|
+
background: hsl(var(--muted) / 0.5);
|
|
253
|
+
color: hsl(var(--foreground));
|
|
304
254
|
}
|
|
305
255
|
|
|
306
|
-
.jux-
|
|
307
|
-
background:
|
|
256
|
+
.jux-tabs-button-active {
|
|
257
|
+
background: hsl(var(--background));
|
|
258
|
+
color: hsl(var(--foreground));
|
|
259
|
+
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
|
|
260
|
+
font-weight: 600;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
.jux-tabs-panel {
|
|
264
|
+
margin-top: 1rem;
|
|
265
|
+
border-radius: var(--radius);
|
|
266
|
+
border: 1px solid hsl(var(--border));
|
|
267
|
+
background: hsl(var(--background));
|
|
268
|
+
padding: 0;
|
|
269
|
+
overflow: hidden;
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
/* ✅ Remove inner padding/border from tables inside tabs */
|
|
273
|
+
.jux-tabs-panel .jux-table-wrapper {
|
|
308
274
|
border: none;
|
|
309
|
-
|
|
310
|
-
cursor: pointer;
|
|
311
|
-
padding: 0 0.25rem;
|
|
312
|
-
border-radius: 0.25rem;
|
|
313
|
-
transition: all 0.15s;
|
|
275
|
+
border-radius: 0;
|
|
314
276
|
}
|
|
315
277
|
|
|
316
|
-
.jux-
|
|
317
|
-
|
|
318
|
-
|
|
278
|
+
.jux-tabs-panel .jux-dataframe-filter {
|
|
279
|
+
padding: 1rem 1rem 0;
|
|
280
|
+
margin-bottom: 0.75rem;
|
|
319
281
|
}
|
|
320
282
|
|
|
321
283
|
/* ═══════════════════════════════════════════════════════════════════
|
|
322
284
|
* TABLE
|
|
323
285
|
* ═══════════════════════════════════════════════════════════════════ */
|
|
324
286
|
|
|
325
|
-
.jux-table-wrapper {
|
|
287
|
+
.jux-table-wrapper {
|
|
288
|
+
width: 100%;
|
|
289
|
+
overflow-x: auto;
|
|
290
|
+
border-radius: var(--radius);
|
|
291
|
+
border: 1px solid hsl(var(--border));
|
|
292
|
+
background: hsl(var(--background));
|
|
293
|
+
}
|
|
326
294
|
|
|
327
295
|
.jux-table {
|
|
328
296
|
width: 100%;
|
|
329
297
|
border-collapse: collapse;
|
|
330
298
|
}
|
|
331
299
|
|
|
332
|
-
.jux-table thead tr {
|
|
333
|
-
|
|
334
|
-
|
|
300
|
+
.jux-table thead tr {
|
|
301
|
+
border-bottom: 1px solid hsl(var(--border));
|
|
302
|
+
background: hsl(var(--muted) / 0.3);
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
.jux-table tbody tr {
|
|
306
|
+
border-bottom: 1px solid hsl(var(--border));
|
|
307
|
+
transition: background-color 0.15s;
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
.jux-table tbody tr:last-child {
|
|
311
|
+
border-bottom: none;
|
|
312
|
+
}
|
|
335
313
|
|
|
336
314
|
.jux-table th,
|
|
337
315
|
.jux-table td {
|
|
338
|
-
|
|
339
|
-
padding: 0.5rem 1rem;
|
|
316
|
+
padding: 0.75rem 1rem;
|
|
340
317
|
text-align: left;
|
|
318
|
+
border: none;
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
.jux-table th {
|
|
322
|
+
font-weight: 600;
|
|
323
|
+
font-size: 0.875rem;
|
|
324
|
+
color: hsl(var(--foreground));
|
|
341
325
|
}
|
|
342
326
|
|
|
343
|
-
.jux-table
|
|
327
|
+
.jux-table td {
|
|
328
|
+
font-size: 0.875rem;
|
|
329
|
+
color: hsl(var(--foreground));
|
|
330
|
+
}
|
|
344
331
|
|
|
345
|
-
.jux-table-
|
|
346
|
-
|
|
332
|
+
.jux-table-striped tbody tr:nth-child(even) {
|
|
333
|
+
background: hsl(var(--muted) / 0.2);
|
|
347
334
|
}
|
|
348
335
|
|
|
349
336
|
.jux-table-hoverable tbody tr:hover {
|
|
350
|
-
background: hsl(var(--
|
|
337
|
+
background: hsl(var(--muted) / 0.5);
|
|
351
338
|
}
|
|
352
339
|
|
|
353
340
|
.jux-table-pagination {
|
|
354
|
-
margin-top:
|
|
341
|
+
margin-top: 1rem;
|
|
342
|
+
padding: 0.75rem 1rem;
|
|
355
343
|
display: flex;
|
|
356
|
-
gap: 0.
|
|
344
|
+
gap: 0.5rem;
|
|
357
345
|
justify-content: center;
|
|
358
346
|
align-items: center;
|
|
359
|
-
|
|
347
|
+
border-top: 1px solid hsl(var(--border));
|
|
348
|
+
background: hsl(var(--muted) / 0.2);
|
|
360
349
|
}
|
|
361
350
|
|
|
362
351
|
.jux-table-pagination span {
|
|
363
352
|
font-size: 0.875rem;
|
|
364
|
-
color: hsl(var(--
|
|
365
|
-
|
|
353
|
+
color: hsl(var(--foreground));
|
|
354
|
+
font-weight: 500;
|
|
366
355
|
}
|
|
367
356
|
|
|
368
357
|
/* ═══════════════════════════════════════════════════════════════════
|
|
369
|
-
*
|
|
358
|
+
* FILE UPLOAD
|
|
370
359
|
* ═══════════════════════════════════════════════════════════════════ */
|
|
371
360
|
|
|
372
|
-
.jux-
|
|
373
|
-
position: fixed;
|
|
374
|
-
inset: 0;
|
|
375
|
-
z-index: 50;
|
|
376
|
-
background: rgba(0, 0, 0, 0.8);
|
|
377
|
-
backdrop-filter: blur(2px);
|
|
361
|
+
.jux-fileupload-item {
|
|
378
362
|
display: flex;
|
|
379
363
|
align-items: center;
|
|
380
|
-
justify-content: center;
|
|
381
|
-
}
|
|
382
|
-
|
|
383
|
-
.jux-modal {
|
|
384
|
-
position: relative;
|
|
385
|
-
background: hsl(var(--background));
|
|
386
|
-
border: 1px solid hsl(var(--border));
|
|
387
|
-
border-radius: 0.5rem;
|
|
388
|
-
box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1);
|
|
389
|
-
width: 100%;
|
|
390
|
-
max-width: 32rem;
|
|
391
|
-
z-index: 51;
|
|
392
|
-
display: flex;
|
|
393
|
-
flex-direction: column;
|
|
394
|
-
gap: 1rem;
|
|
395
|
-
padding: 1.5rem;
|
|
396
|
-
}
|
|
397
|
-
|
|
398
|
-
.jux-modal-header {
|
|
399
|
-
display: flex;
|
|
400
|
-
align-items: flex-start;
|
|
401
364
|
gap: 0.75rem;
|
|
365
|
+
padding: 0.75rem 1rem;
|
|
366
|
+
background: hsl(var(--muted) / 0.3);
|
|
367
|
+
border: 1px solid hsl(var(--border));
|
|
368
|
+
border-radius: var(--radius);
|
|
369
|
+
font-size: 0.875rem;
|
|
402
370
|
}
|
|
403
371
|
|
|
404
|
-
.jux-
|
|
372
|
+
.jux-fileupload-filename {
|
|
405
373
|
flex: 1;
|
|
406
|
-
font-
|
|
407
|
-
font-weight: 600;
|
|
374
|
+
font-weight: 500;
|
|
408
375
|
color: hsl(var(--foreground));
|
|
376
|
+
overflow: hidden;
|
|
377
|
+
text-overflow: ellipsis;
|
|
378
|
+
white-space: nowrap;
|
|
409
379
|
}
|
|
410
380
|
|
|
411
|
-
.jux-
|
|
412
|
-
font-size: 0.875rem;
|
|
381
|
+
.jux-fileupload-filesize {
|
|
413
382
|
color: hsl(var(--muted-foreground));
|
|
414
|
-
|
|
415
|
-
}
|
|
416
|
-
|
|
417
|
-
.jux-modal-footer {
|
|
418
|
-
display: flex;
|
|
419
|
-
justify-content: flex-end;
|
|
420
|
-
gap: 0.5rem;
|
|
383
|
+
font-size: 0.8125rem;
|
|
421
384
|
}
|
|
422
385
|
|
|
423
|
-
.jux-
|
|
424
|
-
position: absolute;
|
|
425
|
-
top: 1rem;
|
|
426
|
-
right: 1rem;
|
|
386
|
+
.jux-fileupload-remove {
|
|
427
387
|
background: transparent;
|
|
428
388
|
border: none;
|
|
429
|
-
cursor: pointer;
|
|
430
|
-
color: hsl(var(--muted-foreground));
|
|
431
|
-
padding: 0.25rem;
|
|
432
|
-
}
|
|
433
|
-
|
|
434
|
-
.jux-modal-close:hover {
|
|
435
|
-
color: hsl(var(--foreground));
|
|
436
|
-
}
|
|
437
|
-
|
|
438
|
-
/* ═══════════════════════════════════════════════════════════════════
|
|
439
|
-
* TABS
|
|
440
|
-
* ═══════════════════════════════════════════════════════════════════ */
|
|
441
|
-
|
|
442
|
-
.jux-tabs-list {
|
|
443
|
-
display: inline-flex;
|
|
444
|
-
height: 40px;
|
|
445
|
-
align-items: center;
|
|
446
|
-
justify-content: center;
|
|
447
|
-
border-radius: var(--radius);
|
|
448
|
-
background: hsl(var(--muted));
|
|
449
|
-
padding: 0.25rem;
|
|
450
|
-
}
|
|
451
|
-
|
|
452
|
-
.jux-tabs-button {
|
|
453
|
-
display: inline-flex;
|
|
454
|
-
align-items: center;
|
|
455
|
-
justify-content: center;
|
|
456
|
-
white-space: nowrap;
|
|
457
|
-
border-radius: calc(var(--radius) - 2px);
|
|
458
|
-
padding: 0.375rem 0.75rem;
|
|
459
|
-
font-size: 0.875rem;
|
|
460
|
-
font-weight: 500;
|
|
461
389
|
color: hsl(var(--muted-foreground));
|
|
462
390
|
cursor: pointer;
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
transition: all 0.
|
|
466
|
-
}
|
|
467
|
-
|
|
468
|
-
.jux-tabs-button-active {
|
|
469
|
-
background: hsl(var(--background));
|
|
470
|
-
color: hsl(var(--foreground));
|
|
471
|
-
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
|
|
391
|
+
padding: 0.25rem;
|
|
392
|
+
border-radius: 0.25rem;
|
|
393
|
+
transition: all 0.2s;
|
|
472
394
|
}
|
|
473
395
|
|
|
474
|
-
.jux-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
border: 1px solid hsl(var(--border));
|
|
478
|
-
padding: 1.5rem;
|
|
396
|
+
.jux-fileupload-remove:hover {
|
|
397
|
+
color: hsl(var(--destructive));
|
|
398
|
+
background: hsl(var(--destructive) / 0.1);
|
|
479
399
|
}
|
|
480
400
|
|
|
481
401
|
/* ═══════════════════════════════════════════════════════════════════
|
|
482
|
-
*
|
|
402
|
+
* UTILITIES
|
|
483
403
|
* ═══════════════════════════════════════════════════════════════════ */
|
|
484
404
|
|
|
485
|
-
.jux-
|
|
486
|
-
border-radius: 0.5rem;
|
|
487
|
-
border: 1px solid hsl(var(--border));
|
|
488
|
-
background: hsl(var(--background));
|
|
489
|
-
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
|
|
490
|
-
overflow: hidden;
|
|
491
|
-
}
|
|
492
|
-
|
|
493
|
-
.jux-card-header {
|
|
494
|
-
display: flex;
|
|
495
|
-
align-items: center;
|
|
496
|
-
gap: 0.75rem;
|
|
497
|
-
padding: 1.5rem;
|
|
498
|
-
background: hsl(var(--muted) / 0.5);
|
|
499
|
-
border-bottom: 1px solid hsl(var(--border));
|
|
500
|
-
}
|
|
501
|
-
|
|
502
|
-
.jux-card-title {
|
|
503
|
-
flex: 1;
|
|
504
|
-
font-size: 1.125rem;
|
|
505
|
-
font-weight: 600;
|
|
506
|
-
color: hsl(var(--foreground));
|
|
507
|
-
}
|
|
508
|
-
|
|
509
|
-
.jux-card-body {
|
|
510
|
-
padding: 1.5rem;
|
|
405
|
+
.jux-muted {
|
|
511
406
|
font-size: 0.875rem;
|
|
512
407
|
color: hsl(var(--muted-foreground));
|
|
513
408
|
}
|
|
514
409
|
|
|
515
|
-
|
|
516
|
-
* DROPDOWN MENU
|
|
517
|
-
* ═══════════════════════════════════════════════════════════════════ */
|
|
518
|
-
|
|
519
|
-
.jux-dmenu-wrapper { position: relative; display: inline-block; }
|
|
520
|
-
|
|
521
|
-
.jux-dmenu-menu {
|
|
522
|
-
position: absolute;
|
|
523
|
-
top: calc(100% + 4px);
|
|
524
|
-
left: 0;
|
|
525
|
-
min-width: 220px;
|
|
526
|
-
padding: 4px;
|
|
527
|
-
border-radius: 0.5rem;
|
|
528
|
-
border: 1px solid hsl(var(--border));
|
|
529
|
-
background: hsl(var(--background));
|
|
530
|
-
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
|
|
531
|
-
z-index: 100;
|
|
532
|
-
display: none;
|
|
533
|
-
flex-direction: column;
|
|
534
|
-
}
|
|
535
|
-
|
|
536
|
-
.jux-dmenu-item {
|
|
537
|
-
display: flex;
|
|
538
|
-
align-items: center;
|
|
539
|
-
justify-content: space-between;
|
|
540
|
-
width: 100%;
|
|
541
|
-
padding: 6px 8px;
|
|
542
|
-
font-size: 0.875rem;
|
|
543
|
-
border-radius: 4px;
|
|
544
|
-
border: none;
|
|
545
|
-
background: transparent;
|
|
546
|
-
color: hsl(var(--foreground));
|
|
547
|
-
cursor: pointer;
|
|
548
|
-
transition: background 0.1s;
|
|
549
|
-
}
|
|
550
|
-
|
|
551
|
-
.jux-dmenu-item:hover {
|
|
552
|
-
background: hsl(var(--accent));
|
|
553
|
-
}
|
|
554
|
-
|
|
555
|
-
.jux-dmenu-sep {
|
|
556
|
-
height: 1px;
|
|
557
|
-
margin: 4px -4px;
|
|
558
|
-
background: hsl(var(--border));
|
|
559
|
-
}
|
|
560
|
-
|
|
561
|
-
/* ═══════════════════════════════════════════════════════════════════
|
|
562
|
-
* UTILITIES
|
|
563
|
-
* ═══════════════════════════════════════════════════════════════════ */
|
|
564
|
-
|
|
565
|
-
hr, .jux-hr {
|
|
410
|
+
hr {
|
|
566
411
|
margin: 1.5rem 0;
|
|
567
412
|
border: none;
|
|
568
413
|
border-top: 1px solid hsl(var(--border));
|
|
569
414
|
}
|
|
570
415
|
|
|
571
|
-
code
|
|
416
|
+
code {
|
|
572
417
|
border-radius: 0.25rem;
|
|
573
418
|
background: hsl(var(--muted));
|
|
574
|
-
padding: 0.
|
|
419
|
+
padding: 0.2rem 0.4rem;
|
|
575
420
|
font-family: ui-monospace, monospace;
|
|
576
421
|
font-size: 0.875rem;
|
|
577
422
|
font-weight: 600;
|
|
423
|
+
color: hsl(var(--foreground));
|
|
578
424
|
}
|