@yuneta/gobj-ui 7.23.88 → 7.23.90

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 CHANGED
@@ -2211,6 +2211,33 @@ metadata (`__md_treedb__`).
2211
2211
 
2212
2212
  ## Conventions
2213
2213
 
2214
+ ### Colour: a brand token as INK takes `-on-scheme`, as a FILL it does not
2215
+
2216
+ A Bulma brand colour (`--bulma-link`, `--bulma-danger`, …) is built to carry
2217
+ **white text on it**, so it is the wrong colour to write WITH: measured
2218
+ against the scheme background, the raw tokens as ink are
2219
+
2220
+ | token | raw, light | raw, dark | `-on-scheme`, light | `-on-scheme`, dark |
2221
+ |---|---|---|---|---|
2222
+ | `link` | 5.16 | **3.51** | 6.33 | 5.65 |
2223
+ | `danger` | **2.80** | 6.46 | 5.83 | 6.46 |
2224
+ | `success` | **2.14** | 8.48 | 8.14 | 8.48 |
2225
+ | `warning` | **1.75** | 10.38 | 7.09 | 10.38 |
2226
+ | `info` | **1.73** | 10.46 | 7.66 | 10.46 |
2227
+ | `primary` | **1.95** | 9.28 | 6.45 | 9.28 |
2228
+
2229
+ — every one of them fails the 4.5:1 of small text in one scheme or the other
2230
+ (`link` in dark, the rest in light). So:
2231
+
2232
+ - **ink** (`color`, a glyph, a thin border that MARKS a state):
2233
+ `var(--bulma-<name>-on-scheme, var(--bulma-<name>, #fallback))`;
2234
+ - **fill** (`background`, a chip, a pressed button): the raw token, paired
2235
+ with `--bulma-<name>-invert` for the text on it. A darkened background
2236
+ under inverted text is a button nobody asked for.
2237
+
2238
+ Bulma computes `-on-scheme` per scheme: the same hue, darkened on a light
2239
+ page (`warning` goes to 23% lightness), unchanged on a dark one.
2240
+
2214
2241
  ### i18n: a string must be able to CHANGE language, not just be translated once
2215
2242
 
2216
2243
  Passing a string through `t()` is **not** enough. `refresh_language()` only
@@ -59213,7 +59213,7 @@ function build_node_innerHTML(color, theme, icon, label, topic_name, structural,
59213
59213
  border = dark ? "#7c8694" : "#94a3b8";
59214
59214
  border_style = "dashed";
59215
59215
  } else {
59216
- bg = dark ? `color-mix(in srgb, ${color} 30%, #2c3542)` : `color-mix(in srgb, ${color} 10%, ${surface})`;
59216
+ bg = dark ? `color-mix(in srgb, ${color} 25%, #2c3542)` : `color-mix(in srgb, ${color} 10%, ${surface})`;
59217
59217
  border = dark ? `color-mix(in srgb, ${color} 85%, #ffffff)` : color;
59218
59218
  border_style = "solid";
59219
59219
  }
@@ -59222,7 +59222,7 @@ function build_node_innerHTML(color, theme, icon, label, topic_name, structural,
59222
59222
  border_style = "solid";
59223
59223
  }
59224
59224
  let title_color = dark ? "#e8eaed" : "#0f172a";
59225
- let sub_color = dark ? "#9aa4b2" : "#64748b";
59225
+ let sub_color = dark ? "#ccd3dd" : "#556173";
59226
59226
  let shadow = dark ? "0 1px 3px rgba(0,0,0,0.45), 0 1px 2px rgba(0,0,0,0.30)" : "0 1px 3px rgba(15,23,42,0.12), 0 1px 2px rgba(15,23,42,0.06)";
59227
59227
  let icon_html = "";
