@flamingo-stack/openframe-frontend-core 0.0.750 → 0.0.752
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-OFO75R2O.cjs → chunk-35RU25PJ.cjs} +130 -130
- package/dist/{chunk-ALPRQ3ZX.cjs → chunk-3GG3QAPT.cjs} +15 -15
- package/dist/{chunk-7RCTOWBA.cjs → chunk-4OTCQEP3.cjs} +28 -28
- package/dist/{chunk-XJ3J4UIS.cjs → chunk-4PEG4JTM.cjs} +19 -19
- package/dist/{chunk-3TELPOVH.cjs → chunk-7OEVVMAU.cjs} +2 -2
- package/dist/{chunk-CNUZLOVA.cjs → chunk-7WEGXNNS.cjs} +40 -40
- package/dist/{chunk-C6LPOYDM.cjs → chunk-AG4HR6Z6.cjs} +8 -8
- package/dist/{chunk-V3UJ6NDR.cjs → chunk-EM4OEWCM.cjs} +171 -171
- package/dist/{chunk-HOEVD6EN.cjs → chunk-EUQJ7QHW.cjs} +4 -4
- package/dist/{chunk-FP6HAJQV.cjs → chunk-G44V3UGE.cjs} +105 -105
- package/dist/{chunk-2YXOD2KL.cjs → chunk-H3RYUTND.cjs} +5 -0
- package/dist/{chunk-JPUTILTV.cjs → chunk-IPVJAML5.cjs} +94 -94
- package/dist/{chunk-KVSEWACW.cjs → chunk-J5G4CF2V.cjs} +28 -28
- package/dist/{chunk-2J2OBP4N.cjs → chunk-JI6NRWCC.cjs} +21 -21
- package/dist/{chunk-4O2KYY4K.cjs → chunk-KBJSZFBZ.cjs} +3 -3
- package/dist/{chunk-G7SBHMRR.cjs → chunk-KHKPLOU4.cjs} +69 -39
- package/dist/{chunk-45YRDD7W.cjs → chunk-KUVYVAS2.cjs} +22 -22
- package/dist/{chunk-UGCRLRCT.cjs → chunk-NO5UJLLQ.cjs} +2 -5
- package/dist/{chunk-WZX26ODJ.cjs → chunk-OXCGQV6B.cjs} +152 -133
- package/dist/{chunk-FHT7SMA7.cjs → chunk-OXEAN3EQ.cjs} +47 -47
- package/dist/{chunk-E3KFEOFA.cjs → chunk-P4ODFQGA.cjs} +7 -7
- package/dist/{chunk-AW6GP3JK.cjs → chunk-RDH63XXW.cjs} +83 -83
- package/dist/{chunk-CLAJIQ7E.cjs → chunk-U2AE4UG7.cjs} +19 -19
- package/dist/{chunk-6KEJQR6L.cjs → chunk-VD3XBUQR.cjs} +797 -797
- package/dist/{chunk-4FWURR3W.cjs → chunk-VUWPLQBY.cjs} +2 -2
- package/dist/{chunk-YL62VAHC.cjs → chunk-WQCLN27R.cjs} +6 -6
- package/dist/{chunk-GVETSV7H.cjs → chunk-XADJG35G.cjs} +48 -48
- package/dist/{chunk-BO6ZOAPB.cjs → chunk-Y6PVZRYL.cjs} +12 -12
- package/dist/{chunk-DGEB5GUZ.cjs → chunk-ZVOXBSDP.cjs} +2 -2
- package/dist/{chunk-34TWK3JE.cjs → chunk-ZYRRRKSZ.cjs} +3 -3
- package/dist/{cloud-tenants-E4JSG3GH.cjs → cloud-tenants-WAOMZZQ2.cjs} +13 -13
- package/dist/components/case-studies/index.cjs +26 -26
- package/dist/components/chat/hooks/use-jetstream-dialog-subscription.d.ts +7 -5
- package/dist/components/chat/hooks/use-jetstream-dialog-subscription.d.ts.map +1 -1
- package/dist/components/chat/hooks/use-jetstream-dialog-subscription.js +33 -14
- package/dist/components/chat/index.cjs +8 -8
- package/dist/components/chat/types/api.types.d.ts +27 -8
- package/dist/components/chat/types/api.types.d.ts.map +1 -1
- package/dist/components/chat/types/network.types.d.ts +2 -1
- package/dist/components/chat/types/network.types.d.ts.map +1 -1
- package/dist/components/contact/index.cjs +14 -14
- package/dist/components/docs/index.cjs +17 -17
- package/dist/components/embeds/index.cjs +14 -14
- package/dist/components/faq/index.cjs +15 -15
- package/dist/components/features/index.cjs +13 -13
- package/dist/components/help-center-pages/index.cjs +123 -123
- package/dist/components/index.cjs +64 -64
- package/dist/components/loading/loading-region.d.ts.map +1 -1
- package/dist/components/loading/loading-region.js +2 -5
- package/dist/components/loading/unified-skeleton.d.ts +2 -0
- package/dist/components/loading/unified-skeleton.d.ts.map +1 -1
- package/dist/components/loading/unified-skeleton.js +5 -0
- package/dist/components/meeting-scheduler/index.cjs +79 -79
- package/dist/components/navigation/index.cjs +16 -16
- package/dist/components/onboarding-guides/index.cjs +16 -16
- package/dist/components/product-demo/index.cjs +12 -12
- package/dist/components/related-content/index.cjs +7 -7
- package/dist/components/tickets/index.cjs +19 -19
- package/dist/components/ui/file-manager/index.cjs +30 -30
- package/dist/components/ui/index.cjs +13 -13
- package/dist/{devices-AVRQGB2N.cjs → devices-VFEPXW2N.cjs} +14 -14
- package/dist/{embeddable-chat-SNYQSMS7.cjs → embeddable-chat-BYQBABDV.cjs} +74 -74
- package/dist/hooks/index.cjs +3 -3
- package/dist/index.cjs +17 -17
- package/dist/{knowledge-S3CNISQH.cjs → knowledge-4TE7AWZX.cjs} +14 -14
- package/dist/{logs-WDLOKDXT.cjs → logs-3B2P3JXN.cjs} +21 -21
- package/dist/nats/index.cjs +2 -2
- package/dist/nats/nats.d.ts +33 -7
- package/dist/nats/nats.d.ts.map +1 -1
- package/dist/nats/nats.js +41 -11
- package/dist/{policies-STML7NEZ.cjs → policies-DVI6V22X.cjs} +17 -17
- package/dist/{remote-session-ZKP2W3IS.cjs → remote-session-57DGC4X3.cjs} +6 -6
- package/dist/{scripts-HO53VYGX.cjs → scripts-JJ2BVYQ5.cjs} +20 -20
- package/dist/{software-update-4VTK7LWQ.cjs → software-update-BN23RATE.cjs} +17 -17
- package/dist/{tickets-board-BNW4AYFL.cjs → tickets-board-EP6L3BSV.cjs} +7 -7
- package/package.json +1 -1
- package/src/components/chat/hooks/use-jetstream-dialog-subscription.ts +59 -23
- package/src/components/chat/types/api.types.ts +27 -8
- package/src/components/chat/types/network.types.ts +2 -1
- package/src/components/loading/loading-region.tsx +4 -9
- package/src/components/loading/unified-skeleton.tsx +13 -0
- package/src/nats/nats.ts +91 -20
|
@@ -13,23 +13,23 @@ var _chunkDKOLQPE7cjs = require('./chunk-DKOLQPE7.cjs');
|
|
|
13
13
|
|
|
14
14
|
|
|
15
15
|
|
|
16
|
-
var
|
|
17
|
-
require('./chunk-
|
|
16
|
+
var _chunkVD3XBUQRcjs = require('./chunk-VD3XBUQR.cjs');
|
|
17
|
+
require('./chunk-AG4HR6Z6.cjs');
|
|
18
18
|
require('./chunk-NTGIQP7O.cjs');
|
|
19
19
|
|
|
20
20
|
|
|
21
|
-
var
|
|
21
|
+
var _chunk3GG3QAPTcjs = require('./chunk-3GG3QAPT.cjs');
|
|
22
22
|
require('./chunk-HQQE74RO.cjs');
|
|
23
23
|
require('./chunk-DEY6XXGO.cjs');
|
|
24
|
-
require('./chunk-
|
|
24
|
+
require('./chunk-VUWPLQBY.cjs');
|
|
25
25
|
require('./chunk-LU7TD6QS.cjs');
|
|
26
26
|
require('./chunk-24I6RFVU.cjs');
|
|
27
27
|
require('./chunk-A6P6DHEZ.cjs');
|
|
28
28
|
require('./chunk-MZ4KBSH7.cjs');
|
|
29
|
-
require('./chunk-
|
|
29
|
+
require('./chunk-7OEVVMAU.cjs');
|
|
30
30
|
require('./chunk-YUMFVQIN.cjs');
|
|
31
|
-
require('./chunk-
|
|
32
|
-
require('./chunk-
|
|
31
|
+
require('./chunk-OXCGQV6B.cjs');
|
|
32
|
+
require('./chunk-EM4OEWCM.cjs');
|
|
33
33
|
require('./chunk-LVO7FALW.cjs');
|
|
34
34
|
require('./chunk-3RFQPQ7Z.cjs');
|
|
35
35
|
require('./chunk-YRULLK7N.cjs');
|
|
@@ -1832,8 +1832,8 @@ require('./chunk-7DNL734S.cjs');
|
|
|
1832
1832
|
require('./chunk-WWUSFOJ7.cjs');
|
|
1833
1833
|
require('./chunk-SKI6NKOE.cjs');
|
|
1834
1834
|
require('./chunk-EWPR7662.cjs');
|
|
1835
|
-
require('./chunk-
|
|
1836
|
-
require('./chunk-
|
|
1835
|
+
require('./chunk-4PEG4JTM.cjs');
|
|
1836
|
+
require('./chunk-35RU25PJ.cjs');
|
|
1837
1837
|
require('./chunk-QYLIHZKZ.cjs');
|
|
1838
1838
|
require('./chunk-63N4FN5V.cjs');
|
|
1839
1839
|
require('./chunk-L2IQESTQ.cjs');
|
|
@@ -1859,15 +1859,15 @@ require('./chunk-K6VWTUCH.cjs');
|
|
|
1859
1859
|
require('./chunk-MGF3FUKD.cjs');
|
|
1860
1860
|
require('./chunk-Z74QE57T.cjs');
|
|
1861
1861
|
require('./chunk-XZJCBIYR.cjs');
|
|
1862
|
-
require('./chunk-
|
|
1862
|
+
require('./chunk-NO5UJLLQ.cjs');
|
|
1863
1863
|
require('./chunk-2QMBXGMQ.cjs');
|
|
1864
1864
|
require('./chunk-V45KLJQP.cjs');
|
|
1865
|
-
require('./chunk-
|
|
1865
|
+
require('./chunk-KHKPLOU4.cjs');
|
|
1866
1866
|
require('./chunk-L4UI63K6.cjs');
|
|
1867
1867
|
require('./chunk-OF336YWG.cjs');
|
|
1868
1868
|
require('./chunk-3LU4UFPS.cjs');
|
|
1869
1869
|
require('./chunk-RB6BSE3O.cjs');
|
|
1870
|
-
require('./chunk-
|
|
1870
|
+
require('./chunk-H3RYUTND.cjs');
|
|
1871
1871
|
require('./chunk-3ATAYP36.cjs');
|
|
1872
1872
|
|
|
1873
1873
|
// src/components/product-demo/screens/scripts.tsx
|
|
@@ -1997,8 +1997,8 @@ function buildScriptsFixture(cast) {
|
|
|
1997
1997
|
var _jsxruntime = require('react/jsx-runtime');
|
|
1998
1998
|
var WIDE_HIDDEN_COLUMNS = ["result", "open"];
|
|
1999
1999
|
var COMPACT_COLUMNS = [
|
|
2000
|
-
{ ...
|
|
2001
|
-
|
|
2000
|
+
{ ..._chunkVD3XBUQRcjs.EXECUTION_COLUMNS.machineId, width: "flex-1 min-w-0", hideAt: void 0 },
|
|
2001
|
+
_chunkVD3XBUQRcjs.EXECUTION_COLUMNS.status
|
|
2002
2002
|
];
|
|
2003
2003
|
var COMPACT_ROWS = 4;
|
|
2004
2004
|
var TOKEN_CLASS = {
|
|
@@ -2048,16 +2048,16 @@ function ScriptCodePicture({ script }) {
|
|
|
2048
2048
|
children: [
|
|
2049
2049
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-col gap-[var(--spacing-system-xxs)] border-b border-ods-border p-[var(--spacing-system-m)]", children: [
|
|
2050
2050
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex min-w-0 items-center justify-between gap-[var(--spacing-system-m)]", children: [
|
|
2051
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
2051
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk3GG3QAPTcjs.TruncateText, { variant: "h4", children: script.name }),
|
|
2052
2052
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: "flex shrink-0 items-center gap-[var(--spacing-system-xxs)] text-ods-text-primary text-h6", children: [
|
|
2053
2053
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkTPKKRHUMcjs.TimerIcon, { className: "size-4 text-ods-text-secondary" }),
|
|
2054
2054
|
`${schedule.repeat} ${schedule.time} \xB7 ${schedule.deviceCount} devices`
|
|
2055
2055
|
] })
|
|
2056
2056
|
] }),
|
|
2057
2057
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex min-w-0 items-center justify-between gap-[var(--spacing-system-m)]", children: [
|
|
2058
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
2058
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk3GG3QAPTcjs.TruncateText, { variant: "h6", tone: "secondary", children: `Written by ${provenance.author} \xB7 approved by ${provenance.approver}` }),
|
|
2059
2059
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
2060
|
-
|
|
2060
|
+
_chunkVD3XBUQRcjs.ScriptShellBadge,
|
|
2061
2061
|
{
|
|
2062
2062
|
value: script.shellType,
|
|
2063
2063
|
className: "shrink-0 text-ods-text-secondary text-h6",
|
|
@@ -2081,7 +2081,7 @@ function ScriptsScreen({ compact = false }) {
|
|
|
2081
2081
|
return (
|
|
2082
2082
|
// Four runs of the card's row height fill the frame; the padding is what is left round them.
|
|
2083
2083
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "h-full overflow-hidden bg-ods-bg p-[var(--spacing-system-xsf)]", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
2084
|
-
|
|
2084
|
+
_chunkVD3XBUQRcjs.ScriptExecutionsTable,
|
|
2085
2085
|
{
|
|
2086
2086
|
rows: fixture.executions.slice(0, COMPACT_ROWS),
|
|
2087
2087
|
columns: COMPACT_COLUMNS,
|
|
@@ -2091,13 +2091,13 @@ function ScriptsScreen({ compact = false }) {
|
|
|
2091
2091
|
) })
|
|
2092
2092
|
);
|
|
2093
2093
|
}
|
|
2094
|
-
const renderOutput = (row) => row.id === fixture.openExecutionId ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
2094
|
+
const renderOutput = (row) => row.id === fixture.openExecutionId ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkVD3XBUQRcjs.ScriptExecutionResult, { result: row.result, empty: "\u2014" }) : null;
|
|
2095
2095
|
return (
|
|
2096
2096
|
// The frame's tighter padding and no header row: the output opened under a run needs the height.
|
|
2097
2097
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex h-full gap-[var(--spacing-system-m)] overflow-hidden bg-ods-bg p-[var(--spacing-system-m)]", children: [
|
|
2098
2098
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "w-[39%] shrink-0", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ScriptCodePicture, { script: fixture.script }) }),
|
|
2099
2099
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "min-w-0 flex-1 overflow-hidden", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
2100
|
-
|
|
2100
|
+
_chunkVD3XBUQRcjs.ScriptExecutionsTable,
|
|
2101
2101
|
{
|
|
2102
2102
|
rows: fixture.executions,
|
|
2103
2103
|
hideColumns: WIDE_HIDDEN_COLUMNS,
|
|
@@ -15,23 +15,23 @@ var _chunkDKOLQPE7cjs = require('./chunk-DKOLQPE7.cjs');
|
|
|
15
15
|
|
|
16
16
|
|
|
17
17
|
|
|
18
|
-
var
|
|
19
|
-
require('./chunk-
|
|
18
|
+
var _chunkVD3XBUQRcjs = require('./chunk-VD3XBUQR.cjs');
|
|
19
|
+
require('./chunk-AG4HR6Z6.cjs');
|
|
20
20
|
require('./chunk-NTGIQP7O.cjs');
|
|
21
21
|
|
|
22
22
|
|
|
23
|
-
var
|
|
23
|
+
var _chunk3GG3QAPTcjs = require('./chunk-3GG3QAPT.cjs');
|
|
24
24
|
require('./chunk-HQQE74RO.cjs');
|
|
25
25
|
require('./chunk-DEY6XXGO.cjs');
|
|
26
|
-
require('./chunk-
|
|
26
|
+
require('./chunk-VUWPLQBY.cjs');
|
|
27
27
|
require('./chunk-LU7TD6QS.cjs');
|
|
28
28
|
require('./chunk-24I6RFVU.cjs');
|
|
29
29
|
require('./chunk-A6P6DHEZ.cjs');
|
|
30
30
|
require('./chunk-MZ4KBSH7.cjs');
|
|
31
|
-
require('./chunk-
|
|
31
|
+
require('./chunk-7OEVVMAU.cjs');
|
|
32
32
|
require('./chunk-YUMFVQIN.cjs');
|
|
33
|
-
require('./chunk-
|
|
34
|
-
require('./chunk-
|
|
33
|
+
require('./chunk-OXCGQV6B.cjs');
|
|
34
|
+
require('./chunk-EM4OEWCM.cjs');
|
|
35
35
|
require('./chunk-LVO7FALW.cjs');
|
|
36
36
|
require('./chunk-3RFQPQ7Z.cjs');
|
|
37
37
|
require('./chunk-YRULLK7N.cjs');
|
|
@@ -1832,8 +1832,8 @@ require('./chunk-7DNL734S.cjs');
|
|
|
1832
1832
|
require('./chunk-WWUSFOJ7.cjs');
|
|
1833
1833
|
require('./chunk-SKI6NKOE.cjs');
|
|
1834
1834
|
require('./chunk-EWPR7662.cjs');
|
|
1835
|
-
require('./chunk-
|
|
1836
|
-
require('./chunk-
|
|
1835
|
+
require('./chunk-4PEG4JTM.cjs');
|
|
1836
|
+
require('./chunk-35RU25PJ.cjs');
|
|
1837
1837
|
require('./chunk-QYLIHZKZ.cjs');
|
|
1838
1838
|
require('./chunk-63N4FN5V.cjs');
|
|
1839
1839
|
require('./chunk-L2IQESTQ.cjs');
|
|
@@ -1859,15 +1859,15 @@ require('./chunk-K6VWTUCH.cjs');
|
|
|
1859
1859
|
require('./chunk-MGF3FUKD.cjs');
|
|
1860
1860
|
require('./chunk-Z74QE57T.cjs');
|
|
1861
1861
|
require('./chunk-XZJCBIYR.cjs');
|
|
1862
|
-
require('./chunk-
|
|
1862
|
+
require('./chunk-NO5UJLLQ.cjs');
|
|
1863
1863
|
require('./chunk-2QMBXGMQ.cjs');
|
|
1864
1864
|
require('./chunk-V45KLJQP.cjs');
|
|
1865
|
-
require('./chunk-
|
|
1865
|
+
require('./chunk-KHKPLOU4.cjs');
|
|
1866
1866
|
require('./chunk-L4UI63K6.cjs');
|
|
1867
1867
|
require('./chunk-OF336YWG.cjs');
|
|
1868
1868
|
require('./chunk-3LU4UFPS.cjs');
|
|
1869
1869
|
require('./chunk-RB6BSE3O.cjs');
|
|
1870
|
-
require('./chunk-
|
|
1870
|
+
require('./chunk-H3RYUTND.cjs');
|
|
1871
1871
|
require('./chunk-3ATAYP36.cjs');
|
|
1872
1872
|
|
|
1873
1873
|
// src/components/product-demo/screens/software-update.tsx
|
|
@@ -1922,14 +1922,14 @@ var noop = () => {
|
|
|
1922
1922
|
var HIDDEN_WHEN_COMPACT = ["organization"];
|
|
1923
1923
|
function StaticPackageField({ value }) {
|
|
1924
1924
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1925
|
-
|
|
1925
|
+
_chunk3GG3QAPTcjs.Autocomplete,
|
|
1926
1926
|
{
|
|
1927
|
-
label:
|
|
1927
|
+
label: _chunkVD3XBUQRcjs.PACKAGE_SEARCH_LABEL,
|
|
1928
1928
|
labelVariant: "large",
|
|
1929
1929
|
options: value ? [{ value: value.id, label: value.name, description: _nullishCoalesce(value.description, () => ( void 0)) }] : [],
|
|
1930
1930
|
value: _nullishCoalesce(_optionalChain([value, 'optionalAccess', _ => _.id]), () => ( null)),
|
|
1931
1931
|
onChange: noop,
|
|
1932
|
-
placeholder:
|
|
1932
|
+
placeholder: _chunkVD3XBUQRcjs.PACKAGE_SEARCH_PLACEHOLDER
|
|
1933
1933
|
}
|
|
1934
1934
|
);
|
|
1935
1935
|
}
|
|
@@ -1943,7 +1943,7 @@ function SoftwareUpdateScreen({ compact = false }) {
|
|
|
1943
1943
|
[fixture.devices, fixture.selectedIds]
|
|
1944
1944
|
);
|
|
1945
1945
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "h-full bg-ods-bg pt-[var(--spacing-system-l)]", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "h-full", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1946
|
-
|
|
1946
|
+
_chunkVD3XBUQRcjs.SoftwareActionForm,
|
|
1947
1947
|
{
|
|
1948
1948
|
action: fixture.action,
|
|
1949
1949
|
showHeader: false,
|
|
@@ -1955,7 +1955,7 @@ function SoftwareUpdateScreen({ compact = false }) {
|
|
|
1955
1955
|
initialValues: fixture.initialValues,
|
|
1956
1956
|
renderPackageSearch,
|
|
1957
1957
|
renderDevicePicker: () => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1958
|
-
|
|
1958
|
+
_chunkVD3XBUQRcjs.DeviceSelector,
|
|
1959
1959
|
{
|
|
1960
1960
|
devices: selected,
|
|
1961
1961
|
loading: false,
|
|
@@ -10,7 +10,7 @@ var _chunkDKOLQPE7cjs = require('./chunk-DKOLQPE7.cjs');
|
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
|
|
13
|
-
var
|
|
13
|
+
var _chunkAG4HR6Z6cjs = require('./chunk-AG4HR6Z6.cjs');
|
|
14
14
|
require('./chunk-LU7TD6QS.cjs');
|
|
15
15
|
require('./chunk-LVO7FALW.cjs');
|
|
16
16
|
require('./chunk-P6F6PHVK.cjs');
|
|
@@ -1825,7 +1825,7 @@ require('./chunk-2QMBXGMQ.cjs');
|
|
|
1825
1825
|
require('./chunk-V45KLJQP.cjs');
|
|
1826
1826
|
require('./chunk-3LU4UFPS.cjs');
|
|
1827
1827
|
require('./chunk-RB6BSE3O.cjs');
|
|
1828
|
-
require('./chunk-
|
|
1828
|
+
require('./chunk-H3RYUTND.cjs');
|
|
1829
1829
|
require('./chunk-3ATAYP36.cjs');
|
|
1830
1830
|
|
|
1831
1831
|
// src/components/product-demo/screens/tickets-board.tsx
|
|
@@ -1840,7 +1840,7 @@ function buildTicketsBoardFixture(cast) {
|
|
|
1840
1840
|
const dana = assignee(cast.person("dana"));
|
|
1841
1841
|
const alex = assignee(cast.person("alex"));
|
|
1842
1842
|
return [
|
|
1843
|
-
|
|
1843
|
+
_chunkAG4HR6Z6cjs.columnFromTicketStatus.call(void 0, "ACTIVE", [
|
|
1844
1844
|
ticket("tk-1051", "Printer offline at the front desk", "ACTIVE", {
|
|
1845
1845
|
ticketNumber: "1051",
|
|
1846
1846
|
agent: "fae",
|
|
@@ -1858,7 +1858,7 @@ function buildTicketsBoardFixture(cast) {
|
|
|
1858
1858
|
tags: ["onboarding"]
|
|
1859
1859
|
})
|
|
1860
1860
|
]),
|
|
1861
|
-
|
|
1861
|
+
_chunkAG4HR6Z6cjs.columnFromTicketStatus.call(void 0, "TECH_REQUIRED", [
|
|
1862
1862
|
ticket("tk-1049", "Acrobat Pro for Maya", "TECH_REQUIRED", {
|
|
1863
1863
|
ticketNumber: "1049",
|
|
1864
1864
|
agent: "fae",
|
|
@@ -1882,7 +1882,7 @@ function buildTicketsBoardFixture(cast) {
|
|
|
1882
1882
|
escalatedByUser: true
|
|
1883
1883
|
})
|
|
1884
1884
|
]),
|
|
1885
|
-
|
|
1885
|
+
_chunkAG4HR6Z6cjs.columnFromTicketStatus.call(void 0, "ON_HOLD", [
|
|
1886
1886
|
ticket("tk-1046", "Replace the conference room display", "ON_HOLD", {
|
|
1887
1887
|
ticketNumber: "1046",
|
|
1888
1888
|
organizationName: _chunkDKOLQPE7cjs.DEMO_ORGANIZATIONS.acme.name,
|
|
@@ -1891,7 +1891,7 @@ function buildTicketsBoardFixture(cast) {
|
|
|
1891
1891
|
activity: { kind: "waiting-external" }
|
|
1892
1892
|
})
|
|
1893
1893
|
]),
|
|
1894
|
-
|
|
1894
|
+
_chunkAG4HR6Z6cjs.columnFromTicketStatus.call(void 0,
|
|
1895
1895
|
"RESOLVED",
|
|
1896
1896
|
[
|
|
1897
1897
|
ticket("tk-1048", "Slow laptop", "RESOLVED", {
|
|
@@ -1927,7 +1927,7 @@ function TicketsBoardScreen({ compact = false }) {
|
|
|
1927
1927
|
const cast = _chunkSTEJZPIOcjs.useProductDemoCast.call(void 0, );
|
|
1928
1928
|
const board = _react.useMemo.call(void 0, () => buildTicketsBoardFixture(cast), [cast]);
|
|
1929
1929
|
const columns = compact ? board.filter((column) => column.id !== "ON_HOLD") : board;
|
|
1930
|
-
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "h-full bg-ods-bg p-[var(--spacing-system-m)]", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1930
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "h-full bg-ods-bg p-[var(--spacing-system-m)]", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkAG4HR6Z6cjs.Board, { columns, onChange: noop, initialCollapsed: compact ? void 0 : FOLDED }) });
|
|
1931
1931
|
}
|
|
1932
1932
|
|
|
1933
1933
|
|
package/package.json
CHANGED
|
@@ -49,14 +49,16 @@ const RECOVERY_REPORT_FLOOR_MS = 5_000;
|
|
|
49
49
|
* - Subject: `chat.{dialogId}.{topic}`
|
|
50
50
|
* - When `optStartSeq` is a number, the consumer resumes at `optStartSeq + 1`
|
|
51
51
|
* (`DeliverPolicy.ByStartSequence`). When null/undefined, it live-tails
|
|
52
|
-
* (`DeliverPolicy.New`).
|
|
52
|
+
* (`DeliverPolicy.New`) from whenever the server creates the consumer.
|
|
53
53
|
* - On reconnect, the consumer is recreated starting from the highest stream
|
|
54
54
|
* sequence we've already observed + 1, so no chunk is replayed or skipped.
|
|
55
|
-
* - Consumer is ephemeral with `AckPolicy.None` and
|
|
56
|
-
* inactivity threshold (
|
|
55
|
+
* - Consumer is ephemeral with `AckPolicy.None` and nats.ws's default
|
|
56
|
+
* inactivity threshold (`inactiveThresholdMs` only reaches a live-tail
|
|
57
|
+
* consumer — see the option).
|
|
57
58
|
* - `reconnectionCount` also counts consumer recreations and post-absence
|
|
58
|
-
* resyncs, not just NATS reconnects — see the counter's docs.
|
|
59
|
-
*
|
|
59
|
+
* resyncs, not just NATS reconnects — see the counter's docs.
|
|
60
|
+
* - `caughtUpCount` is when callers refetch persisted history after a gap —
|
|
61
|
+
* not `reconnectionCount` (see its docs).
|
|
60
62
|
*/
|
|
61
63
|
export function useJetStreamDialogSubscription({
|
|
62
64
|
enabled,
|
|
@@ -84,6 +86,11 @@ export function useJetStreamDialogSubscription({
|
|
|
84
86
|
// churn — and churn that can feed itself, since each new consumer can report
|
|
85
87
|
// its own recoveries. Callers see the two summed (see the return).
|
|
86
88
|
const [recoveryCount, setRecoveryCount] = useState(0);
|
|
89
|
+
const [caughtUpCount, setCaughtUpCount] = useState(0);
|
|
90
|
+
// The dialog this hook last opened a tail for, and the reconnection count it
|
|
91
|
+
// opened it at: a consumer created for the same dialog at a higher count is
|
|
92
|
+
// one coming back after a gap, which owes the caller a history refetch.
|
|
93
|
+
const tailOpenedAtRef = useRef<{ dialogId: string; count: number } | null>(null);
|
|
87
94
|
// The highest sequence seen, TAGGED with the dialog it belongs to. The tag is
|
|
88
95
|
// what makes the per-dialog reset implicit — a sequence from another
|
|
89
96
|
// conversation simply stops matching — so the dialog-change effect below no
|
|
@@ -381,11 +388,28 @@ export function useJetStreamDialogSubscription({
|
|
|
381
388
|
const initialOptStart = optStartSeqRef.current;
|
|
382
389
|
const startSeq = resumeSeq != null ? resumeSeq + 1 : initialOptStart != null ? initialOptStart + 1 : undefined;
|
|
383
390
|
|
|
391
|
+
// A first consumer reports nothing: the caller has just loaded the history
|
|
392
|
+
// it resumes after. A reconnect or resync recreates it at a higher count,
|
|
393
|
+
// and from then on the caller's history may predate a gap.
|
|
394
|
+
const opened = tailOpenedAtRef.current;
|
|
395
|
+
let owesCatchUp = opened !== null && opened.dialogId === dialogId && reconnectionCount > opened.count;
|
|
396
|
+
if (!owesCatchUp) tailOpenedAtRef.current = { dialogId, count: reconnectionCount };
|
|
397
|
+
|
|
384
398
|
let cancelled = false;
|
|
399
|
+
// Settles an owed catch-up once the replay is in, or once there can be none
|
|
400
|
+
// (a failed resume, below) — never as the tail comes back: a refetch that
|
|
401
|
+
// lands first merges without the turns the replay is still delivering, and
|
|
402
|
+
// they then render twice.
|
|
403
|
+
const settleCatchUp = () => {
|
|
404
|
+
if (cancelled || !owesCatchUp) return;
|
|
405
|
+
owesCatchUp = false;
|
|
406
|
+
setCaughtUpCount(c => c + 1);
|
|
407
|
+
};
|
|
385
408
|
|
|
386
409
|
void (async () => {
|
|
410
|
+
let handle: JetStreamSubscriptionHandle;
|
|
387
411
|
try {
|
|
388
|
-
|
|
412
|
+
handle = await client.subscribeJetStreamOrdered(
|
|
389
413
|
msg => {
|
|
390
414
|
if (cancelled) return;
|
|
391
415
|
const streamSeq = msg.info.streamSequence;
|
|
@@ -424,27 +448,39 @@ export function useJetStreamDialogSubscription({
|
|
|
424
448
|
const now = Date.now();
|
|
425
449
|
if (now - lastRecoveryReportRef.current < RECOVERY_REPORT_FLOOR_MS) return;
|
|
426
450
|
lastRecoveryReportRef.current = now;
|
|
451
|
+
owesCatchUp = true;
|
|
427
452
|
setRecoveryCount(c => c + 1);
|
|
428
453
|
},
|
|
454
|
+
onCaughtUp: settleCatchUp,
|
|
429
455
|
},
|
|
430
456
|
);
|
|
457
|
+
} catch {
|
|
458
|
+
if (cancelled) return;
|
|
459
|
+
setIsSubscribed(false);
|
|
460
|
+
// With no consumer the refetch cannot wait for a replay. The next resume
|
|
461
|
+
// still owes one (`tailOpenedAtRef` did not move), and its own catch-up
|
|
462
|
+
// refetch clears what its replay re-renders meanwhile.
|
|
463
|
+
settleCatchUp();
|
|
464
|
+
return;
|
|
465
|
+
}
|
|
431
466
|
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
}
|
|
438
|
-
return;
|
|
467
|
+
if (cancelled) {
|
|
468
|
+
try {
|
|
469
|
+
handle.unsubscribe();
|
|
470
|
+
} catch {
|
|
471
|
+
// ignore
|
|
439
472
|
}
|
|
473
|
+
return;
|
|
474
|
+
}
|
|
440
475
|
|
|
441
|
-
|
|
442
|
-
|
|
476
|
+
subscriptionRef.current = handle;
|
|
477
|
+
setIsSubscribed(true);
|
|
478
|
+
// A host callback, outside the subscribe's catch: a throw there must not
|
|
479
|
+
// read as a failed subscribe and settle the catch-up before the replay.
|
|
480
|
+
try {
|
|
443
481
|
onSubscribedRef.current?.();
|
|
444
|
-
} catch {
|
|
445
|
-
|
|
446
|
-
setIsSubscribed(false);
|
|
447
|
-
}
|
|
482
|
+
} catch (e) {
|
|
483
|
+
console.warn('[JetStream] onSubscribed threw:', e);
|
|
448
484
|
}
|
|
449
485
|
})();
|
|
450
486
|
|
|
@@ -464,14 +500,14 @@ export function useJetStreamDialogSubscription({
|
|
|
464
500
|
}, [enabled, dialogId, isConnected, streamName, topic, reconnectionCount]);
|
|
465
501
|
|
|
466
502
|
// One counter for every way the tail comes back — reconnect, consumer
|
|
467
|
-
// recreation, post-absence resync
|
|
468
|
-
//
|
|
469
|
-
//
|
|
470
|
-
// fires for either.
|
|
503
|
+
// recreation, post-absence resync. The last two are the quiet ones; no
|
|
504
|
+
// connection event fires for either. `caughtUpCount` counts the same events,
|
|
505
|
+
// each once its replay is in or once it could not be resumed (see its docs).
|
|
471
506
|
return {
|
|
472
507
|
isConnected,
|
|
473
508
|
isSubscribed,
|
|
474
509
|
reconnectionCount: reconnectionCount + recoveryCount,
|
|
510
|
+
caughtUpCount,
|
|
475
511
|
currentStreamSeq,
|
|
476
512
|
};
|
|
477
513
|
}
|
|
@@ -103,8 +103,9 @@ export interface UseJetStreamDialogSubscriptionOptions {
|
|
|
103
103
|
/** Single topic to subscribe to. */
|
|
104
104
|
topic: NatsMessageType;
|
|
105
105
|
/**
|
|
106
|
-
* Resume from this JetStream sequence + 1
|
|
107
|
-
* DeliverPolicy.New
|
|
106
|
+
* Resume from this JetStream sequence + 1 (0 replays everything the stream retains for the
|
|
107
|
+
* dialog). When null/undefined, the consumer starts with DeliverPolicy.New: live tail only,
|
|
108
|
+
* from whenever the server creates the consumer — after `onSubscribed` has fired.
|
|
108
109
|
*/
|
|
109
110
|
optStartSeq?: number | null;
|
|
110
111
|
onEvent?: (payload: unknown, messageType: NatsMessageType) => void;
|
|
@@ -127,8 +128,10 @@ export interface UseJetStreamDialogSubscriptionOptions {
|
|
|
127
128
|
maxDelayMs?: number;
|
|
128
129
|
multiplier?: number;
|
|
129
130
|
};
|
|
130
|
-
/** Consumer inactivity threshold in ms before NATS auto-cleans it
|
|
131
|
-
*
|
|
131
|
+
/** Consumer inactivity threshold in ms before NATS auto-cleans it, passed to the client
|
|
132
|
+
* (see `JetStreamOrderedSubscribeOptions.inactiveThresholdMs`). It takes effect only
|
|
133
|
+
* while the hook live-tails (`optStartSeq` null, nothing seen yet): every other consumer
|
|
134
|
+
* it opens starts from a sequence ≥ 1, which nats.ws gives its own default. */
|
|
132
135
|
inactiveThresholdMs?: number;
|
|
133
136
|
/**
|
|
134
137
|
* A counter the host bumps when it knows, from outside the page, that the tail
|
|
@@ -140,7 +143,8 @@ export interface UseJetStreamDialogSubscriptionOptions {
|
|
|
140
143
|
* either kind of knowledge bumps this instead of hoping the page noticed.
|
|
141
144
|
*
|
|
142
145
|
* Treated exactly like a reconnect: the consumer is rebuilt from the highest
|
|
143
|
-
* sequence already seen,
|
|
146
|
+
* sequence already seen, `reconnectionCount` moves, and `caughtUpCount` moves
|
|
147
|
+
* once the rebuilt consumer has replayed what it missed, so callers refetch
|
|
144
148
|
* persisted history. Any increase counts; the value itself means nothing, and
|
|
145
149
|
* an increase arriving alongside a `visibilitychange` costs one rebuild, not
|
|
146
150
|
* two.
|
|
@@ -156,11 +160,26 @@ export interface UseJetStreamDialogSubscriptionReturn {
|
|
|
156
160
|
* JetStream ordered-consumer recreation, the page returning to view after
|
|
157
161
|
* being hidden long enough to have missed something, or a host reporting the
|
|
158
162
|
* same via `resyncSignal`. All of them mean the same thing to the caller —
|
|
159
|
-
* the tail may have skipped messages
|
|
160
|
-
*
|
|
161
|
-
*
|
|
163
|
+
* the tail may have skipped messages. One absence counts once even when two
|
|
164
|
+
* sources report it. Starts at 0.
|
|
165
|
+
*
|
|
166
|
+
* Not the moment to refetch persisted history: the replay is still arriving
|
|
167
|
+
* when this moves. See `caughtUpCount`.
|
|
162
168
|
*/
|
|
163
169
|
reconnectionCount: number;
|
|
170
|
+
/**
|
|
171
|
+
* Incremented once a tail that came back — any of the events
|
|
172
|
+
* `reconnectionCount` counts, recoveries past its report floor — has
|
|
173
|
+
* delivered everything the stream still held for the dialog. Refetch
|
|
174
|
+
* persisted history on this: the gap may predate what the stream retains,
|
|
175
|
+
* and only a refetch that lands after the replay merges against the turns it
|
|
176
|
+
* re-delivered. One that lands first merges without them, and they then
|
|
177
|
+
* render a second time. Also moves when such a tail could not be resumed at
|
|
178
|
+
* all, so history is not left at its pre-gap snapshot: the next resume then
|
|
179
|
+
* replays the gap over that refetch, and its own increment's refetch clears
|
|
180
|
+
* the copies. Never moves for the first consumer of a dialog. Starts at 0.
|
|
181
|
+
*/
|
|
182
|
+
caughtUpCount: number;
|
|
164
183
|
/** Highest JetStream stream sequence observed so far (null before first delivery). */
|
|
165
184
|
currentStreamSeq: number | null;
|
|
166
185
|
}
|
|
@@ -36,7 +36,8 @@ export interface ChunkData {
|
|
|
36
36
|
sequenceId?: number;
|
|
37
37
|
/** JetStream stream sequence, populated from JsMsg.info.streamSequence when delivered via JetStream. */
|
|
38
38
|
streamSeq?: number;
|
|
39
|
-
/**
|
|
39
|
+
/** @deprecated Not set by the ai-agent: its chunks carry no stream state, which exists only
|
|
40
|
+
* as the GraphQL `Dialog.streamState` field (resolved from the dialog lock). Read that instead. */
|
|
40
41
|
streamState?: 'IDLE' | 'STREAMING';
|
|
41
42
|
type: string;
|
|
42
43
|
text?: string;
|
|
@@ -40,16 +40,11 @@ export function LoadingRegion({
|
|
|
40
40
|
children,
|
|
41
41
|
...props
|
|
42
42
|
}: LoadingRegionProps) {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
<Tag className={className} {...props}>
|
|
46
|
-
{children}
|
|
47
|
-
</Tag>
|
|
48
|
-
);
|
|
49
|
-
}
|
|
43
|
+
// One tree for both states: `children` keeps its slot whether or not the status is drawn, so an
|
|
44
|
+
// `announce` that flips at runtime does not remount the content (and drop its state and focus).
|
|
50
45
|
return (
|
|
51
|
-
<Tag aria-busy=
|
|
52
|
-
{status && (
|
|
46
|
+
<Tag aria-busy={announce ? 'true' : undefined} className={className} {...props}>
|
|
47
|
+
{announce && status && (
|
|
53
48
|
<span role="status" aria-live="polite" className="sr-only">
|
|
54
49
|
{label}
|
|
55
50
|
</span>
|
|
@@ -19,6 +19,8 @@ interface UnifiedSkeletonProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
|
19
19
|
/**
|
|
20
20
|
* The element drawn. `span` keeps the placeholder valid phrasing content where
|
|
21
21
|
* a `div` may not stand (inside a `p`, a heading, a label or an inline card).
|
|
22
|
+
* A span bar whose classes set no base display gets one of its own, capped to
|
|
23
|
+
* its line and centred on it; a caller that sets one gets none of the three.
|
|
22
24
|
*/
|
|
23
25
|
as?: 'div' | 'span';
|
|
24
26
|
}
|
|
@@ -68,6 +70,15 @@ export function UnifiedSkeleton({
|
|
|
68
70
|
// An `aspect-*` utility sizes the box itself; a default height would win
|
|
69
71
|
// over it (explicit height beats aspect-ratio) and collapse the box to 16px.
|
|
70
72
|
const sizedByAspect = /(?:^|\s)aspect-/.test(className ?? '');
|
|
73
|
+
// A span that already names its base display keeps it, with its own cap and alignment: the frozen
|
|
74
|
+
// TitleBlock's bars and the chip and breadcrumb skeletons are `inline-block` on the baseline, tuned to
|
|
75
|
+
// their text. Only an unprefixed display counts: `md:hidden` leaves the base span inline, and a bar
|
|
76
|
+
// without the default would draw at 0×0 below that breakpoint. The list is the displays bars use;
|
|
77
|
+
// any other falls back to the default, and twMerge still lets the caller's display win.
|
|
78
|
+
const setsDisplay =
|
|
79
|
+
/(?:^|\s)(?:inline-block|inline-flex|inline-grid|inline|block|flex|grid|contents|hidden)(?=\s|$)/.test(
|
|
80
|
+
className ?? '',
|
|
81
|
+
);
|
|
71
82
|
|
|
72
83
|
const style: React.CSSProperties = {
|
|
73
84
|
width: width,
|
|
@@ -77,6 +88,8 @@ export function UnifiedSkeleton({
|
|
|
77
88
|
return (
|
|
78
89
|
<Tag
|
|
79
90
|
className={cn(
|
|
91
|
+
// An inline span ignores width and height: without a display of its own the bar draws at 0×0.
|
|
92
|
+
Tag === 'span' && !setsDisplay && 'inline-block max-w-full align-middle',
|
|
80
93
|
animate ? SKELETON_SURFACE_CLASS : 'bg-ods-skeleton',
|
|
81
94
|
variantClasses[variant],
|
|
82
95
|
!height && !style.height && !sizedByAspect && defaultHeights[variant],
|