@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
@@ -2,8 +2,6 @@ import { useTheme } from '@flickfyi/core'
2
2
  import { Card, List, QuantityGroup, Stat } from '@flickfyi/core/molecules'
3
3
  import { useState } from 'react'
4
4
 
5
- import type { ExampleMetadata } from '@flickfyi/core/examples/metadata'
6
-
7
5
  import { theme } from './theme'
8
6
 
9
7
  // Nutrition data per unit
@@ -101,9 +99,3 @@ export default function KaleSmoothieMacroCalculator() {
101
99
  </Card>
102
100
  )
103
101
  }
104
-
105
- export const exampleMetadata = {
106
- description:
107
- 'Weighted totals from several independently adjustable quantities and per-unit factors, such as calories and nutrients across ingredients. Shows per-item quantity controls and recomputes aggregate measures.',
108
- name: 'Quantity totals',
109
- } satisfies ExampleMetadata
@@ -1,4 +1,6 @@
1
- import type { Meta, StoryObj } from '@storybook/react-vite'
1
+ import type { Meta } from '@storybook/react-vite'
2
+
3
+ import type { ExampleStory } from '@flickfyi/core/examples/metadata'
2
4
 
3
5
  import { List } from './list'
4
6
  import exampleSource from './list.tsx?raw'
@@ -10,6 +12,11 @@ const meta = {
10
12
  } satisfies Meta<typeof List>
11
13
 
12
14
  export default meta
