@overvis/hmi-workspace-ui 0.1.2 → 0.1.3

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.
Files changed (88) hide show
  1. package/README.md +6 -4
  2. package/dist/{alarm-list-DKFio0hg.js → alarm-list-TDg7nwkn.js} +4 -4
  3. package/dist/{alarm-rule-dialog-mb4_nHRW.js → alarm-rule-dialog-DwbRtPZD.js} +10 -10
  4. package/dist/{alarm-rule-lists-CfZXTWkK.js → alarm-rule-lists-Ax7PzbQy.js} +4 -4
  5. package/dist/{alarm-rules-page-DBLSkrrG.js → alarm-rules-page-DisATKLV.js} +11 -11
  6. package/dist/{alert-dialog-D_iDv2lQ.js → alert-dialog-CskdoiGZ.js} +1 -1
  7. package/dist/{base-revision-DLF9EnGV.js → base-revision-C-tNhqGq.js} +3 -3
  8. package/dist/{breadcrumbs-D5R6Fz74.js → breadcrumbs-B5O9let7.js} +3 -3
  9. package/dist/{catalog-list-BkWosvh1.js → catalog-list-3yaB4bJD.js} +1 -1
  10. package/dist/{code-editor-DCM0KdMJ.js → code-editor-B6myrPQm.js} +2 -2
  11. package/dist/{dashboards-page-DLc11Vzu.js → dashboards-page-CoKevu-T.js} +9 -9
  12. package/dist/{de-Z2er-E5v.js → de-CPxvTPak.js} +8 -0
  13. package/dist/{diagnostic-text-CYZFPiND.js → diagnostic-text-BS4rdZcE.js} +2 -2
  14. package/dist/{dialogs-DEOg9lxy.js → dialogs-BUyPGimM.js} +6 -6
  15. package/dist/{dialogs-BX023zml.js → dialogs-CF7Baagf.js} +512 -510
  16. package/dist/{display-VYGzneE0.js → display-DmldtHdd.js} +2 -2
  17. package/dist/{editor-language-CGENZxbI.js → editor-language-8UJkvBgX.js} +1 -1
  18. package/dist/{editor-page-CaN52OQh.js → editor-page-_6TxO_iT.js} +14 -14
  19. package/dist/{en-CKPPL6bQ.js → en-DoFtc9Sn.js} +8 -0
  20. package/dist/{entity-controls-DJT47yeV.js → entity-controls-rdv-ttvP.js} +3 -3
  21. package/dist/{errors-BAWoH_5w.js → errors-BFeJfnyz.js} +2 -2
  22. package/dist/{footer-CbPMP8aq.js → footer-DZUQHVnt.js} +4 -4
  23. package/dist/host.js +28 -27
  24. package/dist/{i18n-ChjEbYEg.js → i18n-D54xfDUE.js} +5 -5
  25. package/dist/i18n.js +1 -1
  26. package/dist/index.js +45 -34
  27. package/dist/{list-page-Fa29SkaJ.js → list-page-Cz5bdD8r.js} +11 -11
  28. package/dist/{location-map-renderer-DvXIYc1Z.js → location-map-renderer-Hb5N0AYH.js} +1 -1
  29. package/dist/{notice-card-V_0K0lO0.js → notice-card-BMNjc7qi.js} +3 -3
  30. package/dist/{page-BorlLnMX.js → page-BKnwJyv5.js} +8 -8
  31. package/dist/{page-DxF7FOve.js → page-CBWLmbIE.js} +11 -11
  32. package/dist/{page-B5te_1Lc.js → page-UoQRnsm3.js} +11 -11
  33. package/dist/{panel-DuZD-cBP.js → panel-Cr3OXiRs.js} +3 -3
  34. package/dist/{pl-DVABrn5G.js → pl-DEPfFtMO.js} +8 -0
  35. package/dist/{presence-code-DsabLTZs.js → presence-code-DIKs9fBe.js} +2 -2
  36. package/dist/{query-gate-BbIo1Xrj.js → query-gate-2sU8OvEb.js} +3 -3
  37. package/dist/{quick-report-BcZsfkCZ.js → quick-report-ZvrI5Jkh.js} +3130 -3102
  38. package/dist/{retention-note-CmMeHV_u.js → retention-note-BrkxE2Wo.js} +9 -6
  39. package/dist/{retention-C7EZsq8u.js → retention-wDvnFMbN.js} +2 -2
  40. package/dist/{ru-CBRLC_xM.js → ru-Ct2zNOs8.js} +8 -0
  41. package/dist/{run-text-CDdfbKbg.js → run-text-Bmkf_u0N.js} +2 -2
  42. package/dist/{search-C6xQ_Hvo.js → search-ADhiRT_S.js} +3 -3
  43. package/dist/{sections-D_SBfVzV.js → sections-BDtBUhxn.js} +1 -1
  44. package/dist/{select-nNLG-AMz.js → select-Cpeslz01.js} +2 -2
  45. package/dist/{spinner-B-KLtBjp.js → spinner-LbVGWBQq.js} +2 -2
  46. package/dist/src/i18n/catalogs/de/api-error.d.ts +3 -0
  47. package/dist/src/i18n/catalogs/de/audit.d.ts +1 -0
  48. package/dist/src/i18n/catalogs/de/edge-program.d.ts +1 -0
  49. package/dist/src/i18n/catalogs/de/parameter.d.ts +1 -0
  50. package/dist/src/i18n/catalogs/de/starter.d.ts +2 -0
  51. package/dist/src/i18n/catalogs/de.d.ts +8 -0
  52. package/dist/src/i18n/catalogs/en/api-error.d.ts +3 -0
  53. package/dist/src/i18n/catalogs/en/audit.d.ts +1 -0
  54. package/dist/src/i18n/catalogs/en/edge-program.d.ts +1 -0
  55. package/dist/src/i18n/catalogs/en/parameter.d.ts +1 -0
  56. package/dist/src/i18n/catalogs/en/starter.d.ts +2 -0
  57. package/dist/src/i18n/catalogs/en.d.ts +8 -0
  58. package/dist/src/i18n/catalogs/pl/api-error.d.ts +3 -0
  59. package/dist/src/i18n/catalogs/pl/audit.d.ts +1 -0
  60. package/dist/src/i18n/catalogs/pl/edge-program.d.ts +1 -0
  61. package/dist/src/i18n/catalogs/pl/parameter.d.ts +1 -0
  62. package/dist/src/i18n/catalogs/pl/starter.d.ts +2 -0
  63. package/dist/src/i18n/catalogs/pl.d.ts +8 -0
  64. package/dist/src/i18n/catalogs/ru/api-error.d.ts +3 -0
  65. package/dist/src/i18n/catalogs/ru/audit.d.ts +1 -0
  66. package/dist/src/i18n/catalogs/ru/edge-program.d.ts +1 -0
  67. package/dist/src/i18n/catalogs/ru/parameter.d.ts +1 -0
  68. package/dist/src/i18n/catalogs/ru/starter.d.ts +2 -0
  69. package/dist/src/i18n/catalogs/ru.d.ts +8 -0
  70. package/dist/src/i18n/catalogs/uk/api-error.d.ts +3 -0
  71. package/dist/src/i18n/catalogs/uk/audit.d.ts +1 -0
  72. package/dist/src/i18n/catalogs/uk/edge-program.d.ts +1 -0
  73. package/dist/src/i18n/catalogs/uk/parameter.d.ts +1 -0
  74. package/dist/src/i18n/catalogs/uk/starter.d.ts +2 -0
  75. package/dist/src/i18n/catalogs/uk.d.ts +8 -0
  76. package/dist/src/version.d.ts +1 -1
  77. package/dist/src/workspace/device-presets/layout.d.ts +2 -0
  78. package/dist/src/workspace/graphics/inspector/item.d.ts +6 -6
  79. package/dist/src/workspace/local-setup-link.d.ts +3 -0
  80. package/dist/src/workspace/parameters/errors.d.ts +5 -0
  81. package/dist/src/workspace/setup/starters/starter-form.d.ts +24 -6
  82. package/dist/starter-fields-BHNS6IQe.js +678 -0
  83. package/dist/styles.css +1 -1
  84. package/dist/ui.js +6 -6
  85. package/dist/{uk-17pbVYZa.js → uk-Dbm1i2uh.js} +8 -0
  86. package/dist/{wireguard-docs-Clb-7xRY.js → wireguard-docs-DIBtCviv.js} +3 -3
  87. package/package.json +2 -2
  88. package/dist/starter-fields-7S3LmtGa.js +0 -583