59228
59228
  if (icon) icon_html = `
@@ -60054,7 +60054,7 @@ function pill_colors(color, theme) {
60054
60054
  let dark = theme === "dark";
60055
60055
  return {
60056
60056
  bg: dark ? `color-mix(in srgb, ${color} 45%, #1b2230)` : `color-mix(in srgb, ${color} 22%, #ffffff)`,
60057
- fg: dark ? `color-mix(in srgb, ${color} 35%, #ffffff)` : `color-mix(in srgb, ${color} 55%, #0f172a)`,
60057
+ fg: dark ? `color-mix(in srgb, ${color} 25%, #ffffff)` : `color-mix(in srgb, ${color} 45%, #0f172a)`,
60058
60058
  border: dark ? `color-mix(in srgb, ${color} 80%, #ffffff)` : color
60059
60059
  };
60060
60060
  }
@@ -60077,7 +60077,7 @@ function build_pill_html(pill, color, theme) {
60077
60077
  font-size: 10px; font-weight: 700; line-height: 1; white-space: nowrap;
60078
60078
  overflow: hidden; text-overflow: ellipsis;
60079
60079
  cursor: pointer; user-select: none;
60080
- "><span style="font-size: 9px;">${glyph}</span>${(0, _yuneta_gobj_js.escapeHtml)(pill.hook)}<span style="opacity: .75; font-weight: 600;">${count}</span></span>`;
60080
+ "><span style="font-size: 9px;">${glyph}</span>${(0, _yuneta_gobj_js.escapeHtml)(pill.hook)}<span style="font-weight: 600;">${count}</span></span>`;
60081
60081
  }
60082
60082
  /************************************************************
60083
60083
  * The pill row of one node, as html; "" when it has nothing to
@@ -59208,7 +59208,7 @@ function build_node_innerHTML(color, theme, icon, label, topic_name, structural,
59208
59208
  border = dark ? "#7c8694" : "#94a3b8";
59209
59209
  border_style = "dashed";
59210
59210
  } else {
59211
- bg = dark ? `color-mix(in srgb, ${color} 30%, #2c3542)` : `color-mix(in srgb, ${color} 10%, ${surface})`;
59211
+ bg = dark ? `color-mix(in srgb, ${color} 25%, #2c3542)` : `color-mix(in srgb, ${color} 10%, ${surface})`;
59212
59212
  border = dark ? `color-mix(in srgb, ${color} 85%, #ffffff)` : color;
59213
59213
  border_style = "solid";
59214
59214
  }
@@ -59217,7 +59217,7 @@ function build_node_innerHTML(color, theme, icon, label, topic_name, structural,
59217
59217
  border_style = "solid";
59218
59218
  }
59219
59219
  let title_color = dark ? "#e8eaed" : "#0f172a";
59220
- let sub_color = dark ? "#9aa4b2" : "#64748b";
59220
+ let sub_color = dark ? "#ccd3dd" : "#556173";
59221
59221
  let shadow = dark ? "0 1px 3px rgba(0,0,0,0.45), 0 1px 2px rgba(0,0,0,0.30)" : "0 1px 3px rgba(15,23,42,0.12), 0 1px 2px rgba(15,23,42,0.06)";
59222
59222
  let icon_html = "";
59223
59223
  if (icon) icon_html = `
@@ -60049,7 +60049,7 @@ function pill_colors(color, theme) {
60049
60049
  let dark = theme === "dark";
60050
60050
  return {
60051
60051
  bg: dark ? `color-mix(in srgb, ${color} 45%, #1b2230)` : `color-mix(in srgb, ${color} 22%, #ffffff)`,
60052
- fg: dark ? `color-mix(in srgb, ${color} 35%, #ffffff)` : `color-mix(in srgb, ${color} 55%, #0f172a)`,
60052
+ fg: dark ? `color-mix(in srgb, ${color} 25%, #ffffff)` : `color-mix(in srgb, ${color} 45%, #0f172a)`,
60053
60053
  border: dark ? `color-mix(in srgb, ${color} 80%, #ffffff)` : color
60054
60054
  };
60055
60055
  }
@@ -60072,7 +60072,7 @@ function build_pill_html(pill, color, theme) {
60072
60072
  font-size: 10px; font-weight: 700; line-height: 1; white-space: nowrap;
60073
60073
  overflow: hidden; text-overflow: ellipsis;
60074
60074
  cursor: pointer; user-select: none;
60075
- "><span style="font-size: 9px;">${glyph}</span>${escapeHtml(pill.hook)}<span style="opacity: .75; font-weight: 600;">${count}</span></span>`;
60075
+ "><span style="font-size: 9px;">${glyph}</span>${escapeHtml(pill.hook)}<span style="font-weight: 600;">${count}</span></span>`;
60076
60076
  }
60077
60077
  /************************************************************
60078
60078
  * The pill row of one node, as html; "" when it has nothing to
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yuneta/gobj-ui",
3
- "version": "7.23.88",
3
+ "version": "7.23.90",
4
4
  "type": "module",
5
5
  "main": "dist/gobj-ui.cjs.js",
6
6
  "module": "dist/gobj-ui.es.js",
@@ -7297,8 +7297,14 @@ function build_node_innerHTML(color, theme, icon, label, topic_name, structural,
7297
7297
  // On dark, lift the card off the (near-black) canvas with a
7298
7298
  // clearly-lighter slate base + a vivid border, or the cards
7299
7299
  // become invisible.
7300
+ /* 25% and not 30% in dark: the tint is what says WHICH topic
7301
+ * a card belongs to, and it is also the ground everything on
7302
+ * the card is written on. At 30% the yellow of the palette
7303
+ * left the record's name at 5.17:1 and the topic under it at
7304
+ * 2.47 -- unreadable at 11px. Five points of tint buy the
7305
+ * name 5.80 and cost the colour almost nothing. */
7300
7306
  bg = dark
