@burdenoff/fe-libs 2026.625.1 → 2026.625.3

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.
@@ -0,0 +1,268 @@
1
+ //#region node_modules/@capacitor/core/dist/index.js
2
+ var e;
3
+ (function(e) {
4
+ e.Unimplemented = "UNIMPLEMENTED", e.Unavailable = "UNAVAILABLE";
5
+ })(e ||= {});
6
+ var t = class extends Error {
7
+ constructor(e, t, n) {
8
+ super(e), this.message = e, this.code = t, this.data = n;
9
+ }
10
+ }, n = (e) => e?.androidBridge ? "android" : e?.webkit?.messageHandlers?.bridge ? "ios" : "web", r = (r) => {
11
+ let i = r.CapacitorCustomPlatform || null, a = r.Capacitor || {}, o = a.Plugins = a.Plugins || {}, s = () => i === null ? n(r) : i.name, c = () => s() !== "web", l = (e) => !!(f.get(e)?.platforms.has(s()) || u(e)), u = (e) => a.PluginHeaders?.find((t) => t.name === e), d = (e) => r.console.error(e), f = /* @__PURE__ */ new Map();
12
+ return a.convertFileSrc ||= (e) => e, a.getPlatform = s, a.handleError = d, a.isNativePlatform = c, a.isPluginAvailable = l, a.registerPlugin = (n, r = {}) => {
13
+ let c = f.get(n);
14
+ if (c) return console.warn(`Capacitor plugin "${n}" already registered. Cannot register plugins twice.`), c.proxy;
15
+ let l = s(), d = u(n), p, m = async () => (!p && l in r ? p = p = typeof r[l] == "function" ? await r[l]() : r[l] : i !== null && !p && "web" in r && (p = p = typeof r.web == "function" ? await r.web() : r.web), p), h = (r, i) => {
16
+ if (d) {
17
+ let e = d?.methods.find((e) => i === e.name);
18
+ if (e) return e.rtype === "promise" ? (e) => a.nativePromise(n, i.toString(), e) : (e, t) => a.nativeCallback(n, i.toString(), e, t);
19
+ if (r) return r[i]?.bind(r);
20
+ } else if (r) return r[i]?.bind(r);
21
+ else throw new t(`"${n}" plugin is not implemented on ${l}`, e.Unimplemented);
22
+ }, g = (r) => {
23
+ let i, a = (...a) => {
24
+ let o = m().then((o) => {
25
+ let s = h(o, r);
26
+ if (s) {
27
+ let e = s(...a);
28
+ return i = e?.remove, e;
29
+ } else throw new t(`"${n}.${r}()" is not implemented on ${l}`, e.Unimplemented);
30
+ });
31
+ return r === "addListener" && (o.remove = async () => i()), o;
32
+ };
33
+ return a.toString = () => `${r.toString()}() { [capacitor code] }`, Object.defineProperty(a, "name", {
34
+ value: r,
35
+ writable: !1,
36
+ configurable: !1
37
+ }), a;
38
+ }, _ = g("addListener"), v = g("removeListener"), y = (e, t) => {
39
+ let n = _({ eventName: e }, t), r = async () => {
40
+ v({
41
+ eventName: e,
42
+ callbackId: await n
43
+ }, t);
44
+ }, i = new Promise((e) => n.then(() => e({ remove: r })));
45
+ return i.remove = async () => {
46
+ console.warn("Using addListener() without 'await' is deprecated."), await r();
47
+ }, i;
48
+ }, b = new Proxy({}, { get(e, t) {
49
+ switch (t) {
50
+ case "$$typeof": return;
51
+ case "toJSON": return () => ({});
52
+ case "addListener": return d ? y : _;
53
+ case "removeListener": return v;
54
+ default: return g(t);
55
+ }
56
+ } });
57
+ return o[n] = b, f.set(n, {
58
+ name: n,
59
+ proxy: b,
60
+ platforms: new Set([...Object.keys(r), ...d ? [l] : []])
61
+ }), b;
62
+ }, a.Exception = t, a.DEBUG = !!a.DEBUG, a.isLoggingEnabled = !!a.isLoggingEnabled, a;
63
+ }, i = /* @__PURE__ */ ((e) => e.Capacitor = r(e))(typeof globalThis < "u" ? globalThis : typeof self < "u" ? self : typeof window < "u" ? window : typeof global < "u" ? global : {}), a = i.registerPlugin, o = class {
64
+ constructor() {
65
+ this.listeners = {}, this.retainedEventArguments = {}, this.windowListeners = {};
66
+ }
67
+ addListener(e, t) {
68
+ let n = !1;
69
+ this.listeners[e] || (this.listeners[e] = [], n = !0), this.listeners[e].push(t);
70
+ let r = this.windowListeners[e];
71
+ return r && !r.registered && this.addWindowListener(r), n && this.sendRetainedArgumentsForEvent(e), Promise.resolve({ remove: async () => this.removeListener(e, t) });
72
+ }
73
+ async removeAllListeners() {
74
+ this.listeners = {};
75
+ for (let e in this.windowListeners) this.removeWindowListener(this.windowListeners[e]);
76
+ this.windowListeners = {};
77
+ }
78
+ notifyListeners(e, t, n) {
79
+ let r = this.listeners[e];
80
+ if (!r) {
81
+ if (n) {
82
+ let n = this.retainedEventArguments[e];
83
+ n ||= [], n.push(t), this.retainedEventArguments[e] = n;
84
+ }
85
+ return;
86
+ }
87
+ r.forEach((e) => e(t));
88
+ }
89
+ hasListeners(e) {
90
+ return !!this.listeners[e]?.length;
91
+ }
92
+ registerWindowListener(e, t) {
93
+ this.windowListeners[t] = {
94
+ registered: !1,
95
+ windowEventName: e,
96
+ pluginEventName: t,
97
+ handler: (e) => {
98
+ this.notifyListeners(t, e);
99
+ }
100
+ };
101
+ }
102
+ unimplemented(t = "not implemented") {
103
+ return new i.Exception(t, e.Unimplemented);
104
+ }
105
+ unavailable(t = "not available") {
106
+ return new i.Exception(t, e.Unavailable);
107
+ }
108
+ async removeListener(e, t) {
109
+ let n = this.listeners[e];
110
+ if (!n) return;
111
+ let r = n.indexOf(t);
112
+ this.listeners[e].splice(r, 1), this.listeners[e].length || this.removeWindowListener(this.windowListeners[e]);
113
+ }
114
+ addWindowListener(e) {
115
+ window.addEventListener(e.windowEventName, e.handler), e.registered = !0;
116
+ }
117
+ removeWindowListener(e) {
118
+ e && (window.removeEventListener(e.windowEventName, e.handler), e.registered = !1);
119
+ }
120
+ sendRetainedArgumentsForEvent(e) {
121
+ let t = this.retainedEventArguments[e];
122
+ t && (delete this.retainedEventArguments[e], t.forEach((t) => {
123
+ this.notifyListeners(e, t);
124
+ }));
125
+ }
126
+ }, s = (e) => encodeURIComponent(e).replace(/%(2[346B]|5E|60|7C)/g, decodeURIComponent).replace(/[()]/g, escape), c = (e) => e.replace(/(%[\dA-F]{2})+/gi, decodeURIComponent), l = class extends o {
127
+ async getCookies() {
128
+ let e = document.cookie, t = {};
129
+ return e.split(";").forEach((e) => {
130
+ if (e.length <= 0) return;
131
+ let [n, r] = e.replace(/=/, "CAP_COOKIE").split("CAP_COOKIE");
132
+ n = c(n).trim(), r = c(r).trim(), t[n] = r;
133
+ }), t;
134
+ }
135
+ async setCookie(e) {
136
+ try {
137
+ let t = s(e.key), n = s(e.value), r = e.expires ? `; expires=${e.expires.replace("expires=", "")}` : "", i = (e.path || "/").replace("path=", ""), a = e.url != null && e.url.length > 0 ? `domain=${e.url}` : "";
138
+ document.cookie = `${t}=${n || ""}${r}; path=${i}; ${a};`;
139
+ } catch (e) {
140
+ return Promise.reject(e);
141
+ }
142
+ }
143
+ async deleteCookie(e) {
144
+ try {
145
+ document.cookie = `${e.key}=; Max-Age=0`;
146
+ } catch (e) {
147
+ return Promise.reject(e);
148
+ }
149
+ }
150
+ async clearCookies() {
151
+ try {
152
+ let e = document.cookie.split(";") || [];
153
+ for (let t of e) document.cookie = t.replace(/^ +/, "").replace(/=.*/, `=;expires=${(/* @__PURE__ */ new Date()).toUTCString()};path=/`);
154
+ } catch (e) {
155
+ return Promise.reject(e);
156
+ }
157
+ }
158
+ async clearAllCookies() {
159
+ try {
160
+ await this.clearCookies();
161
+ } catch (e) {
162
+ return Promise.reject(e);
163
+ }
164
+ }
165
+ };
166
+ a("CapacitorCookies", { web: () => new l() });
167
+ var u = async (e) => new Promise((t, n) => {
168
+ let r = new FileReader();
169
+ r.onload = () => {
170
+ let e = r.result;
171
+ t(e.indexOf(",") >= 0 ? e.split(",")[1] : e);
172
+ }, r.onerror = (e) => n(e), r.readAsDataURL(e);
173
+ }), d = (e = {}) => {
174
+ let t = Object.keys(e);
175
+ return Object.keys(e).map((e) => e.toLocaleLowerCase()).reduce((n, r, i) => (n[r] = e[t[i]], n), {});
176
+ }, f = (e, t = !0) => e ? Object.entries(e).reduce((e, n) => {
177
+ let [r, i] = n, a, o;
178
+ return Array.isArray(i) ? (o = "", i.forEach((e) => {
179
+ a = t ? encodeURIComponent(e) : e, o += `${r}=${a}&`;
180
+ }), o.slice(0, -1)) : (a = t ? encodeURIComponent(i) : i, o = `${r}=${a}`), `${e}&${o}`;
181
+ }, "").substr(1) : null, p = (e, t = {}) => {
182
+ let n = Object.assign({
183
+ method: e.method || "GET",
184
+ headers: e.headers
185
+ }, t), r = d(e.headers)["content-type"] || "";
186
+ if (typeof e.data == "string") n.body = e.data;
187
+ else if (r.includes("application/x-www-form-urlencoded")) {
188
+ let t = new URLSearchParams();
189
+ for (let [n, r] of Object.entries(e.data || {})) t.set(n, r);
190
+ n.body = t.toString();
191
+ } else if (r.includes("multipart/form-data") || e.data instanceof FormData) {
192
+ let t = new FormData();
193
+ if (e.data instanceof FormData) e.data.forEach((e, n) => {
194
+ t.append(n, e);
195
+ });
196
+ else for (let n of Object.keys(e.data)) t.append(n, e.data[n]);
197
+ n.body = t;
198
+ let r = new Headers(n.headers);
199
+ r.delete("content-type"), n.headers = r;
200
+ } else (r.includes("application/json") || typeof e.data == "object") && (n.body = JSON.stringify(e.data));
201
+ return n;
202
+ }, m = class extends o {
203
+ async request(e) {
204
+ let t = p(e, e.webFetchExtra), n = f(e.params, e.shouldEncodeUrlParams), r = n ? `${e.url}?${n}` : e.url, i = await fetch(r, t), a = i.headers.get("content-type") || "", { responseType: o = "text" } = i.ok ? e : {};
205
+ a.includes("application/json") && (o = "json");
206
+ let s, c;
207
+ switch (o) {
208
+ case "arraybuffer":
209
+ case "blob":
210
+ c = await i.blob(), s = await u(c);
211
+ break;
212
+ case "json":
213
+ s = await i.json();
214
+ break;
215
+ default: s = await i.text();
216
+ }
217
+ let l = {};
218
+ return i.headers.forEach((e, t) => {
219
+ l[t] = e;
220
+ }), {
221
+ data: s,
222
+ headers: l,
223
+ status: i.status,
224
+ url: i.url
225
+ };
226
+ }
227
+ async get(e) {
228
+ return this.request(Object.assign(Object.assign({}, e), { method: "GET" }));
229
+ }
230
+ async post(e) {
231
+ return this.request(Object.assign(Object.assign({}, e), { method: "POST" }));
232
+ }
233
+ async put(e) {
234
+ return this.request(Object.assign(Object.assign({}, e), { method: "PUT" }));
235
+ }
236
+ async patch(e) {
237
+ return this.request(Object.assign(Object.assign({}, e), { method: "PATCH" }));
238
+ }
239
+ async delete(e) {
240
+ return this.request(Object.assign(Object.assign({}, e), { method: "DELETE" }));
241
+ }
242
+ };
243
+ a("CapacitorHttp", { web: () => new m() });
244
+ var h;
245
+ (function(e) {
246
+ e.Dark = "DARK", e.Light = "LIGHT", e.Default = "DEFAULT";
247
+ })(h ||= {});
248
+ var g;
249
+ (function(e) {
250
+ e.StatusBar = "StatusBar", e.NavigationBar = "NavigationBar";
251
+ })(g ||= {});
252
+ var _ = class extends o {
253
+ async setStyle() {
254
+ this.unavailable("not available for web");
255
+ }
256
+ async setAnimation() {
257
+ this.unavailable("not available for web");
258
+ }
259
+ async show() {
260
+ this.unavailable("not available for web");
261
+ }
262
+ async hide() {
263
+ this.unavailable("not available for web");
264
+ }
265
+ };
266
+ a("SystemBars", { web: () => new _() });
267
+ //#endregion
268
+ export { i as Capacitor };
@@ -4,4 +4,5 @@ export { getPlatform, isAndroid, isIOS, isNative, isWeb } from './platform';
4
4
  export { nativeConfirm, nativeCopyText, nativeImpact, nativeNotify, nativeOpenUrl, nativeShare, nativeToast, } from './consumers';
