@happyvertical/smrt-ui 0.51.39 → 0.53.0

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 (392) hide show
  1. package/AGENTS.md +25 -3
  2. package/README.md +558 -8
  3. package/dist/actions/__tests__/swipe-dismiss.test.js +69 -0
  4. package/dist/actions/swipe-dismiss.d.ts +42 -0
  5. package/dist/actions/swipe-dismiss.d.ts.map +1 -0
  6. package/dist/actions/swipe-dismiss.js +69 -0
  7. package/dist/components/calendar/Calendar.svelte +5 -0
  8. package/dist/components/calendar/Calendar.svelte.d.ts.map +1 -1
  9. package/dist/components/calendar/CalendarView.svelte +1250 -0
  10. package/dist/components/calendar/CalendarView.svelte.d.ts +66 -0
  11. package/dist/components/calendar/CalendarView.svelte.d.ts.map +1 -0
  12. package/dist/components/calendar/DayView.svelte +5 -0
  13. package/dist/components/calendar/DayView.svelte.d.ts.map +1 -1
  14. package/dist/components/calendar/__tests__/CalendarView.test.js +226 -0
  15. package/dist/components/calendar/__tests__/calendar-model.test.js +138 -0
  16. package/dist/components/calendar/calendar-model.d.ts +178 -0
  17. package/dist/components/calendar/calendar-model.d.ts.map +1 -0
  18. package/dist/components/calendar/calendar-model.js +362 -0
  19. package/dist/components/calendar/index.d.ts +12 -1
  20. package/dist/components/calendar/index.d.ts.map +1 -1
  21. package/dist/components/calendar/index.js +11 -1
  22. package/dist/components/data/CollectionList.svelte +23 -5
  23. package/dist/components/data/CollectionList.svelte.d.ts +8 -2
  24. package/dist/components/data/CollectionList.svelte.d.ts.map +1 -1
  25. package/dist/components/data/DataTable.svelte +178 -55
  26. package/dist/components/data/DataTable.svelte.d.ts.map +1 -1
  27. package/dist/components/data/DataTableController.d.ts +4 -0
  28. package/dist/components/data/DataTableController.d.ts.map +1 -1
  29. package/dist/components/data/DataTableController.js +11 -4
  30. package/dist/components/data/DataTableResponsive.d.ts +4 -0
  31. package/dist/components/data/DataTableResponsive.d.ts.map +1 -0
  32. package/dist/components/data/DataTableResponsive.js +22 -0
  33. package/dist/components/data/ListSortSelect.svelte +121 -0
  34. package/dist/components/data/ListSortSelect.svelte.d.ts +22 -0
  35. package/dist/components/data/ListSortSelect.svelte.d.ts.map +1 -0
  36. package/dist/components/data/SortableHeader.svelte +169 -0
  37. package/dist/components/data/SortableHeader.svelte.d.ts +30 -0
  38. package/dist/components/data/SortableHeader.svelte.d.ts.map +1 -0
  39. package/dist/components/data/__tests__/CollectionList.test.js +37 -0
  40. package/dist/components/data/__tests__/DataTable.test.js +76 -0
  41. package/dist/components/data/__tests__/DataTableController.test.js +35 -0
  42. package/dist/components/data/__tests__/DataTableResponsive.test.js +80 -0
  43. package/dist/components/data/__tests__/SortableHeader.test.js +101 -0
  44. package/dist/components/data/__tests__/link-step-surface.test.js +172 -0
  45. package/dist/components/data/__tests__/list-sort-state.svelte.test.js +71 -0
  46. package/dist/components/data/__tests__/list-sort.test.js +91 -0
  47. package/dist/components/data/__tests__/responsive-table.fixture.svelte +29 -0
  48. package/dist/components/data/__tests__/responsive-table.fixture.svelte.d.ts +7 -0
  49. package/dist/components/data/__tests__/responsive-table.fixture.svelte.d.ts.map +1 -0
  50. package/dist/components/data/__tests__/surface-navigation.test.js +121 -0
  51. package/dist/components/data/data-surface.d.ts +1 -0
  52. package/dist/components/data/data-surface.d.ts.map +1 -1
  53. package/dist/components/data/data-surface.js +1 -0
  54. package/dist/components/data/index.d.ts +6 -0
  55. package/dist/components/data/index.d.ts.map +1 -1
  56. package/dist/components/data/index.js +6 -0
  57. package/dist/components/data/link-surface.d.ts +79 -0
  58. package/dist/components/data/link-surface.d.ts.map +1 -0
  59. package/dist/components/data/link-surface.js +155 -0
  60. package/dist/components/data/list-sort-state.svelte.d.ts +39 -0
  61. package/dist/components/data/list-sort-state.svelte.d.ts.map +1 -0
  62. package/dist/components/data/list-sort-state.svelte.js +47 -0
  63. package/dist/components/data/list-sort.d.ts +94 -0
  64. package/dist/components/data/list-sort.d.ts.map +1 -0
  65. package/dist/components/data/list-sort.js +182 -0
  66. package/dist/components/data/step-surface.d.ts +73 -0
  67. package/dist/components/data/step-surface.d.ts.map +1 -0
  68. package/dist/components/data/step-surface.js +177 -0
  69. package/dist/components/data/surface-navigation.d.ts +49 -0
  70. package/dist/components/data/surface-navigation.d.ts.map +1 -0
  71. package/dist/components/data/surface-navigation.js +100 -0
  72. package/dist/components/data/types.d.ts +27 -0
  73. package/dist/components/data/types.d.ts.map +1 -1
  74. package/dist/components/display/DateDisplay.svelte +76 -14
  75. package/dist/components/display/DateDisplay.svelte.d.ts +2 -0
  76. package/dist/components/display/DateDisplay.svelte.d.ts.map +1 -1
  77. package/dist/components/display/Icon.svelte +3 -16
  78. package/dist/components/display/Icon.svelte.d.ts +0 -9
  79. package/dist/components/display/Icon.svelte.d.ts.map +1 -1
  80. package/dist/components/display/StatusBadge.svelte +29 -2
  81. package/dist/components/display/StatusBadge.svelte.d.ts +4 -2
  82. package/dist/components/display/StatusBadge.svelte.d.ts.map +1 -1
  83. package/dist/components/display/__tests__/DateDisplay.test.js +82 -1
  84. package/dist/components/display/__tests__/Icon.test.js +132 -2
  85. package/dist/components/display/__tests__/StatusBadge.test.js +78 -0
  86. package/dist/components/display/icons.svelte.d.ts +11 -0
  87. package/dist/components/display/icons.svelte.d.ts.map +1 -0
  88. package/dist/components/display/icons.svelte.js +60 -0
  89. package/dist/components/display/index.d.ts +3 -1
  90. package/dist/components/display/index.d.ts.map +1 -1
  91. package/dist/components/display/index.js +1 -0
  92. package/dist/components/display/types.d.ts +2 -0
  93. package/dist/components/display/types.d.ts.map +1 -1
  94. package/dist/components/feedback/ConfirmDialog.svelte +59 -48
  95. package/dist/components/feedback/ConfirmDialog.svelte.d.ts +14 -2
  96. package/dist/components/feedback/ConfirmDialog.svelte.d.ts.map +1 -1
  97. package/dist/components/feedback/PhoneSheet.svelte +224 -0
  98. package/dist/components/feedback/PhoneSheet.svelte.d.ts +35 -0
  99. package/dist/components/feedback/PhoneSheet.svelte.d.ts.map +1 -0
  100. package/dist/components/feedback/ToastViewport.svelte +156 -8
  101. package/dist/components/feedback/ToastViewport.svelte.d.ts +5 -1
  102. package/dist/components/feedback/ToastViewport.svelte.d.ts.map +1 -1
  103. package/dist/components/feedback/WorkingStrip.svelte +426 -0
  104. package/dist/components/feedback/WorkingStrip.svelte.d.ts +37 -0
  105. package/dist/components/feedback/WorkingStrip.svelte.d.ts.map +1 -0
  106. package/dist/components/feedback/__tests__/ConfirmDialog.test.js +38 -20
  107. package/dist/components/feedback/__tests__/PhoneSheet.test.js +101 -0
  108. package/dist/components/feedback/__tests__/WorkingStrip.test.js +172 -0
  109. package/dist/components/feedback/__tests__/confirm-message.fixture.svelte +9 -0
  110. package/dist/components/feedback/__tests__/confirm-message.fixture.svelte.d.ts +19 -0
  111. package/dist/components/feedback/__tests__/confirm-message.fixture.svelte.d.ts.map +1 -0
  112. package/dist/components/feedback/__tests__/toast.test.js +142 -1
  113. package/dist/components/feedback/index.d.ts +5 -1
  114. package/dist/components/feedback/index.d.ts.map +1 -1
  115. package/dist/components/feedback/index.js +5 -0
  116. package/dist/components/feedback/toast.d.ts +13 -1
  117. package/dist/components/feedback/toast.d.ts.map +1 -1
  118. package/dist/components/feedback/toast.js +51 -10
  119. package/dist/components/feedback/working-status.d.ts +34 -0
  120. package/dist/components/feedback/working-status.d.ts.map +1 -0
  121. package/dist/components/feedback/working-status.js +5 -0
  122. package/dist/components/forms/CameraCapture.svelte +619 -0
  123. package/dist/components/forms/CameraCapture.svelte.d.ts +42 -0
  124. package/dist/components/forms/CameraCapture.svelte.d.ts.map +1 -0
  125. package/dist/components/forms/Checkbox.svelte +34 -3
  126. package/dist/components/forms/Checkbox.svelte.d.ts +2 -0
  127. package/dist/components/forms/Checkbox.svelte.d.ts.map +1 -1
  128. package/dist/components/forms/Combobox.svelte +108 -12
  129. package/dist/components/forms/Combobox.svelte.d.ts +6 -0
  130. package/dist/components/forms/Combobox.svelte.d.ts.map +1 -1
  131. package/dist/components/forms/DictationButton.svelte +128 -0
  132. package/dist/components/forms/DictationButton.svelte.d.ts +19 -0
  133. package/dist/components/forms/DictationButton.svelte.d.ts.map +1 -0
  134. package/dist/components/forms/DictationStatus.svelte +164 -0
  135. package/dist/components/forms/DictationStatus.svelte.d.ts +11 -0
  136. package/dist/components/forms/DictationStatus.svelte.d.ts.map +1 -0
  137. package/dist/components/forms/Fieldset.svelte +5 -1
  138. package/dist/components/forms/Fieldset.svelte.d.ts +2 -0
  139. package/dist/components/forms/Fieldset.svelte.d.ts.map +1 -1
  140. package/dist/components/forms/Form.svelte +5 -0
  141. package/dist/components/forms/Form.svelte.d.ts +1 -0
  142. package/dist/components/forms/Form.svelte.d.ts.map +1 -1
  143. package/dist/components/forms/FormActionBar.svelte +84 -0
  144. package/dist/components/forms/FormActionBar.svelte.d.ts +23 -0
  145. package/dist/components/forms/FormActionBar.svelte.d.ts.map +1 -0
  146. package/dist/components/forms/Input.svelte +17 -1
  147. package/dist/components/forms/Input.svelte.d.ts +2 -0
  148. package/dist/components/forms/Input.svelte.d.ts.map +1 -1
  149. package/dist/components/forms/Listbox.svelte +39 -1
  150. package/dist/components/forms/Listbox.svelte.d.ts.map +1 -1
  151. package/dist/components/forms/MultiSelect.svelte +41 -1
  152. package/dist/components/forms/MultiSelect.svelte.d.ts.map +1 -1
  153. package/dist/components/forms/Radio.svelte +16 -4
  154. package/dist/components/forms/RadioGroup.svelte +7 -1
  155. package/dist/components/forms/RadioGroup.svelte.d.ts +2 -0
  156. package/dist/components/forms/RadioGroup.svelte.d.ts.map +1 -1
  157. package/dist/components/forms/SearchInput.svelte +207 -0
  158. package/dist/components/forms/SearchInput.svelte.d.ts +22 -0
  159. package/dist/components/forms/SearchInput.svelte.d.ts.map +1 -0
  160. package/dist/components/forms/SegmentedControl.svelte +152 -11
  161. package/dist/components/forms/SegmentedControl.svelte.d.ts +4 -0
  162. package/dist/components/forms/SegmentedControl.svelte.d.ts.map +1 -1
  163. package/dist/components/forms/Select.svelte +17 -1
  164. package/dist/components/forms/Select.svelte.d.ts +2 -0
  165. package/dist/components/forms/Select.svelte.d.ts.map +1 -1
  166. package/dist/components/forms/SignaturePad.svelte +436 -0
  167. package/dist/components/forms/SignaturePad.svelte.d.ts +32 -0
  168. package/dist/components/forms/SignaturePad.svelte.d.ts.map +1 -0
  169. package/dist/components/forms/StagedControlReview.svelte +21 -12
  170. package/dist/components/forms/StagedControlReview.svelte.d.ts.map +1 -1
  171. package/dist/components/forms/Switch.svelte +18 -5
  172. package/dist/components/forms/Switch.svelte.d.ts +2 -0
  173. package/dist/components/forms/Switch.svelte.d.ts.map +1 -1
  174. package/dist/components/forms/TagsInput.svelte +8 -1
  175. package/dist/components/forms/Textarea.svelte +16 -1
  176. package/dist/components/forms/Textarea.svelte.d.ts +2 -0
  177. package/dist/components/forms/Textarea.svelte.d.ts.map +1 -1
  178. package/dist/components/forms/__tests__/CameraCapture.test.js +504 -0
  179. package/dist/components/forms/__tests__/Combobox.test.js +354 -0
  180. package/dist/components/forms/__tests__/ControlHitArea.test.js +73 -0
  181. package/dist/components/forms/__tests__/DictationButton.test.js +176 -0
  182. package/dist/components/forms/__tests__/Fieldset.test.js +37 -0
  183. package/dist/components/forms/__tests__/Form.test.js +46 -0
  184. package/dist/components/forms/__tests__/FormActionBar.test.js +22 -0
  185. package/dist/components/forms/__tests__/Listbox.test.js +303 -0
  186. package/dist/components/forms/__tests__/MultiSelect.test.js +281 -0
  187. package/dist/components/forms/__tests__/SearchInput.test.js +92 -0
  188. package/dist/components/forms/__tests__/SignaturePad.test.js +338 -0
  189. package/dist/components/forms/__tests__/StagedControlReview.test.js +37 -3
  190. package/dist/components/forms/__tests__/camera-capture-session.test.js +207 -0
  191. package/dist/components/forms/__tests__/capture-form-retry.test.js +166 -0
  192. package/dist/components/forms/__tests__/capture-form.fixture.svelte +38 -0
  193. package/dist/components/forms/__tests__/capture-form.fixture.svelte.d.ts +10 -0
  194. package/dist/components/forms/__tests__/capture-form.fixture.svelte.d.ts.map +1 -0
  195. package/dist/components/forms/__tests__/capture-test-env.d.ts +70 -0
  196. package/dist/components/forms/__tests__/capture-test-env.d.ts.map +1 -0
  197. package/dist/components/forms/__tests__/capture-test-env.js +122 -0
  198. package/dist/components/forms/__tests__/capture-touch.fixture.svelte +15 -0
  199. package/dist/components/forms/__tests__/capture-touch.fixture.svelte.d.ts +8 -0
  200. package/dist/components/forms/__tests__/capture-touch.fixture.svelte.d.ts.map +1 -0
  201. package/dist/components/forms/__tests__/combobox-form.fixture.svelte +29 -0
  202. package/dist/components/forms/__tests__/combobox-form.fixture.svelte.d.ts +14 -0
  203. package/dist/components/forms/__tests__/combobox-form.fixture.svelte.d.ts.map +1 -0
  204. package/dist/components/forms/__tests__/combobox-labels.fixture.svelte +19 -0
  205. package/dist/components/forms/__tests__/combobox-labels.fixture.svelte.d.ts +11 -0
  206. package/dist/components/forms/__tests__/combobox-labels.fixture.svelte.d.ts.map +1 -0
  207. package/dist/components/forms/__tests__/composite-registration.fixture.svelte +29 -0
  208. package/dist/components/forms/__tests__/composite-registration.fixture.svelte.d.ts +8 -0
  209. package/dist/components/forms/__tests__/composite-registration.fixture.svelte.d.ts.map +1 -0
  210. package/dist/components/forms/__tests__/control-interaction.test.js +19 -1
  211. package/dist/components/forms/__tests__/control-proposals.test.js +63 -0
  212. package/dist/components/forms/__tests__/dictation-recording.test.js +582 -0
  213. package/dist/components/forms/__tests__/dictation.test.js +486 -0
  214. package/dist/components/forms/__tests__/form-attachment.fixture.svelte +28 -0
  215. package/dist/components/forms/__tests__/form-attachment.fixture.svelte.d.ts +11 -0
  216. package/dist/components/forms/__tests__/form-attachment.fixture.svelte.d.ts.map +1 -0
  217. package/dist/components/forms/__tests__/form-retry-form.fixture.svelte +31 -0
  218. package/dist/components/forms/__tests__/form-retry-form.fixture.svelte.d.ts +13 -0
  219. package/dist/components/forms/__tests__/form-retry-form.fixture.svelte.d.ts.map +1 -0
  220. package/dist/components/forms/__tests__/form-retry-form.test.js +107 -0
  221. package/dist/components/forms/__tests__/hidden-controls-form-retry.test.js +69 -0
  222. package/dist/components/forms/__tests__/hidden-controls-form.fixture.svelte +29 -0
  223. package/dist/components/forms/__tests__/hidden-controls-form.fixture.svelte.d.ts +9 -0
  224. package/dist/components/forms/__tests__/hidden-controls-form.fixture.svelte.d.ts.map +1 -0
  225. package/dist/components/forms/__tests__/listbox-form.fixture.svelte +27 -0
  226. package/dist/components/forms/__tests__/listbox-form.fixture.svelte.d.ts +13 -0
  227. package/dist/components/forms/__tests__/listbox-form.fixture.svelte.d.ts.map +1 -0
  228. package/dist/components/forms/__tests__/long-press.test.js +175 -0
  229. package/dist/components/forms/__tests__/multiselect-form.fixture.svelte +27 -0
  230. package/dist/components/forms/__tests__/multiselect-form.fixture.svelte.d.ts +13 -0
  231. package/dist/components/forms/__tests__/multiselect-form.fixture.svelte.d.ts.map +1 -0
  232. package/dist/components/forms/__tests__/native-file-field.test.js +177 -0
  233. package/dist/components/forms/__tests__/place-picker.fixture.svelte +33 -0
  234. package/dist/components/forms/__tests__/place-picker.fixture.svelte.d.ts +12 -0
  235. package/dist/components/forms/__tests__/place-picker.fixture.svelte.d.ts.map +1 -0
  236. package/dist/components/forms/__tests__/segmented-posting.fixture.svelte +28 -0
  237. package/dist/components/forms/__tests__/segmented-posting.fixture.svelte.d.ts +12 -0
  238. package/dist/components/forms/__tests__/segmented-posting.fixture.svelte.d.ts.map +1 -0
  239. package/dist/components/forms/__tests__/segmented-posting.test.js +92 -0
  240. package/dist/components/forms/__tests__/signature-pad-logic.test.js +54 -0
  241. package/dist/components/forms/__tests__/touch-density.fixture.svelte +34 -0
  242. package/dist/components/forms/__tests__/touch-density.fixture.svelte.d.ts +8 -0
  243. package/dist/components/forms/__tests__/touch-density.fixture.svelte.d.ts.map +1 -0
  244. package/dist/components/forms/__tests__/touch-density.test.js +66 -0
  245. package/dist/components/forms/audio-capture.d.ts +69 -0
  246. package/dist/components/forms/audio-capture.d.ts.map +1 -0
  247. package/dist/components/forms/audio-capture.js +193 -0
  248. package/dist/components/forms/camera-capture-session.d.ts +81 -0
  249. package/dist/components/forms/camera-capture-session.d.ts.map +1 -0
  250. package/dist/components/forms/camera-capture-session.js +130 -0
  251. package/dist/components/forms/control-interaction.d.ts +6 -0
  252. package/dist/components/forms/control-interaction.d.ts.map +1 -1
  253. package/dist/components/forms/control-interaction.js +12 -1
  254. package/dist/components/forms/control-proposals.d.ts +55 -0
  255. package/dist/components/forms/control-proposals.d.ts.map +1 -0
  256. package/dist/components/forms/control-proposals.js +188 -0
  257. package/dist/components/forms/dictation-transcribe.d.ts +36 -0
  258. package/dist/components/forms/dictation-transcribe.d.ts.map +1 -0
  259. package/dist/components/forms/dictation-transcribe.js +65 -0
  260. package/dist/components/forms/dictation.svelte.d.ts +200 -0
  261. package/dist/components/forms/dictation.svelte.d.ts.map +1 -0
  262. package/dist/components/forms/dictation.svelte.js +686 -0
  263. package/dist/components/forms/form-retry/__tests__/boundaries.test.js +23 -0
  264. package/dist/components/forms/form-retry/__tests__/content-digest.test.js +70 -0
  265. package/dist/components/forms/form-retry/__tests__/controller.test.js +802 -0
  266. package/dist/components/forms/form-retry/__tests__/fake-kit.d.ts +82 -0
  267. package/dist/components/forms/form-retry/__tests__/fake-kit.d.ts.map +1 -0
  268. package/dist/components/forms/form-retry/__tests__/fake-kit.js +180 -0
  269. package/dist/components/forms/form-retry/__tests__/form-draft.test.js +169 -0
  270. package/dist/components/forms/form-retry/__tests__/ssr.test.js +37 -0
  271. package/dist/components/forms/form-retry/__tests__/storage.d.ts +26 -0
  272. package/dist/components/forms/form-retry/__tests__/storage.d.ts.map +1 -0
  273. package/dist/components/forms/form-retry/__tests__/storage.js +63 -0
  274. package/dist/components/forms/form-retry/__tests__/submission-key.test.js +236 -0
  275. package/dist/components/forms/form-retry/__tests__/submitted-draft.test.js +334 -0
  276. package/dist/components/forms/form-retry/content-digest.d.ts +54 -0
  277. package/dist/components/forms/form-retry/content-digest.d.ts.map +1 -0
  278. package/dist/components/forms/form-retry/content-digest.js +169 -0
  279. package/dist/components/forms/form-retry/controller.d.ts +214 -0
  280. package/dist/components/forms/form-retry/controller.d.ts.map +1 -0
  281. package/dist/components/forms/form-retry/controller.js +404 -0
  282. package/dist/components/forms/form-retry/form-draft.d.ts +68 -0
  283. package/dist/components/forms/form-retry/form-draft.d.ts.map +1 -0
  284. package/dist/components/forms/form-retry/form-draft.js +161 -0
  285. package/dist/components/forms/form-retry/index.d.ts +19 -0
  286. package/dist/components/forms/form-retry/index.d.ts.map +1 -0
  287. package/dist/components/forms/form-retry/index.js +16 -0
  288. package/dist/components/forms/form-retry/submission-key.d.ts +244 -0
  289. package/dist/components/forms/form-retry/submission-key.d.ts.map +1 -0
  290. package/dist/components/forms/form-retry/submission-key.js +342 -0
  291. package/dist/components/forms/form-retry/submitted-draft.d.ts +112 -0
  292. package/dist/components/forms/form-retry/submitted-draft.d.ts.map +1 -0
  293. package/dist/components/forms/form-retry/submitted-draft.js +270 -0
  294. package/dist/components/forms/form-retry/types.d.ts +84 -0
  295. package/dist/components/forms/form-retry/types.d.ts.map +1 -0
  296. package/dist/components/forms/form-retry/types.js +13 -0
  297. package/dist/components/forms/index.d.ts +21 -2
  298. package/dist/components/forms/index.d.ts.map +1 -1
  299. package/dist/components/forms/index.js +22 -1
  300. package/dist/components/forms/insert-text.d.ts +12 -0
  301. package/dist/components/forms/insert-text.d.ts.map +1 -0
  302. package/dist/components/forms/insert-text.js +38 -0
  303. package/dist/components/forms/long-press.d.ts +88 -0
  304. package/dist/components/forms/long-press.d.ts.map +1 -0
  305. package/dist/components/forms/long-press.js +213 -0
  306. package/dist/components/forms/native-file-field.d.ts +94 -0
  307. package/dist/components/forms/native-file-field.d.ts.map +1 -0
  308. package/dist/components/forms/native-file-field.js +147 -0
  309. package/dist/components/forms/ready-beep.d.ts +24 -0
  310. package/dist/components/forms/ready-beep.d.ts.map +1 -0
  311. package/dist/components/forms/ready-beep.js +82 -0
  312. package/dist/components/forms/signature-pad-logic.d.ts +50 -0
  313. package/dist/components/forms/signature-pad-logic.d.ts.map +1 -0
  314. package/dist/components/forms/signature-pad-logic.js +48 -0
  315. package/dist/components/forms/types.d.ts +41 -0
  316. package/dist/components/forms/types.d.ts.map +1 -1
  317. package/dist/components/layout/PageHeader.svelte +151 -17
  318. package/dist/components/layout/PageHeader.svelte.d.ts +47 -7
  319. package/dist/components/layout/PageHeader.svelte.d.ts.map +1 -1
  320. package/dist/components/layout/__tests__/PageHeader.test.js +87 -1
  321. package/dist/components/layout/index.d.ts +1 -0
  322. package/dist/components/layout/index.d.ts.map +1 -1
  323. package/dist/components/layout/index.js +1 -0
  324. package/dist/components/layout/page-header-context.d.ts +25 -0
  325. package/dist/components/layout/page-header-context.d.ts.map +1 -0
  326. package/dist/components/layout/page-header-context.js +16 -0
  327. package/dist/components/nav/FilterChips.svelte +8 -1
  328. package/dist/components/nav/FilterChips.svelte.d.ts +2 -0
  329. package/dist/components/nav/FilterChips.svelte.d.ts.map +1 -1
  330. package/dist/components/nav/Tabs.svelte +241 -0
  331. package/dist/components/nav/Tabs.svelte.d.ts +15 -0
  332. package/dist/components/nav/Tabs.svelte.d.ts.map +1 -1
  333. package/dist/components/nav/__tests__/LinkTabs.test.js +117 -0
  334. package/dist/components/nav/index.d.ts +1 -0
  335. package/dist/components/nav/index.d.ts.map +1 -1
  336. package/dist/components/nav/index.js +1 -0
  337. package/dist/components/nav/tabs-overflow.d.ts +12 -0
  338. package/dist/components/nav/tabs-overflow.d.ts.map +1 -0
  339. package/dist/components/nav/tabs-overflow.js +17 -0
  340. package/dist/components/nav/types.d.ts +8 -0
  341. package/dist/components/nav/types.d.ts.map +1 -1
  342. package/dist/components/ui/Button.svelte +16 -2
  343. package/dist/components/ui/Button.svelte.d.ts +2 -0
  344. package/dist/components/ui/Button.svelte.d.ts.map +1 -1
  345. package/dist/components/ui/Card.svelte +14 -5
  346. package/dist/components/ui/Dropdown.svelte +55 -1
  347. package/dist/components/ui/Dropdown.svelte.d.ts +8 -0
  348. package/dist/components/ui/Dropdown.svelte.d.ts.map +1 -1
  349. package/dist/components/ui/IconToggle.svelte +139 -0
  350. package/dist/components/ui/IconToggle.svelte.d.ts +32 -0
  351. package/dist/components/ui/IconToggle.svelte.d.ts.map +1 -0
  352. package/dist/components/ui/IconToggleGroup.svelte +56 -0
  353. package/dist/components/ui/IconToggleGroup.svelte.d.ts +21 -0
  354. package/dist/components/ui/IconToggleGroup.svelte.d.ts.map +1 -0
  355. package/dist/components/ui/Pagination.svelte +1 -1
  356. package/dist/components/ui/Popover.svelte +17 -1
  357. package/dist/components/ui/Popover.svelte.d.ts +8 -0
  358. package/dist/components/ui/Popover.svelte.d.ts.map +1 -1
  359. package/dist/components/ui/__tests__/IconToggle.test.js +59 -0
  360. package/dist/components/ui/__tests__/IconToggleGroup.test.js +30 -0
  361. package/dist/components/ui/__tests__/Popover.test.js +44 -0
  362. package/dist/components/ui/__tests__/dropdown-popover-icon.test.js +125 -0
  363. package/dist/components/ui/__tests__/phone-touch-targets.test.js +39 -0
  364. package/dist/components/ui/index.d.ts +2 -0
  365. package/dist/components/ui/index.d.ts.map +1 -1
  366. package/dist/components/ui/index.js +2 -0
  367. package/dist/i18n/strings.ui.d.ts +65 -0
  368. package/dist/i18n/strings.ui.d.ts.map +1 -1
  369. package/dist/i18n/strings.ui.js +72 -0
  370. package/dist/styles/tokens.css +2 -0
  371. package/dist/svelte/__tests__/playground.test.js +3 -1
  372. package/dist/svelte/playground/CalendarPreview.svelte +140 -0
  373. package/dist/svelte/playground/CalendarPreview.svelte.d.ts +4 -0
  374. package/dist/svelte/playground/CalendarPreview.svelte.d.ts.map +1 -0
  375. package/dist/svelte/playground/CapturePreview.svelte +56 -0
  376. package/dist/svelte/playground/CapturePreview.svelte.d.ts +4 -0
  377. package/dist/svelte/playground/CapturePreview.svelte.d.ts.map +1 -0
  378. package/dist/svelte/playground.d.ts.map +1 -1
  379. package/dist/svelte/playground.js +20 -0
  380. package/dist/themes/ThemeProvider.svelte +9 -0
  381. package/dist/themes/ThemeProvider.svelte.d.ts +2 -0
  382. package/dist/themes/ThemeProvider.svelte.d.ts.map +1 -1
  383. package/dist/themes/css-generator.d.ts.map +1 -1
  384. package/dist/themes/css-generator.js +3 -0
  385. package/dist/themes/styles/glass.css +4 -0
  386. package/dist/themes/styles/happyvertical.css +4 -0
  387. package/dist/themes/styles/material.css +4 -0
  388. package/dist/themes/styles/smrt.css +4 -0
  389. package/dist/themes/styles/studio.css +4 -0
  390. package/dist/types-generic.d.ts +2 -0
  391. package/dist/types-generic.d.ts.map +1 -1
  392. package/package.json +9 -3
