@yuneta/gobj-ui 7.23.51 → 7.23.53
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 +21 -5
- package/dist/gobj-ui.cjs.js +237 -157
- package/dist/gobj-ui.es.js +237 -157
- package/package.json +2 -2
- package/src/c_yui_form.js +4 -0
- package/src/c_yui_treedb_topic_with_form.css +10 -0
- package/src/c_yui_treedb_topic_with_form.js +89 -7
- package/src/c_yui_treedb_topics.js +4 -1
- package/src/lib_icons.js +51 -0
package/README.md
CHANGED
|
@@ -642,16 +642,32 @@ url is what gives way, cut with an ellipsis, and the whole value stays in the
|
|
|
642
642
|
|
|
643
643
|
### Reading a topic a page at a time
|
|
644
644
|
|
|
645
|
+
> ⚠️ **`with_remote_paging` is OFF in every consumer, and must stay off until
|
|
646
|
+
> linking works with a partial topic.** A record's link picker is built from
|
|
647
|
+
> the rows the PARENT topic's table holds — `build_fkey_options()` asks it
|
|
648
|
+
> with `get_topic_data`, which answers `tabulator.getData()` — and with paging
|
|
649
|
+
> that is one page. So the picker offers 200 of the 5891 possible parents (the
|
|
650
|
+
> right one is usually not among them), and a record whose parent is not on
|
|
651
|
+
> the loaded page opens with an fkey the form cannot match, which saving then
|
|
652
|
+
> drops. A treedb is a **memory database** — the backend holds the topic in
|
|
653
|
+
> RAM either way — so paging buys little and costs the links. The machinery
|
|
654
|
+
> below stays, working and tested, for the day linking learns to ask the
|
|
655
|
+
> BACKEND for a parent instead of the sibling table.
|
|
656
|
+
>
|
|
657
|
+
> **Local pagination is not affected and stays on.** `getData()` answers the
|
|
658
|
+
> WHOLE dataset whatever page is on screen, so paginating the DISPLAY is safe;
|
|
659
|
+
> only paginating the FETCH is not. `page_size` sets the display page for both
|
|
660
|
+
> paths.
|
|
661
|
+
|
|
645
662
|
`C_YUI_TREEDB_TOPICS` takes **`with_remote_paging`** (off by default) and
|
|
646
663
|
forwards it to every topic table: the table pulls the page it is showing
|
|
647
664
|
instead of the host pushing the whole topic down. It needs the SDK's `nodes`
|
|
648
665
|
with `from` / `limit` (see `YUNO_TREEDB.md` §5.3).
|
|
649
666
|
|
|
650
|
-
**The page size is generous on purpose** (`page_size`, 200). A
|
|
651
|
-
fits in one page behaves exactly as it did — paginator hidden,
|
|
652
|
-
seeing every row
|
|
653
|
-
|
|
654
|
-
option.
|
|
667
|
+
**The page size is generous on purpose** (`page_size`, 200 when paging). A
|
|
668
|
+
treedb that fits in one page behaves exactly as it did — paginator hidden,
|
|
669
|
+
every filter seeing every row. Only a topic that does NOT fit pays for paging,
|
|
670
|
+
and for that one loading it whole was never an option.
|
|
655
671
|
|
|
656
672
|
**Safe against a backend that cannot page:** it answers the whole list, which
|
|
657
673
|
`nodes_answer()` reads as one page. That is the truth, and it is why the table
|
package/dist/gobj-ui.cjs.js
CHANGED
|
@@ -6811,6 +6811,7 @@ function build_form_field_conf(gobj, field_desc) {
|
|
|
6811
6811
|
field_conf.options = get_fkey_select_options(gobj, field_desc);
|
|
6812
6812
|
break;
|
|
6813
6813
|
case "image":
|
|
6814
|
+
case "icon":
|
|
6814
6815
|
case "string":
|
|
6815
6816
|
field_conf.tag = "input";
|
|
6816
6817
|
field_conf.inputType = "text";
|
|
@@ -7728,6 +7729,7 @@ function template2columns(gobj, columns, template, sub_elements) {
|
|
|
7728
7729
|
case "hook": break;
|
|
7729
7730
|
case "fkey": break;
|
|
7730
7731
|
case "image":
|
|
7732
|
+
case "icon":
|
|
7731
7733
|
case "string":
|
|
7732
7734
|
column.editor = "input";
|
|
7733
7735
|
column.editorParams = {
|
|
@@ -8166,6 +8168,7 @@ function treedb_value_2_form_value(gobj, field_desc, value) {
|
|
|
8166
8168
|
case "date":
|
|
8167
8169
|
case "color":
|
|
8168
8170
|
case "image":
|
|
8171
|
+
case "icon":
|
|
8169
8172
|
case "tel":
|
|
8170
8173
|
case "template":
|
|
8171
8174
|
case "table":
|
|
@@ -8258,6 +8261,7 @@ function form_value_2_treedb_value(gobj, field_desc, value) {
|
|
|
8258
8261
|
case "date":
|
|
8259
8262
|
case "color":
|
|
8260
8263
|
case "image":
|
|
8264
|
+
case "icon":
|
|
8261
8265
|
case "tel": break;
|
|
8262
8266
|
case "template":
|
|
8263
8267
|
if ((0, _yuneta_gobj_js.is_string)(value)) try {
|
|
@@ -20534,7 +20538,8 @@ var attrs_table$6 = [
|
|
|
20534
20538
|
(0, _yuneta_gobj_js.SDATA)(_yuneta_gobj_js.data_type_t.DTP_POINTER, "gobj_remote_yuno", 0, null, "Remote yuno for data fetching"),
|
|
20535
20539
|
(0, _yuneta_gobj_js.SDATA)(_yuneta_gobj_js.data_type_t.DTP_STRING, "treedb_name", 0, null, "Remote TreeDB service name"),
|
|
20536
20540
|
(0, _yuneta_gobj_js.SDATA)(_yuneta_gobj_js.data_type_t.DTP_JSON, "descs", 0, null, "Description of topics"),
|
|
20537
|
-
(0, _yuneta_gobj_js.SDATA)(_yuneta_gobj_js.data_type_t.DTP_BOOLEAN, "with_remote_paging", 0, false, "Each topic table pulls its rows a PAGE at a time (`nodes` from/limit) instead of loading the topic whole.
|
|
20541
|
+
(0, _yuneta_gobj_js.SDATA)(_yuneta_gobj_js.data_type_t.DTP_BOOLEAN, "with_remote_paging", 0, false, "Each topic table pulls its rows a PAGE at a time (`nodes` from/limit) instead of loading the topic whole. ⚠️ DO NOT TURN THIS ON: a partial topic BREAKS LINKING -- the link picker of a record is built from the rows the PARENT topic's table holds, which with paging is one page, so the right parent is usually not offered and an existing link the form cannot match is dropped on save. Off in every consumer until linking asks the backend instead of the sibling table"),
|
|
20542
|
+
(0, _yuneta_gobj_js.SDATA)(_yuneta_gobj_js.data_type_t.DTP_INTEGER, "page_size", 0, 0, "Rows per page of each topic table (the DISPLAY; the fetch is whole). 0 leaves the table's own default"),
|
|
20538
20543
|
(0, _yuneta_gobj_js.SDATA)(_yuneta_gobj_js.data_type_t.DTP_BOOLEAN, "with_selection_bar", 0, false, "Each topic table shows the shared selection bar (\"N selected\" + a way out) above it while in edition mode. OFF by default: the bar takes its words from the HOST's i18n, so a host that turns it on must define \"{{n}} selected\" and \"clear selection\""),
|
|
20539
20544
|
(0, _yuneta_gobj_js.SDATA)(_yuneta_gobj_js.data_type_t.DTP_BOOLEAN, "system", 0, false, "Manage system topics (true) or user topics (false)"),
|
|
20540
20545
|
(0, _yuneta_gobj_js.SDATA)(_yuneta_gobj_js.data_type_t.DTP_STRING, "tabs_style", 0, "is-toggle is-fullwidth", "Bulma tab styling"),
|
|
@@ -21351,6 +21356,7 @@ function process_treedb_descs$1(gobj) {
|
|
|
21351
21356
|
topic_name: key,
|
|
21352
21357
|
desc,
|
|
21353
21358
|
with_remote_paging: (0, _yuneta_gobj_js.gobj_read_bool_attr)(gobj, "with_remote_paging"),
|
|
21359
|
+
page_size: (0, _yuneta_gobj_js.gobj_read_integer_attr)(gobj, "page_size"),
|
|
21354
21360
|
with_selection_bar: (0, _yuneta_gobj_js.gobj_read_bool_attr)(gobj, "with_selection_bar")
|
|
21355
21361
|
};
|
|
21356
21362
|
let id = `${(0, _yuneta_gobj_js.gobj_name)(gobj)}?${desc.topic_name}`;
|
|
@@ -22656,6 +22662,182 @@ function yui_table_filter_clear(table) {
|
|
|
22656
22662
|
});
|
|
22657
22663
|
}
|
|
22658
22664
|
//#endregion
|
|
22665
|
+
//#region src/lib_icons.js
|
|
22666
|
+
/*********************************************************
|
|
22667
|
+
* lib_icons.js
|
|
22668
|
+
*
|
|
22669
|
+
* Two icon systems are managed here:
|
|
22670
|
+
*
|
|
22671
|
+
* 1. FA-style CSS icons (yui_icons.css)
|
|
22672
|
+
* Usage: <i class="yi-save"></i>
|
|
22673
|
+
* Color: inherits currentColor from parent via CSS mask.
|
|
22674
|
+
*
|
|
22675
|
+
* 2. SVG symbol icons for G6 toolbar (and any other component
|
|
22676
|
+
* that uses <use xlink:href="#id">).
|
|
22677
|
+
* Symbols are injected once into the DOM.
|
|
22678
|
+
* All symbol ids are prefixed with "g6-icon-" to avoid
|
|
22679
|
+
* conflicts with other DOM elements.
|
|
22680
|
+
* Icon paths come from:
|
|
22681
|
+
* fontawesome-free-7.1.0-web/sprites/solid.svg
|
|
22682
|
+
*
|
|
22683
|
+
* G6 toolbar items are managed via CSS class names (className
|
|
22684
|
+
* field in getItems()) using YuiToolbar in c_g6_nodes_tree.js.
|
|
22685
|
+
* This lets lib_graph.js state functions (set_submit_state,
|
|
22686
|
+
* disableElements, …) work on toolbar icons exactly like on
|
|
22687
|
+
* regular Bulma/FA buttons — no icon-specific helpers needed.
|
|
22688
|
+
*
|
|
22689
|
+
* Copyright (c) 2025-2026, ArtGins.
|
|
22690
|
+
* All Rights Reserved.
|
|
22691
|
+
*********************************************************/
|
|
22692
|
+
var CUSTOM_SVG_ICONS_ID = "g6-custom-svgicons";
|
|
22693
|
+
var ICONS = `<svg xmlns="http://www.w3.org/2000/svg">
|
|
22694
|
+
<!-- magnifying-glass-plus -->
|
|
22695
|
+
<symbol id="g6-icon-zoom-in" viewBox="0 0 512 512">
|
|
22696
|
+
<path fill="currentColor" d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376C296.3 401.1 253.9 416 208 416 93.1 416 0 322.9 0 208S93.1 0 208 0 416 93.1 416 208zM208 112c-13.3 0-24 10.7-24 24l0 48-48 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l48 0 0 48c0 13.3 10.7 24 24 24s24-10.7 24-24l0-48 48 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-48 0 0-48c0-13.3-10.7-24-24-24z"/>
|
|
22697
|
+
</symbol>
|
|
22698
|
+
<!-- magnifying-glass-minus -->
|
|
22699
|
+
<symbol id="g6-icon-zoom-out" viewBox="0 0 512 512">
|
|
22700
|
+
<path fill="currentColor" d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376C296.3 401.1 253.9 416 208 416 93.1 416 0 322.9 0 208S93.1 0 208 0 416 93.1 416 208zM136 184c-13.3 0-24 10.7-24 24s10.7 24 24 24l144 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-144 0z"/>
|
|
22701
|
+
</symbol>
|
|
22702
|
+
<!-- house (reset zoom: back to original 100% view) -->
|
|
22703
|
+
<symbol id="g6-icon-home" viewBox="0 0 512 512">
|
|
22704
|
+
<path fill="currentColor" d="M277.8 8.6c-12.3-11.4-31.3-11.4-43.5 0l-224 208c-9.6 9-12.8 22.9-8 35.1S18.8 272 32 272l16 0 0 176c0 35.3 28.7 64 64 64l288 0c35.3 0 64-28.7 64-64l0-176 16 0c13.2 0 25-8.1 29.8-20.3s1.6-26.2-8-35.1l-224-208zM240 320l32 0c26.5 0 48 21.5 48 48l0 96-128 0 0-96c0-26.5 21.5-48 48-48z"/>
|
|
22705
|
+
</symbol>
|
|
22706
|
+
<!-- expand (zoom to fit) -->
|
|
22707
|
+
<symbol id="g6-icon-fit" viewBox="0 0 448 512">
|
|
22708
|
+
<path fill="currentColor" d="M32 32C14.3 32 0 46.3 0 64l0 96c0 17.7 14.3 32 32 32s32-14.3 32-32l0-64 64 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 32zM64 352c0-17.7-14.3-32-32-32S0 334.3 0 352l0 96c0 17.7 14.3 32 32 32l96 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0 0-64zM320 32c-17.7 0-32 14.3-32 32s14.3 32 32 32l64 0 0 64c0 17.7 14.3 32 32 32s32-14.3 32-32l0-96c0-17.7-14.3-32-32-32l-96 0zM448 352c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 64-64 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l96 0c17.7 0 32-14.3 32-32l0-96z"/>
|
|
22709
|
+
</symbol>
|
|
22710
|
+
<!-- fit to selection: the same corner brackets as the fit icon,
|
|
22711
|
+
around a marked object. The two sit side by side in the
|
|
22712
|
+
toolbar and have to read as a family, which a borrowed glyph
|
|
22713
|
+
would not. (No backticks in here: the sprite lives inside a
|
|
22714
|
+
template literal.) -->
|
|
22715
|
+
<symbol id="g6-icon-fit-selection" viewBox="0 0 448 512">
|
|
22716
|
+
<path fill="currentColor" d="M32 32C14.3 32 0 46.3 0 64l0 96c0 17.7 14.3 32 32 32s32-14.3 32-32l0-64 64 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 32zM64 352c0-17.7-14.3-32-32-32S0 334.3 0 352l0 96c0 17.7 14.3 32 32 32l96 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0 0-64zM320 32c-17.7 0-32 14.3-32 32s14.3 32 32 32l64 0 0 64c0 17.7 14.3 32 32 32s32-14.3 32-32l0-96c0-17.7-14.3-32-32-32l-96 0zM448 352c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 64-64 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l96 0c17.7 0 32-14.3 32-32l0-96z"/>
|
|
22717
|
+
<rect fill="currentColor" x="144" y="176" width="160" height="160" rx="24"/>
|
|
22718
|
+
</symbol>
|
|
22719
|
+
<!-- crosshairs (center) -->
|
|
22720
|
+
<symbol id="g6-icon-center" viewBox="0 0 576 512">
|
|
22721
|
+
<path fill="currentColor" d="M288-16c17.7 0 32 14.3 32 32l0 18.3c98.1 14 175.7 91.6 189.7 189.7l18.3 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-18.3 0c-14 98.1-91.6 175.7-189.7 189.7l0 18.3c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-18.3C157.9 463.7 80.3 386.1 66.3 288L48 288c-17.7 0-32-14.3-32-32s14.3-32 32-32l18.3 0C80.3 125.9 157.9 48.3 256 34.3L256 16c0-17.7 14.3-32 32-32zM131.2 288c12.7 62.7 62.1 112.1 124.8 124.8l0-12.8c0-17.7 14.3-32 32-32s32 14.3 32 32l0 12.8c62.7-12.7 112.1-62.1 124.8-124.8L432 288c-17.7 0-32-14.3-32-32s14.3-32 32-32l12.8 0C432.1 161.3 382.7 111.9 320 99.2l0 12.8c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-12.8C193.3 111.9 143.9 161.3 131.2 224l12.8 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-12.8 0zM288 208a48 48 0 1 1 0 96 48 48 0 1 1 0-96z"/>
|
|
22722
|
+
</symbol>
|
|
22723
|
+
<!-- up-right-and-down-left-from-center (enter fullscreen) -->
|
|
22724
|
+
<symbol id="g6-icon-fullscreen" viewBox="0 0 512 512">
|
|
22725
|
+
<path fill="currentColor" d="M344 0L488 0c13.3 0 24 10.7 24 24l0 144c0 9.7-5.8 18.5-14.8 22.2s-19.3 1.7-26.2-5.2l-39-39-87 87c-9.4 9.4-24.6 9.4-33.9 0l-32-32c-9.4-9.4-9.4-24.6 0-33.9l87-87-39-39c-6.9-6.9-8.9-17.2-5.2-26.2S334.3 0 344 0zM168 512L24 512c-13.3 0-24-10.7-24-24L0 344c0-9.7 5.8-18.5 14.8-22.2S34.1 320.2 41 327l39 39 87-87c9.4-9.4 24.6-9.4 33.9 0l32 32c9.4 9.4 9.4 24.6 0 33.9l-87 87 39 39c6.9 6.9 8.9 17.2 5.2 26.2S177.7 512 168 512z"/>
|
|
22726
|
+
</symbol>
|
|
22727
|
+
<!-- down-left-and-up-right-to-center (exit fullscreen) -->
|
|
22728
|
+
<symbol id="g6-icon-fullscreen-exit" viewBox="0 0 512 512">
|
|
22729
|
+
<path fill="currentColor" d="M439.5 7c9.4-9.4 24.6-9.4 33.9 0l32 32c9.4 9.4 9.4 24.6 0 33.9l-87 87 39 39c6.9 6.9 8.9 17.2 5.2 26.2S450.2 240 440.5 240l-144 0c-13.3 0-24-10.7-24-24l0-144c0-9.7 5.8-18.5 14.8-22.2s19.3-1.7 26.2 5.2l39 39 87-87zM72.5 272l144 0c13.3 0 24 10.7 24 24l0 144c0 9.7-5.8 18.5-14.8 22.2s-19.3 1.7-26.2-5.2l-39-39-87 87c-9.4 9.4-24.6 9.4-33.9 0l-32-32c-9.4-9.4-9.4-24.6 0-33.9l87-87-39-39c-6.9-6.9-8.9-17.2-5.2-26.2S62.8 272 72.5 272z"/>
|
|
22730
|
+
</symbol>
|
|
22731
|
+
<!-- arrow-rotate-left (undo) -->
|
|
22732
|
+
<symbol id="g6-icon-undo" viewBox="0 0 512 512">
|
|
22733
|
+
<path fill="currentColor" d="M256 64c-56.8 0-107.9 24.7-143.1 64l47.1 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 192c-17.7 0-32-14.3-32-32L0 32C0 14.3 14.3 0 32 0S64 14.3 64 32l0 54.7C110.9 33.6 179.5 0 256 0 397.4 0 512 114.6 512 256S397.4 512 256 512c-87 0-163.9-43.4-210.1-109.7-10.1-14.5-6.6-34.4 7.9-44.6s34.4-6.6 44.6 7.9c34.8 49.8 92.4 82.3 157.6 82.3 106 0 192-86 192-192S362 64 256 64z"/>
|
|
22734
|
+
</symbol>
|
|
22735
|
+
<!-- arrow-rotate-right (redo) -->
|
|
22736
|
+
<symbol id="g6-icon-redo" viewBox="0 0 512 512">
|
|
22737
|
+
<path fill="currentColor" d="M436.7 74.7L448 85.4 448 32c0-17.7 14.3-32 32-32s32 14.3 32 32l0 128c0 17.7-14.3 32-32 32l-128 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l47.9 0-7.6-7.2c-.2-.2-.4-.4-.6-.6-75-75-196.5-75-271.5 0s-75 196.5 0 271.5 196.5 75 271.5 0c8.2-8.2 15.5-16.9 21.9-26.1 10.1-14.5 30.1-18 44.6-7.9s18 30.1 7.9 44.6c-8.5 12.2-18.2 23.8-29.1 34.7-100 100-262.1 100-362 0S-25 175 75 75c99.9-99.9 261.7-100 361.7-.3z"/>
|
|
22738
|
+
</symbol>
|
|
22739
|
+
<!-- pen (edit node) -->
|
|
22740
|
+
<symbol id="g6-icon-edit" viewBox="0 0 512 512">
|
|
22741
|
+
<path fill="currentColor" d="M352.9 21.2L308 66.1 445.9 204 490.8 159.1C504.4 145.6 512 127.2 512 108s-7.6-37.6-21.2-51.1L455.1 21.2C441.6 7.6 423.2 0 404 0s-37.6 7.6-51.1 21.2zM274.1 100L58.9 315.1c-10.7 10.7-18.5 24.1-22.6 38.7L.9 481.6c-2.3 8.3 0 17.3 6.2 23.4s15.1 8.5 23.4 6.2l127.8-35.5c14.6-4.1 27.9-11.8 38.7-22.6L412 237.9 274.1 100z"/>
|
|
22742
|
+
</symbol>
|
|
22743
|
+
<!-- trash-can (delete) -->
|
|
22744
|
+
<symbol id="g6-icon-delete" viewBox="0 0 448 512">
|
|
22745
|
+
<path fill="currentColor" d="M136.7 5.9C141.1-7.2 153.3-16 167.1-16l113.9 0c13.8 0 26 8.8 30.4 21.9L320 32 416 32c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 96C14.3 96 0 81.7 0 64S14.3 32 32 32l96 0 8.7-26.1zM32 144l384 0 0 304c0 35.3-28.7 64-64 64L96 512c-35.3 0-64-28.7-64-64l0-304zm88 64c-13.3 0-24 10.7-24 24l0 192c0 13.3 10.7 24 24 24s24-10.7 24-24l0-192c0-13.3-10.7-24-24-24zm104 0c-13.3 0-24 10.7-24 24l0 192c0 13.3 10.7 24 24 24s24-10.7 24-24l0-192c0-13.3-10.7-24-24-24zm104 0c-13.3 0-24 10.7-24 24l0 192c0 13.3 10.7 24 24 24s24-10.7 24-24l0-192c0-13.3-10.7-24-24-24z"/>
|
|
22746
|
+
</symbol>
|
|
22747
|
+
<!-- link (link nodes) -->
|
|
22748
|
+
<symbol id="g6-icon-link" viewBox="0 0 576 512">
|
|
22749
|
+
<path fill="currentColor" d="M419.5 96c-16.6 0-32.7 4.5-46.8 12.7-15.8-16-34.2-29.4-54.5-39.5 28.2-24 64.1-37.2 101.3-37.2 86.4 0 156.5 70 156.5 156.5 0 41.5-16.5 81.3-45.8 110.6l-71.1 71.1c-29.3 29.3-69.1 45.8-110.6 45.8-86.4 0-156.5-70-156.5-156.5 0-1.5 0-3 .1-4.5 .5-17.7 15.2-31.6 32.9-31.1s31.6 15.2 31.1 32.9c0 .9 0 1.8 0 2.6 0 51.1 41.4 92.5 92.5 92.5 24.5 0 48-9.7 65.4-27.1l71.1-71.1c17.3-17.3 27.1-40.9 27.1-65.4 0-51.1-41.4-92.5-92.5-92.5zM275.2 173.3c-1.9-.8-3.8-1.9-5.5-3.1-12.6-6.5-27-10.2-42.1-10.2-24.5 0-48 9.7-65.4 27.1L91.1 258.2c-17.3 17.3-27.1 40.9-27.1 65.4 0 51.1 41.4 92.5 92.5 92.5 16.5 0 32.6-4.4 46.7-12.6 15.8 16 34.2 29.4 54.6 39.5-28.2 23.9-64 37.2-101.3 37.2-86.4 0-156.5-70-156.5-156.5 0-41.5 16.5-81.3 45.8-110.6l71.1-71.1c29.3-29.3 69.1-45.8 110.6-45.8 86.6 0 156.5 70.6 156.5 156.9 0 1.3 0 2.6 0 3.9-.4 17.7-15.1 31.6-32.8 31.2s-31.6-15.1-31.2-32.8c0-.8 0-1.5 0-2.3 0-33.7-18-63.3-44.8-79.6z"/>
|
|
22750
|
+
</symbol>
|
|
22751
|
+
<!-- link-slash (unlink) -->
|
|
22752
|
+
<symbol id="g6-icon-unlink" viewBox="0 0 576 512">
|
|
22753
|
+
<path fill="currentColor" d="M41-24.9c-9.4-9.4-24.6-9.4-33.9 0S-2.3-.3 7 9.1l528 528c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-122-122c4.2-3.4 8.3-7.1 12.1-10.9l71.1-71.1c29.3-29.3 45.8-69.1 45.8-110.6 0-86.4-70-156.5-156.5-156.5-37.3 0-73.1 13.3-101.3 37.2 20.3 10.1 38.7 23.5 54.5 39.5 14.1-8.3 30.2-12.7 46.8-12.7 51.1 0 92.5 41.4 92.5 92.5 0 24.5-9.7 48-27.1 65.4l-71.1 71.1c-3.9 3.9-8.1 7.4-12.6 10.5l-47.5-47.5c16.5-.9 29.7-14.4 30.2-31.1 0-1.3 0-2.6 0-3.9 0-86.3-69.9-156.9-156.5-156.9-19.2 0-37.9 3.5-55.5 10.2L41-24.9zM225.9 160c.6 0 1.1 0 1.7 0 15.1 0 29.5 3.7 42.1 10.2 1.8 1.2 3.6 2.3 5.5 3.1 26.8 16.3 44.8 45.9 44.8 79.6 0 .4 0 .8 0 1.2L225.9 160zM346.2 416L192 261.8c1.2 84.6 69.6 152.9 154.1 154.1zM139.7 209.5l-45.3-45.3-48.6 48.6c-29.3 29.3-45.8 69.1-45.8 110.6 0 86.4 70 156.5 156.5 156.5 37.2 0 73.1-13.3 101.3-37.2-20.3-10.1-38.8-23.5-54.6-39.5-14 8.2-30.1 12.6-46.7 12.6-51.1 0-92.5-41.4-92.5-92.5 0-24.5 9.7-48 27.1-65.4l48.6-48.6z"/>
|
|
22754
|
+
</symbol>
|
|
22755
|
+
<!-- play (run node) -->
|
|
22756
|
+
<symbol id="g6-icon-run" viewBox="0 0 448 512">
|
|
22757
|
+
<path fill="currentColor" d="M91.2 36.9c-12.4-6.8-27.4-6.5-39.6 .7S32 57.9 32 72l0 368c0 14.1 7.5 27.2 19.6 34.4s27.2 7.5 39.6 .7l336-184c12.8-7 20.8-20.5 20.8-35.1s-8-28.1-20.8-35.1l-336-184z"/>
|
|
22758
|
+
</symbol>
|
|
22759
|
+
<!-- clone (copy size to other nodes/ports) -->
|
|
22760
|
+
<symbol id="g6-icon-resize" viewBox="0 0 512 512">
|
|
22761
|
+
<path fill="currentColor" d="M288 448l-224 0 0-224 48 0 0-64-48 0c-35.3 0-64 28.7-64 64L0 448c0 35.3 28.7 64 64 64l224 0c35.3 0 64-28.7 64-64l0-48-64 0 0 48zm-64-96l224 0c35.3 0 64-28.7 64-64l0-224c0-35.3-28.7-64-64-64L224 0c-35.3 0-64 28.7-64 64l0 224c0 35.3 28.7 64 64 64z"/>
|
|
22762
|
+
</symbol>
|
|
22763
|
+
<!-- plus (create node). Deliberately NOT the FA7 solid plus:
|
|
22764
|
+
its arms are ~14% of the width and read thin next to the
|
|
22765
|
+
other solid glyphs. Bold geometric plus (~23% arm
|
|
22766
|
+
thickness) with long arms (32..480) so it reads as a "+",
|
|
22767
|
+
not a stubby Red-Cross square. -->
|
|
22768
|
+
<symbol id="g6-icon-plus" viewBox="0 0 512 512">
|
|
22769
|
+
<path fill="currentColor" d="M316 32 L316 196 L480 196 L480 316 L316 316 L316 480 L196 480 L196 316 L32 316 L32 196 L196 196 L196 32 Z"/>
|
|
22770
|
+
</symbol>
|
|
22771
|
+
<!-- ellipsis-vertical (unfold the floating toolbar).
|
|
22772
|
+
The strip it stands for is a vertical stack, and a vertical
|
|
22773
|
+
ellipsis is what "there is more of this here" is drawn as
|
|
22774
|
+
everywhere else. -->
|
|
22775
|
+
<symbol id="g6-icon-toolbar-show" viewBox="0 0 128 512">
|
|
22776
|
+
<path fill="currentColor" d="M64 360a56 56 0 1 0 0 112 56 56 0 1 0 0-112zm0-160a56 56 0 1 0 0 112 56 56 0 1 0 0-112zM120 96A56 56 0 1 0 8 96a56 56 0 1 0 112 0z"/>
|
|
22777
|
+
</symbol>
|
|
22778
|
+
<!-- xmark (fold the floating toolbar away).
|
|
22779
|
+
Not a chevron: the two toolbars sit on OPPOSITE edges, so a
|
|
22780
|
+
direction would point the wrong way on one of them. What the
|
|
22781
|
+
button does is close an overlay, and that is an x. -->
|
|
22782
|
+
<symbol id="g6-icon-toolbar-hide" viewBox="0 0 384 512">
|
|
22783
|
+
<path fill="currentColor" d="M342.6 150.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L192 210.7 86.6 105.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L146.7 256 41.4 361.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L192 301.3 297.4 406.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L237.3 256 342.6 150.6z"/>
|
|
22784
|
+
</symbol>
|
|
22785
|
+
<!-- dashed marquee (selection mode).
|
|
22786
|
+
The band ITSELF, because that is what the button turns on: a
|
|
22787
|
+
drag on the canvas draws one and a tap picks a card. Not the
|
|
22788
|
+
fit-to-selection glyph next to it in the other toolbar -- that
|
|
22789
|
+
one is solid brackets around a solid object and means "put the
|
|
22790
|
+
camera on what is picked", which is the opposite end of the
|
|
22791
|
+
gesture. Dashes: 16 segments of 59 with gaps of 36 over a
|
|
22792
|
+
perimeter of 1520, so they land on the corners. -->
|
|
22793
|
+
<symbol id="g6-icon-select-mode" viewBox="0 0 512 512">
|
|
22794
|
+
<rect x="46" y="86" width="420" height="340" fill="none"
|
|
22795
|
+
stroke="currentColor" stroke-width="40"
|
|
22796
|
+
stroke-dasharray="59 36"/>
|
|
22797
|
+
</symbol>
|
|
22798
|
+
<!-- location-crosshairs (anchor the camera on one element).
|
|
22799
|
+
The SAME path as the DOM toolbars and their yi-location-crosshairs
|
|
22800
|
+
mask: the two toolbars sit in one console, and a control that
|
|
22801
|
+
does one thing has to be drawn one way. -->
|
|
22802
|
+
<symbol id="g6-icon-anchor" viewBox="0 0 576 512">
|
|
22803
|
+
<path fill="currentColor" d="M288-16c17.7 0 32 14.3 32 32l0 18.3c98.1 14 175.7 91.6 189.7 189.7l18.3 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-18.3 0c-14 98.1-91.6 175.7-189.7 189.7l0 18.3c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-18.3C157.9 463.7 80.3 386.1 66.3 288L48 288c-17.7 0-32-14.3-32-32s14.3-32 32-32l18.3 0C80.3 125.9 157.9 48.3 256 34.3L256 16c0-17.7 14.3-32 32-32zM128 256a160 160 0 1 0 320 0 160 160 0 1 0 -320 0zm160-96a96 96 0 1 1 0 192 96 96 0 1 1 0-192z"/>
|
|
22804
|
+
</symbol>
|
|
22805
|
+
<!-- floppy-disk (save) -->
|
|
22806
|
+
<symbol id="g6-icon-save" viewBox="0 0 448 512">
|
|
22807
|
+
<path fill="currentColor" d="M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-242.7c0-17-6.7-33.3-18.7-45.3L352 50.7C340 38.7 323.7 32 306.7 32L64 32zm32 96c0-17.7 14.3-32 32-32l160 0c17.7 0 32 14.3 32 32l0 64c0 17.7-14.3 32-32 32l-160 0c-17.7 0-32-14.3-32-32l0-64zM224 288a64 64 0 1 1 0 128 64 64 0 1 1 0-128z"/>
|
|
22808
|
+
</symbol>
|
|
22809
|
+
</svg>`;
|
|
22810
|
+
function inject_svg_icons() {
|
|
22811
|
+
if (document.getElementById(CUSTOM_SVG_ICONS_ID)) return;
|
|
22812
|
+
const div = document.createElement("div");
|
|
22813
|
+
div.id = CUSTOM_SVG_ICONS_ID;
|
|
22814
|
+
div.style.display = "none";
|
|
22815
|
+
div.innerHTML = ICONS;
|
|
22816
|
+
document.body.appendChild(div);
|
|
22817
|
+
}
|
|
22818
|
+
var __icon_defined__ = {};
|
|
22819
|
+
function yui_icon_is_defined(name) {
|
|
22820
|
+
if (!name || typeof name !== "string") return false;
|
|
22821
|
+
if (__icon_defined__[name] !== void 0) return __icon_defined__[name];
|
|
22822
|
+
let defined = false;
|
|
22823
|
+
try {
|
|
22824
|
+
const el = document.createElement("i");
|
|
22825
|
+
el.className = name;
|
|
22826
|
+
el.style.position = "absolute";
|
|
22827
|
+
el.style.visibility = "hidden";
|
|
22828
|
+
el.style.pointerEvents = "none";
|
|
22829
|
+
document.body.appendChild(el);
|
|
22830
|
+
const st = window.getComputedStyle(el, "::before");
|
|
22831
|
+
const mask = st.maskImage || st.webkitMaskImage || "";
|
|
22832
|
+
defined = !!mask && mask !== "none";
|
|
22833
|
+
document.body.removeChild(el);
|
|
22834
|
+
} catch (e) {
|
|
22835
|
+
defined = false;
|
|
22836
|
+
}
|
|
22837
|
+
__icon_defined__[name] = defined;
|
|
22838
|
+
return defined;
|
|
22839
|
+
}
|
|
22840
|
+
//#endregion
|
|
22659
22841
|
//#region src/yui_row_search.js
|
|
22660
22842
|
/***********************************************************************
|
|
22661
22843
|
* yui_row_search.js
|
|
@@ -22912,8 +23094,8 @@ var attrs_table$5 = [
|
|
|
22912
23094
|
(0, _yuneta_gobj_js.SDATA)(_yuneta_gobj_js.data_type_t.DTP_BOOLEAN, "with_export_button", 0, true, "Button toolbar EXPORT (download as CSV what the table holds)"),
|
|
22913
23095
|
(0, _yuneta_gobj_js.SDATA)(_yuneta_gobj_js.data_type_t.DTP_BOOLEAN, "with_header_filters", 0, true, "Per-column filter box in the table header, on the columns a text/number match means something (not hooks, fkeys or json)"),
|
|
22914
23096
|
(0, _yuneta_gobj_js.SDATA)(_yuneta_gobj_js.data_type_t.DTP_BOOLEAN, "with_inline_edit", 0, true, "Edit a writable scalar cell in place while in edition mode (the record form keeps the rest)"),
|
|
22915
|
-
(0, _yuneta_gobj_js.SDATA)(_yuneta_gobj_js.data_type_t.DTP_BOOLEAN, "with_remote_paging", 0, false, "Pull the topic a PAGE at a time from the backend (`nodes` from/limit) instead of loading it whole. Needs a backend that pages"),
|
|
22916
|
-
(0, _yuneta_gobj_js.SDATA)(_yuneta_gobj_js.data_type_t.DTP_INTEGER, "page_size", 0,
|
|
23097
|
+
(0, _yuneta_gobj_js.SDATA)(_yuneta_gobj_js.data_type_t.DTP_BOOLEAN, "with_remote_paging", 0, false, "Pull the topic a PAGE at a time from the backend (`nodes` from/limit) instead of loading it whole. Needs a backend that pages. ⚠️ DO NOT TURN THIS ON: it breaks LINKS -- see the note above the tabulator settings. It is off in every consumer until linking works with a partial topic"),
|
|
23098
|
+
(0, _yuneta_gobj_js.SDATA)(_yuneta_gobj_js.data_type_t.DTP_INTEGER, "page_size", 0, 0, "Rows per page. 0 leaves the `tabulator_settings` value alone. With with_remote_paging it is also the size of each fetch (200 when unset)"),
|
|
22917
23099
|
(0, _yuneta_gobj_js.SDATA)(_yuneta_gobj_js.data_type_t.DTP_BOOLEAN, "with_in_row_edit_icons", 0, true, "Add a last column with internal EDIT/DELETE icon"),
|
|
22918
23100
|
(0, _yuneta_gobj_js.SDATA)(_yuneta_gobj_js.data_type_t.DTP_BOOLEAN, "editable", 0, false, "Edit state"),
|
|
22919
23101
|
(0, _yuneta_gobj_js.SDATA)(_yuneta_gobj_js.data_type_t.DTP_BOOLEAN, "with_checkbox", 0, true, "Auxiliary first column to select rows"),
|
|
@@ -23736,6 +23918,11 @@ function create_tabulator(gobj) {
|
|
|
23736
23918
|
hozAlign = "center";
|
|
23737
23919
|
colFormatter = "color";
|
|
23738
23920
|
break;
|
|
23921
|
+
case "icon":
|
|
23922
|
+
hozAlign = "center";
|
|
23923
|
+
vertAlign = "middle";
|
|
23924
|
+
colFormatter = icon_formatter;
|
|
23925
|
+
break;
|
|
23739
23926
|
case "object":
|
|
23740
23927
|
case "dict":
|
|
23741
23928
|
case "template":
|
|
@@ -23834,6 +24021,19 @@ function create_tabulator(gobj) {
|
|
|
23834
24021
|
}
|
|
23835
24022
|
});
|
|
23836
24023
|
}
|
|
24024
|
+
if (!(0, _yuneta_gobj_js.gobj_read_bool_attr)(gobj, "with_remote_paging")) {
|
|
24025
|
+
let page_size = (0, _yuneta_gobj_js.gobj_read_integer_attr)(gobj, "page_size");
|
|
24026
|
+
if (page_size > 0 && tabulator_settings.pagination) {
|
|
24027
|
+
tabulator_settings.paginationSize = page_size;
|
|
24028
|
+
tabulator_settings.paginationSizeSelector = [
|
|
24029
|
+
50,
|
|
24030
|
+
100,
|
|
24031
|
+
200,
|
|
24032
|
+
500,
|
|
24033
|
+
true
|
|
24034
|
+
];
|
|
24035
|
+
}
|
|
24036
|
+
}
|
|
23837
24037
|
let remembered_size = load_page_size(gobj);
|
|
23838
24038
|
if (remembered_size !== null && tabulator_settings.pagination) tabulator_settings.paginationSize = remembered_size;
|
|
23839
24039
|
gobj.priv._page_size = tabulator_settings.paginationSize;
|
|
@@ -23946,6 +24146,39 @@ function table__destroy(gobj) {
|
|
|
23946
24146
|
}
|
|
23947
24147
|
}
|
|
23948
24148
|
/************************************************************
|
|
24149
|
+
* Cell of a col flagged `icon`: the value is the NAME of an
|
|
24150
|
+
* icon of the app's set ("yi-bolt"), so it is DRAWN.
|
|
24151
|
+
*
|
|
24152
|
+
* Built as a DOM node and not as an HTML string: the value is
|
|
24153
|
+
* raw record data and must never be parsed as markup -- and
|
|
24154
|
+
* here it also becomes a CSS class, so it is filtered to the
|
|
24155
|
+
* shape of a class name before it gets near one.
|
|
24156
|
+
*
|
|
24157
|
+
* A name the set does not carry falls back to the TEXT of it.
|
|
24158
|
+
* The catch-all rule `[class^="yi-"]::before` paints a
|
|
24159
|
+
* currentColor box for any name, so drawing it anyway would
|
|
24160
|
+
* render a solid square -- a glyph nobody recognises rather
|
|
24161
|
+
* than a mistake somebody can fix.
|
|
24162
|
+
************************************************************/
|
|
24163
|
+
function icon_formatter(cell) {
|
|
24164
|
+
let name = cell.getValue();
|
|
24165
|
+
if (!(0, _yuneta_gobj_js.is_string)(name) || (0, _yuneta_gobj_js.empty_string)(name)) return "";
|
|
24166
|
+
name = name.trim();
|
|
24167
|
+
if (!/^[a-z0-9-]+$/.test(name) || !yui_icon_is_defined(name)) return (0, _yuneta_gobj_js.createElement2)([
|
|
24168
|
+
"span",
|
|
24169
|
+
{
|
|
24170
|
+
class: "ICON_CELL_UNKNOWN is-size-7 has-text-grey",
|
|
24171
|
+
title: name
|
|
24172
|
+
},
|
|
24173
|
+
name
|
|
24174
|
+
]);
|
|
24175
|
+
return (0, _yuneta_gobj_js.createElement2)(["span", {
|
|
24176
|
+
class: `ICON_CELL ${name}`,
|
|
24177
|
+
title: name,
|
|
24178
|
+
"aria-label": name
|
|
24179
|
+
}]);
|
|
24180
|
+
}
|
|
24181
|
+
/************************************************************
|
|
23949
24182
|
* Cell of a col holding a JSON document (dict/list/blob/
|
|
23950
24183
|
* template/coordinates/…): a one-line truncated preview,
|
|
23951
24184
|
* marked as a link because the click opens the whole value
|
|
@@ -24057,6 +24290,7 @@ function transform__treedb_value_2_table_value(gobj, col, value, row, field) {
|
|
|
24057
24290
|
}
|
|
24058
24291
|
break;
|
|
24059
24292
|
case "color": break;
|
|
24293
|
+
case "icon": break;
|
|
24060
24294
|
case "image": break;
|
|
24061
24295
|
default: (0, _yuneta_gobj_js.log_error)(`transform__treedb_value_2_table_value() unhandled type '${field_desc.type}' (real_type='${field_desc.real_type}') for field '${field}', topic ${priv.topic_name}`);
|
|
24062
24296
|
}
|
|
@@ -52390,160 +52624,6 @@ Sector.PARSED_STYLE_LIST = new Set([].concat(_toConsumableArray(Path.PARSED_STYL
|
|
|
52390
52624
|
"endAngle"
|
|
52391
52625
|
]));
|
|
52392
52626
|
//#endregion
|
|
52393
|
-
//#region src/lib_icons.js
|
|
52394
|
-
/*********************************************************
|
|
52395
|
-
* lib_icons.js
|
|
52396
|
-
*
|
|
52397
|
-
* Two icon systems are managed here:
|
|
52398
|
-
*
|
|
52399
|
-
* 1. FA-style CSS icons (yui_icons.css)
|
|
52400
|
-
* Usage: <i class="yi-save"></i>
|
|
52401
|
-
* Color: inherits currentColor from parent via CSS mask.
|
|
52402
|
-
*
|
|
52403
|
-
* 2. SVG symbol icons for G6 toolbar (and any other component
|
|
52404
|
-
* that uses <use xlink:href="#id">).
|
|
52405
|
-
* Symbols are injected once into the DOM.
|
|
52406
|
-
* All symbol ids are prefixed with "g6-icon-" to avoid
|
|
52407
|
-
* conflicts with other DOM elements.
|
|
52408
|
-
* Icon paths come from:
|
|
52409
|
-
* fontawesome-free-7.1.0-web/sprites/solid.svg
|
|
52410
|
-
*
|
|
52411
|
-
* G6 toolbar items are managed via CSS class names (className
|
|
52412
|
-
* field in getItems()) using YuiToolbar in c_g6_nodes_tree.js.
|
|
52413
|
-
* This lets lib_graph.js state functions (set_submit_state,
|
|
52414
|
-
* disableElements, …) work on toolbar icons exactly like on
|
|
52415
|
-
* regular Bulma/FA buttons — no icon-specific helpers needed.
|
|
52416
|
-
*
|
|
52417
|
-
* Copyright (c) 2025-2026, ArtGins.
|
|
52418
|
-
* All Rights Reserved.
|
|
52419
|
-
*********************************************************/
|
|
52420
|
-
var CUSTOM_SVG_ICONS_ID = "g6-custom-svgicons";
|
|
52421
|
-
var ICONS = `<svg xmlns="http://www.w3.org/2000/svg">
|
|
52422
|
-
<!-- magnifying-glass-plus -->
|
|
52423
|
-
<symbol id="g6-icon-zoom-in" viewBox="0 0 512 512">
|
|
52424
|
-
<path fill="currentColor" d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376C296.3 401.1 253.9 416 208 416 93.1 416 0 322.9 0 208S93.1 0 208 0 416 93.1 416 208zM208 112c-13.3 0-24 10.7-24 24l0 48-48 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l48 0 0 48c0 13.3 10.7 24 24 24s24-10.7 24-24l0-48 48 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-48 0 0-48c0-13.3-10.7-24-24-24z"/>
|
|
52425
|
-
</symbol>
|
|
52426
|
-
<!-- magnifying-glass-minus -->
|
|
52427
|
-
<symbol id="g6-icon-zoom-out" viewBox="0 0 512 512">
|
|
52428
|
-
<path fill="currentColor" d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376C296.3 401.1 253.9 416 208 416 93.1 416 0 322.9 0 208S93.1 0 208 0 416 93.1 416 208zM136 184c-13.3 0-24 10.7-24 24s10.7 24 24 24l144 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-144 0z"/>
|
|
52429
|
-
</symbol>
|
|
52430
|
-
<!-- house (reset zoom: back to original 100% view) -->
|
|
52431
|
-
<symbol id="g6-icon-home" viewBox="0 0 512 512">
|
|
52432
|
-
<path fill="currentColor" d="M277.8 8.6c-12.3-11.4-31.3-11.4-43.5 0l-224 208c-9.6 9-12.8 22.9-8 35.1S18.8 272 32 272l16 0 0 176c0 35.3 28.7 64 64 64l288 0c35.3 0 64-28.7 64-64l0-176 16 0c13.2 0 25-8.1 29.8-20.3s1.6-26.2-8-35.1l-224-208zM240 320l32 0c26.5 0 48 21.5 48 48l0 96-128 0 0-96c0-26.5 21.5-48 48-48z"/>
|
|
52433
|
-
</symbol>
|
|
52434
|
-
<!-- expand (zoom to fit) -->
|
|
52435
|
-
<symbol id="g6-icon-fit" viewBox="0 0 448 512">
|
|
52436
|
-
<path fill="currentColor" d="M32 32C14.3 32 0 46.3 0 64l0 96c0 17.7 14.3 32 32 32s32-14.3 32-32l0-64 64 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 32zM64 352c0-17.7-14.3-32-32-32S0 334.3 0 352l0 96c0 17.7 14.3 32 32 32l96 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0 0-64zM320 32c-17.7 0-32 14.3-32 32s14.3 32 32 32l64 0 0 64c0 17.7 14.3 32 32 32s32-14.3 32-32l0-96c0-17.7-14.3-32-32-32l-96 0zM448 352c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 64-64 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l96 0c17.7 0 32-14.3 32-32l0-96z"/>
|
|
52437
|
-
</symbol>
|
|
52438
|
-
<!-- fit to selection: the same corner brackets as the fit icon,
|
|
52439
|
-
around a marked object. The two sit side by side in the
|
|
52440
|
-
toolbar and have to read as a family, which a borrowed glyph
|
|
52441
|
-
would not. (No backticks in here: the sprite lives inside a
|
|
52442
|
-
template literal.) -->
|
|
52443
|
-
<symbol id="g6-icon-fit-selection" viewBox="0 0 448 512">
|
|
52444
|
-
<path fill="currentColor" d="M32 32C14.3 32 0 46.3 0 64l0 96c0 17.7 14.3 32 32 32s32-14.3 32-32l0-64 64 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 32zM64 352c0-17.7-14.3-32-32-32S0 334.3 0 352l0 96c0 17.7 14.3 32 32 32l96 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0 0-64zM320 32c-17.7 0-32 14.3-32 32s14.3 32 32 32l64 0 0 64c0 17.7 14.3 32 32 32s32-14.3 32-32l0-96c0-17.7-14.3-32-32-32l-96 0zM448 352c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 64-64 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l96 0c17.7 0 32-14.3 32-32l0-96z"/>
|
|
52445
|
-
<rect fill="currentColor" x="144" y="176" width="160" height="160" rx="24"/>
|
|
52446
|
-
</symbol>
|
|
52447
|
-
<!-- crosshairs (center) -->
|
|
52448
|
-
<symbol id="g6-icon-center" viewBox="0 0 576 512">
|
|
52449
|
-
<path fill="currentColor" d="M288-16c17.7 0 32 14.3 32 32l0 18.3c98.1 14 175.7 91.6 189.7 189.7l18.3 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-18.3 0c-14 98.1-91.6 175.7-189.7 189.7l0 18.3c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-18.3C157.9 463.7 80.3 386.1 66.3 288L48 288c-17.7 0-32-14.3-32-32s14.3-32 32-32l18.3 0C80.3 125.9 157.9 48.3 256 34.3L256 16c0-17.7 14.3-32 32-32zM131.2 288c12.7 62.7 62.1 112.1 124.8 124.8l0-12.8c0-17.7 14.3-32 32-32s32 14.3 32 32l0 12.8c62.7-12.7 112.1-62.1 124.8-124.8L432 288c-17.7 0-32-14.3-32-32s14.3-32 32-32l12.8 0C432.1 161.3 382.7 111.9 320 99.2l0 12.8c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-12.8C193.3 111.9 143.9 161.3 131.2 224l12.8 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-12.8 0zM288 208a48 48 0 1 1 0 96 48 48 0 1 1 0-96z"/>
|
|
52450
|
-
</symbol>
|
|
52451
|
-
<!-- up-right-and-down-left-from-center (enter fullscreen) -->
|
|
52452
|
-
<symbol id="g6-icon-fullscreen" viewBox="0 0 512 512">
|
|
52453
|
-
<path fill="currentColor" d="M344 0L488 0c13.3 0 24 10.7 24 24l0 144c0 9.7-5.8 18.5-14.8 22.2s-19.3 1.7-26.2-5.2l-39-39-87 87c-9.4 9.4-24.6 9.4-33.9 0l-32-32c-9.4-9.4-9.4-24.6 0-33.9l87-87-39-39c-6.9-6.9-8.9-17.2-5.2-26.2S334.3 0 344 0zM168 512L24 512c-13.3 0-24-10.7-24-24L0 344c0-9.7 5.8-18.5 14.8-22.2S34.1 320.2 41 327l39 39 87-87c9.4-9.4 24.6-9.4 33.9 0l32 32c9.4 9.4 9.4 24.6 0 33.9l-87 87 39 39c6.9 6.9 8.9 17.2 5.2 26.2S177.7 512 168 512z"/>
|
|
52454
|
-
</symbol>
|
|
52455
|
-
<!-- down-left-and-up-right-to-center (exit fullscreen) -->
|
|
52456
|
-
<symbol id="g6-icon-fullscreen-exit" viewBox="0 0 512 512">
|
|
52457
|
-
<path fill="currentColor" d="M439.5 7c9.4-9.4 24.6-9.4 33.9 0l32 32c9.4 9.4 9.4 24.6 0 33.9l-87 87 39 39c6.9 6.9 8.9 17.2 5.2 26.2S450.2 240 440.5 240l-144 0c-13.3 0-24-10.7-24-24l0-144c0-9.7 5.8-18.5 14.8-22.2s19.3-1.7 26.2 5.2l39 39 87-87zM72.5 272l144 0c13.3 0 24 10.7 24 24l0 144c0 9.7-5.8 18.5-14.8 22.2s-19.3 1.7-26.2-5.2l-39-39-87 87c-9.4 9.4-24.6 9.4-33.9 0l-32-32c-9.4-9.4-9.4-24.6 0-33.9l87-87-39-39c-6.9-6.9-8.9-17.2-5.2-26.2S62.8 272 72.5 272z"/>
|
|
52458
|
-
</symbol>
|
|
52459
|
-
<!-- arrow-rotate-left (undo) -->
|
|
52460
|
-
<symbol id="g6-icon-undo" viewBox="0 0 512 512">
|
|
52461
|
-
<path fill="currentColor" d="M256 64c-56.8 0-107.9 24.7-143.1 64l47.1 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 192c-17.7 0-32-14.3-32-32L0 32C0 14.3 14.3 0 32 0S64 14.3 64 32l0 54.7C110.9 33.6 179.5 0 256 0 397.4 0 512 114.6 512 256S397.4 512 256 512c-87 0-163.9-43.4-210.1-109.7-10.1-14.5-6.6-34.4 7.9-44.6s34.4-6.6 44.6 7.9c34.8 49.8 92.4 82.3 157.6 82.3 106 0 192-86 192-192S362 64 256 64z"/>
|
|
52462
|
-
</symbol>
|
|
52463
|
-
<!-- arrow-rotate-right (redo) -->
|
|
52464
|
-
<symbol id="g6-icon-redo" viewBox="0 0 512 512">
|
|
52465
|
-
<path fill="currentColor" d="M436.7 74.7L448 85.4 448 32c0-17.7 14.3-32 32-32s32 14.3 32 32l0 128c0 17.7-14.3 32-32 32l-128 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l47.9 0-7.6-7.2c-.2-.2-.4-.4-.6-.6-75-75-196.5-75-271.5 0s-75 196.5 0 271.5 196.5 75 271.5 0c8.2-8.2 15.5-16.9 21.9-26.1 10.1-14.5 30.1-18 44.6-7.9s18 30.1 7.9 44.6c-8.5 12.2-18.2 23.8-29.1 34.7-100 100-262.1 100-362 0S-25 175 75 75c99.9-99.9 261.7-100 361.7-.3z"/>
|
|
52466
|
-
</symbol>
|
|
52467
|
-
<!-- pen (edit node) -->
|
|
52468
|
-
<symbol id="g6-icon-edit" viewBox="0 0 512 512">
|
|
52469
|
-
<path fill="currentColor" d="M352.9 21.2L308 66.1 445.9 204 490.8 159.1C504.4 145.6 512 127.2 512 108s-7.6-37.6-21.2-51.1L455.1 21.2C441.6 7.6 423.2 0 404 0s-37.6 7.6-51.1 21.2zM274.1 100L58.9 315.1c-10.7 10.7-18.5 24.1-22.6 38.7L.9 481.6c-2.3 8.3 0 17.3 6.2 23.4s15.1 8.5 23.4 6.2l127.8-35.5c14.6-4.1 27.9-11.8 38.7-22.6L412 237.9 274.1 100z"/>
|
|
52470
|
-
</symbol>
|
|
52471
|
-
<!-- trash-can (delete) -->
|
|
52472
|
-
<symbol id="g6-icon-delete" viewBox="0 0 448 512">
|
|
52473
|
-
<path fill="currentColor" d="M136.7 5.9C141.1-7.2 153.3-16 167.1-16l113.9 0c13.8 0 26 8.8 30.4 21.9L320 32 416 32c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 96C14.3 96 0 81.7 0 64S14.3 32 32 32l96 0 8.7-26.1zM32 144l384 0 0 304c0 35.3-28.7 64-64 64L96 512c-35.3 0-64-28.7-64-64l0-304zm88 64c-13.3 0-24 10.7-24 24l0 192c0 13.3 10.7 24 24 24s24-10.7 24-24l0-192c0-13.3-10.7-24-24-24zm104 0c-13.3 0-24 10.7-24 24l0 192c0 13.3 10.7 24 24 24s24-10.7 24-24l0-192c0-13.3-10.7-24-24-24zm104 0c-13.3 0-24 10.7-24 24l0 192c0 13.3 10.7 24 24 24s24-10.7 24-24l0-192c0-13.3-10.7-24-24-24z"/>
|
|
52474
|
-
</symbol>
|
|
52475
|
-
<!-- link (link nodes) -->
|
|
52476
|
-
<symbol id="g6-icon-link" viewBox="0 0 576 512">
|
|
52477
|
-
<path fill="currentColor" d="M419.5 96c-16.6 0-32.7 4.5-46.8 12.7-15.8-16-34.2-29.4-54.5-39.5 28.2-24 64.1-37.2 101.3-37.2 86.4 0 156.5 70 156.5 156.5 0 41.5-16.5 81.3-45.8 110.6l-71.1 71.1c-29.3 29.3-69.1 45.8-110.6 45.8-86.4 0-156.5-70-156.5-156.5 0-1.5 0-3 .1-4.5 .5-17.7 15.2-31.6 32.9-31.1s31.6 15.2 31.1 32.9c0 .9 0 1.8 0 2.6 0 51.1 41.4 92.5 92.5 92.5 24.5 0 48-9.7 65.4-27.1l71.1-71.1c17.3-17.3 27.1-40.9 27.1-65.4 0-51.1-41.4-92.5-92.5-92.5zM275.2 173.3c-1.9-.8-3.8-1.9-5.5-3.1-12.6-6.5-27-10.2-42.1-10.2-24.5 0-48 9.7-65.4 27.1L91.1 258.2c-17.3 17.3-27.1 40.9-27.1 65.4 0 51.1 41.4 92.5 92.5 92.5 16.5 0 32.6-4.4 46.7-12.6 15.8 16 34.2 29.4 54.6 39.5-28.2 23.9-64 37.2-101.3 37.2-86.4 0-156.5-70-156.5-156.5 0-41.5 16.5-81.3 45.8-110.6l71.1-71.1c29.3-29.3 69.1-45.8 110.6-45.8 86.6 0 156.5 70.6 156.5 156.9 0 1.3 0 2.6 0 3.9-.4 17.7-15.1 31.6-32.8 31.2s-31.6-15.1-31.2-32.8c0-.8 0-1.5 0-2.3 0-33.7-18-63.3-44.8-79.6z"/>
|
|
52478
|
-
</symbol>
|
|
52479
|
-
<!-- link-slash (unlink) -->
|
|
52480
|
-
<symbol id="g6-icon-unlink" viewBox="0 0 576 512">
|
|
52481
|
-
<path fill="currentColor" d="M41-24.9c-9.4-9.4-24.6-9.4-33.9 0S-2.3-.3 7 9.1l528 528c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-122-122c4.2-3.4 8.3-7.1 12.1-10.9l71.1-71.1c29.3-29.3 45.8-69.1 45.8-110.6 0-86.4-70-156.5-156.5-156.5-37.3 0-73.1 13.3-101.3 37.2 20.3 10.1 38.7 23.5 54.5 39.5 14.1-8.3 30.2-12.7 46.8-12.7 51.1 0 92.5 41.4 92.5 92.5 0 24.5-9.7 48-27.1 65.4l-71.1 71.1c-3.9 3.9-8.1 7.4-12.6 10.5l-47.5-47.5c16.5-.9 29.7-14.4 30.2-31.1 0-1.3 0-2.6 0-3.9 0-86.3-69.9-156.9-156.5-156.9-19.2 0-37.9 3.5-55.5 10.2L41-24.9zM225.9 160c.6 0 1.1 0 1.7 0 15.1 0 29.5 3.7 42.1 10.2 1.8 1.2 3.6 2.3 5.5 3.1 26.8 16.3 44.8 45.9 44.8 79.6 0 .4 0 .8 0 1.2L225.9 160zM346.2 416L192 261.8c1.2 84.6 69.6 152.9 154.1 154.1zM139.7 209.5l-45.3-45.3-48.6 48.6c-29.3 29.3-45.8 69.1-45.8 110.6 0 86.4 70 156.5 156.5 156.5 37.2 0 73.1-13.3 101.3-37.2-20.3-10.1-38.8-23.5-54.6-39.5-14 8.2-30.1 12.6-46.7 12.6-51.1 0-92.5-41.4-92.5-92.5 0-24.5 9.7-48 27.1-65.4l48.6-48.6z"/>
|
|
52482
|
-
</symbol>
|
|
52483
|
-
<!-- play (run node) -->
|
|
52484
|
-
<symbol id="g6-icon-run" viewBox="0 0 448 512">
|
|
52485
|
-
<path fill="currentColor" d="M91.2 36.9c-12.4-6.8-27.4-6.5-39.6 .7S32 57.9 32 72l0 368c0 14.1 7.5 27.2 19.6 34.4s27.2 7.5 39.6 .7l336-184c12.8-7 20.8-20.5 20.8-35.1s-8-28.1-20.8-35.1l-336-184z"/>
|
|
52486
|
-
</symbol>
|
|
52487
|
-
<!-- clone (copy size to other nodes/ports) -->
|
|
52488
|
-
<symbol id="g6-icon-resize" viewBox="0 0 512 512">
|
|
52489
|
-
<path fill="currentColor" d="M288 448l-224 0 0-224 48 0 0-64-48 0c-35.3 0-64 28.7-64 64L0 448c0 35.3 28.7 64 64 64l224 0c35.3 0 64-28.7 64-64l0-48-64 0 0 48zm-64-96l224 0c35.3 0 64-28.7 64-64l0-224c0-35.3-28.7-64-64-64L224 0c-35.3 0-64 28.7-64 64l0 224c0 35.3 28.7 64 64 64z"/>
|
|
52490
|
-
</symbol>
|
|
52491
|
-
<!-- plus (create node). Deliberately NOT the FA7 solid plus:
|
|
52492
|
-
its arms are ~14% of the width and read thin next to the
|
|
52493
|
-
other solid glyphs. Bold geometric plus (~23% arm
|
|
52494
|
-
thickness) with long arms (32..480) so it reads as a "+",
|
|
52495
|
-
not a stubby Red-Cross square. -->
|
|
52496
|
-
<symbol id="g6-icon-plus" viewBox="0 0 512 512">
|
|
52497
|
-
<path fill="currentColor" d="M316 32 L316 196 L480 196 L480 316 L316 316 L316 480 L196 480 L196 316 L32 316 L32 196 L196 196 L196 32 Z"/>
|
|
52498
|
-
</symbol>
|
|
52499
|
-
<!-- ellipsis-vertical (unfold the floating toolbar).
|
|
52500
|
-
The strip it stands for is a vertical stack, and a vertical
|
|
52501
|
-
ellipsis is what "there is more of this here" is drawn as
|
|
52502
|
-
everywhere else. -->
|
|
52503
|
-
<symbol id="g6-icon-toolbar-show" viewBox="0 0 128 512">
|
|
52504
|
-
<path fill="currentColor" d="M64 360a56 56 0 1 0 0 112 56 56 0 1 0 0-112zm0-160a56 56 0 1 0 0 112 56 56 0 1 0 0-112zM120 96A56 56 0 1 0 8 96a56 56 0 1 0 112 0z"/>
|
|
52505
|
-
</symbol>
|
|
52506
|
-
<!-- xmark (fold the floating toolbar away).
|
|
52507
|
-
Not a chevron: the two toolbars sit on OPPOSITE edges, so a
|
|
52508
|
-
direction would point the wrong way on one of them. What the
|
|
52509
|
-
button does is close an overlay, and that is an x. -->
|
|
52510
|
-
<symbol id="g6-icon-toolbar-hide" viewBox="0 0 384 512">
|
|
52511
|
-
<path fill="currentColor" d="M342.6 150.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L192 210.7 86.6 105.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L146.7 256 41.4 361.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L192 301.3 297.4 406.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L237.3 256 342.6 150.6z"/>
|
|
52512
|
-
</symbol>
|
|
52513
|
-
<!-- dashed marquee (selection mode).
|
|
52514
|
-
The band ITSELF, because that is what the button turns on: a
|
|
52515
|
-
drag on the canvas draws one and a tap picks a card. Not the
|
|
52516
|
-
fit-to-selection glyph next to it in the other toolbar -- that
|
|
52517
|
-
one is solid brackets around a solid object and means "put the
|
|
52518
|
-
camera on what is picked", which is the opposite end of the
|
|
52519
|
-
gesture. Dashes: 16 segments of 59 with gaps of 36 over a
|
|
52520
|
-
perimeter of 1520, so they land on the corners. -->
|
|
52521
|
-
<symbol id="g6-icon-select-mode" viewBox="0 0 512 512">
|
|
52522
|
-
<rect x="46" y="86" width="420" height="340" fill="none"
|
|
52523
|
-
stroke="currentColor" stroke-width="40"
|
|
52524
|
-
stroke-dasharray="59 36"/>
|
|
52525
|
-
</symbol>
|
|
52526
|
-
<!-- location-crosshairs (anchor the camera on one element).
|
|
52527
|
-
The SAME path as the DOM toolbars and their yi-location-crosshairs
|
|
52528
|
-
mask: the two toolbars sit in one console, and a control that
|
|
52529
|
-
does one thing has to be drawn one way. -->
|
|
52530
|
-
<symbol id="g6-icon-anchor" viewBox="0 0 576 512">
|
|
52531
|
-
<path fill="currentColor" d="M288-16c17.7 0 32 14.3 32 32l0 18.3c98.1 14 175.7 91.6 189.7 189.7l18.3 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-18.3 0c-14 98.1-91.6 175.7-189.7 189.7l0 18.3c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-18.3C157.9 463.7 80.3 386.1 66.3 288L48 288c-17.7 0-32-14.3-32-32s14.3-32 32-32l18.3 0C80.3 125.9 157.9 48.3 256 34.3L256 16c0-17.7 14.3-32 32-32zM128 256a160 160 0 1 0 320 0 160 160 0 1 0 -320 0zm160-96a96 96 0 1 1 0 192 96 96 0 1 1 0-192z"/>
|
|
52532
|
-
</symbol>
|
|
52533
|
-
<!-- floppy-disk (save) -->
|
|
52534
|
-
<symbol id="g6-icon-save" viewBox="0 0 448 512">
|
|
52535
|
-
<path fill="currentColor" d="M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-242.7c0-17-6.7-33.3-18.7-45.3L352 50.7C340 38.7 323.7 32 306.7 32L64 32zm32 96c0-17.7 14.3-32 32-32l160 0c17.7 0 32 14.3 32 32l0 64c0 17.7-14.3 32-32 32l-160 0c-17.7 0-32-14.3-32-32l0-64zM224 288a64 64 0 1 1 0 128 64 64 0 1 1 0-128z"/>
|
|
52536
|
-
</symbol>
|
|
52537
|
-
</svg>`;
|
|
52538
|
-
function inject_svg_icons() {
|
|
52539
|
-
if (document.getElementById(CUSTOM_SVG_ICONS_ID)) return;
|
|
52540
|
-
const div = document.createElement("div");
|
|
52541
|
-
div.id = CUSTOM_SVG_ICONS_ID;
|
|
52542
|
-
div.style.display = "none";
|
|
52543
|
-
div.innerHTML = ICONS;
|
|
52544
|
-
document.body.appendChild(div);
|
|
52545
|
-
}
|
|
52546
|
-
//#endregion
|
|
52547
52627
|
//#region src/g6_brush_select_owned.js
|
|
52548
52628
|
/***********************************************************************
|
|
52549
52629
|
* g6_brush_select_owned.js
|