@nivaro/react 0.3.41 → 0.3.42

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 (96) hide show
  1. package/dist/components/LayoutForm.js +100 -98
  2. package/dist/full.css +1 -1
  3. package/dist/hooks/useSessionRecorder.js +1 -1
  4. package/dist/index.d.ts +644 -15
  5. package/dist/index.js +814 -775
  6. package/dist/shared/components/ActivityEntry.js +154 -0
  7. package/dist/shared/components/AudienceConfirmPanel.js +98 -0
  8. package/dist/shared/components/BackgroundRunOffer.js +43 -31
  9. package/dist/shared/components/BroadcastView.js +225 -204
  10. package/dist/shared/components/CollectionBrowserView.js +3924 -3584
  11. package/dist/shared/components/ConfigHistory.js +153 -0
  12. package/dist/shared/components/ConfigReadBack.js +65 -0
  13. package/dist/shared/components/DataTable.js +379 -346
  14. package/dist/shared/components/ForceReloadBanner.js +47 -40
  15. package/dist/shared/components/IdleReloadWatcher.js +69 -0
  16. package/dist/shared/components/ItemEditForm.js +4041 -3853
  17. package/dist/shared/components/MyWorkView.js +278 -213
  18. package/dist/shared/components/NotificationBell.js +130 -121
  19. package/dist/shared/components/ProfileView.js +776 -1003
  20. package/dist/shared/components/RecentRecordsRail.js +34 -16
  21. package/dist/shared/components/RecordReadView.js +500 -477
  22. package/dist/shared/components/Skeletons.js +199 -0
  23. package/dist/shared/components/SlowNotice.js +63 -0
  24. package/dist/shared/components/Term.js +23 -0
  25. package/dist/shared/components/WidgetSlot.js +350 -353
  26. package/dist/shared/components/access/PermissionSummary.js +106 -0
  27. package/dist/shared/components/bulk/BulkActionButtons.js +76 -73
  28. package/dist/shared/components/chat/ChatPanel.js +902 -886
  29. package/dist/shared/components/chat/MemberPaging.js +70 -0
  30. package/dist/shared/components/chat/RoomParts.js +147 -117
  31. package/dist/shared/components/chat/ScreenClip.js +73 -69
  32. package/dist/shared/components/chat/chat-core.js +449 -396
  33. package/dist/shared/components/chat/huddle/huddle-store.js +48 -43
  34. package/dist/shared/components/help-videos/api.js +2 -5
  35. package/dist/shared/components/help-videos/viewer/HelpVideoMatchChip.js +79 -0
  36. package/dist/shared/components/help-videos/viewer/matchChip.js +50 -0
  37. package/dist/shared/components/imports/CollectionImportPanel.js +139 -133
  38. package/dist/shared/components/imports/RunDetailSheet.js +222 -227
  39. package/dist/shared/components/integrations/console/ErrorExplanation.js +121 -0
  40. package/dist/shared/components/integrations/console/PartnerDetail.js +175 -174
  41. package/dist/shared/components/integrations/console/SubmissionRow.js +36 -34
  42. package/dist/shared/components/integrations/console/drill/SubmissionDrill.js +50 -48
  43. package/dist/shared/components/item-edit/FieldComments.js +212 -0
  44. package/dist/shared/components/item-edit/FieldRow.js +340 -336
  45. package/dist/shared/components/item-edit/RecordHeaderActions.js +23 -22
  46. package/dist/shared/components/item-edit/RelationCombobox.js +231 -222
  47. package/dist/shared/components/item-edit/RuleHiddenNotes.js +55 -0
  48. package/dist/shared/components/item-edit/field-comments-context.js +6 -0
  49. package/dist/shared/components/item-edit/field-sources.js +33 -0
  50. package/dist/shared/components/item-edit/rule-hidden.js +30 -0
  51. package/dist/shared/components/layout-editor/HistoryPanel.js +113 -96
  52. package/dist/shared/components/layout-editor/editors/cascade-filters.js +170 -145
  53. package/dist/shared/components/layout-editor/inspector/Breadcrumb.js +22 -18
  54. package/dist/shared/components/layout-editor/inspector/GroupInspector.js +177 -159
  55. package/dist/shared/components/layout-editor/inspector/PickerTab.js +35 -34
  56. package/dist/shared/components/layout-editor/inspector/RulesTab.js +124 -111
  57. package/dist/shared/components/layout-editor/inspector/kit.js +292 -277
  58. package/dist/shared/components/layout-editor/parity-keys.json.js +1 -1
  59. package/dist/shared/components/list/CopyListLinkButton.js +41 -0
  60. package/dist/shared/components/list/InlineEdit.js +363 -0
  61. package/dist/shared/components/notifications/NotificationCenterView.js +213 -181
  62. package/dist/shared/components/notifications/NotificationDetailBits.js +205 -82
  63. package/dist/shared/components/notifications/NotificationRulesEditor.js +515 -0
  64. package/dist/shared/components/notifications/TestMyRules.js +137 -0
  65. package/dist/shared/components/notifications/changes-lines.js +24 -0
  66. package/dist/shared/components/notifications/why-lines.js +64 -0
  67. package/dist/shared/components/panels/CommentPanel.js +316 -281
  68. package/dist/shared/components/panels/LegalHoldBanner.js +38 -0
  69. package/dist/shared/components/panels/PipelinePanel.js +201 -196
  70. package/dist/shared/components/panels/RevisionsPanel.js +496 -479
  71. package/dist/shared/components/pipeline/PipelineEditorView.js +1587 -1560
  72. package/dist/shared/components/pipeline/PipelineStateOwners.js +116 -103
  73. package/dist/shared/components/profile/PersonDidPanel.js +188 -0
  74. package/dist/shared/components/profile/PersonProfile.js +57 -52
  75. package/dist/shared/components/queue/QueueWorklist.js +1526 -1365
  76. package/dist/shared/hooks/useSlowReason.js +39 -0
  77. package/dist/shared/lib/activity-sentence.js +670 -0
  78. package/dist/shared/lib/config-sentences.js +418 -0
  79. package/dist/shared/lib/core-glossary.js +229 -0
  80. package/dist/shared/lib/error-hints.js +159 -0
  81. package/dist/shared/lib/error-message.js +105 -0
  82. package/dist/shared/lib/error-toast.js +22 -0
  83. package/dist/shared/lib/field-comments.js +25 -0
  84. package/dist/shared/lib/filter-sentence.js +261 -0
  85. package/dist/shared/lib/glossary.js +55 -48
  86. package/dist/shared/lib/idle-reload.js +138 -0
  87. package/dist/shared/lib/layout-resolve.js +42 -29
  88. package/dist/shared/lib/list-inline-edit.js +190 -0
  89. package/dist/shared/lib/list-link.js +147 -0
  90. package/dist/shared/lib/prefetch.js +259 -106
  91. package/dist/shared/lib/record-ref.js +72 -0
  92. package/dist/shared/lib/reload-holds.js +25 -0
  93. package/dist/shared/lib/safe-error.js +52 -24
  94. package/dist/shared/lib/skeleton-shapes.js +72 -0
  95. package/dist/shared/lib/slow-reason.js +63 -0
  96. package/package.json +1 -1