5
5
  export { SafeAreaView, type SafeAreaViewProps } from './SafeAreaView';
6
6
  export * from './hooks';
7
+ export { isNativeIAPAvailable, getNativeProducts, purchaseNativeProduct, acknowledgeNativePurchase, restoreNativePurchases, getNativePurchases, installNativeIAP, type NativeProduct, type NativeTransaction, type NativePurchaseType, } from './purchases';
7
8
  //# 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,QAAQ,EACR,mBAAmB,EACnB,qBAAqB,EACrB,uBAAuB,EACvB,cAAc,EACd,UAAU,EACV,iBAAiB,EACjB,sBAAsB,EACtB,mBAAmB,EACnB,wBAAwB,EACxB,cAAc,EACd,YAAY,EACZ,cAAc,EACd,yBAAyB,EACzB,aAAa,GACd,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAC5E,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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/shared/native/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,QAAQ,EACR,mBAAmB,EACnB,qBAAqB,EACrB,uBAAuB,EACvB,cAAc,EACd,UAAU,EACV,iBAAiB,EACjB,sBAAsB,EACtB,mBAAmB,EACnB,wBAAwB,EACxB,cAAc,EACd,YAAY,EACZ,cAAc,EACd,yBAAyB,EACzB,aAAa,GACd,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAC5E,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"}
@@ -0,0 +1,53 @@
1
+ import { PURCHASE_TYPE, Product, Transaction } from '@capgo/native-purchases';
2
+ export type { Product as NativeProduct, Transaction as NativeTransaction, } from '@capgo/native-purchases';
3
+ export type { PURCHASE_TYPE as NativePurchaseType } from '@capgo/native-purchases';
4
+ /** True when running inside a Capacitor iOS or Android app. */
5
+ export declare function isNativeIAPAvailable(): boolean;
6
+ /**
7
+ * Fetch product info from the App Store / Play Store for the given identifiers.
8
+ * Returns an empty array on web or if the store lookup fails.
9
+ */
10
+ export declare function getNativeProducts(productIdentifiers: string[], productType?: PURCHASE_TYPE): Promise<Product[]>;
11
+ /**
12
+ * Initiate a native purchase for the given product identifier.
13
+ *
14
+ * The returned Transaction contains the receipt (iOS legacy), jwsRepresentation
15
+ * (iOS StoreKit 2) or purchaseToken (Android) — send these to the backend for
16
+ * server-side validation before granting entitlements. Throws if the user cancels
17
+ * or the purchase fails.
18
+ */
19
+ export declare function purchaseNativeProduct(productIdentifier: string, options?: {
20
+ planIdentifier?: string;
21
+ productType?: PURCHASE_TYPE;
22
+ quantity?: number;
23
+ appAccountToken?: string;
24
+ isConsumable?: boolean;
25
+ /** Set false to defer acknowledgment until backend validation completes. */
26
+ autoAcknowledgePurchases?: boolean;
27
+ }): Promise<Transaction>;
28
+ /**
29
+ * Manually acknowledge/finish a transaction after server-side validation.
30
+ * Only needed when purchaseNativeProduct was called with autoAcknowledgePurchases: false.
31
+ *
32
+ * @param purchaseToken purchaseToken (Android) or transactionId (iOS)
33
+ */
34
+ export declare function acknowledgeNativePurchase(purchaseToken: string): Promise<void>;
35
+ /** Restore previously completed purchases (required to be reachable in the UI by App Store). */
36
+ export declare function restoreNativePurchases(): Promise<void>;
37
+ /** Return all purchases recorded for the current user on this device. */
38
+ export declare function getNativePurchases(options?: {
39
+ productType?: PURCHASE_TYPE;
40
+ appAccountToken?: string;
41
+ onlyCurrentEntitlements?: boolean;
42
+ }): Promise<Transaction[]>;
43
+ /**
44
+ * Register the StoreKit 2 transaction listener so background renewals, restores
45
+ * and interrupted purchases are observed when the app launches or resumes. Safe
46
+ * no-op on web. Call once after the billing context is known.
47
+ *
48
+ * Background transactions are reconciled authoritatively server-side via Apple
49
+ * App Store Server Notifications / Google RTDN; this listener lets the UI react
50
+ * (e.g. refresh entitlements) without polling.
51
+ */
52
+ export declare function installNativeIAP(onTransaction?: (transaction: Transaction) => void): Promise<void>;
53
+ //# sourceMappingURL=purchases.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"purchases.d.ts","sourceRoot":"","sources":["../../../src/shared/native/purchases.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAGnF,YAAY,EACV,OAAO,IAAI,aAAa,EACxB,WAAW,IAAI,iBAAiB,GACjC,MAAM,yBAAyB,CAAC;AACjC,YAAY,EAAE,aAAa,IAAI,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAEnF,+DAA+D;AAC/D,wBAAgB,oBAAoB,IAAI,OAAO,CAE9C;AAmBD;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,kBAAkB,EAAE,MAAM,EAAE,EAC5B,WAAW,CAAC,EAAE,aAAa,GAC1B,OAAO,CAAC,OAAO,EAAE,CAAC,CAKpB;AAED;;;;;;;GAOG;AACH,wBAAsB,qBAAqB,CACzC,iBAAiB,EAAE,MAAM,EACzB,OAAO,CAAC,EAAE;IACR,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,aAAa,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,4EAA4E;IAC5E,wBAAwB,CAAC,EAAE,OAAO,CAAC;CACpC,GACA,OAAO,CAAC,WAAW,CAAC,CAItB;AAED;;;;;GAKG;AACH,wBAAsB,yBAAyB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAIpF;AAED,gGAAgG;AAChG,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC,CAI5D;AAED,yEAAyE;AACzE,wBAAsB,kBAAkB,CAAC,OAAO,CAAC,EAAE;IACjD,WAAW,CAAC,EAAE,aAAa,CAAC;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAKzB;AAED;;;;;;;;GAQG;AACH,wBAAsB,gBAAgB,CACpC,aAAa,CAAC,EAAE,CAAC,WAAW,EAAE,WAAW,KAAK,IAAI,GACjD,OAAO,CAAC,IAAI,CAAC,CAUf"}
@@ -0,0 +1,53 @@
1
+ import { Capacitor as e } from "../../node_modules/@capacitor/core/dist/index.js";
2
+ //#region src/shared/native/purchases.ts
3
+ function t() {
4
+ return e.isNativePlatform();
5
+ }
6
+ async function n() {
7
+ if (!e.isNativePlatform()) return null;
8
+ try {
9
+ return (await import(
10
+ /* @vite-ignore */
11
+ "@capgo/native-purchases"
12
+ )).NativePurchases ?? null;
13
+ } catch {
14
+ return null;
15
+ }
16
+ }
17
+ async function r(e, t) {
18
+ let r = await n();
19
+ return !r || e.length === 0 ? [] : (await r.getProducts({
20
+ productIdentifiers: e,
21
+ productType: t
22
+ })).products ?? [];
23
+ }
24
+ async function i(e, t) {
25
+ let r = await n();
26
+ if (!r) throw Error("Native purchases not available on this platform");
27
+ return r.purchaseProduct({
28
+ productIdentifier: e,
29
+ ...t
30
+ });
31
+ }
32
+ async function a(e) {
33
+ let t = await n();
34
+ t && await t.acknowledgePurchase({ purchaseToken: e });
35
+ }
36
+ async function o() {
37
+ let e = await n();
38
+ e && await e.restorePurchases();
39
+ }
40
+ async function s(e) {
41
+ let t = await n();
42
+ return t ? (await t.getPurchases(e)).purchases ?? [] : [];
43
+ }
44
+ async function c(e) {
45
+ let t = await n();
46
+ if (t) try {
47
+ await t.addListener("transactionUpdated", (t) => {
48
+ e?.(t);
49
+ });
50
+ } catch {}
51
+ }
52
+ //#endregion
53
+ export { a as acknowledgeNativePurchase, r as getNativeProducts, s as getNativePurchases, c as installNativeIAP, t as isNativeIAPAvailable, i as purchaseNativeProduct, o as restoreNativePurchases };
@@ -10,4 +10,5 @@ import { useDeviceInfo as v } from "./shared/native/hooks/useDeviceInfo.js";
10
10
  import { useHaptics as y } from "./shared/native/hooks/useHaptics.js";
