@flamingo-stack/openframe-frontend-core 0.0.849 → 0.0.851
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/chat-protocol/events.d.ts +4 -1
- package/dist/chat-protocol/events.d.ts.map +1 -1
- package/dist/chat-protocol/index.cjs +90 -40
- package/dist/chat-protocol/nats-decoder.d.ts.map +1 -1
- package/dist/chat-protocol/nats-decoder.js +5 -1
- package/dist/chat-protocol/policy-review.d.ts +18 -0
- package/dist/chat-protocol/policy-review.d.ts.map +1 -0
- package/dist/chat-protocol/policy-review.js +55 -0
- package/dist/{chunk-C3P7IUTU.cjs → chunk-2NGW73T2.cjs} +5 -4
- package/dist/{chunk-SHQY4GOE.cjs → chunk-2WZHNMQY.cjs} +67 -67
- package/dist/{chunk-R5JPZ6TY.cjs → chunk-5SEJEBAB.cjs} +8 -8
- package/dist/{chunk-TX4NTH22.cjs → chunk-B6D4WWKD.cjs} +36 -36
- package/dist/{chunk-FXLROQUT.cjs → chunk-CDW6JTAQ.cjs} +442 -459
- package/dist/{chunk-5PIR77V5.cjs → chunk-DN227KZH.cjs} +4 -4
- package/dist/{chunk-MC3L525K.cjs → chunk-FGSN5UNY.cjs} +3 -3
- package/dist/{chunk-ZGEWT3SF.cjs → chunk-HXURNKXI.cjs} +3 -3
- package/dist/{chunk-FRG724DU.cjs → chunk-KRTTH3ET.cjs} +4 -4
- package/dist/{chunk-YJZ7R3W5.cjs → chunk-KXFIYO4O.cjs} +8 -8
- package/dist/{chunk-4YBS4HIO.cjs → chunk-LM7EL3UQ.cjs} +444 -27
- package/dist/{chunk-YYHQY3K6.cjs → chunk-NQEPLUUW.cjs} +21 -21
- package/dist/{chunk-KXBZCUDW.cjs → chunk-ODMZSAIY.cjs} +36 -36
- package/dist/{chunk-36XWCVSM.cjs → chunk-OUP7L3U5.cjs} +50 -50
- package/dist/{chunk-5CBI2ZYV.cjs → chunk-PJNEBSP5.cjs} +5 -5
- package/dist/{chunk-6AJYGXXS.cjs → chunk-PPCRLSVR.cjs} +11 -11
- package/dist/{chunk-SA2NNWIJ.cjs → chunk-QCSA7GIX.cjs} +17 -62
- package/dist/{chunk-PV2XQJ2R.cjs → chunk-SPKAXETT.cjs} +42 -42
- package/dist/{chunk-IKOL6NJY.cjs → chunk-U4RTWH5D.cjs} +53 -43
- package/dist/{chunk-IHY7E4EX.cjs → chunk-UFGPLXH6.cjs} +4 -4
- package/dist/{chunk-TEKN6TJ5.cjs → chunk-UQK6J3ZS.cjs} +13 -13
- package/dist/{chunk-S3QXLD4X.cjs → chunk-VCFQHPOO.cjs} +37 -3
- package/dist/{chunk-Z5UCDEKZ.cjs → chunk-VU6N3NZS.cjs} +6 -6
- package/dist/{chunk-ZY34R37A.cjs → chunk-VXIZCUNZ.cjs} +61 -61
- package/dist/{chunk-3W4ASAXN.cjs → chunk-WYROOMUZ.cjs} +2 -2
- package/dist/{chunk-YLETC7LP.cjs → chunk-ZEPEFKHA.cjs} +893 -973
- package/dist/{cloud-tenants-HKUUEUAY.cjs → cloud-tenants-XH6GV4EI.cjs} +12 -13
- package/dist/components/case-studies/index.cjs +24 -25
- package/dist/components/chat/approval-batch-message.d.ts +5 -0
- package/dist/components/chat/approval-batch-message.d.ts.map +1 -1
- package/dist/components/chat/approval-batch-message.js +36 -10
- package/dist/components/chat/index.cjs +8 -9
- package/dist/components/chat/policy-review.d.ts +27 -0
- package/dist/components/chat/policy-review.d.ts.map +1 -0
- package/dist/components/chat/policy-review.js +67 -0
- package/dist/components/chat/stream/message-mutations.d.ts.map +1 -1
- package/dist/components/chat/stream/message-mutations.js +4 -1
- package/dist/components/chat/tool-execution-display.d.ts.map +1 -1
- package/dist/components/chat/tool-execution-display.js +16 -5
- package/dist/components/chat/types/message.types.d.ts +40 -2
- package/dist/components/chat/types/message.types.d.ts.map +1 -1
- package/dist/components/chat/utils/extract-incomplete-message-state.d.ts.map +1 -1
- package/dist/components/chat/utils/extract-incomplete-message-state.js +2 -0
- package/dist/components/chat/utils/message-segment-accumulator.d.ts.map +1 -1
- package/dist/components/chat/utils/message-segment-accumulator.js +3 -0
- package/dist/components/chat/utils/process-historical-messages.d.ts +2 -2
- package/dist/components/chat/utils/process-historical-messages.d.ts.map +1 -1
- package/dist/components/chat/utils/process-historical-messages.js +7 -1
- package/dist/components/contact/index.cjs +13 -14
- package/dist/components/docs/index.cjs +16 -17
- 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 +13 -14
- 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 +14 -15
- package/dist/components/features/approval-level.d.ts +6 -12
- package/dist/components/features/approval-level.d.ts.map +1 -1
- package/dist/components/features/approval-level.js +45 -55
- package/dist/components/features/index.cjs +17 -15
- package/dist/components/features/notifications/approval-request-notification-tile.d.ts.map +1 -1
- package/dist/components/features/notifications/approval-request-notification-tile.js +71 -48
- package/dist/components/features/notifications/types.d.ts +2 -0
- package/dist/components/features/notifications/types.d.ts.map +1 -1
- package/dist/components/features/notifications/types.js +3 -1
- package/dist/components/features/policy-configuration-panel.d.ts.map +1 -1
- package/dist/components/features/policy-configuration-panel.js +75 -64
- 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 +78 -79
- package/dist/components/index.cjs +58 -58
- package/dist/components/meeting-scheduler/index.cjs +61 -61
- package/dist/components/navigation/index.cjs +15 -16
- package/dist/components/onboarding-guides/index.cjs +14 -15
- package/dist/components/product-demo/index.cjs +23 -24
- package/dist/components/tickets/index.cjs +17 -18
- package/dist/components/ui/file-manager/index.cjs +8 -9
- package/dist/components/ui/index.cjs +16 -18
- package/dist/components/ui/page-actions.d.ts.map +1 -1
- package/dist/components/ui/page-actions.js +11 -1
- package/dist/components/ui/radio-group.d.ts.map +1 -1
- package/dist/components/ui/radio-group.js +8 -2
- package/dist/components/ui/tab-selector.d.ts +7 -1
- package/dist/components/ui/tab-selector.d.ts.map +1 -1
- package/dist/components/ui/tab-selector.js +22 -3
- package/dist/{devices-P7M4Z7VP.cjs → devices-7PT6MPJI.cjs} +13 -14
- package/dist/{embeddable-chat-322NDFP5.cjs → embeddable-chat-5NY76K7K.cjs} +84 -85
- package/dist/index.cjs +24 -24
- package/dist/{knowledge-TC7JLOWI.cjs → knowledge-J6N7IEVI.cjs} +13 -14
- package/dist/{logs-GPOYCP4B.cjs → logs-D6KQP2BX.cjs} +19 -20
- package/dist/{policies-ZUHOUMDD.cjs → policies-J7MCOL3C.cjs} +16 -17
- package/dist/{remote-session-NT4NG7EF.cjs → remote-session-PXHA5KFK.cjs} +8 -9
- package/dist/{scripts-FOEVDGTH.cjs → scripts-VURXIHVS.cjs} +19 -20
- package/dist/{software-update-XGTMNFST.cjs → software-update-6SHUBDIE.cjs} +16 -17
- package/dist/{tickets-board-7FLGQEHF.cjs → tickets-board-NLCN7WNX.cjs} +9 -9
- package/package.json +1 -1
- package/src/chat-protocol/events.ts +4 -1
- package/src/chat-protocol/nats-decoder.ts +4 -0
- package/src/chat-protocol/policy-review.ts +71 -0
- package/src/components/chat/approval-batch-message.tsx +47 -10
- package/src/components/chat/policy-review.tsx +90 -0
- package/src/components/chat/stream/message-mutations.ts +4 -0
- package/src/components/chat/tool-execution-display.tsx +23 -4
- package/src/components/chat/types/message.types.ts +42 -2
- package/src/components/chat/utils/extract-incomplete-message-state.ts +2 -0
- package/src/components/chat/utils/message-segment-accumulator.ts +3 -0
- package/src/components/chat/utils/process-historical-messages.ts +14 -3
- package/src/components/embeds/embed-viewer-frame.tsx +10 -2
- package/src/components/embeds/pdf-viewer.tsx +4 -1
- package/src/components/features/approval-level.tsx +74 -78
- package/src/components/features/notifications/approval-request-notification-tile.tsx +75 -50
- package/src/components/features/notifications/types.ts +4 -0
- package/src/components/features/policy-configuration-panel.tsx +100 -83
- 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
- package/src/components/ui/radio-group.tsx +20 -2
- package/src/components/ui/tab-selector.tsx +26 -3
- package/dist/chunk-N3MBQRCQ.cjs +0 -41
|
@@ -60,6 +60,8 @@ export interface ApprovalToolCallMeta {
|
|
|
60
60
|
requiresApproval?: boolean;
|
|
61
61
|
approvalType?: string | null;
|
|
62
62
|
toolCallArguments?: Record<string, unknown> | null;
|
|
63
|
+
/** The guardrail review, as the wire sends it: normalized into the batch by `approvalMetaToBatchData`. */
|
|
64
|
+
policyReview?: unknown;
|
|
63
65
|
}
|
|
64
66
|
/** Approval payload stashed in `notification.meta` for an approval-request notification. */
|
|
65
67
|
export interface ApprovalNotificationMeta {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/components/features/notifications/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/components/features/notifications/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
"use client";
|
|
2
|
+
import { policyReviewField } from "../../../chat-protocol/policy-review.js";
|
|
2
3
|
import { APPROVAL_STATUS } from "../../chat/types/index.js";
|
|
3
4
|
const TICKET_APPROVAL_REQUEST_TYPE = "TICKET_APPROVAL_REQUEST";
|
|
4
5
|
const MINGO_APPROVAL_REQUEST_TYPE = "MINGO_APPROVAL_REQUEST";
|
|
@@ -52,7 +53,8 @@ function approvalMetaToBatchData(approval) {
|
|
|
52
53
|
toolType: tc.toolType ?? void 0,
|
|
53
54
|
requiresApproval: tc.requiresApproval ?? true,
|
|
54
55
|
approvalType: tc.approvalType ?? null,
|
|
55
|
-
toolCallArguments: tc.toolCallArguments ?? null
|
|
56
|
+
toolCallArguments: tc.toolCallArguments ?? null,
|
|
57
|
+
...policyReviewField(tc.policyReview)
|
|
56
58
|
}))
|
|
57
59
|
};
|
|
58
60
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"policy-configuration-panel.d.ts","sourceRoot":"","sources":["../../../src/components/features/policy-configuration-panel.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"policy-configuration-panel.d.ts","sourceRoot":"","sources":["../../../src/components/features/policy-configuration-panel.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAEhC,OAAO,KAAK,EAIV,6BAA6B,EAC9B,MAAM,yBAAyB,CAAC;AAmBjC,yGAAyG;AACzG,eAAO,MAAM,8CAA8C,IAAI,CAAC;AAkShE,eAAO,MAAM,wBAAwB,EAAE,EAAE,CAAC,6BAA6B,CA+DtE,CAAC"}
|
|
@@ -1,18 +1,22 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { ChevronDown, Shield } from "lucide-react";
|
|
4
3
|
import { useState } from "react";
|
|
5
4
|
import { cn } from "../../utils/cn.js";
|
|
6
5
|
import { useCollapsible } from "../chat/hooks/use-collapsible.js";
|
|
6
|
+
import { Chevron02DownIcon, ShieldIcon } from "../icons-v2-generated/index.js";
|
|
7
7
|
import { TextLineSkeleton } from "../loading/unified-skeleton.js";
|
|
8
8
|
import { ToolIcon } from "../tool-icon.js";
|
|
9
9
|
import { Button } from "../ui/button/index.js";
|
|
10
|
-
import {
|
|
10
|
+
import {
|
|
11
|
+
DropdownMenu,
|
|
12
|
+
DropdownMenuContent,
|
|
13
|
+
DropdownMenuItem,
|
|
14
|
+
DropdownMenuSeparator,
|
|
15
|
+
DropdownMenuTrigger
|
|
16
|
+
} from "../ui/dropdown-menu.js";
|
|
11
17
|
import { loadingItemProps, useLoadingScope } from "../ui/loading-scope.js";
|
|
12
|
-
import { APPROVAL_LEVEL_META, APPROVAL_LEVELS } from "./approval-level.js";
|
|
13
|
-
const
|
|
14
|
-
const POLICY_LEVEL_WIDTH = "w-[180px]";
|
|
15
|
-
const CATEGORY_LEVEL_WIDTH = "w-[256px]";
|
|
18
|
+
import { APPROVAL_LEVEL_META, APPROVAL_LEVELS, ApprovalLevelView } from "./approval-level.js";
|
|
19
|
+
const CATEGORY_LEVEL_WIDTH = "w-[296px]";
|
|
16
20
|
const POLICY_CONFIGURATION_PANEL_SKELETON_CATEGORIES = 4;
|
|
17
21
|
const CATEGORY_HEADER_CLASS = "flex items-center gap-[var(--spacing-system-m)] border-t border-ods-border bg-ods-card py-[var(--spacing-system-s)] pl-[var(--spacing-system-m)] pr-[var(--spacing-system-xsf)] first:border-t-0";
|
|
18
22
|
const ICON_TILE_SIZE_CLASS = "h-8 w-8 shrink-0 rounded-md";
|
|
@@ -22,56 +26,59 @@ const CATEGORY_LEVEL_COLUMN_CLASS = cn(
|
|
|
22
26
|
"hidden shrink-0 px-[var(--spacing-system-sf)] py-[var(--spacing-system-xsf)] content-md:block",
|
|
23
27
|
CATEGORY_LEVEL_WIDTH
|
|
24
28
|
);
|
|
25
|
-
const CHEVRON_CLASS = "h-6 w-6 text-ods-text-primary transition-transform duration-300";
|
|
26
|
-
const
|
|
29
|
+
const CHEVRON_CLASS = "!h-6 !w-6 text-ods-text-primary transition-transform duration-300";
|
|
30
|
+
const LevelOption = ({ level }) => {
|
|
31
|
+
const { label, Icon, toneClassName } = APPROVAL_LEVEL_META[level];
|
|
32
|
+
return /* @__PURE__ */ jsxs("span", { className: "inline-flex min-w-0 items-center gap-[var(--spacing-system-xsf)]", children: [
|
|
33
|
+
/* @__PURE__ */ jsx(Icon, { size: 24, className: cn("shrink-0", toneClassName), "aria-hidden": true }),
|
|
34
|
+
/* @__PURE__ */ jsx("span", { className: "truncate", children: label })
|
|
35
|
+
] });
|
|
36
|
+
};
|
|
37
|
+
const LEVEL_MENU_ITEM_CLASS = "p-[var(--spacing-system-sf)] text-h4 [&_svg]:size-4 md:[&_svg]:size-6";
|
|
27
38
|
const ApprovalLevelDropdown = ({ value, onChange, allowClear = false, triggerClassName, contentClassName, disabled }) => /* @__PURE__ */ jsxs(DropdownMenu, { children: [
|
|
28
39
|
/* @__PURE__ */ jsx(DropdownMenuTrigger, { asChild: true, disabled, children: /* @__PURE__ */ jsx(
|
|
29
40
|
Button,
|
|
30
41
|
{
|
|
31
42
|
variant: "outline",
|
|
32
43
|
disabled,
|
|
33
|
-
rightIcon: /* @__PURE__ */ jsx(
|
|
44
|
+
rightIcon: /* @__PURE__ */ jsx(Chevron02DownIcon, { className: "!h-6 !w-6 text-ods-text-secondary" }),
|
|
34
45
|
className: cn(
|
|
35
|
-
"flex h-auto items-center justify-between gap-[var(--spacing-system-xsf)] rounded-md border border-ods-border bg-ods-card !
|
|
46
|
+
"flex h-auto items-center justify-between gap-[var(--spacing-system-xsf)] rounded-md border border-ods-border bg-ods-card !p-[var(--spacing-system-sf)] transition-colors !text-h4 hover:bg-ods-bg-hover",
|
|
36
47
|
value ? "text-ods-text-primary" : "text-ods-text-secondary",
|
|
37
48
|
triggerClassName
|
|
38
49
|
),
|
|
39
|
-
children: value ?
|
|
50
|
+
children: value ? /* @__PURE__ */ jsx(LevelOption, { level: value }) : "Set Global Permission"
|
|
40
51
|
}
|
|
41
52
|
) }),
|
|
42
53
|
/* @__PURE__ */ jsxs(DropdownMenuContent, { align: "end", className: contentClassName, children: [
|
|
43
|
-
|
|
44
|
-
|
|
54
|
+
APPROVAL_LEVELS.map((level) => /* @__PURE__ */ jsx(DropdownMenuItem, { onClick: () => onChange(level), className: LEVEL_MENU_ITEM_CLASS, children: /* @__PURE__ */ jsx(LevelOption, { level }) }, level)),
|
|
55
|
+
allowClear && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
56
|
+
/* @__PURE__ */ jsx(DropdownMenuSeparator, {}),
|
|
57
|
+
/* @__PURE__ */ jsx(DropdownMenuItem, { onClick: () => onChange(void 0), className: LEVEL_MENU_ITEM_CLASS, children: "Clear Global Permission" })
|
|
58
|
+
] })
|
|
45
59
|
] })
|
|
46
60
|
] });
|
|
47
61
|
const PolicyRow = ({ policy, categoryId, editMode, onPermissionChange }) => {
|
|
48
|
-
const
|
|
49
|
-
|
|
50
|
-
|
|
62
|
+
const nameId = `policy-${categoryId}-${policy.id}`;
|
|
63
|
+
const level = policy.approvalLevel ? /* @__PURE__ */ jsx(
|
|
64
|
+
ApprovalLevelView,
|
|
65
|
+
{
|
|
66
|
+
value: policy.approvalLevel,
|
|
67
|
+
editable: editMode,
|
|
68
|
+
onChange: (next) => onPermissionChange(categoryId, policy.id, next),
|
|
69
|
+
"aria-labelledby": nameId
|
|
70
|
+
}
|
|
71
|
+
) : null;
|
|
51
72
|
return /* @__PURE__ */ jsxs("div", { className: "flex items-start gap-[var(--spacing-system-m)] border-b border-ods-border bg-ods-bg px-[var(--spacing-system-m)] py-[var(--spacing-system-sf)] last:border-b-0 content-md:items-center", children: [
|
|
52
|
-
/* @__PURE__ */ jsx("div", { className: ICON_TILE_CLASS, children: /* @__PURE__ */ jsx(ToolIcon, { toolType: policy.toolName, size: 16 }) }),
|
|
73
|
+
/* @__PURE__ */ jsx("div", { className: cn(ICON_TILE_CLASS, "text-ods-text-secondary", editMode && "hidden content-md:flex"), children: /* @__PURE__ */ jsx(ToolIcon, { toolType: policy.toolName, size: 16 }) }),
|
|
53
74
|
/* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-1 flex-col", children: [
|
|
54
|
-
/* @__PURE__ */
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
value: policy.approvalLevel,
|
|
60
|
-
onChange: handleChange,
|
|
61
|
-
triggerClassName: "w-full",
|
|
62
|
-
contentClassName: POLICY_LEVEL_WIDTH
|
|
63
|
-
}
|
|
64
|
-
) }) : policy.approvalLevel ? /* @__PURE__ */ jsx("span", { className: "text-ods-text-primary text-h4 content-md:hidden", children: getApprovalLevelLabel(policy.approvalLevel) }) : null
|
|
75
|
+
/* @__PURE__ */ jsxs("div", { className: "flex min-w-0 items-center gap-[var(--spacing-system-sf)]", children: [
|
|
76
|
+
/* @__PURE__ */ jsx("div", { className: "flex min-w-0 flex-1 flex-col", children: /* @__PURE__ */ jsx("p", { id: nameId, className: "truncate text-ods-text-primary text-h4", title: policy.name, children: policy.name }) }),
|
|
77
|
+
editMode && /* @__PURE__ */ jsx("span", { className: "flex shrink-0 text-ods-text-secondary content-md:hidden", children: /* @__PURE__ */ jsx(ToolIcon, { toolType: policy.toolName, size: 16 }) })
|
|
78
|
+
] }),
|
|
79
|
+
level && /* @__PURE__ */ jsx("div", { className: cn("flex content-md:hidden", editMode && "mt-[var(--spacing-system-sf)]"), children: level })
|
|
65
80
|
] }),
|
|
66
|
-
/* @__PURE__ */ jsx("div", { className: "hidden shrink-0 content-md:
|
|
67
|
-
ApprovalLevelDropdown,
|
|
68
|
-
{
|
|
69
|
-
value: policy.approvalLevel,
|
|
70
|
-
onChange: handleChange,
|
|
71
|
-
triggerClassName: POLICY_LEVEL_WIDTH,
|
|
72
|
-
contentClassName: POLICY_LEVEL_WIDTH
|
|
73
|
-
}
|
|
74
|
-
) : /* @__PURE__ */ jsx("div", { className: cn("px-[var(--spacing-system-sf)] py-[var(--spacing-system-xsf)]", POLICY_LEVEL_WIDTH), children: policy.approvalLevel && /* @__PURE__ */ jsx("span", { className: "text-ods-text-primary text-h4", children: getApprovalLevelLabel(policy.approvalLevel) }) }) })
|
|
81
|
+
level && /* @__PURE__ */ jsx("div", { className: "hidden shrink-0 items-center content-md:flex", children: level })
|
|
75
82
|
] });
|
|
76
83
|
};
|
|
77
84
|
const LOADING_CATEGORY = { id: "", name: "", policies: [] };
|
|
@@ -95,29 +102,22 @@ const CategorySection = ({
|
|
|
95
102
|
"div",
|
|
96
103
|
{
|
|
97
104
|
...loadingItemProps(props),
|
|
98
|
-
className: cn(
|
|
105
|
+
className: cn(
|
|
106
|
+
CATEGORY_HEADER_CLASS,
|
|
107
|
+
!loading && "cursor-pointer transition-colors hover:bg-ods-bg-hover [&:has([data-bulk-level]:hover)]:bg-ods-card"
|
|
108
|
+
),
|
|
99
109
|
onClick: loading ? void 0 : () => onToggle(category.id),
|
|
100
110
|
children: [
|
|
101
|
-
/* @__PURE__ */ jsx("div", { className: ICON_TILE_CLASS, children: /* @__PURE__ */ jsx("div", { className: "text-ods-text-secondary", children: category.icon ?? /* @__PURE__ */ jsx(
|
|
111
|
+
/* @__PURE__ */ jsx("div", { className: ICON_TILE_CLASS, children: /* @__PURE__ */ jsx("div", { className: "text-ods-text-secondary", children: category.icon ?? /* @__PURE__ */ jsx(ShieldIcon, { size: 16 }) }) }),
|
|
102
112
|
/* @__PURE__ */ jsxs("div", { className: CATEGORY_TEXT_CLASS, children: [
|
|
103
113
|
category.name ? /* @__PURE__ */ jsx("p", { className: "truncate text-ods-text-primary text-h4", title: category.name, children: category.name }) : /* @__PURE__ */ jsx(TextLineSkeleton, { type: "h4", className: "w-40 max-w-full" }),
|
|
104
114
|
loading ? /* @__PURE__ */ jsx(TextLineSkeleton, { type: "h6", className: "w-24" }) : /* @__PURE__ */ jsxs("p", { className: "text-ods-text-secondary text-h6", children: [
|
|
105
115
|
category.policies.length,
|
|
106
|
-
"
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
ApprovalLevelDropdown,
|
|
110
|
-
{
|
|
111
|
-
value: bulkLevel,
|
|
112
|
-
onChange: handleBulkChange,
|
|
113
|
-
allowClear: true,
|
|
114
|
-
triggerClassName: "w-full",
|
|
115
|
-
contentClassName: CATEGORY_LEVEL_WIDTH,
|
|
116
|
-
disabled: loading
|
|
117
|
-
}
|
|
118
|
-
) })
|
|
116
|
+
" ",
|
|
117
|
+
category.policies.length === 1 ? "Configuration" : "Configurations"
|
|
118
|
+
] })
|
|
119
119
|
] }),
|
|
120
|
-
editMode ? /* @__PURE__ */ jsx("div", { className: "hidden shrink-0 content-md:block", onClick: (e) => e.stopPropagation(), children: /* @__PURE__ */ jsx(
|
|
120
|
+
editMode ? /* @__PURE__ */ jsx("div", { "data-bulk-level": true, className: "hidden shrink-0 content-md:block", onClick: (e) => e.stopPropagation(), children: /* @__PURE__ */ jsx(
|
|
121
121
|
ApprovalLevelDropdown,
|
|
122
122
|
{
|
|
123
123
|
value: bulkLevel,
|
|
@@ -138,8 +138,12 @@ const CategorySection = ({
|
|
|
138
138
|
e.stopPropagation();
|
|
139
139
|
onToggle(category.id);
|
|
140
140
|
},
|
|
141
|
-
leftIcon: /* @__PURE__ */ jsx(
|
|
142
|
-
className:
|
|
141
|
+
leftIcon: /* @__PURE__ */ jsx(Chevron02DownIcon, { className: cn(CHEVRON_CLASS, isExpanded && "rotate-180") }),
|
|
142
|
+
className: cn(
|
|
143
|
+
"h-auto w-auto shrink-0 rounded-md !p-[var(--spacing-system-xsf)] content-md:!p-[var(--spacing-system-sf)]",
|
|
144
|
+
// The row is the hover; the chevron adds none of its own.
|
|
145
|
+
"hover:bg-transparent active:bg-transparent"
|
|
146
|
+
),
|
|
143
147
|
"aria-label": isExpanded ? "Collapse" : "Expand"
|
|
144
148
|
}
|
|
145
149
|
)
|
|
@@ -157,16 +161,23 @@ const CategorySection = ({
|
|
|
157
161
|
visibility: isExpanded ? "visible" : "hidden"
|
|
158
162
|
},
|
|
159
163
|
className: isExpanded ? "opacity-100" : "opacity-0",
|
|
160
|
-
children: /* @__PURE__ */ jsx(
|
|
161
|
-
|
|
164
|
+
children: /* @__PURE__ */ jsx(
|
|
165
|
+
"div",
|
|
162
166
|
{
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
167
|
+
ref: innerRef,
|
|
168
|
+
className: "border-t border-ods-border px-[var(--spacing-system-mf)] pb-[var(--spacing-system-mf)] pt-[var(--spacing-system-mf)]",
|
|
169
|
+
children: /* @__PURE__ */ jsx("div", { className: "overflow-hidden rounded-md border border-ods-border", children: (loading ? [] : category.policies).map((policy) => /* @__PURE__ */ jsx(
|
|
170
|
+
PolicyRow,
|
|
171
|
+
{
|
|
172
|
+
policy,
|
|
173
|
+
categoryId: category.id,
|
|
174
|
+
editMode,
|
|
175
|
+
onPermissionChange: onPolicyPermissionChange
|
|
176
|
+
},
|
|
177
|
+
policy.id
|
|
178
|
+
)) })
|
|
179
|
+
}
|
|
180
|
+
)
|
|
170
181
|
}
|
|
171
182
|
)
|
|
172
183
|
] });
|
|
@@ -5,5 +5,5 @@ export { SOFTWARE_ACTION_COPY, SOFTWARE_ACTION_DETAIL_TITLE, type SoftwareAction
|
|
|
5
5
|
export { SoftwareActionForm, type SoftwareActionFormProps, type SoftwareActionFormValues, type SoftwareDeviceScope, type SoftwareRunMode, } from './software-action-form';
|
|
6
6
|
export { newSoftwareRow, type SelectedPackage, type SoftwareRow } from './software-row';
|
|
7
7
|
export { type PackageSearchSlotProps, SoftwareRowFields, type SoftwareRowFieldsProps } from './software-row-fields';
|
|
8
|
-
export { DEFAULT_SOFTWARE_UPDATE_POLICY, DEFAULT_SOFTWARE_UPDATE_SETTINGS, SOFTWARE_UPDATE_COUNTDOWN_OPTIONS, SOFTWARE_UPDATE_DEADLINE_OPTIONS, type SoftwareUpdateMode, type SoftwareUpdatePolicy, SoftwareUpdateSettingsFields, type SoftwareUpdateSettingsFieldsProps, type SoftwareUpdateSettingsValues, } from './update-settings-fields';
|
|
8
|
+
export { DEFAULT_SOFTWARE_UPDATE_POLICY, DEFAULT_SOFTWARE_UPDATE_SETTINGS, defaultSoftwareUpdateSettings, SOFTWARE_UPDATE_COUNTDOWN_OPTIONS, SOFTWARE_UPDATE_DEADLINE_OPTIONS, type SoftwareUpdateMode, type SoftwareUpdatePolicy, SoftwareUpdateSettingsFields, type SoftwareUpdateSettingsFieldsProps, type SoftwareUpdateSettingsValues, } from './update-settings-fields';
|
|
9
9
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/features/software/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,kBAAkB,EAClB,gBAAgB,EAChB,mBAAmB,EACnB,qBAAqB,EACrB,KAAK,kBAAkB,EACvB,KAAK,uBAAuB,GAC7B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,oBAAoB,EACpB,0BAA0B,EAC1B,6BAA6B,GAC9B,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACL,sBAAsB,EACtB,KAAK,2BAA2B,EAChC,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,GAC5B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,oBAAoB,EACpB,4BAA4B,EAC5B,KAAK,kBAAkB,EACvB,kBAAkB,EAClB,KAAK,kBAAkB,GACxB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,kBAAkB,EAClB,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,EAC7B,KAAK,mBAAmB,EACxB,KAAK,eAAe,GACrB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,cAAc,EAAE,KAAK,eAAe,EAAE,KAAK,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACxF,OAAO,EAAE,KAAK,sBAAsB,EAAE,iBAAiB,EAAE,KAAK,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AACpH,OAAO,EACL,8BAA8B,EAC9B,gCAAgC,EAChC,iCAAiC,EACjC,gCAAgC,EAChC,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,4BAA4B,EAC5B,KAAK,iCAAiC,EACtC,KAAK,4BAA4B,GAClC,MAAM,0BAA0B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/features/software/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,kBAAkB,EAClB,gBAAgB,EAChB,mBAAmB,EACnB,qBAAqB,EACrB,KAAK,kBAAkB,EACvB,KAAK,uBAAuB,GAC7B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,oBAAoB,EACpB,0BAA0B,EAC1B,6BAA6B,GAC9B,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACL,sBAAsB,EACtB,KAAK,2BAA2B,EAChC,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,GAC5B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,oBAAoB,EACpB,4BAA4B,EAC5B,KAAK,kBAAkB,EACvB,kBAAkB,EAClB,KAAK,kBAAkB,GACxB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,kBAAkB,EAClB,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,EAC7B,KAAK,mBAAmB,EACxB,KAAK,eAAe,GACrB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,cAAc,EAAE,KAAK,eAAe,EAAE,KAAK,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACxF,OAAO,EAAE,KAAK,sBAAsB,EAAE,iBAAiB,EAAE,KAAK,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AACpH,OAAO,EACL,8BAA8B,EAC9B,gCAAgC,EAChC,6BAA6B,EAC7B,iCAAiC,EACjC,gCAAgC,EAChC,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,4BAA4B,EAC5B,KAAK,iCAAiC,EACtC,KAAK,4BAA4B,GAClC,MAAM,0BAA0B,CAAC"}
|
|
@@ -27,6 +27,7 @@ import { SoftwareRowFields } from "./software-row-fields.js";
|
|
|
27
27
|
import {
|
|
28
28
|
DEFAULT_SOFTWARE_UPDATE_POLICY,
|
|
29
29
|
DEFAULT_SOFTWARE_UPDATE_SETTINGS,
|
|
30
|
+
defaultSoftwareUpdateSettings,
|
|
30
31
|
SOFTWARE_UPDATE_COUNTDOWN_OPTIONS,
|
|
31
32
|
SOFTWARE_UPDATE_DEADLINE_OPTIONS,
|
|
32
33
|
SoftwareUpdateSettingsFields
|
|
@@ -50,6 +51,7 @@ export {
|
|
|
50
51
|
SoftwareRowFields,
|
|
51
52
|
SoftwareScheduleFields,
|
|
52
53
|
SoftwareUpdateSettingsFields,
|
|
54
|
+
defaultSoftwareUpdateSettings,
|
|
53
55
|
newSoftwareRow,
|
|
54
56
|
packageManagerLabel,
|
|
55
57
|
softwareActionCopy
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"software-action-copy.d.ts","sourceRoot":"","sources":["../../../../src/components/features/software/software-action-copy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAEtD,gDAAgD;AAChD,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEtD,MAAM,WAAW,kBAAkB;IACjC,2FAA2F;IAC3F,IAAI,EAAE,MAAM,CAAC;IACb,0CAA0C;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,qBAAqB,EAAE,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,gEAAgE;IAChE,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;
|
|
1
|
+
{"version":3,"file":"software-action-copy.d.ts","sourceRoot":"","sources":["../../../../src/components/features/software/software-action-copy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAEtD,gDAAgD;AAChD,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEtD,MAAM,WAAW,kBAAkB;IACjC,2FAA2F;IAC3F,IAAI,EAAE,MAAM,CAAC;IACb,0CAA0C;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,qBAAqB,EAAE,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,gEAAgE;IAChE,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAiBD,8FAA8F;AAC9F,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,kBAAkB,EAAE,kBAAkB,CA+B/E,CAAC;AAEF,kHAAkH;AAClH,eAAO,MAAM,4BAA4B,4BAA4B,CAAC;AAEtE,+GAA+G;AAC/G,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS,CAEjF"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
|
+
const nowDescription = (noun) => `The ${noun} starts now on online devices, and on the others when they come online.`;
|
|
3
|
+
const scheduleDescription = (noun) => `The ${noun} runs at the scheduled time. Devices offline then get it when they come back online, within 7 days.`;
|
|
2
4
|
const SOFTWARE_ACTION_COPY = {
|
|
3
5
|
INSTALL: {
|
|
4
6
|
verb: "Install",
|
|
@@ -6,12 +8,8 @@ const SOFTWARE_ACTION_COPY = {
|
|
|
6
8
|
runLabel: "Run Installation",
|
|
7
9
|
scheduleLabel: "Schedule Install",
|
|
8
10
|
modes: [
|
|
9
|
-
{ value: "now", label: "Install Now", description: "
|
|
10
|
-
{
|
|
11
|
-
value: "schedule",
|
|
12
|
-
label: "Schedule Install",
|
|
13
|
-
description: "The install runs automatically at the scheduled time."
|
|
14
|
-
}
|
|
11
|
+
{ value: "now", label: "Install Now", description: nowDescription("install") },
|
|
12
|
+
{ value: "schedule", label: "Schedule Install", description: scheduleDescription("install") }
|
|
15
13
|
],
|
|
16
14
|
started: "Installation started",
|
|
17
15
|
scheduled: "Installation scheduled",
|
|
@@ -25,12 +23,8 @@ const SOFTWARE_ACTION_COPY = {
|
|
|
25
23
|
runLabel: "Run Update",
|
|
26
24
|
scheduleLabel: "Schedule Update",
|
|
27
25
|
modes: [
|
|
28
|
-
{ value: "now", label: "Update Now", description: "
|
|
29
|
-
{
|
|
30
|
-
value: "schedule",
|
|
31
|
-
label: "Schedule Update",
|
|
32
|
-
description: "The update runs automatically at the scheduled time."
|
|
33
|
-
}
|
|
26
|
+
{ value: "now", label: "Update Now", description: nowDescription("update") },
|
|
27
|
+
{ value: "schedule", label: "Schedule Update", description: scheduleDescription("update") }
|
|
34
28
|
],
|
|
35
29
|
started: "Update started",
|
|
36
30
|
scheduled: "Update scheduled",
|
|
@@ -62,6 +62,12 @@ export interface SoftwareActionFormProps<TRef extends string = string> {
|
|
|
62
62
|
* settings yet never shows choices that go nowhere; the host that submits `updateSettings` passes true.
|
|
63
63
|
*/
|
|
64
64
|
showUpdateSettings?: boolean;
|
|
65
|
+
/**
|
|
66
|
+
* "Update Settings" offer Wait & notify and the countdowns, which need the devices to notify the user. Default false:
|
|
67
|
+
* Wait (with an optional deadline that closes the app without warning) or Force Update, opening on Force Update, and
|
|
68
|
+
* no countdown.
|
|
69
|
+
*/
|
|
70
|
+
updateUserNotifications?: boolean;
|
|
65
71
|
/** The "Device Selection" heading over the picker. Default true; a host that titles the picker itself passes false. */
|
|
66
72
|
showDeviceHeading?: boolean;
|
|
67
73
|
className?: string;
|
|
@@ -75,5 +81,5 @@ export interface SoftwareActionFormProps<TRef extends string = string> {
|
|
|
75
81
|
* catalog and picking devices are the host's queries, so both are slots: the
|
|
76
82
|
* product passes its data-bound field and picker, a fixture passes static ones.
|
|
77
83
|
*/
|
|
78
|
-
export declare function SoftwareActionForm<TRef extends string = string>({ action, onBack, showHeader, onSubmit, submitDisabled, submitting, timing, initialValues, renderPackageSearch, renderDevicePicker, addRows, runModeLayout, showUpdateSettings, showDeviceHeading, className, }: SoftwareActionFormProps<TRef>): import("react").JSX.Element;
|
|
84
|
+
export declare function SoftwareActionForm<TRef extends string = string>({ action, onBack, showHeader, onSubmit, submitDisabled, submitting, timing, initialValues, renderPackageSearch, renderDevicePicker, addRows, runModeLayout, showUpdateSettings, updateUserNotifications, showDeviceHeading, className, }: SoftwareActionFormProps<TRef>): import("react").JSX.Element;
|
|
79
85
|
//# sourceMappingURL=software-action-form.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"software-action-form.d.ts","sourceRoot":"","sources":["../../../../src/components/features/software/software-action-form.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAY,MAAM,OAAO,CAAC;AAKjD,OAAO,EAA0B,KAAK,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AACxF,OAAO,EAAwB,KAAK,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACvF,OAAO,EAAkB,KAAK,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClE,OAAO,EAAE,KAAK,sBAAsB,EAAqB,MAAM,uBAAuB,CAAC;AACvF,OAAO,EAGL,KAAK,4BAA4B,EAClC,MAAM,0BAA0B,CAAC;AAElC,qDAAqD;AACrD,MAAM,MAAM,eAAe,GAAG,KAAK,GAAG,UAAU,CAAC;AAEjD,6FAA6F;AAC7F,MAAM,WAAW,wBAAwB,CAAC,IAAI,SAAS,MAAM,GAAG,MAAM;IACpE,IAAI,EAAE,WAAW,EAAE,CAAC;IACpB,IAAI,EAAE,eAAe,CAAC;IACtB,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,IAAI,CAAC;IACpB,kHAAkH;IAClH,cAAc,CAAC,EAAE,4BAA4B,CAAC;CAC/C;AAED,yFAAyF;AACzF,MAAM,WAAW,mBAAmB;IAClC,4EAA4E;IAC5E,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB;;;OAGG;IACH,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,uBAAuB,CAAC,IAAI,SAAS,MAAM,GAAG,MAAM;IACnE,MAAM,EAAE,kBAAkB,CAAC;IAC3B,gHAAgH;IAChH,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,4EAA4E;IAC5E,QAAQ,EAAE,CAAC,MAAM,EAAE,wBAAwB,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;IAC3D,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,sCAAsC;IACtC,MAAM,EAAE,sBAAsB,CAAC,IAAI,CAAC,CAAC;IACrC,uGAAuG;IACvG,aAAa,EAAE,OAAO,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC,GAAG;QAAE,aAAa,EAAE,IAAI,CAAA;KAAE,CAAC;IACjF,6CAA6C;IAC7C,mBAAmB,EAAE,CAAC,KAAK,EAAE,sBAAsB,KAAK,SAAS,CAAC;IAClE,iEAAiE;IACjE,kBAAkB,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,SAAS,CAAC;IAC9D,qGAAqG;IACrG,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;OAIG;IACH,aAAa,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC;IACrC;;;OAGG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,uHAAuH;IACvH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAID;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,SAAS,MAAM,GAAG,MAAM,EAAE,EAC/D,MAAM,EACN,MAAM,EACN,UAAiB,EACjB,QAAQ,EACR,cAAsB,EACtB,UAAkB,EAClB,MAAM,EACN,aAAa,EACb,mBAAmB,EACnB,kBAAkB,EAClB,OAAc,EACd,aAAyB,EACzB,kBAA0B,EAC1B,iBAAwB,EACxB,SAAuE,GACxE,EAAE,uBAAuB,CAAC,IAAI,CAAC,+
|
|
1
|
+
{"version":3,"file":"software-action-form.d.ts","sourceRoot":"","sources":["../../../../src/components/features/software/software-action-form.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAY,MAAM,OAAO,CAAC;AAKjD,OAAO,EAA0B,KAAK,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AACxF,OAAO,EAAwB,KAAK,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACvF,OAAO,EAAkB,KAAK,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClE,OAAO,EAAE,KAAK,sBAAsB,EAAqB,MAAM,uBAAuB,CAAC;AACvF,OAAO,EAGL,KAAK,4BAA4B,EAClC,MAAM,0BAA0B,CAAC;AAElC,qDAAqD;AACrD,MAAM,MAAM,eAAe,GAAG,KAAK,GAAG,UAAU,CAAC;AAEjD,6FAA6F;AAC7F,MAAM,WAAW,wBAAwB,CAAC,IAAI,SAAS,MAAM,GAAG,MAAM;IACpE,IAAI,EAAE,WAAW,EAAE,CAAC;IACpB,IAAI,EAAE,eAAe,CAAC;IACtB,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,IAAI,CAAC;IACpB,kHAAkH;IAClH,cAAc,CAAC,EAAE,4BAA4B,CAAC;CAC/C;AAED,yFAAyF;AACzF,MAAM,WAAW,mBAAmB;IAClC,4EAA4E;IAC5E,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB;;;OAGG;IACH,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,uBAAuB,CAAC,IAAI,SAAS,MAAM,GAAG,MAAM;IACnE,MAAM,EAAE,kBAAkB,CAAC;IAC3B,gHAAgH;IAChH,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,4EAA4E;IAC5E,QAAQ,EAAE,CAAC,MAAM,EAAE,wBAAwB,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;IAC3D,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,sCAAsC;IACtC,MAAM,EAAE,sBAAsB,CAAC,IAAI,CAAC,CAAC;IACrC,uGAAuG;IACvG,aAAa,EAAE,OAAO,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC,GAAG;QAAE,aAAa,EAAE,IAAI,CAAA;KAAE,CAAC;IACjF,6CAA6C;IAC7C,mBAAmB,EAAE,CAAC,KAAK,EAAE,sBAAsB,KAAK,SAAS,CAAC;IAClE,iEAAiE;IACjE,kBAAkB,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,SAAS,CAAC;IAC9D,qGAAqG;IACrG,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;OAIG;IACH,aAAa,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC;IACrC;;;OAGG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B;;;;OAIG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,uHAAuH;IACvH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAID;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,SAAS,MAAM,GAAG,MAAM,EAAE,EAC/D,MAAM,EACN,MAAM,EACN,UAAiB,EACjB,QAAQ,EACR,cAAsB,EACtB,UAAkB,EAClB,MAAM,EACN,aAAa,EACb,mBAAmB,EACnB,kBAAkB,EAClB,OAAc,EACd,aAAyB,EACzB,kBAA0B,EAC1B,uBAA+B,EAC/B,iBAAwB,EACxB,SAAuE,GACxE,EAAE,uBAAuB,CAAC,IAAI,CAAC,+BA4H/B"}
|
|
@@ -10,7 +10,7 @@ import { SOFTWARE_ACTION_COPY } from "./software-action-copy.js";
|
|
|
10
10
|
import { newSoftwareRow } from "./software-row.js";
|
|
11
11
|
import { SoftwareRowFields } from "./software-row-fields.js";
|
|
12
12
|
import {
|
|
13
|
-
|
|
13
|
+
defaultSoftwareUpdateSettings,
|
|
14
14
|
SoftwareUpdateSettingsFields
|
|
15
15
|
} from "./update-settings-fields.js";
|
|
16
16
|
const INITIAL_ROWS = () => [newSoftwareRow("row-0")];
|
|
@@ -28,6 +28,7 @@ function SoftwareActionForm({
|
|
|
28
28
|
addRows = true,
|
|
29
29
|
runModeLayout = "stacked",
|
|
30
30
|
showUpdateSettings = false,
|
|
31
|
+
updateUserNotifications = false,
|
|
31
32
|
showDeviceHeading = true,
|
|
32
33
|
className = "px-[var(--spacing-system-l)] pb-[var(--spacing-system-l)]"
|
|
33
34
|
}) {
|
|
@@ -38,7 +39,7 @@ function SoftwareActionForm({
|
|
|
38
39
|
const [time, setTime] = useState(initialValues.time ?? "");
|
|
39
40
|
const [timeReference, setTimeReference] = useState(initialValues.timeReference);
|
|
40
41
|
const [updateSettings, setUpdateSettings] = useState(
|
|
41
|
-
() => initialValues.updateSettings ??
|
|
42
|
+
() => initialValues.updateSettings ?? defaultSoftwareUpdateSettings(updateUserNotifications)
|
|
42
43
|
);
|
|
43
44
|
const withUpdateSettings = action === "UPDATE" && showUpdateSettings;
|
|
44
45
|
const osTypesKey = [...new Set(rows.map((row) => PACKAGE_MANAGER_OS[row.packageManager]))].sort().join(",");
|
|
@@ -128,7 +129,14 @@ function SoftwareActionForm({
|
|
|
128
129
|
runModeField,
|
|
129
130
|
scheduleFields
|
|
130
131
|
] }),
|
|
131
|
-
withUpdateSettings && /* @__PURE__ */ jsx(
|
|
132
|
+
withUpdateSettings && /* @__PURE__ */ jsx(
|
|
133
|
+
SoftwareUpdateSettingsFields,
|
|
134
|
+
{
|
|
135
|
+
value: updateSettings,
|
|
136
|
+
onChange: setUpdateSettings,
|
|
137
|
+
userNotifications: updateUserNotifications
|
|
138
|
+
}
|
|
139
|
+
),
|
|
132
140
|
showDeviceHeading && /* @__PURE__ */ jsx("h2", { className: "pt-[var(--spacing-system-l)] text-ods-text-primary text-h2", children: "Device Selection" }),
|
|
133
141
|
renderDevicePicker({ osTypes: osTypesKey.split(","), osTypesKey })
|
|
134
142
|
]
|
|
@@ -30,14 +30,25 @@ export declare const SOFTWARE_UPDATE_COUNTDOWN_OPTIONS: ReadonlyArray<{
|
|
|
30
30
|
/** Wait & notify, a countdown 7 days after the first try, 5 minutes long: what the server applies when sent none. */
|
|
31
31
|
export declare const DEFAULT_SOFTWARE_UPDATE_POLICY: SoftwareUpdatePolicy;
|
|
32
32
|
export declare const DEFAULT_SOFTWARE_UPDATE_SETTINGS: SoftwareUpdateSettingsValues;
|
|
33
|
+
/**
|
|
34
|
+
* What the form opens with. With user notifications, the server's own defaults. Without them, Force Update: an app is
|
|
35
|
+
* never closed unannounced a week later, and nobody is promised a prompt that cannot be shown.
|
|
36
|
+
*/
|
|
37
|
+
export declare function defaultSoftwareUpdateSettings(userNotifications: boolean): SoftwareUpdateSettingsValues;
|
|
33
38
|
export interface SoftwareUpdateSettingsFieldsProps {
|
|
34
39
|
value: SoftwareUpdateSettingsValues;
|
|
35
40
|
onChange: (value: SoftwareUpdateSettingsValues) => void;
|
|
41
|
+
/**
|
|
42
|
+
* The devices can notify the user: Wait & notify, its countdown after the deadline and the countdowns. Default false,
|
|
43
|
+
* as today, when the client has no notifications: Wait (until the user closes the app, or a deadline closes it without
|
|
44
|
+
* warning) or Force Update, and no countdown.
|
|
45
|
+
*/
|
|
46
|
+
userNotifications?: boolean;
|
|
36
47
|
}
|
|
37
48
|
/**
|
|
38
49
|
* Update Software's "Update Settings" (design 988:21462, the separate auto-update
|
|
39
50
|
* rules 1034:8173): what happens on a device where the app is running, and
|
|
40
51
|
* whether later releases are installed the same way.
|
|
41
52
|
*/
|
|
42
|
-
export declare function SoftwareUpdateSettingsFields({ value, onChange }: SoftwareUpdateSettingsFieldsProps): import("react").JSX.Element;
|
|
53
|
+
export declare function SoftwareUpdateSettingsFields({ value, onChange, userNotifications, }: SoftwareUpdateSettingsFieldsProps): import("react").JSX.Element;
|
|
43
54
|
//# sourceMappingURL=update-settings-fields.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-settings-fields.d.ts","sourceRoot":"","sources":["../../../../src/components/features/software/update-settings-fields.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"update-settings-fields.d.ts","sourceRoot":"","sources":["../../../../src/components/features/software/update-settings-fields.tsx"],"names":[],"mappings":"AAcA,gEAAgE;AAChE,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,OAAO,CAAC;AAElD,yFAAyF;AACzF,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,kBAAkB,CAAC;IACzB,2GAA2G;IAC3G,eAAe,EAAE,OAAO,CAAC;IACzB,0EAA0E;IAC1E,eAAe,EAAE,MAAM,CAAC;IACxB,sGAAsG;IACtG,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,uGAAuG;AACvG,MAAM,WAAW,4BAA4B;IAC3C,MAAM,EAAE,oBAAoB,CAAC;IAC7B,oGAAoG;IACpG,UAAU,EAAE,OAAO,CAAC;IACpB,qGAAqG;IACrG,iBAAiB,EAAE,OAAO,CAAC;IAC3B,gBAAgB,EAAE,oBAAoB,CAAC;CACxC;AAKD,eAAO,MAAM,gCAAgC,EAAE,aAAa,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAM9F,CAAC;AAEF,eAAO,MAAM,iCAAiC,EAAE,aAAa,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAK/F,CAAC;AAEF,qHAAqH;AACrH,eAAO,MAAM,8BAA8B,EAAE,oBAK5C,CAAC;AAEF,eAAO,MAAM,gCAAgC,EAAE,4BAK9C,CAAC;AASF;;;GAGG;AACH,wBAAgB,6BAA6B,CAAC,iBAAiB,EAAE,OAAO,GAAG,4BAA4B,CAGtG;AAkLD,MAAM,WAAW,iCAAiC;IAChD,KAAK,EAAE,4BAA4B,CAAC;IACpC,QAAQ,EAAE,CAAC,KAAK,EAAE,4BAA4B,KAAK,IAAI,CAAC;IACxD;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;;;GAIG;AACH,wBAAgB,4BAA4B,CAAC,EAC3C,KAAK,EACL,QAAQ,EACR,iBAAyB,GAC1B,EAAE,iCAAiC,+BAwDnC"}
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { InfoCircleIcon } from "../../icons-v2-generated/index.js";
|
|
4
3
|
import {
|
|
5
|
-
Alert,
|
|
6
4
|
CheckboxBlock,
|
|
7
5
|
Label,
|
|
8
6
|
RadioGroupBlock,
|
|
@@ -39,22 +37,57 @@ const DEFAULT_SOFTWARE_UPDATE_SETTINGS = {
|
|
|
39
37
|
sameForAutoUpdate: true,
|
|
40
38
|
autoUpdatePolicy: DEFAULT_SOFTWARE_UPDATE_POLICY
|
|
41
39
|
};
|
|
42
|
-
const
|
|
43
|
-
|
|
40
|
+
const FORCE_UPDATE_POLICY = {
|
|
41
|
+
...DEFAULT_SOFTWARE_UPDATE_POLICY,
|
|
42
|
+
mode: "FORCE",
|
|
43
|
+
deadlineEnabled: false
|
|
44
|
+
};
|
|
45
|
+
function defaultSoftwareUpdateSettings(userNotifications) {
|
|
46
|
+
if (userNotifications) return DEFAULT_SOFTWARE_UPDATE_SETTINGS;
|
|
47
|
+
return { ...DEFAULT_SOFTWARE_UPDATE_SETTINGS, policy: FORCE_UPDATE_POLICY, autoUpdatePolicy: FORCE_UPDATE_POLICY };
|
|
48
|
+
}
|
|
49
|
+
function closeDelay(countdownSeconds) {
|
|
50
|
+
const option = SOFTWARE_UPDATE_COUNTDOWN_OPTIONS.find((candidate) => candidate.seconds === countdownSeconds);
|
|
51
|
+
if (option) return option.label;
|
|
52
|
+
const minutes = Math.max(1, Math.round(countdownSeconds / 60));
|
|
53
|
+
return minutes === 1 ? "1 minute" : `${minutes} minutes`;
|
|
54
|
+
}
|
|
55
|
+
const NOTIFIED_COPY = {
|
|
56
|
+
wait: {
|
|
44
57
|
value: "WAIT",
|
|
45
58
|
label: "Wait & notify",
|
|
46
59
|
description: "The user gets Update now or Ask Later. If they close the app, it updates then."
|
|
47
60
|
},
|
|
48
|
-
{
|
|
61
|
+
force: {
|
|
49
62
|
value: "FORCE",
|
|
50
63
|
label: "Force Update",
|
|
51
64
|
description: "The user gets a short countdown, then the app closes and updates."
|
|
65
|
+
},
|
|
66
|
+
deadline: {
|
|
67
|
+
label: "Countdown after the deadline",
|
|
68
|
+
description: "If the update still isn\u2019t installed by the deadline, the user gets a countdown and then it installs."
|
|
52
69
|
}
|
|
53
|
-
|
|
70
|
+
};
|
|
71
|
+
function silentCopy(countdownSeconds) {
|
|
72
|
+
const delay = closeDelay(countdownSeconds);
|
|
73
|
+
return {
|
|
74
|
+
wait: { value: "WAIT", label: "Wait", description: "The update waits until the user closes the app." },
|
|
75
|
+
force: {
|
|
76
|
+
value: "FORCE",
|
|
77
|
+
label: "Force Update",
|
|
78
|
+
description: `The app is closed without warning ${delay} later, then updated.`
|
|
79
|
+
},
|
|
80
|
+
deadline: {
|
|
81
|
+
label: "Close the app after a deadline",
|
|
82
|
+
description: `If the app is still open by the deadline, it is closed without warning ${delay} later, then updated.`
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
}
|
|
54
86
|
const SAME_SETTINGS_DESCRIPTION = {
|
|
55
87
|
WAIT: 'Auto-updates follow "If the app is running" above. Uncheck to set them separately.',
|
|
56
88
|
FORCE: "Later releases will also be force-updated."
|
|
57
89
|
};
|
|
90
|
+
const AUTO_UPDATE_DESCRIPTION = "After this update, OpenFrame installs each new version from Winget or Brew on the selected devices. Leaving it off does not turn off auto-update that is already on there.";
|
|
58
91
|
const groupLabelClass = "text-h5 text-ods-text-secondary";
|
|
59
92
|
function SecondsSelect({
|
|
60
93
|
label,
|
|
@@ -74,11 +107,13 @@ function UpdatePolicyFields({
|
|
|
74
107
|
name,
|
|
75
108
|
label,
|
|
76
109
|
policy,
|
|
110
|
+
userNotifications,
|
|
77
111
|
onChange
|
|
78
112
|
}) {
|
|
113
|
+
const copy = userNotifications ? NOTIFIED_COPY : silentCopy(policy.countdownSeconds);
|
|
79
114
|
const waits = policy.mode === "WAIT";
|
|
80
115
|
const deadline = waits && policy.deadlineEnabled;
|
|
81
|
-
const countdown = /* @__PURE__ */ jsx(
|
|
116
|
+
const countdown = userNotifications && /* @__PURE__ */ jsx(
|
|
82
117
|
SecondsSelect,
|
|
83
118
|
{
|
|
84
119
|
label: "Countdown",
|
|
@@ -98,7 +133,7 @@ function UpdatePolicyFields({
|
|
|
98
133
|
variant: "grouped",
|
|
99
134
|
value: policy.mode,
|
|
100
135
|
onValueChange: (mode) => onChange({ ...policy, mode }),
|
|
101
|
-
options:
|
|
136
|
+
options: [copy.wait, copy.force],
|
|
102
137
|
itemClassName: "py-[var(--spacing-system-sf)]"
|
|
103
138
|
}
|
|
104
139
|
)
|
|
@@ -110,8 +145,8 @@ function UpdatePolicyFields({
|
|
|
110
145
|
id: `${name}-deadline`,
|
|
111
146
|
checked: policy.deadlineEnabled,
|
|
112
147
|
onCheckedChange: (deadlineEnabled) => onChange({ ...policy, deadlineEnabled }),
|
|
113
|
-
label:
|
|
114
|
-
description:
|
|
148
|
+
label: copy.deadline.label,
|
|
149
|
+
description: copy.deadline.description
|
|
115
150
|
}
|
|
116
151
|
),
|
|
117
152
|
deadline && /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-1 gap-[var(--spacing-system-lf)] content-md:grid-cols-3 content-md:items-start", children: [
|
|
@@ -126,10 +161,14 @@ function UpdatePolicyFields({
|
|
|
126
161
|
),
|
|
127
162
|
countdown
|
|
128
163
|
] })
|
|
129
|
-
] }) : /* @__PURE__ */ jsx("div", { className: "grid grid-cols-1 gap-[var(--spacing-system-lf)] content-md:grid-cols-3", children: countdown })
|
|
164
|
+
] }) : userNotifications && /* @__PURE__ */ jsx("div", { className: "grid grid-cols-1 gap-[var(--spacing-system-lf)] content-md:grid-cols-3", children: countdown })
|
|
130
165
|
] });
|
|
131
166
|
}
|
|
132
|
-
function SoftwareUpdateSettingsFields({
|
|
167
|
+
function SoftwareUpdateSettingsFields({
|
|
168
|
+
value,
|
|
169
|
+
onChange,
|
|
170
|
+
userNotifications = false
|
|
171
|
+
}) {
|
|
133
172
|
return /* @__PURE__ */ jsxs("section", { "aria-labelledby": "software-update-settings", className: "flex flex-col gap-[var(--spacing-system-l)]", children: [
|
|
134
173
|
/* @__PURE__ */ jsx("h2", { id: "software-update-settings", className: "pt-[var(--spacing-system-l)] text-ods-text-primary text-h2", children: "Update Settings" }),
|
|
135
174
|
/* @__PURE__ */ jsx(
|
|
@@ -138,6 +177,7 @@ function SoftwareUpdateSettingsFields({ value, onChange }) {
|
|
|
138
177
|
name: "updatePolicy",
|
|
139
178
|
label: "If the app is running",
|
|
140
179
|
policy: value.policy,
|
|
180
|
+
userNotifications,
|
|
141
181
|
onChange: (policy) => onChange({ ...value, policy })
|
|
142
182
|
}
|
|
143
183
|
),
|
|
@@ -151,7 +191,7 @@ function SoftwareUpdateSettingsFields({ value, onChange }) {
|
|
|
151
191
|
checked: value.autoUpdate,
|
|
152
192
|
onCheckedChange: (autoUpdate) => onChange({ ...value, autoUpdate }),
|
|
153
193
|
label: "Keep it auto-updated",
|
|
154
|
-
description:
|
|
194
|
+
description: AUTO_UPDATE_DESCRIPTION
|
|
155
195
|
}
|
|
156
196
|
),
|
|
157
197
|
value.autoUpdate && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
@@ -171,26 +211,13 @@ function SoftwareUpdateSettingsFields({ value, onChange }) {
|
|
|
171
211
|
name: "autoUpdatePolicy",
|
|
172
212
|
label: "For auto-updates",
|
|
173
213
|
policy: value.autoUpdatePolicy,
|
|
214
|
+
userNotifications,
|
|
174
215
|
onChange: (autoUpdatePolicy) => onChange({ ...value, autoUpdatePolicy })
|
|
175
216
|
}
|
|
176
217
|
) })
|
|
177
218
|
] })
|
|
178
219
|
] })
|
|
179
|
-
] })
|
|
180
|
-
value.autoUpdate && /* @__PURE__ */ jsxs(
|
|
181
|
-
Alert,
|
|
182
|
-
{
|
|
183
|
-
role: "note",
|
|
184
|
-
className: "flex items-center gap-[var(--spacing-system-m)] rounded-[6px] border-ods-border bg-ods-card p-[var(--spacing-system-m)]",
|
|
185
|
-
children: [
|
|
186
|
-
/* @__PURE__ */ jsx("span", { className: "shrink-0 text-ods-text-secondary", children: /* @__PURE__ */ jsx(InfoCircleIcon, { size: 24, color: "currentColor" }) }),
|
|
187
|
-
/* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-1 flex-col gap-[var(--spacing-system-xxs)]", children: [
|
|
188
|
-
/* @__PURE__ */ jsx("p", { className: "text-ods-text-primary text-h3", children: "Apps installed by hand get reinstalled" }),
|
|
189
|
-
/* @__PURE__ */ jsx("p", { className: "text-ods-text-secondary text-h6", children: "On the first update, OpenFrame reinstalls them with Winget or Brew so it can keep them updated." })
|
|
190
|
-
] })
|
|
191
|
-
]
|
|
192
|
-
}
|
|
193
|
-
)
|
|
220
|
+
] })
|
|
194
221
|
] });
|
|
195
222
|
}
|
|
196
223
|
export {
|
|
@@ -198,5 +225,6 @@ export {
|
|
|
198
225
|
DEFAULT_SOFTWARE_UPDATE_SETTINGS,
|
|
199
226
|
SOFTWARE_UPDATE_COUNTDOWN_OPTIONS,
|
|
200
227
|
SOFTWARE_UPDATE_DEADLINE_OPTIONS,
|
|
201
|
-
SoftwareUpdateSettingsFields
|
|
228
|
+
SoftwareUpdateSettingsFields,
|
|
229
|
+
defaultSoftwareUpdateSettings
|
|
202
230
|
};
|