@flickfyi/flkr 0.0.141 → 0.0.146

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 +502 -95
  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 +10 -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
@@ -5,21 +5,27 @@
5
5
  "": {
6
6
  "name": "typescript-server-modules",
7
7
  "dependencies": {
8
- "@flickfyi/core": "0.0.66",
8
+ "@flickfyi/core": "0.0.68",
9
9
  "@flickfyi/lens": "0.0.6",
10
- "@flickfyi/photon": "0.0.33",
10
+ "@flickfyi/photon": "0.0.35",
11
+ "@formatjs/intl": "6.1.3",
11
12
  "@react-spring/core": "10.1.2",
12
13
  "@react-spring/shared": "10.1.2",
13
14
  "@sindresorhus/is": "8.1.0",
14
15
  "@stylexjs/stylex": "0.19.1",
16
+ "@types/luxon": "3.7.5",
15
17
  "@types/react": "19.2.18",
18
+ "@types/validator": "13.15.10",
16
19
  "@use-gesture/react": "10.3.1",
20
+ "decimal.js": "10.6.0",
17
21
  "effect": "4.0.0-rc.112",
22
+ "luxon": "3.7.2",
18
23
  "pluralize": "8.0.0",
19
24
  "react": "19.2.8",
20
25
  "react-timeago": "8.3.0",
21
26
  "rxjs": "7.8.2",
22
27
  "type-fest": "5.10.0",
28
+ "validator": "13.15.35",
23
29
  "zod": "4.6.7"
24
30
  }
25
31
  }
@@ -39,10 +45,11 @@
39
45
  "sha512-3RQHgEtvL1Frl/d1cSreo7qhJ3Gk1OdNUai/CtZ8G+wYeRQnJih3s9xJ9/kgYekPQRdwgh0HXRPqMlzWGwivIQ=="
40
46
  ],
41
47
  "@flickfyi/core": [
42
- "@flickfyi/core@0.0.66",
48
+ "@flickfyi/core@0.0.68",
43
49
  "",
44
50
  {
45
51
  "dependencies": {
52
+ "@formatjs/intl": "6.1.3",
46
53
  "@react-spring/core": "10.1.2",
47
54
  "@react-spring/shared": "10.1.2",
48
55
  "@sindresorhus/is": "8.1.0",
@@ -51,18 +58,22 @@
51
58
  "@use-gesture/core": "10.3.1",
52
59
  "@use-gesture/react": "10.3.1",
53
60
  "colorjs.io": "0.7.1",
61
+ "decimal.js": "10.6.0",
54
62
  "effect": "4.0.0-rc.112",
63
+ "format-quantity": "3.2.0",
55
64
  "lodash": "4.18.1",
65
+ "luxon": "3.7.2",
56
66
  "microdiff": "1.6.0",
57
67
  "pluralize": "8.0.0",
58
68
  "react": "19.2.8",
59
69
  "react-timeago": "8.3.0",
60
70
  "rxjs": "7.8.2",
61
71
  "type-fest": "5.10.0",
72
+ "validator": "13.15.35",
62
73
  "zod": "4.6.7"
63
74
  }
64
75
  },
65
- "sha512-L70LQFFsMLvU/3/cGkUdL5RMnAeNn69zqml21djk9+PnWqXiLPxq4m4OIVWJVxm+0X688xXHJLhaSk1IF8aVJw=="
76
+ "sha512-UEnTOWq3m3JHIOeWCO0c0/2b4fQB5w+cNqHJoe0wQyd6jUkrqaYFzoM1o+sKuS+VhaICM+QFqP+GwsgNBuq3Cw=="
66
77
  ],
67
78
  "@flickfyi/lens": [
68
79
  "@flickfyi/lens@0.0.6",
@@ -77,10 +88,10 @@
77
88
  "zod": "^3.25.0 || ^4.0.0"
78
89
  }
79
90
  },
