arxatec-ui 0.1.68 → 0.1.72

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 (303) hide show
  1. package/README.md +351 -8
  2. package/dist/arxatec-ui.css +1 -1
  3. package/dist/components/autosave_field_status/index.d.ts +5 -0
  4. package/dist/components/autosave_field_status/index.js +12 -0
  5. package/dist/components/autosave_field_status/index.js.map +1 -0
  6. package/dist/components/autosave_status/constants/index.d.ts +1 -0
  7. package/dist/components/autosave_status/constants/index.js +6 -0
  8. package/dist/components/autosave_status/constants/index.js.map +1 -0
  9. package/dist/components/autosave_status/index.d.ts +9 -0
  10. package/dist/components/autosave_status/index.js +46 -0
  11. package/dist/components/autosave_status/index.js.map +1 -0
  12. package/dist/components/autosave_status/types/index.d.ts +2 -0
  13. package/dist/components/editable_fields/context/index.d.ts +31 -0
  14. package/dist/components/editable_fields/context/index.js +30 -0
  15. package/dist/components/editable_fields/context/index.js.map +1 -0
  16. package/dist/components/editable_fields/hooks/index.d.ts +1 -0
  17. package/dist/components/editable_fields/hooks/index.js +8 -0
  18. package/dist/components/editable_fields/hooks/index.js.map +1 -0
  19. package/dist/components/editable_fields/index.d.ts +3 -0
  20. package/dist/components/editable_fields/index.js +32 -0
  21. package/dist/components/editable_fields/index.js.map +1 -0
  22. package/dist/components/emoji_picker/components/emoji_picker_content/index.d.ts +3 -1
  23. package/dist/components/emoji_picker/components/emoji_picker_content/index.js +3 -3
  24. package/dist/components/emoji_picker/components/emoji_picker_content/index.js.map +1 -1
  25. package/dist/components/emoji_picker/components/emoji_picker_footer/index.d.ts +3 -1
  26. package/dist/components/emoji_picker/components/emoji_picker_footer/index.js +3 -3
  27. package/dist/components/emoji_picker/components/emoji_picker_footer/index.js.map +1 -1
  28. package/dist/components/file_explorer/constants/index.d.ts +1 -0
  29. package/dist/components/file_explorer/constants/index.js +6 -0
  30. package/dist/components/file_explorer/constants/index.js.map +1 -0
  31. package/dist/components/file_explorer/explorer_breadcrumb/index.d.ts +9 -0
  32. package/dist/components/file_explorer/explorer_breadcrumb/index.js +21 -0
  33. package/dist/components/file_explorer/explorer_breadcrumb/index.js.map +1 -0
  34. package/dist/components/file_explorer/explorer_empty_state/index.d.ts +9 -0
  35. package/dist/components/file_explorer/explorer_empty_state/index.js +32 -0
  36. package/dist/components/file_explorer/explorer_empty_state/index.js.map +1 -0
  37. package/dist/components/file_explorer/explorer_error_state/index.d.ts +6 -0
  38. package/dist/components/file_explorer/explorer_error_state/index.js +18 -0
  39. package/dist/components/file_explorer/explorer_error_state/index.js.map +1 -0
  40. package/dist/components/file_explorer/explorer_grid/index.d.ts +10 -0
  41. package/dist/components/file_explorer/explorer_grid/index.js +21 -0
  42. package/dist/components/file_explorer/explorer_grid/index.js.map +1 -0
  43. package/dist/components/file_explorer/explorer_grid_card/index.d.ts +25 -0
  44. package/dist/components/file_explorer/explorer_grid_card/index.js +79 -0
  45. package/dist/components/file_explorer/explorer_grid_card/index.js.map +1 -0
  46. package/dist/components/file_explorer/explorer_loading_state/index.d.ts +4 -0
  47. package/dist/components/file_explorer/explorer_loading_state/index.js +9 -0
  48. package/dist/components/file_explorer/explorer_loading_state/index.js.map +1 -0
  49. package/dist/components/file_explorer/explorer_name_cell/index.d.ts +12 -0
  50. package/dist/components/file_explorer/explorer_name_cell/index.js +32 -0
  51. package/dist/components/file_explorer/explorer_name_cell/index.js.map +1 -0
  52. package/dist/components/file_explorer/explorer_panel/index.d.ts +11 -0
  53. package/dist/components/file_explorer/explorer_panel/index.js +17 -0
  54. package/dist/components/file_explorer/explorer_panel/index.js.map +1 -0
  55. package/dist/components/file_explorer/explorer_row/index.d.ts +18 -0
  56. package/dist/components/file_explorer/explorer_row/index.js +39 -0
  57. package/dist/components/file_explorer/explorer_row/index.js.map +1 -0
  58. package/dist/components/file_explorer/explorer_table/index.d.ts +20 -0
  59. package/dist/components/file_explorer/explorer_table/index.js +63 -0
  60. package/dist/components/file_explorer/explorer_table/index.js.map +1 -0
  61. package/dist/components/file_explorer/index.d.ts +26 -0
  62. package/dist/components/file_explorer/item_actions/index.d.ts +3 -0
  63. package/dist/components/file_explorer/item_actions/item_actions_context_content/index.d.ts +5 -0
  64. package/dist/components/file_explorer/item_actions/item_actions_context_content/index.js +21 -0
  65. package/dist/components/file_explorer/item_actions/item_actions_context_content/index.js.map +1 -0
  66. package/dist/components/file_explorer/item_actions/item_actions_dropdown/index.d.ts +7 -0
  67. package/dist/components/file_explorer/item_actions/item_actions_dropdown/index.js +38 -0
  68. package/dist/components/file_explorer/item_actions/item_actions_dropdown/index.js.map +1 -0
  69. package/dist/components/file_explorer/item_actions/types/index.d.ts +9 -0
  70. package/dist/components/file_explorer/item_actions/utils/index.d.ts +2 -0
  71. package/dist/components/file_explorer/item_actions/utils/index.js +6 -0
  72. package/dist/components/file_explorer/item_actions/utils/index.js.map +1 -0
  73. package/dist/components/file_explorer/shared/utils/index.d.ts +2 -0
  74. package/dist/components/file_explorer/shared/utils/index.js +8 -0
  75. package/dist/components/file_explorer/shared/utils/index.js.map +1 -0
  76. package/dist/components/file_explorer/types/index.d.ts +1 -0
  77. package/dist/components/file_thumbnail/index.d.ts +12 -0
  78. package/dist/components/file_thumbnail/index.js +35 -0
  79. package/dist/components/file_thumbnail/index.js.map +1 -0
  80. package/dist/components/file_type_icon/file_kind/index.d.ts +13 -0
  81. package/dist/components/file_type_icon/file_kind/index.js +178 -0
  82. package/dist/components/file_type_icon/file_kind/index.js.map +1 -0
  83. package/dist/components/file_type_icon/file_kind/mime_extensions.d.ts +2 -0
  84. package/dist/components/file_type_icon/file_kind/mime_extensions.js +54 -0
  85. package/dist/components/file_type_icon/file_kind/mime_extensions.js.map +1 -0
  86. package/dist/components/file_type_icon/file_type_icon.d.ts +6 -0
  87. package/dist/components/file_type_icon/file_type_icon.js +67 -0
  88. package/dist/components/file_type_icon/file_type_icon.js.map +1 -0
  89. package/dist/components/file_type_icon/index.d.ts +4 -0
  90. package/dist/components/file_view/components/file_simple_preview_render/index.js +28 -34
  91. package/dist/components/file_view/components/file_simple_preview_render/index.js.map +1 -1
  92. package/dist/components/file_view/components/file_simple_preview_sheet/index.js +1 -1
  93. package/dist/components/file_view/components/file_simple_preview_sheet/index.js.map +1 -1
  94. package/dist/components/file_view/components/file_url_preview_render/index.js +20 -22
  95. package/dist/components/file_view/components/file_url_preview_render/index.js.map +1 -1
  96. package/dist/components/file_view/components/file_url_preview_sheet/index.js +1 -1
  97. package/dist/components/file_view/components/file_url_preview_sheet/index.js.map +1 -1
  98. package/dist/components/file_view/components/file_view_sheet/components/file_view_sheet_panel_content/index.d.ts +1 -1
  99. package/dist/components/file_view/components/file_view_sheet/components/file_view_sheet_panel_content/index.js +51 -45
  100. package/dist/components/file_view/components/file_view_sheet/components/file_view_sheet_panel_content/index.js.map +1 -1
  101. package/dist/components/file_view/components/file_view_sheet/index.d.ts +1 -1
  102. package/dist/components/file_view/components/file_view_sheet/index.js +5 -2
  103. package/dist/components/file_view/components/file_view_sheet/index.js.map +1 -1
  104. package/dist/components/file_view/components/file_view_sheet/types/index.d.ts +2 -0
  105. package/dist/components/file_view/components/image_viewer/index.d.ts +1 -1
  106. package/dist/components/file_view/components/image_viewer/index.js +5 -4
  107. package/dist/components/file_view/components/image_viewer/index.js.map +1 -1
  108. package/dist/components/file_view/components/image_viewer/utils/heic/index.js +6 -7
  109. package/dist/components/file_view/components/image_viewer/utils/heic/index.js.map +1 -1
  110. package/dist/components/file_view/components/lazy_viewer/components/pending/index.d.ts +5 -0
  111. package/dist/components/file_view/components/lazy_viewer/components/pending/index.js +7 -0
  112. package/dist/components/file_view/components/lazy_viewer/components/pending/index.js.map +1 -0
  113. package/dist/components/file_view/components/lazy_viewer/index.d.ts +4 -0
  114. package/dist/components/file_view/components/lazy_viewer/index.js +24 -0
  115. package/dist/components/file_view/components/lazy_viewer/index.js.map +1 -0
  116. package/dist/components/file_view/components/pdf_viewer/components/content/index.js +1 -0
  117. package/dist/components/file_view/components/pdf_viewer/components/content/index.js.map +1 -1
  118. package/dist/components/file_view/components/pdf_viewer/index.d.ts +1 -1
  119. package/dist/components/file_view/components/pdf_viewer/index.js +3 -2
  120. package/dist/components/file_view/components/pdf_viewer/index.js.map +1 -1
  121. package/dist/components/file_view/components/template_viewer/components/pdf_template_viewer/components/pdf_template_viewer_content/index.js +1 -0
  122. package/dist/components/file_view/components/template_viewer/components/pdf_template_viewer/components/pdf_template_viewer_content/index.js.map +1 -1
  123. package/dist/components/file_view/index.d.ts +2 -1
  124. package/dist/components/file_view/utilities/pdf_worker_configuration.d.ts +3 -0
  125. package/dist/components/file_view/utilities/pdf_worker_configuration.js +15 -0
  126. package/dist/components/file_view/utilities/pdf_worker_configuration.js.map +1 -0
  127. package/dist/components/file_view/utilities/setup_pdf_worker/index.js +12 -0
  128. package/dist/components/file_view/utilities/setup_pdf_worker/index.js.map +1 -0
  129. package/dist/components/folder_icon/constants/index.d.ts +11 -0
  130. package/dist/components/folder_icon/constants/index.js +41 -0
  131. package/dist/components/folder_icon/constants/index.js.map +1 -0
  132. package/dist/components/folder_icon/index.d.ts +8 -0
  133. package/dist/components/folder_icon/index.js +31 -0
  134. package/dist/components/folder_icon/index.js.map +1 -0
  135. package/dist/components/hex_color_picker/hex_color_picker_content/index.d.ts +12 -0
  136. package/dist/components/hex_color_picker/hex_color_picker_content/index.js +42 -0
  137. package/dist/components/hex_color_picker/hex_color_picker_content/index.js.map +1 -0
  138. package/dist/components/hex_color_picker/hex_color_picker_popover/index.d.ts +11 -0
  139. package/dist/components/hex_color_picker/hex_color_picker_popover/index.js +35 -0
  140. package/dist/components/hex_color_picker/hex_color_picker_popover/index.js.map +1 -0
  141. package/dist/components/hex_color_picker/index.d.ts +2 -0
  142. package/dist/components/hex_color_picker/utils/index.d.ts +3 -0
  143. package/dist/components/hex_color_picker/utils/index.js +35 -0
  144. package/dist/components/hex_color_picker/utils/index.js.map +1 -0
  145. package/dist/components/icon_emoji_picker/icon_emoji/index.d.ts +5 -0
  146. package/dist/components/icon_emoji_picker/icon_emoji/index.js +19 -0
  147. package/dist/components/icon_emoji_picker/icon_emoji/index.js.map +1 -0
  148. package/dist/components/icon_emoji_picker/icon_emoji_picker/index.d.ts +23 -0
  149. package/dist/components/icon_emoji_picker/icon_emoji_picker/index.js +91 -0
  150. package/dist/components/icon_emoji_picker/icon_emoji_picker/index.js.map +1 -0
  151. package/dist/components/icon_emoji_picker/icon_grid/constants/index.d.ts +3 -0
  152. package/dist/components/icon_emoji_picker/icon_grid/constants/index.js +6 -0
  153. package/dist/components/icon_emoji_picker/icon_grid/constants/index.js.map +1 -0
  154. package/dist/components/icon_emoji_picker/icon_grid/hooks/index.d.ts +1 -0
  155. package/dist/components/icon_emoji_picker/icon_grid/hooks/use_icon_pagination/index.d.ts +7 -0
  156. package/dist/components/icon_emoji_picker/icon_grid/hooks/use_icon_pagination/index.js +35 -0
  157. package/dist/components/icon_emoji_picker/icon_grid/hooks/use_icon_pagination/index.js.map +1 -0
  158. package/dist/components/icon_emoji_picker/icon_grid/index.d.ts +8 -0
  159. package/dist/components/icon_emoji_picker/icon_grid/index.js +49 -0
  160. package/dist/components/icon_emoji_picker/icon_grid/index.js.map +1 -0
  161. package/dist/components/icon_emoji_picker/index.d.ts +3 -0
  162. package/dist/components/icon_emoji_picker/utils/index.d.ts +1 -0
  163. package/dist/components/icon_emoji_picker/utils/index.js +6 -0
  164. package/dist/components/icon_emoji_picker/utils/index.js.map +1 -0
  165. package/dist/components/icons/components/apple_isotype/index.d.ts +2 -0
  166. package/dist/components/icons/components/apple_isotype/index.js +14 -0
  167. package/dist/components/icons/components/apple_isotype/index.js.map +1 -0
  168. package/dist/components/icons/components/google_calendar_isotype/index.d.ts +2 -0
  169. package/dist/components/icons/components/google_calendar_isotype/index.js +414 -0
  170. package/dist/components/icons/components/google_calendar_isotype/index.js.map +1 -0
  171. package/dist/components/icons/components/google_drive_isotype/index.d.ts +2 -0
  172. package/dist/components/icons/components/google_drive_isotype/index.js +103 -0
  173. package/dist/components/icons/components/google_drive_isotype/index.js.map +1 -0
  174. package/dist/components/icons/components/index.d.ts +5 -0
  175. package/dist/components/icons/components/onedrive_isotype/index.d.ts +2 -0
  176. package/dist/components/icons/components/onedrive_isotype/index.js +246 -0
  177. package/dist/components/icons/components/onedrive_isotype/index.js.map +1 -0
  178. package/dist/components/icons/components/outlook_calendar_isotype/index.d.ts +2 -0
  179. package/dist/components/icons/components/outlook_calendar_isotype/index.js +378 -0
  180. package/dist/components/icons/components/outlook_calendar_isotype/index.js.map +1 -0
  181. package/dist/components/inline_date_field/index.d.ts +11 -0
  182. package/dist/components/inline_date_field/index.js +52 -0
  183. package/dist/components/inline_date_field/index.js.map +1 -0
  184. package/dist/components/inline_duration_field/components/duration_column/index.d.ts +8 -0
  185. package/dist/components/inline_duration_field/components/duration_column/index.js +47 -0
  186. package/dist/components/inline_duration_field/components/duration_column/index.js.map +1 -0
  187. package/dist/components/inline_duration_field/constants/index.d.ts +4 -0
  188. package/dist/components/inline_duration_field/constants/index.js +12 -0
  189. package/dist/components/inline_duration_field/constants/index.js.map +1 -0
  190. package/dist/components/inline_duration_field/index.d.ts +9 -0
  191. package/dist/components/inline_duration_field/index.js +89 -0
  192. package/dist/components/inline_duration_field/index.js.map +1 -0
  193. package/dist/components/inline_duration_field/utils/index.d.ts +11 -0
  194. package/dist/components/inline_duration_field/utils/index.js +21 -0
  195. package/dist/components/inline_duration_field/utils/index.js.map +1 -0
  196. package/dist/components/inline_editable_text/constants/index.d.ts +2 -0
  197. package/dist/components/inline_editable_text/constants/index.js +7 -0
  198. package/dist/components/inline_editable_text/constants/index.js.map +1 -0
  199. package/dist/components/inline_editable_text/index.d.ts +16 -0
  200. package/dist/components/inline_editable_text/index.js +109 -0
  201. package/dist/components/inline_editable_text/index.js.map +1 -0
  202. package/dist/components/inline_field_trigger/index.d.ts +3 -0
  203. package/dist/components/inline_field_trigger/index.js +16 -0
  204. package/dist/components/inline_field_trigger/index.js.map +1 -0
  205. package/dist/components/inline_markdown_field/index.d.ts +14 -0
  206. package/dist/components/inline_markdown_field/index.js +70 -0
  207. package/dist/components/inline_markdown_field/index.js.map +1 -0
  208. package/dist/components/inline_option_field/index.d.ts +19 -0
  209. package/dist/components/inline_option_field/index.js +56 -0
  210. package/dist/components/inline_option_field/index.js.map +1 -0
  211. package/dist/components/logo/constants/index.d.ts +2 -0
  212. package/dist/components/logo/constants/index.js +29 -0
  213. package/dist/components/logo/constants/index.js.map +1 -0
  214. package/dist/components/logo/index.d.ts +5 -3
  215. package/dist/components/logo/index.js +21 -12
  216. package/dist/components/logo/index.js.map +1 -1
  217. package/dist/components/logo/types/index.d.ts +10 -0
  218. package/dist/components/offline_banner/index.d.ts +12 -0
  219. package/dist/components/offline_banner/index.js +76 -0
  220. package/dist/components/offline_banner/index.js.map +1 -0
  221. package/dist/components/property_row/index.d.ts +10 -0
  222. package/dist/components/property_row/index.js +46 -0
  223. package/dist/components/property_row/index.js.map +1 -0
  224. package/dist/components/select_table_header/index.d.ts +13 -0
  225. package/dist/components/select_table_header/index.js +17 -0
  226. package/dist/components/select_table_header/index.js.map +1 -0
  227. package/dist/components/shiny_text/index.d.ts +7 -0
  228. package/dist/components/shiny_text/index.js +22 -0
  229. package/dist/components/shiny_text/index.js.map +1 -0
  230. package/dist/components/table_date_field/index.d.ts +8 -0
  231. package/dist/components/table_date_field/index.js +67 -0
  232. package/dist/components/table_date_field/index.js.map +1 -0
  233. package/dist/components/table_option_field/index.d.ts +13 -0
  234. package/dist/components/table_option_field/index.js +73 -0
  235. package/dist/components/table_option_field/index.js.map +1 -0
  236. package/dist/editable-fields.js +19 -0
  237. package/dist/exports/editable-fields.d.ts +19 -0
  238. package/dist/exports/file-view-audio.d.ts +1 -0
  239. package/dist/exports/file-view-code.d.ts +2 -0
  240. package/dist/exports/file-view-core.d.ts +22 -0
  241. package/dist/exports/file-view-docx.d.ts +1 -0
  242. package/dist/exports/file-view-image.d.ts +3 -0
  243. package/dist/exports/file-view-lazy.d.ts +1 -0
  244. package/dist/exports/file-view-office.d.ts +1 -0
  245. package/dist/exports/file-view-pdf.d.ts +2 -0
  246. package/dist/exports/file-view-summary.d.ts +2 -0
  247. package/dist/exports/file-view-template.d.ts +3 -0
  248. package/dist/exports/file-view-transcription.d.ts +2 -0
  249. package/dist/exports/file-view-video.d.ts +2 -0
  250. package/dist/exports/file-view-xlsx.d.ts +1 -0
  251. package/dist/exports/icon-emoji-picker.d.ts +1 -0
  252. package/dist/exports/offline-banner.d.ts +1 -0
  253. package/dist/exports/provider-icons.d.ts +4 -0
  254. package/dist/exports/shiny-text.d.ts +1 -0
  255. package/dist/file-view-audio.js +2 -0
  256. package/dist/file-view-code.js +3 -0
  257. package/dist/file-view-core.js +22 -0
  258. package/dist/file-view-docx.js +2 -0
  259. package/dist/file-view-image.js +6 -0
  260. package/dist/file-view-lazy.js +2 -0
  261. package/dist/file-view-office.js +2 -0
  262. package/dist/file-view-pdf.js +5 -0
  263. package/dist/file-view-summary.js +3 -0
  264. package/dist/file-view-template.js +4 -0
  265. package/dist/file-view-transcription.js +3 -0
  266. package/dist/file-view-video.js +3 -0
  267. package/dist/file-view-xlsx.js +2 -0
  268. package/dist/file-view.js +44 -43
  269. package/dist/fonts/cormorant-garamond-italic-cyrillic-ext.woff2 +0 -0
  270. package/dist/fonts/cormorant-garamond-italic-cyrillic.woff2 +0 -0
  271. package/dist/fonts/cormorant-garamond-italic-latin-ext.woff2 +0 -0
  272. package/dist/fonts/cormorant-garamond-italic-latin.woff2 +0 -0
  273. package/dist/fonts/cormorant-garamond-italic-vietnamese.woff2 +0 -0
  274. package/dist/fonts/cormorant-garamond-normal-cyrillic-ext.woff2 +0 -0
  275. package/dist/fonts/cormorant-garamond-normal-cyrillic.woff2 +0 -0
  276. package/dist/fonts/cormorant-garamond-normal-latin-ext.woff2 +0 -0
  277. package/dist/fonts/cormorant-garamond-normal-latin.woff2 +0 -0
  278. package/dist/fonts/cormorant-garamond-normal-vietnamese.woff2 +0 -0
  279. package/dist/fonts/cormorantgaramond-OFL.txt +93 -0
  280. package/dist/fonts/jetbrains-mono-italic-cyrillic-ext.woff2 +0 -0
  281. package/dist/fonts/jetbrains-mono-italic-cyrillic.woff2 +0 -0
  282. package/dist/fonts/jetbrains-mono-italic-greek.woff2 +0 -0
  283. package/dist/fonts/jetbrains-mono-italic-latin-ext.woff2 +0 -0
  284. package/dist/fonts/jetbrains-mono-italic-latin.woff2 +0 -0
  285. package/dist/fonts/jetbrains-mono-italic-vietnamese.woff2 +0 -0
  286. package/dist/fonts/jetbrains-mono-normal-cyrillic-ext.woff2 +0 -0
  287. package/dist/fonts/jetbrains-mono-normal-cyrillic.woff2 +0 -0
  288. package/dist/fonts/jetbrains-mono-normal-greek.woff2 +0 -0
  289. package/dist/fonts/jetbrains-mono-normal-latin-ext.woff2 +0 -0
  290. package/dist/fonts/jetbrains-mono-normal-latin.woff2 +0 -0
  291. package/dist/fonts/jetbrains-mono-normal-vietnamese.woff2 +0 -0
  292. package/dist/fonts/jetbrainsmono-OFL.txt +93 -0
  293. package/dist/icon-emoji-picker.js +4 -0
  294. package/dist/index.d.ts +8 -0
  295. package/dist/index.js +86 -40
  296. package/dist/offline-banner.js +2 -0
  297. package/dist/provider-icons.js +5 -0
  298. package/dist/shiny-text.js +2 -0
  299. package/dist/styles.css +282 -3
  300. package/dist/utilities/colors/index.d.ts +1 -0
  301. package/dist/utilities/colors/index.js +9 -0
  302. package/dist/utilities/colors/index.js.map +1 -0
  303. package/package.json +108 -9
