@burdenoff/fe-libs 2026.825.3 → 2026.825.5

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.
@@ -1 +1 @@
1
- {"version":3,"file":"DynamicFooter.d.ts","sourceRoot":"","sources":["../../src/chrome/DynamicFooter.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAqFzD,MAAM,WAAW,kBAAkB;IACjC,gFAAgF;IAChF,WAAW,EAAE,MAAM,CAAC;IACpB,0DAA0D;IAC1D,WAAW,EAAE,MAAM,CAAC;IACpB,sBAAsB;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,qBAAqB;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iDAAiD;IACjD,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IACzB,kDAAkD;IAClD,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;IAC3B,+CAA+C;IAC/C,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,4DAA4D;IAC5D,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;OAGG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,wBAAgB,aAAa,CAAC,EAC5B,WAAW,EACX,WAAW,EACX,OAAO,EACP,OAAkB,EAClB,OAAO,EAAE,aAAa,EACtB,WAAW,EAAE,iBAAiB,EAC9B,cAAiC,EACjC,eAAuB,EACvB,kBAAyB,GAC1B,EAAE,kBAAkB,2CAmLpB"}
1
+ {"version":3,"file":"DynamicFooter.d.ts","sourceRoot":"","sources":["../../src/chrome/DynamicFooter.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAsFzD,MAAM,WAAW,kBAAkB;IACjC,gFAAgF;IAChF,WAAW,EAAE,MAAM,CAAC;IACpB,0DAA0D;IAC1D,WAAW,EAAE,MAAM,CAAC;IACpB,sBAAsB;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,qBAAqB;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iDAAiD;IACjD,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IACzB,kDAAkD;IAClD,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;IAC3B,+CAA+C;IAC/C,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,4DAA4D;IAC5D,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;OAGG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,wBAAgB,aAAa,CAAC,EAC5B,WAAW,EACX,WAAW,EACX,OAAO,EACP,OAAkB,EAClB,OAAO,EAAE,aAAa,EACtB,WAAW,EAAE,iBAAiB,EAC9B,cAAiC,EACjC,eAAuB,EACvB,kBAAyB,GAC1B,EAAE,kBAAkB,2CAoLpB"}
@@ -1,16 +1,17 @@
1
1
  import { useGatewayClient as e } from "../shared/graphql/GatewayContext.js";
2
2
  import "../shared-graphql.js";
3
- import { useActiveContext as t } from "../shared/providers/shell/ActiveContextProvider.js";
4
- import { useI18n as n } from "../shared/providers/shell/I18nProvider.js";
5
- import { DEFAULT_FOOTER_COLUMNS as r, DEFAULT_SOCIAL_LINKS as i, Footer as a } from "./Footer.js";
6
- import { BrandMark as o } from "./BrandMark.js";
7
- import { useEffect as s, useMemo as c, useState as l } from "react";
8
- import { Github as u, Globe as d, Linkedin as f, MessageCircle as p, Twitter as m, Youtube as h } from "lucide-react";
9
- import { jsx as g } from "react/jsx-runtime";
10
- import { gql as _ } from "@apollo/client/core";
11
- import { Link as v } from "react-router";
3
+ import { useAuth as t } from "../shared/providers/shell/AuthProvider.js";
4
+ import { useActiveContext as n } from "../shared/providers/shell/ActiveContextProvider.js";
5
+ import { useI18n as r } from "../shared/providers/shell/I18nProvider.js";
6
+ import { DEFAULT_FOOTER_COLUMNS as i, DEFAULT_SOCIAL_LINKS as a, Footer as o } from "./Footer.js";
7
+ import { BrandMark as s } from "./BrandMark.js";
8
+ import { useEffect as c, useMemo as l, useState as u } from "react";
9
+ import { Github as d, Globe as f, Linkedin as p, MessageCircle as m, Twitter as h, Youtube as g } from "lucide-react";
10
+ import { jsx as _ } from "react/jsx-runtime";
11
+ import { gql as v } from "@apollo/client/core";
12
+ import { Link as y } from "react-router";
12
13
  //#region src/chrome/DynamicFooter.tsx
13
- var y = _`
14
+ var b = v`
14
15
  query GetFooterContentPages($filter: ContentPageFilterInput, $limit: Int) {
15
16
  contentPages(filter: $filter, limit: $limit) {
16
17
  items {
@@ -22,14 +23,14 @@ var y = _`
22
23
  }
23
24
  }
24
25
  }
25
- `, b = _`
26
+ `, x = v`
26
27
  query GetFooterProduct($slug: String!) {
27
28
  platformProductBySlug(slug: $slug) {
28
29
  id
29
30
  socialLinks
30
31
  }
31
32
  }
32
- `, x = {
33
+ `, S = {
33
34
  "privacy-policy": "privacy",
34
35
  "terms-of-service": "terms",
35
36
  "cookie-policy": "cookies",
@@ -40,14 +41,14 @@ var y = _`
40
41
  compliance: "compliance",
41
42
  about: "about",
42
43
  contact: "contact"
43
- }, S = {
44
- twitter: /* @__PURE__ */ g(m, { className: "size-5" }),
45
- x: /* @__PURE__ */ g(m, { className: "size-5" }),
46
- github: /* @__PURE__ */ g(u, { className: "size-5" }),
47
- discord: /* @__PURE__ */ g(p, { className: "size-5" }),
48
- linkedin: /* @__PURE__ */ g(f, { className: "size-5" }),
49
- youtube: /* @__PURE__ */ g(h, { className: "size-5" })
50
- }, C = [
44
+ }, C = {
45
+ twitter: /* @__PURE__ */ _(h, { className: "size-5" }),
46
+ x: /* @__PURE__ */ _(h, { className: "size-5" }),
47
+ github: /* @__PURE__ */ _(d, { className: "size-5" }),
48
+ discord: /* @__PURE__ */ _(m, { className: "size-5" }),
49
+ linkedin: /* @__PURE__ */ _(p, { className: "size-5" }),
50
+ youtube: /* @__PURE__ */ _(g, { className: "size-5" })
51
+ }, w = [
51
52
  "terms-of-service",
52
53
  "privacy-policy",
53
54
  "security",
@@ -57,16 +58,16 @@ var y = _`
57
58
  "sla",
58
59
  "refund-policy"
59
60
  ];
60
- function w(e) {
61
+ function T(e) {
61
62
  return e.trim().replace(/[^A-Za-z0-9 ]/g, "").split(/\s+/).map((e, t) => t === 0 ? e.toLowerCase() : e.charAt(0).toUpperCase() + e.slice(1).toLowerCase()).join("");
62
63
  }
63
- function T({ productSlug: u, productName: f, tagline: p, version: m = "v1.0.0", columns: h, socialLinks: _, legalPageOrder: T = C, deferRemoteData: E = !1, hideOnInstalledApp: D = !0 }) {
64
- let { workspaceId: O, projectId: k } = t(), A = e("global"), { t: j } = n(), [M, N] = l(null), [P, F] = l(null);
65
- s(() => {
66
- if (!A || E) return;
64
+ function E({ productSlug: d, productName: p, tagline: m, version: h = "v1.0.0", columns: g, socialLinks: v, legalPageOrder: E = w, deferRemoteData: D = !1, hideOnInstalledApp: O = !0 }) {
65
+ let { workspaceId: k, projectId: A } = n(), { isAuthenticated: j } = t(), M = e("global"), { t: N } = r(), [P, F] = u(null), [I, L] = u(null);
66
+ c(() => {
67
+ if (!j || !M || D) return;
67
68
  let e = !1;
68
- return A.query({
69
- query: y,
69
+ return M.query({
70
+ query: b,
70
71
  variables: {
71
72
  filter: { isPublished: !0 },
72
73
  limit: 50
@@ -75,25 +76,26 @@ function T({ productSlug: u, productName: f, tagline: p, version: m = "v1.0.0",
75
76
  }).then((t) => {
76
77
  let n = t.data;
77
78
  if (e || !n?.contentPages?.items) return;
78
- let r = n.contentPages.items, i = T.map((e) => r.find((t) => t.slug === e)).filter((e) => e != null).map((e) => ({
79
+ let r = n.contentPages.items, i = E.map((e) => r.find((t) => t.slug === e)).filter((e) => e != null).map((e) => ({
79
80
  id: e.slug,
80
81
  label: e.title,
81
- href: `/legal/${x[e.slug] || e.slug}`
82
+ href: `/legal/${S[e.slug] || e.slug}`
82
83
  }));
83
- i.length > 0 && N(i);
84
+ i.length > 0 && F(i);
84
85
  }).catch(() => {}), () => {
85
86
  e = !0;
86
87
  };
87
88
  }, [
88
- E,
89
- A,
90
- T
91
- ]), s(() => {
92
- if (!A || _ || E) return;
89
+ D,
90
+ M,
91
+ j,
92
+ E
93
+ ]), c(() => {
94
+ if (!j || !M || v || D) return;
93
95
  let e = !1;
94
- return A.query({
95
- query: b,
96
- variables: { slug: u },
96
+ return M.query({
97
+ query: x,
98
+ variables: { slug: d },
97
99
  fetchPolicy: "cache-first"
98
100
  }).then((t) => {
99
101
  if (e) return;
@@ -103,58 +105,59 @@ function T({ productSlug: u, productName: f, tagline: p, version: m = "v1.0.0",
103
105
  id: e,
104
106
  label: e.charAt(0).toUpperCase() + e.slice(1),
105
107
  href: t,
106
- icon: S[e.toLowerCase()] || /* @__PURE__ */ g(d, { className: "size-5" })
108
+ icon: C[e.toLowerCase()] || /* @__PURE__ */ _(f, { className: "size-5" })
107
109
  }));
108
- r.length > 0 && F(r);
110
+ r.length > 0 && L(r);
109
111
  }).catch(() => {}), () => {
110
112
  e = !0;
111
113
  };
112
114
  }, [
113
- _,
114
- E,
115
- A,
116
- u
115
+ v,
116
+ D,
117
+ M,
118
+ j,
119
+ d
117
120
  ]);
118
- let I = c(() => {
119
- let e = h ?? r, t = M ? e.map((e) => e.title === "Legal" ? {
121
+ let R = l(() => {
122
+ let e = g ?? i, t = P ? e.map((e) => e.title === "Legal" ? {
120
123
  ...e,
121
- links: M
124
+ links: P
122
125
  } : e) : e, n = (e, t) => {
123
- let n = j(e);
126
+ let n = N(e);
124
127
  return n === e ? t : n;
125
128
  };
126
129
  return t.map((e) => ({
127
130
  ...e,
128
- title: n(`footer.columns.${w(e.title)}`, e.title),
131
+ title: n(`footer.columns.${T(e.title)}`, e.title),
129
132
  links: e.links.map((e) => e.brand ? e : {
130
133
  ...e,
131
134
  label: n(`footer.links.${e.id}`, e.label)
132
135
  })
133
136
  }));
134
137
  }, [
135
- M,
136
- h,
137
- j
138
+ P,
139
+ g,
140
+ N
138
141
  ]);
139
- return /* @__PURE__ */ g(a, {
140
- logo: /* @__PURE__ */ g(o, { size: "sidenav" }),
141
- productName: f,
142
- tagline: p,
143
- columns: I,
144
- socialLinks: _ ?? P ?? i,
145
- version: m,
146
- hideOnInstalledApp: D,
142
+ return /* @__PURE__ */ _(o, {
143
+ logo: /* @__PURE__ */ _(s, { size: "sidenav" }),
144
+ productName: p,
145
+ tagline: m,
146
+ columns: R,
147
+ socialLinks: v ?? I ?? a,
148
+ version: h,
149
+ hideOnInstalledApp: O,
147
150
  context: {
148
- workspace: O ?? void 0,
149
- project: k ?? void 0
151
+ workspace: k ?? void 0,
152
+ project: A ?? void 0
150
153
  },
151
- renderLink: ({ href: e, external: t, children: n, className: r }) => t ? /* @__PURE__ */ g("a", {
154
+ renderLink: ({ href: e, external: t, children: n, className: r }) => t ? /* @__PURE__ */ _("a", {
152
155
  href: e,
153
156
  target: "_blank",
154
157
  rel: "noopener noreferrer",
155
158
  className: r,
156
159
  children: n
157
- }) : /* @__PURE__ */ g(v, {
160
+ }) : /* @__PURE__ */ _(y, {
158
161
  to: e,
159
162
  className: r,
160
163
  children: n
@@ -162,4 +165,4 @@ function T({ productSlug: u, productName: f, tagline: p, version: m = "v1.0.0",
162
165
  });
163
166
  }
164
167
  //#endregion
165
- export { T as DynamicFooter };
168
+ export { E as DynamicFooter };
@@ -1 +1 @@
1
- {"version":3,"file":"NotificationFooter.d.ts","sourceRoot":"","sources":["../../../src/chrome/notificationCenter/NotificationFooter.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,OAAO,CAAC;AAEhC,UAAU,uBAAuB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;CACxB;AAED,eAAO,MAAM,kBAAkB,EAAE,EAAE,CAAC,uBAAuB,CAiB1D,CAAC"}
1
+ {"version":3,"file":"NotificationFooter.d.ts","sourceRoot":"","sources":["../../../src/chrome/notificationCenter/NotificationFooter.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,OAAO,CAAC;AAIhC,UAAU,uBAAuB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;CACxB;AAED,eAAO,MAAM,kBAAkB,EAAE,EAAE,CAAC,uBAAuB,CAwB1D,CAAC"}
@@ -1,23 +1,24 @@
1
- import { jsx as e, jsxs as t } from "react/jsx-runtime";
1
+ import { PushOptInToggle as e } from "./PushOptInToggle.js";
2
+ import { jsx as t, jsxs as n } from "react/jsx-runtime";
2
3
  //#region src/chrome/notificationCenter/NotificationFooter.tsx
3
- var n = ({ totalCount: n, onViewAll: r }) => /* @__PURE__ */ e("div", {
4
- className: "p-3 border-t border-border-subtle",
5
- children: /* @__PURE__ */ t("div", {
6
- className: "flex items-center justify-between",
7
- children: [/* @__PURE__ */ t("span", {
4
+ var r = ({ totalCount: r, onViewAll: i }) => /* @__PURE__ */ n("div", {
5
+ className: "border-t border-border-subtle",
6
+ children: [/* @__PURE__ */ t(e, {}), /* @__PURE__ */ n("div", {
7
+ className: "flex items-center justify-between px-3 pb-3 pt-0",
8
+ children: [/* @__PURE__ */ n("span", {
8
9
  className: "text-[11px] text-text-muted",
9
10
  children: [
10
- n,
11
+ r,
11
12
  " notification",
12
- n === 1 ? "" : "s"
13
+ r === 1 ? "" : "s"
13
14
  ]
14
- }), r && /* @__PURE__ */ e("button", {
15
+ }), i && /* @__PURE__ */ t("button", {
15
16
  type: "button",
16
- onClick: r,
17
+ onClick: i,
17
18
  className: "text-xs text-action-primary-bg hover:underline font-medium",
18
19
  children: "View All"
19
20
  })]
20
- })
21
+ })]
21
22
  });
22
23
  //#endregion
23
- export { n as NotificationFooter };
24
+ export { r as NotificationFooter };
@@ -0,0 +1,19 @@
1
+ import { FC } from 'react';
2
+ /**
3
+ * Push opt-in control for the notification centre.
4
+ *
5
+ * Lives here rather than in a settings page because this is the one surface
6
+ * every shell already renders, and because it is where a user is thinking about
7
+ * notifications — which is the whole requirement for the permission prompt.
8
+ * The prompt is one-shot on iOS and sticky everywhere, so it must be raised
9
+ * from a deliberate gesture in context, never at boot.
10
+ *
11
+ * It talks to the registry (`shared/native/push-optin`) rather than importing
12
+ * the implementation: `chrome` is statically imported by most microfrontends,
13
+ * and `shell-native` resolves `@capacitor/*`, which must never end up in their
14
+ * bundles. When nothing has registered a controller — an MFE in isolation, a
15
+ * Storybook story, a browser without push — this renders NOTHING at all rather
16
+ * than a dead switch.
17
+ */
18
+ export declare const PushOptInToggle: FC;
19
+ //# sourceMappingURL=PushOptInToggle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PushOptInToggle.d.ts","sourceRoot":"","sources":["../../../src/chrome/notificationCenter/PushOptInToggle.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAoC,KAAK,EAAE,EAAE,MAAM,OAAO,CAAC;AAOlE;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,eAAe,EAAE,EAkE7B,CAAC"}
@@ -0,0 +1,56 @@
1
+ import { getPushOptInController as e } from "../../shared/native/push-optin.js";
2
+ import { useCallback as t, useEffect as n, useState as r } from "react";
3
+ import { jsx as i, jsxs as a } from "react/jsx-runtime";
4
+ //#region src/chrome/notificationCenter/PushOptInToggle.tsx
5
+ var o = () => {
6
+ let o = e(), [s, c] = r(() => o?.getState() ?? "unsupported"), [l, u] = r(!1);
7
+ n(() => {
8
+ if (o) return c(o.getState()), o.subscribe(c);
9
+ }, [o]);
10
+ let d = t(async () => {
11
+ if (!(!o || l)) {
12
+ u(!0);
13
+ try {
14
+ c(s === "enabled" ? await o.disable() : await o.enable());
15
+ } finally {
16
+ u(!1);
17
+ }
18
+ }
19
+ }, [
20
+ o,
21
+ l,
22
+ s
23
+ ]);
24
+ if (!o || s === "unsupported") return null;
25
+ if (s === "denied") return /* @__PURE__ */ i("div", {
26
+ className: "px-3 pb-3 pt-1",
27
+ children: /* @__PURE__ */ i("p", {
28
+ className: "text-[11px] text-text-muted",
29
+ children: "Push notifications are blocked. Re-enable them in your browser or device settings."
30
+ })
31
+ });
32
+ let f = s === "enabled";
33
+ return /* @__PURE__ */ a("div", {
34
+ className: "flex items-center justify-between gap-3 px-3 pb-3 pt-1",
35
+ children: [/* @__PURE__ */ i("span", {
36
+ className: "text-[11px] text-text-muted",
37
+ children: f ? "Push notifications are on" : "Get notified when this tab is closed"
38
+ }), /* @__PURE__ */ i("button", {
39
+ type: "button",
40
+ role: "switch",
41
+ "aria-checked": f,
42
+ "aria-label": "Push notifications",
43
+ disabled: l,
44
+ onClick: () => void d(),
45
+ className: [
46
+ "relative inline-flex h-5 w-9 shrink-0 items-center rounded-full",
47
+ "transition-colors disabled:opacity-50",
48
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-strong",
49
+ f ? "bg-action-primary-bg" : "bg-bg-sunken"
50
+ ].join(" "),
51
+ children: /* @__PURE__ */ i("span", { className: ["inline-block size-4 rounded-full bg-bg-surface transition-transform", f ? "translate-x-[18px]" : "translate-x-0.5"].join(" ") })
52
+ })]
53
+ });
54
+ };
55
+ //#endregion
56
+ export { o as PushOptInToggle };
@@ -10,4 +10,5 @@ export type { NativeEntryRoutes } from './entry';
10
10
  export { nativeSelection, nativeActionSheet } from './consumers';
11
11
  export { getDesktopBridge, getLegacyDesktopRuntime, isDesktop, getDesktopRuntimeConfig, getDesktopGatewayBases, getDesktopGatewayUrls, getDesktopAuthBridgeConfig, desktopOpenExternal, desktopNotify, desktopSetBadgeCount, desktopSetTheme, desktopSetTrayQuickActions, desktopSetLocale, desktopDeepLinkToPath, installDesktopDeepLinkHandler, installDesktopNavigateHandler, registerDesktopNavigator, bootDesktopShell, onDesktopUpdateState, onDesktopWindowState, getDesktopWindowState, desktopCheckForUpdates, desktopInstallUpdate, getDesktopUpdateState, DESKTOP_UPDATE_UNSUPPORTED, DESKTOP_WINDOW_STATE_DEFAULT, } from './desktop';
12
12
  export type { BootDesktopShellOptions, DesktopShellHandle, LegacyDesktopRuntime } from './desktop';
13
+ export { getPushOptInController, registerPushOptInController, type PushOptInController, type PushOptInState, } from './push-optin';
13
14
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/shared/native/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,iBAAiB,EACjB,sBAAsB,EACtB,kBAAkB,EAClB,QAAQ,EACR,mBAAmB,EACnB,sBAAsB,EACtB,qBAAqB,EACrB,uBAAuB,EACvB,cAAc,EACd,kBAAkB,EAClB,mBAAmB,EACnB,eAAe,EACf,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,UAAU,EACV,iBAAiB,EACjB,sBAAsB,EACtB,mBAAmB,EACnB,iBAAiB,EACjB,wBAAwB,EACxB,oBAAoB,EACpB,cAAc,EACd,YAAY,EACZ,cAAc,EACd,yBAAyB,EACzB,aAAa,GACd,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EACL,WAAW,EACX,SAAS,EACT,KAAK,EACL,QAAQ,EACR,KAAK,EACL,UAAU,EACV,eAAe,EACf,cAAc,EACd,YAAY,GACb,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,aAAa,EACb,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,WAAW,EACX,WAAW,GACZ,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACtE,cAAc,SAAS,CAAC;AACxB,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,qBAAqB,EACrB,yBAAyB,EACzB,sBAAsB,EACtB,kBAAkB,EAClB,gBAAgB,EAChB,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,GACxB,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AACxE,YAAY,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEjE,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,SAAS,EACT,uBAAuB,EACvB,sBAAsB,EACtB,qBAAqB,EACrB,0BAA0B,EAC1B,mBAAmB,EACnB,aAAa,EACb,oBAAoB,EACpB,eAAe,EACf,0BAA0B,EAC1B,gBAAgB,EAChB,qBAAqB,EACrB,6BAA6B,EAC7B,6BAA6B,EAC7B,wBAAwB,EACxB,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACrB,sBAAsB,EACtB,oBAAoB,EACpB,qBAAqB,EACrB,0BAA0B,EAC1B,4BAA4B,GAC7B,MAAM,WAAW,CAAC;AACnB,YAAY,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/shared/native/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,iBAAiB,EACjB,sBAAsB,EACtB,kBAAkB,EAClB,QAAQ,EACR,mBAAmB,EACnB,sBAAsB,EACtB,qBAAqB,EACrB,uBAAuB,EACvB,cAAc,EACd,kBAAkB,EAClB,mBAAmB,EACnB,eAAe,EACf,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,UAAU,EACV,iBAAiB,EACjB,sBAAsB,EACtB,mBAAmB,EACnB,iBAAiB,EACjB,wBAAwB,EACxB,oBAAoB,EACpB,cAAc,EACd,YAAY,EACZ,cAAc,EACd,yBAAyB,EACzB,aAAa,GACd,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EACL,WAAW,EACX,SAAS,EACT,KAAK,EACL,QAAQ,EACR,KAAK,EACL,UAAU,EACV,eAAe,EACf,cAAc,EACd,YAAY,GACb,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,aAAa,EACb,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,WAAW,EACX,WAAW,GACZ,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACtE,cAAc,SAAS,CAAC;AACxB,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,qBAAqB,EACrB,yBAAyB,EACzB,sBAAsB,EACtB,kBAAkB,EAClB,gBAAgB,EAChB,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,GACxB,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AACxE,YAAY,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEjE,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,SAAS,EACT,uBAAuB,EACvB,sBAAsB,EACtB,qBAAqB,EACrB,0BAA0B,EAC1B,mBAAmB,EACnB,aAAa,EACb,oBAAoB,EACpB,eAAe,EACf,0BAA0B,EAC1B,gBAAgB,EAChB,qBAAqB,EACrB,6BAA6B,EAC7B,6BAA6B,EAC7B,wBAAwB,EACxB,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACrB,sBAAsB,EACtB,oBAAoB,EACpB,qBAAqB,EACrB,0BAA0B,EAC1B,4BAA4B,GAC7B,MAAM,WAAW,CAAC;AACnB,YAAY,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AACnG,OAAO,EACL,sBAAsB,EACtB,2BAA2B,EAC3B,KAAK,mBAAmB,EACxB,KAAK,cAAc,GACpB,MAAM,cAAc,CAAC"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Push Opt-In Registry
3
+ *
4
+ * The seam that lets shell chrome offer a push toggle without importing
5
+ * `shell-native` — and therefore without dragging Capacitor into every
6
+ * microfrontend.
7
+ *
8
+ * ── Why a registry and not a direct import ─────────────────────────────────
9
+ * `chrome` is statically imported by most MFEs (`microfe-auth`,
10
+ * `microfe-billing`, `microfe-conversations`, …). `shell-native` resolves
11
+ * `@capacitor/*`, which those packages must never pull in — the rule the
12
+ * shell-native docblock states as "never re-export shell-native from
13
+ * shared/native". A toggle living in chrome therefore cannot import the push
14
+ * implementation; it has to be handed one.
15
+ *
16
+ * So the app shell registers a controller during `bootNativeShell()`, and
17
+ * chrome asks for whatever is registered. On a surface where nothing registers
18
+ * — an MFE rendered in isolation, a Storybook story, a test — `getPushOptInController()`
19
+ * returns null and the toggle renders nothing rather than throwing.
20
+ *
21
+ * The same indirection is what lets one component serve both platforms: the
22
+ * shell registers the Capacitor implementation on native and the Web Push one
23
+ * in a browser, and chrome does not need to know which it got.
24
+ *
25
+ * @module shared/native/push-optin
26
+ */
27
+ /** Where a push opt-in currently stands, from the UI's point of view. */
28
+ export type PushOptInState =
29
+ /** No push support at all — no controller, or the browser lacks the APIs. */
30
+ 'unsupported'
31
+ /** Supported, never asked. Showing the control is safe; it will prompt. */
32
+ | 'default'
33
+ /** Permission granted AND a live subscription/token exists. */
34
+ | 'enabled'
35
+ /** Permission granted but not currently subscribed. */
36
+ | 'disabled'
37
+ /** Permission refused. Cannot be re-prompted from script — see below. */
38
+ | 'denied';
39
+ /**
40
+ * The capability chrome needs, implemented by the shell.
41
+ *
42
+ * `enable()` MUST be called from a user gesture. The permission prompt is
43
+ * one-shot on iOS and sticky everywhere, so a denied prompt is unrecoverable
44
+ * in-page: the user has to change it in browser or OS settings. That is why
45
+ * there is a distinct `denied` state rather than an error.
46
+ */
47
+ export interface PushOptInController {
48
+ /** Current state. Cheap and synchronous — safe to call during render. */
49
+ getState(): PushOptInState;
50
+ /** Prompt if needed, then subscribe. Resolves to the resulting state. */
51
+ enable(): Promise<PushOptInState>;
52
+ /** Drop the subscription and revoke the device registration. */
53
+ disable(): Promise<PushOptInState>;
54
+ /** Subscribe to state changes; returns an unsubscribe function. */
55
+ subscribe(listener: (state: PushOptInState) => void): () => void;
56
+ }
57
+ /**
58
+ * Install the shell's implementation. Called by `bootNativeShell()`.
59
+ *
60
+ * Last registration wins, and passing `null` clears it — a test that installs a
61
+ * fake can restore the previous state without reloading the module.
62
+ */
63
+ export declare function registerPushOptInController(next: PushOptInController | null): void;
64
+ /** The registered controller, or `null` when the surface has no push support. */
65
+ export declare function getPushOptInController(): PushOptInController | null;
66
+ //# sourceMappingURL=push-optin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"push-optin.d.ts","sourceRoot":"","sources":["../../../src/shared/native/push-optin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,yEAAyE;AACzE,MAAM,MAAM,cAAc;AACxB,6EAA6E;AAC3E,aAAa;AACf,2EAA2E;GACzE,SAAS;AACX,+DAA+D;GAC7D,SAAS;AACX,uDAAuD;GACrD,UAAU;AACZ,yEAAyE;GACvE,QAAQ,CAAC;AAEb;;;;;;;GAOG;AACH,MAAM,WAAW,mBAAmB;IAClC,yEAAyE;IACzE,QAAQ,IAAI,cAAc,CAAC;IAC3B,yEAAyE;IACzE,MAAM,IAAI,OAAO,CAAC,cAAc,CAAC,CAAC;IAClC,gEAAgE;IAChE,OAAO,IAAI,OAAO,CAAC,cAAc,CAAC,CAAC;IACnC,mEAAmE;IACnE,SAAS,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;CAClE;AAID;;;;;GAKG;AACH,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,mBAAmB,GAAG,IAAI,GAAG,IAAI,CAElF;AAED,iFAAiF;AACjF,wBAAgB,sBAAsB,IAAI,mBAAmB,GAAG,IAAI,CAEnE"}
@@ -0,0 +1,10 @@
1
+ //#region src/shared/native/push-optin.ts
2
+ var e = null;
3
+ function t(t) {
4
+ e = t;
5
+ }
6
+ function n() {
7
+ return e;
8
+ }
9
+ //#endregion
10
+ export { n as getPushOptInController, t as registerPushOptInController };
@@ -1 +1 @@
1
- {"version":3,"file":"AppShellProvider.d.ts","sourceRoot":"","sources":["../../../src/shared/providers/AppShellProvider.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AppShellProvider.d.ts","sourceRoot":"","sources":["../../../src/shared/providers/AppShellProvider.tsx"],"names":[],"mappings":"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"}