@yuneta/gobj-ui 7.23.140 → 7.23.142

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
@@ -221,7 +221,11 @@ seen*:
221
221
  Off by default: a tree whose children are pages wants the item to BE the
222
222
  destination. On for a tree whose children are workspaces with a position
223
223
  inside them — the agent console's strip of treedbs, each with its open topic.
224
- Since 6.2.0.
224
+ Since 6.2.0. **Declarable in a child spec since 7.23.140** (`"remember_position":
225
+ true` next to its `id`): the attr existed, but the spec never passed it on,
226
+ so a node declared in a config could not turn it on. yunovatios turns it on
227
+ for its treedb nodes, so the graph tab returns to `<graph>/<topic>` with its
228
+ focus and the data tab to the topic that was open.
225
229
 
226
230
  - **`nav_mode` — the three shapes as one runtime knob.** The two bullets above
227
231
  describe what a tree *declares*; `nav_mode` is how a user *chooses* between
@@ -1290,8 +1294,8 @@ a level or two, with a count on every cut.
1290
1294
  parent shows it or it is a shown root — the **union**, so a device that hangs
1291
1295
  from its place AND its controller is drawn once, under whichever opened
1292
1296
  first, and folding one of the two leaves it where the other shows it.
1293
- - **`expand_depth`** (default `2`) is how much opens on load: the roots and
1294
- their children. **`fold_page_size`** (default `24`) is how many children of
1297
+ - **`expand_depth`** (default `1` since `7.23.142`, `2` before) is how much
1298
+ opens on load until the reader steps: the roots alone. **`fold_page_size`** (default `24`) is how many children of
1295
1299
  one hook are shown at a time; the rest is a **`+N` chip** at the end of the
1296
1300
  page that opens the next one. Both are attrs of `C_YUI_TREEDB_GRAPH`,
1297
1301
  forwarded to the engine — and since `7.23.93` so are the seven the engine
@@ -1310,15 +1314,28 @@ a level or two, with a count on every cut.
1310
1314
  the container in the capture phase over four event types, exactly as the
1311
1315
  JSON graph's fold handles are — G6 never reads the DOM `click`, it builds its
1312
1316
  own from the pointer pair.
1313
- - **The toolbar's fold pair** (the same two chevrons as the JSON graph):
1314
- *expand all* opens every hook on all its children — the reader asking for
1315
- the pile on purpose — and *collapse all* leaves the roots. *Refresh* is the
1316
- way back to the default depth. **Neither moves the zoom** (since `7.23.78`):
1317
- a fold is not a reason to change the scale the reader chose, and until then
1318
- both fitted the whole graph — opening everything zoomed out to a strip and
1319
- closing it zoomed in on the roots, every time. The camera holds the anchor
1320
- still when there is one, else the first root: the top of the tree, which is
1321
- where a JSON viewer keeps the eye when it opens or closes everything.
1317
+ - **The toolbar's fold STEPPER** (since `7.23.141`; it replaced the *expand
1318
+ all* / *collapse all* pair): `▸` · **`places level 2/4`** · `▾`. It walks the
1319
+ **main tree** one level at a time, the way the frontend view opens one level
1320
+ per press: level 1 is the main topic's roots (and the loose records the
1321
+ reader asked to see), each `▾` opens the next level through every topic that
1322
+ is not hidden, each `▸` folds the deepest one. The readout says what the two
1323
+ buttons act on — the main topic's swatch and name (data, never translated;
1324
+ gone on a phone, the numbers stay) and `level N/M` — the WORD as well as the
1325
+ numbers, because the legend chip under it says `places 2/4` too and there it
1326
+ means records on screen — and a button is disabled at either end. **A level is a floor, not a picture**: stepping down
1327
+ opens only what is folded above the new level and keeps the pages and pills
1328
+ already open; stepping up folds from the new level down and touches nothing
1329
+ above it. A topic the schema does not tie to the main one is a tree of its
1330
+ own, has no level, and is opened by its pills. The level is the reader's,
1331
+ per treedb: `fold_level` is `SDF_PERSIST` on `C_YUI_TREEDB_GRAPH`, handed to
1332
+ the engine on creation (`0` = never stepped = `expand_depth`), so a reload
1333
+ or a *refresh* opens where it was left. The old pair opened every hook of the
1334
+ treedb at once — the pile, on purpose, which on a treedb of thousands nobody
1335
+ reads — and closing threw away everything the reader had opened.
1336
+ **It does not move the zoom** (since `7.23.78`): a fold is not a reason to
1337
+ change the scale the reader chose. The camera holds the anchor still when
1338
+ there is one, else the first root.
1322
1339
  - **`dagre` reads LEFT TO RIGHT** now, with explicit `nodesep`/`ranksep`: the
