@bendyline/gilde 0.2.4 → 0.2.6

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 (841) hide show
  1. package/README.md +11 -0
  2. package/authoring/LICENSE-HankenGrotesk-OFL-1.1.txt +94 -0
  3. package/authoring/LICENSE-PTSerif-OFL-1.1.txt +94 -0
  4. package/authoring/knowledge-keywords/README.md +100 -0
  5. package/authoring/knowledge-keywords/rules.json +850 -0
  6. package/authoring/page-demo-bootstrap.js +209 -0
  7. package/authoring/page-demo-injector.mjs +7 -0
  8. package/authoring/page-demo-typography.css +88 -0
  9. package/data/craftbook-templates/a1/a11y-audit/art.json +13 -8
  10. package/data/craftbook-templates/a1/a11y-audit/logo.webp +0 -0
  11. package/data/craftbook-templates/ab/ab-test-readout/art.json +13 -9
  12. package/data/craftbook-templates/ab/ab-test-readout/logo.webp +0 -0
  13. package/data/craftbook-templates/ac/accessibility-retrofit/art.json +14 -9
  14. package/data/craftbook-templates/ac/accessibility-retrofit/logo.webp +0 -0
  15. package/data/craftbook-templates/ad/ad-variations/art.json +14 -10
  16. package/data/craftbook-templates/ad/ad-variations/logo.webp +0 -0
  17. package/data/craftbook-templates/al/album-curate/art.json +13 -9
  18. package/data/craftbook-templates/al/album-curate/logo.webp +0 -0
  19. package/data/craftbook-templates/al/alert-rules/art.json +13 -8
  20. package/data/craftbook-templates/al/alert-rules/logo.webp +0 -0
  21. package/data/craftbook-templates/al/alt-text-pass/art.json +13 -8
  22. package/data/craftbook-templates/al/alt-text-pass/logo.webp +0 -0
  23. package/data/craftbook-templates/an/anniversary-cut/art.json +13 -9
  24. package/data/craftbook-templates/an/anniversary-cut/logo.webp +0 -0
  25. package/data/craftbook-templates/an/annotated-bibliography/art.json +14 -10
  26. package/data/craftbook-templates/an/annotated-bibliography/logo.webp +0 -0
  27. package/data/craftbook-templates/an/annual-document-review/art.json +13 -9
  28. package/data/craftbook-templates/an/annual-document-review/logo.webp +0 -0
  29. package/data/craftbook-templates/an/anomaly-scan/art.json +13 -8
  30. package/data/craftbook-templates/an/anomaly-scan/logo.webp +0 -0
  31. package/data/craftbook-templates/ap/api-contract-review/art.json +13 -9
  32. package/data/craftbook-templates/ap/api-contract-review/logo.webp +0 -0
  33. package/data/craftbook-templates/ap/apply-review-findings/art.json +14 -9
  34. package/data/craftbook-templates/ap/apply-review-findings/logo.webp +0 -0
  35. package/data/craftbook-templates/ar/artifact-integrity-review/art.json +13 -9
  36. package/data/craftbook-templates/ar/artifact-integrity-review/logo.webp +0 -0
  37. package/data/craftbook-templates/au/audio-ad-spot/art.json +13 -9
  38. package/data/craftbook-templates/au/audio-ad-spot/logo.webp +0 -0
  39. package/data/craftbook-templates/au/audio-highlight-reel/art.json +13 -9
  40. package/data/craftbook-templates/au/audio-highlight-reel/logo.webp +0 -0
  41. package/data/craftbook-templates/au/audiobook-master-pack/art.json +14 -10
  42. package/data/craftbook-templates/au/audiobook-master-pack/logo.webp +0 -0
  43. package/data/craftbook-templates/au/auth-flow/art.json +13 -8
  44. package/data/craftbook-templates/au/auth-flow/logo.webp +0 -0
  45. package/data/craftbook-templates/au/automation-recipe/art.json +13 -9
  46. package/data/craftbook-templates/au/automation-recipe/logo.webp +0 -0
  47. package/data/craftbook-templates/ba/backup-routine/art.json +13 -9
  48. package/data/craftbook-templates/ba/backup-routine/logo.webp +0 -0
  49. package/data/craftbook-templates/bl/blog-post/art.json +14 -10
  50. package/data/craftbook-templates/bl/blog-post/logo.webp +0 -0
  51. package/data/craftbook-templates/bo/board-deck/art.json +13 -9
  52. package/data/craftbook-templates/bo/board-deck/logo.webp +0 -0
  53. package/data/craftbook-templates/bo/board-game-web/art.json +13 -9
  54. package/data/craftbook-templates/bo/board-game-web/logo.webp +0 -0
  55. package/data/craftbook-templates/bo/booking-automation/art.json +13 -8
  56. package/data/craftbook-templates/bo/booking-automation/logo.webp +0 -0
  57. package/data/craftbook-templates/br/branding-website/art.json +13 -9
  58. package/data/craftbook-templates/br/branding-website/logo.webp +0 -0
  59. package/data/craftbook-templates/br/broadcast-announcement/art.json +13 -9
  60. package/data/craftbook-templates/br/broadcast-announcement/logo.webp +0 -0
  61. package/data/craftbook-templates/br/browser-qa-audit/art.json +13 -8
  62. package/data/craftbook-templates/br/browser-qa-audit/logo.webp +0 -0
  63. package/data/craftbook-templates/bu/bug-fix-tdd/art.json +14 -9
  64. package/data/craftbook-templates/bu/bug-fix-tdd/logo.webp +0 -0
  65. package/data/craftbook-templates/bu/build-loop/art.json +13 -9
  66. package/data/craftbook-templates/bu/build-loop/logo.webp +0 -0
  67. package/data/craftbook-templates/ca/calendar-brief/art.json +13 -9
  68. package/data/craftbook-templates/ca/calendar-brief/logo.webp +0 -0
  69. package/data/craftbook-templates/ca/canvas-generative-art/art.json +13 -9
  70. package/data/craftbook-templates/ca/canvas-generative-art/logo.webp +0 -0
  71. package/data/craftbook-templates/ca/careful-mode/art.json +14 -10
  72. package/data/craftbook-templates/ca/careful-mode/logo.webp +0 -0
  73. package/data/craftbook-templates/ca/case-study/art.json +14 -10
  74. package/data/craftbook-templates/ca/case-study/logo.webp +0 -0
  75. package/data/craftbook-templates/ca/case-study-writeup/art.json +13 -9
  76. package/data/craftbook-templates/ca/case-study-writeup/logo.webp +0 -0
  77. package/data/craftbook-templates/ch/changelog-cut/art.json +13 -8
  78. package/data/craftbook-templates/ch/changelog-cut/logo.webp +0 -0
  79. package/data/craftbook-templates/ch/changelog-writeup/art.json +14 -10
  80. package/data/craftbook-templates/ch/changelog-writeup/logo.webp +0 -0
  81. package/data/craftbook-templates/ch/chapter-narration-run/art.json +13 -9
  82. package/data/craftbook-templates/ch/chapter-narration-run/logo.webp +0 -0
  83. package/data/craftbook-templates/ch/chapter-weave/art.json +13 -9
  84. package/data/craftbook-templates/ch/chapter-weave/logo.webp +0 -0
  85. package/data/craftbook-templates/ch/character-sheet/art.json +13 -9
  86. package/data/craftbook-templates/ch/character-sheet/logo.webp +0 -0
  87. package/data/craftbook-templates/ch/character-sheet/versions/1.0.4/craftbook.json +213 -0
  88. package/data/craftbook-templates/ch/character-sheet/versions/1.0.4/test.json +143 -0
  89. package/data/craftbook-templates/ch/character-turnaround/art.json +13 -9
  90. package/data/craftbook-templates/ch/character-turnaround/logo.webp +0 -0
  91. package/data/craftbook-templates/ch/character-turnaround/versions/1.0.4/craftbook.json +254 -0
  92. package/data/craftbook-templates/ch/character-turnaround/versions/1.0.4/test.json +189 -0
  93. package/data/craftbook-templates/ch/chart-pack/art.json +13 -9
  94. package/data/craftbook-templates/ch/chart-pack/logo.webp +0 -0
  95. package/data/craftbook-templates/ch/chrome-extension/art.json +13 -9
  96. package/data/craftbook-templates/ch/chrome-extension/logo.webp +0 -0
  97. package/data/craftbook-templates/ci/ci-pipeline/art.json +14 -9
  98. package/data/craftbook-templates/ci/ci-pipeline/logo.webp +0 -0
  99. package/data/craftbook-templates/ci/citation-audit/art.json +14 -9
  100. package/data/craftbook-templates/ci/citation-audit/logo.webp +0 -0
  101. package/data/craftbook-templates/cl/cli-tool/art.json +13 -9
  102. package/data/craftbook-templates/cl/cli-tool/logo.webp +0 -0
  103. package/data/craftbook-templates/co/code-review/art.json +14 -9
  104. package/data/craftbook-templates/co/code-review/logo.webp +0 -0
  105. package/data/craftbook-templates/co/codebase-refactoring-review/art.json +13 -8
  106. package/data/craftbook-templates/co/codebase-refactoring-review/logo.webp +0 -0
  107. package/data/craftbook-templates/co/codebase-ux-review/art.json +13 -9
  108. package/data/craftbook-templates/co/codebase-ux-review/logo.webp +0 -0
  109. package/data/craftbook-templates/co/codemod-sweep/art.json +14 -9
  110. package/data/craftbook-templates/co/codemod-sweep/logo.webp +0 -0
  111. package/data/craftbook-templates/co/cohort-analysis/art.json +13 -9
  112. package/data/craftbook-templates/co/cohort-analysis/logo.webp +0 -0
  113. package/data/craftbook-templates/co/company-research-brief/art.json +13 -9
  114. package/data/craftbook-templates/co/company-research-brief/logo.webp +0 -0
  115. package/data/craftbook-templates/co/comparison-matrix/art.json +14 -10
  116. package/data/craftbook-templates/co/comparison-matrix/logo.webp +0 -0
  117. package/data/craftbook-templates/co/compat-check/art.json +13 -9
  118. package/data/craftbook-templates/co/compat-check/logo.webp +0 -0
  119. package/data/craftbook-templates/co/competitive-analysis/art.json +14 -10
  120. package/data/craftbook-templates/co/competitive-analysis/logo.webp +0 -0
  121. package/data/craftbook-templates/co/comprehensive-codebase-review/art.json +14 -9
  122. package/data/craftbook-templates/co/comprehensive-codebase-review/logo.webp +0 -0
  123. package/data/craftbook-templates/co/config-scaffold/art.json +13 -9
  124. package/data/craftbook-templates/co/config-scaffold/logo.webp +0 -0
  125. package/data/craftbook-templates/co/content-accuracy-review/art.json +13 -8
  126. package/data/craftbook-templates/co/content-accuracy-review/logo.webp +0 -0
  127. package/data/craftbook-templates/co/content-deck/art.json +13 -9
  128. package/data/craftbook-templates/co/content-deck/logo.webp +0 -0
  129. package/data/craftbook-templates/co/contract-template/art.json +13 -8
  130. package/data/craftbook-templates/co/contract-template/logo.webp +0 -0
  131. package/data/craftbook-templates/co/cookbook-layout/art.json +13 -9
  132. package/data/craftbook-templates/co/cookbook-layout/logo.webp +0 -0
  133. package/data/craftbook-templates/co/copy-review/art.json +13 -9
  134. package/data/craftbook-templates/co/copy-review/logo.webp +0 -0
  135. package/data/craftbook-templates/co/corpus-email-digest/art.json +13 -9
  136. package/data/craftbook-templates/co/corpus-email-digest/logo.webp +0 -0
  137. package/data/craftbook-templates/co/corpus-synthesis/art.json +14 -10
  138. package/data/craftbook-templates/co/corpus-synthesis/logo.webp +0 -0
  139. package/data/craftbook-templates/co/cover-letter/art.json +14 -10
  140. package/data/craftbook-templates/co/cover-letter/logo.webp +0 -0
  141. package/data/craftbook-templates/cr/crm-update-batch/art.json +13 -8
  142. package/data/craftbook-templates/cr/crm-update-batch/logo.webp +0 -0
  143. package/data/craftbook-templates/cr/cron-job/art.json +13 -9
  144. package/data/craftbook-templates/cr/cron-job/logo.webp +0 -0
  145. package/data/craftbook-templates/cr/crossword-forge/art.json +13 -9
  146. package/data/craftbook-templates/cr/crossword-forge/logo.webp +0 -0
  147. package/data/craftbook-templates/cs/csv-transformer/art.json +13 -9
  148. package/data/craftbook-templates/cs/csv-transformer/logo.webp +0 -0
  149. package/data/craftbook-templates/da/dashboard-spec/art.json +13 -9
  150. package/data/craftbook-templates/da/dashboard-spec/logo.webp +0 -0
  151. package/data/craftbook-templates/da/data-dictionary/art.json +13 -9
  152. package/data/craftbook-templates/da/data-dictionary/logo.webp +0 -0
  153. package/data/craftbook-templates/da/data-export-migrate/art.json +13 -9
  154. package/data/craftbook-templates/da/data-export-migrate/logo.webp +0 -0
  155. package/data/craftbook-templates/da/data-join-merge/art.json +13 -9
  156. package/data/craftbook-templates/da/data-join-merge/logo.webp +0 -0
  157. package/data/craftbook-templates/da/data-pipeline-etl/art.json +13 -8
  158. package/data/craftbook-templates/da/data-pipeline-etl/logo.webp +0 -0
  159. package/data/craftbook-templates/da/data-quality-audit/art.json +13 -8
  160. package/data/craftbook-templates/da/data-quality-audit/logo.webp +0 -0
  161. package/data/craftbook-templates/da/data-to-report/art.json +13 -9
  162. package/data/craftbook-templates/da/data-to-report/logo.webp +0 -0
  163. package/data/craftbook-templates/da/data-viz-page/art.json +13 -9
  164. package/data/craftbook-templates/da/data-viz-page/logo.webp +0 -0
  165. package/data/craftbook-templates/da/dataset-clean/art.json +13 -9
  166. package/data/craftbook-templates/da/dataset-clean/logo.webp +0 -0
  167. package/data/craftbook-templates/db/db-index-tuning/art.json +13 -9
  168. package/data/craftbook-templates/db/db-index-tuning/logo.webp +0 -0
  169. package/data/craftbook-templates/de/deep-security-review/art.json +13 -8
  170. package/data/craftbook-templates/de/deep-security-review/logo.webp +0 -0
  171. package/data/craftbook-templates/de/dependency-audit/art.json +13 -8
  172. package/data/craftbook-templates/de/dependency-audit/logo.webp +0 -0
  173. package/data/craftbook-templates/de/dependency-upgrade/art.json +14 -9
  174. package/data/craftbook-templates/de/dependency-upgrade/logo.webp +0 -0
  175. package/data/craftbook-templates/de/deploy-checklist/art.json +14 -10
  176. package/data/craftbook-templates/de/deploy-checklist/logo.webp +0 -0
  177. package/data/craftbook-templates/de/design-review/art.json +13 -9
  178. package/data/craftbook-templates/de/design-review/logo.webp +0 -0
  179. package/data/craftbook-templates/de/design-system-consultation/art.json +13 -9
  180. package/data/craftbook-templates/de/design-system-consultation/logo.webp +0 -0
  181. package/data/craftbook-templates/di/diagram-from-text/art.json +13 -9
  182. package/data/craftbook-templates/di/diagram-from-text/logo.webp +0 -0
  183. package/data/craftbook-templates/di/digest-from-feeds/art.json +13 -9
  184. package/data/craftbook-templates/di/digest-from-feeds/logo.webp +0 -0
  185. package/data/craftbook-templates/do/doc-intake-pipeline/art.json +13 -9
  186. package/data/craftbook-templates/do/doc-intake-pipeline/logo.webp +0 -0
  187. package/data/craftbook-templates/do/doc-rewrite/art.json +14 -10
  188. package/data/craftbook-templates/do/doc-rewrite/logo.webp +0 -0
  189. package/data/craftbook-templates/do/dockerize-app/art.json +13 -8
  190. package/data/craftbook-templates/do/dockerize-app/logo.webp +0 -0
  191. package/data/craftbook-templates/do/docs-site/art.json +13 -9
  192. package/data/craftbook-templates/do/docs-site/logo.webp +0 -0
  193. package/data/craftbook-templates/do/documentation-drift-review/art.json +13 -9
  194. package/data/craftbook-templates/do/documentation-drift-review/logo.webp +0 -0
  195. package/data/craftbook-templates/dr/draft-social-post/art.json +17 -0
  196. package/data/craftbook-templates/dr/draft-social-post/logo.webp +0 -0
  197. package/data/craftbook-templates/dr/drive-wrap-up/art.json +13 -9
  198. package/data/craftbook-templates/dr/drive-wrap-up/logo.webp +0 -0
  199. package/data/craftbook-templates/du/due-diligence-brief/art.json +14 -10
  200. package/data/craftbook-templates/du/due-diligence-brief/logo.webp +0 -0
  201. package/data/craftbook-templates/eb/ebook-compile/art.json +13 -9
  202. package/data/craftbook-templates/eb/ebook-compile/logo.webp +0 -0
  203. package/data/craftbook-templates/ed/edit-notes/art.json +13 -9
  204. package/data/craftbook-templates/ed/edit-notes/logo.webp +0 -0
  205. package/data/craftbook-templates/em/email-sequence/art.json +14 -10
  206. package/data/craftbook-templates/em/email-sequence/logo.webp +0 -0
  207. package/data/craftbook-templates/em/email-template/art.json +13 -9
  208. package/data/craftbook-templates/em/email-template/logo.webp +0 -0
  209. package/data/craftbook-templates/en/engineering-retrospective/art.json +13 -8
  210. package/data/craftbook-templates/en/engineering-retrospective/logo.webp +0 -0
  211. package/data/craftbook-templates/ep/episode-plan/art.json +13 -9
  212. package/data/craftbook-templates/ep/episode-plan/logo.webp +0 -0
  213. package/data/craftbook-templates/es/escalation-playbook/art.json +13 -8
  214. package/data/craftbook-templates/es/escalation-playbook/logo.webp +0 -0
  215. package/data/craftbook-templates/ev/evidence-brief/art.json +14 -10
  216. package/data/craftbook-templates/ev/evidence-brief/logo.webp +0 -0
  217. package/data/craftbook-templates/ex/executive-level-review/art.json +13 -9
  218. package/data/craftbook-templates/ex/executive-level-review/logo.webp +0 -0
  219. package/data/craftbook-templates/ex/expense-categorize/art.json +13 -8
  220. package/data/craftbook-templates/ex/expense-categorize/logo.webp +0 -0
  221. package/data/craftbook-templates/ex/explain-code-folder/art.json +17 -0
  222. package/data/craftbook-templates/ex/explain-code-folder/logo.webp +0 -0
  223. package/data/craftbook-templates/ex/explain-code-folder/manifest.json +1 -0
  224. package/data/craftbook-templates/fa/fact-check/art.json +13 -8
  225. package/data/craftbook-templates/fa/fact-check/logo.webp +0 -0
  226. package/data/craftbook-templates/fa/family-story-chapter/art.json +13 -9
  227. package/data/craftbook-templates/fa/family-story-chapter/logo.webp +0 -0
  228. package/data/craftbook-templates/fa/faq-from-docs/art.json +14 -10
  229. package/data/craftbook-templates/fa/faq-from-docs/logo.webp +0 -0
  230. package/data/craftbook-templates/fa/favicon-set/art.json +13 -9
  231. package/data/craftbook-templates/fa/favicon-set/logo.webp +0 -0
  232. package/data/craftbook-templates/fa/favicon-set/versions/1.0.5/craftbook.json +282 -0
  233. package/data/craftbook-templates/fa/favicon-set/versions/1.0.5/test.json +94 -0
  234. package/data/craftbook-templates/fe/feature-flag-release/art.json +14 -10
  235. package/data/craftbook-templates/fe/feature-flag-release/logo.webp +0 -0
  236. package/data/craftbook-templates/fe/feature-flag-rollout/art.json +13 -9
  237. package/data/craftbook-templates/fe/feature-flag-rollout/logo.webp +0 -0
  238. package/data/craftbook-templates/fe/feedback-widget/art.json +13 -9
  239. package/data/craftbook-templates/fe/feedback-widget/logo.webp +0 -0
  240. package/data/craftbook-templates/fl/flaky-test-fix/art.json +14 -9
  241. package/data/craftbook-templates/fl/flaky-test-fix/logo.webp +0 -0
  242. package/data/craftbook-templates/fo/folder-to-audio/art.json +13 -9
  243. package/data/craftbook-templates/fo/folder-to-audio/logo.webp +0 -0
  244. package/data/craftbook-templates/fo/forecast-model/art.json +13 -9
  245. package/data/craftbook-templates/fo/forecast-model/logo.webp +0 -0
  246. package/data/craftbook-templates/fo/form-fill-batch/art.json +13 -9
  247. package/data/craftbook-templates/fo/form-fill-batch/logo.webp +0 -0
  248. package/data/craftbook-templates/fo/form-wizard/art.json +13 -9
  249. package/data/craftbook-templates/fo/form-wizard/logo.webp +0 -0
  250. package/data/craftbook-templates/fr/freeze-scope/art.json +14 -10
  251. package/data/craftbook-templates/fr/freeze-scope/logo.webp +0 -0
  252. package/data/craftbook-templates/ga/game-with-screens/art.json +13 -9
  253. package/data/craftbook-templates/ga/game-with-screens/logo.webp +0 -0
  254. package/data/craftbook-templates/gl/glossary-build/art.json +13 -9
  255. package/data/craftbook-templates/gl/glossary-build/logo.webp +0 -0
  256. package/data/craftbook-templates/gr/graphql-api/art.json +13 -9
  257. package/data/craftbook-templates/gr/graphql-api/logo.webp +0 -0
  258. package/data/craftbook-templates/gr/grpc-service/art.json +13 -9
  259. package/data/craftbook-templates/gr/grpc-service/logo.webp +0 -0
  260. package/data/craftbook-templates/ha/handbook-section/art.json +13 -9
  261. package/data/craftbook-templates/ha/handbook-section/logo.webp +0 -0
  262. package/data/craftbook-templates/he/hero-image/art.json +13 -9
  263. package/data/craftbook-templates/he/hero-image/logo.webp +0 -0
  264. package/data/craftbook-templates/he/hero-image/versions/1.0.5/craftbook.json +287 -0
  265. package/data/craftbook-templates/he/hero-image/versions/1.0.5/test.json +94 -0
  266. package/data/craftbook-templates/ho/holiday-card-run/art.json +13 -9
  267. package/data/craftbook-templates/ho/holiday-card-run/logo.webp +0 -0
  268. package/data/craftbook-templates/ho/hotfix-flow/art.json +14 -10
  269. package/data/craftbook-templates/ho/hotfix-flow/logo.webp +0 -0
  270. package/data/craftbook-templates/ht/html-arcade-game/art.json +13 -9
  271. package/data/craftbook-templates/ht/html-arcade-game/logo.webp +0 -0
  272. package/data/craftbook-templates/ht/html-puzzle-game/art.json +13 -9
  273. package/data/craftbook-templates/ht/html-puzzle-game/logo.webp +0 -0
  274. package/data/craftbook-templates/ic/icon-pack/art.json +13 -9
  275. package/data/craftbook-templates/ic/icon-pack/logo.webp +0 -0
  276. package/data/craftbook-templates/ic/icon-pack/versions/1.0.5/craftbook.json +279 -0
  277. package/data/craftbook-templates/ic/icon-pack/versions/1.0.5/test.json +94 -0
  278. package/data/craftbook-templates/id/idea-office-hours/art.json +13 -8
  279. package/data/craftbook-templates/id/idea-office-hours/logo.webp +0 -0
  280. package/data/craftbook-templates/id/idle-clicker-game/art.json +13 -9
  281. package/data/craftbook-templates/id/idle-clicker-game/logo.webp +0 -0
  282. package/data/craftbook-templates/im/image-batch-edit/art.json +13 -8
  283. package/data/craftbook-templates/im/image-batch-edit/logo.webp +0 -0
  284. package/data/craftbook-templates/im/image-dedup-cluster/art.json +13 -9
  285. package/data/craftbook-templates/im/image-dedup-cluster/logo.webp +0 -0
  286. package/data/craftbook-templates/im/image-palette-extract/art.json +13 -9
  287. package/data/craftbook-templates/im/image-palette-extract/logo.webp +0 -0
  288. package/data/craftbook-templates/im/image-seo-rename/art.json +13 -9
  289. package/data/craftbook-templates/im/image-seo-rename/logo.webp +0 -0
  290. package/data/craftbook-templates/im/image-set-index/art.json +13 -9
  291. package/data/craftbook-templates/im/image-set-index/logo.webp +0 -0
  292. package/data/craftbook-templates/in/inbox-triage/art.json +13 -9
  293. package/data/craftbook-templates/in/inbox-triage/logo.webp +0 -0
  294. package/data/craftbook-templates/in/incident-comms-templates/art.json +13 -8
  295. package/data/craftbook-templates/in/incident-comms-templates/logo.webp +0 -0
  296. package/data/craftbook-templates/in/incident-postmortem/art.json +14 -9
  297. package/data/craftbook-templates/in/incident-postmortem/logo.webp +0 -0
  298. package/data/craftbook-templates/in/insurance-inventory/art.json +13 -9
  299. package/data/craftbook-templates/in/insurance-inventory/logo.webp +0 -0
  300. package/data/craftbook-templates/in/interactive-quiz/art.json +13 -9
  301. package/data/craftbook-templates/in/interactive-quiz/logo.webp +0 -0
  302. package/data/craftbook-templates/in/investigate/art.json +13 -8
  303. package/data/craftbook-templates/in/investigate/logo.webp +0 -0
  304. package/data/craftbook-templates/in/investigate-root-cause/art.json +13 -8
  305. package/data/craftbook-templates/in/investigate-root-cause/logo.webp +0 -0
  306. package/data/craftbook-templates/in/invitation-design/art.json +13 -9
  307. package/data/craftbook-templates/in/invitation-design/logo.webp +0 -0
  308. package/data/craftbook-templates/in/invoice-generator/art.json +13 -9
  309. package/data/craftbook-templates/in/invoice-generator/logo.webp +0 -0
  310. package/data/craftbook-templates/in/invoice-run/art.json +13 -9
  311. package/data/craftbook-templates/in/invoice-run/logo.webp +0 -0
  312. package/data/craftbook-templates/index.json +1 -1
  313. package/data/craftbook-templates/it/item-intake/art.json +13 -9
  314. package/data/craftbook-templates/it/item-intake/logo.webp +0 -0
  315. package/data/craftbook-templates/ju/juice-pass/art.json +13 -9
  316. package/data/craftbook-templates/ju/juice-pass/logo.webp +0 -0
  317. package/data/craftbook-templates/kn/knowledge-base-article/art.json +14 -10
  318. package/data/craftbook-templates/kn/knowledge-base-article/logo.webp +0 -0
  319. package/data/craftbook-templates/kp/kpi-scorecard/art.json +13 -9
  320. package/data/craftbook-templates/kp/kpi-scorecard/logo.webp +0 -0
  321. package/data/craftbook-templates/la/landing-copy/art.json +14 -10
  322. package/data/craftbook-templates/la/landing-copy/logo.webp +0 -0
  323. package/data/craftbook-templates/la/landing-page/art.json +13 -9
  324. package/data/craftbook-templates/la/landing-page/logo.webp +0 -0
  325. package/data/craftbook-templates/le/lead-enrichment/art.json +13 -8
  326. package/data/craftbook-templates/le/lead-enrichment/logo.webp +0 -0
  327. package/data/craftbook-templates/li/library-package/art.json +13 -9
  328. package/data/craftbook-templates/li/library-package/logo.webp +0 -0
  329. package/data/craftbook-templates/li/literature-review/art.json +14 -10
  330. package/data/craftbook-templates/li/literature-review/logo.webp +0 -0
  331. package/data/craftbook-templates/li/live-browser-qa/art.json +13 -8
  332. package/data/craftbook-templates/li/live-browser-qa/logo.webp +0 -0
  333. package/data/craftbook-templates/lo/localize-content/art.json +14 -9
  334. package/data/craftbook-templates/lo/localize-content/logo.webp +0 -0
  335. package/data/craftbook-templates/lo/logo-set/art.json +13 -9
  336. package/data/craftbook-templates/lo/logo-set/logo.webp +0 -0
  337. package/data/craftbook-templates/lo/logo-set/versions/1.0.5/craftbook.json +279 -0
  338. package/data/craftbook-templates/lo/logo-set/versions/1.0.5/test.json +94 -0
  339. package/data/craftbook-templates/ma/market-scan/art.json +14 -10
  340. package/data/craftbook-templates/ma/market-scan/logo.webp +0 -0
  341. package/data/craftbook-templates/me/meeting-minutes/art.json +13 -9
  342. package/data/craftbook-templates/me/meeting-minutes/logo.webp +0 -0
  343. package/data/craftbook-templates/me/meeting-notes-to-actions/art.json +13 -9
  344. package/data/craftbook-templates/me/meeting-notes-to-actions/logo.webp +0 -0
  345. package/data/craftbook-templates/me/meeting-prep-brief/art.json +13 -9
  346. package/data/craftbook-templates/me/meeting-prep-brief/logo.webp +0 -0
  347. package/data/craftbook-templates/me/meeting-summary-audio/art.json +13 -9
  348. package/data/craftbook-templates/me/meeting-summary-audio/logo.webp +0 -0
  349. package/data/craftbook-templates/me/memory-prompt-session/art.json +13 -9
  350. package/data/craftbook-templates/me/memory-prompt-session/logo.webp +0 -0
  351. package/data/craftbook-templates/me/message-queue-consumer/art.json +13 -9
  352. package/data/craftbook-templates/me/message-queue-consumer/logo.webp +0 -0
  353. package/data/craftbook-templates/mi/micro-game-jam/art.json +13 -9
  354. package/data/craftbook-templates/mi/micro-game-jam/logo.webp +0 -0
  355. package/data/craftbook-templates/mo/mock-interview/art.json +13 -9
  356. package/data/craftbook-templates/mo/mock-interview/logo.webp +0 -0
  357. package/data/craftbook-templates/mo/mod-scaffold/art.json +13 -9
  358. package/data/craftbook-templates/mo/mod-scaffold/logo.webp +0 -0
  359. package/data/craftbook-templates/mo/monitor-and-alert/art.json +13 -9
  360. package/data/craftbook-templates/mo/monitor-and-alert/logo.webp +0 -0
  361. package/data/craftbook-templates/mo/month-close/art.json +13 -9
  362. package/data/craftbook-templates/mo/month-close/logo.webp +0 -0
  363. package/data/craftbook-templates/mo/monthly-recording-review/art.json +13 -8
  364. package/data/craftbook-templates/mo/monthly-recording-review/logo.webp +0 -0
  365. package/data/craftbook-templates/mo/moodboard/art.json +13 -9
  366. package/data/craftbook-templates/mo/moodboard/logo.webp +0 -0
  367. package/data/craftbook-templates/mo/moodboard/versions/1.0.5/craftbook.json +219 -0
  368. package/data/craftbook-templates/mo/moodboard/versions/1.0.5/test.json +89 -0
  369. package/data/craftbook-templates/mo/morning-brief/art.json +13 -9
  370. package/data/craftbook-templates/mo/morning-brief/logo.webp +0 -0
  371. package/data/craftbook-templates/mo/morning-report/art.json +13 -9
  372. package/data/craftbook-templates/mo/morning-report/logo.webp +0 -0
  373. package/data/craftbook-templates/mu/music-metadata-tag/art.json +13 -9
  374. package/data/craftbook-templates/mu/music-metadata-tag/logo.webp +0 -0
  375. package/data/craftbook-templates/na/narrated-slideshow/art.json +14 -10
  376. package/data/craftbook-templates/na/narrated-slideshow/logo.webp +0 -0
  377. package/data/craftbook-templates/ne/newsletter-issue/art.json +13 -9
  378. package/data/craftbook-templates/ne/newsletter-issue/logo.webp +0 -0
  379. package/data/craftbook-templates/ni/nightly-fix-sweep/art.json +14 -9
  380. package/data/craftbook-templates/ni/nightly-fix-sweep/logo.webp +0 -0
  381. package/data/craftbook-templates/no/notification-router/art.json +13 -9
  382. package/data/craftbook-templates/no/notification-router/logo.webp +0 -0
  383. package/data/craftbook-templates/oc/ocr-extract/art.json +13 -9
  384. package/data/craftbook-templates/oc/ocr-extract/logo.webp +0 -0
  385. package/data/craftbook-templates/of/offer-compare/art.json +14 -10
  386. package/data/craftbook-templates/of/offer-compare/logo.webp +0 -0
  387. package/data/craftbook-templates/of/office-hours/art.json +13 -8
  388. package/data/craftbook-templates/of/office-hours/logo.webp +0 -0
  389. package/data/craftbook-templates/on/onboarding-checklist/art.json +13 -9
  390. package/data/craftbook-templates/on/onboarding-checklist/logo.webp +0 -0
  391. package/data/craftbook-templates/on/onboarding-flow/art.json +13 -9
  392. package/data/craftbook-templates/on/onboarding-flow/logo.webp +0 -0
  393. package/data/craftbook-templates/on/oncall-handoff/art.json +13 -8
  394. package/data/craftbook-templates/on/oncall-handoff/logo.webp +0 -0
  395. package/data/craftbook-templates/on/one-pager/art.json +13 -9
  396. package/data/craftbook-templates/on/one-pager/logo.webp +0 -0
  397. package/data/craftbook-templates/op/ops-runbook/art.json +13 -9
  398. package/data/craftbook-templates/op/ops-runbook/logo.webp +0 -0
  399. package/data/craftbook-templates/pa/page-spread/art.json +13 -9
  400. package/data/craftbook-templates/pa/page-spread/logo.webp +0 -0
  401. package/data/craftbook-templates/pa/page-spread/versions/1.0.4/craftbook.json +214 -0
  402. package/data/craftbook-templates/pa/page-spread/versions/1.0.4/test.json +132 -0
  403. package/data/craftbook-templates/pa/parser-grammar/art.json +13 -9
  404. package/data/craftbook-templates/pa/parser-grammar/logo.webp +0 -0
  405. package/data/craftbook-templates/pe/perf-audit/art.json +13 -8
  406. package/data/craftbook-templates/pe/perf-audit/logo.webp +0 -0
  407. package/data/craftbook-templates/pe/perf-optimization/art.json +14 -9
  408. package/data/craftbook-templates/pe/perf-optimization/logo.webp +0 -0
  409. package/data/craftbook-templates/pe/pest-diagnosis/art.json +13 -9
  410. package/data/craftbook-templates/pe/pest-diagnosis/logo.webp +0 -0
  411. package/data/craftbook-templates/ph/photo-cull/art.json +13 -9
  412. package/data/craftbook-templates/ph/photo-cull/logo.webp +0 -0
  413. package/data/craftbook-templates/ph/photo-library-nightly/art.json +17 -0
  414. package/data/craftbook-templates/ph/photo-library-nightly/logo.webp +0 -0
  415. package/data/craftbook-templates/ph/photo-library-nightly/manifest.json +1 -0
  416. package/data/craftbook-templates/ph/physics-toy/art.json +13 -9
  417. package/data/craftbook-templates/ph/physics-toy/logo.webp +0 -0
  418. package/data/craftbook-templates/pi/pitch-deck/art.json +13 -9
  419. package/data/craftbook-templates/pi/pitch-deck/logo.webp +0 -0
  420. package/data/craftbook-templates/pl/plan/art.json +13 -8
  421. package/data/craftbook-templates/pl/plan/logo.webp +0 -0
  422. package/data/craftbook-templates/pl/playtest-report/art.json +13 -8
  423. package/data/craftbook-templates/pl/playtest-report/logo.webp +0 -0
  424. package/data/craftbook-templates/po/podcast-chaptering/art.json +13 -9
  425. package/data/craftbook-templates/po/podcast-chaptering/logo.webp +0 -0
  426. package/data/craftbook-templates/po/portfolio-site/art.json +13 -9
  427. package/data/craftbook-templates/po/portfolio-site/logo.webp +0 -0
  428. package/data/craftbook-templates/po/powerpoint-deck/art.json +14 -10
  429. package/data/craftbook-templates/po/powerpoint-deck/logo.webp +0 -0
  430. package/data/craftbook-templates/pr/pr-security-review/art.json +13 -8
  431. package/data/craftbook-templates/pr/pr-security-review/logo.webp +0 -0
  432. package/data/craftbook-templates/pr/practice-exam/art.json +13 -8
  433. package/data/craftbook-templates/pr/practice-exam/logo.webp +0 -0
  434. package/data/craftbook-templates/pr/practice-session/art.json +13 -9
  435. package/data/craftbook-templates/pr/practice-session/logo.webp +0 -0
  436. package/data/craftbook-templates/pr/pre-departure-countdown/art.json +13 -9
  437. package/data/craftbook-templates/pr/pre-departure-countdown/logo.webp +0 -0
  438. package/data/craftbook-templates/pr/press-release/art.json +14 -10
  439. package/data/craftbook-templates/pr/press-release/logo.webp +0 -0
  440. package/data/craftbook-templates/pr/price-tracker/art.json +13 -9
  441. package/data/craftbook-templates/pr/price-tracker/logo.webp +0 -0
  442. package/data/craftbook-templates/pr/pricing-page/art.json +13 -9
  443. package/data/craftbook-templates/pr/pricing-page/logo.webp +0 -0
  444. package/data/craftbook-templates/pr/product-descriptions/art.json +14 -10
  445. package/data/craftbook-templates/pr/product-descriptions/logo.webp +0 -0
  446. package/data/craftbook-templates/pr/proposal-sow/art.json +13 -9
  447. package/data/craftbook-templates/pr/proposal-sow/logo.webp +0 -0
  448. package/data/craftbook-templates/pu/pull-request-review/art.json +14 -9
  449. package/data/craftbook-templates/pu/pull-request-review/logo.webp +0 -0
  450. package/data/craftbook-templates/pu/puzzle-pack-layout/art.json +13 -9
  451. package/data/craftbook-templates/pu/puzzle-pack-layout/logo.webp +0 -0
  452. package/data/craftbook-templates/pw/pwa-offline/art.json +13 -9
  453. package/data/craftbook-templates/pw/pwa-offline/logo.webp +0 -0
  454. package/data/craftbook-templates/qa/qa/art.json +13 -8
  455. package/data/craftbook-templates/qa/qa/logo.webp +0 -0
  456. package/data/craftbook-templates/qu/quarterly-summary/art.json +13 -9
  457. package/data/craftbook-templates/qu/quarterly-summary/logo.webp +0 -0
  458. package/data/craftbook-templates/raw-index.json +1 -1
  459. package/data/craftbook-templates/re/reading-list/art.json +13 -9
  460. package/data/craftbook-templates/re/reading-list/logo.webp +0 -0
  461. package/data/craftbook-templates/re/receipt-intake/art.json +13 -9
  462. package/data/craftbook-templates/re/receipt-intake/logo.webp +0 -0
  463. package/data/craftbook-templates/re/receipt-ocr-ledger/art.json +13 -9
  464. package/data/craftbook-templates/re/receipt-ocr-ledger/logo.webp +0 -0
  465. package/data/craftbook-templates/re/reception-report/art.json +17 -0
  466. package/data/craftbook-templates/re/reception-report/logo.webp +0 -0
  467. package/data/craftbook-templates/re/recipe-capture/art.json +13 -8
  468. package/data/craftbook-templates/re/recipe-capture/logo.webp +0 -0
  469. package/data/craftbook-templates/re/record-a-relative/art.json +13 -9
  470. package/data/craftbook-templates/re/record-a-relative/logo.webp +0 -0
  471. package/data/craftbook-templates/re/recurring-invoice-run/art.json +13 -9
  472. package/data/craftbook-templates/re/recurring-invoice-run/logo.webp +0 -0
  473. package/data/craftbook-templates/re/refactor-module/art.json +14 -9
  474. package/data/craftbook-templates/re/refactor-module/logo.webp +0 -0
  475. package/data/craftbook-templates/re/regex-builder/art.json +13 -8
  476. package/data/craftbook-templates/re/regex-builder/logo.webp +0 -0
  477. package/data/craftbook-templates/re/release-announcement/art.json +14 -10
  478. package/data/craftbook-templates/re/release-announcement/logo.webp +0 -0
  479. package/data/craftbook-templates/re/release-artifact-sanity-check/art.json +14 -10
  480. package/data/craftbook-templates/re/release-artifact-sanity-check/logo.webp +0 -0
  481. package/data/craftbook-templates/re/release-notes/art.json +13 -9
  482. package/data/craftbook-templates/re/release-notes/logo.webp +0 -0
  483. package/data/craftbook-templates/re/release-pipeline-ci/art.json +14 -10
  484. package/data/craftbook-templates/re/release-pipeline-ci/logo.webp +0 -0
  485. package/data/craftbook-templates/re/release-readiness-review/art.json +13 -9
  486. package/data/craftbook-templates/re/release-readiness-review/logo.webp +0 -0
  487. package/data/craftbook-templates/re/reliability-review/art.json +13 -8
  488. package/data/craftbook-templates/re/reliability-review/logo.webp +0 -0
  489. package/data/craftbook-templates/re/report-pdf/art.json +14 -10
  490. package/data/craftbook-templates/re/report-pdf/logo.webp +0 -0
  491. package/data/craftbook-templates/re/research-report/art.json +14 -10
  492. package/data/craftbook-templates/re/research-report/logo.webp +0 -0
  493. package/data/craftbook-templates/re/research-to-document/art.json +14 -10
  494. package/data/craftbook-templates/re/research-to-document/logo.webp +0 -0
  495. package/data/craftbook-templates/re/rest-api/art.json +13 -9
  496. package/data/craftbook-templates/re/rest-api/logo.webp +0 -0
  497. package/data/craftbook-templates/re/resume-cv/art.json +13 -9
  498. package/data/craftbook-templates/re/resume-cv/logo.webp +0 -0
  499. package/data/craftbook-templates/re/review-code-folder/art.json +17 -0
  500. package/data/craftbook-templates/re/review-code-folder/logo.webp +0 -0
  501. package/data/craftbook-templates/re/review-code-folder/manifest.json +1 -0
  502. package/data/craftbook-templates/re/reviewer-loop/art.json +13 -8
  503. package/data/craftbook-templates/re/reviewer-loop/logo.webp +0 -0
  504. package/data/craftbook-templates/ro/rollback-plan/art.json +14 -10
  505. package/data/craftbook-templates/ro/rollback-plan/logo.webp +0 -0
  506. package/data/craftbook-templates/ro/root-cause-investigation/art.json +13 -8
  507. package/data/craftbook-templates/ro/root-cause-investigation/logo.webp +0 -0
  508. package/data/craftbook-templates/ro/rough-cut-assembly/art.json +13 -9
  509. package/data/craftbook-templates/ro/rough-cut-assembly/logo.webp +0 -0
  510. package/data/craftbook-templates/ru/runbook/art.json +13 -8
  511. package/data/craftbook-templates/ru/runbook/logo.webp +0 -0
  512. package/data/craftbook-templates/sc/schema-migration/art.json +14 -10
  513. package/data/craftbook-templates/sc/schema-migration/logo.webp +0 -0
  514. package/data/craftbook-templates/sc/scrape-to-structured/art.json +13 -9
  515. package/data/craftbook-templates/sc/scrape-to-structured/logo.webp +0 -0
  516. package/data/craftbook-templates/sc/script-automation/art.json +13 -8
  517. package/data/craftbook-templates/sc/script-automation/logo.webp +0 -0
  518. package/data/craftbook-templates/sd/sdk-wrapper/art.json +13 -9
  519. package/data/craftbook-templates/sd/sdk-wrapper/logo.webp +0 -0
  520. package/data/craftbook-templates/se/seasonal-maintenance-sweep/art.json +13 -9
  521. package/data/craftbook-templates/se/seasonal-maintenance-sweep/logo.webp +0 -0
  522. package/data/craftbook-templates/se/security-architecture-review/art.json +13 -8
  523. package/data/craftbook-templates/se/security-architecture-review/logo.webp +0 -0
  524. package/data/craftbook-templates/se/seo-meta-pack/art.json +14 -10
  525. package/data/craftbook-templates/se/seo-meta-pack/logo.webp +0 -0
  526. package/data/craftbook-templates/sh/ship/art.json +13 -8
  527. package/data/craftbook-templates/sh/ship/logo.webp +0 -0
  528. package/data/craftbook-templates/so/social-digest/art.json +17 -0
  529. package/data/craftbook-templates/so/social-digest/logo.webp +0 -0
  530. package/data/craftbook-templates/so/social-thread/art.json +13 -9
  531. package/data/craftbook-templates/so/social-thread/logo.webp +0 -0
  532. package/data/craftbook-templates/so/source-quality-audit/art.json +13 -8
  533. package/data/craftbook-templates/so/source-quality-audit/logo.webp +0 -0
  534. package/data/craftbook-templates/sp/spa-dashboard/art.json +13 -9
  535. package/data/craftbook-templates/sp/spa-dashboard/logo.webp +0 -0
  536. package/data/craftbook-templates/sp/spec-authoring/art.json +13 -9
  537. package/data/craftbook-templates/sp/spec-authoring/logo.webp +0 -0
  538. package/data/craftbook-templates/sp/spec-doc/art.json +13 -9
  539. package/data/craftbook-templates/sp/spec-doc/logo.webp +0 -0
  540. package/data/craftbook-templates/sp/spreadsheet-findings/art.json +17 -0
  541. package/data/craftbook-templates/sp/spreadsheet-findings/logo.webp +0 -0
  542. package/data/craftbook-templates/sp/spreadsheet-findings/manifest.json +1 -0
  543. package/data/craftbook-templates/sp/spreadsheet-model/art.json +13 -9
  544. package/data/craftbook-templates/sp/spreadsheet-model/logo.webp +0 -0
  545. package/data/craftbook-templates/sp/sprite-sheet/art.json +13 -9
  546. package/data/craftbook-templates/sp/sprite-sheet/logo.webp +0 -0
  547. package/data/craftbook-templates/sp/sprite-sheet/versions/1.0.5/craftbook.json +269 -0
  548. package/data/craftbook-templates/sp/sprite-sheet/versions/1.0.5/test.json +94 -0
  549. package/data/craftbook-templates/sq/sql-analysis/art.json +13 -9
  550. package/data/craftbook-templates/sq/sql-analysis/logo.webp +0 -0
  551. package/data/craftbook-templates/st/standup-summary/art.json +13 -9
  552. package/data/craftbook-templates/st/standup-summary/logo.webp +0 -0
  553. package/data/craftbook-templates/st/state-machine/art.json +13 -8
  554. package/data/craftbook-templates/st/state-machine/logo.webp +0 -0
  555. package/data/craftbook-templates/st/status-report/art.json +13 -9
  556. package/data/craftbook-templates/st/status-report/logo.webp +0 -0
  557. package/data/craftbook-templates/su/subscription-audit/art.json +13 -8
  558. package/data/craftbook-templates/su/subscription-audit/logo.webp +0 -0
  559. package/data/craftbook-templates/su/subtitle-generator/art.json +13 -9
  560. package/data/craftbook-templates/su/subtitle-generator/logo.webp +0 -0
  561. package/data/craftbook-templates/su/summarize-long/art.json +14 -10
  562. package/data/craftbook-templates/su/summarize-long/logo.webp +0 -0
  563. package/data/craftbook-templates/su/survey-analysis/art.json +13 -9
  564. package/data/craftbook-templates/su/survey-analysis/logo.webp +0 -0
  565. package/data/craftbook-templates/sv/svg-animation/art.json +13 -9
  566. package/data/craftbook-templates/sv/svg-animation/logo.webp +0 -0
  567. package/data/craftbook-templates/ta/tailor-resume/art.json +13 -9
  568. package/data/craftbook-templates/ta/tailor-resume/logo.webp +0 -0
  569. package/data/craftbook-templates/te/technical-documentation/art.json +13 -9
  570. package/data/craftbook-templates/te/technical-documentation/logo.webp +0 -0
  571. package/data/craftbook-templates/te/test-coverage-review/art.json +13 -8
  572. package/data/craftbook-templates/te/test-coverage-review/logo.webp +0 -0
  573. package/data/craftbook-templates/te/test-suite-backfill/art.json +14 -9
  574. package/data/craftbook-templates/te/test-suite-backfill/logo.webp +0 -0
  575. package/data/craftbook-templates/th/thank-you-batch/art.json +13 -9
  576. package/data/craftbook-templates/th/thank-you-batch/logo.webp +0 -0
  577. package/data/craftbook-templates/th/thank-you-sweep/art.json +13 -9
  578. package/data/craftbook-templates/th/thank-you-sweep/logo.webp +0 -0
  579. package/data/craftbook-templates/th/threat-model/art.json +13 -9
  580. package/data/craftbook-templates/th/threat-model/logo.webp +0 -0
  581. package/data/craftbook-templates/th/thumbnail-generator/art.json +13 -9
  582. package/data/craftbook-templates/th/thumbnail-generator/logo.webp +0 -0
  583. package/data/craftbook-templates/ti/tidy-spreadsheet/art.json +17 -0
  584. package/data/craftbook-templates/ti/tidy-spreadsheet/logo.webp +0 -0
  585. package/data/craftbook-templates/ti/tidy-spreadsheet/manifest.json +1 -0
  586. package/data/craftbook-templates/ti/tileset-batch/art.json +13 -9
  587. package/data/craftbook-templates/ti/tileset-batch/logo.webp +0 -0
  588. package/data/craftbook-templates/ti/tileset-batch/versions/1.0.4/craftbook.json +319 -0
  589. package/data/craftbook-templates/ti/tileset-batch/versions/1.0.4/test.json +162 -0
  590. package/data/craftbook-templates/to/tone-rewrite/art.json +14 -10
  591. package/data/craftbook-templates/to/tone-rewrite/logo.webp +0 -0
  592. package/data/craftbook-templates/to/topic-explainer/art.json +14 -10
  593. package/data/craftbook-templates/to/topic-explainer/logo.webp +0 -0
  594. package/data/craftbook-templates/tr/transcribe-and-shownotes/art.json +13 -9
  595. package/data/craftbook-templates/tr/transcribe-and-shownotes/logo.webp +0 -0
  596. package/data/craftbook-templates/tr/transcribe-audio/art.json +13 -9
  597. package/data/craftbook-templates/tr/transcribe-audio/logo.webp +0 -0
  598. package/data/craftbook-templates/tr/transcribe-index/art.json +13 -9
  599. package/data/craftbook-templates/tr/transcribe-index/logo.webp +0 -0
  600. package/data/craftbook-templates/tr/translate-content/art.json +17 -0
  601. package/data/craftbook-templates/tr/translate-content/logo.webp +0 -0
  602. package/data/craftbook-templates/ty/type-safety-pass/art.json +14 -9
  603. package/data/craftbook-templates/ty/type-safety-pass/logo.webp +0 -0
  604. package/data/craftbook-templates/ux/ux-update/art.json +14 -9
  605. package/data/craftbook-templates/ux/ux-update/logo.webp +0 -0
  606. package/data/craftbook-templates/ve/version-bump/art.json +13 -9
  607. package/data/craftbook-templates/ve/version-bump/logo.webp +0 -0
  608. package/data/craftbook-templates/vi/video-storyboard/art.json +13 -9
  609. package/data/craftbook-templates/vi/video-storyboard/logo.webp +0 -0
  610. package/data/craftbook-templates/vi/visit-prep/art.json +13 -9
  611. package/data/craftbook-templates/vi/visit-prep/logo.webp +0 -0
  612. package/data/craftbook-templates/vo/voiceover-script/art.json +13 -9
  613. package/data/craftbook-templates/vo/voiceover-script/logo.webp +0 -0
  614. package/data/craftbook-templates/we/weak-spot-drill/art.json +13 -9
  615. package/data/craftbook-templates/we/weak-spot-drill/logo.webp +0 -0
  616. package/data/craftbook-templates/we/web-app-crud/art.json +13 -9
  617. package/data/craftbook-templates/we/web-app-crud/logo.webp +0 -0
  618. package/data/craftbook-templates/we/web-component/art.json +13 -9
  619. package/data/craftbook-templates/we/web-component/logo.webp +0 -0
  620. package/data/craftbook-templates/we/webhook-handler/art.json +13 -9
  621. package/data/craftbook-templates/we/webhook-handler/logo.webp +0 -0
  622. package/data/craftbook-templates/we/week-plan/art.json +13 -9
  623. package/data/craftbook-templates/we/week-plan/logo.webp +0 -0
  624. package/data/craftbook-templates/we/weekly-menu-plan/art.json +13 -9
  625. package/data/craftbook-templates/we/weekly-menu-plan/logo.webp +0 -0
  626. package/data/craftbook-templates/we/weekly-pipeline-review/art.json +13 -9
  627. package/data/craftbook-templates/we/weekly-pipeline-review/logo.webp +0 -0
  628. package/data/craftbook-templates/we/weekly-review/art.json +13 -9
  629. package/data/craftbook-templates/we/weekly-review/logo.webp +0 -0
  630. package/data/craftbook-templates/we/weekly-walkthrough/art.json +13 -9
  631. package/data/craftbook-templates/we/weekly-walkthrough/logo.webp +0 -0
  632. package/data/craftbook-templates/wh/whitepaper/art.json +13 -9
  633. package/data/craftbook-templates/wh/whitepaper/logo.webp +0 -0
  634. package/data/craftbook-templates/ye/year-in-review/art.json +13 -9
  635. package/data/craftbook-templates/ye/year-in-review/logo.webp +0 -0
  636. package/data/craftbook-templates/yo/youtube-chapters-seo/art.json +13 -9
  637. package/data/craftbook-templates/yo/youtube-chapters-seo/logo.webp +0 -0
  638. package/data/gezel-templates/il/illustrator/manifest.json +21 -0
  639. package/data/gezel-templates/il/illustrator/versions/1.0.0/about.md +28 -0
  640. package/data/gezel-templates/il/illustrator/versions/1.0.0/manifest.json +9 -0
  641. package/data/gezel-templates/index.json +1 -1
  642. package/data/gezel-templates/raw-index.json +1 -1
  643. package/data/image-models/an/animagine-xl-4/manifest.json +2 -0
  644. package/data/image-models/fl/flux-2-klein-4b-q4/manifest.json +3 -1
  645. package/data/image-models/index.json +1 -1
  646. package/data/image-models/ir/iris-3b-f32/manifest.json +4 -2
  647. package/data/image-models/ir/iris-3b-f32/versions/1.0.2/manifest.json +25 -0
  648. package/data/image-models/kr/krea-2-turbo-q4/manifest.json +2 -0
  649. package/data/image-models/kr/krea-2-turbo-q6/manifest.json +2 -0
  650. package/data/image-models/kr/krea-2-turbo-q8/manifest.json +2 -0
  651. package/data/image-models/mi/ming-image-0.1-design-bf16/manifest.json +2 -0
  652. package/data/image-models/mi/ming-image-0.1-design-bf16/versions/1.0.2/manifest.json +50 -0
  653. package/data/image-models/mo/moss-image-sft-q4/manifest.json +40 -0
  654. package/data/image-models/mo/moss-image-sft-q4/versions/1.0.0/manifest.json +37 -0
  655. package/data/image-models/mo/moss-image-sft-q4/versions/1.0.1/manifest.json +37 -0
  656. package/data/image-models/raw-index.json +1 -1
  657. package/data/image-models/sd/sd-1.5/manifest.json +2 -0
  658. package/data/image-models/sd/sd-turbo/manifest.json +2 -0
  659. package/data/image-models/sd/sdxl-base-1.0/manifest.json +2 -0
  660. package/data/image-models/sd/sdxl-lightning-4step/manifest.json +2 -0
  661. package/data/image-models/sd/sdxl-turbo/manifest.json +2 -0
  662. package/data/knowledge-catalogs/be/bendyline-how-to-books/keywords.json +56 -0
  663. package/data/knowledge-catalogs/ca/caselaw-alaska-part-0001/keywords.json +12 -0
  664. package/data/knowledge-catalogs/ca/caselaw-nevada-part-0001/keywords.json +13 -0
  665. package/data/knowledge-catalogs/ca/caselaw-us-300-399-part-0001/keywords.json +14 -0
  666. package/data/knowledge-catalogs/ca/caselaw-us-347-349/keywords.json +17 -0
  667. package/data/knowledge-catalogs/ca/caselaw-utah-part-0001/keywords.json +12 -0
  668. package/data/knowledge-catalogs/ca/caselaw-utah-part-0002/keywords.json +12 -0
  669. package/data/knowledge-catalogs/ca/caselaw-washington-part-0001/keywords.json +12 -0
  670. package/data/knowledge-catalogs/ca/caselaw-washington-part-0002/keywords.json +12 -0
  671. package/data/knowledge-catalogs/ca/caselaw-washington-part-0003/keywords.json +12 -0
  672. package/data/knowledge-catalogs/ca/caselaw-washington-part-0004/keywords.json +12 -0
  673. package/data/knowledge-catalogs/ca/caselaw-washington-part-0005/keywords.json +12 -0
  674. package/data/knowledge-catalogs/ca/caselaw-wyoming-part-0001/keywords.json +12 -0
  675. package/data/knowledge-catalogs/mi/microsoftdocs-aspnet-core-en/keywords.json +21 -0
  676. package/data/knowledge-catalogs/mi/microsoftdocs-azure-ai-platform-en/keywords.json +27 -0
  677. package/data/knowledge-catalogs/mi/microsoftdocs-azure-apps-compute-en/keywords.json +23 -0
  678. package/data/knowledge-catalogs/mi/microsoftdocs-azure-data-aiot-en/keywords.json +26 -0
  679. package/data/knowledge-catalogs/mi/microsoftdocs-azure-management-hybrid-en/keywords.json +28 -0
  680. package/data/knowledge-catalogs/mi/microsoftdocs-azure-network-security-en/keywords.json +29 -0
  681. package/data/knowledge-catalogs/mi/microsoftdocs-dotnet-en/keywords.json +21 -0
  682. package/data/knowledge-catalogs/mi/microsoftdocs-entity-framework-en/keywords.json +14 -0
  683. package/data/knowledge-catalogs/mi/microsoftdocs-microsoft-365-en/keywords.json +20 -0
  684. package/data/knowledge-catalogs/mi/microsoftdocs-powershell-en/keywords.json +24 -0
  685. package/data/knowledge-catalogs/mi/microsoftdocs-sql-server-en/keywords.json +27 -0
  686. package/data/knowledge-catalogs/mi/microsoftdocs-windows-apps-en/keywords.json +18 -0
  687. package/data/knowledge-catalogs/mi/microsoftdocs-windows-server-en/keywords.json +28 -0
  688. package/data/knowledge-catalogs/re/regional-american-south/keywords.json +1700 -0
  689. package/data/knowledge-catalogs/re/regional-andes-amazon/keywords.json +750 -0
  690. package/data/knowledge-catalogs/re/regional-australia-nz/keywords.json +1281 -0
  691. package/data/knowledge-catalogs/re/regional-brazil/keywords.json +1125 -0
  692. package/data/knowledge-catalogs/re/regional-britain-ireland/keywords.json +3287 -0
  693. package/data/knowledge-catalogs/re/regional-california-southwest/keywords.json +1835 -0
  694. package/data/knowledge-catalogs/re/regional-canada-alaska/keywords.json +1184 -0
  695. package/data/knowledge-catalogs/re/regional-central-eastern-europe/keywords.json +1503 -0
  696. package/data/knowledge-catalogs/re/regional-east-asia/keywords.json +2836 -0
  697. package/data/knowledge-catalogs/re/regional-east-southern-africa/keywords.json +813 -0
  698. package/data/knowledge-catalogs/re/regional-mediterranean/keywords.json +2082 -0
  699. package/data/knowledge-catalogs/re/regional-mexico-central-america/keywords.json +1481 -0
  700. package/data/knowledge-catalogs/re/regional-middle-east/keywords.json +1272 -0
  701. package/data/knowledge-catalogs/re/regional-midwest/keywords.json +758 -0
  702. package/data/knowledge-catalogs/re/regional-north-africa/keywords.json +896 -0
  703. package/data/knowledge-catalogs/re/regional-northeast/keywords.json +1281 -0
  704. package/data/knowledge-catalogs/re/regional-northern-eurasia/keywords.json +346 -0
  705. package/data/knowledge-catalogs/re/regional-northern-europe/keywords.json +2688 -0
  706. package/data/knowledge-catalogs/re/regional-pacific-islands/keywords.json +973 -0
  707. package/data/knowledge-catalogs/re/regional-pacific-northwest/keywords.json +937 -0
  708. package/data/knowledge-catalogs/re/regional-rockies-plains/keywords.json +608 -0
  709. package/data/knowledge-catalogs/re/regional-south-asia/keywords.json +633 -0
  710. package/data/knowledge-catalogs/re/regional-southeast-asia/keywords.json +2697 -0
  711. package/data/knowledge-catalogs/re/regional-southern-cone/keywords.json +606 -0
  712. package/data/knowledge-catalogs/re/regional-west-central-africa/keywords.json +564 -0
  713. package/data/knowledge-catalogs/re/regional-western-europe/keywords.json +3247 -0
  714. package/data/knowledge-catalogs/wi/wikipedia-arts/keywords.json +5437 -0
  715. package/data/knowledge-catalogs/wi/wikipedia-astronomy/keywords.json +4009 -0
  716. package/data/knowledge-catalogs/wi/wikipedia-biology/keywords.json +4009 -0
  717. package/data/knowledge-catalogs/wi/wikipedia-business/keywords.json +5583 -0
  718. package/data/knowledge-catalogs/wi/wikipedia-film-tv/keywords.json +6386 -0
  719. package/data/knowledge-catalogs/wi/wikipedia-food-drink/keywords.json +4009 -0
  720. package/data/knowledge-catalogs/wi/wikipedia-games/keywords.json +5672 -0
  721. package/data/knowledge-catalogs/wi/wikipedia-language/keywords.json +4009 -0
  722. package/data/knowledge-catalogs/wi/wikipedia-law/keywords.json +4009 -0
  723. package/data/knowledge-catalogs/wi/wikipedia-literature/keywords.json +5719 -0
  724. package/data/knowledge-catalogs/wi/wikipedia-mathematics/keywords.json +4009 -0
  725. package/data/knowledge-catalogs/wi/wikipedia-medicine/keywords.json +16009 -0
  726. package/data/knowledge-catalogs/wi/wikipedia-military/keywords.json +5843 -0
  727. package/data/knowledge-catalogs/wi/wikipedia-music/keywords.json +6264 -0
  728. package/data/knowledge-catalogs/wi/wikipedia-politics/keywords.json +5447 -0
  729. package/data/knowledge-catalogs/wi/wikipedia-religion-philosophy/keywords.json +4009 -0
  730. package/data/knowledge-catalogs/wi/wikipedia-science/keywords.json +4009 -0
  731. package/data/knowledge-catalogs/wi/wikipedia-sports/keywords.json +5209 -0
  732. package/data/knowledge-catalogs/wi/wikipedia-technology/keywords.json +6537 -0
  733. package/data/knowledge-catalogs/wi/wikipedia-transportation/keywords.json +5989 -0
  734. package/data/project-types/ca/caregiving-binder/art.json +17 -0
  735. package/data/project-types/ca/caregiving-binder/logo.webp +0 -0
  736. package/data/project-types/ca/caregiving-binder/manifest.json +1 -0
  737. package/data/project-types/ch/checkers/art.json +17 -0
  738. package/data/project-types/ch/checkers/logo.webp +0 -0
  739. package/data/project-types/ch/checkers/manifest.json +1 -0
  740. package/data/project-types/ch/chess/art.json +17 -0
  741. package/data/project-types/ch/chess/logo.webp +0 -0
  742. package/data/project-types/ch/chess/manifest.json +1 -0
  743. package/data/project-types/da/data-analysis/art.json +17 -0
  744. package/data/project-types/da/data-analysis/logo.webp +0 -0
  745. package/data/project-types/da/data-analysis/manifest.json +22 -0
  746. package/data/project-types/da/data-analysis/versions/1.0.0/about.md +20 -0
  747. package/data/project-types/da/data-analysis/versions/1.0.0/manifest.json +70 -0
  748. package/data/project-types/da/data-analysis/versions/1.0.0/mission.md +4 -0
  749. package/data/project-types/da/data-analysis/versions/1.0.0/pages/analytics.js +63 -0
  750. package/data/project-types/da/data-analysis/versions/1.0.0/pages/dashboard.css +86 -0
  751. package/data/project-types/da/data-analysis/versions/1.0.0/pages/dashboard.js +160 -0
  752. package/data/project-types/da/data-analysis/versions/1.0.0/pages/datasets.js +44 -0
  753. package/data/project-types/da/data-analysis/versions/1.0.0/pages/demo.js +9 -0
  754. package/data/project-types/da/data-analysis/versions/1.0.0/pages/index.html +111 -0
  755. package/data/project-types/da/data-analysis/versions/1.0.0/pages/insights.js +129 -0
  756. package/data/project-types/de/design-scheme/art.json +17 -0
  757. package/data/project-types/de/design-scheme/logo.webp +0 -0
  758. package/data/project-types/de/design-scheme/manifest.json +1 -0
  759. package/data/project-types/em/email/art.json +17 -0
  760. package/data/project-types/em/email/logo.webp +0 -0
  761. package/data/project-types/em/email/manifest.json +1 -0
  762. package/data/project-types/ev/event-planner/art.json +17 -0
  763. package/data/project-types/ev/event-planner/logo.webp +0 -0
  764. package/data/project-types/ev/event-planner/manifest.json +1 -0
  765. package/data/project-types/fi/fitness-coach/art.json +17 -0
  766. package/data/project-types/fi/fitness-coach/logo.webp +0 -0
  767. package/data/project-types/fi/fitness-coach/manifest.json +1 -0
  768. package/data/project-types/fl/flashcards/art.json +17 -0
  769. package/data/project-types/fl/flashcards/logo.webp +0 -0
  770. package/data/project-types/fl/flashcards/manifest.json +1 -0
  771. package/data/project-types/fr/freelance-office/art.json +17 -0
  772. package/data/project-types/fr/freelance-office/logo.webp +0 -0
  773. package/data/project-types/fr/freelance-office/manifest.json +1 -0
  774. package/data/project-types/fu/fundraiser-hq/art.json +17 -0
  775. package/data/project-types/fu/fundraiser-hq/logo.webp +0 -0
  776. package/data/project-types/fu/fundraiser-hq/manifest.json +1 -0
  777. package/data/project-types/go/go/art.json +17 -0
  778. package/data/project-types/go/go/logo.webp +0 -0
  779. package/data/project-types/go/go/manifest.json +1 -0
  780. package/data/project-types/ho/household-budget/art.json +17 -0
  781. package/data/project-types/ho/household-budget/logo.webp +0 -0
  782. package/data/project-types/ho/household-budget/manifest.json +1 -0
  783. package/data/project-types/ho/household-manual/art.json +17 -0
  784. package/data/project-types/ho/household-manual/logo.webp +0 -0
  785. package/data/project-types/ho/household-manual/manifest.json +1 -0
  786. package/data/project-types/im/image-feed/art.json +17 -0
  787. package/data/project-types/im/image-feed/logo.webp +0 -0
  788. package/data/project-types/im/image-feed/manifest.json +1 -0
  789. package/data/project-types/index.json +1 -1
  790. package/data/project-types/jo/job-hunt/art.json +17 -0
  791. package/data/project-types/jo/job-hunt/logo.webp +0 -0
  792. package/data/project-types/jo/job-hunt/manifest.json +1 -0
  793. package/data/project-types/ju/just-chat/art.json +17 -0
  794. package/data/project-types/ju/just-chat/logo.webp +0 -0
  795. package/data/project-types/ju/just-chat/manifest.json +1 -0
  796. package/data/project-types/la/language-trainer/art.json +17 -0
  797. package/data/project-types/la/language-trainer/logo.webp +0 -0
  798. package/data/project-types/la/language-trainer/manifest.json +1 -0
  799. package/data/project-types/li/life-binder/art.json +17 -0
  800. package/data/project-types/li/life-binder/logo.webp +0 -0
  801. package/data/project-types/li/life-binder/manifest.json +1 -0
  802. package/data/project-types/me/meal-planner/art.json +17 -0
  803. package/data/project-types/me/meal-planner/logo.webp +0 -0
  804. package/data/project-types/me/meal-planner/manifest.json +1 -0
  805. package/data/project-types/me/media-library/art.json +17 -0
  806. package/data/project-types/me/media-library/logo.webp +0 -0
  807. package/data/project-types/me/media-library/manifest.json +23 -0
  808. package/data/project-types/me/media-library/versions/1.0.0/about.md +17 -0
  809. package/data/project-types/me/media-library/versions/1.0.0/manifest.json +73 -0
  810. package/data/project-types/me/media-library/versions/1.0.0/mission.md +6 -0
  811. package/data/project-types/me/media-library/versions/1.0.0/pages/assets/alpine.svg +1 -0
  812. package/data/project-types/me/media-library/versions/1.0.0/pages/assets/coast.svg +1 -0
  813. package/data/project-types/me/media-library/versions/1.0.0/pages/assets/evening.svg +1 -0
  814. package/data/project-types/me/media-library/versions/1.0.0/pages/assets/forest.svg +1 -0
  815. package/data/project-types/me/media-library/versions/1.0.0/pages/assets/light.webm +0 -0
  816. package/data/project-types/me/media-library/versions/1.0.0/pages/assets/notes.wav +0 -0
  817. package/data/project-types/me/media-library/versions/1.0.0/pages/assets/study.svg +1 -0
  818. package/data/project-types/me/media-library/versions/1.0.0/pages/gallery.css +74 -0
  819. package/data/project-types/me/media-library/versions/1.0.0/pages/gallery.js +153 -0
  820. package/data/project-types/me/media-library/versions/1.0.0/pages/index.html +41 -0
  821. package/data/project-types/me/media-library/versions/1.0.0/pages/media-files.js +41 -0
  822. package/data/project-types/no/novel-writing-room/art.json +17 -0
  823. package/data/project-types/no/novel-writing-room/logo.webp +0 -0
  824. package/data/project-types/no/novel-writing-room/manifest.json +1 -0
  825. package/data/project-types/raw-index.json +1 -1
  826. package/data/project-types/so/social-feed/art.json +17 -0
  827. package/data/project-types/so/social-feed/logo.webp +0 -0
  828. package/data/project-types/so/social-feed/manifest.json +1 -0
  829. package/data/project-types/so/software-project/art.json +17 -0
  830. package/data/project-types/so/software-project/logo.webp +0 -0
  831. package/data/project-types/so/software-project/manifest.json +1 -0
  832. package/data/project-types/tr/trip-planner/art.json +17 -0
  833. package/data/project-types/tr/trip-planner/logo.webp +0 -0
  834. package/data/project-types/tr/trip-planner/manifest.json +1 -0
  835. package/data/project-types/wo/word-clues/art.json +17 -0
  836. package/data/project-types/wo/word-clues/logo.webp +0 -0
  837. package/data/project-types/wo/word-clues/manifest.json +1 -0
  838. package/package.json +4 -2
  839. package/schemas/image-model-identity.schema.json +10 -0
  840. package/schemas/knowledge-catalog-keywords.schema.json +50 -0
  841. package/schemas/project-type-version.schema.json +40 -0