7301
- ? `color-mix(in srgb, ${color} 30%, #2c3542)`
7307
+ ? `color-mix(in srgb, ${color} 25%, #2c3542)`
7302
7308
  : `color-mix(in srgb, ${color} 10%, ${surface})`;
7303
7309
  border = dark
7304
7310
  ? `color-mix(in srgb, ${color} 85%, #ffffff)`
@@ -7310,7 +7316,12 @@ function build_node_innerHTML(color, theme, icon, label, topic_name, structural,
7310
7316
  border_style = "solid";
7311
7317
  }
7312
7318
  let title_color = dark ? "#e8eaed" : "#0f172a";
7313
- let sub_color = dark ? "#9aa4b2" : "#64748b";
7319
+ /* The topic name under the record's, at 11px, so it needs the
7320
+ * 4.5:1 of small text on the WORST tint of the palette: the old
7321
+ * greys gave 2.47 in dark and 4.28 in light. These give 4.64 and
7322
+ * 5.65, and the hierarchy stays where it belongs -- in the size
7323
+ * and the weight, not in a grey nobody can read. */
7324
+ let sub_color = dark ? "#ccd3dd" : "#556173";
7314
7325
  let shadow = dark
7315
7326
  ? "0 1px 3px rgba(0,0,0,0.45), 0 1px 2px rgba(0,0,0,0.30)"
7316
7327
  : "0 1px 3px rgba(15,23,42,0.12), 0 1px 2px rgba(15,23,42,0.06)";
@@ -8605,9 +8616,14 @@ function pill_colors(color, theme)
8605
8616
  bg: dark
8606
8617
  ? `color-mix(in srgb, ${color} 45%, #1b2230)`
8607
8618
  : `color-mix(in srgb, ${color} 22%, #ffffff)`,
8619
+ /* The INK of a pill, a leaf chip and a `+N`: it carries the
8620
+ * topic's hue, and it is 10-12px text on the same hue. At
8621
+ * 35/55 the palette's yellow read 4.36 in dark and 3.89 in
8622
+ * light; at 25/45 the worst of the seven is 4.57 and 5.07,
8623
+ * and the hue is still plainly there. */
8608
8624
  fg: dark
8609
- ? `color-mix(in srgb, ${color} 35%, #ffffff)`
8610
- : `color-mix(in srgb, ${color} 55%, #0f172a)`,
8625
+ ? `color-mix(in srgb, ${color} 25%, #ffffff)`
8626
+ : `color-mix(in srgb, ${color} 45%, #0f172a)`,
8611
8627
  border: dark
