@spaceinvoices/react-ui 0.4.10 → 0.4.12

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 (638) hide show
  1. package/README.md +24 -8
  2. package/cli/dist/index.js +89 -26
  3. package/package.json +6 -2
  4. package/registry.json +30 -31
  5. package/spaceinvoices.schema.json +6 -1
  6. package/src/common/autocomplete.tsx +41 -25
  7. package/src/components/activities/locales/bg.ts +21 -0
  8. package/src/components/activities/locales/cs.ts +21 -0
  9. package/src/components/activities/locales/en.ts +21 -0
  10. package/src/components/activities/locales/et.ts +21 -0
  11. package/src/components/activities/locales/fi.ts +21 -0
  12. package/src/components/activities/locales/is.ts +21 -0
  13. package/src/components/activities/locales/nb.ts +21 -0
  14. package/src/components/activities/locales/sk.ts +21 -0
  15. package/src/components/activities/locales/sv.ts +21 -0
  16. package/src/components/advance-invoices/advance-invoices.hooks.ts +2 -3
  17. package/src/components/advance-invoices/create/create-advance-invoice-form.tsx +290 -69
  18. package/src/components/advance-invoices/create/locales/bg.ts +48 -0
  19. package/src/components/advance-invoices/create/locales/cs.ts +48 -0
  20. package/src/components/advance-invoices/create/locales/en.ts +48 -0
  21. package/src/components/advance-invoices/create/locales/et.ts +48 -0
  22. package/src/components/advance-invoices/create/locales/fi.ts +48 -0
  23. package/src/components/advance-invoices/create/locales/hr.ts +17 -17
  24. package/src/components/advance-invoices/create/locales/is.ts +48 -0
  25. package/src/components/advance-invoices/create/locales/nb.ts +48 -0
  26. package/src/components/advance-invoices/create/locales/sk.ts +48 -0
  27. package/src/components/advance-invoices/create/locales/sl.ts +9 -7
  28. package/src/components/advance-invoices/create/locales/sv.ts +48 -0
  29. package/src/components/advance-invoices/create/prepare-advance-invoice-submission.ts +16 -2
  30. package/src/components/advance-invoices/list/list-row-actions.tsx +48 -16
  31. package/src/components/advance-invoices/list/list-table.tsx +33 -8
  32. package/src/components/advance-invoices/list/locales/bg.ts +51 -0
  33. package/src/components/advance-invoices/list/locales/cs.ts +51 -0
  34. package/src/components/advance-invoices/list/locales/en.ts +33 -2
  35. package/src/components/advance-invoices/list/locales/et.ts +51 -0
  36. package/src/components/advance-invoices/list/locales/fi.ts +51 -0
  37. package/src/components/advance-invoices/list/locales/hr.ts +15 -15
  38. package/src/components/advance-invoices/list/locales/is.ts +51 -0
  39. package/src/components/advance-invoices/list/locales/nb.ts +51 -0
  40. package/src/components/advance-invoices/list/locales/sk.ts +51 -0
  41. package/src/components/advance-invoices/list/locales/sv.ts +51 -0
  42. package/src/components/advance-invoices/list/use-advance-invoice-download.ts +3 -5
  43. package/src/components/common/autocomplete-locales.ts +101 -0
  44. package/src/components/company-registry/company-registry.hooks.ts +3 -7
  45. package/src/components/credit-notes/create/create-credit-note-form.tsx +211 -22
  46. package/src/components/credit-notes/create/locales/bg.ts +87 -0
  47. package/src/components/credit-notes/create/locales/cs.ts +87 -0
  48. package/src/components/credit-notes/create/locales/en.ts +87 -0
  49. package/src/components/credit-notes/create/locales/et.ts +87 -0
  50. package/src/components/credit-notes/create/locales/fi.ts +87 -0
  51. package/src/components/credit-notes/create/locales/hr.ts +24 -24
  52. package/src/components/credit-notes/create/locales/is.ts +87 -0
  53. package/src/components/credit-notes/create/locales/nb.ts +87 -0
  54. package/src/components/credit-notes/create/locales/sk.ts +87 -0
  55. package/src/components/credit-notes/create/locales/sl.ts +9 -9
  56. package/src/components/credit-notes/create/locales/sv.ts +87 -0
  57. package/src/components/credit-notes/create/prepare-credit-note-submission.ts +32 -0
  58. package/src/components/credit-notes/credit-notes.hooks.ts +15 -3
  59. package/src/components/credit-notes/list/list-row-actions.tsx +19 -7
  60. package/src/components/credit-notes/list/list-table.tsx +58 -7
  61. package/src/components/credit-notes/list/locales/bg.ts +48 -0
  62. package/src/components/credit-notes/list/locales/cs.ts +48 -0
  63. package/src/components/credit-notes/list/locales/en.ts +31 -2
  64. package/src/components/credit-notes/list/locales/et.ts +48 -0
  65. package/src/components/credit-notes/list/locales/fi.ts +48 -0
  66. package/src/components/credit-notes/list/locales/hr.ts +12 -12
  67. package/src/components/credit-notes/list/locales/is.ts +48 -0
  68. package/src/components/credit-notes/list/locales/nb.ts +48 -0
  69. package/src/components/credit-notes/list/locales/sk.ts +48 -0
  70. package/src/components/credit-notes/list/locales/sv.ts +48 -0
  71. package/src/components/credit-notes/list/use-credit-note-download.ts +3 -5
  72. package/src/components/customers/create-customer-form/locales/bg.ts +21 -0
  73. package/src/components/customers/create-customer-form/locales/cs.ts +21 -0
  74. package/src/components/customers/create-customer-form/locales/en.ts +21 -0
  75. package/src/components/customers/create-customer-form/locales/et.ts +21 -0
  76. package/src/components/customers/create-customer-form/locales/fi.ts +21 -0
  77. package/src/components/customers/create-customer-form/locales/hr.ts +11 -11
  78. package/src/components/customers/create-customer-form/locales/is.ts +21 -0
  79. package/src/components/customers/create-customer-form/locales/nb.ts +21 -0
  80. package/src/components/customers/create-customer-form/locales/sk.ts +21 -0
  81. package/src/components/customers/create-customer-form/locales/sv.ts +21 -0
  82. package/src/components/customers/customer-autocomplete.tsx +32 -4
  83. package/src/components/customers/customer-list-table/customer-list-table.tsx +8 -6
  84. package/src/components/customers/customer-list-table/locales/bg.ts +25 -0
  85. package/src/components/customers/customer-list-table/locales/cs.ts +25 -0
  86. package/src/components/customers/customer-list-table/locales/en.ts +17 -2
  87. package/src/components/customers/customer-list-table/locales/et.ts +25 -0
  88. package/src/components/customers/customer-list-table/locales/fi.ts +25 -0
  89. package/src/components/customers/customer-list-table/locales/hr.ts +11 -11
  90. package/src/components/customers/customer-list-table/locales/is.ts +25 -0
  91. package/src/components/customers/customer-list-table/locales/nb.ts +25 -0
  92. package/src/components/customers/customer-list-table/locales/sk.ts +25 -0
  93. package/src/components/customers/customer-list-table/locales/sv.ts +25 -0
  94. package/src/components/customers/customers.hooks.ts +14 -17
  95. package/src/components/customers/edit-customer-form/locales/bg.ts +13 -0
  96. package/src/components/customers/edit-customer-form/locales/cs.ts +13 -0
  97. package/src/components/customers/edit-customer-form/locales/en.ts +13 -0
  98. package/src/components/customers/edit-customer-form/locales/et.ts +13 -0
  99. package/src/components/customers/edit-customer-form/locales/fi.ts +13 -0
  100. package/src/components/customers/edit-customer-form/locales/hr.ts +5 -5
  101. package/src/components/customers/edit-customer-form/locales/is.ts +13 -0
  102. package/src/components/customers/edit-customer-form/locales/nb.ts +13 -0
  103. package/src/components/customers/edit-customer-form/locales/sk.ts +13 -0
  104. package/src/components/customers/edit-customer-form/locales/sv.ts +13 -0
  105. package/src/components/dashboard/collection-rate-card/collection-rate-card.tsx +7 -6
  106. package/src/components/dashboard/collection-rate-card/locales/en.ts +3 -0
  107. package/src/components/dashboard/collection-rate-card/use-collection-rate.ts +8 -7
  108. package/src/components/dashboard/invoice-status-chart/invoice-status-chart.tsx +7 -4
  109. package/src/components/dashboard/invoice-status-chart/locales/bg.ts +5 -5
  110. package/src/components/dashboard/invoice-status-chart/locales/cs.ts +5 -5
  111. package/src/components/dashboard/invoice-status-chart/locales/de.ts +1 -1
  112. package/src/components/dashboard/invoice-status-chart/locales/en.ts +10 -0
  113. package/src/components/dashboard/invoice-status-chart/locales/es.ts +1 -1
  114. package/src/components/dashboard/invoice-status-chart/locales/et.ts +5 -5
  115. package/src/components/dashboard/invoice-status-chart/locales/fi.ts +5 -5
  116. package/src/components/dashboard/invoice-status-chart/locales/fr.ts +1 -1
  117. package/src/components/dashboard/invoice-status-chart/locales/hr.ts +5 -5
  118. package/src/components/dashboard/invoice-status-chart/locales/is.ts +5 -5
  119. package/src/components/dashboard/invoice-status-chart/locales/it.ts +1 -1
  120. package/src/components/dashboard/invoice-status-chart/locales/nb.ts +5 -5
  121. package/src/components/dashboard/invoice-status-chart/locales/nl.ts +1 -1
  122. package/src/components/dashboard/invoice-status-chart/locales/pl.ts +1 -1
  123. package/src/components/dashboard/invoice-status-chart/locales/pt.ts +1 -1
  124. package/src/components/dashboard/invoice-status-chart/locales/sk.ts +5 -5
  125. package/src/components/dashboard/invoice-status-chart/locales/sl.ts +1 -1
  126. package/src/components/dashboard/invoice-status-chart/locales/sv.ts +5 -5
  127. package/src/components/dashboard/payment-methods-chart/locales/bg.ts +5 -5
  128. package/src/components/dashboard/payment-methods-chart/locales/cs.ts +5 -5
  129. package/src/components/dashboard/payment-methods-chart/locales/en.ts +12 -0
  130. package/src/components/dashboard/payment-methods-chart/locales/et.ts +5 -5
  131. package/src/components/dashboard/payment-methods-chart/locales/fi.ts +6 -6
  132. package/src/components/dashboard/payment-methods-chart/locales/hr.ts +3 -3
  133. package/src/components/dashboard/payment-methods-chart/locales/is.ts +5 -5
  134. package/src/components/dashboard/payment-methods-chart/locales/nb.ts +5 -5
  135. package/src/components/dashboard/payment-methods-chart/locales/sk.ts +5 -5
  136. package/src/components/dashboard/payment-methods-chart/locales/sv.ts +5 -5
  137. package/src/components/dashboard/payment-methods-chart/payment-methods-chart.tsx +4 -3
  138. package/src/components/dashboard/payment-trend-chart/locales/bg.ts +1 -1
  139. package/src/components/dashboard/payment-trend-chart/locales/cs.ts +1 -1
  140. package/src/components/dashboard/payment-trend-chart/locales/en.ts +6 -0
  141. package/src/components/dashboard/payment-trend-chart/locales/et.ts +1 -1
  142. package/src/components/dashboard/payment-trend-chart/locales/fi.ts +1 -1
  143. package/src/components/dashboard/payment-trend-chart/locales/is.ts +1 -1
  144. package/src/components/dashboard/payment-trend-chart/locales/nb.ts +1 -1
  145. package/src/components/dashboard/payment-trend-chart/locales/sk.ts +1 -1
  146. package/src/components/dashboard/payment-trend-chart/locales/sv.ts +1 -1
  147. package/src/components/dashboard/payment-trend-chart/payment-trend-chart.tsx +4 -3
  148. package/src/components/dashboard/payment-trend-chart/use-payment-trend.ts +12 -9
  149. package/src/components/dashboard/revenue-card.tsx +3 -3
  150. package/src/components/dashboard/revenue-trend-chart/locales/bg.ts +1 -1
  151. package/src/components/dashboard/revenue-trend-chart/locales/cs.ts +1 -1
  152. package/src/components/dashboard/revenue-trend-chart/locales/en.ts +6 -0
  153. package/src/components/dashboard/revenue-trend-chart/locales/et.ts +1 -1
  154. package/src/components/dashboard/revenue-trend-chart/locales/fi.ts +1 -1
  155. package/src/components/dashboard/revenue-trend-chart/locales/is.ts +1 -1
  156. package/src/components/dashboard/revenue-trend-chart/locales/nb.ts +1 -1
  157. package/src/components/dashboard/revenue-trend-chart/locales/sk.ts +1 -1
  158. package/src/components/dashboard/revenue-trend-chart/locales/sv.ts +1 -1
  159. package/src/components/dashboard/revenue-trend-chart/revenue-trend-chart.tsx +4 -3
  160. package/src/components/dashboard/revenue-trend-chart/use-revenue-trend.ts +4 -3
  161. package/src/components/dashboard/shared/local-date.ts +11 -0
  162. package/src/components/dashboard/shared/use-revenue-data.ts +6 -5
  163. package/src/components/dashboard/shared/use-stats-query.ts +7 -11
  164. package/src/components/dashboard/stat-card.tsx +3 -3
  165. package/src/components/dashboard/tax-collected-card/tax-collected-card.tsx +11 -9
  166. package/src/components/dashboard/tax-collected-card/use-tax-collected.ts +3 -2
  167. package/src/components/dashboard/top-customers-chart/locales/bg.ts +2 -2
  168. package/src/components/dashboard/top-customers-chart/locales/cs.ts +2 -2
  169. package/src/components/dashboard/top-customers-chart/locales/en.ts +7 -0
  170. package/src/components/dashboard/top-customers-chart/locales/et.ts +2 -2
  171. package/src/components/dashboard/top-customers-chart/locales/fi.ts +2 -2
  172. package/src/components/dashboard/top-customers-chart/locales/is.ts +2 -2
  173. package/src/components/dashboard/top-customers-chart/locales/nb.ts +2 -2
  174. package/src/components/dashboard/top-customers-chart/locales/sk.ts +2 -2
  175. package/src/components/dashboard/top-customers-chart/locales/sv.ts +2 -2
  176. package/src/components/dashboard/top-customers-chart/top-customers-chart.tsx +4 -3
  177. package/src/components/dashboard/top-customers-chart/use-top-customers.ts +7 -20
  178. package/src/components/delivery-notes/create/create-delivery-note-form.tsx +61 -31
  179. package/src/components/delivery-notes/create/locales/bg.ts +68 -0
  180. package/src/components/delivery-notes/create/locales/cs.ts +68 -0
  181. package/src/components/delivery-notes/create/locales/en.ts +68 -0
  182. package/src/components/delivery-notes/create/locales/et.ts +68 -0
  183. package/src/components/delivery-notes/create/locales/fi.ts +68 -0
  184. package/src/components/delivery-notes/create/locales/hr.ts +6 -6
  185. package/src/components/delivery-notes/create/locales/is.ts +68 -0
  186. package/src/components/delivery-notes/create/locales/nb.ts +68 -0
  187. package/src/components/delivery-notes/create/locales/sk.ts +68 -0
  188. package/src/components/delivery-notes/create/locales/sl.ts +5 -5
  189. package/src/components/delivery-notes/create/locales/sv.ts +68 -0
  190. package/src/components/delivery-notes/delivery-notes.hooks.ts +20 -3
  191. package/src/components/delivery-notes/list/list-row-actions.tsx +62 -16
  192. package/src/components/delivery-notes/list/list-table.tsx +42 -9
  193. package/src/components/delivery-notes/list/locales/bg.ts +40 -0
  194. package/src/components/delivery-notes/list/locales/cs.ts +40 -0
  195. package/src/components/delivery-notes/list/locales/et.ts +40 -0
  196. package/src/components/delivery-notes/list/locales/fi.ts +40 -0
  197. package/src/components/delivery-notes/list/locales/is.ts +40 -0
  198. package/src/components/delivery-notes/list/locales/nb.ts +40 -0
  199. package/src/components/delivery-notes/list/locales/sk.ts +40 -0
  200. package/src/components/delivery-notes/list/locales/sv.ts +40 -0
  201. package/src/components/delivery-notes/list/use-delivery-note-download.ts +3 -5
  202. package/src/components/documents/create/document-add-item-form.tsx +256 -147
  203. package/src/components/documents/create/document-add-item-tax-rate-field.tsx +2 -1
  204. package/src/components/documents/create/document-details-section.tsx +30 -12
  205. package/src/components/documents/create/document-item-validation.ts +50 -0
  206. package/src/components/documents/create/document-items-section.tsx +44 -6
  207. package/src/components/documents/create/document-recipient-section.tsx +10 -2
  208. package/src/components/documents/create/linked-documents-info.tsx +4 -3
  209. package/src/components/documents/create/live-preview.tsx +19 -15
  210. package/src/components/documents/create/mark-as-paid-section.tsx +77 -20
  211. package/src/components/documents/create/payment-rows.ts +291 -0
  212. package/src/components/documents/create/prepare-document-submission.ts +24 -13
  213. package/src/components/documents/create/scroll-to-first-invalid-field.ts +27 -0
  214. package/src/components/documents/create/smart-code-insert-button.tsx +5 -53
  215. package/src/components/documents/create/use-document-customer-form.ts +74 -25
  216. package/src/components/documents/documents.hooks.ts +3 -5
  217. package/src/components/documents/index.ts +1 -0
  218. package/src/components/documents/public/index.ts +1 -0
  219. package/src/components/documents/public/public-document-summary.tsx +343 -0
  220. package/src/components/documents/shared/document-preview-display.tsx +65 -39
  221. package/src/components/documents/shared/index.ts +6 -1
  222. package/src/components/documents/shared/scaled-document-preview.tsx +33 -19
  223. package/src/components/documents/types.ts +24 -0
  224. package/src/components/documents/view/document-actions-bar.tsx +241 -62
  225. package/src/components/documents/view/document-activities-list.tsx +23 -11
  226. package/src/components/documents/view/document-details-card.tsx +7 -27
  227. package/src/components/documents/view/document-payments-list.tsx +114 -57
  228. package/src/components/documents/view/document-relations-list.tsx +26 -6
  229. package/src/components/documents/view/document-sidebar.tsx +25 -3
  230. package/src/components/documents/view/document-version-history.tsx +137 -0
  231. package/src/components/documents/view/index.ts +1 -0
  232. package/src/components/documents/view/locales/bg.ts +143 -0
  233. package/src/components/documents/view/locales/cs.ts +143 -0
  234. package/src/components/documents/view/locales/de.ts +13 -0
  235. package/src/components/documents/view/locales/en.ts +143 -0
  236. package/src/components/documents/view/locales/es.ts +13 -0
  237. package/src/components/documents/view/locales/et.ts +143 -0
  238. package/src/components/documents/view/locales/fi.ts +143 -0
  239. package/src/components/documents/view/locales/fr.ts +13 -0
  240. package/src/components/documents/view/locales/hr.ts +13 -0
  241. package/src/components/documents/view/locales/is.ts +143 -0
  242. package/src/components/documents/view/locales/it.ts +13 -0
  243. package/src/components/documents/view/locales/nb.ts +143 -0
  244. package/src/components/documents/view/locales/nl.ts +13 -0
  245. package/src/components/documents/view/locales/pl.ts +13 -0
  246. package/src/components/documents/view/locales/pt.ts +13 -0
  247. package/src/components/documents/view/locales/sk.ts +143 -0
  248. package/src/components/documents/view/locales/sl.ts +13 -0
  249. package/src/components/documents/view/locales/sv.ts +143 -0
  250. package/src/components/documents/view/use-document-download.ts +18 -17
  251. package/src/components/entities/create-entity-form.tsx +200 -12
  252. package/src/components/entities/entities.hooks.ts +15 -7
  253. package/src/components/entities/entity-settings-form/entity-settings-form.tsx +131 -75
  254. package/src/components/entities/entity-settings-form/input-with-preview.tsx +28 -4
  255. package/src/components/entities/entity-settings-form/locales/bg.ts +199 -0
  256. package/src/components/entities/entity-settings-form/locales/cs.ts +199 -0
  257. package/src/components/entities/entity-settings-form/locales/de.ts +18 -3
  258. package/src/components/entities/entity-settings-form/locales/en.ts +199 -0
  259. package/src/components/entities/entity-settings-form/locales/es.ts +18 -3
  260. package/src/components/entities/entity-settings-form/locales/et.ts +198 -0
  261. package/src/components/entities/entity-settings-form/locales/fi.ts +199 -0
  262. package/src/components/entities/entity-settings-form/locales/fr.ts +18 -3
  263. package/src/components/entities/entity-settings-form/locales/hr.ts +26 -11
  264. package/src/components/entities/entity-settings-form/locales/is.ts +199 -0
  265. package/src/components/entities/entity-settings-form/locales/it.ts +18 -3
  266. package/src/components/entities/entity-settings-form/locales/nb.ts +199 -0
  267. package/src/components/entities/entity-settings-form/locales/nl.ts +18 -3
  268. package/src/components/entities/entity-settings-form/locales/pl.ts +18 -3
  269. package/src/components/entities/entity-settings-form/locales/pt.ts +18 -3
  270. package/src/components/entities/entity-settings-form/locales/sk.ts +199 -0
  271. package/src/components/entities/entity-settings-form/locales/sl.ts +30 -15
  272. package/src/components/entities/entity-settings-form/locales/sv.ts +205 -0
  273. package/src/components/entities/fina-settings-form/fina-operator-required-dialog.tsx +34 -9
  274. package/src/components/entities/fina-settings-form/fina-settings-form.tsx +2 -0
  275. package/src/components/entities/fina-settings-form/fina-settings.hooks.ts +14 -45
  276. package/src/components/entities/fina-settings-form/locales/bg.ts +163 -0
  277. package/src/components/entities/fina-settings-form/locales/cs.ts +163 -0
  278. package/src/components/entities/fina-settings-form/locales/et.ts +163 -0
  279. package/src/components/entities/fina-settings-form/locales/fi.ts +163 -0
  280. package/src/components/entities/fina-settings-form/locales/hr.ts +11 -10
  281. package/src/components/entities/fina-settings-form/locales/is.ts +164 -0
  282. package/src/components/entities/fina-settings-form/locales/nb.ts +163 -0
  283. package/src/components/entities/fina-settings-form/locales/sk.ts +163 -0
  284. package/src/components/entities/fina-settings-form/locales/sl.ts +8 -7
  285. package/src/components/entities/fina-settings-form/locales/sv.ts +165 -0
  286. package/src/components/entities/furs-settings-form/furs-operator-required-dialog.tsx +34 -9
  287. package/src/components/entities/furs-settings-form/furs-settings-form.tsx +13 -1
  288. package/src/components/entities/furs-settings-form/furs-settings.hooks.ts +141 -42
  289. package/src/components/entities/furs-settings-form/locales/bg.ts +242 -0
  290. package/src/components/entities/furs-settings-form/locales/cs.ts +241 -0
  291. package/src/components/entities/furs-settings-form/locales/de.ts +42 -15
  292. package/src/components/entities/furs-settings-form/locales/en.ts +24 -0
  293. package/src/components/entities/furs-settings-form/locales/es.ts +42 -15
  294. package/src/components/entities/furs-settings-form/locales/et.ts +242 -0
  295. package/src/components/entities/furs-settings-form/locales/fi.ts +243 -0
  296. package/src/components/entities/furs-settings-form/locales/fr.ts +43 -15
  297. package/src/components/entities/furs-settings-form/locales/hr.ts +44 -19
  298. package/src/components/entities/furs-settings-form/locales/is.ts +242 -0
  299. package/src/components/entities/furs-settings-form/locales/it.ts +42 -15
  300. package/src/components/entities/furs-settings-form/locales/nb.ts +242 -0
  301. package/src/components/entities/furs-settings-form/locales/nl.ts +42 -15
  302. package/src/components/entities/furs-settings-form/locales/pl.ts +40 -15
  303. package/src/components/entities/furs-settings-form/locales/pt.ts +42 -15
  304. package/src/components/entities/furs-settings-form/locales/sk.ts +243 -0
  305. package/src/components/entities/furs-settings-form/locales/sl.ts +34 -10
  306. package/src/components/entities/furs-settings-form/locales/sv.ts +242 -0
  307. package/src/components/entities/furs-settings-form/sections/enable-fiscalization-section.tsx +11 -0
  308. package/src/components/entities/furs-settings-form/sections/furs-internal-act-download-card.tsx +111 -0
  309. package/src/components/entities/furs-settings-form/sections/general-settings-section.tsx +27 -0
  310. package/src/components/entities/furs-settings-form/sections/premises-management-section.tsx +23 -16
  311. package/src/components/entities/furs-settings-form/sections/register-premise-dialog.tsx +89 -31
  312. package/src/components/entities/settings/branding-settings-form.tsx +11 -30
  313. package/src/components/entities/settings/company-settings-form.tsx +2 -1
  314. package/src/components/entities/settings/defaults-settings-form.tsx +112 -9
  315. package/src/components/entities/settings/email-settings-form.tsx +245 -3
  316. package/src/components/entities/settings/eslog-settings-form.tsx +2 -1
  317. package/src/components/entities/settings/number-format-settings-form.tsx +2 -1
  318. package/src/components/entities/settings/pdf-template-selector/locales/bg.ts +20 -0
  319. package/src/components/entities/settings/pdf-template-selector/locales/cs.ts +20 -0
  320. package/src/components/entities/settings/pdf-template-selector/locales/en.ts +20 -0
  321. package/src/components/entities/settings/pdf-template-selector/locales/et.ts +19 -0
  322. package/src/components/entities/settings/pdf-template-selector/locales/fi.ts +20 -0
  323. package/src/components/entities/settings/pdf-template-selector/locales/is.ts +19 -0
  324. package/src/components/entities/settings/pdf-template-selector/locales/nb.ts +19 -0
  325. package/src/components/entities/settings/pdf-template-selector/locales/sk.ts +20 -0
  326. package/src/components/entities/settings/pdf-template-selector/locales/sv.ts +19 -0
  327. package/src/components/entities/settings/tax-rules-settings-form.tsx +21 -6
  328. package/src/components/estimates/create/create-estimate-form.tsx +70 -34
  329. package/src/components/estimates/create/locales/bg.ts +76 -0
  330. package/src/components/estimates/create/locales/cs.ts +76 -0
  331. package/src/components/estimates/create/locales/en.ts +76 -0
  332. package/src/components/estimates/create/locales/et.ts +76 -0
  333. package/src/components/estimates/create/locales/fi.ts +76 -0
  334. package/src/components/estimates/create/locales/hr.ts +8 -8
  335. package/src/components/estimates/create/locales/is.ts +76 -0
  336. package/src/components/estimates/create/locales/nb.ts +76 -0
  337. package/src/components/estimates/create/locales/sk.ts +76 -0
  338. package/src/components/estimates/create/locales/sl.ts +8 -8
  339. package/src/components/estimates/create/locales/sv.ts +76 -0
  340. package/src/components/estimates/create/prepare-estimate-submission.ts +4 -1
  341. package/src/components/estimates/estimates.hooks.ts +15 -3
  342. package/src/components/estimates/list/list-row-actions.tsx +34 -7
  343. package/src/components/estimates/list/list-table.tsx +78 -10
  344. package/src/components/estimates/list/locales/bg.ts +38 -0
  345. package/src/components/estimates/list/locales/cs.ts +38 -0
  346. package/src/components/estimates/list/locales/en.ts +27 -2
  347. package/src/components/estimates/list/locales/et.ts +38 -0
  348. package/src/components/estimates/list/locales/fi.ts +38 -0
  349. package/src/components/estimates/list/locales/hr.ts +2 -2
  350. package/src/components/estimates/list/locales/is.ts +38 -0
  351. package/src/components/estimates/list/locales/nb.ts +38 -0
  352. package/src/components/estimates/list/locales/sk.ts +38 -0
  353. package/src/components/estimates/list/locales/sv.ts +38 -0
  354. package/src/components/estimates/list/use-estimate-download.ts +3 -5
  355. package/src/components/export/document-export-form.tsx +72 -15
  356. package/src/components/export/sales-per-item-export-form.tsx +3 -2
  357. package/src/components/invoices/create/create-invoice-form.tsx +294 -76
  358. package/src/components/invoices/create/eslog-validation.ts +97 -8
  359. package/src/components/invoices/create/locales/bg.ts +164 -0
  360. package/src/components/invoices/create/locales/cs.ts +164 -0
  361. package/src/components/invoices/create/locales/de.ts +24 -0
  362. package/src/components/invoices/create/locales/en.ts +164 -0
  363. package/src/components/invoices/create/locales/es.ts +24 -0
  364. package/src/components/invoices/create/locales/et.ts +164 -0
  365. package/src/components/invoices/create/locales/fi.ts +164 -0
  366. package/src/components/invoices/create/locales/fr.ts +23 -0
  367. package/src/components/invoices/create/locales/hr.ts +32 -9
  368. package/src/components/invoices/create/locales/is.ts +164 -0
  369. package/src/components/invoices/create/locales/it.ts +24 -0
  370. package/src/components/invoices/create/locales/nb.ts +164 -0
  371. package/src/components/invoices/create/locales/nl.ts +23 -0
  372. package/src/components/invoices/create/locales/pl.ts +23 -0
  373. package/src/components/invoices/create/locales/pt.ts +24 -0
  374. package/src/components/invoices/create/locales/sk.ts +164 -0
  375. package/src/components/invoices/create/locales/sl.ts +32 -9
  376. package/src/components/invoices/create/locales/sv.ts +166 -0
  377. package/src/components/invoices/create/prepare-invoice-submission.ts +19 -2
  378. package/src/components/invoices/invoices-furs.hooks.ts +11 -8
  379. package/src/components/invoices/invoices.hooks.ts +27 -10
  380. package/src/components/invoices/list/list-row-actions.tsx +54 -21
  381. package/src/components/invoices/list/list-table.tsx +92 -11
  382. package/src/components/invoices/list/locales/bg.ts +49 -0
  383. package/src/components/invoices/list/locales/cs.ts +49 -0
  384. package/src/components/invoices/list/locales/en.ts +34 -2
  385. package/src/components/invoices/list/locales/et.ts +49 -0
  386. package/src/components/invoices/list/locales/fi.ts +49 -0
  387. package/src/components/invoices/list/locales/is.ts +49 -0
  388. package/src/components/invoices/list/locales/nb.ts +49 -0
  389. package/src/components/invoices/list/locales/sk.ts +49 -0
  390. package/src/components/invoices/list/locales/sv.ts +49 -0
  391. package/src/components/invoices/list/use-invoice-download.ts +3 -5
  392. package/src/components/invoices/send-email-dialog/locales/bg.ts +58 -0
  393. package/src/components/invoices/send-email-dialog/locales/cs.ts +58 -0
  394. package/src/components/invoices/send-email-dialog/locales/de.ts +39 -0
  395. package/src/components/invoices/send-email-dialog/locales/en.ts +58 -0
  396. package/src/components/invoices/send-email-dialog/locales/es.ts +39 -0
  397. package/src/components/invoices/send-email-dialog/locales/et.ts +58 -0
  398. package/src/components/invoices/send-email-dialog/locales/fi.ts +58 -0
  399. package/src/components/invoices/send-email-dialog/locales/fr.ts +39 -0
  400. package/src/components/invoices/send-email-dialog/locales/hr.ts +39 -0
  401. package/src/components/invoices/send-email-dialog/locales/is.ts +58 -0
  402. package/src/components/invoices/send-email-dialog/locales/it.ts +39 -0
  403. package/src/components/invoices/send-email-dialog/locales/nb.ts +58 -0
  404. package/src/components/invoices/send-email-dialog/locales/nl.ts +39 -0
  405. package/src/components/invoices/send-email-dialog/locales/pl.ts +39 -0
  406. package/src/components/invoices/send-email-dialog/locales/pt.ts +39 -0
  407. package/src/components/invoices/send-email-dialog/locales/sk.ts +58 -0
  408. package/src/components/invoices/send-email-dialog/locales/sl.ts +39 -0
  409. package/src/components/invoices/send-email-dialog/locales/sv.ts +58 -0
  410. package/src/components/invoices/send-email-dialog/send-email-dialog.tsx +188 -93
  411. package/src/components/invoices/view/eslog-info-display.tsx +2 -0
  412. package/src/components/invoices/view/fiscalization-status-card.tsx +2 -0
  413. package/src/components/items/create-item-form/create-item-form.tsx +29 -0
  414. package/src/components/items/create-item-form/locales/bg.ts +13 -0
  415. package/src/components/items/create-item-form/locales/cs.ts +13 -0
  416. package/src/components/items/create-item-form/locales/et.ts +13 -0
  417. package/src/components/items/create-item-form/locales/fi.ts +13 -0
  418. package/src/components/items/create-item-form/locales/is.ts +13 -0
  419. package/src/components/items/create-item-form/locales/nb.ts +13 -0
  420. package/src/components/items/create-item-form/locales/sk.ts +13 -0
  421. package/src/components/items/create-item-form/locales/sv.ts +13 -0
  422. package/src/components/items/edit-item-form/edit-item-form.tsx +39 -1
  423. package/src/components/items/edit-item-form/locales/bg.ts +12 -0
  424. package/src/components/items/edit-item-form/locales/cs.ts +12 -0
  425. package/src/components/items/edit-item-form/locales/en.ts +12 -0
  426. package/src/components/items/edit-item-form/locales/et.ts +12 -0
  427. package/src/components/items/edit-item-form/locales/fi.ts +12 -0
  428. package/src/components/items/edit-item-form/locales/is.ts +12 -0
  429. package/src/components/items/edit-item-form/locales/nb.ts +12 -0
  430. package/src/components/items/edit-item-form/locales/sk.ts +12 -0
  431. package/src/components/items/edit-item-form/locales/sv.ts +12 -0
  432. package/src/components/items/item-combobox.tsx +51 -18
  433. package/src/components/items/item-list-table/item-list-table.tsx +47 -23
  434. package/src/components/items/item-list-table/locales/bg.ts +16 -0
  435. package/src/components/items/item-list-table/locales/cs.ts +16 -0
  436. package/src/components/items/item-list-table/locales/en.ts +4 -3
  437. package/src/components/items/item-list-table/locales/et.ts +16 -0
  438. package/src/components/items/item-list-table/locales/fi.ts +16 -0
  439. package/src/components/items/item-list-table/locales/is.ts +16 -0
  440. package/src/components/items/item-list-table/locales/nb.ts +16 -0
  441. package/src/components/items/item-list-table/locales/sk.ts +16 -0
  442. package/src/components/items/item-list-table/locales/sv.ts +16 -0
  443. package/src/components/items/items.hooks.ts +15 -15
  444. package/src/components/payments/create-payment-form/create-payment-form.tsx +11 -7
  445. package/src/components/payments/create-payment-form/index.ts +1 -0
  446. package/src/components/payments/create-payment-form/locales/bg.ts +20 -0
  447. package/src/components/payments/create-payment-form/locales/cs.ts +20 -0
  448. package/src/components/payments/create-payment-form/locales/en.ts +20 -0
  449. package/src/components/payments/create-payment-form/locales/et.ts +20 -0
  450. package/src/components/payments/create-payment-form/locales/fi.ts +20 -0
  451. package/src/components/payments/create-payment-form/locales/hr.ts +2 -2
  452. package/src/components/payments/create-payment-form/locales/is.ts +20 -0
  453. package/src/components/payments/create-payment-form/locales/nb.ts +20 -0
  454. package/src/components/payments/create-payment-form/locales/sk.ts +20 -0
  455. package/src/components/payments/create-payment-form/locales/sl.ts +4 -4
  456. package/src/components/payments/create-payment-form/locales/sv.ts +20 -0
  457. package/src/components/payments/edit-payment-form/edit-payment-form.tsx +5 -1
  458. package/src/components/payments/edit-payment-form/locales/bg.ts +20 -0
  459. package/src/components/payments/edit-payment-form/locales/cs.ts +20 -0
  460. package/src/components/payments/edit-payment-form/locales/en.ts +20 -0
  461. package/src/components/payments/edit-payment-form/locales/et.ts +20 -0
  462. package/src/components/payments/edit-payment-form/locales/fi.ts +20 -0
  463. package/src/components/payments/edit-payment-form/locales/hr.ts +2 -2
  464. package/src/components/payments/edit-payment-form/locales/is.ts +20 -0
  465. package/src/components/payments/edit-payment-form/locales/nb.ts +20 -0
  466. package/src/components/payments/edit-payment-form/locales/sk.ts +20 -0
  467. package/src/components/payments/edit-payment-form/locales/sl.ts +4 -4
  468. package/src/components/payments/edit-payment-form/locales/sv.ts +20 -0
  469. package/src/components/payments/list/list-row-actions.tsx +10 -2
  470. package/src/components/payments/list/list-table.tsx +51 -45
  471. package/src/components/payments/list/locales/bg.ts +42 -0
  472. package/src/components/payments/list/locales/cs.ts +42 -0
  473. package/src/components/payments/list/locales/de.ts +18 -0
  474. package/src/components/payments/list/locales/en.ts +37 -2
  475. package/src/components/payments/list/locales/es.ts +18 -0
  476. package/src/components/payments/list/locales/et.ts +42 -0
  477. package/src/components/payments/list/locales/fi.ts +42 -0
  478. package/src/components/payments/list/locales/fr.ts +18 -0
  479. package/src/components/payments/list/locales/hr.ts +18 -0
  480. package/src/components/payments/list/locales/is.ts +42 -0
  481. package/src/components/payments/list/locales/it.ts +18 -0
  482. package/src/components/payments/list/locales/nb.ts +42 -0
  483. package/src/components/payments/list/locales/nl.ts +18 -0
  484. package/src/components/payments/list/locales/pl.ts +18 -0
  485. package/src/components/payments/list/locales/pt.ts +18 -0
  486. package/src/components/payments/list/locales/sk.ts +42 -0
  487. package/src/components/payments/list/locales/sl.ts +18 -1
  488. package/src/components/payments/list/locales/sv.ts +42 -0
  489. package/src/components/payments/payments.hooks.ts +13 -6
  490. package/src/components/recurring-invoices/create-recurring-invoice-form/create-recurring-invoice-form.tsx +23 -17
  491. package/src/components/recurring-invoices/create-recurring-invoice-form/locales/bg.ts +44 -0
  492. package/src/components/recurring-invoices/create-recurring-invoice-form/locales/cs.ts +44 -0
  493. package/src/components/recurring-invoices/create-recurring-invoice-form/locales/en.ts +44 -0
  494. package/src/components/recurring-invoices/create-recurring-invoice-form/locales/et.ts +44 -0
  495. package/src/components/recurring-invoices/create-recurring-invoice-form/locales/fi.ts +44 -0
  496. package/src/components/recurring-invoices/create-recurring-invoice-form/locales/hr.ts +6 -6
  497. package/src/components/recurring-invoices/create-recurring-invoice-form/locales/is.ts +44 -0
  498. package/src/components/recurring-invoices/create-recurring-invoice-form/locales/nb.ts +44 -0
  499. package/src/components/recurring-invoices/create-recurring-invoice-form/locales/sk.ts +44 -0
  500. package/src/components/recurring-invoices/create-recurring-invoice-form/locales/sl.ts +4 -4
  501. package/src/components/recurring-invoices/create-recurring-invoice-form/locales/sv.ts +44 -0
  502. package/src/components/recurring-invoices/list/list-row-actions.tsx +3 -5
  503. package/src/components/recurring-invoices/list/list-table.tsx +10 -7
  504. package/src/components/recurring-invoices/list/locales/bg.ts +28 -0
  505. package/src/components/recurring-invoices/list/locales/cs.ts +28 -0
  506. package/src/components/recurring-invoices/list/locales/en.ts +23 -0
  507. package/src/components/recurring-invoices/list/locales/et.ts +28 -0
  508. package/src/components/recurring-invoices/list/locales/fi.ts +28 -0
  509. package/src/components/recurring-invoices/list/locales/is.ts +28 -0
  510. package/src/components/recurring-invoices/list/locales/nb.ts +28 -0
  511. package/src/components/recurring-invoices/list/locales/sk.ts +28 -0
  512. package/src/components/recurring-invoices/list/locales/sv.ts +28 -0
  513. package/src/components/recurring-invoices/recurring-invoices.hooks.ts +11 -8
  514. package/src/components/request-logs/request-log-detail.tsx +30 -23
  515. package/src/components/request-logs/request-log-list-table.tsx +88 -45
  516. package/src/components/table/README.md +47 -9
  517. package/src/components/table/data-table.tsx +232 -92
  518. package/src/components/table/filter-bar.tsx +1 -1
  519. package/src/components/table/filter-panel.tsx +51 -22
  520. package/src/components/table/hooks/use-table-state.ts +64 -11
  521. package/src/components/table/index.ts +3 -0
  522. package/src/components/table/locales.ts +119 -4
  523. package/src/components/table/selection-toolbar.tsx +65 -9
  524. package/src/components/table/sorting.ts +80 -0
  525. package/src/components/table/table-skeleton.tsx +15 -9
  526. package/src/components/table/types.ts +17 -0
  527. package/src/components/tax-reports/index.ts +8 -0
  528. package/src/components/tax-reports/kir-export-form.tsx +4 -5
  529. package/src/components/tax-reports/slovenia-accounting-mappings-fields.tsx +271 -0
  530. package/src/components/tax-reports/slovenia-tax-profile-step.tsx +21 -10
  531. package/src/components/tax-reports/slovenia-vod-export-form.tsx +452 -0
  532. package/src/components/tax-reports/slovenia-yearly-export-form.tsx +17 -16
  533. package/src/components/tax-reports/slovenia-yearly-review-step.tsx +40 -18
  534. package/src/components/taxes/create-tax-form/create-tax-form.tsx +48 -2
  535. package/src/components/taxes/create-tax-form/locales/bg.ts +8 -0
  536. package/src/components/taxes/create-tax-form/locales/cs.ts +8 -0
  537. package/src/components/taxes/create-tax-form/locales/et.ts +8 -0
  538. package/src/components/taxes/create-tax-form/locales/fi.ts +8 -0
  539. package/src/components/taxes/create-tax-form/locales/is.ts +8 -0
  540. package/src/components/taxes/create-tax-form/locales/nb.ts +8 -0
  541. package/src/components/taxes/create-tax-form/locales/sk.ts +8 -0
  542. package/src/components/taxes/create-tax-form/locales/sv.ts +8 -0
  543. package/src/components/taxes/edit-tax-form/edit-tax-form.tsx +80 -11
  544. package/src/components/taxes/edit-tax-form/locales/bg.ts +6 -0
  545. package/src/components/taxes/edit-tax-form/locales/cs.ts +6 -0
  546. package/src/components/taxes/edit-tax-form/locales/en.ts +6 -0
  547. package/src/components/taxes/edit-tax-form/locales/et.ts +6 -0
  548. package/src/components/taxes/edit-tax-form/locales/fi.ts +6 -0
  549. package/src/components/taxes/edit-tax-form/locales/is.ts +6 -0
  550. package/src/components/taxes/edit-tax-form/locales/nb.ts +6 -0
  551. package/src/components/taxes/edit-tax-form/locales/sk.ts +6 -0
  552. package/src/components/taxes/edit-tax-form/locales/sv.ts +6 -0
  553. package/src/components/taxes/tax-list-table/locales/bg.ts +17 -0
  554. package/src/components/taxes/tax-list-table/locales/cs.ts +17 -0
  555. package/src/components/taxes/tax-list-table/locales/en.ts +4 -3
  556. package/src/components/taxes/tax-list-table/locales/et.ts +17 -0
  557. package/src/components/taxes/tax-list-table/locales/fi.ts +17 -0
  558. package/src/components/taxes/tax-list-table/locales/is.ts +17 -0
  559. package/src/components/taxes/tax-list-table/locales/nb.ts +17 -0
  560. package/src/components/taxes/tax-list-table/locales/sk.ts +17 -0
  561. package/src/components/taxes/tax-list-table/locales/sv.ts +17 -0
  562. package/src/components/taxes/tax-list-table/tax-list-table.tsx +53 -19
  563. package/src/components/taxes/taxes.hooks.ts +53 -12
  564. package/src/components/ui/badge.tsx +1 -1
  565. package/src/components/ui/button.tsx +1 -1
  566. package/src/components/ui/drawer.tsx +2 -2
  567. package/src/components/ui/form.tsx +118 -2
  568. package/src/components/ui/progress.tsx +6 -4
  569. package/src/components/ui/select.tsx +118 -1
  570. package/src/components/ui/sidebar.tsx +3 -2
  571. package/src/components/ui/sonner.tsx +17 -36
  572. package/src/components/ui/sticky-form-footer.tsx +6 -1
  573. package/src/components/ui/tooltip.tsx +15 -2
  574. package/src/components/webhook-logs/webhook-delivery-detail.tsx +22 -22
  575. package/src/components/webhook-logs/webhook-delivery-list-table.tsx +92 -17
  576. package/src/components/wl-subscription/locked-feature.tsx +11 -10
  577. package/src/components/wl-subscription/paywall.tsx +184 -72
  578. package/src/components/wl-subscription/upgrade-modal.tsx +28 -31
  579. package/src/generate-schemas.ts +17 -7
  580. package/src/generated/schemas/account_webhook.ts +43 -0
  581. package/src/generated/schemas/accountwebhook.ts +67 -0
  582. package/src/generated/schemas/entity.ts +343 -4
  583. package/src/generated/schemas/exportsloveniavodxml_body.ts +16 -0
  584. package/src/generated/schemas/exportsloveniayearlynormiranireport_body.ts +27 -0
  585. package/src/generated/schemas/furssettings.ts +1 -0
  586. package/src/generated/schemas/incomingpurchasedocument.ts +198 -0
  587. package/src/generated/schemas/incomingpurchasedocumentpayment.ts +38 -0
  588. package/src/generated/schemas/index.ts +12 -0
  589. package/src/generated/schemas/item.ts +36 -0
  590. package/src/generated/schemas/me.ts +23 -19
  591. package/src/generated/schemas/order.ts +2 -0
  592. package/src/generated/schemas/orderintegration.ts +8 -4
  593. package/src/generated/schemas/payment.ts +5 -0
  594. package/src/generated/schemas/ptatcudseries.ts +30 -0
  595. package/src/generated/schemas/renderadvanceinvoicepreview_body.ts +35 -3
  596. package/src/generated/schemas/rendercreditnotepreview_body.ts +35 -3
  597. package/src/generated/schemas/renderdeliverynotepreview_body.ts +12 -5
  598. package/src/generated/schemas/renderestimatepreview_body.ts +38 -5
  599. package/src/generated/schemas/renderinvoicepreview_body.ts +39 -5
  600. package/src/generated/schemas/senddocument_body.ts +1 -0
  601. package/src/generated/schemas/sendemail_body.ts +67 -39
  602. package/src/generated/schemas/sloveniataxprofile.ts +118 -0
  603. package/src/generated/schemas/starteslogexport_body.ts +33 -0
  604. package/src/generated/schemas/startpdfexport_body.ts +94 -78
  605. package/src/generated/schemas/supplier.ts +59 -0
  606. package/src/generated/schemas/syncshopifyorders_body.ts +20 -0
  607. package/src/generated/schemas/tax.ts +2 -0
  608. package/src/generated/schemas/uploadfile_body.ts +1 -0
  609. package/src/generated/schemas/userptsettings.ts +26 -0
  610. package/src/generated/schemas/voidinvoice_body.ts +20 -0
  611. package/src/generated/schemas/webhook.ts +2 -0
  612. package/src/hooks/create-resource-hooks.ts +22 -19
  613. package/src/hooks/use-duplicate-document.ts +10 -8
  614. package/src/hooks/use-eslog-validation.ts +5 -1
  615. package/src/hooks/use-next-document-number.ts +13 -6
  616. package/src/hooks/use-resolved-entity-id.ts +14 -0
  617. package/src/hooks/use-resource-mutation.ts +11 -30
  618. package/src/hooks/use-transaction-type-check.ts +3 -8
  619. package/src/lib/browser-cookies.ts +1 -1
  620. package/src/lib/country-capabilities.ts +114 -0
  621. package/src/lib/date-fns-locale.ts +1 -20
  622. package/src/lib/eslog-export.ts +32 -0
  623. package/src/lib/fiscalization-options.ts +21 -1
  624. package/src/lib/formatting.ts +27 -0
  625. package/src/lib/furs-error-utils.ts +29 -0
  626. package/src/lib/locale.ts +4 -0
  627. package/src/lib/payment-display.ts +95 -0
  628. package/src/lib/pt-document-input.ts +67 -0
  629. package/src/lib/schemas/shared.ts +1 -0
  630. package/src/lib/template-variables.tsx +102 -4
  631. package/src/lib/translation.ts +51 -33
  632. package/src/lib/white-label-capabilities.ts +626 -0
  633. package/src/lib/zod-validation-message.ts +291 -0
  634. package/src/providers/entities-provider.tsx +32 -14
  635. package/src/providers/sdk-provider.tsx +112 -12
  636. package/src/providers/space-invoices-provider.tsx +129 -0
  637. package/src/providers/white-label-provider.tsx +96 -4
  638. package/src/providers/wl-subscription-provider.tsx +144 -10
