your-ai-workflow-firebase-os 2.0.0 → 2.0.1
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/{AddressField-B2YBRXcx.js → AddressField-R-HvndkG.js} +2 -2
- package/dist/{ContactPopup-Du_AVUgk.js → ContactPopup-9J_YeJrb.js} +3795 -3749
- package/dist/ContactPopup-DF8qQCoY.cjs +12 -0
- package/dist/{PhoneInputField-D3wWs-M8.js → PhoneInputField-BlYHb5e0.js} +2 -2
- package/dist/PhoneInputField-Btx07xvM.js +2 -0
- package/dist/{bake-BWG3y-15.cjs → bake-D0gLVNTL.cjs} +1 -1
- package/dist/{bake-BtYOG1Du.js → bake-OErV2MLy.js} +14 -14
- package/dist/components/ViewingAs.d.ts +9 -2
- package/dist/components/media/Attachments.d.ts +15 -0
- package/dist/{dist-BkUiTtIb.js → dist-_zWHDDrc.js} +1 -1
- package/dist/{fileBytes-BdwaFKRy.cjs → fileBytes-B0qxHYQL.cjs} +1 -1
- package/dist/{fileBytes-DuW2K-H_.js → fileBytes-uhq3pGCS.js} +1 -1
- package/dist/lib/payments.d.ts +23 -2
- package/dist/lib/rowPress.d.ts +36 -0
- package/dist/lib/steps.d.ts +7 -0
- package/dist/lib/transactions.d.ts +13 -1
- package/dist/lib/uploadQueue.d.ts +6 -0
- package/dist/{lucide-react-ehRy1vqS.js → lucide-react-DiyP8FA_.js} +8 -8
- package/dist/pages/PagesAdmin.d.ts +49 -0
- package/dist/{pdf-u73U7-6s.js → pdf-DLuvpvHg.js} +1 -1
- package/dist/{pdf.worker.min-BPOWx2_9.js → pdf.worker.min-C0gkd2Ec.js} +1 -1
- package/dist/renderer.cjs.js +1 -1
- package/dist/renderer.es.js +1 -1
- package/dist/server.cjs.js +1 -1
- package/dist/server.es.js +1 -1
- package/dist/{validate-C_iJKXDU.js → validate-DzSJWuyL.js} +52 -31
- package/dist/validate-e48WXJdP.cjs +103 -0
- package/dist/vite.cjs.js +1 -1
- package/dist/vite.es.js +1 -1
- package/dist/your-ai-workflow-firebase-os.cjs.js +56 -56
- package/dist/your-ai-workflow-firebase-os.css +1 -1
- package/dist/your-ai-workflow-firebase-os.es.js +11700 -11505
- package/package.json +1 -1
- package/dist/ContactPopup-MalER7E7.cjs +0 -12
- package/dist/PhoneInputField-CVamkTJg.js +0 -2
- package/dist/validate-L8QWFfBP.cjs +0 -103
- /package/dist/{AddressField-BBv8NGX8.cjs → AddressField-BkzFOo2t.cjs} +0 -0
- /package/dist/{pdf-B24jYmSf.cjs → pdf-CC5g01eC.cjs} +0 -0
- /package/dist/{pdf.worker.min-BvhEiZFe.cjs → pdf.worker.min-pI_P-OCl.cjs} +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { a as e, t } from "./chunk-NnHqS4_Y.js";
|
|
2
|
-
import { o as n, r, s as i, t as a } from "./fileBytes-
|
|
3
|
-
//#region node_modules/pdf-lib/node_modules/tslib/tslib.es6.js
|
|
2
|
+
import { o as n, r, s as i, t as a } from "./fileBytes-uhq3pGCS.js";
|
|
3
|
+
//#region ../your-ai-workflow-firebase-os/node_modules/pdf-lib/node_modules/tslib/tslib.es6.js
|
|
4
4
|
var o = function(e, t) {
|
|
5
5
|
return o = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(e, t) {
|
|
6
6
|
e.__proto__ = t;
|
|
@@ -2311,13 +2311,13 @@ var U = cn, ln = function() {
|
|
|
2311
2311
|
}(un), mn = new Uint8Array(256);
|
|
2312
2312
|
mn[U.LeftParen] = 1, mn[U.RightParen] = 1, mn[U.LessThan] = 1, mn[U.GreaterThan] = 1, mn[U.LeftSquareBracket] = 1, mn[U.RightSquareBracket] = 1, mn[U.LeftCurly] = 1, mn[U.RightCurly] = 1, mn[U.ForwardSlash] = 1, mn[U.Percent] = 1;
|
|
2313
2313
|
//#endregion
|
|
2314
|
-
//#region node_modules/pdf-lib/es/core/syntax/Whitespace.js
|
|
2314
|
+
//#region ../your-ai-workflow-firebase-os/node_modules/pdf-lib/es/core/syntax/Whitespace.js
|
|
2315
2315
|
var hn = new Uint8Array(256);
|
|
2316
2316
|
hn[U.Null] = 1, hn[U.Tab] = 1, hn[U.Newline] = 1, hn[U.FormFeed] = 1, hn[U.CarriageReturn] = 1, hn[U.Space] = 1;
|
|
2317
2317
|
for (var gn = new Uint8Array(256), _n = 0, vn = 256; _n < vn; _n++) gn[_n] = hn[_n] || mn[_n] ? 1 : 0;
|
|
2318
2318
|
gn[U.Hash] = 1;
|
|
2319
2319
|
//#endregion
|
|
2320
|
-
//#region node_modules/pdf-lib/es/core/objects/PDFName.js
|
|
2320
|
+
//#region ../your-ai-workflow-firebase-os/node_modules/pdf-lib/es/core/objects/PDFName.js
|
|
2321
2321
|
var yn = function(e) {
|
|
2322
2322
|
return e.replace(/#([\dABCDEF]{2})/g, function(e, t) {
|
|
2323
2323
|
return T(t);
|
|
@@ -4738,7 +4738,7 @@ J.toRGBA8 = function(e) {
|
|
|
4738
4738
|
return r.buffer;
|
|
4739
4739
|
};
|
|
4740
4740
|
//#endregion
|
|
4741
|
-
//#region node_modules/pdf-lib/es/utils/png.js
|
|
4741
|
+
//#region ../your-ai-workflow-firebase-os/node_modules/pdf-lib/es/utils/png.js
|
|
4742
4742
|
var dr = function(e) {
|
|
4743
4743
|
if (e === 0) return pr.Greyscale;
|
|
4744
4744
|
if (e === 2) return pr.Truecolour;
|
|
@@ -6418,7 +6418,7 @@ var ei;
|
|
|
6418
6418
|
e[e.Combo = Xr(17)] = "Combo", e[e.Edit = Xr(18)] = "Edit", e[e.Sort = Xr(19)] = "Sort", e[e.MultiSelect = Xr(21)] = "MultiSelect", e[e.DoNotSpellCheck = Xr(22)] = "DoNotSpellCheck", e[e.CommitOnSelChange = Xr(26)] = "CommitOnSelChange";
|
|
6419
6419
|
})(ei ||= {});
|
|
6420
6420
|
//#endregion
|
|
6421
|
-
//#region node_modules/pdf-lib/es/core/acroform/PDFAcroChoice.js
|
|
6421
|
+
//#region ../your-ai-workflow-firebase-os/node_modules/pdf-lib/es/core/acroform/PDFAcroChoice.js
|
|
6422
6422
|
var ti = function(e) {
|
|
6423
6423
|
s(t, e);
|
|
6424
6424
|
function t() {
|
|
@@ -6833,7 +6833,7 @@ var Si = new Uint8Array(256);
|
|
|
6833
6833
|
Si[U.Period] = 1, Si[U.Plus] = 1, Si[U.Minus] = 1;
|
|
6834
6834
|
for (var Ci = new Uint8Array(256), wi = 0, Ti = 256; wi < Ti; wi++) Ci[wi] = xi[wi] || Si[wi] ? 1 : 0;
|
|
6835
6835
|
//#endregion
|
|
6836
|
-
//#region node_modules/pdf-lib/es/core/parser/BaseParser.js
|
|
6836
|
+
//#region ../your-ai-workflow-firebase-os/node_modules/pdf-lib/es/core/parser/BaseParser.js
|
|
6837
6837
|
var Ei = U.Newline, Di = U.CarriageReturn, Oi = function() {
|
|
6838
6838
|
function e(e, t) {
|
|
6839
6839
|
t === void 0 && (t = !1), this.bytes = e, this.capNumbers = t;
|
|
@@ -7364,7 +7364,7 @@ var Ei = U.Newline, Di = U.CarriageReturn, Oi = function() {
|
|
|
7364
7364
|
e[e.Invisible = Bi(0)] = "Invisible", e[e.Hidden = Bi(1)] = "Hidden", e[e.Print = Bi(2)] = "Print", e[e.NoZoom = Bi(3)] = "NoZoom", e[e.NoRotate = Bi(4)] = "NoRotate", e[e.NoView = Bi(5)] = "NoView", e[e.ReadOnly = Bi(6)] = "ReadOnly", e[e.Locked = Bi(7)] = "Locked", e[e.ToggleNoView = Bi(8)] = "ToggleNoView", e[e.LockedContents = Bi(9)] = "LockedContents";
|
|
7365
7365
|
})(Vi ||= {});
|
|
7366
7366
|
//#endregion
|
|
7367
|
-
//#region node_modules/pdf-lib/es/api/objects.js
|
|
7367
|
+
//#region ../your-ai-workflow-firebase-os/node_modules/pdf-lib/es/api/objects.js
|
|
7368
7368
|
var Hi = function(e) {
|
|
7369
7369
|
return e instanceof G ? e : G.of(e);
|
|
7370
7370
|
}, Y = function(e) {
|
|
@@ -8169,7 +8169,7 @@ var Bo = function(e) {
|
|
|
8169
8169
|
e[e.Left = 0] = "Left", e[e.Center = 1] = "Center", e[e.Right = 2] = "Right";
|
|
8170
8170
|
})(Wo ||= {});
|
|
8171
8171
|
//#endregion
|
|
8172
|
-
//#region node_modules/pdf-lib/es/api/text/layout.js
|
|
8172
|
+
//#region ../your-ai-workflow-firebase-os/node_modules/pdf-lib/es/api/text/layout.js
|
|
8173
8173
|
var Go = 4, Ko = 500, qo = function(e, t, n, r) {
|
|
8174
8174
|
r === void 0 && (r = !1);
|
|
8175
8175
|
for (var i = Go; i < Ko;) {
|
|
@@ -8601,7 +8601,7 @@ var Go = 4, Ko = 500, qo = function(e, t, n, r) {
|
|
|
8601
8601
|
e[e.Left = 0] = "Left", e[e.Center = 1] = "Center", e[e.Right = 2] = "Right";
|
|
8602
8602
|
})(hs ||= {});
|
|
8603
8603
|
//#endregion
|
|
8604
|
-
//#region node_modules/pdf-lib/es/api/form/PDFField.js
|
|
8604
|
+
//#region ../your-ai-workflow-firebase-os/node_modules/pdf-lib/es/api/form/PDFField.js
|
|
8605
8605
|
var gs = function(e) {
|
|
8606
8606
|
V(e?.x, "options.x", ["number"]), V(e?.y, "options.y", ["number"]), V(e?.width, "options.width", ["number"]), V(e?.height, "options.height", ["number"]), V(e?.textColor, "options.textColor", [[Object, "Color"]]), V(e?.backgroundColor, "options.backgroundColor", [[Object, "Color"]]), V(e?.borderColor, "options.borderColor", [[Object, "Color"]]), V(e?.borderWidth, "options.borderWidth", ["number"]), V(e?.rotate, "options.rotate", [[Object, "Rotation"]]);
|
|
8607
8607
|
}, _s = function() {
|
|
@@ -9187,7 +9187,7 @@ var gs = function(e) {
|
|
|
9187
9187
|
e.Courier = "Courier", e.CourierBold = "Courier-Bold", e.CourierOblique = "Courier-Oblique", e.CourierBoldOblique = "Courier-BoldOblique", e.Helvetica = "Helvetica", e.HelveticaBold = "Helvetica-Bold", e.HelveticaOblique = "Helvetica-Oblique", e.HelveticaBoldOblique = "Helvetica-BoldOblique", e.TimesRoman = "Times-Roman", e.TimesRomanBold = "Times-Bold", e.TimesRomanItalic = "Times-Italic", e.TimesRomanBoldItalic = "Times-BoldItalic", e.Symbol = "Symbol", e.ZapfDingbats = "ZapfDingbats";
|
|
9188
9188
|
})(ws ||= {});
|
|
9189
9189
|
//#endregion
|
|
9190
|
-
//#region node_modules/pdf-lib/es/api/form/PDFForm.js
|
|
9190
|
+
//#region ../your-ai-workflow-firebase-os/node_modules/pdf-lib/es/api/form/PDFForm.js
|
|
9191
9191
|
var Ts = function() {
|
|
9192
9192
|
function e(e, t) {
|
|
9193
9193
|
var n = this;
|
|
@@ -9434,7 +9434,7 @@ var Ts = function() {
|
|
|
9434
9434
|
e[e.Fastest = Infinity] = "Fastest", e[e.Fast = 1500] = "Fast", e[e.Medium = 500] = "Medium", e[e.Slow = 100] = "Slow";
|
|
9435
9435
|
})(As ||= {});
|
|
9436
9436
|
//#endregion
|
|
9437
|
-
//#region node_modules/pdf-lib/es/api/PDFEmbeddedFile.js
|
|
9437
|
+
//#region ../your-ai-workflow-firebase-os/node_modules/pdf-lib/es/api/PDFEmbeddedFile.js
|
|
9438
9438
|
var js = function() {
|
|
9439
9439
|
function e(e, t, n) {
|
|
9440
9440
|
this.alreadyEmbedded = !1, this.ref = e, this.doc = t, this.embedder = n;
|
|
@@ -9828,13 +9828,13 @@ function Fs(e) {
|
|
|
9828
9828
|
if (!(e instanceof q) && !(e instanceof nr)) throw new It([q, nr], e);
|
|
9829
9829
|
}
|
|
9830
9830
|
//#endregion
|
|
9831
|
-
//#region node_modules/pdf-lib/es/api/PDFPageOptions.js
|
|
9831
|
+
//#region ../your-ai-workflow-firebase-os/node_modules/pdf-lib/es/api/PDFPageOptions.js
|
|
9832
9832
|
var Is;
|
|
9833
9833
|
(function(e) {
|
|
9834
9834
|
e.Normal = "Normal", e.Multiply = "Multiply", e.Screen = "Screen", e.Overlay = "Overlay", e.Darken = "Darken", e.Lighten = "Lighten", e.ColorDodge = "ColorDodge", e.ColorBurn = "ColorBurn", e.HardLight = "HardLight", e.SoftLight = "SoftLight", e.Difference = "Difference", e.Exclusion = "Exclusion";
|
|
9835
9835
|
})(Is ||= {});
|
|
9836
9836
|
//#endregion
|
|
9837
|
-
//#region node_modules/pdf-lib/es/api/PDFPage.js
|
|
9837
|
+
//#region ../your-ai-workflow-firebase-os/node_modules/pdf-lib/es/api/PDFPage.js
|
|
9838
9838
|
var Ls = function() {
|
|
9839
9839
|
function e(e, t, n) {
|
|
9840
9840
|
this.fontSize = 24, this.fontColor = Ka(0, 0, 0), this.lineHeight = 24, this.x = 0, this.y = 0, B(e, "leafNode", [[Ln, "PDFPageLeaf"]]), B(t, "ref", [[On, "PDFRef"]]), B(n, "doc", [[Ps, "PDFDocument"]]), this.node = e, this.ref = t, this.doc = n;
|
|
@@ -57,10 +57,17 @@ export declare function useViewingAs({ on, everyone }: {
|
|
|
57
57
|
everyone?: boolean;
|
|
58
58
|
}): ViewingAs;
|
|
59
59
|
/**
|
|
60
|
-
* The switch with its word
|
|
60
|
+
* The switch with its word BESIDE it, for a toolbar that wants one line.
|
|
61
|
+
*
|
|
62
|
+
* The word is drawn here and not by the select, which stacks its label above
|
|
63
|
+
* the trigger the way a form field does: in a toolbar that made the bar two
|
|
64
|
+
* rows tall, so "Viewing" floated over the row while the eye, the switch and
|
|
65
|
+
* every button beside it centred against the taller box. One line, one
|
|
66
|
+
* baseline — the eye, the word, the switch.
|
|
61
67
|
*
|
|
62
68
|
* The eye is the same glyph the console uses for looking at something without
|
|
63
|
-
* changing it, and
|
|
69
|
+
* changing it, and it stays on a phone while the word goes, the way every
|
|
70
|
+
* other row up here is icons on a phone and words on a screen.
|
|
64
71
|
*/
|
|
65
72
|
export declare function ViewingAsBar({ viewing }: {
|
|
66
73
|
viewing: ViewingAs;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export interface AttachmentsProps {
|
|
2
|
+
/** The answer as it sits on the entry — one link, or several. */
|
|
3
|
+
value: unknown;
|
|
4
|
+
/** The file to show large. The screen keeps the viewer. */
|
|
5
|
+
onOpen: (file: {
|
|
6
|
+
src: string;
|
|
7
|
+
name: string;
|
|
8
|
+
}) => void;
|
|
9
|
+
/** The tile's size, where a screen wants them smaller than the Inbox's. */
|
|
10
|
+
className?: string;
|
|
11
|
+
}
|
|
12
|
+
export declare function Attachments({ value, onOpen, className }: AttachmentsProps): import("react/jsx-runtime").JSX.Element;
|
|
13
|
+
export declare namespace Attachments {
|
|
14
|
+
var displayName: string;
|
|
15
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import e, { forwardRef as t, useCallback as n, useEffect as r, useImperativeHandle as i, useMemo as a, useRef as o, useState as s } from "react";
|
|
2
|
-
//#region node_modules/react-international-phone/dist/index.mjs
|
|
2
|
+
//#region ../your-ai-workflow-firebase-os/node_modules/react-international-phone/dist/index.mjs
|
|
3
3
|
var c = [
|
|
4
4
|
[
|
|
5
5
|
"Afghanistan",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
require(`./chunk-CiTBaPhY.cjs`);const e=require(`./mediaKind-dk396a03.cjs`);let t=require(`react`),n=require(`react/jsx-runtime`);var r=[{id:`black`,label:`Black pen`,color:`#111827`,alpha:1,width:.0028},{id:`blue`,label:`Blue pen`,color:`#2563eb`,alpha:1,width:.0028},{id:`red`,label:`Red pen`,color:`#dc2626`,alpha:1,width:.0028},{id:`marker`,label:`Highlighter`,color:`#facc15`,alpha:.4,width:.016}],i=e=>r.find(t=>t.id===e)||r[0];function a(e,t,n,r){let a=i(t.ink),o=t.points;if(!(o.length<2)){e.save(),e.globalAlpha=a.alpha,e.strokeStyle=a.color,e.lineWidth=Math.max(1,a.width*n),e.lineCap=`round`,e.lineJoin=`round`,e.beginPath(),e.moveTo(o[0]*n,o[1]*r),o.length===2&&e.lineTo(o[0]*n+.01,o[1]*r);for(let t=2;t<o.length;t+=2)e.lineTo(o[t]*n,o[t+1]*r);e.stroke(),e.restore()}}function o({strokes:e,active:r,ink:i,onStroke:o}){let s=(0,t.useRef)(null),c=(0,t.useRef)(null),l=(0,t.useRef)(0),[u,d]=(0,t.useState)({w:0,h:0});(0,t.useLayoutEffect)(()=>{let e=s.current?.parentElement;if(!e)return;let t=()=>d({w:e.clientWidth,h:e.clientHeight});if(t(),typeof ResizeObserver>`u`)return;let n=new ResizeObserver(t);return n.observe(e),()=>n.disconnect()},[]);let f=(0,t.useCallback)(()=>{let t=s.current;if(!t||!u.w||!u.h)return;let n=window.devicePixelRatio||1,r=Math.round(u.w*n),i=Math.round(u.h*n);(t.width!==r||t.height!==i)&&(t.width=r,t.height=i);let o=t.getContext(`2d`);if(o){o.setTransform(n,0,0,n,0,0),o.clearRect(0,0,u.w,u.h);for(let t of e)a(o,t,u.w,u.h);c.current&&a(o,c.current,u.w,u.h)}},[e,u]);(0,t.useEffect)(f,[f]),(0,t.useEffect)(()=>()=>cancelAnimationFrame(l.current),[]);let p=()=>{cancelAnimationFrame(l.current),l.current=requestAnimationFrame(f)},m=e=>{let t=e.currentTarget.getBoundingClientRect();return[Math.min(1,Math.max(0,(e.clientX-t.left)/(t.width||1))),Math.min(1,Math.max(0,(e.clientY-t.top)/(t.height||1)))]},h=()=>{let e=c.current;c.current=null,e&&o(e)};return(0,n.jsx)(`canvas`,{ref:s,"aria-hidden":!r,className:`absolute inset-0 w-full h-full ${r?`cursor-crosshair touch-none`:`pointer-events-none`}`,onPointerDown:e=>{!r||e.button>0||(e.preventDefault(),e.currentTarget.setPointerCapture(e.pointerId),c.current={ink:i,points:m(e)},p())},onPointerMove:e=>{c.current&&(c.current.points.push(...m(e)),p())},onPointerUp:h,onPointerCancel:h})}var s=null;function c(){return s||(s=(async()=>{let[e,t]=await Promise.all([Promise.resolve().then(()=>require(`./pdf-
|
|
1
|
+
require(`./chunk-CiTBaPhY.cjs`);const e=require(`./mediaKind-dk396a03.cjs`);let t=require(`react`),n=require(`react/jsx-runtime`);var r=[{id:`black`,label:`Black pen`,color:`#111827`,alpha:1,width:.0028},{id:`blue`,label:`Blue pen`,color:`#2563eb`,alpha:1,width:.0028},{id:`red`,label:`Red pen`,color:`#dc2626`,alpha:1,width:.0028},{id:`marker`,label:`Highlighter`,color:`#facc15`,alpha:.4,width:.016}],i=e=>r.find(t=>t.id===e)||r[0];function a(e,t,n,r){let a=i(t.ink),o=t.points;if(!(o.length<2)){e.save(),e.globalAlpha=a.alpha,e.strokeStyle=a.color,e.lineWidth=Math.max(1,a.width*n),e.lineCap=`round`,e.lineJoin=`round`,e.beginPath(),e.moveTo(o[0]*n,o[1]*r),o.length===2&&e.lineTo(o[0]*n+.01,o[1]*r);for(let t=2;t<o.length;t+=2)e.lineTo(o[t]*n,o[t+1]*r);e.stroke(),e.restore()}}function o({strokes:e,active:r,ink:i,onStroke:o}){let s=(0,t.useRef)(null),c=(0,t.useRef)(null),l=(0,t.useRef)(0),[u,d]=(0,t.useState)({w:0,h:0});(0,t.useLayoutEffect)(()=>{let e=s.current?.parentElement;if(!e)return;let t=()=>d({w:e.clientWidth,h:e.clientHeight});if(t(),typeof ResizeObserver>`u`)return;let n=new ResizeObserver(t);return n.observe(e),()=>n.disconnect()},[]);let f=(0,t.useCallback)(()=>{let t=s.current;if(!t||!u.w||!u.h)return;let n=window.devicePixelRatio||1,r=Math.round(u.w*n),i=Math.round(u.h*n);(t.width!==r||t.height!==i)&&(t.width=r,t.height=i);let o=t.getContext(`2d`);if(o){o.setTransform(n,0,0,n,0,0),o.clearRect(0,0,u.w,u.h);for(let t of e)a(o,t,u.w,u.h);c.current&&a(o,c.current,u.w,u.h)}},[e,u]);(0,t.useEffect)(f,[f]),(0,t.useEffect)(()=>()=>cancelAnimationFrame(l.current),[]);let p=()=>{cancelAnimationFrame(l.current),l.current=requestAnimationFrame(f)},m=e=>{let t=e.currentTarget.getBoundingClientRect();return[Math.min(1,Math.max(0,(e.clientX-t.left)/(t.width||1))),Math.min(1,Math.max(0,(e.clientY-t.top)/(t.height||1)))]},h=()=>{let e=c.current;c.current=null,e&&o(e)};return(0,n.jsx)(`canvas`,{ref:s,"aria-hidden":!r,className:`absolute inset-0 w-full h-full ${r?`cursor-crosshair touch-none`:`pointer-events-none`}`,onPointerDown:e=>{!r||e.button>0||(e.preventDefault(),e.currentTarget.setPointerCapture(e.pointerId),c.current={ink:i,points:m(e)},p())},onPointerMove:e=>{c.current&&(c.current.points.push(...m(e)),p())},onPointerUp:h,onPointerCancel:h})}var s=null;function c(){return s||(s=(async()=>{let[e,t]=await Promise.all([Promise.resolve().then(()=>require(`./pdf-CC5g01eC.cjs`)),Promise.resolve().then(()=>require(`./pdf.worker.min-pI_P-OCl.cjs`))]),n=e.GlobalWorkerOptions;if(!n.workerPort&&!n.workerSrc){let e=URL.createObjectURL(new Blob([t.default],{type:`text/javascript`}));n.workerSrc=e;try{n.workerPort=new Worker(e,{type:`module`})}catch{}}return e})(),s.catch(()=>{s=null})),s}var l=`/api/files/raw`,u=new Map,d=6;async function f(t){if(/^(blob|data):/i.test(t))return(await fetch(t)).blob();try{let e=await fetch(t,{mode:`cors`,credentials:`omit`});if(e.ok)return await e.blob()}catch{}if(e.c(t))try{let e=await fetch(`${l}?url=${encodeURIComponent(t)}`);if(e.ok&&e.headers.get(`x-fbos-file`)===`1`)return await e.blob()}catch{}throw Error(`This file cannot be read here.`)}function p(e){let t=u.get(e);if(t)return t;let n=f(e);for(u.set(e,n),n.catch(()=>u.delete(e));u.size>d;)u.delete(u.keys().next().value);return n}function m(e,t){let n=URL.createObjectURL(e),r=document.createElement(`a`);r.href=n,r.download=t||`file`,document.body.appendChild(r),r.click(),r.remove(),setTimeout(()=>URL.revokeObjectURL(n),4e3)}Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return r}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return o}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return m}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return p}});
|
|
@@ -100,7 +100,7 @@ function u({ strokes: e, active: s, ink: c, onStroke: u }) {
|
|
|
100
100
|
var d = null;
|
|
101
101
|
function f() {
|
|
102
102
|
return d || (d = (async () => {
|
|
103
|
-
let [e, t] = await Promise.all([import("./pdf-
|
|
103
|
+
let [e, t] = await Promise.all([import("./pdf-DLuvpvHg.js"), import("./pdf.worker.min-C0gkd2Ec.js")]), n = e.GlobalWorkerOptions;
|
|
104
104
|
if (!n.workerPort && !n.workerSrc) {
|
|
105
105
|
let e = URL.createObjectURL(new Blob([t.default], { type: "text/javascript" }));
|
|
106
106
|
n.workerSrc = e;
|
package/dist/lib/payments.d.ts
CHANGED
|
@@ -164,13 +164,34 @@ export declare function openBillingPortal(): Promise<string | null>;
|
|
|
164
164
|
* that URL. Only `paid: true` from here means money moved.
|
|
165
165
|
*/
|
|
166
166
|
export declare function confirmPayment(sessionId: string): Promise<PaymentConfirmation>;
|
|
167
|
-
|
|
167
|
+
export interface PaymentsStatus {
|
|
168
|
+
configured: boolean;
|
|
169
|
+
mode: 'live' | 'test' | null;
|
|
170
|
+
}
|
|
171
|
+
/** How often a watching screen asks again while the key is still not in. */
|
|
172
|
+
export declare const STATUS_WATCH_MS = 5000;
|
|
173
|
+
/**
|
|
174
|
+
* Forget the cached /payments/status answer and ask again — the Payments
|
|
175
|
+
* switch, and tests. Anything on screen holding the old answer is told.
|
|
176
|
+
*/
|
|
168
177
|
export declare function resetPaymentsStatus(): void;
|
|
178
|
+
/**
|
|
179
|
+
* An answer the status route gave SOMEWHERE ELSE — the polled chips on the
|
|
180
|
+
* Setup, Payments and Go live screens (lib/serviceStatus.ts). The screen that
|
|
181
|
+
* tells the owner their key is in is the screen that tells the app, so walking
|
|
182
|
+
* from there to the Pages screen finds the Payments section already there.
|
|
183
|
+
*/
|
|
184
|
+
export declare function notePaymentsStatus(data: any): void;
|
|
169
185
|
/**
|
|
170
186
|
* Whether the owner has connected Stripe. A page uses this to avoid drawing a
|
|
171
187
|
* Pay button that cannot work on an app whose owner is still mid-setup.
|
|
188
|
+
*
|
|
189
|
+
* `watch` is for the screens an owner sets payments up FROM — they ask again
|
|
190
|
+
* every few seconds until the key is in, so a section appears where the owner
|
|
191
|
+
* is standing rather than after a reload. It stops itself the moment the
|
|
192
|
+
* answer turns true, so an app that is set up polls nothing.
|
|
172
193
|
*/
|
|
173
|
-
export declare function usePaymentsEnabled(): {
|
|
194
|
+
export declare function usePaymentsEnabled(watch?: boolean): {
|
|
174
195
|
loading: boolean;
|
|
175
196
|
configured: boolean;
|
|
176
197
|
mode: 'live' | 'test' | null;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Was that click a PRESS on the row, or the tail of a text selection?
|
|
3
|
+
*
|
|
4
|
+
* The admin lists — Pages, Forms — are cards that open when you click them
|
|
5
|
+
* and shut when you click them again, and the handler sits on the whole
|
|
6
|
+
* card, so the open settings are inside the very element that folds them.
|
|
7
|
+
* Everything drawn in there stops the click from reaching it, which works
|
|
8
|
+
* for an ordinary click and not at all for a SELECTION: dragging across a
|
|
9
|
+
* hint, a sentence or a label starts on one element and ends on another, so
|
|
10
|
+
* the browser fires the click on the nearest thing that holds them both —
|
|
11
|
+
* the card — above every guard inside it. The owner's words, 2026-09-24:
|
|
12
|
+
* "if you select text inside a page settings anywhere it folds page
|
|
13
|
+
* settings which is super annoying".
|
|
14
|
+
*
|
|
15
|
+
* So the card asks this instead. A press is a press: down and up in the same
|
|
16
|
+
* spot, with no text left selected. A drag is not, wherever it landed, and
|
|
17
|
+
* neither is a click that ends with words highlighted — a double-click on a
|
|
18
|
+
* word, a triple-click on a line, a drag across a paragraph.
|
|
19
|
+
*
|
|
20
|
+
* Clicking to CLOSE a row still works after a selection: the mouse going
|
|
21
|
+
* down clears it, so by the time the click lands there is nothing selected.
|
|
22
|
+
*/
|
|
23
|
+
/** How far the mouse may travel between down and up and still be a press. */
|
|
24
|
+
export declare const PRESS_SLOP = 4;
|
|
25
|
+
export interface PressPoint {
|
|
26
|
+
x: number;
|
|
27
|
+
y: number;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* `from` is where the mouse went down on the card, or null when the click
|
|
31
|
+
* came from somewhere that never pressed it — a keyboard, or a test.
|
|
32
|
+
*/
|
|
33
|
+
export declare const isRowPress: (at: {
|
|
34
|
+
clientX: number;
|
|
35
|
+
clientY: number;
|
|
36
|
+
}, from: PressPoint | null) => boolean;
|
package/dist/lib/steps.d.ts
CHANGED
|
@@ -16,6 +16,13 @@ export interface StepsState<T extends string = string> {
|
|
|
16
16
|
goTo: (id: T) => void;
|
|
17
17
|
/** Back to the first step with the question taken off the address — for when the thing is sent. */
|
|
18
18
|
reset: () => void;
|
|
19
|
+
/**
|
|
20
|
+
* A file somewhere in the app is still going up, so the step is held: every
|
|
21
|
+
* way off it does nothing but say so. For a page that wants its own button
|
|
22
|
+
* to show it — `<Button disabled={flow.waiting}>` — rather than let somebody
|
|
23
|
+
* press a button that will not move.
|
|
24
|
+
*/
|
|
25
|
+
waiting: boolean;
|
|
19
26
|
/** Everything `<StepBar>` needs: `<StepBar {...flow.bar} />`. */
|
|
20
27
|
bar: {
|
|
21
28
|
steps: StepInfo<T>[];
|
|
@@ -118,6 +118,12 @@ export declare function splitCollected(collected: [string, unknown][]): {
|
|
|
118
118
|
};
|
|
119
119
|
/** A metadata value is always a string; one that holds JSON is read as what it holds. */
|
|
120
120
|
export declare function readValue(value: unknown): unknown;
|
|
121
|
+
/**
|
|
122
|
+
* A key that holds a PICTURE rather than something to read. Anywhere an
|
|
123
|
+
* entry's own keys are printed — a receipt line, a sent list in the Inbox —
|
|
124
|
+
* this one is either drawn or left out, never said as an address.
|
|
125
|
+
*/
|
|
126
|
+
export declare const isPictureKey: (key: string) => boolean;
|
|
121
127
|
/**
|
|
122
128
|
* One thing bought, as a line: "2 × Blazer — Noir Black, M · £240". The
|
|
123
129
|
* page named the keys itself, so each part is found by the names pages
|
|
@@ -125,10 +131,14 @@ export declare function readValue(value: unknown): unknown;
|
|
|
125
131
|
* follows as "label: value".
|
|
126
132
|
*/
|
|
127
133
|
export declare function itemLine(item: Record<string, unknown>, currency?: string | null): string;
|
|
128
|
-
/**
|
|
134
|
+
/**
|
|
135
|
+
* The same thing with its price apart — the words for the left of a receipt
|
|
136
|
+
* line, the sum for the right, and the picture for the line to draw.
|
|
137
|
+
*/
|
|
129
138
|
export declare function itemParts(item: Record<string, unknown>, currency?: string | null): {
|
|
130
139
|
words: string;
|
|
131
140
|
price: string;
|
|
141
|
+
picture: string;
|
|
132
142
|
};
|
|
133
143
|
/**
|
|
134
144
|
* A collected value as the lines it reads as. A list of things bought is
|
|
@@ -142,6 +152,8 @@ export interface ReceiptLine {
|
|
|
142
152
|
right: string;
|
|
143
153
|
/** A thing bought; a number that made up the amount or a choice (delivery, a discount, the plan, the seats); the total. */
|
|
144
154
|
kind: 'item' | 'extra' | 'total';
|
|
155
|
+
/** The thing's own picture, where the page put one on the line — drawn beside its words, never printed as an address. */
|
|
156
|
+
picture?: string;
|
|
145
157
|
}
|
|
146
158
|
/**
|
|
147
159
|
* What was bought, as the lines of a receipt: each thing on a line of its
|
|
@@ -102,6 +102,12 @@ export declare class UploadQueue<T = unknown> {
|
|
|
102
102
|
private pump;
|
|
103
103
|
private run;
|
|
104
104
|
}
|
|
105
|
+
/** How many files are going up that walking away from would stop. */
|
|
106
|
+
export declare const uploadsStoppedByLeaving: () => number;
|
|
107
|
+
/** Hear when that number changes. Hands back the way to stop hearing. */
|
|
108
|
+
export declare function watchUploads(heard: () => void): () => void;
|
|
109
|
+
/** The same number, for a component — it redraws as each file lands. */
|
|
110
|
+
export declare const useUploadsStoppedByLeaving: () => number;
|
|
105
111
|
/** The list in numbers — what a button or a status line says. */
|
|
106
112
|
export declare function uploadSummary(items: UploadItem[]): {
|
|
107
113
|
total: number;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { r as e } from "./chunk-NnHqS4_Y.js";
|
|
2
2
|
import { createContext as t, createElement as n, forwardRef as r, useContext as i, useMemo as a } from "react";
|
|
3
|
-
//#region node_modules/lucide-react/dist/esm/shared/src/utils/toKebabCase.mjs
|
|
3
|
+
//#region ../your-ai-workflow-firebase-os/node_modules/lucide-react/dist/esm/shared/src/utils/toKebabCase.mjs
|
|
4
4
|
var o = (e) => e?.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase();
|
|
5
5
|
//#endregion
|
|
6
|
-
//#region node_modules/lucide-react/dist/esm/shared/src/utils/toLucideIconData.mjs
|
|
6
|
+
//#region ../your-ai-workflow-firebase-os/node_modules/lucide-react/dist/esm/shared/src/utils/toLucideIconData.mjs
|
|
7
7
|
function ee(e, t, n = []) {
|
|
8
8
|
if (t == null) throw Error("[lucide]: iconNode is required when icon name is used");
|
|
9
9
|
return {
|
|
@@ -14,7 +14,7 @@ function ee(e, t, n = []) {
|
|
|
14
14
|
};
|
|
15
15
|
}
|
|
16
16
|
//#endregion
|
|
17
|
-
//#region node_modules/lucide-react/dist/esm/shared/src/utils/toCamelCase.mjs
|
|
17
|
+
//#region ../your-ai-workflow-firebase-os/node_modules/lucide-react/dist/esm/shared/src/utils/toCamelCase.mjs
|
|
18
18
|
var te = (e) => {
|
|
19
19
|
let t = "", n = !1;
|
|
20
20
|
for (let r of e) {
|
|
@@ -40,7 +40,7 @@ var te = (e) => {
|
|
|
40
40
|
"stroke-linejoin": "round"
|
|
41
41
|
};
|
|
42
42
|
//#endregion
|
|
43
|
-
//#region node_modules/lucide-react/dist/esm/shared/src/build/buildLucideIconNode.mjs
|
|
43
|
+
//#region ../your-ai-workflow-firebase-os/node_modules/lucide-react/dist/esm/shared/src/build/buildLucideIconNode.mjs
|
|
44
44
|
function re(e) {
|
|
45
45
|
return e != null;
|
|
46
46
|
}
|
|
@@ -77,7 +77,7 @@ function ie(e, t = {}) {
|
|
|
77
77
|
];
|
|
78
78
|
}
|
|
79
79
|
//#endregion
|
|
80
|
-
//#region node_modules/lucide-react/dist/esm/shared/src/build/buildLucideIconForReact.mjs
|
|
80
|
+
//#region ../your-ai-workflow-firebase-os/node_modules/lucide-react/dist/esm/shared/src/build/buildLucideIconForReact.mjs
|
|
81
81
|
function eee(e, t = {}) {
|
|
82
82
|
return ie(e, {
|
|
83
83
|
...t,
|
|
@@ -92,7 +92,7 @@ function eee(e, t = {}) {
|
|
|
92
92
|
});
|
|
93
93
|
}
|
|
94
94
|
//#endregion
|
|
95
|
-
//#region node_modules/lucide-react/dist/esm/shared/src/utils/hasA11yProp.mjs
|
|
95
|
+
//#region ../your-ai-workflow-firebase-os/node_modules/lucide-react/dist/esm/shared/src/utils/hasA11yProp.mjs
|
|
96
96
|
var tee = (e) => {
|
|
97
97
|
for (let t in e) if (t.startsWith("aria-") || t === "role" || t === "title") return !0;
|
|
98
98
|
return !1;
|
|
@@ -137,7 +137,7 @@ var se = () => i(ae), ce = r(({ color: e, size: t, width: r, height: i, strokeWi
|
|
|
137
137
|
}, [...he.map(([e, t]) => n(e, t)), ...Array.isArray(s) ? s : [s]]);
|
|
138
138
|
});
|
|
139
139
|
//#endregion
|
|
140
|
-
//#region node_modules/lucide-react/dist/esm/createLucideIcon.mjs
|
|
140
|
+
//#region ../your-ai-workflow-firebase-os/node_modules/lucide-react/dist/esm/createLucideIcon.mjs
|
|
141
141
|
function l(e, t = [], i = []) {
|
|
142
142
|
let a = typeof e == "string" ? ee(e, t, i) : e, o = r(({ className: e, ...t }, r) => n(ce, {
|
|
143
143
|
ref: r,
|
|
@@ -148,7 +148,7 @@ function l(e, t = [], i = []) {
|
|
|
148
148
|
return a.name && (o.displayName = s(a.name)), o;
|
|
149
149
|
}
|
|
150
150
|
//#endregion
|
|
151
|
-
//#region node_modules/lucide-react/dist/esm/icons/a-arrow-down.mjs
|
|
151
|
+
//#region ../your-ai-workflow-firebase-os/node_modules/lucide-react/dist/esm/icons/a-arrow-down.mjs
|
|
152
152
|
var le = {
|
|
153
153
|
name: "a-arrow-down",
|
|
154
154
|
size: 24,
|
|
@@ -584,6 +584,7 @@ export declare const pageAddress: (page: {
|
|
|
584
584
|
/** What the owner still has to fill in before the sentence is worth pasting. */
|
|
585
585
|
export declare const promptBlocker: (page: {
|
|
586
586
|
path: string;
|
|
587
|
+
id?: string;
|
|
587
588
|
}, config: any, linkTargets?: WiringPageRow[]) => string;
|
|
588
589
|
/**
|
|
589
590
|
* One thing the owner has handed over for the page — a picture, a video, a
|
|
@@ -1496,6 +1497,54 @@ export declare const arrivalsTo: (config: any) => ArrivalsTo | "";
|
|
|
1496
1497
|
* that is not the receiving end of a road.
|
|
1497
1498
|
*/
|
|
1498
1499
|
export declare const arrivalSources: (config: any, targets: WiringPageRow[]) => WiringPageRow[];
|
|
1500
|
+
/**
|
|
1501
|
+
* The pages anybody can open that are linked to THIS page and make entries,
|
|
1502
|
+
* when this page is one person's own records (`user_`) — where nothing can
|
|
1503
|
+
* ever land.
|
|
1504
|
+
*
|
|
1505
|
+
* The app carries what a visitor makes onto a page whose entries are SENT
|
|
1506
|
+
* (`case_`, arrivalRoads) and onto no other kind: a `user_` record is read by
|
|
1507
|
+
* the one uid on it, so an order could carry the buyer OR the person it is
|
|
1508
|
+
* handed to, never both, and a guest's order nobody at all. There is no road
|
|
1509
|
+
* into `user_`, and there cannot be one.
|
|
1510
|
+
*
|
|
1511
|
+
* The owner's Orders rehearsal of 2026-09-24 was this. Members had to see
|
|
1512
|
+
* their own orders, so she answered "Only the person who added it" — the
|
|
1513
|
+
* reading of an order that anybody would make — and the sentence told the
|
|
1514
|
+
* assistant the shop and the page had "nothing to share". Every assistant
|
|
1515
|
+
* given it built the same page: actions.records on a collection nothing ever
|
|
1516
|
+
* writes, empty for the buyer, the team and the admins, and not a fault
|
|
1517
|
+
* anywhere, because nothing was refused. Regenerated with the context
|
|
1518
|
+
* cleared it came back the same, which is how she knew it was not Gemini.
|
|
1519
|
+
*
|
|
1520
|
+
* So the row says it where she is standing, and the sentence waits: a page
|
|
1521
|
+
* that can never work is not one to hand over. Looked for from both ends,
|
|
1522
|
+
* like arrivalSources, because a link is kept on one of its two rows.
|
|
1523
|
+
*/
|
|
1524
|
+
export declare const deadRoadSources: (config: any, targets: WiringPageRow[]) => WiringPageRow[];
|
|
1525
|
+
/**
|
|
1526
|
+
* The same road seen from the page that MAKES the entries: the pages of one
|
|
1527
|
+
* person's own records this page links to, when this page is one anybody can
|
|
1528
|
+
* open and makes something. Empty for a page that makes nothing.
|
|
1529
|
+
*/
|
|
1530
|
+
export declare const deadRoadEnds: (config: any, targets: WiringPageRow[]) => WiringPageRow[];
|
|
1531
|
+
/**
|
|
1532
|
+
* The line under "Who sees what somebody adds here?" on a page nothing can
|
|
1533
|
+
* land on — in place of the answer's own hint, because the answer is wrong
|
|
1534
|
+
* for this page and saying what it does would only confirm it.
|
|
1535
|
+
*/
|
|
1536
|
+
export declare const deadRoadHint: (config: any, targets: WiringPageRow[]) => string;
|
|
1537
|
+
/**
|
|
1538
|
+
* The same, under the link on the row that MAKES the entries — the other
|
|
1539
|
+
* page's setting is not on this row, so the line says where it is.
|
|
1540
|
+
*/
|
|
1541
|
+
export declare const deadRoadEndWords: (target: WiringPageRow) => string;
|
|
1542
|
+
/**
|
|
1543
|
+
* What holds a sentence back on either end of a road with nowhere to end.
|
|
1544
|
+
* A page that can never show what it is for is not one to hand over: the
|
|
1545
|
+
* assistant would build it faithfully, empty, and nothing would say why.
|
|
1546
|
+
*/
|
|
1547
|
+
export declare const roadBlocker: (config: any, targets: WiringPageRow[]) => string;
|
|
1499
1548
|
/**
|
|
1500
1549
|
* What "only the person it is handed to" asks of the page that draws the
|
|
1501
1550
|
* entries. The app keeps a new one from the team by itself; without a way to
|