@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,285 @@
1
+ import { Text } from '@flickfyi/core'
2
+ import { Input, Picker } from '@flickfyi/core/atoms'
3
+ import { Field, Segmented } from '@flickfyi/core/molecules'
4
+ import * as stylex from '@stylexjs/stylex'
5
+ import { useEffect, useState } from 'react'
6
+ import { z } from 'zod/v4'
7
+
8
+ import { useConfiguredFeature } from '~/hooks/use-configured-feature'
9
+ import { convertUnit, unitDefinitions } from '~/kowalski/calculations'
10
+ import type { CreateSchemas } from '~/kowalski/create-schemas'
11
+ import { featureFields, replacement, store } from '~/kowalski/feature-schema'
12
+ import { format, parseNumberInput } from '~/kowalski/format'
13
+ import { FeatureAction, FeatureFrame, FeatureWell, layout } from '~/kowalski/frame'
14
+ import { roles } from '~/themes/shared'
15
+
16
+ const defaultId = 'KowalskiUnitConverter'
17
+ const defaultScope = 'private'
18
+
19
+ export const UnitConverterData = /* @__PURE__ */ z
20
+ .strictObject({
21
+ from: z
22
+ .enum(['m', 'km', 'mi', 'ft', 'kg', 'g', 'lb', 'c', 'f', 'k'])
23
+ .describe('The unit to convert from.'),
24
+ title: z.string().optional().describe('A short heading. Omit for "Convert".'),
25
+ to: z
26
+ .enum(['m', 'km', 'mi', 'ft', 'kg', 'g', 'lb', 'c', 'f', 'k'])
27
+ .describe('The unit to convert to; it must measure the same thing.'),
28
+ value: z.number().describe('The amount to convert.'),
29
+ })
30
+ .describe('Convert compatible length, mass, or temperature units deterministically.')
31
+
32
+ export type UnitConverterData = z.infer<typeof UnitConverterData>
33
+
34
+ export const UnitConverterProps = z.strictObject({
35
+ data: UnitConverterData,
36
+ ...featureFields,
37
+ scope: featureFields.scope.default(defaultScope),
38
+ })
39
+
40
+ export type UnitConverterProps = z.input<typeof UnitConverterProps> & {
41
+ style?: stylex.StyleXArray<stylex.StyleXStyles>
42
+ }
43
+
44
+ export const unitConverterStoreSchema = store({
45
+ from: replacement(UnitConverterData.shape.from.default('km')),
46
+ to: replacement(UnitConverterData.shape.from.default('mi')),
47
+ value: z.number().default(0),
48
+ })
49
+
50
+ export const createSchemas: CreateSchemas = ({
51
+ id = defaultId,
52
+ scope = defaultScope,
53
+ } = {}) => ({
54
+ [`stores/${scope}/${id}`]: unitConverterStoreSchema,
55
+ })
56
+
57
+ export function UnitConverter({
58
+ data,
59
+ id,
60
+ revision = 0,
61
+ scope = defaultScope,
62
+ style,
63
+ }: UnitConverterProps) {
64
+ const schema = unitConverterStoreSchema
65
+ // Authored units are unvalidated; seed a known pair that measures the same dimension.
66
+ const from = Object.hasOwn(unitDefinitions, data.from) ? data.from : 'km'
67
+ const to =
68
+ Object.hasOwn(unitDefinitions, data.to) &&
69
+ unitDefinitions[data.to].dimension === unitDefinitions[from].dimension
70
+ ? data.to
71
+ : ((Object.keys(unitDefinitions) as (keyof typeof unitDefinitions)[]).find(
72
+ unit =>
73
+ unit !== from &&
74
+ unitDefinitions[unit].dimension === unitDefinitions[from].dimension
75
+ ) ?? from)
76
+ const store = useConfiguredFeature({
77
+ name: id ?? defaultId,
78
+ revision,
79
+ schema,
80
+ scope,
81
+ seed: schema.parse({ from: { value: from }, to: { value: to }, value: data.value }),
82
+ })
83
+ const units = [
84
+ { label: 'Meters', value: 'm' },
85
+ { label: 'Kilometers', value: 'km' },
86
+ { label: 'Miles', value: 'mi' },
87
+ { label: 'Feet', value: 'ft' },
88
+ { label: 'Kilograms', value: 'kg' },
89
+ { label: 'Grams', value: 'g' },
90
+ { label: 'Pounds', value: 'lb' },
91
+ { label: 'Celsius', value: 'c' },
92
+ { label: 'Fahrenheit', value: 'f' },
93
+ { label: 'Kelvin', value: 'k' },
94
+ ] satisfies {
95
+ label: string
96
+ value: keyof typeof unitDefinitions
97
+ }[]
98
+ const groups = [
99
+ { from: 'm', label: 'Length', to: 'ft' },
100
+ { from: 'kg', label: 'Weight', to: 'lb' },
101
+ { from: 'c', label: 'Temperature', to: 'f' },
102
+ ] satisfies {
103
+ from: keyof typeof unitDefinitions
104
+ label: string
105
+ to: keyof typeof unitDefinitions
106
+ }[]
107
+ const dimension = unitDefinitions[store.value.from.value].dimension
108
+ const compatibleUnits = units.filter(
109
+ unit => unitDefinitions[unit.value].dimension === dimension
110
+ )
111
+ const fromUnit = units.find(unit => unit.value === store.value.from.value)
112
+ const toUnit = units.find(unit => unit.value === store.value.to.value)
113
+ const storedValue = format.formatNumber(store.value.value, { format: 'decimal' })
114
+ const [draft, setDraft] = useState(storedValue)
115
+ const [preserveDraft, setPreserveDraft] = useState<string>()
116
+ useEffect(() => {
117
+ if (store.error && store.ready) {
118
+ setPreserveDraft(current => current ?? draft)
119
+ return
120
+ }
121
+ if (preserveDraft !== undefined) {
122
+ return
123
+ }
124
+ setDraft(current =>
125
+ parseNumberInput(current) === store.value.value ? current : storedValue
126
+ )
127
+ }, [draft, preserveDraft, store.error, store.ready, store.value.value, storedValue])
128
+ const valid = Number.isFinite(parseNumberInput(draft))
129
+ const result = convertUnit(
130
+ valid ? parseNumberInput(draft) : store.value.value,
131
+ store.value.from.value,
132
+ store.value.to.value
133
+ )
134
+ // Four significant digits below one, three decimals above: 6.214 mi, not 6.2137119.
135
+ const formattedResult = valid
136
+ ? Number.isFinite(result)
137
+ ? format.formatNumber(result, {
138
+ notation:
139
+ Math.abs(result) >= 1e9 || (result !== 0 && Math.abs(result) < 1e-6)
140
+ ? 'scientific'
141
+ : 'standard',
142
+ ...(Math.abs(result) < 1
143
+ ? { maximumSignificantDigits: 4 }
144
+ : { maximumFractionDigits: 3 }),
145
+ })
146
+ : 'Out of range'
147
+ : '—'
148
+ return (
149
+ <FeatureFrame
150
+ style={style}
151
+ onRetry={store.retry}
152
+ notice={store.error}
153
+ component="unitConverter"
154
+ title={data.title ?? 'Convert'}
155
+ >
156
+ <Segmented
157
+ disabled={!store.ready}
158
+ options={groups.map(group => ({ label: group.label, value: group.label }))}
159
+ value={
160
+ groups.find(group => unitDefinitions[group.from].dimension === dimension)?.label
161
+ }
162
+ onChange={label => {
163
+ const group = groups.find(option => option.label === label)
164
+ if (!group) {
165
+ return
166
+ }
167
+ store.set(current =>
168
+ unitDefinitions[current.from.value].dimension ===
169
+ unitDefinitions[group.from].dimension
170
+ ? {}
171
+ : { from: { value: group.from }, to: { value: group.to } }
172
+ )
173
+ }}
174
+ />
175
+ <Field error={!valid && 'Enter a valid number.'} label="From">
176
+ {store.ready ? (
177
+ <Input
178
+ placeholder="Value"
179
+ value={draft}
180
+ onChange={text => {
181
+ setDraft(text)
182
+ setPreserveDraft(text)
183
+ if (Number.isFinite(parseNumberInput(text))) {
184
+ store.set(
185
+ () => ({ value: parseNumberInput(text) }),
186
+ () =>
187
+ setPreserveDraft(current => (current === text ? undefined : current))
188
+ )
189
+ }
190
+ }}
191
+ style={[layout.input]}
192
+ />
193
+ ) : (
194
+ <Text {...stylex.props(roles.text)}>{draft}</Text>
195
+ )}
196
+ {store.ready ? (
197
+ <Picker
198
+ label="From unit"
199
+ value={fromUnit?.label}
200
+ onChange={label => {
201
+ store.set(current => {
202
+ const unit = units.find(option => option.label === label)
203
+ return unit &&
204
+ unitDefinitions[unit.value].dimension ===
205
+ unitDefinitions[current.to.value].dimension
206
+ ? { from: { value: unit.value } }
207
+ : {}
208
+ })
209
+ }}
210
+ style={layout.input}
211
+ >
212
+ {compatibleUnits.map(unit => (
213
+ <Text key={unit.value} value={unit.label}>
214
+ {unit.label}
215
+ </Text>
216
+ ))}
217
+ </Picker>
218
+ ) : (
219
+ <Text {...stylex.props(roles.text)}>{fromUnit?.label}</Text>
220
+ )}
221
+ {store.saving && <Text {...stylex.props(roles.muted)}>Saving changes…</Text>}
222
+ {preserveDraft !== undefined &&
223
+ store.ready &&
224
+ valid &&
225
+ parseNumberInput(draft) !== store.value.value && (
226
+ <FeatureAction
227
+ component="unitConverter"
228
+ disabled={store.saving}
229
+ onClick={() =>
230
+ store.set(
231
+ () => ({ value: parseNumberInput(draft) }),
232
+ () =>
233
+ setPreserveDraft(current => (current === draft ? undefined : current))
234
+ )
235
+ }
236
+ >
237
+ Retry saving value
238
+ </FeatureAction>
239
+ )}
240
+ </Field>
241
+ <FeatureWell>
242
+ <Text {...stylex.props(roles.h1, unitStyles.result)}>{formattedResult}</Text>
243
+ {store.ready ? (
244
+ <Picker
245
+ label="To unit"
246
+ value={toUnit?.label}
247
+ onChange={label => {
248
+ store.set(current => {
249
+ const unit = units.find(option => option.label === label)
250
+ return unit &&
251
+ unitDefinitions[unit.value].dimension ===
252
+ unitDefinitions[current.from.value].dimension
253
+ ? { to: { value: unit.value } }
254
+ : {}
255
+ })
256
+ }}
257
+ style={layout.input}
258
+ >
259
+ {compatibleUnits.map(unit => (
260
+ <Text key={unit.value} value={unit.label}>
261
+ {unit.label}
262
+ </Text>
263
+ ))}
264
+ </Picker>
265
+ ) : (
266
+ <Text {...stylex.props(roles.text)}>{toUnit?.label}</Text>
267
+ )}
268
+ </FeatureWell>
269
+ <FeatureAction
270
+ component="unitConverter"
271
+ icon="arrow.left.arrow.right"
272
+ disabled={!store.ready}
273
+ onClick={() => {
274
+ store.set(current => ({ from: current.to, to: current.from }))
275
+ }}
276
+ >
277
+ Swap units
278
+ </FeatureAction>
279
+ </FeatureFrame>
280
+ )
281
+ }
282
+
283
+ const unitStyles = /* @__PURE__ */ stylex.create({
284
+ result: { minWidth: 0 },
285
+ })
@@ -0,0 +1,8 @@
1
+ import type { z } from 'zod/v4'
2
+
3
+ export type CreateSchemasInput = {
4
+ id?: string
5
+ scope?: 'private' | 'public'
6
+ }
7
+
8
+ export type CreateSchemas = (input?: CreateSchemasInput) => Record<string, z.ZodType>
@@ -8,7 +8,7 @@ import { useEffect, useRef, useState } from 'react'
8
8
  import { space } from '~/themes/scale.stylex'
9
9
  import { button, roles } from '~/themes/shared'
10
10
 
11
- import type { KowalskiComponent } from './catalog'
11
+ import type { KowalskiComponent } from './feature-schema'
12
12
  import { format } from './format'
13
13
  import { FeatureAction, layout } from './frame'
14
14