@ossy/design-system 3.0.2 → 3.0.4

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 (861) hide show
  1. package/package.json +6 -5
  2. package/src/alert/Alert.jsx +130 -0
  3. package/src/alert/alert.stories.jsx +67 -0
  4. package/src/alert/index.js +1 -0
  5. package/src/app-header/AppHeader.jsx +47 -0
  6. package/src/app-header/AppHeader.stories.jsx +31 -0
  7. package/src/app-header/index.js +1 -0
  8. package/src/badge/Badge.jsx +70 -0
  9. package/src/badge/index.js +1 -0
  10. package/src/breadcrumbs/Breadcrumbs.jsx +50 -0
  11. package/src/breadcrumbs/Breadcrumbs.stories.jsx +17 -0
  12. package/src/breadcrumbs/index.js +1 -0
  13. package/src/button/Button.jsx +126 -0
  14. package/src/button/Buttons.stories.jsx +34 -0
  15. package/src/button/index.js +1 -0
  16. package/src/cache/Cache.jsx +78 -0
  17. package/src/cache/cache.stories.jsx +20 -0
  18. package/src/cache/index.js +1 -0
  19. package/src/card/Card.jsx +57 -0
  20. package/src/card/Card.stories.jsx +10 -0
  21. package/src/card/index.js +1 -0
  22. package/src/carousel/Carousel.jsx +87 -0
  23. package/src/carousel/Carousel.stories.jsx +17 -0
  24. package/src/carousel/index.js +1 -0
  25. package/src/carousel/useCarousel.jsx +154 -0
  26. package/src/code-example/CodeExampleStyles.jsx +11 -0
  27. package/src/code-example/InvokeCodeExample.jsx +46 -0
  28. package/src/code-example/codeExampleStyles.js +51 -0
  29. package/src/code-example/index.js +3 -0
  30. package/src/column-gallery/ColumnGallery.jsx +297 -0
  31. package/src/column-gallery/columnGallery.stories-disabled.jsx +24 -0
  32. package/src/column-gallery/index.js +1 -0
  33. package/src/column-gallery/options.js +7 -0
  34. package/src/component-slots/ComponentSlots.jsx +113 -0
  35. package/src/component-slots/ComponentSlots.stories.jsx +111 -0
  36. package/src/component-slots/index.js +8 -0
  37. package/src/component-slots/pageSlotKeys.js +8 -0
  38. package/src/component-slots/slotLookup.js +73 -0
  39. package/src/component-slots/slotLookup.spec.js +19 -0
  40. package/src/content-header/ContentHeader.jsx +86 -0
  41. package/src/content-header/ContentHeader.stories.jsx +70 -0
  42. package/src/content-header/index.js +1 -0
  43. package/src/context-menu/ContextMenu.jsx +43 -0
  44. package/src/context-menu/ContextMenu.stories.jsx +19 -0
  45. package/src/context-menu/index.js +1 -0
  46. package/src/create-icons.js +93 -0
  47. package/src/date-display/DateDisplay.jsx +44 -0
  48. package/src/date-display/DateDisplay.stories.jsx +32 -0
  49. package/src/date-display/index.js +1 -0
  50. package/src/delayed-render/DelayedRender.jsx +15 -0
  51. package/src/delayed-render/index.js +1 -0
  52. package/src/drop-zone/DropZone.jsx +21 -0
  53. package/src/drop-zone/asDragable.jsx +21 -0
  54. package/src/drop-zone/asDropZone.jsx +70 -0
  55. package/src/drop-zone/dropZone.stories.jsx +128 -0
  56. package/src/drop-zone/index.js +3 -0
  57. package/src/dropdown/Dropdown.jsx +119 -0
  58. package/src/dropdown/Dropdown.stories.jsx +20 -0
  59. package/src/dropdown/index.js +1 -0
  60. package/src/empty-state/EmptyState.jsx +28 -0
  61. package/src/empty-state/EmptyState.stories.jsx +34 -0
  62. package/src/empty-state/index.js +1 -0
  63. package/src/en.translations.json +46 -0
  64. package/src/fields/DatePicker.jsx +233 -0
  65. package/src/fields/Fields.jsx +596 -0
  66. package/src/fields/Fields.stories.jsx +357 -0
  67. package/src/fields/applyFieldChange.js +132 -0
  68. package/src/fields/fieldTranslationKeys.js +18 -0
  69. package/src/fields/fieldTypes.js +25 -0
  70. package/src/fields/index.js +13 -0
  71. package/src/fields/normalizeFieldType.js +26 -0
  72. package/src/fields/time.js +85 -0
  73. package/src/form/FieldFactory.jsx +33 -0
  74. package/src/form/Form.jsx +132 -0
  75. package/src/form/Form.stories.jsx +69 -0
  76. package/src/form/FormContext.jsx +22 -0
  77. package/src/form/FormStatus.js +6 -0
  78. package/src/form/index.js +4 -0
  79. package/src/guide/Guide.jsx +43 -0
  80. package/src/guide/Guide.stories.jsx +37 -0
  81. package/src/guide/index.js +1 -0
  82. package/src/header-layout/HeaderLayout.jsx +43 -0
  83. package/src/hooks/index.js +6 -0
  84. package/src/hooks/useClipboardCopy.js +26 -0
  85. package/src/hooks/useDocumentTitle.js +22 -0
  86. package/src/hooks/useForceRerender.js +9 -0
  87. package/src/hooks/useInputValue.js +23 -0
  88. package/src/hooks/useInputValue.stories.jsx +26 -0
  89. package/src/hooks/useIntersectionObserver.js +29 -0
  90. package/src/hooks/useTimeout.js +24 -0
  91. package/src/icons/Icon.jsx +906 -0
  92. package/src/icons/Icon.stories.jsx +50 -0
  93. package/src/icons/icons2/abstract.jsx +18 -0
  94. package/src/icons/icons2/add-r.jsx +22 -0
  95. package/src/icons/icons2/add.jsx +24 -0
  96. package/src/icons/icons2/adidas.jsx +24 -0
  97. package/src/icons/icons2/airplane.jsx +15 -0
  98. package/src/icons/icons2/alarm.jsx +10 -0
  99. package/src/icons/icons2/album.jsx +18 -0
  100. package/src/icons/icons2/align-bottom.jsx +15 -0
  101. package/src/icons/icons2/align-center.jsx +13 -0
  102. package/src/icons/icons2/align-left.jsx +14 -0
  103. package/src/icons/icons2/align-middle.jsx +13 -0
  104. package/src/icons/icons2/align-right.jsx +30 -0
  105. package/src/icons/icons2/align-top.jsx +30 -0
  106. package/src/icons/icons2/anchor.jsx +17 -0
  107. package/src/icons/icons2/apple-watch.jsx +17 -0
  108. package/src/icons/icons2/arrange-back.jsx +17 -0
  109. package/src/icons/icons2/arrange-front.jsx +17 -0
  110. package/src/icons/icons2/arrow-align-h.jsx +20 -0
  111. package/src/icons/icons2/arrow-align-v.jsx +20 -0
  112. package/src/icons/icons2/arrow-bottom-left-o.jsx +21 -0
  113. package/src/icons/icons2/arrow-bottom-left-r.jsx +21 -0
  114. package/src/icons/icons2/arrow-bottom-left.jsx +15 -0
  115. package/src/icons/icons2/arrow-bottom-right-o.jsx +21 -0
  116. package/src/icons/icons2/arrow-bottom-right-r.jsx +21 -0
  117. package/src/icons/icons2/arrow-bottom-right.jsx +15 -0
  118. package/src/icons/icons2/arrow-down-o.jsx +21 -0
  119. package/src/icons/icons2/arrow-down-r.jsx +21 -0
  120. package/src/icons/icons2/arrow-down.jsx +15 -0
  121. package/src/icons/icons2/arrow-left-o.jsx +21 -0
  122. package/src/icons/icons2/arrow-left-r.jsx +21 -0
  123. package/src/icons/icons2/arrow-left.jsx +15 -0
  124. package/src/icons/icons2/arrow-long-down-c.jsx +17 -0
  125. package/src/icons/icons2/arrow-long-down-e.jsx +17 -0
  126. package/src/icons/icons2/arrow-long-down-l.jsx +15 -0
  127. package/src/icons/icons2/arrow-long-down-r.jsx +17 -0
  128. package/src/icons/icons2/arrow-long-down.jsx +15 -0
  129. package/src/icons/icons2/arrow-long-left-c.jsx +17 -0
  130. package/src/icons/icons2/arrow-long-left-e.jsx +17 -0
  131. package/src/icons/icons2/arrow-long-left-l.jsx +15 -0
  132. package/src/icons/icons2/arrow-long-left-r.jsx +17 -0
  133. package/src/icons/icons2/arrow-long-left.jsx +15 -0
  134. package/src/icons/icons2/arrow-long-right-c.jsx +17 -0
  135. package/src/icons/icons2/arrow-long-right-e.jsx +17 -0
  136. package/src/icons/icons2/arrow-long-right-l.jsx +15 -0
  137. package/src/icons/icons2/arrow-long-right-r.jsx +17 -0
  138. package/src/icons/icons2/arrow-long-right.jsx +15 -0
  139. package/src/icons/icons2/arrow-long-up-c.jsx +17 -0
  140. package/src/icons/icons2/arrow-long-up-e.jsx +17 -0
  141. package/src/icons/icons2/arrow-long-up-l.jsx +15 -0
  142. package/src/icons/icons2/arrow-long-up-r.jsx +17 -0
  143. package/src/icons/icons2/arrow-long-up.jsx +15 -0
  144. package/src/icons/icons2/arrow-right-o.jsx +21 -0
  145. package/src/icons/icons2/arrow-right-r.jsx +21 -0
  146. package/src/icons/icons2/arrow-right.jsx +15 -0
  147. package/src/icons/icons2/arrow-top-left-o.jsx +21 -0
  148. package/src/icons/icons2/arrow-top-left-r.jsx +21 -0
  149. package/src/icons/icons2/arrow-top-left.jsx +15 -0
  150. package/src/icons/icons2/arrow-top-right-o.jsx +21 -0
  151. package/src/icons/icons2/arrow-top-right-r.jsx +21 -0
  152. package/src/icons/icons2/arrow-top-right.jsx +15 -0
  153. package/src/icons/icons2/arrow-up-o.jsx +21 -0
  154. package/src/icons/icons2/arrow-up-r.jsx +21 -0
  155. package/src/icons/icons2/arrow-up.jsx +15 -0
  156. package/src/icons/icons2/arrows-breake-h.jsx +19 -0
  157. package/src/icons/icons2/arrows-breake-v.jsx +19 -0
  158. package/src/icons/icons2/arrows-exchange-alt-v.jsx +19 -0
  159. package/src/icons/icons2/arrows-exchange-alt.jsx +19 -0
  160. package/src/icons/icons2/arrows-exchange-v.jsx +19 -0
  161. package/src/icons/icons2/arrows-exchange.jsx +19 -0
  162. package/src/icons/icons2/arrows-expand-down-left.jsx +21 -0
  163. package/src/icons/icons2/arrows-expand-down-right.jsx +21 -0
  164. package/src/icons/icons2/arrows-expand-left-alt.jsx +23 -0
  165. package/src/icons/icons2/arrows-expand-left.jsx +19 -0
  166. package/src/icons/icons2/arrows-expand-right-alt.jsx +23 -0
  167. package/src/icons/icons2/arrows-expand-right.jsx +19 -0
  168. package/src/icons/icons2/arrows-expand-up-left.jsx +21 -0
  169. package/src/icons/icons2/arrows-expand-up-right.jsx +21 -0
  170. package/src/icons/icons2/arrows-h-alt.jsx +15 -0
  171. package/src/icons/icons2/arrows-h.jsx +19 -0
  172. package/src/icons/icons2/arrows-merge-alt-h.jsx +19 -0
  173. package/src/icons/icons2/arrows-merge-alt-v.jsx +19 -0
  174. package/src/icons/icons2/arrows-scroll-h.jsx +19 -0
  175. package/src/icons/icons2/arrows-scroll-v.jsx +19 -0
  176. package/src/icons/icons2/arrows-shrink-h.jsx +17 -0
  177. package/src/icons/icons2/arrows-shrink-v.jsx +17 -0
  178. package/src/icons/icons2/arrows-v-alt.jsx +15 -0
  179. package/src/icons/icons2/arrows-v.jsx +19 -0
  180. package/src/icons/icons2/assign.jsx +19 -0
  181. package/src/icons/icons2/asterisk.jsx +15 -0
  182. package/src/icons/icons2/atlasian.jsx +20 -0
  183. package/src/icons/icons2/attachment.jsx +15 -0
  184. package/src/icons/icons2/attribution.jsx +15 -0
  185. package/src/icons/icons2/awards.jsx +17 -0
  186. package/src/icons/icons2/backspace.jsx +21 -0
  187. package/src/icons/icons2/band-aid.jsx +33 -0
  188. package/src/icons/icons2/battery-empty.jsx +17 -0
  189. package/src/icons/icons2/battery-full.jsx +21 -0
  190. package/src/icons/icons2/battery.jsx +21 -0
  191. package/src/icons/icons2/bee.jsx +17 -0
  192. package/src/icons/icons2/bell.jsx +17 -0
  193. package/src/icons/icons2/bitbucket.jsx +17 -0
  194. package/src/icons/icons2/block.jsx +21 -0
  195. package/src/icons/icons2/bmw.jsx +17 -0
  196. package/src/icons/icons2/board.jsx +17 -0
  197. package/src/icons/icons2/bolt.jsx +12 -0
  198. package/src/icons/icons2/bookmark.jsx +17 -0
  199. package/src/icons/icons2/border-all.jsx +12 -0
  200. package/src/icons/icons2/border-bottom.jsx +13 -0
  201. package/src/icons/icons2/border-left.jsx +13 -0
  202. package/src/icons/icons2/border-right.jsx +13 -0
  203. package/src/icons/icons2/border-style-dashed.jsx +14 -0
  204. package/src/icons/icons2/border-style-dotted.jsx +17 -0
  205. package/src/icons/icons2/border-style-solid.jsx +12 -0
  206. package/src/icons/icons2/border-top.jsx +17 -0
  207. package/src/icons/icons2/bot.jsx +30 -0
  208. package/src/icons/icons2/bowl.jsx +17 -0
  209. package/src/icons/icons2/box.jsx +21 -0
  210. package/src/icons/icons2/boy.jsx +25 -0
  211. package/src/icons/icons2/brackets.jsx +19 -0
  212. package/src/icons/icons2/briefcase.jsx +18 -0
  213. package/src/icons/icons2/browse.jsx +25 -0
  214. package/src/icons/icons2/browser.jsx +29 -0
  215. package/src/icons/icons2/brush.jsx +17 -0
  216. package/src/icons/icons2/bulb.jsx +21 -0
  217. package/src/icons/icons2/c-plus-plus.jsx +17 -0
  218. package/src/icons/icons2/calculator.jsx +26 -0
  219. package/src/icons/icons2/calendar-dates.jsx +45 -0
  220. package/src/icons/icons2/calendar-due.jsx +25 -0
  221. package/src/icons/icons2/calendar-next.jsx +25 -0
  222. package/src/icons/icons2/calendar-today.jsx +21 -0
  223. package/src/icons/icons2/calendar-two.jsx +21 -0
  224. package/src/icons/icons2/calendar.jsx +21 -0
  225. package/src/icons/icons2/calibrate.jsx +19 -0
  226. package/src/icons/icons2/camera.jsx +17 -0
  227. package/src/icons/icons2/cap.jsx +18 -0
  228. package/src/icons/icons2/captions.jsx +19 -0
  229. package/src/icons/icons2/card-clubs.jsx +29 -0
  230. package/src/icons/icons2/card-diamonds.jsx +21 -0
  231. package/src/icons/icons2/card-hearts.jsx +21 -0
  232. package/src/icons/icons2/card-spades.jsx +21 -0
  233. package/src/icons/icons2/carousel.jsx +25 -0
  234. package/src/icons/icons2/cast.jsx +24 -0
  235. package/src/icons/icons2/chanel.jsx +17 -0
  236. package/src/icons/icons2/chart.jsx +23 -0
  237. package/src/icons/icons2/check-o.jsx +21 -0
  238. package/src/icons/icons2/check-r.jsx +21 -0
  239. package/src/icons/icons2/check.jsx +15 -0
  240. package/src/icons/icons2/chevron-double-down-o.jsx +25 -0
  241. package/src/icons/icons2/chevron-double-down-r.jsx +25 -0
  242. package/src/icons/icons2/chevron-double-down.jsx +19 -0
  243. package/src/icons/icons2/chevron-double-left-o.jsx +25 -0
  244. package/src/icons/icons2/chevron-double-left-r.jsx +25 -0
  245. package/src/icons/icons2/chevron-double-left.jsx +19 -0
  246. package/src/icons/icons2/chevron-double-right-o.jsx +25 -0
  247. package/src/icons/icons2/chevron-double-right-r.jsx +25 -0
  248. package/src/icons/icons2/chevron-double-right.jsx +19 -0
  249. package/src/icons/icons2/chevron-double-up-o.jsx +25 -0
  250. package/src/icons/icons2/chevron-double-up-r.jsx +25 -0
  251. package/src/icons/icons2/chevron-double-up.jsx +19 -0
  252. package/src/icons/icons2/chevron-down-o.jsx +21 -0
  253. package/src/icons/icons2/chevron-down-r.jsx +21 -0
  254. package/src/icons/icons2/chevron-down.jsx +15 -0
  255. package/src/icons/icons2/chevron-left-o.jsx +21 -0
  256. package/src/icons/icons2/chevron-left-r.jsx +21 -0
  257. package/src/icons/icons2/chevron-left.jsx +15 -0
  258. package/src/icons/icons2/chevron-right-o.jsx +21 -0
  259. package/src/icons/icons2/chevron-right-r.jsx +21 -0
  260. package/src/icons/icons2/chevron-right.jsx +15 -0
  261. package/src/icons/icons2/chevron-up-o.jsx +21 -0
  262. package/src/icons/icons2/chevron-up-r.jsx +21 -0
  263. package/src/icons/icons2/chevron-up.jsx +15 -0
  264. package/src/icons/icons2/circleci.jsx +17 -0
  265. package/src/icons/icons2/clapper-board.jsx +17 -0
  266. package/src/icons/icons2/clipboard.jsx +25 -0
  267. package/src/icons/icons2/close-o.jsx +21 -0
  268. package/src/icons/icons2/close-r.jsx +21 -0
  269. package/src/icons/icons2/close.jsx +15 -0
  270. package/src/icons/icons2/cloud.jsx +17 -0
  271. package/src/icons/icons2/code-climate.jsx +19 -0
  272. package/src/icons/icons2/code-slash.jsx +23 -0
  273. package/src/icons/icons2/code.jsx +19 -0
  274. package/src/icons/icons2/coffee.jsx +29 -0
  275. package/src/icons/icons2/collage.jsx +17 -0
  276. package/src/icons/icons2/color-bucket.jsx +21 -0
  277. package/src/icons/icons2/color-picker.jsx +21 -0
  278. package/src/icons/icons2/comedy-central.jsx +19 -0
  279. package/src/icons/icons2/comment.jsx +19 -0
  280. package/src/icons/icons2/community.jsx +17 -0
  281. package/src/icons/icons2/components.jsx +35 -0
  282. package/src/icons/icons2/compress-left.jsx +19 -0
  283. package/src/icons/icons2/compress-right.jsx +19 -0
  284. package/src/icons/icons2/compress-v.jsx +19 -0
  285. package/src/icons/icons2/compress.jsx +19 -0
  286. package/src/icons/icons2/controller.jsx +33 -0
  287. package/src/icons/icons2/copy.jsx +20 -0
  288. package/src/icons/icons2/copyright.jsx +21 -0
  289. package/src/icons/icons2/corner-double-down-left.jsx +15 -0
  290. package/src/icons/icons2/corner-double-down-right.jsx +15 -0
  291. package/src/icons/icons2/corner-double-left-down.jsx +15 -0
  292. package/src/icons/icons2/corner-double-left-up.jsx +19 -0
  293. package/src/icons/icons2/corner-double-right-down.jsx +15 -0
  294. package/src/icons/icons2/corner-double-right-up.jsx +19 -0
  295. package/src/icons/icons2/corner-double-up-left.jsx +19 -0
  296. package/src/icons/icons2/corner-double-up-right.jsx +19 -0
  297. package/src/icons/icons2/corner-down-left.jsx +15 -0
  298. package/src/icons/icons2/corner-down-right.jsx +15 -0
  299. package/src/icons/icons2/corner-left-down.jsx +15 -0
  300. package/src/icons/icons2/corner-left-up.jsx +15 -0
  301. package/src/icons/icons2/corner-right-down.jsx +15 -0
  302. package/src/icons/icons2/corner-right-up.jsx +15 -0
  303. package/src/icons/icons2/corner-up-left.jsx +15 -0
  304. package/src/icons/icons2/corner-up-right.jsx +15 -0
  305. package/src/icons/icons2/credit-card.jsx +21 -0
  306. package/src/icons/icons2/crop.jsx +17 -0
  307. package/src/icons/icons2/cross.jsx +15 -0
  308. package/src/icons/icons2/crowdfire.jsx +17 -0
  309. package/src/icons/icons2/crown.jsx +17 -0
  310. package/src/icons/icons2/danger.jsx +25 -0
  311. package/src/icons/icons2/dark-mode.jsx +21 -0
  312. package/src/icons/icons2/data.jsx +33 -0
  313. package/src/icons/icons2/database.jsx +21 -0
  314. package/src/icons/icons2/debug.jsx +25 -0
  315. package/src/icons/icons2/designmodo.jsx +22 -0
  316. package/src/icons/icons2/desktop.jsx +29 -0
  317. package/src/icons/icons2/details-less.jsx +19 -0
  318. package/src/icons/icons2/details-more.jsx +23 -0
  319. package/src/icons/icons2/dialpad.jsx +21 -0
  320. package/src/icons/icons2/dice-1.jsx +21 -0
  321. package/src/icons/icons2/dice-2.jsx +25 -0
  322. package/src/icons/icons2/dice-3.jsx +29 -0
  323. package/src/icons/icons2/dice-4.jsx +33 -0
  324. package/src/icons/icons2/dice-5.jsx +37 -0
  325. package/src/icons/icons2/dice-6.jsx +41 -0
  326. package/src/icons/icons2/digitalocean.jsx +18 -0
  327. package/src/icons/icons2/disc.jsx +31 -0
  328. package/src/icons/icons2/display-flex.jsx +19 -0
  329. package/src/icons/icons2/display-fullwidth.jsx +19 -0
  330. package/src/icons/icons2/display-grid.jsx +21 -0
  331. package/src/icons/icons2/display-spacing.jsx +19 -0
  332. package/src/icons/icons2/distribute-horizontal.jsx +19 -0
  333. package/src/icons/icons2/distribute-vertical.jsx +19 -0
  334. package/src/icons/icons2/dock-bottom.jsx +17 -0
  335. package/src/icons/icons2/dock-left.jsx +17 -0
  336. package/src/icons/icons2/dock-right.jsx +17 -0
  337. package/src/icons/icons2/dock-window.jsx +17 -0
  338. package/src/icons/icons2/dolby.jsx +17 -0
  339. package/src/icons/icons2/dollar.jsx +17 -0
  340. package/src/icons/icons2/dribbble.jsx +17 -0
  341. package/src/icons/icons2/drive.jsx +25 -0
  342. package/src/icons/icons2/drop-invert.jsx +17 -0
  343. package/src/icons/icons2/drop-opacity.jsx +17 -0
  344. package/src/icons/icons2/drop.jsx +16 -0
  345. package/src/icons/icons2/duplicate.jsx +19 -0
  346. package/src/icons/icons2/edit-black-point.jsx +23 -0
  347. package/src/icons/icons2/edit-contrast.jsx +21 -0
  348. package/src/icons/icons2/edit-exposure.jsx +17 -0
  349. package/src/icons/icons2/edit-fade.jsx +28 -0
  350. package/src/icons/icons2/edit-flip-h.jsx +21 -0
  351. package/src/icons/icons2/edit-flip-v.jsx +21 -0
  352. package/src/icons/icons2/edit-highlight.jsx +21 -0
  353. package/src/icons/icons2/edit-markup.jsx +17 -0
  354. package/src/icons/icons2/edit-mask.jsx +21 -0
  355. package/src/icons/icons2/edit-noise.jsx +101 -0
  356. package/src/icons/icons2/edit-shadows.jsx +21 -0
  357. package/src/icons/icons2/edit-straight.jsx +21 -0
  358. package/src/icons/icons2/edit-unmask.jsx +31 -0
  359. package/src/icons/icons2/eject.jsx +16 -0
  360. package/src/icons/icons2/enter.jsx +16 -0
  361. package/src/icons/icons2/erase.jsx +17 -0
  362. package/src/icons/icons2/ereader.jsx +29 -0
  363. package/src/icons/icons2/ericsson.jsx +23 -0
  364. package/src/icons/icons2/ethernet.jsx +17 -0
  365. package/src/icons/icons2/euro.jsx +15 -0
  366. package/src/icons/icons2/eventbrite.jsx +17 -0
  367. package/src/icons/icons2/expand.jsx +15 -0
  368. package/src/icons/icons2/export.jsx +19 -0
  369. package/src/icons/icons2/extension-add.jsx +18 -0
  370. package/src/icons/icons2/extension-alt.jsx +17 -0
  371. package/src/icons/icons2/extension-remove.jsx +18 -0
  372. package/src/icons/icons2/extension.jsx +23 -0
  373. package/src/icons/icons2/external.jsx +19 -0
  374. package/src/icons/icons2/eye-alt.jsx +21 -0
  375. package/src/icons/icons2/eye.jsx +23 -0
  376. package/src/icons/icons2/facebook.jsx +15 -0
  377. package/src/icons/icons2/feed.jsx +39 -0
  378. package/src/icons/icons2/figma.jsx +27 -0
  379. package/src/icons/icons2/file-add.jsx +18 -0
  380. package/src/icons/icons2/file-document.jsx +20 -0
  381. package/src/icons/icons2/file-remove.jsx +18 -0
  382. package/src/icons/icons2/file.jsx +17 -0
  383. package/src/icons/icons2/film.jsx +41 -0
  384. package/src/icons/icons2/filters.jsx +17 -0
  385. package/src/icons/icons2/flag-alt.jsx +17 -0
  386. package/src/icons/icons2/flag.jsx +17 -0
  387. package/src/icons/icons2/folder-add.jsx +21 -0
  388. package/src/icons/icons2/folder-remove.jsx +18 -0
  389. package/src/icons/icons2/folder.jsx +17 -0
  390. package/src/icons/icons2/font-height.jsx +19 -0
  391. package/src/icons/icons2/font-spacing.jsx +19 -0
  392. package/src/icons/icons2/format-bold.jsx +18 -0
  393. package/src/icons/icons2/format-center.jsx +27 -0
  394. package/src/icons/icons2/format-color.jsx +21 -0
  395. package/src/icons/icons2/format-heading.jsx +12 -0
  396. package/src/icons/icons2/format-indent-decrease.jsx +16 -0
  397. package/src/icons/icons2/format-indent-increase.jsx +16 -0
  398. package/src/icons/icons2/format-italic.jsx +15 -0
  399. package/src/icons/icons2/format-justify.jsx +27 -0
  400. package/src/icons/icons2/format-left.jsx +27 -0
  401. package/src/icons/icons2/format-line-height.jsx +19 -0
  402. package/src/icons/icons2/format-right.jsx +27 -0
  403. package/src/icons/icons2/format-separator.jsx +35 -0
  404. package/src/icons/icons2/format-slash.jsx +17 -0
  405. package/src/icons/icons2/format-strike.jsx +14 -0
  406. package/src/icons/icons2/format-text.jsx +24 -0
  407. package/src/icons/icons2/format-underline.jsx +19 -0
  408. package/src/icons/icons2/format-uppercase.jsx +17 -0
  409. package/src/icons/icons2/framer.jsx +13 -0
  410. package/src/icons/icons2/games.jsx +34 -0
  411. package/src/icons/icons2/gender-female.jsx +17 -0
  412. package/src/icons/icons2/gender-male.jsx +17 -0
  413. package/src/icons/icons2/ghost-character.jsx +25 -0
  414. package/src/icons/icons2/ghost.jsx +16 -0
  415. package/src/icons/icons2/gift.jsx +17 -0
  416. package/src/icons/icons2/girl.jsx +25 -0
  417. package/src/icons/icons2/git-branch.jsx +15 -0
  418. package/src/icons/icons2/git-commit.jsx +17 -0
  419. package/src/icons/icons2/git-fork.jsx +15 -0
  420. package/src/icons/icons2/git-pull.jsx +15 -0
  421. package/src/icons/icons2/gitter.jsx +15 -0
  422. package/src/icons/icons2/glass-alt.jsx +17 -0
  423. package/src/icons/icons2/glass.jsx +17 -0
  424. package/src/icons/icons2/globe-alt.jsx +17 -0
  425. package/src/icons/icons2/globe.jsx +21 -0
  426. package/src/icons/icons2/google-tasks.jsx +19 -0
  427. package/src/icons/icons2/google.jsx +15 -0
  428. package/src/icons/icons2/gym.jsx +31 -0
  429. package/src/icons/icons2/hashtag.jsx +17 -0
  430. package/src/icons/icons2/headset.jsx +17 -0
  431. package/src/icons/icons2/heart.jsx +17 -0
  432. package/src/icons/icons2/hello.jsx +21 -0
  433. package/src/icons/icons2/home-alt.jsx +17 -0
  434. package/src/icons/icons2/home-screen.jsx +57 -0
  435. package/src/icons/icons2/home.jsx +17 -0
  436. package/src/icons/icons2/icecream.jsx +17 -0
  437. package/src/icons/icons2/if-design.jsx +19 -0
  438. package/src/icons/icons2/image.jsx +23 -0
  439. package/src/icons/icons2/import.jsx +19 -0
  440. package/src/icons/icons2/inbox.jsx +17 -0
  441. package/src/icons/icons2/indie-hackers.jsx +13 -0
  442. package/src/icons/icons2/infinity.jsx +15 -0
  443. package/src/icons/icons2/info.jsx +25 -0
  444. package/src/icons/icons2/inpicture.jsx +18 -0
  445. package/src/icons/icons2/insert-after-o.jsx +25 -0
  446. package/src/icons/icons2/insert-after-r.jsx +25 -0
  447. package/src/icons/icons2/insert-after.jsx +19 -0
  448. package/src/icons/icons2/insert-before-o.jsx +25 -0
  449. package/src/icons/icons2/insert-before-r.jsx +25 -0
  450. package/src/icons/icons2/insert-before.jsx +19 -0
  451. package/src/icons/icons2/insights.jsx +17 -0
  452. package/src/icons/icons2/instagram.jsx +27 -0
  453. package/src/icons/icons2/internal.jsx +19 -0
  454. package/src/icons/icons2/key.jsx +17 -0
  455. package/src/icons/icons2/keyboard.jsx +45 -0
  456. package/src/icons/icons2/keyhole.jsx +23 -0
  457. package/src/icons/icons2/laptop.jsx +21 -0
  458. package/src/icons/icons2/lastpass.jsx +27 -0
  459. package/src/icons/icons2/layout-grid-small.jsx +21 -0
  460. package/src/icons/icons2/layout-grid.jsx +15 -0
  461. package/src/icons/icons2/layout-list.jsx +17 -0
  462. package/src/icons/icons2/layout-pin.jsx +17 -0
  463. package/src/icons/icons2/linear.jsx +27 -0
  464. package/src/icons/icons2/link.jsx +23 -0
  465. package/src/icons/icons2/list-tree.jsx +17 -0
  466. package/src/icons/icons2/list.jsx +17 -0
  467. package/src/icons/icons2/live-photo.jsx +87 -0
  468. package/src/icons/icons2/loadbar-alt.jsx +13 -0
  469. package/src/icons/icons2/loadbar-doc.jsx +20 -0
  470. package/src/icons/icons2/loadbar-sound.jsx +14 -0
  471. package/src/icons/icons2/loadbar.jsx +12 -0
  472. package/src/icons/icons2/lock-unlock.jsx +17 -0
  473. package/src/icons/icons2/lock.jsx +17 -0
  474. package/src/icons/icons2/log-in.jsx +19 -0
  475. package/src/icons/icons2/log-off.jsx +19 -0
  476. package/src/icons/icons2/log-out.jsx +19 -0
  477. package/src/icons/icons2/loupe.jsx +18 -0
  478. package/src/icons/icons2/magnet.jsx +17 -0
  479. package/src/icons/icons2/mail-forward.jsx +15 -0
  480. package/src/icons/icons2/mail-open.jsx +17 -0
  481. package/src/icons/icons2/mail-reply.jsx +15 -0
  482. package/src/icons/icons2/mail.jsx +17 -0
  483. package/src/icons/icons2/math-divide.jsx +23 -0
  484. package/src/icons/icons2/math-equal.jsx +19 -0
  485. package/src/icons/icons2/math-minus.jsx +15 -0
  486. package/src/icons/icons2/math-percent.jsx +23 -0
  487. package/src/icons/icons2/math-plus.jsx +15 -0
  488. package/src/icons/icons2/maximize-alt.jsx +27 -0
  489. package/src/icons/icons2/maximize.jsx +15 -0
  490. package/src/icons/icons2/maze.jsx +19 -0
  491. package/src/icons/icons2/media-live.jsx +29 -0
  492. package/src/icons/icons2/media-podcast.jsx +23 -0
  493. package/src/icons/icons2/menu-boxed.jsx +29 -0
  494. package/src/icons/icons2/menu-cake.jsx +27 -0
  495. package/src/icons/icons2/menu-cheese.jsx +23 -0
  496. package/src/icons/icons2/menu-grid-o.jsx +47 -0
  497. package/src/icons/icons2/menu-grid-r.jsx +20 -0
  498. package/src/icons/icons2/menu-hotdog.jsx +23 -0
  499. package/src/icons/icons2/menu-left-alt.jsx +23 -0
  500. package/src/icons/icons2/menu-left.jsx +23 -0
  501. package/src/icons/icons2/menu-motion.jsx +23 -0
  502. package/src/icons/icons2/menu-oreos.jsx +27 -0
  503. package/src/icons/icons2/menu-right-alt.jsx +23 -0
  504. package/src/icons/icons2/menu-right.jsx +23 -0
  505. package/src/icons/icons2/menu-round.jsx +29 -0
  506. package/src/icons/icons2/menu.jsx +23 -0
  507. package/src/icons/icons2/merge-horizontal.jsx +23 -0
  508. package/src/icons/icons2/merge-vertical.jsx +23 -0
  509. package/src/icons/icons2/mic.jsx +21 -0
  510. package/src/icons/icons2/microbit.jsx +25 -0
  511. package/src/icons/icons2/microsoft.jsx +15 -0
  512. package/src/icons/icons2/mini-player.jsx +17 -0
  513. package/src/icons/icons2/minimize-alt.jsx +19 -0
  514. package/src/icons/icons2/minimize.jsx +15 -0
  515. package/src/icons/icons2/modem.jsx +21 -0
  516. package/src/icons/icons2/monday.jsx +23 -0
  517. package/src/icons/icons2/moon.jsx +17 -0
  518. package/src/icons/icons2/more-alt.jsx +23 -0
  519. package/src/icons/icons2/more-o.jsx +29 -0
  520. package/src/icons/icons2/more-r.jsx +29 -0
  521. package/src/icons/icons2/more-vertical-alt.jsx +23 -0
  522. package/src/icons/icons2/more-vertical-o.jsx +29 -0
  523. package/src/icons/icons2/more-vertical-r.jsx +29 -0
  524. package/src/icons/icons2/more-vertical.jsx +17 -0
  525. package/src/icons/icons2/more.jsx +29 -0
  526. package/src/icons/icons2/mouse.jsx +21 -0
  527. package/src/icons/icons2/move-down.jsx +17 -0
  528. package/src/icons/icons2/move-left.jsx +17 -0
  529. package/src/icons/icons2/move-right.jsx +17 -0
  530. package/src/icons/icons2/move-task.jsx +15 -0
  531. package/src/icons/icons2/move-up.jsx +17 -0
  532. package/src/icons/icons2/music-note.jsx +17 -0
  533. package/src/icons/icons2/music-speaker.jsx +27 -0
  534. package/src/icons/icons2/music.jsx +17 -0
  535. package/src/icons/icons2/nametag.jsx +21 -0
  536. package/src/icons/icons2/notes.jsx +33 -0
  537. package/src/icons/icons2/notifications.jsx +16 -0
  538. package/src/icons/icons2/npm.jsx +17 -0
  539. package/src/icons/icons2/oculus.jsx +17 -0
  540. package/src/icons/icons2/open-collective.jsx +20 -0
  541. package/src/icons/icons2/options.jsx +23 -0
  542. package/src/icons/icons2/organisation.jsx +19 -0
  543. package/src/icons/icons2/overflow.jsx +25 -0
  544. package/src/icons/icons2/pacman.jsx +21 -0
  545. package/src/icons/icons2/password.jsx +30 -0
  546. package/src/icons/icons2/path-back.jsx +17 -0
  547. package/src/icons/icons2/path-crop.jsx +26 -0
  548. package/src/icons/icons2/path-divide.jsx +14 -0
  549. package/src/icons/icons2/path-exclude.jsx +17 -0
  550. package/src/icons/icons2/path-front.jsx +17 -0
  551. package/src/icons/icons2/path-intersect.jsx +17 -0
  552. package/src/icons/icons2/path-outline.jsx +17 -0
  553. package/src/icons/icons2/path-trim.jsx +13 -0
  554. package/src/icons/icons2/path-unite.jsx +12 -0
  555. package/src/icons/icons2/patreon.jsx +17 -0
  556. package/src/icons/icons2/paypal.jsx +17 -0
  557. package/src/icons/icons2/pen.jsx +21 -0
  558. package/src/icons/icons2/pentagon-bottom-left.jsx +17 -0
  559. package/src/icons/icons2/pentagon-bottom-right.jsx +17 -0
  560. package/src/icons/icons2/pentagon-down.jsx +17 -0
  561. package/src/icons/icons2/pentagon-left.jsx +17 -0
  562. package/src/icons/icons2/pentagon-right.jsx +17 -0
  563. package/src/icons/icons2/pentagon-top-left.jsx +17 -0
  564. package/src/icons/icons2/pentagon-top-right.jsx +17 -0
  565. package/src/icons/icons2/pentagon-up.jsx +17 -0
  566. package/src/icons/icons2/performance.jsx +27 -0
  567. package/src/icons/icons2/pexels.jsx +17 -0
  568. package/src/icons/icons2/phone.jsx +23 -0
  569. package/src/icons/icons2/photoscan.jsx +21 -0
  570. package/src/icons/icons2/piano.jsx +17 -0
  571. package/src/icons/icons2/pill.jsx +17 -0
  572. package/src/icons/icons2/pin-alt.jsx +21 -0
  573. package/src/icons/icons2/pin-bottom.jsx +21 -0
  574. package/src/icons/icons2/pin-top.jsx +21 -0
  575. package/src/icons/icons2/pin.jsx +23 -0
  576. package/src/icons/icons2/play-backwards.jsx +14 -0
  577. package/src/icons/icons2/play-button-o.jsx +18 -0
  578. package/src/icons/icons2/play-button-r.jsx +18 -0
  579. package/src/icons/icons2/play-button.jsx +12 -0
  580. package/src/icons/icons2/play-forwards.jsx +14 -0
  581. package/src/icons/icons2/play-list-add.jsx +15 -0
  582. package/src/icons/icons2/play-list-check.jsx +18 -0
  583. package/src/icons/icons2/play-list-remove.jsx +18 -0
  584. package/src/icons/icons2/play-list-search.jsx +20 -0
  585. package/src/icons/icons2/play-list.jsx +15 -0
  586. package/src/icons/icons2/play-pause-o.jsx +19 -0
  587. package/src/icons/icons2/play-pause-r.jsx +19 -0
  588. package/src/icons/icons2/play-pause.jsx +13 -0
  589. package/src/icons/icons2/play-stop-o.jsx +18 -0
  590. package/src/icons/icons2/play-stop-r.jsx +18 -0
  591. package/src/icons/icons2/play-stop.jsx +12 -0
  592. package/src/icons/icons2/play-track-next-o.jsx +17 -0
  593. package/src/icons/icons2/play-track-next-r.jsx +22 -0
  594. package/src/icons/icons2/play-track-next.jsx +13 -0
  595. package/src/icons/icons2/play-track-prev-o.jsx +23 -0
  596. package/src/icons/icons2/play-track-prev-r.jsx +23 -0
  597. package/src/icons/icons2/play-track-prev.jsx +13 -0
  598. package/src/icons/icons2/plug.jsx +17 -0
  599. package/src/icons/icons2/pocket.jsx +17 -0
  600. package/src/icons/icons2/pokemon.jsx +17 -0
  601. package/src/icons/icons2/polaroid.jsx +17 -0
  602. package/src/icons/icons2/poll.jsx +20 -0
  603. package/src/icons/icons2/presentation.jsx +17 -0
  604. package/src/icons/icons2/printer.jsx +17 -0
  605. package/src/icons/icons2/product-hunt.jsx +17 -0
  606. package/src/icons/icons2/profile.jsx +23 -0
  607. package/src/icons/icons2/pull-clear.jsx +17 -0
  608. package/src/icons/icons2/push-chevron-down-o.jsx +22 -0
  609. package/src/icons/icons2/push-chevron-down-r.jsx +22 -0
  610. package/src/icons/icons2/push-chevron-down.jsx +16 -0
  611. package/src/icons/icons2/push-chevron-left-o.jsx +22 -0
  612. package/src/icons/icons2/push-chevron-left-r.jsx +22 -0
  613. package/src/icons/icons2/push-chevron-left.jsx +16 -0
  614. package/src/icons/icons2/push-chevron-right-o.jsx +22 -0
  615. package/src/icons/icons2/push-chevron-right-r.jsx +22 -0
  616. package/src/icons/icons2/push-chevron-right.jsx +16 -0
  617. package/src/icons/icons2/push-chevron-up-o.jsx +17 -0
  618. package/src/icons/icons2/push-chevron-up-r.jsx +17 -0
  619. package/src/icons/icons2/push-chevron-up.jsx +16 -0
  620. package/src/icons/icons2/push-down.jsx +16 -0
  621. package/src/icons/icons2/push-left.jsx +16 -0
  622. package/src/icons/icons2/push-right.jsx +16 -0
  623. package/src/icons/icons2/push-up.jsx +17 -0
  624. package/src/icons/icons2/qr.jsx +17 -0
  625. package/src/icons/icons2/quote-o.jsx +25 -0
  626. package/src/icons/icons2/quote.jsx +13 -0
  627. package/src/icons/icons2/radio-check.jsx +17 -0
  628. package/src/icons/icons2/radio-checked.jsx +21 -0
  629. package/src/icons/icons2/ratio.jsx +19 -0
  630. package/src/icons/icons2/read.jsx +17 -0
  631. package/src/icons/icons2/readme.jsx +17 -0
  632. package/src/icons/icons2/record.jsx +21 -0
  633. package/src/icons/icons2/redo.jsx +15 -0
  634. package/src/icons/icons2/remote.jsx +19 -0
  635. package/src/icons/icons2/remove-r.jsx +21 -0
  636. package/src/icons/icons2/remove.jsx +21 -0
  637. package/src/icons/icons2/rename.jsx +21 -0
  638. package/src/icons/icons2/reorder.jsx +37 -0
  639. package/src/icons/icons2/repeat.jsx +19 -0
  640. package/src/icons/icons2/ring.jsx +21 -0
  641. package/src/icons/icons2/row-first.jsx +25 -0
  642. package/src/icons/icons2/row-last.jsx +25 -0
  643. package/src/icons/icons2/ruler.jsx +17 -0
  644. package/src/icons/icons2/sand-clock.jsx +21 -0
  645. package/src/icons/icons2/scan.jsx +20 -0
  646. package/src/icons/icons2/screen-mirror.jsx +13 -0
  647. package/src/icons/icons2/screen-shot.jsx +19 -0
  648. package/src/icons/icons2/screen-wide.jsx +17 -0
  649. package/src/icons/icons2/screen.jsx +17 -0
  650. package/src/icons/icons2/scroll-h.jsx +25 -0
  651. package/src/icons/icons2/scroll-v.jsx +25 -0
  652. package/src/icons/icons2/search-found.jsx +21 -0
  653. package/src/icons/icons2/search-loading.jsx +29 -0
  654. package/src/icons/icons2/search.jsx +17 -0
  655. package/src/icons/icons2/select-o.jsx +25 -0
  656. package/src/icons/icons2/select-r.jsx +25 -0
  657. package/src/icons/icons2/select.jsx +19 -0
  658. package/src/icons/icons2/server.jsx +29 -0
  659. package/src/icons/icons2/serverless.jsx +17 -0
  660. package/src/icons/icons2/shape-circle.jsx +17 -0
  661. package/src/icons/icons2/shape-half-circle.jsx +15 -0
  662. package/src/icons/icons2/shape-hexagon.jsx +17 -0
  663. package/src/icons/icons2/shape-rhombus.jsx +17 -0
  664. package/src/icons/icons2/shape-square.jsx +17 -0
  665. package/src/icons/icons2/shape-triangle.jsx +17 -0
  666. package/src/icons/icons2/shape-zigzag.jsx +17 -0
  667. package/src/icons/icons2/share.jsx +15 -0
  668. package/src/icons/icons2/shield.jsx +17 -0
  669. package/src/icons/icons2/shopping-bag.jsx +17 -0
  670. package/src/icons/icons2/shopping-cart.jsx +25 -0
  671. package/src/icons/icons2/shortcut.jsx +21 -0
  672. package/src/icons/icons2/shutterstock.jsx +25 -0
  673. package/src/icons/icons2/sidebar-open.jsx +17 -0
  674. package/src/icons/icons2/sidebar-right.jsx +18 -0
  675. package/src/icons/icons2/sidebar.jsx +18 -0
  676. package/src/icons/icons2/signal.jsx +23 -0
  677. package/src/icons/icons2/size.jsx +17 -0
  678. package/src/icons/icons2/sketch.jsx +18 -0
  679. package/src/icons/icons2/slack.jsx +17 -0
  680. package/src/icons/icons2/sleep.jsx +17 -0
  681. package/src/icons/icons2/smart-home-boiler.jsx +17 -0
  682. package/src/icons/icons2/smart-home-cooker.jsx +23 -0
  683. package/src/icons/icons2/smart-home-heat.jsx +21 -0
  684. package/src/icons/icons2/smart-home-light.jsx +29 -0
  685. package/src/icons/icons2/smart-home-refrigerator.jsx +25 -0
  686. package/src/icons/icons2/smart-home-wash-machine.jsx +17 -0
  687. package/src/icons/icons2/smartphone-chip.jsx +23 -0
  688. package/src/icons/icons2/smartphone-ram.jsx +65 -0
  689. package/src/icons/icons2/smartphone-shake.jsx +22 -0
  690. package/src/icons/icons2/smartphone.jsx +18 -0
  691. package/src/icons/icons2/smile-mouth-open.jsx +29 -0
  692. package/src/icons/icons2/smile-neutral.jsx +29 -0
  693. package/src/icons/icons2/smile-no-mouth.jsx +25 -0
  694. package/src/icons/icons2/smile-none.jsx +29 -0
  695. package/src/icons/icons2/smile-sad.jsx +29 -0
  696. package/src/icons/icons2/smile-upside.jsx +29 -0
  697. package/src/icons/icons2/smile.jsx +29 -0
  698. package/src/icons/icons2/software-download.jsx +19 -0
  699. package/src/icons/icons2/software-upload.jsx +19 -0
  700. package/src/icons/icons2/sort-az.jsx +23 -0
  701. package/src/icons/icons2/sort-za.jsx +23 -0
  702. package/src/icons/icons2/space-between-v.jsx +14 -0
  703. package/src/icons/icons2/space-between.jsx +14 -0
  704. package/src/icons/icons2/spectrum.jsx +15 -0
  705. package/src/icons/icons2/spinner-alt.jsx +15 -0
  706. package/src/icons/icons2/spinner-two-alt.jsx +19 -0
  707. package/src/icons/icons2/spinner-two.jsx +26 -0
  708. package/src/icons/icons2/spinner.jsx +22 -0
  709. package/src/icons/icons2/square.jsx +18 -0
  710. package/src/icons/icons2/stack.jsx +19 -0
  711. package/src/icons/icons2/stark.jsx +15 -0
  712. package/src/icons/icons2/stopwatch.jsx +22 -0
  713. package/src/icons/icons2/stories.jsx +25 -0
  714. package/src/icons/icons2/studio.jsx +18 -0
  715. package/src/icons/icons2/style.jsx +25 -0
  716. package/src/icons/icons2/sun.jsx +23 -0
  717. package/src/icons/icons2/support.jsx +17 -0
  718. package/src/icons/icons2/swap-vertical.jsx +13 -0
  719. package/src/icons/icons2/swap.jsx +13 -0
  720. package/src/icons/icons2/sweden.jsx +15 -0
  721. package/src/icons/icons2/swiss.jsx +17 -0
  722. package/src/icons/icons2/sync.jsx +19 -0
  723. package/src/icons/icons2/tab.jsx +17 -0
  724. package/src/icons/icons2/tag.jsx +23 -0
  725. package/src/icons/icons2/tally.jsx +27 -0
  726. package/src/icons/icons2/tap-double.jsx +31 -0
  727. package/src/icons/icons2/tap-single.jsx +25 -0
  728. package/src/icons/icons2/template.jsx +26 -0
  729. package/src/icons/icons2/tennis.jsx +17 -0
  730. package/src/icons/icons2/terminal.jsx +22 -0
  731. package/src/icons/icons2/terrain.jsx +16 -0
  732. package/src/icons/icons2/thermometer.jsx +21 -0
  733. package/src/icons/icons2/thermostat.jsx +21 -0
  734. package/src/icons/icons2/tikcode.jsx +32 -0
  735. package/src/icons/icons2/time.jsx +18 -0
  736. package/src/icons/icons2/timelapse.jsx +21 -0
  737. package/src/icons/icons2/timer.jsx +19 -0
  738. package/src/icons/icons2/today.jsx +22 -0
  739. package/src/icons/icons2/toggle-off.jsx +21 -0
  740. package/src/icons/icons2/toggle-on.jsx +21 -0
  741. package/src/icons/icons2/toggle-square-off.jsx +21 -0
  742. package/src/icons/icons2/toggle-square.jsx +21 -0
  743. package/src/icons/icons2/toolbar-bottom.jsx +18 -0
  744. package/src/icons/icons2/toolbar-left.jsx +18 -0
  745. package/src/icons/icons2/toolbar-right.jsx +18 -0
  746. package/src/icons/icons2/toolbar-top.jsx +18 -0
  747. package/src/icons/icons2/toolbox.jsx +17 -0
  748. package/src/icons/icons2/touchpad.jsx +17 -0
  749. package/src/icons/icons2/track.jsx +21 -0
  750. package/src/icons/icons2/transcript.jsx +33 -0
  751. package/src/icons/icons2/trash-empty.jsx +17 -0
  752. package/src/icons/icons2/trash.jsx +19 -0
  753. package/src/icons/icons2/tree.jsx +17 -0
  754. package/src/icons/icons2/trees.jsx +17 -0
  755. package/src/icons/icons2/trello.jsx +25 -0
  756. package/src/icons/icons2/trending-down.jsx +15 -0
  757. package/src/icons/icons2/trending.jsx +15 -0
  758. package/src/icons/icons2/trophy.jsx +19 -0
  759. package/src/icons/icons2/tv.jsx +18 -0
  760. package/src/icons/icons2/twilio.jsx +33 -0
  761. package/src/icons/icons2/twitter.jsx +17 -0
  762. package/src/icons/icons2/ui-kit.jsx +25 -0
  763. package/src/icons/icons2/umbrella.jsx +17 -0
  764. package/src/icons/icons2/unavailable.jsx +17 -0
  765. package/src/icons/icons2/unblock.jsx +17 -0
  766. package/src/icons/icons2/undo.jsx +15 -0
  767. package/src/icons/icons2/unfold.jsx +15 -0
  768. package/src/icons/icons2/unsplash.jsx +13 -0
  769. package/src/icons/icons2/usb-c.jsx +21 -0
  770. package/src/icons/icons2/usb.jsx +19 -0
  771. package/src/icons/icons2/user-add.jsx +22 -0
  772. package/src/icons/icons2/user-list.jsx +24 -0
  773. package/src/icons/icons2/user-remove.jsx +22 -0
  774. package/src/icons/icons2/user.jsx +21 -0
  775. package/src/icons/icons2/userlane.jsx +20 -0
  776. package/src/icons/icons2/vercel.jsx +15 -0
  777. package/src/icons/icons2/view-cols.jsx +17 -0
  778. package/src/icons/icons2/view-comfortable.jsx +17 -0
  779. package/src/icons/icons2/view-day.jsx +17 -0
  780. package/src/icons/icons2/view-grid.jsx +17 -0
  781. package/src/icons/icons2/view-list.jsx +17 -0
  782. package/src/icons/icons2/view-month.jsx +17 -0
  783. package/src/icons/icons2/view-split.jsx +17 -0
  784. package/src/icons/icons2/vinyl.jsx +21 -0
  785. package/src/icons/icons2/voicemail-o.jsx +23 -0
  786. package/src/icons/icons2/voicemail-r.jsx +23 -0
  787. package/src/icons/icons2/voicemail.jsx +17 -0
  788. package/src/icons/icons2/volume.jsx +25 -0
  789. package/src/icons/icons2/webcam.jsx +21 -0
  790. package/src/icons/icons2/website.jsx +35 -0
  791. package/src/icons/icons2/windows.jsx +15 -0
  792. package/src/icons/icons2/work-alt.jsx +17 -0
  793. package/src/icons/icons2/yinyang.jsx +21 -0
  794. package/src/icons/icons2/youtube.jsx +17 -0
  795. package/src/icons/icons2/zoom-in.jsx +17 -0
  796. package/src/icons/icons2/zoom-out.jsx +17 -0
  797. package/src/image/Image.jsx +87 -0
  798. package/src/image/Image.stories.jsx +17 -0
  799. package/src/image/index.js +1 -0
  800. package/src/image-card/Card.stories.jsx +22 -0
  801. package/src/image-card/ImageCard.jsx +100 -0
  802. package/src/image-card/index.js +1 -0
  803. package/src/index.js +47 -0
  804. package/src/inputs/FileField.jsx +197 -0
  805. package/src/inputs/Input.jsx +209 -0
  806. package/src/inputs/Input.stories.jsx +22 -0
  807. package/src/inputs/LocalFilePreview.jsx +63 -0
  808. package/src/inputs/acceptsFile.js +24 -0
  809. package/src/inputs/index.js +4 -0
  810. package/src/list/List.jsx +85 -0
  811. package/src/list/List.stories.jsx +87 -0
  812. package/src/list/index.js +1 -0
  813. package/src/locale/LocaleProvider.jsx +72 -0
  814. package/src/locale/index.js +1 -0
  815. package/src/markdown-viewer/MarkdownViewer.jsx +154 -0
  816. package/src/markdown-viewer/MarkdownViewer.stories.jsx +35 -0
  817. package/src/markdown-viewer/index.js +1 -0
  818. package/src/markdown-viewer/styles/atom-one-light.js +114 -0
  819. package/src/overlay/Overlay.jsx +75 -0
  820. package/src/overlay/index.js +1 -0
  821. package/src/overlay/overlay.stories.jsx +38 -0
  822. package/src/page/DemoSidebar.jsx +84 -0
  823. package/src/page/Page.jsx +112 -0
  824. package/src/page/Page.stories.jsx +66 -0
  825. package/src/page/index.js +1 -0
  826. package/src/page-section/PageSection.jsx +48 -0
  827. package/src/page-section/PageSection.stories.jsx +20 -0
  828. package/src/page-section/index.js +1 -0
  829. package/src/profile/Profile.jsx +127 -0
  830. package/src/profile/Profile.stories.jsx +23 -0
  831. package/src/profile/index.js +1 -0
  832. package/src/public.index.js +1 -0
  833. package/src/separator/Separator.jsx +29 -0
  834. package/src/separator/Separator.stories.jsx +9 -0
  835. package/src/separator/index.js +1 -0
  836. package/src/slot/index.js +1 -0
  837. package/src/sv.translations.json +46 -0
  838. package/src/switch/Switch.jsx +13 -0
  839. package/src/switch/index.js +1 -0
  840. package/src/switch/switch.stories.jsx +16 -0
  841. package/src/table/Table.jsx +78 -0
  842. package/src/table/Table.stories.jsx +24 -0
  843. package/src/table/index.js +1 -0
  844. package/src/tabs/Tabs.jsx +66 -0
  845. package/src/tabs/Tabs.stories.jsx +53 -0
  846. package/src/tabs/index.js +1 -0
  847. package/src/tags/Tags.jsx +72 -0
  848. package/src/tags/Tags.stories.jsx +25 -0
  849. package/src/tags/index.js +1 -0
  850. package/src/text/Text.jsx +64 -0
  851. package/src/text/Text.stories.jsx +32 -0
  852. package/src/text/index.js +1 -0
  853. package/src/theme/Theme.jsx +110 -0
  854. package/src/theme/Theme.stories.jsx +63 -0
  855. package/src/theme/createCss.js +141 -0
  856. package/src/theme/index.js +2 -0
  857. package/src/theme/toHsl.js +97 -0
  858. package/src/view/Layout.stories.jsx +28 -0
  859. package/src/view/View.jsx +498 -0
  860. package/src/view/View.stories.jsx +44 -0
  861. package/src/view/index.js +1 -0
