@yuneta/gobj-ui 2.6.0 → 3.0.0

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/index.js CHANGED
@@ -14,14 +14,11 @@
14
14
  /*
15
15
  * Components
16
16
  */
17
- export { register_c_yui_main, display_volatil_modal, display_info_message, display_warning_message, display_error_message, get_yesnocancel, get_yesno, get_ok } from "./src/c_yui_main.js";
18
17
  export { register_c_yui_window } from "./src/c_yui_window.js";
19
18
  export { register_c_yui_window_manager } from "./src/c_yui_window_manager.js";
20
- export { register_c_yui_tabs } from "./src/c_yui_tabs.js";
21
19
  export { register_c_yui_pager } from "./src/c_yui_pager.js";
22
20
  export { register_c_yui_wizard } from "./src/c_yui_wizard.js";
23
21
  export { register_c_yui_form } from "./src/c_yui_form.js";
24
- export { register_c_yui_routing } from "./src/c_yui_routing.js";
25
22
  export { register_c_yui_map } from "./src/c_yui_map.js";
26
23
  export { register_c_yui_uplot } from "./src/c_yui_uplot.js";
27
24
  export { register_c_yui_json_graph } from "./src/c_yui_json_graph.js";
@@ -70,8 +67,6 @@ export { register_c_g6_nodes_tree } from "./src/c_g6_nodes_tree.js";
70
67
  export { addClasses, removeClasses, toggleClasses, removeChildElements, disableElements, enableElements, set_submit_state, set_cancel_state, set_active_state, getStrokeColor } from "./src/lib_graph.js";
71
68
  export { inject_svg_icons } from "./src/lib_icons.js";
72
69
  export { EditControl, MarkerControl } from "./src/lib_maplibre.js";
73
- export { themes } from "./src/themes.js";
74
- export { YTable, createYTable } from "./src/ytable.js";
75
70
  export { yui_toolbar } from "./src/yui_toolbar.js";
76
71
  export { attach_clear } from "./src/yui_inputs.js";
77
72
  export { info_traffic, setup_dev, build_dev_panel, apply_dev_traces, dev_window_was_open } from "./src/yui_dev.js";
@@ -79,11 +74,8 @@ export { info_traffic, setup_dev, build_dev_panel, apply_dev_traces, dev_window_
79
74
  /*
80
75
  * CSS - import these in your main entry point
81
76
  * Example:
82
- * import "gobj-ui/src/c_yui_main.css";
83
77
  * import "gobj-ui/src/c_yui_shell.css"; // declarative shell
84
78
  * import "gobj-ui/src/c_yui_map.css";
85
- * import "gobj-ui/src/c_yui_routing.css";
86
- * import "gobj-ui/src/ytable.css";
87
79
  * import "gobj-ui/src/yui_toolbar.css";
88
80
  * import "gobj-ui/src/lib_graph.css";
89
81
  * import "gobj-ui/src/yui_icons.css";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yuneta/gobj-ui",
3
- "version": "2.6.0",
3
+ "version": "3.0.0",
4
4
  "type": "module",
5
5
  "main": "dist/gobj-ui.cjs.js",
6
6
  "module": "dist/gobj-ui.es.js",
@@ -48,3 +48,12 @@
48
48
  border-color: var(--bulma-border, #dbdbdb);
49
49
  cursor: default;
50
50
  }
51
+
52
+ /* Moved from c_yui_main.css (2.6.1): scroll containment for the fields area.
53
+ * Self-contained here so every consumer gets it without the
54
+ * legacy stack's stylesheet. */
55
+
56
+ .overscroll-contain {
57
+ overscroll-behavior: contain;
58
+ }
59
+
package/src/c_yui_form.js CHANGED
@@ -56,6 +56,7 @@ import TomSelect from "tom-select"; // Import Tom-Select JS
56
56
  import { createJSONEditor } from 'vanilla-jsoneditor';
57
57
  import "vanilla-jsoneditor/themes/jse-theme-dark.css";
58
58
  import "./c_yui_form.css";
59
+ import "./tabulator.css";
59
60
 
60
61
  import "tabulator-tables/dist/css/tabulator.min.css"; // Import Tabulator CSS
61
62
  import "tabulator-tables/dist/css/tabulator_bulma.css";
@@ -643,3 +643,90 @@
643
643
  display: none;
644
644
  }