11
11
  import { useStatusBar as b } from "./shared/native/hooks/useStatusBar.js";
12
12
  import "./shared/native/hooks/index.js";
13
- export { p as SafeAreaView, e as getNativeBridge, t as getPlatform, n as isAndroid, r as isIOS, i as isNative, a as isWeb, o as nativeConfirm, s as nativeCopyText, c as nativeImpact, l as nativeNotify, u as nativeOpenUrl, d as nativeShare, f as nativeToast, _ as useAppState, v as useDeviceInfo, y as useHaptics, g as useNativeKeyboard, m as useNativePlatform, h as useSafeArea, b as useStatusBar };
13
+ import { acknowledgeNativePurchase as x, getNativeProducts as S, getNativePurchases as C, installNativeIAP as w, isNativeIAPAvailable as T, purchaseNativeProduct as E, restoreNativePurchases as D } from "./shared/native/purchases.js";
14
+ export { p as SafeAreaView, x as acknowledgeNativePurchase, e as getNativeBridge, S as getNativeProducts, C as getNativePurchases, t as getPlatform, w as installNativeIAP, n as isAndroid, r as isIOS, i as isNative, T as isNativeIAPAvailable, a as isWeb, o as nativeConfirm, s as nativeCopyText, c as nativeImpact, l as nativeNotify, u as nativeOpenUrl, d as nativeShare, f as nativeToast, E as purchaseNativeProduct, D as restoreNativePurchases, _ as useAppState, v as useDeviceInfo, y as useHaptics, g as useNativeKeyboard, m as useNativePlatform, h as useSafeArea, b as useStatusBar };
package/dist/shared.js CHANGED
@@ -112,9 +112,10 @@ import { useAppState as xi } from "./shared/native/hooks/useAppState.js";
112
112
  import { useDeviceInfo as Si } from "./shared/native/hooks/useDeviceInfo.js";
113
113
  import { useHaptics as Ci } from "./shared/native/hooks/useHaptics.js";
114
114
  import { useStatusBar as wi } from "./shared/native/hooks/useStatusBar.js";
115
+ import { acknowledgeNativePurchase as Ti, getNativeProducts as Ei, getNativePurchases as Di, installNativeIAP as Oi, isNativeIAPAvailable as ki, purchaseNativeProduct as Ai, restoreNativePurchases as ji } from "./shared/native/purchases.js";
115
116
  import "./shared-native.js";
116
117
  import "./shared/actors/index.js";
117
118
  //#region src/shared/index.ts
118
- var Ti = "1.0.0";
119
+ var Mi = "1.0.0";
119
120
  //#endregion
