@flickfyi/flkr 0.0.141 → 0.0.153

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 (494) hide show
  1. package/node_modules/@flickfyi/attestation/.turbo/turbo-build.log +7 -7
  2. package/node_modules/@flickfyi/biscuit/.turbo/turbo-build.log +7 -7
  3. package/node_modules/@flickfyi/core/.oxlintrc.json +2 -1
  4. package/node_modules/@flickfyi/core/.turbo/turbo-build.log +499 -92
  5. package/node_modules/@flickfyi/core/README.md +58 -4
  6. package/node_modules/@flickfyi/core/dist/index.cjs +1 -1
  7. package/node_modules/@flickfyi/core/dist/index.js +35 -24
  8. package/node_modules/@flickfyi/core/dist/kowalski/calculations.d.ts +17 -0
  9. package/node_modules/@flickfyi/core/dist/kowalski/calculator.d.ts +13 -0
  10. package/node_modules/@flickfyi/core/dist/kowalski/catalog.cjs +1 -0
  11. package/node_modules/@flickfyi/core/dist/kowalski/catalog.d.cts +962 -0
  12. package/node_modules/@flickfyi/core/dist/kowalski/catalog.d.ts +962 -0
  13. package/node_modules/@flickfyi/core/dist/kowalski/catalog.js +639 -0
  14. package/node_modules/@flickfyi/core/dist/kowalski/clocks.d.ts +4 -0
  15. package/node_modules/@flickfyi/core/dist/kowalski/date-time.d.ts +22 -0
  16. package/node_modules/@flickfyi/core/dist/kowalski/details.d.ts +7 -0
  17. package/node_modules/@flickfyi/core/dist/kowalski/everyday.d.ts +8 -0
  18. package/node_modules/@flickfyi/core/dist/kowalski/format.d.ts +4 -0
  19. package/node_modules/@flickfyi/core/dist/kowalski/frame.d.ts +161 -0
  20. package/node_modules/@flickfyi/core/dist/kowalski/index.cjs +21 -0
  21. package/node_modules/@flickfyi/core/dist/kowalski/index.d.cts +8 -0
  22. package/node_modules/@flickfyi/core/dist/kowalski/index.d.ts +8 -0
  23. package/node_modules/@flickfyi/core/dist/kowalski/index.js +7496 -0
  24. package/node_modules/@flickfyi/core/dist/kowalski/productivity.d.ts +5 -0
  25. package/node_modules/@flickfyi/core/dist/kowalski/recipe.d.ts +8 -0
  26. package/node_modules/@flickfyi/core/dist/kowalski/tools.d.ts +7 -0
  27. package/node_modules/@flickfyi/core/dist/kowalski/use-clock.d.ts +6 -0
  28. package/node_modules/@flickfyi/core/dist/kowalski/use-configured-feature.d.ts +19 -0
  29. package/node_modules/@flickfyi/core/dist/kowalski/use-feature-store.d.ts +15 -0
  30. package/node_modules/@flickfyi/core/dist/kowalski.css +506 -0
  31. package/node_modules/@flickfyi/core/dist/molecules/field/field.d.ts +8 -0
  32. package/node_modules/@flickfyi/core/dist/molecules/index.cjs +1 -1
  33. package/node_modules/@flickfyi/core/dist/molecules/index.d.cts +3 -0
  34. package/node_modules/@flickfyi/core/dist/molecules/index.d.ts +3 -0
  35. package/node_modules/@flickfyi/core/dist/molecules/index.js +88 -27
  36. package/node_modules/@flickfyi/core/dist/molecules/segmented/segmented.d.ts +10 -0
  37. package/node_modules/@flickfyi/core/dist/molecules/stepper/stepper.d.ts +10 -0
  38. package/node_modules/@flickfyi/core/dist/quantum/use-store.d.ts +7 -1
  39. package/node_modules/@flickfyi/core/dist/themes.css +2 -0
  40. package/node_modules/@flickfyi/core/examples/kowalski/bill-split/bill-split.stories.tsx +15 -0
  41. package/node_modules/@flickfyi/core/examples/kowalski/bill-split/bill-split.tsx +17 -0
  42. package/node_modules/@flickfyi/core/examples/kowalski/bookmark/bookmark.stories.tsx +15 -0
  43. package/node_modules/@flickfyi/core/examples/kowalski/bookmark/bookmark.tsx +23 -0
  44. package/node_modules/@flickfyi/core/examples/kowalski/budget/budget.stories.tsx +15 -0
  45. package/node_modules/@flickfyi/core/examples/kowalski/budget/budget.tsx +26 -0
  46. package/node_modules/@flickfyi/core/examples/kowalski/calculator/calculator.stories.tsx +15 -0
  47. package/node_modules/@flickfyi/core/examples/kowalski/calculator/calculator.tsx +24 -0
  48. package/node_modules/@flickfyi/core/examples/kowalski/checklist/checklist.stories.tsx +15 -0
  49. package/node_modules/@flickfyi/core/examples/kowalski/checklist/checklist.tsx +26 -0
  50. package/node_modules/@flickfyi/core/examples/kowalski/color-palette/color-palette.stories.tsx +15 -0
  51. package/node_modules/@flickfyi/core/examples/kowalski/color-palette/color-palette.tsx +22 -0
  52. package/node_modules/@flickfyi/core/examples/kowalski/contact/contact.stories.tsx +15 -0
  53. package/node_modules/@flickfyi/core/examples/kowalski/contact/contact.tsx +23 -0
  54. package/node_modules/@flickfyi/core/examples/kowalski/countdown/countdown.stories.tsx +15 -0
  55. package/node_modules/@flickfyi/core/examples/kowalski/countdown/countdown.tsx +23 -0
  56. package/node_modules/@flickfyi/core/examples/kowalski/event/event.stories.tsx +15 -0
  57. package/node_modules/@flickfyi/core/examples/kowalski/event/event.tsx +24 -0
  58. package/node_modules/@flickfyi/core/examples/kowalski/expense/expense.stories.tsx +15 -0
  59. package/node_modules/@flickfyi/core/examples/kowalski/expense/expense.tsx +23 -0
  60. package/node_modules/@flickfyi/core/examples/kowalski/goal/goal.stories.tsx +15 -0
  61. package/node_modules/@flickfyi/core/examples/kowalski/goal/goal.tsx +24 -0
  62. package/node_modules/@flickfyi/core/examples/kowalski/habit/habit.stories.tsx +15 -0
  63. package/node_modules/@flickfyi/core/examples/kowalski/habit/habit.tsx +23 -0
  64. package/node_modules/@flickfyi/core/examples/kowalski/ledger/ledger.stories.tsx +15 -0
  65. package/node_modules/@flickfyi/core/examples/kowalski/ledger/ledger.tsx +25 -0
  66. package/node_modules/@flickfyi/core/examples/kowalski/note/note.stories.tsx +15 -0
  67. package/node_modules/@flickfyi/core/examples/kowalski/note/note.tsx +22 -0
  68. package/node_modules/@flickfyi/core/examples/kowalski/poll/poll.stories.tsx +15 -0
  69. package/node_modules/@flickfyi/core/examples/kowalski/poll/poll.tsx +26 -0
  70. package/node_modules/@flickfyi/core/examples/kowalski/random-picker/random-picker.stories.tsx +15 -0
  71. package/node_modules/@flickfyi/core/examples/kowalski/random-picker/random-picker.tsx +23 -0
  72. package/node_modules/@flickfyi/core/examples/kowalski/rating/rating.stories.tsx +15 -0
  73. package/node_modules/@flickfyi/core/examples/kowalski/rating/rating.tsx +19 -0
  74. package/node_modules/@flickfyi/core/examples/kowalski/recipe/recipe.stories.tsx +15 -0
  75. package/node_modules/@flickfyi/core/examples/kowalski/recipe/recipe.tsx +120 -0
  76. package/node_modules/@flickfyi/core/examples/kowalski/reminder/reminder.stories.tsx +15 -0
  77. package/node_modules/@flickfyi/core/examples/kowalski/reminder/reminder.tsx +23 -0
  78. package/node_modules/@flickfyi/core/examples/kowalski/rotation/rotation.stories.tsx +15 -0
  79. package/node_modules/@flickfyi/core/examples/kowalski/rotation/rotation.tsx +27 -0
  80. package/node_modules/@flickfyi/core/examples/kowalski/scoreboard/scoreboard.stories.tsx +15 -0
  81. package/node_modules/@flickfyi/core/examples/kowalski/scoreboard/scoreboard.tsx +26 -0
  82. package/node_modules/@flickfyi/core/examples/kowalski/shopping-list/shopping-list.stories.tsx +15 -0
  83. package/node_modules/@flickfyi/core/examples/kowalski/shopping-list/shopping-list.tsx +27 -0
  84. package/node_modules/@flickfyi/core/examples/kowalski/task-board/task-board.stories.tsx +15 -0
  85. package/node_modules/@flickfyi/core/examples/kowalski/task-board/task-board.tsx +27 -0
  86. package/node_modules/@flickfyi/core/examples/kowalski/theme.ts +3 -0
  87. package/node_modules/@flickfyi/core/examples/kowalski/time-zone/time-zone.stories.tsx +15 -0
  88. package/node_modules/@flickfyi/core/examples/kowalski/time-zone/time-zone.tsx +22 -0
  89. package/node_modules/@flickfyi/core/examples/kowalski/timer/timer.stories.tsx +15 -0
  90. package/node_modules/@flickfyi/core/examples/kowalski/timer/timer.tsx +23 -0
  91. package/node_modules/@flickfyi/core/examples/kowalski/trip/trip.stories.tsx +15 -0
  92. package/node_modules/@flickfyi/core/examples/kowalski/trip/trip.tsx +26 -0
  93. package/node_modules/@flickfyi/core/examples/kowalski/unit-converter/unit-converter.stories.tsx +15 -0
  94. package/node_modules/@flickfyi/core/examples/kowalski/unit-converter/unit-converter.tsx +24 -0
  95. package/node_modules/@flickfyi/core/examples/parrott/calculator/calculator.stories.tsx +3 -1
  96. package/node_modules/@flickfyi/core/examples/parrott/checklist/checklist.stories.tsx +3 -1
  97. package/node_modules/@flickfyi/core/examples/parrott/countdown/countdown.stories.tsx +3 -1
  98. package/node_modules/@flickfyi/core/examples/parrott/counter/counter.stories.tsx +1 -0
  99. package/node_modules/@flickfyi/core/examples/parrott/fortune/fortune.stories.tsx +3 -1
  100. package/node_modules/@flickfyi/core/examples/parrott/grid/grid.stories.tsx +3 -1
  101. package/node_modules/@flickfyi/core/examples/parrott/kale-smoothie/kale-smoothie.stories.tsx +1 -0
  102. package/node_modules/@flickfyi/core/examples/parrott/list/list.stories.tsx +3 -1
  103. package/node_modules/@flickfyi/core/examples/parrott/log/log.stories.tsx +3 -1
  104. package/node_modules/@flickfyi/core/examples/parrott/timed-task/timed-task.stories.tsx +3 -1
  105. package/node_modules/@flickfyi/core/examples/parrott/timer/timer.stories.tsx +3 -1
  106. package/node_modules/@flickfyi/core/fixtures/native/host/project.yml +3 -0
  107. package/node_modules/@flickfyi/core/fixtures/native/src/catalog-features.tsx +88 -0
  108. package/node_modules/@flickfyi/core/package.json +35 -5
  109. package/node_modules/@flickfyi/core/package.tsgo.json +19 -1
  110. package/node_modules/@flickfyi/core/scripts/vite-globals.d.ts +2 -0
  111. package/node_modules/@flickfyi/core/src/generated-types.d.ts +1 -0
  112. package/node_modules/@flickfyi/core/src/kowalski/README.md +9 -0
  113. package/node_modules/@flickfyi/core/src/kowalski/calculations.ts +106 -0
  114. package/node_modules/@flickfyi/core/src/kowalski/calculator.ts +243 -0
  115. package/node_modules/@flickfyi/core/src/kowalski/catalog.ts +787 -0
  116. package/node_modules/@flickfyi/core/src/kowalski/clocks.tsx +464 -0
  117. package/node_modules/@flickfyi/core/src/kowalski/date-time.tsx +469 -0
  118. package/node_modules/@flickfyi/core/src/kowalski/details.tsx +1387 -0
  119. package/node_modules/@flickfyi/core/src/kowalski/everyday.tsx +652 -0
  120. package/node_modules/@flickfyi/core/src/kowalski/format.ts +48 -0
  121. package/node_modules/@flickfyi/core/src/kowalski/frame.tsx +351 -0
  122. package/node_modules/@flickfyi/core/src/kowalski/index.ts +23 -0
  123. package/node_modules/@flickfyi/core/src/kowalski/productivity.tsx +575 -0
  124. package/node_modules/@flickfyi/core/src/kowalski/recipe.tsx +555 -0
  125. package/node_modules/@flickfyi/core/src/kowalski/stories/composition.stories.tsx +47 -0
  126. package/node_modules/@flickfyi/core/src/kowalski/stories/composition.tsx +100 -0
  127. package/node_modules/@flickfyi/core/src/kowalski/tools.tsx +1213 -0
  128. package/node_modules/@flickfyi/core/src/kowalski/use-clock.ts +19 -0
  129. package/node_modules/@flickfyi/core/src/kowalski/use-configured-feature.ts +85 -0
  130. package/node_modules/@flickfyi/core/src/kowalski/use-feature-store.ts +119 -0
  131. package/node_modules/@flickfyi/core/src/molecules/field/field.tsx +34 -0
  132. package/node_modules/@flickfyi/core/src/molecules/index.ts +3 -0
  133. package/node_modules/@flickfyi/core/src/molecules/segmented/segmented.tsx +48 -0
  134. package/node_modules/@flickfyi/core/src/molecules/stepper/stepper.tsx +54 -0
  135. package/node_modules/@flickfyi/core/src/quantum/use-store.ts +41 -16
  136. package/node_modules/@flickfyi/core/tests/fly.test.ts +34 -7
  137. package/node_modules/@flickfyi/core/tests/kowalski-calculations.test.ts +60 -0
  138. package/node_modules/@flickfyi/core/tests/kowalski-calculator.test.ts +142 -0
  139. package/node_modules/@flickfyi/core/tests/kowalski-contracts.test.ts +223 -0
  140. package/node_modules/@flickfyi/core/tests/kowalski-date-time.test.tsx +462 -0
  141. package/node_modules/@flickfyi/core/tests/kowalski-features.test.tsx +2158 -0
  142. package/node_modules/@flickfyi/core/tests/kowalski-store.test.tsx +514 -0
  143. package/node_modules/@flickfyi/core/tests/preview-build.test.ts +1 -1
  144. package/node_modules/@flickfyi/core/tests/quantum-use-store.test.ts +53 -1
  145. package/node_modules/@flickfyi/core/tests/verify-tsgo-assets.test.ts +1 -1
  146. package/node_modules/@flickfyi/core/tsconfig.vite-dts.json +2 -1
  147. package/node_modules/@flickfyi/core/tsgo.bun.lock +111 -9
  148. package/node_modules/@flickfyi/core/tsgo.package.json +21 -3
  149. package/node_modules/@flickfyi/core/vite.config.ts +9 -5
  150. package/node_modules/@flickfyi/core/vitest.config.ts +1 -1
  151. package/node_modules/@flickfyi/http-message-sig/.turbo/turbo-build.log +7 -7
  152. package/node_modules/@flickfyi/identity/.turbo/turbo-build.log +8 -9
  153. package/node_modules/@flickfyi/lens/.turbo/turbo-build.log +7 -7
  154. package/node_modules/@flickfyi/photon/.turbo/turbo-build.log +4 -4
  155. package/node_modules/@flickfyi/photon/Sources/Photon/Components/Button.swift +29 -2
  156. package/node_modules/@flickfyi/photon/Sources/PhotonVersion/Resources/photon-version.json +1 -1
  157. package/node_modules/@flickfyi/photon/Tests/PhotonTests/Components/ButtonHostTests.swift +26 -0
  158. package/node_modules/@flickfyi/photon/Tests/PhotonTests/Fixtures/StyleX/catalog-features.styles.json +1 -0
  159. package/node_modules/@flickfyi/photon/Tests/PhotonTests/Fixtures/StyleX/catalog-native.styles.json +1 -1
  160. package/node_modules/@flickfyi/photon/Tests/PhotonTests/Fixtures/StyleX/catalog-scale.styles.json +1 -1
  161. package/node_modules/@flickfyi/photon/Tests/PhotonTests/Fixtures/StyleX/catalog-theme.styles.json +1 -1
  162. package/node_modules/@flickfyi/photon/Tests/PhotonTests/Fixtures/StyleX/catalog-typography.styles.json +1 -1
  163. package/node_modules/@flickfyi/photon/Tests/PhotonTests/Fixtures/StyleX/stylex-calculator.styles.json +1 -1
  164. package/node_modules/@flickfyi/photon/dist/globals.d.ts +5 -0
  165. package/node_modules/@flickfyi/photon/dist/version.cjs +1 -1
  166. package/node_modules/@flickfyi/photon/dist/version.js +1 -1
  167. package/node_modules/@flickfyi/photon/generated/react-swiftui.d.ts +1 -0
  168. package/node_modules/@flickfyi/photon/package.json +1 -1
  169. package/node_modules/@flickfyi/photon/src/globals.d.ts +5 -0
  170. package/node_modules/@flickfyi/rwsdk-extensions/.turbo/turbo-build.log +7 -7
  171. package/node_modules/@formatjs/fast-memoize/LICENSE.md +9 -0
  172. package/node_modules/@formatjs/fast-memoize/README.md +3 -0
  173. package/node_modules/@formatjs/fast-memoize/index.d.ts +35 -0
  174. package/node_modules/@formatjs/fast-memoize/index.js +69 -0
  175. package/node_modules/@formatjs/fast-memoize/index.js.map +1 -0
  176. package/node_modules/@formatjs/fast-memoize/package.json +25 -0
  177. package/node_modules/@formatjs/icu-messageformat-parser/LICENSE.md +9 -0
  178. package/node_modules/@formatjs/icu-messageformat-parser/README.md +38 -0
  179. package/node_modules/@formatjs/icu-messageformat-parser/index.d.ts +393 -0
  180. package/node_modules/@formatjs/icu-messageformat-parser/index.js +2187 -0
  181. package/node_modules/@formatjs/icu-messageformat-parser/index.js.map +1 -0
  182. package/node_modules/@formatjs/icu-messageformat-parser/manipulator.d.ts +175 -0
  183. package/node_modules/@formatjs/icu-messageformat-parser/manipulator.js +209 -0
  184. package/node_modules/@formatjs/icu-messageformat-parser/manipulator.js.map +1 -0
  185. package/node_modules/@formatjs/icu-messageformat-parser/no-parser.d.ts +183 -0
  186. package/node_modules/@formatjs/icu-messageformat-parser/no-parser.js +162 -0
  187. package/node_modules/@formatjs/icu-messageformat-parser/no-parser.js.map +1 -0
  188. package/node_modules/@formatjs/icu-messageformat-parser/package.json +21 -0
  189. package/node_modules/@formatjs/icu-messageformat-parser/printer.d.ts +154 -0
  190. package/node_modules/@formatjs/icu-messageformat-parser/printer.js +224 -0
  191. package/node_modules/@formatjs/icu-messageformat-parser/printer.js.map +1 -0
  192. package/node_modules/@formatjs/icu-skeleton-parser/LICENSE.md +9 -0
  193. package/node_modules/@formatjs/icu-skeleton-parser/README.md +1 -0
  194. package/node_modules/@formatjs/icu-skeleton-parser/index.d.ts +67 -0
  195. package/node_modules/@formatjs/icu-skeleton-parser/index.js +380 -0
  196. package/node_modules/@formatjs/icu-skeleton-parser/index.js.map +1 -0
  197. package/node_modules/@formatjs/icu-skeleton-parser/package.json +15 -0
  198. package/node_modules/@formatjs/intl/LICENSE.md +9 -0
  199. package/node_modules/@formatjs/intl/README.md +3 -0
  200. package/node_modules/@formatjs/intl/index.d.ts +499 -0
  201. package/node_modules/@formatjs/intl/index.js +595 -0
  202. package/node_modules/@formatjs/intl/index.js.map +1 -0
  203. package/node_modules/@formatjs/intl/package.json +37 -0
  204. package/node_modules/decimal.js/LICENCE.md +23 -0
  205. package/node_modules/decimal.js/README.md +246 -0
  206. package/node_modules/decimal.js/decimal.d.ts +301 -0
  207. package/node_modules/decimal.js/decimal.js +4951 -0
  208. package/node_modules/decimal.js/decimal.mjs +4914 -0
  209. package/node_modules/decimal.js/package.json +55 -0
  210. package/node_modules/format-quantity/LICENSE +21 -0
  211. package/node_modules/format-quantity/README.md +181 -0
  212. package/node_modules/format-quantity/dist/cjs/format-quantity.cjs.development.d.ts +131 -0
  213. package/node_modules/format-quantity/dist/cjs/format-quantity.cjs.development.js +214 -0
  214. package/node_modules/format-quantity/dist/cjs/format-quantity.cjs.development.js.map +1 -0
  215. package/node_modules/format-quantity/dist/cjs/format-quantity.cjs.production.d.ts +131 -0
  216. package/node_modules/format-quantity/dist/cjs/format-quantity.cjs.production.js +2 -0
  217. package/node_modules/format-quantity/dist/cjs/format-quantity.cjs.production.js.map +1 -0
  218. package/node_modules/format-quantity/dist/cjs/index.d.ts +1 -0
  219. package/node_modules/format-quantity/dist/cjs/index.js +6 -0
  220. package/node_modules/format-quantity/dist/format-quantity.d.mts +131 -0
  221. package/node_modules/format-quantity/dist/format-quantity.legacy-esm.d.ts +131 -0
  222. package/node_modules/format-quantity/dist/format-quantity.legacy-esm.js +268 -0
  223. package/node_modules/format-quantity/dist/format-quantity.legacy-esm.js.map +1 -0
  224. package/node_modules/format-quantity/dist/format-quantity.mjs +208 -0
  225. package/node_modules/format-quantity/dist/format-quantity.mjs.map +1 -0
  226. package/node_modules/format-quantity/dist/format-quantity.production.d.mts +131 -0
  227. package/node_modules/format-quantity/dist/format-quantity.production.mjs +2 -0
  228. package/node_modules/format-quantity/dist/format-quantity.production.mjs.map +1 -0
  229. package/node_modules/format-quantity/dist/format-quantity.umd.min.js +3 -0
  230. package/node_modules/format-quantity/dist/format-quantity.umd.min.js.map +1 -0
  231. package/node_modules/format-quantity/package.json +81 -0
  232. package/node_modules/intl-messageformat/LICENSE.md +33 -0
  233. package/node_modules/intl-messageformat/README.md +3 -0
  234. package/node_modules/intl-messageformat/index.d.ts +177 -0
  235. package/node_modules/intl-messageformat/index.js +327 -0
  236. package/node_modules/intl-messageformat/index.js.map +1 -0
  237. package/node_modules/intl-messageformat/intl-messageformat.iife.js +2819 -0
  238. package/node_modules/intl-messageformat/package.json +40 -0
  239. package/node_modules/numeric-quantity/LICENSE +21 -0
  240. package/node_modules/numeric-quantity/README.md +306 -0
  241. package/node_modules/numeric-quantity/dist/cjs/index.d.ts +1 -0
  242. package/node_modules/numeric-quantity/dist/cjs/index.js +6 -0
  243. package/node_modules/numeric-quantity/dist/cjs/numeric-quantity.cjs.development.d.ts +293 -0
  244. package/node_modules/numeric-quantity/dist/cjs/numeric-quantity.cjs.development.js +579 -0
  245. package/node_modules/numeric-quantity/dist/cjs/numeric-quantity.cjs.development.js.map +1 -0
  246. package/node_modules/numeric-quantity/dist/cjs/numeric-quantity.cjs.production.d.ts +293 -0
  247. package/node_modules/numeric-quantity/dist/cjs/numeric-quantity.cjs.production.js +2 -0
  248. package/node_modules/numeric-quantity/dist/cjs/numeric-quantity.cjs.production.js.map +1 -0
  249. package/node_modules/numeric-quantity/dist/numeric-quantity.d.mts +293 -0
  250. package/node_modules/numeric-quantity/dist/numeric-quantity.iife.umd.min.js +2 -0
  251. package/node_modules/numeric-quantity/dist/numeric-quantity.iife.umd.min.js.map +1 -0
  252. package/node_modules/numeric-quantity/dist/numeric-quantity.legacy-esm.d.ts +293 -0
  253. package/node_modules/numeric-quantity/dist/numeric-quantity.legacy-esm.js +622 -0
  254. package/node_modules/numeric-quantity/dist/numeric-quantity.legacy-esm.js.map +1 -0
  255. package/node_modules/numeric-quantity/dist/numeric-quantity.mjs +564 -0
  256. package/node_modules/numeric-quantity/dist/numeric-quantity.mjs.map +1 -0
  257. package/node_modules/numeric-quantity/dist/numeric-quantity.production.d.mts +293 -0
  258. package/node_modules/numeric-quantity/dist/numeric-quantity.production.mjs +2 -0
  259. package/node_modules/numeric-quantity/dist/numeric-quantity.production.mjs.map +1 -0
  260. package/node_modules/numeric-quantity/package.json +72 -0
  261. package/node_modules/validator/LICENSE +20 -0
  262. package/node_modules/validator/README.md +269 -0
  263. package/node_modules/validator/es/index.js +218 -0
  264. package/node_modules/validator/es/lib/alpha.js +151 -0
  265. package/node_modules/validator/es/lib/blacklist.js +5 -0
  266. package/node_modules/validator/es/lib/contains.js +15 -0
  267. package/node_modules/validator/es/lib/equals.js +5 -0
  268. package/node_modules/validator/es/lib/escape.js +5 -0
  269. package/node_modules/validator/es/lib/isAbaRouting.js +15 -0
  270. package/node_modules/validator/es/lib/isAfter.js +10 -0
  271. package/node_modules/validator/es/lib/isAlpha.js +23 -0
  272. package/node_modules/validator/es/lib/isAlphanumeric.js +23 -0
  273. package/node_modules/validator/es/lib/isAscii.js +10 -0
  274. package/node_modules/validator/es/lib/isBIC.js +16 -0
  275. package/node_modules/validator/es/lib/isBase32.js +15 -0
  276. package/node_modules/validator/es/lib/isBase58.js +8 -0
  277. package/node_modules/validator/es/lib/isBase64.js +23 -0
  278. package/node_modules/validator/es/lib/isBefore.js +10 -0
  279. package/node_modules/validator/es/lib/isBoolean.js +15 -0
  280. package/node_modules/validator/es/lib/isBtcAddress.js +7 -0
  281. package/node_modules/validator/es/lib/isByteLength.js +19 -0
  282. package/node_modules/validator/es/lib/isCreditCard.js +43 -0
  283. package/node_modules/validator/es/lib/isCurrency.js +74 -0
  284. package/node_modules/validator/es/lib/isDataURI.js +31 -0
  285. package/node_modules/validator/es/lib/isDate.js +93 -0
  286. package/node_modules/validator/es/lib/isDecimal.js +22 -0
  287. package/node_modules/validator/es/lib/isDivisibleBy.js +6 -0
  288. package/node_modules/validator/es/lib/isEAN.js +70 -0
  289. package/node_modules/validator/es/lib/isEmail.js +165 -0
  290. package/node_modules/validator/es/lib/isEmpty.js +10 -0
  291. package/node_modules/validator/es/lib/isEthereumAddress.js +6 -0
  292. package/node_modules/validator/es/lib/isFQDN.js +67 -0
  293. package/node_modules/validator/es/lib/isFloat.js +14 -0
  294. package/node_modules/validator/es/lib/isFullWidth.js +6 -0
  295. package/node_modules/validator/es/lib/isHSL.js +13 -0
  296. package/node_modules/validator/es/lib/isHalfWidth.js +6 -0
  297. package/node_modules/validator/es/lib/isHash.js +21 -0
  298. package/node_modules/validator/es/lib/isHexColor.js +13 -0
  299. package/node_modules/validator/es/lib/isHexadecimal.js +6 -0
  300. package/node_modules/validator/es/lib/isIBAN.js +171 -0
  301. package/node_modules/validator/es/lib/isIMEI.js +40 -0
  302. package/node_modules/validator/es/lib/isIP.js +58 -0
  303. package/node_modules/validator/es/lib/isIPRange.js +41 -0
  304. package/node_modules/validator/es/lib/isISBN.js +47 -0
  305. package/node_modules/validator/es/lib/isISIN.js +55 -0
  306. package/node_modules/validator/es/lib/isISO15924.js +9 -0
  307. package/node_modules/validator/es/lib/isISO31661Alpha2.js +21 -0
  308. package/node_modules/validator/es/lib/isISO31661Alpha3.js +20 -0
  309. package/node_modules/validator/es/lib/isISO31661Numeric.js +8 -0
  310. package/node_modules/validator/es/lib/isISO4217.js +9 -0
  311. package/node_modules/validator/es/lib/isISO6346.js +28 -0
  312. package/node_modules/validator/es/lib/isISO6391.js +6 -0
  313. package/node_modules/validator/es/lib/isISO8601.js +42 -0
  314. package/node_modules/validator/es/lib/isISRC.js +8 -0
  315. package/node_modules/validator/es/lib/isISSN.js +19 -0
  316. package/node_modules/validator/es/lib/isIdentityCard.js +407 -0
  317. package/node_modules/validator/es/lib/isIn.js +23 -0
  318. package/node_modules/validator/es/lib/isInt.js +19 -0
  319. package/node_modules/validator/es/lib/isJSON.js +26 -0
  320. package/node_modules/validator/es/lib/isJWT.js +15 -0
  321. package/node_modules/validator/es/lib/isLatLong.js +21 -0
  322. package/node_modules/validator/es/lib/isLength.js +27 -0
  323. package/node_modules/validator/es/lib/isLicensePlate.js +58 -0
  324. package/node_modules/validator/es/lib/isLocale.js +107 -0
  325. package/node_modules/validator/es/lib/isLowercase.js +5 -0
  326. package/node_modules/validator/es/lib/isLuhnNumber.js +25 -0
  327. package/node_modules/validator/es/lib/isMACAddress.js +36 -0
  328. package/node_modules/validator/es/lib/isMD5.js +6 -0
  329. package/node_modules/validator/es/lib/isMagnetURI.js +9 -0
  330. package/node_modules/validator/es/lib/isMailtoURI.js +75 -0
  331. package/node_modules/validator/es/lib/isMimeType.js +40 -0
  332. package/node_modules/validator/es/lib/isMobilePhone.js +212 -0
  333. package/node_modules/validator/es/lib/isMongoId.js +6 -0
  334. package/node_modules/validator/es/lib/isMultibyte.js +10 -0
  335. package/node_modules/validator/es/lib/isNumeric.js +10 -0
  336. package/node_modules/validator/es/lib/isOctal.js +6 -0
  337. package/node_modules/validator/es/lib/isPassportNumber.js +145 -0
  338. package/node_modules/validator/es/lib/isPort.js +8 -0
  339. package/node_modules/validator/es/lib/isPostalCode.js +100 -0
  340. package/node_modules/validator/es/lib/isRFC3339.js +21 -0
  341. package/node_modules/validator/es/lib/isRgbColor.js +34 -0
  342. package/node_modules/validator/es/lib/isSemVer.js +14 -0
  343. package/node_modules/validator/es/lib/isSlug.js +6 -0
  344. package/node_modules/validator/es/lib/isStrongPassword.js +90 -0
  345. package/node_modules/validator/es/lib/isSurrogatePair.js +6 -0
  346. package/node_modules/validator/es/lib/isTaxID.js +1407 -0
  347. package/node_modules/validator/es/lib/isTime.js +22 -0
  348. package/node_modules/validator/es/lib/isULID.js +5 -0
  349. package/node_modules/validator/es/lib/isURL.js +241 -0
  350. package/node_modules/validator/es/lib/isUUID.js +23 -0
  351. package/node_modules/validator/es/lib/isUppercase.js +5 -0
  352. package/node_modules/validator/es/lib/isVAT.js +264 -0
  353. package/node_modules/validator/es/lib/isVariableWidth.js +7 -0
  354. package/node_modules/validator/es/lib/isWhitelisted.js +10 -0
  355. package/node_modules/validator/es/lib/ltrim.js +7 -0
  356. package/node_modules/validator/es/lib/matches.js +8 -0
  357. package/node_modules/validator/es/lib/normalizeEmail.js +131 -0
  358. package/node_modules/validator/es/lib/rtrim.js +15 -0
  359. package/node_modules/validator/es/lib/stripLow.js +7 -0
  360. package/node_modules/validator/es/lib/toBoolean.js +8 -0
  361. package/node_modules/validator/es/lib/toDate.js +6 -0
  362. package/node_modules/validator/es/lib/toFloat.js +5 -0
  363. package/node_modules/validator/es/lib/toInt.js +5 -0
  364. package/node_modules/validator/es/lib/trim.js +5 -0
  365. package/node_modules/validator/es/lib/unescape.js +8 -0
  366. package/node_modules/validator/es/lib/util/algorithms.js +79 -0
  367. package/node_modules/validator/es/lib/util/assertString.js +4 -0
  368. package/node_modules/validator/es/lib/util/checkHost.js +12 -0
  369. package/node_modules/validator/es/lib/util/includesArray.js +6 -0
  370. package/node_modules/validator/es/lib/util/includesString.js +4 -0
  371. package/node_modules/validator/es/lib/util/merge.js +14 -0
  372. package/node_modules/validator/es/lib/util/multilineRegex.js +12 -0
  373. package/node_modules/validator/es/lib/util/nullUndefinedCheck.js +3 -0
  374. package/node_modules/validator/es/lib/util/toString.js +13 -0
  375. package/node_modules/validator/es/lib/util/typeOf.js +10 -0
  376. package/node_modules/validator/es/lib/whitelist.js +5 -0
  377. package/node_modules/validator/index.js +229 -0
  378. package/node_modules/validator/lib/alpha.js +157 -0
  379. package/node_modules/validator/lib/blacklist.js +14 -0
  380. package/node_modules/validator/lib/contains.js +24 -0
  381. package/node_modules/validator/lib/equals.js +14 -0
  382. package/node_modules/validator/lib/escape.js +14 -0
  383. package/node_modules/validator/lib/isAbaRouting.js +23 -0
  384. package/node_modules/validator/lib/isAfter.js +19 -0
  385. package/node_modules/validator/lib/isAlpha.js +31 -0
  386. package/node_modules/validator/lib/isAlphanumeric.js +31 -0
  387. package/node_modules/validator/lib/isAscii.js +18 -0
  388. package/node_modules/validator/lib/isBIC.js +24 -0
  389. package/node_modules/validator/lib/isBase32.js +24 -0
  390. package/node_modules/validator/lib/isBase58.js +16 -0
  391. package/node_modules/validator/lib/isBase64.js +32 -0
  392. package/node_modules/validator/lib/isBefore.js +19 -0
  393. package/node_modules/validator/lib/isBoolean.js +24 -0
  394. package/node_modules/validator/lib/isBtcAddress.js +16 -0
  395. package/node_modules/validator/lib/isByteLength.js +27 -0
  396. package/node_modules/validator/lib/isCreditCard.js +52 -0
  397. package/node_modules/validator/lib/isCurrency.js +83 -0
  398. package/node_modules/validator/lib/isDataURI.js +40 -0
  399. package/node_modules/validator/lib/isDate.js +102 -0
  400. package/node_modules/validator/lib/isDecimal.js +31 -0
  401. package/node_modules/validator/lib/isDivisibleBy.js +15 -0
  402. package/node_modules/validator/lib/isEAN.js +78 -0
  403. package/node_modules/validator/lib/isEmail.js +174 -0
  404. package/node_modules/validator/lib/isEmpty.js +19 -0
  405. package/node_modules/validator/lib/isEthereumAddress.js +15 -0
  406. package/node_modules/validator/lib/isFQDN.js +76 -0
  407. package/node_modules/validator/lib/isFloat.js +22 -0
  408. package/node_modules/validator/lib/isFullWidth.js +14 -0
  409. package/node_modules/validator/lib/isHSL.js +22 -0
  410. package/node_modules/validator/lib/isHalfWidth.js +14 -0
  411. package/node_modules/validator/lib/isHash.js +30 -0
  412. package/node_modules/validator/lib/isHexColor.js +22 -0
  413. package/node_modules/validator/lib/isHexadecimal.js +15 -0
  414. package/node_modules/validator/lib/isIBAN.js +178 -0
  415. package/node_modules/validator/lib/isIMEI.js +49 -0
  416. package/node_modules/validator/lib/isIP.js +67 -0
  417. package/node_modules/validator/lib/isIPRange.js +50 -0
  418. package/node_modules/validator/lib/isISBN.js +56 -0
  419. package/node_modules/validator/lib/isISIN.js +64 -0
  420. package/node_modules/validator/lib/isISO15924.js +16 -0
  421. package/node_modules/validator/lib/isISO31661Alpha2.js +28 -0
  422. package/node_modules/validator/lib/isISO31661Alpha3.js +28 -0
  423. package/node_modules/validator/lib/isISO31661Numeric.js +16 -0
  424. package/node_modules/validator/lib/isISO4217.js +16 -0
  425. package/node_modules/validator/lib/isISO6346.js +35 -0
  426. package/node_modules/validator/lib/isISO6391.js +15 -0
  427. package/node_modules/validator/lib/isISO8601.js +50 -0
  428. package/node_modules/validator/lib/isISRC.js +16 -0
  429. package/node_modules/validator/lib/isISSN.js +28 -0
  430. package/node_modules/validator/lib/isIdentityCard.js +416 -0
  431. package/node_modules/validator/lib/isIn.js +32 -0
  432. package/node_modules/validator/lib/isInt.js +28 -0
  433. package/node_modules/validator/lib/isJSON.js +35 -0
  434. package/node_modules/validator/lib/isJWT.js +24 -0
  435. package/node_modules/validator/lib/isLatLong.js +30 -0
  436. package/node_modules/validator/lib/isLength.js +35 -0
  437. package/node_modules/validator/lib/isLicensePlate.js +67 -0
  438. package/node_modules/validator/lib/isLocale.js +115 -0
  439. package/node_modules/validator/lib/isLowercase.js +14 -0
  440. package/node_modules/validator/lib/isLuhnNumber.js +34 -0
  441. package/node_modules/validator/lib/isMACAddress.js +45 -0
  442. package/node_modules/validator/lib/isMD5.js +15 -0
  443. package/node_modules/validator/lib/isMagnetURI.js +18 -0
  444. package/node_modules/validator/lib/isMailtoURI.js +84 -0
  445. package/node_modules/validator/lib/isMimeType.js +48 -0
  446. package/node_modules/validator/lib/isMobilePhone.js +219 -0
  447. package/node_modules/validator/lib/isMongoId.js +15 -0
  448. package/node_modules/validator/lib/isMultibyte.js +18 -0
  449. package/node_modules/validator/lib/isNumeric.js +19 -0
  450. package/node_modules/validator/lib/isOctal.js +15 -0
  451. package/node_modules/validator/lib/isPassportNumber.js +152 -0
  452. package/node_modules/validator/lib/isPort.js +17 -0
  453. package/node_modules/validator/lib/isPostalCode.js +107 -0
  454. package/node_modules/validator/lib/isRFC3339.js +29 -0
  455. package/node_modules/validator/lib/isRgbColor.js +42 -0
  456. package/node_modules/validator/lib/isSemVer.js +22 -0
  457. package/node_modules/validator/lib/isSlug.js +15 -0
  458. package/node_modules/validator/lib/isStrongPassword.js +99 -0
  459. package/node_modules/validator/lib/isSurrogatePair.js +15 -0
  460. package/node_modules/validator/lib/isTaxID.js +1417 -0
  461. package/node_modules/validator/lib/isTime.js +31 -0
  462. package/node_modules/validator/lib/isULID.js +14 -0
  463. package/node_modules/validator/lib/isURL.js +249 -0
  464. package/node_modules/validator/lib/isUUID.js +32 -0
  465. package/node_modules/validator/lib/isUppercase.js +14 -0
  466. package/node_modules/validator/lib/isVAT.js +274 -0
  467. package/node_modules/validator/lib/isVariableWidth.js +16 -0
  468. package/node_modules/validator/lib/isWhitelisted.js +19 -0
  469. package/node_modules/validator/lib/ltrim.js +16 -0
  470. package/node_modules/validator/lib/matches.js +17 -0
  471. package/node_modules/validator/lib/normalizeEmail.js +140 -0
  472. package/node_modules/validator/lib/rtrim.js +24 -0
  473. package/node_modules/validator/lib/stripLow.js +16 -0
  474. package/node_modules/validator/lib/toBoolean.js +17 -0
  475. package/node_modules/validator/lib/toDate.js +15 -0
  476. package/node_modules/validator/lib/toFloat.js +14 -0
  477. package/node_modules/validator/lib/toInt.js +14 -0
  478. package/node_modules/validator/lib/trim.js +14 -0
  479. package/node_modules/validator/lib/unescape.js +17 -0
  480. package/node_modules/validator/lib/util/algorithms.js +88 -0
  481. package/node_modules/validator/lib/util/assertString.js +12 -0
  482. package/node_modules/validator/lib/util/checkHost.js +20 -0
  483. package/node_modules/validator/lib/util/includesArray.js +14 -0
  484. package/node_modules/validator/lib/util/includesString.js +12 -0
  485. package/node_modules/validator/lib/util/merge.js +22 -0
  486. package/node_modules/validator/lib/util/multilineRegex.js +20 -0
  487. package/node_modules/validator/lib/util/nullUndefinedCheck.js +11 -0
  488. package/node_modules/validator/lib/util/toString.js +21 -0
  489. package/node_modules/validator/lib/util/typeOf.js +18 -0
  490. package/node_modules/validator/lib/whitelist.js +14 -0
  491. package/node_modules/validator/package.json +76 -0
  492. package/node_modules/validator/validator.js +5808 -0
  493. package/node_modules/validator/validator.min.js +23 -0
  494. package/package.json +3 -3