package/README.md CHANGED
@@ -87,16 +87,293 @@ Patterns follow **shadcn**-style APIs (compound components with named exports).
87
87
 
88
88
  ## Package exports
89
89
 
90
+ Import general components, hooks, prop types and utilities with named imports
91
+ from `arxatec-ui`. The grouped component entries are optional. The library
92
+ preserves modules and declares side effects so compatible bundlers can discard
93
+ unused exports in production builds.
94
+
90
95
  ### Components (overview)
91
96
 
92
97
  - **Forms & text:** `Button`, `Input`, `Textarea`, `Label`, `Checkbox`, `RadioGroup`, `Select`, `Slider`, `Toggle`, `InputOTP`, `FileDropZone`, `LocationInput`, `DateRangePicker`, `Calendar`, `AsyncSelect`, `DescriptionMarkdownEditor`, `RichTextEditor`, and more.
93
98
  - **Surfaces & navigation:** `Card`, `Dialog`, `Sheet`, `Drawer`, `Popover`, `Tooltip`, `DropdownMenu`, `ContextMenu`, `Tabs`, `Breadcrumb`, `Pagination`, `PaginationController`, `Sidebar`, `Command`, `Collapsible`, and more.
94
99
  - **Data & feedback:** `Table`, `Badge`, `Skeleton`, `Progress`, `StatusMessage`, `AsyncBoundary`, `AsyncCommandList`, `Chart`, `Carousel`, and more.