80
- "sha512-dvDlCKdiVJd9FlQ9qnjLPEY+yo4CFxQwmfTYXWJVrbcDEEVFE6b8kAh0TYBAdRbEZX6zF5k5N5ap5+4t3u3lLw=="
91
+ "sha512-91G6ZPEe48fR7DQAsHniGicP3uHHugiZ4vkzK/7HA+E3OzkO2rllVCpaq/zddVN0e7bA3N+oWBvVIgej6LSTNg=="
81
92
  ],
82
93
  "@flickfyi/photon": [
83
- "@flickfyi/photon@0.0.33",
94
+ "@flickfyi/photon@0.0.35",
84
95
  "",
85
96
  {
86
97
  "dependencies": {
@@ -90,7 +101,41 @@
90
101
  "zod": "4.6.7"
91
102
  }
92
103
  },
93
- "sha512-DMFdlSEXb3fAG7kArOryZ9+AekIX7McSLSETo0qemGDTKpxXIXU356NsoIOhefNe6861YvLSPnR81tWJxouyeQ=="
104
+ "sha512-FZCTTe22P8svVytZRIt03hUQuTanHId93jjnuut4OqWR4v+bfQ1GLbpqdxeVwrc1v7DyRYvFHaUtkZNQ0aqatQ=="
105
+ ],
106
+ "@formatjs/fast-memoize": [
107
+ "@formatjs/fast-memoize@3.1.7",
108
+ "",
109
+ {},
110
+ "sha512-zXfhLpvA6T7+efdt9JLbBwZ00tT7NsBMDVnDu8rpHeNNv8KfRZAMo2gkG0k9lK/Nzc//3kJ9pImsfuJxk3KhUA=="
111
+ ],
112
+ "@formatjs/icu-messageformat-parser": [
113
+ "@formatjs/icu-messageformat-parser@3.5.21",
114
+ "",
115
+ {
116
+ "dependencies": {
117
+ "@formatjs/icu-skeleton-parser": "2.1.12"
118
+ }
119
+ },
120
+ "sha512-Vnl7IOSyMRaP4Pjv48etkT2nlcIwzh4QWIa3hewzGlZZPBbft+TbMir4MijpDViOLN/1hvkGC10oYMuilsG+fw=="
121
+ ],
122
+ "@formatjs/icu-skeleton-parser": [
123
+ "@formatjs/icu-skeleton-parser@2.1.12",
124
+ "",
125
+ {},
126
+ "sha512-ca7tZMLpfHX3sUD7hP6gE/qr6Iq89EDd3ZLeRhbsB7r0UD55DGJq+tmFLzrGrnx5StahUevQmQQVtbDRHsfDHA=="
127
+ ],
128
+ "@formatjs/intl": [
129
+ "@formatjs/intl@6.1.3",
130
+ "",
131
+ {
132
+ "dependencies": {
133
+ "@formatjs/fast-memoize": "3.1.7",
134
+ "@formatjs/icu-messageformat-parser": "3.5.21",
135
+ "intl-messageformat": "12.1.3"
136
+ }
137
+ },
138
+ "sha512-fBxQVx6wi0f3iibauVFKr/uY+BJR0Z64Zuu6SB+p8hmxjqZoX2u4/RPYaKnFMut2+kNPIeGOaaKDHQ5odnXsZQ=="
94
139
  ],
95
140
  "@msgpackr-extract/msgpackr-extract-darwin-arm64": [
96
141
  "@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.4",
@@ -220,10 +265,10 @@
220
265
  "sha512-JwNFm0MOYPqi+M4Ax5Un4ZxfZp4HEAX2sAWetZ88KALFcv1eEiHNJs75oO3V3U7RVWnzfkiM8i9eBowC3hqgUw=="
221
266
  ],
