flexdesk 0.11.1 → 0.12.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/README.md +55 -0
- package/css/flexdesk.css +105 -9
- package/css/overrides.css +29 -9
- package/dist/charts.js +2 -2
- package/dist/{chunk-EHHTKD7B.js → chunk-2LEJQD4H.js} +2 -2
- package/dist/{chunk-5QPGYHBN.js → chunk-CWPMLX67.js} +2 -2
- package/dist/{chunk-6CGH73BC.js → chunk-M2L4XW2U.js} +224 -31
- package/dist/chunk-M2L4XW2U.js.map +7 -0
- package/dist/{chunk-6EZPPN4E.js → chunk-NNFTETK3.js} +8 -4
- package/dist/chunk-NNFTETK3.js.map +7 -0
- package/dist/flexdesk.css +105 -9
- package/dist/flow.js +2 -2
- package/dist/tiles.js +2 -2
- package/dist/widgets.js +3 -3
- package/dist/wm.js +23 -5
- package/dist/wm.js.map +2 -2
- package/package.json +1 -1
- package/src/tiling/content_registry.js +5 -0
- package/src/tiling/tile_renderer.js +45 -3
- package/src/ui/components/data_table.js +266 -31
- package/src/ui/components/modal.js +4 -2
- package/dist/chunk-6CGH73BC.js.map +0 -7
- package/dist/chunk-6EZPPN4E.js.map +0 -7
- /package/dist/{chunk-EHHTKD7B.js.map → chunk-2LEJQD4H.js.map} +0 -0
- /package/dist/{chunk-5QPGYHBN.js.map → chunk-CWPMLX67.js.map} +0 -0
package/README.md
CHANGED
|
@@ -130,6 +130,28 @@ await createShell({
|
|
|
130
130
|
});
|
|
131
131
|
```
|
|
132
132
|
|
|
133
|
+
### A pane that names what it shows: `ctx.setTitle` (0.12.1)
|
|
134
|
+
|
|
135
|
+
A content factory receives `(hostEl, props, ctx)`, and `ctx` carries, per pane,
|
|
136
|
+
`setTitle(text)`. It renames the pane's chrome title, at mount or any time
|
|
137
|
+
after, and the title survives repaints — including a panel's, whose tree title
|
|
138
|
+
the shell resets to Navigator / Inspector / Console on every layout pass:
|
|
139
|
+
|
|
140
|
+
```js
|
|
141
|
+
content: {
|
|
142
|
+
'panel:bottom': (hostEl, props, ctx) => {
|
|
143
|
+
// …a panel with tabs of its own…
|
|
144
|
+
const show = (tab) => { /* swap the body */ ctx.setTitle(tab.label); };
|
|
145
|
+
show(tabs[0]);
|
|
146
|
+
return { destroy() {} };
|
|
147
|
+
},
|
|
148
|
+
},
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
`setTitle(null)` or `''` gives the title back to the tree. It changes what the
|
|
152
|
+
chrome shows only — the tree, the tab labels and the saved layout are left
|
|
153
|
+
alone — and a call from content whose pane has since been rebuilt does nothing.
|
|
154
|
+
|
|
133
155
|
### Your desktops beside the app's (0.10.0)
|
|
134
156
|
|
|
135
157
|
Pass `chrome.desktops` and the shell paints a desktop bar: a chip per desktop
|
|
@@ -885,6 +907,39 @@ list.setColumnVisible(3, true);
|
|
|
885
907
|
A column sorted on and then hidden keeps the order; its arrow comes back with
|
|
886
908
|
the column.
|
|
887
909
|
|
|
910
|
+
### DataTable: a select mode (0.12.0)
|
|
911
|
+
|
|
912
|
+
A list whose click opens a row can still let people pick many rows: a toggle
|
|
913
|
+
in the table's own header turns on a select mode, with a checkbox per row and
|
|
914
|
+
a click that ticks instead of opening. A table that sets none of these options
|
|
915
|
+
draws and behaves as in 0.11.
|
|
916
|
+
|
|
917
|
+
```js
|
|
918
|
+
const list = DataTable.mount(host, {
|
|
919
|
+
headers, rows,
|
|
920
|
+
getRowKey: (row) => row[0], // keeps the ticks across new rows
|
|
921
|
+
onRowActivate: (i, row) => open(row), // not called while selecting
|
|
922
|
+
selectToggle: true,
|
|
923
|
+
onSelectModeChange: (on) => bar.hidden = !on,
|
|
924
|
+
onSelectionChange: (ticked) => bar.count = ticked.length,
|
|
925
|
+
});
|
|
926
|
+
list.setSelectMode(true);
|
|
927
|
+
```
|
|
928
|
+
|
|
929
|
+
| Option | What it does |
|
|
930
|
+
|---|---|
|
|
931
|
+
| `selectToggle: true` | Draws a narrow leading column whose header holds a toggle button. While the mode is on, every row shows a checkbox and the header a select-all box. Needs a multi-row `selectable` (on `false` or `'single'` it is ignored, with a console warning). |
|
|
932
|
+
| `selectMode: true` | Starts in the mode. Draws the column even without `selectToggle`; the consumer then leaves the mode with `setSelectMode(false)`. |
|
|
933
|
+
| `setSelectMode(on)` / `isSelectMode()` | Turns the mode on or off from code (returns whether it changed), and says whether it is on. The selection is kept either way. |
|
|
934
|
+
| `onSelectModeChange(on)` | Called after every change of the mode: the toggle, Escape, `setSelectMode`. |
|
|
935
|
+
| In the mode | A plain click or Space ticks or unticks one row; Shift-click adds the range from the last row ticked. The arrows move a cursor without changing the ticks (Shift ticks the rows passed). A right-click keeps the ticks. Escape clears them, and a second Escape leaves the mode. Nothing opens a row: `onRowActivate` is not called (`onRowClick` still is, so a consumer that opens rows from it checks `isSelectMode()`). New rows (`setData`) keep the ticks by `getRowKey`. |
|
|
936
|
+
| Select-all | Ticks every row the filters let through, on every page; when all are ticked it clears them. It shows checked, mixed or clear. |
|
|
937
|
+
|
|
938
|
+
The select column is not a data column: it is not in a copy, a CSV,
|
|
939
|
+
`ctx.colIdx` or `hiddenColumns`, and it cannot be resized. It is drawn for the
|
|
940
|
+
table's whole life, so remembered widths stay on their columns when the mode
|
|
941
|
+
flips, and widths saved by a table without it land on the same columns.
|
|
942
|
+
|
|
888
943
|
### Scrollbars
|
|
889
944
|
|
|
890
945
|
`installAutoScrollbars(root)` (from `@flexdesk/widgets`) replaces the browser's
|
package/css/flexdesk.css
CHANGED
|
@@ -706,6 +706,82 @@ body.twm-dt-col-resizing {
|
|
|
706
706
|
.twm-preview-table tbody tr.twm-dt-row--active > td:first-child {
|
|
707
707
|
box-shadow: inset 2px 0 0 0 var(--accent-bright, #007acc);
|
|
708
708
|
}
|
|
709
|
+
/* STORY-0016 `selectToggle` / `selectMode` — the select column. Narrow, never
|
|
710
|
+
* the time column (it is the first child, so the time rules reach it: (0,3,2)
|
|
711
|
+
* here beats them), and the time styling moves to the first column after it,
|
|
712
|
+
* so a table looks as it did before the column was added. Its boxes show only
|
|
713
|
+
* in select mode; the header's toggle always. */
|
|
714
|
+
.twm-preview-table.twm-dt--select tr > .twm-dt-select-cell {
|
|
715
|
+
width: 32px;
|
|
716
|
+
min-width: 0;
|
|
717
|
+
max-width: none;
|
|
718
|
+
padding-left: 6px;
|
|
719
|
+
padding-right: 2px;
|
|
720
|
+
text-align: left;
|
|
721
|
+
color: inherit;
|
|
722
|
+
font-weight: inherit;
|
|
723
|
+
white-space: nowrap;
|
|
724
|
+
}
|
|
725
|
+
.twm-preview-table.twm-dt--select:not(.twm-dt--first-plain) tr > .twm-dt-select-cell + th,
|
|
726
|
+
.twm-preview-table.twm-dt--select:not(.twm-dt--first-plain) tr > .twm-dt-select-cell + td {
|
|
727
|
+
width: 120px;
|
|
728
|
+
min-width: 100px;
|
|
729
|
+
font-weight: 500;
|
|
730
|
+
color: #bbb;
|
|
731
|
+
}
|
|
732
|
+
.twm-preview-table.twm-dt--select:not(.twm-dt--first-plain) tr > th.twm-dt-select-cell + th {
|
|
733
|
+
font-weight: 600;
|
|
734
|
+
color: #aaa;
|
|
735
|
+
}
|
|
736
|
+
.twm-preview-table.twm-dt--select td.twm-dt-select-cell .twm-dt-select-box {
|
|
737
|
+
display: none;
|
|
738
|
+
margin: 0;
|
|
739
|
+
vertical-align: middle;
|
|
740
|
+
cursor: pointer;
|
|
741
|
+
}
|
|
742
|
+
.twm-preview-table.twm-dt--selecting td.twm-dt-select-cell .twm-dt-select-box {
|
|
743
|
+
display: inline-block;
|
|
744
|
+
}
|
|
745
|
+
.twm-preview-table.twm-dt--select th.twm-dt-select-cell .twm-dt-select-all {
|
|
746
|
+
margin: 0 4px 0 0;
|
|
747
|
+
vertical-align: middle;
|
|
748
|
+
cursor: pointer;
|
|
749
|
+
}
|
|
750
|
+
.twm-preview-table.twm-dt--select th.twm-dt-select-cell .twm-dt-select-toggle {
|
|
751
|
+
display: inline-flex;
|
|
752
|
+
align-items: center;
|
|
753
|
+
justify-content: center;
|
|
754
|
+
width: 20px;
|
|
755
|
+
height: 20px;
|
|
756
|
+
margin: -3px 0;
|
|
757
|
+
padding: 0;
|
|
758
|
+
border: 0;
|
|
759
|
+
border-radius: 3px;
|
|
760
|
+
background: transparent;
|
|
761
|
+
color: inherit;
|
|
762
|
+
font-size: 16px;
|
|
763
|
+
line-height: 1;
|
|
764
|
+
vertical-align: middle;
|
|
765
|
+
cursor: pointer;
|
|
766
|
+
opacity: 0.7;
|
|
767
|
+
}
|
|
768
|
+
.twm-preview-table.twm-dt--select th.twm-dt-select-cell .twm-dt-select-toggle:hover,
|
|
769
|
+
.twm-preview-table.twm-dt--select th.twm-dt-select-cell .twm-dt-select-toggle[aria-pressed="true"] {
|
|
770
|
+
opacity: 1;
|
|
771
|
+
background: rgba(255, 255, 255, 0.08);
|
|
772
|
+
}
|
|
773
|
+
.twm-preview-table.twm-dt--select th.twm-dt-select-cell .twm-dt-select-toggle:focus-visible {
|
|
774
|
+
opacity: 1;
|
|
775
|
+
outline: 1px solid var(--accent-bright, #007acc);
|
|
776
|
+
}
|
|
777
|
+
/* In the mode a click ticks: a pointer on every row, and the keyboard's row
|
|
778
|
+
* (the arrows move it, Space ticks it) drawn as an outline. */
|
|
779
|
+
.twm-preview-table.twm-dt--selecting tbody tr:not(.twm-dt-spacer):not(.data-table__empty-row) {
|
|
780
|
+
cursor: pointer;
|
|
781
|
+
}
|
|
782
|
+
.twm-preview-table.twm-dt--selecting tbody tr.twm-dt-row--cursor > td {
|
|
783
|
+
box-shadow: inset 0 1px 0 0 var(--accent-bright, #007acc), inset 0 -1px 0 0 var(--accent-bright, #007acc);
|
|
784
|
+
}
|
|
709
785
|
/* `rowIcon` — drawn from `data-twm-icon` so the icon's NAME is not cell
|
|
710
786
|
* text (not in a copy, not in the clipped-cell tooltip). The span carries the
|
|
711
787
|
* icon font's class; the pseudo-element inherits its font and ligatures. Top
|
|
@@ -4889,36 +4965,54 @@ button.twm-about-dialog__btn--close:focus {
|
|
|
4889
4965
|
color: #fff;
|
|
4890
4966
|
}
|
|
4891
4967
|
/* Content area — drop the host padding so the body host controls its
|
|
4892
|
-
* own zones (form rows + flush-bottom action strip).
|
|
4968
|
+
* own zones (form rows + flush-bottom action strip). The content never
|
|
4969
|
+
* scrolls itself: the zone above the strip does, so the strip stays whole
|
|
4970
|
+
* and in view when the fields outgrow the window. */
|
|
4893
4971
|
.twm-managed-window--modal .twm-managed-window__content {
|
|
4894
4972
|
background: var(--ea-bg-content);
|
|
4895
4973
|
padding: 0;
|
|
4896
|
-
overflow:
|
|
4974
|
+
overflow: hidden;
|
|
4897
4975
|
}
|
|
4898
4976
|
.twm-managed-window--modal .twm-modal__body-host {
|
|
4899
4977
|
display: flex;
|
|
4900
4978
|
flex-direction: column;
|
|
4901
|
-
|
|
4979
|
+
height: 100%;
|
|
4902
4980
|
}
|
|
4903
|
-
/* Form sits inside the body host as a flex column
|
|
4904
|
-
*
|
|
4981
|
+
/* Form sits inside the body host as a flex column: the fields take the
|
|
4982
|
+
* room left over and scroll, the error banner and the actions row keep
|
|
4983
|
+
* their height below them. */
|
|
4905
4984
|
.twm-managed-window--modal .twm-modal__form {
|
|
4906
4985
|
display: flex;
|
|
4907
4986
|
flex-direction: column;
|
|
4908
4987
|
flex: 1 1 auto;
|
|
4988
|
+
min-height: 0;
|
|
4909
4989
|
padding: 0;
|
|
4990
|
+
overflow: hidden;
|
|
4991
|
+
}
|
|
4992
|
+
.twm-managed-window--modal .twm-modal__fields {
|
|
4993
|
+
flex: 1 1 auto;
|
|
4994
|
+
min-height: 0;
|
|
4995
|
+
overflow-y: auto;
|
|
4996
|
+
padding-bottom: 14px;
|
|
4997
|
+
}
|
|
4998
|
+
.twm-managed-window--modal .twm-modal__form > .twm-modal__error,
|
|
4999
|
+
.twm-managed-window--modal .twm-modal__form > .twm-modal__actions {
|
|
5000
|
+
flex: 0 0 auto;
|
|
5001
|
+
}
|
|
5002
|
+
.twm-managed-window--modal .twm-modal__form > .twm-modal__error {
|
|
5003
|
+
margin-bottom: 8px;
|
|
4910
5004
|
}
|
|
4911
5005
|
/* Field rows get inset margins so the action strip can run edge-to-edge
|
|
4912
5006
|
* as a true bottom band. */
|
|
4913
|
-
.twm-managed-window--modal .twm-
|
|
4914
|
-
.twm-managed-window--modal .twm-
|
|
5007
|
+
.twm-managed-window--modal .twm-modal__fields > .twm-modal__row,
|
|
5008
|
+
.twm-managed-window--modal .twm-modal__fields > .twm-modal__section,
|
|
4915
5009
|
.twm-managed-window--modal .twm-modal__form > .twm-modal__error,
|
|
4916
5010
|
.twm-managed-window--modal .twm-modal__body {
|
|
4917
5011
|
margin-left: 14px;
|
|
4918
5012
|
margin-right: 14px;
|
|
4919
5013
|
}
|
|
4920
|
-
.twm-managed-window--modal .twm-
|
|
4921
|
-
.twm-managed-window--modal .twm-
|
|
5014
|
+
.twm-managed-window--modal .twm-modal__fields > .twm-modal__row:first-of-type,
|
|
5015
|
+
.twm-managed-window--modal .twm-modal__fields > .twm-modal__section:first-child,
|
|
4922
5016
|
.twm-managed-window--modal .twm-modal__body:first-child {
|
|
4923
5017
|
margin-top: 14px;
|
|
4924
5018
|
}
|
|
@@ -5159,6 +5253,8 @@ button.twm-about-dialog__btn--close:focus {
|
|
|
5159
5253
|
line-height: 1.5;
|
|
5160
5254
|
color: var(--ea-text);
|
|
5161
5255
|
flex: 1 1 auto;
|
|
5256
|
+
min-height: 0;
|
|
5257
|
+
overflow-y: auto;
|
|
5162
5258
|
}
|
|
5163
5259
|
/* Form-level error banner — left accent stripe, dim red panel. */
|
|
5164
5260
|
.twm-managed-window--modal .twm-modal__error {
|
package/css/overrides.css
CHANGED
|
@@ -241,36 +241,54 @@
|
|
|
241
241
|
color: #fff;
|
|
242
242
|
}
|
|
243
243
|
/* Content area — drop the host padding so the body host controls its
|
|
244
|
-
* own zones (form rows + flush-bottom action strip).
|
|
244
|
+
* own zones (form rows + flush-bottom action strip). The content never
|
|
245
|
+
* scrolls itself: the zone above the strip does, so the strip stays whole
|
|
246
|
+
* and in view when the fields outgrow the window. */
|
|
245
247
|
.twm-managed-window--modal .twm-managed-window__content {
|
|
246
248
|
background: var(--ea-bg-content);
|
|
247
249
|
padding: 0;
|
|
248
|
-
overflow:
|
|
250
|
+
overflow: hidden;
|
|
249
251
|
}
|
|
250
252
|
.twm-managed-window--modal .twm-modal__body-host {
|
|
251
253
|
display: flex;
|
|
252
254
|
flex-direction: column;
|
|
253
|
-
|
|
255
|
+
height: 100%;
|
|
254
256
|
}
|
|
255
|
-
/* Form sits inside the body host as a flex column
|
|
256
|
-
*
|
|
257
|
+
/* Form sits inside the body host as a flex column: the fields take the
|
|
258
|
+
* room left over and scroll, the error banner and the actions row keep
|
|
259
|
+
* their height below them. */
|
|
257
260
|
.twm-managed-window--modal .twm-modal__form {
|
|
258
261
|
display: flex;
|
|
259
262
|
flex-direction: column;
|
|
260
263
|
flex: 1 1 auto;
|
|
264
|
+
min-height: 0;
|
|
261
265
|
padding: 0;
|
|
266
|
+
overflow: hidden;
|
|
267
|
+
}
|
|
268
|
+
.twm-managed-window--modal .twm-modal__fields {
|
|
269
|
+
flex: 1 1 auto;
|
|
270
|
+
min-height: 0;
|
|
271
|
+
overflow-y: auto;
|
|
272
|
+
padding-bottom: 14px;
|
|
273
|
+
}
|
|
274
|
+
.twm-managed-window--modal .twm-modal__form > .twm-modal__error,
|
|
275
|
+
.twm-managed-window--modal .twm-modal__form > .twm-modal__actions {
|
|
276
|
+
flex: 0 0 auto;
|
|
277
|
+
}
|
|
278
|
+
.twm-managed-window--modal .twm-modal__form > .twm-modal__error {
|
|
279
|
+
margin-bottom: 8px;
|
|
262
280
|
}
|
|
263
281
|
/* Field rows get inset margins so the action strip can run edge-to-edge
|
|
264
282
|
* as a true bottom band. */
|
|
265
|
-
.twm-managed-window--modal .twm-
|
|
266
|
-
.twm-managed-window--modal .twm-
|
|
283
|
+
.twm-managed-window--modal .twm-modal__fields > .twm-modal__row,
|
|
284
|
+
.twm-managed-window--modal .twm-modal__fields > .twm-modal__section,
|
|
267
285
|
.twm-managed-window--modal .twm-modal__form > .twm-modal__error,
|
|
268
286
|
.twm-managed-window--modal .twm-modal__body {
|
|
269
287
|
margin-left: 14px;
|
|
270
288
|
margin-right: 14px;
|
|
271
289
|
}
|
|
272
|
-
.twm-managed-window--modal .twm-
|
|
273
|
-
.twm-managed-window--modal .twm-
|
|
290
|
+
.twm-managed-window--modal .twm-modal__fields > .twm-modal__row:first-of-type,
|
|
291
|
+
.twm-managed-window--modal .twm-modal__fields > .twm-modal__section:first-child,
|
|
274
292
|
.twm-managed-window--modal .twm-modal__body:first-child {
|
|
275
293
|
margin-top: 14px;
|
|
276
294
|
}
|
|
@@ -481,6 +499,8 @@
|
|
|
481
499
|
line-height: 1.5;
|
|
482
500
|
color: var(--ea-text);
|
|
483
501
|
flex: 1 1 auto;
|
|
502
|
+
min-height: 0;
|
|
503
|
+
overflow-y: auto;
|
|
484
504
|
}
|
|
485
505
|
/* Form-level error banner — left accent stripe, dim red panel. */
|
|
486
506
|
.twm-managed-window--modal .twm-modal__error {
|
package/dist/charts.js
CHANGED
|
@@ -39,10 +39,10 @@ import {
|
|
|
39
39
|
setPlotlySource,
|
|
40
40
|
uid,
|
|
41
41
|
updateChart
|
|
42
|
-
} from "./chunk-
|
|
42
|
+
} from "./chunk-2LEJQD4H.js";
|
|
43
43
|
import {
|
|
44
44
|
createRafResizeObserver
|
|
45
|
-
} from "./chunk-
|
|
45
|
+
} from "./chunk-M2L4XW2U.js";
|
|
46
46
|
import {
|
|
47
47
|
ManagedWindow
|
|
48
48
|
} from "./chunk-6JSOVNID.js";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
DataTable,
|
|
3
3
|
createRafResizeObserver
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-M2L4XW2U.js";
|
|
5
5
|
import {
|
|
6
6
|
ManagedWindow
|
|
7
7
|
} from "./chunk-6JSOVNID.js";
|
|
@@ -2370,4 +2370,4 @@ export {
|
|
|
2370
2370
|
openPlotPopoutWindow,
|
|
2371
2371
|
openRawTracesWindow
|
|
2372
2372
|
};
|
|
2373
|
-
//# sourceMappingURL=chunk-
|
|
2373
|
+
//# sourceMappingURL=chunk-2LEJQD4H.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
modalHost
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-NNFTETK3.js";
|
|
4
4
|
|
|
5
5
|
// src/help/help_registry.js
|
|
6
6
|
var EMPTY_PROVIDER = Object.freeze({
|
|
@@ -472,4 +472,4 @@ export {
|
|
|
472
472
|
showContextMenu,
|
|
473
473
|
hideContextMenu
|
|
474
474
|
};
|
|
475
|
-
//# sourceMappingURL=chunk-
|
|
475
|
+
//# sourceMappingURL=chunk-CWPMLX67.js.map
|