@12ui/design 0.2.14 → 0.2.16

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 (108) hide show
  1. package/README.md +21 -1
  2. package/dist/bounded-concurrency.d.ts +13 -0
  3. package/dist/bounded-concurrency.d.ts.map +1 -0
  4. package/dist/bounded-concurrency.js +43 -0
  5. package/dist/bounded-concurrency.js.map +1 -0
  6. package/dist/branch-downloads.d.ts +10 -0
  7. package/dist/branch-downloads.d.ts.map +1 -1
  8. package/dist/branch-downloads.js +20 -0
  9. package/dist/branch-downloads.js.map +1 -1
  10. package/dist/branch-execution.d.ts +7 -0
  11. package/dist/branch-execution.d.ts.map +1 -1
  12. package/dist/branch-execution.js +175 -38
  13. package/dist/branch-execution.js.map +1 -1
  14. package/dist/branch-materialize.d.ts +23 -12
  15. package/dist/branch-materialize.d.ts.map +1 -1
  16. package/dist/branch-materialize.js +55 -38
  17. package/dist/branch-materialize.js.map +1 -1
  18. package/dist/branch-page-conversion.d.ts +109 -5
  19. package/dist/branch-page-conversion.d.ts.map +1 -1
  20. package/dist/branch-page-conversion.js +375 -179
  21. package/dist/branch-page-conversion.js.map +1 -1
  22. package/dist/branch-progress.d.ts +24 -0
  23. package/dist/branch-progress.d.ts.map +1 -1
  24. package/dist/branch-progress.js +35 -6
  25. package/dist/branch-progress.js.map +1 -1
  26. package/dist/branch-run-record.d.ts +14 -0
  27. package/dist/branch-run-record.d.ts.map +1 -1
  28. package/dist/branch-run-record.js.map +1 -1
  29. package/dist/branch-status.d.ts.map +1 -1
  30. package/dist/branch-status.js +3 -0
  31. package/dist/branch-status.js.map +1 -1
  32. package/dist/cli-arguments.d.ts.map +1 -1
  33. package/dist/cli-arguments.js +1 -0
  34. package/dist/cli-arguments.js.map +1 -1
  35. package/dist/cli-branch-command.d.ts +10 -1
  36. package/dist/cli-branch-command.d.ts.map +1 -1
  37. package/dist/cli-branch-command.js +60 -11
  38. package/dist/cli-branch-command.js.map +1 -1
  39. package/dist/cli-capabilities.d.ts +35 -2
  40. package/dist/cli-capabilities.d.ts.map +1 -1
  41. package/dist/cli-capabilities.js +38 -1
  42. package/dist/cli-capabilities.js.map +1 -1
  43. package/dist/cli-draft-command.d.ts +2 -0
  44. package/dist/cli-draft-command.d.ts.map +1 -1
  45. package/dist/cli-draft-command.js +22 -4
  46. package/dist/cli-draft-command.js.map +1 -1
  47. package/dist/cli-package-command.d.ts +13 -0
  48. package/dist/cli-package-command.d.ts.map +1 -1
  49. package/dist/cli-package-command.js +35 -8
  50. package/dist/cli-package-command.js.map +1 -1
  51. package/dist/cli-progress.d.ts +81 -5
  52. package/dist/cli-progress.d.ts.map +1 -1
  53. package/dist/cli-progress.js +108 -5
  54. package/dist/cli-progress.js.map +1 -1
  55. package/dist/cli-skill-command.d.ts.map +1 -1
  56. package/dist/cli-skill-command.js +27 -12
  57. package/dist/cli-skill-command.js.map +1 -1
  58. package/dist/cli.js +20 -10
  59. package/dist/cli.js.map +1 -1
  60. package/dist/conversion-receipt-store.d.ts +75 -0
  61. package/dist/conversion-receipt-store.d.ts.map +1 -0
  62. package/dist/conversion-receipt-store.js +143 -0
  63. package/dist/conversion-receipt-store.js.map +1 -0
  64. package/dist/conversion-receipt.d.ts +223 -0
  65. package/dist/conversion-receipt.d.ts.map +1 -0
  66. package/dist/conversion-receipt.js +352 -0
  67. package/dist/conversion-receipt.js.map +1 -0
  68. package/dist/draft-adoption.d.ts +48 -0
  69. package/dist/draft-adoption.d.ts.map +1 -0
  70. package/dist/draft-adoption.js +237 -0
  71. package/dist/draft-adoption.js.map +1 -0
  72. package/dist/draft-run.d.ts +10 -0
  73. package/dist/draft-run.d.ts.map +1 -1
  74. package/dist/draft-run.js +16 -4
  75. package/dist/draft-run.js.map +1 -1
  76. package/dist/index.d.ts +1 -1
  77. package/dist/index.d.ts.map +1 -1
  78. package/dist/index.js +1 -1
  79. package/dist/index.js.map +1 -1
  80. package/dist/legacy-skill-catalog.d.ts.map +1 -1
  81. package/dist/legacy-skill-catalog.js +65 -0
  82. package/dist/legacy-skill-catalog.js.map +1 -1
  83. package/dist/package-client.d.ts +28 -0
  84. package/dist/package-client.d.ts.map +1 -1
  85. package/dist/package-client.js +21 -1
  86. package/dist/package-client.js.map +1 -1
  87. package/dist/package-source-refusal.d.ts +17 -0
  88. package/dist/package-source-refusal.d.ts.map +1 -0
  89. package/dist/package-source-refusal.js +61 -0
  90. package/dist/package-source-refusal.js.map +1 -0
  91. package/dist/package-submission.d.ts +43 -1
  92. package/dist/package-submission.d.ts.map +1 -1
  93. package/dist/package-submission.js +32 -7
  94. package/dist/package-submission.js.map +1 -1
  95. package/dist/skill-clients.d.ts +39 -0
  96. package/dist/skill-clients.d.ts.map +1 -0
  97. package/dist/skill-clients.js +156 -0
  98. package/dist/skill-clients.js.map +1 -0
  99. package/dist/skill-installer.d.ts +2 -3
  100. package/dist/skill-installer.d.ts.map +1 -1
  101. package/dist/skill-installer.js +9 -101
  102. package/dist/skill-installer.js.map +1 -1
  103. package/package.json +1 -1
  104. package/skills/design/SKILL.md +6 -3
  105. package/skills/design-branch/SKILL.md +6 -5
  106. package/skills/design-convert/SKILL.md +3 -3
  107. package/skills/design-draft/SKILL.md +3 -3
  108. package/skills/design-search/SKILL.md +3 -3
