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.
Files changed (39) hide show
  1. package/dist/{AddressField-B2YBRXcx.js → AddressField-R-HvndkG.js} +2 -2
  2. package/dist/{ContactPopup-Du_AVUgk.js → ContactPopup-9J_YeJrb.js} +3795 -3749
  3. package/dist/ContactPopup-DF8qQCoY.cjs +12 -0
  4. package/dist/{PhoneInputField-D3wWs-M8.js → PhoneInputField-BlYHb5e0.js} +2 -2
  5. package/dist/PhoneInputField-Btx07xvM.js +2 -0
  6. package/dist/{bake-BWG3y-15.cjs → bake-D0gLVNTL.cjs} +1 -1
  7. package/dist/{bake-BtYOG1Du.js → bake-OErV2MLy.js} +14 -14
  8. package/dist/components/ViewingAs.d.ts +9 -2
  9. package/dist/components/media/Attachments.d.ts +15 -0
  10. package/dist/{dist-BkUiTtIb.js → dist-_zWHDDrc.js} +1 -1
  11. package/dist/{fileBytes-BdwaFKRy.cjs → fileBytes-B0qxHYQL.cjs} +1 -1
  12. package/dist/{fileBytes-DuW2K-H_.js → fileBytes-uhq3pGCS.js} +1 -1
  13. package/dist/lib/payments.d.ts +23 -2
  14. package/dist/lib/rowPress.d.ts +36 -0
  15. package/dist/lib/steps.d.ts +7 -0
  16. package/dist/lib/transactions.d.ts +13 -1
  17. package/dist/lib/uploadQueue.d.ts +6 -0
  18. package/dist/{lucide-react-ehRy1vqS.js → lucide-react-DiyP8FA_.js} +8 -8
  19. package/dist/pages/PagesAdmin.d.ts +49 -0
  20. package/dist/{pdf-u73U7-6s.js → pdf-DLuvpvHg.js} +1 -1
  21. package/dist/{pdf.worker.min-BPOWx2_9.js → pdf.worker.min-C0gkd2Ec.js} +1 -1
  22. package/dist/renderer.cjs.js +1 -1
  23. package/dist/renderer.es.js +1 -1
  24. package/dist/server.cjs.js +1 -1
  25. package/dist/server.es.js +1 -1
  26. package/dist/{validate-C_iJKXDU.js → validate-DzSJWuyL.js} +52 -31
  27. package/dist/validate-e48WXJdP.cjs +103 -0
  28. package/dist/vite.cjs.js +1 -1
  29. package/dist/vite.es.js +1 -1
  30. package/dist/your-ai-workflow-firebase-os.cjs.js +56 -56
  31. package/dist/your-ai-workflow-firebase-os.css +1 -1
  32. package/dist/your-ai-workflow-firebase-os.es.js +11700 -11505
  33. package/package.json +1 -1
  34. package/dist/ContactPopup-MalER7E7.cjs +0 -12
  35. package/dist/PhoneInputField-CVamkTJg.js +0 -2
  36. package/dist/validate-L8QWFfBP.cjs +0 -103
  37. /package/dist/{AddressField-BBv8NGX8.cjs → AddressField-BkzFOo2t.cjs} +0 -0
  38. /package/dist/{pdf-B24jYmSf.cjs → pdf-CC5g01eC.cjs} +0 -0
  39. /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-DuW2K-H_.js";
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 beside it, for a toolbar that wants one line.
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 the word goes on a phone the way every other button's does.
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-B24jYmSf.cjs`)),Promise.resolve().then(()=>require(`./pdf.worker.min-BvhEiZFe.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}});
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-u73U7-6s.js"), import("./pdf.worker.min-BPOWx2_9.js")]), n = e.GlobalWorkerOptions;
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;
@@ -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
- /** Forget the cached /payments/status answer — the Payments switch, and tests. */
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;
@@ -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
- /** The same thing with its price apart — the words for the left of a receipt line, the sum for the right. */
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
@@ -1,4 +1,4 @@
1
- //#region node_modules/pdfjs-dist/legacy/build/pdf.mjs
1
+ //#region ../your-ai-workflow-firebase-os/node_modules/pdfjs-dist/legacy/build/pdf.mjs
2
2
  var e = {
3
3
  9306(e, t, n) {
4
4
  var r = n(4901), i = n(6823), a = TypeError;