@flickfyi/flkr 0.0.182 → 0.0.185

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 (243) hide show
  1. package/dist/{api-client-CAg1b8Bh.js → api-client-nn4U_Vfn.js} +1 -1
  2. package/dist/{app-DpM5nhb9.js → app-COXGJhrt.js} +3 -3
  3. package/dist/{bundler-DNrDcqyk.js → bundler-CW4YC73e.js} +4 -2
  4. package/dist/cli.js +11 -11
  5. package/dist/{delegate-DcVye0KE.js → delegate-aUVluBjB.js} +2 -2
  6. package/dist/{generate-B1l1z_FZ.js → generate-BeL1QPDi.js} +1 -1
  7. package/dist/{preview-Dqn_Tq6K.js → preview-DTVM8Csb.js} +2 -2
  8. package/dist/{publish-BmDqO1xU.js → publish-BJG-s-w5.js} +4 -4
  9. package/dist/{pull-CO80DMn8.js → pull-B_Yfjpi2.js} +1 -1
  10. package/dist/{save-8crfOeo1.js → save-UrfgmK2-.js} +2 -2
  11. package/dist/{sdk-app-BXWrf_pf.js → sdk-app-BAxznAf9.js} +3 -3
  12. package/dist/{sdk-deploy-CaEonlvx.js → sdk-deploy-D1wgQxse.js} +3 -3
  13. package/dist/{sdk-generation-CF8ATbrL.js → sdk-generation-CLQ-QrVM.js} +1 -1
  14. package/dist/{sdk-project-CKV3U3u9.js → sdk-project-BaO0fqhW.js} +1 -1
  15. package/dist/{use-auth-B6nwU2rp.js → use-auth-CtM4_BAY.js} +1 -1
  16. package/node_modules/@flickfyi/biscuit/.turbo/turbo-build.log +4 -4
  17. package/node_modules/@flickfyi/core/README.md +19 -9
  18. package/node_modules/@flickfyi/core/dist/chunks/{default-CuxDsQoM.js → default-BTmKidHV.js} +1 -1
  19. package/node_modules/@flickfyi/core/dist/chunks/{default-BB6YexEH.cjs → default-JhTq5I_y.cjs} +1 -1
  20. package/node_modules/@flickfyi/core/dist/chunks/{define-CUJRqVKY.cjs → define-BKCRhpuY.cjs} +1 -1
  21. package/node_modules/@flickfyi/core/dist/chunks/{define-e_VqSs4M.js → define-DZXgUsy7.js} +5 -5
  22. package/node_modules/@flickfyi/core/dist/kowalski/catalog.cjs +1 -1
  23. package/node_modules/@flickfyi/core/dist/kowalski/catalog.js +728 -549
  24. package/node_modules/@flickfyi/core/dist/kowalski/index.cjs +5 -5
  25. package/node_modules/@flickfyi/core/dist/kowalski/index.js +4297 -3700
  26. package/node_modules/@flickfyi/core/dist/kowalski/schemas.cjs +1 -0
  27. package/node_modules/@flickfyi/core/dist/kowalski/schemas.js +637 -0
  28. package/node_modules/@flickfyi/core/dist/kowalski-catalog.css +516 -0
  29. package/node_modules/@flickfyi/core/dist/kowalski.css +10 -0
  30. package/node_modules/@flickfyi/core/dist/themes/athletic/athletic.cjs +1 -1
  31. package/node_modules/@flickfyi/core/dist/themes/athletic/athletic.js +1 -1
  32. package/node_modules/@flickfyi/core/dist/themes/compact/compact.cjs +1 -1
  33. package/node_modules/@flickfyi/core/dist/themes/compact/compact.js +1 -1
  34. package/node_modules/@flickfyi/core/dist/themes/default/default.cjs +1 -1
  35. package/node_modules/@flickfyi/core/dist/themes/default/default.js +1 -1
  36. package/node_modules/@flickfyi/core/dist/themes/editorial/editorial.cjs +1 -1
  37. package/node_modules/@flickfyi/core/dist/themes/editorial/editorial.js +1 -1
  38. package/node_modules/@flickfyi/core/dist/themes/handwritten/handwritten.cjs +1 -1
  39. package/node_modules/@flickfyi/core/dist/themes/handwritten/handwritten.js +1 -1
  40. package/node_modules/@flickfyi/core/dist/themes/index.cjs +1 -1
  41. package/node_modules/@flickfyi/core/dist/themes/index.js +1 -1
  42. package/node_modules/@flickfyi/core/dist/themes/kids/kids.cjs +1 -1
  43. package/node_modules/@flickfyi/core/dist/themes/kids/kids.js +1 -1
  44. package/node_modules/@flickfyi/core/dist/themes/rounded/rounded.cjs +1 -1
  45. package/node_modules/@flickfyi/core/dist/themes/rounded/rounded.js +1 -1
  46. package/node_modules/@flickfyi/core/dist/themes/technical/technical.cjs +1 -1
  47. package/node_modules/@flickfyi/core/dist/themes/technical/technical.js +1 -1
  48. package/node_modules/@flickfyi/core/dist-types/hooks/use-feature-store/index.d.ts +43 -0
  49. package/node_modules/@flickfyi/core/dist-types/kowalski/calculations.d.ts +57 -3
  50. package/node_modules/@flickfyi/core/dist-types/kowalski/calculator.d.ts +7 -6
  51. package/node_modules/@flickfyi/core/dist-types/kowalski/catalog.d.cts +524 -809
  52. package/node_modules/@flickfyi/core/dist-types/kowalski/catalog.d.ts +524 -809
  53. package/node_modules/@flickfyi/core/dist-types/kowalski/components/bill-split.d.ts +38 -0
  54. package/node_modules/@flickfyi/core/dist-types/kowalski/components/bookmark.d.ts +48 -0
  55. package/node_modules/@flickfyi/core/dist-types/kowalski/components/budget.d.ts +39 -0
  56. package/node_modules/@flickfyi/core/dist-types/kowalski/components/calculator.d.ts +62 -0
  57. package/node_modules/@flickfyi/core/dist-types/kowalski/components/checklist.d.ts +35 -0
  58. package/node_modules/@flickfyi/core/dist-types/kowalski/components/color-palette.d.ts +32 -0
  59. package/node_modules/@flickfyi/core/dist-types/kowalski/components/contact.d.ts +41 -0
  60. package/node_modules/@flickfyi/core/dist-types/kowalski/components/countdown.d.ts +34 -0
  61. package/node_modules/@flickfyi/core/dist-types/kowalski/components/event.d.ts +43 -0
  62. package/node_modules/@flickfyi/core/dist-types/kowalski/components/expense.d.ts +40 -0
  63. package/node_modules/@flickfyi/core/dist-types/kowalski/components/goal.d.ts +36 -0
  64. package/node_modules/@flickfyi/core/dist-types/kowalski/components/habit.d.ts +57 -0
  65. package/node_modules/@flickfyi/core/dist-types/kowalski/components/ledger.d.ts +43 -0
  66. package/node_modules/@flickfyi/core/dist-types/kowalski/components/note.d.ts +35 -0
  67. package/node_modules/@flickfyi/core/dist-types/kowalski/components/poll.d.ts +41 -0
  68. package/node_modules/@flickfyi/core/dist-types/kowalski/components/random-picker.d.ts +69 -0
  69. package/node_modules/@flickfyi/core/dist-types/kowalski/components/rating.d.ts +33 -0
  70. package/node_modules/@flickfyi/core/dist-types/kowalski/components/reminder.d.ts +48 -0
  71. package/node_modules/@flickfyi/core/dist-types/kowalski/components/rotation.d.ts +39 -0
  72. package/node_modules/@flickfyi/core/dist-types/kowalski/components/scoreboard.d.ts +37 -0
  73. package/node_modules/@flickfyi/core/dist-types/kowalski/components/shopping-list.d.ts +41 -0
  74. package/node_modules/@flickfyi/core/dist-types/kowalski/components/task-board.d.ts +39 -0
  75. package/node_modules/@flickfyi/core/dist-types/kowalski/components/time-zone.d.ts +34 -0
  76. package/node_modules/@flickfyi/core/dist-types/kowalski/components/timer.d.ts +43 -0
  77. package/node_modules/@flickfyi/core/dist-types/kowalski/components/trip.d.ts +61 -0
  78. package/node_modules/@flickfyi/core/dist-types/kowalski/components/unit-converter.d.ts +106 -0
  79. package/node_modules/@flickfyi/core/dist-types/kowalski/create-schemas.d.ts +6 -0
  80. package/node_modules/@flickfyi/core/dist-types/kowalski/date-time.d.ts +1 -1
  81. package/node_modules/@flickfyi/core/dist-types/kowalski/everyday.d.ts +28 -8
  82. package/node_modules/@flickfyi/core/dist-types/kowalski/feature-schema.d.ts +65 -0
  83. package/node_modules/@flickfyi/core/dist-types/kowalski/format.d.ts +4 -0
  84. package/node_modules/@flickfyi/core/dist-types/kowalski/fortune.d.ts +21 -0
  85. package/node_modules/@flickfyi/core/dist-types/kowalski/frame.d.ts +4 -4
  86. package/node_modules/@flickfyi/core/dist-types/kowalski/index.d.cts +31 -7
  87. package/node_modules/@flickfyi/core/dist-types/kowalski/index.d.ts +31 -7
  88. package/node_modules/@flickfyi/core/dist-types/kowalski/lesson.d.ts +89 -0
  89. package/node_modules/@flickfyi/core/dist-types/kowalski/recipe.d.ts +129 -8
  90. package/node_modules/@flickfyi/core/dist-types/kowalski/schemas.d.cts +4 -0
  91. package/node_modules/@flickfyi/core/dist-types/kowalski/schemas.d.ts +4 -0
  92. package/node_modules/@flickfyi/core/dist-types/kowalski/time-since.d.ts +34 -0
  93. package/node_modules/@flickfyi/core/examples/example-metadata.ts +19 -2
  94. package/node_modules/@flickfyi/core/examples/kowalski/bill-split/bill-split.stories.tsx +25 -6
  95. package/node_modules/@flickfyi/core/examples/kowalski/bill-split/bill-split.tsx +6 -12
  96. package/node_modules/@flickfyi/core/examples/kowalski/bookmark/bookmark.stories.tsx +22 -5
  97. package/node_modules/@flickfyi/core/examples/kowalski/bookmark/bookmark.tsx +6 -18
  98. package/node_modules/@flickfyi/core/examples/kowalski/budget/budget.stories.tsx +26 -5
  99. package/node_modules/@flickfyi/core/examples/kowalski/budget/budget.tsx +6 -21
  100. package/node_modules/@flickfyi/core/examples/kowalski/calculator/calculator.stories.tsx +18 -5
  101. package/node_modules/@flickfyi/core/examples/kowalski/calculator/calculator.tsx +6 -19
  102. package/node_modules/@flickfyi/core/examples/kowalski/checklist/checklist.stories.tsx +25 -5
  103. package/node_modules/@flickfyi/core/examples/kowalski/checklist/checklist.tsx +6 -21
  104. package/node_modules/@flickfyi/core/examples/kowalski/color-palette/color-palette.stories.tsx +19 -6
  105. package/node_modules/@flickfyi/core/examples/kowalski/color-palette/color-palette.tsx +6 -17
  106. package/node_modules/@flickfyi/core/examples/kowalski/contact/contact.stories.tsx +30 -5
  107. package/node_modules/@flickfyi/core/examples/kowalski/contact/contact.tsx +6 -18
  108. package/node_modules/@flickfyi/core/examples/kowalski/countdown/countdown.stories.tsx +22 -5
  109. package/node_modules/@flickfyi/core/examples/kowalski/countdown/countdown.tsx +6 -18
  110. package/node_modules/@flickfyi/core/examples/kowalski/event/event.stories.tsx +23 -5
  111. package/node_modules/@flickfyi/core/examples/kowalski/event/event.tsx +6 -19
  112. package/node_modules/@flickfyi/core/examples/kowalski/expense/expense.stories.tsx +23 -5
  113. package/node_modules/@flickfyi/core/examples/kowalski/expense/expense.tsx +6 -18
  114. package/node_modules/@flickfyi/core/examples/kowalski/fortune/fortune.stories.tsx +61 -0
  115. package/node_modules/@flickfyi/core/examples/kowalski/fortune/fortune.tsx +11 -0
  116. package/node_modules/@flickfyi/core/examples/kowalski/goal/goal.stories.tsx +18 -5
  117. package/node_modules/@flickfyi/core/examples/kowalski/goal/goal.tsx +3 -19
  118. package/node_modules/@flickfyi/core/examples/kowalski/habit/habit.stories.tsx +22 -5
  119. package/node_modules/@flickfyi/core/examples/kowalski/habit/habit.tsx +6 -18
  120. package/node_modules/@flickfyi/core/examples/kowalski/ledger/ledger.stories.tsx +25 -5
  121. package/node_modules/@flickfyi/core/examples/kowalski/ledger/ledger.tsx +6 -20
  122. package/node_modules/@flickfyi/core/examples/kowalski/lesson/lesson.stories.tsx +99 -0
  123. package/node_modules/@flickfyi/core/examples/kowalski/lesson/lesson.tsx +11 -0
  124. package/node_modules/@flickfyi/core/examples/kowalski/note/note.stories.tsx +21 -5
  125. package/node_modules/@flickfyi/core/examples/kowalski/note/note.tsx +3 -17
  126. package/node_modules/@flickfyi/core/examples/kowalski/poll/poll.stories.tsx +26 -5
  127. package/node_modules/@flickfyi/core/examples/kowalski/poll/poll.tsx +3 -21
  128. package/node_modules/@flickfyi/core/examples/kowalski/random-picker/random-picker.stories.tsx +37 -6
  129. package/node_modules/@flickfyi/core/examples/kowalski/random-picker/random-picker.tsx +6 -18
  130. package/node_modules/@flickfyi/core/examples/kowalski/rating/rating.stories.tsx +18 -5
  131. package/node_modules/@flickfyi/core/examples/kowalski/rating/rating.tsx +6 -14
  132. package/node_modules/@flickfyi/core/examples/kowalski/recipe/recipe.stories.tsx +117 -5
  133. package/node_modules/@flickfyi/core/examples/kowalski/recipe/recipe.tsx +6 -115
  134. package/node_modules/@flickfyi/core/examples/kowalski/reminder/reminder.stories.tsx +22 -5
  135. package/node_modules/@flickfyi/core/examples/kowalski/reminder/reminder.tsx +6 -18
  136. package/node_modules/@flickfyi/core/examples/kowalski/rotation/rotation.stories.tsx +26 -5
  137. package/node_modules/@flickfyi/core/examples/kowalski/rotation/rotation.tsx +6 -22
  138. package/node_modules/@flickfyi/core/examples/kowalski/scoreboard/scoreboard.stories.tsx +26 -5
  139. package/node_modules/@flickfyi/core/examples/kowalski/scoreboard/scoreboard.tsx +6 -21
  140. package/node_modules/@flickfyi/core/examples/kowalski/shopping-list/shopping-list.stories.tsx +28 -6
  141. package/node_modules/@flickfyi/core/examples/kowalski/shopping-list/shopping-list.tsx +6 -22
  142. package/node_modules/@flickfyi/core/examples/kowalski/task-board/task-board.stories.tsx +27 -6
  143. package/node_modules/@flickfyi/core/examples/kowalski/task-board/task-board.tsx +6 -22
  144. package/node_modules/@flickfyi/core/examples/kowalski/time-since/time-since.stories.tsx +33 -0
  145. package/node_modules/@flickfyi/core/examples/kowalski/time-since/time-since.tsx +12 -0
  146. package/node_modules/@flickfyi/core/examples/kowalski/time-zone/time-zone.stories.tsx +22 -6
  147. package/node_modules/@flickfyi/core/examples/kowalski/time-zone/time-zone.tsx +6 -17
  148. package/node_modules/@flickfyi/core/examples/kowalski/timer/timer.stories.tsx +18 -5
  149. package/node_modules/@flickfyi/core/examples/kowalski/timer/timer.tsx +6 -18
  150. package/node_modules/@flickfyi/core/examples/kowalski/trip/trip.stories.tsx +25 -5
  151. package/node_modules/@flickfyi/core/examples/kowalski/trip/trip.tsx +3 -21
  152. package/node_modules/@flickfyi/core/examples/kowalski/unit-converter/unit-converter.stories.tsx +19 -6
  153. package/node_modules/@flickfyi/core/examples/kowalski/unit-converter/unit-converter.tsx +6 -19
  154. package/node_modules/@flickfyi/core/examples/parrott/calculator/calculator.stories.tsx +10 -3
  155. package/node_modules/@flickfyi/core/examples/parrott/calculator/calculator.tsx +2 -13
  156. package/node_modules/@flickfyi/core/examples/parrott/checklist/checklist.stories.tsx +10 -3
  157. package/node_modules/@flickfyi/core/examples/parrott/checklist/checklist.tsx +0 -8
  158. package/node_modules/@flickfyi/core/examples/parrott/countdown/countdown.stories.tsx +10 -3
  159. package/node_modules/@flickfyi/core/examples/parrott/countdown/countdown.tsx +0 -8
  160. package/node_modules/@flickfyi/core/examples/parrott/counter/counter.stories.tsx +10 -3
  161. package/node_modules/@flickfyi/core/examples/parrott/counter/counter.tsx +0 -8
  162. package/node_modules/@flickfyi/core/examples/parrott/fortune/fortune.stories.tsx +10 -3
  163. package/node_modules/@flickfyi/core/examples/parrott/fortune/fortune.tsx +0 -8
  164. package/node_modules/@flickfyi/core/examples/parrott/grid/grid.stories.tsx +10 -3
  165. package/node_modules/@flickfyi/core/examples/parrott/grid/grid.tsx +4 -9
  166. package/node_modules/@flickfyi/core/examples/parrott/kale-smoothie/kale-smoothie.stories.tsx +10 -3
  167. package/node_modules/@flickfyi/core/examples/parrott/kale-smoothie/kale-smoothie.tsx +0 -8
  168. package/node_modules/@flickfyi/core/examples/parrott/list/list.stories.tsx +10 -3
  169. package/node_modules/@flickfyi/core/examples/parrott/list/list.tsx +0 -8
  170. package/node_modules/@flickfyi/core/examples/parrott/log/log.stories.tsx +10 -3
  171. package/node_modules/@flickfyi/core/examples/parrott/log/log.tsx +0 -8
  172. package/node_modules/@flickfyi/core/examples/parrott/timed-task/timed-task.stories.tsx +10 -3
  173. package/node_modules/@flickfyi/core/examples/parrott/timed-task/timed-task.tsx +0 -8
  174. package/node_modules/@flickfyi/core/examples/parrott/timer/timer.stories.tsx +10 -3
  175. package/node_modules/@flickfyi/core/examples/parrott/timer/timer.tsx +0 -8
  176. package/node_modules/@flickfyi/core/package.json +16 -3
  177. package/node_modules/@flickfyi/core/src/{kowalski/use-configured-feature.ts → hooks/use-configured-feature/index.ts} +1 -1
  178. package/node_modules/@flickfyi/core/src/{kowalski/use-feature-store.ts → hooks/use-feature-store/index.ts} +37 -12
  179. package/node_modules/@flickfyi/core/src/kowalski/README.md +13 -0
  180. package/node_modules/@flickfyi/core/src/kowalski/calculations.ts +36 -8
  181. package/node_modules/@flickfyi/core/src/kowalski/calculator.ts +15 -7
  182. package/node_modules/@flickfyi/core/src/kowalski/catalog.ts +110 -704
  183. package/node_modules/@flickfyi/core/src/kowalski/components/bill-split.tsx +284 -0
  184. package/node_modules/@flickfyi/core/src/kowalski/components/bookmark.tsx +347 -0
  185. package/node_modules/@flickfyi/core/src/kowalski/components/budget.tsx +169 -0
  186. package/node_modules/@flickfyi/core/src/kowalski/components/calculator.tsx +202 -0
  187. package/node_modules/@flickfyi/core/src/kowalski/components/checklist.tsx +119 -0
  188. package/node_modules/@flickfyi/core/src/kowalski/components/color-palette.tsx +302 -0
  189. package/node_modules/@flickfyi/core/src/kowalski/components/contact.tsx +247 -0
  190. package/node_modules/@flickfyi/core/src/kowalski/components/countdown.tsx +173 -0
  191. package/node_modules/@flickfyi/core/src/kowalski/components/event.tsx +260 -0
  192. package/node_modules/@flickfyi/core/src/kowalski/components/expense.tsx +257 -0
  193. package/node_modules/@flickfyi/core/src/kowalski/components/goal.tsx +182 -0
  194. package/node_modules/@flickfyi/core/src/kowalski/components/habit.tsx +272 -0
  195. package/node_modules/@flickfyi/core/src/kowalski/components/ledger.tsx +211 -0
  196. package/node_modules/@flickfyi/core/src/kowalski/components/note.tsx +188 -0
  197. package/node_modules/@flickfyi/core/src/kowalski/components/poll.tsx +242 -0
  198. package/node_modules/@flickfyi/core/src/kowalski/components/random-picker.tsx +308 -0
  199. package/node_modules/@flickfyi/core/src/kowalski/components/rating.tsx +112 -0
  200. package/node_modules/@flickfyi/core/src/kowalski/components/reminder.tsx +298 -0
  201. package/node_modules/@flickfyi/core/src/kowalski/components/rotation.tsx +146 -0
  202. package/node_modules/@flickfyi/core/src/kowalski/components/scoreboard.tsx +139 -0
  203. package/node_modules/@flickfyi/core/src/kowalski/components/shopping-list.tsx +144 -0
  204. package/node_modules/@flickfyi/core/src/kowalski/components/task-board.tsx +146 -0
  205. package/node_modules/@flickfyi/core/src/kowalski/components/time-zone.tsx +240 -0
  206. package/node_modules/@flickfyi/core/src/kowalski/components/timer.tsx +225 -0
  207. package/node_modules/@flickfyi/core/src/kowalski/components/trip.tsx +338 -0
  208. package/node_modules/@flickfyi/core/src/kowalski/components/unit-converter.tsx +285 -0
  209. package/node_modules/@flickfyi/core/src/kowalski/create-schemas.ts +8 -0
  210. package/node_modules/@flickfyi/core/src/kowalski/date-time.tsx +1 -1
  211. package/node_modules/@flickfyi/core/src/kowalski/everyday.tsx +1 -640
  212. package/node_modules/@flickfyi/core/src/kowalski/feature-schema.ts +84 -0
  213. package/node_modules/@flickfyi/core/src/kowalski/format.ts +29 -3
  214. package/node_modules/@flickfyi/core/src/kowalski/fortune.tsx +67 -0
  215. package/node_modules/@flickfyi/core/src/kowalski/frame.tsx +5 -6
  216. package/node_modules/@flickfyi/core/src/kowalski/index.ts +31 -22
  217. package/node_modules/@flickfyi/core/src/kowalski/lesson.tsx +564 -0
  218. package/node_modules/@flickfyi/core/src/kowalski/recipe.tsx +78 -37
  219. package/node_modules/@flickfyi/core/src/kowalski/schemas.ts +67 -0
  220. package/node_modules/@flickfyi/core/src/kowalski/stories/composition.tsx +22 -20
  221. package/node_modules/@flickfyi/core/src/kowalski/time-since.tsx +145 -0
  222. package/node_modules/@flickfyi/core/src/molecules/progress/progress.tsx +4 -1
  223. package/node_modules/@flickfyi/core/src/oklch.ts +1 -6
  224. package/node_modules/@flickfyi/core/src/parrott/theme.ts +3 -1
  225. package/node_modules/@flickfyi/core/src/themes/editorial/editorial.ts +6 -1
  226. package/node_modules/@flickfyi/core/src/themes/palette.ts +5 -5
  227. package/node_modules/@flickfyi/core/src/themes/stories/composition.tsx +11 -9
  228. package/node_modules/@flickfyi/core/src/themes/stories/gallery.tsx +7 -11
  229. package/node_modules/@flickfyi/core/tsgo.bun.lock +7 -7
  230. package/node_modules/@flickfyi/core/tsgo.package.json +1 -1
  231. package/package.json +2 -2
  232. package/node_modules/@flickfyi/core/dist-types/kowalski/clocks.d.ts +0 -4
  233. package/node_modules/@flickfyi/core/dist-types/kowalski/details.d.ts +0 -7
  234. package/node_modules/@flickfyi/core/dist-types/kowalski/productivity.d.ts +0 -5
  235. package/node_modules/@flickfyi/core/dist-types/kowalski/tools.d.ts +0 -7
  236. package/node_modules/@flickfyi/core/dist-types/kowalski/use-feature-store.d.ts +0 -15
  237. package/node_modules/@flickfyi/core/src/kowalski/clocks.tsx +0 -464
  238. package/node_modules/@flickfyi/core/src/kowalski/details.tsx +0 -1387
  239. package/node_modules/@flickfyi/core/src/kowalski/productivity.tsx +0 -575
  240. package/node_modules/@flickfyi/core/src/kowalski/tools.tsx +0 -1213
  241. /package/node_modules/@flickfyi/core/dist-types/{kowalski/use-clock.d.ts → hooks/use-clock/index.d.ts} +0 -0
  242. /package/node_modules/@flickfyi/core/dist-types/{kowalski/use-configured-feature.d.ts → hooks/use-configured-feature/index.d.ts} +0 -0
  243. /package/node_modules/@flickfyi/core/src/{kowalski/use-clock.ts → hooks/use-clock/index.ts} +0 -0