1323
1340
  children of a node are a column beside it and the graph reads like a file
1324
1341
  tree. The ports move to the sides with it (fkeys on the left edge, hooks
@@ -1424,9 +1441,11 @@ screen every card is a smudge. Since `7.23.82` a record has **three views**
1424
1441
  still be drawn. The same one-line chip a leaf record already is, at the
1425
1442
  tier's width (200 / 180 / 160 px). No pills.
1426
1443
  - **`shape`** — a **figure** of the topic's colour, no ports, no text: the
1427
- topology and nothing else. A native G6 node — square (rounded `rect`),
1428
- circle, diamond, triangle, hexagon or star — so the focus, the selection
1429
- and the anchor are its own stroke and halo. The three tiers keep their
1444
+ topology and nothing else. A native G6 node — a **circle** by default
1445
+ (since `7.23.133`; a square until then), or a square (rounded `rect`),
1446
+ diamond, triangle, hexagon or star — in the outline the card and the pill
1447
+ wear (1, or the width chosen; it was a floor of 2) — so the focus, the
1448
+ selection and the anchor are its own stroke and halo. The three tiers keep their
1430
1449
  order of size (32 / 28 / 22), the structural tier its dashed border. The
1431
1450
  figure is chosen in the **node properties** popover (`shape`, with the
1432
1451
  popover's own scope: this node, the topic, every node), remembered as the
@@ -1442,9 +1461,12 @@ UNDER the html: the first repaint (a selection, the focus, a theme switch, a
1442
1461
  pill appearing) rebuilt that html from the topic's colour and the choice was
1443
1462
  gone, and nothing of it ever reached the store. Choosing the topic's own
1444
1463
  colour back, with the stroke and line width that go with it, **forgets** the
1445
- entry instead of writing it: the palette is assigned by position, so a
1446
- colour written down would freeze today's palette on that card — the trap the
1447
- sizes fell into in `7.23.80`.
1464
+ entry instead of writing it: the palette is assigned by the topics'
1465
+ ALPHABETICAL order (since `7.23.136`, in the graph and the schema diagram
1466
+ alike; by the backend's order before, which varies from load to load, so two
1467
+ topics could swap colours), and adding a topic still shifts it — a colour
1468
+ written down would freeze today's palette on that card, the trap the sizes
1469
+ fell into in `7.23.80`.
1448
1470
 
1449
1471
  In the view's toolbar (`C_YUI_TREEDB_GRAPH`), next to the fold pair: three
1450
1472
  push buttons in one group — a card, a line, a figure — the pressed one being
@@ -1478,12 +1500,59 @@ the day into the treedb, and a later default (the bigger ports above) reached
1478
1500
  no saved treedb: the same trap as the invented cascade coordinates, for the
1479
1501
  size. A card on its tier's default now saves its position and nothing else;
1480
1502
  a closed node saves no size at all (a square is not the card's size), its
1481
- entry keeps what it had. And the node's context menu, in edition, has the way
1482
- back: **reset sizes** / **reset topic sizes** forget every saved size, port
1483
- radius and per-port radius — per node and as topic defaults from `resize all`
1484
- — for all topics or the node's, put the library's defaults back on every card
1485
- on the spot, and arm Save. Positions and edge styles are not touched.
1486
- Consumer i18n keys: `reset sizes`, `reset topic sizes`.
1503
+ entry keeps what it had.
1504
+
1505
+ **Every saved look has a way back, in the context menu** (since `7.23.134`,
1506
+ replacing `reset sizes` / `reset topic sizes`). In edition, the node, the port
1507
+ and the edge menus each offer three resets — this one, its kind (`reset topic
1508
+ nodes`, `reset topic ports`, `reset same type edges`, the scopes of their
1509
+ properties popovers) and `reset all …` — and a reset FORGETS the saved value,
1510
+ the element's own and the defaults of its scope, so the library's default
1511
+ comes back on the spot and Save writes the cleared entries. The node reset is
1512
+ offered in every view and forgets size, colours, line width and figure; the
1513
+ ports have their own (shape and radius); no reset moves a node. Consumer i18n
1514
+ keys: `reset node`, `reset topic nodes`, `reset all nodes`, `reset port`,
1515
+ `reset topic ports`, `reset all ports`, `reset edge`, `reset same type edges`,
1516
+ `reset all edges`.
1517
+
1518
+ **An edge is saved only where it differs from what it INHERITS** (since
1519
+ `7.23.134`): its hook's default in the parent topic, else the topic's, else the
1520
+ library's. It used to be "any line width but 2", and the library's width for an
1521
+ edge between two topics is 1.6, so every Save froze every such edge with its
1522
+ width and its theme's colour — a theme toggle no longer re-themed it after a
1523
+ reload. `reset all edges` clears what the old Save froze.
1524
+
1525
+ **The browser's own menu never opens over the graph** (since `7.23.133`): G6's
1526
+ context-menu plugin cancels the event `@antv/g` synthesises from `pointerdown`,
1527
+ not the DOM's `contextmenu`, so the container cancels that one (a popover's form
1528
+ field keeps it, for paste). An edge has a menu in edition (`edge properties`,
1529
+ `unlink`).
1530
+
1531
+ **The rest of the 7.23.133–7.23.140 round, in one place:**
1532
+
1533
+ - **The legend keeps its order** (`7.23.135`): its chips are alphabetical,
1534
+ always, and the main topic takes no seat of its own (its gold star and bold
1535
+ name tell it apart) — starring a topic no longer moves the strip.
1536
+ - **Never a blank viewport** (`7.23.137`). A camera is saved by the node
1537
+ nearest the middle of the viewport (or the anchor), a saved camera whose
1538
+ pixel is off screen is not restored, and after any placement — a restore, a
1539
+ refresh or a global fold holding a node still, a saved arrangement opened
1540
+ with no camera — a viewport with no node in it is fitted. It used to save
1541
+ the first root of the tree wherever it was, and a reload whose layout moved
1542
+ by a hair showed the tree in the minimap and nothing in the view.
1543
+ - **The toolbar in three parts** (`7.23.137`): left, how the graph is built
1544
+ (layout, operation mode); center, how it is shown (fold pair, node views);
1545
+ right, what it is asked (find, refresh, raw json).
1546
+ - **The topics view opens the graph as it was left** (`7.23.138`–`7.23.140`).
1547
+ `C_YUI_TREEDB_TOPICS` has a `graph` button left of `raw json`, in the
1548
+ landing and with a topic open; its route is `card_action_routes.graph`
1549
+ without its `/{topic}`, and its click navigates to
1550
+ `yui_shell_last_route_under()` of that route, so a focused topic
1551
+ (`<graph>/<topic>`) comes back with it. The cards dropped their graph icon
1552
+ — its topic segment was a focus, laid over whatever the reader had left —
1553
+ and show instead, from the desc with no request, the topic's version, its
1554
+ number of columns, the topics it hangs from (`↑ parents`) and the ones
1555
+ hanging from it (`↓ children`).
1487
1556
 
1488
1557
  **A port has a shape, and its own properties popover** (since `7.23.81`).
1489
1558
  G6 draws every port as a circle — `drawPortShapes` upserts a `Circle` and
@@ -1527,18 +1596,31 @@ them:
1527
1596
  | control | what it does |
1528
1597
  |---|---|
1529
1598
  | the chip body | **show / hide** the topic. A hidden topic leaves the MODEL, not just the drawing: no card, no pill counts it, no edge reaches it, and whatever hung from it alone has no parent any more. The name is struck through and the count is the total. |
1530
- | `★` / `☆` | the **main topic**: the trunk the tree hangs from. Filled on the main one (a mark, not a button — the main topic cannot be hidden, because hiding the trunk turns everything into roots, which is the pile); hollow on the others, where it moves the star. |
1599
+ | `★` / `☆` | the **main topic**: the trunk the tree hangs from, always a **hierarchical** topic (hooked to itself); the hollow star appears only on the other hierarchical topics, and only when there are two or more (`7.23.142`). Filled on the main one (a mark, not a button — the main topic cannot be hidden, because hiding the trunk turns everything into roots, which is the pile); hollow on the others, where it moves the star. |
1531
1600
  | `+N` | the topic's **loose records**: the ones that should hang from the main tree and do not (a device with no place). Counted here, shown only on request. |
1532
1601
  | `⌖` | **highlight** the topic — the focus, with `reveal: "all"`. |
1533
1602
 
1534
- The **main topic is deduced** when none is chosen: the topic whose hooks reach
1535
- the most OTHER topics, a self-referent hook breaking a tie (a tree of places
1536
- over a flat list of groups). On the yunovatios central that is `places` (it
1537
- reaches places, devices, users and controllers); `device_types` reaches one.
1538
- An `extended` topic (hooks, no fkeys) never wins: the engine draws no edge
1539
- from one, so its records hang nothing. A treedb where no topic reaches
1540
- another has no trunk, and every topic is a tree of its own — the behaviour
1541
- before this existed.
1603
+ **Only a HIERARCHICAL topic can be the main one** (since `7.23.142`): a topic
1604
+ hooked to ITSELF — places inside places, groups inside groups, roles inside
1605
+ roles (`fold_is_hierarchical()`). A topic that only reaches OTHER topics is a
1606
+ list with children, and the old rule (*the topic whose hooks reach the most
1607
+ others*) drew the agent's treedb from `yunos` instead of `realms`. In order:
1608
+
1609
+ 1. the reader's pick (the star), if it is hierarchical — a saved pick the rule
1610
+ refuses is ignored;
1611
+ 2. the topic the schema **marks**, `main_topic: true` on the topic, sent in the
1612
+ desc by SDK 7.19+ (`tranger2_topic_desc()`); the schema allows one, and only
1613
+ on a topic hooked to itself;
1614
+ 3. the hierarchical topic that reaches the most other topics, schema order
1615
+ breaking a tie.
1616
+
1617
+ In every treedb of the SDK and the apps there is exactly one hierarchical
1618
+ topic (`places`, `device_groups`, `systems`, `roles`, `realms`), so the mark
1619
+ only has something to decide once a schema grows a second one. A treedb with
1620
+ no topic hooked to itself has no trunk, and every topic is a tree of its own.
1621
+
1622
+ (Not the engine's card tier: a topic with hooks AND fkeys is an `entity` card
1623
+ — it was called `hierarchical` until `7.23.142` — and that only sizes a card.)
1542
1624
 
1543
1625
  What the main topic governs, in `treedb_fold_model.js`:
1544
1626
 
@@ -1560,13 +1642,17 @@ Three edges of it: the URL wins over the strip (a route that lands on a hidden
1560
1642
  topic shows it first, or it would highlight nothing and say nothing about
1561
1643
  why); the find searches hidden topics too and counts them apart (`3 matches
1562
1644
  (+2 in hidden topics)`), because `0` alone reads as *does not exist* when it
1563
- means *is hidden*; and moving the star reopens the tree at `expand_depth`,
1564
- since other roots are another tree.
1645
+ means *is hidden*; and moving the star reopens the tree at the reader's fold
1646
+ level, counted from the new roots, since other roots are another tree.
1565
1647
 
1566
1648
  Wiring: the engine publishes `EV_LEGEND_STATE` after every reconcile — one
1567
1649
  entry per topic (hidden ones included) with colour, total, visible, loose and
1568
- flags, plus the main topic — and the view paints the strip from that and
1569
- nothing else. The strip's clicks are `EV_LEGEND_TOPIC {topic, action}` with
1650
+ flags, plus the main topic and `fold: {topic, level, levels}` for the toolbar's
1651
+ stepper — and the view paints the strip and the stepper from that and nothing
1652
+ else. A step is `EV_EXPAND_LEVEL` / `EV_COLLAPSE_LEVEL` (internal); the view
1653
+ persists `fold_level` and forwards `EV_SET_FOLD_LEVEL {level}` (the engine's
1654
+ `EV_EXPAND_ALL` / `EV_COLLAPSE_ALL` are gone). Stepper keys: `expand one
1655
+ level`, `collapse one level`, `fold level`, `level`. The strip's clicks are `EV_LEGEND_TOPIC {topic, action}` with
1570
1656
  `action` one of `toggle`, `main`, `loose`, `focus`; the view persists and
1571
1657
  forwards them as `EV_SET_HIDDEN_TOPICS`, `EV_SET_MAIN_TOPIC`,
1572
1658
  `EV_SET_LOOSE_TOPICS`. Consumer i18n keys: `show topic`, `hide topic`,