@@ -0,0 +1,17 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "promptVersion": "workshop-mark-cutout-v3",
4
+ "subject": "a leather briefcase with a small key hanging from its handle",
5
+ "sourceSummary": "Run your job search like a campaign — a career coach tracks every application through the pipeline, a mock interviewer gets you ready, and a live board keeps the whole slog navigable.",
6
+ "styleReference": "wikipedia-astronomy",
7
+ "setReference": "data-dictionary-cutout-v3",
8
+ "sheet": "s02",
9
+ "cell": 7,
10
+ "fill": 0.88,
11
+ "shadow": {
12
+ "color": "#1c120a",
13
+ "opacity": 0.38,
14
+ "blur": 0.035,
15
+ "offsetY": 0.025
16
+ }
17
+ }
@@ -19,6 +19,7 @@
19
19
  "maintainer": {
20
20
  "name": "Gezel"
21
21
  },
22
+ "logo": "logo.webp",
22
23
  "license": "MIT",
23
24
  "yankedVersions": []
24
25
  }
@@ -0,0 +1,17 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "promptVersion": "workshop-mark-cutout-v3",
4
+ "subject": "a steaming cup of tea beside a single rounded speech bubble",
5
+ "sourceSummary": "A quiet room for talking — no tasks, no workspace, no deliverables.",
6
+ "styleReference": "wikipedia-astronomy",
7
+ "setReference": "data-dictionary-cutout-v3",
8
+ "sheet": "s02",
9
+ "cell": 4,
10
+ "fill": 0.88,
11
+ "shadow": {
12
+ "color": "#1c120a",
13
+ "opacity": 0.38,
14
+ "blur": 0.035,
15
+ "offsetY": 0.025
16
+ }
17
+ }
@@ -15,6 +15,7 @@
15
15
  "maintainer": {
16
16
  "name": "Gezel"
17
17
  },