@@ -0,0 +1,17 @@
1
+ export default {
2
+ Name: "Navn",
3
+ "Tax Rates": "Avgiftssatser",
4
+ Created: "Opprettet",
5
+ Default: "Standard",
6
+ "Unnamed Tax": "Unnamed Tax",
7
+ "Open menu": "Åpne menyen",
8
+ Actions: "Handlinger",
9
+ "Copy tax ID": "Copy tax ID",
10
+ "View tax": "View tax",
11
+ "Your list is empty": "Your tax list is empty",
12
+ "Get started by creating your first entry": "Get started by creating your first tax",
13
+ "No results found": "No taxes found",
14
+ "Try adjusting your search criteria": "Try adjusting your search criteria",
15
+ "Clear search": "Clear search",
16
+ "Clear all": "Clear all",
17
+ } as const;
@@ -0,0 +1,17 @@
1
+ export default {
2
+ Name: "Meno",
3
+ "Tax Rates": "Daňové sadzby",
4
+ Created: "Vytvorené",
5
+ Default: "Predvolená",
6
+ "Unnamed Tax": "Unnamed Tax",
7
+ "Open menu": "Otvoriť menu",
8
+ Actions: "Akcie",
9
+ "Copy tax ID": "Copy tax ID",
10
+ "View tax": "View tax",
11
+ "Your list is empty": "Your tax list is empty",
12
+ "Get started by creating your first entry": "Get started by creating your first tax",
13
+ "No results found": "No taxes found",
14
+ "Try adjusting your search criteria": "Try adjusting your search criteria",
15
+ "Clear search": "Clear search",
16
+ "Clear all": "Clear all",
17
+ } as const;
@@ -0,0 +1,17 @@
1
+ export default {
2
+ Name: "Namn",
3
+ "Tax Rates": "Skattesatser",
4
+ Created: "Skapad",
5
+ Default: "Standard",
6
+ "Unnamed Tax": "Unnamed Tax",
7
+ "Open menu": "Öppna menyn",
8
+ Actions: "Åtgärder",
9
+ "Copy tax ID": "Copy tax ID",
10
+ "View tax": "View tax",
11
+ "Your list is empty": "Your tax list is empty",
12
+ "Get started by creating your first entry": "Get started by creating your first tax",
13
+ "No results found": "No taxes found",
14
+ "Try adjusting your search criteria": "Try adjusting your search criteria",
15
+ "Clear search": "Clear search",
16
+ "Clear all": "Clear all",
17
+ } as const;
@@ -1,11 +1,15 @@
1
1
  import type { Tax } from "@spaceinvoices/js-sdk";