95
100
  - **Maps:** `MapView`, `MapPicker`.
96
- - **Extras:** `Toaster` (Sonner), `IconPicker`, `EmojiPicker`, brand icons, animated icons, etc.
101
+ - **Extras:** `Toaster` (Sonner), `Logo`, `IconPicker`, `EmojiPicker`, brand icons, animated icons, etc.
102
+
103
+ `Logo` accepts `variant="arxatec" | "academy" | "management"` starting with
104
+ `0.1.71`. Omitting `variant` renders the original Arxatec logo. All three inline
105
+ SVGs preserve their proportions and inherit their color through `currentColor`:
106
+
107
+ ```tsx
108
+ import { Logo } from "arxatec-ui";
109
+
110
+ <Logo className="h-8 w-auto text-foreground" />;
111
+ <Logo variant="academy" className="h-8 w-auto text-foreground" />;
112
+ <Logo variant="management" className="h-8 w-auto text-foreground" />;
113
+ ```
114
+
115
+ `AppleIsotype` is an inline SVG with a transparent background. It inherits its
116
+ color through `currentColor` and accepts SVG props, including `className` and
117
+ ARIA attributes:
118
+
119
+ ```tsx
120
+ import { AppleIsotype } from "arxatec-ui";
121
+
122
+ <AppleIsotype className="size-4 text-foreground" aria-hidden="true" />;
123
+ ```
97
124
 
98
125
  The full list matches the `export *` entries in [`src/index.ts`](./src/index.ts).
99
126
 
