@yuneta/gobj-ui 7.23.75 → 7.23.77

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.
@@ -59312,6 +59312,42 @@ function copy_size_to_ports(gobj, same_topic_only) {
59312
59312
  ***************************/
59313
59313
  var PILL_ROW_HEIGHT = 24;
59314
59314
  var MORE_CHIP_SIZE = [76, 26];
59315
+ var MORE_CHIP_SIZE_COMPACT = [40, 22];
59316
+ function more_chip_is_compact(gobj, nd) {
59317
+ let parent_id = nd && nd.data ? nd.data.parent_node : "";
59318
+ if (parent_id) return node_is_compact(gobj, parent_id);
59319
+ return (0, _yuneta_gobj_js.gobj_read_str_attr)(gobj, "node_mode") === "compact";
59320
+ }
59321
+ function more_chip_style(gobj, nd, color, rest) {
59322
+ let compact = more_chip_is_compact(gobj, nd);
59323
+ let size = compact ? MORE_CHIP_SIZE_COMPACT : MORE_CHIP_SIZE;
59324
+ return {
59325
+ size: [...size],
59326
+ dx: -size[0] / 2,
59327
+ dy: -size[1] / 2,
59328
+ innerHTML: build_more_innerHTML(color, gobj.priv.theme, rest, compact)
59329
+ };
59330
+ }
59331
+ function reshape_more_chips(gobj) {
59332
+ let priv = gobj.priv;
59333
+ let graph = priv.graph;
59334
+ if (!graph) return;
59335
+ let updates = [];
59336
+ for (let nd of graph.getNodeData() || []) {
59337
+ if (!is_more_node(nd)) continue;
59338
+ let child_desc = priv.descs ? priv.descs[nd.data.child_topic] : null;
59339
+ let color = child_desc && child_desc.color || "#94a3b8";
59340
+ updates.push({
59341
+ id: nd.id,
59342
+ style: more_chip_style(gobj, nd, color, nd.data.rest)
59343
+ });
59344
+ }
59345
+ if (updates.length) try {
59346
+ graph.updateNodeData(updates);
59347
+ } catch (e) {
59348
+ (0, _yuneta_gobj_js.log_error)(`${(0, _yuneta_gobj_js.gobj_short_name)(gobj)}: cannot reshape the +N chips: ${e}`);
59349
+ }
59350
+ }
59315
59351
  /************************************************************
59316
59352
  * The three card sizes, with room for the pill row when there
59317
59353
  * is one. A chip (pure child) never has pills: it has no hooks.
@@ -59405,25 +59441,26 @@ function pills_signature(gobj, node_key) {
59405
59441
  * the one WORD of the folding, and it is translated at build
59406
59442
  * time: the chips are rebuilt on a language change.
59407
59443
  ************************************************************/
59408
- function build_more_innerHTML(color, theme, rest) {
59444
+ function build_more_innerHTML(color, theme, rest, compact) {
59409
59445
  let c = pill_colors(color, theme);
59446
+ let tail = compact ? "" : `<span style="font-size: 10px; opacity: .8;">&#8230;</span>`;
59410
59447
  return `
59411
59448
  <div class="TREEDB_MORE" title="${(0, _yuneta_gobj_js.escapeHtml)((0, i18next.t)("show more"))}" style="
59412
59449
  box-sizing: border-box; width: 100%; height: 100%;
59413
59450
  display: flex; align-items: center; justify-content: center; gap: 4px;
59414
59451
  background: ${c.bg}; color: ${c.fg}; border: 1px dashed ${c.border};
59415
- border-radius: 13px;
59452
+ border-radius: ${compact ? "6px" : "13px"};
59416
59453
  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
59417
- font-size: 12px; font-weight: 700; line-height: 1;
59454
+ font-size: ${compact ? "10px" : "12px"}; font-weight: 700; line-height: 1;
59418
59455
  cursor: pointer; user-select: none;
59419
- ">+${rest}<span style="font-size: 10px; opacity: .8;">&#8230;</span></div>
59456
+ ">+${rest}${tail}</div>
59420
59457
  `;
59421
59458
  }
59422
59459
  function more_innerHTML_of(gobj, nd, theme) {
59423
59460
  if (!is_more_node(nd)) return null;
59424
59461
  let priv = gobj.priv;
59425
59462
  let child_desc = priv.descs ? priv.descs[nd.data.child_topic] : null;
59426
- return build_more_innerHTML(child_desc && child_desc.color || "#94a3b8", theme, nd.data.rest);
59463
+ return build_more_innerHTML(child_desc && child_desc.color || "#94a3b8", theme, nd.data.rest, more_chip_is_compact(gobj, nd));
59427
59464
  }
59428
59465
  /************************************************************
59429
59466
  * The pills live inside an `innerHTML` string, so no handler can
@@ -59648,28 +59685,31 @@ async function reconcile_fold_apply(gobj, opts, visible) {
59648
59685
  nd.data.rest = p.rest;
59649
59686
  graph.updateNodeData([{
59650
59687
  id,
59651
- style: { innerHTML: build_more_innerHTML(color, priv.theme, p.rest) }
59688
+ style: { innerHTML: build_more_innerHTML(color, priv.theme, p.rest, more_chip_is_compact(gobj, nd)) }
59652
59689
  }]);
59653
59690
  }
59654
59691
  continue;
59655
59692
  }
59656
59693
  let xy = get_default_ne_xy(gobj);
59694
+ let parent_node = "";
59695
+ if (p.node_key) {
59696
+ let parent = model.nodes.get(p.node_key);
59697
+ parent_node = build_node_name(gobj, parent.topic_name, parent.id);
59698
+ }
59699
+ let chip_data = {
59700
+ more: p.group_key,
59701
+ child_topic,
59702
+ rest: p.rest,
59703
+ parent_node
59704
+ };
59657
59705
  graph.addNodeData([{
59658
59706
  id,
59659
59707
  type: "html",
59660
- style: {
59708
+ style: Object.assign({
59661
59709
  x: xy,
59662
- y: xy,
59663
- size: [...MORE_CHIP_SIZE],
59664
- dx: -MORE_CHIP_SIZE[0] / 2,
59665
- dy: -MORE_CHIP_SIZE[1] / 2,
59666
- innerHTML: build_more_innerHTML(color, priv.theme, p.rest)
59667
- },
59668
- data: {
59669
- more: p.group_key,
59670
- child_topic,
59671
- rest: p.rest
59672
- }
59710
+ y: xy
59711
+ }, more_chip_style(gobj, { data: chip_data }, color, p.rest)),
59712
+ data: chip_data
59673
59713
  }]);
59674
59714
  if (p.node_key) {
59675
59715
  let parent = model.nodes.get(p.node_key);
@@ -60303,6 +60343,7 @@ function ac_set_node_mode(gobj, event, kw, src) {
60303
60343
  priv._open_nodes = /* @__PURE__ */ new Set();
60304
60344
  if (!priv.graph || !priv._fold_model) return 0;
60305
60345
  reshape_nodes(gobj, all_record_node_ids(gobj));
60346
+ reshape_more_chips(gobj);
60306
60347
  reconcile_fold(gobj, {
60307
60348
  relayout: true,
60308
60349
  fit: true
@@ -60338,6 +60379,7 @@ function ac_toggle_node_mode$1(gobj, event, kw, src) {
60338
60379
  else priv._open_nodes.add(node_id);
60339
60380
  let vp = yui_graph_viewport_of(priv.graph, node_id);
60340
60381
  reshape_nodes(gobj, [node_id]);
60382
+ reshape_more_chips(gobj);
60341
60383
  if (priv._fold_model) reconcile_fold(gobj, {
60342
60384
  relayout: true,
60343
60385
  keep: node_id,
@@ -61307,7 +61349,6 @@ function option_label(name) {
61307
61349
  case "edition": return (0, i18next.t)("edition");
61308
61350
  case "manual": return (0, i18next.t)("manual");
61309
61351
  case "treedb-tree": return (0, i18next.t)("treedb-tree");
61310
- case "treedb-outline": return (0, i18next.t)("treedb-outline");
61311
61352
  case "radial": return (0, i18next.t)("radial");
61312
61353
  case "dagre": return (0, i18next.t)("dagre");
61313
61354
  case "antv-dagre": return (0, i18next.t)("antv-dagre");
@@ -59307,6 +59307,42 @@ function copy_size_to_ports(gobj, same_topic_only) {
59307
59307
  ***************************/
59308
59308
  var PILL_ROW_HEIGHT = 24;
59309
59309
  var MORE_CHIP_SIZE = [76, 26];
59310
+ var MORE_CHIP_SIZE_COMPACT = [40, 22];
59311
+ function more_chip_is_compact(gobj, nd) {
59312
+ let parent_id = nd && nd.data ? nd.data.parent_node : "";
59313
+ if (parent_id) return node_is_compact(gobj, parent_id);
59314
+ return gobj_read_str_attr(gobj, "node_mode") === "compact";
59315
+ }
59316
+ function more_chip_style(gobj, nd, color, rest) {
59317
+ let compact = more_chip_is_compact(gobj, nd);
59318
+ let size = compact ? MORE_CHIP_SIZE_COMPACT : MORE_CHIP_SIZE;
59319
+ return {
59320
+ size: [...size],
59321
+ dx: -size[0] / 2,
59322
+ dy: -size[1] / 2,
59323
+ innerHTML: build_more_innerHTML(color, gobj.priv.theme, rest, compact)
59324
+ };
59325
+ }
59326
+ function reshape_more_chips(gobj) {
59327
+ let priv = gobj.priv;
59328
+ let graph = priv.graph;
59329
+ if (!graph) return;
59330
+ let updates = [];
59331
+ for (let nd of graph.getNodeData() || []) {
59332
+ if (!is_more_node(nd)) continue;
59333
+ let child_desc = priv.descs ? priv.descs[nd.data.child_topic] : null;
59334
+ let color = child_desc && child_desc.color || "#94a3b8";
59335
+ updates.push({
59336
+ id: nd.id,
59337
+ style: more_chip_style(gobj, nd, color, nd.data.rest)
59338
+ });
59339
+ }
59340
+ if (updates.length) try {
59341
+ graph.updateNodeData(updates);
59342
+ } catch (e) {
59343
+ log_error(`${gobj_short_name(gobj)}: cannot reshape the +N chips: ${e}`);
59344
+ }
59345
+ }
59310
59346
  /************************************************************
59311
59347
  * The three card sizes, with room for the pill row when there
59312
59348
  * is one. A chip (pure child) never has pills: it has no hooks.
@@ -59400,25 +59436,26 @@ function pills_signature(gobj, node_key) {
59400
59436
  * the one WORD of the folding, and it is translated at build
59401
59437
  * time: the chips are rebuilt on a language change.
59402
59438
  ************************************************************/
59403
- function build_more_innerHTML(color, theme, rest) {
59439
+ function build_more_innerHTML(color, theme, rest, compact) {
59404
59440
  let c = pill_colors(color, theme);
59441
+ let tail = compact ? "" : `<span style="font-size: 10px; opacity: .8;">&#8230;</span>`;
59405
59442
  return `
59406
59443
  <div class="TREEDB_MORE" title="${escapeHtml(t("show more"))}" style="
59407
59444
  box-sizing: border-box; width: 100%; height: 100%;
59408
59445
  display: flex; align-items: center; justify-content: center; gap: 4px;
59409
59446
  background: ${c.bg}; color: ${c.fg}; border: 1px dashed ${c.border};
59410
- border-radius: 13px;
59447
+ border-radius: ${compact ? "6px" : "13px"};
59411
59448
  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
59412
- font-size: 12px; font-weight: 700; line-height: 1;
59449
+ font-size: ${compact ? "10px" : "12px"}; font-weight: 700; line-height: 1;
59413
59450
  cursor: pointer; user-select: none;
59414
- ">+${rest}<span style="font-size: 10px; opacity: .8;">&#8230;</span></div>
59451
+ ">+${rest}${tail}</div>
59415
59452
  `;
59416
59453
  }
59417
59454
  function more_innerHTML_of(gobj, nd, theme) {
59418
59455
  if (!is_more_node(nd)) return null;
59419
59456
  let priv = gobj.priv;
59420
59457
  let child_desc = priv.descs ? priv.descs[nd.data.child_topic] : null;
59421
- return build_more_innerHTML(child_desc && child_desc.color || "#94a3b8", theme, nd.data.rest);
59458
+ return build_more_innerHTML(child_desc && child_desc.color || "#94a3b8", theme, nd.data.rest, more_chip_is_compact(gobj, nd));
59422
59459
  }
59423
59460
  /************************************************************
59424
59461
  * The pills live inside an `innerHTML` string, so no handler can
@@ -59643,28 +59680,31 @@ async function reconcile_fold_apply(gobj, opts, visible) {
59643
59680
  nd.data.rest = p.rest;
59644
59681
  graph.updateNodeData([{
59645
59682
  id,
59646
- style: { innerHTML: build_more_innerHTML(color, priv.theme, p.rest) }
59683
+ style: { innerHTML: build_more_innerHTML(color, priv.theme, p.rest, more_chip_is_compact(gobj, nd)) }
59647
59684
  }]);
59648
59685
  }
59649
59686
  continue;
59650
59687
  }
59651
59688
  let xy = get_default_ne_xy(gobj);
59689
+ let parent_node = "";
59690
+ if (p.node_key) {
59691
+ let parent = model.nodes.get(p.node_key);
59692
+ parent_node = build_node_name(gobj, parent.topic_name, parent.id);
59693
+ }
59694
+ let chip_data = {
59695
+ more: p.group_key,
59696
+ child_topic,
59697
+ rest: p.rest,
59698
+ parent_node
59699
+ };
59652
59700
  graph.addNodeData([{
59653
59701
  id,
59654
59702
  type: "html",
59655
- style: {
59703
+ style: Object.assign({
59656
59704
  x: xy,
59657
- y: xy,
59658
- size: [...MORE_CHIP_SIZE],
59659
- dx: -MORE_CHIP_SIZE[0] / 2,
59660
- dy: -MORE_CHIP_SIZE[1] / 2,
59661
- innerHTML: build_more_innerHTML(color, priv.theme, p.rest)
59662
- },
59663
- data: {
59664
- more: p.group_key,
59665
- child_topic,
59666
- rest: p.rest
59667
- }
59705
+ y: xy
59706
+ }, more_chip_style(gobj, { data: chip_data }, color, p.rest)),
59707
+ data: chip_data
59668
59708
  }]);
59669
59709
  if (p.node_key) {
59670
59710
  let parent = model.nodes.get(p.node_key);
@@ -60298,6 +60338,7 @@ function ac_set_node_mode(gobj, event, kw, src) {
60298
60338
  priv._open_nodes = /* @__PURE__ */ new Set();
60299
60339
  if (!priv.graph || !priv._fold_model) return 0;
60300
60340
  reshape_nodes(gobj, all_record_node_ids(gobj));
60341
+ reshape_more_chips(gobj);
60301
60342
  reconcile_fold(gobj, {
60302
60343
  relayout: true,
60303
60344
  fit: true
@@ -60333,6 +60374,7 @@ function ac_toggle_node_mode$1(gobj, event, kw, src) {
60333
60374
  else priv._open_nodes.add(node_id);
60334
60375
  let vp = yui_graph_viewport_of(priv.graph, node_id);
60335
60376
  reshape_nodes(gobj, [node_id]);
60377
+ reshape_more_chips(gobj);
60336
60378
  if (priv._fold_model) reconcile_fold(gobj, {
60337
60379
  relayout: true,
60338
60380
  keep: node_id,
@@ -61302,7 +61344,6 @@ function option_label(name) {
61302
61344
  case "edition": return t("edition");
61303
61345
  case "manual": return t("manual");
61304
61346
  case "treedb-tree": return t("treedb-tree");
61305
- case "treedb-outline": return t("treedb-outline");
61306
61347
  case "radial": return t("radial");
61307
61348
  case "dagre": return t("dagre");
61308
61349
  case "antv-dagre": return t("antv-dagre");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yuneta/gobj-ui",
3
- "version": "7.23.75",
3
+ "version": "7.23.77",
4
4
  "type": "module",
5
5
  "main": "dist/gobj-ui.cjs.js",
6
6
  "module": "dist/gobj-ui.es.js",
@@ -7666,6 +7666,61 @@ function copy_size_to_ports(gobj, same_topic_only)
7666
7666
  /* A card with pills is this much taller; the row sits under the subtitle. */
7667
7667
  const PILL_ROW_HEIGHT = 24;
7668
7668
  const MORE_CHIP_SIZE = [76, 26];
7669
+ /* The chip beside CLOSED nodes: a square of 22 next to a chip of 76
7670
+ * read as the biggest thing in the row, so it takes the closed
7671
+ * scale -- the count and nothing else. */
7672
+ const MORE_CHIP_SIZE_COMPACT = [40, 22];
7673
+
7674
+ /* A `+N` chip follows the shape of the card it continues: closed
7675
+ * beside a square, open beside a card. A root group's chip has no
7676
+ * parent and follows the mode. */
7677
+ function more_chip_is_compact(gobj, nd)
7678
+ {
7679
+ let parent_id = nd && nd.data? nd.data.parent_node : "";
7680
+ if(parent_id) {
7681
+ return node_is_compact(gobj, parent_id);
7682
+ }
7683
+ return gobj_read_str_attr(gobj, "node_mode") === "compact";
7684
+ }
7685
+
7686
+ function more_chip_style(gobj, nd, color, rest)
7687
+ {
7688
+ let compact = more_chip_is_compact(gobj, nd);
7689
+ let size = compact? MORE_CHIP_SIZE_COMPACT : MORE_CHIP_SIZE;
7690
+ return {
7691
+ size: [...size],
7692
+ dx: -size[0] / 2,
7693
+ dy: -size[1] / 2,
7694
+ innerHTML: build_more_innerHTML(color, gobj.priv.theme, rest, compact),
7695
+ };
7696
+ }
7697
+
7698
+ /* Every `+N` chip re-sized to the shape of its parent: after a
7699
+ * change of mode, or of one node. */
7700
+ function reshape_more_chips(gobj)
7701
+ {
7702
+ let priv = gobj.priv;
7703
+ let graph = priv.graph;
7704
+ if(!graph) {
7705
+ return;
7706
+ }
7707
+ let updates = [];
7708
+ for(let nd of (graph.getNodeData() || [])) {
7709
+ if(!is_more_node(nd)) {
7710
+ continue;
7711
+ }
7712
+ let child_desc = priv.descs? priv.descs[nd.data.child_topic] : null;
7713
+ let color = (child_desc && child_desc.color) || "#94a3b8";
7714
+ updates.push({id: nd.id, style: more_chip_style(gobj, nd, color, nd.data.rest)});
7715
+ }
7716
+ if(updates.length) {
7717
+ try {
7718
+ graph.updateNodeData(updates);
7719
+ } catch(e) {
7720
+ log_error(`${gobj_short_name(gobj)}: cannot reshape the +N chips: ${e}`);
7721
+ }
7722
+ }
7723
+ }
7669
7724
 
7670
7725
  /************************************************************
7671
7726
  * The three card sizes, with room for the pill row when there
@@ -7805,19 +7860,20 @@ function pills_signature(gobj, node_key)
7805
7860
  * the one WORD of the folding, and it is translated at build
7806
7861
  * time: the chips are rebuilt on a language change.
7807
7862
  ************************************************************/
7808
- function build_more_innerHTML(color, theme, rest)
7863
+ function build_more_innerHTML(color, theme, rest, compact)
7809
7864
  {
7810
7865
  let c = pill_colors(color, theme);
7866
+ let tail = compact? "" : `<span style="font-size: 10px; opacity: .8;">&#8230;</span>`;
7811
7867
  return `
7812
7868
  <div class="TREEDB_MORE" title="${escapeHtml(t('show more'))}" style="
7813
7869
  box-sizing: border-box; width: 100%; height: 100%;
7814
7870
  display: flex; align-items: center; justify-content: center; gap: 4px;
7815
7871
  background: ${c.bg}; color: ${c.fg}; border: 1px dashed ${c.border};
7816
- border-radius: 13px;
7872
+ border-radius: ${compact? "6px" : "13px"};
7817
7873
  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
7818
- font-size: 12px; font-weight: 700; line-height: 1;
7874
+ font-size: ${compact? "10px" : "12px"}; font-weight: 700; line-height: 1;
7819
7875
  cursor: pointer; user-select: none;
7820
- ">+${rest}<span style="font-size: 10px; opacity: .8;">&#8230;</span></div>
7876
+ ">+${rest}${tail}</div>
7821
7877
  `;
7822
7878
  }
7823
7879
 
@@ -7829,7 +7885,7 @@ function more_innerHTML_of(gobj, nd, theme)
7829
7885
  let priv = gobj.priv;
7830
7886
  let child_desc = priv.descs? priv.descs[nd.data.child_topic] : null;
7831
7887
  let color = (child_desc && child_desc.color) || "#94a3b8";
7832
- return build_more_innerHTML(color, theme, nd.data.rest);
7888
+ return build_more_innerHTML(color, theme, nd.data.rest, more_chip_is_compact(gobj, nd));
7833
7889
  }
7834
7890
 
7835
7891
  /************************************************************
@@ -8147,27 +8203,30 @@ async function reconcile_fold_apply(gobj, opts, visible)
8147
8203
  nd.data.rest = p.rest;
8148
8204
  graph.updateNodeData([{
8149
8205
  id: id,
8150
- style: {innerHTML: build_more_innerHTML(color, priv.theme, p.rest)},
8206
+ style: {innerHTML: build_more_innerHTML(
8207
+ color, priv.theme, p.rest, more_chip_is_compact(gobj, nd)
8208
+ )},
8151
8209
  }]);
8152
8210
  }
8153
8211
  continue;
8154
8212
  }
8155
8213
  let xy = get_default_ne_xy(gobj);
8214
+ let parent_node = "";
8215
+ if(p.node_key) {
8216
+ let parent = model.nodes.get(p.node_key);
8217
+ parent_node = build_node_name(gobj, parent.topic_name, parent.id);
8218
+ }
8219
+ let chip_data = {
8220
+ more: p.group_key,
8221
+ child_topic: child_topic,
8222
+ rest: p.rest,
8223
+ parent_node: parent_node,
8224
+ };
8156
8225
  graph.addNodeData([{
8157
8226
  id: id,
8158
8227
  type: 'html',
8159
- style: {
8160
- x: xy, y: xy,
8161
- size: [...MORE_CHIP_SIZE],
8162
- dx: -MORE_CHIP_SIZE[0] / 2,
8163
- dy: -MORE_CHIP_SIZE[1] / 2,
8164
- innerHTML: build_more_innerHTML(color, priv.theme, p.rest),
8165
- },
8166
- data: {
8167
- more: p.group_key,
8168
- child_topic: child_topic,
8169
- rest: p.rest,
8170
- },
8228
+ style: Object.assign({x: xy, y: xy}, more_chip_style(gobj, {data: chip_data}, color, p.rest)),
8229
+ data: chip_data,
8171
8230
  }]);
8172
8231
  if(p.node_key) {
8173
8232
  let parent = model.nodes.get(p.node_key);
@@ -9113,6 +9172,7 @@ function ac_set_node_mode(gobj, event, kw, src)
9113
9172
  return 0; /* applied when the records arrive */
9114
9173
  }
9115
9174
  reshape_nodes(gobj, all_record_node_ids(gobj));
9175
+ reshape_more_chips(gobj);
9116
9176
  reconcile_fold(gobj, {relayout: true, fit: true});
9117
9177
  return 0;
9118
9178
  }
@@ -9159,6 +9219,7 @@ function ac_toggle_node_mode(gobj, event, kw, src)
9159
9219
  }
9160
9220
  let vp = yui_graph_viewport_of(priv.graph, node_id);
9161
9221
  reshape_nodes(gobj, [node_id]);
9222
+ reshape_more_chips(gobj);
9162
9223
  if(priv._fold_model) {
9163
9224
  reconcile_fold(gobj, {relayout: true, keep: node_id, keep_vp: vp});
9164
9225
  }
@@ -515,8 +515,6 @@ function option_label(name)
515
515
  return t("manual");
516
516
  case "treedb-tree":
517
517
  return t("treedb-tree");
518
- case "treedb-outline":
519
- return t("treedb-outline");
520
518
  case "radial":
521
519
  return t("radial");
522
520
  case "dagre":