2
- import { withTableTranslations } from "../../table/locales";
2
+ import { taxes } from "@spaceinvoices/js-sdk";
3
+ import { Percent } from "lucide-react";
4
+ import { useMemo } from "react";
5
+ import { Badge } from "@/ui/components/ui/badge";
6
+ import { Button } from "@/ui/components/ui/button";
3
7
  import type { ComponentTranslationProps } from "@/ui/lib/translation";
4
8
  import { createTranslation } from "@/ui/lib/translation";
5
- import { useSDK } from "@/ui/providers/sdk-provider";
6
9
  import { DataTable } from "../../table/data-table";
7
10
  import { useTableFetch } from "../../table/hooks/use-table-fetch";
8
- import type { ListTableProps, TableQueryParams } from "../../table/types";
11
+ import { withTableTranslations } from "../../table/locales";
12
+ import type { Column, ListTableProps, TableQueryParams } from "../../table/types";
9
13
  import { TAXES_CACHE_KEY } from "../taxes.hooks";
10
14
  import de from "./locales/de";
11
15
  import en from "./locales/en";
@@ -17,8 +21,7 @@ import nl from "./locales/nl";
17
21
  import pl from "./locales/pl";
18
22
  import pt from "./locales/pt";
19
23
  import sl from "./locales/sl";
