@aglyn/aglyn 1.0.0-beta.269 → 1.0.0-beta.270
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/package.json +11 -11
- package/src/lib/app-utils/account-preferences.d.ts +248 -0
- package/src/lib/app-utils/account-preferences.js +434 -0
- package/src/lib/app-utils/account-preferences.js.map +1 -0
- package/src/lib/app-utils/country-options.d.ts +27 -0
- package/src/lib/app-utils/country-options.js +96 -0
- package/src/lib/app-utils/country-options.js.map +1 -0
- package/src/lib/app-utils/docs-help.generated.d.ts +6 -0
- package/src/lib/app-utils/docs-help.generated.js +13 -0
- package/src/lib/app-utils/docs-help.generated.js.map +1 -1
- package/src/lib/app-utils/docs-index.generated.js +16 -9
- package/src/lib/app-utils/docs-index.generated.js.map +1 -1
- package/src/lib/app-utils/mobile-push.d.ts +8 -0
- package/src/lib/app-utils/mobile-push.js +4 -1
- package/src/lib/app-utils/mobile-push.js.map +1 -1
- package/src/lib/app-utils/native-app-association.d.ts +3 -2
- package/src/lib/app-utils/native-app-association.js +4 -2
- package/src/lib/app-utils/native-app-association.js.map +1 -1
- package/src/lib/app-utils/native-nav.d.ts +265 -0
- package/src/lib/app-utils/native-nav.js +741 -0
- package/src/lib/app-utils/native-nav.js.map +1 -0
- package/src/lib/app-utils/native-themes.d.ts +249 -0
- package/src/lib/app-utils/native-themes.js +732 -0
- package/src/lib/app-utils/native-themes.js.map +1 -0
- package/src/lib/app-utils/notifications.d.ts +1 -1
- package/src/lib/app-utils/notifications.js +10 -0
- package/src/lib/app-utils/notifications.js.map +1 -1
- package/src/lib/app-utils/one-box-search.d.ts +108 -0
- package/src/lib/app-utils/one-box-search.js +167 -0
- package/src/lib/app-utils/one-box-search.js.map +1 -0
- package/src/lib/app-utils/org-permissions.js +10 -61
- package/src/lib/app-utils/org-permissions.js.map +1 -1
- package/src/lib/app-utils/org-role-grants.d.ts +95 -0
- package/src/lib/app-utils/org-role-grants.js +193 -0
- package/src/lib/app-utils/org-role-grants.js.map +1 -0
- package/src/lib/app-utils/plan-entitlements.d.ts +41 -1
- package/src/lib/app-utils/plan-entitlements.js +65 -3
- package/src/lib/app-utils/plan-entitlements.js.map +1 -1
- package/src/lib/app-utils/tenant-dns-targets.d.ts +62 -0
- package/src/lib/app-utils/tenant-dns-targets.js +80 -0
- package/src/lib/app-utils/tenant-dns-targets.js.map +1 -0
- package/src/lib/foundation/definitions/org-billing.types.d.ts +14 -0
- package/src/lib/foundation/definitions/org-billing.types.js.map +1 -1
- package/src/lib/foundation/definitions/platform.types.d.ts +9 -0
- package/src/lib/foundation/definitions/platform.types.js.map +1 -1
- package/src/lib/plugin-manager/feature-plugins.d.ts +38 -0
- package/src/lib/plugin-manager/feature-plugins.js +20 -0
- package/src/lib/plugin-manager/feature-plugins.js.map +1 -1
- package/src/lib/plugin-manager/first-party-plugins.generated.js +22 -1
- package/src/lib/plugin-manager/first-party-plugins.generated.js.map +1 -1
- package/src/lib/plugin-manager/plugin-domain-events.d.ts +4 -3
- package/src/lib/plugin-manager/plugin-domain-events.js.map +1 -1
- package/src/lib/plugin-manager/plugin-media-ingest.d.ts +25 -0
- package/src/lib/plugin-manager/plugin-media-ingest.js.map +1 -1
- package/src/lib/plugin-manager/plugin-search-sources.d.ts +85 -0
- package/src/lib/plugin-manager/plugin-search-sources.js +91 -0
- package/src/lib/plugin-manager/plugin-search-sources.js.map +1 -0
- package/src/lib/plugin-manager/plugin-services.js +6 -0
- package/src/lib/plugin-manager/plugin-services.js.map +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aglyn/aglyn",
|
|
3
|
-
"version": "1.0.0-beta.
|
|
3
|
+
"version": "1.0.0-beta.270",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"homepage": "https://aglyn.com",
|
|
6
6
|
"repository": {
|
|
@@ -37,16 +37,16 @@
|
|
|
37
37
|
"./package.json": "./package.json"
|
|
38
38
|
},
|
|
39
39
|
"dependencies": {
|
|
40
|
-
"@aglyn/shared-data-enums": "1.0.0-beta.
|
|
41
|
-
"@aglyn/shared-data-mdi": "1.0.0-beta.
|
|
42
|
-
"@aglyn/shared-data-types": "1.0.0-beta.
|
|
43
|
-
"@aglyn/shared-util-email": "1.0.0-beta.
|
|
44
|
-
"@aglyn/shared-util-first-touch": "1.0.0-beta.
|
|
45
|
-
"@aglyn/shared-util-http": "1.0.0-beta.
|
|
46
|
-
"@aglyn/shared-util-logger": "1.0.0-beta.
|
|
47
|
-
"@aglyn/shared-util-timestamp": "1.0.0-beta.
|
|
48
|
-
"@aglyn/shared-util-tools": "1.0.0-beta.
|
|
49
|
-
"@aglyn/shared-util-vendor": "1.0.0-beta.
|
|
40
|
+
"@aglyn/shared-data-enums": "1.0.0-beta.270",
|
|
41
|
+
"@aglyn/shared-data-mdi": "1.0.0-beta.270",
|
|
42
|
+
"@aglyn/shared-data-types": "1.0.0-beta.270",
|
|
43
|
+
"@aglyn/shared-util-email": "1.0.0-beta.270",
|
|
44
|
+
"@aglyn/shared-util-first-touch": "1.0.0-beta.270",
|
|
45
|
+
"@aglyn/shared-util-http": "1.0.0-beta.270",
|
|
46
|
+
"@aglyn/shared-util-logger": "1.0.0-beta.270",
|
|
47
|
+
"@aglyn/shared-util-timestamp": "1.0.0-beta.270",
|
|
48
|
+
"@aglyn/shared-util-tools": "1.0.0-beta.270",
|
|
49
|
+
"@aglyn/shared-util-vendor": "1.0.0-beta.270",
|
|
50
50
|
"@data-driven-forms/react-form-renderer": "^4.2.0",
|
|
51
51
|
"@msgpack/msgpack": "^3.1.3",
|
|
52
52
|
"@types/unist": "^3.0.3",
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Aglyn LLC
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* THE PREFERENCES A PERSON KEEPS ON THEIR ACCOUNT (AGL-3943).
|
|
19
|
+
*
|
|
20
|
+
* One documented shape on `users/{uid}`, read and written the same way by
|
|
21
|
+
* the console and both native apps (docs/mobile/native-navigation.md):
|
|
22
|
+
*
|
|
23
|
+
* | field | shape | cap |
|
|
24
|
+
* | -- | -- | -- |
|
|
25
|
+
* | `pinnedOrgs` | workspace ids, in the order the person keeps them | 5 |
|
|
26
|
+
* | `recentOrgs` | workspace ids, most recently opened first | 8 |
|
|
27
|
+
* | `starred` | {@link StarredItem}s, in the order they were starred | 50 |
|
|
28
|
+
* | `recents` | {@link RecentItem}s, most recently opened first | 30 |
|
|
29
|
+
* | `workspaceColors` | workspace id → `#RRGGBB` the person picked | 100 |
|
|
30
|
+
* | `appTheme` | {@link AppThemePrefs}, the apps' look, synced | — |
|
|
31
|
+
*
|
|
32
|
+
* The caps are held twice: here, by every writer, and by the Firestore rules,
|
|
33
|
+
* which refuse a write that grows a list past its cap. A list that is ALREADY
|
|
34
|
+
* past it (pins made before the cap, Zach 2026-10-18) may only shrink, so a
|
|
35
|
+
* person with seven pins can still unpin one; the console asks them once
|
|
36
|
+
* which five to keep, and until they answer the first five are the pins.
|
|
37
|
+
*
|
|
38
|
+
* A per-device override of the theme ("this device only") is the device's
|
|
39
|
+
* own, kept in local storage on each platform, and never written here.
|
|
40
|
+
*
|
|
41
|
+
* NO IMPORTS, on purpose: the native apps read these constants, types and
|
|
42
|
+
* the answers of these functions through the generated contracts, so it must
|
|
43
|
+
* stay a plain module.
|
|
44
|
+
*/
|
|
45
|
+
/** `users/{uid}` field holding the ids of the workspaces the person pinned. */
|
|
46
|
+
export declare const PINNED_ORGS_FIELD = "pinnedOrgs";
|
|
47
|
+
/** The most workspaces a person may pin, everywhere, the console included. */
|
|
48
|
+
export declare const PINNED_ORGS_MAX = 5;
|
|
49
|
+
/** `users/{uid}` field holding the workspaces opened most recently, newest first. */
|
|
50
|
+
export declare const RECENT_ORGS_FIELD = "recentOrgs";
|
|
51
|
+
/** How many recently opened workspaces are kept. */
|
|
52
|
+
export declare const RECENT_ORGS_MAX = 8;
|
|
53
|
+
/** How many recent workspaces the rail shows below the pins. */
|
|
54
|
+
export declare const RAIL_RECENT_ORGS = 3;
|
|
55
|
+
/** An account with this many workspaces or fewer sees them all on the rail. */
|
|
56
|
+
export declare const RAIL_ALL_WORKSPACES_AT_MOST = 8;
|
|
57
|
+
/** `users/{uid}` field holding the person's starred screens and records. */
|
|
58
|
+
export declare const STARRED_FIELD = "starred";
|
|
59
|
+
/** The most items a person may star. */
|
|
60
|
+
export declare const STARRED_MAX = 50;
|
|
61
|
+
/** `users/{uid}` field holding the screens and records opened most recently. */
|
|
62
|
+
export declare const RECENTS_FIELD = "recents";
|
|
63
|
+
/** How many recently opened screens and records are kept. */
|
|
64
|
+
export declare const RECENTS_MAX = 30;
|
|
65
|
+
/** `users/{uid}` field holding the color the person picked for each workspace. */
|
|
66
|
+
export declare const WORKSPACE_COLORS_FIELD = "workspaceColors";
|
|
67
|
+
/** The most workspaces a person may pick a color for. */
|
|
68
|
+
export declare const WORKSPACE_COLORS_MAX = 100;
|
|
69
|
+
/** `users/{uid}` field holding the apps' theme, synced across devices. */
|
|
70
|
+
export declare const APP_THEME_FIELD = "appTheme";
|
|
71
|
+
/** The longest label a starred or recent item keeps. */
|
|
72
|
+
export declare const ACCOUNT_ITEM_LABEL_MAX = 120;
|
|
73
|
+
/** A picked color: `#` and six hex digits. */
|
|
74
|
+
export declare const ACCOUNT_COLOR_PATTERN = "^#[0-9A-Fa-f]{6}$";
|
|
75
|
+
/** The color dot a starred item may carry, named so each platform draws it from its theme. */
|
|
76
|
+
export type StarColor = 'blue' | 'purple' | 'pink' | 'red' | 'orange' | 'yellow' | 'green' | 'grey';
|
|
77
|
+
/** Every star color, in the order the picker lists them. */
|
|
78
|
+
export declare const STAR_COLORS: readonly StarColor[];
|
|
79
|
+
/**
|
|
80
|
+
* A screen or a record the person can come back to: what it is, where it
|
|
81
|
+
* belongs, what it was called, and the native screen that opens it.
|
|
82
|
+
*/
|
|
83
|
+
export interface AccountItemRef {
|
|
84
|
+
/**
|
|
85
|
+
* `screen` for a place in the app (a nav manifest row), otherwise the
|
|
86
|
+
* one-box search kind of the record (`page`, `order`, `contact`, …).
|
|
87
|
+
*/
|
|
88
|
+
kind: string;
|
|
89
|
+
/** The nav row id for a `screen`, otherwise the record's document id. */
|
|
90
|
+
id: string;
|
|
91
|
+
/** The workspace it belongs to. */
|
|
92
|
+
orgId: string;
|
|
93
|
+
/** The site, for an item that belongs to one. */
|
|
94
|
+
hostId?: string;
|
|
95
|
+
/** What it was called when it was starred or opened. */
|
|
96
|
+
label: string;
|
|
97
|
+
/** The native screen that opens it. */
|
|
98
|
+
screen: string;
|
|
99
|
+
/** That screen's params. */
|
|
100
|
+
params?: Record<string, string>;
|
|
101
|
+
}
|
|
102
|
+
/** One starred item. */
|
|
103
|
+
export interface StarredItem extends AccountItemRef {
|
|
104
|
+
color?: StarColor;
|
|
105
|
+
starredAtMs: number;
|
|
106
|
+
}
|
|
107
|
+
/** One recently opened item. */
|
|
108
|
+
export interface RecentItem extends AccountItemRef {
|
|
109
|
+
openedAtMs: number;
|
|
110
|
+
}
|
|
111
|
+
export type AppAppearance = 'system' | 'light' | 'dark';
|
|
112
|
+
export type AppThemeName = 'aglyn' | 'quiet' | 'night' | 'ocean' | 'warm' | 'highContrast';
|
|
113
|
+
export type AppDensity = 'comfortable' | 'compact';
|
|
114
|
+
export type AppTextSize = 'system' | 'small' | 'medium' | 'large' | 'extraLarge';
|
|
115
|
+
export type AppSidebarStyle = 'tinted' | 'plain';
|
|
116
|
+
/** The apps' look, saved on the account so it follows the person to every device. */
|
|
117
|
+
export interface AppThemePrefs {
|
|
118
|
+
/** Light, dark or the system's. */
|
|
119
|
+
appearance: AppAppearance;
|
|
120
|
+
/** The theme: rail, sidebar tint, surfaces and accent for light and dark together. */
|
|
121
|
+
theme: AppThemeName;
|
|
122
|
+
/** `theme` for the theme's own accent, or a `#RRGGBB` the person picked. */
|
|
123
|
+
accent: string;
|
|
124
|
+
density: AppDensity;
|
|
125
|
+
/** `system` follows Dynamic Type or the font scale; the rest are the Mac and Windows sizes. */
|
|
126
|
+
textSize: AppTextSize;
|
|
127
|
+
sidebarStyle: AppSidebarStyle;
|
|
128
|
+
/** The app icon's id: `aglyn`, or one of the alternates the apps ship. */
|
|
129
|
+
appIcon: string;
|
|
130
|
+
/** A workspace's own brand color tints the app while you are in it. */
|
|
131
|
+
useWorkspaceBrand: boolean;
|
|
132
|
+
}
|
|
133
|
+
/** What a person who never changed anything sees. */
|
|
134
|
+
export declare const DEFAULT_APP_THEME: AppThemePrefs;
|
|
135
|
+
/** Every value each closed theme field accepts, in the order a picker lists them. */
|
|
136
|
+
export declare const APP_APPEARANCES: readonly AppAppearance[];
|
|
137
|
+
export declare const APP_THEME_NAMES: readonly AppThemeName[];
|
|
138
|
+
export declare const APP_DENSITIES: readonly AppDensity[];
|
|
139
|
+
export declare const APP_TEXT_SIZES: readonly AppTextSize[];
|
|
140
|
+
export declare const APP_SIDEBAR_STYLES: readonly AppSidebarStyle[];
|
|
141
|
+
/** The longest app icon id. */
|
|
142
|
+
export declare const APP_ICON_ID_MAX = 40;
|
|
143
|
+
/** Whether a value is a picked color, `#` and six hex digits. */
|
|
144
|
+
export declare function isAccountColor(value: unknown): value is string;
|
|
145
|
+
/**
|
|
146
|
+
* Every id the person stored as pinned, in their order, without repeats.
|
|
147
|
+
*
|
|
148
|
+
* Anything that is not a list of non-empty strings reads as no pins, so a
|
|
149
|
+
* stray value can never take a switcher down. May hold more than
|
|
150
|
+
* {@link PINNED_ORGS_MAX} for an account that pinned before the cap; read
|
|
151
|
+
* {@link effectivePinnedOrgs} for the pins to show.
|
|
152
|
+
*/
|
|
153
|
+
export declare function readPinnedOrgs(profile: unknown): string[];
|
|
154
|
+
/** The pins in force: the first {@link PINNED_ORGS_MAX} stored, until the person picks. */
|
|
155
|
+
export declare function effectivePinnedOrgs(stored: readonly string[]): string[];
|
|
156
|
+
/** The account pinned more than the cap before there was one, and has to pick which to keep. */
|
|
157
|
+
export declare function pinnedOrgsOverCap(stored: readonly string[]): boolean;
|
|
158
|
+
export type PinOrgOutcome = 'pinned' | 'alreadyPinned' | 'full';
|
|
159
|
+
export interface PinOrgResult {
|
|
160
|
+
/** The pins after the request: unchanged unless `outcome` is `pinned`. */
|
|
161
|
+
pinned: string[];
|
|
162
|
+
outcome: PinOrgOutcome;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Pins a workspace at the end of the list, or says the list is full. A full
|
|
166
|
+
* list is never made room in quietly: the caller asks "Pinned is full.
|
|
167
|
+
* Replace one?" and calls {@link replacePinnedOrg} with the answer.
|
|
168
|
+
*/
|
|
169
|
+
export declare function pinOrg(pinned: readonly string[], orgId: string): PinOrgResult;
|
|
170
|
+
/** The pins without one workspace. */
|
|
171
|
+
export declare function unpinOrg(pinned: readonly string[], orgId: string): string[];
|
|
172
|
+
/**
|
|
173
|
+
* The pins with `orgId` in the place `replacing` held — the answer to
|
|
174
|
+
* "Pinned is full. Replace one?". Unchanged when `replacing` is not pinned
|
|
175
|
+
* or `orgId` already is.
|
|
176
|
+
*/
|
|
177
|
+
export declare function replacePinnedOrg(pinned: readonly string[], replacing: string, orgId: string): string[];
|
|
178
|
+
/**
|
|
179
|
+
* The answer to "Keep which 5?": the stored pins the person ticked, in the
|
|
180
|
+
* order they were pinned, never more than the cap.
|
|
181
|
+
*/
|
|
182
|
+
export declare function keepPinnedOrgs(stored: readonly string[], keep: readonly string[]): string[];
|
|
183
|
+
/** The pins with one moved up (`-1`) or down (`1`) a place; unchanged at an end. */
|
|
184
|
+
export declare function movePinnedOrg(pinned: readonly string[], orgId: string, offset: number): string[];
|
|
185
|
+
/** The recently opened workspaces as stored, newest first. */
|
|
186
|
+
export declare function readRecentOrgs(profile: unknown): string[];
|
|
187
|
+
/** The recent workspaces after opening one: it moves to the front, the oldest falls off. */
|
|
188
|
+
export declare function recordRecentOrg(recent: readonly string[], orgId: string): string[];
|
|
189
|
+
/** What the workspace rail shows. */
|
|
190
|
+
export interface RailWorkspaces {
|
|
191
|
+
/** Pinned, at the top, in the person's order. */
|
|
192
|
+
pinned: string[];
|
|
193
|
+
/** Below the divider: recently opened and not pinned, at most {@link RAIL_RECENT_ORGS}. */
|
|
194
|
+
recent: string[];
|
|
195
|
+
/** Every other workspace, for an account small enough to list them all. */
|
|
196
|
+
rest: string[];
|
|
197
|
+
/** Whether the last tile is "All workspaces", opening the searchable switcher. */
|
|
198
|
+
allTile: boolean;
|
|
199
|
+
/** How many workspaces the person belongs to, shown under the All tile. */
|
|
200
|
+
total: number;
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* The rail for one account: up to five pinned, a divider, up to three recent,
|
|
204
|
+
* then an "All workspaces (N)" tile. An account with
|
|
205
|
+
* {@link RAIL_ALL_WORKSPACES_AT_MOST} workspaces or fewer sees them all and
|
|
206
|
+
* no All tile, since there is nothing to hide. `orgIds` is every membership,
|
|
207
|
+
* in the switcher's order; an id the person no longer belongs to is ignored.
|
|
208
|
+
*/
|
|
209
|
+
export declare function railWorkspaces(orgIds: readonly string[], pinned: readonly string[], recent: readonly string[]): RailWorkspaces;
|
|
210
|
+
/** One item's identity: the same screen or record in the same place. */
|
|
211
|
+
export declare function accountItemKey(item: Pick<AccountItemRef, 'kind' | 'id' | 'orgId' | 'hostId'>): string;
|
|
212
|
+
/** The starred items as stored, each well formed, without repeats, never more than the cap. */
|
|
213
|
+
export declare function readStarred(profile: unknown): StarredItem[];
|
|
214
|
+
export type StarOutcome = 'starred' | 'unstarred' | 'full';
|
|
215
|
+
export interface StarResult {
|
|
216
|
+
/** The starred items after the request: unchanged when `outcome` is `full`. */
|
|
217
|
+
starred: StarredItem[];
|
|
218
|
+
outcome: StarOutcome;
|
|
219
|
+
}
|
|
220
|
+
/** Stars an item at the end of the list, or unstars it; a full list says so instead. */
|
|
221
|
+
export declare function toggleStarred(starred: readonly StarredItem[], item: AccountItemRef, nowMs: number): StarResult;
|
|
222
|
+
/** The starred items with one item's color dot set, or cleared with `null`. */
|
|
223
|
+
export declare function setStarColor(starred: readonly StarredItem[], key: string, color: StarColor | null): StarredItem[];
|
|
224
|
+
/** The recent items as stored, newest first, each well formed, never more than the cap. */
|
|
225
|
+
export declare function readRecents(profile: unknown): RecentItem[];
|
|
226
|
+
/** The recent items after opening one: it moves to the front, the oldest falls off. */
|
|
227
|
+
export declare function recordRecent(recents: readonly RecentItem[], item: AccountItemRef, nowMs: number): RecentItem[];
|
|
228
|
+
/** The colors the person picked, by workspace id, the valid ones only. */
|
|
229
|
+
export declare function readWorkspaceColors(profile: unknown): Record<string, string>;
|
|
230
|
+
export type WorkspaceColorSource = 'picked' | 'brand' | 'logo' | 'none';
|
|
231
|
+
export interface WorkspaceColor {
|
|
232
|
+
/** `#RRGGBB`, or null when nothing gives the workspace a color. */
|
|
233
|
+
color: string | null;
|
|
234
|
+
source: WorkspaceColorSource;
|
|
235
|
+
/** Whether the app is tinted with it while you are in the workspace. */
|
|
236
|
+
tintsApp: boolean;
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* A workspace's color: the one the person picked, else the workspace's brand
|
|
240
|
+
* color (`brandingProfile.primaryColor`), else a color taken from its logo
|
|
241
|
+
* (Zach, 2026-10-18). The rail tile always shows it; the app is tinted with
|
|
242
|
+
* it while you are in the workspace unless the person turned "Use each
|
|
243
|
+
* workspace's brand" off, which stops the brand and logo colors tinting the
|
|
244
|
+
* app (a picked color still does: the person chose it).
|
|
245
|
+
*/
|
|
246
|
+
export declare function resolveWorkspaceColor(picked: unknown, brandColor: unknown, logoColor: unknown, useWorkspaceBrand: boolean): WorkspaceColor;
|
|
247
|
+
/** The synced theme, every field filled: a missing or unknown value reads as the default. */
|
|
248
|
+
export declare function readAppTheme(profile: unknown): AppThemePrefs;
|