youiyoux 0.1.3 → 0.1.4

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 (211) hide show
  1. package/README.md +10 -0
  2. package/dist/chunks/{chunk-S7UV34H5.js → chunk-42YJX3W5.js} +1 -3
  3. package/dist/chunks/{chunk-74KBRI2H.js → chunk-4BBYLTZX.js} +10 -10
  4. package/dist/chunks/chunk-52KOKYY6.js +8710 -0
  5. package/dist/chunks/chunk-FJZFCAL5.js +129 -0
  6. package/dist/chunks/chunk-FVVL5JCY.js +24 -0
  7. package/dist/chunks/{chunk-UEB6MJDX.js → chunk-M5XZWCPS.js} +176 -61
  8. package/dist/chunks/{chunk-C3TSTYP7.js → chunk-NYDJYMID.js} +212 -26
  9. package/dist/chunks/{chunk-OIHNEGWH.js → chunk-RDTHHRZN.js} +96 -142
  10. package/dist/chunks/{chunk-E4HNK7VF.js → chunk-WNTS7ZO4.js} +1 -1
  11. package/dist/chunks/chunk-XAEMVEYX.js +188 -0
  12. package/dist/chunks/{chunk-RTOTNSOV.js → chunk-YFCMTTXS.js} +600 -506
  13. package/dist/chunks/chunk-YJ7WMBTT.js +13761 -0
  14. package/dist/chunks/src-5IP4NGKT.js +115 -0
  15. package/dist/chunks/{src-U5NTDPUX.js → src-6CJR547Y.js} +11 -35
  16. package/dist/chunks/{src-YGEZCUAO.js → src-BPETAFLW.js} +134 -77
  17. package/dist/chunks/{src-ZS76UD7E.js → src-LLV7IY6W.js} +27 -16
  18. package/dist/chunks/src-RHNZELGE.js +306 -0
  19. package/dist/chunks/{src-YUC5PIDK.js → src-SFKFERZ2.js} +14 -8
  20. package/dist/chunks/{src-DS43LCRA.js → src-VL2ZYO6X.js} +4 -4
  21. package/dist/hub/assets/Badge-CUJUit4d.js +1 -0
  22. package/dist/hub/assets/CandidatePanel-CnbK4S0j.js +1 -0
  23. package/dist/hub/assets/CatalogScreen-B5OVL-AR.js +1 -0
  24. package/dist/hub/assets/ChangesScreen-GwGqJwxN.js +1 -0
  25. package/dist/hub/assets/CheatSheet-BLSOq-xa.js +1 -0
  26. package/dist/hub/assets/CodeBlock-CsiGFgvI.js +1 -0
  27. package/dist/hub/assets/CommandPalette-CAWQfdXJ.js +1 -0
  28. package/dist/hub/assets/CopyButton-DE8drl4P.js +1 -0
  29. package/dist/hub/assets/Disclosure-B1kTgPgk.js +1 -0
  30. package/dist/hub/assets/DiscoverScreen-Tl_Z6mgY.js +2 -0
  31. package/dist/hub/assets/DraftEditor-yIDapXTs.js +5 -0
  32. package/dist/hub/assets/Field-LwrJXoOs.js +1 -0
  33. package/dist/hub/assets/GapsScreen-DXZAlm6v.js +1 -0
  34. package/dist/hub/assets/HomeScreen-CEpiVhOa.js +1 -0
  35. package/dist/hub/assets/InventoryScreen-CEG3Pmw_.js +1 -0
  36. package/dist/hub/assets/KindIcon-BJ6bz-ny.js +1 -0
  37. package/dist/hub/assets/LibraryScreen-IaVnxrX9.js +1 -0
  38. package/dist/hub/assets/LicenceBadge-CLCUMMHE.js +1 -0
  39. package/dist/hub/assets/Opened-DJyf4Hnj.js +1 -0
  40. package/dist/hub/assets/Preview-C069zVMP.js +1 -0
  41. package/dist/hub/assets/RuleDetail-B4g2-TRe.js +3 -0
  42. package/dist/hub/assets/RulesScreen-CAaXIWjO.js +3 -0
  43. package/dist/hub/assets/ScreenImage-DcI7_G3O.js +1 -0
  44. package/dist/hub/assets/ScreensScreen-DwczCjZD.js +1 -0
  45. package/dist/hub/assets/SearchField-DaCpNAj6.js +1 -0
  46. package/dist/hub/assets/Section-BTnvUq_W.js +1 -0
  47. package/dist/hub/assets/Segmented-Dzi1x49S.js +1 -0
  48. package/dist/hub/assets/ServiceDown-Bv-BPXro.js +1 -0
  49. package/dist/hub/assets/SpecimenCapture-DlsjshVE.js +1 -0
  50. package/dist/hub/assets/Specimens-C-lHp7sr.js +2 -0
  51. package/dist/hub/assets/StackScreen-DkmELsqR.js +1 -0
  52. package/dist/hub/assets/StubScreens-Bt7lWLVK.js +1 -0
  53. package/dist/hub/assets/StyleScreen-tq1tbRBo.js +1 -0
  54. package/dist/hub/assets/Swatch-KDz4qxdM.js +1 -0
  55. package/dist/hub/assets/Tabs-1QQDS0I6.js +1 -0
  56. package/dist/hub/assets/TokenDetail-DvCw6GqC.js +1 -0
  57. package/dist/hub/assets/TokenValue-CsPRc2ai.js +1 -0
  58. package/dist/hub/assets/TokensScreen-DoENV8Xy.js +1 -0
  59. package/dist/hub/assets/arrow-right-DcbNDzqs.js +1 -0
  60. package/dist/hub/assets/bot-B3gC9oUR.js +1 -0
  61. package/dist/hub/assets/button-6mvMVtpb.js +1 -0
  62. package/dist/hub/assets/button.demo-DuU0DQbv.js +1 -0
  63. package/dist/hub/assets/card.demo-CufAxMAA.js +1 -0
  64. package/dist/hub/assets/chevron-down-CzN07vMi.js +1 -0
  65. package/dist/hub/assets/circle-alert-DT2LC4yf.js +1 -0
  66. package/dist/hub/assets/circle-check-DkwBMT62.js +1 -0
  67. package/dist/hub/assets/client-D7whEyep.js +1 -0
  68. package/dist/hub/assets/clsx-DB0hHKMi.js +1 -0
  69. package/dist/hub/assets/compass-BkKOZPYe.js +1 -0
  70. package/dist/hub/assets/contrast-BkNHUAPa.js +1 -0
  71. package/dist/hub/assets/createLucideIcon-CGDJWtKO.js +1 -0
  72. package/dist/hub/assets/discover-XjJEViwk.js +1 -0
  73. package/dist/hub/assets/dist-BYQYaPBV.js +1 -0
  74. package/dist/hub/assets/dist-Bk4srtDn.js +41 -0
  75. package/dist/hub/assets/dist-BogNzeK9.js +1 -0
  76. package/dist/hub/assets/dist-D0z7Bvsy.js +1 -0
  77. package/dist/hub/assets/download-BQI-Si9R.js +1 -0
  78. package/dist/hub/assets/engine-CMmt9yEz.js +1 -0
  79. package/dist/hub/assets/esm-NPpg23M8.js +1 -0
  80. package/dist/hub/assets/family-tiles-CyTdy_cP.js +1 -0
  81. package/dist/hub/assets/format-DxAYNTN_.js +1 -0
  82. package/dist/hub/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2 +0 -0
  83. package/dist/hub/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2 +0 -0
  84. package/dist/hub/assets/geist-latin-core-vkBVTr4s.woff2 +0 -0
  85. package/dist/hub/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2 +0 -0
  86. package/dist/hub/assets/geist-latin-wght-normal-BgDaEnEv.woff2 +0 -0
  87. package/dist/hub/assets/geist-mono-cyrillic-ext-wght-normal-X_5orZeX.woff2 +0 -0
  88. package/dist/hub/assets/geist-mono-cyrillic-wght-normal-DiZS0aHC.woff2 +0 -0
  89. package/dist/hub/assets/geist-mono-latin-core-DccGGzmg.woff2 +0 -0
  90. package/dist/hub/assets/geist-mono-latin-ext-wght-normal-Bwz-egvJ.woff2 +0 -0
  91. package/dist/hub/assets/geist-mono-latin-wght-normal-XN7g48iV.woff2 +0 -0
  92. package/dist/hub/assets/geist-mono-symbols2-wght-normal-CO5SzqOn.woff2 +0 -0
  93. package/dist/hub/assets/geist-mono-vietnamese-wght-normal-DadHysG0.woff2 +0 -0
  94. package/dist/hub/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2 +0 -0
  95. package/dist/hub/assets/git-pull-request-arrow-RqUUIRCU.js +1 -0
  96. package/dist/hub/assets/input.demo-238gqWpz.js +1 -0
  97. package/dist/hub/assets/inventory-BI8QBdar.js +1 -0
  98. package/dist/hub/assets/inventory-source-lZYzcA8O.js +1 -0
  99. package/dist/hub/assets/jsx-runtime-D6zNwnaE.js +9 -0
  100. package/dist/hub/assets/layers-DfzdK_wG.js +1 -0
  101. package/dist/hub/assets/layout-grid-xFY9L9Oc.js +1 -0
  102. package/dist/hub/assets/library-W5R8GwvG.js +1 -0
  103. package/dist/hub/assets/main-7snyIdoi.css +2 -0
  104. package/dist/hub/assets/main-B9CIkk5m.js +2 -0
  105. package/dist/hub/assets/minus-BDifFhOo.js +1 -0
  106. package/dist/hub/assets/monitor-X_lELkcU.js +1 -0
  107. package/dist/hub/assets/mouse-pointer-click-CVJ6hWg8.js +1 -0
  108. package/dist/hub/assets/paintbrush-DOkEgSTO.js +1 -0
  109. package/dist/hub/assets/plural-BbGQPQKA.js +1 -0
  110. package/dist/hub/assets/preview-BA8CPsKb.css +2 -0
  111. package/dist/hub/assets/preview-DUm13vr1.js +3 -0
  112. package/dist/hub/assets/protocol-caP6umNL.js +1 -0
  113. package/dist/hub/assets/react-DB-4Zxce.js +1 -0
  114. package/dist/hub/assets/shield-check-0ka0kQct.js +1 -0
  115. package/dist/hub/assets/trash-B7aEfJps.js +1 -0
  116. package/dist/hub/assets/triangle-alert-Dkdi9eDR.js +1 -0
  117. package/dist/hub/assets/try-live-zX3CSd3P.js +1 -0
  118. package/dist/hub/assets/utils-BoaXfs8y.js +1 -0
  119. package/dist/hub/assets/values-DzxR_TlI.js +1 -0
  120. package/dist/hub/assets/worker-Bh-wSp42.js +1 -0
  121. package/dist/hub/assets/workflow-jpV8wh-U.js +1 -0
  122. package/dist/hub/assets/x-MLbFVa4v.js +1 -0
  123. package/dist/hub/favicon.svg +1 -0
  124. package/dist/hub/index.html +35 -0
  125. package/dist/hub/kit/candidates.json +1 -0
  126. package/dist/hub/kit/chunks/chunk-2NYFUOIV.js +14 -0
  127. package/dist/hub/kit/chunks/chunk-DCANE7XH.js +1 -0
  128. package/dist/hub/kit/chunks/chunk-FTGHCY4I.js +14 -0
  129. package/dist/hub/kit/chunks/chunk-IBF3UTJF.js +33 -0
  130. package/dist/hub/kit/chunks/chunk-LLXY4VSH.js +1 -0
  131. package/dist/hub/kit/chunks/chunk-PUPZMW4P.js +14 -0
  132. package/dist/hub/kit/chunks/chunk-PWLNZQET.js +1 -0
  133. package/dist/hub/kit/chunks/chunk-ULXWVOKJ.js +1 -0
  134. package/dist/hub/kit/chunks/chunk-WM4BGGMK.js +1 -0
  135. package/dist/hub/kit/chunks/chunk-ZQUNRK72.js +1 -0
  136. package/dist/hub/kit/class-variance-authority.js +1 -0
  137. package/dist/hub/kit/clsx.js +1 -0
  138. package/dist/hub/kit/fonts/geist-cyrillic-ext-wght-normal.woff2 +0 -0
  139. package/dist/hub/kit/fonts/geist-cyrillic-wght-normal.woff2 +0 -0
  140. package/dist/hub/kit/fonts/geist-latin-ext-wght-normal.woff2 +0 -0
  141. package/dist/hub/kit/fonts/geist-latin-wght-normal.woff2 +0 -0
  142. package/dist/hub/kit/fonts/geist-vietnamese-wght-normal.woff2 +0 -0
  143. package/dist/hub/kit/frame.css.src +73 -0
  144. package/dist/hub/kit/frame.js +2 -0
  145. package/dist/hub/kit/lucide-react.js +1878 -0
  146. package/dist/hub/kit/preview.html +13 -0
  147. package/dist/hub/kit/radix-ui-react-dialog.js +41 -0
  148. package/dist/hub/kit/radix-ui-react-label.js +1 -0
  149. package/dist/hub/kit/radix-ui-react-separator.js +1 -0
  150. package/dist/hub/kit/radix-ui-react-slot.js +1 -0
  151. package/dist/hub/kit/radix-ui-react-switch.js +1 -0
  152. package/dist/hub/kit/radix-ui-react-tabs.js +1 -0
  153. package/dist/hub/kit/react-dom-client.js +1 -0
  154. package/dist/hub/kit/react-dom.js +1 -0
  155. package/dist/hub/kit/react-jsx-runtime.js +1 -0
  156. package/dist/hub/kit/react.js +1 -0
  157. package/dist/hub/kit/tailwind-merge.js +1 -0
  158. package/dist/hub/kit/tailwindcss/index.css +950 -0
  159. package/dist/hub/kit/tailwindcss/preflight.css +398 -0
  160. package/dist/hub/kit/tailwindcss/theme.css +510 -0
  161. package/dist/hub/kit/tailwindcss/utilities.css +1 -0
  162. package/dist/hub-demo/frame/button.demo.js +1 -0
  163. package/dist/hub-demo/frame/card.demo.js +1 -0
  164. package/dist/hub-demo/frame/demos.js +6 -0
  165. package/dist/hub-demo/frame/frame.css +770 -0
  166. package/dist/hub-demo/frame/input.demo.js +1 -0
  167. package/dist/hub-demo/preview/components/button.demo.tsx +47 -0
  168. package/dist/hub-demo/preview/components/button.tsx +31 -0
  169. package/dist/hub-demo/preview/components/card.demo.tsx +26 -0
  170. package/dist/hub-demo/preview/components/card.tsx +20 -0
  171. package/dist/hub-demo/preview/components/input.demo.tsx +39 -0
  172. package/dist/hub-demo/preview/components/input.tsx +19 -0
  173. package/dist/hub-demo/preview/components/utils.ts +5 -0
  174. package/dist/hub-demo/preview/system.css +161 -0
  175. package/dist/hub-demo/public/data/demo-app.usage.bedd9c82fe.json +1 -0
  176. package/dist/hub-demo/public/data/demo.catalog.a605de2281.json +1 -0
  177. package/dist/hub-demo/public/data/gaps.129a93538d.json +1 -0
  178. package/dist/hub-demo/public/data/inventory.165a4f6408.json +1 -0
  179. package/dist/hub-demo/public/data/inventory.console.badge.ad0238784e.json +1 -0
  180. package/dist/hub-demo/public/data/inventory.console.button.3249daff35.json +1 -0
  181. package/dist/hub-demo/public/data/inventory.console.card.9ea88708ac.json +1 -0
  182. package/dist/hub-demo/public/data/inventory.console.dialog.8b6574d93a.json +1 -0
  183. package/dist/hub-demo/public/data/inventory.console.input.bdffb756a7.json +1 -0
  184. package/dist/hub-demo/public/data/inventory.console.link-as-button.1ce7faa1f3.json +1 -0
  185. package/dist/hub-demo/public/data/inventory.console.tabs.813e694c44.json +1 -0
  186. package/dist/hub-demo/public/data/inventory.extras.e5d06c6ff4.json +1 -0
  187. package/dist/hub-demo/public/data/inventory.site.badge.047a68f644.json +1 -0
  188. package/dist/hub-demo/public/data/inventory.site.button.720938384e.json +1 -0
  189. package/dist/hub-demo/public/data/inventory.site.card.d8df5f6873.json +1 -0
  190. package/dist/hub-demo/public/data/inventory.site.link-as-button.9c1f8a55bf.json +1 -0
  191. package/dist/hub-demo/public/data/inventory.site.tabs.59bd0200b9.json +1 -0
  192. package/dist/hub-demo/public/data/manifest.json +39 -0
  193. package/dist/hub-demo/public/data/specimens.console.dark.046471907d.css +786 -0
  194. package/dist/hub-demo/public/data/specimens.console.light.aaffa2d213.css +786 -0
  195. package/dist/hub-demo/public/data/specimens.site.dark.94a6706908.css +92 -0
  196. package/dist/hub-demo/public/data/specimens.site.light.3ddbc8d28d.css +92 -0
  197. package/dist/hub-demo/public/previews/button.dark.webp +0 -0
  198. package/dist/hub-demo/public/previews/button.light.webp +0 -0
  199. package/dist/hub-demo/public/previews/card.dark.webp +0 -0
  200. package/dist/hub-demo/public/previews/card.light.webp +0 -0
  201. package/dist/hub-demo/public/previews/input.dark.webp +0 -0
  202. package/dist/hub-demo/public/previews/input.light.webp +0 -0
  203. package/dist/hub-previews.js +173 -0
  204. package/dist/hub-server.js +6329 -0
  205. package/dist/hub-snapshot.js +573 -0
  206. package/dist/schema/youi.gaps.schema.json +235 -0
  207. package/dist/tailwind-worker.js +3 -3
  208. package/dist/youi.js +10 -8
  209. package/dist/youiyoux.js +10 -8
  210. package/package.json +4 -4
  211. package/dist/chunks/chunk-L5BV4PI7.js +0 -22159
