@flamingo-stack/openframe-frontend-core 0.0.721 → 0.0.723
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/assets/index.cjs +0 -6
- package/dist/assets/index.d.ts +0 -1
- package/dist/assets/index.d.ts.map +1 -1
- package/dist/assets/index.js +1 -5
- package/dist/{chunk-I2254QN6.cjs → chunk-2MC4DRSC.cjs} +3 -3
- package/dist/{chunk-UXU7Y5BH.js → chunk-2VOPQJNR.js} +3 -3
- package/dist/{chunk-QYS4YVEP.cjs → chunk-3RIKO2O2.cjs} +31 -31
- package/dist/{chunk-KFOAV77K.js → chunk-5D2K7TFT.js} +1 -1
- package/dist/{chunk-GGBYZKMS.cjs → chunk-6QTGLBJH.cjs} +5 -5
- package/dist/{chunk-5QXE5HMV.js → chunk-7JXCLUU7.js} +3 -3
- package/dist/{chunk-LAXKEBDD.js → chunk-A7JPMNHF.js} +7 -7
- package/dist/{chunk-7Z5FMQYR.cjs → chunk-ABSWD4PQ.cjs} +14 -14
- package/dist/{chunk-742BGXNX.js → chunk-EWED6ISQ.js} +1 -1
- package/dist/{chunk-S63QBBT7.js → chunk-F6JAGSKV.js} +5 -5
- package/dist/{chunk-QLTXT562.cjs → chunk-FDWYBJYD.cjs} +6 -6
- package/dist/{chunk-2P2M27EW.js → chunk-G6YNPBWV.js} +2219 -2202
- package/dist/{chunk-QQCFPMAA.js → chunk-GRDJR2Q7.js} +1 -1
- package/dist/{chunk-O5EHOJZD.cjs → chunk-GYUFKNOQ.cjs} +7 -7
- package/dist/{chunk-OKE5BIQH.cjs → chunk-HP4UUBJC.cjs} +8 -8
- package/dist/{chunk-HXB7SEYG.js → chunk-IIBTYCEN.js} +7 -16
- package/dist/{chunk-GCK75D7F.cjs → chunk-JENNI7XU.cjs} +56 -31
- package/dist/{chunk-ZLUFEWZZ.js → chunk-JL7AHSFE.js} +6 -6
- package/dist/{chunk-JDBZ4ZHU.js → chunk-KS3YLYVL.js} +2 -2
- package/dist/{chunk-6AJIOW3S.cjs → chunk-KSADTFNZ.cjs} +37 -37
- package/dist/{chunk-D2DH6VZL.cjs → chunk-KSZRALRL.cjs} +3 -3
- package/dist/{chunk-RJMWJAJO.cjs → chunk-KY4WQYYG.cjs} +19 -19
- package/dist/{chunk-IYVFSLWJ.js → chunk-KZQO5EJQ.js} +4 -0
- package/dist/{chunk-IMTY3GRR.cjs → chunk-LV6UJD2K.cjs} +2 -2
- package/dist/{chunk-UZTOI6FJ.cjs → chunk-MWLVYYRX.cjs} +619 -602
- package/dist/{chunk-44Q6MV7C.js → chunk-N4VCU6XP.js} +1 -1
- package/dist/{chunk-F7ORKKEF.cjs → chunk-NESUUHPV.cjs} +83 -83
- package/dist/{chunk-BYVVE7HP.cjs → chunk-NFABAOMD.cjs} +34 -36
- package/dist/{chunk-3R32ZNA2.cjs → chunk-OHC2MPUO.cjs} +35 -35
- package/dist/{chunk-RCI3PALX.js → chunk-OVG6MV3X.js} +6 -6
- package/dist/{chunk-HJMSNOBT.cjs → chunk-OWRD2GZU.cjs} +258 -267
- package/dist/{chunk-VFICDEYJ.cjs → chunk-P7MDECYI.cjs} +41 -41
- package/dist/{chunk-NPSJE7J3.js → chunk-PKS2QQJU.js} +29 -4
- package/dist/{chunk-57UTI7ZH.js → chunk-QBXEF7D5.js} +4 -4
- package/dist/{chunk-74N742ZG.js → chunk-SBCJFJ6Q.js} +4 -4
- package/dist/{chunk-XXO52RZR.cjs → chunk-TDSLKKX7.cjs} +18 -18
- package/dist/{chunk-F5BPGWGT.cjs → chunk-TKFTWM3V.cjs} +5 -1
- package/dist/{chunk-GYAXV3MZ.js → chunk-UYMTAFHG.js} +4 -6
- package/dist/{chunk-XE2K53GH.cjs → chunk-VGXAZEQP.cjs} +17 -17
- package/dist/{chunk-3LY7V3RF.js → chunk-VIFVSFYY.js} +2 -2
- package/dist/{chunk-LODMNSQY.cjs → chunk-WSMOTZRJ.cjs} +11 -11
- package/dist/{chunk-CO3FOZIH.js → chunk-WVA7SCLY.js} +1 -1
- package/dist/{chunk-ZZEKXGFS.js → chunk-WY4SLTMZ.js} +2 -2
- package/dist/{chunk-NJ5TBTJG.js → chunk-XTG7W75B.js} +5 -5
- package/dist/{chunk-NMPVK53I.cjs → chunk-Y5H3M7OM.cjs} +23 -23
- package/dist/{chunk-E6SMMMKV.js → chunk-YGIUWQEN.js} +9 -9
- package/dist/{chunk-RQZQHLNS.cjs → chunk-YQOJOW2Z.cjs} +66 -66
- package/dist/{chunk-LGKMR7NZ.js → chunk-YUSA7IPD.js} +3 -3
- package/dist/{cloud-tenants-HZHKRUIW.cjs → cloud-tenants-3TVX7U23.cjs} +10 -10
- package/dist/{cloud-tenants-Q4TCJS5Y.js → cloud-tenants-N6KV2T7X.js} +9 -9
- package/dist/components/case-studies/index.cjs +23 -23
- package/dist/components/case-studies/index.js +10 -10
- package/dist/components/chat/index.cjs +7 -7
- package/dist/components/chat/index.js +6 -6
- package/dist/components/contact/index.cjs +11 -11
- package/dist/components/contact/index.js +10 -10
- package/dist/components/docs/index.cjs +14 -14
- package/dist/components/docs/index.js +13 -13
- package/dist/components/embeds/index.cjs +11 -11
- package/dist/components/embeds/index.js +10 -10
- package/dist/components/faq/index.cjs +11 -11
- package/dist/components/faq/index.js +10 -10
- package/dist/components/features/index.cjs +10 -10
- package/dist/components/features/index.js +9 -9
- package/dist/components/features/remote-session/remote-access-request-card.d.ts.map +1 -1
- package/dist/components/help-center-pages/download-apps-page.d.ts +19 -6
- package/dist/components/help-center-pages/download-apps-page.d.ts.map +1 -1
- package/dist/components/help-center-pages/index.cjs +170 -151
- package/dist/components/help-center-pages/index.d.ts +1 -1
- package/dist/components/help-center-pages/index.d.ts.map +1 -1
- package/dist/components/help-center-pages/index.js +88 -69
- package/dist/components/help-center-pages/trust-center-page.d.ts +34 -1
- package/dist/components/help-center-pages/trust-center-page.d.ts.map +1 -1
- package/dist/components/help-center-pages/trust-center-sections.d.ts +1 -1
- package/dist/components/help-center-pages/trust-center-sections.d.ts.map +1 -1
- package/dist/components/index.cjs +66 -64
- package/dist/components/index.js +23 -21
- package/dist/components/meeting-scheduler/index.cjs +47 -47
- package/dist/components/meeting-scheduler/index.js +9 -9
- package/dist/components/navigation/index.cjs +13 -13
- package/dist/components/navigation/index.js +12 -12
- package/dist/components/onboarding-guides/index.cjs +13 -13
- package/dist/components/onboarding-guides/index.js +12 -12
- package/dist/components/product-demo/index.cjs +8 -8
- package/dist/components/product-demo/index.js +8 -8
- package/dist/components/related-content/index.cjs +5 -5
- package/dist/components/related-content/index.js +4 -4
- package/dist/components/tickets/index.cjs +14 -14
- package/dist/components/tickets/index.js +13 -13
- package/dist/components/ui/data-attribution.d.ts +3 -1
- package/dist/components/ui/data-attribution.d.ts.map +1 -1
- package/dist/components/ui/download-button.d.ts +19 -0
- package/dist/components/ui/download-button.d.ts.map +1 -0
- package/dist/components/ui/index.cjs +12 -10
- package/dist/components/ui/index.d.ts +1 -0
- package/dist/components/ui/index.d.ts.map +1 -1
- package/dist/components/ui/index.js +11 -9
- package/dist/components/ui/mobile-app-qr.d.ts +13 -15
- package/dist/components/ui/mobile-app-qr.d.ts.map +1 -1
- package/dist/{devices-NOUGVTES.js → devices-275UZZUS.js} +9 -9
- package/dist/{devices-6XHUFIC6.cjs → devices-MAALZ7DX.cjs} +11 -11
- package/dist/index.cjs +19 -19
- package/dist/index.js +23 -23
- package/dist/{knowledge-2YTUXQ2Z.js → knowledge-THXC2KC3.js} +9 -9
- package/dist/{knowledge-ANEKPMO2.cjs → knowledge-YMMULPPK.cjs} +11 -11
- package/dist/{logs-WVQIONUT.js → logs-GM2XBHYT.js} +9 -9
- package/dist/{logs-U3IB3HUM.cjs → logs-IBUKQOHS.cjs} +18 -18
- package/dist/{policies-UFRN2EQF.cjs → policies-J5GJXD6G.cjs} +14 -14
- package/dist/{policies-66EGDW2H.js → policies-NKMRK6RR.js} +9 -9
- package/dist/{remote-session-6WEUJZDC.js → remote-session-WCLR47RN.js} +4 -4
- package/dist/{remote-session-A75X5NPC.cjs → remote-session-Z2YCUPHU.cjs} +6 -6
- package/dist/{software-update-3ZD3MXF3.js → software-update-EKKMKDWI.js} +9 -9
- package/dist/{software-update-2MHKL76D.cjs → software-update-JHC4T4SE.cjs} +14 -14
- package/dist/{tickets-board-IFWMIZ35.cjs → tickets-board-R5OQSEEC.cjs} +8 -8
- package/dist/{tickets-board-MYXG3V72.js → tickets-board-U3RF3AO4.js} +3 -3
- package/dist/types/downloads.d.ts +16 -0
- package/dist/types/downloads.d.ts.map +1 -1
- package/dist/types/index.cjs +27 -2
- package/dist/types/index.js +25 -3
- package/dist/types/trust-center.d.ts +19 -2
- package/dist/types/trust-center.d.ts.map +1 -1
- package/dist/utils/format.d.ts +11 -0
- package/dist/utils/format.d.ts.map +1 -1
- package/dist/utils/index.cjs +4 -9
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +4 -7
- package/dist/utils/mobile-app.cjs +0 -9
- package/dist/utils/mobile-app.d.ts +8 -25
- package/dist/utils/mobile-app.d.ts.map +1 -1
- package/dist/utils/mobile-app.js +1 -7
- package/package.json +1 -1
- package/src/assets/index.ts +0 -1
- package/src/components/features/remote-session/remote-access-request-card.tsx +6 -6
- package/src/components/help-center-pages/download-apps-page.tsx +53 -29
- package/src/components/help-center-pages/index.ts +1 -1
- package/src/components/help-center-pages/trust-center-page.tsx +50 -29
- package/src/components/help-center-pages/trust-center-sections.tsx +2 -2
- package/src/components/ui/data-attribution.tsx +19 -6
- package/src/components/ui/download-button.tsx +34 -0
- package/src/components/ui/index.ts +1 -0
- package/src/components/ui/mobile-app-qr.tsx +17 -22
- package/src/types/downloads.ts +17 -0
- package/src/types/trust-center.ts +52 -4
- package/src/utils/format.ts +15 -0
- package/src/utils/index.ts +1 -1
- package/src/utils/mobile-app.ts +8 -31
- package/dist/assets/mobile-app-qr.d.ts +0 -17
- package/dist/assets/mobile-app-qr.d.ts.map +0 -1
- package/src/assets/mobile-app-qr.ts +0 -19
|
@@ -188,6 +188,21 @@ export function isTrustCenterMonitored(
|
|
|
188
188
|
return Number.isFinite(synced) && nowMs - synced <= data.monitoredWindowMs;
|
|
189
189
|
}
|
|
190
190
|
|
|
191
|
+
/**
|
|
192
|
+
* THE monitoring claim and its wording, judged against a clock: monitored,
|
|
193
|
+
* paused, or not enabled. The page reads it after mount (its own clock) and the
|
|
194
|
+
* PDF when it is generated, so both say the same thing in the same words.
|
|
195
|
+
*/
|
|
196
|
+
export function trustCenterMonitoringStatus(
|
|
197
|
+
data: Pick<TrustCenterPublic, 'connected' | 'syncedAt' | 'monitoredWindowMs'>,
|
|
198
|
+
nowMs: number,
|
|
199
|
+
): { status: 'success' | 'pending' | 'missing'; label: string } {
|
|
200
|
+
if (!data.connected) return { status: 'missing', label: 'Live control monitoring is not enabled yet' };
|
|
201
|
+
return isTrustCenterMonitored(data, nowMs)
|
|
202
|
+
? { status: 'success', label: 'Controls continuously monitored' }
|
|
203
|
+
: { status: 'pending', label: 'Monitoring paused' };
|
|
204
|
+
}
|
|
205
|
+
|
|
191
206
|
/** "SOC 2 Type II: In progress · ISO 27001: Planned" — the ONE framework summary line (chat card, RAG mapper). */
|
|
192
207
|
export function trustFrameworksSummary(
|
|
193
208
|
frameworks: ReadonlyArray<Pick<TrustCenterFramework, 'label' | 'monitoring' | 'percent'>>,
|
|
@@ -195,10 +210,16 @@ export function trustFrameworksSummary(
|
|
|
195
210
|
return frameworks.map(f => `${f.label}: ${trustFrameworkBadge(f)}`).join(' · ');
|
|
196
211
|
}
|
|
197
212
|
|
|
213
|
+
/** A path BESIDE the page's `endpoint`, which may carry a query string (an embed proxy): `endpoint/segment?query`. */
|
|
214
|
+
function besideTrustCenterEndpoint(endpoint: string, segment: string): string {
|
|
215
|
+
const [path, query] = endpoint.split('?', 2);
|
|
216
|
+
return `${path}/${segment}${query ? `?${query}` : ''}`;
|
|
217
|
+
}
|
|
218
|
+
|
|
198
219
|
/**
|
|
199
220
|
* Where a public document opens: its own link, or — for a file — the hub's
|
|
200
|
-
* documents route beside the page's `endpoint`
|
|
201
|
-
*
|
|
221
|
+
* documents route beside the page's `endpoint`. `null` for a document that is
|
|
222
|
+
* only available on request.
|
|
202
223
|
*/
|
|
203
224
|
export function trustCenterDocumentUrl(
|
|
204
225
|
endpoint: string,
|
|
@@ -206,8 +227,35 @@ export function trustCenterDocumentUrl(
|
|
|
206
227
|
): string | null {
|
|
207
228
|
if (document.access !== 'public') return null;
|
|
208
229
|
if (document.externalUrl) return document.externalUrl;
|
|
209
|
-
|
|
210
|
-
|
|
230
|
+
return besideTrustCenterEndpoint(endpoint, `documents/${encodeURIComponent(document.id)}`);
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
/** Where the page downloads as a PDF: the hub's `pdf` route beside the page's `endpoint`. */
|
|
234
|
+
export function trustCenterPdfUrl(endpoint: string): string {
|
|
235
|
+
return besideTrustCenterEndpoint(endpoint, 'pdf');
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
/**
|
|
239
|
+
* THE rule for which sections a trust center shows, in reading order: a section
|
|
240
|
+
* with nothing to list is left out; Contact always shows. The page and its PDF
|
|
241
|
+
* both read it, so the two can never disagree about what is published.
|
|
242
|
+
*/
|
|
243
|
+
export function visibleTrustCenterSections(
|
|
244
|
+
data: Pick<
|
|
245
|
+
TrustCenterPublic,
|
|
246
|
+
'aiPractices' | 'frameworks' | 'controlDomains' | 'documents' | 'subprocessors' | 'faqs'
|
|
247
|
+
>,
|
|
248
|
+
): Array<(typeof TRUST_CENTER_SECTIONS)[number]> {
|
|
249
|
+
const hasContent: Record<TrustCenterSectionId, boolean> = {
|
|
250
|
+
ai: data.aiPractices.length > 0,
|
|
251
|
+
compliance: data.frameworks.length > 0,
|
|
252
|
+
controls: data.controlDomains.length > 0,
|
|
253
|
+
documents: data.documents.length > 0,
|
|
254
|
+
subprocessors: data.subprocessors.length > 0,
|
|
255
|
+
faq: data.faqs.length > 0,
|
|
256
|
+
contact: true,
|
|
257
|
+
};
|
|
258
|
+
return TRUST_CENTER_SECTIONS.filter(section => hasContent[section.id]);
|
|
211
259
|
}
|
|
212
260
|
|
|
213
261
|
// ---------------------------------------------------------------------------
|
package/src/utils/format.ts
CHANGED
|
@@ -1059,3 +1059,18 @@ export function formatWebinarTimeMeta(
|
|
|
1059
1059
|
const time = formatProgramTimeRange(at, { startAt: opts.startAt, withZoneLabel: opts.withZoneLabel });
|
|
1060
1060
|
return [time, duration].filter(Boolean).join(' · ');
|
|
1061
1061
|
}
|
|
1062
|
+
|
|
1063
|
+
/**
|
|
1064
|
+
* A web address as it is shown to a person to read or type, not to follow: no
|
|
1065
|
+
* scheme, no query or fragment, no trailing slash.
|
|
1066
|
+
* `https://www.example.com/mobile?from=qr` reads `example.com/mobile`.
|
|
1067
|
+
*
|
|
1068
|
+
* `www` is dropped by default, because nobody types it; `keepWww` keeps it where
|
|
1069
|
+
* the address is shown as the site's own name.
|
|
1070
|
+
*/
|
|
1071
|
+
export function formatUrlForDisplay(url: string, options: { keepWww?: boolean } = {}): string {
|
|
1072
|
+
return url
|
|
1073
|
+
.replace(options.keepWww ? /^https?:\/\//i : /^https?:\/\/(www\.)?/i, '')
|
|
1074
|
+
.replace(/[?#].*$/, '')
|
|
1075
|
+
.replace(/\/$/, '');
|
|
1076
|
+
}
|
package/src/utils/index.ts
CHANGED
|
@@ -16,7 +16,7 @@ export {
|
|
|
16
16
|
// Number / currency / byte / date formatters live in `./format` (single
|
|
17
17
|
// source of truth). Re-exported here so existing callers that pull from
|
|
18
18
|
// the barrel keep working without changing imports.
|
|
19
|
-
export { formatDate, formatNumber, formatPrice, formatBytes } from './format';
|
|
19
|
+
export { formatDate, formatNumber, formatPrice, formatBytes, formatUrlForDisplay } from './format';
|
|
20
20
|
export { TRIAL_DAYS, TRIAL_LABELS } from './trial';
|
|
21
21
|
export {
|
|
22
22
|
VENDOR_CLASSIFICATIONS,
|
package/src/utils/mobile-app.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The download page's
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
2
|
+
* The download page's address, and what a server needs to send a phone on to
|
|
3
|
+
* its store. No link lives here: the store listings, the installer links and
|
|
4
|
+
* the install link the QR code encodes are all the server's (`DownloadsPublic`,
|
|
5
|
+
* read through `useDownloads`).
|
|
6
6
|
*
|
|
7
7
|
* Pure and server-safe; also published as the granular subpath
|
|
8
8
|
* `./utils/mobile-app`, for an Edge proxy and other server-only consumers.
|
|
@@ -13,37 +13,14 @@ import { detectVisitorOs } from './visitor-os';
|
|
|
13
13
|
/** The website's download page: every installer and the mobile app. */
|
|
14
14
|
export const DOWNLOAD_PAGE_PATH = '/download';
|
|
15
15
|
|
|
16
|
-
/**
|
|
17
|
-
* On the download page: "send a phone or a tablet on to its store". The install
|
|
18
|
-
* QR code carries it, because whoever scans a code is holding the phone the app
|
|
19
|
-
* goes on. Anyone who opens the page without it reads the page.
|
|
20
|
-
*/
|
|
21
|
-
export const DOWNLOAD_PAGE_STORE_PARAM = 'store';
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* The one URL the install QR code encodes: the website's download page, asking
|
|
25
|
-
* it to send a phone on to its store.
|
|
26
|
-
*
|
|
27
|
-
* Absolute and on the production host on purpose: a code must point at
|
|
28
|
-
* production whichever deployment rendered the page it came from. `MobileAppQr`
|
|
29
|
-
* draws this value as committed path data, so the two change together: see the
|
|
30
|
-
* regeneration note on that component.
|
|
31
|
-
*/
|
|
32
|
-
export const MOBILE_APP_INSTALL_URL = `https://www.flamingo.run${DOWNLOAD_PAGE_PATH}?${DOWNLOAD_PAGE_STORE_PARAM}=1`;
|
|
33
|
-
|
|
34
|
-
/** The download page as it is printed for a human to read or type: no scheme, no `www`, no query. */
|
|
35
|
-
export const MOBILE_APP_INSTALL_HOST_PATH = MOBILE_APP_INSTALL_URL.replace(/^https:\/\/(www\.)?/, '').replace(
|
|
36
|
-
/\?.*$/,
|
|
37
|
-
'',
|
|
38
|
-
);
|
|
39
|
-
|
|
40
16
|
/**
|
|
41
17
|
* The store for a phone or tablet, or `null` for every other system and for a
|
|
42
18
|
* store the server names no listing for (`links` is the server's answer).
|
|
43
19
|
*
|
|
44
|
-
* The server passes the request's User-Agent
|
|
45
|
-
* `navigator.maxTouchPoints`, the only signal that tells
|
|
46
|
-
* desktop site (it calls itself a Macintosh) from a real
|
|
20
|
+
* The server passes the request's User-Agent (the install link's redirect).
|
|
21
|
+
* A browser may also pass `navigator.maxTouchPoints`, the only signal that tells
|
|
22
|
+
* an iPad asking for the desktop site (it calls itself a Macintosh) from a real
|
|
23
|
+
* Mac; the server cannot, so that iPad lands on the download page and its badges.
|
|
47
24
|
*/
|
|
48
25
|
export function resolveMobileStoreUrl(
|
|
49
26
|
links: MobileAppLinks,
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The install QR code's artwork: the modules of `MOBILE_APP_INSTALL_URL`
|
|
3
|
-
* (`utils/mobile-app`) at version 3, ECC level M, as one SVG path. Packaged with
|
|
4
|
-
* the library like the other assets, so every consumer draws the same code with
|
|
5
|
-
* no host-asset serving. `MobileAppQr` (components/ui) is the component that
|
|
6
|
-
* renders it.
|
|
7
|
-
*
|
|
8
|
-
* It changes WITH that URL. To regenerate: with the `qrcode` package,
|
|
9
|
-
* `QRCode.create(url, { errorCorrectionLevel: 'M' })` gives the modules; each
|
|
10
|
-
* row is one `M{x+4} {y+4}.5h{run}` followed by `m{gap} 0h{run}` per further
|
|
11
|
-
* run (the 4 is the quiet zone), and the viewBox side is `size + 8`.
|
|
12
|
-
*/
|
|
13
|
-
/** The side of the artwork's square viewBox: 29 modules plus a 4-module quiet zone on each side. */
|
|
14
|
-
export declare const MOBILE_APP_QR_VIEWBOX_SIZE = 37;
|
|
15
|
-
/** The dark modules, as horizontal strokes one module tall (`stroke` draws them). */
|
|
16
|
-
export declare const MOBILE_APP_QR_PATH = "M4 4.5h7m2 0h2m2 0h1m2 0h1m2 0h2m1 0h7M4 5.5h1m5 0h1m2 0h2m2 0h3m6 0h1m5 0h1M4 6.5h1m1 0h3m1 0h1m1 0h3m1 0h1m1 0h3m2 0h1m2 0h1m1 0h3m1 0h1M4 7.5h1m1 0h3m1 0h1m1 0h1m1 0h1m1 0h6m2 0h1m1 0h1m1 0h3m1 0h1M4 8.5h1m1 0h3m1 0h1m1 0h3m1 0h1m1 0h1m1 0h5m1 0h1m1 0h3m1 0h1M4 9.5h1m5 0h1m1 0h1m1 0h2m1 0h1m1 0h3m4 0h1m5 0h1M4 10.5h7m1 0h1m1 0h1m1 0h1m1 0h1m1 0h1m1 0h1m1 0h1m1 0h7M12 11.5h1m2 0h2m5 0h3M4 12.5h1m1 0h5m3 0h1m1 0h8m2 0h5M4 13.5h4m4 0h2m2 0h1m3 0h4m1 0h4m3 0h1M6 14.5h1m3 0h3m1 0h1m3 0h4m2 0h1M4 15.5h1m2 0h3m2 0h2m1 0h2m1 0h1m1 0h1m2 0h5m1 0h1m1 0h1M4 16.5h1m4 0h2m1 0h2m1 0h1m1 0h1m2 0h2m1 0h1m5 0h2M16 17.5h3m3 0h5m1 0h1m3 0h1M5 18.5h1m3 0h2m1 0h1m5 0h2m4 0h1m1 0h2m1 0h2M4 19.5h6m1 0h1m3 0h1m2 0h3m1 0h4m1 0h2m2 0h1M8 20.5h1m1 0h1m2 0h2m1 0h2m1 0h1m1 0h1m5 0h1m1 0h2M4 21.5h1m1 0h2m7 0h1m2 0h1m1 0h9m1 0h1m1 0h1M4 22.5h1m3 0h3m2 0h1m1 0h2m2 0h3m3 0h1m1 0h1m2 0h1M4 23.5h1m6 0h4m3 0h2m3 0h2m2 0h2m2 0h1M4 24.5h1m2 0h4m4 0h1m3 0h1m1 0h1m1 0h6m1 0h3M12 25.5h6m2 0h1m3 0h1m3 0h5M4 26.5h7m3 0h8m1 0h2m1 0h1m1 0h3M4 27.5h1m5 0h1m1 0h2m1 0h3m2 0h1m2 0h2m3 0h1M4 28.5h1m1 0h3m1 0h1m1 0h2m2 0h1m1 0h1m2 0h1m2 0h5m1 0h3M4 29.5h1m1 0h3m1 0h1m1 0h2m1 0h2m3 0h4m3 0h1m1 0h4M4 30.5h1m1 0h3m1 0h1m1 0h1m3 0h4m1 0h1m2 0h8M4 31.5h1m5 0h1m4 0h1m1 0h1m1 0h2m1 0h1m1 0h1m1 0h2m1 0h1m1 0h1M4 32.5h7m1 0h1m2 0h2m4 0h1m1 0h1m3 0h4";
|
|
17
|
-
//# sourceMappingURL=mobile-app-qr.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mobile-app-qr.d.ts","sourceRoot":"","sources":["../../src/assets/mobile-app-qr.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,oGAAoG;AACpG,eAAO,MAAM,0BAA0B,KAAK,CAAC;AAE7C,qFAAqF;AACrF,eAAO,MAAM,kBAAkB,uyCACuwC,CAAC"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The install QR code's artwork: the modules of `MOBILE_APP_INSTALL_URL`
|
|
3
|
-
* (`utils/mobile-app`) at version 3, ECC level M, as one SVG path. Packaged with
|
|
4
|
-
* the library like the other assets, so every consumer draws the same code with
|
|
5
|
-
* no host-asset serving. `MobileAppQr` (components/ui) is the component that
|
|
6
|
-
* renders it.
|
|
7
|
-
*
|
|
8
|
-
* It changes WITH that URL. To regenerate: with the `qrcode` package,
|
|
9
|
-
* `QRCode.create(url, { errorCorrectionLevel: 'M' })` gives the modules; each
|
|
10
|
-
* row is one `M{x+4} {y+4}.5h{run}` followed by `m{gap} 0h{run}` per further
|
|
11
|
-
* run (the 4 is the quiet zone), and the viewBox side is `size + 8`.
|
|
12
|
-
*/
|
|
13
|
-
|
|
14
|
-
/** The side of the artwork's square viewBox: 29 modules plus a 4-module quiet zone on each side. */
|
|
15
|
-
export const MOBILE_APP_QR_VIEWBOX_SIZE = 37;
|
|
16
|
-
|
|
17
|
-
/** The dark modules, as horizontal strokes one module tall (`stroke` draws them). */
|
|
18
|
-
export const MOBILE_APP_QR_PATH =
|
|
19
|
-
'M4 4.5h7m2 0h2m2 0h1m2 0h1m2 0h2m1 0h7M4 5.5h1m5 0h1m2 0h2m2 0h3m6 0h1m5 0h1M4 6.5h1m1 0h3m1 0h1m1 0h3m1 0h1m1 0h3m2 0h1m2 0h1m1 0h3m1 0h1M4 7.5h1m1 0h3m1 0h1m1 0h1m1 0h1m1 0h6m2 0h1m1 0h1m1 0h3m1 0h1M4 8.5h1m1 0h3m1 0h1m1 0h3m1 0h1m1 0h1m1 0h5m1 0h1m1 0h3m1 0h1M4 9.5h1m5 0h1m1 0h1m1 0h2m1 0h1m1 0h3m4 0h1m5 0h1M4 10.5h7m1 0h1m1 0h1m1 0h1m1 0h1m1 0h1m1 0h1m1 0h1m1 0h7M12 11.5h1m2 0h2m5 0h3M4 12.5h1m1 0h5m3 0h1m1 0h8m2 0h5M4 13.5h4m4 0h2m2 0h1m3 0h4m1 0h4m3 0h1M6 14.5h1m3 0h3m1 0h1m3 0h4m2 0h1M4 15.5h1m2 0h3m2 0h2m1 0h2m1 0h1m1 0h1m2 0h5m1 0h1m1 0h1M4 16.5h1m4 0h2m1 0h2m1 0h1m1 0h1m2 0h2m1 0h1m5 0h2M16 17.5h3m3 0h5m1 0h1m3 0h1M5 18.5h1m3 0h2m1 0h1m5 0h2m4 0h1m1 0h2m1 0h2M4 19.5h6m1 0h1m3 0h1m2 0h3m1 0h4m1 0h2m2 0h1M8 20.5h1m1 0h1m2 0h2m1 0h2m1 0h1m1 0h1m5 0h1m1 0h2M4 21.5h1m1 0h2m7 0h1m2 0h1m1 0h9m1 0h1m1 0h1M4 22.5h1m3 0h3m2 0h1m1 0h2m2 0h3m3 0h1m1 0h1m2 0h1M4 23.5h1m6 0h4m3 0h2m3 0h2m2 0h2m2 0h1M4 24.5h1m2 0h4m4 0h1m3 0h1m1 0h1m1 0h6m1 0h3M12 25.5h6m2 0h1m3 0h1m3 0h5M4 26.5h7m3 0h8m1 0h2m1 0h1m1 0h3M4 27.5h1m5 0h1m1 0h2m1 0h3m2 0h1m2 0h2m3 0h1M4 28.5h1m1 0h3m1 0h1m1 0h2m2 0h1m1 0h1m2 0h1m2 0h5m1 0h3M4 29.5h1m1 0h3m1 0h1m1 0h2m1 0h2m3 0h4m3 0h1m1 0h4M4 30.5h1m1 0h3m1 0h1m1 0h1m3 0h4m1 0h1m2 0h8M4 31.5h1m5 0h1m4 0h1m1 0h1m1 0h2m1 0h1m1 0h1m1 0h2m1 0h1m1 0h1M4 32.5h7m1 0h1m2 0h2m4 0h1m1 0h1m3 0h4';
|