jupyterlab_tabular_data_viewer_extension 1.5.11 → 1.6.2
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/lib/widget.js +4 -2
- package/package.json +1 -1
- package/src/modal.ts +4 -1
- package/src/widget.ts +23 -12
- package/style/base.css +16 -5
package/lib/widget.js
CHANGED
|
@@ -503,7 +503,7 @@ export class TabularDataViewer extends Widget {
|
|
|
503
503
|
}
|
|
504
504
|
});
|
|
505
505
|
// Add click handler for row selection/highlighting (anywhere on row)
|
|
506
|
-
tr.addEventListener('click',
|
|
506
|
+
tr.addEventListener('click', e => {
|
|
507
507
|
e.stopPropagation();
|
|
508
508
|
// If clicking the already selected row, deselect it
|
|
509
509
|
if (this._selectedRow === tr) {
|
|
@@ -891,7 +891,9 @@ export class TabularDataViewer extends Widget {
|
|
|
891
891
|
params.append('useRegex', String(this._useRegex));
|
|
892
892
|
// Use URLExt to construct proper URL
|
|
893
893
|
const settings = ServerConnection.makeSettings();
|
|
894
|
-
const downloadUrl = URLExt.join(settings.baseUrl, 'jupyterlab-tabular-data-viewer-extension', 'download') +
|
|
894
|
+
const downloadUrl = URLExt.join(settings.baseUrl, 'jupyterlab-tabular-data-viewer-extension', 'download') +
|
|
895
|
+
'?' +
|
|
896
|
+
params.toString();
|
|
895
897
|
// Create temporary link and trigger download
|
|
896
898
|
const link = document.createElement('a');
|
|
897
899
|
link.href = downloadUrl;
|
package/package.json
CHANGED
package/src/modal.ts
CHANGED
|
@@ -574,7 +574,10 @@ export class DownloadModal extends Widget {
|
|
|
574
574
|
/**
|
|
575
575
|
* Create a format button
|
|
576
576
|
*/
|
|
577
|
-
private _createFormatButton(
|
|
577
|
+
private _createFormatButton(
|
|
578
|
+
label: string,
|
|
579
|
+
format: string
|
|
580
|
+
): HTMLButtonElement {
|
|
578
581
|
const btn = document.createElement('button');
|
|
579
582
|
btn.className = 'jp-FilterModal-button';
|
|
580
583
|
btn.textContent = label;
|
package/src/widget.ts
CHANGED
|
@@ -275,8 +275,8 @@ export class TabularDataViewer extends Widget {
|
|
|
275
275
|
* Show download modal dialog
|
|
276
276
|
*/
|
|
277
277
|
public showDownloadModal(): void {
|
|
278
|
-
const modal = new DownloadModal(
|
|
279
|
-
|
|
278
|
+
const modal = new DownloadModal((format: string) =>
|
|
279
|
+
this.downloadFilteredData(format)
|
|
280
280
|
);
|
|
281
281
|
modal.show();
|
|
282
282
|
}
|
|
@@ -416,9 +416,13 @@ export class TabularDataViewer extends Widget {
|
|
|
416
416
|
// Filter input is empty but filter is still active - clear it
|
|
417
417
|
delete this._filters[col.name];
|
|
418
418
|
// Also clear the filter button active state if it's a multi-select filter
|
|
419
|
-
const filterButton = filterInput.parentElement?.querySelector(
|
|
419
|
+
const filterButton = filterInput.parentElement?.querySelector(
|
|
420
|
+
'.jp-TabularDataViewer-filterButton'
|
|
421
|
+
);
|
|
420
422
|
if (filterButton) {
|
|
421
|
-
filterButton.classList.remove(
|
|
423
|
+
filterButton.classList.remove(
|
|
424
|
+
'jp-TabularDataViewer-filterButton-active'
|
|
425
|
+
);
|
|
422
426
|
}
|
|
423
427
|
// Reload data without the filter
|
|
424
428
|
this._loadData(true);
|
|
@@ -593,7 +597,7 @@ export class TabularDataViewer extends Widget {
|
|
|
593
597
|
});
|
|
594
598
|
|
|
595
599
|
// Add click handler for row selection/highlighting (anywhere on row)
|
|
596
|
-
tr.addEventListener('click',
|
|
600
|
+
tr.addEventListener('click', e => {
|
|
597
601
|
e.stopPropagation();
|
|
598
602
|
|
|
599
603
|
// If clicking the already selected row, deselect it
|
|
@@ -603,7 +607,9 @@ export class TabularDataViewer extends Widget {
|
|
|
603
607
|
} else {
|
|
604
608
|
// Remove highlight from previously selected row
|
|
605
609
|
if (this._selectedRow) {
|
|
606
|
-
this._selectedRow.classList.remove(
|
|
610
|
+
this._selectedRow.classList.remove(
|
|
611
|
+
'jp-TabularDataViewer-row-selected'
|
|
612
|
+
);
|
|
607
613
|
}
|
|
608
614
|
|
|
609
615
|
// Highlight the new row
|
|
@@ -1110,7 +1116,9 @@ export class TabularDataViewer extends Widget {
|
|
|
1110
1116
|
* Download filtered and sorted data
|
|
1111
1117
|
* @param format - Download format: 'original', 'xlsx', or 'csv'
|
|
1112
1118
|
*/
|
|
1113
|
-
public async downloadFilteredData(
|
|
1119
|
+
public async downloadFilteredData(
|
|
1120
|
+
format: string = 'original'
|
|
1121
|
+
): Promise<void> {
|
|
1114
1122
|
try {
|
|
1115
1123
|
// Build download URL with current filters and sorting
|
|
1116
1124
|
const params = new URLSearchParams();
|
|
@@ -1134,11 +1142,14 @@ export class TabularDataViewer extends Widget {
|
|
|
1134
1142
|
|
|
1135
1143
|
// Use URLExt to construct proper URL
|
|
1136
1144
|
const settings = ServerConnection.makeSettings();
|
|
1137
|
-
const downloadUrl =
|
|
1138
|
-
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
|
|
1145
|
+
const downloadUrl =
|
|
1146
|
+
URLExt.join(
|
|
1147
|
+
settings.baseUrl,
|
|
1148
|
+
'jupyterlab-tabular-data-viewer-extension',
|
|
1149
|
+
'download'
|
|
1150
|
+
) +
|
|
1151
|
+
'?' +
|
|
1152
|
+
params.toString();
|
|
1142
1153
|
|
|
1143
1154
|
// Create temporary link and trigger download
|
|
1144
1155
|
const link = document.createElement('a');
|
package/style/base.css
CHANGED
|
@@ -163,7 +163,7 @@
|
|
|
163
163
|
|
|
164
164
|
.jp-TabularDataViewer-columnName {
|
|
165
165
|
color: var(--jp-ui-font-color1);
|
|
166
|
-
font-size: calc(var(--jp-ui-font-size1) * 1.
|
|
166
|
+
font-size: calc(var(--jp-ui-font-size1) * 1.1);
|
|
167
167
|
margin-bottom: 2px;
|
|
168
168
|
word-break: break-word;
|
|
169
169
|
}
|
|
@@ -267,15 +267,27 @@
|
|
|
267
267
|
|
|
268
268
|
/* Selected row highlighting */
|
|
269
269
|
.jp-TabularDataViewer-row-selected {
|
|
270
|
-
background-color: color-mix(
|
|
270
|
+
background-color: color-mix(
|
|
271
|
+
in srgb,
|
|
272
|
+
var(--jp-brand-color1) 10%,
|
|
273
|
+
transparent
|
|
274
|
+
) !important;
|
|
271
275
|
}
|
|
272
276
|
|
|
273
277
|
.jp-TabularDataViewer-row-selected .jp-TabularDataViewer-cell {
|
|
274
|
-
background-color: color-mix(
|
|
278
|
+
background-color: color-mix(
|
|
279
|
+
in srgb,
|
|
280
|
+
var(--jp-brand-color1) 10%,
|
|
281
|
+
transparent
|
|
282
|
+
) !important;
|
|
275
283
|
}
|
|
276
284
|
|
|
277
285
|
.jp-TabularDataViewer-row-selected .jp-TabularDataViewer-rowNumberCell {
|
|
278
|
-
background-color: color-mix(
|
|
286
|
+
background-color: color-mix(
|
|
287
|
+
in srgb,
|
|
288
|
+
var(--jp-brand-color1) 20%,
|
|
289
|
+
var(--jp-layout-color2)
|
|
290
|
+
) !important;
|
|
279
291
|
}
|
|
280
292
|
|
|
281
293
|
.jp-TabularDataViewer-cell:last-child {
|
|
@@ -756,7 +768,6 @@
|
|
|
756
768
|
border-color: var(--jp-border-color1);
|
|
757
769
|
}
|
|
758
770
|
|
|
759
|
-
|
|
760
771
|
/* Download Modal - Format Buttons */
|
|
761
772
|
.jp-FilterModal-buttons {
|
|
762
773
|
display: flex;
|