@@ -0,0 +1,357 @@
1
+ import React, { useState } from 'react'
2
+ import { ComponentSlotsProvider } from '../component-slots'
3
+ import { Input } from '../inputs'
4
+ import { Button } from '../button'
5
+ import { View } from '../view'
6
+ import {
7
+ Fields,
8
+ applyFieldChange,
9
+ FIELD_TYPES,
10
+ DEFAULT_FORM_FIELD_SLOTS,
11
+ } from './index.js'
12
+
13
+ const mutedTextStyle = {
14
+ fontSize: 14,
15
+ color: 'color-mix(in srgb, var(--text-default-color, CanvasText) 72%, transparent)',
16
+ marginBottom: 'var(--space-m)',
17
+ }
18
+
19
+ const dataPreviewStyle = {
20
+ margin: 0,
21
+ padding: 'var(--space-s)',
22
+ background: 'var(--color-secondary)',
23
+ color: 'var(--text-default-color, CanvasText)',
24
+ borderRadius: 'var(--space-xs)',
25
+ border: '1px solid var(--separator-primary)',
26
+ fontSize: 12,
27
+ overflow: 'auto',
28
+ }
29
+
30
+ export default {
31
+ title: 'Design System/Forms/Fields',
32
+ component: Fields,
33
+ parameters: {
34
+ layout: 'fullscreen',
35
+ docs: {
36
+ story: {
37
+ inline: true,
38
+ height: 'auto',
39
+ },
40
+ },
41
+ },
42
+ }
43
+
44
+ const shell = (story, initial = {}) => {
45
+ const Shell = () => {
46
+ const [data, setData] = useState(initial)
47
+ return (
48
+ <View
49
+ surface="primary"
50
+ inset="m"
51
+ roundness="m"
52
+ gap="m"
53
+ style={{ maxWidth: 480, fontFamily: 'system-ui, sans-serif' }}
54
+ >
55
+ {story(data, e => setData(prev => applyFieldChange(prev, e)))}
56
+ <pre style={dataPreviewStyle}>{JSON.stringify(data, null, 2)}</pre>
57
+ </View>
58
+ )
59
+ }
60
+ return <Shell />
61
+ }
62
+
63
+ export const AllAllowedTypes = () =>
64
+ shell((data, onChange) => (
65
+ <>
66
+ <p style={mutedTextStyle}>
67
+ Allowed API types: {FIELD_TYPES.join(', ')}
68
+ </p>
69
+ <Fields
70
+ data={data}
71
+ onChange={onChange}
72
+ fields={[
73
+ { name: 'Title', type: 'text', required: true },
74
+ { name: 'Summary', type: 'textarea' },
75
+ { name: 'Body', type: 'richtext' },
76
+ { name: 'Count', type: 'number' },
77
+ { name: 'Kind', type: 'select', options: ['A', 'B', 'C'] },
78
+ { name: 'Tags', type: 'multiselect', options: ['x', 'y', 'z'] },
79
+ { name: 'Hero', type: 'file', accept: 'image/*' },
80
+ { name: 'Attachments', type: 'file', max: 3 },
81
+ { name: 'Cover', type: 'image' },
82
+ { name: 'Published', type: 'boolean' },
83
+ { name: 'Start date', type: 'date' },
84
+ { name: 'Vacation', type: 'date-range' },
85
+ { name: 'Blackouts', type: 'date-ranges' },
86
+ ]}
87
+ />
88
+ </>
89
+ ), {
90
+ Title: 'Example',
91
+ Kind: 'B',
92
+ Tags: ['x'],
93
+ Published: false,
94
+ 'Start date': Date.parse('2025-01-15T00:00:00.000Z'),
95
+ Vacation: { start: Date.parse('2025-07-01T00:00:00.000Z'), end: Date.parse('2025-07-14T00:00:00.000Z') },
96
+ Blackouts: [
97
+ { start: Date.parse('2025-12-24T00:00:00.000Z'), end: Date.parse('2025-12-26T00:00:00.000Z') },
98
+ ],
99
+ })
100
+
101
+ export const Text = () =>
102
+ shell(
103
+ (data, onChange) => (
104
+ <Fields data={data} onChange={onChange} fields={[{ name: 'Label', type: 'text' }]} />
105
+ ),
106
+ { Label: 'Hello' },
107
+ )
108
+
109
+ export const Textarea = () =>
110
+ shell(
111
+ (data, onChange) => (
112
+ <Fields
113
+ data={data}
114
+ onChange={onChange}
115
+ fields={[{ name: 'Notes', type: 'textarea' }]}
116
+ />
117
+ ),
118
+ { Notes: 'Multi\nline' },
119
+ )
120
+
121
+ export const Richtext = () =>
122
+ shell(
123
+ (data, onChange) => (
124
+ <Fields data={data} onChange={onChange} fields={[{ name: 'Article', type: 'richtext' }]} />
125
+ ),
126
+ { Article: '# Heading\n\nParagraph.' },
127
+ )
128
+
129
+ export const Number = () =>
130
+ shell(
131
+ (data, onChange) => (
132
+ <Fields data={data} onChange={onChange} fields={[{ name: 'Amount', type: 'number' }]} />
133
+ ),
134
+ { Amount: 42 },
135
+ )
136
+
137
+ export const Select = () =>
138
+ shell(
139
+ (data, onChange) => (
140
+ <Fields
141
+ data={data}
142
+ onChange={onChange}
143
+ fields={[{ name: 'Choice', type: 'select', options: ['One', 'Two', 'Three'] }]}
144
+ />
145
+ ),
146
+ { Choice: 'Two' },
147
+ )
148
+
149
+ export const MultiselectTags = () =>
150
+ shell(
151
+ (data, onChange) => (
152
+ <Fields
153
+ data={data}
154
+ onChange={onChange}
155
+ fields={[
156
+ {
157
+ name: 'Skills',
158
+ type: 'multiselect',
159
+ options: ['React', 'Design', 'Writing'],
160
+ },
161
+ ]}
162
+ />
163
+ ),
164
+ { Skills: ['React', 'Custom skill'] },
165
+ )
166
+
167
+ export const File = () =>
168
+ shell(
169
+ (data, onChange) => (
170
+ <Fields
171
+ data={data}
172
+ onChange={onChange}
173
+ fields={[{ name: 'Attachment', type: 'file', accept: '.pdf,image/*' }]}
174
+ />
175
+ ),
176
+ {},
177
+ )
178
+
179
+ export const FileMulti = () =>
180
+ shell(
181
+ (data, onChange) => (
182
+ <Fields
183
+ data={data}
184
+ onChange={onChange}
185
+ fields={[{ name: 'Gallery', type: 'file', accept: 'image/*', max: 3 }]}
186
+ />
187
+ ),
188
+ { Gallery: [{ resourceId: 'mock-res-1' }] },
189
+ )
190
+
191
+ export const Image = () =>
192
+ shell(
193
+ (data, onChange) => (
194
+ <Fields data={data} onChange={onChange} fields={[{ name: 'Cover', type: 'image' }]} />
195
+ ),
196
+ {},
197
+ )
198
+
199
+ const MockUploadFileField = ({ name, onChange }) => (
200
+ <Button
201
+ type="button"
202
+ variant="neutral"
203
+ onClick={() =>
204
+ onChange({
205
+ target: {
206
+ name,
207
+ id: name,
208
+ dataset: { ossyFileResourceReplace: 'true' },
209
+ value: JSON.stringify({ resourceId: 'storybook-mock-resource' }),
210
+ },
211
+ })
212
+ }
213
+ >
214
+ Mock upload
215
+ </Button>
216
+ )
217
+
218
+ /** Mock `@ossy/design-system/input/file` via component slots. */
219
+ export const FileWithMockPlatformSlot = () => {
220
+ const Shell = () => {
221
+ const [data, setData] = useState({})
222
+ return (
223
+ <View
224
+ surface="primary"
225
+ inset="m"
226
+ roundness="m"
227
+ gap="m"
228
+ style={{ maxWidth: 480, fontFamily: 'system-ui, sans-serif' }}
229
+ >
230
+ <ComponentSlotsProvider
231
+ slots={{
232
+ ...DEFAULT_FORM_FIELD_SLOTS,
233
+ '@ossy/design-system/input/file': MockUploadFileField,
234
+ }}
235
+ >
236
+ <Fields
237
+ data={data}
238
+ onChange={e => setData(prev => applyFieldChange(prev, e))}
239
+ fields={[{ name: 'Avatar', type: 'file', accept: 'image/*' }]}
240
+ />
241
+ </ComponentSlotsProvider>
242
+ <pre style={dataPreviewStyle}>{JSON.stringify(data, null, 2)}</pre>
243
+ </View>
244
+ )
245
+ }
246
+ return <Shell />
247
+ }
248
+
249
+ export const Boolean = () =>
250
+ shell(
251
+ (data, onChange) => (
252
+ <Fields data={data} onChange={onChange} fields={[{ name: 'Agree', type: 'boolean' }]} />
253
+ ),
254
+ { Agree: true },
255
+ )
256
+
257
+ export const DateField = () =>
258
+ shell(
259
+ (data, onChange) => (
260
+ <Fields data={data} onChange={onChange} fields={[{ name: 'Due', type: 'date' }]} />
261
+ ),
262
+ { Due: '2026-06-01' },
263
+ )
264
+
265
+ DateField.storyName = 'Date'
266
+
267
+ export const DateRange = () =>
268
+ shell(
269
+ (data, onChange) => (
270
+ <Fields
271
+ data={data}
272
+ onChange={onChange}
273
+ fields={[{ name: 'Vacation', type: 'date-range' }]}
274
+ />
275
+ ),
276
+ {
277
+ Vacation: {
278
+ start: Date.parse('2025-07-01T00:00:00.000Z'),
279
+ end: Date.parse('2025-07-14T00:00:00.000Z'),
280
+ },
281
+ },
282
+ )
283
+
284
+ export const DateRanges = () =>
285
+ shell(
286
+ (data, onChange) => (
287
+ <Fields
288
+ data={data}
289
+ onChange={onChange}
290
+ fields={[{ name: 'Blackouts', type: 'date-ranges' }]}
291
+ />
292
+ ),
293
+ {
294
+ Blackouts: [
295
+ {
296
+ start: Date.parse('2025-12-24T00:00:00.000Z'),
297
+ end: Date.parse('2025-12-26T00:00:00.000Z'),
298
+ },
299
+ {
300
+ start: Date.parse('2026-01-01T00:00:00.000Z'),
301
+ end: Date.parse('2026-01-02T00:00:00.000Z'),
302
+ },
303
+ ],
304
+ },
305
+ )
306
+
307
+ const TomatoTextField = ({ label, value, onChange, style = {}, ...rest }) => (
308
+ <Input
309
+ {...rest}
310
+ id={label}
311
+ type="text"
312
+ value={value ?? ''}
313
+ onChange={onChange}
314
+ style={{
315
+ minWidth: '50%',
316
+ ...style,
317
+ borderColor: 'tomato',
318
+ borderWidth: 2,
319
+ borderStyle: 'solid',
320
+ }}
321
+ />
322
+ )
323
+
324
+ /** Override `@ossy/design-system/input/text` via component slots. */
325
+ export const SlotOverrideFormFieldText = () => {
326
+ const Shell = () => {
327
+ const [data, setData] = useState({ Title: 'Custom slot' })
328
+ return (
329
+ <View
330
+ surface="primary"
331
+ inset="m"
332
+ roundness="m"
333
+ gap="m"
334
+ style={{ maxWidth: 480, fontFamily: 'system-ui, sans-serif' }}
335
+ >
336
+ <p style={{ ...mutedTextStyle, marginBottom: 'var(--space-s)' }}>
337
+ <code>@ossy/design-system/input/text</code> uses a custom component registered on that
338
+ slot key.
339
+ </p>
340
+ <ComponentSlotsProvider
341
+ slots={{
342
+ ...DEFAULT_FORM_FIELD_SLOTS,
343
+ '@ossy/design-system/input/text': TomatoTextField,
344
+ }}
345
+ >
346
+ <Fields
347
+ data={data}
348
+ onChange={e => setData(prev => applyFieldChange(prev, e))}
349
+ fields={[{ name: 'Title', type: 'text', required: true }]}
350
+ />
351
+ </ComponentSlotsProvider>
352
+ <pre style={dataPreviewStyle}>{JSON.stringify(data, null, 2)}</pre>
353
+ </View>
354
+ )
355
+ }
356
+ return <Shell />
357
+ }
@@ -0,0 +1,132 @@
1
+ function setAtPath(obj, path, value) {
2
+ if (path.length === 0) return obj
3
+ const [head, ...rest] = path
4
+ if (rest.length === 0) {
5
+ return { ...obj, [head]: value }
6
+ }
7
+ const prevChild = obj[head]
8
+ const child =
9
+ prevChild && typeof prevChild === 'object' && !Array.isArray(prevChild)
10
+ ? prevChild
11
+ : {}
12
+ return { ...obj, [head]: setAtPath(child, rest, value) }
13
+ }
14
+
15
+ function changePathFromTarget(t) {
16
+ if (t.type === 'radio') {
17
+ return [t.name]
18
+ }
19
+ if (typeof t.id === 'string' && t.id.length > 0) {
20
+ return t.id.split('.')
21
+ }
22
+ if (typeof t.name === 'string' && t.name.length > 0) {
23
+ return [t.name]
24
+ }
25
+ return []
26
+ }
27
+
28
+ /**
29
+ * Immutable update for document `content` keyed by template field names.
30
+ *
31
+ * - Dotted `id` paths map to nested keys (split on `.`).
32
+ * - Legacy multiselect: checkboxes with `data-ossy-multiselect` and `data-ossy-option`.
33
+ * - Tags-style multiselect: `data-ossy-multiselect-replace` with `id` = field name and
34
+ * `value` = JSON.stringify(string[]).
35
+ * - File fields: `data-ossy-file-resource-replace` with `value` = JSON.stringify(
36
+ * `{ resourceId }` or `{ resourceId }[]`).
37
+ *
38
+ * @param {Record<string, unknown>} data
39
+ * @param {import('react').ChangeEvent<HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement> | { target: Partial<HTMLInputElement> & { dataset?: DOMStringMap, value?: string } }} event
40
+ * @returns {Record<string, unknown>}
41
+ */
42
+ export function applyFieldChange(data, event) {
43
+ const base =
44
+ data === undefined || data === null
45
+ ? {}
46
+ : typeof data === 'object' && !Array.isArray(data)
47
+ ? { ...data }
48
+ : {}
49
+
50
+ const t = event?.target
51
+ if (!t) return base
52
+
53
+ if (t.dataset?.ossyMultiselectReplace === 'true') {
54
+ const fieldName = typeof t.id === 'string' ? t.id : ''
55
+ if (!fieldName) return base
56
+ let next
57
+ try {
58
+ next = JSON.parse(t.value || '[]')
59
+ } catch {
60
+ return base
61
+ }
62
+ if (!Array.isArray(next) || !next.every(x => typeof x === 'string')) return base
63
+ return { ...base, [fieldName]: next }
64
+ }
65
+
66
+ if (t.dataset?.ossyFileResourceReplace === 'true') {
67
+ const fieldName = typeof t.name === 'string' && t.name ? t.name : (typeof t.id === 'string' ? t.id : '')
68
+ if (!fieldName) return base
69
+ let next
70
+ try {
71
+ next = JSON.parse(t.value || 'null')
72
+ } catch {
73
+ return base
74
+ }
75
+ return { ...base, [fieldName]: next }
76
+ }
77
+
78
+ if (t.dataset?.ossyDateRangeReplace === 'true') {
79
+ const fieldName = typeof t.id === 'string' ? t.id : (typeof t.name === 'string' ? t.name : '')
80
+ if (!fieldName) return base
81
+ let next
82
+ try {
83
+ next = JSON.parse(t.value || 'null')
84
+ } catch {
85
+ return base
86
+ }
87
+ if (!next || typeof next !== 'object' || Array.isArray(next)) return base
88
+ return { ...base, [fieldName]: next }
89
+ }
90
+
91
+ if (t.dataset?.ossyDateRangesReplace === 'true') {
92
+ const fieldName = typeof t.id === 'string' ? t.id : (typeof t.name === 'string' ? t.name : '')
93
+ if (!fieldName) return base
94
+ let next
95
+ try {
96
+ next = JSON.parse(t.value || '[]')
97
+ } catch {
98
+ return base
99
+ }
100
+ if (!Array.isArray(next)) return base
101
+ return { ...base, [fieldName]: next }
102
+ }
103
+
104
+ if (t.type === 'checkbox' && t.dataset?.ossyMultiselect === 'true') {
105
+ const fieldName = t.name
106
+ const option = t.dataset?.ossyOption
107
+ if (!fieldName || option === undefined) return base
108
+ const prev = Array.isArray(base[fieldName]) ? [...base[fieldName]] : []
109
+ const next = t.checked
110
+ ? [...new Set([...prev, option])]
111
+ : prev.filter(x => x !== option)
112
+ return { ...base, [fieldName]: next }
113
+ }
114
+
115
+ let value
116
+ if (t.type === 'checkbox') {
117
+ value = t.checked
118
+ } else if (t.type === 'file') {
119
+ value = t.files?.[0]
120
+ } else if (t.type === 'number') {
121
+ value = t.value === '' || t.value === undefined || t.value === null
122
+ ? undefined
123
+ : Number(t.value)
124
+ } else {
125
+ value = t.value
126
+ }
127
+
128
+ const path = changePathFromTarget(t)
129
+ if (path.length === 0) return base
130
+
131
+ return setAtPath(base, path, value)
132
+ }
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Resource-anchored field copy keys: `{schemaId}.{fieldName}.{suffix}`.
3
+ *
4
+ * @param {string} schemaId Resource schema id (e.g. `@ossy/authentication/sign-up`)
5
+ * @param {string} fieldName Field `name` from resource schema
6
+ * @param {'label' | 'placeholder' | 'description'} suffix
7
+ */
8
+ export function fieldTranslationKey (schemaId, fieldName, suffix) {
9
+ return `${schemaId}.${fieldName}.${suffix}`
10
+ }
11
+
12
+ /**
13
+ * @param {Record<string, string> | null | undefined} messages
14
+ * @param {string} key
15
+ */
16
+ export function hasTranslation (messages, key) {
17
+ return messages?.[key] != null
18
+ }
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Field `type` values accepted for resource template definitions (aligned with
3
+ * Ossy API validation). Keep in sync with `ALLOWED_FIELD_TYPES` in the API.
4
+ *
5
+ * @readonly
6
+ */
7
+ export const FIELD_TYPES = Object.freeze([
8
+ 'text',
9
+ 'textarea',
10
+ 'richtext',
11
+ 'number',
12
+ 'select',
13
+ 'multiselect',
14
+ 'file',
15
+ 'boolean',
16
+ 'date',
17
+ 'timestamp',
18
+ 'date-range',
19
+ 'date-ranges',
20
+ 'email',
21
+ 'id',
22
+ ])
23
+
24
+ /** @deprecated Use {@link FIELD_TYPES} */
25
+ export const RESOURCE_TEMPLATE_FIELD_TYPES = FIELD_TYPES
@@ -0,0 +1,13 @@
1
+ export { FIELD_TYPES, RESOURCE_TEMPLATE_FIELD_TYPES } from './fieldTypes.js'
2
+ export { normalizeFieldType, resolveFieldDef } from './normalizeFieldType.js'
3
+ export { applyFieldChange } from './applyFieldChange.js'
4
+ export {
5
+ fieldTranslationKey,
6
+ hasTranslation,
7
+ } from './fieldTranslationKeys.js'
8
+ export {
9
+ Fields,
10
+ DEFAULT_FORM_FIELD_SLOTS,
11
+ } from './Fields.jsx'
12
+ export { DatePicker } from './DatePicker.jsx'
13
+ export * from './time.js'
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Normalize template field `type` to the canonical editor type.
3
+ * `image` is an alias for `file` with default `accept: 'image/*'` when accept is omitted.
4
+ *
5
+ * @param {string | undefined} type
6
+ * @returns {{ type: string, defaultAccept?: string }}
7
+ */
8
+ export function normalizeFieldType(type) {
9
+ const raw = typeof type === 'string' ? type.trim() : ''
10
+ if (raw === 'image') return { type: 'file', defaultAccept: 'image/*' }
11
+ return { type: raw || 'text' }
12
+ }
13
+
14
+ /**
15
+ * @param {{ type?: string, accept?: string, min?: number, max?: number } & Record<string, unknown>} field
16
+ * @returns {typeof field & { type: string, accept?: string, max: number }}
17
+ */
18
+ export function resolveFieldDef(field) {
19
+ const { type: canonical, defaultAccept } = normalizeFieldType(field?.type)
20
+ return {
21
+ ...field,
22
+ type: canonical,
23
+ accept: field?.accept ?? defaultAccept,
24
+ max: field?.max ?? 1,
25
+ }
26
+ }
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Form display ↔ persisted ms conversions (ADR 0004).
3
+ * Date-only values use UTC midnight of the calendar day.
4
+ */
5
+
6
+ /**
7
+ * @param {unknown} value — ms number or legacy ISO/date string
8
+ * @returns {string} `YYYY-MM-DD` for `<input type="date">`
9
+ */
10
+ export function msToDateInputValue(value) {
11
+ if (value == null || value === '') return ''
12
+ const ms = typeof value === 'number' ? value : Date.parse(String(value))
13
+ if (Number.isNaN(ms)) return ''
14
+ return new Date(ms).toISOString().slice(0, 10)
15
+ }
16
+
17
+ /**
18
+ * @param {string} value — `YYYY-MM-DD` from date input
19
+ * @returns {number | undefined}
20
+ */
21
+ export function dateInputValueToMs(value) {
22
+ if (!value) return undefined
23
+ const ms = Date.parse(`${value}T00:00:00.000Z`)
24
+ return Number.isNaN(ms) ? undefined : ms
25
+ }
26
+
27
+ /**
28
+ * @param {unknown} value — ms number or legacy ISO string
29
+ * @returns {string} `YYYY-MM-DDTHH:mm` for `<input type="datetime-local">`
30
+ */
31
+ export function msToDatetimeLocalValue(value) {
32
+ if (value == null || value === '') return ''
33
+ const ms = typeof value === 'number' ? value : Date.parse(String(value))
34
+ if (Number.isNaN(ms)) return ''
35
+ const d = new Date(ms)
36
+ const pad = n => String(n).padStart(2, '0')
37
+ return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())}T${pad(d.getHours())}:${pad(d.getMinutes())}`
38
+ }
39
+
40
+ /**
41
+ * @param {string} value — `YYYY-MM-DDTHH:mm` from datetime-local input (local time)
42
+ * @returns {number | undefined}
43
+ */
44
+ export function datetimeLocalValueToMs(value) {
45
+ if (!value) return undefined
46
+ const ms = new Date(value).getTime()
47
+ return Number.isNaN(ms) ? undefined : ms
48
+ }
49
+
50
+ /**
51
+ * @param {unknown} value — ms number
52
+ * @param {string} [language]
53
+ * @returns {string}
54
+ */
55
+ export function formatDisplayDate(value, language = 'en') {
56
+ if (value == null || value === '') return ''
57
+ const ms = typeof value === 'number' ? value : Date.parse(String(value))
58
+ if (Number.isNaN(ms)) return ''
59
+ const locale = language === 'sv' ? 'sv-SE' : 'en-GB'
60
+ return new Intl.DateTimeFormat(locale, { dateStyle: 'medium' }).format(new Date(ms))
61
+ }
62
+
63
+ /**
64
+ * @param {unknown} value
65
+ * @returns {value is { start: number, end: number }}
66
+ */
67
+ export function isDateRangeValue(value) {
68
+ return (
69
+ value !== null &&
70
+ typeof value === 'object' &&
71
+ !Array.isArray(value) &&
72
+ typeof value.start === 'number' &&
73
+ !Number.isNaN(value.start) &&
74
+ typeof value.end === 'number' &&
75
+ !Number.isNaN(value.end)
76
+ )
77
+ }
78
+
79
+ /**
80
+ * @param {unknown} value
81
+ * @returns {value is Array<{ start: number, end: number }>}
82
+ */
83
+ export function isDateRangesValue(value) {
84
+ return Array.isArray(value) && value.every(isDateRangeValue)
85
+ }
@@ -0,0 +1,33 @@
1
+ import React from 'react'
2
+ import { Fields } from '../fields/Fields.jsx'
3
+ import { useFormContext } from './FormContext.jsx'
4
+ import { FormStatus } from './FormStatus.js'
5
+
6
+ const BLOCKING_STATUSES = new Set([
7
+ FormStatus.Submitting,
8
+ FormStatus.Loading,
9
+ FormStatus.Disabled,
10
+ ])
11
+
12
+ const fieldsetResetStyle = {
13
+ border: 'none',
14
+ margin: 0,
15
+ padding: 0,
16
+ minWidth: 0,
17
+ }
18
+
19
+ /**
20
+ * Renders form fields from {@link FormContext}. Resolves controls via
21
+ * {@link Fields} and ADR 0006 input component ids. Wraps inputs in a disabled
22
+ * fieldset when the form status includes Submitting, Loading, or Disabled.
23
+ */
24
+ export function FieldFactory () {
25
+ const { fields, data, onChange, status } = useFormContext()
26
+ const disabled = status.some(s => BLOCKING_STATUSES.has(s))
27
+
28
+ return (
29
+ <fieldset disabled={disabled} style={fieldsetResetStyle}>
30
+ <Fields fields={fields} data={data} onChange={onChange} />
31
+ </fieldset>
32
+ )
33
+ }