@@ -1,10 +1,10 @@
1
- import { createRequire as __youiRequire } from "node:module"; const require = __youiRequire(import.meta.url);
1
+ import { createRequire as __youiRequire } from "node:module"; import { dirname as __youiDir } from "node:path"; import { fileURLToPath as __youiPath } from "node:url"; const require = __youiRequire(import.meta.url); const __youiDirname = __youiDir(__youiPath(import.meta.url));
2
2
  import {
3
3
  __commonJS,
4
4
  __export,
5
5
  __require,
6
6
  __toESM
7
- } from "./chunk-E4HNK7VF.js";
7
+ } from "./chunk-WNTS7ZO4.js";
8
8
 
9
9
  // ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/dist/nodes/identity.js
10
10
  var require_identity = __commonJS({
@@ -7336,6 +7336,9 @@ var require_dist = __commonJS({
7336
7336
  }
7337
7337
  });
7338
7338
 
7339
+ // ../core/src/detect.ts
7340
+ import { posix } from "node:path";
7341
+
7339
7342
  // ../../node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/classic/external.js
7340
7343
  var external_exports = {};
7341
7344
  __export(external_exports, {
@@ -27005,7 +27008,6 @@ function date4(params) {
27005
27008
  }
27006
27009
 
27007
27010
  // ../core/src/detect.ts
27008
- import { posix } from "node:path";
27009
27011
  var IsoTime = external_exports.string().datetime({ offset: true });
27010
27012
  var ShotPath = external_exports.string().min(1).refine((p) => !p.startsWith("/") && !posix.normalize(p.replace(/\\/g, "/")).split("/").includes(".."), "expected a path relative to the report, without ..");
27011
27013
  var DETECT_CONFIDENCE = ["high", "medium", "low"];
@@ -27094,6 +27096,34 @@ var DetectReport = external_exports.object({
27094
27096
  notes: external_exports.array(external_exports.string()).default([])
27095
27097
  });
27096
27098
 
27099
+ // ../core/src/detect-draft.ts
27100
+ function sourceSlug(name) {
27101
+ const slug = name.toLowerCase().replace(/^www\./, "").replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "");
27102
+ if (!slug) return "site";
27103
+ return /^[a-z]/.test(slug) ? slug : `site-${slug}`;
27104
+ }
27105
+ function nameSlug(text) {
27106
+ return text.toLowerCase().replace(/[^a-z0-9.]+/g, "-").replace(/^-+|-+$/g, "") || "item";
27107
+ }
27108
+ var capital = (word) => word.charAt(0).toUpperCase() + word.slice(1);
27109
+ function draftLibraryItem(report, element, ingestedAt = (/* @__PURE__ */ new Date()).toISOString()) {
27110
+ const site = report.target.name;
27111
+ const library = report.libraries.find((l) => l.id === element.library) ?? { id: element.library, name: element.library };
27112
+ const url2 = element.page ?? report.pages.find((p) => p.status === "ok")?.url ?? (report.target.kind === "site" ? report.target.inputs[0] : void 0);
27113
+ const summary = `Seen on ${site}, likely ${library.name}`;
27114
+ return {
27115
+ schema: "youi.library/v1",
27116
+ id: `lib:${sourceSlug(site)}/component/${nameSlug(`${library.id}-${element.type}`)}`,
27117
+ name: `${library.name} ${capital(element.type)}`,
27118
+ kind: "component",
27119
+ stage: "library",
27120
+ summary: summary.length > 200 ? `${summary.slice(0, 199)}\u2026` : summary,
27121
+ source: { name: site, ...url2 && /^https?:\/\//.test(url2) ? { url: url2 } : {}, ingestedAt },
27122
+ categories: [element.type, `detected:${element.confidence}`],
27123
+ swapsWith: []
27124
+ };
27125
+ }
27126
+
27097
27127
  // ../core/src/diff.ts
27098
27128
  function lcsOps(a, b, aStart, bStart) {
27099
27129
  const n = a.length;
@@ -27278,6 +27308,64 @@ async function readTextOrNull(file2) {
27278
27308
  }
27279
27309
  }
27280
27310
 
27311
+ // ../core/src/gaps.ts
27312
+ var IsoTime2 = external_exports.string().datetime({ offset: true });
27313
+ var GAP_STATUSES = ["system", "library", "hand-built", "missing"];
27314
+ var GapCandidate = external_exports.object({
27315
+ /** The Discover id (`lib:shadcn/component/calendar`). */
27316
+ id: external_exports.string(),
27317
+ name: external_exports.string(),
27318
+ /** Its registry or `npm`. */
27319
+ source: external_exports.string(),
27320
+ /** An SPDX id; unknown licences are never offered. */
27321
+ licence: external_exports.string(),
27322
+ /** GPL or AGPL: shipping it releases your code under the same licence. */
27323
+ copyleft: external_exports.boolean(),
27324
+ install: external_exports.string().nullable()
27325
+ });
27326
+ var GapConcept = external_exports.object({
27327
+ /** Discover's concept id (`date-picker`). */
27328
+ concept: external_exports.string(),
27329
+ /** How people call it (`date picker`). */
27330
+ name: external_exports.string(),
27331
+ status: external_exports.enum(GAP_STATUSES),
27332
+ /** The System's components for it. */
27333
+ system: external_exports.array(external_exports.string()),
27334
+ /** The packages that provide it: imported, or declared for it in package.json. */
27335
+ packages: external_exports.array(external_exports.string()),
27336
+ /** The project's own components named for it, first few. */
27337
+ definitions: external_exports.array(external_exports.object({ name: external_exports.string(), file: external_exports.string(), line: external_exports.number().int().positive() })),
27338
+ /** Components named for it, and the looks they and styled native elements of its kind render. */
27339
+ count: external_exports.number().int().nonnegative(),
27340
+ uses: external_exports.number().int().nonnegative(),
27341
+ files: external_exports.number().int().nonnegative(),
27342
+ /** For what is hand-built or missing; null when the Discover index is not synced (never "none"). */
27343
+ candidates: external_exports.array(GapCandidate).nullable()
27344
+ });
27345
+ var GapsProject = external_exports.object({
27346
+ id: external_exports.string(),
27347
+ /** False when the inventory could not read every file: hand-built counts are then a lower bound. */
27348
+ complete: external_exports.boolean(),
27349
+ /** Whether its package.json was read (its declared packages count as libraries). */
27350
+ dependencies: external_exports.enum(["read", "unread"]),
27351
+ /** Hand-built first (most uses first), then missing, from a library, in the System. */
27352
+ concepts: external_exports.array(GapConcept)
27353
+ });
27354
+ var GapsReport = external_exports.object({
27355
+ $schema: external_exports.string().optional(),
27356
+ schema: external_exports.literal("youi.gaps/v1"),
27357
+ generatedAt: IsoTime2,
27358
+ /** The System the projects follow, when they follow one. */
27359
+ system: external_exports.string().nullable(),
27360
+ /** synced: candidates come from the local Discover index; not-synced: there are none to offer yet. */
27361
+ discover: external_exports.enum(["synced", "not-synced"]),
27362
+ /** The kinds a project is expected to have (the standard kit): only these are ever "missing". */
27363
+ kit: external_exports.array(external_exports.string()),
27364
+ projects: external_exports.array(GapsProject),
27365
+ /** Kinds hand-built in more than one project, most uses first. */
27366
+ across: external_exports.array(external_exports.object({ concept: external_exports.string(), name: external_exports.string(), projects: external_exports.array(external_exports.string()), uses: external_exports.number().int().nonnegative() }))
27367
+ });
27368
+
27281
27369
  // ../core/src/hash.ts
27282
27370
  import { createHash } from "node:crypto";
27283
27371
  function sha256(content) {
@@ -27295,7 +27383,11 @@ function stableStringify(value) {
27295
27383
  });
27296
27384
  }
27297
27385
 
27386
+ // ../core/src/hierarchy.ts
27387
+ import { join as join2 } from "node:path";
27388
+
27298
27389
  // ../core/src/ids.ts
27390
+ var ELEMENT_KINDS = ["token", "component", "rule", "migration"];
27299
27391
  var ID_PATTERN = /^youi:([a-z][a-z0-9-]*)\/(token|component|rule|migration)\/([a-z0-9][a-z0-9.\-]*)$/;
27300
27392
  var ElementId = external_exports.string().regex(ID_PATTERN, "expected youi:<system>/<kind>/<name>");
27301
27393
  function parseId(id) {
@@ -27303,6 +27395,10 @@ function parseId(id) {
27303
27395
  if (!match) return null;
27304
27396
  return { system: match[1], kind: match[2], name: match[3] };
27305
27397
  }
27398
+ var ruleSlug = (id) => id.slice(id.indexOf("/rule/") + 6);
27399
+ function formatId(system, kind, name) {
27400
+ return `youi:${system}/${kind}/${name}`;
27401
+ }
27306
27402
  function matchesQuery(id, query) {
27307
27403
  const parsed = parseId(id);
27308
27404
  if (!parsed) return false;
@@ -27314,7 +27410,6 @@ function safeId(id) {
27314
27410
  }
27315
27411
 
27316
27412
  // ../core/src/hierarchy.ts
27317
- import { join as join2 } from "node:path";
27318
27413
  var ELEMENT_STAGES = ["library", "candidate", "adopted", "in-use"];
27319
27414
  var ElementStage = external_exports.enum(ELEMENT_STAGES);
27320
27415
  var LIBRARY_STAGES = ["library", "candidate"];
@@ -27331,7 +27426,7 @@ var STAGE_MOVES = [
27331
27426
  function canMove(from, to, actor) {
27332
27427
  return STAGE_MOVES.some((move) => move.from === from && move.to === to && move.by.includes(actor));
27333
27428
  }
27334
- var MCP_TOOLS = ["system_search", "system_get_component", "system_get_tokens", "system_get_rules", "system_where_used", "system_screen_bom", "system_check", "system_plan", "library_search", "library_request", "discover_search", "discover_show", "index_where_used", "index_swap_impact", "index_rule_covers", "ui_find_component", "ui_render", "requests_list", "request_reply", "request_addressed"];
27429
+ var MCP_TOOLS = ["system_search", "system_get_component", "system_get_tokens", "system_get_rules", "system_where_used", "system_screen_bom", "system_check", "system_plan", "library_search", "library_request", "discover_search", "discover_show", "index_where_used", "index_swap_impact", "index_rule_covers", "ui_find_component", "ui_render", "requests_list", "request_reply", "request_addressed", "screens_capture"];
27335
27430
  var LIBRARY_KINDS = ["component", "token", "pattern"];
27336
27431
  var LIBRARY_ID_PATTERN = /^lib:([a-z][a-z0-9-]*)\/(component|token|pattern)\/([a-z0-9][a-z0-9.\-]*)$/;
27337
27432
  var LibraryId = external_exports.string().regex(LIBRARY_ID_PATTERN, "expected lib:<source>/<kind>/<name>");
@@ -27406,8 +27501,14 @@ async function loadLibrary(root) {
27406
27501
  return { entries };
27407
27502
  }
27408
27503
 
27504
+ // ../core/src/licence.ts
27505
+ function copyleft(spdx) {
27506
+ const strong = (part) => part.split(/\s+(?:AND|WITH)\s+/).some((id) => /^A?GPL-/.test(id.replace(/[()]/g, "").trim()));
27507
+ return spdx.split(/\s+OR\s+/).every(strong);
27508
+ }
27509
+
27409
27510
  // ../core/src/requests.ts
27410
- var IsoTime2 = external_exports.string().datetime({ offset: true });
27511
+ var IsoTime3 = external_exports.string().datetime({ offset: true });
27411
27512
  var REQUEST_ID = /^r-[0-9a-f]{10}$/;
27412
27513
  var REQUEST_STATUSES = ["open", "addressed", "closed"];
27413
27514
  var RequestAuthor = external_exports.object({ kind: external_exports.enum(["person", "agent"]), name: external_exports.string().min(1).max(100) });
@@ -27431,7 +27532,7 @@ var RequestTarget = external_exports.object({
27431
27532
  });
27432
27533
  var RequestEntry = external_exports.object({
27433
27534
  author: RequestAuthor,
27434
- at: IsoTime2,
27535
+ at: IsoTime3,
27435
27536
  body: external_exports.string().max(4e3),
27436
27537
  /** A status change this entry made, if any. */
27437
27538
  status: external_exports.enum(REQUEST_STATUSES).optional()
@@ -27447,14 +27548,17 @@ var RequestDoc = external_exports.object({
27447
27548
  status: external_exports.enum(REQUEST_STATUSES),
27448
27549
  body: external_exports.string().min(1).max(4e3),
27449
27550
  author: RequestAuthor,
27450
- createdAt: IsoTime2,
27451
- updatedAt: IsoTime2,
27551
+ createdAt: IsoTime3,
27552
+ updatedAt: IsoTime3,
27452
27553
  target: RequestTarget,
27453
27554
  /** The screen as it was when this was filed (`<id>.before.webp` beside it), to compare with after a change. */
27454
27555
  before: external_exports.string().regex(/^r-[0-9a-f]{10}\.before\.webp$/).optional(),
27455
27556
  thread: external_exports.array(RequestEntry).max(500)
27456
27557
  });
27457
27558
 
27559
+ // ../core/src/schemas.ts
27560
+ import { posix as posix2 } from "node:path";
27561
+
27458
27562
  // ../core/src/tokens.ts
27459
27563
  var TOKEN_ALIAS = /^\{([^{}]+)\}$/;
27460
27564
  var ALIAS_MESSAGE = "expected an alias like {color.brand}";
@@ -27613,10 +27717,8 @@ function describeIssues(error62) {
27613
27717
  function tokenValueProblems(type, value) {
27614
27718
  if (type === void 0) return ["no $type (on the token or an enclosing group)"];
27615
27719
  if (!isTokenType(type)) return [`unknown $type "${type}"; expected one of ${TOKEN_TYPES.join(", ")}`];
27616
- const result = tokenValueSchema(type).safeParse(value);
27617
- if (result.success) return [];
27618
- const valueResult = TOKEN_VALUE_SCHEMAS[type].safeParse(value);
27619
- return valueResult.success ? [] : describeIssues(valueResult.error);
27720
+ if (tokenValueSchema(type).safeParse(value).success) return [];
27721
+ return describeIssues(TOKEN_VALUE_SCHEMAS[type].safeParse(value).error);
27620
27722
  }
27621
27723
  function validateTokenSets(sources) {
27622
27724
  const problems = [];
@@ -27660,13 +27762,12 @@ function findCycles(edges) {
27660
27762
  }
27661
27763
 
27662
27764
  // ../core/src/schemas.ts
27663
- import { posix as posix2 } from "node:path";
27664
27765
  var SemVer = external_exports.string().regex(/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/, "expected semver x.y.z");
27665
27766
  function normalizeRelPath(path) {
27666
27767
  return posix2.normalize(path.replace(/\\/g, "/")).replace(/^\.\//, "").replace(/\/+$/, "") || ".";
27667
27768
  }
27668
27769
  var RelPath = external_exports.string().min(1).refine((p) => !p.startsWith("/") && !normalizeRelPath(p).split("/").includes(".."), "expected a path relative to its root, without ..");
27669
- var IsoTime3 = external_exports.string().datetime({ offset: true });
27770
+ var IsoTime4 = external_exports.string().datetime({ offset: true });
27670
27771
  var SystemConfig = external_exports.object({
27671
27772
  id: external_exports.string().regex(/^[a-z][a-z0-9-]*$/, { error: ({ input: input2 }) => safeId(input2) === null ? `Invalid system id ${JSON.stringify(input2)}: use a plain name without ".." or path separators` : `Invalid system id ${JSON.stringify(input2)}: use lowercase letters, digits and hyphens, starting with a letter` }),
27672
27773
  name: external_exports.string().min(1),
@@ -27924,7 +28025,7 @@ var ScanReport = external_exports.object({
27924
28025
  /** Files checked from supplied text (unsaved edits, candidate code) rather than disk. */
27925
28026
  overrides: external_exports.array(external_exports.string())
27926
28027
  }).optional(),
27927
- generatedAt: IsoTime3,
28028
+ generatedAt: IsoTime4,
27928
28029
  durationMs: external_exports.number(),
27929
28030
  status: external_exports.enum(["complete", "partial"]),
27930
28031
  coverage: external_exports.object({
@@ -27967,7 +28068,7 @@ var Baseline = external_exports.object({
27967
28068
  $schema: external_exports.string().optional(),
27968
28069
  schema: external_exports.literal("youi.baseline/v1"),
27969
28070
  project: external_exports.string(),
27970
- recordedAt: IsoTime3,
28071
+ recordedAt: IsoTime4,
27971
28072
  identity: CheckIdentity,
27972
28073
  totals: external_exports.object({ errors: external_exports.number().int(), warnings: external_exports.number().int() }),
27973
28074
  entries: external_exports.array(BaselineEntry)
@@ -27989,7 +28090,7 @@ var LockFile = external_exports.object({
27989
28090
  system: external_exports.string(),
27990
28091
  systemVersion: SemVer,
27991
28092
  sourceCommit: external_exports.string().nullable(),
27992
- syncedAt: IsoTime3,
28093
+ syncedAt: IsoTime4,
27993
28094
  files: external_exports.record(external_exports.string(), LockEntry)
27994
28095
  });
27995
28096
  var INVENTORY_ROLES = ["button", "link-as-button", "input", "card", "badge", "dialog", "tabs"];
@@ -28141,7 +28242,7 @@ var InventoryReport = external_exports.object({
28141
28242
  $schema: external_exports.string().optional(),
28142
28243
  schema: external_exports.literal("youi.inventory/v1"),
28143
28244
  scanner: external_exports.string(),
28144
- generatedAt: IsoTime3,
28245
+ generatedAt: IsoTime4,
28145
28246
  durationMs: external_exports.number(),
28146
28247
  /** Two looks share a family only when every dimension is within these (px; weight in units) of every other look's. */
28147
28248
  tolerance: external_exports.object({ height: external_exports.number(), padding: external_exports.number(), radius: external_exports.number(), fontSize: external_exports.number(), fontWeight: external_exports.number() }),
@@ -28176,7 +28277,8 @@ var PUBLISHED_SCHEMAS = {
28176
28277
  "youi.inventory.schema.json": InventoryReport,
28177
28278
  "youi.detect.schema.json": DetectReport,
28178
28279
  "youi.tokens.schema.json": TokenDocument,
28179
- "youi.request.schema.json": RequestDoc
28280
+ "youi.request.schema.json": RequestDoc,
28281
+ "youi.gaps.schema.json": GapsReport
28180
28282
  };
28181
28283
  function normalizeProjectConfig(config2) {
28182
28284
  const n = normalizeRelPath;
@@ -28313,12 +28415,6 @@ function executionLabel(execution) {
28313
28415
  }
28314
28416
  }
28315
28417
 
28316
- // ../core/src/licence.ts
28317
- function copyleft(spdx) {
28318
- const strong = (part) => part.split(/\s+(?:AND|WITH)\s+/).some((id) => /^A?GPL-/.test(id.replace(/[()]/g, "").trim()));
28319
- return spdx.split(/\s+OR\s+/).every(strong);
28320
- }
28321
-
28322
28418
  export {
28323
28419
  require_dist,
28324
28420
  clone,
@@ -28353,60 +28449,150 @@ export {
28353
28449
  preprocess,
28354
28450
  iso_exports,
28355
28451
  external_exports,
28452
+ DETECT_CONFIDENCE,
28453
+ DetectConfidence,
28454
+ DETECT_ELEMENT_TYPES,
28455
+ DetectElementType,
28456
+ EVIDENCE_KINDS,
28457
+ DetectEvidence,
28458
+ DetectLibrary,
28459
+ DetectElement,
28460
+ DetectUnused,
28461
+ DetectPage,
28462
+ DetectFont,
28356
28463
  DetectReport,
28464
+ sourceSlug,
28465
+ draftLibraryItem,
28357
28466
  unifiedDiff,
28358
28467
  DefinitionError,
28359
28468
  toPosix,
28360
28469
  relPath,
28470
+ globRegExp,
28361
28471
  matchesAny,
28472
+ walkGlob,
28362
28473
  findFiles,
28474
+ parseDefinition,
28363
28475
  readDefinition,
28364
28476
  writeFileAtomic,
28365
28477
  readTextOrNull,
28478
+ GAP_STATUSES,
28479
+ GapCandidate,
28480
+ GapConcept,
28481
+ GapsProject,
28482
+ GapsReport,
28366
28483
  sha256,
28367
28484
  shortHash,
28368
28485
  stableStringify,
28486
+ ELEMENT_KINDS,
28369
28487
  ElementId,
28370
28488
  parseId,
28489
+ ruleSlug,
28490
+ formatId,
28371
28491
  matchesQuery,
28372
28492
  safeId,
28493
+ ELEMENT_STAGES,
28494
+ ElementStage,
28373
28495
  systemStage,
28374
28496
  canMove,
28375
28497
  MCP_TOOLS,
28498
+ LIBRARY_KINDS,
28499
+ LibraryId,
28376
28500
  isLibraryId,
28501
+ FamilyId,
28377
28502
  isFamilyId,
28378
28503
  LIBRARY_SOURCE_KINDS,
28504
+ LibraryLicense,
28379
28505
  LibraryEntry,
28380
28506
  LIBRARY_DIR,
28381
28507
  loadLibrary,
28382
28508
  copyleft,
28383
28509
  REQUEST_ID,
28384
28510
  REQUEST_STATUSES,
28511
+ RequestAuthor,
28385
28512
  RequestTarget,
28513
+ RequestEntry,
28386
28514
  RequestDoc,
28387
28515
  TOKEN_ALIAS,
28516
+ TokenAlias,
28517
+ ColorValue,
28518
+ DimensionValue,
28519
+ DurationValue,
28520
+ CubicBezierValue,
28521
+ FONT_FAMILY_NAME,
28522
+ FONT_FAMILY_LIST,
28523
+ FontFamilyValue,
28524
+ FontWeightValue,
28525
+ StrokeStyleValue,
28526
+ BorderValue,
28527
+ TransitionValue,
28528
+ ShadowLayer,
28529
+ ShadowValue,
28530
+ GradientValue,
28531
+ TypographyValue,
28532
+ SpringValue,
28533
+ FocusRingValue,
28534
+ TOKEN_VALUE_SCHEMAS,
28535
+ TOKEN_TYPES,
28536
+ isTokenType,
28537
+ tokenValueSchema,
28538
+ TokenDocument,
28388
28539
  CSS_SAFE_NAME,
28540
+ flattenTokens,
28389
28541
  aliasesIn,
28390
28542
  tokenValueProblems,
28391
28543
  validateTokenSets,
28392
28544
  normalizeRelPath,
28545
+ SystemConfig,
28546
+ DesignConfig,
28547
+ RouteMapEntry,
28393
28548
  RouteConfig,
28549
+ DarkSelector,
28550
+ DEFAULT_DARK_SELECTORS,
28551
+ TailwindConfig,
28394
28552
  OutputConfig,
28553
+ AgentConfig,
28395
28554
  ProjectConfig,
28555
+ PropSpec,
28396
28556
  COMPONENT_STATES,
28397
28557
  ComponentContract,
28398
28558
  RuleCheck,
28399
28559
  RuleRollout,
28400
28560
  RuleSpec,
28561
+ MigrationChange,
28401
28562
  MigrationSpec,
28563
+ PropValue,
28564
+ Position,
28565
+ RouteAttribution,
28566
+ UsageSite,
28567
+ UnknownSite,
28568
+ Lookalike,
28569
+ Violation,
28570
+ RuleRun,
28402
28571
  ScanReport,
28572
+ CheckIdentity,
28573
+ BaselineEntry,
28403
28574
  Baseline,
28575
+ LockEntry,
28404
28576
  LockFile,
28405
28577
  INVENTORY_ROLES,
28578
+ InventoryRole,
28406
28579
  SHAPE_DIMENSIONS,
28580
+ InventoryShape,
28581
+ InventoryProject,
28582
+ InventoryDefinition,
28583
+ InventoryKit,
28584
+ InventoryPrimitive,
28585
+ InventoryRecipeWrapper,
28586
+ InventoryRecipe,
28587
+ InventoryLook,
28588
+ InventoryFamily,
28589
+ InventoryFlag,
28407
28590
  InventoryReport,
28591
+ PUBLISHED_SCHEMAS,
28408
28592
  normalizeProjectConfig,
28593
+ jsonSchemaFor,
28409
28594
  renderJsonSchemas,
28595
+ DESIGN_CONFIG_FILE,
28410
28596
  loadDesignRepo,
28411
28597
  getSystem,
28412
28598
  BUILT_IN_CHECKS,