127
+ ### Editable fields (0.1.72)
128
+
129
+ Import property rows, inline editing, table cells, color selection and save
130
+ feedback from `arxatec-ui`. The optional `/editable-fields` entry groups the same
131
+ APIs. These components receive values and callbacks; the application owns
132
+ validation, persistence and retry logic.
133
+
134
+ | Component | Source |
135
+ | ----------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- |
136
+ | `PropertyRow` | [`src/components/property_row/index.tsx`](./src/components/property_row/index.tsx) |
137
+ | `InlineEditableText` | [`src/components/inline_editable_text/index.tsx`](./src/components/inline_editable_text/index.tsx) |
138
+ | `InlineOptionField` | [`src/components/inline_option_field/index.tsx`](./src/components/inline_option_field/index.tsx) |
139
+ | `InlineDateField` | [`src/components/inline_date_field/index.tsx`](./src/components/inline_date_field/index.tsx) |
140
+ | `InlineMarkdownField` | [`src/components/inline_markdown_field/index.tsx`](./src/components/inline_markdown_field/index.tsx) |
141
+ | `InlineDurationField` | [`src/components/inline_duration_field/index.tsx`](./src/components/inline_duration_field/index.tsx) |
142
+ | `TableDateField` | [`src/components/table_date_field/index.tsx`](./src/components/table_date_field/index.tsx) |
143
+ | `TableOptionField` | [`src/components/table_option_field/index.tsx`](./src/components/table_option_field/index.tsx) |
144
+ | `AutosaveStatus` | [`src/components/autosave_status/index.tsx`](./src/components/autosave_status/index.tsx) |
145
+ | `AutosaveFieldStatus` | [`src/components/autosave_field_status/index.tsx`](./src/components/autosave_field_status/index.tsx) |
146
+ | `SelectTableHeader` | [`src/components/select_table_header/index.tsx`](./src/components/select_table_header/index.tsx) |
147
+ | `HexColorPickerContent` | [`src/components/hex_color_picker/hex_color_picker_content/index.tsx`](./src/components/hex_color_picker/hex_color_picker_content/index.tsx) |
148
+ | `HexColorPickerPopover` | [`src/components/hex_color_picker/hex_color_picker_popover/index.tsx`](./src/components/hex_color_picker/hex_color_picker_popover/index.tsx) |
149
+
150
+ Configure shared copy, date-fns locale, date formats and swatches with
151
+ `EditableFieldsProvider`. A partial configuration inherits the nearest provider;
152
+ the default copy and date locale are Spanish. Supply all shared labels when
153
+ switching the whole interface to another language. Field-specific labels such as
154
+ `ariaLabel`, `emptyText` and `clearLabel` remain component props.
155
+
156
+ ```tsx
157
+ import { useState } from "react";
158
+ import { enUS } from "date-fns/locale";
159
+ import { FileText } from "lucide-react";
160
+ import {
161
+ EditableFieldsProvider,
162
+ InlineEditableText,
163
+ PropertyRow,
164
+ } from "arxatec-ui";
165
+
166
+ export function DocumentName() {
167
+ const [name, setName] = useState("Shared document");
168
+ return (
169
+ <EditableFieldsProvider
170
+ locale={enUS}
171
+ dateFormat="MMMM d, yyyy"
172
+ tableDateFormat="MMM d, yyyy"
173
+ labels={{
174
+ empty: "Add…",
175
+ hint: "Enter to save · Esc to cancel",
176
+ hours: "Hours",
177
+ minutes: "Minutes",
178
+ saving: "Saving…",
179
+ saved: "Saved",
180
+ savedAgo: "Saved a moment ago",
181
+ offline: "Offline · changes will save when connected",
182
+ genericError: "Could not save. Check your connection.",
183
+ retry: "Retry",
184
+ acceptColor: "Accept",
185
+ clearColor: "Clear color",
186
+ selectColor: "Select color",
187
+ changeColor: "Change color",
188
+ currentColor: "current",
189
+ }}
190
+ >
191
+ <PropertyRow icon={FileText} label="Name">
192
+ <InlineEditableText
193
+ value={name}
194
+ onCommit={setName}
195
+ ariaLabel="Document name"
196
+ />
197
+ </PropertyRow>
198
+ </EditableFieldsProvider>
199
+ );
200
+ }
201
+ ```
202
+
203
+ `InlineEditableText` commits on Enter or blur, cancels with Escape and accepts a
204
+ `validate` callback. Multiline text commits with Ctrl/⌘ + Enter.
205
+ `InlineDurationField` receives seconds; `InlineDateField` receives `Date` values;
206
+ `TableDateField` receives and emits ISO strings or `null`. Table fields preserve
207
+ focus and stop click/key events inside their popovers from activating their row.
208
+
209
+ `InlineFieldTrigger` supplies the shared button style for application-specific
210
+ selectors and forwards its ref. `useEditableFields`, configuration and component
211
+ prop types, `AutosaveFieldState`, `AutosaveStatusValue`, `normalizeHexColor`,
212
+ `hexColorOrFallback`, `HEX_COLOR_SWATCHES` and `HEX_COLOR_PICKER_FALLBACK` are also
213
+ exported from `arxatec-ui` and the optional `/editable-fields` entry.
214
+
215
+ ### Provider icons (0.1.72)
216
+
217
+ Import the multicolor integration SVGs from `arxatec-ui`. The optional
218
+ `/provider-icons` entry exposes the same components:
219
+
220
+ | Component | Source |
221
+ | ------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------- |
222
+ | `GoogleCalendarIsotype` | [`src/components/icons/components/google_calendar_isotype/index.tsx`](./src/components/icons/components/google_calendar_isotype/index.tsx) |
223
+ | `GoogleDriveIsotype` | [`src/components/icons/components/google_drive_isotype/index.tsx`](./src/components/icons/components/google_drive_isotype/index.tsx) |
224
+ | `OneDriveIsotype` | [`src/components/icons/components/onedrive_isotype/index.tsx`](./src/components/icons/components/onedrive_isotype/index.tsx) |
225
+ | `OutlookCalendarIsotype` | [`src/components/icons/components/outlook_calendar_isotype/index.tsx`](./src/components/icons/components/outlook_calendar_isotype/index.tsx) |
226
+
227
+ ```tsx
228
+ import { GoogleDriveIsotype } from "arxatec-ui";
229
+
230
+ <GoogleDriveIsotype className="size-5" aria-hidden="true" />;
231
+ ```
232
+
233
+ The icons accept standard SVG props and namespace their internal definitions per
234
+ instance. The existing `GoogleDriveIcon` and `OneDriveIcon` keep their outline
235
+ appearance.
236
+
237
+ ### Animated text, connectivity and icon/emoji selection (0.1.72)
238
+
239
+ Use named imports from `arxatec-ui` for these components. Individual entries are
240
+ also available as optional APIs:
241
+
242
+ | Optional entry | Components | Source |
243
+ | ------------------------------ | --------------------------------------------- | ------------------------------------------------------------------------------------------ |
244
+ | `arxatec-ui/shiny-text` | `ShinyText` | [`src/components/shiny_text/index.tsx`](./src/components/shiny_text/index.tsx) |
245
+ | `arxatec-ui/offline-banner` | `OfflineBanner` | [`src/components/offline_banner/index.tsx`](./src/components/offline_banner/index.tsx) |
246
+ | `arxatec-ui/icon-emoji-picker` | `IconEmoji`, `IconEmojiPicker`, `isEmojiIcon` | [`src/components/icon_emoji_picker/index.ts`](./src/components/icon_emoji_picker/index.ts) |
247
+
248
+ `ShinyText` accepts children, `className` for its wrapper and `textClassName` for
249
+ its visible text. Its animated overlay is hidden from assistive technology.
250
+ The animation CSS is included in the existing `arxatec-ui/styles.css` import.
251
+
252
+ ```tsx
253
+ import { OfflineBanner, ShinyText } from "arxatec-ui";
254
+
255
+ <ShinyText>Preparing response…</ShinyText>;
256
+ <OfflineBanner
257
+ isOnline={isOnline}
258
+ labels={{
259
+ offline: "You have no internet connection",
260
+ reconnected: "You're back online",
261
+ close: "Close",
262
+ }}
263
+ />;
264
+ ```
265
+
266
+ `OfflineBanner` receives connectivity from the application. It renders offline
267
+ feedback with a dismiss button, then shows a reconnect message for three seconds
268
+ after an offline-to-online transition. `reconnectedDurationMs` adjusts that time.
269
+ Translated copy and `className` are optional; defaults preserve the Spanish UI.
270
+
271
+ `IconEmoji` renders either a Lucide name or an emoji glyph, with `folder` as the
272
+ empty-value fallback. `IconEmojiPicker` is a controlled picker with a custom
273
+ trigger, icon/emoji tabs, searchable icon pagination and `onValueChange`:
274
+
275
+ ```tsx
276
+ import { IconEmoji, IconEmojiPicker } from "arxatec-ui";
277
+
278
+ <IconEmojiPicker
279
+ value={icon}
280
+ onValueChange={setIcon}
281
+ locale="en"
282
+ labels={{
283
+ icons: "Icons",
284
+ emojis: "Emojis",
285
+ searchIcons: "Search an icon…",
286
+ searchEmojis: "Search an emoji…",
287
+ emptyIcons: "No icon found.",
288
+ emptyEmojis: "No emoji found.",
289
+ emojiHint: "Select an emoji…",
290
+ }}
291
+ >
292
+ <button type="button" aria-label="Choose icon or emoji">
293
+ <IconEmoji value={icon} className="size-5" />
294
+ </button>
295
+ </IconEmojiPicker>;
296
+ ```
297
+
298
+ It also accepts `align`, `modal` and `disabled`. Copy and emoji-data locale default
299
+ to Spanish and can be configured independently. Prop, label and locale types are
300
+ exported with the components. The panel width follows text size to accommodate
301
+ its twelve columns, padding, scrollbar and borders. Existing `EmojiPickerContent` and
302
+ `EmojiPickerFooter` now accept `emptyLabel` to translate their empty state and
303
+ selection hint while keeping their previous defaults.
304
+ The emoji viewport's scrollbar styling is included in `arxatec-ui/styles.css`,
305
+ alongside the animated-text and connectivity-banner styles.
306
+
307
+ ### Files, folders and explorer presentation (0.1.72)
308
+
309
+ Import these components by name from `arxatec-ui`:
310
+
311
+ ```tsx
312
+ import {
313
+ FileTypeIcon,
314
+ FolderIcon,
315
+ FileThumbnail,
316
+ ExplorerGridCard,
317
+ } from "arxatec-ui";
318
+
319
+ <FileTypeIcon
320
+ mimeType="application/pdf"
321
+ fileName="Report.pdf"
322
+ className="size-6"
323
+ />;
324
+ <FolderIcon variant="shared" className="size-6" />;
325
+ <FileThumbnail
326
+ source={thumbnailUrl}
327
+ isLoading={isLoading}
328
+ isError={isError}
329
+ fallback={<FileTypeIcon mimeType="application/pdf" className="size-14" />}
330
+ />;
331
+ ```
332
+
333
+ `FileTypeIcon` is the file-shaped SVG previously named `IconType` in Lawyer
334
+ Platform. Its color follows the MIME family; its visible label prefers the
335
+ filename extension, then the MIME extension, then a family label such as `FILE`.
336
+ Labels are uppercase and limited to four characters. It covers PDF, office
337
+ documents, images, video, audio, archives, code, JSON, XML, fonts, databases,
338
+ binary files and native Google Workspace formats. Both it and `FolderIcon`
339
+ accept standard SVG props and are decorative by default. Pass accessible SVG
340
+ props when using an icon without adjacent text.
341
+
342
+ `FolderIcon` accepts `default`, `shared` and `drive` variants. `FOLDER_VARIANT`,
343
+ `FolderVariant`, `getFileKindStyle`, `getFileTypeLabel`, `FILE_KIND_STYLES`,
344
+ `FileKind` and `FileKindStyle` are exported from the main package too.
345
+
346
+ | Components | Source |
347
+ | ------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------- |
348
+ | `FileTypeIcon` | [`src/components/file_type_icon/file_type_icon.tsx`](./src/components/file_type_icon/file_type_icon.tsx) |
349
+ | `FolderIcon` | [`src/components/folder_icon/index.tsx`](./src/components/folder_icon/index.tsx) |
350
+ | `FileThumbnail` | [`src/components/file_thumbnail/index.tsx`](./src/components/file_thumbnail/index.tsx) |
351
+ | `ExplorerGridCard`, `ExplorerRow`, `ExplorerNameCell` | [`src/components/file_explorer/index.ts`](./src/components/file_explorer/index.ts) |
352
+ | `ExplorerGrid`, `ExplorerTable`, `ExplorerPanel` | [`src/components/file_explorer/index.ts`](./src/components/file_explorer/index.ts) |
353
+ | `ExplorerBreadcrumb` | [`src/components/file_explorer/explorer_breadcrumb/index.tsx`](./src/components/file_explorer/explorer_breadcrumb/index.tsx) |
354
+ | `ExplorerEmptyState`, `ExplorerLoadingState`, `ExplorerErrorState` | [`src/components/file_explorer/index.ts`](./src/components/file_explorer/index.ts) |
355
+ | `ItemActionsDropdown`, `ItemActionsContextContent` | [`src/components/file_explorer/item_actions/index.ts`](./src/components/file_explorer/item_actions/index.ts) |
356
+
357
+ `FileThumbnail` receives a thumbnail URL, loading/error state and a fallback. It
358
+ forwards its container ref, displays a skeleton while loading and falls back if
359
+ the image fails. A new source resets the image failure state. Fetching signed
360
+ URLs, generating PDF previews, cloud permissions and object-URL cleanup belong
361
+ to the consumer. These exports do not load PDF or office viewer engines.
362
+
363
+ Explorer rows and cards receive `id`, `type` (`file` or `folder`), `selected`,
364
+ `actions` and their content. `ExplorerAction` supplies the action key, translated
365
+ label, icon and callback; hidden actions are omitted. Cards also receive `name`,
366
+ `icon`, `preview`, optional path/metadata and pointer or drag handlers. Pass
367
+ `actionsLabel` to localize the action-menu trigger. Selection, opening, moving,
368
+ deleting and downloading are controlled by consumer callbacks.
369
+
370
+ `ExplorerBreadcrumb` receives `{ id, name }` items and `onNavigate`; its buttons
371
+ support keyboard navigation. `ExplorerTable` receives `ExplorerColumn` entries
372
+ and accepts `flow` for content-height tables. Grid, panel and table containers
373
+ retain selection/viewport refs, overlay and footer slots. `className` controls
374
+ container height and spacing. All component prop types and `EXPLORER_GRID_CLASS`
375
+ are also exported from `arxatec-ui`.
376
+
100
377
  ### Hooks