18
+ "logo": "logo.webp",
18
19
  "license": "MIT",
19
20
  "yankedVersions": []
20
21
  }
@@ -0,0 +1,17 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "promptVersion": "workshop-mark-cutout-v3",
4
+ "subject": "two overlapping speech bubbles, one filled with a row of three dots",
5
+ "sourceSummary": "Practice a new language by chatting with a patient tutor who corrects gently and tracks your progress.",
6
+ "styleReference": "wikipedia-astronomy",
7
+ "setReference": "data-dictionary-cutout-v3",
8
+ "sheet": "round3-projects",
9
+ "cell": 3,
10
+ "fill": 0.88,
11
+ "shadow": {
12
+ "color": "#1c120a",
13
+ "opacity": 0.38,
14
+ "blur": 0.035,
15
+ "offsetY": 0.025
16
+ }
17
+ }
@@ -14,6 +14,7 @@
14
14
  "maintainer": {
15
15
  "name": "Gezel"
16
16
  },
17
+ "logo": "logo.webp",
17
18
  "license": "MIT",
18
19
  "yankedVersions": []
19
20
  }
@@ -0,0 +1,17 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "promptVersion": "workshop-mark-cutout-v3",
4
+ "subject": "a sturdy fireproof document box with a carry handle and a padlock",
5
+ "sourceSummary": "The \"in case of emergency\" file, actually complete.",
6
+ "styleReference": "wikipedia-astronomy",
7
+ "setReference": "data-dictionary-cutout-v3",
8
+ "sheet": "s03",
9
+ "cell": 2,
10
+ "fill": 0.88,
11
+ "shadow": {
12
+ "color": "#1c120a",
13
+ "opacity": 0.38,
14
+ "blur": 0.035,
15
+ "offsetY": 0.025
16
+ }
17
+ }
@@ -19,6 +19,7 @@
19
19
  "maintainer": {
20
20
  "name": "Gezel"
21
21
  },