20
- import TaxListHeader from "./tax-list-header";
21
- import TaxListRow from "./tax-list-row";
24
+ import TaxListRowActions from "./tax-list-row-actions";
22
25
 
23
26
  const translations = withTableTranslations({
24
27
  en,
@@ -49,25 +52,56 @@ export default function TaxListTable({
49
52
  ...i18nProps
50
53
  }: TaxListTableProps) {
51
54
  const t = createTranslation({ translations, ...i18nProps });
52
- const { sdk } = useSDK();
53
-
54
55
  const handleFetch = useTableFetch((params: TableQueryParams) => {
55
- if (!sdk) throw new Error("SDK not initialized");
56
- return sdk.taxes.list(params as any);
56
+ return taxes.list(params as any);
57
57
  }, entityId);
58
58
 
59
+ const columns: Column<Tax>[] = useMemo(
60
+ () => [
61
+ {
62
+ id: "name",
63
+ header: t("Name"),
64
+ sort: true,
65
+ cell: (tax) => (
66
+ <div className="flex items-center gap-2">
67
+ <Button variant="link" className="py-0 underline" onClick={() => onRowClick?.(tax)}>
68
+ <Percent className="h-4 w-4 flex-shrink-0" />
69
+ {tax.name || t("Unnamed Tax")}
70
+ </Button>
71
+ {tax.is_default && (
72
+ <Badge variant="secondary" className="text-xs">
73
+ {t("Default")}
74
+ </Badge>
75
+ )}
76
+ </div>
77
+ ),
78
+ },
79
+ {
80
+ id: "tax_rates",
81
+ header: t("Tax Rates"),
82
+ cell: (tax) => (tax.tax_rates?.length ? tax.tax_rates.map((rate) => `${rate.rate}%`).join(", ") : "-"),
83
+ },
84
+ {
85
+ id: "created_at",
86
+ header: t("Created"),
87
+ sort: {
88
+ defaultDirection: "desc",
89
+ },
90
+ cell: (tax) => new Date(tax.created_at).toLocaleDateString(),
91
+ },
92
+ {
93
+ id: "actions",
94
+ header: "",
95
+ align: "right",
96
+ cell: (tax) => <TaxListRowActions tax={tax} onView={onView} t={t} />,
97
+ },
98
+ ],
99
+ [t, onRowClick, onView],
100
+ );
101
+
59
102
  return (
60
103
  <DataTable
61
- columns={[
62
- { id: "name", header: t("Name") },
63
- { id: "tax_rates", header: t("Tax Rates") },
64
- { id: "created_at", header: t("Created") },
65
- { id: "actions", header: "", align: "right" },
66
- ]}
67
- renderRow={(tax) => (
68
- <TaxListRow tax={tax} key={tax.id} onRowClick={(tax) => onRowClick?.(tax)} onView={onView} t={t} />
69
- )}
70
- renderHeader={() => <TaxListHeader t={t} />}
104
+ columns={columns}
71
105
  queryParams={queryParams}
72
106
  resourceName="tax"
73
107
  cacheKey={TAXES_CACHE_KEY}
@@ -1,7 +1,12 @@
1
- import type { CreateTaxBody, PaginatedResponse, Tax, UpdateTaxBody } from "@spaceinvoices/js-sdk";
2
- import { type UseQueryOptions, useQuery } from "@tanstack/react-query";
1
+ import { type CreateTaxBody, type PaginatedResponse, type Tax, taxes, type UpdateTaxBody } from "@spaceinvoices/js-sdk";
2
+ import {
3
+ type UseMutationOptions,
4
+ type UseQueryOptions,
5
+ useMutation,
6
+ useQuery,
7
+ useQueryClient,
8
+ } from "@tanstack/react-query";
3
9
  import { createResourceHooks } from "../../hooks/create-resource-hooks";
4
- import { useSDK } from "../../providers/sdk-provider";
5
10
 
6
11
  export const TAXES_CACHE_KEY = "taxes";
7
12
 
@@ -11,12 +16,50 @@ const {
11
16
  useDeleteResource: useDeleteTax,
12
17
  useRestoreResource: useRestoreTax,
13
18
  usePermanentDeleteResource: usePermanentDeleteTax,
14
- } = createResourceHooks<Tax, CreateTaxBody, UpdateTaxBody>("taxes", TAXES_CACHE_KEY, {
15
- restoreMethodName: "restoreTax",
16
- permanentDeleteMethodName: "permanentDeleteTax",
17
- });
19
+ } = createResourceHooks<Tax, CreateTaxBody, UpdateTaxBody>(
20
+ {
21
+ create: taxes.create,
22
+ update: taxes.update,
23
+ delete: taxes.delete,
24
+ restore: taxes.restoreTax,
25
+ permanentDelete: taxes.permanentDeleteTax,
26
+ },
27
+ TAXES_CACHE_KEY,
28
+ );
18
29
 
19
- export { useCreateTax, useUpdateTax, useDeleteTax, useRestoreTax, usePermanentDeleteTax };
30
+ export { useCreateTax, useDeleteTax, usePermanentDeleteTax, useRestoreTax, useUpdateTax };
31
+
32
+ type ReplaceTaxVariables = {
33
+ id: string;
34
+ data: CreateTaxBody;
35
+ };
36
+
37
+ export function useReplaceTax(
38
+ options: {
39
+ entityId?: string | null;
40
+ onSuccess?: (data: Tax, variables: ReplaceTaxVariables, context: unknown) => void;
41
+ onError?: (error: Error, variables: ReplaceTaxVariables, context: unknown) => void;
42
+ mutationOptions?: Omit<
43
+ UseMutationOptions<Tax, Error, ReplaceTaxVariables, unknown>,
44
+ "mutationFn" | "onSuccess" | "onError"
45
+ >;
46
+ } = {},
47
+ ) {
48
+ const queryClient = useQueryClient();
49
+
50
+ return useMutation<Tax, Error, ReplaceTaxVariables>({
51
+ mutationFn: async ({ id, data }) => taxes.replaceTax(id, data, { entity_id: options.entityId ?? undefined }),
52
+ onSuccess: (data, variables, context) => {
53
+ queryClient.invalidateQueries({ queryKey: [TAXES_CACHE_KEY] });
54
+ queryClient.invalidateQueries({ queryKey: [TAXES_CACHE_KEY, variables.id, options.entityId] });
55
+ options.onSuccess?.(data, variables, context);
56
+ },
57
+ onError: (error, variables, context) => {
58
+ options.onError?.(error, variables, context);
59
+ },
60
+ ...options.mutationOptions,
61
+ });
62
+ }
20
63
 
21
64
  /**
22
65
  * Hook to fetch all taxes for an entity
@@ -25,16 +68,14 @@ export function useListTaxes(
25
68
  entityId: string,
26
69
  options?: Omit<UseQueryOptions<PaginatedResponse<Tax>, Error>, "queryKey" | "queryFn">,
27
70
  ) {
28
- const { sdk } = useSDK();
29
-
30
71
  return useQuery({
31
72
  queryKey: [TAXES_CACHE_KEY, entityId],
32
73
  queryFn: () =>
33
- sdk.taxes.list({
74
+ taxes.list({
34
75
  entity_id: entityId,
35
76
  limit: 100,
36
77
  }),
37
- enabled: !!sdk && !!entityId,
78
+ enabled: !!entityId,
38
79
  ...options,
39
80
  });
40
81
  }
@@ -14,7 +14,7 @@ const badgeVariants = cva(
14
14
  destructive: "bg-destructive/10 [a]:hover:bg-destructive/20 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 text-destructive dark:bg-destructive/20",
15
15
  outline: "border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground",
16
16
  ghost: "hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50",
17
- link: "text-primary underline-offset-4 hover:underline",
17
+ link: "text-primary-readable underline-offset-4 hover:underline",
18
18
  },
19
19
  },
20
20
  defaultVariants: {
@@ -14,7 +14,7 @@ const buttonVariants = cva(
14
14
  secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground",
15
15
  ghost: "hover:bg-muted hover:text-foreground dark:hover:bg-muted/50 aria-expanded:bg-muted aria-expanded:text-foreground",
16
16
  destructive: "bg-destructive/10 hover:bg-destructive/20 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/20 text-destructive focus-visible:border-destructive/40 dark:hover:bg-destructive/30",
17
- link: "text-primary underline-offset-4 hover:underline",
17
+ link: "text-primary-readable underline-offset-4 hover:underline",
18
18
  },
19
19
  size: {
20
20
  default: "h-9 gap-1.5 px-2.5 in-data-[slot=button-group]:rounded-md has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",
@@ -51,7 +51,7 @@ function DrawerContent({
51
51
  <DrawerPrimitive.Content
52
52
  data-slot="drawer-content"
53
53
  className={cn(
54
- "bg-background flex h-auto flex-col text-sm data-[vaul-drawer-direction=bottom]:inset-x-0 data-[vaul-drawer-direction=bottom]:bottom-0 data-[vaul-drawer-direction=bottom]:mt-24 data-[vaul-drawer-direction=bottom]:max-h-[80vh] data-[vaul-drawer-direction=bottom]:rounded-t-xl data-[vaul-drawer-direction=bottom]:border-t data-[vaul-drawer-direction=left]:inset-y-0 data-[vaul-drawer-direction=left]:left-0 data-[vaul-drawer-direction=left]:w-3/4 data-[vaul-drawer-direction=left]:rounded-r-xl data-[vaul-drawer-direction=left]:border-r data-[vaul-drawer-direction=right]:inset-y-0 data-[vaul-drawer-direction=right]:right-0 data-[vaul-drawer-direction=right]:w-3/4 data-[vaul-drawer-direction=right]:rounded-l-xl data-[vaul-drawer-direction=right]:border-l data-[vaul-drawer-direction=top]:inset-x-0 data-[vaul-drawer-direction=top]:top-0 data-[vaul-drawer-direction=top]:mb-24 data-[vaul-drawer-direction=top]:max-h-[80vh] data-[vaul-drawer-direction=top]:rounded-b-xl data-[vaul-drawer-direction=top]:border-b data-[vaul-drawer-direction=left]:sm:max-w-sm data-[vaul-drawer-direction=right]:sm:max-w-sm group/drawer-content fixed z-50",
54
+ "bg-background fixed z-50 flex h-auto flex-col text-sm data-[vaul-drawer-direction=bottom]:inset-x-0 data-[vaul-drawer-direction=bottom]:bottom-0 data-[vaul-drawer-direction=bottom]:mt-24 data-[vaul-drawer-direction=bottom]:max-h-[80vh] data-[vaul-drawer-direction=bottom]:rounded-t-xl data-[vaul-drawer-direction=bottom]:border-t data-[vaul-drawer-direction=bottom]:pb-[calc(max(1rem,env(safe-area-inset-bottom))+4.5rem)] data-[vaul-drawer-direction=left]:inset-y-0 data-[vaul-drawer-direction=left]:left-0 data-[vaul-drawer-direction=left]:w-3/4 data-[vaul-drawer-direction=left]:rounded-r-xl data-[vaul-drawer-direction=left]:border-r data-[vaul-drawer-direction=right]:inset-y-0 data-[vaul-drawer-direction=right]:right-0 data-[vaul-drawer-direction=right]:w-3/4 data-[vaul-drawer-direction=right]:rounded-l-xl data-[vaul-drawer-direction=right]:border-l data-[vaul-drawer-direction=top]:inset-x-0 data-[vaul-drawer-direction=top]:top-0 data-[vaul-drawer-direction=top]:mb-24 data-[vaul-drawer-direction=top]:max-h-[80vh] data-[vaul-drawer-direction=top]:rounded-b-xl data-[vaul-drawer-direction=top]:border-b data-[vaul-drawer-direction=left]:sm:max-w-sm data-[vaul-drawer-direction=right]:sm:max-w-sm group/drawer-content",
55
55
  className
56
56
  )}
57
57
  {...props}
@@ -77,7 +77,7 @@ function DrawerFooter({ className, ...props }: React.ComponentProps<"div">) {
77
77
  return (
78
78
  <div
79
79
  data-slot="drawer-footer"
80
- className={cn("gap-2 p-4 mt-auto flex flex-col", className)}
80
+ className={cn("mt-auto flex flex-col gap-2 p-4 pb-[max(1rem,env(safe-area-inset-bottom))]", className)}
81
81
  {...props}
82
82
  />
83
83
  )
@@ -6,16 +6,96 @@ import { Slot } from "@radix-ui/react-slot"
6
6
  import {
7
7
  Controller,
8
8
  type ControllerProps,
9
+ type FieldErrors,
9
10
  type FieldPath,
10
11
  type FieldValues,
11
12
  FormProvider,
13
+ type UseFormReturn,
12
14
  useFormContext,
13
15
  } from "react-hook-form"
14
16
 
15
17
  import { cn } from "@/ui/lib/utils"
16
18
  import { Label } from "@/ui/components/ui/label"
19
+ import { getValidationLocale, translateZodValidationMessage } from "@/ui/lib/zod-validation-message"
17
20
 
18
- const Form = FormProvider
21
+ const ValidationLocaleContext = React.createContext<string | undefined>(undefined)
22
+
23
+ type FormProps = UseFormReturn<any> & {
24
+ children: React.ReactNode
25
+ locale?: string
26
+ }
27
+
28
+ function Form({ locale, ...props }: FormProps) {
29
+ const { watch, getFieldState, clearErrors, trigger } = props
30
+
31
+ React.useEffect(() => {
32
+ const subscription = watch((_value, { name, type }) => {
33
+ if (!name || type !== "change") return
34
+
35
+ const fieldState = getFieldState(name)
36
+ if (!fieldState.error) return
37
+
38
+ // Manual/setError flows should clear immediately once the user edits the field again.
39
+ if (fieldState.error.type === "manual" || fieldState.error.type === "submit" || fieldState.error.type === "eslog") {
40
+ clearErrors(name)
41
+ return
42
+ }
43
+
44
+ void trigger(name)
45
+ })
46
+
47
+ return () => subscription.unsubscribe()
48
+ }, [watch, getFieldState, clearErrors, trigger])
49
+
50
+ return (
51
+ <ValidationLocaleContext.Provider value={locale}>
52
+ <FormProvider {...props} />
53
+ </ValidationLocaleContext.Provider>
54
+ )
55
+ }
56
+
57
+ function scrollFormToFirstError(form: HTMLFormElement | null) {
58
+ if (!form) return
59
+
60
+ const scrollToInvalidField = () => {
61
+ const errorTarget = form.querySelector<HTMLElement>('[data-form-error-summary="true"], [aria-invalid="true"]')
62
+ if (!errorTarget) return
63
+
64
+ errorTarget.scrollIntoView({ behavior: "smooth", block: "center" })
65
+
66
+ if (errorTarget.matches('[aria-invalid="true"]') && typeof errorTarget.focus === "function") {
67
+ errorTarget.focus({ preventScroll: true })
68
+ }
69
+ }
70
+
71
+ requestAnimationFrame(() => {
72
+ requestAnimationFrame(scrollToInvalidField)
73
+ })
74
+ }
75
+
76
+ function collectFormErrorPaths(errors: FieldErrors<FieldValues>, prefix = ""): string[] {
77
+ const paths: string[] = []
78
+
79
+ for (const [key, value] of Object.entries(errors)) {
80
+ if (!value) continue
81
+
82
+ const nextPrefix = prefix ? `${prefix}.${key}` : key
83
+ if (key === "root") {
84
+ paths.push(nextPrefix)
85
+ continue
86
+ }
87
+
88
+ if (typeof value === "object") {
89
+ if ("message" in value || "type" in value || "ref" in value) {
90
+ paths.push(nextPrefix)
91
+ }
92
+
93
+ paths.push(...collectFormErrorPaths(value as FieldErrors<FieldValues>, nextPrefix))
94
+ }
95
+ }
96
+
97
+ return [...new Set(paths)]
98
+ }
19
99
 
20
100
  type FormFieldContextValue<
21
101
  TFieldValues extends FieldValues = FieldValues,
@@ -135,8 +215,11 @@ function FormDescription({ className, ...props }: React.ComponentProps<"p">) {
135
215
  }
136
216
 
137
217
  function FormMessage({ className, children, ...props }: React.ComponentProps<"p">) {
218
+ const validationLocale = React.useContext(ValidationLocaleContext)
138
219
  const { error, formMessageId } = useFormField()
139
- const body = error ? String(error?.message ?? "") : children
220
+ const body = error
221
+ ? translateZodValidationMessage(String(error?.message ?? ""), getValidationLocale(validationLocale))
222
+ : children
140
223
 
141
224
  if (!body) {
142
225
  return null
@@ -154,6 +237,37 @@ function FormMessage({ className, children, ...props }: React.ComponentProps<"p"
154
237
  )
155
238
  }
156
239
 
240
+ function FormRoot({ className, ...props }: React.ComponentProps<"form">) {
241
+ const { formState } = useFormContext()
242
+ const formRef = React.useRef<HTMLFormElement>(null)
243
+ const lastSubmitCountRef = React.useRef(0)
244
+ const hasScrolledForSubmitRef = React.useRef(false)
245
+ const errorPaths = React.useMemo(() => collectFormErrorPaths(formState.errors), [formState.errors])
246
+
247
+ React.useEffect(() => {
248
+ if (formState.submitCount !== lastSubmitCountRef.current) {
249
+ lastSubmitCountRef.current = formState.submitCount
250
+ hasScrolledForSubmitRef.current = false
251
+ }
252
+
253
+ if (!formState.isSubmitted || errorPaths.length === 0 || hasScrolledForSubmitRef.current) {
254
+ return
255
+ }
256
+
257
+ hasScrolledForSubmitRef.current = true
258
+ scrollFormToFirstError(formRef.current)
259
+ }, [errorPaths.length, formState.isSubmitted, formState.submitCount])
260
+
261
+ return (
262
+ <form
263
+ ref={formRef}
264
+ data-slot="form-root"
265
+ className={className}
266
+ {...props}
267
+ />
268
+ )
269
+ }
270
+
157
271
  export {
158
272
  useFormField,
159
273
  Form,
@@ -163,4 +277,6 @@ export {
163
277
  FormDescription,
164
278
  FormMessage,
165
279
  FormField,
280
+ FormRoot,
281
+ scrollFormToFirstError,
166
282
  }
@@ -7,17 +7,19 @@ function Progress({
7
7
  className,
8
8
  ...props
9
9
  }: ProgressPrimitive.Root.Props & { className?: string }) {
10
+ const normalizedValue = Math.min(Math.max(value ?? 0, 0), 100)
11
+
10
12
  return (
11
13
  <ProgressPrimitive.Root
12
14
  data-slot="progress"
13
- value={value}
15
+ value={normalizedValue}
14
16
  className={cn("relative w-full overflow-hidden rounded-full bg-primary/20", className)}
15
17
  {...props}
16
18
  >
17
- <ProgressPrimitive.Track>
19
+ <ProgressPrimitive.Track className="block h-full w-full">
18
20
  <ProgressPrimitive.Indicator
19
- className="h-full bg-primary transition-all duration-500 ease-in-out"
20
- style={{ width: `${value ?? 0}%` }}
21
+ className="progress-indicator-shimmer block h-full rounded-full transition-all duration-500 ease-in-out"
22
+ style={{ width: `${normalizedValue}%` }}
21
23
  />
22
24
  </ProgressPrimitive.Track>
23
25
  </ProgressPrimitive.Root>
@@ -6,7 +6,97 @@ import { Select as SelectPrimitive } from "@base-ui/react/select"
6
6
  import { cn } from "@/ui/lib/utils"
7
7
  import { ChevronDownIcon, CheckIcon, ChevronUpIcon } from "lucide-react"
8
8
 
9
- const Select = SelectPrimitive.Root
9
+ type RegisteredSelectItem = {
10
+ id: symbol
11
+ label: React.ReactNode
12
+ value: unknown
13
+ }
14
+
15
+ type SelectItemsContextValue = {
16
+ removeItem: (id: symbol) => void
17
+ upsertItem: (item: RegisteredSelectItem) => void
18
+ }
19
+
20
+ const SelectItemsContext = React.createContext<SelectItemsContextValue | null>(null)
21
+
22
+ function getSelectItemText(node: React.ReactNode): string {
23
+ if (node == null || typeof node === "boolean") {
24
+ return ""
25
+ }
26
+
27
+ if (typeof node === "string" || typeof node === "number") {
28
+ return String(node)
29
+ }
30
+
31
+ if (Array.isArray(node)) {
32
+ return node.map(getSelectItemText).join(" ")
33
+ }
34
+
35
+ if (React.isValidElement<{ children?: React.ReactNode }>(node)) {
36
+ return getSelectItemText(node.props.children)
37
+ }
38
+
39
+ return ""
40
+ }
41
+
42
+ function Select<Value, Multiple extends boolean | undefined = false>({
43
+ children,
44
+ items,
45
+ ...props
46
+ }: SelectPrimitive.Root.Props<Value, Multiple>) {
47
+ const [registeredItems, setRegisteredItems] = React.useState<RegisteredSelectItem[]>([])
48
+
49
+ const upsertItem = React.useCallback((item: RegisteredSelectItem) => {
50
+ setRegisteredItems((current) => {
51
+ const existingIndex = current.findIndex((entry) => entry.id === item.id)
52
+
53
+ if (existingIndex === -1) {
54
+ return [...current, item]
55
+ }
56
+
57
+ const existingItem = current[existingIndex]
58
+ if (existingItem.value === item.value && existingItem.label === item.label) {
59
+ return current
60
+ }
61
+
62
+ const next = current.slice()
63
+ next[existingIndex] = item
64
+ return next
65
+ })
66
+ }, [])
67
+
68
+ const removeItem = React.useCallback((id: symbol) => {
69
+ setRegisteredItems((current) => current.filter((item) => item.id !== id))
70
+ }, [])
71
+
72
+ const contextValue = React.useMemo<SelectItemsContextValue>(
73
+ () => ({ removeItem, upsertItem }),
74
+ [removeItem, upsertItem]
75
+ )
76
+
77
+ const resolvedItems = React.useMemo(() => {
78
+ if (items) {
79
+ return items
80
+ }
81
+
82
+ if (registeredItems.length === 0) {
83
+ return undefined
84
+ }
85
+
86
+ return registeredItems.map(({ label, value }) => ({ label, value }))
87
+ }, [items, registeredItems])
88
+
89
+ return (
90
+ <SelectItemsContext.Provider value={contextValue}>
91
+ <SelectPrimitive.Root
92
+ {...props}
93
+ items={resolvedItems as SelectPrimitive.Root.Props<Value, Multiple>["items"]}
94
+ >
95
+ {children}
96
+ </SelectPrimitive.Root>
97
+ </SelectItemsContext.Provider>
98
+ )
99
+ }
10
100
 
11
101
  function SelectGroup({ className, ...props }: SelectPrimitive.Group.Props) {
12
102
  return (
@@ -118,11 +208,38 @@ function SelectLabel({
118
208
  function SelectItem({
119
209
  className,
120
210
  children,
211
+ label,
212
+ value = null,
121
213
  ...props
122
214
  }: SelectPrimitive.Item.Props) {
215
+ const itemsContext = React.useContext(SelectItemsContext)
216
+ const itemId = React.useRef(Symbol("select-item"))
217
+ const derivedLabel = getSelectItemText(children).replace(/\s+/g, " ").trim()
218
+ const resolvedLabel = label ?? (derivedLabel.length > 0 ? derivedLabel : undefined)
219
+
220
+ React.useEffect(() => {
221
+ if (!itemsContext || !resolvedLabel) {
222
+ return undefined
223
+ }
224
+
225
+ const nextItem = {
226
+ id: itemId.current,
227
+ label: resolvedLabel,
228
+ value,
229
+ }
230
+
231
+ itemsContext.upsertItem(nextItem)
232
+
233
+ return () => {
234
+ itemsContext.removeItem(itemId.current)
235
+ }
236
+ }, [itemsContext, resolvedLabel, value])
237
+
123
238
  return (
124
239
  <SelectPrimitive.Item
125
240
  data-slot="select-item"
241
+ label={resolvedLabel}
242
+ value={value}
126
243
  className={cn(
127
244
  "focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2 relative flex w-full cursor-pointer items-center outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0",
128
245
  className
@@ -149,6 +149,7 @@ function SidebarProvider({
149
149
  {
150
150
  "--sidebar-width": SIDEBAR_WIDTH,
151
151
  "--sidebar-width-icon": SIDEBAR_WIDTH_ICON,
152
+ "--sidebar-shell-offset": "0px",
152
153
  ...style,
153
154
  } as React.CSSProperties
154
155
  }
@@ -244,8 +245,8 @@ function Sidebar({
244
245
  className={cn(
245
246
  "fixed inset-y-0 z-10 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear md:flex",
246
247
  side === "left"
247
- ? "left-0 group-data-[collapsible=offExamples]:left-[calc(var(--sidebar-width)*-1)]"
248
- : "right-0 group-data-[collapsible=offExamples]:right-[calc(var(--sidebar-width)*-1)]",
248
+ ? "left-[var(--sidebar-shell-offset)] group-data-[collapsible=offExamples]:left-[calc(var(--sidebar-shell-offset)-var(--sidebar-width))]"
249
+ : "right-[var(--sidebar-shell-offset)] group-data-[collapsible=offExamples]:right-[calc(var(--sidebar-shell-offset)-var(--sidebar-width))]",
249
250
  // Adjust the padding for floating and inset variants.
250
251
  variant === "floating" || variant === "inset"
251
252
  ? "p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]"