13
- export const Example: StoryObj<typeof meta> = {
14
- args: { enabledForAgents: true },
15
+ export const Example: ExampleStory<typeof meta> = {
16
+ args: {
17
+ description:
18
+ 'Sortable rows with primary and secondary labels, relative timestamps, a per-row action, useful for schedules and recurring follow-ups.',
19
+ enabled: true,
20
+ name: 'Actionable list',
21
+ },
15
22
  }
@@ -3,8 +3,6 @@ import { Card, List as ItemList } from '@flickfyi/core/molecules'
3
3
  import * as stylex from '@flickfyi/core/stylex'
4
4
  import { useEffect, useState } from 'react'
5
5
 
6
- import type { ExampleMetadata } from '@flickfyi/core/examples/metadata'
7
-
8
6
  import { theme } from './theme'
9
7
 
10
8
  type Contact = { id: string; lastCalled: number | undefined; name: string }
@@ -88,12 +86,6 @@ export const evalMetadata = {
88
86
  prompt: 'Make a weekly call sheet for family',
89
87
  }
90
88
 
91
- export const exampleMetadata = {
92
- description:
93
- 'Sortable rows with primary and secondary labels, relative timestamps, a per-row action, useful for schedules and recurring follow-ups.',
94
- name: 'Actionable list',
95
- } satisfies ExampleMetadata
96
-
97
89
  function daysSince(ts: number | undefined, now: number): number {
98
90
  if (ts === undefined) {
99
91
  return Infinity
@@ -1,4 +1,6 @@
1
- import type { Meta, StoryObj } from '@storybook/react-vite'
1
+ import type { Meta } from '@storybook/react-vite'
2
+
3
+ import type { ExampleStory } from '@flickfyi/core/examples/metadata'
2
4
 
3
5
  import { Log } from './log'
4
6
  import exampleSource from './log.tsx?raw'
@@ -10,6 +12,11 @@ const meta = {
10
12
  } satisfies Meta<typeof Log>
11
13
 
12
14
  export default meta
13
- export const Example: StoryObj<typeof meta> = {
14
- args: { enabledForAgents: true },
15
+ export const Example: ExampleStory<typeof meta> = {
16
+ args: {
17
+ description:
18
+ 'Appending timestamped outcomes to an event history, newest first, with totals and a success percentage derived from recorded events. For recording occurrences rather than updating the current value of an existing item.',
19
+ enabled: true,
20
+ name: 'Event log',
21
+ },
15
22
  }
@@ -4,8 +4,6 @@ import { Card, List, Progress } from '@flickfyi/core/molecules'
4
4
  import * as stylex from '@flickfyi/core/stylex'
5
5
  import { useState } from 'react'
6
6
 
7
- import type { ExampleMetadata } from '@flickfyi/core/examples/metadata'
8
-
9
7
  import { theme } from './theme'
10
8
 
11
9
  type Shot = { id: string; made: boolean; time: string }
@@ -79,12 +77,6 @@ export const evalMetadata = {
79
77
  prompt: 'Make a free throw tracker',
80
78
  }
81
79
 
82
- export const exampleMetadata = {
83
- description:
84
- 'Appending timestamped outcomes to an event history, newest first, with totals and a success percentage derived from recorded events. For recording occurrences rather than updating the current value of an existing item.',
85
- name: 'Event log',
86
- } satisfies ExampleMetadata
87
-
88
80
  const formatTime = () => {
89
81
  const d = new Date()
90
82
  const h = d.getHours()
@@ -1,4 +1,6 @@
1
- import type { Meta, StoryObj } from '@storybook/react-vite'
1
+ import type { Meta } from '@storybook/react-vite'
2
+
3
+ import type { ExampleStory } from '@flickfyi/core/examples/metadata'
2
4
 
3
5
  import TimedTask from './timed-task'
4
6
  import exampleSource from './timed-task.tsx?raw'
@@ -10,6 +12,11 @@ const meta = {
10
12
  } satisfies Meta<typeof TimedTask>
11
13
 
12
14
  export default meta
13
- export const Example: StoryObj<typeof meta> = {
14
- args: { enabledForAgents: true },
15
+ export const Example: ExampleStory<typeof meta> = {
16
+ args: {
17
+ description:
18
+ 'A preparation checklist with preparation-only progress, followed by a separately started countdown with pause/resume, then finishing actions and completion. For multi-stage timed workflows.',
19
+ enabled: true,
20
+ name: 'Prepare, time, finish',
21
+ },
15
22
  }
@@ -4,8 +4,6 @@ import { Card, Choice, List, Progress, Stat } from '@flickfyi/core/molecules'
4
4
  import * as stylex from '@flickfyi/core/stylex'
5
5
  import { useEffect, useState } from 'react'
6
6
 
7
- import type { ExampleMetadata } from '@flickfyi/core/examples/metadata'
8
-
9
7
  import { theme } from './theme'
10
8
 
11
9
  const duration = 2 * 60 * 1000
@@ -150,9 +148,3 @@ export default function TimedTask() {
150
148
  </Card>
151
149
  )
152
150
  }
153
-
154
- export const exampleMetadata = {
155
- description:
156
- 'A preparation checklist with preparation-only progress, followed by a separately started countdown with pause/resume, then finishing actions and completion. For multi-stage timed workflows.',
157
- name: 'Prepare, time, finish',
158
- } satisfies ExampleMetadata
@@ -1,4 +1,6 @@
1
- import type { Meta, StoryObj } from '@storybook/react-vite'
1
+ import type { Meta } from '@storybook/react-vite'
2
+
3
+ import type { ExampleStory } from '@flickfyi/core/examples/metadata'
2
4
 
3
5
  import Timer from './timer'
4
6
  import exampleSource from './timer.tsx?raw'
@@ -10,6 +12,11 @@ const meta = {
10
12
  } satisfies Meta<typeof Timer>
11
13
 
12
14
  export default meta
13
- export const Example: StoryObj<typeof meta> = {
14
- args: { enabledForAgents: true },
15
+ export const Example: ExampleStory<typeof meta> = {
16
+ args: {
17
+ description:
18
+ 'A user-started countdown with pause, resume, reset, and stable completion, useful for cooking, brewing, and timed activities.',
19
+ enabled: true,
20
+ name: 'Countdown timer',
21
+ },
15
22
  }
@@ -3,8 +3,6 @@ import { Button } from '@flickfyi/core/atoms'
3
3
  import { Card, Stat } from '@flickfyi/core/molecules'
4
4
  import { useEffect, useState } from 'react'
5
5
 
6
- import type { ExampleMetadata } from '@flickfyi/core/examples/metadata'
7
-
8
6
  import { theme } from './theme'
9
7
 
10
8
  const duration = 90 * 1000
@@ -74,9 +72,3 @@ export default function Timer() {
74
72
  </Card>
75
73
  )
76
74
  }
77
-
78
- export const exampleMetadata = {
79
- description:
80
- 'A user-started countdown with pause, resume, reset, and stable completion, useful for cooking, brewing, and timed activities.',
81
- name: 'Countdown timer',
82
- } satisfies ExampleMetadata
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flickfyi/core",
3
- "version": "0.0.69",
3
+ "version": "0.0.72",
4
4
  "description": "Core type definitions and runtime environment for JavaScriptCore",
5
5
  "license": "MIT",
6
6
  "files": [
@@ -180,6 +180,16 @@
180
180
  "default": "./dist/kowalski/catalog.cjs"
181
181
  }
182
182
  },
183
+ "./kowalski/schemas": {
184
+ "import": {
185
+ "types": "./dist-types/kowalski/schemas.d.ts",
186
+ "default": "./dist/kowalski/schemas.js"
187
+ },
188
+ "require": {
189
+ "types": "./dist-types/kowalski/schemas.d.cts",
190
+ "default": "./dist/kowalski/schemas.cjs"
191
+ }
192
+ },
183
193
  "./examples/kowalski/theme": "./examples/kowalski/theme.ts",
184
194
  "./examples/kowalski/*": "./examples/kowalski/*/*.tsx",
185
195
  "./examples/kowalski/*.tsx": "./examples/kowalski/*.tsx"
@@ -197,7 +207,7 @@
197
207
  "deploy": "npm run verify:tsgo && npm run deploy:tsgo-deps && op run --env-file=\".env.op\" -- bun x --no-install fly-tsgo publish",
198
208
  "deploy:tsgo-deps": "tsx scripts/deploy-tsgo-workspace-deps.ts",
199
209
  "prepack": "npm run verify:tsgo",
200
- "typecheck": "tsrs --noEmit -p ./tsconfig.json && tsrs --noEmit -p ./tsconfig.examples.json",
210
+ "typecheck": "bun ./build-entries.ts && tsrs --noEmit -p ./tsconfig.json && tsrs --noEmit -p ./tsconfig.examples.json",
201
211
  "prebuild:types": "npm run verify:generated-types",
202
212
  "generate:types": "bun run --filter @flickfyi/photon generate-types",
203
213
  "generate:fonts": "tsx ./scripts/generate-google-fonts.ts",
@@ -281,6 +291,9 @@
281
291
  "vite": "8.3.5",
282
292
  "vite-plugin-dts": "5.1.2",
283
293
  "vitest": "5.0.5",
284
- "zx": "8.8.5"
294
+ "zx": "8.8.5",
295
+ "@flickfyi/schemas": "0.0.0",
296
+ "eslint": "10.14.0",
297
+ "@typescript-eslint/parser": "8.72.1"
285
298
  }
286
299
  }
@@ -1,7 +1,7 @@
1
1
  import { useEffect, useMemo } from 'react'
2
2
  import type { z } from 'zod/v4'
3
3
 
4
- import { useFeatureStore } from './use-feature-store'
4
+ import { useFeatureStore } from '~/hooks/use-feature-store'
5
5
 
6
6
  /** Authored seeds change only at a newer manifest revision; live values otherwise win. */
7
7
  export function useConfiguredFeature<
@@ -4,18 +4,23 @@ import { z } from 'zod/v4'
4
4
 
5
5
  import { createQuantumStoreAdapter } from '~/quantum/use-store'
6
6
 
7
- /** Wait for authoritative Quantum data; writes are optimistic only after hydration. */
8
- export function useFeatureStore<T extends object>({
9
- initialState,
10
- name,
11
- schema,
12
- scope = 'private',
13
- }: {
14
- initialState: T
15
- name: string
16
- schema: z.ZodType<T>
17
- scope?: 'private' | 'public'
18
- }) {
7
+ /**
8
+ * Subscribes to a Quantum store and exposes optimistic writes after hydration.
9
+ *
10
+ * @typeParam T - The state validated by the store schema.
11
+ * @param options - The store identity, schema, initial state, and sharing scope.
12
+ * @returns The visible state and save status. `set` accepts a partial update or an
13
+ * updater function and returns whether the write was queued; its optional callback
14
+ * runs after persistence succeeds. `ready` means the store is hydrated and writable.
15
+ * `retry` is available after a load failure. Failed writes roll back and set `error`.
16
+ *
17
+ * @remarks
18
+ * Public stores share state between users of the same flick. Pass `scope: 'private'`
19
+ * for separate state per user. Changing the name or scope opens a different store;
20
+ * it does not migrate existing data.
21
+ */
22
+ export function useFeatureStore<T extends object>(options: UseFeatureStoreOptions<T>) {
23
+ const { initialState, name, schema, scope = 'public' } = options
19
24
  const lens = useMemo(() => makeLens({ schema }), [schema])
20
25
  const writes = useMemo<{ pending: Set<Partial<T>>; error?: string }>(
21
26
  () => ({ pending: new Set() }),
@@ -105,6 +110,26 @@ export function useFeatureStore<T extends object>({
105
110
  }
106
111
  }
107
112
 
113
+ /**
114
+ * Options for {@link useFeatureStore}.
115
+ *
116
+ * @typeParam T - The state validated by `schema`.
117
+ */
118
+ export type UseFeatureStoreOptions<T extends object> = {
119
+ /** Seeds a new store and supplies the value before hydration; never replaces saved state. */
120
+ initialState: T
121
+ /** Stable store name within the flick. Reuse it to reopen the same store and scope. */
122
+ name: string
123
+ /** Validates snapshots and updates and determines the store version. Keep its reference stable. */
124
+ schema: z.ZodType<T>
125
+ /**
126
+ * Whether state is shared between users of the flick or kept separately per user.
127
+ *
128
+ * @defaultValue `'public'`
129
+ */
130
+ scope?: 'private' | 'public'
131
+ }
132
+
108
133
  type FeatureSnapshot<T> = {
109
134
  loadFailed?: boolean
110
135
  ready: boolean
@@ -7,3 +7,16 @@
7
7
  5. Minimize the setup interface once the activity has begun.
8
8
  6. Items waiting on something else stay grey, deferred until it completes.
9
9
  7. Ideally it should fit on the screen, but don't be excessively dogmatic.
10
+
11
+ ## Props
12
+
13
+ Props are typed by TypeScript. Components destructure them with defaults and never parse
14
+ or validate their own props at runtime (no `Props.parse(input)` in a component).
15
+
16
+ Each component's `data` schema lives in that component's file; helpers shared across features
17
+ live in `feature-schema.ts`. Content schemas are what the content model reads, so they describe
18
+ each field and nothing else: no `.min()`, `.max()`, `.int()`, `.regex()`, `.refine()`,
19
+ `.default()`, or `z.iso` formats. Say "short" or "Omit for 300" in `.describe()` instead, and
20
+ apply the fallback in the component. Components render whatever content they receive, including
21
+ empty strings, empty arrays, and unparseable dates, time zones, or currency codes, without
22
+ throwing. `tests/kowalski-contracts.test.ts` checks the content schemas for these keywords.
@@ -1,7 +1,21 @@
1
1
  import { Decimal } from 'decimal.js'
2
2
 
3
- import { type PickerDomain, unitDefinitions } from './catalog'
4
- import { format } from './format'
3
+ import type { PickerDomain } from '~/kowalski/components/random-picker'
4
+
5
+ import { format, resolveCurrency } from './format'
6
+
7
+ export const unitDefinitions = {
8
+ c: { dimension: 'temperature', factor: 1, offset: 0 },
9
+ f: { dimension: 'temperature', factor: 5 / 9, offset: -32 },
10
+ ft: { dimension: 'length', factor: 0.3048, offset: 0 },
11
+ g: { dimension: 'mass', factor: 0.001, offset: 0 },
12
+ k: { dimension: 'temperature', factor: 1, offset: -273.15 },
13
+ kg: { dimension: 'mass', factor: 1, offset: 0 },
14
+ km: { dimension: 'length', factor: 1000, offset: 0 },
15
+ lb: { dimension: 'mass', factor: 0.45359237, offset: 0 },
16
+ m: { dimension: 'length', factor: 1, offset: 0 },
17
+ mi: { dimension: 'length', factor: 1609.344, offset: 0 },
18
+ }
5
19
 
6
20
  const Money = Decimal.clone({ precision: 40, rounding: Decimal.ROUND_HALF_UP })
7
21
 
@@ -19,21 +33,26 @@ export function billShares(
19
33
  total: number,
20
34
  people: number,
21
35
  tipPercent: number,
22
- currency: string
36
+ currency: string | undefined
23
37
  ) {
24
38
  const digits =
25
39
  format.formatters
26
- .getNumberFormat(format.locale, { currency, style: 'currency' })
40
+ .getNumberFormat(format.locale, {
41
+ currency: resolveCurrency(currency),
42
+ style: 'currency',
43
+ })
27
44
  .resolvedOptions().maximumFractionDigits ?? 2
28
45
  const scale = 10 ** digits
29
46
  const minor = new Money(total)
30
47
  .times(new Money(tipPercent).div(100).plus(1))
31
48
  .times(scale)
32
49
  .toDecimalPlaces(0)
33
- const share = minor.dividedToIntegerBy(people)
50
+ // Authored and stored counts are unvalidated; split between at least one whole person.
51
+ const count = Number.isFinite(people) ? Math.max(1, Math.round(people)) : 1
52
+ const share = minor.dividedToIntegerBy(count)
34
53
  return {
35
54
  perPerson: share.div(scale).toNumber(),
36
- remainder: minor.minus(share.times(people)).div(scale).toNumber(),
55
+ remainder: minor.minus(share.times(count)).div(scale).toNumber(),
37
56
  total: minor.div(scale).toNumber(),
38
57
  }
39
58
  }
@@ -77,11 +96,20 @@ export function nextReminder(
77
96
  }
78
97
  const interval = (recurrence === 'daily' ? 1 : 7) * 86_400_000
79
98
  const due = Date.parse(dueAt)
99
+ if (!Number.isFinite(due)) {
100
+ return null
101
+ }
80
102
  return new Date(
81
103
  due + Math.max(1, Math.floor((now - due) / interval) + 1) * interval
82
104
  ).toISOString()
83
105
  }
84
106
 
107
+ /** Stored and authored instants are unvalidated text; anything unparseable reads as unset. */
108
+ export function parseInstant(value: string | null | undefined) {
109
+ const instant = value ? Date.parse(value) : Number.NaN
110
+ return Number.isFinite(instant) ? instant : null
111
+ }
112
+
85
113
  export function pickResult(domain: PickerDomain, sample: number) {
86
114
  if (!(sample >= 0 && sample < 1)) {
87
115
  throw new Error('Random sample must be in [0, 1)')
@@ -97,9 +125,9 @@ export function pickResult(domain: PickerDomain, sample: number) {
97
125
  }
98
126
 
99
127
  /** Currency padding and grouping stay identical in the saved card and its editor. */
100
- export function formatCurrency(value: number, currency: string) {
128
+ export function formatCurrency(value: number, currency: string | undefined) {
101
129
  return format.formatNumber(value, {
102
- currency,
130
+ currency: resolveCurrency(currency),
103
131
  format: 'decimal',
104
132
  style: 'currency',
105
133
  })
@@ -1,10 +1,15 @@
1
1
  import { Decimal } from 'decimal.js'
2
+ import type { z } from 'zod/v4'
3
+
4
+ import type {
5
+ CalculatorData,
6
+ calculatorStoreSchema,
7
+ } from '~/kowalski/components/calculator'
2
8
 
3
- import type { KowalskiProps, KowalskiState } from './catalog'
4
9
  import { format } from './format'
5
10
 
6
- type CalculatorState = KowalskiState<'calculator'>['calculation']
7
- type CalculatorOperator = KowalskiProps<'calculator'>['operator']
11
+ type CalculatorState = z.output<typeof calculatorStoreSchema>['calculation']
12
+ type CalculatorOperator = NonNullable<z.output<typeof CalculatorData>['operator']>
8
13
  export type CalculatorKey =
9
14
  | '0'
10
15
  | '1'
@@ -50,10 +55,13 @@ export const calculatorKeys = [
50
55
  ] satisfies CalculatorKey[]
51
56
 
52
57
  export function initialCalculator({
53
- left,
54
- operator,
55
- right,
56
- }: Pick<KowalskiProps<'calculator'>, 'left' | 'operator' | 'right'>): CalculatorState {
58
+ left = 0,
59
+ operator = '+',
60
+ right = 0,
61
+ }: Pick<
62
+ z.output<typeof CalculatorData>,
63
+ 'left' | 'operator' | 'right'
64
+ >): CalculatorState {
57
65
  const result = calculate(left, operator, right)
58
66
  return {
59
67
  entry: result === null ? 'Error' : new CalculatorNumber(result).toString(),