@@ -0,0 +1,3 @@
1
+ import { createTheme } from '@flickfyi/core/themes/default'
2
+
3
+ export const theme = createTheme({ hue: 286 })
@@ -0,0 +1,15 @@
1
+ import type { Meta, StoryObj } from '@storybook/react-vite'
2
+
3
+ import TimeZoneExample from './time-zone'
4
+ import exampleSource from './time-zone.tsx?raw'
5
+
6
+ const meta = {
7
+ component: TimeZoneExample,
8
+ parameters: { docs: { source: { code: exampleSource, language: 'tsx' } } },
9
+ title: 'Kowalski/TimeZone',
10
+ } satisfies Meta<typeof TimeZoneExample>
11
+
12
+ export default meta
13
+ export const Example: StoryObj<typeof meta> = {
14
+ args: { enabledForAgents: false },
15
+ }
@@ -0,0 +1,22 @@
1
+ import { useTheme } from '@flickfyi/core'
2
+ import { theme } from '@flickfyi/core/examples/kowalski/theme'
3
+ import { TimeZone } from '@flickfyi/core/kowalski'
4
+
5
+ import type { ExampleMetadata } from '@flickfyi/core/examples/metadata'
6
+
7
+ export default function TimeZoneExample() {
8
+ useTheme(theme)
9
+
10
+ return (
11
+ <TimeZone
12
+ title="A good time to call"
13
+ zones={['America/Los_Angeles', 'America/Chicago', 'America/New_York']}
14
+ />
15
+ )
16
+ }
17
+
18
+ export const exampleMetadata = {
19
+ description:
20
+ 'An instantiatable TimeZone from Core. Authored UI and standard Quantum persistence; the model supplies typed content only.',
21
+ name: 'TimeZone',
22
+ } satisfies ExampleMetadata
@@ -0,0 +1,15 @@
1
+ import type { Meta, StoryObj } from '@storybook/react-vite'
2
+
3
+ import TimerExample from './timer'
4
+ import exampleSource from './timer.tsx?raw'
5
+
6
+ const meta = {
7
+ component: TimerExample,
8
+ parameters: { docs: { source: { code: exampleSource, language: 'tsx' } } },
9
+ title: 'Kowalski/Timer',
10
+ } satisfies Meta<typeof TimerExample>
11
+
12
+ export default meta
13
+ export const Example: StoryObj<typeof meta> = {
14
+ args: { enabledForAgents: false },
15
+ }
@@ -0,0 +1,23 @@
1
+ import { useTheme } from '@flickfyi/core'
2
+ import { theme } from '@flickfyi/core/examples/kowalski/theme'
3
+ import { Timer } from '@flickfyi/core/kowalski'
4
+
5
+ import type { ExampleMetadata } from '@flickfyi/core/examples/metadata'
6
+
7
+ export default function TimerExample() {
8
+ useTheme(theme)
9
+
10
+ return (
11
+ <Timer
12
+ durationSeconds={1500}
13
+ mode="focus"
14
+ title="A little focus"
15
+ />
16
+ )
17
+ }
18
+
19
+ export const exampleMetadata = {
20
+ description:
21
+ 'An instantiatable Timer from Core. Authored UI and standard Quantum persistence; the model supplies typed content only.',
22
+ name: 'Timer',
23
+ } satisfies ExampleMetadata
@@ -0,0 +1,15 @@
1
+ import type { Meta, StoryObj } from '@storybook/react-vite'
2
+
3
+ import TripExample from './trip'
4
+ import exampleSource from './trip.tsx?raw'
5
+
6
+ const meta = {
7
+ component: TripExample,
8
+ parameters: { docs: { source: { code: exampleSource, language: 'tsx' } } },
9
+ title: 'Kowalski/Trip',
10
+ } satisfies Meta<typeof TripExample>
11
+
12
+ export default meta
13
+ export const Example: StoryObj<typeof meta> = {
14
+ args: { enabledForAgents: false },
15
+ }
@@ -0,0 +1,26 @@
1
+ import { useTheme } from '@flickfyi/core'
2
+ import { theme } from '@flickfyi/core/examples/kowalski/theme'
3
+ import { Trip } from '@flickfyi/core/kowalski'
4
+
5
+ import type { ExampleMetadata } from '@flickfyi/core/examples/metadata'
6
+
7
+ export default function TripExample() {
8
+ useTheme(theme)
9
+
10
+ return (
11
+ <Trip
12
+ destination="Monterey"
13
+ endDate="2026-11-08"
14
+ origin="San Francisco"
15
+ startDate="2026-11-07"
16
+ title="A weekend away"
17
+ transport="car"
18
+ />
19
+ )
20
+ }
21
+
22
+ export const exampleMetadata = {
23
+ description:
24
+ 'An instantiatable Trip from Core. Authored UI and standard Quantum persistence; the model supplies typed content only.',
25
+ name: 'Trip',
26
+ } satisfies ExampleMetadata
@@ -0,0 +1,15 @@
1
+ import type { Meta, StoryObj } from '@storybook/react-vite'
2
+
3
+ import UnitConverterExample from './unit-converter'
4
+ import exampleSource from './unit-converter.tsx?raw'
5
+
6
+ const meta = {
7
+ component: UnitConverterExample,
8
+ parameters: { docs: { source: { code: exampleSource, language: 'tsx' } } },
9
+ title: 'Kowalski/UnitConverter',
10
+ } satisfies Meta<typeof UnitConverterExample>
11
+
12
+ export default meta
13
+ export const Example: StoryObj<typeof meta> = {
14
+ args: { enabledForAgents: false },
15
+ }
@@ -0,0 +1,24 @@
1
+ import { useTheme } from '@flickfyi/core'
2
+ import { theme } from '@flickfyi/core/examples/kowalski/theme'
3
+ import { UnitConverter } from '@flickfyi/core/kowalski'
4
+
5
+ import type { ExampleMetadata } from '@flickfyi/core/examples/metadata'
6
+
7
+ export default function UnitConverterExample() {
8
+ useTheme(theme)
9
+
10
+ return (
11
+ <UnitConverter
12
+ from="km"
13
+ title="Miles from home"
14
+ to="mi"
15
+ value={10}
16
+ />
17
+ )
18
+ }
19
+
20
+ export const exampleMetadata = {
21
+ description:
22
+ 'An instantiatable UnitConverter from Core. Authored UI and standard Quantum persistence; the model supplies typed content only.',
23
+ name: 'UnitConverter',
24
+ } satisfies ExampleMetadata
@@ -10,4 +10,6 @@ const meta = {
10
10
  } satisfies Meta<typeof Calculator>