package/dist/ui.js CHANGED
@@ -1,9 +1,9 @@
1
- import { c as e, f as t, i as n, m as r, n as i, r as a, s as o } from "./i18n-ChjEbYEg.js";
2
- import { $ as s, A as c, B as l, C as u, D as d, Dt as f, E as p, Et as m, F as h, G as ee, H as g, I as _, K as v, L as te, M as y, Mt as b, N as ne, Nt as x, O as re, P as ie, Q as ae, R as oe, S as se, T as ce, Tt as le, U as ue, V as de, W as fe, X as pe, Y as me, Z as he, _ as ge, _t as _e, a as ve, at as ye, b as be, bt as xe, c as Se, ct as Ce, d as we, dt as Te, et as Ee, f as De, ft as Oe, g as ke, gt as Ae, h as je, ht as Me, i as Ne, it as Pe, j as Fe, jt as S, k as Ie, l as Le, lt as Re, m as ze, mt as C, n as Be, nt as Ve, o as He, ot as Ue, p as We, pt as Ge, q as Ke, r as qe, rt as Je, s as Ye, st as Xe, t as Ze, tt as Qe, u as $e, ut as et, v as tt, vt as w, w as nt, x as T, xt as E, y as rt, yt as it, z as at } from "./alert-dialog-D_iDv2lQ.js";
3
- import { A as ot, B as st, C as ct, D as lt, E as ut, F as dt, G as ft, H as pt, I as mt, J as ht, K as gt, L as _t, M as vt, N as yt, O as bt, P as xt, R as St, S as Ct, T as wt, U as Tt, V as Et, W as Dt, Y as Ot, _ as kt, a as At, b as jt, c as Mt, d as Nt, f as Pt, g as Ft, h as It, i as D, j as Lt, l as Rt, m as zt, n as O, o as Bt, p as Vt, q as Ht, r as k, s as Ut, t as Wt, u as Gt, v as Kt, w as qt, x as Jt, y as Yt, z as Xt } from "./spinner-B-KLtBjp.js";
4
- import { C as Zt, E as Qt, S as $t, T as en, _ as tn, a as nn, c as rn, d as an, f as on, g as sn, h as cn, i as ln, l as un, m as dn, n as fn, o as pn, p as mn, r as hn, s as gn, t as _n, u as vn, v as yn, w as bn, x as xn, y as Sn } from "./select-nNLG-AMz.js";
5
- import { a as Cn, c as wn, d as Tn, i as En, l as Dn, n as On, o as kn, r as An, s as jn, t as Mn, u as Nn } from "./notice-card-V_0K0lO0.js";
6
- import { A as Pn, B as Fn, C as In, D as Ln, E as Rn, F as zn, I as Bn, L as Vn, M as Hn, N as Un, O as Wn, P as Gn, R as Kn, S as qn, T as Jn, V as Yn, _ as Xn, a as Zn, b as Qn, d as $n, f as er, g as tr, h as nr, i as rr, j as ir, k as ar, m as or, n as sr, o as cr, p as lr, r as ur, s as dr, t as fr, u as pr, v as mr, w as hr, x as gr, y as _r, z as vr } from "./panel-DuZD-cBP.js";
1
+ import { c as e, f as t, i as n, m as r, n as i, r as a, s as o } from "./i18n-D54xfDUE.js";
2
+ import { $ as s, A as c, B as l, C as u, D as d, Dt as f, E as p, Et as m, F as h, G as ee, H as g, I as _, K as v, L as te, M as y, Mt as b, N as ne, Nt as x, O as re, P as ie, Q as ae, R as oe, S as se, T as ce, Tt as le, U as ue, V as de, W as fe, X as pe, Y as me, Z as he, _ as ge, _t as _e, a as ve, at as ye, b as be, bt as xe, c as Se, ct as Ce, d as we, dt as Te, et as Ee, f as De, ft as Oe, g as ke, gt as Ae, h as je, ht as Me, i as Ne, it as Pe, j as Fe, jt as S, k as Ie, l as Le, lt as Re, m as ze, mt as C, n as Be, nt as Ve, o as He, ot as Ue, p as We, pt as Ge, q as Ke, r as qe, rt as Je, s as Ye, st as Xe, t as Ze, tt as Qe, u as $e, ut as et, v as tt, vt as w, w as nt, x as T, xt as E, y as rt, yt as it, z as at } from "./alert-dialog-CskdoiGZ.js";
3
+ import { A as ot, B as st, C as ct, D as lt, E as ut, F as dt, G as ft, H as pt, I as mt, J as ht, K as gt, L as _t, M as vt, N as yt, O as bt, P as xt, R as St, S as Ct, T as wt, U as Tt, V as Et, W as Dt, Y as Ot, _ as kt, a as At, b as jt, c as Mt, d as Nt, f as Pt, g as Ft, h as It, i as D, j as Lt, l as Rt, m as zt, n as O, o as Bt, p as Vt, q as Ht, r as k, s as Ut, t as Wt, u as Gt, v as Kt, w as qt, x as Jt, y as Yt, z as Xt } from "./spinner-LbVGWBQq.js";
4
+ import { C as Zt, E as Qt, S as $t, T as en, _ as tn, a as nn, c as rn, d as an, f as on, g as sn, h as cn, i as ln, l as un, m as dn, n as fn, o as pn, p as mn, r as hn, s as gn, t as _n, u as vn, v as yn, w as bn, x as xn, y as Sn } from "./select-Cpeslz01.js";
5
+ import { a as Cn, c as wn, d as Tn, i as En, l as Dn, n as On, o as kn, r as An, s as jn, t as Mn, u as Nn } from "./notice-card-BMNjc7qi.js";
6
+ import { A as Pn, B as Fn, C as In, D as Ln, E as Rn, F as zn, I as Bn, L as Vn, M as Hn, N as Un, O as Wn, P as Gn, R as Kn, S as qn, T as Jn, V as Yn, _ as Xn, a as Zn, b as Qn, d as $n, f as er, g as tr, h as nr, i as rr, j as ir, k as ar, m as or, n as sr, o as cr, p as lr, r as ur, s as dr, t as fr, u as pr, v as mr, w as hr, x as gr, y as _r, z as vr } from "./panel-Cr3OXiRs.js";
7
7
  import * as A from "react";
