@flamingo-stack/openframe-frontend-core 0.0.849 → 0.0.850
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/build/export-map.json +1 -1
- package/dist/{chunk-SHQY4GOE.cjs → chunk-2QZUTNL3.cjs} +24 -24
- package/dist/{chunk-TEKN6TJ5.cjs → chunk-7ICHJVAT.cjs} +6 -6
- package/dist/{chunk-IKOL6NJY.cjs → chunk-CAGNWDVJ.cjs} +11 -1
- package/dist/{chunk-ZY34R37A.cjs → chunk-GAYLAA3L.cjs} +21 -21
- package/dist/{chunk-Z5UCDEKZ.cjs → chunk-IPGGSFR7.cjs} +4 -4
- package/dist/{chunk-PV2XQJ2R.cjs → chunk-JWIITCVB.cjs} +11 -11
- package/dist/{chunk-YYHQY3K6.cjs → chunk-LGYPCUHO.cjs} +9 -9
- package/dist/{chunk-KXBZCUDW.cjs → chunk-OHHDX3Z4.cjs} +16 -16
- package/dist/{chunk-MC3L525K.cjs → chunk-QJER2ZNA.cjs} +3 -3
- package/dist/{chunk-36XWCVSM.cjs → chunk-VRWBJL7B.cjs} +34 -34
- package/dist/{chunk-YLETC7LP.cjs → chunk-XKOL5CNU.cjs} +267 -226
- package/dist/{chunk-C3P7IUTU.cjs → chunk-ZDSC3GFX.cjs} +5 -4
- package/dist/{cloud-tenants-HKUUEUAY.cjs → cloud-tenants-TVB3DT3J.cjs} +3 -3
- package/dist/components/case-studies/index.cjs +12 -12
- package/dist/components/contact/index.cjs +4 -4
- package/dist/components/docs/index.cjs +5 -5
- package/dist/components/embeds/embed-viewer-frame.d.ts +2 -0
- package/dist/components/embeds/embed-viewer-frame.d.ts.map +1 -1
- package/dist/components/embeds/embed-viewer-frame.js +12 -2
- package/dist/components/embeds/index.cjs +4 -4
- package/dist/components/embeds/pdf-viewer.d.ts.map +1 -1
- package/dist/components/embeds/pdf-viewer.js +2 -1
- package/dist/components/faq/index.cjs +4 -4
- package/dist/components/features/index.cjs +5 -3
- package/dist/components/features/software/index.d.ts +1 -1
- package/dist/components/features/software/index.d.ts.map +1 -1
- package/dist/components/features/software/index.js +2 -0
- package/dist/components/features/software/software-action-copy.d.ts.map +1 -1
- package/dist/components/features/software/software-action-copy.js +6 -12
- package/dist/components/features/software/software-action-form.d.ts +7 -1
- package/dist/components/features/software/software-action-form.d.ts.map +1 -1
- package/dist/components/features/software/software-action-form.js +11 -3
- package/dist/components/features/software/update-settings-fields.d.ts +12 -1
- package/dist/components/features/software/update-settings-fields.d.ts.map +1 -1
- package/dist/components/features/software/update-settings-fields.js +57 -29
- package/dist/components/help-center-pages/index.cjs +52 -52
- package/dist/components/index.cjs +20 -18
- package/dist/components/meeting-scheduler/index.cjs +28 -28
- package/dist/components/navigation/index.cjs +4 -4
- package/dist/components/onboarding-guides/index.cjs +4 -4
- package/dist/components/product-demo/index.cjs +13 -13
- package/dist/components/tickets/index.cjs +6 -6
- package/dist/components/ui/index.cjs +3 -3
- package/dist/components/ui/page-actions.d.ts.map +1 -1
- package/dist/components/ui/page-actions.js +11 -1
- package/dist/{devices-P7M4Z7VP.cjs → devices-NGCTSXIU.cjs} +4 -4
- package/dist/index.cjs +6 -4
- package/dist/{knowledge-TC7JLOWI.cjs → knowledge-75PO5DYS.cjs} +3 -3
- package/dist/{logs-GPOYCP4B.cjs → logs-PZESOAIG.cjs} +10 -10
- package/dist/{policies-ZUHOUMDD.cjs → policies-6XNMBFWO.cjs} +7 -7
- package/dist/{remote-session-NT4NG7EF.cjs → remote-session-Q2FIBCGT.cjs} +4 -4
- package/dist/{scripts-FOEVDGTH.cjs → scripts-B3JW6TPF.cjs} +10 -10
- package/dist/{software-update-XGTMNFST.cjs → software-update-NWP542J7.cjs} +7 -7
- package/package.json +1 -1
- package/src/components/embeds/embed-viewer-frame.tsx +10 -2
- package/src/components/embeds/pdf-viewer.tsx +4 -1
- package/src/components/features/software/index.ts +1 -0
- package/src/components/features/software/software-action-copy.ts +19 -12
- package/src/components/features/software/software-action-form.tsx +16 -3
- package/src/components/features/software/update-settings-fields.tsx +104 -32
- package/src/components/ui/page-actions.tsx +19 -2
|
@@ -8,8 +8,8 @@ var _chunkLHV2R6QUcjs = require('./chunk-LHV2R6QU.cjs');
|
|
|
8
8
|
var _chunkFDZOE5TLcjs = require('./chunk-FDZOE5TL.cjs');
|
|
9
9
|
|
|
10
10
|
|
|
11
|
-
var
|
|
12
|
-
require('./chunk-
|
|
11
|
+
var _chunkXKOL5CNUcjs = require('./chunk-XKOL5CNU.cjs');
|
|
12
|
+
require('./chunk-CAGNWDVJ.cjs');
|
|
13
13
|
require('./chunk-SA2NNWIJ.cjs');
|
|
14
14
|
require('./chunk-IHY7E4EX.cjs');
|
|
15
15
|
require('./chunk-HQQE74RO.cjs');
|
|
@@ -1908,7 +1908,7 @@ function KnowledgeScreen(_props) {
|
|
|
1908
1908
|
const cast = _chunkLHV2R6QUcjs.useProductDemoCast.call(void 0, );
|
|
1909
1909
|
const fixture = _react.useMemo.call(void 0, () => buildKnowledgeFixture(cast), [cast]);
|
|
1910
1910
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "h-full bg-ods-bg", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1911
|
-
|
|
1911
|
+
_chunkXKOL5CNUcjs.KnowledgeBaseArticleView,
|
|
1912
1912
|
{
|
|
1913
1913
|
...fixture.article,
|
|
1914
1914
|
content: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkFXLROQUTcjs.SimpleMarkdownRenderer, { content: fixture.content, textSize: "compact" })
|
|
@@ -15,8 +15,8 @@ var _chunkFDZOE5TLcjs = require('./chunk-FDZOE5TL.cjs');
|
|
|
15
15
|
|
|
16
16
|
|
|
17
17
|
|
|
18
|
-
var
|
|
19
|
-
require('./chunk-
|
|
18
|
+
var _chunkXKOL5CNUcjs = require('./chunk-XKOL5CNU.cjs');
|
|
19
|
+
require('./chunk-CAGNWDVJ.cjs');
|
|
20
20
|
require('./chunk-SA2NNWIJ.cjs');
|
|
21
21
|
require('./chunk-IHY7E4EX.cjs');
|
|
22
22
|
require('./chunk-HQQE74RO.cjs');
|
|
@@ -1890,7 +1890,7 @@ function entry(logId, minutesAgo, severity, toolType, device2, summary) {
|
|
|
1890
1890
|
id: logId,
|
|
1891
1891
|
logId,
|
|
1892
1892
|
timestamp: displayTime(_chunkFDZOE5TLcjs.demoMinutesAgo.call(void 0, minutesAgo)),
|
|
1893
|
-
status: { label: severity, variant:
|
|
1893
|
+
status: { label: severity, variant: _chunkXKOL5CNUcjs.logSeverityVariant.call(void 0, severity) },
|
|
1894
1894
|
source: { name: toolType, toolType },
|
|
1895
1895
|
device: device2,
|
|
1896
1896
|
description: { title: summary }
|
|
@@ -1962,13 +1962,13 @@ var NO_FILTERS = {};
|
|
|
1962
1962
|
var ACTION_COLUMNS = ["copy", "quickView", "open"];
|
|
1963
1963
|
var BESIDE_DRAWER_HIDDEN = [...ACTION_COLUMNS, "tool", "source"];
|
|
1964
1964
|
var logHref = () => "#";
|
|
1965
|
-
var copyAction = () => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1965
|
+
var copyAction = () => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkXKOL5CNUcjs.LogCopyIconButton, {});
|
|
1966
1966
|
function LogsScreen({ compact = false }) {
|
|
1967
1967
|
const [dock, setDock] = _react.useState.call(void 0, null);
|
|
1968
1968
|
const selected = LOGS_FIXTURE_SELECTED;
|
|
1969
1969
|
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex h-full bg-ods-bg", children: [
|
|
1970
1970
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "min-w-0 flex-1 overflow-clip", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1971
|
-
|
|
1971
|
+
_chunkXKOL5CNUcjs.LogsPageView,
|
|
1972
1972
|
{
|
|
1973
1973
|
showHeader: false,
|
|
1974
1974
|
className: "p-[var(--spacing-system-l)]",
|
|
@@ -1976,7 +1976,7 @@ function LogsScreen({ compact = false }) {
|
|
|
1976
1976
|
onSearchChange: noop,
|
|
1977
1977
|
onOpenFilters: noop,
|
|
1978
1978
|
children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1979
|
-
|
|
1979
|
+
_chunkXKOL5CNUcjs.LogsTableView,
|
|
1980
1980
|
{
|
|
1981
1981
|
logs: LOGS_FIXTURE_ENTRIES,
|
|
1982
1982
|
facets: LOGS_FIXTURE_FACETS,
|
|
@@ -1991,7 +1991,7 @@ function LogsScreen({ compact = false }) {
|
|
|
1991
1991
|
}
|
|
1992
1992
|
) }),
|
|
1993
1993
|
!compact && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { ref: setDock, className: "relative w-[calc(400px+var(--spacing-system-m))] shrink-0", children: dock && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkOT6P57ZScjs.AppLayoutDrawerContainerContext.Provider, { value: dock, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1994
|
-
|
|
1994
|
+
_chunkXKOL5CNUcjs.LogDrawer,
|
|
1995
1995
|
{
|
|
1996
1996
|
docked: true,
|
|
1997
1997
|
isOpen: true,
|
|
@@ -2003,12 +2003,12 @@ function LogsScreen({ compact = false }) {
|
|
|
2003
2003
|
{ label: "Log ID", value: selected.logId },
|
|
2004
2004
|
{
|
|
2005
2005
|
label: "Source",
|
|
2006
|
-
value: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
2006
|
+
value: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkXKOL5CNUcjs.ToolBadge, { toolType: _chunkTX4NTH22cjs.normalizeToolTypeWithFallback.call(void 0, selected.source.toolType) })
|
|
2007
2007
|
},
|
|
2008
|
-
{ label: "Device", value:
|
|
2008
|
+
{ label: "Device", value: _chunkXKOL5CNUcjs.logSourceLabels.call(void 0, selected.device).deviceName }
|
|
2009
2009
|
],
|
|
2010
2010
|
deviceCard: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
2011
|
-
|
|
2011
|
+
_chunkXKOL5CNUcjs.DeviceCard,
|
|
2012
2012
|
{
|
|
2013
2013
|
...LOGS_FIXTURE_DEVICE,
|
|
2014
2014
|
actions: {
|
|
@@ -10,8 +10,8 @@ var _chunkFDZOE5TLcjs = require('./chunk-FDZOE5TL.cjs');
|
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
|
|
13
|
-
var
|
|
14
|
-
require('./chunk-
|
|
13
|
+
var _chunkXKOL5CNUcjs = require('./chunk-XKOL5CNU.cjs');
|
|
14
|
+
require('./chunk-CAGNWDVJ.cjs');
|
|
15
15
|
require('./chunk-SA2NNWIJ.cjs');
|
|
16
16
|
require('./chunk-IHY7E4EX.cjs');
|
|
17
17
|
require('./chunk-HQQE74RO.cjs');
|
|
@@ -1894,14 +1894,14 @@ var POLICIES = [
|
|
|
1894
1894
|
policy("policy-local-admins", "No local admins", "No everyday account is a local administrator.", false, 0)
|
|
1895
1895
|
];
|
|
1896
1896
|
var POLICIES_FIXTURE = {
|
|
1897
|
-
summary:
|
|
1897
|
+
summary: _chunkXKOL5CNUcjs.computePolicySummary.call(void 0, POLICIES),
|
|
1898
1898
|
rows: POLICIES.map((item) => ({
|
|
1899
1899
|
id: item.id,
|
|
1900
1900
|
name: item.name,
|
|
1901
1901
|
description: item.description,
|
|
1902
1902
|
critical: item.critical,
|
|
1903
1903
|
severityLabel: item.critical ? "Critical" : "Low",
|
|
1904
|
-
status:
|
|
1904
|
+
status: _chunkXKOL5CNUcjs.getPolicyTableStatus.call(void 0, item),
|
|
1905
1905
|
actions: [
|
|
1906
1906
|
{ label: "Policy Details", onClick: noop },
|
|
1907
1907
|
{ label: "Delete Policy", onClick: noop }
|
|
@@ -1915,16 +1915,16 @@ var POLICIES_FIXTURE = {
|
|
|
1915
1915
|
var _jsxruntime = require('react/jsx-runtime');
|
|
1916
1916
|
function PoliciesScreen({ compact = false }) {
|
|
1917
1917
|
const table = /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1918
|
-
|
|
1918
|
+
_chunkXKOL5CNUcjs.PoliciesTable,
|
|
1919
1919
|
{
|
|
1920
1920
|
rows: POLICIES_FIXTURE.rows,
|
|
1921
1921
|
rowAsLink: true,
|
|
1922
|
-
rightSlot: compact ? void 0 : /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1922
|
+
rightSlot: compact ? void 0 : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkXKOL5CNUcjs.DataTable.RowCount, {}),
|
|
1923
1923
|
emptyMessage: "No policies found."
|
|
1924
1924
|
}
|
|
1925
1925
|
);
|
|
1926
1926
|
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex h-full flex-col gap-[var(--spacing-system-l)] bg-ods-bg p-[var(--spacing-system-l)]", children: [
|
|
1927
|
-
!compact && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1927
|
+
!compact && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkXKOL5CNUcjs.PolicySummaryCards, { summary: POLICIES_FIXTURE.summary, now: POLICIES_FIXTURE.now }),
|
|
1928
1928
|
table
|
|
1929
1929
|
] });
|
|
1930
1930
|
}
|
|
@@ -11,7 +11,7 @@ var _chunkFDZOE5TLcjs = require('./chunk-FDZOE5TL.cjs');
|
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
|
|
14
|
-
var
|
|
14
|
+
var _chunkCAGNWDVJcjs = require('./chunk-CAGNWDVJ.cjs');
|
|
15
15
|
require('./chunk-OT6P57ZS.cjs');
|
|
16
16
|
require('./chunk-3W4ASAXN.cjs');
|
|
17
17
|
require('./chunk-YJZ7R3W5.cjs');
|
|
@@ -1922,7 +1922,7 @@ function TaskbarApp({ icon, active = false }) {
|
|
|
1922
1922
|
);
|
|
1923
1923
|
}
|
|
1924
1924
|
function RemoteDesktopPicture({ desktop }) {
|
|
1925
|
-
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: `absolute inset-0 flex flex-col overflow-hidden ${
|
|
1925
|
+
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: `absolute inset-0 flex flex-col overflow-hidden ${_chunkCAGNWDVJcjs.DEVICE_WALLPAPER_CLASS}`, children: [
|
|
1926
1926
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "relative min-h-0 flex-1", children: [
|
|
1927
1927
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "absolute left-[var(--spacing-system-sf)] top-[var(--spacing-system-sf)] hidden flex-col gap-[var(--spacing-system-sf)] content-md:flex", children: [
|
|
1928
1928
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, DesktopShortcut, { icon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkIYHH5EIOcjs.TrashIcon, { className: "h-5 w-5" }), label: "Recycle Bin" }),
|
|
@@ -1986,7 +1986,7 @@ function RemoteSessionScreen({ compact = false }) {
|
|
|
1986
1986
|
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex h-full flex-col bg-ods-bg", children: [
|
|
1987
1987
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "h-[var(--spacing-system-l)] flex-shrink-0" }),
|
|
1988
1988
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "min-h-0 flex-1", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1989
|
-
|
|
1989
|
+
_chunkCAGNWDVJcjs.RemoteDesktopView,
|
|
1990
1990
|
{
|
|
1991
1991
|
...fixture.view,
|
|
1992
1992
|
onEnterFullscreen: noop,
|
|
@@ -1997,7 +1997,7 @@ function RemoteSessionScreen({ compact = false }) {
|
|
|
1997
1997
|
screen: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, RemoteDesktopPicture, { desktop: fixture.desktop }),
|
|
1998
1998
|
chat: compact ? null : (
|
|
1999
1999
|
// The side column needs the room of the wide layout; a narrow frame keeps the screen alone.
|
|
2000
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "hidden min-h-0 content-md:flex", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
2000
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "hidden min-h-0 content-md:flex", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkCAGNWDVJcjs.RemoteDesktopChatPanel, { ...fixture.chat, sending: false, onSend: keepDraft, variant: "side" }) })
|
|
2001
2001
|
)
|
|
2002
2002
|
}
|
|
2003
2003
|
) })
|
|
@@ -13,10 +13,10 @@ var _chunkFDZOE5TLcjs = require('./chunk-FDZOE5TL.cjs');
|
|
|
13
13
|
|
|
14
14
|
|
|
15
15
|
|
|
16
|
-
var
|
|
16
|
+
var _chunkXKOL5CNUcjs = require('./chunk-XKOL5CNU.cjs');
|
|
17
17
|
|
|
18
18
|
|
|
19
|
-
var
|
|
19
|
+
var _chunkCAGNWDVJcjs = require('./chunk-CAGNWDVJ.cjs');
|
|
20
20
|
require('./chunk-SA2NNWIJ.cjs');
|
|
21
21
|
require('./chunk-IHY7E4EX.cjs');
|
|
22
22
|
require('./chunk-HQQE74RO.cjs');
|
|
@@ -1998,8 +1998,8 @@ function buildScriptsFixture(cast) {
|
|
|
1998
1998
|
var _jsxruntime = require('react/jsx-runtime');
|
|
1999
1999
|
var WIDE_HIDDEN_COLUMNS = ["result", "open"];
|
|
2000
2000
|
var COMPACT_COLUMNS = [
|
|
2001
|
-
{ ...
|
|
2002
|
-
|
|
2001
|
+
{ ..._chunkXKOL5CNUcjs.EXECUTION_COLUMNS.machineId, width: "flex-1 min-w-0", hideAt: void 0 },
|
|
2002
|
+
_chunkXKOL5CNUcjs.EXECUTION_COLUMNS.status
|
|
2003
2003
|
];
|
|
2004
2004
|
var COMPACT_ROWS = 4;
|
|
2005
2005
|
var TOKEN_CLASS = {
|
|
@@ -2049,16 +2049,16 @@ function ScriptCodePicture({ script }) {
|
|
|
2049
2049
|
children: [
|
|
2050
2050
|
/* @__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: [
|
|
2051
2051
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex min-w-0 items-center justify-between gap-[var(--spacing-system-m)]", children: [
|
|
2052
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
2052
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkCAGNWDVJcjs.TruncateText, { variant: "h4", children: script.name }),
|
|
2053
2053
|
/* @__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: [
|
|
2054
2054
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkTPKKRHUMcjs.TimerIcon, { className: "size-4 text-ods-text-secondary" }),
|
|
2055
2055
|
`${schedule.repeat} ${schedule.time} \xB7 ${schedule.deviceCount} devices`
|
|
2056
2056
|
] })
|
|
2057
2057
|
] }),
|
|
2058
2058
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex min-w-0 items-center justify-between gap-[var(--spacing-system-m)]", children: [
|
|
2059
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
2059
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkCAGNWDVJcjs.TruncateText, { variant: "h6", tone: "secondary", children: `Written by ${provenance.author} \xB7 approved by ${provenance.approver}` }),
|
|
2060
2060
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
2061
|
-
|
|
2061
|
+
_chunkXKOL5CNUcjs.ScriptShellBadge,
|
|
2062
2062
|
{
|
|
2063
2063
|
value: script.shellType,
|
|
2064
2064
|
className: "shrink-0 text-ods-text-secondary text-h6",
|
|
@@ -2082,7 +2082,7 @@ function ScriptsScreen({ compact = false }) {
|
|
|
2082
2082
|
return (
|
|
2083
2083
|
// Four runs of the card's row height fill the frame; the padding is what is left round them.
|
|
2084
2084
|
/* @__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,
|
|
2085
|
-
|
|
2085
|
+
_chunkXKOL5CNUcjs.ScriptExecutionsTable,
|
|
2086
2086
|
{
|
|
2087
2087
|
rows: fixture.executions.slice(0, COMPACT_ROWS),
|
|
2088
2088
|
columns: COMPACT_COLUMNS,
|
|
@@ -2092,13 +2092,13 @@ function ScriptsScreen({ compact = false }) {
|
|
|
2092
2092
|
) })
|
|
2093
2093
|
);
|
|
2094
2094
|
}
|
|
2095
|
-
const renderOutput = (row) => row.id === fixture.openExecutionId ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
2095
|
+
const renderOutput = (row) => row.id === fixture.openExecutionId ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkXKOL5CNUcjs.ScriptExecutionResult, { result: row.result, empty: "\u2014" }) : null;
|
|
2096
2096
|
return (
|
|
2097
2097
|
// The frame's tighter padding and no header row: the output opened under a run needs the height.
|
|
2098
2098
|
/* @__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: [
|
|
2099
2099
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "w-[39%] shrink-0", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ScriptCodePicture, { script: fixture.script }) }),
|
|
2100
2100
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "min-w-0 flex-1 overflow-hidden", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
2101
|
-
|
|
2101
|
+
_chunkXKOL5CNUcjs.ScriptExecutionsTable,
|
|
2102
2102
|
{
|
|
2103
2103
|
rows: fixture.executions,
|
|
2104
2104
|
hideColumns: WIDE_HIDDEN_COLUMNS,
|
|
@@ -15,10 +15,10 @@ var _chunkFDZOE5TLcjs = require('./chunk-FDZOE5TL.cjs');
|
|
|
15
15
|
|
|
16
16
|
|
|
17
17
|
|
|
18
|
-
var
|
|
18
|
+
var _chunkXKOL5CNUcjs = require('./chunk-XKOL5CNU.cjs');
|
|
19
19
|
|
|
20
20
|
|
|
21
|
-
var
|
|
21
|
+
var _chunkCAGNWDVJcjs = require('./chunk-CAGNWDVJ.cjs');
|
|
22
22
|
require('./chunk-SA2NNWIJ.cjs');
|
|
23
23
|
require('./chunk-IHY7E4EX.cjs');
|
|
24
24
|
require('./chunk-HQQE74RO.cjs');
|
|
@@ -1923,14 +1923,14 @@ var noop = () => {
|
|
|
1923
1923
|
var HIDDEN_WHEN_COMPACT = ["organization"];
|
|
1924
1924
|
function StaticPackageField({ value }) {
|
|
1925
1925
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1926
|
-
|
|
1926
|
+
_chunkCAGNWDVJcjs.Autocomplete,
|
|
1927
1927
|
{
|
|
1928
|
-
label:
|
|
1928
|
+
label: _chunkXKOL5CNUcjs.PACKAGE_SEARCH_LABEL,
|
|
1929
1929
|
labelVariant: "large",
|
|
1930
1930
|
options: value ? [{ value: value.id, label: value.name, description: _nullishCoalesce(value.description, () => ( void 0)) }] : [],
|
|
1931
1931
|
value: _nullishCoalesce(_optionalChain([value, 'optionalAccess', _ => _.id]), () => ( null)),
|
|
1932
1932
|
onChange: noop,
|
|
1933
|
-
placeholder:
|
|
1933
|
+
placeholder: _chunkXKOL5CNUcjs.PACKAGE_SEARCH_PLACEHOLDER
|
|
1934
1934
|
}
|
|
1935
1935
|
);
|
|
1936
1936
|
}
|
|
@@ -1944,7 +1944,7 @@ function SoftwareUpdateScreen({ compact = false }) {
|
|
|
1944
1944
|
[fixture.devices, fixture.selectedIds]
|
|
1945
1945
|
);
|
|
1946
1946
|
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,
|
|
1947
|
-
|
|
1947
|
+
_chunkXKOL5CNUcjs.SoftwareActionForm,
|
|
1948
1948
|
{
|
|
1949
1949
|
action: fixture.action,
|
|
1950
1950
|
showHeader: false,
|
|
@@ -1956,7 +1956,7 @@ function SoftwareUpdateScreen({ compact = false }) {
|
|
|
1956
1956
|
initialValues: fixture.initialValues,
|
|
1957
1957
|
renderPackageSearch,
|
|
1958
1958
|
renderDevicePicker: () => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1959
|
-
|
|
1959
|
+
_chunkXKOL5CNUcjs.DeviceSelector,
|
|
1960
1960
|
{
|
|
1961
1961
|
devices: selected,
|
|
1962
1962
|
loading: false,
|
package/package.json
CHANGED
|
@@ -72,6 +72,9 @@ export interface EmbedViewerFrameProps {
|
|
|
72
72
|
loadingActionCount?: number;
|
|
73
73
|
}
|
|
74
74
|
|
|
75
|
+
/** The header's loading form draws one button by default: most viewers have one action (the PDF viewer passes two). */
|
|
76
|
+
export const EMBED_VIEWER_SKELETON_ACTIONS = 1;
|
|
77
|
+
|
|
75
78
|
export function EmbedViewerFrame({
|
|
76
79
|
icon,
|
|
77
80
|
title,
|
|
@@ -89,7 +92,7 @@ export function EmbedViewerFrame({
|
|
|
89
92
|
sandbox,
|
|
90
93
|
className,
|
|
91
94
|
fullscreenControl,
|
|
92
|
-
loadingActionCount =
|
|
95
|
+
loadingActionCount = EMBED_VIEWER_SKELETON_ACTIONS,
|
|
93
96
|
}: EmbedViewerFrameProps) {
|
|
94
97
|
// ONE switch for the whole frame (header included): a page's loading scope, or the standard `loading` prop. The body
|
|
95
98
|
// alone also waits while the viewer resolves where its frame points.
|
|
@@ -157,7 +160,12 @@ export function EmbedViewerFrame({
|
|
|
157
160
|
<div className="flex w-full items-center gap-2 content-sm:w-auto">
|
|
158
161
|
{Array.from({ length: loadingActionCount }, (_, i) => (
|
|
159
162
|
// biome-ignore lint/suspicious/noArrayIndexKey: loading buttons never reorder
|
|
160
|
-
<InteractiveSkeleton.Button
|
|
163
|
+
<InteractiveSkeleton.Button
|
|
164
|
+
key={i}
|
|
165
|
+
data-loading-item
|
|
166
|
+
size="small-legacy"
|
|
167
|
+
className="flex-1 content-sm:flex-initial"
|
|
168
|
+
/>
|
|
161
169
|
))}
|
|
162
170
|
</div>
|
|
163
171
|
) : fullscreenControl && src ? (
|
|
@@ -16,6 +16,9 @@ export interface PdfViewerProps {
|
|
|
16
16
|
loading?: boolean;
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
+
/** The header's loading form: Preview and Download, the viewer's two actions. */
|
|
20
|
+
const PDF_VIEWER_SKELETON_ACTIONS = 2;
|
|
21
|
+
|
|
19
22
|
export function PdfViewer({ src, fileName, onPreview, onDownload, height, loading = false }: PdfViewerProps) {
|
|
20
23
|
const displayName = fileName || 'PDF Document';
|
|
21
24
|
// In a loading scope the document is being read: the frame draws its loading form, never "not available".
|
|
@@ -62,7 +65,7 @@ export function PdfViewer({ src, fileName, onPreview, onDownload, height, loadin
|
|
|
62
65
|
</div>
|
|
63
66
|
}
|
|
64
67
|
src={src}
|
|
65
|
-
loadingActionCount={
|
|
68
|
+
loadingActionCount={PDF_VIEWER_SKELETON_ACTIONS}
|
|
66
69
|
loading={loading}
|
|
67
70
|
height={height}
|
|
68
71
|
/>
|
|
@@ -40,6 +40,7 @@ export { type PackageSearchSlotProps, SoftwareRowFields, type SoftwareRowFieldsP
|
|
|
40
40
|
export {
|
|
41
41
|
DEFAULT_SOFTWARE_UPDATE_POLICY,
|
|
42
42
|
DEFAULT_SOFTWARE_UPDATE_SETTINGS,
|
|
43
|
+
defaultSoftwareUpdateSettings,
|
|
43
44
|
SOFTWARE_UPDATE_COUNTDOWN_OPTIONS,
|
|
44
45
|
SOFTWARE_UPDATE_DEADLINE_OPTIONS,
|
|
45
46
|
type SoftwareUpdateMode,
|
|
@@ -19,6 +19,21 @@ export interface SoftwareActionCopy {
|
|
|
19
19
|
logsHeading: string;
|
|
20
20
|
}
|
|
21
21
|
|
|
22
|
+
/**
|
|
23
|
+
* The run modes say when a device actually gets the run, not only when it is sent. Both forms submit a software bundle
|
|
24
|
+
* (`submitSoftwareBundle`), and the backend delivers it per device:
|
|
25
|
+
* - Now: each device gets an online-dispatch sentinel (`SoftwareBundleService.armOnlineDispatch`), so an online device
|
|
26
|
+
* starts at once and an offline one when it comes online.
|
|
27
|
+
* - Scheduled: the schedule is created with `offlineBehavior` RETRY_ON_RECONNECT and the reconnect window
|
|
28
|
+
* `openframe.rmm.software.bundle.schedule.reconnect-window-seconds` (604800 s, 7 days, in saas-tenant
|
|
29
|
+
* `configs/base/openframe-saas-api.yml`): a device offline at the start time gets the run when it reconnects within
|
|
30
|
+
* that window. Keep "within 7 days" in step with that key.
|
|
31
|
+
*/
|
|
32
|
+
const nowDescription = (noun: string) =>
|
|
33
|
+
`The ${noun} starts now on online devices, and on the others when they come online.`;
|
|
34
|
+
const scheduleDescription = (noun: string) =>
|
|
35
|
+
`The ${noun} runs at the scheduled time. Devices offline then get it when they come back online, within 7 days.`;
|
|
36
|
+
|
|
22
37
|
/** Everything the install and update flows word differently, on every page that shows one. */
|
|
23
38
|
export const SOFTWARE_ACTION_COPY: Record<SoftwareActionKind, SoftwareActionCopy> = {
|
|
24
39
|
INSTALL: {
|
|
@@ -27,12 +42,8 @@ export const SOFTWARE_ACTION_COPY: Record<SoftwareActionKind, SoftwareActionCopy
|
|
|
27
42
|
runLabel: 'Run Installation',
|
|
28
43
|
scheduleLabel: 'Schedule Install',
|
|
29
44
|
modes: [
|
|
30
|
-
{ value: 'now', label: 'Install Now', description: '
|
|
31
|
-
{
|
|
32
|
-
value: 'schedule',
|
|
33
|
-
label: 'Schedule Install',
|
|
34
|
-
description: 'The install runs automatically at the scheduled time.',
|
|
35
|
-
},
|
|
45
|
+
{ value: 'now', label: 'Install Now', description: nowDescription('install') },
|
|
46
|
+
{ value: 'schedule', label: 'Schedule Install', description: scheduleDescription('install') },
|
|
36
47
|
],
|
|
37
48
|
started: 'Installation started',
|
|
38
49
|
scheduled: 'Installation scheduled',
|
|
@@ -46,12 +57,8 @@ export const SOFTWARE_ACTION_COPY: Record<SoftwareActionKind, SoftwareActionCopy
|
|
|
46
57
|
runLabel: 'Run Update',
|
|
47
58
|
scheduleLabel: 'Schedule Update',
|
|
48
59
|
modes: [
|
|
49
|
-
{ value: 'now', label: 'Update Now', description: '
|
|
50
|
-
{
|
|
51
|
-
value: 'schedule',
|
|
52
|
-
label: 'Schedule Update',
|
|
53
|
-
description: 'The update runs automatically at the scheduled time.',
|
|
54
|
-
},
|
|
60
|
+
{ value: 'now', label: 'Update Now', description: nowDescription('update') },
|
|
61
|
+
{ value: 'schedule', label: 'Schedule Update', description: scheduleDescription('update') },
|
|
55
62
|
],
|
|
56
63
|
started: 'Update started',
|
|
57
64
|
scheduled: 'Update scheduled',
|
|
@@ -10,7 +10,7 @@ import { SOFTWARE_ACTION_COPY, type SoftwareActionKind } from './software-action
|
|
|
10
10
|
import { newSoftwareRow, type SoftwareRow } from './software-row';
|
|
11
11
|
import { type PackageSearchSlotProps, SoftwareRowFields } from './software-row-fields';
|
|
12
12
|
import {
|
|
13
|
-
|
|
13
|
+
defaultSoftwareUpdateSettings,
|
|
14
14
|
SoftwareUpdateSettingsFields,
|
|
15
15
|
type SoftwareUpdateSettingsValues,
|
|
16
16
|
} from './update-settings-fields';
|
|
@@ -74,6 +74,12 @@ export interface SoftwareActionFormProps<TRef extends string = string> {
|
|
|
74
74
|
* settings yet never shows choices that go nowhere; the host that submits `updateSettings` passes true.
|
|
75
75
|
*/
|
|
76
76
|
showUpdateSettings?: boolean;
|
|
77
|
+
/**
|
|
78
|
+
* "Update Settings" offer Wait & notify and the countdowns, which need the devices to notify the user. Default false:
|
|
79
|
+
* Wait (with an optional deadline that closes the app without warning) or Force Update, opening on Force Update, and
|
|
80
|
+
* no countdown.
|
|
81
|
+
*/
|
|
82
|
+
updateUserNotifications?: boolean;
|
|
77
83
|
/** The "Device Selection" heading over the picker. Default true; a host that titles the picker itself passes false. */
|
|
78
84
|
showDeviceHeading?: boolean;
|
|
79
85
|
className?: string;
|
|
@@ -104,6 +110,7 @@ export function SoftwareActionForm<TRef extends string = string>({
|
|
|
104
110
|
addRows = true,
|
|
105
111
|
runModeLayout = 'stacked',
|
|
106
112
|
showUpdateSettings = false,
|
|
113
|
+
updateUserNotifications = false,
|
|
107
114
|
showDeviceHeading = true,
|
|
108
115
|
className = 'px-[var(--spacing-system-l)] pb-[var(--spacing-system-l)]',
|
|
109
116
|
}: SoftwareActionFormProps<TRef>) {
|
|
@@ -115,7 +122,7 @@ export function SoftwareActionForm<TRef extends string = string>({
|
|
|
115
122
|
const [time, setTime] = useState(initialValues.time ?? '');
|
|
116
123
|
const [timeReference, setTimeReference] = useState<TRef>(initialValues.timeReference);
|
|
117
124
|
const [updateSettings, setUpdateSettings] = useState<SoftwareUpdateSettingsValues>(
|
|
118
|
-
() => initialValues.updateSettings ??
|
|
125
|
+
() => initialValues.updateSettings ?? defaultSoftwareUpdateSettings(updateUserNotifications),
|
|
119
126
|
);
|
|
120
127
|
const withUpdateSettings = action === 'UPDATE' && showUpdateSettings;
|
|
121
128
|
|
|
@@ -215,7 +222,13 @@ export function SoftwareActionForm<TRef extends string = string>({
|
|
|
215
222
|
</>
|
|
216
223
|
)}
|
|
217
224
|
|
|
218
|
-
{withUpdateSettings &&
|
|
225
|
+
{withUpdateSettings && (
|
|
226
|
+
<SoftwareUpdateSettingsFields
|
|
227
|
+
value={updateSettings}
|
|
228
|
+
onChange={setUpdateSettings}
|
|
229
|
+
userNotifications={updateUserNotifications}
|
|
230
|
+
/>
|
|
231
|
+
)}
|
|
219
232
|
|
|
220
233
|
{showDeviceHeading && (
|
|
221
234
|
<h2 className="pt-[var(--spacing-system-l)] text-ods-text-primary text-h2">Device Selection</h2>
|