120
- export { wn as ASSISTANT_WIDGET_TOGGLE_EVENT, zt as AccessDenied, At as ActorIdentity, Ne as ApolloClient, Pe as ApolloProvider, Yt as AppErrorBoundary, st as AppInitializer, ei as AppShellProvider, Tn as AssistantWidget, ie as BACKEND_ERROR_EVENT, Rn as BREAKPOINTS, On as BackendAuditSink, Dn as BroadcastChannelSink, G as COMMON_SHELL_LESS_ROUTES, ae as CONNECTION_STATUS_EVENT, Kt as ConditionalShell, mt as ConsoleTransport, nn as ContextConversationWidget, Z as DEFAULT_PAGE_SIZE, K as DEFAULT_SHELL_CONFIG, En as DevtoolsSink, Nt as ErrorBoundary, Vt as ErrorFallback, jn as EventBusProvider, Ti as FE_SHARED_VERSION, Xt as FeatureFlagProvider, tn as FeatureGate, Q as GATEWAYS, cr as GLOBAL_SHORTCUT_CATEGORIES, De as GatewayProvider, Fe as InMemoryCache, _n as KeyboardHelpDialogWrapper, Ht as LoadingFallback, ut as LogLevel, ft as LogManager, dt as Logger, rr as MODIFIER_KEYS, wr as MicrofrontendContext, Gt as MicrofrontendErrorBoundary, ni as MicrofrontendProvider, An as OtelBrowserSink, yr as PLAN_USAGE_SNAPSHOT_EVENT, ir as PLATFORM_TYPES, V as PRODUCTS, H as PRODUCT_URLS, Jt as PWAInstallBanner, Ut as PageLoadingFallback, It as PermissionButton, Bt as PermissionDenied, Lt as PermissionGate, Rt as PermissionLink, bt as QUOTA_EXHAUSTED_CODE, gr as QUOTA_EXHAUSTED_EVENT, vn as QuotaMeter, xt as RESOURCE_CAP_EXCEEDED_CODE, Pt as RequireAuth, Ft as RequireGuest, kn as RybbitSink, xe as SSELink, nt as SSORedirectSpinner, St as STORAGE_QUOTA_EXCEEDED_CODE, _i as SafeAreaView, Wt as SectionLoadingFallback, $r as TourInitializer, Ir as TourPlayer, jr as TourPlayerProvider, kr as TourSpotlight, Ar as TourTooltip, ri as TourTrigger, Lr as TourTriggerButton, Jr as ToursProvider, Ct as UPGRADE_ERROR_CODES, yn as UPGRADE_PROMPT_EVENT, Sn as UpgradeInlineBanner, bn as UpgradePromptModal, Me as WsLink, r as alertTokens, Sr as appendContextToPath, He as attemptTokenRefresh, jt as buildActorFallback, wt as buildQuotaExhaustedMessage, m as capitalizeFirst, h as capitalizeWords, i as categoryTokens, rt as checkRemoteSLO, it as checkSLO, Ue as clearAuthSessionStorage, at as clearLocalAuthState, Je as clearSSoCookie, Ye as clearShellSsoCookies, ht as clearUserContext, kt as cn, n as createApolloClient, Mn as createEventBus, lr as createGlobalShortcuts, Se as createGraphQLClient, vt as createProfileScopedStorage, Er as detectDeviceType, rn as detectPlatform, oe as dispatchBackendErrorEvent, _r as dispatchQuotaExhausted, xn as dispatchUpgradePrompt, se as extractBackendError, Tt as extractQuotaExhaustedExtensions, Et as extractUpgradeErrorExtensions, g as formatBytes, _ as formatCompactNumber, v as formatCurrency, y as formatCurrencyCompact, b as formatDate, x as formatDateTime, S as formatDuration, an as formatKeyCombo, C as formatList, w as formatNumber, T as formatOrdinal, E as formatPercentage, D as formatRelativeTime, O as formatTime, a as getAlertTokens, o as getCategoryTokens, on as getDisplayKeysForPlatform, $ as getGatewayConfig, ee as getGatewayUrl, Ce as getGlobalClient, ur as getGlobalShortcutsByCategory, te as getGraphQLEndpoint, ii as getNativeBridge, ai as getPlatform, U as getProductUrl, W as getProductsWithUrls, yt as getProfileScopedKey, s as getProgressTokens, Dr as getResponsiveSelector, ot as getSSORedirectUrl, Xe as getSSoCookie, q as getShellConfig, sn as getShortcutLabel, c as getStatusBadgeTokens, l as getStatusTokens, pe as getStoredAuthToken, me as getStoredLocale, he as getStoredOrganizationId, ge as getStoredProjectId, _e as getStoredWorkspaceId, ve as getStoredWorkspaceToken, zr as getTourContextRank, Br as getTourRouteCatalog, Vr as getTourRouteModules, Hr as getTourRoutePages, u as getTrendTokens, we as getWorkspaceClient, ne as getWorkspaceTokenPayload, Ie as gql, ye as graphqlFetch, We as hasAuthGraphQLErrors, Te as initializeAppClients, gt as initializeLogger, L as installGatewayFetchRewrite, ce as isAbortError, oi as isAndroid, Ge as isAuthGraphQLError, Ke as isAuthNetworkError, le as isBackendErrorDisplay, P as isChunkLoadError, si as isIOS, cn as isMac, ln as isMobileDevice, ci as isNative, Dt as isQuotaExhaustedError, Ze as isSharedSsoCookieDomain, J as isShellLessRoute, un as isTabletDevice, Ur as isTourVisibleForContext, ue as isTransportError, Qe as isTrustedSsoOrigin, Ot as isUpgradeError, li as isWeb, re as isWorkspaceTokenValidForContext, F as lazyWithRetry, pt as logManager, de as markConnectionHealthy, dn as matchesKeyCombo, dr as mergeShortcuts, ui as nativeConfirm, di as nativeCopyText, fi as nativeImpact, pi as nativeNotify, mi as nativeOpenUrl, hi as nativeShare, gi as nativeToast, fn as normalizeKey, pn as normalizePlatformCombo, Wr as normalizeTourPath, mn as parseKeyCombo, k as pluralize, d as progressTokens, br as publishPlanUsageSnapshot, $e as readShellSsoCookie, qe as redirectToLogin, Gr as registerTourRouteCatalog, Ee as resetAppClients, ti as resolveAppShellObservabilityConfig, B as resolveAuthBridgeConfig, R as resolveGatewayBases, be as resolveGatewayUrl, I as resolveGatewayUrls, Kr as resolveTourTargetPath, et as setSSoCookie, tt as setShellSsoCookies, _t as setUserContext, hn as shouldEnableKeyboardShortcuts, gn as shouldIgnoreShortcut, Y as shouldShowBreadcrumb, X as shouldShowSidebar, fe as shouldToastBackendError, A as slugify, f as statusTokens, z as suppressConsole, j as toCamelCase, M as toPascalCase, p as trendTokens, N as truncateText, Mt as useActorProfiles, Le as useApolloClient, xi as useAppState, tr as useAsync, nr as useAsyncImmediate, Yr as useAutoStartTour, zn as useBreakpoint, Zn as useConditionalToggle, e as useCopyToClipboard, Cr as useCurrentContextSearchParams, In as useDebounce, Si as useDeviceInfo, Nn as useEvent, Pn as useEventBus, Fn as useEventEmitter, Gn as useExclusiveMenu, Qt as useFeatureFlag, $t as useFeatureFlagDetails, en as useFeatureFlagValue, Zt as useFeatureFlags, Oe as useGateway, ke as useGatewayClient, Ci as useHaptics, pr as useHasAnimated, or as useHotkeys, Mr as useIsTourPlaying, Un as useKeyPress, Wn as useKeyboardShortcut, ar as useKeyboardShortcuts, Re as useLazyQuery, Kn as useLocalStorage, fr as useLogger, t as useMediaQuery, Tr as useMicrofrontendContext, Bn as useMobileBreakpoint, ze as useMutation, bi as useNativeKeyboard, vi as useNativePlatform, Vn as useOnClickOutside, Hn as useOnClickOutsideWithRef, qt as usePWA, er as usePagination, Rr as usePlayTour, Jn as usePrevious, Yn as usePreviousDistinct, Xn as usePreviousHistory, Be as useQuery, vr as useQuotaErrorToast, hr as useRecordProductVisit, mr as useReferralAttribution, ct as useRegistryHelpers, yi as useSafeArea, Ae as useSafeGateway, je as useSafeGatewayClient, Xr as useSafeToursContext, qn as useSessionStorage, lt as useShellNavigate, sr as useShortcutHelp, Nr as useStartTour, wi as useStatusBar, Pr as useStopTour, Ve as useSubscription, Ln as useThrottle, Qn as useToggle, $n as useToggleObject, Or as useTourPlayer, Fr as useTourPlayerContext, Zr as useTours, Qr as useToursContext, xr as useUpgradePrompt, Cn as useVoiceInput, qr as withTourProgressStatus };
121
+ export { wn as ASSISTANT_WIDGET_TOGGLE_EVENT, zt as AccessDenied, At as ActorIdentity, Ne as ApolloClient, Pe as ApolloProvider, Yt as AppErrorBoundary, st as AppInitializer, ei as AppShellProvider, Tn as AssistantWidget, ie as BACKEND_ERROR_EVENT, Rn as BREAKPOINTS, On as BackendAuditSink, Dn as BroadcastChannelSink, G as COMMON_SHELL_LESS_ROUTES, ae as CONNECTION_STATUS_EVENT, Kt as ConditionalShell, mt as ConsoleTransport, nn as ContextConversationWidget, Z as DEFAULT_PAGE_SIZE, K as DEFAULT_SHELL_CONFIG, En as DevtoolsSink, Nt as ErrorBoundary, Vt as ErrorFallback, jn as EventBusProvider, Mi as FE_SHARED_VERSION, Xt as FeatureFlagProvider, tn as FeatureGate, Q as GATEWAYS, cr as GLOBAL_SHORTCUT_CATEGORIES, De as GatewayProvider, Fe as InMemoryCache, _n as KeyboardHelpDialogWrapper, Ht as LoadingFallback, ut as LogLevel, ft as LogManager, dt as Logger, rr as MODIFIER_KEYS, wr as MicrofrontendContext, Gt as MicrofrontendErrorBoundary, ni as MicrofrontendProvider, An as OtelBrowserSink, yr as PLAN_USAGE_SNAPSHOT_EVENT, ir as PLATFORM_TYPES, V as PRODUCTS, H as PRODUCT_URLS, Jt as PWAInstallBanner, Ut as PageLoadingFallback, It as PermissionButton, Bt as PermissionDenied, Lt as PermissionGate, Rt as PermissionLink, bt as QUOTA_EXHAUSTED_CODE, gr as QUOTA_EXHAUSTED_EVENT, vn as QuotaMeter, xt as RESOURCE_CAP_EXCEEDED_CODE, Pt as RequireAuth, Ft as RequireGuest, kn as RybbitSink, xe as SSELink, nt as SSORedirectSpinner, St as STORAGE_QUOTA_EXCEEDED_CODE, _i as SafeAreaView, Wt as SectionLoadingFallback, $r as TourInitializer, Ir as TourPlayer, jr as TourPlayerProvider, kr as TourSpotlight, Ar as TourTooltip, ri as TourTrigger, Lr as TourTriggerButton, Jr as ToursProvider, Ct as UPGRADE_ERROR_CODES, yn as UPGRADE_PROMPT_EVENT, Sn as UpgradeInlineBanner, bn as UpgradePromptModal, Me as WsLink, Ti as acknowledgeNativePurchase, r as alertTokens, Sr as appendContextToPath, He as attemptTokenRefresh, jt as buildActorFallback, wt as buildQuotaExhaustedMessage, m as capitalizeFirst, h as capitalizeWords, i as categoryTokens, rt as checkRemoteSLO, it as checkSLO, Ue as clearAuthSessionStorage, at as clearLocalAuthState, Je as clearSSoCookie, Ye as clearShellSsoCookies, ht as clearUserContext, kt as cn, n as createApolloClient, Mn as createEventBus, lr as createGlobalShortcuts, Se as createGraphQLClient, vt as createProfileScopedStorage, Er as detectDeviceType, rn as detectPlatform, oe as dispatchBackendErrorEvent, _r as dispatchQuotaExhausted, xn as dispatchUpgradePrompt, se as extractBackendError, Tt as extractQuotaExhaustedExtensions, Et as extractUpgradeErrorExtensions, g as formatBytes, _ as formatCompactNumber, v as formatCurrency, y as formatCurrencyCompact, b as formatDate, x as formatDateTime, S as formatDuration, an as formatKeyCombo, C as formatList, w as formatNumber, T as formatOrdinal, E as formatPercentage, D as formatRelativeTime, O as formatTime, a as getAlertTokens, o as getCategoryTokens, on as getDisplayKeysForPlatform, $ as getGatewayConfig, ee as getGatewayUrl, Ce as getGlobalClient, ur as getGlobalShortcutsByCategory, te as getGraphQLEndpoint, ii as getNativeBridge, Ei as getNativeProducts, Di as getNativePurchases, ai as getPlatform, U as getProductUrl, W as getProductsWithUrls, yt as getProfileScopedKey, s as getProgressTokens, Dr as getResponsiveSelector, ot as getSSORedirectUrl, Xe as getSSoCookie, q as getShellConfig, sn as getShortcutLabel, c as getStatusBadgeTokens, l as getStatusTokens, pe as getStoredAuthToken, me as getStoredLocale, he as getStoredOrganizationId, ge as getStoredProjectId, _e as getStoredWorkspaceId, ve as getStoredWorkspaceToken, zr as getTourContextRank, Br as getTourRouteCatalog, Vr as getTourRouteModules, Hr as getTourRoutePages, u as getTrendTokens, we as getWorkspaceClient, ne as getWorkspaceTokenPayload, Ie as gql, ye as graphqlFetch, We as hasAuthGraphQLErrors, Te as initializeAppClients, gt as initializeLogger, L as installGatewayFetchRewrite, Oi as installNativeIAP, ce as isAbortError, oi as isAndroid, Ge as isAuthGraphQLError, Ke as isAuthNetworkError, le as isBackendErrorDisplay, P as isChunkLoadError, si as isIOS, cn as isMac, ln as isMobileDevice, ci as isNative, ki as isNativeIAPAvailable, Dt as isQuotaExhaustedError, Ze as isSharedSsoCookieDomain, J as isShellLessRoute, un as isTabletDevice, Ur as isTourVisibleForContext, ue as isTransportError, Qe as isTrustedSsoOrigin, Ot as isUpgradeError, li as isWeb, re as isWorkspaceTokenValidForContext, F as lazyWithRetry, pt as logManager, de as markConnectionHealthy, dn as matchesKeyCombo, dr as mergeShortcuts, ui as nativeConfirm, di as nativeCopyText, fi as nativeImpact, pi as nativeNotify, mi as nativeOpenUrl, hi as nativeShare, gi as nativeToast, fn as normalizeKey, pn as normalizePlatformCombo, Wr as normalizeTourPath, mn as parseKeyCombo, k as pluralize, d as progressTokens, br as publishPlanUsageSnapshot, Ai as purchaseNativeProduct, $e as readShellSsoCookie, qe as redirectToLogin, Gr as registerTourRouteCatalog, Ee as resetAppClients, ti as resolveAppShellObservabilityConfig, B as resolveAuthBridgeConfig, R as resolveGatewayBases, be as resolveGatewayUrl, I as resolveGatewayUrls, Kr as resolveTourTargetPath, ji as restoreNativePurchases, et as setSSoCookie, tt as setShellSsoCookies, _t as setUserContext, hn as shouldEnableKeyboardShortcuts, gn as shouldIgnoreShortcut, Y as shouldShowBreadcrumb, X as shouldShowSidebar, fe as shouldToastBackendError, A as slugify, f as statusTokens, z as suppressConsole, j as toCamelCase, M as toPascalCase, p as trendTokens, N as truncateText, Mt as useActorProfiles, Le as useApolloClient, xi as useAppState, tr as useAsync, nr as useAsyncImmediate, Yr as useAutoStartTour, zn as useBreakpoint, Zn as useConditionalToggle, e as useCopyToClipboard, Cr as useCurrentContextSearchParams, In as useDebounce, Si as useDeviceInfo, Nn as useEvent, Pn as useEventBus, Fn as useEventEmitter, Gn as useExclusiveMenu, Qt as useFeatureFlag, $t as useFeatureFlagDetails, en as useFeatureFlagValue, Zt as useFeatureFlags, Oe as useGateway, ke as useGatewayClient, Ci as useHaptics, pr as useHasAnimated, or as useHotkeys, Mr as useIsTourPlaying, Un as useKeyPress, Wn as useKeyboardShortcut, ar as useKeyboardShortcuts, Re as useLazyQuery, Kn as useLocalStorage, fr as useLogger, t as useMediaQuery, Tr as useMicrofrontendContext, Bn as useMobileBreakpoint, ze as useMutation, bi as useNativeKeyboard, vi as useNativePlatform, Vn as useOnClickOutside, Hn as useOnClickOutsideWithRef, qt as usePWA, er as usePagination, Rr as usePlayTour, Jn as usePrevious, Yn as usePreviousDistinct, Xn as usePreviousHistory, Be as useQuery, vr as useQuotaErrorToast, hr as useRecordProductVisit, mr as useReferralAttribution, ct as useRegistryHelpers, yi as useSafeArea, Ae as useSafeGateway, je as useSafeGatewayClient, Xr as useSafeToursContext, qn as useSessionStorage, lt as useShellNavigate, sr as useShortcutHelp, Nr as useStartTour, wi as useStatusBar, Pr as useStopTour, Ve as useSubscription, Ln as useThrottle, Qn as useToggle, $n as useToggleObject, Or as useTourPlayer, Fr as useTourPlayerContext, Zr as useTours, Qr as useToursContext, xr as useUpgradePrompt, Cn as useVoiceInput, qr as withTourProgressStatus };
@@ -0,0 +1,21 @@
1
+ import { HTMLAttributes } from 'react';
2
+ /**
3
+ * AuroraBackground — Boff UI 2.0 living glass backdrop. An absolutely-positioned,
4
+ * pointer-events-none decorative layer of soft blurred accent "aurora" blobs that
5
+ * drift slowly behind hero zones / page headers / empty states. It NEVER moves
6
+ * page content (it sits at -z-10 behind), and the drift animation is neutralised
7
+ * by `data-reduce-motion` / `prefers-reduced-motion` (the blobs go static).
8
+ *
9
+ * Pair with glass surfaces on top for the real depth-of-field glass effect.
10
+ */
11
+ export interface AuroraBackgroundProps extends HTMLAttributes<HTMLDivElement> {
12
+ /** Visual strength of the aurora. */
13
+ intensity?: 'subtle' | 'normal' | 'vivid';
14
+ /** Optional decorative hero image layered under the aurora (served from /illustrations). */
15
+ image?: string;
16
+ }
17
+ export declare function AuroraBackground({ intensity, image, className, ...props }: AuroraBackgroundProps): import("react/jsx-runtime").JSX.Element;
18
+ export declare namespace AuroraBackground {
19
+ var displayName: string;
20
+ }
21
+ //# sourceMappingURL=aurora-background.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aurora-background.d.ts","sourceRoot":"","sources":["../../src/ui/aurora-background.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,OAAO,CAAC;AAG5C;;;;;;;;GAQG;AACH,MAAM,WAAW,qBAAsB,SAAQ,cAAc,CAAC,cAAc,CAAC;IAC3E,qCAAqC;IACrC,SAAS,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;IAC1C,4FAA4F;IAC5F,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAQD,wBAAgB,gBAAgB,CAAC,EAC/B,SAAoB,EACpB,KAAK,EACL,SAAS,EACT,GAAG,KAAK,EACT,EAAE,qBAAqB,2CAuBvB;yBA5Be,gBAAgB"}
@@ -0,0 +1,31 @@
1
+ import { cn as e } from "../shared-utils.js";
2
+ import { jsx as t, jsxs as n } from "react/jsx-runtime";
3
+ //#region src/ui/aurora-background.tsx
4
+ var r = {
5
+ subtle: "opacity-40",
6
+ normal: "opacity-70",
7
+ vivid: "opacity-100"
8
+ };
9
+ function i({ intensity: i = "normal", image: a, className: o, ...s }) {
10
+ return /* @__PURE__ */ n("div", {
11
+ "aria-hidden": "true",
12
+ className: e("pointer-events-none absolute inset-0 -z-10 overflow-hidden", o),
13
+ ...s,
14
+ children: [a && /* @__PURE__ */ t("img", {
15
+ src: a,
16
+ alt: "",
17
+ "aria-hidden": "true",
18
+ className: "absolute inset-0 h-full w-full object-cover opacity-30 [mask-image:radial-gradient(120%_120%_at_50%_0%,black,transparent_75%)]"
19
+ }), /* @__PURE__ */ n("div", {
20
+ className: e("absolute inset-0", r[i]),
21
+ children: [
22
+ /* @__PURE__ */ t("div", { className: "absolute -left-[10%] -top-[20%] h-[55%] w-[55%] rounded-full bg-[radial-gradient(closest-side,color-mix(in_oklab,var(--color-action-primary-bg)_45%,transparent),transparent)] blur-3xl motion-safe:animate-vc-aurora" }),
23
+ /* @__PURE__ */ t("div", { className: "absolute right-[-8%] top-[10%] h-[45%] w-[45%] rounded-full bg-[radial-gradient(closest-side,color-mix(in_oklab,var(--color-accent-purple)_38%,transparent),transparent)] blur-3xl motion-safe:animate-vc-aurora [animation-delay:-5s]" }),
24
+ /* @__PURE__ */ t("div", { className: "absolute bottom-[-15%] left-[25%] h-[50%] w-[50%] rounded-full bg-[radial-gradient(closest-side,color-mix(in_oklab,var(--color-accent-teal)_30%,transparent),transparent)] blur-3xl motion-safe:animate-vc-aurora [animation-delay:-10s]" })
25
+ ]
26
+ })]
27
+ });
28
+ }
29
+ i.displayName = "AuroraBackground";
30
+ //#endregion
31
+ export { i as AuroraBackground };
@@ -5,17 +5,20 @@ import { VariantProps } from 'class-variance-authority';
5
5
  * language. It does NOT fork `Card`; it provides additional "treatments" for