22
+ "logo": "logo.webp",
22
23
  "license": "MIT",
23
24
  "yankedVersions": []
24
25
  }
@@ -0,0 +1,17 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "promptVersion": "workshop-mark-cutout-v3",
4
+ "subject": "a cooking pot with a sprig of herbs and three wisps of steam",
5
+ "sourceSummary": "Answer \"what's for dinner?\" once a week.",
6
+ "styleReference": "wikipedia-astronomy",
7
+ "setReference": "data-dictionary-cutout-v3",
8
+ "sheet": "round3-projects",
9
+ "cell": 2,
10
+ "fill": 0.88,
11
+ "shadow": {
12
+ "color": "#1c120a",
13
+ "opacity": 0.38,
14
+ "blur": 0.035,
15
+ "offsetY": 0.025
16
+ }
17
+ }
@@ -15,6 +15,7 @@
15
15
  "maintainer": {
16
16
  "name": "Gezel"
17
17
  },
18
+ "logo": "logo.webp",
18
19
  "license": "MIT",
19
20
  "yankedVersions": []
20
21
  }
@@ -0,0 +1,17 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "promptVersion": "workshop-mark-cutout-v3",
4
+ "subject": "a photo, a short film strip and a vinyl record stacked together",
5
+ "sourceSummary": "Browse a folder of images, videos, and audio in a live gallery.",
6
+ "styleReference": "wikipedia-astronomy",
7
+ "setReference": "data-dictionary-cutout-v3",
8
+ "sheet": "s01",
9
+ "cell": 5,
10
+ "fill": 0.88,
11
+ "shadow": {
12
+ "color": "#1c120a",
13
+ "opacity": 0.38,
14
+ "blur": 0.035,
15
+ "offsetY": 0.025
16
+ }
17
+ }
@@ -0,0 +1,23 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "kind": "project-type",
4
+ "id": "media-library",
5
+ "name": "Media Library",
6
+ "description": "Browse a folder of images, videos, and audio in a live gallery. Preview and play your media without importing or moving the originals.",
7
+ "tags": [
8
+ "photos",
9
+ "images",
10
+ "video",
11
+ "audio",
12
+ "gallery",
13
+ "library",
14
+ "folder"
15
+ ],
16
+ "category": "creative",
17
+ "icon": "camera",
18
+ "maintainer": {
19
+ "name": "Gezel"
20
+ },
21
+ "logo": "logo.webp",
22
+ "license": "MIT"
23
+ }
@@ -0,0 +1,17 @@
1
+ # Media Library
2
+
3
+ This project is a window into a folder of photos, illustrations, videos, and
4
+ recordings. The gallery finds media in the workspace and its subfolders, with
5
+ search, folder and format filters, sorting, and a larger preview. Files stay
6
+ where they are: no import, copy, or reorganization is needed.
7
+
8
+ Help the person find and understand their collection. Preserve original media
9
+ and folder names. Discuss proposed edits or organization before changing files.
10
+ Do not assume a filename or modification date proves when or where a photo was
11
+ taken. Playback depends on the device's supported formats; unpreviewable files
12
+ remain listed and can be opened through Gezel's existing viewers.
13
+
14
+ The shared Add files control can copy selected files into this workspace when managed writes are enabled. Existing names are preserved by choosing a new name. Browsing does not change files. Hidden folders, dependency folders, and document
15
+ companion folders are skipped. Scans stop after 100 folders or 10,000 files and
16
+ clearly label a partial library. The bundled samples are only a standalone demo;
17
+ they are never inserted into a real project's folder.
@@ -0,0 +1,73 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "version": "1.0.0",
4
+ "releasedAt": "2026-10-19T00:00:00Z",
5
+ "extends": "media-production",
6
+ "nameTemplate": "Media Library",
7
+ "aboutTemplate": "about.md",
8
+ "missionTemplate": "mission.md",
9
+ "pages": {
10
+ "entry": "index.html",
11
+ "api": 1,
12
+ "reads": [
13
+ {
14
+ "source": "workspace",
15
+ "path": ".",
16
+ "subtree": true
17
+ }
18
+ ],
19
+ "imports": [
20
+ {
21
+ "id": "library",
22
+ "source": "workspace",
23
+ "path": ".",
24
+ "accept": [
25
+ ".jpg",
26
+ ".jpeg",
27
+ ".png",
28
+ ".gif",
29
+ ".webp",
30
+ ".avif",
31
+ ".bmp",
32
+ ".svg",
33
+ ".ico",
34
+ ".heic",
35
+ ".heif",
36
+ ".tif",
37
+ ".tiff",
38
+ ".dng",
39
+ ".raw",
40
+ ".cr2",
41
+ ".cr3",
42
+ ".nef",
43
+ ".arw",
44
+ ".orf",
45
+ ".raf",
46
+ ".mp4",
47
+ ".webm",
48
+ ".mov",
49
+ ".m4v",
50
+ ".ogv",
51
+ ".avi",
52
+ ".mkv",
53
+ ".mpg",
54
+ ".mpeg",
55
+ ".mts",
56
+ ".m2ts",
57
+ ".mp3",
58
+ ".wav",
59
+ ".ogg",
60
+ ".oga",
61
+ ".m4a",
62
+ ".aac",
63
+ ".flac",
64
+ ".opus",
65
+ ".aif",
66
+ ".aiff",
67
+ ".wma"
68
+ ],
69
+ "maxFileBytes": 268435456
70
+ }
71
+ ]
72
+ }
73
+ }
@@ -0,0 +1,6 @@
1
+ # Mission
2
+
3
+ - Make the media in the selected folder easy to find and browse.
4
+ - Preview images and play supported video and audio in place.
5
+ - Keep original files intact and make unavailable previews clear.
6
+ - Reflect new, renamed, and removed files as the folder changes.
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="800" height="600" viewBox="0 0 800 600"><title>Alpine morning — sample illustration</title><rect width="800" height="600" fill="#d8e5e1"/><circle cx="630" cy="135" r="58" fill="#edca91"/><path d="M0 450L210 120l175 230 120-170 295 290v130H0" fill="#829894"/><path d="M135 238l75-118 84 110-80-29z M460 243l45-63 72 76-73-27z" fill="#f9f4e9"/><path d="M0 460Q230 330 440 475T800 435v165H0" fill="#556f66"/><path d="M0 530Q280 420 500 540T800 500v100H0" fill="#354f48"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="800" height="600" viewBox="0 0 800 600"><title>Quiet coast — sample illustration</title><rect width="800" height="600" fill="#e6ded0"/><circle cx="570" cy="150" r="72" fill="#d8aa78"/><path d="M0 290Q180 270 800 305v295H0" fill="#9db9bb"/><path d="M0 400Q180 390 380 450T800 470v130H0" fill="#698e91"/><path d="M0 600V470Q260 400 380 475T800 530v70" fill="#d8c6a9"/><path d="M0 480Q240 414 395 487T800 541" stroke="#f7eee1" stroke-width="8" fill="none"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="800" height="600" viewBox="0 0 800 600"><title>Evening light — sample illustration</title><rect width="800" height="600" fill="#ccb7a7"/><circle cx="380" cy="285" r="100" fill="#e5b880"/><path d="M0 400Q240 190 475 400T800 320v280H0" fill="#9a8275"/><path d="M0 460Q250 330 510 450T800 420v180H0" fill="#6c7370"/><path d="M0 535Q210 450 450 550T800 470v130H0" fill="#3e5555"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="800" height="600" viewBox="0 0 800 600"><title>Forest path — sample illustration</title><rect width="800" height="600" fill="#becab3"/><path d="M0 600V290Q300 250 800 320v280" fill="#738971"/><path d="M285 600Q440 420 410 300Q485 430 535 600" fill="#c6b68e"/><g fill="#425e4a"><path d="M40 0h50v600H40z M180 0h38v600h-38z M570 0h60v600h-60z M730 0h50v600h-50z"/><circle cx="100" cy="75" r="140"/><circle cx="650" cy="35" r="180"/></g><g fill="#263f33"><path d="M10 0h30v600H10z M665 0h25v600h-25z"/></g></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="800" height="600" viewBox="0 0 800 600"><title>Color study — sample illustration</title><rect width="800" height="600" fill="#e9decc"/><rect x="130" y="100" width="270" height="340" rx="8" fill="#ad6b4b"/><circle cx="450" cy="300" r="170" fill="#63765c"/><rect x="355" y="350" width="280" height="150" rx="6" fill="#d4b16c"/><path d="M170 490L270 300l90 190z" fill="#3f555b"/></svg>
@@ -0,0 +1,74 @@
1
+ :root {
2
+ color-scheme: light dark;
3
+ --bg: #faf7f2; --surface: #fffdf9; --text: #2b2620; --muted: #71675c;
4
+ --border: #dcd4c8; --accent: #835333; --soft: #eee5da; --danger: #a42b2b;
5
+ font-family: var(--font-body, system-ui, sans-serif); font-size: 16px;
6
+ }
7
+ @media (prefers-color-scheme: dark) { :root { --bg: #1c1a17; --surface: #262320; --text: #efe9e0; --muted: #b9aea0; --border: #464039; --accent: #e2b38c; --soft: #332b24; --danger: #ffaaaa; } }
8
+ :root[data-theme="light"] { color-scheme: light; --bg: #faf7f2; --surface: #fffdf9; --text: #2b2620; --muted: #71675c; --border: #dcd4c8; --accent: #835333; --soft: #eee5da; --danger: #a42b2b; }
9
+ :root[data-theme="dark"] { color-scheme: dark; --bg: #1c1a17; --surface: #262320; --text: #efe9e0; --muted: #b9aea0; --border: #464039; --accent: #e2b38c; --soft: #332b24; --danger: #ffaaaa; }
10
+ * { box-sizing: border-box; }
11
+ [hidden] { display: none !important; }
12
+ body { margin: 0; background: var(--bg); color: var(--text); line-height: 1.5; }
13
+ main { max-width: 1220px; margin: auto; padding: clamp(16px, 4vw, 44px); }
14
+ h1,h2 { font-family: var(--font-heading, Georgia, serif); font-weight: 400; line-height: 1.25; }
15
+ h1 { font-size: clamp(1.8rem, 5vw, 2.5rem); margin: 0; }
16
+ h2 { margin: 0; font-size: 1.3rem; overflow-wrap: anywhere; }
17
+ p { margin: 0 0 12px; }
18
+ header, .toolbar, .library-heading, .preview-heading, .preview-actions { display: flex; align-items: center; justify-content: space-between; gap: 16px; }
19
+ header { margin: 26px 0 22px; }
20
+ .eyebrow { color: var(--accent); font-size: .8rem; letter-spacing: .08em; text-transform: uppercase; margin-bottom: 8px; }
21
+ .intro { margin: 8px 0 0; color: var(--muted); }
22
+ button,input,select { font: inherit; font-family: var(--font-ui, system-ui, sans-serif); border: 1px solid var(--border); border-radius: 6px; color: var(--text); background: var(--surface); min-height: 44px; padding: 9px 12px; }
23
+ button { cursor: pointer; box-shadow: inset 0 1px 0 color-mix(in srgb, var(--text) 5%, transparent), 0 1px 2px #0000000d; }
24
+ button:hover { border-color: var(--accent); background: var(--soft); }
25
+ button:disabled { opacity: .5; cursor: default; }
26
+ :focus-visible { outline: 2px solid var(--accent); outline-offset: 3px; }
27
+ input,select { display: block; width: 100%; margin-top: 5px; font-size: .9rem; }
28
+ .counts { display: flex; flex-wrap: wrap; gap: 28px; border-block: 1px solid var(--border); padding: 16px 0; margin: 24px 0; }
29
+ .counts div { display: flex; align-items: baseline; gap: 10px; }
30
+ dt { color: var(--muted); font-size: .85rem; } dd { margin: 0; font-size: 1.3rem; font-variant-numeric: tabular-nums; }
31
+ .filters { display: flex; gap: 12px; flex-wrap: wrap; margin: 20px 0; }
32
+ .filters label { flex: 1 1 120px; min-width: 0; color: var(--muted); font-size: .8rem; }
33
+ .filters label:first-child { flex: 2 1 210px; }
34
+ .muted, #status, footer, #updated { color: var(--muted); font-size: .85rem; }
35
+ .toolbar { margin-bottom: 16px; flex-wrap: wrap; }
36
+ .toolbar p { margin: 0; }
37
+ .view-choices { display: inline-flex; gap: 4px; padding: 4px; background: var(--soft); border: 1px solid var(--border); border-radius: 6px; }
38
+ .view-choices button { font-size: .85rem; }
39
+ .view-choices [aria-pressed="true"] { border-color: var(--accent); background: var(--soft); color: var(--accent); box-shadow: inset 0 1px 3px #0002; }
40
+ #gallery { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); list-style: none; gap: 20px; margin: 0; padding: 0; }
41
+ #gallery li { min-width: 0; }
42
+ svg { width: 36px; height: 36px; stroke: currentColor; stroke-width: 1.4; fill: none; stroke-linecap: round; stroke-linejoin: round; }
43
+ #gallery[data-view="list"] { grid-template-columns: 1fr; gap: 8px; }
44
+ #show-more { display: block; margin: 24px auto; }
45
+ .empty { padding: 40px 20px; text-align: center; border: 1px dashed var(--border); border-radius: 10px; background: var(--surface); }
46
+ .empty p { margin: 12px 0 0; color: var(--muted); }
47
+ #error,#preview-error { color: var(--danger); overflow-wrap: anywhere; }
48
+ .notice,[data-gezel-demo-banner] { padding: 12px 16px; background: var(--soft); border-radius: 6px; font-size: .85rem; }
49
+ [data-gezel-demo-banner] { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
50
+ footer { margin-top: 32px; }
51
+ dialog { width: min(1040px, calc(100% - 32px)); max-height: calc(100dvh - 32px); padding: 20px; background: var(--bg); color: var(--text); border: 1px solid var(--border); border-radius: 10px; }
52
+ dialog::backdrop { background: #000b; }
53
+ .preview-heading { align-items: flex-start; }
54
+ .preview-heading > div { min-width: 0; }
55
+ #preview-path { overflow-wrap: anywhere; margin: 6px 0 0; }
56
+ #preview-media { min-height: 160px; max-height: 62dvh; display: flex; align-items: center; justify-content: center; margin: 20px 0 12px; background: var(--soft); border-radius: 6px; overflow: hidden; }
57
+ #preview-media img,#preview-media video { display: block; max-width: 100%; max-height: 62dvh; object-fit: contain; }
58
+ #preview-media audio { width: min(600px, 100%); }
59
+ .preview-actions { flex-wrap: wrap; }
60
+ .navigation { display: flex; align-items: center; gap: 12px; }
61
+ #position { font-size: .8rem; color: var(--muted); }
62
+ @media (max-width: 480px) {
63
+ #gallery { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; }
64
+ .counts { gap: 20px; }
65
+ header { align-items: flex-start; }
66
+ .library-heading { align-items: flex-start; flex-direction: column; gap: 4px; }
67
+ dialog { padding: 14px; }
68
+ .preview-heading { flex-wrap: wrap; }
69
+ .navigation { flex-wrap: wrap; gap: 8px; }
70
+ [data-gezel-demo-banner] { align-items: flex-start; flex-direction: column; }
71
+ }
72
+
73
+ /* Shared components own file presentation; the page owns its layout. */
74
+ #add-files { margin: 20px 0; }
@@ -0,0 +1,153 @@
1
+ (() => {
2
+ 'use strict';
3
+ const model = window.mediaLibraryFiles;
4
+ const $ = (id) => document.getElementById(id);
5
+ const labels = { image: 'Image', video: 'Video', audio: 'Audio' };
6
+ const icons = { image: 'M3 3h18v18H3z M3 16l5-5 5 5 4-4 4 4 M15 7h.01', video: 'M4 3h16v18H4z M4 7h16 M4 17h16 M10 10l5 2-5 2z', audio: 'M9 18V5l11-2v12 M9 8l11-2 M9 18c0 3-6 3-6 0s6-3 6 0 M20 15c0 3-6 3-6 0s6-3 6 0' };
7
+ const samples = [
8
+ ['Journeys/Alpine morning.svg', 'alpine.svg', 2210], ['Journeys/Quiet coast.svg', 'coast.svg', 1840],
9
+ ['Journeys/Forest path.svg', 'forest.svg', 2670], ['Studio/Color study.svg', 'study.svg', 1420],
10
+ ['Studio/Evening light.svg', 'evening.svg', 1980], ['Motion/Light study.webm', 'light.webm', 24000],
11
+ ['Recordings/Three notes.wav', 'notes.wav', 96044],
12
+ ].map(([path, asset, size], i) => ({ path, asset, kind: model.kind(path), size, mtime: 1792368000000 - i * 86400000 }));
13
+ const api = window.gezel || window.makeDemoGezel({ page: { typeName: 'Media Library' }, existingPaths: samples.map(file => file.path) });
14
+ const demoMode = api.page.mode === 'demo';
15
+ const components = api.ui.components;
16
+ const componentCards = [];
17
+ const mountAdder = () => components.fileAdder('#add-files', { target: 'library', onAdded: () => refresh() });
18
+ let adder = mountAdder();
19
+ let files = [], shown = [], visible = 24, view = 'grid', busy = false, again = false, stopped = false, debounce, currentPath = null, previewRevision = 0, focusPath = null;
20
+ const watches = new Map();
21
+ function element(tag, text, className) { const el = document.createElement(tag); if (text !== undefined) el.textContent = text; if (className) el.className = className; return el; }
22
+ function icon(type) {
23
+ const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
24
+ svg.setAttribute('viewBox', '0 0 24 24'); svg.setAttribute('aria-hidden', 'true');
25
+ const path = document.createElementNS(svg.namespaceURI, 'path'); path.setAttribute('d', icons[type]); svg.append(path); return svg;
26
+ }
27
+ function message(id, text) { $(id).textContent = text; $(id).hidden = !text; }
28
+ function size(value) {
29
+ if (value < 1024) return `${value} B`;
30
+ const units = ['KB', 'MB', 'GB', 'TB']; let n = value / 1024, i = 0;
31
+ while (n >= 1024 && i < units.length - 1) { n /= 1024; i++; }
32
+ return `${new Intl.NumberFormat(undefined, { maximumFractionDigits: 1 }).format(n)} ${units[i]}`;
33
+ }
34
+ const stamp = (value) => value ? new Date(value).toLocaleDateString(undefined, { year: 'numeric', month: 'short', day: 'numeric' }) : 'Date unavailable';
35
+ const mediaUrl = (file) => demoMode && file.asset ? `assets/${file.asset}` : api.data.url(file.path);
36
+ function stopPlayback() {
37
+ previewRevision++;
38
+ for (const media of $('preview-media').querySelectorAll('video,audio')) { media.pause(); media.removeAttribute('src'); media.load(); }
39
+ $('preview-media').replaceChildren();
40
+ }
41
+ function card(file) {
42
+ const li = document.createElement('li');
43
+ const card = components.fileCard(li, { file: { ...file, source: 'workspace' }, variant: view === 'list' ? 'row' : 'tile', thumbnail: file.kind === 'image' && model.browserImages.has(model.extension(file.path)) ? mediaUrl(file) : false, onActivate: () => openPreview(file.path) });
44
+ card.element.dataset.path = file.path; componentCards.push(card); return li;
45
+ }
46
+ function render() {
47
+ const previousFocus = document.activeElement?.dataset.path;
48
+ shown = model.select(files, { query: $('search').value, kind: $('kind').value, folder: $('folder').value, sort: $('sort').value });
49
+ $('gallery').dataset.view = view;
50
+ componentCards.splice(0).forEach(card => card.destroy());
51
+ $('gallery').replaceChildren(...shown.slice(0, visible).map(card));
52
+ for (const type of ['image', 'video', 'audio']) $(`${type}-count`).textContent = files.filter((f) => f.kind === type).length.toLocaleString();
53
+ $('file-count').textContent = `${files.length.toLocaleString()} media file${files.length === 1 ? '' : 's'}`;
54
+ $('status').textContent = shown.length > visible ? `Showing ${visible} of ${shown.length.toLocaleString()} matches` : `${shown.length.toLocaleString()} of ${files.length.toLocaleString()} media files`;
55
+ $('empty').hidden = files.length > 0;
56
+ $('no-matches').hidden = files.length === 0 || shown.length > 0;
57
+ $('show-more').hidden = shown.length <= visible;
58
+ $('view-grid').setAttribute('aria-pressed', String(view === 'grid')); $('view-list').setAttribute('aria-pressed', String(view === 'list'));
59
+ if (previousFocus) [...$('gallery').querySelectorAll('gezel-file-card')].find((el) => el.dataset.path === previousFocus)?.shadowRoot.querySelector('button').focus();
60
+ }
61
+ function openPreview(path) {
62
+ const file = files.find((f) => f.path === path); if (!file) return;
63
+ const wasOpen = $('preview').open;
64
+ if (!wasOpen) focusPath = path;
65
+ stopPlayback(); currentPath = path;
66
+ const rev = previewRevision;
67
+ $('preview-title').textContent = path.split('/').pop();
68
+ $('preview-path').textContent = path;
69
+ $('preview-detail').textContent = `${labels[file.kind]} · ${model.extension(path).toUpperCase()} · ${size(file.size)} · Modified ${stamp(file.mtime)}`;
70
+ message('preview-error', '');
71
+ $('open-file').hidden = !demoMode && (api.page.mode !== 'embedded' || !api.data.open);
72
+ const index = shown.findIndex((f) => f.path === path);
73
+ $('previous').disabled = index <= 0; $('next').disabled = index < 0 || index >= shown.length - 1;
74
+ $('position').textContent = index < 0 ? '' : `${index + 1} of ${shown.length}`;
75
+ if (file.kind === 'image' && !model.browserImages.has(model.extension(path))) {
76
+ $('preview-media').append(icon(file.kind));
77
+ message('preview-error', 'This image format cannot be previewed here. Open the file in Gezel to explore available viewers.');
78
+ } else {
79
+ const media = document.createElement(file.kind === 'image' ? 'img' : file.kind);
80
+ if (file.kind === 'image') media.alt = file.path.split('/').pop();
81
+ else { media.controls = true; media.preload = 'metadata'; if (file.kind === 'video') media.playsInline = true; }
82
+ media.addEventListener('error', () => {
83
+ if (rev !== previewRevision) return;
84
+ message('preview-error', 'This file could not be previewed. Its format may be unsupported, or the file may have moved. Try Refresh or open it in Gezel.');
85
+ });
86
+ media.addEventListener(file.kind === 'image' ? 'load' : 'loadedmetadata', () => {
87
+ if (rev !== previewRevision) return;
88
+ const dimensions = file.kind === 'image' ? `${media.naturalWidth} × ${media.naturalHeight}` : file.kind === 'video' ? `${media.videoWidth} × ${media.videoHeight}` : '';
89
+ const seconds = Number.isFinite(media.duration) ? `${Math.floor(media.duration / 60)}:${String(Math.floor(media.duration % 60)).padStart(2, '0')}` : '';
90
+ $('preview-detail').textContent = [labels[file.kind], dimensions, seconds, size(file.size), `Modified ${stamp(file.mtime)}`].filter(Boolean).join(' · ');
91
+ });
92
+ try { media.src = mediaUrl(file); $('preview-media').append(media); }
93
+ catch (error) { message('preview-error', error.message || 'Media preview is unavailable on this device.'); }
94
+ }
95
+ if (!wasOpen) $('preview').showModal();
96
+ }
97
+ function move(delta) {
98
+ const at = shown.findIndex((f) => f.path === currentPath); const next = shown[at + delta];
99
+ if (at >= 0 && next) openPreview(next.path);
100
+ }
101
+ function schedule() { clearTimeout(debounce); debounce = setTimeout(() => { if (!stopped) void refresh(); }, 250); }
102
+ async function refresh() {
103
+ if (busy) { again = true; return; } busy = true; $('refresh').disabled = true;
104
+ $('gallery').setAttribute('aria-busy', 'true'); message('error', '');
105
+ try {
106
+ const result = demoMode ? { files: samples.concat(components.demo.files().map(file => ({ ...file, kind: model.kind(file.path) }))), folders: ['.', 'Journeys', 'Studio', 'Motion', 'Recordings'] } : await model.scan((path) => api.data.list(path), { cancelled: () => stopped });
107
+ if (stopped) return;
108
+ files = result.files;
109
+ const chosen = $('folder').value;
110
+ const option = (value, text) => { const el = element('option', text); el.value = value; return el; };
111
+ $('folder').replaceChildren(option('', 'All folders'), ...result.folders.map((path) => option(path, path === '.' ? 'Project folder only' : path)));
112
+ $('folder').value = result.folders.includes(chosen) ? chosen : '';
113
+ const notes = [];
114
+ if (result.limited) notes.push(`Partial library: scanned up to ${result.maxFolders} folders and ${result.maxFiles.toLocaleString()} files.`);
115
+ if (result.skipped) notes.push(`${result.skipped} subfolder${result.skipped === 1 ? '' : 's'} could not be read.`);
116
+ message('notice', notes.join(' '));
117
+ if (!demoMode) {
118
+ const visited = new Set(result.folders);
119
+ for (const [path, stop] of watches) if (!visited.has(path)) { stop(); watches.delete(path); }
120
+ for (const path of visited) if (!watches.has(path)) watches.set(path, api.data.watch(path, schedule, { intervalMs: 15000 }));
121
+ }
122
+ render();
123
+ $('updated').textContent = demoMode ? 'Sample library' : `Updated ${new Date().toLocaleTimeString(undefined, { hour: 'numeric', minute: '2-digit' })}`;
124
+ if (currentPath && !files.some((f) => f.path === currentPath)) { stopPlayback(); message('preview-error', 'This file is no longer in the library. Close this preview to browse the updated folder.'); $('open-file').hidden = true; $('previous').disabled = true; $('next').disabled = true; }
125
+ } catch (error) { message('error', `Could not read the folder: ${error.message || 'Try Refresh.'}`); $('status').textContent = files.length ? 'Showing the previous listing.' : 'Folder unavailable.'; }
126
+ finally { busy = false; $('refresh').disabled = false; $('gallery').removeAttribute('aria-busy'); if (again && !stopped) { again = false; schedule(); } }
127
+ }
128
+ $('search').addEventListener('input', () => { visible = 24; render(); });
129
+ for (const id of ['kind', 'folder', 'sort']) $(id).addEventListener('change', () => { visible = 24; render(); });
130
+ for (const style of ['grid', 'list']) $(`view-${style}`).addEventListener('click', () => { view = style; render(); });
131
+ $('show-more').addEventListener('click', () => { visible += 24; render(); });
132
+ $('refresh').addEventListener('click', () => { void refresh(); });
133
+ $('reset-demo').addEventListener('click', () => { components.demo.reset(); adder.destroy(); adder = mountAdder(); $('search').value = ''; $('kind').value = ''; $('folder').value = ''; $('sort').value = 'newest'; visible = 24; view = 'grid'; $('preview').close(); void refresh(); });
134
+ $('close-preview').addEventListener('click', () => $('preview').close());
135
+ $('preview').addEventListener('close', () => { stopPlayback(); currentPath = null; [...$('gallery').querySelectorAll('gezel-file-card')].find((el) => el.dataset.path === focusPath)?.shadowRoot.querySelector('button').focus(); });
136
+ $('previous').addEventListener('click', () => move(-1)); $('next').addEventListener('click', () => move(1));
137
+ $('preview').addEventListener('keydown', (e) => {
138
+ if (['VIDEO', 'AUDIO', 'INPUT', 'SELECT'].includes(e.target.tagName)) return;
139
+ if (e.key === 'ArrowLeft' || e.key === 'ArrowRight') { e.preventDefault(); move(e.key === 'ArrowLeft' ? -1 : 1); }
140
+ });
141
+ $('open-file').addEventListener('click', async () => {
142
+ if (demoMode) { message('preview-error', 'In Gezel, this button opens the original file in its project viewer.'); return; }
143
+ try { await api.data.open(currentPath); $('preview').close(); }
144
+ catch (error) { message('preview-error', error.message || 'Could not open the file.'); }
145
+ });
146
+ document.querySelector('[data-gezel-demo-banner]').hidden = !demoMode;
147
+ const theme = ({ mode }) => { document.documentElement.dataset.theme = mode; };
148
+ theme(api.ui.theme); const stopTheme = api.ui.onTheme(theme);
149
+ const timer = demoMode ? null : setInterval(() => { if (document.visibilityState !== 'hidden') void refresh(); }, 30000);
150
+ document.addEventListener('visibilitychange', () => { if (!demoMode && document.visibilityState !== 'hidden') schedule(); });
151
+ window.addEventListener('pagehide', () => { stopped = true; adder.destroy(); componentCards.forEach(card => card.destroy()); clearTimeout(debounce); clearInterval(timer); stopPlayback(); stopTheme(); for (const stop of watches.values()) stop(); }, { once: true });
152
+ void refresh();
153
+ })();
@@ -0,0 +1,41 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
6
+ <meta name="gezel-demo" content="standalone" />
7
+ <title>Media Library</title>
8
+ <link rel="stylesheet" href="gallery.css" />
9
+ <script src="media-files.js" defer></script>
10
+ <script src="gallery.js" defer></script>
11
+ </head>
12
+ <body>
13
+ <main>
14
+ <aside data-gezel-demo-banner hidden><span>Sample library. Illustrations, a short clip, and three notes — all local to this page.</span><button id="reset-demo" type="button">Reset demo</button></aside>
15
+ <header><div><p class="eyebrow">Your collection, in place</p><h1>Media Library</h1><p class="intro">A window into your photos, films, and recordings.</p></div><button id="refresh" type="button">Refresh</button></header>
16
+ <div id="add-files"></div>
17
+ <dl class="counts" aria-label="Library summary"><div><dt>Images</dt><dd id="image-count">—</dd></div><div><dt>Videos</dt><dd id="video-count">—</dd></div><div><dt>Audio</dt><dd id="audio-count">—</dd></div></dl>
18
+ <section aria-labelledby="library-heading">
19
+ <div class="library-heading"><h2 id="library-heading">Browse your library</h2><span id="updated"></span></div>
20
+ <div class="filters">
21
+ <label>Find media<input id="search" type="search" placeholder="Search names and folders…" /></label>
22
+ <label>Media type<select id="kind"><option value="">All media</option><option value="image">Images</option><option value="video">Videos</option><option value="audio">Audio</option></select></label>
23
+ <label>Folder<select id="folder"><option value="">All folders</option></select></label>
24
+ <label>Sort by<select id="sort"><option value="newest">Recently modified</option><option value="oldest">Oldest modified</option><option value="name">Name</option><option value="size">Largest first</option></select></label>
25
+ </div>
26
+ <div class="toolbar"><p id="status" role="status" aria-live="polite">Looking for media…</p><div class="view-choices" role="group" aria-label="Gallery layout"><button id="view-grid" type="button" aria-pressed="true">Grid</button><button id="view-list" type="button" aria-pressed="false">List</button></div></div>
27
+ <p id="error" role="alert" hidden></p><p id="notice" class="notice" hidden></p>
28
+ <ul id="gallery" data-view="grid" aria-label="Media files"></ul>
29
+ <button id="show-more" type="button" hidden>Show more</button>
30
+ <div id="empty" class="empty" hidden><h2>Your library starts here</h2><p>Choose a media folder when creating this project, or set its folder in project settings. Images, videos, and audio in that folder and its subfolders appear automatically.</p></div>
31
+ <p id="no-matches" class="empty" hidden>No media matches these filters. Try another name, folder, or media type.</p>
32
+ </section>
33
+ <footer><span id="file-count"></span> · Originals stay in your folder. Add files copies selected files into this folder. Playback depends on the formats supported by your device.</footer>
34
+ </main>
35
+ <dialog id="preview" aria-labelledby="preview-title">
36
+ <div class="preview-heading"><div><h2 id="preview-title"></h2><p id="preview-path" class="muted"></p></div><button id="close-preview" type="button" autofocus>Close</button></div>
37
+ <div id="preview-media"></div><p id="preview-detail" class="muted"></p><p id="preview-error" role="status" hidden></p>
38
+ <div class="preview-actions"><div class="navigation"><button id="previous" type="button">Previous</button><span id="position"></span><button id="next" type="button">Next</button></div><button id="open-file" type="button">Open in Gezel</button></div>
39
+ </dialog>
40
+ </body>
41
+ </html>