8
8
  import { useEffect as j, useId as yr, useRef as br, useState as xr } from "react";
9
9
  import { Fragment as Sr, jsx as M, jsxs as N } from "react/jsx-runtime";
@@ -106,6 +106,7 @@ var e = {
106
106
  }, s = {
107
107
  error_input_invalid: "Надіслані дані містять помилки.",
108
108
  error_workspace_no_access: "У вас немає доступу до цього робочого простору.",
109
+ error_workspace_public_link_not_found: "Ця публічна адреса недоступна.",
109
110
  error_workspace_suspended: "Цей робочий простір призупинено. Відкрийте його, щоб дізнатися причину.",
110
111
  error_workspace_not_owner: "Лише власник робочого простору може це зробити.",
111
112
  error_workspace_not_admin: "Лише адміністратор або власник робочого простору може це зробити.",
@@ -333,6 +334,8 @@ var e = {
333
334
  error_authentication_required: "Увійдіть, щоб продовжити.",
334
335
  error_admission_required: "Ваш обліковий запис ще не має доступу. Скористайтеся запрошенням або кодом доступу, щоб продовжити.",
335
336
  error_onboarding_required: "Заповніть свій профіль у вебзастосунку, щоб продовжити.",
337
+ error_guest_not_allowed: "Увійдіть, щоб зробити це. Гості можуть лише переглядати цей робочий простір.",
338
+ error_guest_rate_limited: "Забагато запитів із вашої мережі. Зачекайте хвилину або увійдіть.",
336
339
  error_audit_invalid_cursor: "Ця сторінка історії вже недійсна. Оновіть історію.",
337
340
  error_audit_archived_workspace_required: "Виберіть видалений робочий простір, щоб переглянути його історію.",
338
341
  error_checkpoint_not_found: "Цієї контрольної точки більше немає. Оновіть історію.",
@@ -1252,6 +1255,7 @@ var e = {
1252
1255
  parameter_field_addresses_placeholder: "0, 1, 2",
1253
1256
  parameter_field_addresses_invalid: "Введіть 1–64 адреси (0–65535), через кому.",
1254
1257
  parameter_field_addresses_too_short: "Адреси дають {available} Б, а цьому типу значення потрібно {required} Б. Кожен регістр дає 2 байти, кожен дискретний вихід або вхід — 1. Додайте адреси або змініть тип значення.",
1258
+ parameter_field_write_limit_exceeds_storage: "Ця межа запису не вміщується у сховище типу значення. Змініть межу або змініть тип значення й потім запишіть значення знову.",
1255
1259
  parameter_field_write_function: "Функція запису",
1256
1260
  parameter_field_source_invalid: "Конфігурація джерела некоректна.",
1257
1261
  parameter_field_value_type_invalid: "Конфігурація типу значення некоректна.",
@@ -1444,6 +1448,7 @@ var e = {
1444
1448
  audit_target_type_workspace: "Робочий простір",
1445
1449
  audit_target_type_workspace_permission: "Доступ до робочого простору",
1446
1450
  audit_target_type_workspace_invitation: "Запрошення",
1451
+ audit_target_type_workspace_public_link: "Публічна адреса",
1447
1452
  audit_target_type_workspace_file: "Файл робочого простору",
1448
1453
  audit_target_type_dashboard: "Панель",
1449
1454
  audit_target_type_endpoint: "Підключення",
@@ -2603,6 +2608,8 @@ var e = {
2603
2608
  starter_add_row: "Додати",
2604
2609
  starter_remove_row: "Видалити: {row}",
2605
2610
  starter_recipients_none: "Нікого",
2611
+ starter_unit: "Одиниця виміру",
2612
+ starter_unit_ms: "мс",
2606
2613
  starter_unit_s: "с",
2607
2614
  starter_unit_min: "хв",
2608
2615
  starter_unit_h: "год",
@@ -3278,6 +3285,7 @@ var e = {
3278
3285
  taskfile_warning_filename_invalid: "{filename} не є ім’ям файлу 8.3, тому пристрій його пропускає.",
3279
3286
  taskfile_warning_implicit_indirect_index: "Визначте індексну змінну до її використання; з невизначеною пристрій може поводитися непередбачувано.",
3280
3287
  taskfile_warning_memory_log_target: "Журналювання параметра в пам’яті пристрою завершується помилкою й зупиняє все журналювання програм. Натомість відобразіть його на регістр Modbus пристрою.",
3288
+ taskfile_warning_missing_return: "{name} викликається через CALL або TRYCALL, але її дії можуть без RETURN перейти в іншу функцію або за кінець файлу. RETURN одразу після IF виконується, лише коли умова істинна.",
3281
3289
  taskfile_warning_nonstandard_holding_name: "Пристрій приймає тут це ім’я, але воно не відповідає звичайним правилам іменування.",
3282
3290
  taskfile_warning_string_output_limit: "Цей рядок може стати довшим за {limit} байтів, і пристрій обріже решту.",
3283
3291
  taskfile_warning_unknown: "Можлива проблема: {code}.",
@@ -1,7 +1,7 @@
1
1
  import { t as e } from "./rolldown-runtime-CGnMp29N.js";
2
- import { Un as t, Wn as n, ii as r } from "./quick-report-BcZsfkCZ.js";
3
- import { m as i, n as a } from "./i18n-ChjEbYEg.js";
4
- import { B as o, H as s, K as c, R as l, U as u, V as d, jt as f, yt as p } from "./alert-dialog-D_iDv2lQ.js";
2
+ import { Un as t, Wn as n, ii as r } from "./quick-report-ZvrI5Jkh.js";
3
+ import { m as i, n as a } from "./i18n-D54xfDUE.js";
4
+ import { B as o, H as s, K as c, R as l, U as u, V as d, jt as f, yt as p } from "./alert-dialog-CskdoiGZ.js";
5
5
  import { createContext as m, useContext as h, useState as g } from "react";
6
6
  import { jsx as _, jsxs as v } from "react/jsx-runtime";
7
7
  import { CheckIcon as y, CopyIcon as b } from "lucide-react";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@overvis/hmi-workspace-ui",
3
- "version": "0.1.2",
3
+ "version": "0.1.3",
4
4
  "license": "BSD-3-Clause",
5
5
  "description": "React workspace UI and dashboard integration for Overvis HMI.",
6
6
  "type": "module",
@@ -77,7 +77,7 @@
77
77
  "@dnd-kit/react": "^0.5.0",
78
78
  "@googlemaps/markerclusterer": "^2.6.2",
79
79
  "@lezer/highlight": "^1.2.5",
80
- "@overvis/hmi-shared": "0.1.2",
80
+ "@overvis/hmi-shared": "0.1.3",
81
81
  "@shadcn/react": "^0.3.1",
82
82
  "@tanstack/react-table": "^9.2.4",
83
83
  "@tanstack/react-virtual": "^3.14.9",
@@ -1,583 +0,0 @@
1
- import { rr as e } from "./quick-report-BcZsfkCZ.js";
2
- import { f as t, h as n, m as r } from "./i18n-ChjEbYEg.js";
3
- import { X as i, Y as a, jt as o } from "./alert-dialog-D_iDv2lQ.js";
4
- import { A as s, G as c, H as l, L as u, M as d, R as f, U as p, V as m, Y as h, a as g, c as _, n as v, o as y, r as b, z as x } from "./spinner-B-KLtBjp.js";
5
- import { A as S, C, E as w, S as T, w as E, x as D } from "./panel-DuZD-cBP.js";
6
- import { r as O, t as k } from "./alarm-rule-lists-CfZXTWkK.js";
7
- import { i as A } from "./run-text-CDdfbKbg.js";
8
- import { Fragment as j, jsx as M, jsxs as N } from "react/jsx-runtime";
9
- import { ChevronRightIcon as P, PlusIcon as F, Trash2Icon as I } from "lucide-react";
10
- import { resolveLocalized as L } from "@overvis/hmi-shared";
11
- import { automationCommandRoles as R, automationSeverities as z } from "@overvis/hmi-shared/automation";
12
- import { starterPlaceholderShown as B } from "@overvis/hmi-shared/starter";
13
- // src/workspace/setup/starters/starter-form.ts
14
- var V = {
15
- s: 1e3,
16
- min: 6e4,
17
- h: 36e5
18
- };
19
- function H(e, t) {
20
- return String(t / V[e.unit]);
21
- }
22
- function U(e) {
23
- return e === void 0 ? {
24
- kind: "none",
25
- roles: [],
26
- memberIds: []
27
- } : e.kind === "roles" ? {
28
- kind: "roles",
29
- roles: [...e.roles],
30
- memberIds: []
31
- } : {
32
- kind: "members",
33
- roles: [],
34
- memberIds: [...e.userIds]
35
- };
36
- }
37
- function W(e) {
38
- switch (e.kind) {
39
- case "number": return e.default === void 0 ? "" : String(e.default);
40
- case "duration": return e.default === void 0 ? "" : H(e, e.default);
41
- case "timeOfDay":
42
- case "severity":
43
- case "choice": return e.default ?? "";
44
- case "weekdays": return [...e.default ?? []];
45
- case "recipients": return U(e.default);
46
- case "boolean": return e.default ?? !1;
47
- case "fileName": return e.default;
48
- case "parameter":
49
- case "endpoint":
50
- case "alarmRule":
51
- case "branch":
52
- case "text":
53
- case "phone": return "";
54
- }
55
- }
56
- function G(e, t) {
57
- return {
58
- key: t,
59
- fields: Object.fromEntries(e.map((e) => [e.name, W(e)]))
60
- };
61
- }
62
- function K(e) {
63
- return Object.fromEntries(e.map((e) => [e.name, e.kind === "list" ? Array.from({ length: Math.max(1, e.minItems) }, (t, n) => G(e.fields, `row-${String(n)}`)) : W(e)]));
64
- }
65
- var q = /^-?\d+(?:[.,]\d+)?$/u;
66
- function ee(e) {
67
- let t = e.trim();
68
- return q.test(t) ? Number(t.replace(",", ".")) : null;
69
- }
70
- function te(e, t) {
71
- if (t === void 0) return {
72
- ok: !0,
73
- value: void 0
74
- };
75
- if (typeof t == "boolean") return {
76
- ok: !0,
77
- value: t
78
- };
79
- if (Array.isArray(t)) return {
80
- ok: !0,
81
- value: [...t].sort((e, t) => e - t)
82
- };
83
- if (typeof t == "object") return t.kind === "none" ? {
84
- ok: !0,
85
- value: void 0
86
- } : t.kind === "roles" ? t.roles.length === 0 ? {
87
- ok: !1,
88
- code: "required"
89
- } : {
90
- ok: !0,
91
- value: {
92
- kind: "roles",
93
- roles: [...t.roles]
94
- }
95
- } : t.memberIds.length === 0 ? {
96
- ok: !1,
97
- code: "required"
98
- } : {
99
- ok: !0,
100
- value: {
101
- kind: "members",
102
- userIds: [...t.memberIds]
103
- }
104
- };
105
- if (t.trim() === "") return {
106
- ok: !0,
107
- value: void 0
108
- };
109
- if (e.kind === "number" || e.kind === "duration") {
110
- let n = ee(t);
111
- return n === null ? {
112
- ok: !1,
113
- code: "invalid"
114
- } : {
115
- ok: !0,
116
- value: e.kind === "duration" ? Math.round(n * V[e.unit]) : n
117
- };
118
- }
119
- return {
120
- ok: !0,
121
- value: t
122
- };
123
- }
124
- function ne(e, t) {
125
- let n = [], r = (e, t, r) => {
126
- let i = {};
127
- for (let a of e) {
128
- let e = t[a.name], o = te(a, J(e));
129
- o.ok ? o.value !== void 0 && (i[a.name] = o.value) : n.push({
130
- path: `${r}/${a.name}`,
131
- code: o.code,
132
- args: {}
133
- });
134
- }
135
- return i;
136
- }, i = e.filter((n) => B(n, e, t)), a = r(i.filter((e) => e.kind !== "list"), t, "");
137
- for (let e of i) e.kind === "list" && (a[e.name] = Y(t[e.name]).map((t, n) => r(e.fields, t.fields, `/${e.name}/${String(n)}`)));
138
- return n.length > 0 ? {
139
- ok: !1,
140
- problems: n
141
- } : {
142
- ok: !0,
143
- values: a
144
- };
145
- }
146
- function J(e) {
147
- if (!Array.isArray(e)) return e;
148
- let t = e, n = t.filter((e) => typeof e == "number");
149
- return n.length === t.length ? n : void 0;
150
- }
151
- function Y(e) {
152
- return Array.isArray(e) ? e.filter((e) => typeof e == "object" && !!e && "key" in e) : [];
153
- }
154
- function re(e) {
155
- let t = /* @__PURE__ */ new Map();
156
- for (let n of e) {
157
- let e = t.get(n.path) ?? [];
158
- e.push(n), t.set(n.path, e);
159
- }
160
- return t;
161
- }
162
- // src/workspace/setup/starters/starter-fields.tsx
163
- var ie = ["view_only", ...R], ae = [
164
- 1,
165
- 2,
166
- 3,
167
- 4,
168
- 5,
169
- 6,
170
- 7
171
- ], X = /* @__PURE__ */ new Set([
172
- "parameter",
173
- "weekdays",
174
- "recipients",
175
- "text"
176
- ]);
177
- function oe({ starters: e, onPick: t }) {
178
- let r = n();
179
- return /* @__PURE__ */ M(w, {
180
- className: "gap-2",
181
- children: e.map((e) => /* @__PURE__ */ N(D, {
182
- variant: "outline",
183
- render: /* @__PURE__ */ M("button", { type: "button" }),
184
- className: "text-left",
185
- onClick: () => {
186
- t(e.id);
187
- },
188
- children: [/* @__PURE__ */ N(C, { children: [/* @__PURE__ */ M(S, { children: L(e.name, r) }), /* @__PURE__ */ M(E, {
189
- className: "line-clamp-none",
190
- children: L(e.description, r)
191
- })] }), /* @__PURE__ */ M(T, { children: /* @__PURE__ */ M(P, { className: "size-4 text-muted-foreground" }) })]
192
- }, e.id))
193
- });
194
- }
195
- function se({ workspaceId: e, placeholders: t, values: n, onChange: r, problems: i, data: a, newKey: o }) {
196
- let s = re(i), c = (e, t) => s.get(e)?.map((e) => Z(e, t));
197
- return /* @__PURE__ */ M(m, { children: t.filter((e) => B(e, t, n)).map((t) => t.kind === "list" ? /* @__PURE__ */ M(ue, {
198
- workspaceId: e,
199
- placeholder: t,
200
- rows: Y(n[t.name]),
201
- onChange: (e, i) => {
202
- r({
203
- ...n,
204
- [t.name]: e
205
- }, i ?? `/${t.name}`);
206
- },
207
- data: a,
208
- newKey: o,
209
- problemsAt: c
210
- }, t.name) : /* @__PURE__ */ M($, {
211
- id: `starter-${t.name}`,
212
- workspaceId: e,
213
- placeholder: t,
214
- value: J(n[t.name]),
215
- onChange: (e) => {
216
- r({
217
- ...n,
218
- [t.name]: e
219
- }, `/${t.name}`);
220
- },
221
- data: a,
222
- problems: c(`/${t.name}`, t)
223
- }, t.name)) });
224
- }
225
- function Z(e, n) {
226
- let r = (e) => e === void 0 ? "" : n.kind === "duration" && typeof e == "number" ? `${H(n, e)} ${Q(n.unit)}` : String(e), { args: i } = e;
227
- switch (e.code) {
228
- case "required": return t("starter_problem_required");
229
- case "invalid": return t("starter_problem_invalid");
230
- case "unknown_placeholder": return t("starter_problem_unknown_placeholder");
231
- case "out_of_range": return i.min !== void 0 && i.max !== void 0 ? t("starter_problem_out_of_range", {
232
- min: r(i.min),
233
- max: r(i.max)
234
- }) : i.min === void 0 ? i.max === void 0 ? t("starter_problem_invalid") : t("starter_problem_out_of_range_max", { max: r(i.max) }) : t("starter_problem_out_of_range_min", { min: r(i.min) });
235
- case "too_few": return t("starter_problem_too_few", { min: String(i.min ?? "") });
236
- case "too_many": return t("starter_problem_too_many", { max: String(i.max ?? "") });
237
- case "duplicate": return t("starter_problem_duplicate");
238
- case "parameter_not_found": return t("starter_problem_parameter_not_found");
239
- case "parameter_type": return i.expected === "boolean" ? t("starter_problem_parameter_type_boolean") : i.expected === "number" ? t("starter_problem_parameter_type_number") : t("starter_problem_parameter_type", { expected: String(i.expected ?? "") });
240
- case "parameter_not_writable": return t("starter_problem_parameter_not_writable");
241
- case "parameter_not_on_endpoint": return t("starter_problem_parameter_not_on_endpoint");
242
- case "parameter_encoding": return t("starter_problem_parameter_encoding");
243
- case "endpoint_not_found": return t("starter_problem_endpoint_not_found");
244
- case "alarm_rule_not_found": return t("starter_problem_alarm_rule_not_found");
245
- case "member_not_found": return t("starter_problem_member_not_found");
246
- case "branch_not_found": return t("starter_problem_branch_not_found");
247
- case "file_name_invalid": return t("starter_problem_file_name_invalid");
248
- case "file_name_taken": return t("starter_problem_file_name_taken");
249
- }
250
- }
251
- function Q(e) {
252
- switch (e) {
253
- case "s": return t("starter_unit_s");
254
- case "min": return t("starter_unit_min");
255
- case "h": return t("starter_unit_h");
256
- }
257
- }
258
- function ce(e) {
259
- switch (e) {
260
- case 1: return t("report_weekday_mon");
261
- case 2: return t("report_weekday_tue");
262
- case 3: return t("report_weekday_wed");
263
- case 4: return t("report_weekday_thu");
264
- case 5: return t("report_weekday_fri");
265
- case 6: return t("report_weekday_sat");
266
- default: return t("report_weekday_sun");
267
- }
268
- }
269
- function le() {
270
- let e = r();
271
- return (t) => {
272
- switch (t) {
273
- case "owner": return e("automation_role_owner");
274
- case "admin": return e("automation_role_admin");
275
- case "editor": return e("automation_role_editor");
276
- case "operator": return e("automation_role_operator");
277
- default: return e("automation_role_view_only");
278
- }
279
- };
280
- }
281
- function ue({ workspaceId: e, placeholder: t, rows: i, onChange: a, data: s, newKey: l, problemsAt: u }) {
282
- let d = r(), f = n(), m = `/${t.name}`, h = t.itemLabel === void 0 ? void 0 : L(t.itemLabel, f), g = (e) => h === void 0 ? d("starter_row", { number: String(e + 1) }) : `${h} ${String(e + 1)}`, _ = t.fields.filter((e) => X.has(e.kind)), v = t.fields.filter((e) => !X.has(e.kind)), y = (e, n) => /* @__PURE__ */ M(o, {
283
- type: "button",
284
- variant: "ghost",
285
- size: "icon-sm",
286
- "aria-label": d("starter_remove_row", { row: g(n) }),
287
- disabled: i.length <= t.minItems,
288
- onClick: () => {
289
- a(i.filter((t) => t.key !== e.key));
290
- },
291
- children: /* @__PURE__ */ M(I, {})
292
- }), b = (n, r, o, c = !1) => /* @__PURE__ */ M($, {
293
- id: `starter-${t.name}-${n.key}-${o.name}`,
294
- workspaceId: e,
295
- placeholder: o,
296
- ...c ? {
297
- label: g(r),
298
- labelHidden: c
299
- } : {},
300
- value: n.fields[o.name],
301
- onChange: (e) => {
302
- a(i.map((t) => t.key === n.key ? {
303
- ...t,
304
- fields: {
305
- ...t.fields,
306
- [o.name]: e
307
- }
308
- } : t), `${m}/${String(r)}/${o.name}`);
309
- },
310
- data: s,
311
- problems: u(`${m}/${String(r)}/${o.name}`, o)
312
- }, o.name), [S] = t.fields;
313
- return /* @__PURE__ */ N(c, { children: [
314
- /* @__PURE__ */ M(p, { children: L(t.label, f) }),
315
- t.help === void 0 ? null : /* @__PURE__ */ M(x, { children: L(t.help, f) }),
316
- /* @__PURE__ */ M(O, { texts: u(m, t) }),
317
- t.fields.length === 1 && S !== void 0 ? /* @__PURE__ */ M("div", {
318
- className: "flex flex-col gap-2",
319
- children: i.map((e, t) => /* @__PURE__ */ N("div", {
320
- className: "flex items-start gap-2",
321
- children: [/* @__PURE__ */ M("div", {
322
- className: "min-w-0 flex-1",
323
- children: b(e, t, S, !0)
324
- }), /* @__PURE__ */ M("div", {
325
- className: "flex h-9 items-center",
326
- children: y(e, t)
327
- })]
328
- }, e.key))
329
- }) : /* @__PURE__ */ M("div", {
330
- className: "flex flex-col gap-3",
331
- children: i.map((e, t) => /* @__PURE__ */ N("div", {
332
- className: "flex flex-col gap-3 rounded-lg border p-3",
333
- children: [
334
- /* @__PURE__ */ N("div", {
335
- className: "flex items-center justify-between gap-2",
336
- children: [/* @__PURE__ */ M("span", {
337
- className: "font-medium",
338
- children: g(t)
339
- }), y(e, t)]
340
- }),
341
- _.map((n) => b(e, t, n)),
342
- v.length === 0 ? null : /* @__PURE__ */ M("div", {
343
- className: "\n grid grid-cols-1 gap-3\n sm:grid-cols-2\n ",
344
- children: v.map((n) => b(e, t, n))
345
- })
346
- ]
347
- }, e.key))
348
- }),
349
- /* @__PURE__ */ M("div", { children: /* @__PURE__ */ N(o, {
350
- type: "button",
351
- variant: "outline",
352
- size: "sm",
353
- disabled: i.length >= t.maxItems,
354
- onClick: () => {
355
- a([...i, G(t.fields, l())]);
356
- },
357
- children: [/* @__PURE__ */ M(F, { "data-icon": "inline-start" }), d("starter_add_row")]
358
- }) })
359
- ] });
360
- }
361
- function $({ id: t, workspaceId: o, placeholder: c, label: p, labelHidden: m = !1, value: S, onChange: C, data: w, problems: T }) {
362
- let E = r(), D = n(), P = le(), F = "optional" in c && (c.optional ?? !1), I = p ?? L(c.label, D), R = c.help === void 0 ? void 0 : L(c.help, D), B = typeof S == "string" ? S : "", V = T !== void 0 && T.length > 0, H = F ? /* @__PURE__ */ M("span", {
363
- className: "font-normal text-muted-foreground",
364
- children: E("starter_optional")
365
- }) : null, U = /* @__PURE__ */ N(l, {
366
- htmlFor: t,
367
- className: m ? "sr-only" : void 0,
368
- children: [I, H]
369
- }), W = /* @__PURE__ */ N(j, { children: [R === void 0 ? null : /* @__PURE__ */ M(x, { children: R }), /* @__PURE__ */ M(O, { texts: T })] }), G = (e, n) => /* @__PURE__ */ N(u, {
370
- "data-invalid": V || void 0,
371
- children: [
372
- U,
373
- /* @__PURE__ */ N(s, {
374
- id: t,
375
- value: B,
376
- "aria-invalid": V || void 0,
377
- onChange: (e) => {
378
- C(e.target.value);
379
- },
380
- children: [n ? /* @__PURE__ */ M(d, {
381
- value: "",
382
- children: E("starter_choose")
383
- }) : null, e.map((e) => /* @__PURE__ */ M(d, {
384
- value: e.id,
385
- children: e.name
386
- }, e.id))]
387
- }),
388
- W
389
- ]
390
- });
391
- switch (c.kind) {
392
- case "parameter": {
393
- let n = T !== void 0 || B === "" ? null : w.parameterProblem?.(c, B), r = n == null ? T : [Z(n, c)];
394
- return /* @__PURE__ */ M(e, {
395
- name: t,
396
- label: I,
397
- labelSuffix: H,
398
- labelHidden: m,
399
- workspaceId: o,
400
- value: B,
401
- onChange: C,
402
- preferred: (e) => w.parameterFits(c, e),
403
- ...R === void 0 ? {} : { description: R },
404
- invalid: r !== void 0 && r.length > 0,
405
- errors: (r ?? []).map((e) => ({ message: e }))
406
- });
407
- }
408
- case "endpoint": return G(w.endpoints, !0);
409
- case "alarmRule": return G(w.alarmRules, !0);
410
- case "branch": return G(w.branches, !0);
411
- case "choice": return G(c.options.map((e) => ({
412
- id: e.value,
413
- name: L(e.label, D)
414
- })), c.default === void 0);
415
- case "severity": return G(z.map((e) => ({
416
- id: e,
417
- name: A(e)
418
- })), c.default === void 0);
419
- case "number":
420
- case "duration": {
421
- let e = c.kind === "duration" ? Q(c.unit) : c.unit === void 0 ? "" : L(c.unit, D);
422
- return /* @__PURE__ */ N(u, {
423
- "data-invalid": V || void 0,
424
- children: [
425
- U,
426
- /* @__PURE__ */ N(v, { children: [/* @__PURE__ */ M(g, {
427
- id: t,
428
- inputMode: c.kind === "number" && c.integer === !0 ? "numeric" : "decimal",
429
- value: B,
430
- "aria-invalid": V || void 0,
431
- onChange: (e) => {
432
- C(e.target.value);
433
- }
434
- }), e === "" ? null : /* @__PURE__ */ M(b, {
435
- align: "inline-end",
436
- children: /* @__PURE__ */ M(y, { children: e })
437
- })] }),
438
- W
439
- ]
440
- });
441
- }
442
- case "timeOfDay":
443
- case "text":
444
- case "fileName":
445
- case "phone": return /* @__PURE__ */ N(u, {
446
- "data-invalid": V || void 0,
447
- children: [
448
- U,
449
- /* @__PURE__ */ M(_, {
450
- id: t,
451
- ...c.kind === "timeOfDay" ? {
452
- type: "time",
453
- step: 60
454
- } : c.kind === "text" ? { maxLength: c.maxLength } : c.kind === "phone" ? {
455
- type: "tel",
456
- autoComplete: "off"
457
- } : {
458
- maxLength: 12,
459
- autoComplete: "off",
460
- className: "font-mono uppercase"
461
- },
462
- value: B,
463
- "aria-invalid": V || void 0,
464
- onChange: (e) => {
465
- C(e.target.value);
466
- }
467
- }),
468
- W
469
- ]
470
- });
471
- case "boolean": return /* @__PURE__ */ N(u, {
472
- orientation: "horizontal",
473
- "data-invalid": V || void 0,
474
- children: [/* @__PURE__ */ M(h, {
475
- id: t,
476
- checked: S === !0,
477
- onCheckedChange: (e) => {
478
- C(e);
479
- }
480
- }), /* @__PURE__ */ N(f, { children: [/* @__PURE__ */ M(l, {
481
- htmlFor: t,
482
- children: I
483
- }), W] })]
484
- });
485
- case "weekdays": return /* @__PURE__ */ N(u, {
486
- "data-invalid": V || void 0,
487
- children: [
488
- /* @__PURE__ */ M(l, {
489
- id: t,
490
- children: I
491
- }),
492
- /* @__PURE__ */ M(a, {
493
- multiple: !0,
494
- variant: "outline",
495
- size: "sm",
496
- spacing: 0,
497
- className: "w-full",
498
- "aria-labelledby": t,
499
- value: (Array.isArray(S) ? S : []).map(String),
500
- onValueChange: (e) => {
501
- C(e.map(Number).filter((e) => Number.isInteger(e) && e >= 1 && e <= 7).sort((e, t) => e - t));
502
- },
503
- children: ae.map((e) => /* @__PURE__ */ M(i, {
504
- value: String(e),
505
- className: "min-w-0 flex-1 px-1",
506
- children: ce(e)
507
- }, e))
508
- }),
509
- W
510
- ]
511
- });
512
- case "recipients": {
513
- let e = typeof S == "object" && !Array.isArray(S) ? S : {
514
- kind: "none",
515
- roles: [],
516
- memberIds: []
517
- };
518
- return /* @__PURE__ */ N(u, {
519
- "data-invalid": V || void 0,
520
- children: [
521
- U,
522
- /* @__PURE__ */ N(s, {
523
- id: t,
524
- value: e.kind,
525
- onChange: (t) => {
526
- let n = [
527
- "none",
528
- "roles",
529
- "members"
530
- ].find((e) => e === t.target.value);
531
- n !== void 0 && C({
532
- ...e,
533
- kind: n
534
- });
535
- },
536
- children: [
537
- F ? /* @__PURE__ */ M(d, {
538
- value: "none",
539
- children: E("starter_recipients_none")
540
- }) : null,
541
- /* @__PURE__ */ M(d, {
542
- value: "roles",
543
- children: E("alarm_rule_recipients_roles")
544
- }),
545
- /* @__PURE__ */ M(d, {
546
- value: "members",
547
- children: E("alarm_rule_recipients_members")
548
- })
549
- ]
550
- }),
551
- e.kind === "roles" ? /* @__PURE__ */ M("div", {
552
- className: "flex flex-wrap gap-4",
553
- children: ie.map((t) => /* @__PURE__ */ N("label", {
554
- className: "flex items-center gap-2 text-sm",
555
- children: [/* @__PURE__ */ M(h, {
556
- checked: e.roles.includes(t),
557
- onCheckedChange: (n) => {
558
- let r = n ? [...e.roles, t] : e.roles.filter((e) => e !== t);
559
- C({
560
- ...e,
561
- roles: r
562
- });
563
- }
564
- }), P(t)]
565
- }, t))
566
- }) : null,
567
- e.kind === "members" ? /* @__PURE__ */ M(k, {
568
- members: w.members,
569
- value: e.memberIds,
570
- onChange: (t) => {
571
- C({
572
- ...e,
573
- memberIds: t
574
- });
575
- }
576
- }) : null,
577
- W
578
- ]
579
- });
580
- }
581
- }
582
- }
583
- export { ne as i, se as n, K as r, oe as t };