@@ -0,0 +1,199 @@
1
+ import { jsxs as u, jsx as e, Fragment as f } from "react/jsx-runtime";
2
+ import { cellWidth as b } from "../lib/skeleton-shapes.js";
3
+ import { cn as h } from "../lib/utils.js";
4
+ const k = "block animate-pulse bg-[hsl(var(--nvr-skeleton))] motion-reduce:animate-none";
5
+ function s({
6
+ shape: r,
7
+ width: i,
8
+ className: o,
9
+ style: a
10
+ }) {
11
+ return /* @__PURE__ */ e(
12
+ "span",
13
+ {
14
+ "aria-hidden": !0,
15
+ className: h(k, "h-3 rounded", r === "avatar" ? "h-5 rounded-full" : r === "badge" ? "h-4 rounded-full" : "", r === "bool" ? "h-3.5 rounded-[4px]" : "", o),
16
+ style: { width: i, ...a }
17
+ }
18
+ );
19
+ }
20
+ function w({
21
+ columns: r,
22
+ rows: i = 12,
23
+ rowClassName: o = "h-8",
24
+ cellClassName: a = "px-3 py-1.5",
25
+ leadingCells: t = 0,
26
+ trailingCells: l = 0,
27
+ cellStyle: d,
28
+ barClassName: n
29
+ }) {
30
+ return /* @__PURE__ */ e(f, { children: Array.from({ length: i }, (c, x) => /* @__PURE__ */ u(
31
+ "tr",
32
+ {
33
+ "data-skeleton-row": "",
34
+ "aria-hidden": !0,
35
+ className: h("border-b border-slate-100 dark:border-slate-800", o),
36
+ children: [
37
+ Array.from({ length: t }, (m, p) => /* @__PURE__ */ e("td", { className: a, children: /* @__PURE__ */ e(s, { shape: "bool", width: 14, className: n }) }, `l${p}`)),
38
+ r.map((m, p) => /* @__PURE__ */ e("td", { style: d == null ? void 0 : d(m.key), className: a, children: /* @__PURE__ */ e(
39
+ "span",
40
+ {
41
+ className: h(
42
+ "flex h-5 items-center",
43
+ m.shape === "number" ? "justify-end" : "justify-start"
44
+ ),
45
+ children: /* @__PURE__ */ e(
46
+ s,
47
+ {
48
+ shape: m.shape,
49
+ width: b(m.shape, x, p),
50
+ className: n
51
+ }
52
+ )
53
+ }
54
+ ) }, m.key)),
55
+ Array.from({ length: l }, (m, p) => /* @__PURE__ */ e("td", { className: a, children: /* @__PURE__ */ e(s, { width: 16, className: n }) }, `t${p}`))
56
+ ]
57
+ },
58
+ x
59
+ )) });
60
+ }
61
+ function v({
62
+ columns: r,
63
+ rows: i = 8,
64
+ header: o,
65
+ rowClassName: a = "h-9",
66
+ className: t
67
+ }) {
68
+ const l = (d) => d.width ? { width: d.width, flex: "none" } : { flex: `${d.grow ?? 1} 1 0%` };
69
+ return /* @__PURE__ */ u(
70
+ "div",
71
+ {
72
+ "data-skeleton": "list",
73
+ "aria-busy": "true",
74
+ className: h("divide-y divide-slate-100 dark:divide-slate-800", t),
75
+ children: [
76
+ o !== !1 && /* @__PURE__ */ e("div", { className: "flex h-9 items-center gap-3 bg-slate-50 px-3 dark:bg-muted", children: r.map((d, n) => /* @__PURE__ */ e(
77
+ "span",
78
+ {
79
+ className: "min-w-0 truncate text-[11px] font-medium text-slate-500 dark:text-slate-400",
80
+ style: l(d),
81
+ children: d.label ?? /* @__PURE__ */ e(s, { width: b("short", 0, n), className: "h-2.5" })
82
+ },
83
+ d.key
84
+ )) }),
85
+ Array.from({ length: i }, (d, n) => /* @__PURE__ */ e(
86
+ "div",
87
+ {
88
+ "aria-hidden": !0,
89
+ "data-skeleton-row": "",
90
+ className: h("flex items-center gap-3 px-3", a),
91
+ children: r.map((c, x) => /* @__PURE__ */ e(
92
+ "span",
93
+ {
94
+ className: h("min-w-0", c.shape === "number" && "flex justify-end"),
95
+ style: l(c),
96
+ children: /* @__PURE__ */ e(s, { shape: c.shape, width: b(c.shape, n, x) })
97
+ },
98
+ c.key
99
+ ))
100
+ },
101
+ n
102
+ ))
103
+ ]
104
+ }
105
+ );
106
+ }
107
+ function $({
108
+ plan: r,
109
+ className: i
110
+ }) {
111
+ const o = r && r.sections.length > 0 ? r.sections : [
112
+ {
113
+ key: "a",
114
+ label: null,
115
+ fields: [6, 6, 6, 6, 12].map((a, t) => ({ key: `a${t}`, span: a }))
116
+ },
117
+ {
118
+ key: "b",
119
+ label: null,
120
+ fields: [4, 4, 4, 12].map((a, t) => ({ key: `b${t}`, span: a }))
121
+ }
122
+ ];
123
+ return /* @__PURE__ */ u("div", { "data-skeleton": "form", "aria-busy": "true", className: h("space-y-4", i), children: [
124
+ r && r.tabs.length > 1 && /* @__PURE__ */ e("div", { className: "flex items-center gap-1 border-b border-slate-200 dark:border-border", children: r.tabs.map((a, t) => /* @__PURE__ */ e(
125
+ "span",
126
+ {
127
+ className: h(
128
+ "px-3 py-2 text-[12.5px] font-medium",
129
+ t === 0 ? "border-b-2 border-nvr-cyan text-slate-700 dark:text-slate-200" : "text-slate-400 dark:text-slate-500"
130
+ ),
131
+ children: a
132
+ },
133
+ `${a}-${t}`
134
+ )) }),
135
+ o.map((a, t) => /* @__PURE__ */ u(
136
+ "section",
137
+ {
138
+ "aria-hidden": !0,
139
+ className: "rounded-xl border border-slate-200 bg-white dark:border-border dark:bg-card",
140
+ children: [
141
+ /* @__PURE__ */ e("div", { className: "flex items-center gap-2 px-5 py-3", children: a.label ? /* @__PURE__ */ e("span", { className: "text-[13px] font-medium text-slate-400 dark:text-slate-500", children: a.label }) : /* @__PURE__ */ e(s, { width: b("short", t, 0), className: "h-3.5 max-w-[160px]" }) }),
142
+ /* @__PURE__ */ e("div", { className: "grid grid-cols-12 gap-x-6 gap-y-3 px-5 pb-5", children: a.fields.map((l, d) => /* @__PURE__ */ u(
143
+ "div",
144
+ {
145
+ className: "min-w-0 space-y-1.5",
146
+ style: { gridColumn: `span ${l.span}` },
147
+ children: [
148
+ /* @__PURE__ */ e(
149
+ s,
150
+ {
151
+ width: `${Math.round(30 + (d * 37 + t * 11) % 35)}%`,
152
+ className: "h-2.5"
153
+ }
154
+ ),
155
+ /* @__PURE__ */ e(s, { className: h("w-full rounded-md", l.tall ? "h-28" : "h-9") })
156
+ ]
157
+ },
158
+ l.key
159
+ )) })
160
+ ]
161
+ },
162
+ a.key
163
+ ))
164
+ ] });
165
+ }
166
+ function A({
167
+ title: r = !0,
168
+ kpi: i = !1,
169
+ chart: o = !1,
170
+ lines: a = 3,
171
+ className: t,
172
+ framed: l = !0
173
+ }) {
174
+ return /* @__PURE__ */ u(
175
+ "div",
176
+ {
177
+ "data-skeleton": "card",
178
+ "aria-busy": "true",
179
+ className: h(
180
+ "flex flex-col gap-2",
181
+ l && "rounded-lg border border-slate-200 bg-white p-3 dark:border-border dark:bg-card",
182
+ t
183
+ ),
184
+ children: [
185
+ r && /* @__PURE__ */ e(s, { width: "38%", className: "h-2.5" }),
186
+ i && /* @__PURE__ */ e(s, { width: "46%", className: "mt-0.5 h-6 rounded-md" }),
187
+ o && /* @__PURE__ */ e(s, { className: "h-full min-h-[96px] w-full flex-1 rounded-md" }),
188
+ !i && !o && Array.from({ length: a }, (d, n) => /* @__PURE__ */ e(s, { width: b("text", n, 3), className: "h-3" }, n))
189
+ ]
190
+ }
191
+ );
192
+ }
193
+ export {
194
+ A as CardSkeleton,
195
+ $ as FormSkeleton,
196
+ v as ListSkeleton,
197
+ s as SkeletonBar,
198
+ w as TableSkeletonRows
199
+ };
@@ -0,0 +1,63 @@
1
+ import { jsx as t, jsxs as o, Fragment as x } from "react/jsx-runtime";
2
+ import { Timer as c } from "lucide-react";
3
+ import { useSlowReason as p } from "../hooks/useSlowReason.js";
4
+ import { elapsedLabel as h } from "../lib/slow-reason.js";
5
+ import { cn as m } from "../lib/utils.js";
6
+ function N({
7
+ variant: e = "inline",
8
+ className: r,
9
+ children: l,
10
+ reason: a,
11
+ ...s
12
+ }) {
13
+ const n = p({ ...s, enabled: !a && s.enabled !== !1 }), i = a ?? n;
14
+ return i.slow ? /* @__PURE__ */ t(u, { reason: i, variant: e, className: r, extra: l }) : null;
15
+ }
16
+ function u({
17
+ reason: e,
18
+ variant: r = "inline",
19
+ className: l,
20
+ extra: a
21
+ }) {
22
+ var i, d;
23
+ const s = e.text ?? "This is taking a while", n = h(e.elapsedMs);
24
+ return r === "pill" ? /* @__PURE__ */ o(
25
+ "span",
26
+ {
27
+ role: "status",
28
+ "aria-live": "polite",
29
+ "data-slow-notice": ((i = e.answer) == null ? void 0 : i.kind) ?? "generic",
30
+ className: m(
31
+ "nvr-pop-in inline-flex max-w-[min(92vw,520px)] items-center gap-2 rounded-full border border-slate-200 bg-white px-3 py-1.5 text-[12px] font-medium text-slate-600 shadow-lg motion-reduce:animate-none dark:border-slate-700 dark:bg-slate-900 dark:text-slate-300",
32
+ l
33
+ ),
34
+ children: [
35
+ /* @__PURE__ */ t(c, { "aria-hidden": !0, className: "h-3.5 w-3.5 shrink-0 text-[#00a5cc]" }),
36
+ /* @__PURE__ */ t("span", { className: "min-w-0 truncate", children: s }),
37
+ /* @__PURE__ */ t("span", { className: "shrink-0 tabular-nums text-slate-400 dark:text-slate-500", children: n }),
38
+ a
39
+ ]
40
+ }
41
+ ) : /* @__PURE__ */ o(
42
+ "div",
43
+ {
44
+ role: "status",
45
+ "aria-live": "polite",
46
+ "data-slow-notice": ((d = e.answer) == null ? void 0 : d.kind) ?? "generic",
47
+ className: m("flex flex-wrap items-center gap-x-2 gap-y-1 text-[12px]", l),
48
+ children: [
49
+ /* @__PURE__ */ t(c, { "aria-hidden": !0, className: "h-3.5 w-3.5 shrink-0 text-slate-400 dark:text-slate-500" }),
50
+ /* @__PURE__ */ t("span", { className: "min-w-0 text-slate-600 dark:text-slate-300", children: e.text ? /* @__PURE__ */ o(x, { children: [
51
+ /* @__PURE__ */ t("span", { className: "text-slate-500 dark:text-slate-400", children: "This is taking a while · " }),
52
+ e.text
53
+ ] }) : s }),
54
+ /* @__PURE__ */ t("span", { className: "tabular-nums text-slate-400 dark:text-slate-500", children: n }),
55
+ a
56
+ ]
57
+ }
58
+ );
59
+ }
60
+ export {
61
+ N as SlowNotice,
62
+ u as SlowNoticeView
63
+ };
@@ -0,0 +1,23 @@
1
+ import { jsx as n, Fragment as m } from "react/jsx-runtime";
2
+ import { findGlossaryTerm as a, uiHint as c } from "../lib/core-glossary.js";
3
+ import { useGlossary as u } from "../lib/glossary.js";
4
+ const i = "cursor-help underline decoration-dotted decoration-1 underline-offset-[3px]";
5
+ function h({
6
+ id: t,
7
+ children: s,
8
+ className: e
9
+ }) {
10
+ const d = u({ withCore: !0 }), r = a(d, t), o = s ?? (r == null ? void 0 : r.term) ?? t;
11
+ return r ? /* @__PURE__ */ n(
12
+ "span",
13
+ {
14
+ "data-term": r.overrides ?? r.slug,
15
+ "data-tip": `${r.term}: ${c(r)}`,
16
+ className: e ? `${i} ${e}` : i,
17
+ children: o
18
+ }
19
+ ) : /* @__PURE__ */ n(m, { children: o });
20
+ }
21
+ export {
22
+ h as Term
23
+ };