222
267
  "@types/lodash": [
223
- "@types/lodash@4.17.26",
268
+ "@types/lodash@4.17.27",
224
269
  "",
225
270
  {},
226
- "sha512-48NWfiY6oNcKOh47Z4h+sIvwcQR91h6KPhaYKgeMIrkT2jV82Gy90SErj60vW8jQbeMSOSbhIv3bZ7JoqPPVhA=="
271
+ "sha512-VenMRv/eKNrspX9v3H4dbmjsrnCOYdYBG3kxXKk3dG6X+urBGcj2Prww3xw1U5K4FV/mE4h5GbWd0szEKf+9ew=="
227
272
  ],
228
273
  "@types/lodash-es": [
229
274
  "@types/lodash-es@4.17.12",
@@ -235,6 +280,12 @@
235
280
  },
236
281
  "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ=="
237
282
  ],
283
+ "@types/luxon": [
284
+ "@types/luxon@3.7.5",
285
+ "",
286
+ {},
287
+ "sha512-jJ41Q4z6ZVO260MNDdHfW7+7a5iMiX8Mr6ZJHcmgrvhZha6dz5704o/lF2kKl6URjH6ivEL97w9xS/MgpJEphg=="
288
+ ],
238
289
  "@types/react": [
239
290
  "@types/react@19.2.18",
240
291
  "",
@@ -245,6 +296,12 @@
245
296
  },
246
297
  "sha512-AnzbBERsrLKtk2XSfTbYRLjQPdy116Sty4q+T+Bp3IC4l6jNBvreVPAHmpq9qhXQM7CXZPjLVmGMw9sy+hxQ3w=="
247
298
  ],
299
+ "@types/validator": [
300
+ "@types/validator@13.15.10",
301
+ "",
302
+ {},
303
+ "sha512-T8L6i7wCuyoK8A/ZeLYt1+q0ty3Zb9+qbSSvrIVitzT3YjZqkTZ40IbRsPanlB4h1QB3JVL1SYCdR6ngtFYcuA=="
304
+ ],
248
305
  "@use-gesture/core": [
249
306
  "@use-gesture/core@10.3.1",
250
307
  "",
@@ -282,6 +339,12 @@
282
339
  {},
283
340
  "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ=="
284
341
  ],
342
+ "decimal.js": [
343
+ "decimal.js@10.6.0",
344
+ "",
345
+ {},
346
+ "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg=="
347
+ ],
285
348
  "detect-libc": [
286
349
  "detect-libc@2.1.2",
287
350
  "",
@@ -315,6 +378,27 @@
315
378
  },
316
379
  "sha512-iK2f+YrcmoeGqk6fA0ea2bptcu/itMIm4NfEozq6N25+aG6h7s5HZbB/k1aV7b5w5sFLMCbbtRUsTVR+BgC3xw=="
317
380
  ],
381
+ "format-quantity": [
382
+ "format-quantity@3.2.0",
383
+ "",
384
+ {
385
+ "dependencies": {
386
+ "numeric-quantity": "^3.3.1"
387
+ }
388
+ },
389
+ "sha512-O+nIHJOkaqa5fMDvEqCQQMmXoY9E64gioujCHC+MfQY0sRAHYDNBzQ5nYaZV5Mc6YYJXWt210QlHSStg7pQyHA=="
390
+ ],
391
+ "intl-messageformat": [
392
+ "intl-messageformat@12.1.3",
393
+ "",
394
+ {
395
+ "dependencies": {
396
+ "@formatjs/fast-memoize": "3.1.7",
397
+ "@formatjs/icu-messageformat-parser": "3.5.21"
398
+ }
399
+ },
400
+ "sha512-JXi5wk8R/oSECKyxSIZ00VS8KG6MZkHM0qU4NS7RrvIWWXkiv3wVqGlCvEvyXiDvKlt2yqwZMiZGIv+I8rrnZQ=="
401
+ ],
318
402
  "invariant": [
319
403
  "invariant@2.2.4",
320
404
  "",
@@ -350,6 +434,12 @@
350
434
  },