645
645
  }
646
+
647
+ /* Moved from c_yui_main.css (2.6.1): mobile Bulma columns edge-to-edge.
648
+ * Self-contained here so every consumer gets it without the
649
+ * legacy stack's stylesheet. */
650
+
651
+ @media screen and (max-width: 768px) {
652
+ .column {
653
+ padding: 0 !important;
654
+ margin-bottom: 16px !important;
655
+ }
656
+ }
657
+
658
+
659
+ /*============================================================
660
+ * Shell confirm dialogs (yui_shell_confirm_*):
661
+ * icon-centric layout ported from the legacy volatil
662
+ * modals (2.5.0 redesign; c_yui_main.js removed in 3.0.0).
663
+ * A narrow rounded card with a tinted round icon of the
664
+ * type; everything maps to Bulma vars so one rule set
665
+ * follows light and dark.
666
+ *============================================================*/
667
+ .modal.yui-confirm .modal-background {
668
+ background-color: color-mix(in srgb, var(--bulma-scheme-invert, #000) 45%, transparent);
669
+ }
670
+ .modal.yui-confirm .modal-card {
671
+ position: relative;
672
+ width: min(26rem, calc(100vw - 2rem));
673
+ border-radius: 0.75rem;
674
+ background: var(--bulma-scheme-main, #fff);
675
+ box-shadow: 0 12px 40px color-mix(in srgb, var(--bulma-scheme-invert, #000) 30%, transparent);
676
+ padding: 1.5rem 1.5rem 1.25rem;
677
+ }
678
+ .modal.yui-confirm .modal-card-body {
679
+ background: transparent;
680
+ padding: 0;
681
+ }
682
+ .modal.yui-confirm .modal-card-foot {
683
+ background: transparent;
684
+ border-top: none;
685
+ padding: 1rem 0 0;
686
+ justify-content: center;
687
+ }
688
+ .yui-confirm-icon {
689
+ width: 3.25rem;
690
+ height: 3.25rem;
691
+ border-radius: 9999px;
692
+ display: flex;
693
+ align-items: center;
694
+ justify-content: center;
695
+ margin: 0 auto 0.75rem;
696
+ font-size: 1.5rem;
697
+ background: color-mix(in srgb, var(--yui-confirm-base, var(--bulma-info, #3e8ed0)) 15%, transparent);
698
+ color: var(--yui-confirm-ink, var(--bulma-info, #3e8ed0));
699
+ }
700
+ .modal.yui-confirm.is-info,
701
+ .modal.yui-confirm.is-question {
702
+ --yui-confirm-base: var(--bulma-info, #3e8ed0);
703
+ --yui-confirm-ink: var(--bulma-info-on-scheme, #3e8ed0);
704
+ }
705
+ .modal.yui-confirm.is-success {
706
+ --yui-confirm-base: var(--bulma-success, #48c78e);
707
+ --yui-confirm-ink: var(--bulma-success-on-scheme, #257953);
708
+ }
709
+ .modal.yui-confirm.is-warning {
710
+ --yui-confirm-base: var(--bulma-warning, #ffe08a);
711
+ --yui-confirm-ink: var(--bulma-warning-on-scheme, #946c00);
712
+ }
713
+ .modal.yui-confirm.is-error {
714
+ --yui-confirm-base: var(--bulma-danger, #f14668);
715
+ --yui-confirm-ink: var(--bulma-danger-on-scheme, #cc0f35);
716
+ }
717
+ .yui-confirm-title {
718
+ font-size: 1.15rem;
719
+ font-weight: 600;
720
+ text-transform: capitalize;
721
+ margin-bottom: 0.25rem;
722
+ color: var(--bulma-text-strong, inherit);
723
+ }
724
+ .yui-confirm-x {
725
+ position: absolute;
726
+ top: 0.75rem;
727
+ right: 0.75rem;
728
+ }
729
+ .yui-confirm-msg {
730
+ font-size: 1.05rem;
731
+ color: var(--bulma-text, inherit);
732
+ }
@@ -45,3 +45,56 @@
45
45
  .toolbar_tabulator_table .control.has-icons-left {
46
46
  min-width: 0;
47
47
  }
48
+
49
+ /* Moved from c_yui_main.css (2.6.1): the responsive edit-dialog card
50
+ * and the utilities this gclass tags on its DOM.
51
+ * Self-contained here so every consumer gets it without the
52
+ * legacy stack's stylesheet. */
53
+
54
+ /* Custom class to adjust the modal width */
55
+ .modal-card.modal-is-responsive {
56
+ width: 100%;
57
+ max-width: 100%;
58
+ }
59
+
60
+ @media screen and (min-width: 768px) {
61
+ .modal-card.modal-is-responsive {
62
+ width: 50rem;
63
+ max-width: 50rem;
64
+ }
65
+ }
66
+
67
+ /*
68
+ * Mobile (< 768px, dovetails with the desktop rule above): a
69
+ * `modal-is-responsive` card (the C_YUI_TREEDB edit/delete form
70
+ * popup, and any other consumer of this opt-in class) takes the
71
+ * WHOLE screen instead of a centred sheet — more room to edit on a
72
+ * phone. Confirm dialogs do not carry `modal-is-responsive`, so
73
+ * they stay compact. Edge-to-edge: full size, no margin, flat
74
+ * corners; the body keeps Bulma's own scroll.
75
+ */
76
+ @media screen and (max-width: 767px) {
77
+ .modal-card.modal-is-responsive {
78
+ width: 100%;
79
+ max-width: 100%;
80
+ height: 100%;
81
+ max-height: 100%;
82
+ margin: 0;
83
+ border-radius: 0;
84
+ }
85
+ .modal-card.modal-is-responsive .modal-card-head,
86
+ .modal-card.modal-is-responsive .modal-card-foot {
87
+ border-radius: 0;
88
+ }
89
+ .modal-card.modal-is-responsive .modal-card-body {
90
+ flex: 1 1 auto;
91
+ overflow-y: auto;
92
+ }
93
+ }
94
+
95
+ .without-border {
96
+ border: none !important;
97
+ box-shadow: none !important;
98
+ background: transparent !important;
99
+ }
100
+
@@ -73,6 +73,7 @@ import {register_c_yui_form} from "./c_yui_form.js";
73
73
  import {t} from "i18next";
74
74
 
75
75
  import "./c_yui_treedb_topic_with_form.css";
76
+ import "./tabulator.css";
76
77
 
77
78
  import { TabulatorFull as Tabulator } from "tabulator-tables";
78
79
 
@@ -0,0 +1,22 @@
1
+ /***********************************************************************
2
+ * c_yui_window.css
3
+ *
4
+ * Styles C_YUI_WINDOW tags on its chrome. Moved from
5
+ * c_yui_main.css (2.6.1) so windows are self-contained and no
6
+ * longer depend on the legacy stack's stylesheet.
7
+ *
8
+ * Copyright (c) 2026, ArtGins.
9
+ * All Rights Reserved.
10
+ ***********************************************************************/
11
+
12
+ .strong-shadow {
13
+ box-shadow:
14
+ 0 1em 2em -0.125em hsla(var(--bulma-shadow-h), var(--bulma-shadow-s), var(--bulma-shadow-l), 0.3),
15
+ 0 0 0 2px hsla(var(--bulma-shadow-h), var(--bulma-shadow-s), var(--bulma-shadow-l), 0.1) !important;
16
+ }
17
+
18
+ .without-border {
19
+ border: none !important;
20
+ box-shadow: none !important;
21
+ background: transparent !important;
22
+ }
@@ -47,6 +47,8 @@ import {t} from "i18next";
47
47
  import {yui_shell_confirm_yesnocancel} from "./shell_modals.js";
48
48
  import {yui_shell_of} from "./c_yui_shell.js";
49
49
 
50
+ import "./c_yui_window.css";
51
+
50
52
  /***************************************************************
51
53
  * Constants
52
54
  ***************************************************************/
@@ -321,13 +321,28 @@ export function yui_shell_show_modal(shell, content, opts)
321
321
 
322
322
 
323
323
  /***************************************************************
324
- * Blocking dialogs (Bulma .modal-card)
324
+ * Blocking dialogs (icon-centric .modal-card)
325
325
  *
326
326
  * build_dialog returns a Promise that resolves with the
327
327
  * clicked button's `value`. Escape, the close button and
328
328
  * the dismiss action all resolve with the LAST button's value
329
329
  * (cancel/no/ok by convention — the safe-default action).
330
+ *
331
+ * Layout ported from the legacy volatil modals (2.5.0
332
+ * redesign, removed in 3.0.0): a narrow rounded card with a
333
+ * tinted round icon of the `opts.type`
334
+ * (question/success/info/warning/error, `danger` aliases
335
+ * error), optional capitalized title, centered message and
336
+ * buttons. Everything maps to Bulma vars (light and dark).
330
337
  ***************************************************************/
338
+ const CONFIRM_TYPE_ICONS = {
339
+ "info": "yi-circle-info",
340
+ "question": "yi-question",
341
+ "success": "yi-square-check",
342
+ "warning": "yi-triangle-exclamation",
343
+ "error": "yi-circle-exclamation",
344
+ };
345
+
331
346
  function build_dialog(shell, message, buttons, opts)
332
347
  {
333
348
  let $layer = modal_layer(shell);
@@ -339,16 +354,18 @@ function build_dialog(shell, message, buttons, opts)
339
354
  let title = (opts && opts.title) || "";
340
355
  let dismiss_value = buttons[buttons.length - 1].value;
341
356
 
357
+ let type = ((opts && opts.type) || "question").toLowerCase();
358
+ if(type === "danger") {
359
+ type = "error";
360
+ }
361
+ let icon = CONFIRM_TYPE_ICONS[type] || CONFIRM_TYPE_ICONS["question"];
362
+
342
363
  let $body_children = (typeof message === "string")
343
- ? [["p", {i18n: message}, message]]
364
+ ? [["p", {class: "yui-confirm-msg", i18n: message}, message]]
344
365
  : [message];
345
366
 
346
- let title_attrs = !empty_string(title)
347
- ? {class: "modal-card-title", i18n: title}
348
- : {class: "modal-card-title"};
349
-
350
367
  let $footer_children = buttons.map(b => {
351
- let cls = "button";
368
+ let cls = "button px-5";
352
369
  if(b.kind === "primary") {
353
370
  cls += " is-link";
354
371
  } else if(b.kind === "danger") {
@@ -362,24 +379,30 @@ function build_dialog(shell, message, buttons, opts)
362
379
  return ["button", btn_attrs, b.label];
363
380
  });
364
381
 
382
+ let $card_children = [
383
+ ["div", {class: "yui-confirm-icon"},
384
+ [["i", {class: icon, "aria-hidden": "true"}]]
385
+ ]
386
+ ];
387
+ if(!empty_string(title)) {
388
+ $card_children.push(
389
+ ["p", {class: "yui-confirm-title has-text-centered",
390
+ i18n: title}, title]
391
+ );
392
+ }
393
+ $card_children.push(
394
+ ["button", {class: "delete yui-confirm-x", "aria-label": "close"}],
395
+ ["section", {class: "modal-card-body has-text-centered"},
396
+ $body_children],
397
+ ["footer", {class: "modal-card-foot"}, $footer_children]
398
+ );
399
+
365
400
  let $modal = createElement2(
366
- ["div", {class: "modal yui-modal yui-confirm is-active",
401
+ ["div", {class: `modal yui-modal yui-confirm is-active is-${type}`,
367
402
  role: "dialog", "aria-modal": "true"},
368
403
  [
369
404
  ["div", {class: "modal-background"}],
370
- ["div", {class: "modal-card"},
371
- [
372
- ["header", {class: "modal-card-head"},
373
- [
374
- ["p", title_attrs, title],
375
- ["button", {class: "delete",
376
- "aria-label": "close"}]
377
- ]
378
- ],
379
- ["section", {class: "modal-card-body"}, $body_children],
380
- ["footer", {class: "modal-card-foot"}, $footer_children]
381
- ]
382
- ]
405
+ ["div", {class: "modal-card"}, $card_children]
383
406
  ]
384
407
  ]
385
408
  );
@@ -419,7 +442,7 @@ function build_dialog(shell, message, buttons, opts)
419
442
  $modal.querySelector(".modal-background").addEventListener(
420
443
  "click", () => close(dismiss_value)
421
444
  );
422
- $modal.querySelector(".modal-card-head .delete").addEventListener(
445
+ $modal.querySelector(".modal-card .delete").addEventListener(
423
446
  "click", () => close(dismiss_value)
424
447
  );
425
448
  let footer_buttons = $modal.querySelectorAll(
@@ -430,6 +453,12 @@ function build_dialog(shell, message, buttons, opts)
430
453
  close($btn.getAttribute("data-modal-button-value"));
431
454
  });
432
455
  });
456
+
457
+ /* Enter answers the primary action, like the volatil modals. */
458
+ let $primary = $modal.querySelector(".modal-card-foot button");
459
+ if($primary) {
460
+ $primary.focus();
461
+ }
433
462
  });
434
463
  }
435
464
 
@@ -437,6 +466,9 @@ function build_dialog(shell, message, buttons, opts)
437
466
  export function yui_shell_confirm_ok(shell, message, opts)
438
467
  {
439
468
  let label = (opts && opts.ok_label) || "OK";
469
+ if(!opts || !opts.type) {
470
+ opts = Object.assign({}, opts, {type: "success"});
471
+ }
440
472
  return build_dialog(shell, message, [
441
473
  {label: label, value: "ok", kind: "primary"}
442
474
  ], opts).then(() => undefined);
package/src/tabulator.css CHANGED
@@ -51,3 +51,181 @@
51
51
  [data-theme=dark] .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after {
52
52
  background: #ffffff !important;
53
53
  }
54
+
55
+ /* Moved from c_yui_main.css (2.6.1): generic Tabulator theming
56
+ * (column separator, frozen columns, striping/hover, dark + system themes).
57
+ * Self-contained here so every consumer gets it without the
58
+ * legacy stack's stylesheet. */
59
+
60
+ /*********************************************************
61
+ * Tabulator
62
+ *********************************************************/
63
+
64
+ /* Visible column separator via pseudo-element on the right-side resize handle only.
65
+ .prev handles (left-side) are excluded so hidden columns (e.g. Select Row when
66
+ not in edit mode) don't leave a spurious line at the start of the table. */
67
+ .tabulator .tabulator-col-resize-handle:not(.prev)::after {
68
+ content: "";
69
+ position: absolute;
70
+ top: 0;
71
+ bottom: 0;
72
+ left: 50%;
73
+ width: 1px;
74
+ background-color: var(--bulma-border);
75
+ }
76
+
77
+ .tabulator-row .tabulator-cell.tabulator-frozen {
78
+ background-color: var(--bulma-background) !important;
79
+ }
80
+ .tabulator .tabulator-header .tabulator-frozen {
81
+ background-color: var(--bulma-background) !important;
82
+ }
83
+
84
+ /*
85
+ * Tabulator light theme — alternating row backgrounds
86
+ * scheme-main-ter (#f5f5f5) gives visible contrast against white odd rows.
87
+ * !important needed to override the tabulator_bulma.css theme.
88
+ */
89
+ .tabulator .tabulator-row,
90
+ .tabulator .tabulator-row.tabulator-row-odd {
91
+ background-color: var(--bulma-scheme-main, #fff) !important;
92
+ }
93
+
94
+ .tabulator .tabulator-row.tabulator-row-even {
95
+ background-color: var(--bulma-scheme-main-ter, #f5f5f5) !important;
96
+ }
97
+
98
+ .tabulator .tabulator-row.tabulator-selectable:hover {
99
+ background-color: var(--bulma-background, #ebebeb) !important;
100
+ }
101
+
102
+ /*
103
+ * Tabulator dark theme
104
+ * Activated by html[data-theme=dark] (set by the app's theme switcher)
105
+ */
106
+ [data-theme=dark] .tabulator {
107
+ background-color: var(--bulma-body-background-color);
108
+ border-color: var(--bulma-border);
109
+ color: var(--bulma-body-color);
110
+ }
111
+
112
+ [data-theme=dark] .tabulator .tabulator-header,
113
+ [data-theme=dark] .tabulator .tabulator-header .tabulator-col {
114
+ background-color: var(--bulma-background);
115
+ border-color: var(--bulma-border);
116
+ color: var(--bulma-text);
117
+ }
118
+
119
+ [data-theme=dark] .tabulator .tabulator-header .tabulator-col.tabulator-sortable:hover {
120
+ background-color: var(--bulma-background-bis, var(--bulma-background));
121
+ }
122
+
123
+ [data-theme=dark] .tabulator-row,
124
+ [data-theme=dark] .tabulator-row.tabulator-row-odd {
125
+ background-color: var(--bulma-body-background-color) !important;
126
+ color: var(--bulma-body-color);
127
+ border-color: var(--bulma-border);
128
+ }
129
+
130
+ [data-theme=dark] .tabulator-row.tabulator-row-even {
131
+ background-color: var(--bulma-background) !important;
132
+ color: var(--bulma-body-color);
133
+ border-color: var(--bulma-border);
134
+ }
135
+
136
+ [data-theme=dark] .tabulator-row .tabulator-cell {
137
+ border-color: var(--bulma-border);
138
+ color: var(--bulma-body-color);
139
+ }
140
+
141
+ [data-theme=dark] .tabulator-row.tabulator-selectable:hover {
142
+ background-color: var(--bulma-background) !important;
143
+ color: var(--bulma-text) !important;
144
+ }
145
+
146
+ [data-theme=dark] .tabulator-row.tabulator-selected {
147
+ background-color: var(--bulma-link) !important;
148
+ color: var(--bulma-link-invert) !important;
149
+ }
150
+
151
+ [data-theme=dark] .tabulator-row.tabulator-selected .tabulator-cell {
152
+ color: var(--bulma-link-invert) !important;
153
+ }
154
+
155
+ [data-theme=dark] .tabulator .tabulator-footer {
156
+ background-color: var(--bulma-background);
157
+ border-color: var(--bulma-border);
158
+ color: var(--bulma-text);
159
+ }
160
+
161
+ [data-theme=dark] .tabulator .tabulator-footer .tabulator-page {
162
+ background-color: transparent;
163
+ color: var(--bulma-text);
164
+ border-color: var(--bulma-border);
165
+ }
166
+
167
+ [data-theme=dark] .tabulator .tabulator-footer .tabulator-page:not(.disabled):hover {
168
+ background-color: var(--bulma-background);
169
+ color: var(--bulma-text);
170
+ }
171
+
172
+ [data-theme=dark] .tabulator .tabulator-footer .tabulator-page.active {
173
+ background-color: var(--bulma-link);
174
+ color: var(--bulma-link-invert);
175
+ }
176
+
177
+ [data-theme=dark] .tabulator-row .tabulator-cell.tabulator-frozen {
178
+ background-color: var(--bulma-background) !important;
179
+ }
180
+
181
+ /* system theme: follow OS preference */
182
+ @media (prefers-color-scheme: dark) {
183
+ [data-theme=system] .tabulator {
184
+ background-color: var(--bulma-body-background-color);
185
+ border-color: var(--bulma-border);
186
+ color: var(--bulma-body-color);
187
+ }
188
+ [data-theme=system] .tabulator .tabulator-header,
189
+ [data-theme=system] .tabulator .tabulator-header .tabulator-col {
190
+ background-color: var(--bulma-background);
191
+ border-color: var(--bulma-border);
192
+ color: var(--bulma-text);
193
+ }
194
+ [data-theme=system] .tabulator-row,
195
+ [data-theme=system] .tabulator-row.tabulator-row-odd {
196
+ background-color: var(--bulma-body-background-color) !important;
197
+ color: var(--bulma-body-color);
198
+ border-color: var(--bulma-border);
199
+ }
200
+ [data-theme=system] .tabulator-row.tabulator-row-even {
201
+ background-color: var(--bulma-background) !important;
202
+ color: var(--bulma-body-color);
203
+ border-color: var(--bulma-border);
204
+ }
205
+ [data-theme=system] .tabulator-row .tabulator-cell {
206
+ border-color: var(--bulma-border);
207
+ color: var(--bulma-body-color);
208
+ }
209
+ [data-theme=system] .tabulator-row.tabulator-selectable:hover {
210
+ background-color: var(--bulma-background) !important;
211
+ }
212
+ [data-theme=system] .tabulator-row.tabulator-selected {
213
+ background-color: var(--bulma-link) !important;
214
+ color: var(--bulma-link-invert) !important;
215
+ }
216
+ [data-theme=system] .tabulator .tabulator-footer {
217
+ background-color: var(--bulma-background);
218
+ border-color: var(--bulma-border);
219
+ color: var(--bulma-text);
220
+ }
221
+ [data-theme=system] .tabulator .tabulator-footer .tabulator-page {
222
+ background-color: transparent;
223
+ color: var(--bulma-text);
224
+ border-color: var(--bulma-border);
225
+ }
226
+ [data-theme=system] .tabulator .tabulator-footer .tabulator-page.active {
227
+ background-color: var(--bulma-link);
228
+ color: var(--bulma-link-invert);
229
+ }
230
+ }
231
+
@@ -48,3 +48,31 @@
48
48
  .yui-horizontal-toolbar-scroll-btn span {
49
49
  width: 1.2em;
50
50
  }
51
+
52
+ /* Moved from c_yui_main.css (2.6.1): horizontal toolbar section.
53
+ * Self-contained here so every consumer gets it without the
54
+ * legacy stack's stylesheet. */
55
+
56
+ /*********************************************************
57
+ * Toolbars
58
+ *********************************************************/
59
+ .yui-horizontal-toolbar-section {
60
+ display: flex;
61
+ height: auto;
62
+ flex-shrink: 0; /* Prevents resizing */
63
+ white-space: nowrap;
64
+ margin: 0 2px; /* Space between sections */
65
+ justify-content: space-between;
66
+ align-items: center;
67
+ }
68
+
69
+ a.flex-horizontal-section { /* To make flex any <a> */
70
+ display: flex;
71
+ flex-shrink: 0; /* Prevents resizing */
72
+ white-space: nowrap;
73
+ margin: 0 2px; /* Space between sections */
74
+ justify-content: space-between;
75
+ align-items: center;
76
+ padding-inline-end: 2rem;
77
+ }
78
+