101
378
 
102
379
  - **`useDebounce`**
@@ -123,16 +400,82 @@ import "leaflet/dist/leaflet.css";
123
400
 
124
401
  ## Developing this repo
125
402
 
126
- | Command | Description |
127
- | ------------------- | ------------------------------ |
128
- | `npm run dev` | Vite playground (style guide). |
129
- | `npm run storybook` | Storybook on port 6006. |
130
- | `npm run build:lib` | Build `dist/` for npm. |
131
- | `npm run build` | Playground production build. |
132
- | `npm run lint` | ESLint. |
403
+ | Command | Description |
404
+ | ---------------------- | ------------------------------ |
405
+ | `npm run dev` | Vite playground (style guide). |
406
+ | `npm run storybook` | Storybook on port 6006. |
407
+ | `npm run build:lib` | Build `dist/` for npm. |
408
+ | `npm run build` | Playground production build. |
409
+ | `npm run lint` | ESLint. |
410
+ | `pnpm test:components` | Component unit tests. |
411
+
412
+ For local development with `arxatec-lawyer-platform`, build this library first and
413
+ run `pnpm update arxatec-ui --ignore-scripts` in the platform. Its local migration
414
+ uses `file:../../arxatec-ui`, so rebuilding this repository requires refreshing the
415
+ consumer package. React, React Hook Form and Tiptap continue to resolve through
416
+ the consumer's peer dependencies.
417
+
418
+ Release status on 2026-10-12: npm reports `0.1.71`; this source prepares `0.1.72`.
419
+ The new entries become available from npm after publication. Before shipping the
420
+ platform, replace its local `file:` dependency with the published `0.1.72` range
421
+ and run `pnpm update arxatec-ui`.
133
422
 
134
423
  Publishing to npm requires **2FA**; use `npm publish --otp=...` when prompted.
135
424
 
136
425
  ## License
137
426
 
138
427
  MIT. See [LICENSE](./LICENSE).