@@ -1,47 +1,64 @@
1
1
  import { materializeBranchScreens, readMaterializedScreen, stageBranchScreen, stageBranchScreenBytes, } from './branch-downloads.js';
2
- /**
3
- * Delivery. Every screen the run bought is staged first and moved into place in
4
- * ONE atomic pass, so `screens/` goes from empty to complete and a caller can
5
- * never mistake a half-written run for a failed one. Bytes already on disk were
6
- * already paid for, which is what makes a resume free.
7
- */
8
- export const materializeRun = async (args) => {
9
- const screens = new Map();
2
+ export const createRunMaterializer = (args) => {
3
+ const delivered = new Map();
4
+ const inFlight = new Map();
10
5
  const staged = [];
11
- const succeeded = args.plan.screens.filter((screen) => screen.status === 'succeeded');
12
- for (const screen of succeeded) {
6
+ let winner = null;
7
+ const stage = async (slot) => {
13
8
  // Bytes already on disk were already paid for and already delivered.
14
- const materialized = await readMaterializedScreen(args.screensDirectory, screen.slot);
15
- if (materialized) {
16
- screens.set(screen.slot, materialized);
17
- continue;
18
- }
19
- screens.set(screen.slot, await stageBranchScreen({
9
+ const materialized = await readMaterializedScreen(args.screensDirectory, slot);
10
+ if (materialized)
11
+ return materialized;
12
+ const downloaded = await stageBranchScreen({
20
13
  client: args.client,
21
- runId: args.plan.runId,
22
- slot: screen.slot,
14
+ runId: args.runId,
15
+ slot,
23
16
  screensDirectory: args.screensDirectory,
24
17
  ...(args.signal ? { signal: args.signal } : {}),
25
- }));
26
- staged.push(screen.slot);
27
- }
28
- let winner;
29
- if (args.needsWinner) {
30
- winner = await readMaterializedScreen(args.screensDirectory, 'winner') ?? undefined;
31
- if (!winner) {
32
- const bytes = args.inputs.winner.kind === 'image'
33
- ? args.inputs.winner.bytes
34
- : (await args.client.downloadScreen(args.inputs.winner.runId, args.inputs.winner.slot, args.signal)).bytes;
35
- winner = await stageBranchScreenBytes({
36
- screensDirectory: args.screensDirectory,
37
- slot: 'winner',
38
- bytes,
39
- });
40
- staged.push('winner');
18
+ });
19
+ staged.push(slot);
20
+ return downloaded;
21
+ };
22
+ const ensureSlot = async (slot) => {
23
+ const known = delivered.get(slot);
24
+ if (known)
25
+ return known;
26
+ let pending = inFlight.get(slot);
27
+ if (!pending) {
28
+ pending = stage(slot);
29
+ inFlight.set(slot, pending);
41
30
  }
42
- }
43
- // One atomic pass: the screens directory goes from empty to complete.
44
- await materializeBranchScreens(args.screensDirectory, staged);
45
- return { screens, ...(winner ? { winner } : {}) };
31
+ const resolved = await pending;
32
+ delivered.set(slot, resolved);
33
+ return resolved;
34
+ };
35
+ const stageWinner = async () => {
36
+ const materialized = await readMaterializedScreen(args.screensDirectory, 'winner');
37
+ if (materialized)
38
+ return materialized;
39
+ const bytes = args.inputs.winner.kind === 'image'
40
+ ? args.inputs.winner.bytes
41
+ : (await args.client.downloadScreen(args.inputs.winner.runId, args.inputs.winner.slot, args.signal)).bytes;
42
+ const downloaded = await stageBranchScreenBytes({
43
+ screensDirectory: args.screensDirectory,
44
+ slot: 'winner',
45
+ bytes,
46
+ });
47
+ staged.push('winner');
48
+ return downloaded;
49
+ };
50
+ return {
51
+ ensure: async (slots) => {
52
+ await Promise.all(slots.map(ensureSlot));
53
+ return delivered;
54
+ },
55
+ winner: async () => {
56
+ winner ??= stageWinner();
57
+ return await winner;
58
+ },
59
+ finish: async () => {
60
+ await materializeBranchScreens(args.screensDirectory, staged.splice(0));
61
+ },
62
+ };
46
63
  };
47
64
  //# sourceMappingURL=branch-materialize.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"branch-materialize.js","sourceRoot":"","sources":["../src/branch-materialize.ts"],"names":[],"mappings":"AACA,OAAO,EACL,wBAAwB,EACxB,sBAAsB,EACtB,iBAAiB,EACjB,sBAAsB,GAEvB,MAAM,uBAAuB,CAAC;AAI/B;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EAAE,IAOpC,EAA8F,EAAE;IAC/F,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkC,CAAC;IAC1D,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC;IACtF,KAAK,MAAM,MAAM,IAAI,SAAS,EAAE,CAAC;QAC/B,qEAAqE;QACrE,MAAM,YAAY,GAAG,MAAM,sBAAsB,CAAC,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QACtF,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;YACvC,SAAS;QACX,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,iBAAiB,CAAC;YAC/C,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK;YACtB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAChD,CAAC,CAAC,CAAC;QACJ,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAED,IAAI,MAA0C,CAAC;IAC/C,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,MAAM,GAAG,MAAM,sBAAsB,CAAC,IAAI,CAAC,gBAAgB,EAAE,QAAQ,CAAC,IAAI,SAAS,CAAC;QACpF,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,OAAO;gBAC/C,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK;gBAC1B,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,cAAc,CACjC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EACxB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EACvB,IAAI,CAAC,MAAM,CACZ,CAAC,CAAC,KAAK,CAAC;YACX,MAAM,GAAG,MAAM,sBAAsB,CAAC;gBACpC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;gBACvC,IAAI,EAAE,QAAQ;gBACd,KAAK;aACN,CAAC,CAAC;YACH,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IAED,sEAAsE;IACtE,MAAM,wBAAwB,CAAC,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;IAC9D,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AACpD,CAAC,CAAC"}
1
+ {"version":3,"file":"branch-materialize.js","sourceRoot":"","sources":["../src/branch-materialize.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,9 @@
1
1
  import type { ConversionModel } from './conversion-models.js';
2
2
  import type { ResponsiveConversionQuality } from './responsive-quality.js';
3
- import type { BranchDownloadedScreen } from './branch-downloads.js';
4
- import type { BranchNormalizedPlan } from './branch-plan.js';
3
+ import { type BranchDownloadedScreen } from './branch-downloads.js';
4
+ import type { BranchNormalizedPlan, BranchPlannedPage } from './branch-plan.js';
5
5
  import type { BranchCompletionPage } from './branch-run-record.js';
6
+ import { type ConversionReceipt } from './conversion-receipt.js';
6
7
  import type { TwelveUiConversionPackageClient } from './package-client.js';
7
8
  import { type PackageProgressEvent } from './package-submission.js';
8
9
  /**
@@ -11,9 +12,17 @@ import { type PackageProgressEvent } from './package-submission.js';
11
12
  * server never generates it — so the package is what makes the winner and its
12
13
  * continuations one document instead of a pile of separately converted images.
13
14
  *
15
+ * Pages are independent work and run in parallel, bounded: one page per package
16
+ * (a page's viewports already fan out inside the package, and fusing pages into
17
+ * one submission would put every page's assets in one Durable Object's memory),
18
+ * with at most `concurrency` packages in flight so the account's admission slots
19
+ * are spent converting rather than queueing.
20
+ *
14
21
  * A page with a hole in it is parked, not converted: stitching an incomplete
15
22
  * page would silently ship a page that is missing a section. Its siblings still
16
- * convert, because one failed screen must not cost the pages that are whole.
23
+ * convert, because one failed screen must not cost the pages that are whole
24
+ * and for the same reason no page's failure, of any kind, is allowed to abort
25
+ * or orphan a sibling that is already paid for and in flight.
17
26
  */
18
27
  export type BranchConversionSettings = {
19
28
  output: 'html';
@@ -23,17 +32,112 @@ export type BranchConversionSettings = {
23
32
  sourceConversionId?: string;
24
33
  };
25
34
  export declare const WINNER_VIEWPORT_ID = "winner";
35
+ export declare const DEFAULT_PACKAGE_MODEL = "standard";
26
36
  type PageConversion = NonNullable<BranchCompletionPage['conversion']>;
27
- export declare const convertBranchPages: (args: {
37
+ /** The winner's own child conversion, once the package has proved it. */
38
+ export type BranchWinnerConversion = {
39
+ sha256: string;
40
+ conversionId: string;
41
+ model: string;
42
+ /**
43
+ * The package's own expiry, which the child cannot outlive backwards: a
44
+ * viewport child is admitted during the drive with the same artifact TTL, so
45
+ * it expires at or after the package that bought it. Reporting the package's
46
+ * is the conservative fact, and a receipt without one would be a claim whose
47
+ * liveness nothing proves.
48
+ */
49
+ expiresAt: string;
50
+ };
51
+ /** One reuse claim the server refused, and the reason it gave. */
52
+ export type BranchReuseDisproof = {
53
+ viewportId: string;
54
+ conversionId: string;
55
+ detail: string;
56
+ /**
57
+ * The receipt key the claim would have come from — the digest of the bytes
58
+ * this viewport submitted and the model the page declares. Carried because
59
+ * receipts are stored by that key rather than beside an image, so this is
60
+ * what the run needs to withdraw the disproven record.
61
+ */
62
+ sha256: string;
63
+ model: string;
64
+ };
65
+ export type BranchPageConversionArgs = {
28
66
  client: TwelveUiConversionPackageClient;
29
67
  plan: BranchNormalizedPlan;
68
+ page: BranchPlannedPage;
69
+ screens: ReadonlyMap<string, BranchDownloadedScreen>;
70
+ winner?: BranchDownloadedScreen;
71
+ settings: BranchConversionSettings;
72
+ pagesDirectory: string;
73
+ timeoutMs?: number;
74
+ /**
75
+ * Proved conversions of the approved design this run already read from 0.2.15
76
+ * sidecars beside the winner. The per-user store is consulted on top of them,
77
+ * by digest, once the bytes about to be submitted are known.
78
+ */
79
+ winnerReceipts?: readonly ConversionReceipt[];
80
+ /** The per-user receipt store. Defaults to the real one; tests inject. */
81
+ receiptStore?: string;
82
+ onProgress?: (event: PackageProgressEvent) => void;
83
+ onWinnerConversion?: (conversion: BranchWinnerConversion) => void;
84
+ /** A reuse the server refused, so the proof it came from can be withdrawn. */
85
+ onReuseDisproven?: (disproof: BranchReuseDisproof) => void;
86
+ signal?: AbortSignal;
87
+ };
88
+ /**
89
+ * The reuse claim, gated on proof rather than on intent.
90
+ *
91
+ * A normalized winner is no longer the bytes any earlier conversion was
92
+ * admitted with, so a declared `--source-conversion-id` would assert a digest
93
+ * the server will disprove and turn a convertible page into a failed one. A
94
+ * receipt is keyed on the bytes actually submitted, so it survives
95
+ * normalization — the same approved design reconciled to the same server canvas
96
+ * produces the same bytes — and it is only honoured on an exact digest match.
97
+ */
98
+ export declare const winnerReuseConversionId: (args: {
99
+ settings: BranchConversionSettings;
100
+ submittedSha256: string;
101
+ normalized: boolean;
102
+ receipts: readonly ConversionReceipt[];
103
+ runId: string;
104
+ model: string;
105
+ store?: string;
106
+ }) => Promise<string | undefined>;
107
+ export declare const convertBranchPage: (args: BranchPageConversionArgs) => Promise<PageConversion>;
108
+ /** What a page needs before it can be submitted, resolved when its slot opens. */
109
+ export type BranchPageInputs = {
30
110
  screens: ReadonlyMap<string, BranchDownloadedScreen>;
31
111
  winner?: BranchDownloadedScreen;
112
+ };
113
+ export type BranchPageConversionPool = {
114
+ /** Enqueue a page. A page already enqueued is never submitted twice. */
115
+ start: (plan: BranchNormalizedPlan, page: BranchPlannedPage) => void;
116
+ /** Resolves once every enqueued page has settled, one way or the other. */
117
+ settled: () => Promise<Map<string, PageConversion>>;
118
+ };
119
+ /**
120
+ * The one owner of "which pages are converting, and how many at once".
121
+ *
122
+ * Pages are handed in as they become eligible rather than all at the end, so a
123
+ * page whose screens landed in the first wave is already converting while the
124
+ * rest of the run is still generating. `prepare` runs inside the page's own
125
+ * slot, which is what keeps a delivery for a page that has not started from
126
+ * competing with the packages that are already paid for.
127
+ */
128
+ export declare const createBranchPageConversions: (args: {
129
+ client: TwelveUiConversionPackageClient;
32
130
  settings: BranchConversionSettings;
33
131
  pagesDirectory: string;
132
+ prepare: (page: BranchPlannedPage, plan: BranchNormalizedPlan) => Promise<BranchPageInputs>;
133
+ concurrency?: number;
34
134
  timeoutMs?: number;
135
+ winnerReceipts?: readonly ConversionReceipt[];
136
+ receiptStore?: string;
35
137
  onProgress?: (pageId: string, event: PackageProgressEvent) => void;
138
+ onWinnerConversion?: (conversion: BranchWinnerConversion) => void;
139
+ onReuseDisproven?: (disproof: BranchReuseDisproof) => void;
36
140
  signal?: AbortSignal;
37
- }) => Promise<Map<string, PageConversion>>;
141
+ }) => BranchPageConversionPool;
38
142
  export {};
39
143
  //# sourceMappingURL=branch-page-conversion.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"branch-page-conversion.d.ts","sourceRoot":"","sources":["../src/branch-page-conversion.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAC;AAE3E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,qBAAqB,CAAC;AAM3E,OAAO,EAGL,KAAK,oBAAoB,EAE1B,MAAM,yBAAyB,CAAC;AAEjC;;;;;;;;;GASG;AAEH,MAAM,MAAM,wBAAwB,GAAG;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,iBAAiB,CAAC,EAAE,2BAA2B,CAAC;IAChD,6EAA6E;IAC7E,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B,CAAC;AAEF,eAAO,MAAM,kBAAkB,WAAW,CAAC;AAE3C,KAAK,cAAc,GAAG,WAAW,CAAC,oBAAoB,CAAC,YAAY,CAAC,CAAC,CAAC;AActE,eAAO,MAAM,kBAAkB,GAAU,MAAM;IAC7C,MAAM,EAAE,+BAA+B,CAAC;IACxC,IAAI,EAAE,oBAAoB,CAAC;IAC3B,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;IACrD,MAAM,CAAC,EAAE,sBAAsB,CAAC;IAChC,QAAQ,EAAE,wBAAwB,CAAC;IACnC,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,oBAAoB,KAAK,IAAI,CAAC;IACnE,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB,KAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAkMtC,CAAC"}
1
+ {"version":3,"file":"branch-page-conversion.d.ts","sourceRoot":"","sources":["../src/branch-page-conversion.ts"],"names":[],"mappings":"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"}