351
435
  "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q=="
352
436
  ],
437
+ "luxon": [
438
+ "luxon@3.7.2",
439
+ "",
440
+ {},
441
+ "sha512-vtEhXh/gNjI9Yg1u4jX/0YVPMvxzHuGgCm6tC5kZyb08yjGWGnqAjGJvcXbqQR2P3MyMEFnRbpcdFS6PBcLqew=="
442
+ ],
353
443
  "microdiff": [
354
444
  "microdiff@1.6.0",
355
445
  "",
@@ -402,6 +492,12 @@
402
492
  },
403
493
  "sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw=="
404
494
  ],
495
+ "numeric-quantity": [
496
+ "numeric-quantity@3.3.3",
497
+ "",
498
+ {},
499
+ "sha512-XICjnIs8Q8vUlOvVOFI8Xe3kte8fknfpzASHjwy4R2GtRm4Q5lI+d62JqFe54X4kqj/xdsucWxYe8G+OD9O8Uw=="
500
+ ],
405
501
  "pluralize": [
406
502
  "pluralize@8.0.0",
407
503
  "",
@@ -491,6 +587,12 @@
491
587
  },
492
588
  "sha512-NoSdpq/WEiAg5sjmBkmV/hfxv6HJH4NqPNrqjtSO5CwRmpsDfaf4begxW34KdJykH/l1yHtwBWQkCRdoXO8mPA=="
493
589
  ],
590
+ "validator": [
591
+ "validator@13.15.35",
592
+ "",
593
+ {},
594
+ "sha512-TQ5pAGhd5whStmqWvYF4OjQROlmv9SMFVt37qoCBdqRffuuklWYQlCNnEs2ZaIBD1kZRNnikiZOS1eqgkar0iw=="
595
+ ],
494
596
  "zod": [
495
597
  "zod@4.6.7",
496
598
  "",
@@ -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
  },
@@ -98,9 +110,9 @@
98
110
  "minifyIdentifiers": true
99
111
  },