428
+
429
+ ## File-view engines on demand (0.1.69)
430
+
431
+ Existing `arxatec-ui/file-view` exports remain compatible. Applications that need
432
+ bounded startup downloads should use the lightweight shell and lazy engines:
433
+
434
+ ```tsx
435
+ import {
436
+ FileViewSheet,
437
+ configureFileViewPdfWorker,
438
+ } from "arxatec-ui/file-view/core";
439
+ import { lazyFileViewer } from "arxatec-ui/file-view/lazy";
440
+ import type { FilePdfViewerProps } from "arxatec-ui/file-view/pdf";
441
+
442
+ configureFileViewPdfWorker(localHashedWorkerUrl);
443
+ const PdfViewer = lazyFileViewer<FilePdfViewerProps>(() =>
444
+ import("arxatec-ui/file-view/pdf").then(({ FilePdfViewer }) => ({
445
+ default: FilePdfViewer,
446
+ })),
447
+ );
448
+ ```
449
+
450
+ Engine entries under `/file-view/` are `pdf`, `image`, `office`, `code`, `template`,
451
+ `docx`, `xlsx`, `audio`, `video`, `summary` and `transcription`. The core does not
452
+ import PDF or another engine. HEIC conversion loads `heic2any` only for HEIC.
453
+ The wrapper loads without adding loading, error or retry controls. Loading
454
+ callbacks reach the existing parent sheet; a failed load ends its pending state.
455
+ Closing and reopening the sheet allows another load attempt.
456
+
457
+ `FileViewSheet` accepts `lazyPanels?: boolean`, default `false`. Set it to `true`
458
+ to mount only the initial panel and mount each other panel on its first visit.
459
+ Visited panels remain mounted, preserving edits, annotations and zoom, until
460
+ close or `fileKey` changes. `onActiveTabChange` reports the active panel. Render
461
+ callbacks receive `isActive`; query consumers should use it to pause summary and
462
+ transcription reads. Hidden-panel loading must not replace the active panel.
463
+
464
+ Configure a local hashed PDF worker before opening PDF. Configuration itself is
465
+ lightweight; deferred setup respects it and later configuration updates it. Match
466
+ the worker version exactly to `pdfjs-dist` resolved by this package's `react-pdf`.
467
+ The worker URL can use web/PWA origin or Electron `app://arxatec`. Build consumers
468
+ with the package's worker setup marked as a side effect. PDF and image viewers
469
+ forward `onLoadingChange` until their content is ready.
470
+
471
+ Import `arxatec-ui/styles.css` once. Font faces retain ArxatecSans,
472
+ Cormorant Garamond (300–700, normal/italic) and JetBrains Mono (100–800,
473
+ normal/italic), with local licensed assets and `font-display: swap`. They download
474
+ only when matching content uses them; omit fonts from PWA precache and cache
475
+ requested faces at runtime. Consumers share `react-hook-form`, `@tiptap/core` and
476
+ `@tiptap/react` as peers alongside React and React Query.
477
+
478
+ Publication requires owner PR merge and clean-main publish. The platform applies
479
+ a seven-day minimum release age to external dependencies and explicitly exempts
480
+ all versions of `arxatec-ui`; validate a tarball in isolation before a registry
481
+ consumer update.
@@ -1,2 +1,2 @@
1
- ._wrapper_yldl5_1{min-height:2.5rem;font-family:var(--font-sans);font-size:var(--font-size-sm);line-height:var(--font-line-height-sm)}._wrapper_yldl5_1 .ProseMirror{max-width:none;min-height:0;font-family:var(--font-sans);font-size:var(--font-size-sm);line-height:var(--font-line-height-sm);background:0 0;outline:none;margin:0;padding:.375rem .75rem}._wrapper_yldl5_1 .ProseMirror p,._wrapper_yldl5_1 .ProseMirror li,._wrapper_yldl5_1 .ProseMirror blockquote,._wrapper_yldl5_1 .ProseMirror strong,._wrapper_yldl5_1 .ProseMirror em,._wrapper_yldl5_1 .ProseMirror u{font-family:var(--font-sans);font-size:var(--font-size-sm);line-height:var(--font-line-height-sm);margin:.5rem 0}._wrapper_yldl5_1 .ProseMirror h1{font-family:var(--font-sans);font-size:var(--font-size-lg);font-weight:600;line-height:var(--font-line-height-lg);margin:.375rem 0 .25rem}._wrapper_yldl5_1 .ProseMirror h2{font-family:var(--font-sans);font-size:var(--font-size-base);font-weight:600;line-height:var(--font-line-height-base);margin:.375rem 0 .25rem}._wrapper_yldl5_1 .ProseMirror h3{font-family:var(--font-sans);font-size:var(--font-size-sm);font-weight:600;line-height:var(--font-line-height-sm);margin:.35rem 0 .2rem}._wrapper_yldl5_1 .ProseMirror h4{font-family:var(--font-sans);font-size:var(--font-size-xs);font-weight:600;line-height:var(--font-line-height-xs);margin:.3rem 0 .15rem}._wrapper_yldl5_1 .ProseMirror h5,._wrapper_yldl5_1 .ProseMirror h6{font-family:var(--font-sans);font-size:var(--font-size-xs);font-weight:600;line-height:var(--font-line-height-xs);margin:.25rem 0}._wrapper_yldl5_1 .ProseMirror p{margin:.125rem 0}._wrapper_yldl5_1 .ProseMirror ul,._wrapper_yldl5_1 .ProseMirror ol{margin:.25rem 0;padding-left:1.25rem}._wrapper_yldl5_1 .ProseMirror li{margin:0}._wrapper_yldl5_1 .ProseMirror blockquote{border-left-width:2px;margin:.25rem 0;padding-left:.75rem}._wrapper_yldl5_1 .ProseMirror code{font-family:var(--font-mono);font-size:var(--font-size-xs)}._wrapper_yldl5_1 .ProseMirror .is-description-editor-empty:before{content:attr(data-placeholder);float:left;pointer-events:none;height:0;color:var(--color-muted-foreground);font-family:var(--font-sans);font-size:var(--font-size-sm);line-height:var(--font-line-height-sm)}._shimmer_17ewq_1{opacity:var(--loader-shimmer-opacity,1);animation:2.4s ease-in-out infinite _loader-diagonal_17ewq_1;position:absolute;inset:0;-webkit-mask-image:linear-gradient(135deg,#0000 35%,#000 50%,#0000 65%);mask-image:linear-gradient(135deg,#0000 35%,#000 50%,#0000 65%);-webkit-mask-size:250% 250%;mask-size:250% 250%}@keyframes _loader-diagonal_17ewq_1{0%{-webkit-mask-position:100% 100%;mask-position:100% 100%}to{-webkit-mask-position:0 0;mask-position:0 0}}@media (prefers-reduced-motion:reduce){._shimmer_17ewq_1{animation:none}}
1
+ ._wrapper_yldl5_1{min-height:2.5rem;font-family:var(--font-sans);font-size:var(--font-size-sm);line-height:var(--font-line-height-sm)}._wrapper_yldl5_1 .ProseMirror{max-width:none;min-height:0;font-family:var(--font-sans);font-size:var(--font-size-sm);line-height:var(--font-line-height-sm);background:0 0;outline:none;margin:0;padding:.375rem .75rem}._wrapper_yldl5_1 .ProseMirror p,._wrapper_yldl5_1 .ProseMirror li,._wrapper_yldl5_1 .ProseMirror blockquote,._wrapper_yldl5_1 .ProseMirror strong,._wrapper_yldl5_1 .ProseMirror em,._wrapper_yldl5_1 .ProseMirror u{font-family:var(--font-sans);font-size:var(--font-size-sm);line-height:var(--font-line-height-sm);margin:.5rem 0}._wrapper_yldl5_1 .ProseMirror h1{font-family:var(--font-sans);font-size:var(--font-size-lg);font-weight:600;line-height:var(--font-line-height-lg);margin:.375rem 0 .25rem}._wrapper_yldl5_1 .ProseMirror h2{font-family:var(--font-sans);font-size:var(--font-size-base);font-weight:600;line-height:var(--font-line-height-base);margin:.375rem 0 .25rem}._wrapper_yldl5_1 .ProseMirror h3{font-family:var(--font-sans);font-size:var(--font-size-sm);font-weight:600;line-height:var(--font-line-height-sm);margin:.35rem 0 .2rem}._wrapper_yldl5_1 .ProseMirror h4{font-family:var(--font-sans);font-size:var(--font-size-xs);font-weight:600;line-height:var(--font-line-height-xs);margin:.3rem 0 .15rem}._wrapper_yldl5_1 .ProseMirror h5,._wrapper_yldl5_1 .ProseMirror h6{font-family:var(--font-sans);font-size:var(--font-size-xs);font-weight:600;line-height:var(--font-line-height-xs);margin:.25rem 0}._wrapper_yldl5_1 .ProseMirror p{margin:.125rem 0}._wrapper_yldl5_1 .ProseMirror ul,._wrapper_yldl5_1 .ProseMirror ol{margin:.25rem 0;padding-left:1.25rem}._wrapper_yldl5_1 .ProseMirror li{margin:0}._wrapper_yldl5_1 .ProseMirror blockquote{border-left-width:2px;margin:.25rem 0;padding-left:.75rem}._wrapper_yldl5_1 .ProseMirror code{font-family:var(--font-mono);font-size:var(--font-size-xs)}._wrapper_yldl5_1 .ProseMirror .is-description-editor-empty:before{content:attr(data-placeholder);float:left;pointer-events:none;height:0;color:var(--color-muted-foreground);font-family:var(--font-sans);font-size:var(--font-size-sm);line-height:var(--font-line-height-sm)}._shimmer_17ewq_1{opacity:var(--loader-shimmer-opacity,1);animation:2.4s ease-in-out infinite _loader-diagonal_17ewq_1;position:absolute;inset:0;-webkit-mask-image:linear-gradient(135deg,#0000 35%,#000 50%,#0000 65%);mask-image:linear-gradient(135deg,#0000 35%,#000 50%,#0000 65%);-webkit-mask-size:250% 250%;mask-size:250% 250%}@keyframes _loader-diagonal_17ewq_1{0%{-webkit-mask-position:100% 100%;mask-position:100% 100%}to{-webkit-mask-position:0 0;mask-position:0 0}}@media (prefers-reduced-motion:reduce){._shimmer_17ewq_1{animation:none}}.arxatec-offline-banner[data-state=open]{animation:.3s ease-out arxatec-offline-banner-enter}@keyframes arxatec-offline-banner-enter{0%{opacity:0;transform:translateY(-100%)}to{opacity:1;transform:translateY(0)}}.shiny-text-overlay{background-size:200% 100%;background-image:linear-gradient(120deg, transparent 40%, color-mix(in oklch, var(--color-foreground) 80%, transparent) 50%, transparent 60%);-webkit-text-fill-color:transparent;color:#0000;-webkit-background-clip:text;background-clip:text;animation:3s linear infinite shiny-text-shine}@keyframes shiny-text-shine{0%{background-position:100%}to{background-position:-100%}}
2
2
  /*$vite$:1*/
@@ -0,0 +1,5 @@
1
+ import { AutosaveFieldState } from '../autosave_status/types';
2
+ export interface AutosaveFieldStatusProps {
3
+ state?: AutosaveFieldState;
4
+ }
5
+ export declare const AutosaveFieldStatus: ({ state }: AutosaveFieldStatusProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,12 @@
1
+ import { Fragment as e, jsx as t, jsxs as n } from "react/jsx-runtime";
2
+ import { AlertCircle as r, Check as i, Loader2 as a } from "lucide-react";
3
+ //#region src/components/autosave_field_status/index.tsx
4
+ var o = ({ state: o }) => /* @__PURE__ */ n(e, { children: [
5
+ o === "saving" ? /* @__PURE__ */ t(a, { className: "size-3.5 animate-spin" }) : null,
6
+ o === "saved" ? /* @__PURE__ */ t(i, { className: "size-3.5" }) : null,
7
+ o === "error" ? /* @__PURE__ */ t(r, { className: "size-3.5 text-destructive" }) : null
8
+ ] });
9
+ //#endregion
10
+ export { o as AutosaveFieldStatus };
11
+
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/components/autosave_field_status/index.tsx"],"sourcesContent":["import { AlertCircle, Check, Loader2 } from \"lucide-react\";\nimport type { AutosaveFieldState } from \"../autosave_status/types\";\n\nexport interface AutosaveFieldStatusProps {\n state?: AutosaveFieldState;\n}\n\nexport const AutosaveFieldStatus = ({ state }: AutosaveFieldStatusProps) => (\n <>\n {state === \"saving\" ? <Loader2 className=\"size-3.5 animate-spin\" /> : null}\n {state === \"saved\" ? <Check className=\"size-3.5\" /> : null}\n {state === \"error\" ? (\n <AlertCircle className=\"size-3.5 text-destructive\" />\n ) : null}\n </>\n);\n"],"mappings":";;;AAOA,IAAa,KAAuB,EAAE,eACpC,kBAAA,GAAA,EAAA,UAAA;CACG,MAAU,WAAW,kBAAC,GAAD,EAAS,WAAU,yBAA0B,CAAA,GAAG;CACrE,MAAU,UAAU,kBAAC,GAAD,EAAO,WAAU,YAAa,CAAA,GAAG;CACrD,MAAU,UACT,kBAAC,GAAD,EAAa,WAAU,6BAA8B,CAAA,GACnD;CACH,EAAA,CAAA"}
@@ -0,0 +1 @@
1
+ export declare const SAVED_LINGER_MS = 4000;
@@ -0,0 +1,6 @@
1
+ //#region src/components/autosave_status/constants/index.ts
2
+ var e = 4e3;
3
+ //#endregion
4
+ export { e as SAVED_LINGER_MS };
5
+
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../src/components/autosave_status/constants/index.ts"],"sourcesContent":["export const SAVED_LINGER_MS = 4000;\n"],"mappings":";AAAA,IAAa,IAAkB"}
@@ -0,0 +1,9 @@
1
+ import { AutosaveStatusValue } from './types';
2
+ export interface AutosaveStatusProps {
3
+ status: AutosaveStatusValue;
4
+ errorMessage: string | null;
5
+ isRetryable: boolean;
6
+ onRetry: () => void;
7
+ className?: string;
8
+ }
9
+ export declare const AutosaveStatus: ({ status, errorMessage, isRetryable, onRetry, className, }: AutosaveStatusProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,46 @@
1
+ import { cn as e } from "../../utilities/class/index.js";
2
+ import { Button as t } from "../button/index.js";
3
+ import { useEditableFields as n } from "../editable_fields/hooks/index.js";
4
+ import { SAVED_LINGER_MS as r } from "./constants/index.js";
5
+ import { useEffect as i, useState as a } from "react";
6
+ import { Fragment as o, jsx as s, jsxs as c } from "react/jsx-runtime";
7
+ import { AlertCircle as l, Check as u, CloudOff as d, Loader2 as f } from "lucide-react";
8
+ //#region src/components/autosave_status/index.tsx
9
+ var p = () => {
10
+ let { labels: e } = n(), [t, c] = a(!1);
11
+ return i(() => {
12
+ let e = setTimeout(() => c(!0), r);
13
+ return () => clearTimeout(e);
14
+ }, []), /* @__PURE__ */ s(o, { children: t ? e.savedAgo : e.saved });
15
+ }, m = ({ status: r, errorMessage: i, isRetryable: a, onRetry: m, className: h }) => {
16
+ let { labels: g } = n();
17
+ return /* @__PURE__ */ c("p", {
18
+ role: "status",
19
+ "aria-live": "polite",
20
+ className: e("flex min-h-5 max-w-[55%] items-center gap-1.5 text-xs text-muted-foreground", r === "error" && "text-destructive", h),
21
+ children: [
22
+ r === "saving" ? /* @__PURE__ */ c(o, { children: [/* @__PURE__ */ s(f, { className: "size-3.5 shrink-0 animate-spin" }), g.saving] }) : null,
23
+ r === "saved" ? /* @__PURE__ */ c(o, { children: [/* @__PURE__ */ s(u, { className: "size-3.5 shrink-0" }), /* @__PURE__ */ s(p, {})] }) : null,
24
+ r === "offline" ? /* @__PURE__ */ c(o, { children: [/* @__PURE__ */ s(d, { className: "size-3.5 shrink-0" }), g.offline] }) : null,
25
+ r === "error" ? /* @__PURE__ */ c(o, { children: [
26
+ /* @__PURE__ */ s(l, { className: "size-3.5 shrink-0" }),
27
+ /* @__PURE__ */ s("span", {
28
+ className: "truncate",
29
+ children: i || g.genericError
30
+ }),
31
+ a ? /* @__PURE__ */ s(t, {
32
+ type: "button",
33
+ variant: "link",
34
+ size: "sm",
35
+ className: "h-auto p-0 text-xs text-destructive underline",
36
+ onClick: m,
37
+ children: g.retry
38
+ }) : null
39
+ ] }) : null
40
+ ]
41
+ });
42
+ };
43
+ //#endregion
44
+ export { m as AutosaveStatus };
45
+
46
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/components/autosave_status/index.tsx"],"sourcesContent":["import { useEditableFields } from \"@/components/editable_fields/hooks\";\nimport { Button } from \"@/components/button\";\nimport { AlertCircle, Check, CloudOff, Loader2 } from \"lucide-react\";\nimport { useEffect, useState } from \"react\";\nimport { cn } from \"@/utilities/class\";\nimport { SAVED_LINGER_MS } from \"./constants\";\nimport type { AutosaveStatusValue } from \"./types\";\n\nexport interface AutosaveStatusProps {\n status: AutosaveStatusValue;\n errorMessage: string | null;\n isRetryable: boolean;\n onRetry: () => void;\n className?: string;\n}\n\nconst SavedStatusCopy = () => {\n const { labels } = useEditableFields();\n const [hasLingered, setHasLingered] = useState(false);\n useEffect(() => {\n const timer = setTimeout(() => setHasLingered(true), SAVED_LINGER_MS);\n return () => clearTimeout(timer);\n }, []);\n return <>{hasLingered ? labels.savedAgo : labels.saved}</>;\n};\n\nexport const AutosaveStatus = ({\n status,\n errorMessage,\n isRetryable,\n onRetry,\n className,\n}: AutosaveStatusProps) => {\n const { labels } = useEditableFields();\n\n return (\n <p\n role=\"status\"\n aria-live=\"polite\"\n className={cn(\n \"flex min-h-5 max-w-[55%] items-center gap-1.5 text-xs text-muted-foreground\",\n status === \"error\" && \"text-destructive\",\n className,\n )}\n >\n {status === \"saving\" ? (\n <>\n <Loader2 className=\"size-3.5 shrink-0 animate-spin\" />\n {labels.saving}\n </>\n ) : null}\n\n {status === \"saved\" ? (\n <>\n <Check className=\"size-3.5 shrink-0\" />\n <SavedStatusCopy />\n </>\n ) : null}\n\n {status === \"offline\" ? (\n <>\n <CloudOff className=\"size-3.5 shrink-0\" />\n {labels.offline}\n </>\n ) : null}\n\n {status === \"error\" ? (\n <>\n <AlertCircle className=\"size-3.5 shrink-0\" />\n <span className=\"truncate\">\n {errorMessage || labels.genericError}\n </span>\n {isRetryable ? (\n <Button\n type=\"button\"\n variant=\"link\"\n size=\"sm\"\n className=\"h-auto p-0 text-xs text-destructive underline\"\n onClick={onRetry}\n >\n {labels.retry}\n </Button>\n ) : null}\n </>\n ) : null}\n </p>\n );\n};\n"],"mappings":";;;;;;;;AAgBA,IAAM,UAAwB;CAC5B,IAAM,EAAE,cAAW,GAAmB,EAChC,CAAC,GAAa,KAAkB,EAAS,GAAM;AAKrD,QAJA,QAAgB;EACd,IAAM,IAAQ,iBAAiB,EAAe,GAAK,EAAE,EAAgB;AACrE,eAAa,aAAa,EAAM;IAC/B,EAAE,CAAC,EACC,kBAAA,GAAA,EAAA,UAAG,IAAc,EAAO,WAAW,EAAO,OAAS,CAAA;GAG/C,KAAkB,EAC7B,WACA,iBACA,gBACA,YACA,mBACyB;CACzB,IAAM,EAAE,cAAW,GAAmB;AAEtC,QACE,kBAAC,KAAD;EACE,MAAK;EACL,aAAU;EACV,WAAW,EACT,+EACA,MAAW,WAAW,oBACtB,EACD;YAPH;GASG,MAAW,WACV,kBAAA,GAAA,EAAA,UAAA,CACE,kBAAC,GAAD,EAAS,WAAU,kCAAmC,CAAA,EACrD,EAAO,OACP,EAAA,CAAA,GACD;GAEH,MAAW,UACV,kBAAA,GAAA,EAAA,UAAA,CACE,kBAAC,GAAD,EAAO,WAAU,qBAAsB,CAAA,EACvC,kBAAC,GAAD,EAAmB,CAAA,CAClB,EAAA,CAAA,GACD;GAEH,MAAW,YACV,kBAAA,GAAA,EAAA,UAAA,CACE,kBAAC,GAAD,EAAU,WAAU,qBAAsB,CAAA,EACzC,EAAO,QACP,EAAA,CAAA,GACD;GAEH,MAAW,UACV,kBAAA,GAAA,EAAA,UAAA;IACE,kBAAC,GAAD,EAAa,WAAU,qBAAsB,CAAA;IAC7C,kBAAC,QAAD;KAAM,WAAU;eACb,KAAgB,EAAO;KACnB,CAAA;IACN,IACC,kBAAC,GAAD;KACE,MAAK;KACL,SAAQ;KACR,MAAK;KACL,WAAU;KACV,SAAS;eAER,EAAO;KACD,CAAA,GACP;IACH,EAAA,CAAA,GACD;GACF"}
@@ -0,0 +1,2 @@
1
+ export type AutosaveFieldState = "idle" | "dirty" | "saving" | "saved" | "error";
2
+ export type AutosaveStatusValue = AutosaveFieldState | "offline";
@@ -0,0 +1,31 @@
1
+ import { Locale } from 'date-fns';
2
+ import { ReactNode } from 'react';
3
+ export interface EditableFieldLabels {
4
+ empty: string;
5
+ hint: string;
6
+ hours: string;
7
+ minutes: string;
8
+ saving: string;
9
+ saved: string;
10
+ savedAgo: string;
11
+ offline: string;
12
+ genericError: string;
13
+ retry: string;
14
+ acceptColor: string;
15
+ clearColor: string;
16
+ selectColor: string;
17
+ changeColor: string;
18
+ currentColor: string;
19
+ }
20
+ export interface EditableFieldsConfig {
21
+ labels: EditableFieldLabels;
22
+ locale: Locale;
23
+ dateFormat: string;
24
+ tableDateFormat: string;
25
+ swatches: readonly string[];
26
+ }
27
+ export interface EditableFieldsProviderProps extends Partial<Omit<EditableFieldsConfig, "labels">> {
28
+ labels?: Partial<EditableFieldLabels>;
29
+ children: ReactNode;
30
+ }
31
+ export declare const EditableFieldsContext: import('react').Context<EditableFieldsConfig>;
@@ -0,0 +1,30 @@
1
+ import { HEX_COLOR_SWATCHES as e } from "../../hex_color_picker/utils/index.js";
2
+ import { createContext as t } from "react";
3
+ import { es as n } from "date-fns/locale";
4
+ var r = t({
5
+ labels: {
6
+ empty: "Añadir…",
7
+ hint: "Enter para guardar · Esc para descartar",
8
+ hours: "Horas",
9
+ minutes: "Minutos",
10
+ saving: "Guardando…",
11
+ saved: "Guardado",
12
+ savedAgo: "Guardado hace un momento",
13
+ offline: "Sin conexión · se guardará al reconectar",
14
+ genericError: "No se pudo guardar el cambio. Revisa tu conexión.",
15
+ retry: "Reintentar",
16
+ acceptColor: "Aceptar",
17
+ clearColor: "Quitar color",
18
+ selectColor: "Seleccionar color",
19
+ changeColor: "Cambiar color",
20
+ currentColor: "actual"
21
+ },
22
+ locale: n,
23
+ dateFormat: "dd 'de' MMMM 'del' yyyy",
24
+ tableDateFormat: "dd MMM yyyy",
25
+ swatches: e
26
+ });
27
+ //#endregion
28
+ export { r as EditableFieldsContext };
29
+
30
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../src/components/editable_fields/context/index.ts"],"sourcesContent":["import { es } from \"date-fns/locale\";\nimport type { Locale } from \"date-fns\";\nimport { createContext, type ReactNode } from \"react\";\nimport { HEX_COLOR_SWATCHES } from \"../../hex_color_picker/utils\";\n\nexport interface EditableFieldLabels {\n empty: string;\n hint: string;\n hours: string;\n minutes: string;\n saving: string;\n saved: string;\n savedAgo: string;\n offline: string;\n genericError: string;\n retry: string;\n acceptColor: string;\n clearColor: string;\n selectColor: string;\n changeColor: string;\n currentColor: string;\n}\n\nexport interface EditableFieldsConfig {\n labels: EditableFieldLabels;\n locale: Locale;\n dateFormat: string;\n tableDateFormat: string;\n swatches: readonly string[];\n}\n\nexport interface EditableFieldsProviderProps extends Partial<\n Omit<EditableFieldsConfig, \"labels\">\n> {\n labels?: Partial<EditableFieldLabels>;\n children: ReactNode;\n}\n\nconst defaults: EditableFieldsConfig = {\n labels: {\n empty: \"Añadir…\",\n hint: \"Enter para guardar · Esc para descartar\",\n hours: \"Horas\",\n minutes: \"Minutos\",\n saving: \"Guardando…\",\n saved: \"Guardado\",\n savedAgo: \"Guardado hace un momento\",\n offline: \"Sin conexión · se guardará al reconectar\",\n genericError: \"No se pudo guardar el cambio. Revisa tu conexión.\",\n retry: \"Reintentar\",\n acceptColor: \"Aceptar\",\n clearColor: \"Quitar color\",\n selectColor: \"Seleccionar color\",\n changeColor: \"Cambiar color\",\n currentColor: \"actual\",\n },\n locale: es,\n dateFormat: \"dd 'de' MMMM 'del' yyyy\",\n tableDateFormat: \"dd MMM yyyy\",\n swatches: HEX_COLOR_SWATCHES,\n};\n\nexport const EditableFieldsContext =\n createContext<EditableFieldsConfig>(defaults);\n"],"mappings":";;;AA8DA,IAAa,IACX,EAzBqC;CACrC,QAAQ;EACN,OAAO;EACP,MAAM;EACN,OAAO;EACP,SAAS;EACT,QAAQ;EACR,OAAO;EACP,UAAU;EACV,SAAS;EACT,cAAc;EACd,OAAO;EACP,aAAa;EACb,YAAY;EACZ,aAAa;EACb,aAAa;EACb,cAAc;EACf;CACD,QAAQ;CACR,YAAY;CACZ,iBAAiB;CACjB,UAAU;CACX,CAG8C"}
@@ -0,0 +1 @@
1
+ export declare const useEditableFields: () => import('../context').EditableFieldsConfig;
@@ -0,0 +1,8 @@
1
+ import { EditableFieldsContext as e } from "../context/index.js";
2
+ import { useContext as t } from "react";
3
+ //#region src/components/editable_fields/hooks/index.ts
4
+ var n = () => t(e);
5
+ //#endregion
6
+ export { n as useEditableFields };
7
+
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../src/components/editable_fields/hooks/index.ts"],"sourcesContent":["import { useContext } from \"react\";\nimport { EditableFieldsContext } from \"../context\";\nexport const useEditableFields = () => useContext(EditableFieldsContext);\n"],"mappings":";;;AAEA,IAAa,UAA0B,EAAW,EAAsB"}
@@ -0,0 +1,3 @@
1
+ import { EditableFieldsProviderProps } from './context';
2
+ export type { EditableFieldsProviderProps } from './context';
3
+ export declare const EditableFieldsProvider: ({ children, labels, locale, dateFormat, tableDateFormat, swatches, }: EditableFieldsProviderProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,32 @@
1
+ import { EditableFieldsContext as e } from "./context/index.js";
2
+ import { useEditableFields as t } from "./hooks/index.js";
3
+ import { useMemo as n } from "react";
4
+ import { jsx as r } from "react/jsx-runtime";
5
+ //#region src/components/editable_fields/index.tsx
6
+ var i = ({ children: i, labels: a, locale: o, dateFormat: s, tableDateFormat: c, swatches: l }) => {
7
+ let u = t(), d = n(() => ({
8
+ labels: {
9
+ ...u.labels,
10
+ ...a
11
+ },
12
+ locale: o ?? u.locale,
13
+ dateFormat: s ?? u.dateFormat,
14
+ tableDateFormat: c ?? u.tableDateFormat,
15
+ swatches: l ?? u.swatches
16
+ }), [
17
+ u,
18
+ a,
19
+ o,
20
+ s,
21
+ c,
22
+ l
23
+ ]);
24
+ return /* @__PURE__ */ r(e.Provider, {
25
+ value: d,
26
+ children: i
27
+ });
28
+ };
29
+ //#endregion
30
+ export { i as EditableFieldsProvider };
31
+
32
+ //# sourceMappingURL=index.js.map