@@ -0,0 +1,637 @@
1
+ import { z as e } from "zod/v4";
2
+ import { z as t } from "zod";
3
+ // src/kowalski/feature-schema.ts
4
+ var n = e.string().regex(/^[A-Za-z][A-Za-z0-9]*$/).optional(), r = e.enum(["private", "public"]).default("private"), i = {
5
+ id: n,
6
+ revision: e.number().default(0),
7
+ scope: r
8
+ };
9
+ function a(t) {
10
+ return e.object({
11
+ configuration: e.record(e.string(), e.unknown()).nullable().default(null),
12
+ configurationRevision: e.number().default(0),
13
+ ...t
14
+ });
15
+ }
16
+ e.enum(/* @__PURE__ */ "checklist.timer.habit.goal.poll.event.reminder.trip.countdown.timeZone.colorPalette.billSplit.expense.unitConverter.calculator.randomPicker.contact.bookmark.note.budget.scoreboard.taskBoard.recipe.rotation.shoppingList.rating.ledger.timeSince.fortune.lesson".split("."));
17
+ function o(t, n, r) {
18
+ let i = a(r), o = new Set(Object.keys(i.shape));
19
+ return e.intersection(i.loose(), e.looseRecord(e.templateLiteral([t, e.string()]), n)).refine((e) => Object.keys(e).every((e) => o.has(e) || e.startsWith(t)), `Item fields must start with ${t}.`);
20
+ }
21
+ function s(t) {
22
+ return e.object({ value: t }).default(() => ({ value: t.parse(void 0) }));
23
+ }
24
+ // src/kowalski/components/bill-split.tsx
25
+ var ee = "KowalskiBillSplit", c = "private";
26
+ e.strictObject({
27
+ data: /* @__PURE__ */ e.strictObject({
28
+ currency: e.string().optional().describe("A three-letter ISO currency code, e.g. \"USD\" or \"EUR\". Omit for \"USD\"."),
29
+ people: e.number().describe("How many people split the bill, e.g. 4."),
30
+ tipPercent: e.number().optional().describe("Tip as a percentage of the total, e.g. 18. Omit for no tip."),
31
+ title: e.string().optional().describe("A short heading. Omit for \"Split the bill\"."),
32
+ total: e.number().describe("The bill total before tip, in the currency, e.g. 84.5.")
33
+ }).describe("Split a bill equally with an optional tip, rounding in the selected currency."),
34
+ ...i,
35
+ scope: i.scope.default(c)
36
+ });
37
+ var l = a({
38
+ people: e.number().default(1),
39
+ tipPercent: e.number().default(0),
40
+ total: e.number().default(0)
41
+ }), te = ({ id: e = ee, scope: t = c } = {}) => ({ [`stores/${t}/${e}`]: l }), ne = "KowalskiBookmark", u = "private";
42
+ e.strictObject({
43
+ data: /* @__PURE__ */ e.strictObject({
44
+ note: e.string().optional().describe("A short note about the link. Omit for none."),
45
+ title: e.string().describe("A short heading."),
46
+ url: e.string().describe("The full http or https address, e.g. \"https://example.com\".")
47
+ }).describe("Display, edit, and retain a web bookmark. No implicit metadata fetch."),
48
+ ...i,
49
+ scope: i.scope.default(u)
50
+ });
51
+ var re = a({
52
+ note: s(e.string().default("")),
53
+ title: s(e.string().default("")),
54
+ url: s(e.string().nullable().default(null))
55
+ }), ie = ({ id: e = ne, scope: t = u } = {}) => ({ [`stores/${t}/${e}`]: re }), ae = "KowalskiBudget", d = "private";
56
+ e.strictObject({
57
+ data: /* @__PURE__ */ e.strictObject({
58
+ categories: e.array(e.strictObject({
59
+ id: e.string().describe("A short ID, unique within this list, e.g. \"tent\"."),
60
+ label: e.string().describe("The category name, e.g. \"Groceries\"."),
61
+ limit: e.number().describe("The spending limit for the period, e.g. 400.")
62
+ })).describe("A few spending categories."),
63
+ currency: e.string().optional().describe("A three-letter ISO currency code, e.g. \"USD\" or \"EUR\". Omit for \"USD\"."),
64
+ title: e.string().optional().describe("A short heading. Omit for \"Budget\".")
65
+ }).describe("Track spending against category limits for one budget period. No bank connection or payments."),
66
+ ...i,
67
+ scope: i.scope.default(d)
68
+ });
69
+ var f = o("spent_", e.number(), {}), p = ({ id: e = ae, scope: t = d } = {}) => ({ [`stores/${t}/${e}`]: f }), oe = "KowalskiCalculator", m = "private";
70
+ e.strictObject({
71
+ data: /* @__PURE__ */ e.strictObject({
72
+ left: e.number().optional().describe("The starting number. Omit for 0."),
73
+ operator: e.enum([
74
+ "+",
75
+ "-",
76
+ "*",
77
+ "/"
78
+ ]).optional().describe("The pending operator. Omit for \"+\"."),
79
+ right: e.number().optional().describe("The second operand. Omit for 0."),
80
+ title: e.string().optional().describe("A short heading. Omit for \"Calculate\".")
81
+ }).describe("A persistent keypad calculator with chained arithmetic, decimals, sign, percent, and repeated equals. Supports +, -, *, /. No executable expression strings."),
82
+ ...i,
83
+ scope: i.scope.default(m)
84
+ });
85
+ var se = a({ calculation: e.object({
86
+ entry: e.string().max(40).regex(/^(?:-?\d+(?:\.\d*)?(?:e[+-]?\d+)?|Error)$/),
87
+ left: e.number(),
88
+ operator: e.enum([
89
+ "+",
90
+ "-",
91
+ "*",
92
+ "/"
93
+ ]),
94
+ overwrite: e.boolean(),
95
+ phase: e.enum([
96
+ "left",
97
+ "operator",
98
+ "right",
99
+ "result",
100
+ "error"
101
+ ]),
102
+ right: e.number()
103
+ }).refine((e) => e.phase === "error" ? e.entry === "Error" : e.entry !== "Error" && Number.isFinite(Number(e.entry)), "Calculator entry must match its phase and represent a finite number.").default({
104
+ entry: "0",
105
+ left: 0,
106
+ operator: "+",
107
+ overwrite: !1,
108
+ phase: "left",
109
+ right: 0
110
+ }) }), ce = ({ id: e = oe, scope: t = m } = {}) => ({ [`stores/${t}/${e}`]: se }), le = "KowalskiChecklist", h = "private", g = /* @__PURE__ */ e.strictObject({
111
+ items: e.array(e.strictObject({
112
+ id: e.string().describe("A short ID, unique within this list, e.g. \"tent\"."),
113
+ label: e.string().describe("One short task, e.g. \"Pack tent\".")
114
+ })).describe("The checklist items, in order."),
115
+ title: e.string().describe("A short heading.")
116
+ }).describe("A persistent checklist with independent completion and progress. No external actions.");
117
+ e.strictObject({
118
+ data: g,
119
+ ...i,
120
+ scope: i.scope.default(h)
121
+ });
122
+ var ue = o("completed_", e.boolean(), {}), de = ({ id: e = le, scope: t = h } = {}) => ({ [`stores/${t}/${e}`]: ue }), fe = "KowalskiColorPalette", _ = "private";
123
+ e.strictObject({
124
+ data: /* @__PURE__ */ e.strictObject({
125
+ color: e.string().describe("The starting color as a six-digit hex code, e.g. \"#3366FF\"."),
126
+ title: e.string().optional().describe("A short heading. Omit for \"Palette\".")
127
+ }).describe("Choose and retain an sRGB color and display matching shades."),
128
+ ...i,
129
+ scope: i.scope.default(_)
130
+ });
131
+ var pe = a({ color: s(e.string().default("#6366f1")) }), me = ({ id: e = fe, scope: t = _ } = {}) => ({ [`stores/${t}/${e}`]: pe }), he = /* @__PURE__ */ t.strictObject({
132
+ email: t.string().optional().describe("An email address. Omit if unknown."),
133
+ name: t.string().describe("The person’s name."),
134
+ phone: t.string().optional().describe("A phone number as written. Omit if unknown.")
135
+ }).describe("Display, edit, and retain a contact. Does not insert into the address book."), ge = "KowalskiContact", v = "private";
136
+ e.strictObject({
137
+ data: he,
138
+ ...i,
139
+ scope: i.scope.default(v)
140
+ });
141
+ var _e = a({
142
+ email: s(e.string().nullable().default(null)),
143
+ name: s(e.string().default("")),
144
+ phone: s(e.string().nullable().default(null))
145
+ }), ve = ({ id: e = ge, scope: t = v } = {}) => ({ [`stores/${t}/${e}`]: _e }), ye = "KowalskiCountdown", y = "private";
146
+ e.strictObject({
147
+ data: /* @__PURE__ */ e.strictObject({
148
+ target: e.string().describe("The moment to count down to, as ISO 8601 with an offset, e.g. \"2026-12-31T23:59:59-08:00\"."),
149
+ timeZone: e.string().optional().describe("An IANA time zone, e.g. \"America/New_York\". Omit for UTC."),
150
+ title: e.string().describe("A short heading.")
151
+ }).describe("Count down to an explicit instant. Resolve missing dates before instantiation."),
152
+ ...i,
153
+ scope: i.scope.default(y)
154
+ });
155
+ var be = a({ target: s(e.string().nullable().default(null)) }), xe = ({ id: e = ye, scope: t = y } = {}) => ({ [`stores/${t}/${e}`]: be }), b = /* @__PURE__ */ t.strictObject({
156
+ location: t.string().optional().describe("Where it happens. Omit if unknown."),
157
+ startsAt: t.string().optional().describe("When it starts, as ISO 8601 with an offset, e.g. \"2026-11-01T18:30:00-07:00\". Omit if unknown."),
158
+ timeZone: t.string().optional().describe("An IANA time zone, e.g. \"America/New_York\". Omit for UTC."),
159
+ title: t.string().describe("A short heading.")
160
+ }).describe("Save and edit event details in the app. Does not create a calendar event."), x = "KowalskiEvent", S = "private";
161
+ e.strictObject({
162
+ data: b,
163
+ ...i,
164
+ scope: i.scope.default(S)
165
+ });
166
+ var C = a({
167
+ location: s(e.string().default("")),
168
+ startsAt: s(e.string().nullable().default(null)),
169
+ title: s(e.string().default(""))
170
+ }), w = ({ id: e = x, scope: t = S } = {}) => ({ [`stores/${t}/${e}`]: C }), T = "KowalskiExpense", E = "private";
171
+ e.strictObject({
172
+ data: /* @__PURE__ */ e.strictObject({
173
+ amount: e.number().describe("The amount spent, e.g. 12.5."),
174
+ category: e.string().optional().describe("A short category, e.g. \"Food\". Omit for \"Other\"."),
175
+ currency: e.string().optional().describe("A three-letter ISO currency code, e.g. \"USD\" or \"EUR\". Omit for \"USD\"."),
176
+ title: e.string().describe("A short heading.")
177
+ }).describe("Edit and retain one expense. No payments, bank connection, or exchange-rate lookup."),
178
+ ...i,
179
+ scope: i.scope.default(E)
180
+ });
181
+ var D = a({
182
+ amount: e.number().default(0),
183
+ category: s(e.string().default("Other")),
184
+ title: s(e.string().default(""))
185
+ }), O = ({ id: e = T, scope: t = E } = {}) => ({ [`stores/${t}/${e}`]: D }), k = "KowalskiGoal", A = "private";
186
+ e.strictObject({
187
+ data: /* @__PURE__ */ e.strictObject({
188
+ progress: e.number().optional().describe("Progress so far. Omit for 0."),
189
+ step: e.number().optional().describe("How much one tap adds, e.g. 1 or 0.5. Omit for 1."),
190
+ target: e.number().describe("The amount that completes the goal, e.g. 10."),
191
+ title: e.string().describe("A short heading."),
192
+ unit: e.string().optional().describe("A short unit after the numbers, e.g. \"km\" or \"pages\". Omit for none.")
193
+ }).describe("A personal goal with editable progress, target, and a fixed increment. Not a distributed counter."),
194
+ ...i,
195
+ scope: i.scope.default(A)
196
+ });
197
+ var j = a({ progress: e.number().default(0) }), M = ({ id: e = k, scope: t = A } = {}) => ({ [`stores/${t}/${e}`]: j }), N = [
198
+ "sunday",
199
+ "monday",
200
+ "tuesday",
201
+ "wednesday",
202
+ "thursday",
203
+ "friday",
204
+ "saturday"
205
+ ], Se = "KowalskiHabit", P = "private";
206
+ e.strictObject({
207
+ data: /* @__PURE__ */ e.strictObject({
208
+ timeZone: e.string().optional().describe("An IANA time zone, e.g. \"America/New_York\". Omit for UTC."),
209
+ title: e.string().describe("A short heading."),
210
+ weekdays: e.array(e.enum(N)).optional().describe("The days the habit is scheduled. Omit for every day.")
211
+ }).describe("Track a habit by local date and edit its weekday schedule. No notifications."),
212
+ ...i,
213
+ scope: i.scope.default(P)
214
+ });
215
+ var Ce = o("completed_", e.boolean(), { weekdays: e.array(e.enum(N)).default([...N]) }), we = ({ id: e = Se, scope: t = P } = {}) => ({ [`stores/${t}/${e}`]: Ce }), Te = "KowalskiLedger", F = "private";
216
+ e.strictObject({
217
+ data: /* @__PURE__ */ e.strictObject({
218
+ currency: e.string().optional().describe("A three-letter ISO currency code, e.g. \"USD\" or \"EUR\". Omit for \"USD\"."),
219
+ people: e.array(e.strictObject({
220
+ id: e.string().describe("A short ID, unique within this list, e.g. \"tent\"."),
221
+ label: e.string().describe("A person’s name.")
222
+ })).describe("Exactly two people sharing the tab."),
223
+ title: e.string().optional().describe("A short heading. Omit for \"Shared tab\".")
224
+ }).describe("A running tab of shared costs between two people, split evenly, with settle up. No payments."),
225
+ ...i,
226
+ scope: i.scope.default(F)
227
+ });
228
+ var Ee = a({ entries: e.array(e.strictObject({
229
+ amount: e.number(),
230
+ id: e.string(),
231
+ label: e.string(),
232
+ paidBy: e.string()
233
+ })).default([]) }), De = ({ id: e = Te, scope: t = F } = {}) => ({ [`stores/${t}/${e}`]: Ee }), Oe = "KowalskiNote", I = "private";
234
+ e.strictObject({
235
+ data: /* @__PURE__ */ e.strictObject({
236
+ body: e.string().describe("The note text, as plain text."),
237
+ title: e.string().describe("A short heading. Use an empty string for none.")
238
+ }).describe("An editable persistent note. Plain text; no HTML or code execution."),
239
+ ...i,
240
+ scope: i.scope.default(I)
241
+ });
242
+ var ke = a({
243
+ body: s(e.string().default("")),
244
+ title: s(e.string().default(""))
245
+ }), Ae = ({ id: e = Oe, scope: t = I } = {}) => ({ [`stores/${t}/${e}`]: ke }), je = "KowalskiPoll";
246
+ e.strictObject({
247
+ data: /* @__PURE__ */ e.strictObject({
248
+ options: e.array(e.strictObject({
249
+ id: e.string().describe("A short ID, unique within this list, e.g. \"tent\"."),
250
+ label: e.string().describe("One short answer choice.")
251
+ })).describe("Two or more answer choices."),
252
+ question: e.string().describe("The question being voted on."),
253
+ shared: e.boolean().optional().describe("True only when other people vote on the same poll. Omit for a private poll.")
254
+ }).describe("Cast or change a vote and derive totals from votes. Shared voting only when explicitly requested."),
255
+ ...i
256
+ });
257
+ var Me = o("vote_", g.shape.items.element.shape.id, {}), Ne = ({ id: e = je, scope: t } = {}) => {
258
+ let n = {};
259
+ for (let r of t === void 0 ? ["private", "public"] : [t]) n[`stores/${r}/${e}`] = Me, n[`stores/private/${e}Voter`] = Pe;
260
+ return n;
261
+ }, Pe = e.object({
262
+ configuration: e.string().default(""),
263
+ voter: e.string()
264
+ }), L = "KowalskiRandomPicker", R = "private";
265
+ e.strictObject({
266
+ data: /* @__PURE__ */ e.discriminatedUnion("mode", [
267
+ e.strictObject({
268
+ mode: e.literal("coin"),
269
+ title: e.string().optional().describe("A short heading. Omit for \"Pick one\".")
270
+ }),
271
+ e.strictObject({
272
+ mode: e.literal("dice"),
273
+ title: e.string().optional().describe("A short heading. Omit for \"Pick one\".")
274
+ }),
275
+ e.strictObject({
276
+ maximum: e.number().describe("The largest whole number that can be picked."),
277
+ minimum: e.number().describe("The smallest whole number that can be picked."),
278
+ mode: e.literal("range"),
279
+ title: e.string().optional().describe("A short heading. Omit for \"Pick one\".")
280
+ }),
281
+ e.strictObject({
282
+ mode: e.literal("list"),
283
+ options: e.array(e.string()).describe("The choices to pick from."),
284
+ title: e.string().optional().describe("A short heading. Omit for \"Pick one\".")
285
+ })
286
+ ]).describe("Flip a coin, roll a die, or pick from a whole-number range or list. Retains the last result."),
287
+ ...i,
288
+ scope: i.scope.default(R)
289
+ });
290
+ var Fe = a({ result: e.strictObject({
291
+ domain: Le(),
292
+ value: e.union([e.number(), e.string()])
293
+ }).nullable().default(null) }), Ie = ({ id: e = L, scope: t = R } = {}) => ({ [`stores/${t}/${e}`]: Fe });
294
+ function Le() {
295
+ return e.union([
296
+ e.strictObject({ mode: e.literal("coin") }),
297
+ e.strictObject({ mode: e.literal("dice") }),
298
+ e.strictObject({
299
+ maximum: e.number(),
300
+ minimum: e.number(),
301
+ mode: e.literal("range")
302
+ }),
303
+ e.strictObject({
304
+ mode: e.literal("list"),
305
+ options: e.array(e.string())
306
+ })
307
+ ]);
308
+ }
309
+ // src/kowalski/components/rating.tsx
310
+ var Re = "KowalskiRating", z = "private";
311
+ e.strictObject({
312
+ data: /* @__PURE__ */ e.strictObject({
313
+ subject: e.string().describe("What is being rated, e.g. \"Pad thai at Lotus\"."),
314
+ title: e.string().optional().describe("A short heading. Omit for \"Your rating\".")
315
+ }).describe("Rate one thing from one to five stars and keep a short note about it."),
316
+ ...i,
317
+ scope: i.scope.default(z)
318
+ });
319
+ var ze = a({
320
+ note: s(e.string().default("")),
321
+ stars: e.number().default(0)
322
+ }), Be = ({ id: e = Re, scope: t = z } = {}) => ({ [`stores/${t}/${e}`]: ze }), Ve = "KowalskiReminder", B = "private";
323
+ e.strictObject({
324
+ data: /* @__PURE__ */ e.strictObject({
325
+ dueAt: e.string().optional().describe("When it is due, as ISO 8601 with an offset, e.g. \"2026-11-01T09:00:00-07:00\". Omit if no time was given."),
326
+ recurrence: e.enum([
327
+ "none",
328
+ "daily",
329
+ "weekly"
330
+ ]).optional().describe("How it repeats. Omit for \"none\"."),
331
+ timeZone: e.string().optional().describe("An IANA time zone, e.g. \"America/New_York\". Omit for the device’s time zone."),
332
+ title: e.string().describe("What to be reminded of.")
333
+ }).describe("Complete, reopen, and edit an in-app reminder. Does not schedule notifications."),
334
+ ...i,
335
+ scope: i.scope.default(B)
336
+ });
337
+ var He = a({
338
+ completedAt: e.number().nullable().default(null),
339
+ dueAt: s(e.string().nullable().default(null)),
340
+ title: s(e.string().default(""))
341
+ }), Ue = ({ id: e = Ve, scope: t = B } = {}) => ({ [`stores/${t}/${e}`]: He }), We = "KowalskiRotation", V = "private";
342
+ e.strictObject({
343
+ data: /* @__PURE__ */ e.strictObject({
344
+ people: e.array(e.strictObject({
345
+ id: e.string().describe("A short ID, unique within this list, e.g. \"tent\"."),
346
+ label: e.string().describe("A person’s name.")
347
+ })).describe("Everyone taking turns, in order."),
348
+ task: e.string().describe("The chore or turn, e.g. \"Take out the trash\"."),
349
+ title: e.string().optional().describe("A short heading. Omit for \"Whose turn\".")
350
+ }).describe("Take turns through a fixed group in order and pass the turn on when done."),
351
+ ...i,
352
+ scope: i.scope.default(V)
353
+ });
354
+ var Ge = a({
355
+ completed: e.number().default(0),
356
+ turn: e.string().nullable().default(null)
357
+ }), Ke = ({ id: e = We, scope: t = V } = {}) => ({ [`stores/${t}/${e}`]: Ge }), qe = "KowalskiScoreboard", H = "private";
358
+ e.strictObject({
359
+ data: /* @__PURE__ */ e.strictObject({
360
+ players: e.array(e.strictObject({
361
+ id: e.string().describe("A short ID, unique within this list, e.g. \"tent\"."),
362
+ label: e.string().describe("A player or team name.")
363
+ })).describe("Everyone keeping score."),
364
+ step: e.number().optional().describe("Points per tap. Omit for 1."),
365
+ title: e.string().optional().describe("A short heading. Omit for \"Scores\".")
366
+ }).describe("Keep score for a few players with a fixed step. Not a distributed counter or a league."),
367
+ ...i,
368
+ scope: i.scope.default(H)
369
+ });
370
+ var Je = o("score_", e.number(), {}), Ye = ({ id: e = qe, scope: t = H } = {}) => ({ [`stores/${t}/${e}`]: Je }), Xe = "KowalskiShoppingList", U = "private";
371
+ e.strictObject({
372
+ data: /* @__PURE__ */ e.strictObject({
373
+ currency: e.string().optional().describe("A three-letter ISO currency code, e.g. \"USD\" or \"EUR\". Omit for \"USD\"."),
374
+ items: e.array(e.strictObject({
375
+ id: e.string().describe("A short ID, unique within this list, e.g. \"tent\"."),
376
+ label: e.string().describe("One item to buy, e.g. \"Oat milk\"."),
377
+ price: e.number().optional().describe("Price per unit. Omit if unknown."),
378
+ quantity: e.number().optional().describe("How many to buy. Omit for 1.")
379
+ })).describe("The items to buy."),
380
+ title: e.string().optional().describe("A short heading. Omit for \"Shopping list\".")
381
+ }).describe("Check items off a shopping list with optional prices and a running cart total. No ordering."),
382
+ ...i,
383
+ scope: i.scope.default(U)
384
+ });
385
+ var Ze = o("got_", e.boolean(), {}), Qe = ({ id: e = Xe, scope: t = U } = {}) => ({ [`stores/${t}/${e}`]: Ze }), $e = "KowalskiTaskBoard", W = "private";
386
+ e.strictObject({
387
+ data: /* @__PURE__ */ e.strictObject({
388
+ tasks: e.array(e.strictObject({
389
+ id: e.string().describe("A short ID, unique within this list, e.g. \"tent\"."),
390
+ label: e.string().describe("One short task.")
391
+ })).describe("The tasks, all starting in To do."),
392
+ title: e.string().optional().describe("A short heading. Omit for \"Tasks\".")
393
+ }).describe("Move tasks between To do, Doing, and Done. No assignees, dates, or sync."),
394
+ ...i,
395
+ scope: i.scope.default(W)
396
+ });
397
+ var et = o("status_", e.enum([
398
+ "todo",
399
+ "doing",
400
+ "done"
401
+ ]), {}), tt = ({ id: e = $e, scope: t = W } = {}) => ({ [`stores/${t}/${e}`]: et }), nt = "KowalskiTimeZone", G = "private";
402
+ e.strictObject({
403
+ data: /* @__PURE__ */ e.strictObject({
404
+ at: e.string().optional().describe("A moment to compare, as ISO 8601 with an offset. Omit to show the live current time."),
405
+ title: e.string().optional().describe("A short heading. Omit for \"World clock\"."),
406
+ zones: e.array(e.string()).describe("Two or more IANA time zones to compare, e.g. \"Europe/London\".")
407
+ }).describe("Compare local times in named time zones, live or at an explicit instant."),
408
+ ...i,
409
+ scope: i.scope.default(G)
410
+ });
411
+ var rt = a({ at: s(e.string().nullable().default(null)) }), it = ({ id: e = nt, scope: t = G } = {}) => ({ [`stores/${t}/${e}`]: rt }), at = "KowalskiTimer", K = "private";
412
+ e.strictObject({
413
+ data: /* @__PURE__ */ e.strictObject({
414
+ durationSeconds: e.number().optional().describe("Countdown length in seconds, e.g. 1500 for 25 minutes. Omit for 300."),
415
+ mode: e.enum([
416
+ "countdown",
417
+ "focus",
418
+ "break",
419
+ "stopwatch"
420
+ ]).optional().describe("Omit for \"countdown\"."),
421
+ title: e.string().optional().describe("A short heading. Omit for \"Timer\".")
422
+ }).describe("Countdown, focus, break, or stopwatch. Start, pause, resume, reset; no background alarm."),
423
+ ...i,
424
+ scope: i.scope.default(K)
425
+ });
426
+ var ot = a({
427
+ elapsedSeconds: e.number().default(0),
428
+ startedAt: e.number().nullable().default(null)
429
+ }), st = ({ id: e = at, scope: t = K } = {}) => ({ [`stores/${t}/${e}`]: ot }), ct = "KowalskiTrip", q = "private";
430
+ e.strictObject({
431
+ data: /* @__PURE__ */ e.strictObject({
432
+ destination: e.string().describe("Where the trip goes."),
433
+ endDate: e.string().optional().describe("The last day as YYYY-MM-DD. Omit if unknown."),
434
+ origin: e.string().describe("Where the trip starts."),
435
+ startDate: e.string().optional().describe("The first day as YYYY-MM-DD. Omit if unknown."),
436
+ title: e.string().optional().describe("A short heading. Omit for \"Trip\"."),
437
+ transport: e.enum([
438
+ "car",
439
+ "train",
440
+ "plane",
441
+ "walk",
442
+ "other"
443
+ ]).optional().describe("How the trip is made. Omit for \"other\".")
444
+ }).describe("Edit and retain trip details. No bookings or itinerary retrieval."),
445
+ ...i,
446
+ scope: i.scope.default(q)
447
+ });
448
+ var lt = a({
449
+ destination: s(e.string().default("")),
450
+ endDate: s(e.string().nullable().default(null)),
451
+ origin: s(e.string().default("")),
452
+ startDate: s(e.string().nullable().default(null))
453
+ }).refine((e) => !e.startDate.value || !e.endDate.value || e.endDate.value >= e.startDate.value, "The trip cannot end before it starts."), ut = ({ id: e = ct, scope: t = q } = {}) => ({ [`stores/${t}/${e}`]: lt }), dt = "KowalskiUnitConverter", J = "private", Y = /* @__PURE__ */ e.strictObject({
454
+ from: e.enum([
455
+ "m",
456
+ "km",
457
+ "mi",
458
+ "ft",
459
+ "kg",
460
+ "g",
461
+ "lb",
462
+ "c",
463
+ "f",
464
+ "k"
465
+ ]).describe("The unit to convert from."),
466
+ title: e.string().optional().describe("A short heading. Omit for \"Convert\"."),
467
+ to: e.enum([
468
+ "m",
469
+ "km",
470
+ "mi",
471
+ "ft",
472
+ "kg",
473
+ "g",
474
+ "lb",
475
+ "c",
476
+ "f",
477
+ "k"
478
+ ]).describe("The unit to convert to; it must measure the same thing."),
479
+ value: e.number().describe("The amount to convert.")
480
+ }).describe("Convert compatible length, mass, or temperature units deterministically.");
481
+ e.strictObject({
482
+ data: Y,
483
+ ...i,
484
+ scope: i.scope.default(J)
485
+ });
486
+ var ft = a({
487
+ from: s(Y.shape.from.default("km")),
488
+ to: s(Y.shape.from.default("mi")),
489
+ value: e.number().default(0)
490
+ }), pt = ({ id: e = dt, scope: t = J } = {}) => ({ [`stores/${t}/${e}`]: ft }), mt = /* @__PURE__ */ t.strictObject({
491
+ hasPart: t.array(t.strictObject({
492
+ acceptedAnswer: t.array(t.strictObject({
493
+ answerExplanation: t.string().describe("One or two sentences explaining why this answer is right."),
494
+ text: t.string().describe("The correct answer.")
495
+ })).describe("The correct answers: exactly one for \"Multiple choice\" and \"Flashcard\", one or more for \"Checkbox\". For \"Checkbox\", put each independently selectable correct answer in its own object, so each gets a separate checkbox."),
496
+ assesses: t.string().describe("The id of the concept in teaches that this question practices. The app teaches this concept before showing its questions. Use only material from this concept or earlier ones."),
497
+ eduQuestionType: t.enum([
498
+ "Checkbox",
499
+ "Flashcard",
500
+ "Multiple choice"
501
+ ]).describe("\"Multiple choice\" picks one answer, \"Checkbox\" picks every correct answer, and \"Flashcard\" reveals the answer for the learner to grade themselves."),
502
+ id: t.string().describe("A short ID, unique within this lesson, e.g. \"count-1\"."),
503
+ suggestedAnswer: t.array(t.strictObject({
504
+ comment: t.string().optional().describe("Why this choice is wrong, shown when the learner picks it. Omit if the correct answer’s explanation covers it."),
505
+ text: t.string().describe("A plausible wrong answer.")
506
+ })).describe("One to three plausible wrong answers shown alongside the correct ones. Empty for \"Flashcard\"."),
507
+ text: t.string().describe("The question, applying only what has been taught so far, e.g. \"You hold ♠KQ4 ♥A73 ♦J852 ♣K6. How many points?\"")
508
+ })).describe("The questions, two or three per concept, in teaching order."),
509
+ teaches: t.array(t.strictObject({
510
+ description: t.string().describe("Two to four sentences that teach this one idea to a beginner."),
511
+ examples: t.array(t.strictObject({
512
+ name: t.string().describe("The example itself, e.g. \"Buenos días\" or \"♠AK5 ♥QJ4 ♦K82 ♣J73\"."),
513
+ value: t.string().describe("What the example shows, e.g. \"morning\" or \"15 points\".")
514
+ })).describe("Worked examples of the idea as schema.org PropertyValue pairs: the example and what it shows. Empty if none helps."),
515
+ id: t.string().describe("A short ID, unique within this lesson, e.g. \"count-points\"."),
516
+ name: t.string().describe("A short name for the idea, e.g. \"Counting points\".")
517
+ })).describe("The ideas this lesson teaches, in teaching order, usually two to four."),
518
+ title: t.string().describe("The lesson name, e.g. \"Opening bids\".")
519
+ }).describe("A short lesson: the ideas it teaches in order, and questions that practice each idea."), ht = "KowalskiLesson", gt = "private";
520
+ e.strictObject({
521
+ data: mt,
522
+ ...i
523
+ });
524
+ var _t = o("result_", e.enum(["first", "retry"]).nullable(), {
525
+ missed: e.array(e.string()).default([]),
526
+ seen: e.array(e.string()).default([]),
527
+ started: e.boolean().default(!1)
528
+ }), vt = ({ id: e = ht, scope: t = gt } = {}) => ({ [`stores/${t}/${e}`]: _t }), yt = /* @__PURE__ */ t.strictObject({
529
+ ingredients: t.array(t.strictObject({
530
+ amount: t.number().optional().describe("How much, e.g. 2 or 0.5. Omit if unmeasured."),
531
+ id: X(),
532
+ label: t.string().describe("The ingredient, e.g. \"Flour\"."),
533
+ notes: t.array(t.string()).optional().describe("Short notes, e.g. \"sifted\"."),
534
+ unit: t.string().optional().describe("A short unit, e.g. \"cup\" or \"g\".")
535
+ })).describe("Every ingredient, each with an ID unique among ingredients."),
536
+ servings: t.number().optional().describe("How many it serves. Omit if unknown."),
537
+ steps: t.array(t.strictObject({
538
+ after: t.array(X()).optional().describe("Prerequisite step IDs, all earlier in this recipe. Independent steps have no dependency."),
539
+ attention: t.enum(["active", "passive"]).optional().describe("\"passive\" when the cook can walk away, e.g. while baking."),
540
+ doneness: t.string().optional().describe("How to tell it is done."),
541
+ duration: t.strictObject({
542
+ maxMinutes: t.number().optional(),
543
+ minMinutes: t.number().optional(),
544
+ raw: t.string().describe("The duration as written, e.g. \"10–12 minutes\".")
545
+ }).optional(),
546
+ equipment: t.array(t.string()).optional(),
547
+ id: X(),
548
+ instruction: t.string().describe("What to do in this step."),
549
+ kind: t.enum([
550
+ "setup",
551
+ "transform",
552
+ "wait",
553
+ "serve"
554
+ ]).optional(),
555
+ label: t.string().optional().describe("A short name for the step."),
556
+ outputs: t.array(t.strictObject({
557
+ id: X(),
558
+ name: t.string().optional()
559
+ })).optional().describe("Products of this step, referenced by later steps through uses."),
560
+ temperature: t.string().optional().describe("As written, e.g. \"350°F\"."),
561
+ uses: t.array(t.strictObject({
562
+ id: X(),
563
+ portion: t.string().optional().describe("How much of it, e.g. \"half\"."),
564
+ source: t.discriminatedUnion("kind", [t.strictObject({
565
+ ingredientId: X(),
566
+ kind: t.literal("ingredient")
567
+ }), t.strictObject({
568
+ kind: t.literal("output"),
569
+ outputId: X()
570
+ })])
571
+ })).optional().describe("Ingredients or earlier step outputs consumed here. Output references create dependencies.")
572
+ })).describe("The steps in order, each with an ID unique among steps."),
573
+ title: t.string().describe("The recipe name."),
574
+ yield: t.string().optional().describe("What it makes, e.g. \"12 cookies\".")
575
+ }).describe("A recipe dependency graph (RGF), with ingredients and ordered steps.");
576
+ function X() {
577
+ return t.string().describe("A short ID, e.g. \"flour\".");
578
+ }
579
+ // src/kowalski/recipe.tsx
580
+ var bt = "KowalskiRecipe", Z = "private";
581
+ e.strictObject({
582
+ data: yt,
583
+ ...i,
584
+ scope: i.scope.default(Z)
585
+ });
586
+ var xt = o("step_", e.strictObject({
587
+ done: e.boolean(),
588
+ endsAt: e.number().nullable()
589
+ }), {
590
+ cooking: e.boolean().default(!1),
591
+ servings: e.number().default(1)
592
+ }), St = ({ id: e = bt, scope: t = Z } = {}) => ({ [`stores/${t}/${e}`]: xt }), Ct = "KowalskiTimeSince", Q = "public";
593
+ e.strictObject({
594
+ data: /* @__PURE__ */ e.strictObject({
595
+ action: e.string().describe("The big button that updates it, as a short command for doing it now, e.g. \"Give pill\" or \"Water plants\"."),
596
+ label: e.string().describe("A small line above the title naming the kind of tracker, e.g. \"Pill timer\". Pass an empty string to hide it."),
597
+ subject: e.string().describe("What gets done, as a short noun, e.g. \"pill\" or \"watering\". With \"pill\", the timestamp reads \"Last pill today at 5:04 PM\"."),
598
+ title: e.string().describe("Who or what is being tracked, shown as the heading, e.g. \"Winnie\" or \"Fern\".")
599
+ }).describe("Four short UI strings for an existing TimeSince React component: a heading, tracker label, event noun, and button command. The component already implements the elapsed clock, reset button, and saved state. Supply concise copy for each field, not explanations, implementation instructions, timestamps, or claims about the timer’s current state."),
600
+ ...i,
601
+ scope: i.scope.default(Q)
602
+ });
603
+ var wt = a({ lastAt: e.number().nullable().default(null) }), $ = /* @__PURE__ */ new Map([
604
+ ["BillSplit", te],
605
+ ["Bookmark", ie],
606
+ ["Budget", p],
607
+ ["Calculator", ce],
608
+ ["Checklist", de],
609
+ ["ColorPalette", me],
610
+ ["Contact", ve],
611
+ ["Countdown", xe],
612
+ ["Event", w],
613
+ ["Expense", O],
614
+ ["Goal", M],
615
+ ["Habit", we],
616
+ ["Ledger", De],
617
+ ["Note", Ae],
618
+ ["Poll", Ne],
619
+ ["RandomPicker", Ie],
620
+ ["Rating", Be],
621
+ ["Reminder", Ue],
622
+ ["Rotation", Ke],
623
+ ["Scoreboard", Ye],
624
+ ["ShoppingList", Qe],
625
+ ["TaskBoard", tt],
626
+ ["TimeZone", it],
627
+ ["Timer", st],
628
+ ["Trip", ut],
629
+ ["UnitConverter", pt],
630
+ ["Lesson", vt],
631
+ ["Recipe", St],
632
+ ["TimeSince", ({ id: e = Ct, scope: t = Q } = {}) => ({ [`stores/${t}/${e}`]: wt })]
633
+ ]), Tt = [...$.keys()];
634
+ function Et(e, t) {
635
+ return $.get(e)?.(t) ?? {};
636
+ }
637
+ export { Et as componentSchemas, n as kowalskiFeatureId, r as kowalskiScope, Tt as schemaComponents };