8612
8628
  ? `color-mix(in srgb, ${color} 80%, #ffffff)`
8613
8629
  : color,
@@ -8637,7 +8653,7 @@ function build_pill_html(pill, color, theme)
8637
8653
  font-size: 10px; font-weight: 700; line-height: 1; white-space: nowrap;
8638
8654
  overflow: hidden; text-overflow: ellipsis;
8639
8655
  cursor: pointer; user-select: none;
8640
- "><span style="font-size: 9px;">${glyph}</span>${escapeHtml(pill.hook)}<span style="opacity: .75; font-weight: 600;">${count}</span></span>`;
8656
+ "><span style="font-size: 9px;">${glyph}</span>${escapeHtml(pill.hook)}<span style="font-weight: 600;">${count}</span></span>`;
8641
8657
  }
8642
8658
 
8643
8659
  /************************************************************
@@ -164,7 +164,7 @@
164
164
 
165
165
  .C_YUI_JSON .JSON_TOGGLE_REMOTE i {
166
166
  font-size: 0.8em;
167
- color: var(--bulma-link, #3273dc);
167
+ color: var(--bulma-link-on-scheme, var(--bulma-link, #3273dc));
168
168
  }
169
169
 
170
170
  .C_YUI_JSON .JSON_KEY {
@@ -195,7 +195,7 @@
195
195
  }
196
196
 
197
197
  .C_YUI_JSON .JSON_STUB {
198
- color: var(--bulma-link, #3273dc);
198
+ color: var(--bulma-link-on-scheme, var(--bulma-link, #3273dc));
199
199
  font-weight: 600;
200
200
  }
201
201
 
@@ -286,6 +286,12 @@
286
286
  /* Bulma's `.button.is-active` only borrows the :active border, which on a
287
287
  * three-way switch is not enough to say WHICH view you are looking at.
288
288
  * Fill it instead — the mark has to survive a glance. */
