@yuneta/gobj-ui 7.23.92 → 7.23.94

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
@@ -1257,7 +1257,14 @@ a level or two, with a count on every cut.
1257
1257
  their children. **`fold_page_size`** (default `24`) is how many children of
1258
1258
  one hook are shown at a time; the rest is a **`+N` chip** at the end of the
1259
1259
  page that opens the next one. Both are attrs of `C_YUI_TREEDB_GRAPH`,
1260
- forwarded to the engine.
1260
+ forwarded to the engine — and since `7.23.93` so are the seven the engine
1261
+ had always had and no host could reach, because this view is what creates
1262
+ the engine and an option it does not forward is an option that does not
1263
+ exist: **`minimap_min_nodes`** (default `30`), **`with_gridline`**,
1264
+ **`with_fullscreen`**, **`with_toolbar`**, **`toolbar_position`**
1265
+ (`right-top`), **`confirm_delete_node`** and **`confirm_unlink_edge`**. The
1266
+ defaults repeat the engine's, so a host that says nothing gets what it got
1267
+ before.
1261
1268
  - **A pill per hook on the card** — `▸ devices 142` folded, `▾ devices 24/142`
1262
1269
  open on a page — in the colour of the child topic, the same colour its hook
1263
1270
  port wears. Tapping it opens or folds that hook, and the card stays where it
@@ -2238,6 +2245,14 @@ against the scheme background, the raw tokens as ink are
2238
2245
  Bulma computes `-on-scheme` per scheme: the same hue, darkened on a light
2239
2246
  page (`warning` goes to 23% lightness), unchanged on a dark one.
2240
2247
 
2248
+ **Quiet text**: `.yui-text-quiet` (the text colour at 75%), never Bulma's
2249
+ `has-text-grey` — one mid grey for both schemes, 3.86:1 on the dark one, and
2250
+ what the library writes in grey is an empty state, a timestamp, a topic id, a
2251
+ notice's detail: text somebody has to read. And a **placeholder** is text
2252
+ too; the shell's stylesheet raises Bulma's 30% alpha to 70% (2.47:1 → 7.96 in
2253
+ dark) where Bulma declares the variable, since a `:root` override does not
2254
+ reach it.
2255
+
2241
2256
  ### i18n: a string must be able to CHANGE language, not just be translated once
2242
2257
 
2243
2258
  Passing a string through `t()` is **not** enough. `refresh_language()` only