6
6
  * hero/metric/insight surfaces while staying on semantic tokens only.
7
7
  *
8
- * Reduced-motion and high-contrast already collapse the glass/lift effects via
9
- * the underlying tokens, but the hover lift is additionally gated behind
10
- * `motion-safe:` and neutralised on touch devices.
8
+ * No-movement policy: cards NEVER shift position on hover. Hover only
9
+ * intensifies the shadow/border (a calm highlight) it never translates,
10
+ * scales, or removes the resting shadow. Reduced-motion / high-contrast
11
+ * collapse the glass + glow via the underlying tokens.
11
12
  */
12
13
  declare const glassCardVariants: (props?: ({
13
14
  treatment?: "glass" | "plain" | "metric" | "insight" | null | undefined;
14
15
  } & import('class-variance-authority/types').ClassProp) | undefined) => string;
15
16
  export type GlassCardProps = HTMLAttributes<HTMLDivElement> & VariantProps<typeof glassCardVariants> & {
16
17
  ref?: React.Ref<HTMLDivElement>;
18
+ /** Featured/active accent glow (gradient-tinted ring + accent glow shadow). No movement. */
19
+ glow?: boolean;
17
20
  };
18
- declare function GlassCard({ ref, className, treatment, children, ...props }: GlassCardProps): import("react/jsx-runtime").JSX.Element;
21
+ declare function GlassCard({ ref, className, treatment, glow, children, ...props }: GlassCardProps): import("react/jsx-runtime").JSX.Element;
19
22
  declare namespace GlassCard {
20
23
  var displayName: string;
21
24
  }