289
+ /* The raw `--bulma-link` on purpose, and not `-on-scheme`: this is a
290
+ * FILL. The `-on-scheme` variants exist for a brand colour used as
291
+ * INK -- they darken it on a light scheme so text can sit on the
292
+ * page -- and a darkened fill under `link-invert` text is a button
293
+ * nobody asked for. Ink takes `-on-scheme`; a background takes the
294
+ * raw token and pairs it with `-invert`. */
289
295
  .C_YUI_JSON .JSON_VIEW_MODE.is-active {
290
296
  background-color: var(--bulma-link, #3273dc);
291
297
  border-color: var(--bulma-link, #3273dc);
@@ -228,7 +228,9 @@
228
228
  }
229
229
 
230
230
  /*--- per-item state class (item.class) — generic disconnected tint ---*/
231
- .yui-nav-tabs .tabs li.yui-nav-disconnected a { color: var(--bulma-danger, #f14668); }
231
+ .yui-nav-tabs .tabs li.yui-nav-disconnected a {
232
+ color: var(--bulma-danger-on-scheme, var(--bulma-danger, #f14668));
233
+ }
232
234
 
233
235
  /*--- cards (section-index landing grid, mounted as a stage view) ---*/
234
236
  .yui-nav-cards {
@@ -261,11 +263,11 @@
261
263
  }
262
264
  .yui-nav-cards .yui-nav-card:hover,
263
265
  .yui-nav-cards .yui-nav-card:focus-visible {
264
- border-color: var(--bulma-link, #485fc7);
265
- color: var(--bulma-link, #485fc7);
266
+ border-color: var(--bulma-link-on-scheme, var(--bulma-link, #485fc7));
267
+ color: var(--bulma-link-on-scheme, var(--bulma-link, #485fc7));
266
268
  }
267
269
  .yui-nav-cards .yui-nav-card.is-active {
268
- border-color: var(--bulma-link, #485fc7);
270
+ border-color: var(--bulma-link-on-scheme, var(--bulma-link, #485fc7));
269
271
  }
270
272
  .yui-nav-cards .yui-nav-card[data-disabled="1"] {
271
273
  opacity: 0.5;
@@ -629,7 +631,7 @@
629
631
  align-items: center;
630
632
  flex: 0 0 auto;
631
633
  visibility: hidden;
632
- color: var(--bulma-link, #485fc7);
634
+ color: var(--bulma-link-on-scheme, var(--bulma-link, #485fc7));
633
635
  }
634
636
  .yui-toolbar-dropdown-item.is-selected .yui-toolbar-dropdown-check {
635
637
  visibility: visible;
@@ -27,8 +27,8 @@
27
27
  }
28
28
  /* Selected (clicked) card: link-coloured border + soft ring. */
29
29
  .TREEDB_TOPIC_CARD.is-selected {
30
- border-color: var(--bulma-link, #485fc7);
31
- box-shadow: 0 0 0 2px var(--bulma-link, #485fc7) inset;
30
+ border-color: var(--bulma-link-on-scheme, var(--bulma-link, #485fc7));
31
+ box-shadow: 0 0 0 2px var(--bulma-link-on-scheme, var(--bulma-link, #485fc7)) inset;
32
32
  }
33
33
  .TREEDB_TOPIC_CARD .TREEDB_TOPIC_CARD_NAME {
34
34
  font-weight: 600;
@@ -57,7 +57,7 @@
57
57
  .TREEDB_TOPIC_CARD_ACTIONS > a:hover,
58
58
  .TREEDB_TOPIC_CARD_ACTIONS > a:focus-visible {
59
59
  background: var(--bulma-background, #f5f5f5);
60
- color: var(--bulma-link, #485fc7);
60
+ color: var(--bulma-link-on-scheme, var(--bulma-link, #485fc7));
61
61
  }
62
62
 
63
63
  /* Routed topic-info panel. */
@@ -124,7 +124,7 @@ a.ROUTEMAP_LINK .ROUTEMAP_NAME {
124
124
  }
125
125
  .ROUTEMAP_ROUTE {
126
126
  background: transparent;
127
- color: var(--bulma-link, #485fc7);
127
+ color: var(--bulma-link-on-scheme, var(--bulma-link, #485fc7));
128
128
  padding: 0;
129
129
  font-size: 0.8rem;
130
130
  }
package/src/tabulator.css CHANGED
@@ -224,7 +224,7 @@
224
224
  background-color: var(--bulma-grey-darker, #2b2f38);
225
225
  color: var(--bulma-text-strong, #f5f6f7) !important;
226
226
  caret-color: var(--bulma-text-strong, #f5f6f7);
227
- border-color: var(--bulma-link, #4a9eff);
227
+ border-color: var(--bulma-link-on-scheme, var(--bulma-link, #4a9eff));
228
228
  }
229
229
 
230
230
  [data-theme=dark] .tabulator-row .tabulator-cell.tabulator-editing input::placeholder,
@@ -263,7 +263,7 @@
263
263
 
264
264
  .tabulator .tabulator-header .tabulator-col .tabulator-header-filter input:focus,
265
265
  .tabulator .tabulator-header .tabulator-col .tabulator-header-filter select:focus {
266
- border-color: var(--bulma-link, #4a9eff);
266
+ border-color: var(--bulma-link-on-scheme, var(--bulma-link, #4a9eff));
267
267
  outline: none;
268
268
  }
269
269
 
@@ -373,7 +373,7 @@
373
373
  background-color: var(--bulma-grey-darker, #2b2f38);
374
374
  color: var(--bulma-text-strong, #f5f6f7) !important;
375
375
  caret-color: var(--bulma-text-strong, #f5f6f7);
376
- border-color: var(--bulma-link, #4a9eff);
376
+ border-color: var(--bulma-link-on-scheme, var(--bulma-link, #4a9eff));
377
377
  }
378
378
  [data-theme=system] .tabulator-row .tabulator-cell.tabulator-editing input::placeholder,
379
379
  [data-theme=system] .tabulator .tabulator-header .tabulator-header-filter input::placeholder {