100
112
  "dependencies": {
101
- "@flickfyi/core": "0.0.66",
113
+ "@flickfyi/core": "0.0.68",
102
114
  "@flickfyi/lens": "0.0.6",
103
- "@flickfyi/photon": "0.0.33",
115
+ "@flickfyi/photon": "0.0.35",
104
116
  "@react-spring/core": "10.1.2",
105
117
  "@react-spring/shared": "10.1.2",
106
118
  "@sindresorhus/is": "8.1.0",
@@ -113,7 +125,13 @@
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
  "resolve-s3": [
119
137
  "@flickfyi/core",
@@ -42,6 +42,8 @@ const themeEntries = {
42
42
  }
43
43
  const mainEntries = {
44
44
  ...themeEntries,
45
+ 'kowalski/index': './src/kowalski/index.ts',
46
+ 'kowalski/catalog': './src/kowalski/catalog.ts',
45
47
  index: './src/index.ts',
46
48
  'lodash/index': './src/lodash.ts',
47
49
  metadata: './src/metadata.ts',
@@ -55,13 +57,14 @@ const runtimeEntries = {
55
57
  stylex: './src/dependencies/stylex.ts',
56
58
  zod: './src/dependencies/zod.ts',
57
59
  }
58
- const styledEntries = ['parrott', 'themes']
60
+ const styledEntries = ['parrott', 'themes', 'kowalski']
59
61
 
60
62
  export const nativePreviewEntries = {
61
63
  'apns-demo': 'fixtures/native/src/apns-demo.tsx',
62
64
  'border-demo': 'fixtures/native/src/border-demo.tsx',
63
65
  'button-counters': 'fixtures/native/src/button-counters.tsx',
64
66
  'camera-demo': 'fixtures/native/src/camera-demo.tsx',
67
+ 'catalog-features': 'fixtures/native/src/catalog-features.tsx',
65
68
  'catalog-native': 'fixtures/native/src/catalog-native.tsx',
66
69
  'catalog-scale': 'fixtures/native/src/catalog-scale.tsx',
67
70
  'catalog-theme': 'fixtures/native/src/catalog-theme.tsx',
@@ -88,13 +91,13 @@ export const nativePreviewEntries = {
88
91
  const previewEntries = {
89
92
  ...nativePreviewEntries,
90
93
  ...Object.fromEntries(
91
- globSync('examples/parrott/*/*.tsx', {
94
+ globSync(['examples/parrott/*/*.tsx', 'examples/kowalski/*/*.tsx'], {
92
95
  cwd: packageRoot,
93
96
  exclude: ['**/*.stories.tsx'],
94
97
  })
95
98
  .sort()
96
99
  .map(entry => [
97
- `parrott-${basename(entry, '.tsx') === 'kale-smoothie' ? '2026-05-09-kale-smoothie' : basename(entry, '.tsx')}`,
100
+ `${entry.split('/')[1]}-${basename(entry, '.tsx') === 'kale-smoothie' ? '2026-05-09-kale-smoothie' : basename(entry, '.tsx')}`,
98
101
  entry,
99
102
  ])
100
103
  ),
@@ -155,7 +158,7 @@ export default defineConfig({
155
158
  '~/*': [resolve(packageRoot, 'src/*')],
156
159
  '@flickfyi/core/themes/*': [resolve(packageRoot, 'src/themes/*')],
157
160
  },
158
- inlineOnly: name.startsWith('parrott-'),
161
+ inlineOnly: name.startsWith('parrott-') || name.startsWith('kowalski-'),
159
162
  }).map(
160
163
  plugin =>
161
164
  ({
@@ -207,7 +210,7 @@ export default defineConfig({
207
210
  const testDirectory =
208
211
  name === 'quantum'
209
212
  ? 'swift/flick-sdk/Tests/FlickSDKTests/Fixtures'
210
- : !name.startsWith('parrott-') ||
213
+ : (!name.startsWith('parrott-') && !name.startsWith('kowalski-')) ||
211
214
  [
212
215
  'parrott-counter',
213
216
  'parrott-list',
@@ -237,6 +240,7 @@ export default defineConfig({
237
240
  'src/dependencies',
238
241
  'src/storybook',
239
242
  'src/themes/stories',
243
+ 'src/kowalski/stories',
240
244
  '**/*.stories.*',
241
245
  '**/*.example.*',
242
246
  '**/*.samples.*',
@@ -7,7 +7,7 @@ config()
7
7
 
8
8
  export default defineConfig({
9
9
  resolve: {
10
- alias: { '~': fileURLToPath(new URL('./src', import.meta.url)) },
10
+ alias: { '~': fileURLToPath(new URL('./src', import.meta.url)), '@flickfyi/photon/jsx-runtime': 'react/jsx-runtime', '@flickfyi/photon/jsx-dev-runtime': 'react/jsx-dev-runtime' },
11
11
  },
12
12
  test: {
13
13
  environment: 'node',
@@ -5,15 +5,15 @@ transforming...
5
5
  rendering chunks...
6
6
  
7
7
  [unplugin:dts] Start generate declaration files...
8
- [unplugin:dts] Declaration files built in 4348ms.
8
+ [unplugin:dts] Declaration files built in 4986ms.
9
9
  
10
10
  computing gzip size...
11
11
  dist/index.js 165.27 kB │ gzip: 47.86 kB
12
12
 
13
- ✓ built in 4.49s
14
- [PLUGIN_TIMINGS] Plugin hooks ran for 4.4s of this 4.5s build (98%).
15
- The slowest hooks, timed inside each callback (the wait before a callback starts is excluded, the time it awaits is included):
16
- - unplugin-dts buildStart (94%, 4.2s, 1 call)
17
- Additional hook time came from hooks under 1s.
18
- See https://rolldown.rs/reference/InputOptions.checks#plugintimings for more details.
13
+ ✓ built in 5.26s
14
+ [PLUGIN_TIMINGS] JavaScript callbacks ran for 5.0s of this 5.2s build (96%).
15
+ The slowest callbacks, timed inside each callback (the wait before a callback starts is excluded, the time it awaits is included):
16
+ - plugin unplugin-dts buildStart (91%, 4.8s, 1 call)
17
+ Additional callback time came from callbacks under 1s.
18
+ See https://rolldown.rs/reference/InputOptions.checks#bundlertimings for more details.
19
19
  
@@ -19,13 +19,12 @@ dist/nist-BxBMnBNH.js 41.79 kB │ gzip: 13.28 kB
19
19
  dist/curve-DYf6id8S.js 91.31 kB │ gzip: 28.67 kB
20
20
  dist/cwt-C-BaViSq.js 107.64 kB │ gzip: 24.53 kB
21
21
 
22
- ✓ built in 3.85s
23
- [PLUGIN_TIMINGS] Plugin hooks ran for 3.8s of this 3.8s build (98%).
24
- The slowest hooks, timed inside each callback (the wait before a callback starts is excluded, the time it awaits is included):
25
- - rolldown-plugin-dts:generate load (93%, 3.6s, 9 calls)
26
- Additional hook time came from the hooks below and from hooks under 1s.
27
- 2 hooks are listed without a time. Their calls overlapped, so the time inside one call includes work from other calls. To find their cost, profile the build with `node --cpu-prof`:
28
- - rolldown-plugin-dts:resolver resolveId (17 calls)
29
- - rolldown-plugin-dts:fake-js transform (9 calls)
30
- See https://rolldown.rs/reference/InputOptions.checks#plugintimings for more details.
22
+ ✓ built in 4.48s
23
+ [PLUGIN_TIMINGS] JavaScript callbacks ran for 4.4s of this 4.5s build (99%).
24
+ The slowest callbacks, timed inside each callback (the wait before a callback starts is excluded, the time it awaits is included):
25
+ - plugin rolldown-plugin-dts:generate load (94%, 4.2s, 9 calls)
26
+ Additional callback time came from the callbacks below and from callbacks under 1s.
27
+ 1 callback is listed without a time. Its calls overlapped, so the time inside one call includes work from other calls. To find its cost, profile the build with `node --cpu-prof`:
28
+ - plugin rolldown-plugin-dts:resolver resolveId (17 calls)
29
+ See https://rolldown.rs/reference/InputOptions.checks#bundlertimings for more details.
31
30
  
@@ -9,12 +9,12 @@ dist/bundle-plugin.js 2.52 kB │ gzip: 1.11 kB
9
9
  dist/index.d.ts 6.08 kB │ gzip: 2.00 kB
10
10
  dist/index.js 28.55 kB │ gzip: 7.81 kB
11
11
 
12
- ✓ built in 3.50s
13
- [PLUGIN_TIMINGS] Plugin hooks ran for 3.5s of this 3.5s build (99%).
14
- The slowest hooks, timed inside each callback (the wait before a callback starts is excluded, the time it awaits is included):
15
- - rolldown-plugin-dts:generate load (98%, 3.4s, 2 calls)
16
- Additional hook time came from hooks under 1s.
17
- See https://rolldown.rs/reference/InputOptions.checks#plugintimings for more details.
12
+ ✓ built in 4.48s
13
+ [PLUGIN_TIMINGS] JavaScript callbacks ran for 4.3s of this 4.5s build (97%).
14
+ The slowest callbacks, timed inside each callback (the wait before a callback starts is excluded, the time it awaits is included):
15
+ - plugin rolldown-plugin-dts:generate load (94%, 4.2s, 2 calls)
16
+ Additional callback time came from callbacks under 1s.
17
+ See https://rolldown.rs/reference/InputOptions.checks#bundlertimings for more details.
18
18
  
19
- ◇ injected env (0) from .env // tip: ⌘ multiple files { path: ['.env.local', '.env'] }
19
+ ◇ injected env (0) from .env // tip: ⌘ suppress logs { quiet: true }
20
20
  Publishing @flickfyi/lens@0.0.6...
@@ -5,7 +5,7 @@ transforming...
5
5
  rendering chunks...
6
6
  
7
7
  [unplugin:dts] Start generate declaration files...
8
- [unplugin:dts] Declaration files built in 2670ms.
8
+ [unplugin:dts] Declaration files built in 3124ms.
9
9
  
10
10
  computing gzip size...
11
11
  dist/version.js 0.08 kB │ gzip: 0.09 kB
@@ -22,6 +22,12 @@ dist/jsx-runtime.cjs 0.51 kB │ gzip: 0.30 kB
22
22
  dist/schemas.cjs 1.35 kB │ gzip: 0.47 kB
23
23
  dist/index.cjs 2.39 kB │ gzip: 0.80 kB
24
24
 
25
- ✓ built in 2.98s
26
- ◇ injected env (2) from .env // tip: ◈ encrypted .env [www.dotenvx.com]
27
- Publishing @flickfyi/photon@0.0.33...
25
+ ✓ built in 3.32s
26
+ [PLUGIN_TIMINGS] JavaScript callbacks ran for 3.2s of this 3.3s build (98%).
27
+ The slowest callbacks, timed inside each callback (the wait before a callback starts is excluded, the time it awaits is included):
28
+ - plugin unplugin-dts buildStart (90%, 3.0s, 2 calls)
29
+ Additional callback time came from callbacks under 1s.
30
+ See https://rolldown.rs/reference/InputOptions.checks#bundlertimings for more details.
31
+ 
32
+ ◇ injected env (2) from .env // tip: ⌘ enable debugging { debug: true }
33
+ Publishing @flickfyi/photon@0.0.35...
@@ -49,6 +49,7 @@ public final class ButtonHost: PhotonHost, Componentable {
49
49
  case accessibilityLabel
50
50
  case accessibilityValue
51
51
  case disabled
52
+ case href
52
53
  case indeterminate
53
54
  case key
54
55
  case loading
@@ -58,7 +59,7 @@ public final class ButtonHost: PhotonHost, Componentable {
58
59
 
59
60
  var type: ComponentPropertyType {
60
61
  switch self {
61
- case .accessibilityLabel, .accessibilityValue: .string
62
+ case .accessibilityLabel, .accessibilityValue, .href: .string
62
63
  case .disabled, .indeterminate, .loading, .selected: .boolean
63
64
  case .key: .stringOrNumber
64
65
  case .onClick: .mouseEvent
@@ -75,7 +76,21 @@ public final class ButtonHost: PhotonHost, Componentable {
75
76
 
76
77
  var controlAccessibilityLabel: String?
77
78
  var controlAccessibilityValue: String?
79
+ var destination: URL? {
80
+ guard let href, let url = URL(string: href),
81
+ let scheme = url.scheme?.lowercased(),
82
+ ["http", "https", "mailto", "tel"].contains(scheme)
83
+ else {
84
+ return nil
85
+ }
86
+ if scheme == "http" || scheme == "https" {
87
+ return url.host?.isEmpty == false ? url : nil
88
+ }
89
+ return url.path.isEmpty ? nil : url
90
+ }
91
+
78
92
  var disabled: Bool?
93
+ var href: String?
79
94
  var indeterminate = false
80
95
  var key: String?
81
96
  var loading = false
@@ -112,6 +127,12 @@ public final class ButtonHost: PhotonHost, Componentable {
112
127
  } else {
113
128
  disabled = nil
114
129
  }
130
+ case .href:
131
+ href = if case let .string(destination) = value {
132
+ destination
133
+ } else {
134
+ nil
135
+ }
115
136
  case .indeterminate:
116
137
  indeterminate = if case let .bool(isIndeterminate) = value {
117
138
  isIndeterminate
@@ -162,10 +183,15 @@ public final class ButtonHost: PhotonHost, Componentable {
162
183
 
163
184
  /// The VIEW is pure SwiftUI - just observes and renders
164
185
  public struct ButtonView: View {
186
+ @Environment(\.openURL) private var openURL
187
+
165
188
  @ObservedObject var host: ButtonHost
166
189
 
167
190
  public var body: some View {
168
191
  AsyncButton(role: host.role) {
192
+ if let destination = host.destination {
193
+ openURL(destination)
194
+ }
169
195
  try? await host.onClick?([])
170
196
  } label: {
171
197
  VStack(spacing: 0) {
@@ -194,7 +220,7 @@ public struct ButtonView: View {
194
220
  .modify(\.border, host.properties[\.border])
195
221
  .modify(\.shadow, host.properties[\.shadow])
196
222
  .modify(\.opacity, host.properties[\.opacity])
197
- .disabled((host.disabled ?? false) || host.loading)
223
+ .disabled((host.disabled ?? false) || host.loading || (host.href != nil && host.destination == nil))
198
224
  .accessibilityLabel(
199
225
  Text(host.controlAccessibilityLabel ?? ""),
200
226
  isEnabled: host.controlAccessibilityLabel != nil,
@@ -205,6 +231,7 @@ public struct ButtonView: View {
205
231
  )
206
232
  .accessibilityAddTraits(host.selected && !host.indeterminate ? .isSelected : [])
207
233
  .accessibilityAddTraits(host.loading ? .updatesFrequently : [])
234
+ .accessibilityAddTraits(host.destination != nil ? .isLink : [])
208
235
  .modify(\.flexiFrame, host.properties[\.flexiFrame])
209
236
  .modifyMargin(\.spacing, host.properties[\.spacing])
210
237
  }
@@ -1 +1 @@
1
- {"version":"0.0.33"}
1
+ {"version":"0.0.35"}
@@ -6,6 +6,32 @@ import Testing
6
6
  @MainActor
7
7
  @Suite(.tags(.reactSwiftUI))
8
8
  struct ButtonHostTests {
9
+ @Test(.testTimeout(.seconds(5)), arguments: [
10
+ "https://example.com/path", "http://example.com", "HTTPS://example.com",
11
+ "mailto:alex@example.com", "tel:+14155550128",
12
+ ]) func supportedLinkDestinations(href: String) async {
13
+ let jsActor = await JSActor()
14
+ let host = await jsActor.withContext { isolation, _ in
15
+ withImmediateClock { ButtonHost(isolation: isolation, type: "button") }
16
+ }
17
+ host.handlePropertyUpdate(key: "href", value: .string(href))
18
+ #expect(host.destination != nil)
19
+ host.handlePropertyUpdate(key: "href", value: .none)
20
+ #expect(host.destination == nil)
21
+ }
22
+
23
+ @Test(.testTimeout(.seconds(5)), arguments: [
24
+ "javascript:alert(1)", "data:text/html,test", "file:///tmp/test", "/relative",
25
+ "https://", "https:example.com", "mailto:", "tel:", "",
26
+ ]) func rejectsUnsupportedOrIncompleteLinkDestinations(href: String) async {
27
+ let jsActor = await JSActor()
28
+ let host = await jsActor.withContext { isolation, _ in
29
+ withImmediateClock { ButtonHost(isolation: isolation, type: "button") }
30
+ }
31
+ host.handlePropertyUpdate(key: "href", value: .string(href))
32
+ #expect(host.destination == nil)
33
+ }
34
+
9
35
  @Test(.testTimeout(.seconds(5))) func removedControlStateRestoresNormalAction() async {
10
36
  let jsActor = await JSActor()
11
37
  let host = await jsActor.withContext { isolation, _ in