@@ -1 +1 @@
1
- {"version":3,"file":"glass-card.d.ts","sourceRoot":"","sources":["../../src/ui/glass-card.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAIlE;;;;;;;;GAQG;AACH,QAAA,MAAM,iBAAiB;;8EAuBtB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,cAAc,CAAC,cAAc,CAAC,GACzD,YAAY,CAAC,OAAO,iBAAiB,CAAC,GAAG;IACvC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;CACjC,CAAC;AAEJ,iBAAS,SAAS,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,SAAmB,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,cAAc,2CAM7F;kBANQ,SAAS;;;AASlB,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC"}
1
+ {"version":3,"file":"glass-card.d.ts","sourceRoot":"","sources":["../../src/ui/glass-card.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAIlE;;;;;;;;;GASG;AACH,QAAA,MAAM,iBAAiB;;8EAyBtB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,cAAc,CAAC,cAAc,CAAC,GACzD,YAAY,CAAC,OAAO,iBAAiB,CAAC,GAAG;IACvC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC,4FAA4F;IAC5F,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,CAAC;AAEJ,iBAAS,SAAS,CAAC,EACjB,GAAG,EACH,SAAS,EACT,SAAmB,EACnB,IAAY,EACZ,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,cAAc,2CAehB;kBAtBQ,SAAS;;;AAyBlB,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC"}
@@ -2,23 +2,23 @@ import { cn as e } from "../shared-utils.js";
2
2
  import { jsx as t } from "react/jsx-runtime";
3
3
  import { cva as n } from "class-variance-authority";
4
4
  //#region src/ui/glass-card.tsx
5
- var r = n("relative rounded-card text-text-primary transition-[box-shadow,transform] duration-200 ease-[var(--motion-easing-out)]", {
5
+ var r = n("relative rounded-card text-text-primary transition-[box-shadow,border-color] duration-200 ease-[var(--motion-easing-out)]", {
6
6
  variants: { treatment: {
7
7
  plain: "border border-border-subtle bg-bg-surface shadow-elevation-1 hover:border-border-strong hover:shadow-elevation-2",
8
- glass: "border border-border-seam bg-[var(--color-surface-glass)] backdrop-blur-[var(--blur-glass)] shadow-[var(--shadow-pop)] before:absolute before:inset-0 before:rounded-card before:bg-gloss-card before:pointer-events-none motion-safe:hover:translate-y-[var(--pop-lift-y)] hover:shadow-[var(--shadow-glow)] [@media(hover:none)]:hover:translate-y-0",
9
- metric: "border border-border-seam bg-bg-surface bg-accent-wash shadow-elevation-1 motion-safe:hover:translate-y-[var(--pop-lift-y)] hover:shadow-elevation-2 [@media(hover:none)]:hover:translate-y-0",
10
- insight: "border border-border-seam bg-bg-surface shadow-[var(--shadow-pop)] motion-safe:hover:translate-y-[var(--pop-lift-y)] hover:shadow-elevation-2 [@media(hover:none)]:hover:translate-y-0"
8
+ glass: "border border-border-seam bg-[var(--color-surface-glass)] backdrop-blur-[var(--blur-glass)] backdrop-saturate-150 shadow-[var(--shadow-pop)] before:absolute before:inset-0 before:rounded-card before:bg-gloss-card before:pointer-events-none after:absolute after:inset-x-0 after:top-0 after:h-px after:rounded-t-card after:bg-[linear-gradient(90deg,transparent,color-mix(in_oklab,var(--color-action-primary-bg)_45%,white),transparent)] after:opacity-60 after:pointer-events-none hover:border-border-strong hover:shadow-[var(--shadow-pop-hover)]",
9
+ metric: "border border-border-seam bg-bg-surface bg-accent-wash shadow-elevation-1 hover:border-border-strong hover:shadow-elevation-2",
10
+ insight: "border border-border-seam bg-bg-surface shadow-[var(--shadow-pop)] hover:border-border-strong hover:shadow-[var(--shadow-pop-hover)]"
11
11
  } },
12
12
  defaultVariants: { treatment: "plain" }
13
13
  });
14
- function i({ ref: n, className: i, treatment: a = "plain", children: o, ...s }) {
14
+ function i({ ref: n, className: i, treatment: a = "plain", glow: o = !1, children: s, ...c }) {
15
15
  return /* @__PURE__ */ t("div", {
16
16
  ref: n,
17
- className: e(r({ treatment: a }), i),
18
- ...s,
17
+ className: e(r({ treatment: a }), o && "border-[color-mix(in_oklab,var(--color-action-primary-bg)_34%,transparent)] shadow-[var(--shadow-glow)]", i),
18
+ ...c,
19
19
  children: /* @__PURE__ */ t("div", {
20
20
  className: "relative z-[1]",
21
- children: o
21
+ children: s
22
22
  })
23
23
  });
24
24
  }
@@ -0,0 +1,15 @@
1
+ import { ElementType, HTMLAttributes } from 'react';
2
+ /**
3
+ * GradientText — clips a subtle brand gradient into the text fill for hero
4
+ * titles / featured numerals. Theme-aware (derived from the live accent), and
5
+ * legible in high-contrast (the gradient endpoints stay on-accent). Keep it for
6
+ * the ONE hero heading per page, not body copy.
7
+ */
8
+ export interface GradientTextProps extends HTMLAttributes<HTMLElement> {
9
+ as?: ElementType;
10
+ }
11
+ export declare function GradientText({ as: Tag, className, children, ...props }: GradientTextProps): import("react/jsx-runtime").JSX.Element;
12
+ export declare namespace GradientText {
13
+ var displayName: string;
14
+ }
15
+ //# sourceMappingURL=gradient-text.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gradient-text.d.ts","sourceRoot":"","sources":["../../src/ui/gradient-text.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,cAAc,EAAE,MAAM,OAAO,CAAC;AAG9D;;;;;GAKG;AACH,MAAM,WAAW,iBAAkB,SAAQ,cAAc,CAAC,WAAW,CAAC;IACpE,EAAE,CAAC,EAAE,WAAW,CAAC;CAClB;AAED,wBAAgB,YAAY,CAAC,EAC3B,EAAE,EAAE,GAAY,EAChB,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,iBAAiB,2CAYnB;yBAjBe,YAAY"}
@@ -0,0 +1,13 @@
1
+ import { cn as e } from "../shared-utils.js";
2
+ import { jsx as t } from "react/jsx-runtime";
3
+ //#region src/ui/gradient-text.tsx
4
+ function n({ as: n = "span", className: r, children: i, ...a }) {
5
+ return /* @__PURE__ */ t(n, {
6
+ className: e("bg-[linear-gradient(120deg,var(--color-action-primary-bg),color-mix(in_oklab,var(--color-action-primary-bg)_55%,var(--color-accent-purple)),var(--color-action-primary-bg))] bg-clip-text text-transparent", r),
7
+ ...a,
8
+ children: i
9
+ });
10
+ }
11
+ n.displayName = "GradientText";
12
+ //#endregion
13
+ export { n as GradientText };
@@ -0,0 +1,40 @@
1
+ import { ImgHTMLAttributes, ReactNode } from 'react';
2
+ /**
3
+ * Illustration — renders an on-brand product illustration served from the host
4
+ * shell's `/illustrations/<name>.webp`. Generated assets (glassmorphic, dark
5
+ * navy, violet/teal glow) are produced per product and dropped in the shell's
6
+ * `public/illustrations/`. Always provide a meaningful `alt` for accessibility
7
+ * (or alt="" for purely decorative use).
8
+ */
9
+ export interface IllustrationProps extends Omit<ImgHTMLAttributes<HTMLImageElement>, 'src'> {
10
+ /** Illustration name → /illustrations/<name>.webp */
11
+ name: string;
12
+ alt: string;
13
+ size?: 'sm' | 'md' | 'lg' | 'xl';
14
+ /** Wrap in a soft rounded glass frame with an accent glow. */
15
+ framed?: boolean;
16
+ }
17
+ export declare function Illustration({ name, alt, size, framed, className, loading, ...props }: IllustrationProps): import("react/jsx-runtime").JSX.Element;
18
+ export declare namespace Illustration {
19
+ var displayName: string;
20
+ }
21
+ /**
22
+ * IllustratedEmptyState — a calm, centered empty/zero state pairing an
23
+ * {@link Illustration} with a title, description and an optional primary action.
24
+ * Clutter-free by design; use the matching illustration for the context
25
+ * (e.g. name="vc-empty-agents").
26
+ */
27
+ export interface IllustratedEmptyStateProps {
28
+ illustration: string;
29
+ title: string;
30
+ description?: ReactNode;
31
+ action?: ReactNode;
32
+ /** alt text for the illustration (defaults to the title) */
33
+ alt?: string;
34
+ className?: string;
35
+ }
36
+ export declare function IllustratedEmptyState({ illustration, title, description, action, alt, className, }: IllustratedEmptyStateProps): import("react/jsx-runtime").JSX.Element;
37
+ export declare namespace IllustratedEmptyState {
38
+ var displayName: string;
39
+ }
40
+ //# sourceMappingURL=illustration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"illustration.d.ts","sourceRoot":"","sources":["../../src/ui/illustration.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,iBAAiB,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAG/D;;;;;;GAMG;AACH,MAAM,WAAW,iBAAkB,SAAQ,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,EAAE,KAAK,CAAC;IACzF,qDAAqD;IACrD,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IACjC,8DAA8D;IAC9D,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AASD,wBAAgB,YAAY,CAAC,EAC3B,IAAI,EACJ,GAAG,EACH,IAAW,EACX,MAAc,EACd,SAAS,EACT,OAAgB,EAChB,GAAG,KAAK,EACT,EAAE,iBAAiB,2CAsBnB;yBA9Be,YAAY;;;AAiC5B;;;;;GAKG;AACH,MAAM,WAAW,0BAA0B;IACzC,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,4DAA4D;IAC5D,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,qBAAqB,CAAC,EACpC,YAAY,EACZ,KAAK,EACL,WAAW,EACX,MAAM,EACN,GAAG,EACH,SAAS,GACV,EAAE,0BAA0B,2CAkB5B;yBAzBe,qBAAqB"}
@@ -0,0 +1,53 @@
1
+ import { cn as e } from "../shared-utils.js";
2
+ import { jsx as t, jsxs as n } from "react/jsx-runtime";
3
+ //#region src/ui/illustration.tsx
4
+ var r = {
5
+ sm: "size-20",
6
+ md: "size-32",
7
+ lg: "size-44",
8
+ xl: "size-56"
9
+ };
10
+ function i({ name: n, alt: i, size: a = "md", framed: o = !1, className: s, loading: c = "lazy", ...l }) {
11
+ let u = /* @__PURE__ */ t("img", {
12
+ src: `/illustrations/${n}.webp`,
13
+ alt: i,
14
+ loading: c,
15
+ decoding: "async",
16
+ className: e("select-none object-contain", r[a], o ? "rounded-2xl" : "", s),
17
+ ...l
18
+ });
19
+ return o ? /* @__PURE__ */ t("div", {
20
+ className: "relative inline-flex rounded-2xl border border-border-seam bg-[var(--color-surface-glass)] p-1 shadow-[var(--shadow-pop)] backdrop-blur-[var(--blur-glass)]",
21
+ children: u
22
+ }) : u;
23
+ }
24
+ i.displayName = "Illustration";
25
+ function a({ illustration: r, title: a, description: o, action: s, alt: c, className: l }) {
26
+ return /* @__PURE__ */ n("div", {
27
+ className: e("flex flex-col items-center justify-center gap-4 px-6 py-12 text-center", l),
28
+ children: [
29
+ /* @__PURE__ */ t(i, {
30
+ name: r,
31
+ alt: c ?? a,
32
+ size: "lg"
33
+ }),
34
+ /* @__PURE__ */ n("div", {
35
+ className: "space-y-1.5",
36
+ children: [/* @__PURE__ */ t("h3", {
37
+ className: "text-lg font-semibold tracking-tight text-text-primary",
38
+ children: a
39
+ }), o && /* @__PURE__ */ t("p", {
40
+ className: "mx-auto max-w-sm text-sm text-text-secondary",
41
+ children: o
42
+ })]
43
+ }),
44
+ s && /* @__PURE__ */ t("div", {
45
+ className: "mt-1",
46
+ children: s
47
+ })
48
+ ]
49
+ });
50
+ }
51
+ a.displayName = "IllustratedEmptyState";
52
+ //#endregion
53
+ export { a as IllustratedEmptyState, i as Illustration };
@@ -36,4 +36,7 @@ export { GlassCard, glassCardVariants, type GlassCardProps } from './glass-card'
36
36
  export { EmphasisPanel, type EmphasisPanelProps } from './emphasis-panel';
37
37
  export { ShowMore, type ShowMoreProps } from './show-more';
38
38
  export { CTAOverflowMenu, type CTAOverflowMenuProps, type CTAAction, type CTAPrimaryAction, } from './cta-overflow-menu';
39
+ export { AuroraBackground, type AuroraBackgroundProps } from './aurora-background';
40
+ export { Illustration, type IllustrationProps, IllustratedEmptyState, type IllustratedEmptyStateProps, } from './illustration';
41
+ export { GradientText, type GradientTextProps } from './gradient-text';
39
42
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"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"}
package/dist/ui.js CHANGED
@@ -36,4 +36,7 @@ import { GlassCard as Tt, glassCardVariants as Et } from "./ui/glass-card.js";
36
36
  import { EmphasisPanel as Dt } from "./ui/emphasis-panel.js";
37
37
  import { ShowMore as Ot } from "./ui/show-more.js";
38
38
  import { CTAOverflowMenu as kt } from "./ui/cta-overflow-menu.js";
39
- export { e as Accordion, t as AccordionContent, n as AccordionItem, r as AccordionTrigger, ie as AlertDialog, ae as AlertDialogAction, oe as AlertDialogCancel, se as AlertDialogContent, ce as AlertDialogDescription, le as AlertDialogFooter, ue as AlertDialogHeader, de as AlertDialogOverlay, fe as AlertDialogPortal, pe as AlertDialogTitle, me as AlertDialogTrigger, he as Badge, _ as BottomSheet, v as BottomSheetClose, y as BottomSheetContent, b as BottomSheetDescription, x as BottomSheetFooter, S as BottomSheetHeader, C as BottomSheetTitle, w as BottomSheetTrigger, H as Button, kt as CTAOverflowMenu, _e as Card, ve as CardContent, ye as CardDescription, be as CardFooter, xe as CardHeader, Se as CardTitle, Ce as Checkbox, we as Command, Te as CommandDialog, Ee as CommandEmpty, De as CommandGroup, Oe as CommandInput, ke as CommandItem, Ae as CommandList, je as CommandSeparator, Me as CommandShortcut, i as Dialog, a as DialogClose, o as DialogContent, s as DialogDescription, c as DialogFooter, l as DialogHeader, u as DialogOverlay, d as DialogPortal, f as DialogTitle, p as DialogTrigger, Ne as DropdownMenu, Pe as DropdownMenuCheckboxItem, Fe as DropdownMenuContent, Ie as DropdownMenuGroup, Le as DropdownMenuItem, Re as DropdownMenuLabel, ze as DropdownMenuPortal, Be as DropdownMenuRadioGroup, Ve as DropdownMenuRadioItem, He as DropdownMenuSeparator, Ue as DropdownMenuShortcut, We as DropdownMenuSub, Ge as DropdownMenuSubContent, Ke as DropdownMenuSubTrigger, qe as DropdownMenuTrigger, Dt as EmphasisPanel, re as EmptyState, m as EntityIdModal, Tt as GlassCard, Je as Input, Ye as Label, g as OptionalFields, wt as PageContainer, ee as Pagination, Xe as Popover, Ze as PopoverAnchor, Qe as PopoverContent, $e as PopoverTrigger, T as ResponsiveDialog, E as ResponsiveDialogClose, D as ResponsiveDialogContent, O as ResponsiveDialogDescription, k as ResponsiveDialogFooter, A as ResponsiveDialogHeader, j as ResponsiveDialogTitle, M as ResponsiveDialogTrigger, ne as ResponsiveStack, V as ResponsiveTable, et as ScrollArea, tt as ScrollBar, W as Select, G as SelectContent, K as SelectGroup, q as SelectItem, J as SelectLabel, Y as SelectScrollDownButton, X as SelectScrollUpButton, Z as SelectSeparator, Q as SelectTrigger, $ as SelectValue, nt as Separator, rt as Sheet, it as SheetClose, at as SheetContent, ot as SheetDescription, st as SheetFooter, ct as SheetHeader, lt as SheetTitle, ut as SheetTrigger, Ot as ShowMore, dt as Skeleton, pt as Spinner, te as Stepper, mt as Switch, N as Table, P as TableBody, F as TableCaption, I as TableCell, L as TableFooter, R as TableHead, z as TableHeader, B as TableRow, ht as Tabs, gt as TabsContent, _t as TabsList, vt as TabsTrigger, yt as Textarea, ft as Toaster, bt as Tooltip, xt as TooltipContent, St as TooltipProvider, Ct as TooltipTrigger, ge as badgeVariants, U as buttonVariants, Et as glassCardVariants, h as useEntityIdModal };
39
+ import { AuroraBackground as At } from "./ui/aurora-background.js";
40
+ import { IllustratedEmptyState as jt, Illustration as Mt } from "./ui/illustration.js";
41
+ import { GradientText as Nt } from "./ui/gradient-text.js";
42
+ export { e as Accordion, t as AccordionContent, n as AccordionItem, r as AccordionTrigger, ie as AlertDialog, ae as AlertDialogAction, oe as AlertDialogCancel, se as AlertDialogContent, ce as AlertDialogDescription, le as AlertDialogFooter, ue as AlertDialogHeader, de as AlertDialogOverlay, fe as AlertDialogPortal, pe as AlertDialogTitle, me as AlertDialogTrigger, At as AuroraBackground, he as Badge, _ as BottomSheet, v as BottomSheetClose, y as BottomSheetContent, b as BottomSheetDescription, x as BottomSheetFooter, S as BottomSheetHeader, C as BottomSheetTitle, w as BottomSheetTrigger, H as Button, kt as CTAOverflowMenu, _e as Card, ve as CardContent, ye as CardDescription, be as CardFooter, xe as CardHeader, Se as CardTitle, Ce as Checkbox, we as Command, Te as CommandDialog, Ee as CommandEmpty, De as CommandGroup, Oe as CommandInput, ke as CommandItem, Ae as CommandList, je as CommandSeparator, Me as CommandShortcut, i as Dialog, a as DialogClose, o as DialogContent, s as DialogDescription, c as DialogFooter, l as DialogHeader, u as DialogOverlay, d as DialogPortal, f as DialogTitle, p as DialogTrigger, Ne as DropdownMenu, Pe as DropdownMenuCheckboxItem, Fe as DropdownMenuContent, Ie as DropdownMenuGroup, Le as DropdownMenuItem, Re as DropdownMenuLabel, ze as DropdownMenuPortal, Be as DropdownMenuRadioGroup, Ve as DropdownMenuRadioItem, He as DropdownMenuSeparator, Ue as DropdownMenuShortcut, We as DropdownMenuSub, Ge as DropdownMenuSubContent, Ke as DropdownMenuSubTrigger, qe as DropdownMenuTrigger, Dt as EmphasisPanel, re as EmptyState, m as EntityIdModal, Tt as GlassCard, Nt as GradientText, jt as IllustratedEmptyState, Mt as Illustration, Je as Input, Ye as Label, g as OptionalFields, wt as PageContainer, ee as Pagination, Xe as Popover, Ze as PopoverAnchor, Qe as PopoverContent, $e as PopoverTrigger, T as ResponsiveDialog, E as ResponsiveDialogClose, D as ResponsiveDialogContent, O as ResponsiveDialogDescription, k as ResponsiveDialogFooter, A as ResponsiveDialogHeader, j as ResponsiveDialogTitle, M as ResponsiveDialogTrigger, ne as ResponsiveStack, V as ResponsiveTable, et as ScrollArea, tt as ScrollBar, W as Select, G as SelectContent, K as SelectGroup, q as SelectItem, J as SelectLabel, Y as SelectScrollDownButton, X as SelectScrollUpButton, Z as SelectSeparator, Q as SelectTrigger, $ as SelectValue, nt as Separator, rt as Sheet, it as SheetClose, at as SheetContent, ot as SheetDescription, st as SheetFooter, ct as SheetHeader, lt as SheetTitle, ut as SheetTrigger, Ot as ShowMore, dt as Skeleton, pt as Spinner, te as Stepper, mt as Switch, N as Table, P as TableBody, F as TableCaption, I as TableCell, L as TableFooter, R as TableHead, z as TableHeader, B as TableRow, ht as Tabs, gt as TabsContent, _t as TabsList, vt as TabsTrigger, yt as Textarea, ft as Toaster, bt as Tooltip, xt as TooltipContent, St as TooltipProvider, Ct as TooltipTrigger, ge as badgeVariants, U as buttonVariants, Et as glassCardVariants, h as useEntityIdModal };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@burdenoff/fe-libs",
3
- "version": "2026.625.1",
3
+ "version": "2026.625.3",
4
4
  "description": "Burdenoff frontend primitives and domain libraries",
5
5
  "type": "module",
6
6
  "imports": {
@@ -305,6 +305,7 @@
305
305
  "devDependencies": {
306
306
  "@capacitor/core": "^8.3.1",
307
307
  "@capacitor/geolocation": "^8.2.0",
308
+ "@capgo/native-purchases": "^8.4.0",
308
309
  "@eslint/js": "^10.0.1",
309
310
  "@tailwindcss/vite": "^4.1.8",
310
311
  "@tanstack/react-query": "^5.90.21",
@@ -316,6 +317,7 @@
316
317
  "eslint": "^9.18.0",
317
318
  "eslint-plugin-react": "^7.37.5",
318
319
  "eslint-plugin-react-hooks": "^7.0.1",
320
+ "framer-motion": "^12.0.0",
319
321
  "globals": "^17.3.0",
320
322
  "lefthook": "^2.1.1",
321
323
  "postcss": "8.5.12",
@@ -325,13 +327,13 @@
325
327
  "typescript": "^5.9.0",
326
328
  "typescript-eslint": "^8.50.1",
327
329
  "vite": "8.0.10",
328
- "vite-plugin-dts": "4.5.4",
329
- "framer-motion": "^12.0.0"
330
+ "vite-plugin-dts": "4.5.4"
330
331
  },
331
332
  "peerDependencies": {
332
333
  "@apollo/client": "^4.0.9",
333
334
  "@capacitor/core": "^8.3.1",
334
335
  "@capacitor/geolocation": "^8.2.0",
336
+ "@capgo/native-purchases": "^8.4.0",
335
337
  "@tanstack/react-query": "^5.0.0",
336
338
  "graphql": "^16.12.0",
337
339
  "react": "^19.0.0",
@@ -368,6 +370,9 @@
368
370
  "@capacitor/geolocation": {
369
371
  "optional": true
370
372
  },
373
+ "@capgo/native-purchases": {
374
+ "optional": true
375
+ },
371
376
  "framer-motion": {
372
377
  "optional": true
373
378
  }
@@ -178,7 +178,7 @@
178
178
  --gloss-rim-light: rgba(15, 23, 42, 0.05); /* bottom rim shade, light */
179
179
  --gloss-rim-dark: rgba(0, 0, 0, 0.28); /* bottom rim shade, dark */
180
180
  /* Single allow-listed 3D-pop lift (transform only; collapsed in high-contrast). */
181
- --pop-lift-y: -2px;
181
+ --pop-lift-y: 0px;
182
182
 
183
183
  /* Motion Durations */
184
184
  --motion-duration-instant: 60ms;
@@ -160,6 +160,11 @@
160
160
  /* 3D-pop composite: elevation float + accent-tinted 1px glow rim, ONE token */
161
161
  --shadow-pop: var(--shadow-float),
162
162
  0 0 0 1px color-mix(in oklab, var(--color-action-primary-bg) 14%, transparent);
163
+ /* Hover state of --shadow-pop — INTENSIFIES (keeps the float, adds accent glow)
164
+ * so cards highlight on hover WITHOUT moving and WITHOUT losing their shadow. */
165
+ --shadow-pop-hover: var(--shadow-float),
166
+ 0 0 0 1px color-mix(in oklab, var(--color-action-primary-bg) 26%, transparent),
167
+ 0 12px 32px -10px color-mix(in oklab, var(--color-action-primary-bg) 28%, transparent);
163
168
  /* Visible-but-subtle theme-aware seam border for seamless chrome edges */
164
169
  --color-border-seam: color-mix(in oklab, var(--color-border-subtle) 72%, transparent);
165
170
  /* Accent color tokens */
@@ -231,6 +231,21 @@ export default {
231
231
  'modal': 'var(--z-modal)',
232
232
  'toast': 'var(--z-toast)',
233
233
  },
234
+ // Boff UI 2.0 — tasteful motion (all neutralised by data-reduce-motion +
235
+ // prefers-reduced-motion). aurora/glow never move CONTENT (bg + opacity only).
236
+ keyframes: {
237
+ 'vc-aurora': {
238
+ '0%, 100%': { transform: 'translate3d(0,0,0) rotate(0deg) scale(1.05)', opacity: '0.65' },
239
+ '50%': { transform: 'translate3d(3%, -4%, 0) rotate(10deg) scale(1.18)', opacity: '1' },
240
+ },
241
+ 'vc-shimmer': { '100%': { transform: 'translateX(100%)' } },
242
+ 'vc-glow-pulse': { '0%, 100%': { opacity: '0.5' }, '50%': { opacity: '1' } },
243
+ },
244
+ animation: {
245
+ 'vc-aurora': 'vc-aurora 16s ease-in-out infinite',
246
+ 'vc-shimmer': 'vc-shimmer 1.6s ease-in-out infinite',
247
+ 'vc-glow-pulse': 'vc-glow-pulse 2.8s ease-in-out infinite',
248
+ },
234
249
  },
235
250
  },
236
251
  };
@@ -307,7 +307,8 @@
307
307
  --gradient-accent-wash: none;
308
308
  --gradient-hero-mesh: none;
309
309
  --shadow-pop: var(--shadow-elevation-2); /* opaque, no accent glow rim */
310
- --shadow-glow: var(--shadow-elevation-2);
310
+ --shadow-pop-hover: var(--shadow-elevation-3);
311
+ --shadow-glow: var(--shadow-elevation-3);
311
312
  --color-border-seam: var(--color-border-strong); /* solid, fully visible */
312
313
  --color-surface-glass: var(--color-bg-elevated); /* opaque */
313
314
  --blur-glass: 0px;