11
11
 
12
12
  export default meta
13
- export const Example: StoryObj<typeof meta> = {}
13
+ export const Example: StoryObj<typeof meta> = {
14
+ args: { enabledForAgents: true },
15
+ }
@@ -10,4 +10,6 @@ const meta = {
10
10
  } satisfies Meta<typeof Checklist>
11
11
 
12
12
  export default meta
13
- export const Example: StoryObj<typeof meta> = {}
13
+ export const Example: StoryObj<typeof meta> = {
14
+ args: { enabledForAgents: true },
15
+ }
@@ -10,4 +10,6 @@ const meta = {
10
10
  } satisfies Meta<typeof Countdown>
11
11
 
12
12
  export default meta
13
- export const Example: StoryObj<typeof meta> = {}
13
+ export const Example: StoryObj<typeof meta> = {
14
+ args: { enabledForAgents: true },
15
+ }
@@ -14,6 +14,7 @@ export default meta
14
14
  type Story = StoryObj<typeof meta>
15
15
 
16
16
  export const Default: Story = {
17
+ args: { enabledForAgents: true },
17
18
  async play({ canvasElement }) {
18
19
  const canvas = within(canvasElement)
19
20
  const increment = await canvas.findByRole('button', { name: 'Increase count' })
@@ -10,4 +10,6 @@ const meta = {
10
10
  } satisfies Meta<typeof Fortune>
11
11
 
12
12
  export default meta
13
- export const Example: StoryObj<typeof meta> = {}
13
+ export const Example: StoryObj<typeof meta> = {
14
+ args: { enabledForAgents: true },
15
+ }
@@ -10,4 +10,6 @@ const meta = {
10
10
  } satisfies Meta<typeof Grid>
11
11
 
12
12
  export default meta
13
- export const Example: StoryObj<typeof meta> = {}
13
+ export const Example: StoryObj<typeof meta> = {
14
+ args: { enabledForAgents: true },
15
+ }
@@ -13,6 +13,7 @@ const meta = {
13
13
 
14
14
  export default meta
15
15
  export const Example: StoryObj<typeof meta> = {
16
+ args: { enabledForAgents: true },
16
17
  async play({ canvasElement }) {
17
18
  const canvas = within(canvasElement)
18
19
  const buttons = await canvas.findAllByRole('button', {
@@ -10,4 +10,6 @@ const meta = {
10
10
  } satisfies Meta<typeof List>
11
11
 
12
12
  export default meta
13
- export const Example: StoryObj<typeof meta> = {}
13
+ export const Example: StoryObj<typeof meta> = {
14
+ args: { enabledForAgents: true },
15
+ }
@@ -10,4 +10,6 @@ const meta = {
10
10
  } satisfies Meta<typeof Log>
11
11
 
12
12
  export default meta
13
- export const Example: StoryObj<typeof meta> = {}
13
+ export const Example: StoryObj<typeof meta> = {
14
+ args: { enabledForAgents: true },
15
+ }
@@ -10,4 +10,6 @@ const meta = {
10
10
  } satisfies Meta<typeof TimedTask>
11
11
 
12
12
  export default meta
13
- export const Example: StoryObj<typeof meta> = {}
13
+ export const Example: StoryObj<typeof meta> = {
14
+ args: { enabledForAgents: true },
15
+ }
@@ -10,4 +10,6 @@ const meta = {
10
10
  } satisfies Meta<typeof Timer>
11
11
 
12
12
  export default meta
13
- export const Example: StoryObj<typeof meta> = {}
13
+ export const Example: StoryObj<typeof meta> = {
14
+ args: { enabledForAgents: true },
15
+ }
@@ -42,6 +42,7 @@ targets:
42
42
  type: bundle.unit-test
43
43
  platform: iOS
44
44
  sources:
45
+ - swift/crayon-core/Tests/CrayonCoreTests/CatalogFeatureTests.swift
45
46
  - swift/crayon-core/Tests/CrayonCoreTests/CatalogNativeTests.swift
46
47
  - swift/crayon-core/Tests/CrayonCoreTests/CatalogScaleTests.swift
47
48
  - swift/crayon-core/Tests/CrayonCoreTests/CatalogThemeTests.swift
@@ -57,6 +58,8 @@ targets:
57
58
  - swift/photon/Tests/PhotonTests/PhotonTestSupport.swift
58
59
  - swift/swiftui-flex/Tests/SwiftUIFlexTests/FlexRichTextTests.swift
59
60
  - swift/swiftui-flex/Tests/SwiftUIFlexTests/FlexTextFontTests.swift
61
+ - path: swift/crayon-core/Tests/CrayonCoreTests/Resources/catalog-features.js
62
+ buildPhase: resources
60
63
  - path: swift/crayon-core/Tests/CrayonCoreTests/Resources/catalog-native.js
61
64
  buildPhase: resources
62
65
  - path: swift/crayon-core/Tests/CrayonCoreTests/Resources/catalog-scale.js
@@ -0,0 +1,88 @@
1
+ import { Flex, Text, useTheme } from '@flickfyi/core'
2
+ import { Checklist, Goal, KowalskiStack } from '@flickfyi/core/kowalski'
3
+ import themes from '@flickfyi/core/themes'
4
+ import { z } from '@flickfyi/core/zod'
5
+
6
+ const configured = {
7
+ athletic: themes.athletic({ hue: 286, mode: 'light' }),
8
+ compact: themes.compact({ hue: 286, mode: 'light' }),
9
+ kids: themes.kids({ hue: 286, mode: 'light' }),
10
+ }
11
+
12
+ // Only this test fixture substitutes the native storage boundary with session memory.
13
+ // Native Quantum tests separately cover SQLite acknowledgements and failures.
14
+ const stores = new Map<string, ReturnType<typeof sessionStore>>()
15
+ Reflect.set(globalThis, 'Quantum', {
16
+ async openStore({
17
+ initialState,
18
+ name,
19
+ scope,
20
+ version,
21
+ }: Parameters<typeof Quantum.openStore>[0]) {
22
+ const key = `${scope}:${name}`
23
+ let store = stores.get(key)
24
+ if (!store) {
25
+ store = sessionStore(initialState, version)
26
+ stores.set(key, store)
27
+ }
28
+ return store
29
+ },
30
+ })
31
+
32
+ /** Runs production feature views, store hooks, atoms and the native theme cascade unchanged. */
33
+ export default function CatalogFeatures({
34
+ initialTheme = 'compact',
35
+ showFeatures = true,
36
+ }: {
37
+ initialTheme?: keyof typeof configured
38
+ showFeatures?: boolean
39
+ } = {}) {
40
+ useTheme(configured[initialTheme])
41
+ return (
42
+ <Flex>
43
+ <Text>{`Catalog features · ${initialTheme}`}</Text>
44
+ {showFeatures ? (
45
+ <KowalskiStack>
46
+ <Checklist
47
+ id="NativeFeatureFirstChecklist"
48
+ items={[{ id: 'packed', label: 'Pack charger' }]}
49
+ title="First packing list"
50
+ />
51
+ <Checklist
52
+ id="NativeFeatureSecondChecklist"
53
+ items={[{ id: 'packed', label: 'Pack notebook' }]}
54
+ title="Second packing list"
55
+ />
56
+ <Goal id="NativeFeatureGoal" target={10} title="Reading goal" unit="books" />
57
+ </KowalskiStack>
58
+ ) : (
59
+ <Text>Features unmounted</Text>
60
+ )}
61
+ </Flex>
62
+ )
63
+ }
64
+
65
+ function sessionStore(initialState: unknown, version: number) {
66
+ const schema = z.record(z.string(), z.unknown())
67
+ let value = schema.parse(initialState)
68
+ const listeners = new Set<(raw: { rawValue: unknown; version: number }) => void>()
69
+ const set = (patch: unknown) => {
70
+ value = { ...value, ...schema.parse(patch) }
71
+ for (const listener of listeners) {
72
+ listener({ rawValue: value, version })
73
+ }
74
+ }
75
+ return {
76
+ canWrite: true,
77
+ set,
78
+ async setAsync(patch: unknown) {
79
+ set(patch)
80
+ return { rawValue: value, version }
81
+ },
82
+ subscribe(listener: (raw: { rawValue: unknown; version: number }) => void) {
83
+ listeners.add(listener)
84
+ listener({ rawValue: value, version })
85
+ return () => listeners.delete(listener)
86
+ },
87
+ }
88
+ }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flickfyi/core",
3
- "version": "0.0.66",
3
+ "version": "0.0.68",
4
4
  "description": "Core type definitions and runtime environment for JavaScriptCore",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -149,7 +149,30 @@
149
149
  "./examples/use-theme": "./examples/use-theme/use-theme.tsx",
150
150
  "./source/*": "./src/*",
151
151
  "./examples/*": "./examples/*",
152
- "./examples/parrott/*.tsx": "./examples/parrott/*.tsx"
152
+ "./examples/parrott/*.tsx": "./examples/parrott/*.tsx",
153
+ "./kowalski": {
154
+ "import": {
155
+ "types": "./dist/kowalski/index.d.ts",
156
+ "default": "./dist/kowalski/index.js"
157
+ },
158
+ "require": {
159
+ "types": "./dist/kowalski/index.d.cts",
160
+ "default": "./dist/kowalski/index.cjs"
161
+ }
162
+ },
163
+ "./kowalski/catalog": {
164
+ "import": {
165
+ "types": "./dist/kowalski/catalog.d.ts",
166
+ "default": "./dist/kowalski/catalog.js"
167
+ },
168
+ "require": {
169
+ "types": "./dist/kowalski/catalog.d.cts",
170
+ "default": "./dist/kowalski/catalog.cjs"
171
+ }
172
+ },
173
+ "./examples/kowalski/theme": "./examples/kowalski/theme.ts",
174
+ "./examples/kowalski/*": "./examples/kowalski/*/*.tsx",
175
+ "./examples/kowalski/*.tsx": "./examples/kowalski/*.tsx"
153
176
  },
154
177
  "files": [
155
178
  "dist",
@@ -215,7 +238,9 @@
215
238
  "@storybook/react-vite": "10.6.1",
216
239
  "storybook": "10.6.1",
217
240
  "@types/node": "24.13.5",
218
- "tsrs": "0.18.0-ts7.1.0-dev.20260929"
241
+ "tsrs": "0.18.0-ts7.1.0-dev.20260929",
242
+ "@types/luxon": "3.7.5",
243
+ "@types/validator": "13.15.10"
219
244
  },
220
245
  "license": "MIT",
221
246
  "publishConfig": {
@@ -225,6 +250,7 @@
225
250
  "dependencies": {
226
251
  "@flickfyi/lens": "workspace:*",
227
252
  "@flickfyi/photon": "workspace:*",
253
+ "@formatjs/intl": "6.1.3",
228
254
  "@react-spring/core": "10.1.2",
229
255
  "@react-spring/shared": "10.1.2",
230
256
  "@sindresorhus/is": "8.1.0",
@@ -232,15 +258,19 @@
232
258
  "@types/lodash-es": "4.17.12",
233
259
  "@use-gesture/core": "10.3.1",
234
260
  "@use-gesture/react": "10.3.1",
261
+ "colorjs.io": "0.7.1",
262
+ "decimal.js": "10.6.0",
235
263
  "effect": "4.0.0-rc.112",
264
+ "format-quantity": "3.2.0",
236
265
  "lodash": "4.18.1",
266
+ "luxon": "3.7.2",
237
267
  "microdiff": "1.6.0",
238
268
  "pluralize": "8.0.0",
239
269
  "react": "19.2.8",
240
270
  "react-timeago": "8.3.0",
241
271
  "rxjs": "7.8.2",
242
272
  "type-fest": "5.10.0",
243
- "zod": "4.6.7",
244
- "colorjs.io": "0.7.1"
273
+ "validator": "13.15.35",
274
+ "zod": "4.6.7"
245
275
  }
246
276
  }
@@ -76,6 +76,18 @@
76
76
  "modules": [
77
77
  "@flickfyi/lens"
78
78
  ]
79
+ },
80
+ {
81
+ "name": "kowalski",
82
+ "dependencies": [
83
+ "core",
84
+ "ui",
85
+ "lens"
86
+ ],
87
+ "modules": [
88
+ "@flickfyi/core/kowalski",
89
+ "@flickfyi/core/kowalski/catalog"
90
+ ]
79
91
  }
80
92
  ]
81
93
  },
@@ -113,6 +125,12 @@
113
125
  "react-timeago": "8.3.0",
114
126
  "rxjs": "7.8.2",
115
127
  "type-fest": "5.10.0",
116
- "zod": "4.6.7"
128
+ "zod": "4.6.7",
129
+ "@formatjs/intl": "6.1.3",
130
+ "decimal.js": "10.6.0",
131
+ "luxon": "3.7.2",
132
+ "validator": "13.15.35",
133
+ "@types/luxon": "3.7.5",
134
+ "@types/validator": "13.15.10"
117
135
  }
118
136
  }
@@ -12,7 +12,9 @@ declare const Quantum: {
12
12
  scope: 'private' | 'public'
13
13
  version: number
14
14
  }) => Promise<{
15
+ canWrite?: boolean
15
16
  set: (value: unknown) => void
17
+ setAsync?: (value: unknown) => Promise<{ rawValue: unknown; version: number }>
16
18
  subscribe: (
17
19
  callback: (state: { rawValue: unknown; version: number }) => void
18
20
  ) => () => void
@@ -199,6 +199,7 @@ export interface ButtonProps {
199
199
  accessibilityLabel?: string;
200
200
  accessibilityValue?: string;
201
201
  disabled?: boolean;
202
+ href?: string;
202
203
  indeterminate?: boolean;
203
204
  key?: string | number;
204
205
  loading?: boolean;
@@ -0,0 +1,9 @@
1
+ # Kowalski design
2
+
3
+ 1. Put the UI at the bottom.
4
+ 2. As state progresses, move things up, away from the bottom.
5
+ 3. Have a focal action: break out the up-next item, at the bottom, not the top.
6
+ 4. Don't show everything, just the next few, so less is visible at any given time.
7
+ 5. Minimize the setup interface once the activity has begun.
8
+ 6. Items waiting on something else stay grey, deferred until it completes.
9
+ 7. Ideally it should fit on the screen, but don't be excessively dogmatic.
@@ -0,0 +1,106 @@
1
+ import { Decimal } from 'decimal.js'
2
+
3
+ import { type PickerDomain, unitDefinitions } from './catalog'
4
+ import { format } from './format'
5
+
6
+ const Money = Decimal.clone({ precision: 40, rounding: Decimal.ROUND_HALF_UP })
7
+
8
+ export function elapsedSeconds(
9
+ state: { elapsedSeconds: number; startedAt: number | null },
10
+ now: number
11
+ ) {
12
+ return (
13
+ state.elapsedSeconds +
14
+ (state.startedAt === null ? 0 : Math.max(0, now - state.startedAt) / 1000)
15
+ )
16
+ }
17
+
18
+ export function billShares(
19
+ total: number,
20
+ people: number,
21
+ tipPercent: number,
22
+ currency: string
23
+ ) {
24
+ const digits =
25
+ format.formatters
26
+ .getNumberFormat(format.locale, { currency, style: 'currency' })
27
+ .resolvedOptions().maximumFractionDigits ?? 2
28
+ const scale = 10 ** digits
29
+ const minor = new Money(total)
30
+ .times(new Money(tipPercent).div(100).plus(1))
31
+ .times(scale)
32
+ .toDecimalPlaces(0)
33
+ const share = minor.dividedToIntegerBy(people)
34
+ return {
35
+ perPerson: share.div(scale).toNumber(),
36
+ remainder: minor.minus(share.times(people)).div(scale).toNumber(),
37
+ total: minor.div(scale).toNumber(),
38
+ }
39
+ }
40
+
41
+ export function convertUnit(
42
+ value: number,
43
+ from: keyof typeof unitDefinitions,
44
+ to: keyof typeof unitDefinitions
45
+ ) {
46
+ const source = unitDefinitions[from]
47
+ const target = unitDefinitions[to]
48
+ if (source.dimension !== target.dimension) {
49
+ throw new Error('Incompatible units')
50
+ }
51
+ if (from === to) {
52
+ return value
53
+ }
54
+ return ((value + source.offset) * source.factor) / target.factor - target.offset
55
+ }
56
+
57
+ export function localDate(now: number, timeZone: string) {
58
+ const parts = format.formatDateToParts(now, {
59
+ day: '2-digit',
60
+ month: '2-digit',
61
+ timeZone,
62
+ year: 'numeric',
63
+ })
64
+ return ['year', 'month', 'day']
65
+ .map(type => parts.find(part => part.type === type)?.value)
66
+ .join('-')
67
+ }
68
+
69
+ /** Recurrence is an explicit 24-hour / 7-day interval from the supplied instant. */
70
+ export function nextReminder(
71
+ dueAt: string | null,
72
+ recurrence: 'none' | 'daily' | 'weekly',
73
+ now: number
74
+ ) {
75
+ if (!dueAt || recurrence === 'none') {
76
+ return null
77
+ }
78
+ const interval = (recurrence === 'daily' ? 1 : 7) * 86_400_000
79
+ const due = Date.parse(dueAt)
80
+ return new Date(
81
+ due + Math.max(1, Math.floor((now - due) / interval) + 1) * interval
82
+ ).toISOString()
83
+ }
84
+
85
+ export function pickResult(domain: PickerDomain, sample: number) {
86
+ if (!(sample >= 0 && sample < 1)) {
87
+ throw new Error('Random sample must be in [0, 1)')
88
+ }
89
+ if (domain.mode === 'coin') {
90
+ return sample < 0.5 ? 'Heads' : 'Tails'
91
+ }
92
+ if (domain.mode === 'list') {
93
+ return domain.options[Math.floor(sample * domain.options.length)]
94
+ }
95
+ const [min, max] = domain.mode === 'dice' ? [1, 6] : [domain.minimum, domain.maximum]
96
+ return min + Math.floor(sample * (max - min + 1))
97
+ }
98
+
99
+ /** Currency padding and grouping stay identical in the saved card and its editor. */
100
+ export function formatCurrency(value: number, currency: string) {
101
+ return format.formatNumber(value, {
102
+ currency,
103
+ format: 'decimal',
104
+ style: 'currency',
105
+ })
106
+ }