@yuneta/gobj-ui 7.23.142 → 7.23.144

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.
@@ -871,7 +871,7 @@ function secondary_nav_renders(item, layout) {
871
871
  /***************************************************************
872
872
  * Constants
873
873
  ***************************************************************/
874
- var GCLASS_NAME$21 = "C_YUI_SHELL";
874
+ var GCLASS_NAME$22 = "C_YUI_SHELL";
875
875
  var __last_shell__ = null;
876
876
  var ZONE_IDS = [
877
877
  "top",
@@ -893,7 +893,7 @@ var LAYER_DEFS = [
893
893
  /***************************************************************
894
894
  * Attrs
895
895
  ***************************************************************/
896
- var attrs_table$21 = [
896
+ var attrs_table$22 = [
897
897
  (0, _yuneta_gobj_js.SDATA)(_yuneta_gobj_js.data_type_t.DTP_POINTER, "subscriber", 0, null, "Subscriber of output events"),
898
898
  (0, _yuneta_gobj_js.SDATA)(_yuneta_gobj_js.data_type_t.DTP_JSON, "config", 0, null, "Shell declarative config (zones, menu, stages, toolbar)"),
899
899
  (0, _yuneta_gobj_js.SDATA)(_yuneta_gobj_js.data_type_t.DTP_STRING, "default_route", 0, "", "Fallback route if hash is empty"),
@@ -904,7 +904,7 @@ var attrs_table$21 = [
904
904
  (0, _yuneta_gobj_js.SDATA)(_yuneta_gobj_js.data_type_t.DTP_POINTER, "$container", 0, null, "Root HTMLElement of the shell"),
905
905
  (0, _yuneta_gobj_js.SDATA_END)()
906
906
  ];
907
- var PRIVATE_DATA$21 = {
907
+ var PRIVATE_DATA$22 = {
908
908
  zones: {},
909
909
  layers: {},
910
910
  stages: {},
@@ -927,23 +927,23 @@ var PRIVATE_DATA$21 = {
927
927
  conn_nodes: [],
928
928
  active_dropdown: null
929
929
  };
930
- var __gclass__$21 = null;
930
+ var __gclass__$22 = null;
931
931
  /******************************
932
932
  * Framework Methods
933
933
  ******************************/
934
934
  /***************************************************************
935
935
  * Framework Method: Create
936
936
  ***************************************************************/
937
- function mt_create$21(gobj) {
937
+ function mt_create$22(gobj) {
938
938
  const subscriber = (0, _yuneta_gobj_js.gobj_read_pointer_attr)(gobj, "subscriber");
939
939
  if (subscriber) (0, _yuneta_gobj_js.gobj_subscribe_event)(gobj, null, {}, subscriber);
940
940
  __last_shell__ = gobj;
941
- build_ui$18(gobj);
941
+ build_ui$19(gobj);
942
942
  }
943
943
  /***************************************************************
944
944
  * Framework Method: Start
945
945
  ***************************************************************/
946
- function mt_start$19(gobj) {
946
+ function mt_start$20(gobj) {
947
947
  let config = (0, _yuneta_gobj_js.gobj_read_attr)(gobj, "config") || {};
948
948
  let priv = gobj.priv;
949
949
  if (!validate_config(config)) {
@@ -1012,7 +1012,7 @@ function mt_start$19(gobj) {
1012
1012
  /***************************************************************
1013
1013
  * Framework Method: Stop
1014
1014
  ***************************************************************/
1015
- function mt_stop$19(gobj) {
1015
+ function mt_stop$20(gobj) {
1016
1016
  let priv = gobj.priv;
1017
1017
  if (!priv) return 0;
1018
1018
  close_toolbar_dropdown(gobj);
@@ -1053,7 +1053,7 @@ function mt_stop$19(gobj) {
1053
1053
  /***************************************************************
1054
1054
  * Framework Method: Destroy
1055
1055
  ***************************************************************/
1056
- function mt_destroy$21(gobj) {
1056
+ function mt_destroy$22(gobj) {
1057
1057
  close_toolbar_dropdown(gobj);
1058
1058
  let $container = (0, _yuneta_gobj_js.gobj_read_attr)(gobj, "$container");
1059
1059
  if ($container && $container.parentNode) $container.parentNode.removeChild($container);
@@ -1169,7 +1169,7 @@ function check_route_unique(route_owner, item, menu_id) {
1169
1169
  /************************************************************
1170
1170
  * Build the DOM: layers → base → zones
1171
1171
  ************************************************************/
1172
- function build_ui$18(gobj) {
1172
+ function build_ui$19(gobj) {
1173
1173
  let priv = gobj.priv;
1174
1174
  let shell_cfg = ((0, _yuneta_gobj_js.gobj_read_attr)(gobj, "config") || {}).shell || {};
1175
1175
  let $container = (0, _yuneta_gobj_js.createElement2)(["div", { class: "C_YUI_SHELL yui-shell" }]);
@@ -2556,14 +2556,14 @@ function ac_nav_item_close(gobj, event, kw, src) {
2556
2556
  /***************************************************************
2557
2557
  * FSM
2558
2558
  ***************************************************************/
2559
- var gmt$21 = {
2560
- mt_create: mt_create$21,
2561
- mt_start: mt_start$19,
2562
- mt_stop: mt_stop$19,
2563
- mt_destroy: mt_destroy$21
2559
+ var gmt$22 = {
2560
+ mt_create: mt_create$22,
2561
+ mt_start: mt_start$20,
2562
+ mt_stop: mt_stop$20,
2563
+ mt_destroy: mt_destroy$22
2564
2564
  };
2565
- function create_gclass$21(gclass_name) {
2566
- if (__gclass__$21) {
2565
+ function create_gclass$22(gclass_name) {
2566
+ if (__gclass__$22) {
2567
2567
  (0, _yuneta_gobj_js.log_error)(`GClass ALREADY created: ${gclass_name}`);
2568
2568
  return -1;
2569
2569
  }
@@ -2592,12 +2592,12 @@ function create_gclass$21(gclass_name) {
2592
2592
  ["EV_ROUTE_CHANGED", _yuneta_gobj_js.event_flag_t.EVF_OUTPUT_EVENT | _yuneta_gobj_js.event_flag_t.EVF_PUBLIC_EVENT | _yuneta_gobj_js.event_flag_t.EVF_NO_WARN_SUBS],
2593
2593
  ["EV_LANGUAGE_CHANGED", _yuneta_gobj_js.event_flag_t.EVF_OUTPUT_EVENT | _yuneta_gobj_js.event_flag_t.EVF_PUBLIC_EVENT | _yuneta_gobj_js.event_flag_t.EVF_NO_WARN_SUBS]
2594
2594
  ];
2595
- __gclass__$21 = (0, _yuneta_gobj_js.gclass_create)(gclass_name, event_types, states, gmt$21, 0, attrs_table$21, PRIVATE_DATA$21, 0, 0, 0, _yuneta_gobj_js.gclass_flag_t.gcflag_no_check_output_events);
2596
- if (!__gclass__$21) return -1;
2595
+ __gclass__$22 = (0, _yuneta_gobj_js.gclass_create)(gclass_name, event_types, states, gmt$22, 0, attrs_table$22, PRIVATE_DATA$22, 0, 0, 0, _yuneta_gobj_js.gclass_flag_t.gcflag_no_check_output_events);
2596
+ if (!__gclass__$22) return -1;
2597
2597
  return 0;
2598
2598
  }
2599
2599
  function register_c_yui_shell() {
2600
- return create_gclass$21(GCLASS_NAME$21);
2600
+ return create_gclass$22(GCLASS_NAME$22);
2601
2601
  }
2602
2602
  /***************************************************************
2603
2603
  * Public helpers — exported alongside register_c_yui_shell().
@@ -2690,7 +2690,7 @@ function yui_shell_last_route_under(shell_gobj, route) {
2690
2690
  function yui_shell_of(gobj) {
2691
2691
  let g = gobj;
2692
2692
  while (g) {
2693
- if ((0, _yuneta_gobj_js.gobj_gclass_name)(g) === GCLASS_NAME$21) return g;
2693
+ if ((0, _yuneta_gobj_js.gobj_gclass_name)(g) === GCLASS_NAME$22) return g;
2694
2694
  g = (0, _yuneta_gobj_js.gobj_parent)(g);
2695
2695
  }
2696
2696
  return __last_shell__;
@@ -3444,7 +3444,7 @@ function yui_shell_confirm_yesnocancel(shell, message, opts) {
3444
3444
  /***************************************************************
3445
3445
  * Constants
3446
3446
  ***************************************************************/
3447
- var GCLASS_NAME$20 = "C_YUI_WINDOW";
3447
+ var GCLASS_NAME$21 = "C_YUI_WINDOW";
3448
3448
  var WC_MIN = "<svg viewBox=\"0 0 16 16\" aria-hidden=\"true\"><rect x=\"3\" y=\"11\" width=\"10\" height=\"1.6\" rx=\"0.8\" fill=\"currentColor\"/></svg>";
3449
3449
  var WC_MAX = "<svg viewBox=\"0 0 16 16\" aria-hidden=\"true\"><rect x=\"3.3\" y=\"3.3\" width=\"9.4\" height=\"9.4\" rx=\"1.6\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"/></svg>";
3450
3450
  var WC_RESTORE = "<svg viewBox=\"0 0 16 16\" aria-hidden=\"true\"><rect x=\"5.2\" y=\"3\" width=\"7.8\" height=\"7.8\" rx=\"1.3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"/><rect x=\"3\" y=\"5.2\" width=\"7.8\" height=\"7.8\" rx=\"1.3\" fill=\"var(--bulma-scheme-main)\" stroke=\"currentColor\" stroke-width=\"1.4\"/></svg>";
@@ -3453,7 +3453,7 @@ var MOBILE_MAX = 768;
3453
3453
  /***************************************************************
3454
3454
  * Data
3455
3455
  ***************************************************************/
3456
- var attrs_table$20 = [
3456
+ var attrs_table$21 = [
3457
3457
  (0, _yuneta_gobj_js.SDATA)(_yuneta_gobj_js.data_type_t.DTP_POINTER, "subscriber", 0, null, "Subscriber of output events"),
3458
3458
  (0, _yuneta_gobj_js.SDATA)(_yuneta_gobj_js.data_type_t.DTP_POINTER, "$parent", 0, null, "$container will be appended to $parent if not null, else to document.body"),
3459
3459
  (0, _yuneta_gobj_js.SDATA)(_yuneta_gobj_js.data_type_t.DTP_INTEGER, "x", 0, "300", "X position"),
@@ -3491,21 +3491,21 @@ var attrs_table$20 = [
3491
3491
  (0, _yuneta_gobj_js.SDATA)(_yuneta_gobj_js.data_type_t.DTP_POINTER, "win_resize_handler", 0, null, "Internal: native window 'resize' listener"),
3492
3492
  (0, _yuneta_gobj_js.SDATA_END)()
3493
3493
  ];
3494
- var PRIVATE_DATA$20 = { prevSize: 0 };
3495
- var __gclass__$20 = null;
3494
+ var PRIVATE_DATA$21 = { prevSize: 0 };
3495
+ var __gclass__$21 = null;
3496
3496
  /******************************
3497
3497
  * Framework Methods
3498
3498
  ******************************/
3499
3499
  /***************************************************************
3500
3500
  * Framework Method: Create
3501
3501
  ***************************************************************/
3502
- function mt_create$20(gobj) {
3502
+ function mt_create$21(gobj) {
3503
3503
  const subscriber = (0, _yuneta_gobj_js.gobj_read_pointer_attr)(gobj, "subscriber");
3504
3504
  if (subscriber) (0, _yuneta_gobj_js.gobj_subscribe_event)(gobj, null, {}, subscriber);
3505
3505
  let window_id = "window-" + (0, _yuneta_gobj_js.clean_name)((0, _yuneta_gobj_js.gobj_short_name)(gobj));
3506
3506
  (0, _yuneta_gobj_js.gobj_write_attr)(gobj, "window_id", window_id);
3507
3507
  let manager = resolve_manager(gobj);
3508
- build_ui$17(gobj);
3508
+ build_ui$18(gobj);
3509
3509
  if (manager) {
3510
3510
  let $c = (0, _yuneta_gobj_js.gobj_read_attr)(gobj, "$container");
3511
3511
  if ($c) $c.addEventListener("pointerdown", function() {
@@ -3539,7 +3539,7 @@ function mt_create$20(gobj) {
3539
3539
  /***************************************************************
3540
3540
  * Framework Method: Destroy
3541
3541
  ***************************************************************/
3542
- function mt_destroy$20(gobj) {
3542
+ function mt_destroy$21(gobj) {
3543
3543
  let manager = (0, _yuneta_gobj_js.gobj_read_pointer_attr)(gobj, "manager");
3544
3544
  if (manager) (0, _yuneta_gobj_js.gobj_send_event)(manager, "EV_UNREGISTER_WINDOW", { window: gobj }, gobj);
3545
3545
  let back_overlay = (0, _yuneta_gobj_js.gobj_read_attr)(gobj, "back_overlay");
@@ -3712,7 +3712,7 @@ function do_minimize(gobj) {
3712
3712
  /************************************************************
3713
3713
  * Build UI
3714
3714
  ************************************************************/
3715
- function build_ui$17(gobj) {
3715
+ function build_ui$18(gobj) {
3716
3716
  ensure_window_style();
3717
3717
  let mobile = is_mobile$4();
3718
3718
  let header = (0, _yuneta_gobj_js.gobj_read_attr)(gobj, "header");
@@ -4273,15 +4273,15 @@ function ac_close(gobj, event, kw, src) {
4273
4273
  /***************************
4274
4274
  * FSM
4275
4275
  ***************************/
4276
- var gmt$20 = {
4277
- mt_create: mt_create$20,
4278
- mt_destroy: mt_destroy$20
4276
+ var gmt$21 = {
4277
+ mt_create: mt_create$21,
4278
+ mt_destroy: mt_destroy$21
4279
4279
  };
4280
4280
  /***************************************************************
4281
4281
  * Create the GClass
4282
4282
  ***************************************************************/
4283
- function create_gclass$20(gclass_name) {
4284
- if (__gclass__$20) {
4283
+ function create_gclass$21(gclass_name) {
4284
+ if (__gclass__$21) {
4285
4285
  (0, _yuneta_gobj_js.log_error)(`GClass ALREADY created: ${gclass_name}`);
4286
4286
  return -1;
4287
4287
  }
@@ -4316,15 +4316,15 @@ function create_gclass$20(gclass_name) {
4316
4316
  ["EV_HIDE", 0],
4317
4317
  ["EV_CLOSE_WINDOW", 0]
4318
4318
  ];
4319
- __gclass__$20 = (0, _yuneta_gobj_js.gclass_create)(gclass_name, event_types, states, gmt$20, 0, attrs_table$20, PRIVATE_DATA$20, 0, 0, 0, 0);
4320
- if (!__gclass__$20) return -1;
4319
+ __gclass__$21 = (0, _yuneta_gobj_js.gclass_create)(gclass_name, event_types, states, gmt$21, 0, attrs_table$21, PRIVATE_DATA$21, 0, 0, 0, 0);
4320
+ if (!__gclass__$21) return -1;
4321
4321
  return 0;
4322
4322
  }
4323
4323
  /***************************************************************
4324
4324
  * Register GClass
4325
4325
  ***************************************************************/
4326
4326
  function register_c_yui_window() {
4327
- return create_gclass$20(GCLASS_NAME$20);
4327
+ return create_gclass$21(GCLASS_NAME$21);
4328
4328
  }
4329
4329
  //#endregion
4330
4330
  //#region src/c_yui_window_manager.js
@@ -4362,13 +4362,13 @@ function register_c_yui_window() {
4362
4362
  /***************************************************************
4363
4363
  * Constants
4364
4364
  ***************************************************************/
4365
- var GCLASS_NAME$19 = "C_YUI_WINDOW_MANAGER";
4365
+ var GCLASS_NAME$20 = "C_YUI_WINDOW_MANAGER";
4366
4366
  var DOCK_Z = 1e6;
4367
4367
  var WC_X = "<svg viewBox=\"0 0 16 16\" aria-hidden=\"true\"><path d=\"M4.5 4.5 L11.5 11.5 M11.5 4.5 L4.5 11.5\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/></svg>";
4368
4368
  /***************************************************************
4369
4369
  * Data
4370
4370
  ***************************************************************/
4371
- var attrs_table$19 = [
4371
+ var attrs_table$20 = [
4372
4372
  (0, _yuneta_gobj_js.SDATA)(_yuneta_gobj_js.data_type_t.DTP_POINTER, "subscriber", 0, null, "Subscriber of output events"),
4373
4373
  (0, _yuneta_gobj_js.SDATA)(_yuneta_gobj_js.data_type_t.DTP_STRING, "dock_mode", 0, "floating", "floating | inline | responsive (floating on wide screens, inline on narrow)"),
4374
4374
  (0, _yuneta_gobj_js.SDATA)(_yuneta_gobj_js.data_type_t.DTP_STRING, "dock_corner", 0, "bottom-left", "Floating placement: top-left | top-right | bottom-left | bottom-right"),
@@ -4378,20 +4378,20 @@ var attrs_table$19 = [
4378
4378
  (0, _yuneta_gobj_js.SDATA)(_yuneta_gobj_js.data_type_t.DTP_POINTER, "$container", 0, null, "Internal: the dock element"),
4379
4379
  (0, _yuneta_gobj_js.SDATA_END)()
4380
4380
  ];
4381
- var PRIVATE_DATA$19 = {
4381
+ var PRIVATE_DATA$20 = {
4382
4382
  windows: null,
4383
4383
  z: 0,
4384
4384
  mql: null,
4385
4385
  mql_handler: null
4386
4386
  };
4387
- var __gclass__$19 = null;
4387
+ var __gclass__$20 = null;
4388
4388
  /******************************
4389
4389
  * Framework Methods
4390
4390
  ******************************/
4391
4391
  /***************************************************************
4392
4392
  * Framework Method: Create
4393
4393
  ***************************************************************/
4394
- function mt_create$19(gobj) {
4394
+ function mt_create$20(gobj) {
4395
4395
  let priv = gobj.priv;
4396
4396
  priv.windows = [];
4397
4397
  priv.z = 10;
@@ -4410,7 +4410,7 @@ function mt_create$19(gobj) {
4410
4410
  /***************************************************************
4411
4411
  * Framework Method: Destroy
4412
4412
  ***************************************************************/
4413
- function mt_destroy$19(gobj) {
4413
+ function mt_destroy$20(gobj) {
4414
4414
  let priv = gobj.priv;
4415
4415
  if (priv.mql && priv.mql_handler) {
4416
4416
  priv.mql.removeEventListener("change", priv.mql_handler);
@@ -4779,19 +4779,19 @@ function ac_focus_window(gobj, event, kw, src) {
4779
4779
  /***************************
4780
4780
  * FSM
4781
4781
  ***************************/
4782
- var gmt$19 = {
4783
- mt_create: mt_create$19,
4784
- mt_destroy: mt_destroy$19
4782
+ var gmt$20 = {
4783
+ mt_create: mt_create$20,
4784
+ mt_destroy: mt_destroy$20
4785
4785
  };
4786
4786
  /***************************************************************
4787
4787
  * Create the GClass
4788
4788
  ***************************************************************/
4789
- function create_gclass$19(gclass_name) {
4790
- if (__gclass__$19) {
4789
+ function create_gclass$20(gclass_name) {
4790
+ if (__gclass__$20) {
4791
4791
  (0, _yuneta_gobj_js.log_error)(`GClass ALREADY created: ${gclass_name}`);
4792
4792
  return -1;
4793
4793
  }
4794
- __gclass__$19 = (0, _yuneta_gobj_js.gclass_create)(gclass_name, [
4794
+ __gclass__$20 = (0, _yuneta_gobj_js.gclass_create)(gclass_name, [
4795
4795
  ["EV_REGISTER_WINDOW", 0],
4796
4796
  ["EV_UNREGISTER_WINDOW", 0],
4797
4797
  ["EV_MINIMIZE_WINDOW", 0],
@@ -4817,15 +4817,15 @@ function create_gclass$19(gclass_name) {
4817
4817
  ac_focus_window,
4818
4818
  null
4819
4819
  ]
4820
- ]]], gmt$19, 0, attrs_table$19, PRIVATE_DATA$19, 0, 0, 0, 0);
4821
- if (!__gclass__$19) return -1;
4820
+ ]]], gmt$20, 0, attrs_table$20, PRIVATE_DATA$20, 0, 0, 0, 0);
4821
+ if (!__gclass__$20) return -1;
4822
4822
  return 0;
4823
4823
  }
4824
4824
  /***************************************************************
4825
4825
  * Register GClass
4826
4826
  ***************************************************************/
4827
4827
  function register_c_yui_window_manager() {
4828
- return create_gclass$19(GCLASS_NAME$19);
4828
+ return create_gclass$20(GCLASS_NAME$20);
4829
4829
  }
4830
4830
  //#endregion
4831
4831
  //#region src/pager_helpers.js
@@ -4911,11 +4911,11 @@ function pager_back_action(stack, back_on_root) {
4911
4911
  /***************************************************************
4912
4912
  * Constants
4913
4913
  ***************************************************************/
4914
- var GCLASS_NAME$18 = "C_YUI_PAGER";
4914
+ var GCLASS_NAME$19 = "C_YUI_PAGER";
4915
4915
  /***************************************************************
4916
4916
  * Data
4917
4917
  ***************************************************************/
4918
- var attrs_table$18 = [
4918
+ var attrs_table$19 = [
4919
4919
  (0, _yuneta_gobj_js.SDATA)(_yuneta_gobj_js.data_type_t.DTP_POINTER, "subscriber", 0, null, "Subscriber of output events"),
4920
4920
  (0, _yuneta_gobj_js.SDATA)(_yuneta_gobj_js.data_type_t.DTP_STRING, "root_title", 0, "", "Title shown on the root page"),
4921
4921
  (0, _yuneta_gobj_js.SDATA)(_yuneta_gobj_js.data_type_t.DTP_BOOLEAN, "back_on_root", 0, true, "On the root page the back affordance emits EV_PAGER_EXIT"),
@@ -4923,18 +4923,18 @@ var attrs_table$18 = [
4923
4923
  (0, _yuneta_gobj_js.SDATA)(_yuneta_gobj_js.data_type_t.DTP_POINTER, "$container", 0, null, "HTMLElement root, mounted by the parent"),
4924
4924
  (0, _yuneta_gobj_js.SDATA_END)()
4925
4925
  ];
4926
- var PRIVATE_DATA$18 = { stack: null };
4927
- var __gclass__$18 = null;
4926
+ var PRIVATE_DATA$19 = { stack: null };
4927
+ var __gclass__$19 = null;
4928
4928
  /******************************
4929
4929
  * Framework Methods
4930
4930
  ******************************/
4931
4931
  /***************************************************************
4932
4932
  * Framework Method: Create
4933
4933
  ***************************************************************/
4934
- function mt_create$18(gobj) {
4934
+ function mt_create$19(gobj) {
4935
4935
  let priv = gobj.priv;
4936
4936
  priv.stack = [];
4937
- build_ui$16(gobj);
4937
+ build_ui$17(gobj);
4938
4938
  let subscriber = (0, _yuneta_gobj_js.gobj_read_pointer_attr)(gobj, "subscriber");
4939
4939
  if (!subscriber) subscriber = (0, _yuneta_gobj_js.gobj_parent)(gobj);
4940
4940
  (0, _yuneta_gobj_js.gobj_subscribe_event)(gobj, null, {}, subscriber);
@@ -4942,17 +4942,17 @@ function mt_create$18(gobj) {
4942
4942
  /***************************************************************
4943
4943
  * Framework Method: Start
4944
4944
  ***************************************************************/
4945
- function mt_start$18(gobj) {}
4945
+ function mt_start$19(gobj) {}
4946
4946
  /***************************************************************
4947
4947
  * Framework Method: Stop
4948
4948
  ***************************************************************/
4949
- function mt_stop$18(gobj) {
4949
+ function mt_stop$19(gobj) {
4950
4950
  (0, _yuneta_gobj_js.gobj_stop_children)(gobj);
4951
4951
  }
4952
4952
  /***************************************************************
4953
4953
  * Framework Method: Destroy
4954
4954
  ***************************************************************/
4955
- function mt_destroy$18(gobj) {
4955
+ function mt_destroy$19(gobj) {
4956
4956
  destroy_ui$12(gobj);
4957
4957
  }
4958
4958
  /***************************
@@ -4961,7 +4961,7 @@ function mt_destroy$18(gobj) {
4961
4961
  /************************************************************
4962
4962
  * Build UI
4963
4963
  ************************************************************/
4964
- function build_ui$16(gobj) {
4964
+ function build_ui$17(gobj) {
4965
4965
  let $container = (0, _yuneta_gobj_js.createElement2)([
4966
4966
  "div",
4967
4967
  {
@@ -5113,7 +5113,7 @@ function ac_push_page(gobj, event, kw, src) {
5113
5113
  let priv = gobj.priv;
5114
5114
  let resolved = resolve_panel$1(kw.content);
5115
5115
  if (!resolved.$el) {
5116
- (0, _yuneta_gobj_js.log_error)(`${GCLASS_NAME$18}: EV_PUSH_PAGE without content`);
5116
+ (0, _yuneta_gobj_js.log_error)(`${GCLASS_NAME$19}: EV_PUSH_PAGE without content`);
5117
5117
  return -1;
5118
5118
  }
5119
5119
  let $body = (0, _yuneta_gobj_js.gobj_read_attr)(gobj, "$container").querySelector(".yui-pager-body");
@@ -5166,7 +5166,7 @@ function ac_replace_page(gobj, event, kw, src) {
5166
5166
  let priv = gobj.priv;
5167
5167
  let resolved = resolve_panel$1(kw.content);
5168
5168
  if (!resolved.$el) {
5169
- (0, _yuneta_gobj_js.log_error)(`${GCLASS_NAME$18}: EV_REPLACE_PAGE without content`);
5169
+ (0, _yuneta_gobj_js.log_error)(`${GCLASS_NAME$19}: EV_REPLACE_PAGE without content`);
5170
5170
  return -1;
5171
5171
  }
5172
5172
  let $body = (0, _yuneta_gobj_js.gobj_read_attr)(gobj, "$container").querySelector(".yui-pager-body");
@@ -5233,17 +5233,17 @@ function ac_resize$5(gobj, event, kw, src) {
5233
5233
  /***************************
5234
5234
  * FSM
5235
5235
  ***************************/
5236
- var gmt$18 = {
5237
- mt_create: mt_create$18,
5238
- mt_start: mt_start$18,
5239
- mt_stop: mt_stop$18,
5240
- mt_destroy: mt_destroy$18
5236
+ var gmt$19 = {
5237
+ mt_create: mt_create$19,
5238
+ mt_start: mt_start$19,
5239
+ mt_stop: mt_stop$19,
5240
+ mt_destroy: mt_destroy$19
5241
5241
  };
5242
5242
  /***************************************************************
5243
5243
  * Create the GClass
5244
5244
  ***************************************************************/
5245
- function create_gclass$18(gclass_name) {
5246
- if (__gclass__$18) {
5245
+ function create_gclass$19(gclass_name) {
5246
+ if (__gclass__$19) {
5247
5247
  (0, _yuneta_gobj_js.log_error)(`GClass ALREADY created: ${gclass_name}`);
5248
5248
  return -1;
5249
5249
  }
@@ -5308,15 +5308,15 @@ function create_gclass$18(gclass_name) {
5308
5308
  ["EV_PAGE_DISCARD", _yuneta_gobj_js.event_flag_t.EVF_OUTPUT_EVENT],
5309
5309
  ["EV_PAGER_EXIT", _yuneta_gobj_js.event_flag_t.EVF_OUTPUT_EVENT]
5310
5310
  ];
5311
- __gclass__$18 = (0, _yuneta_gobj_js.gclass_create)(gclass_name, event_types, states, gmt$18, 0, attrs_table$18, PRIVATE_DATA$18, 0, 0, 0, 0);
5312
- if (!__gclass__$18) return -1;
5311
+ __gclass__$19 = (0, _yuneta_gobj_js.gclass_create)(gclass_name, event_types, states, gmt$19, 0, attrs_table$19, PRIVATE_DATA$19, 0, 0, 0, 0);
5312
+ if (!__gclass__$19) return -1;
5313
5313
  return 0;
5314
5314
  }
5315
5315
  /***************************************************************
5316
5316
  * Register GClass
5317
5317
  ***************************************************************/
5318
5318
  function register_c_yui_pager() {
5319
- return create_gclass$18(GCLASS_NAME$18);
5319
+ return create_gclass$19(GCLASS_NAME$19);
5320
5320
  }
5321
5321
  //#endregion
5322
5322
  //#region src/wizard_helpers.js
@@ -5437,11 +5437,11 @@ function wizard_should_validate(linear, has_gobj) {
5437
5437
  /***************************************************************
5438
5438
  * Constants
5439
5439
  ***************************************************************/
5440
- var GCLASS_NAME$17 = "C_YUI_WIZARD";
5440
+ var GCLASS_NAME$18 = "C_YUI_WIZARD";
5441
5441
  /***************************************************************
5442
5442
  * Data
5443
5443
  ***************************************************************/
5444
- var attrs_table$17 = [
5444
+ var attrs_table$18 = [
5445
5445
  (0, _yuneta_gobj_js.SDATA)(_yuneta_gobj_js.data_type_t.DTP_POINTER, "subscriber", 0, null, "Subscriber of output events"),
5446
5446
  (0, _yuneta_gobj_js.SDATA)(_yuneta_gobj_js.data_type_t.DTP_STRING, "confirm_label", 0, "confirm", "i18n key of the last-step primary button"),
5447
5447
  (0, _yuneta_gobj_js.SDATA)(_yuneta_gobj_js.data_type_t.DTP_STRING, "next_label", 0, "next", "i18n key of the primary button (not last step)"),
@@ -5451,26 +5451,26 @@ var attrs_table$17 = [
5451
5451
  (0, _yuneta_gobj_js.SDATA)(_yuneta_gobj_js.data_type_t.DTP_POINTER, "$container", 0, null, "HTMLElement root, mounted by the parent"),
5452
5452
  (0, _yuneta_gobj_js.SDATA_END)()
5453
5453
  ];
5454
- var PRIVATE_DATA$17 = {
5454
+ var PRIVATE_DATA$18 = {
5455
5455
  steps: null,
5456
5456
  idx: 0,
5457
5457
  acc: null,
5458
5458
  awaiting: false
5459
5459
  };
5460
- var __gclass__$17 = null;
5460
+ var __gclass__$18 = null;
5461
5461
  /******************************
5462
5462
  * Framework Methods
5463
5463
  ******************************/
5464
5464
  /***************************************************************
5465
5465
  * Framework Method: Create
5466
5466
  ***************************************************************/
5467
- function mt_create$17(gobj) {
5467
+ function mt_create$18(gobj) {
5468
5468
  let priv = gobj.priv;
5469
5469
  priv.steps = [];
5470
5470
  priv.idx = 0;
5471
5471
  priv.acc = null;
5472
5472
  priv.awaiting = false;
5473
- build_ui$15(gobj);
5473
+ build_ui$16(gobj);
5474
5474
  let subscriber = (0, _yuneta_gobj_js.gobj_read_pointer_attr)(gobj, "subscriber");
5475
5475
  if (!subscriber) subscriber = (0, _yuneta_gobj_js.gobj_parent)(gobj);
5476
5476
  (0, _yuneta_gobj_js.gobj_subscribe_event)(gobj, null, {}, subscriber);
@@ -5478,17 +5478,17 @@ function mt_create$17(gobj) {
5478
5478
  /***************************************************************
5479
5479
  * Framework Method: Start
5480
5480
  ***************************************************************/
5481
- function mt_start$17(gobj) {}
5481
+ function mt_start$18(gobj) {}
5482
5482
  /***************************************************************
5483
5483
  * Framework Method: Stop
5484
5484
  ***************************************************************/
5485
- function mt_stop$17(gobj) {
5485
+ function mt_stop$18(gobj) {
5486
5486
  (0, _yuneta_gobj_js.gobj_stop_children)(gobj);
5487
5487
  }
5488
5488
  /***************************************************************
5489
5489
  * Framework Method: Destroy
5490
5490
  ***************************************************************/
5491
- function mt_destroy$17(gobj) {
5491
+ function mt_destroy$18(gobj) {
5492
5492
  destroy_ui$11(gobj);
5493
5493
  }
5494
5494
  /***************************
@@ -5497,7 +5497,7 @@ function mt_destroy$17(gobj) {
5497
5497
  /************************************************************
5498
5498
  * Build UI
5499
5499
  ************************************************************/
5500
- function build_ui$15(gobj) {
5500
+ function build_ui$16(gobj) {
5501
5501
  let $container = (0, _yuneta_gobj_js.createElement2)([
5502
5502
  "div",
5503
5503
  {
@@ -5698,7 +5698,7 @@ function ac_set_steps(gobj, event, kw, src) {
5698
5698
  let priv = gobj.priv;
5699
5699
  let steps_in = kw && kw.steps || [];
5700
5700
  if (steps_in.length === 0) {
5701
- (0, _yuneta_gobj_js.log_error)(`${GCLASS_NAME$17}: EV_SET_STEPS with no steps`);
5701
+ (0, _yuneta_gobj_js.log_error)(`${GCLASS_NAME$18}: EV_SET_STEPS with no steps`);
5702
5702
  return -1;
5703
5703
  }
5704
5704
  let $body = (0, _yuneta_gobj_js.gobj_read_attr)(gobj, "$container").querySelector(".yui-wizard-body");
@@ -5708,7 +5708,7 @@ function ac_set_steps(gobj, event, kw, src) {
5708
5708
  let st = steps_in[i];
5709
5709
  let resolved = resolve_panel(st.content);
5710
5710
  if (!resolved.$el) {
5711
- (0, _yuneta_gobj_js.log_error)(`${GCLASS_NAME$17}: step '${st.id}' has no content`);
5711
+ (0, _yuneta_gobj_js.log_error)(`${GCLASS_NAME$18}: step '${st.id}' has no content`);
5712
5712
  return -1;
5713
5713
  }
5714
5714
  resolved.$el.classList.add("is-hidden");
@@ -5842,17 +5842,17 @@ function ac_resize$4(gobj, event, kw, src) {
5842
5842
  /***************************
5843
5843
  * FSM
5844
5844
  ***************************/
5845
- var gmt$17 = {
5846
- mt_create: mt_create$17,
5847
- mt_start: mt_start$17,
5848
- mt_stop: mt_stop$17,
5849
- mt_destroy: mt_destroy$17
5845
+ var gmt$18 = {
5846
+ mt_create: mt_create$18,
5847
+ mt_start: mt_start$18,
5848
+ mt_stop: mt_stop$18,
5849
+ mt_destroy: mt_destroy$18
5850
5850
  };
5851
5851
  /***************************************************************
5852
5852
  * Create the GClass
5853
5853
  ***************************************************************/
5854
- function create_gclass$17(gclass_name) {
5855
- if (__gclass__$17) {
5854
+ function create_gclass$18(gclass_name) {
5855
+ if (__gclass__$18) {
5856
5856
  (0, _yuneta_gobj_js.log_error)(`GClass ALREADY created: ${gclass_name}`);
5857
5857
  return -1;
5858
5858
  }
@@ -5930,15 +5930,15 @@ function create_gclass$17(gclass_name) {
5930
5930
  ["EV_WIZARD_CANCEL", _yuneta_gobj_js.event_flag_t.EVF_OUTPUT_EVENT],
5931
5931
  ["EV_STEP_VALIDATE", _yuneta_gobj_js.event_flag_t.EVF_OUTPUT_EVENT | _yuneta_gobj_js.event_flag_t.EVF_NO_WARN_SUBS]
5932
5932
  ];
5933
- __gclass__$17 = (0, _yuneta_gobj_js.gclass_create)(gclass_name, event_types, states, gmt$17, 0, attrs_table$17, PRIVATE_DATA$17, 0, 0, 0, 0);
5934
- if (!__gclass__$17) return -1;
5933
+ __gclass__$18 = (0, _yuneta_gobj_js.gclass_create)(gclass_name, event_types, states, gmt$18, 0, attrs_table$18, PRIVATE_DATA$18, 0, 0, 0, 0);
5934
+ if (!__gclass__$18) return -1;
5935
5935
  return 0;
5936
5936
  }
5937
5937
  /***************************************************************
5938
5938
  * Register GClass
5939
5939
  ***************************************************************/
5940
5940
  function register_c_yui_wizard() {
5941
- return create_gclass$17(GCLASS_NAME$17);
5941
+ return create_gclass$18(GCLASS_NAME$18);
5942
5942
  }
5943
5943
  //#endregion
5944
5944
  //#region src/yui_tabulator_i18n.js
@@ -7053,6 +7053,60 @@ function count_branches(value) {
7053
7053
  for (let v of entries) if (has_branch(v)) n++;
7054
7054
  return n;
7055
7055
  }
7056
+ /************************************************************
7057
+ * What differs between two documents: one row per id of
7058
+ * their flat form (json2flat), sorted by id in natural order,
7059
+ * so `[2]` comes before `[10]`:
7060
+ *
7061
+ * [{id, kind: "added"|"removed"|"changed", from?, to?}]
7062
+ *
7063
+ * `from` is the first document's value and `to` the second's:
7064
+ * an added row has no `from`, a removed row no `to`.
7065
+ *
7066
+ * Two roots that are not containers of the same kind have no
7067
+ * ids in common to compare by: they are one value each, and
7068
+ * the row that says they differ has the empty id.
7069
+ *
7070
+ * Throws what json2flat throws (a document too deep).
7071
+ ************************************************************/
7072
+ function json_diff_rows(doc_a, doc_b) {
7073
+ const kind_of = (v) => {
7074
+ if (Array.isArray(v)) return "array";
7075
+ if (v !== null && typeof v === "object") return "object";
7076
+ return "scalar";
7077
+ };
7078
+ let kind_a = kind_of(doc_a);
7079
+ if (kind_a === "scalar" || kind_a !== kind_of(doc_b)) {
7080
+ if (JSON.stringify(doc_a) === JSON.stringify(doc_b)) return [];
7081
+ return [{
7082
+ id: "",
7083
+ kind: "changed",
7084
+ from: doc_a,
7085
+ to: doc_b
7086
+ }];
7087
+ }
7088
+ let diff = (0, _yuneta_gobj_js.flat_diff)((0, _yuneta_gobj_js.json2flat)(doc_a), (0, _yuneta_gobj_js.json2flat)(doc_b));
7089
+ let rows = [];
7090
+ for (const id of Object.keys(diff.added)) rows.push({
7091
+ id,
7092
+ kind: "added",
7093
+ to: diff.added[id]
7094
+ });
7095
+ for (const id of Object.keys(diff.removed)) rows.push({
7096
+ id,
7097
+ kind: "removed",
7098
+ from: diff.removed[id]
7099
+ });
7100
+ for (const id of Object.keys(diff.changed)) rows.push({
7101
+ id,
7102
+ kind: "changed",
7103
+ from: diff.changed[id].from,
7104
+ to: diff.changed[id].to
7105
+ });
7106
+ const collator = new Intl.Collator("en", { numeric: true });
7107
+ rows.sort((x, y) => collator.compare(x.id, y.id));
7108
+ return rows;
7109
+ }
7056
7110
  //#endregion
7057
7111
  //#region src/c_yui_form.js
7058
7112
  /***********************************************************************
@@ -7066,11 +7120,11 @@ function count_branches(value) {
7066
7120
  /***************************************************************
7067
7121
  * Constants
7068
7122
  ***************************************************************/
7069
- var GCLASS_NAME$16 = "C_YUI_FORM";
7123
+ var GCLASS_NAME$17 = "C_YUI_FORM";
7070
7124
  /***************************************************************
7071
7125
  * Data
7072
7126
  ***************************************************************/
7073
- var attrs_table$16 = [
7127
+ var attrs_table$17 = [
7074
7128
  (0, _yuneta_gobj_js.SDATA)(_yuneta_gobj_js.data_type_t.DTP_POINTER, "subscriber", 0, null, "Subscriber of publishing messages"),
7075
7129
  (0, _yuneta_gobj_js.SDATA)(_yuneta_gobj_js.data_type_t.DTP_POINTER, "$parent", 0, null, "$container will be appended to $parent if not null, else do it manually"),
7076
7130
  (0, _yuneta_gobj_js.SDATA)(_yuneta_gobj_js.data_type_t.DTP_POINTER, "template", 0, "<div>You must supply a template for form</div>", "Template for form, object -> TEMPLATE, array -> DESC"),
@@ -7100,41 +7154,41 @@ var attrs_table$16 = [
7100
7154
  (0, _yuneta_gobj_js.SDATA)(_yuneta_gobj_js.data_type_t.DTP_BOOLEAN, "changes", 0, false, "Indicates if changes have been made"),
7101
7155
  (0, _yuneta_gobj_js.SDATA_END)()
7102
7156
  ];
7103
- var PRIVATE_DATA$16 = {};
7104
- var __gclass__$16 = null;
7157
+ var PRIVATE_DATA$17 = {};
7158
+ var __gclass__$17 = null;
7105
7159
  /***************************
7106
7160
  * Framework Methods
7107
7161
  ***************************/
7108
7162
  /************************************************************
7109
7163
  * Framework Method create
7110
7164
  ************************************************************/
7111
- function mt_create$16(gobj) {
7165
+ function mt_create$17(gobj) {
7112
7166
  let subscriber = (0, _yuneta_gobj_js.gobj_read_pointer_attr)(gobj, "subscriber");
7113
7167
  if (!subscriber) subscriber = (0, _yuneta_gobj_js.gobj_parent)(gobj);
7114
7168
  (0, _yuneta_gobj_js.gobj_subscribe_event)(gobj, null, {}, subscriber);
7115
7169
  let name = (0, _yuneta_gobj_js.clean_name)((0, _yuneta_gobj_js.gobj_name)(gobj));
7116
7170
  (0, _yuneta_gobj_js.gobj_write_attr)(gobj, "form_id", "form" + name);
7117
- build_ui$14(gobj);
7171
+ build_ui$15(gobj);
7118
7172
  }
7119
7173
  /************************************************************
7120
7174
  * Framework Method destroy
7121
7175
  * In this point, all children
7122
7176
  * and subscriptions are already deleted.
7123
7177
  ************************************************************/
7124
- function mt_destroy$16(gobj) {
7178
+ function mt_destroy$17(gobj) {
7125
7179
  destroy_ui$10(gobj);
7126
7180
  }
7127
7181
  /************************************************************
7128
7182
  * Framework Method start
7129
7183
  ************************************************************/
7130
- function mt_start$16(gobj) {
7184
+ function mt_start$17(gobj) {
7131
7185
  let record = (0, _yuneta_gobj_js.gobj_read_attr)(gobj, "record");
7132
7186
  if (record) (0, _yuneta_gobj_js.gobj_send_event)(gobj, "EV_LOAD_RECORD", record, gobj);
7133
7187
  }
7134
7188
  /************************************************************
7135
7189
  * Framework Method stop
7136
7190
  ************************************************************/
7137
- function mt_stop$16(gobj) {}
7191
+ function mt_stop$17(gobj) {}
7138
7192
  /***************************
7139
7193
  * Local Methods
7140
7194
  ***************************/
@@ -7389,7 +7443,7 @@ function build_toolbar(gobj) {
7389
7443
  /************************************************************
7390
7444
  * Build UI
7391
7445
  ************************************************************/
7392
- function build_ui$14(gobj) {
7446
+ function build_ui$15(gobj) {
7393
7447
  let $container = (0, _yuneta_gobj_js.createElement2)([
7394
7448
  "div",
7395
7449
  {
@@ -9407,18 +9461,18 @@ function cmd_get_picked_files(gobj, cmd, kw, src) {
9407
9461
  data: files
9408
9462
  };
9409
9463
  }
9410
- var gmt$16 = {
9411
- mt_create: mt_create$16,
9412
- mt_start: mt_start$16,
9413
- mt_stop: mt_stop$16,
9414
- mt_destroy: mt_destroy$16,
9464
+ var gmt$17 = {
9465
+ mt_create: mt_create$17,
9466
+ mt_start: mt_start$17,
9467
+ mt_stop: mt_stop$17,
9468
+ mt_destroy: mt_destroy$17,
9415
9469
  mt_command_parser: mt_command_parser$2
9416
9470
  };
9417
9471
  /***************************************************************
9418
9472
  * Create the GClass
9419
9473
  ***************************************************************/
9420
- function create_gclass$16(gclass_name) {
9421
- if (__gclass__$16) {
9474
+ function create_gclass$17(gclass_name) {
9475
+ if (__gclass__$17) {
9422
9476
  (0, _yuneta_gobj_js.log_error)(`GClass ALREADY created: ${gclass_name}`);
9423
9477
  return -1;
9424
9478
  }
@@ -9516,16 +9570,16 @@ function create_gclass$16(gclass_name) {
9516
9570
  ["EV_HIDE", 0],
9517
9571
  ["EV_TIMEOUT", 0]
9518
9572
  ];
9519
- __gclass__$16 = (0, _yuneta_gobj_js.gclass_create)(gclass_name, event_types, states, gmt$16, 0, attrs_table$16, PRIVATE_DATA$16, 0, 0, 0, 0);
9520
- if (!__gclass__$16) return -1;
9573
+ __gclass__$17 = (0, _yuneta_gobj_js.gclass_create)(gclass_name, event_types, states, gmt$17, 0, attrs_table$17, PRIVATE_DATA$17, 0, 0, 0, 0);
9574
+ if (!__gclass__$17) return -1;
9521
9575
  return 0;
9522
9576
  }
9523
9577
  /***************************************************************
9524
9578
  * Register GClass
9525
9579
  ***************************************************************/
9526
9580
  function register_c_yui_form() {
9527
- if ((0, _yuneta_gobj_js.gclass_find_by_name)(GCLASS_NAME$16, false)) return 0;
9528
- return create_gclass$16(GCLASS_NAME$16);
9581
+ if ((0, _yuneta_gobj_js.gclass_find_by_name)(GCLASS_NAME$17, false)) return 0;
9582
+ return create_gclass$17(GCLASS_NAME$17);
9529
9583
  }
9530
9584
  //#endregion
9531
9585
  //#region src/lib_maplibre.js
@@ -9763,12 +9817,12 @@ function yui_maplibre_relocalize(map, t) {
9763
9817
  /***************************************************************
9764
9818
  * Constants
9765
9819
  ***************************************************************/
9766
- var GCLASS_NAME$15 = "C_YUI_MAP";
9820
+ var GCLASS_NAME$16 = "C_YUI_MAP";
9767
9821
  var GESTURE_HINT_MS = 2e3;
9768
9822
  /***************************************************************
9769
9823
  * Data
9770
9824
  ***************************************************************/
9771
- var attrs_table$15 = [
9825
+ var attrs_table$16 = [
9772
9826
  (0, _yuneta_gobj_js.SDATA)(_yuneta_gobj_js.data_type_t.DTP_POINTER, "subscriber", 0, null, "Subscriber of output events"),
9773
9827
  (0, _yuneta_gobj_js.SDATA)(_yuneta_gobj_js.data_type_t.DTP_JSON, "devices", "[]", null, "List of devices"),
9774
9828
  (0, _yuneta_gobj_js.SDATA)(_yuneta_gobj_js.data_type_t.DTP_JSON, "map_settings", 0, {
@@ -9789,7 +9843,7 @@ var attrs_table$15 = [
9789
9843
  (0, _yuneta_gobj_js.SDATA)(_yuneta_gobj_js.data_type_t.DTP_INTEGER, "timeout_idle", 0, 5, "Idle timeout in seconds"),
9790
9844
  (0, _yuneta_gobj_js.SDATA_END)()
9791
9845
  ];
9792
- var PRIVATE_DATA$15 = {
9846
+ var PRIVATE_DATA$16 = {
9793
9847
  xmap: null,
9794
9848
  gesture_hint_timer: null,
9795
9849
  geojson: null,
@@ -9799,21 +9853,21 @@ var PRIVATE_DATA$15 = {
9799
9853
  markers: {},
9800
9854
  draggedFeature: null
9801
9855
  };
9802
- var __gclass__$15 = null;
9856
+ var __gclass__$16 = null;
9803
9857
  /******************************
9804
9858
  * Framework Methods
9805
9859
  ******************************/
9806
9860
  /***************************************************************
9807
9861
  * Framework Method: Create
9808
9862
  ***************************************************************/
9809
- function mt_create$15(gobj) {
9863
+ function mt_create$16(gobj) {
9810
9864
  let priv = gobj.priv;
9811
9865
  let subscriber = (0, _yuneta_gobj_js.gobj_read_pointer_attr)(gobj, "subscriber");
9812
9866
  if (!subscriber) subscriber = (0, _yuneta_gobj_js.gobj_parent)(gobj);
9813
9867
  (0, _yuneta_gobj_js.gobj_subscribe_event)(gobj, null, {}, subscriber);
9814
9868
  let map_settings = (0, _yuneta_gobj_js.json_deep_copy)((0, _yuneta_gobj_js.gobj_read_attr)(gobj, "map_settings"));
9815
9869
  let $map = (0, _yuneta_gobj_js.gobj_read_attr)(gobj, "$map");
9816
- if ($map) $map.classList.add(GCLASS_NAME$15);
9870
+ if ($map) $map.classList.add(GCLASS_NAME$16);
9817
9871
  Object.assign(map_settings, {
9818
9872
  container: $map,
9819
9873
  cooperativeGestures: true,
@@ -9892,7 +9946,7 @@ function ac_language_changed$9(gobj, event, kw, src) {
9892
9946
  * in OUR dom -- cannot touch any of it. The shell says when the
9893
9947
  * language changed and this view rewrites those strings.
9894
9948
  ***************************************************************/
9895
- function mt_start$15(gobj) {
9949
+ function mt_start$16(gobj) {
9896
9950
  let shell = yui_shell_of(gobj);
9897
9951
  if (shell) (0, _yuneta_gobj_js.gobj_subscribe_event)(shell, "EV_LANGUAGE_CHANGED", {}, gobj);
9898
9952
  return 0;
@@ -9900,7 +9954,7 @@ function mt_start$15(gobj) {
9900
9954
  /***************************************************************
9901
9955
  * Framework Method: Stop
9902
9956
  ***************************************************************/
9903
- function mt_stop$15(gobj) {
9957
+ function mt_stop$16(gobj) {
9904
9958
  let shell = yui_shell_of(gobj);
9905
9959
  if (shell) (0, _yuneta_gobj_js.gobj_unsubscribe_event)(shell, "EV_LANGUAGE_CHANGED", {}, gobj);
9906
9960
  return 0;
@@ -9908,7 +9962,7 @@ function mt_stop$15(gobj) {
9908
9962
  /***************************************************************
9909
9963
  * Framework Method: Destroy
9910
9964
  ***************************************************************/
9911
- function mt_destroy$15(gobj) {
9965
+ function mt_destroy$16(gobj) {
9912
9966
  let priv = gobj.priv;
9913
9967
  if (priv.gesture_hint_timer) {
9914
9968
  clearTimeout(priv.gesture_hint_timer);
@@ -10372,21 +10426,21 @@ function ac_hide$10(gobj, event, kw, src) {
10372
10426
  /***************************
10373
10427
  * FSM
10374
10428
  ***************************/
10375
- var gmt$15 = {
10376
- mt_create: mt_create$15,
10377
- mt_start: mt_start$15,
10378
- mt_stop: mt_stop$15,
10379
- mt_destroy: mt_destroy$15
10429
+ var gmt$16 = {
10430
+ mt_create: mt_create$16,
10431
+ mt_start: mt_start$16,
10432
+ mt_stop: mt_stop$16,
10433
+ mt_destroy: mt_destroy$16
10380
10434
  };
10381
10435
  /***************************************************************
10382
10436
  * Create the GClass
10383
10437
  ***************************************************************/
10384
- function create_gclass$15(gclass_name) {
10385
- if (__gclass__$15) {
10438
+ function create_gclass$16(gclass_name) {
10439
+ if (__gclass__$16) {
10386
10440
  (0, _yuneta_gobj_js.log_error)(`GClass ALREADY created: ${gclass_name}`);
10387
10441
  return -1;
10388
10442
  }
10389
- __gclass__$15 = (0, _yuneta_gobj_js.gclass_create)(gclass_name, [
10443
+ __gclass__$16 = (0, _yuneta_gobj_js.gclass_create)(gclass_name, [
10390
10444
  ["EV_LANGUAGE_CHANGED", 0],
10391
10445
  ["EV_EDIT_MAP", 0],
10392
10446
  ["EV_CONTROL_MAP", 0],
@@ -10436,15 +10490,15 @@ function create_gclass$15(gclass_name) {
10436
10490
  ac_hide$10,
10437
10491
  null
10438
10492
  ]
10439
- ]]], gmt$15, 0, attrs_table$15, PRIVATE_DATA$15, 0, 0, 0, 0);
10440
- if (!__gclass__$15) return -1;
10493
+ ]]], gmt$16, 0, attrs_table$16, PRIVATE_DATA$16, 0, 0, 0, 0);
10494
+ if (!__gclass__$16) return -1;
10441
10495
  return 0;
10442
10496
  }
10443
10497
  /***************************************************************
10444
10498
  * Register GClass
10445
10499
  ***************************************************************/
10446
10500
  function register_c_yui_map() {
10447
- return create_gclass$15(GCLASS_NAME$15);
10501
+ return create_gclass$16(GCLASS_NAME$16);
10448
10502
  }
10449
10503
  //#endregion
10450
10504
  //#region src/c_yui_uplot.js
@@ -10519,11 +10573,11 @@ function themed_axes(axes) {
10519
10573
  /***************************************************************
10520
10574
  * Constants
10521
10575
  ***************************************************************/
10522
- var GCLASS_NAME$14 = "C_YUI_UPLOT";
10576
+ var GCLASS_NAME$15 = "C_YUI_UPLOT";
10523
10577
  /***************************************************************
10524
10578
  * Data
10525
10579
  ***************************************************************/
10526
- var attrs_table$14 = [
10580
+ var attrs_table$15 = [
10527
10581
  (0, _yuneta_gobj_js.SDATA)(_yuneta_gobj_js.data_type_t.DTP_POINTER, "subscriber", 0, null, "Subscriber of output events"),
10528
10582
  (0, _yuneta_gobj_js.SDATA)(_yuneta_gobj_js.data_type_t.DTP_STRING, "title", 0, "", "Chart title"),
10529
10583
  (0, _yuneta_gobj_js.SDATA)(_yuneta_gobj_js.data_type_t.DTP_INTEGER, "width", 0, 800, "Chart width"),
@@ -10541,16 +10595,16 @@ var attrs_table$14 = [
10541
10595
  (0, _yuneta_gobj_js.SDATA)(_yuneta_gobj_js.data_type_t.DTP_INTEGER, "timeout_idle", 0, 5, "Idle timeout (seconds)"),
10542
10596
  (0, _yuneta_gobj_js.SDATA_END)()
10543
10597
  ];
10544
- var PRIVATE_DATA$14 = { theme_observer: null };
10545
- var __gclass__$14 = null;
10598
+ var PRIVATE_DATA$15 = { theme_observer: null };
10599
+ var __gclass__$15 = null;
10546
10600
  /******************************
10547
10601
  * Framework Methods
10548
10602
  ******************************/
10549
10603
  /***************************************************************
10550
10604
  * Framework Method: Create
10551
10605
  ***************************************************************/
10552
- function mt_create$14(gobj) {
10553
- build_ui$13(gobj);
10606
+ function mt_create$15(gobj) {
10607
+ build_ui$14(gobj);
10554
10608
  gobj.priv.theme_observer = yui_watch_theme(gobj);
10555
10609
  let subscriber = (0, _yuneta_gobj_js.gobj_read_pointer_attr)(gobj, "subscriber");
10556
10610
  if (!subscriber) subscriber = (0, _yuneta_gobj_js.gobj_parent)(gobj);
@@ -10559,15 +10613,15 @@ function mt_create$14(gobj) {
10559
10613
  /***************************************************************
10560
10614
  * Framework Method: Start
10561
10615
  ***************************************************************/
10562
- function mt_start$14(gobj) {}
10616
+ function mt_start$15(gobj) {}
10563
10617
  /***************************************************************
10564
10618
  * Framework Method: Stop
10565
10619
  ***************************************************************/
10566
- function mt_stop$14(gobj) {}
10620
+ function mt_stop$15(gobj) {}
10567
10621
  /***************************************************************
10568
10622
  * Framework Method: Destroy
10569
10623
  ***************************************************************/
10570
- function mt_destroy$14(gobj) {
10624
+ function mt_destroy$15(gobj) {
10571
10625
  if (gobj.priv.theme_observer) {
10572
10626
  gobj.priv.theme_observer.disconnect();
10573
10627
  gobj.priv.theme_observer = null;
@@ -10585,7 +10639,7 @@ function mt_destroy$14(gobj) {
10585
10639
  /************************************************************
10586
10640
  * Build UI
10587
10641
  ************************************************************/
10588
- function build_ui$13(gobj) {
10642
+ function build_ui$14(gobj) {
10589
10643
  let $container = (0, _yuneta_gobj_js.gobj_read_attr)(gobj, "$container");
10590
10644
  if (!$container) {
10591
10645
  $container = (0, _yuneta_gobj_js.createElement2)(["div", {
@@ -10742,7 +10796,7 @@ function ac_del_serie(gobj, event, kw, src) {
10742
10796
  /******************************************************
10743
10797
  *
10744
10798
  ******************************************************/
10745
- function ac_clear(gobj, event, kw, src) {
10799
+ function ac_clear$1(gobj, event, kw, src) {
10746
10800
  let uplot$7 = (0, _yuneta_gobj_js.gobj_read_attr)(gobj, "uplot");
10747
10801
  uplot$7.setData([[]]);
10748
10802
  for (let idx = uplot$7.series.length - 1; idx > 0; idx--) uplot$7.delSeries(idx);
@@ -10751,21 +10805,21 @@ function ac_clear(gobj, event, kw, src) {
10751
10805
  /***************************
10752
10806
  * FSM
10753
10807
  ***************************/
10754
- var gmt$14 = {
10755
- mt_create: mt_create$14,
10756
- mt_start: mt_start$14,
10757
- mt_stop: mt_stop$14,
10758
- mt_destroy: mt_destroy$14
10808
+ var gmt$15 = {
10809
+ mt_create: mt_create$15,
10810
+ mt_start: mt_start$15,
10811
+ mt_stop: mt_stop$15,
10812
+ mt_destroy: mt_destroy$15
10759
10813
  };
10760
10814
  /***************************************************************
10761
10815
  * Create the GClass
10762
10816
  ***************************************************************/
10763
- function create_gclass$14(gclass_name) {
10764
- if (__gclass__$14) {
10817
+ function create_gclass$15(gclass_name) {
10818
+ if (__gclass__$15) {
10765
10819
  (0, _yuneta_gobj_js.log_error)(`GClass ALREADY created: ${gclass_name}`);
10766
10820
  return -1;
10767
10821
  }
10768
- __gclass__$14 = (0, _yuneta_gobj_js.gclass_create)(gclass_name, [
10822
+ __gclass__$15 = (0, _yuneta_gobj_js.gclass_create)(gclass_name, [
10769
10823
  ["EV_LOAD_DATA", 0],
10770
10824
  ["EV_ADD_SERIE", 0],
10771
10825
  ["EV_DEL_SERIE", 0],
@@ -10789,7 +10843,7 @@ function create_gclass$14(gclass_name) {
10789
10843
  ],
10790
10844
  [
10791
10845
  "EV_CLEAR",
10792
- ac_clear,
10846
+ ac_clear$1,
10793
10847
  null
10794
10848
  ],
10795
10849
  [
@@ -10797,15 +10851,15 @@ function create_gclass$14(gclass_name) {
10797
10851
  ac_theme$4,
10798
10852
  null
10799
10853
  ]
10800
- ]]], gmt$14, 0, attrs_table$14, PRIVATE_DATA$14, 0, 0, 0, 0);
10801
- if (!__gclass__$14) return -1;
10854
+ ]]], gmt$15, 0, attrs_table$15, PRIVATE_DATA$15, 0, 0, 0, 0);
10855
+ if (!__gclass__$15) return -1;
10802
10856
  return 0;
10803
10857
  }
10804
10858
  /***************************************************************
10805
10859
  * Register GClass
10806
10860
  ***************************************************************/
10807
10861
  function register_c_yui_uplot() {
10808
- return create_gclass$14(GCLASS_NAME$14);
10862
+ return create_gclass$15(GCLASS_NAME$15);
10809
10863
  }
10810
10864
  //#endregion
10811
10865
  //#region src/yui_toolbar.js
@@ -11895,7 +11949,7 @@ function ensure_drag_canvas_patch() {
11895
11949
  /***************************************************************
11896
11950
  * Constants
11897
11951
  ***************************************************************/
11898
- var GCLASS_NAME$13 = "C_YUI_JSON_GRAPH";
11952
+ var GCLASS_NAME$14 = "C_YUI_JSON_GRAPH";
11899
11953
  var FOLD_SWALLOWED_EVENTS$1 = [
11900
11954
  "pointerdown",
11901
11955
  "pointerup",
@@ -11955,7 +12009,7 @@ function layout_label(key) {
11955
12009
  /***************************************************************
11956
12010
  * Data
11957
12011
  ***************************************************************/
11958
- var attrs_table$13 = [
12012
+ var attrs_table$14 = [
11959
12013
  (0, _yuneta_gobj_js.SDATA)(_yuneta_gobj_js.data_type_t.DTP_POINTER, "subscriber", 0, null, "Subscriber of output events"),
11960
12014
  (0, _yuneta_gobj_js.SDATA)(_yuneta_gobj_js.data_type_t.DTP_STRING, "path", 0, "", "Root path label"),
11961
12015
  (0, _yuneta_gobj_js.SDATA)(_yuneta_gobj_js.data_type_t.DTP_JSON, "json_data", 0, null, "JSON data to visualize"),
@@ -11965,7 +12019,7 @@ var attrs_table$13 = [
11965
12019
  (0, _yuneta_gobj_js.SDATA)(_yuneta_gobj_js.data_type_t.DTP_STRING, "layout", 0, "json-tree", "Layout key (see LAYOUTS)"),
11966
12020
  (0, _yuneta_gobj_js.SDATA_END)()
11967
12021
  ];
11968
- var PRIVATE_DATA$13 = {
12022
+ var PRIVATE_DATA$14 = {
11969
12023
  canvas_id: "",
11970
12024
  graph: null,
11971
12025
  node_counter: 0,
@@ -11990,7 +12044,7 @@ var PRIVATE_DATA$13 = {
11990
12044
  center_posted: false,
11991
12045
  pending_keep: null
11992
12046
  };
11993
- var __gclass__$13 = null;
12047
+ var __gclass__$14 = null;
11994
12048
  var __layout_registered__$1 = false;
11995
12049
  /***************************************************************
11996
12050
  * Type colours, ONE EXPLICIT PALETTE PER THEME and not a
@@ -12095,7 +12149,7 @@ function type_color(type, dark) {
12095
12149
  /***************************************************************
12096
12150
  * Framework Method: Create
12097
12151
  ***************************************************************/
12098
- function mt_create$13(gobj) {
12152
+ function mt_create$14(gobj) {
12099
12153
  let priv = gobj.priv;
12100
12154
  priv.collapsed = /* @__PURE__ */ new Set();
12101
12155
  priv.reserved = /* @__PURE__ */ new Map();
@@ -12107,7 +12161,7 @@ function mt_create$13(gobj) {
12107
12161
  (0, _yuneta_gobj_js.gobj_subscribe_event)(gobj, null, {}, subscriber);
12108
12162
  priv.theme = yui_theme_now();
12109
12163
  priv.theme_observer = yui_watch_theme(gobj);
12110
- build_ui$12(gobj);
12164
+ build_ui$13(gobj);
12111
12165
  ensure_drag_canvas_patch();
12112
12166
  ensure_pinch_zoom_patch();
12113
12167
  if (!__layout_registered__$1) {
@@ -12118,18 +12172,18 @@ function mt_create$13(gobj) {
12118
12172
  /***************************************************************
12119
12173
  * Framework Method: Start
12120
12174
  ***************************************************************/
12121
- function mt_start$13(gobj) {
12175
+ function mt_start$14(gobj) {
12122
12176
  build_graph$4(gobj);
12123
12177
  load_json(gobj);
12124
12178
  }
12125
12179
  /***************************************************************
12126
12180
  * Framework Method: Stop
12127
12181
  ***************************************************************/
12128
- function mt_stop$13(gobj) {}
12182
+ function mt_stop$14(gobj) {}
12129
12183
  /***************************************************************
12130
12184
  * Framework Method: Destroy
12131
12185
  ***************************************************************/
12132
- function mt_destroy$13(gobj) {
12186
+ function mt_destroy$14(gobj) {
12133
12187
  if (gobj.priv.find_timer) {
12134
12188
  clearTimeout(gobj.priv.find_timer);
12135
12189
  gobj.priv.find_timer = null;
@@ -12159,7 +12213,7 @@ function mt_destroy$13(gobj) {
12159
12213
  /************************************************************
12160
12214
  * Build UI
12161
12215
  ************************************************************/
12162
- function build_ui$12(gobj) {
12216
+ function build_ui$13(gobj) {
12163
12217
  let priv = gobj.priv;
12164
12218
  let $toolbar = make_toolbar$5(gobj);
12165
12219
  let $container = (0, _yuneta_gobj_js.createElement2)([
@@ -13381,17 +13435,17 @@ function ac_hide$9(gobj, event, kw, src) {
13381
13435
  /***************************
13382
13436
  * FSM
13383
13437
  ***************************/
13384
- var gmt$13 = {
13385
- mt_create: mt_create$13,
13386
- mt_start: mt_start$13,
13387
- mt_stop: mt_stop$13,
13388
- mt_destroy: mt_destroy$13
13438
+ var gmt$14 = {
13439
+ mt_create: mt_create$14,
13440
+ mt_start: mt_start$14,
13441
+ mt_stop: mt_stop$14,
13442
+ mt_destroy: mt_destroy$14
13389
13443
  };
13390
13444
  /***************************************************************
13391
13445
  * Create the GClass
13392
13446
  ***************************************************************/
13393
- function create_gclass$13(gclass_name) {
13394
- if (__gclass__$13) {
13447
+ function create_gclass$14(gclass_name) {
13448
+ if (__gclass__$14) {
13395
13449
  (0, _yuneta_gobj_js.log_error)(`GClass ALREADY created: ${gclass_name}`);
13396
13450
  return -1;
13397
13451
  }
@@ -13508,16 +13562,16 @@ function create_gclass$13(gclass_name) {
13508
13562
  ["EV_HIDE", 0],
13509
13563
  ["EV_JSON_ITEM_CLICKED", _yuneta_gobj_js.event_flag_t.EVF_OUTPUT_EVENT]
13510
13564
  ];
13511
- __gclass__$13 = (0, _yuneta_gobj_js.gclass_create)(gclass_name, event_types, states, gmt$13, 0, attrs_table$13, PRIVATE_DATA$13, 0, 0, 0, 0);
13512
- if (!__gclass__$13) return -1;
13565
+ __gclass__$14 = (0, _yuneta_gobj_js.gclass_create)(gclass_name, event_types, states, gmt$14, 0, attrs_table$14, PRIVATE_DATA$14, 0, 0, 0, 0);
13566
+ if (!__gclass__$14) return -1;
13513
13567
  return 0;
13514
13568
  }
13515
13569
  /***************************************************************
13516
13570
  * Register GClass
13517
13571
  ***************************************************************/
13518
13572
  function register_c_yui_json_graph() {
13519
- if ((0, _yuneta_gobj_js.gclass_find_by_name)(GCLASS_NAME$13, false)) return 0;
13520
- return create_gclass$13(GCLASS_NAME$13);
13573
+ if ((0, _yuneta_gobj_js.gclass_find_by_name)(GCLASS_NAME$14, false)) return 0;
13574
+ return create_gclass$14(GCLASS_NAME$14);
13521
13575
  }
13522
13576
  //#endregion
13523
13577
  //#region src/c_yui_json.js
@@ -13582,7 +13636,7 @@ function register_c_yui_json_graph() {
13582
13636
  /***************************************************************
13583
13637
  * Constants
13584
13638
  ***************************************************************/
13585
- var GCLASS_NAME$12 = "C_YUI_JSON";
13639
+ var GCLASS_NAME$13 = "C_YUI_JSON";
13586
13640
  var MAX_RENDER_ROWS = 5e3;
13587
13641
  var MAX_TEXT_CHARS = 2e6;
13588
13642
  var MAX_LABEL_CHARS = 40;
@@ -13607,7 +13661,7 @@ var VIEW_MODE_STORAGE_KEY = "yui_json_view_mode";
13607
13661
  /***************************************************************
13608
13662
  * Data
13609
13663
  ***************************************************************/
13610
- var attrs_table$12 = [
13664
+ var attrs_table$13 = [
13611
13665
  (0, _yuneta_gobj_js.SDATA)(_yuneta_gobj_js.data_type_t.DTP_POINTER, "subscriber", 0, null, "Subscriber of output events"),
13612
13666
  (0, _yuneta_gobj_js.SDATA)(_yuneta_gobj_js.data_type_t.DTP_STRING, "title", 0, "", "Optional header title (i18n key)"),
13613
13667
  (0, _yuneta_gobj_js.SDATA)(_yuneta_gobj_js.data_type_t.DTP_JSON, "json_data", 0, null, "Initial JSON to render (usually already collapsed)"),
@@ -13615,7 +13669,7 @@ var attrs_table$12 = [
13615
13669
  (0, _yuneta_gobj_js.SDATA)(_yuneta_gobj_js.data_type_t.DTP_POINTER, "$container", 0, null, "HTMLElement root, mounted by the parent"),
13616
13670
  (0, _yuneta_gobj_js.SDATA_END)()
13617
13671
  ];
13618
- var PRIVATE_DATA$12 = {
13672
+ var PRIVATE_DATA$13 = {
13619
13673
  root: null,
13620
13674
  expanded: null,
13621
13675
  pending: null,
@@ -13632,14 +13686,14 @@ var PRIVATE_DATA$12 = {
13632
13686
  $collapse_btn: null,
13633
13687
  $mode_btns: null
13634
13688
  };
13635
- var __gclass__$12 = null;
13689
+ var __gclass__$13 = null;
13636
13690
  /******************************
13637
13691
  * Framework Methods
13638
13692
  ******************************/
13639
13693
  /***************************************************************
13640
13694
  * Framework Method: Create
13641
13695
  ***************************************************************/
13642
- function mt_create$12(gobj) {
13696
+ function mt_create$13(gobj) {
13643
13697
  let priv = gobj.priv;
13644
13698
  priv.expanded = /* @__PURE__ */ new Set();
13645
13699
  priv.pending = /* @__PURE__ */ new Set();
@@ -13647,7 +13701,7 @@ function mt_create$12(gobj) {
13647
13701
  priv.search = "";
13648
13702
  let json_data = (0, _yuneta_gobj_js.gobj_read_attr)(gobj, "json_data");
13649
13703
  if (json_data !== null && json_data !== void 0) priv.root = (0, _yuneta_gobj_js.json_deep_copy)(json_data);
13650
- build_ui$11(gobj);
13704
+ build_ui$12(gobj);
13651
13705
  resolve_initial_view_mode(gobj);
13652
13706
  apply_view_mode$1(gobj);
13653
13707
  let subscriber = (0, _yuneta_gobj_js.gobj_read_pointer_attr)(gobj, "subscriber");
@@ -13657,19 +13711,19 @@ function mt_create$12(gobj) {
13657
13711
  /***************************************************************
13658
13712
  * Framework Method: Start
13659
13713
  ***************************************************************/
13660
- function mt_start$12(gobj) {
13714
+ function mt_start$13(gobj) {
13661
13715
  render_view$1(gobj);
13662
13716
  }
13663
13717
  /***************************************************************
13664
13718
  * Framework Method: Stop
13665
13719
  ***************************************************************/
13666
- function mt_stop$12(gobj) {
13720
+ function mt_stop$13(gobj) {
13667
13721
  teardown_graph_child$1(gobj);
13668
13722
  }
13669
13723
  /***************************************************************
13670
13724
  * Framework Method: Destroy
13671
13725
  ***************************************************************/
13672
- function mt_destroy$12(gobj) {
13726
+ function mt_destroy$13(gobj) {
13673
13727
  destroy_ui$7(gobj);
13674
13728
  }
13675
13729
  /***************************
@@ -13678,7 +13732,7 @@ function mt_destroy$12(gobj) {
13678
13732
  /************************************************************
13679
13733
  * Build UI
13680
13734
  ************************************************************/
13681
- function build_ui$11(gobj) {
13735
+ function build_ui$12(gobj) {
13682
13736
  let priv = gobj.priv;
13683
13737
  let $toolbar = make_toolbar$4(gobj);
13684
13738
  let $container = (0, _yuneta_gobj_js.createElement2)([
@@ -14073,7 +14127,7 @@ function render_text(gobj) {
14073
14127
  return;
14074
14128
  }
14075
14129
  let dump = json_text_dump(priv.root, MAX_TEXT_CHARS);
14076
- if (dump.error) (0, _yuneta_gobj_js.log_error)(`${GCLASS_NAME$12}: cannot dump the document as text: ${dump.error}`);
14130
+ if (dump.error) (0, _yuneta_gobj_js.log_error)(`${GCLASS_NAME$13}: cannot dump the document as text: ${dump.error}`);
14077
14131
  let $pre = (0, _yuneta_gobj_js.createElement2)([
14078
14132
  "pre",
14079
14133
  { class: "JSON_TEXT_BODY" },
@@ -14456,7 +14510,7 @@ function ac_subtree_error(gobj, event, kw, src) {
14456
14510
  let path = kw.path || "";
14457
14511
  priv.pending.delete(path);
14458
14512
  priv.errors.set(path, kw.error || "error");
14459
- (0, _yuneta_gobj_js.log_error)(`${GCLASS_NAME$12}: subtree load failed at '${path}': ${kw.error || ""}`);
14513
+ (0, _yuneta_gobj_js.log_error)(`${GCLASS_NAME$13}: subtree load failed at '${path}': ${kw.error || ""}`);
14460
14514
  render_view$1(gobj);
14461
14515
  return 0;
14462
14516
  }
@@ -14531,14 +14585,14 @@ function ac_copy_all$1(gobj, event, kw, src) {
14531
14585
  if (priv.root === null || priv.root === void 0) return 0;
14532
14586
  let dump = json_text_dump(priv.root, 0);
14533
14587
  if (dump.error) {
14534
- (0, _yuneta_gobj_js.log_error)(`${GCLASS_NAME$12}: cannot copy the document: ${dump.error}`);
14588
+ (0, _yuneta_gobj_js.log_error)(`${GCLASS_NAME$13}: cannot copy the document: ${dump.error}`);
14535
14589
  return -1;
14536
14590
  }
14537
14591
  let text = dump.text;
14538
14592
  if (navigator.clipboard && navigator.clipboard.writeText) navigator.clipboard.writeText(text).catch(function(e) {
14539
- (0, _yuneta_gobj_js.log_error)(`${GCLASS_NAME$12}: clipboard write failed: ${e}`);
14593
+ (0, _yuneta_gobj_js.log_error)(`${GCLASS_NAME$13}: clipboard write failed: ${e}`);
14540
14594
  });
14541
- else (0, _yuneta_gobj_js.log_error)(`${GCLASS_NAME$12}: clipboard API unavailable`);
14595
+ else (0, _yuneta_gobj_js.log_error)(`${GCLASS_NAME$13}: clipboard API unavailable`);
14542
14596
  return 0;
14543
14597
  }
14544
14598
  /************************************************************
@@ -14554,7 +14608,7 @@ function ac_set_view_mode$1(gobj, event, kw, src) {
14554
14608
  let mode = kw.mode;
14555
14609
  if (mode === void 0 || mode === null || mode === "") mode = VIEWS$1[(VIEWS$1.findIndex((v) => v.mode === current_view_mode$1(gobj)) + 1) % VIEWS$1.length].mode;
14556
14610
  else if (!VIEWS$1.some((v) => v.mode === mode)) {
14557
- (0, _yuneta_gobj_js.log_error)(`${GCLASS_NAME$12}: unknown view_mode '${mode}'`);
14611
+ (0, _yuneta_gobj_js.log_error)(`${GCLASS_NAME$13}: unknown view_mode '${mode}'`);
14558
14612
  return -1;
14559
14613
  }
14560
14614
  if (mode === current_view_mode$1(gobj)) return 0;
@@ -14620,17 +14674,17 @@ function ac_refresh$5(gobj, event, kw, src) {
14620
14674
  /***************************
14621
14675
  * FSM
14622
14676
  ***************************/
14623
- var gmt$12 = {
14624
- mt_create: mt_create$12,
14625
- mt_start: mt_start$12,
14626
- mt_stop: mt_stop$12,
14627
- mt_destroy: mt_destroy$12
14677
+ var gmt$13 = {
14678
+ mt_create: mt_create$13,
14679
+ mt_start: mt_start$13,
14680
+ mt_stop: mt_stop$13,
14681
+ mt_destroy: mt_destroy$13
14628
14682
  };
14629
14683
  /***************************************************************
14630
14684
  * Create the GClass
14631
14685
  ***************************************************************/
14632
- function create_gclass$12(gclass_name) {
14633
- if (__gclass__$12) {
14686
+ function create_gclass$13(gclass_name) {
14687
+ if (__gclass__$13) {
14634
14688
  (0, _yuneta_gobj_js.log_error)(`GClass ALREADY created: ${gclass_name}`);
14635
14689
  return -1;
14636
14690
  }
@@ -14760,16 +14814,895 @@ function create_gclass$12(gclass_name) {
14760
14814
  ["EV_HIDE", 0],
14761
14815
  ["EV_EXPAND_PATH", _yuneta_gobj_js.event_flag_t.EVF_OUTPUT_EVENT | _yuneta_gobj_js.event_flag_t.EVF_NO_WARN_SUBS]
14762
14816
  ];
14763
- __gclass__$12 = (0, _yuneta_gobj_js.gclass_create)(gclass_name, event_types, states, gmt$12, 0, attrs_table$12, PRIVATE_DATA$12, 0, 0, 0, 0);
14764
- if (!__gclass__$12) return -1;
14817
+ __gclass__$13 = (0, _yuneta_gobj_js.gclass_create)(gclass_name, event_types, states, gmt$13, 0, attrs_table$13, PRIVATE_DATA$13, 0, 0, 0, 0);
14818
+ if (!__gclass__$13) return -1;
14765
14819
  return 0;
14766
14820
  }
14767
14821
  /***************************************************************
14768
14822
  * Register GClass
14769
14823
  ***************************************************************/
14770
14824
  function register_c_yui_json() {
14771
- if ((0, _yuneta_gobj_js.gclass_find_by_name)(GCLASS_NAME$12, false)) return 0;
14825
+ if ((0, _yuneta_gobj_js.gclass_find_by_name)(GCLASS_NAME$13, false)) return 0;
14772
14826
  if (!(0, _yuneta_gobj_js.gclass_find_by_name)("C_YUI_JSON_GRAPH", false)) register_c_yui_json_graph();
14827
+ return create_gclass$13(GCLASS_NAME$13);
14828
+ }
14829
+ //#endregion
14830
+ //#region src/c_yui_json_pad.js
14831
+ /***********************************************************************
14832
+ * c_yui_json_pad.js
14833
+ *
14834
+ * C_YUI_JSON_PAD -- a pad to paste JSON from OUTSIDE and read it
14835
+ * with the library's own viewer, and a second one to compare it
14836
+ * with.
14837
+ *
14838
+ * The viewer (C_YUI_JSON: the lazy tree, the raw text and the
14839
+ * graph) only ever showed what an app fetched. A JSON that came
14840
+ * from anywhere else -- a log line, a config file, an answer copied
14841
+ * from a terminal -- had to be read in whatever the operator had
14842
+ * at hand. This is the blank page for it: paste, and read it the
14843
+ * way every other document of the app is read.
14844
+ *
14845
+ * Two documents are the other half of the job: the config that
14846
+ * works and the one that does not, a record before and after. The
14847
+ * second pane is there on demand ("second json"), and "compare"
14848
+ * puts their differences in place of the two viewers -- one row
14849
+ * per id of the flat form (json2flat), the form a person reads
14850
+ * when two configurations disagree.
14851
+ *
14852
+ * DOM (UPPER_SNAKE logical classes):
14853
+ *
14854
+ * JSON_PAD the root
14855
+ * JSON_PAD_TOOLBAR the notice and the two toggles
14856
+ * JSON_PAD_NOTICE "json not kept": the storage refused
14857
+ * JSON_PAD_SECOND show / hide the second pane
14858
+ * JSON_PAD_COMPARE show / hide the differences
14859
+ * JSON_PAD_PANES the panes, side by side (stacked when
14860
+ * the pad is narrow)
14861
+ * JSON_PAD_PANE JSON_PAD_PANE_A / JSON_PAD_PANE_B
14862
+ * JSON_PAD_BAR the text area and its two buttons
14863
+ * JSON_PAD_INPUT where the text goes
14864
+ * JSON_PAD_VIEW read what is in the text area
14865
+ * JSON_PAD_CLEAR empty the pane
14866
+ * JSON_PAD_ERROR "invalid JSON" and the parser's reason
14867
+ * JSON_PAD_BODY the pane's C_YUI_JSON child
14868
+ * JSON_PAD_DIFF the differences: JSON_PAD_DIFF_SUMMARY
14869
+ * and JSON_PAD_DIFF_TABLE, one
14870
+ * JSON_PAD_DIFF_ROW per id
14871
+ *
14872
+ * Every way in is an event, and a pane event names its pane
14873
+ * (`pane`: "a" or "b"):
14874
+ *
14875
+ * EV_PASTE {pane, text} a paste ANYWHERE in a pane replaces
14876
+ * its document and shows it at once --
14877
+ * a pane holds one document, not a
14878
+ * text to edit
14879
+ * EV_VIEW {pane} the text area as it is (typed, or
14880
+ * edited after a paste); also Ctrl+Enter
14881
+ * EV_CLEAR {pane} back to a blank pane
14882
+ * EV_TEXT_CHANGED {pane} the text area was edited: keep it
14883
+ * EV_TOGGLE_SECOND show / hide the second pane
14884
+ * EV_TOGGLE_DIFF show / hide the differences
14885
+ *
14886
+ * FSM: the states are the LAYOUT -- ST_SINGLE (one pane), ST_DUAL
14887
+ * (two), ST_DIFF (two, with their differences in place of the
14888
+ * viewers). Comparing needs two panes, so EV_TOGGLE_DIFF is not
14889
+ * defined in ST_SINGLE and its button is not on screen there.
14890
+ * EV_EXPAND_PATH, which a viewer publishes when a `__collapsed__`
14891
+ * sentinel is opened, is answered with EV_SUBTREE_ERROR to the
14892
+ * viewer that asked: a pasted document has no backend to fetch the
14893
+ * rest from -- the source truncated it, and the pad says so. It is
14894
+ * not defined in ST_DIFF, where no viewer is on screen.
14895
+ *
14896
+ * What is kept: both texts and the layout, in localStorage under
14897
+ * `storage_key` (empty: nothing is kept), written when a text is
14898
+ * pasted, viewed, cleared or edited and when the layout changes,
14899
+ * so the next pad opens as this one was left. localStorage is per
14900
+ * browser and per origin, and has a quota: a text too big for it
14901
+ * is not kept, the toolbar says so, and the log says why.
14902
+ *
14903
+ * Hosted by setup_json_pad() (yui_json_pad.js) in a C_YUI_WINDOW;
14904
+ * any host can mount `$container` itself.
14905
+ *
14906
+ * Copyright (c) 2026, ArtGins.
14907
+ * All Rights Reserved.
14908
+ ***********************************************************************/
14909
+ /***************************************************************
14910
+ * Constants
14911
+ ***************************************************************/
14912
+ var GCLASS_NAME$12 = "C_YUI_JSON_PAD";
14913
+ var PANES = ["a", "b"];
14914
+ var MODE_OF_STATE = {
14915
+ ST_SINGLE: "single",
14916
+ ST_DUAL: "dual",
14917
+ ST_DIFF: "diff"
14918
+ };
14919
+ var KIND_TAG = {
14920
+ added: () => [
14921
+ "span",
14922
+ {
14923
+ class: "tag is-success is-light",
14924
+ i18n: "added"
14925
+ },
14926
+ "added"
14927
+ ],
14928
+ removed: () => [
14929
+ "span",
14930
+ {
14931
+ class: "tag is-danger is-light",
14932
+ i18n: "removed"
14933
+ },
14934
+ "removed"
14935
+ ],
14936
+ changed: () => [
14937
+ "span",
14938
+ {
14939
+ class: "tag is-warning is-light",
14940
+ i18n: "changed"
14941
+ },
14942
+ "changed"
14943
+ ]
14944
+ };
14945
+ /***************************************************************
14946
+ * Data
14947
+ ***************************************************************/
14948
+ var attrs_table$12 = [
14949
+ (0, _yuneta_gobj_js.SDATA)(_yuneta_gobj_js.data_type_t.DTP_POINTER, "subscriber", 0, null, "Subscriber of output events"),
14950
+ (0, _yuneta_gobj_js.SDATA)(_yuneta_gobj_js.data_type_t.DTP_STRING, "storage_key", 0, "yui_json_pad", "localStorage key the two texts and the layout are kept under. Empty: nothing is kept"),
14951
+ (0, _yuneta_gobj_js.SDATA)(_yuneta_gobj_js.data_type_t.DTP_POINTER, "$container", 0, null, "HTMLElement root, mounted by the host"),
14952
+ (0, _yuneta_gobj_js.SDATA_END)()
14953
+ ];
14954
+ var PRIVATE_DATA$12 = {
14955
+ panes: null,
14956
+ $compare: null,
14957
+ $notice: null,
14958
+ $diff: null
14959
+ };
14960
+ var __gclass__$12 = null;
14961
+ /******************************
14962
+ * Framework Methods
14963
+ ******************************/
14964
+ /***************************************************************
14965
+ * Framework Method: Create
14966
+ ***************************************************************/
14967
+ function mt_create$12(gobj) {
14968
+ let priv = gobj.priv;
14969
+ let subscriber = (0, _yuneta_gobj_js.gobj_read_pointer_attr)(gobj, "subscriber");
14970
+ if (!subscriber) subscriber = (0, _yuneta_gobj_js.gobj_parent)(gobj);
14971
+ (0, _yuneta_gobj_js.gobj_subscribe_event)(gobj, null, {}, subscriber);
14972
+ build_ui$11(gobj);
14973
+ for (const id of PANES) {
14974
+ let pane = priv.panes[id];
14975
+ pane.gobj_json = (0, _yuneta_gobj_js.gobj_create_pure_child)(`json_pad_view_${id}`, "C_YUI_JSON", {}, gobj);
14976
+ let $view = pane.gobj_json ? (0, _yuneta_gobj_js.gobj_read_attr)(pane.gobj_json, "$container") : null;
14977
+ if (!$view) {
14978
+ (0, _yuneta_gobj_js.log_error)(`${(0, _yuneta_gobj_js.gobj_short_name)(gobj)}: C_YUI_JSON without $container`);
14979
+ continue;
14980
+ }
14981
+ pane.$body.appendChild($view);
14982
+ }
14983
+ }
14984
+ /***************************************************************
14985
+ * Framework Method: Start
14986
+ ***************************************************************/
14987
+ function mt_start$12(gobj) {
14988
+ let priv = gobj.priv;
14989
+ for (const id of PANES) if (priv.panes[id].gobj_json) (0, _yuneta_gobj_js.gobj_start)(priv.panes[id].gobj_json);
14990
+ restore_state(gobj);
14991
+ priv.panes.a.$input.focus();
14992
+ }
14993
+ /***************************************************************
14994
+ * Framework Method: Stop
14995
+ ***************************************************************/
14996
+ function mt_stop$12(gobj) {
14997
+ let priv = gobj.priv;
14998
+ save_state(gobj);
14999
+ for (const id of PANES) {
15000
+ let gobj_json = priv.panes[id].gobj_json;
15001
+ if (gobj_json && (0, _yuneta_gobj_js.gobj_is_running)(gobj_json)) (0, _yuneta_gobj_js.gobj_stop)(gobj_json);
15002
+ }
15003
+ }
15004
+ /***************************************************************
15005
+ * Framework Method: Destroy
15006
+ ***************************************************************/
15007
+ function mt_destroy$12(gobj) {}
15008
+ /***************************
15009
+ * Local Methods
15010
+ ***************************/
15011
+ /***************************************************************
15012
+ * A button of the pad: an icon, its label, and an event.
15013
+ ***************************************************************/
15014
+ function pad_button(gobj, cls, icon, key, event_name, kw) {
15015
+ return [
15016
+ "button",
15017
+ {
15018
+ class: `${cls} button`,
15019
+ type: "button",
15020
+ title: (0, i18next.t)(key),
15021
+ "data-i18n-title": key,
15022
+ "aria-label": (0, i18next.t)(key),
15023
+ "data-i18n-aria-label": key
15024
+ },
15025
+ [yui_toolbar_icon(icon), [
15026
+ "span",
15027
+ {
15028
+ style: "padding-left:5px;",
15029
+ i18n: key
15030
+ },
15031
+ key
15032
+ ]],
15033
+ { click: (evt) => {
15034
+ evt.stopPropagation();
15035
+ (0, _yuneta_gobj_js.gobj_send_event)(gobj, event_name, { ...kw }, gobj);
15036
+ } }
15037
+ ];
15038
+ }
15039
+ /***************************************************************
15040
+ * The toolbar, the two panes, and the differences.
15041
+ ***************************************************************/
15042
+ function build_ui$11(gobj) {
15043
+ let priv = gobj.priv;
15044
+ priv.$notice = (0, _yuneta_gobj_js.createElement2)([
15045
+ "div",
15046
+ {
15047
+ class: "JSON_PAD_NOTICE is-hidden has-text-danger is-size-7",
15048
+ role: "status"
15049
+ },
15050
+ [[
15051
+ "span",
15052
+ {
15053
+ style: "font-weight:600;",
15054
+ i18n: "json not kept"
15055
+ },
15056
+ "json not kept"
15057
+ ]]
15058
+ ]);
15059
+ priv.$compare = (0, _yuneta_gobj_js.createElement2)(pad_button(gobj, "JSON_PAD_COMPARE is-hidden", "yi-right-left", "compare", "EV_TOGGLE_DIFF", {}));
15060
+ priv.panes = {
15061
+ a: build_pane(gobj, "a", "first json"),
15062
+ b: build_pane(gobj, "b", "second json")
15063
+ };
15064
+ priv.panes.b.$pane.classList.add("is-hidden");
15065
+ priv.$diff = (0, _yuneta_gobj_js.createElement2)([
15066
+ "div",
15067
+ { class: "JSON_PAD_DIFF is-hidden" },
15068
+ []
15069
+ ]);
15070
+ let $container = (0, _yuneta_gobj_js.createElement2)([
15071
+ "div",
15072
+ { class: "C_YUI_JSON_PAD JSON_PAD" },
15073
+ [
15074
+ [
15075
+ "div",
15076
+ { class: "JSON_PAD_TOOLBAR" },
15077
+ [
15078
+ priv.$notice,
15079
+ pad_button(gobj, "JSON_PAD_SECOND", "yi-columns", "second json", "EV_TOGGLE_SECOND", {}),
15080
+ priv.$compare
15081
+ ]
15082
+ ],
15083
+ [
15084
+ "div",
15085
+ { class: "JSON_PAD_PANES" },
15086
+ [priv.panes.a.$pane, priv.panes.b.$pane]
15087
+ ],
15088
+ priv.$diff
15089
+ ]
15090
+ ]);
15091
+ (0, _yuneta_gobj_js.gobj_write_attr)(gobj, "$container", $container);
15092
+ press_toggle(gobj, ".JSON_PAD_SECOND", false);
15093
+ press_toggle(gobj, ".JSON_PAD_COMPARE", false);
15094
+ }
15095
+ /***************************************************************
15096
+ * One pane: the text area and its buttons, the error line, and
15097
+ * the body its viewer is mounted in. `name_key` names the pane
15098
+ * for a reader (its text area's title and aria-label).
15099
+ ***************************************************************/
15100
+ function build_pane(gobj, id, name_key) {
15101
+ let pane = {
15102
+ $pane: null,
15103
+ $input: null,
15104
+ $error: null,
15105
+ $reason: null,
15106
+ $body: null,
15107
+ gobj_json: null,
15108
+ doc: null,
15109
+ has_doc: false
15110
+ };
15111
+ pane.$input = (0, _yuneta_gobj_js.createElement2)([
15112
+ "textarea",
15113
+ {
15114
+ class: "JSON_PAD_INPUT textarea",
15115
+ rows: 3,
15116
+ spellcheck: "false",
15117
+ placeholder: (0, i18next.t)("paste json here"),
15118
+ "data-i18n-placeholder": "paste json here",
15119
+ title: (0, i18next.t)(name_key),
15120
+ "data-i18n-title": name_key,
15121
+ "aria-label": (0, i18next.t)(name_key),
15122
+ "data-i18n-aria-label": name_key,
15123
+ style: "font-family:monospace; resize:vertical; min-height:4.5em;"
15124
+ },
15125
+ "",
15126
+ {
15127
+ keydown: (evt) => {
15128
+ if ((evt.ctrlKey || evt.metaKey) && evt.key === "Enter") {
15129
+ evt.preventDefault();
15130
+ (0, _yuneta_gobj_js.gobj_send_event)(gobj, "EV_VIEW", { pane: id }, gobj);
15131
+ }
15132
+ },
15133
+ change: () => {
15134
+ (0, _yuneta_gobj_js.gobj_send_event)(gobj, "EV_TEXT_CHANGED", { pane: id }, gobj);
15135
+ }
15136
+ }
15137
+ ]);
15138
+ pane.$reason = (0, _yuneta_gobj_js.createElement2)([
15139
+ "span",
15140
+ {
15141
+ class: "JSON_PAD_ERROR_REASON",
15142
+ style: "margin-left:.5em; font-family:monospace;"
15143
+ },
15144
+ ""
15145
+ ]);
15146
+ pane.$error = (0, _yuneta_gobj_js.createElement2)([
15147
+ "div",
15148
+ {
15149
+ class: "JSON_PAD_ERROR is-hidden has-text-danger is-size-7",
15150
+ role: "alert"
15151
+ },
15152
+ [[
15153
+ "span",
15154
+ {
15155
+ class: "JSON_PAD_ERROR_LABEL",
15156
+ style: "font-weight:600;",
15157
+ i18n: "invalid json"
15158
+ },
15159
+ "invalid json"
15160
+ ], pane.$reason]
15161
+ ]);
15162
+ pane.$body = (0, _yuneta_gobj_js.createElement2)([
15163
+ "div",
15164
+ {
15165
+ class: "JSON_PAD_BODY",
15166
+ style: "flex:1 1 auto; min-height:0; display:flex; flex-direction:column;"
15167
+ },
15168
+ []
15169
+ ]);
15170
+ pane.$pane = (0, _yuneta_gobj_js.createElement2)([
15171
+ "div",
15172
+ { class: `JSON_PAD_PANE JSON_PAD_PANE_${id.toUpperCase()}` },
15173
+ [
15174
+ [
15175
+ "div",
15176
+ {
15177
+ class: "JSON_PAD_BAR",
15178
+ style: "display:flex; gap:.5rem; align-items:flex-start;"
15179
+ },
15180
+ [[
15181
+ "div",
15182
+ { style: "flex:1 1 auto; min-width:0;" },
15183
+ [pane.$input]
15184
+ ], [
15185
+ "div",
15186
+ { style: "flex:0 0 auto; display:flex; flex-direction:column; gap:.5rem;" },
15187
+ [pad_button(gobj, "JSON_PAD_VIEW", "yi-eye", "view", "EV_VIEW", { pane: id }), pad_button(gobj, "JSON_PAD_CLEAR", "yi-broom", "clear", "EV_CLEAR", { pane: id })]
15188
+ ]]
15189
+ ],
15190
+ pane.$error,
15191
+ pane.$body
15192
+ ],
15193
+ { paste: (evt) => {
15194
+ let text = evt.clipboardData ? evt.clipboardData.getData("text") : "";
15195
+ if (!text) return;
15196
+ evt.preventDefault();
15197
+ (0, _yuneta_gobj_js.gobj_send_event)(gobj, "EV_PASTE", {
15198
+ pane: id,
15199
+ text
15200
+ }, gobj);
15201
+ } }
15202
+ ]);
15203
+ return pane;
15204
+ }
15205
+ /***************************************************************
15206
+ * The pane a pane event names.
15207
+ ***************************************************************/
15208
+ function pane_of(gobj, kw) {
15209
+ let priv = gobj.priv;
15210
+ let id = kw ? kw.pane : void 0;
15211
+ if (!PANES.includes(id)) {
15212
+ (0, _yuneta_gobj_js.log_error)(`${(0, _yuneta_gobj_js.gobj_short_name)(gobj)}: no pane '${id}'`);
15213
+ return null;
15214
+ }
15215
+ return priv.panes[id];
15216
+ }
15217
+ /***************************************************************
15218
+ * A toggle of the toolbar, pressed or not -- for the eye and
15219
+ * for a reader.
15220
+ ***************************************************************/
15221
+ function press_toggle(gobj, selector, on) {
15222
+ let $container = (0, _yuneta_gobj_js.gobj_read_attr)(gobj, "$container");
15223
+ set_pressed_state($container, selector, on);
15224
+ $container.querySelectorAll(selector).forEach(($el) => {
15225
+ $el.setAttribute("aria-pressed", on ? "true" : "false");
15226
+ });
15227
+ }
15228
+ /***************************************************************
15229
+ * Read `text` as JSON and show it in `pane`, or say why it is
15230
+ * not. A text that is not JSON leaves the last document up.
15231
+ ***************************************************************/
15232
+ function show_text(gobj, pane, text) {
15233
+ let src = String(text || "").trim();
15234
+ if (!src) {
15235
+ clear_pane(gobj, pane, false);
15236
+ return 0;
15237
+ }
15238
+ let doc;
15239
+ try {
15240
+ doc = JSON.parse(src);
15241
+ } catch (e) {
15242
+ (0, _yuneta_gobj_js.log_warning)(`${(0, _yuneta_gobj_js.gobj_short_name)(gobj)}: the pasted text is not JSON: ${e.message}`);
15243
+ pane.$reason.textContent = e.message;
15244
+ pane.$error.classList.remove("is-hidden");
15245
+ return -1;
15246
+ }
15247
+ pane.$error.classList.add("is-hidden");
15248
+ pane.$reason.textContent = "";
15249
+ pane.doc = doc;
15250
+ pane.has_doc = true;
15251
+ (0, _yuneta_gobj_js.gobj_send_event)(pane.gobj_json, "EV_SET_JSON", { json: doc }, gobj);
15252
+ return 0;
15253
+ }
15254
+ /***************************************************************
15255
+ * A blank pane again; `with_text` empties the text area too.
15256
+ ***************************************************************/
15257
+ function clear_pane(gobj, pane, with_text) {
15258
+ if (with_text) pane.$input.value = "";
15259
+ pane.$error.classList.add("is-hidden");
15260
+ pane.$reason.textContent = "";
15261
+ pane.doc = null;
15262
+ pane.has_doc = false;
15263
+ (0, _yuneta_gobj_js.gobj_send_event)(pane.gobj_json, "EV_SET_JSON", { json: null }, gobj);
15264
+ }
15265
+ /***************************************************************
15266
+ * A pane changed its document: the differences follow it, and
15267
+ * the texts are kept.
15268
+ ***************************************************************/
15269
+ function document_changed(gobj) {
15270
+ if ((0, _yuneta_gobj_js.gobj_current_state)(gobj) === "ST_DIFF") render_diff(gobj);
15271
+ save_state(gobj);
15272
+ }
15273
+ /***************************************************************
15274
+ * Enter one of the three layouts. The state IS the layout;
15275
+ * this is what the screen shows for it.
15276
+ ***************************************************************/
15277
+ function enter_layout(gobj, state) {
15278
+ let priv = gobj.priv;
15279
+ let $container = (0, _yuneta_gobj_js.gobj_read_attr)(gobj, "$container");
15280
+ let second = state !== "ST_SINGLE";
15281
+ let diff = state === "ST_DIFF";
15282
+ (0, _yuneta_gobj_js.gobj_change_state)(gobj, state);
15283
+ priv.panes.b.$pane.classList.toggle("is-hidden", !second);
15284
+ priv.$compare.classList.toggle("is-hidden", !second);
15285
+ press_toggle(gobj, ".JSON_PAD_SECOND", second);
15286
+ press_toggle(gobj, ".JSON_PAD_COMPARE", diff);
15287
+ $container.classList.toggle("is-comparing", diff);
15288
+ for (const id of PANES) priv.panes[id].$body.classList.toggle("is-hidden", diff);
15289
+ priv.$diff.classList.toggle("is-hidden", !diff);
15290
+ if (diff) render_diff(gobj);
15291
+ else for (const id of PANES) {
15292
+ if (id === "b" && !second) continue;
15293
+ (0, _yuneta_gobj_js.gobj_send_event)(priv.panes[id].gobj_json, "EV_REFRESH", {}, gobj);
15294
+ }
15295
+ save_state(gobj);
15296
+ }
15297
+ /***************************************************************
15298
+ * The differences of the two documents, in place of the two
15299
+ * viewers. Only a pane that shows a document takes part: a
15300
+ * text that is not JSON leaves its last document, as on screen.
15301
+ ***************************************************************/
15302
+ function render_diff(gobj) {
15303
+ let priv = gobj.priv;
15304
+ let a = priv.panes.a;
15305
+ let b = priv.panes.b;
15306
+ priv.$diff.replaceChildren();
15307
+ if (!a.has_doc || !b.has_doc) {
15308
+ priv.$diff.appendChild((0, _yuneta_gobj_js.createElement2)([
15309
+ "p",
15310
+ {
15311
+ class: "JSON_PAD_DIFF_MESSAGE",
15312
+ i18n: "compare needs two json"
15313
+ },
15314
+ "compare needs two json"
15315
+ ]));
15316
+ return 0;
15317
+ }
15318
+ let rows;
15319
+ try {
15320
+ rows = json_diff_rows(a.doc, b.doc);
15321
+ } catch (e) {
15322
+ (0, _yuneta_gobj_js.log_warning)(`${(0, _yuneta_gobj_js.gobj_short_name)(gobj)}: cannot compare: ${e.message}`);
15323
+ priv.$diff.appendChild((0, _yuneta_gobj_js.createElement2)([
15324
+ "p",
15325
+ { class: "JSON_PAD_DIFF_MESSAGE has-text-danger" },
15326
+ [[
15327
+ "span",
15328
+ {
15329
+ style: "font-weight:600;",
15330
+ i18n: "cannot compare"
15331
+ },
15332
+ "cannot compare"
15333
+ ], [
15334
+ "span",
15335
+ {
15336
+ class: "JSON_PAD_DIFF_REASON",
15337
+ style: "margin-left:.5em; font-family:monospace;"
15338
+ },
15339
+ e.message
15340
+ ]]
15341
+ ]));
15342
+ return -1;
15343
+ }
15344
+ if (rows.length === 0) {
15345
+ priv.$diff.appendChild((0, _yuneta_gobj_js.createElement2)([
15346
+ "p",
15347
+ {
15348
+ class: "JSON_PAD_DIFF_MESSAGE has-text-success",
15349
+ i18n: "no differences"
15350
+ },
15351
+ "no differences"
15352
+ ]));
15353
+ return 0;
15354
+ }
15355
+ let count = {
15356
+ added: 0,
15357
+ removed: 0,
15358
+ changed: 0
15359
+ };
15360
+ for (const row of rows) count[row.kind]++;
15361
+ let value_cell = (cls, row, side) => {
15362
+ let has = Object.prototype.hasOwnProperty.call(row, side);
15363
+ return [
15364
+ "td",
15365
+ { class: cls },
15366
+ has ? JSON.stringify(row[side]) : ""
15367
+ ];
15368
+ };
15369
+ priv.$diff.appendChild((0, _yuneta_gobj_js.createElement2)([
15370
+ "div",
15371
+ { class: "JSON_PAD_DIFF_SUMMARY" },
15372
+ [
15373
+ "removed",
15374
+ "added",
15375
+ "changed"
15376
+ ].map((kind) => {
15377
+ return [
15378
+ "span",
15379
+ { class: "JSON_PAD_DIFF_COUNT" },
15380
+ [KIND_TAG[kind](), [
15381
+ "strong",
15382
+ {},
15383
+ String(count[kind])
15384
+ ]]
15385
+ ];
15386
+ })
15387
+ ]));
15388
+ priv.$diff.appendChild((0, _yuneta_gobj_js.createElement2)([
15389
+ "table",
15390
+ { class: "JSON_PAD_DIFF_TABLE table is-fullwidth is-narrow is-hoverable" },
15391
+ [[
15392
+ "thead",
15393
+ {},
15394
+ [[
15395
+ "tr",
15396
+ {},
15397
+ [
15398
+ [
15399
+ "th",
15400
+ {},
15401
+ ""
15402
+ ],
15403
+ [
15404
+ "th",
15405
+ { i18n: "path" },
15406
+ "path"
15407
+ ],
15408
+ [
15409
+ "th",
15410
+ { i18n: "first json" },
15411
+ "first json"
15412
+ ],
15413
+ [
15414
+ "th",
15415
+ { i18n: "second json" },
15416
+ "second json"
15417
+ ]
15418
+ ]
15419
+ ]]
15420
+ ], [
15421
+ "tbody",
15422
+ {},
15423
+ rows.map((row) => {
15424
+ return [
15425
+ "tr",
15426
+ { class: `JSON_PAD_DIFF_ROW JSON_PAD_DIFF_${row.kind.toUpperCase()}` },
15427
+ [
15428
+ [
15429
+ "td",
15430
+ {},
15431
+ [KIND_TAG[row.kind]()]
15432
+ ],
15433
+ [
15434
+ "td",
15435
+ { class: "JSON_PAD_DIFF_PATH" },
15436
+ row.id
15437
+ ],
15438
+ value_cell("JSON_PAD_DIFF_FROM", row, "from"),
15439
+ value_cell("JSON_PAD_DIFF_TO", row, "to")
15440
+ ]
15441
+ ];
15442
+ })
15443
+ ]]
15444
+ ]));
15445
+ return 0;
15446
+ }
15447
+ /***************************************************************
15448
+ * Keep both texts and the layout.
15449
+ ***************************************************************/
15450
+ function save_state(gobj) {
15451
+ let priv = gobj.priv;
15452
+ let key = (0, _yuneta_gobj_js.gobj_read_str_attr)(gobj, "storage_key");
15453
+ if (!key) return 0;
15454
+ let ret = (0, _yuneta_gobj_js.kw_set_local_storage_value)(key, {
15455
+ a: priv.panes.a.$input.value,
15456
+ b: priv.panes.b.$input.value,
15457
+ mode: MODE_OF_STATE[(0, _yuneta_gobj_js.gobj_current_state)(gobj)] || "single"
15458
+ });
15459
+ priv.$notice.classList.toggle("is-hidden", ret === 0);
15460
+ return ret;
15461
+ }
15462
+ /***************************************************************
15463
+ * The pad as the last one was left: its texts, shown, and its
15464
+ * layout -- through the same events a reader would send.
15465
+ ***************************************************************/
15466
+ function restore_state(gobj) {
15467
+ let priv = gobj.priv;
15468
+ let key = (0, _yuneta_gobj_js.gobj_read_str_attr)(gobj, "storage_key");
15469
+ if (!key) return 0;
15470
+ let kept = (0, _yuneta_gobj_js.kw_get_local_storage_value)(key, null, false);
15471
+ if (kept === null || kept === void 0) return 0;
15472
+ if (typeof kept !== "object" || Array.isArray(kept)) {
15473
+ (0, _yuneta_gobj_js.log_warning)(`${(0, _yuneta_gobj_js.gobj_short_name)(gobj)}: '${key}' in localStorage is not what the pad keeps`);
15474
+ return -1;
15475
+ }
15476
+ for (const id of PANES) if (typeof kept[id] === "string") priv.panes[id].$input.value = kept[id];
15477
+ for (const id of PANES) if (priv.panes[id].$input.value.trim()) (0, _yuneta_gobj_js.gobj_send_event)(gobj, "EV_VIEW", { pane: id }, gobj);
15478
+ if (kept.mode === "dual" || kept.mode === "diff") (0, _yuneta_gobj_js.gobj_send_event)(gobj, "EV_TOGGLE_SECOND", {}, gobj);
15479
+ if (kept.mode === "diff") (0, _yuneta_gobj_js.gobj_send_event)(gobj, "EV_TOGGLE_DIFF", {}, gobj);
15480
+ return 0;
15481
+ }
15482
+ /***************************
15483
+ * Actions
15484
+ ***************************/
15485
+ /***************************************************************
15486
+ * A paste: it becomes the pane's text area and its document
15487
+ * at once.
15488
+ ***************************************************************/
15489
+ function ac_paste(gobj, event, kw, src) {
15490
+ let pane = pane_of(gobj, kw);
15491
+ if (!pane) return -1;
15492
+ let text = typeof kw.text === "string" ? kw.text : "";
15493
+ pane.$input.value = text;
15494
+ let ret = show_text(gobj, pane, text);
15495
+ document_changed(gobj);
15496
+ return ret;
15497
+ }
15498
+ /***************************************************************
15499
+ * The pane's text area as it is now.
15500
+ ***************************************************************/
15501
+ function ac_view(gobj, event, kw, src) {
15502
+ let pane = pane_of(gobj, kw);
15503
+ if (!pane) return -1;
15504
+ let ret = show_text(gobj, pane, pane.$input.value);
15505
+ document_changed(gobj);
15506
+ return ret;
15507
+ }
15508
+ /***************************************************************
15509
+ * A blank pane again.
15510
+ ***************************************************************/
15511
+ function ac_clear(gobj, event, kw, src) {
15512
+ let pane = pane_of(gobj, kw);
15513
+ if (!pane) return -1;
15514
+ clear_pane(gobj, pane, true);
15515
+ pane.$input.focus();
15516
+ document_changed(gobj);
15517
+ return 0;
15518
+ }
15519
+ /***************************************************************
15520
+ * A text area was edited and left: keep what it holds. What
15521
+ * is SHOWN changes only with a view, as before.
15522
+ ***************************************************************/
15523
+ function ac_text_changed(gobj, event, kw, src) {
15524
+ if (!pane_of(gobj, kw)) return -1;
15525
+ save_state(gobj);
15526
+ return 0;
15527
+ }
15528
+ /***************************************************************
15529
+ * The second pane, beside the first.
15530
+ ***************************************************************/
15531
+ function ac_show_second(gobj, event, kw, src) {
15532
+ let priv = gobj.priv;
15533
+ enter_layout(gobj, "ST_DUAL");
15534
+ priv.panes.b.$input.focus();
15535
+ return 0;
15536
+ }
15537
+ /***************************************************************
15538
+ * One pane again. Its text is kept: hiding is not clearing.
15539
+ ***************************************************************/
15540
+ function ac_hide_second(gobj, event, kw, src) {
15541
+ enter_layout(gobj, "ST_SINGLE");
15542
+ return 0;
15543
+ }
15544
+ /***************************************************************
15545
+ * The differences, in place of the viewers.
15546
+ ***************************************************************/
15547
+ function ac_show_diff(gobj, event, kw, src) {
15548
+ enter_layout(gobj, "ST_DIFF");
15549
+ return 0;
15550
+ }
15551
+ /***************************************************************
15552
+ * The viewers again.
15553
+ ***************************************************************/
15554
+ function ac_hide_diff(gobj, event, kw, src) {
15555
+ enter_layout(gobj, "ST_DUAL");
15556
+ return 0;
15557
+ }
15558
+ /***************************************************************
15559
+ * A viewer asks for a `__collapsed__` subtree. A pasted
15560
+ * document has no backend to ask for it: the SOURCE truncated
15561
+ * it, and that is the answer, to the viewer that asked.
15562
+ ***************************************************************/
15563
+ function ac_expand_path(gobj, event, kw, src) {
15564
+ (0, _yuneta_gobj_js.gobj_send_event)(src, "EV_SUBTREE_ERROR", {
15565
+ path: kw && kw.path || "",
15566
+ error: (0, i18next.t)("collapsed in the source")
15567
+ }, gobj);
15568
+ return 0;
15569
+ }
15570
+ /***************************************************************
15571
+ * FSM
15572
+ ***************************************************************/
15573
+ var gmt$12 = {
15574
+ mt_create: mt_create$12,
15575
+ mt_start: mt_start$12,
15576
+ mt_stop: mt_stop$12,
15577
+ mt_destroy: mt_destroy$12
15578
+ };
15579
+ /***************************************************************
15580
+ * Create the GClass
15581
+ ***************************************************************/
15582
+ function create_gclass$12(gclass_name) {
15583
+ if (__gclass__$12) {
15584
+ (0, _yuneta_gobj_js.log_error)(`GClass ALREADY created: ${gclass_name}`);
15585
+ return -1;
15586
+ }
15587
+ __gclass__$12 = (0, _yuneta_gobj_js.gclass_create)(gclass_name, [
15588
+ ["EV_PASTE", 0],
15589
+ ["EV_VIEW", 0],
15590
+ ["EV_CLEAR", 0],
15591
+ ["EV_TEXT_CHANGED", 0],
15592
+ ["EV_TOGGLE_SECOND", 0],
15593
+ ["EV_TOGGLE_DIFF", 0],
15594
+ ["EV_EXPAND_PATH", 0]
15595
+ ], [
15596
+ ["ST_SINGLE", [
15597
+ [
15598
+ "EV_PASTE",
15599
+ ac_paste,
15600
+ null
15601
+ ],
15602
+ [
15603
+ "EV_VIEW",
15604
+ ac_view,
15605
+ null
15606
+ ],
15607
+ [
15608
+ "EV_CLEAR",
15609
+ ac_clear,
15610
+ null
15611
+ ],
15612
+ [
15613
+ "EV_TEXT_CHANGED",
15614
+ ac_text_changed,
15615
+ null
15616
+ ],
15617
+ [
15618
+ "EV_TOGGLE_SECOND",
15619
+ ac_show_second,
15620
+ null
15621
+ ],
15622
+ [
15623
+ "EV_EXPAND_PATH",
15624
+ ac_expand_path,
15625
+ null
15626
+ ]
15627
+ ]],
15628
+ ["ST_DUAL", [
15629
+ [
15630
+ "EV_PASTE",
15631
+ ac_paste,
15632
+ null
15633
+ ],
15634
+ [
15635
+ "EV_VIEW",
15636
+ ac_view,
15637
+ null
15638
+ ],
15639
+ [
15640
+ "EV_CLEAR",
15641
+ ac_clear,
15642
+ null
15643
+ ],
15644
+ [
15645
+ "EV_TEXT_CHANGED",
15646
+ ac_text_changed,
15647
+ null
15648
+ ],
15649
+ [
15650
+ "EV_TOGGLE_SECOND",
15651
+ ac_hide_second,
15652
+ null
15653
+ ],
15654
+ [
15655
+ "EV_TOGGLE_DIFF",
15656
+ ac_show_diff,
15657
+ null
15658
+ ],
15659
+ [
15660
+ "EV_EXPAND_PATH",
15661
+ ac_expand_path,
15662
+ null
15663
+ ]
15664
+ ]],
15665
+ ["ST_DIFF", [
15666
+ [
15667
+ "EV_PASTE",
15668
+ ac_paste,
15669
+ null
15670
+ ],
15671
+ [
15672
+ "EV_VIEW",
15673
+ ac_view,
15674
+ null
15675
+ ],
15676
+ [
15677
+ "EV_CLEAR",
15678
+ ac_clear,
15679
+ null
15680
+ ],
15681
+ [
15682
+ "EV_TEXT_CHANGED",
15683
+ ac_text_changed,
15684
+ null
15685
+ ],
15686
+ [
15687
+ "EV_TOGGLE_SECOND",
15688
+ ac_hide_second,
15689
+ null
15690
+ ],
15691
+ [
15692
+ "EV_TOGGLE_DIFF",
15693
+ ac_hide_diff,
15694
+ null
15695
+ ]
15696
+ ]]
15697
+ ], gmt$12, 0, attrs_table$12, PRIVATE_DATA$12, 0, 0, 0, 0);
15698
+ if (!__gclass__$12) return -1;
15699
+ return 0;
15700
+ }
15701
+ /***************************************************************
15702
+ * Register GClass
15703
+ ***************************************************************/
15704
+ function register_c_yui_json_pad() {
15705
+ if (!(0, _yuneta_gobj_js.gclass_find_by_name)("C_YUI_JSON", false)) register_c_yui_json();
14773
15706
  return create_gclass$12(GCLASS_NAME$12);
14774
15707
  }
14775
15708
  //#endregion
@@ -21348,7 +22281,7 @@ function register_c_yui_nav() {
21348
22281
  }
21349
22282
  //#endregion
21350
22283
  //#region src/shell_route_map.js
21351
- var WIN_NAME$1 = "shell-route-map-window";
22284
+ var WIN_NAME$2 = "shell-route-map-window";
21352
22285
  var __show_refs__ = true;
21353
22286
  var __open_modal__ = null;
21354
22287
  function scroll_to_current($body) {
@@ -21688,7 +22621,7 @@ function mark_current_row($body, hash, t) {
21688
22621
  ***************************************************************/
21689
22622
  function yui_shell_show_route_map(shell, opts) {
21690
22623
  let t = opts && opts.t || i18next.default.t.bind(i18next.default);
21691
- let existing = (0, _yuneta_gobj_js.gobj_find_service)(WIN_NAME$1, false);
22624
+ let existing = (0, _yuneta_gobj_js.gobj_find_service)(WIN_NAME$2, false);
21692
22625
  if (existing && (0, _yuneta_gobj_js.is_gobj)(existing)) {
21693
22626
  (0, _yuneta_gobj_js.gobj_send_event)(existing, "EV_CLOSE_WINDOW", {}, shell);
21694
22627
  return null;
@@ -21703,7 +22636,7 @@ function yui_shell_show_route_map(shell, opts) {
21703
22636
  let win_ref = { gobj: null };
21704
22637
  let $body = build_body(shell, t);
21705
22638
  let $parent = yui_shell_popup_layer(shell) || typeof document !== "undefined" && document.getElementById("top-layer") || null;
21706
- let win = (0, _yuneta_gobj_js.gobj_create_service)(WIN_NAME$1, "C_YUI_WINDOW", {
22639
+ let win = (0, _yuneta_gobj_js.gobj_create_service)(WIN_NAME$2, "C_YUI_WINDOW", {
21707
22640
  $parent,
21708
22641
  subscriber: null,
21709
22642
  modal: false,
@@ -25401,6 +26334,14 @@ function create_tabulator(gobj) {
25401
26334
  let remembered_size = load_page_size(gobj);
25402
26335
  if (remembered_size !== null && tabulator_settings.pagination) tabulator_settings.paginationSize = remembered_size;
25403
26336
  gobj.priv._page_size = tabulator_settings.paginationSize;
26337
+ let pkey_col = columns.find((c) => c && c.field === pkey);
26338
+ if (pkey_col && !tabulator_settings.initialSort && !(0, _yuneta_gobj_js.gobj_read_bool_attr)(gobj, "with_remote_paging")) {
26339
+ if (!pkey_col.sorter) pkey_col.sorter = "alphanum";
26340
+ tabulator_settings.initialSort = [{
26341
+ column: pkey,
26342
+ dir: "asc"
26343
+ }];
26344
+ }
25404
26345
  Object.assign(tabulator_settings, {
25405
26346
  index: pkey,
25406
26347
  columns,
@@ -74573,7 +75514,7 @@ function build_dev_panel() {
74573
75514
  * Copyright (c) 2026, ArtGins.
74574
75515
  * All Rights Reserved.
74575
75516
  ***********************************************************************/
74576
- var WIN_NAME = "Frontend-View-Window";
75517
+ var WIN_NAME$1 = "Frontend-View-Window";
74577
75518
  /******************************
74578
75519
  * Public API
74579
75520
  ******************************/
@@ -74590,7 +75531,7 @@ var WIN_NAME = "Frontend-View-Window";
74590
75531
  * Returns the window gobj, or null.
74591
75532
  ************************************************************/
74592
75533
  function setup_frontend_view(self) {
74593
- if ((0, _yuneta_gobj_js.gobj_find_service)(WIN_NAME, false)) return null;
75534
+ if ((0, _yuneta_gobj_js.gobj_find_service)(WIN_NAME$1, false)) return null;
74594
75535
  let $body = (0, _yuneta_gobj_js.createElement2)([
74595
75536
  "div",
74596
75537
  {
@@ -74599,7 +75540,7 @@ function setup_frontend_view(self) {
74599
75540
  },
74600
75541
  []
74601
75542
  ]);
74602
- let win = (0, _yuneta_gobj_js.gobj_create_service)(WIN_NAME, "C_YUI_WINDOW", {
75543
+ let win = (0, _yuneta_gobj_js.gobj_create_service)(WIN_NAME$1, "C_YUI_WINDOW", {
74603
75544
  $parent: typeof document !== "undefined" && document.getElementById("top-layer") || null,
74604
75545
  subscriber: null,
74605
75546
  modal: false,
@@ -74631,6 +75572,75 @@ function setup_frontend_view(self) {
74631
75572
  return win;
74632
75573
  }
74633
75574
  //#endregion
75575
+ //#region src/yui_json_pad.js
75576
+ /***********************************************************************
75577
+ * yui_json_pad.js
75578
+ *
75579
+ * JSON viewer -- a blank C_YUI_JSON_PAD in a floating window,
75580
+ * to paste JSON from outside and read it with the library's own
75581
+ * viewer. Peer of the frontend view (yui_frontend_view.js), and
75582
+ * opened the same way: an entry of the account menu.
75583
+ *
75584
+ * Copyright (c) 2026, ArtGins.
75585
+ * All Rights Reserved.
75586
+ ***********************************************************************/
75587
+ var WIN_NAME = "Json-Viewer-Window";
75588
+ /******************************
75589
+ * Public API
75590
+ ******************************/
75591
+ /************************************************************
75592
+ * Open a blank JSON pad (C_YUI_JSON_PAD) inside a non-modal
75593
+ * C_YUI_WINDOW, the same shape as the frontend view.
75594
+ *
75595
+ * Self-contained: it registers C_YUI_JSON_PAD (and the
75596
+ * C_YUI_JSON it hosts) if the app did not, so an app gets the
75597
+ * viewer with one menu entry and one action.
75598
+ *
75599
+ * Returns the window gobj, or null.
75600
+ ************************************************************/
75601
+ function setup_json_pad(self) {
75602
+ if ((0, _yuneta_gobj_js.gobj_find_service)(WIN_NAME, false)) return null;
75603
+ if (!(0, _yuneta_gobj_js.gclass_find_by_name)("C_YUI_JSON_PAD", false)) register_c_yui_json_pad();
75604
+ let $body = (0, _yuneta_gobj_js.createElement2)([
75605
+ "div",
75606
+ {
75607
+ class: "YJSONPAD_BODY",
75608
+ style: "height:100%; display:flex; flex-direction:column;"
75609
+ },
75610
+ []
75611
+ ]);
75612
+ let win = (0, _yuneta_gobj_js.gobj_create_service)(WIN_NAME, "C_YUI_WINDOW", {
75613
+ $parent: typeof document !== "undefined" && document.getElementById("top-layer") || null,
75614
+ subscriber: null,
75615
+ modal: false,
75616
+ showMax: true,
75617
+ showFooter: false,
75618
+ resizable: true,
75619
+ center: false,
75620
+ auto_save_size_and_position: true,
75621
+ width: 900,
75622
+ height: 640,
75623
+ logical_class: "JSON_VIEWER_WINDOW",
75624
+ title: "json viewer",
75625
+ icon: "yi-code",
75626
+ body: $body,
75627
+ manager: (0, _yuneta_gobj_js.gobj_find_service)("__window_manager__", false) || null
75628
+ }, self);
75629
+ if (!win) {
75630
+ (0, _yuneta_gobj_js.log_error)("yui_json_pad: cannot create the json-viewer window");
75631
+ return null;
75632
+ }
75633
+ let pad = (0, _yuneta_gobj_js.gobj_create_pure_child)("json_pad", "C_YUI_JSON_PAD", {}, win);
75634
+ let $pad = pad ? (0, _yuneta_gobj_js.gobj_read_attr)(pad, "$container") : null;
75635
+ if (!$pad) {
75636
+ (0, _yuneta_gobj_js.log_error)("yui_json_pad: C_YUI_JSON_PAD without $container");
75637
+ return win;
75638
+ }
75639
+ $body.appendChild($pad);
75640
+ (0, _yuneta_gobj_js.gobj_start_tree)(win);
75641
+ return win;
75642
+ }
75643
+ //#endregion
74634
75644
  exports.EditControl = EditControl;
74635
75645
  exports.MarkerControl = MarkerControl;
74636
75646
  exports.YUI_FILE_ACCEPT = YUI_FILE_ACCEPT;
@@ -74671,6 +75681,7 @@ exports.register_c_yui_gclass = register_c_yui_gclass;
74671
75681
  exports.register_c_yui_gobj_tree_js = register_c_yui_gobj_tree_js;
74672
75682
  exports.register_c_yui_json = register_c_yui_json;
74673
75683
  exports.register_c_yui_json_graph = register_c_yui_json_graph;
75684
+ exports.register_c_yui_json_pad = register_c_yui_json_pad;
74674
75685
  exports.register_c_yui_map = register_c_yui_map;
74675
75686
  exports.register_c_yui_nav = register_c_yui_nav;
74676
75687
  exports.register_c_yui_pager = register_c_yui_pager;
@@ -74696,6 +75707,7 @@ exports.set_pressed_state = set_pressed_state;
74696
75707
  exports.set_submit_state = set_submit_state;
74697
75708
  exports.setup_dev = setup_dev;
74698
75709
  exports.setup_frontend_view = setup_frontend_view;
75710
+ exports.setup_json_pad = setup_json_pad;
74699
75711
  exports.toggleClasses = toggleClasses;
74700
75712
  exports.yui_array_buffer_to_base64 = yui_array_buffer_to_base64;
74701
75713
  exports.yui_asset_element = yui_asset_element;