@@ -10651,7 +10651,7 @@ function yui_graph_camera_items(gobj, graph, wide) {
10651
10651
  [
10652
10652
  "span",
10653
10653
  {
10654
- class: "GRAPH_ZOOM_LEVEL is-flex is-align-items-center px-2 has-text-grey",
10654
+ class: "GRAPH_ZOOM_LEVEL is-flex is-align-items-center px-2 yui-text-quiet",
10655
10655
  style: "font-size:.85rem; min-width:3.5em; justify-content:center;",
10656
10656
  title: (0, i18next.t)("zoom level"),
10657
10657
  "data-i18n-title": "zoom level"
@@ -13427,7 +13427,7 @@ function render_graph(gobj) {
13427
13427
  $graph.appendChild((0, _yuneta_gobj_js.createElement2)([
13428
13428
  "div",
13429
13429
  {
13430
- class: "JSON_EMPTY has-text-grey p-3",
13430
+ class: "JSON_EMPTY yui-text-quiet p-3",
13431
13431
  "data-i18n": "no data"
13432
13432
  },
13433
13433
  "no data"
@@ -13496,7 +13496,7 @@ function render_text(gobj) {
13496
13496
  $text.appendChild((0, _yuneta_gobj_js.createElement2)([
13497
13497
  "div",
13498
13498
  {
13499
- class: "JSON_EMPTY has-text-grey p-3",
13499
+ class: "JSON_EMPTY yui-text-quiet p-3",
13500
13500
  "data-i18n": "no data"
13501
13501
  },
13502
13502
  "no data"
@@ -13540,7 +13540,7 @@ function render_tree(gobj) {
13540
13540
  $tree.appendChild((0, _yuneta_gobj_js.createElement2)([
13541
13541
  "div",
13542
13542
  {
13543
- class: "JSON_EMPTY has-text-grey p-3",
13543
+ class: "JSON_EMPTY yui-text-quiet p-3",
13544
13544
  "data-i18n": "no data"
13545
13545
  },
13546
13546
  "no data"
@@ -13716,7 +13716,7 @@ function toggle_row(gobj, key, size, is_object, depth, path, open, value) {
13716
13716
  }
13717
13717
  body.push([
13718
13718
  "span",
13719
- { class: "JSON_SUMMARY has-text-grey" },
13719
+ { class: "JSON_SUMMARY yui-text-quiet" },
13720
13720
  summary
13721
13721
  ]);
13722
13722
  let label = container_label(value, MAX_LABEL_CHARS);
@@ -13786,7 +13786,7 @@ function leaf_row(key, value, depth) {
13786
13786
  let wall = format_epoch(value);
13787
13787
  if (wall) body.push([
13788
13788
  "span",
13789
- { class: "JSON_TIME is-size-7 has-text-grey ml-2" },
13789
+ { class: "JSON_TIME is-size-7 yui-text-quiet ml-2" },
13790
13790
  wall
13791
13791
  ]);
13792
13792
  }
@@ -15723,7 +15723,7 @@ function render_raw(gobj) {
15723
15723
  $raw.appendChild((0, _yuneta_gobj_js.createElement2)([
15724
15724
  "div",
15725
15725
  {
15726
- class: "GCLASS_EMPTY p-4 has-text-grey",
15726
+ class: "GCLASS_EMPTY p-4 yui-text-quiet",
15727
15727
  i18n: "no data"
15728
15728
  },
15729
15729
  (0, i18next.t)("no data")
@@ -15739,7 +15739,7 @@ function render_raw(gobj) {
15739
15739
  if (dump.capped) children.push([
15740
15740
  "div",
15741
15741
  {
15742
- class: "GCLASS_RAW_CAPPED has-text-grey is-size-7 p-2",
15742
+ class: "GCLASS_RAW_CAPPED yui-text-quiet is-size-7 p-2",
15743
15743
  i18n: "text truncated"
15744
15744
  },
15745
15745
  (0, i18next.t)("text truncated")
@@ -15772,7 +15772,7 @@ function render_zones(gobj) {
15772
15772
  $zones.appendChild((0, _yuneta_gobj_js.createElement2)([
15773
15773
  "div",
15774
15774
  {
15775
- class: "GCLASS_EMPTY p-4 has-text-grey",
15775
+ class: "GCLASS_EMPTY p-4 yui-text-quiet",
15776
15776
  i18n: "no data"
15777
15777
  },
15778
15778
  (0, i18next.t)("no data")
@@ -20959,7 +20959,7 @@ function build_body(shell, t) {
20959
20959
  ]);
20960
20960
  let $count = (0, _yuneta_gobj_js.createElement2)([
20961
20961
  "span",
20962
- { class: "ROUTEMAP_COUNT is-size-7 has-text-grey is-hidden" },
20962
+ { class: "ROUTEMAP_COUNT is-size-7 yui-text-quiet is-hidden" },
20963
20963
  [$count_n]
20964
20964
  ]);
20965
20965
  let $refs_input = (0, _yuneta_gobj_js.createElement2)(["input", {
@@ -24751,7 +24751,7 @@ function create_tabulator(gobj) {
24751
24751
  index: pkey,
24752
24752
  columns,
24753
24753
  selectableRows: selectable,
24754
- footerElement: "<span class='yui-tabulator-rowcount' style='display:block;text-align:right;font-size:0.8rem;color:#6b7280;padding:0 0.6rem;'></span>"
24754
+ footerElement: "<span class='yui-tabulator-rowcount yui-text-quiet' style='display:block;text-align:right;font-size:0.8rem;padding:0 0.6rem;'></span>"
24755
24755
  });
24756
24756
  let $view_container = (0, _yuneta_gobj_js.gobj_read_attr)(gobj, "$container");
24757
24757
  let $table_el = $view_container ? $view_container.querySelector(`#${table_id}`) : null;
@@ -24911,7 +24911,7 @@ function icon_formatter(cell) {
24911
24911
  if (!/^[a-z0-9-]+$/.test(name) || !yui_icon_is_defined(name)) return (0, _yuneta_gobj_js.createElement2)([
24912
24912
  "span",
24913
24913
  {
24914
- class: "ICON_CELL_UNKNOWN is-size-7 has-text-grey",
24914
+ class: "ICON_CELL_UNKNOWN is-size-7 yui-text-quiet",
24915
24915
  title: name
24916
24916
  },
24917
24917
  name
@@ -61886,6 +61886,13 @@ var attrs_table$3 = [
61886
61886
  (0, _yuneta_gobj_js.SDATA)(_yuneta_gobj_js.data_type_t.DTP_BOOLEAN, "with_treedb_tables", 0, false, "Include treedb tables"),
61887
61887
  (0, _yuneta_gobj_js.SDATA)(_yuneta_gobj_js.data_type_t.DTP_INTEGER, "expand_depth", 0, 2, "Levels of the treedb open when it loads: 1 = the roots alone, 2 = the roots and their children. Forwarded to the G6 child"),
61888
61888
  (0, _yuneta_gobj_js.SDATA)(_yuneta_gobj_js.data_type_t.DTP_INTEGER, "fold_page_size", 0, 24, "Children of one hook shown per page in the graph; a `+N` chip opens the next page. Forwarded to the G6 child"),
61889
+ (0, _yuneta_gobj_js.SDATA)(_yuneta_gobj_js.data_type_t.DTP_INTEGER, "minimap_min_nodes", 0, 30, "Show the minimap from this many nodes on (0 = never). Forwarded to the G6 child"),
61890
+ (0, _yuneta_gobj_js.SDATA)(_yuneta_gobj_js.data_type_t.DTP_BOOLEAN, "with_gridline", 0, true, "Draw the grid under the graph. Forwarded to the G6 child"),
61891
+ (0, _yuneta_gobj_js.SDATA)(_yuneta_gobj_js.data_type_t.DTP_BOOLEAN, "with_fullscreen", 0, true, "Offer the full-screen button. Forwarded to the G6 child"),
61892
+ (0, _yuneta_gobj_js.SDATA)(_yuneta_gobj_js.data_type_t.DTP_BOOLEAN, "with_toolbar", 0, true, "Float the camera toolbar over the canvas. Forwarded to the G6 child"),
61893
+ (0, _yuneta_gobj_js.SDATA)(_yuneta_gobj_js.data_type_t.DTP_STRING, "toolbar_position", 0, "right-top", "Where that toolbar floats: top-left, top-right, bottom-left, bottom-right, left-top, right-top. Forwarded to the G6 child"),
61894
+ (0, _yuneta_gobj_js.SDATA)(_yuneta_gobj_js.data_type_t.DTP_BOOLEAN, "confirm_delete_node", 0, true, "Ask before deleting a node. Forwarded to the G6 child"),
61895
+ (0, _yuneta_gobj_js.SDATA)(_yuneta_gobj_js.data_type_t.DTP_BOOLEAN, "confirm_unlink_edge", 0, true, "Ask before unlinking an edge. Forwarded to the G6 child"),
61889
61896
  (0, _yuneta_gobj_js.SDATA)(_yuneta_gobj_js.data_type_t.DTP_STRING, "operation_mode", _yuneta_gobj_js.sdata_flag_t.SDF_PERSIST, "reading", "Current operation mode (internal behaviour or role). Changed by the user trough the gui."),
61890
61897
  (0, _yuneta_gobj_js.SDATA)(_yuneta_gobj_js.data_type_t.DTP_STRING, "layout", _yuneta_gobj_js.sdata_flag_t.SDF_PERSIST, "", "Current graph layout. User preference. Changed by the user through the gui."),
61891
61898
  (0, _yuneta_gobj_js.SDATA)(_yuneta_gobj_js.data_type_t.DTP_LIST, "hidden_topics", _yuneta_gobj_js.sdata_flag_t.SDF_PERSIST, "[]", "Topics hidden from the graph (legend). User preference, per treedb"),
@@ -61969,6 +61976,13 @@ function mt_create$3(gobj) {
61969
61976
  fkey_port_position: "top",
61970
61977
  expand_depth: (0, _yuneta_gobj_js.gobj_read_integer_attr)(gobj, "expand_depth"),
61971
61978
  fold_page_size: (0, _yuneta_gobj_js.gobj_read_integer_attr)(gobj, "fold_page_size"),
61979
+ minimap_min_nodes: (0, _yuneta_gobj_js.gobj_read_integer_attr)(gobj, "minimap_min_nodes"),
61980
+ with_gridline: (0, _yuneta_gobj_js.gobj_read_bool_attr)(gobj, "with_gridline"),
61981
+ with_fullscreen: (0, _yuneta_gobj_js.gobj_read_bool_attr)(gobj, "with_fullscreen"),
61982
+ with_toolbar: (0, _yuneta_gobj_js.gobj_read_bool_attr)(gobj, "with_toolbar"),
61983
+ toolbar_position: (0, _yuneta_gobj_js.gobj_read_str_attr)(gobj, "toolbar_position"),
61984
+ confirm_delete_node: (0, _yuneta_gobj_js.gobj_read_bool_attr)(gobj, "confirm_delete_node"),
61985
+ confirm_unlink_edge: (0, _yuneta_gobj_js.gobj_read_bool_attr)(gobj, "confirm_unlink_edge"),
61972
61986
  hidden_topics: (0, _yuneta_gobj_js.gobj_read_attr)(gobj, "hidden_topics") || [],
61973
61987
  main_topic: (0, _yuneta_gobj_js.gobj_read_str_attr)(gobj, "main_topic") || "",
61974
61988
  loose_topics: (0, _yuneta_gobj_js.gobj_read_attr)(gobj, "loose_topics") || [],
@@ -64437,7 +64451,7 @@ function build_graph(gobj) {
64437
64451
  let $empty = (0, _yuneta_gobj_js.createElement2)([
64438
64452
  "div",
64439
64453
  {
64440
- class: "TREEDB_SCHEMA_EMPTY p-4 has-text-grey",
64454
+ class: "TREEDB_SCHEMA_EMPTY p-4 yui-text-quiet",
64441
64455
  i18n: "no topics"
64442
64456
  },
64443
64457
  (0, i18next.t)("no topics", { defaultValue: "No topics" })
@@ -66511,7 +66525,7 @@ function build_ui$1(gobj) {
66511
66525
  ],
66512
66526
  [
66513
66527
  "div",
66514
- { class: "SCHEMA_NOTICE p-4 has-text-grey is-hidden" },
66528
+ { class: "SCHEMA_NOTICE p-4 yui-text-quiet is-hidden" },
66515
66529
  []
66516
66530
  ],
66517
66531
  [
@@ -66811,7 +66825,7 @@ function show_notice(gobj, key, detail) {
66811
66825
  ]));
66812
66826
  if (detail) $notice.appendChild((0, _yuneta_gobj_js.createElement2)([
66813
66827
  "span",
66814
- { class: "SCHEMA_NOTICE_DETAIL has-text-grey ml-2" },
66828
+ { class: "SCHEMA_NOTICE_DETAIL yui-text-quiet ml-2" },
66815
66829
  `${detail}`
66816
66830
  ]));
66817
66831
  }
@@ -66933,7 +66947,7 @@ function render_toolbar(gobj) {
66933
66947
  }
66934
66948
  $left.push([
66935
66949
  "nav",
66936
- { class: "SCHEMA_CRUMBS is-size-7 has-text-grey ml-1" },
66950
+ { class: "SCHEMA_CRUMBS is-size-7 yui-text-quiet ml-1" },
66937
66951
  $trail
66938
66952
  ]);
66939
66953
  let $right = [];
@@ -67189,7 +67203,7 @@ function render_topics(gobj, $body) {
67189
67203
  ],
67190
67204
  ambiguous ? [
67191
67205
  "div",
67192
- { class: "SCHEMA_TOPIC_ID is-size-7 has-text-grey" },
67206
+ { class: "SCHEMA_TOPIC_ID is-size-7 yui-text-quiet" },
67193
67207
  [[
67194
67208
  "code",
67195
67209
  {},
@@ -67440,7 +67454,7 @@ function render_columns(gobj, $body) {
67440
67454
  if (topic.cols.length === 0) $wrap.appendChild((0, _yuneta_gobj_js.createElement2)([
67441
67455
  "p",
67442
67456
  {
67443
- class: "SCHEMA_COLUMNS_EMPTY has-text-grey p-3",
67457
+ class: "SCHEMA_COLUMNS_EMPTY yui-text-quiet p-3",
67444
67458
  i18n: "this topic has no column"
67445
67459
  },
67446
67460
  (0, i18next.t)("this topic has no column")
@@ -67552,7 +67566,7 @@ function column_row(gobj, topic, col, index, readonly, twice) {
67552
67566
  { class: "SCHEMA_COL_HANDLE" },
67553
67567
  readonly ? [] : [[
67554
67568
  "span",
67555
- { class: "icon has-text-grey" },
67569
+ { class: "icon yui-text-quiet" },
67556
67570
  [["i", { class: "yi-grip-vertical" }]]
67557
67571
  ]]
67558
67572
  ],
@@ -67567,7 +67581,7 @@ function column_row(gobj, topic, col, index, readonly, twice) {
67567
67581
  ],
67568
67582
  ambiguous ? [
67569
67583
  "span",
67570
- { class: "SCHEMA_COL_ID is-size-7 has-text-grey ml-2" },
67584
+ { class: "SCHEMA_COL_ID is-size-7 yui-text-quiet ml-2" },
67571
67585
  [[
67572
67586
  "code",
67573
67587
  {},
@@ -67909,7 +67923,7 @@ function flags_field(gobj, type, current) {
67909
67923
  return [
67910
67924
  "label",
67911
67925
  el_attrs({
67912
- class: "SCHEMA_FLAG checkbox " + (flag.meaningful ? "" : "SCHEMA_FLAG_DIM has-text-grey-light"),
67926
+ class: "SCHEMA_FLAG checkbox " + (flag.meaningful ? "" : "SCHEMA_FLAG_DIM yui-text-quiet-light"),
67913
67927
  title: flag.desc ? (0, i18next.t)(flag.desc) : "",
67914
67928
  "data-i18n-title": flag.desc || void 0
67915
67929
  }),
@@ -67931,7 +67945,7 @@ function flags_field(gobj, type, current) {
67931
67945
  [[
67932
67946
  "p",
67933
67947
  {
67934
- class: "SCHEMA_FLAG_GROUP_NAME has-text-weight-semibold has-text-grey",
67948
+ class: "SCHEMA_FLAG_GROUP_NAME has-text-weight-semibold yui-text-quiet",
67935
67949
  i18n: group.group
67936
67950
  },
67937
67951
  (0, i18next.t)(group.group)
@@ -68625,7 +68639,7 @@ function render_import_plan(gobj, plan) {
68625
68639
  { class: "SCHEMA_IMPORT_SUMMARY" },
68626
68640
  [[
68627
68641
  "p",
68628
- { class: "SCHEMA_IMPORT_COUNT is-size-7 has-text-grey mb-2" },
68642
+ { class: "SCHEMA_IMPORT_COUNT is-size-7 yui-text-quiet mb-2" },
68629
68643
  [
68630
68644
  [
68631
68645
  "span",
@@ -71160,7 +71174,7 @@ function build_days_grid(gobj, view, locale) {
71160
71174
  let d = new Date(start.getFullYear(), start.getMonth(), start.getDate() + i);
71161
71175
  $dow.push([
71162
71176
  "div",
71163
- { class: "has-text-centered is-size-7 has-text-grey YUI_PERIOD_CAL_DOW" },
71177
+ { class: "has-text-centered is-size-7 yui-text-quiet YUI_PERIOD_CAL_DOW" },
71164
71178
  new Intl.DateTimeFormat(locale, { weekday: "narrow" }).format(d)
71165
71179
  ]);
71166
71180
  }
@@ -71186,7 +71200,7 @@ function build_days_grid(gobj, view, locale) {
71186
71200
  let $wk = (0, _yuneta_gobj_js.createElement2)([
71187
71201
  "button",
71188
71202
  {
71189
- class: "button is-small is-ghost is-size-7 has-text-grey YUI_PERIOD_CAL_WEEKNUM",
71203
+ class: "button is-small is-ghost is-size-7 yui-text-quiet YUI_PERIOD_CAL_WEEKNUM",
71190
71204
  type: "button",
71191
71205
  style: "width:100%;",
71192
71206
  title: wk_name,
@@ -71204,7 +71218,7 @@ function build_days_grid(gobj, view, locale) {
71204
71218
  let ts = d.getTime();
71205
71219
  let selected = ts >= sel.from && ts <= sel.to;
71206
71220
  let $btn = cell_button(gobj, d.getDate(), ts, selected, "YUI_PERIOD_CAL_DAY", day_name.format(d));
71207
- if (d.getMonth() !== view.getMonth()) $btn.classList.add("has-text-grey-light");
71221
+ if (d.getMonth() !== view.getMonth()) $btn.classList.add("yui-text-quiet-light");
71208
71222
  if (day_number(d) === today) $btn.classList.add("has-text-weight-bold", "YUI_PERIOD_CAL_TODAY_CELL");
71209
71223
  cells.push({
71210
71224
  ts,
@@ -10646,7 +10646,7 @@ function yui_graph_camera_items(gobj, graph, wide) {
10646
10646
  [
10647
10647
  "span",
10648
10648
  {
10649
- class: "GRAPH_ZOOM_LEVEL is-flex is-align-items-center px-2 has-text-grey",
10649
+ class: "GRAPH_ZOOM_LEVEL is-flex is-align-items-center px-2 yui-text-quiet",
10650
10650
  style: "font-size:.85rem; min-width:3.5em; justify-content:center;",
10651
10651
  title: t("zoom level"),
10652
10652
  "data-i18n-title": "zoom level"
@@ -13422,7 +13422,7 @@ function render_graph(gobj) {
13422
13422
  $graph.appendChild(createElement2([
13423
13423
  "div",
13424
13424
  {
13425
- class: "JSON_EMPTY has-text-grey p-3",
13425
+ class: "JSON_EMPTY yui-text-quiet p-3",
13426
13426
  "data-i18n": "no data"
13427
13427
  },
13428
13428
  "no data"
@@ -13491,7 +13491,7 @@ function render_text(gobj) {
13491
13491
  $text.appendChild(createElement2([
13492
13492
  "div",
13493
13493
  {
13494
- class: "JSON_EMPTY has-text-grey p-3",
13494
+ class: "JSON_EMPTY yui-text-quiet p-3",
13495
13495
  "data-i18n": "no data"
13496
13496
  },
13497
13497
  "no data"
@@ -13535,7 +13535,7 @@ function render_tree(gobj) {
13535
13535
  $tree.appendChild(createElement2([
13536
13536
  "div",
13537
13537
  {
13538
- class: "JSON_EMPTY has-text-grey p-3",
13538
+ class: "JSON_EMPTY yui-text-quiet p-3",
13539
13539
  "data-i18n": "no data"
13540
13540
  },
13541
13541
  "no data"
@@ -13711,7 +13711,7 @@ function toggle_row(gobj, key, size, is_object, depth, path, open, value) {
13711
13711
  }
13712
13712
  body.push([
13713
13713
  "span",
13714
- { class: "JSON_SUMMARY has-text-grey" },
13714
+ { class: "JSON_SUMMARY yui-text-quiet" },
13715
13715
  summary
13716
13716
  ]);
13717
13717
  let label = container_label(value, MAX_LABEL_CHARS);
@@ -13781,7 +13781,7 @@ function leaf_row(key, value, depth) {
13781
13781
  let wall = format_epoch(value);
13782
13782
  if (wall) body.push([
13783
13783
  "span",
13784
- { class: "JSON_TIME is-size-7 has-text-grey ml-2" },
13784
+ { class: "JSON_TIME is-size-7 yui-text-quiet ml-2" },
13785
13785
  wall
13786
13786
  ]);
13787
13787
  }
@@ -15718,7 +15718,7 @@ function render_raw(gobj) {
15718
15718
  $raw.appendChild(createElement2([
15719
15719
  "div",
15720
15720
  {
15721
- class: "GCLASS_EMPTY p-4 has-text-grey",
15721
+ class: "GCLASS_EMPTY p-4 yui-text-quiet",
15722
15722
  i18n: "no data"
15723
15723
  },
15724
15724
  t("no data")
@@ -15734,7 +15734,7 @@ function render_raw(gobj) {
15734
15734
  if (dump.capped) children.push([
15735
15735
  "div",
15736
15736
  {
15737
- class: "GCLASS_RAW_CAPPED has-text-grey is-size-7 p-2",
15737
+ class: "GCLASS_RAW_CAPPED yui-text-quiet is-size-7 p-2",
15738
15738
  i18n: "text truncated"
15739
15739
  },
15740
15740
  t("text truncated")
@@ -15767,7 +15767,7 @@ function render_zones(gobj) {
15767
15767
  $zones.appendChild(createElement2([
15768
15768
  "div",
15769
15769
  {
15770
- class: "GCLASS_EMPTY p-4 has-text-grey",
15770
+ class: "GCLASS_EMPTY p-4 yui-text-quiet",
15771
15771
  i18n: "no data"
15772
15772
  },
15773
15773
  t("no data")
@@ -20954,7 +20954,7 @@ function build_body(shell, t) {
20954
20954
  ]);
20955
20955
  let $count = createElement2([
20956
20956
  "span",
20957
- { class: "ROUTEMAP_COUNT is-size-7 has-text-grey is-hidden" },
20957
+ { class: "ROUTEMAP_COUNT is-size-7 yui-text-quiet is-hidden" },
20958
20958
  [$count_n]
20959
20959
  ]);
20960
20960
  let $refs_input = createElement2(["input", {
@@ -24746,7 +24746,7 @@ function create_tabulator(gobj) {
24746
24746
  index: pkey,
24747
24747
  columns,
24748
24748
  selectableRows: selectable,
24749
- footerElement: "<span class='yui-tabulator-rowcount' style='display:block;text-align:right;font-size:0.8rem;color:#6b7280;padding:0 0.6rem;'></span>"
24749
+ footerElement: "<span class='yui-tabulator-rowcount yui-text-quiet' style='display:block;text-align:right;font-size:0.8rem;padding:0 0.6rem;'></span>"
24750
24750
  });
24751
24751
  let $view_container = gobj_read_attr(gobj, "$container");
24752
24752
  let $table_el = $view_container ? $view_container.querySelector(`#${table_id}`) : null;
@@ -24906,7 +24906,7 @@ function icon_formatter(cell) {
24906
24906
  if (!/^[a-z0-9-]+$/.test(name) || !yui_icon_is_defined(name)) return createElement2([
24907
24907
  "span",
24908
24908
  {
24909
- class: "ICON_CELL_UNKNOWN is-size-7 has-text-grey",
24909
+ class: "ICON_CELL_UNKNOWN is-size-7 yui-text-quiet",
24910
24910
  title: name
24911
24911
  },
24912
24912
  name
@@ -61881,6 +61881,13 @@ var attrs_table$3 = [
61881
61881
  SDATA(data_type_t.DTP_BOOLEAN, "with_treedb_tables", 0, false, "Include treedb tables"),
61882
61882
  SDATA(data_type_t.DTP_INTEGER, "expand_depth", 0, 2, "Levels of the treedb open when it loads: 1 = the roots alone, 2 = the roots and their children. Forwarded to the G6 child"),
61883
61883
  SDATA(data_type_t.DTP_INTEGER, "fold_page_size", 0, 24, "Children of one hook shown per page in the graph; a `+N` chip opens the next page. Forwarded to the G6 child"),
61884
+ SDATA(data_type_t.DTP_INTEGER, "minimap_min_nodes", 0, 30, "Show the minimap from this many nodes on (0 = never). Forwarded to the G6 child"),
61885
+ SDATA(data_type_t.DTP_BOOLEAN, "with_gridline", 0, true, "Draw the grid under the graph. Forwarded to the G6 child"),
61886
+ SDATA(data_type_t.DTP_BOOLEAN, "with_fullscreen", 0, true, "Offer the full-screen button. Forwarded to the G6 child"),
61887
+ SDATA(data_type_t.DTP_BOOLEAN, "with_toolbar", 0, true, "Float the camera toolbar over the canvas. Forwarded to the G6 child"),
61888
+ SDATA(data_type_t.DTP_STRING, "toolbar_position", 0, "right-top", "Where that toolbar floats: top-left, top-right, bottom-left, bottom-right, left-top, right-top. Forwarded to the G6 child"),
61889
+ SDATA(data_type_t.DTP_BOOLEAN, "confirm_delete_node", 0, true, "Ask before deleting a node. Forwarded to the G6 child"),
61890
+ SDATA(data_type_t.DTP_BOOLEAN, "confirm_unlink_edge", 0, true, "Ask before unlinking an edge. Forwarded to the G6 child"),
61884
61891
  SDATA(data_type_t.DTP_STRING, "operation_mode", sdata_flag_t.SDF_PERSIST, "reading", "Current operation mode (internal behaviour or role). Changed by the user trough the gui."),
61885
61892
  SDATA(data_type_t.DTP_STRING, "layout", sdata_flag_t.SDF_PERSIST, "", "Current graph layout. User preference. Changed by the user through the gui."),
61886
61893
  SDATA(data_type_t.DTP_LIST, "hidden_topics", sdata_flag_t.SDF_PERSIST, "[]", "Topics hidden from the graph (legend). User preference, per treedb"),
@@ -61964,6 +61971,13 @@ function mt_create$3(gobj) {
61964
61971
  fkey_port_position: "top",
61965
61972
  expand_depth: gobj_read_integer_attr(gobj, "expand_depth"),
61966
61973
  fold_page_size: gobj_read_integer_attr(gobj, "fold_page_size"),
61974
+ minimap_min_nodes: gobj_read_integer_attr(gobj, "minimap_min_nodes"),
61975
+ with_gridline: gobj_read_bool_attr(gobj, "with_gridline"),
61976
+ with_fullscreen: gobj_read_bool_attr(gobj, "with_fullscreen"),
61977
+ with_toolbar: gobj_read_bool_attr(gobj, "with_toolbar"),
61978
+ toolbar_position: gobj_read_str_attr(gobj, "toolbar_position"),
61979
+ confirm_delete_node: gobj_read_bool_attr(gobj, "confirm_delete_node"),
61980
+ confirm_unlink_edge: gobj_read_bool_attr(gobj, "confirm_unlink_edge"),
61967
61981
  hidden_topics: gobj_read_attr(gobj, "hidden_topics") || [],
61968
61982
  main_topic: gobj_read_str_attr(gobj, "main_topic") || "",
61969
61983
  loose_topics: gobj_read_attr(gobj, "loose_topics") || [],
@@ -64432,7 +64446,7 @@ function build_graph(gobj) {
64432
64446
  let $empty = createElement2([
64433
64447
  "div",
64434
64448
  {
64435
- class: "TREEDB_SCHEMA_EMPTY p-4 has-text-grey",
64449
+ class: "TREEDB_SCHEMA_EMPTY p-4 yui-text-quiet",
64436
64450
  i18n: "no topics"
64437
64451
  },
64438
64452
  t("no topics", { defaultValue: "No topics" })
@@ -66506,7 +66520,7 @@ function build_ui$1(gobj) {
66506
66520
  ],
66507
66521
  [
66508
66522
  "div",
66509
- { class: "SCHEMA_NOTICE p-4 has-text-grey is-hidden" },
66523
+ { class: "SCHEMA_NOTICE p-4 yui-text-quiet is-hidden" },
66510
66524
  []
66511
66525
  ],
66512
66526
  [
@@ -66806,7 +66820,7 @@ function show_notice(gobj, key, detail) {
66806
66820
  ]));
66807
66821
  if (detail) $notice.appendChild(createElement2([
66808
66822
  "span",
66809
- { class: "SCHEMA_NOTICE_DETAIL has-text-grey ml-2" },
66823
+ { class: "SCHEMA_NOTICE_DETAIL yui-text-quiet ml-2" },
66810
66824
  `${detail}`
66811
66825
  ]));
66812
66826
  }
@@ -66928,7 +66942,7 @@ function render_toolbar(gobj) {
66928
66942
  }
66929
66943
  $left.push([
66930
66944
  "nav",
66931
- { class: "SCHEMA_CRUMBS is-size-7 has-text-grey ml-1" },
66945
+ { class: "SCHEMA_CRUMBS is-size-7 yui-text-quiet ml-1" },
66932
66946
  $trail
66933
66947
  ]);
66934
66948
  let $right = [];
@@ -67184,7 +67198,7 @@ function render_topics(gobj, $body) {
67184
67198
  ],
67185
67199
  ambiguous ? [
67186
67200
  "div",
67187
- { class: "SCHEMA_TOPIC_ID is-size-7 has-text-grey" },
67201
+ { class: "SCHEMA_TOPIC_ID is-size-7 yui-text-quiet" },
67188
67202
  [[
67189
67203
  "code",
67190
67204
  {},
@@ -67435,7 +67449,7 @@ function render_columns(gobj, $body) {
67435
67449
  if (topic.cols.length === 0) $wrap.appendChild(createElement2([
67436
67450
  "p",
67437
67451
  {
67438
- class: "SCHEMA_COLUMNS_EMPTY has-text-grey p-3",
67452
+ class: "SCHEMA_COLUMNS_EMPTY yui-text-quiet p-3",
67439
67453
  i18n: "this topic has no column"
67440
67454
  },
67441
67455
  t("this topic has no column")
@@ -67547,7 +67561,7 @@ function column_row(gobj, topic, col, index, readonly, twice) {
67547
67561
  { class: "SCHEMA_COL_HANDLE" },
67548
67562
  readonly ? [] : [[
67549
67563
  "span",
67550
- { class: "icon has-text-grey" },
67564
+ { class: "icon yui-text-quiet" },
67551
67565
  [["i", { class: "yi-grip-vertical" }]]
67552
67566
  ]]
67553
67567
  ],
@@ -67562,7 +67576,7 @@ function column_row(gobj, topic, col, index, readonly, twice) {
67562
67576
  ],
67563
67577
  ambiguous ? [
67564
67578
  "span",
67565
- { class: "SCHEMA_COL_ID is-size-7 has-text-grey ml-2" },
67579
+ { class: "SCHEMA_COL_ID is-size-7 yui-text-quiet ml-2" },
67566
67580
  [[
67567
67581
  "code",
67568
67582
  {},
@@ -67904,7 +67918,7 @@ function flags_field(gobj, type, current) {
67904
67918
  return [
67905
67919
  "label",
67906
67920
  el_attrs({
67907
- class: "SCHEMA_FLAG checkbox " + (flag.meaningful ? "" : "SCHEMA_FLAG_DIM has-text-grey-light"),
67921
+ class: "SCHEMA_FLAG checkbox " + (flag.meaningful ? "" : "SCHEMA_FLAG_DIM yui-text-quiet-light"),
67908
67922
  title: flag.desc ? t(flag.desc) : "",
67909
67923
  "data-i18n-title": flag.desc || void 0
67910
67924
  }),
@@ -67926,7 +67940,7 @@ function flags_field(gobj, type, current) {
67926
67940
  [[
67927
67941
  "p",
67928
67942
  {
67929
- class: "SCHEMA_FLAG_GROUP_NAME has-text-weight-semibold has-text-grey",
67943
+ class: "SCHEMA_FLAG_GROUP_NAME has-text-weight-semibold yui-text-quiet",
67930
67944
  i18n: group.group
67931
67945
  },
67932
67946
  t(group.group)
@@ -68620,7 +68634,7 @@ function render_import_plan(gobj, plan) {
68620
68634
  { class: "SCHEMA_IMPORT_SUMMARY" },
68621
68635
  [[
68622
68636
  "p",
68623
- { class: "SCHEMA_IMPORT_COUNT is-size-7 has-text-grey mb-2" },
68637
+ { class: "SCHEMA_IMPORT_COUNT is-size-7 yui-text-quiet mb-2" },
68624
68638
  [
68625
68639
  [
68626
68640
  "span",
@@ -71155,7 +71169,7 @@ function build_days_grid(gobj, view, locale) {
71155
71169
  let d = new Date(start.getFullYear(), start.getMonth(), start.getDate() + i);
71156
71170
  $dow.push([
71157
71171
  "div",
71158
- { class: "has-text-centered is-size-7 has-text-grey YUI_PERIOD_CAL_DOW" },
71172
+ { class: "has-text-centered is-size-7 yui-text-quiet YUI_PERIOD_CAL_DOW" },
71159
71173
  new Intl.DateTimeFormat(locale, { weekday: "narrow" }).format(d)
71160
71174
  ]);
71161
71175
  }
@@ -71181,7 +71195,7 @@ function build_days_grid(gobj, view, locale) {
71181
71195
  let $wk = createElement2([
71182
71196
  "button",
71183
71197
  {
71184
- class: "button is-small is-ghost is-size-7 has-text-grey YUI_PERIOD_CAL_WEEKNUM",
71198
+ class: "button is-small is-ghost is-size-7 yui-text-quiet YUI_PERIOD_CAL_WEEKNUM",
71185
71199
  type: "button",
71186
71200
  style: "width:100%;",
71187
71201
  title: wk_name,
@@ -71199,7 +71213,7 @@ function build_days_grid(gobj, view, locale) {
71199
71213
  let ts = d.getTime();
71200
71214
  let selected = ts >= sel.from && ts <= sel.to;
71201
71215
  let $btn = cell_button(gobj, d.getDate(), ts, selected, "YUI_PERIOD_CAL_DAY", day_name.format(d));
71202
- if (d.getMonth() !== view.getMonth()) $btn.classList.add("has-text-grey-light");
71216
+ if (d.getMonth() !== view.getMonth()) $btn.classList.add("yui-text-quiet-light");
71203
71217
  if (day_number(d) === today) $btn.classList.add("has-text-weight-bold", "YUI_PERIOD_CAL_TODAY_CELL");
71204
71218
  cells.push({
71205
71219
  ts,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yuneta/gobj-ui",
3
- "version": "7.23.92",
3
+ "version": "7.23.94",
4
4
  "type": "module",
5
5
  "main": "dist/gobj-ui.cjs.js",
6
6
  "module": "dist/gobj-ui.es.js",
@@ -42,9 +42,13 @@
42
42
  }
43
43
 
44
44
  /*--- readonly fields (e.g. the pkey in update mode) look readonly ---*/
45
+ /* The BACKGROUND and the cursor are what say "not editable"; the text
46
+ * is not dimmed for it. `--bulma-text-weak` on that background reads
47
+ * 4.07:1 in dark, under the 4.5 of small text -- and a value you may
48
+ * read but not change is exactly a value you have to be able to read. */
45
49
  .C_YUI_FORM input.input[readonly] {
46
50
  background-color: var(--bulma-background, #f5f5f5);
47
- color: var(--bulma-text-weak, #7a7a7a);
51
+ color: var(--bulma-text, #2e333d);
48
52
  border-color: var(--bulma-border, #dbdbdb);
49
53
  cursor: default;
50
54
  }
@@ -439,7 +439,7 @@ function render_raw(gobj)
439
439
  let description = gobj_read_attr(gobj, "description");
440
440
  if(description === null || description === undefined) {
441
441
  $raw.appendChild(createElement2(
442
- ['div', {class: 'GCLASS_EMPTY p-4 has-text-grey',
442
+ ['div', {class: 'GCLASS_EMPTY p-4 yui-text-quiet',
443
443
  i18n: 'no data'}, t("no data")]));
444
444
  return;
445
445
  }
@@ -450,7 +450,7 @@ function render_raw(gobj)
450
450
  ];
451
451
  if(dump.capped) {
452
452
  children.push(
453
- ['div', {class: 'GCLASS_RAW_CAPPED has-text-grey is-size-7 p-2',
453
+ ['div', {class: 'GCLASS_RAW_CAPPED yui-text-quiet is-size-7 p-2',
454
454
  i18n: 'text truncated'}, t("text truncated")]);
455
455
  }
456
456
  if(dump.error) {
@@ -484,7 +484,7 @@ function render_zones(gobj)
484
484
  let model = priv.model;
485
485
  if(!model) {
486
486
  $zones.appendChild(createElement2(
487
- ['div', {class: 'GCLASS_EMPTY p-4 has-text-grey',
487
+ ['div', {class: 'GCLASS_EMPTY p-4 yui-text-quiet',
488
488
  i18n: 'no data'}, t("no data")]));
489
489
  return;
490
490
  }
package/src/c_yui_json.js CHANGED
@@ -597,7 +597,7 @@ function render_graph(gobj)
597
597
  teardown_graph_child(gobj);
598
598
  $graph.textContent = "";
599
599
  $graph.appendChild(createElement2(
600
- ['div', {class: 'JSON_EMPTY has-text-grey p-3', 'data-i18n': 'no data'}, 'no data']
600
+ ['div', {class: 'JSON_EMPTY yui-text-quiet p-3', 'data-i18n': 'no data'}, 'no data']
601
601
  ));
602
602
  refresh_language($graph, t);
603
603
  return;
@@ -687,7 +687,7 @@ function render_text(gobj)
687
687
 
688
688
  if(priv.root === null || priv.root === undefined) {
689
689
  $text.appendChild(createElement2(
690
- ['div', {class: 'JSON_EMPTY has-text-grey p-3', 'data-i18n': 'no data'}, 'no data']
690
+ ['div', {class: 'JSON_EMPTY yui-text-quiet p-3', 'data-i18n': 'no data'}, 'no data']
691
691
  ));
692
692
  return;
693
693
  }
@@ -736,7 +736,7 @@ function render_tree(gobj)
736
736
 
737
737
  if(priv.root === null || priv.root === undefined) {
738
738
  $tree.appendChild(createElement2(
739
- ['div', {class: 'JSON_EMPTY has-text-grey p-3', 'data-i18n': 'no data'}, 'no data']
739
+ ['div', {class: 'JSON_EMPTY yui-text-quiet p-3', 'data-i18n': 'no data'}, 'no data']
740
740
  ));
741
741
  return;
742
742
  }
@@ -915,7 +915,7 @@ function toggle_row(gobj, key, size, is_object, depth, path, open, value)
915
915
  body.push(['span', {class: 'JSON_KEY'}, String(key)]);
916
916
  body.push(['span', {class: 'JSON_PUNCT'}, ': ']);
917
917
  }
918
- body.push(['span', {class: 'JSON_SUMMARY has-text-grey'}, summary]);
918
+ body.push(['span', {class: 'JSON_SUMMARY yui-text-quiet'}, summary]);
919
919
 
920
920
  /*
921
921
  * A dict that carries an id says WHICH one it is, right here.
@@ -977,7 +977,7 @@ function leaf_row(key, value, depth)
977
977
  if(key !== null && is_time_field(String(key))) {
978
978
  let wall = format_epoch(value);
979
979
  if(wall) {
980
- body.push(['span', {class: 'JSON_TIME is-size-7 has-text-grey ml-2'}, wall]);
980
+ body.push(['span', {class: 'JSON_TIME is-size-7 yui-text-quiet ml-2'}, wall]);
981
981
  }
982
982
  }
983
983
 
@@ -1055,7 +1055,7 @@ function build_days_grid(gobj, view, locale)
1055
1055
  }
1056
1056
  for(let i = 0; i < 7; i++) {
1057
1057
  let d = new Date(start.getFullYear(), start.getMonth(), start.getDate() + i);
1058
- $dow.push(["div", {class: "has-text-centered is-size-7 has-text-grey YUI_PERIOD_CAL_DOW"},
1058
+ $dow.push(["div", {class: "has-text-centered is-size-7 yui-text-quiet YUI_PERIOD_CAL_DOW"},
1059
1059
  new Intl.DateTimeFormat(locale, {weekday: "narrow"}).format(d)]);
1060
1060
  }
1061
1061
  $rows.push(["div", {class: "YUI_PERIOD_CAL_WEEK",
@@ -1073,7 +1073,7 @@ function build_days_grid(gobj, view, locale)
1073
1073
  let wk = iso_week(monday).week;
1074
1074
  let wk_name = t("week {{n}}", {n: wk});
1075
1075
  let $wk = createElement2(
1076
- ["button", {class: "button is-small is-ghost is-size-7 has-text-grey " +
1076
+ ["button", {class: "button is-small is-ghost is-size-7 yui-text-quiet " +
1077
1077
  "YUI_PERIOD_CAL_WEEKNUM",
1078
1078
  type: "button", style: "width:100%;",
1079
1079
  title: wk_name, "aria-label": wk_name}, String(wk)]);
@@ -1093,7 +1093,7 @@ function build_days_grid(gobj, view, locale)
1093
1093
  let $btn = cell_button(gobj, d.getDate(), ts, selected, "YUI_PERIOD_CAL_DAY",
1094
1094
  day_name.format(d));
1095
1095
  if(d.getMonth() !== view.getMonth()) {
1096
- $btn.classList.add("has-text-grey-light");
1096
+ $btn.classList.add("yui-text-quiet-light");
1097
1097
  }
1098
1098
  if(day_number(d) === today) {
1099
1099
  $btn.classList.add("has-text-weight-bold", "YUI_PERIOD_CAL_TODAY_CELL");
@@ -319,7 +319,7 @@ function build_ui(gobj)
319
319
  style: "height:100%; display:flex; flex-direction:column; min-height:0;"}, [
320
320
  ["div", {class: "SCHEMA_TOOLBAR is-flex is-align-items-center",
321
321
  style: "gap:.25rem; padding:.25rem;"}, []],
322
- ["div", {class: "SCHEMA_NOTICE p-4 has-text-grey is-hidden"}, []],
322
+ ["div", {class: "SCHEMA_NOTICE p-4 yui-text-quiet is-hidden"}, []],
323
323
  ["div", {class: "SCHEMA_BODY", style: "flex:1 1 auto; min-height:0; overflow:auto;"}, []]
324
324
  ]]
325
325
  );
@@ -721,7 +721,7 @@ function show_notice(gobj, key, detail)
721
721
  ));
722
722
  if(detail) {
723
723
  $notice.appendChild(createElement2(
724
- ["span", {class: "SCHEMA_NOTICE_DETAIL has-text-grey ml-2"}, `${detail}`]
724
+ ["span", {class: "SCHEMA_NOTICE_DETAIL yui-text-quiet ml-2"}, `${detail}`]
725
725
  ));
726
726
  }
727
727
  }
@@ -800,7 +800,7 @@ function render_toolbar(gobj)
800
800
  $trail.push(["span", {class: "SCHEMA_CRUMB_SEP"}, "/"]);
801
801
  $trail.push(["span", {class: "SCHEMA_CRUMB_DIAGRAM", i18n: "diagram"}, t("diagram")]);
802
802
  }
803
- $left.push(["nav", {class: "SCHEMA_CRUMBS is-size-7 has-text-grey ml-1"}, $trail]);
803
+ $left.push(["nav", {class: "SCHEMA_CRUMBS is-size-7 yui-text-quiet ml-1"}, $trail]);
804
804
 
805
805
  /*----------------------------------------------*
806
806
  * Right: what is legal HERE. A button that is not
@@ -1061,7 +1061,7 @@ function render_topics(gobj, $body)
1061
1061
  i18n: "system"}, t("system")]
1062
1062
  : ["span", {}, ""],
1063
1063
  ambiguous
1064
- ? ["div", {class: "SCHEMA_TOPIC_ID is-size-7 has-text-grey"},
1064
+ ? ["div", {class: "SCHEMA_TOPIC_ID is-size-7 yui-text-quiet"},
1065
1065
  [["code", {}, `${topic.id}`]]]
1066
1066
  : ["span", {}, ""]
1067
1067
  ]],
@@ -1215,7 +1215,7 @@ function render_columns(gobj, $body)
1215
1215
 
1216
1216
  if(topic.cols.length === 0) {
1217
1217
  $wrap.appendChild(createElement2(
1218
- ["p", {class: "SCHEMA_COLUMNS_EMPTY has-text-grey p-3",
1218
+ ["p", {class: "SCHEMA_COLUMNS_EMPTY yui-text-quiet p-3",
1219
1219
  i18n: "this topic has no column"}, t("this topic has no column")]
1220
1220
  ));
1221
1221
  }
@@ -1320,12 +1320,12 @@ function column_row(gobj, topic, col, index, readonly, twice)
1320
1320
  ["tr", {class: "SCHEMA_COL_ROW", "data-index": `${index}`,
1321
1321
  draggable: readonly ? "false" : "true"}, [
1322
1322
  ["td", {class: "SCHEMA_COL_HANDLE"},
1323
- readonly ? [] : [["span", {class: "icon has-text-grey"},
1323
+ readonly ? [] : [["span", {class: "icon yui-text-quiet"},
1324
1324
  [["i", {class: "yi-grip-vertical"}]]]]],
1325
1325
  ["td", {class: "SCHEMA_COL_NAME"}, [
1326
1326
  ["code", {}, `${col.name}`],
1327
1327
  ambiguous
1328
- ? ["span", {class: "SCHEMA_COL_ID is-size-7 has-text-grey ml-2"},
1328
+ ? ["span", {class: "SCHEMA_COL_ID is-size-7 yui-text-quiet ml-2"},
1329
1329
  [["code", {}, `${col.id}`]]]
1330
1330
  : ["span", {}, ""],
1331
1331
  is_pkey
@@ -1640,7 +1640,7 @@ function flags_field(gobj, type, current)
1640
1640
  for(let group of grouped_flags(type, current)) {
1641
1641
  let $boxes = group.flags.map((flag) => {
1642
1642
  return ["label", el_attrs({class: "SCHEMA_FLAG checkbox " +
1643
- (flag.meaningful ? "" : "SCHEMA_FLAG_DIM has-text-grey-light"),
1643
+ (flag.meaningful ? "" : "SCHEMA_FLAG_DIM yui-text-quiet-light"),
1644
1644
  title: flag.desc ? t(flag.desc) : "",
1645
1645
  "data-i18n-title": flag.desc || undefined}), [
1646
1646
  ["input", el_attrs({type: "checkbox", class: "SCHEMA_FLAG_BOX",
@@ -1651,7 +1651,7 @@ function flags_field(gobj, type, current)
1651
1651
  });
1652
1652
 
1653
1653
  $groups.push(["div", {class: "SCHEMA_FLAG_GROUP mb-2"}, [
1654
- ["p", {class: "SCHEMA_FLAG_GROUP_NAME has-text-weight-semibold has-text-grey",
1654
+ ["p", {class: "SCHEMA_FLAG_GROUP_NAME has-text-weight-semibold yui-text-quiet",
1655
1655
  i18n: group.group}, t(group.group)],
1656
1656
  ["div", {class: "SCHEMA_FLAG_LIST"}, $boxes]
1657
1657
  ]]);
@@ -2109,7 +2109,7 @@ function render_import_plan(gobj, plan)
2109
2109
 
2110
2110
  $pane.appendChild(createElement2(
2111
2111
  ["div", {class: "SCHEMA_IMPORT_SUMMARY"}, [
2112
- ["p", {class: "SCHEMA_IMPORT_COUNT is-size-7 has-text-grey mb-2"}, [
2112
+ ["p", {class: "SCHEMA_IMPORT_COUNT is-size-7 yui-text-quiet mb-2"}, [
2113
2113
  ["span", {i18n: "writes"}, t("writes")],
2114
2114
  ["span", {class: "ml-1"}, `${plan.writes.length}`],
2115
2115
  ["span", {class: "ml-3", i18n: "deletions"}, t("deletions")],
@@ -521,6 +521,46 @@
521
521
  white-space: nowrap;
522
522
  }
523
523
 
524
+ /*============================================================
525
+ * Legibility: two rules the whole library leans on
526
+ *
527
+ * A PLACEHOLDER is text, and Bulma paints it with the text
528
+ * colour at 30% alpha: 2.47:1 on the dark scheme, 1.79 on
529
+ * the light one. It is what says what a box is FOR -- the
530
+ * graph's `search`, a form's hint -- so it is written at
531
+ * 70%: 7.96 and 4.95, and plainly still secondary. The
532
+ * `opacity: 1` is for Firefox, which dims a placeholder
533
+ * again on top of its colour.
534
+ *
535
+ * And `.yui-text-quiet` is what the library uses where it
536
+ * used to say `has-text-grey`: Bulma's grey is ONE mid tone
537
+ * for both schemes (3.86:1 on the dark one), and every use
538
+ * of it in here is text somebody has to read -- an empty
539
+ * state, a timestamp, a topic id, the detail of a notice.
540
+ * The text colour at 75% is the same intent, legible.
541
+ *============================================================*/
542
+ /* Bulma declares `--bulma-input-placeholder-color` INSIDE the
543
+ * `.input, .textarea, .select` block (its `.input::placeholder` rule
544
+ * reads it there), so a `:root` override never reaches it and a bare
545
+ * `input::placeholder` loses to Bulma's class selector. The variable
546
+ * is redefined where Bulma defines it, with the alpha it should have
547
+ * had: same hue, same lightness, 0.7 instead of 0.3. */
548
+ .input,
549
+ .textarea,
550
+ .select select {
551
+ --bulma-input-placeholder-color:
552
+ hsla(var(--bulma-text-h), var(--bulma-text-s), var(--bulma-text-strong-l), 0.7);
553
+ }
554
+
555
+ input::placeholder,
556
+ textarea::placeholder {
557
+ opacity: 1; /* Firefox dims a placeholder again, on top of its colour */
558
+ }
559
+
560
+ .yui-text-quiet {
561
+ opacity: 0.75;
562
+ }
563
+
524
564
  /*============================================================
525
565
  * Toolbar — type:"avatar"
526
566
  * Circular badge populated by the host-registered provider
@@ -115,6 +115,19 @@ SDATA(data_type_t.DTP_BOOLEAN, "with_treedb_tables",0, false, "Include treedb
115
115
  SDATA(data_type_t.DTP_INTEGER, "expand_depth", 0, 2, "Levels of the treedb open when it loads: 1 = the roots alone, 2 = the roots and their children. Forwarded to the G6 child"),
116
116
  SDATA(data_type_t.DTP_INTEGER, "fold_page_size", 0, 24, "Children of one hook shown per page in the graph; a `+N` chip opens the next page. Forwarded to the G6 child"),
117
117
 
118
+ /*---------------- Forwarded to the G6 child (its own defaults) ----------------*/
119
+ /* Options the ENGINE has always had and no host could reach: this view
120
+ * creates the child, so an option it does not forward is an option that
121
+ * does not exist. The defaults repeat the child's -- a host that says
122
+ * nothing gets exactly what it got before. */
123
+ SDATA(data_type_t.DTP_INTEGER, "minimap_min_nodes", 0, 30, "Show the minimap from this many nodes on (0 = never). Forwarded to the G6 child"),
124
+ SDATA(data_type_t.DTP_BOOLEAN, "with_gridline", 0, true, "Draw the grid under the graph. Forwarded to the G6 child"),
125
+ SDATA(data_type_t.DTP_BOOLEAN, "with_fullscreen", 0, true, "Offer the full-screen button. Forwarded to the G6 child"),
126
+ SDATA(data_type_t.DTP_BOOLEAN, "with_toolbar", 0, true, "Float the camera toolbar over the canvas. Forwarded to the G6 child"),
127
+ SDATA(data_type_t.DTP_STRING, "toolbar_position", 0, "right-top", "Where that toolbar floats: top-left, top-right, bottom-left, bottom-right, left-top, right-top. Forwarded to the G6 child"),
128
+ SDATA(data_type_t.DTP_BOOLEAN, "confirm_delete_node", 0, true, "Ask before deleting a node. Forwarded to the G6 child"),
129
+ SDATA(data_type_t.DTP_BOOLEAN, "confirm_unlink_edge", 0, true, "Ask before unlinking an edge. Forwarded to the G6 child"),
130
+
118
131
  /*---------------- User last selections ----------------*/
119
132
  SDATA(data_type_t.DTP_STRING, "operation_mode", sdata_flag_t.SDF_PERSIST, "reading", "Current operation mode (internal behaviour or role). Changed by the user trough the gui."),
120
133
  SDATA(data_type_t.DTP_STRING, "layout", sdata_flag_t.SDF_PERSIST, "", "Current graph layout. User preference. Changed by the user through the gui."),
@@ -256,6 +269,13 @@ function mt_create(gobj)
256
269
  fkey_port_position: "top",
257
270
  expand_depth: gobj_read_integer_attr(gobj, "expand_depth"),
258
271
  fold_page_size: gobj_read_integer_attr(gobj, "fold_page_size"),
272
+ minimap_min_nodes: gobj_read_integer_attr(gobj, "minimap_min_nodes"),
273
+ with_gridline: gobj_read_bool_attr(gobj, "with_gridline"),
274
+ with_fullscreen: gobj_read_bool_attr(gobj, "with_fullscreen"),
275
+ with_toolbar: gobj_read_bool_attr(gobj, "with_toolbar"),
276
+ toolbar_position: gobj_read_str_attr(gobj, "toolbar_position"),
277
+ confirm_delete_node: gobj_read_bool_attr(gobj, "confirm_delete_node"),
278
+ confirm_unlink_edge: gobj_read_bool_attr(gobj, "confirm_unlink_edge"),
259
279
  hidden_topics: gobj_read_attr(gobj, "hidden_topics") || [],
260
280
  main_topic: gobj_read_str_attr(gobj, "main_topic") || "",
261
281
  loose_topics: gobj_read_attr(gobj, "loose_topics") || [],
@@ -547,7 +547,7 @@ function build_graph(gobj)
547
547
  let data = schema_to_graph(gobj);
548
548
  if(data.nodes.length === 0) {
549
549
  let $empty = createElement2(
550
- ['div', {class: 'TREEDB_SCHEMA_EMPTY p-4 has-text-grey',
550
+ ['div', {class: 'TREEDB_SCHEMA_EMPTY p-4 yui-text-quiet',
551
551
  i18n: 'no topics'}, t('no topics', {defaultValue: 'No topics'})]
552
552
  );
553
553
  $container.appendChild($empty);
@@ -1503,9 +1503,13 @@ function create_tabulator(gobj)
1503
1503
  columns: columns,
1504
1504
  selectableRows: selectable,
1505
1505
  /* Row-count footer (updated on every data change below). */
1506
- footerElement: "<span class='yui-tabulator-rowcount' " +
1506
+ /* No colour of its own: `#6b7280` was one grey written into
1507
+ * the html for both schemes, and on the dark footer it read
1508
+ * 3.29:1. It inherits the footer's, which tabulator.css
1509
+ * themes. */
1510
+ footerElement: "<span class='yui-tabulator-rowcount yui-text-quiet' " +
1507
1511
  "style='display:block;text-align:right;font-size:0.8rem;" +
1508
- "color:#6b7280;padding:0 0.6rem;'></span>",
1512
+ "padding:0 0.6rem;'></span>",
1509
1513
  });
1510
1514
 
1511
1515
  /*
@@ -1799,7 +1803,7 @@ function icon_formatter(cell)
1799
1803
  * that mounts this table. */
1800
1804
  return createElement2([
1801
1805
  "span",
1802
- {class: "ICON_CELL_UNKNOWN is-size-7 has-text-grey", title: name},
1806
+ {class: "ICON_CELL_UNKNOWN is-size-7 yui-text-quiet", title: name},
1803
1807
  name
1804
1808
  ]);
1805
1809
  }
@@ -268,7 +268,7 @@ function build_body(shell, t)
268
268
  * every keystroke, is what repaints it. */
269
269
  let $count_n = createElement2(["span", {class: "ROUTEMAP_COUNT_N"}, ""]);
270
270
  let $count = createElement2(
271
- ["span", {class: "ROUTEMAP_COUNT is-size-7 has-text-grey is-hidden"},
271
+ ["span", {class: "ROUTEMAP_COUNT is-size-7 yui-text-quiet is-hidden"},
272
272
  [$count_n]]
273
273
  );
274
274
  /* References are hidden by default and revealed by this toggle.
package/src/tabulator.css CHANGED
@@ -227,9 +227,16 @@
227
227
  border-color: var(--bulma-link-on-scheme, var(--bulma-link, #4a9eff));
228
228
  }
229
229
 
230
- [data-theme=dark] .tabulator-row .tabulator-cell.tabulator-editing input::placeholder,
231
- [data-theme=dark] .tabulator .tabulator-header .tabulator-header-filter input::placeholder {
232
- color: var(--bulma-text-weak, #8a8f98);
230
+ /* Tabulator's inputs are bare `input`s, so Bulma's placeholder colour
231
+ * never reaches them: in the light scheme they were left at the
232
+ * BROWSER's default (3.09:1) and in the dark one they were painted
233
+ * with `--bulma-text-weak` (4.07). One rule for every scheme, the same
234
+ * 70% of the text colour the rest of the library uses -- `filter
235
+ * column…` is what says what that box does. */
236
+ .tabulator-row .tabulator-cell.tabulator-editing input::placeholder,
237
+ .tabulator .tabulator-header .tabulator-header-filter input::placeholder {
238
+ color: hsla(var(--bulma-text-h), var(--bulma-text-s), var(--bulma-text-strong-l), 0.7);
239
+ opacity: 1;
233
240
  }
234
241
 
235
242
  /* ====================================================================
@@ -375,10 +382,6 @@
375
382
  caret-color: var(--bulma-text-strong, #f5f6f7);
376
383
  border-color: var(--bulma-link-on-scheme, var(--bulma-link, #4a9eff));
377
384
  }
378
- [data-theme=system] .tabulator-row .tabulator-cell.tabulator-editing input::placeholder,
379
- [data-theme=system] .tabulator .tabulator-header .tabulator-header-filter input::placeholder {
380
- color: var(--bulma-text-weak, #8a8f98);
381
- }
382
385
  /* same furniture-not-editor rule as [data-theme=dark] above */
383
386
  [data-theme=system] .tabulator .tabulator-header .tabulator-col .tabulator-header-filter input,
384
387
  [data-theme=system] .tabulator .tabulator-header .tabulator-col .tabulator-header-filter select {
@@ -110,7 +110,7 @@ export function yui_graph_camera_items(gobj, graph, wide)
110
110
  return [
111
111
  camera_button(gobj, "yi-magnifying-glass-plus", "EV_ZOOM_IN", "zoom in", wide),
112
112
  camera_button(gobj, "yi-magnifying-glass-minus", "EV_ZOOM_OUT", "zoom out", wide),
113
- ['span', {class: 'GRAPH_ZOOM_LEVEL is-flex is-align-items-center px-2 has-text-grey',
113
+ ['span', {class: 'GRAPH_ZOOM_LEVEL is-flex is-align-items-center px-2 yui-text-quiet',
114
114
  style: 'font-size:.85rem; min-width:3.5em; justify-content:center;',
115
115
  title: t('zoom level'), 'data-i18n-title': 'zoom level'},
116
116
  yui_graph_zoom_text(graph)],