@@ -0,0 +1,169 @@
1
+ /**
2
+ * The `runOnce()` content digest, computed in the browser (#3291).
3
+ *
4
+ * `runOnce()` (`@happyvertical/smrt-core`, `src/run-once.ts`) digests the
5
+ * submitted content itself on the server, so pairing a form with it does NOT
6
+ * need this function: send the submission key, pass the action's `FormData`
7
+ * as `content`, and the server derives the claim. This exists for the cases
8
+ * where the browser needs the SAME digest the server will compute — to tell a
9
+ * person whether the retry they are about to send is byte-identical to the
10
+ * submit that may already be recorded, to key a client-side record of an
11
+ * attempt, or to log a correlatable identity without logging the content.
12
+ *
13
+ * It is a byte-for-byte port of core's `digestRunOnceContent()`, using Web
14
+ * Crypto (`crypto.subtle`) instead of `node:crypto`; shared test vectors in
15
+ * both packages hold the two together. The algorithm:
16
+ *
17
+ * - Content is normalized once, following JSON serialization exactly:
18
+ * `toJSON(key)` is called with the property name or array index (a `Date`
19
+ * digests as its ISO string), and `undefined`, function and symbol values
20
+ * are omitted from objects and written as `null` in arrays.
21
+ * - A `FormData` digests as its ORDERED entry list — repeated fields and their
22
+ * order are significant — because JSON would reduce every form to `{}` and
23
+ * collapse distinct submissions (#3136). A `File`/`Blob` entry digests by
24
+ * `{ name, size, type }`, never its bytes: re-choosing the same file after a
25
+ * reload reproduces the digest, and a different file of the same name, size
26
+ * and type does too.
27
+ * - Content containing a `FormData` is hashed in a separate domain (the input
28
+ * is prefixed with a byte sorted-key JSON never starts with, and user keys
29
+ * starting with NUL are escaped), so no plain object can forge it.
30
+ * - `Map`, `Set`, `RegExp`, any other non-plain object without `toJSON()`, and
31
+ * `bigint` are rejected with a `TypeError` rather than hashed as `{}`.
32
+ * - The digest is the lowercase hex sha256 of the sorted-key JSON encoding.
33
+ *
34
+ * `crypto.subtle` exists only in secure contexts (HTTPS, `localhost`); the
35
+ * function rejects with a clear error elsewhere.
36
+ *
37
+ * @module
38
+ */
39
+ const FORM_DATA_TAG = '\u0000FormData';
40
+ const FORM_DATA_DOMAIN = '\u0001run-once-formdata-v1\n';
41
+ class NormalizedFormData {
42
+ entries;
43
+ constructor(entries) {
44
+ this.entries = entries;
45
+ }
46
+ }
47
+ const OMIT = Symbol('form-retry-digest-omit');
48
+ function normalize(input, state, key) {
49
+ let value = input;
50
+ if (value !== null &&
51
+ (typeof value === 'object' || typeof value === 'bigint') &&
52
+ typeof value.toJSON === 'function') {
53
+ value = value.toJSON(key);
54
+ }
55
+ if (value === null)
56
+ return null;
57
+ switch (typeof value) {
58
+ case 'undefined':
59
+ case 'function':
60
+ case 'symbol':
61
+ return OMIT;
62
+ case 'string':
63
+ case 'boolean':
64
+ return value;
65
+ case 'number':
66
+ return Number.isFinite(value) ? value : null;
67
+ case 'bigint':
68
+ throw new TypeError('submission content cannot contain a bigint; pass plain JSON data');
69
+ }
70
+ if (typeof FormData !== 'undefined' && value instanceof FormData) {
71
+ state.sawFormData = true;
72
+ const entries = [];
73
+ value.forEach((entry, name) => {
74
+ entries.push([name, normalize(entry, state, name)]);
75
+ });
76
+ return new NormalizedFormData(entries);
77
+ }
78
+ if (typeof Blob !== 'undefined' && value instanceof Blob) {
79
+ return {
80
+ name: value.name ?? null,
81
+ size: value.size,
82
+ type: value.type,
83
+ };
84
+ }
85
+ if (Array.isArray(value)) {
86
+ return value.map((item, index) => {
87
+ const normalized = normalize(item, state, String(index));
88
+ return normalized === OMIT ? null : normalized;
89
+ });
90
+ }
91
+ const prototype = Object.getPrototypeOf(value);
92
+ if (prototype !== Object.prototype && prototype !== null) {
93
+ const name = value.constructor?.name ||
94
+ 'non-plain object';
95
+ throw new TypeError(`submission content cannot contain a ${name}; convert it to plain JSON data`);
96
+ }
97
+ const result = Object.create(null);
98
+ for (const [member, memberValue] of Object.entries(value)) {
99
+ const normalized = normalize(memberValue, state, member);
100
+ if (normalized !== OMIT)
101
+ result[member] = normalized;
102
+ }
103
+ return result;
104
+ }
105
+ function toFormDataDomain(value) {
106
+ if (value instanceof NormalizedFormData) {
107
+ return {
108
+ [FORM_DATA_TAG]: value.entries.map(([key, entry]) => [
109
+ key,
110
+ toFormDataDomain(entry),
111
+ ]),
112
+ };
113
+ }
114
+ if (Array.isArray(value))
115
+ return value.map(toFormDataDomain);
116
+ if (value !== null && typeof value === 'object') {
117
+ const result = Object.create(null);
118
+ for (const [key, member] of Object.entries(value)) {
119
+ result[key.startsWith('\u0000') ? `\u0000${key}` : key] =
120
+ toFormDataDomain(member);
121
+ }
122
+ return result;
123
+ }
124
+ return value;
125
+ }
126
+ /** Sorted-key JSON, identical to `@happyvertical/smrt-scanner`'s `stableStringify`. */
127
+ function sortValue(value) {
128
+ if (Array.isArray(value))
129
+ return value.map(sortValue);
130
+ if (value && typeof value === 'object') {
131
+ const sorted = Object.create(null);
132
+ for (const key of Object.keys(value).sort()) {
133
+ sorted[key] = sortValue(value[key]);
134
+ }
135
+ return sorted;
136
+ }
137
+ return value;
138
+ }
139
+ /**
140
+ * The exact string `runOnce()` hashes for `content`.
141
+ * @throws {TypeError} when `content` contains a value with no faithful JSON form.
142
+ * @internal
143
+ */
144
+ export function submissionDigestInput(content) {
145
+ const state = { sawFormData: false };
146
+ const captured = normalize(content, state, '');
147
+ const normalized = captured === OMIT ? null : captured;
148
+ return state.sawFormData
149
+ ? FORM_DATA_DOMAIN + JSON.stringify(sortValue(toFormDataDomain(normalized)))
150
+ : JSON.stringify(sortValue(normalized));
151
+ }
152
+ /**
153
+ * The content digest `runOnce()` will compute on the server for `content`:
154
+ * lowercase hex sha256. See the module doc for what is and is not digested
155
+ * (a `File` by name, size and type — never its bytes).
156
+ *
157
+ * @throws {TypeError} (as a rejection) when `content` has no faithful JSON
158
+ * form, or when Web Crypto is unavailable (not a secure context).
159
+ */
160
+ export async function digestSubmissionContent(content) {
161
+ const input = submissionDigestInput(content);
162
+ const subtle = globalThis.crypto?.subtle;
163
+ if (!subtle) {
164
+ throw new TypeError('digestSubmissionContent needs Web Crypto (crypto.subtle), which browsers expose only in secure contexts (HTTPS or localhost)');
165
+ }
166
+ const bytes = new TextEncoder().encode(input);
167
+ const hash = await subtle.digest('SHA-256', bytes);
168
+ return Array.from(new Uint8Array(hash), (byte) => byte.toString(16).padStart(2, '0')).join('');
169
+ }
@@ -0,0 +1,214 @@
1
+ /**
2
+ * `createFormRetry()`: the browser half of `runOnce()` for a SvelteKit
3
+ * enhanced form (#3291).
4
+ *
5
+ * One controller per form. It owns the submission key (`submission-key.ts`),
6
+ * the conditional reset (`form-draft.ts`) and, when asked, the
7
+ * restore-after-reload draft (`submitted-draft.ts`), and exposes them as:
8
+ *
9
+ * - `enhance(submit?)` — a submit function in SvelteKit's `SubmitFunction`
10
+ * shape, for `<form method="POST" use:enhance={retry.enhance()}>`;
11
+ * - `attach` / `action` — an attachment (`{@attach retry.attach}`) or action
12
+ * (`use:retry.action`) that keeps a hidden key field in the form and puts a
13
+ * restored draft back into its controls;
14
+ * - `subscribe` — the Svelte store contract, so `$retry.status` and
15
+ * `$retry.token` are reactive in a component without this module importing
16
+ * Svelte.
17
+ *
18
+ * It is framework-free TypeScript: no `@sveltejs/kit` and no `svelte` import.
19
+ *
20
+ * ## What happens to one submit
21
+ *
22
+ * 1. A file the restored draft says was chosen, but is not chosen now, refuses
23
+ * the submit (`status: 'files-required'`) — a native file input cannot be
24
+ * restored, and sending without it would silently be different content.
25
+ * 2. A submit while another is unresolved is refused (`status: 'busy'`) and
26
+ * nothing is sent; the form keeps what the person typed.
27
+ * 3. Otherwise the key is written into the outgoing `FormData` (so the body is
28
+ * right even if a hidden field is stale or missing) and what the person can
29
+ * see is snapshotted — before the page's own submit function runs, because
30
+ * kit built the body before calling it. With restore enabled, the submitted
31
+ * values are then kept beside the key.
32
+ * 4. The result settles the slot:
33
+ * - `error` (transport failure, lost response, thrown server error): the key,
34
+ * the form and the draft are all kept, and `update()` is NOT called —
35
+ * `enhance`'s default would apply the error and can unmount the form. The
36
+ * unchanged re-submit is the same claim.
37
+ * - `failure` (validation): applied without rotating; the draft is dropped
38
+ * because nothing was recorded.
39
+ * - `success`: the draft is dropped; the form is reset — and the key
40
+ * rotated — only if the fields are unchanged since the submit. A person who
41
+ * typed the next entry while the first was in flight keeps it, under the
42
+ * same key, and sending it is a different claim because its content
43
+ * differs. With the page's own result callback, the key rotates only if
44
+ * the form is actually reset while that callback runs.
45
+ * - `redirect`: a confirmed write only with `redirectConfirmsWrite: true`.
46
+ * - A late result for a submit already settled is ignored entirely.
47
+ *
48
+ * An aborted request (the page called `controller.abort()`, before or during
49
+ * the request — including from its own submit function) produces no result
50
+ * from `enhance`; it settles like a transport error so the form is not stuck
51
+ * refusing submits.
52
+ *
53
+ * @module
54
+ */
55
+ import { type FormRetryStorage } from './submission-key.js';
56
+ import { type SubmittedDraft } from './submitted-draft.js';
57
+ import type { FormRetrySubmitFunction } from './types.js';
58
+ /** Where the controller is in a submit's life. */
59
+ export type FormRetryStatus =
60
+ /** Nothing submitted yet, or a submit was cancelled by the page. */
61
+ 'idle'
62
+ /** A submit is in flight. */
63
+ | 'submitting'
64
+ /** A second submit was refused while one is in flight; nothing was sent. */
65
+ | 'busy'
66
+ /** A restored draft had files that are not chosen again; nothing was sent. */
67
+ | 'files-required'
68
+ /** The last submit got no result; send it again unchanged. */
69
+ | 'transport-error'
70
+ /** The last submit failed validation; nothing was written. */
71
+ | 'failure'
72
+ /** The last submit was confirmed written. */
73
+ | 'success'
74
+ /** The last submit redirected without `redirectConfirmsWrite`. */
75
+ | 'redirect';
76
+ /** A snapshot of the controller, as `subscribe` delivers it. */
77
+ export interface FormRetryState {
78
+ /** The key the next submit carries. */
79
+ token: string;
80
+ /** The key of the unresolved submit, or `null` when idle. */
81
+ inFlight: string | null;
82
+ /** Where the controller is in a submit's life. */
83
+ status: FormRetryStatus;
84
+ /** A submitted draft from before a reload was restored into this form. */
85
+ restored: boolean;
86
+ /**
87
+ * File fields whose file must be chosen again before a submit is allowed:
88
+ * the restored draft says a file was sent, and a file input cannot be
89
+ * restored. Empty when nothing is outstanding.
90
+ */
91
+ filesToReselect: readonly string[];
92
+ /**
93
+ * Whether the key lives in the tab's storage and survives a reload. `false`
94
+ * in a private window or webview that refuses storage: the key then lives in
95
+ * memory for the life of the page.
96
+ */
97
+ persistent: boolean;
98
+ }
99
+ /** Non-field state to keep beside the submitted values (opt-in restore). */
100
+ export interface FormRetryValuesHook<T = unknown> {
101
+ /**
102
+ * What to keep for this submit — values the page holds outside form fields
103
+ * (an uploaded asset's id, a signature capture key, a selection). Must be
104
+ * JSON-serializable: a result that is not keeps no draft for that submit
105
+ * and drops an earlier attempt's. Called after the submit is accepted.
106
+ */
107
+ capture: (formData: FormData) => T;
108
+ /**
109
+ * Put a kept value back after a reload. `value` came from storage: validate
110
+ * it before trusting it, and throw to reject it — the whole draft is then
111
+ * discarded. Called synchronously inside `createFormRetry()`.
112
+ */
113
+ restore: (value: unknown) => void;
114
+ }
115
+ /** Opt-in restore-after-reload. */
116
+ export interface FormRetryRestoreOptions {
117
+ /**
118
+ * A stable id for whoever is signed in (e.g. `tenantId:userId`). A draft is
119
+ * restored only for the owner it was saved by, and never for an empty owner,
120
+ * so one person's draft is never offered to the next on shared hardware.
121
+ */
122
+ owner: string;
123
+ /** Oldest draft that may be restored, in ms. Default one day. */
124
+ maxAgeMs?: number;
125
+ /** A stricter freshness rule (e.g. "same business day"); overrides `maxAgeMs`. */
126
+ fresh?: (savedAt: Date, now: Date) => boolean;
127
+ /** Non-field state to keep and restore. */
128
+ values?: FormRetryValuesHook;
129
+ /** Fields never written to storage (password inputs are always skipped). */
130
+ exclude?: readonly string[];
131
+ /**
132
+ * Exact storage name for the draft, overriding the derived
133
+ * `smrt:form-retry:<form>[:<scope>]:draft`.
134
+ */
135
+ storageKey?: string;
136
+ }
137
+ /** Options for {@link createFormRetry}. */
138
+ export interface FormRetryOptions {
139
+ /** The form's slot. One slot per FORM: two forms on a page need two names. */
140
+ form: string;
141
+ /** One key per record when a form is rendered once per row. */
142
+ scope?: string;
143
+ /** Hidden field that carries the key. Default `submissionKey`. */
144
+ fieldName?: string;
145
+ /**
146
+ * Fields whose change after a submit is not an edit, left out of the
147
+ * "unchanged since submit" check that decides the success reset — e.g. a
148
+ * hidden nonce the page rewrites. Every other control counts, hidden inputs
149
+ * included (choice controls post through them); the key field is always
150
+ * left out. Not a storage rule: use `restore.exclude` for that.
151
+ */
152
+ ignoreFields?: readonly string[];
153
+ /** Backing store. Default `sessionStorage`; `null` keeps everything in memory. */
154
+ storage?: FormRetryStorage | null;
155
+ /** Exact storage name for the key (migration from an older name). */
156
+ storageKey?: string;
157
+ /** Mints a key. Default: a random UUID v4. */
158
+ mint?: () => string;
159
+ /**
160
+ * Treat a `redirect` result as a confirmed write (rotate the key, drop the
161
+ * draft). Default `false`: a redirect cannot vouch for a write on its own.
162
+ */
163
+ redirectConfirmsWrite?: boolean;
164
+ /** Opt-in restore-after-reload. */
165
+ restore?: FormRetryRestoreOptions;
166
+ /** Clock seam for draft timestamps and freshness. */
167
+ now?: () => Date;
168
+ }
169
+ /** A form's retry controller. */
170
+ export interface FormRetry {
171
+ /** The key the next submit carries. */
172
+ readonly token: string;
173
+ /** The hidden field name that carries the key. */
174
+ readonly fieldName: string;
175
+ /** The current state. */
176
+ readonly state: FormRetryState;
177
+ /** The draft restored after a reload, or `null`. */
178
+ readonly restored: SubmittedDraft | null;
179
+ /** Svelte store contract: called now and on every change; returns unsubscribe. */
180
+ subscribe(listener: (state: FormRetryState) => void): () => void;
181
+ /**
182
+ * A submit function for `use:enhance`. An optional inner submit function runs
183
+ * after the retry gate (it sees the key in `formData` and may still
184
+ * `cancel()`); its returned callback, if any, replaces the default
185
+ * `update({ reset })` for applied results and receives an `update` whose
186
+ * default `reset` is the safe one. On a success it also decides whether the
187
+ * key retires: only a reset of the form while it runs (through `update()` or
188
+ * `form.reset()`) rotates the key, so values it keeps on screen keep their
189
+ * key. Transport errors and stale results never reach it — observe `status`
190
+ * instead.
191
+ */
192
+ enhance(submit?: FormRetrySubmitFunction): FormRetrySubmitFunction;
193
+ /** Attachment: `{@attach retry.attach}`. Returns its cleanup. */
194
+ attach: (form: HTMLFormElement) => () => void;
195
+ /** Action: `use:retry.action`. */
196
+ action: (form: HTMLFormElement) => {
197
+ destroy(): void;
198
+ };
199
+ /**
200
+ * Abandon this fill: drop the stored draft and rotate the key, so the next
201
+ * submit is a new submission. For a "start over" control.
202
+ *
203
+ * Refused while a submit is in flight: that request may already have
204
+ * written, and if its response is lost the unchanged resend must still
205
+ * carry its key (and a reload must still find its draft). Returns `false`
206
+ * and changes nothing then; disable the control while
207
+ * `$retry.inFlight` is set, or call it again once the submit settles.
208
+ * Returns `true` when the fill was discarded.
209
+ */
210
+ discard(): boolean;
211
+ }
212
+ /** Create the retry controller for one form. */
213
+ export declare function createFormRetry(options: FormRetryOptions): FormRetry;
214
+ //# sourceMappingURL=controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../../../src/components/forms/form-retry/controller.ts"],"names":[],"mappings":"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"}