@liorian/sdk 0.28.0-alpha.56010ca

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 (362) hide show
  1. package/README.md +483 -0
  2. package/package.json +94 -0
  3. package/schemas/module.schema.json +818 -0
  4. package/src/application/index.ts +3 -0
  5. package/src/application/module-instance.ts +36 -0
  6. package/src/application/service/auth-api-service.ts +291 -0
  7. package/src/application/service/auth-user.service.ts +108 -0
  8. package/src/application/service/index.ts +12 -0
  9. package/src/application/service/module-activation-api.service.ts +105 -0
  10. package/src/application/service/notifications-api-service.ts +38 -0
  11. package/src/application/service/notifications-push.service.ts +299 -0
  12. package/src/application/service/notifications-socket-service.ts +76 -0
  13. package/src/application/service/organizations-api-service.ts +104 -0
  14. package/src/application/service/otp-api-service.ts +11 -0
  15. package/src/application/service/storage-api-service.ts +77 -0
  16. package/src/application/service/storefront-api.service.ts +72 -0
  17. package/src/application/service/user-preferences-api.service.ts +57 -0
  18. package/src/domain/config/app.config.ts +35 -0
  19. package/src/domain/config/auth.config.ts +30 -0
  20. package/src/domain/config/index.ts +4 -0
  21. package/src/domain/config/logo.config.ts +17 -0
  22. package/src/domain/entities/activities.interface.ts +18 -0
  23. package/src/domain/entities/catalog.interface.ts +96 -0
  24. package/src/domain/entities/index.ts +13 -0
  25. package/src/domain/entities/media.ts +22 -0
  26. package/src/domain/entities/module-activation.interface.ts +173 -0
  27. package/src/domain/entities/module.interface.ts +101 -0
  28. package/src/domain/entities/notification.interface.ts +23 -0
  29. package/src/domain/entities/objectable.type.ts +3 -0
  30. package/src/domain/entities/organization.interface.ts +81 -0
  31. package/src/domain/entities/user-auth.interface.ts +17 -0
  32. package/src/domain/entities/user-phone.interface.ts +11 -0
  33. package/src/domain/entities/user-profile.interface.ts +23 -0
  34. package/src/domain/entities/user.interface.ts +79 -0
  35. package/src/domain/enums/coloring.enum.ts +6 -0
  36. package/src/domain/enums/domains.enum.ts +282 -0
  37. package/src/domain/enums/index.ts +8 -0
  38. package/src/domain/enums/module-category.enum.ts +57 -0
  39. package/src/domain/enums/module.enum.ts +97 -0
  40. package/src/domain/enums/routine.enum.ts +12 -0
  41. package/src/domain/enums/user-profile.enum.ts +25 -0
  42. package/src/domain/enums/user-status.enum.ts +7 -0
  43. package/src/domain/index.ts +6 -0
  44. package/src/domain/typing/auth-caches.ts +12 -0
  45. package/src/domain/typing/auth-oauth.types.ts +172 -0
  46. package/src/domain/typing/devise.ts +2 -0
  47. package/src/domain/typing/index.ts +10 -0
  48. package/src/domain/typing/response.ts +30 -0
  49. package/src/domain/typing/routine.types.ts +113 -0
  50. package/src/domain/typing/session.interface.ts +28 -0
  51. package/src/domain/typing/statisticals.ts +11 -0
  52. package/src/domain/typing/user-media-upload.ts +9 -0
  53. package/src/domain/typing/values.ts +6 -0
  54. package/src/index.tsx +168 -0
  55. package/src/infrastructure/capabilities/cache-storage/capability.ts +129 -0
  56. package/src/infrastructure/capabilities/cache-storage/enum.ts +5 -0
  57. package/src/infrastructure/capabilities/cache-storage/index.ts +4 -0
  58. package/src/infrastructure/capabilities/cache-storage/types.ts +13 -0
  59. package/src/infrastructure/capabilities/index.ts +3 -0
  60. package/src/infrastructure/capabilities/stackable/capability.ts +55 -0
  61. package/src/infrastructure/capabilities/stackable/index.ts +3 -0
  62. package/src/infrastructure/capabilities/stackable/types.ts +24 -0
  63. package/src/infrastructure/common-classname.constant.ts +4 -0
  64. package/src/infrastructure/data/countries.ts +208 -0
  65. package/src/infrastructure/data/gender.ts +5 -0
  66. package/src/infrastructure/data/index.ts +3 -0
  67. package/src/infrastructure/dataset/index.ts +3 -0
  68. package/src/infrastructure/dataset/sign-in.dataset.ts +21 -0
  69. package/src/infrastructure/dataset/sign-up.dataset.ts +64 -0
  70. package/src/infrastructure/hooks/index.ts +10 -0
  71. package/src/infrastructure/hooks/use-activity-lock-draft.ts +69 -0
  72. package/src/infrastructure/hooks/use-auth.ts +24 -0
  73. package/src/infrastructure/hooks/use-elastic-interaction.ts +180 -0
  74. package/src/infrastructure/hooks/use-is-desktop.ts +25 -0
  75. package/src/infrastructure/hooks/use-is-tauri.ts +17 -0
  76. package/src/infrastructure/hooks/use-mobile.ts +19 -0
  77. package/src/infrastructure/hooks/use-notifications.ts +128 -0
  78. package/src/infrastructure/hooks/use-recent-colors.ts +113 -0
  79. package/src/infrastructure/hooks/use-recent-modules.ts +76 -0
  80. package/src/infrastructure/index.tsx +11 -0
  81. package/src/infrastructure/library/design-system.ts +95 -0
  82. package/src/infrastructure/library/index.tsx +5 -0
  83. package/src/infrastructure/library/motion-utils.ts +77 -0
  84. package/src/infrastructure/library/motion.tsx +31 -0
  85. package/src/infrastructure/library/scroll-progress.tsx +93 -0
  86. package/src/infrastructure/providers/auth-guard.provider.tsx +47 -0
  87. package/src/infrastructure/providers/auth.provider.tsx +168 -0
  88. package/src/infrastructure/providers/index.tsx +8 -0
  89. package/src/infrastructure/providers/module-usage.provider.tsx +95 -0
  90. package/src/infrastructure/providers/modules-guard.provider.tsx +64 -0
  91. package/src/infrastructure/providers/modules-routines.provider.tsx +33 -0
  92. package/src/infrastructure/providers/modules-switcher.provider.tsx +25 -0
  93. package/src/infrastructure/providers/query.provider.tsx +27 -0
  94. package/src/infrastructure/routines/__tests__/routine.test.ts +368 -0
  95. package/src/infrastructure/routines/index.tsx +3 -0
  96. package/src/infrastructure/routines/routine.hook.ts +121 -0
  97. package/src/infrastructure/routines/routine.ts +283 -0
  98. package/src/infrastructure/routines/routine.tsx +283 -0
  99. package/src/infrastructure/stores/activity-lock.store.ts +22 -0
  100. package/src/infrastructure/stores/auth-user-connected.store.ts +24 -0
  101. package/src/infrastructure/stores/dataset.store.ts +106 -0
  102. package/src/infrastructure/stores/index.ts +6 -0
  103. package/src/infrastructure/stores/module.store.ts +266 -0
  104. package/src/infrastructure/stores/upload.store.ts +198 -0
  105. package/src/infrastructure/utilities/access-label.util.ts +158 -0
  106. package/src/infrastructure/utilities/activities.util.tsx +54 -0
  107. package/src/infrastructure/utilities/activity-lock.service.ts +263 -0
  108. package/src/infrastructure/utilities/activity-tracker.service.ts +205 -0
  109. package/src/infrastructure/utilities/api-service.ts +237 -0
  110. package/src/infrastructure/utilities/auth-logout.util.ts +23 -0
  111. package/src/infrastructure/utilities/classname.util.ts +7 -0
  112. package/src/infrastructure/utilities/encryption.service.ts +125 -0
  113. package/src/infrastructure/utilities/form-snapshot.service.ts +304 -0
  114. package/src/infrastructure/utilities/format.util.ts +40 -0
  115. package/src/infrastructure/utilities/index.tsx +23 -0
  116. package/src/infrastructure/utilities/media-label.service.ts +47 -0
  117. package/src/infrastructure/utilities/modules.ts +11 -0
  118. package/src/infrastructure/utilities/permission.util.ts +22 -0
  119. package/src/infrastructure/utilities/push-permission.util.ts +43 -0
  120. package/src/infrastructure/utilities/route-access.ts +38 -0
  121. package/src/infrastructure/utilities/socket-service.ts +123 -0
  122. package/src/infrastructure/utilities/sso-auth.util.ts +188 -0
  123. package/src/infrastructure/utilities/stringable.util.ts +16 -0
  124. package/src/infrastructure/utilities/strings.util.ts +18 -0
  125. package/src/infrastructure/utilities/tauri.util.ts +15 -0
  126. package/src/infrastructure/utilities/utils.ts +6 -0
  127. package/src/infrastructure/utilities/values.ts +5 -0
  128. package/src/presentation/8starlabs-ui/button.tsx +94 -0
  129. package/src/presentation/8starlabs-ui/flip-clock.tsx +368 -0
  130. package/src/presentation/8starlabs-ui/heatmap.tsx +430 -0
  131. package/src/presentation/8starlabs-ui/hooks/index.tsx +2 -0
  132. package/src/presentation/8starlabs-ui/hooks/use-mobile.ts +21 -0
  133. package/src/presentation/8starlabs-ui/index.tsx +20 -0
  134. package/src/presentation/8starlabs-ui/json-viewer.tsx +972 -0
  135. package/src/presentation/8starlabs-ui/marquee.tsx +134 -0
  136. package/src/presentation/8starlabs-ui/partition-bar.tsx +198 -0
  137. package/src/presentation/8starlabs-ui/scroll-fade.tsx +158 -0
  138. package/src/presentation/8starlabs-ui/status-indicator.tsx +86 -0
  139. package/src/presentation/8starlabs-ui/system-banner.tsx +50 -0
  140. package/src/presentation/8starlabs-ui/timeline.tsx +576 -0
  141. package/src/presentation/8starlabs-ui/transport-badge.tsx +249 -0
  142. package/src/presentation/8starlabs-ui/ui/copy-button.tsx +60 -0
  143. package/src/presentation/8starlabs-ui/ui/index.tsx +2 -0
  144. package/src/presentation/analytics-section.tsx +85 -0
  145. package/src/presentation/app-sidebar.tsx +234 -0
  146. package/src/presentation/charts/area-widget.chart-skeleton.tsx +61 -0
  147. package/src/presentation/charts/area-widget.chart.tsx +128 -0
  148. package/src/presentation/charts/chart-widgets.types.ts +81 -0
  149. package/src/presentation/charts/index.tsx +16 -0
  150. package/src/presentation/charts/line-widget.chart-skeleton.tsx +64 -0
  151. package/src/presentation/charts/line-widget.chart.tsx +105 -0
  152. package/src/presentation/charts/pie-widget.chart-skeleton.tsx +56 -0
  153. package/src/presentation/charts/pie-widget.chart.tsx +168 -0
  154. package/src/presentation/charts/radar-widget.chart-skeleton.tsx +67 -0
  155. package/src/presentation/charts/radar-widget.chart.tsx +80 -0
  156. package/src/presentation/charts/radial-stacked-widget.chart-skeleton.tsx +66 -0
  157. package/src/presentation/charts/radial-stacked-widget.chart.tsx +120 -0
  158. package/src/presentation/charts/radial-widget.chart-skeleton.tsx +61 -0
  159. package/src/presentation/charts/radial-widget.chart.tsx +87 -0
  160. package/src/presentation/charts/tooltip-widget.chart-skeleton.tsx +64 -0
  161. package/src/presentation/charts/tooltip-widget.chart.tsx +89 -0
  162. package/src/presentation/components/activity-actions.tsx +20 -0
  163. package/src/presentation/components/activity-container.tsx +55 -0
  164. package/src/presentation/components/activity-content.tsx +20 -0
  165. package/src/presentation/components/activity-descriptor-parser.tsx +37 -0
  166. package/src/presentation/components/activity-header.tsx +20 -0
  167. package/src/presentation/components/activity-loader.tsx +19 -0
  168. package/src/presentation/components/activity-title.tsx +32 -0
  169. package/src/presentation/components/activity.tsx +22 -0
  170. package/src/presentation/components/auth/index.tsx +4 -0
  171. package/src/presentation/components/auth/sso-callback.view.tsx +44 -0
  172. package/src/presentation/components/auth/sso-disconnect.view.tsx +41 -0
  173. package/src/presentation/components/auth/sso-sign-in.view.tsx +29 -0
  174. package/src/presentation/components/auth-lock-screen.tsx +309 -0
  175. package/src/presentation/components/auth-session.view.tsx +17 -0
  176. package/src/presentation/components/data-table.tsx +814 -0
  177. package/src/presentation/components/dynamic-icon.tsx +16 -0
  178. package/src/presentation/components/floating-upload.tsx +291 -0
  179. package/src/presentation/components/index.tsx +40 -0
  180. package/src/presentation/components/local-time.tsx +170 -0
  181. package/src/presentation/components/markdown-parser.tsx +201 -0
  182. package/src/presentation/components/message-scroller.tsx +131 -0
  183. package/src/presentation/components/module-first-access-config.view.tsx +181 -0
  184. package/src/presentation/components/module-first-access-pending.view.tsx +38 -0
  185. package/src/presentation/components/module-guard.tsx +34 -0
  186. package/src/presentation/components/modules-first-access.guard.tsx +88 -0
  187. package/src/presentation/components/modules-guard-forbidden.tsx +46 -0
  188. package/src/presentation/components/notification-details.modal.tsx +145 -0
  189. package/src/presentation/components/notification-item.tsx +127 -0
  190. package/src/presentation/components/notifications-popover.tsx +128 -0
  191. package/src/presentation/components/push-notifications.provider.tsx +65 -0
  192. package/src/presentation/components/upload-progress-dialog.tsx +140 -0
  193. package/src/presentation/components/waiting-bar.tsx +22 -0
  194. package/src/presentation/components/waiting-section.tsx +15 -0
  195. package/src/presentation/components/waiting.tsx +14 -0
  196. package/src/presentation/data-grid/data-grid-empty.tsx +24 -0
  197. package/src/presentation/data-grid/data-grid-search-engine.tsx +32 -0
  198. package/src/presentation/data-grid/data-grid.tsx +892 -0
  199. package/src/presentation/data-grid/index.tsx +4 -0
  200. package/src/presentation/form-screen.tsx +95 -0
  201. package/src/presentation/icons/custom.tsx +20 -0
  202. package/src/presentation/icons/glyphIcons.tsx +53 -0
  203. package/src/presentation/icons/icons.enum.ts +4 -0
  204. package/src/presentation/icons/icons.util.ts +6 -0
  205. package/src/presentation/icons/index.tsx +8 -0
  206. package/src/presentation/icons/lucide.tsx +17 -0
  207. package/src/presentation/icons/remix.tsx +33 -0
  208. package/src/presentation/icons/types.ts +27 -0
  209. package/src/presentation/index.tsx +45 -0
  210. package/src/presentation/modals/components/ModalBox.tsx +74 -0
  211. package/src/presentation/modals/components/ModalPortal.tsx +31 -0
  212. package/src/presentation/modals/components/ModalStepper.tsx +319 -0
  213. package/src/presentation/modals/components/ModalWrapper.tsx +65 -0
  214. package/src/presentation/modals/components/index.tsx +5 -0
  215. package/src/presentation/modals/hooks/index.ts +2 -0
  216. package/src/presentation/modals/hooks/useModal.ts +38 -0
  217. package/src/presentation/modals/index.tsx +5 -0
  218. package/src/presentation/modals/stores/index.ts +2 -0
  219. package/src/presentation/modals/stores/useModalStore.ts +90 -0
  220. package/src/presentation/modals/types/index.ts +2 -0
  221. package/src/presentation/modals/types/modal.type.ts +33 -0
  222. package/src/presentation/module-menubar.tsx +300 -0
  223. package/src/presentation/module-widget.tsx +233 -0
  224. package/src/presentation/nav-documents.tsx +89 -0
  225. package/src/presentation/nav-main.tsx +62 -0
  226. package/src/presentation/nav-secondary.tsx +41 -0
  227. package/src/presentation/nav-user.tsx +109 -0
  228. package/src/presentation/permission-action-badge.tsx +35 -0
  229. package/src/presentation/reui/index.tsx +3 -0
  230. package/src/presentation/reui/stepper.tsx +508 -0
  231. package/src/presentation/reui/timeline.tsx +226 -0
  232. package/src/presentation/sheets/index.tsx +2 -0
  233. package/src/presentation/sheets/legacy-sheet-header.tsx +0 -0
  234. package/src/presentation/sheets/legacy-sheet.tsx +37 -0
  235. package/src/presentation/size.enum.ts +19 -0
  236. package/src/presentation/system/index.tsx +3 -0
  237. package/src/presentation/system/logo.theme.tsx +21 -0
  238. package/src/presentation/system/types.ts +10 -0
  239. package/src/presentation/theme/index.tsx +6 -0
  240. package/src/presentation/theme/prefer-color-scheme.tsx +50 -0
  241. package/src/presentation/theme/switch-color-scheme.tsx +16 -0
  242. package/src/presentation/theme/theme-switcher-button.tsx +20 -0
  243. package/src/presentation/theme/theme.enum.ts +4 -0
  244. package/src/presentation/theme/theme.store.ts +87 -0
  245. package/src/presentation/themes/index.tsx +2 -0
  246. package/src/presentation/themes/katon/dashboard-layout.tsx +1080 -0
  247. package/src/presentation/themes/katon/edge-section.tsx +19 -0
  248. package/src/presentation/themes/katon/header-menubar.tsx +270 -0
  249. package/src/presentation/themes/katon/header-modules-available.tsx +44 -0
  250. package/src/presentation/themes/katon/header-modules-recents.tsx +52 -0
  251. package/src/presentation/themes/katon/header-modules-store.tsx +25 -0
  252. package/src/presentation/themes/katon/header-options.tsx +13 -0
  253. package/src/presentation/themes/katon/header-organization-select.tsx +146 -0
  254. package/src/presentation/themes/katon/header-routines.tsx +74 -0
  255. package/src/presentation/themes/katon/header-tasks-connected-user.tsx +150 -0
  256. package/src/presentation/themes/katon/index.tsx +16 -0
  257. package/src/presentation/themes/katon/main-wrapper.tsx +34 -0
  258. package/src/presentation/themes/katon/module-item-link.tsx +32 -0
  259. package/src/presentation/themes/katon/view-frame.tsx +25 -0
  260. package/src/presentation/themes/katon/view-helmet.tsx +53 -0
  261. package/src/presentation/themes/katon/view-status.tsx +32 -0
  262. package/src/presentation/themes/katon/view-wrapper.tsx +15 -0
  263. package/src/presentation/themes/katon/view.tsx +42 -0
  264. package/src/presentation/ui/accordion-multiselect.tsx +206 -0
  265. package/src/presentation/ui/accordion.tsx +81 -0
  266. package/src/presentation/ui/alert-dialog.tsx +199 -0
  267. package/src/presentation/ui/alert.tsx +76 -0
  268. package/src/presentation/ui/aspect-ratio.tsx +11 -0
  269. package/src/presentation/ui/attachment.tsx +204 -0
  270. package/src/presentation/ui/avatar.tsx +112 -0
  271. package/src/presentation/ui/badge.tsx +49 -0
  272. package/src/presentation/ui/breadcrumb.tsx +122 -0
  273. package/src/presentation/ui/bubble.tsx +125 -0
  274. package/src/presentation/ui/button-group.tsx +83 -0
  275. package/src/presentation/ui/button.tsx +87 -0
  276. package/src/presentation/ui/calendar.tsx +222 -0
  277. package/src/presentation/ui/card.tsx +106 -0
  278. package/src/presentation/ui/carousel.tsx +242 -0
  279. package/src/presentation/ui/chart.tsx +373 -0
  280. package/src/presentation/ui/checkbox.tsx +33 -0
  281. package/src/presentation/ui/clickable.tsx +58 -0
  282. package/src/presentation/ui/collapsible.tsx +33 -0
  283. package/src/presentation/ui/color-swatch-selector.tsx +81 -0
  284. package/src/presentation/ui/combobox.tsx +299 -0
  285. package/src/presentation/ui/command.tsx +195 -0
  286. package/src/presentation/ui/context-menu.tsx +263 -0
  287. package/src/presentation/ui/dialog.tsx +168 -0
  288. package/src/presentation/ui/direction.tsx +22 -0
  289. package/src/presentation/ui/drawer.tsx +134 -0
  290. package/src/presentation/ui/dropdown-menu.tsx +269 -0
  291. package/src/presentation/ui/empty.tsx +104 -0
  292. package/src/presentation/ui/field.tsx +238 -0
  293. package/src/presentation/ui/granularity-selector.tsx +58 -0
  294. package/src/presentation/ui/hover-card.tsx +44 -0
  295. package/src/presentation/ui/index.tsx +74 -0
  296. package/src/presentation/ui/input-group.tsx +156 -0
  297. package/src/presentation/ui/input-otp.tsx +87 -0
  298. package/src/presentation/ui/input.tsx +19 -0
  299. package/src/presentation/ui/item.tsx +196 -0
  300. package/src/presentation/ui/kpi-card.tsx +203 -0
  301. package/src/presentation/ui/label-selector.tsx +100 -0
  302. package/src/presentation/ui/label.tsx +24 -0
  303. package/src/presentation/ui/legacy-birth-date-input.tsx +43 -0
  304. package/src/presentation/ui/legacy-color-picker/index.tsx +42 -0
  305. package/src/presentation/ui/legacy-color-picker/legacy-color-picker.content.tsx +37 -0
  306. package/src/presentation/ui/legacy-color-picker/legacy-color-picker.context.tsx +42 -0
  307. package/src/presentation/ui/legacy-color-picker/legacy-color-picker.hex-input.tsx +97 -0
  308. package/src/presentation/ui/legacy-color-picker/legacy-color-picker.picker.tsx +266 -0
  309. package/src/presentation/ui/legacy-color-picker/legacy-color-picker.presets.ts +22 -0
  310. package/src/presentation/ui/legacy-color-picker/legacy-color-picker.quick-list.tsx +49 -0
  311. package/src/presentation/ui/legacy-color-picker/legacy-color-picker.recent.tsx +43 -0
  312. package/src/presentation/ui/legacy-color-picker/legacy-color-picker.swatches.tsx +111 -0
  313. package/src/presentation/ui/legacy-color-picker/legacy-color-picker.trigger.tsx +128 -0
  314. package/src/presentation/ui/legacy-color-picker/legacy-color-picker.tsx +110 -0
  315. package/src/presentation/ui/legacy-color-picker/legacy-color-picker.types.ts +1 -0
  316. package/src/presentation/ui/legacy-color-picker/legacy-color-picker.utils.ts +114 -0
  317. package/src/presentation/ui/legacy-country-input.tsx +171 -0
  318. package/src/presentation/ui/legacy-gender-input.tsx +22 -0
  319. package/src/presentation/ui/legacy-input.tsx +106 -0
  320. package/src/presentation/ui/legacy-phone-input.tsx +213 -0
  321. package/src/presentation/ui/legacy-select-input.tsx +114 -0
  322. package/src/presentation/ui/legacy-text-area.tsx +111 -0
  323. package/src/presentation/ui/list-items.tsx +59 -0
  324. package/src/presentation/ui/marker.tsx +69 -0
  325. package/src/presentation/ui/media-player/index.tsx +12 -0
  326. package/src/presentation/ui/media-player/media-player.context.tsx +36 -0
  327. package/src/presentation/ui/media-player/media-player.tsx +167 -0
  328. package/src/presentation/ui/media-player/player-controls.tsx +207 -0
  329. package/src/presentation/ui/media-player/players/audio-player.tsx +78 -0
  330. package/src/presentation/ui/media-player/players/index.tsx +4 -0
  331. package/src/presentation/ui/media-player/players/video-player.tsx +193 -0
  332. package/src/presentation/ui/media-player/players/voice-note-player.tsx +108 -0
  333. package/src/presentation/ui/media-player/use-media-player.hook.ts +263 -0
  334. package/src/presentation/ui/menubar.tsx +281 -0
  335. package/src/presentation/ui/message.tsx +92 -0
  336. package/src/presentation/ui/navigation-menu.tsx +172 -0
  337. package/src/presentation/ui/pagination.tsx +129 -0
  338. package/src/presentation/ui/popover.tsx +89 -0
  339. package/src/presentation/ui/progress.tsx +31 -0
  340. package/src/presentation/ui/resizable.tsx +50 -0
  341. package/src/presentation/ui/select.tsx +192 -0
  342. package/src/presentation/ui/separator.tsx +28 -0
  343. package/src/presentation/ui/sheet.tsx +147 -0
  344. package/src/presentation/ui/sidebar.tsx +702 -0
  345. package/src/presentation/ui/skeleton.tsx +13 -0
  346. package/src/presentation/ui/slide-to-confirm.tsx +129 -0
  347. package/src/presentation/ui/slider.tsx +59 -0
  348. package/src/presentation/ui/sonner.tsx +58 -0
  349. package/src/presentation/ui/switch.tsx +33 -0
  350. package/src/presentation/ui/table.tsx +116 -0
  351. package/src/presentation/ui/tabs.tsx +90 -0
  352. package/src/presentation/ui/text-gradient.tsx +84 -0
  353. package/src/presentation/ui/textarea.tsx +18 -0
  354. package/src/presentation/ui/timeline-steps.tsx +235 -0
  355. package/src/presentation/ui/toggle-group.tsx +89 -0
  356. package/src/presentation/ui/toggle.tsx +47 -0
  357. package/src/presentation/ui/tooltip.tsx +57 -0
  358. package/src/presentation/uploading/index.tsx +3 -0
  359. package/src/presentation/uploading/media-upload-field.tsx +152 -0
  360. package/src/presentation/uploading/storage-media.tsx +210 -0
  361. package/src/styles.css +403 -0
  362. package/src/themes.css +1038 -0
@@ -0,0 +1,818 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "module-manifest.schema.json",
4
+ "$comment": "Schéma canonique du manifest.json des modules Liorian (@liorian/sdk). Référencé par les modules du socle (frontend/liorian-socle/src/modules/*) et les modules externes (frontend/liorian-socle/external_modules/*).",
5
+ "title": "Module Manifest (Liorian)",
6
+ "description": "Manifeste d'installation et de déclaration d'un module Liorian. Ce fichier décrit l'identité du module, sa compatibilité (plateformes, versions manager/API), ses permissions, ses prérequis fonctionnels (requirements/optionalRequirements) et ses dépendances runtime (dependencies/devDependencies). Il est la source de vérité des métadonnées techniques d'un module, consommée par le Module Store et l'outillage de distribution.",
7
+ "type": "object",
8
+ "default": {},
9
+ "examples": [
10
+ {
11
+ "schemaVersion": 1,
12
+ "id": "hello-world",
13
+ "domain": "mod.liorian.helloworld",
14
+ "key": "HELLO_WORLD",
15
+ "name": "Hello World",
16
+ "description": "Module d'exemple pour l'onboarding des développeurs",
17
+ "version": "1.0.0",
18
+ "icon": "WandSparklesIcon",
19
+ "type": "INTERNAL",
20
+ "entry": "index.tsx",
21
+ "uri": "/hello-world",
22
+ "publisher": {
23
+ "id": "liorian",
24
+ "name": "Liorian Workspace"
25
+ },
26
+ "platforms": {
27
+ "web": {"supported": true, "modes": ["web"]},
28
+ "desktop": {"supported": true, "modes": ["local-webview"], "os": ["windows", "macos", "linux"]},
29
+ "mobile": {"supported": true, "modes": ["local-webview"], "os": ["android"], "iosSupported": false}
30
+ },
31
+ "managerCompatibility": {"min": "0.17.1", "max": "0.17.x"},
32
+ "apiCompatibility": {"min": "0.27.0", "max": "0.27.x"},
33
+ "permissions": ["hello-world.read", "hello-world.write", "hello-world.manage"],
34
+ "apiScopes": ["hello-world.read", "hello-world.write"],
35
+ "capabilities": {
36
+ "needsNetwork": true,
37
+ "supportsOffline": false,
38
+ "requiresOrganization": true,
39
+ "requiresAuthenticatedUser": true
40
+ },
41
+ "isEnabled": true,
42
+ "isDefault": false,
43
+ "requirements": {
44
+ "organization": ">=1.0.0",
45
+ "identity": ">=1.0.0"
46
+ },
47
+ "optionalRequirements": {},
48
+ "dependencies": {
49
+ "@liorian/sdk": "workspace:*",
50
+ "react": "^19.0.0",
51
+ "react-dom": "^19.0.0"
52
+ },
53
+ "devDependencies": {
54
+ "@types/react": "^19.2.17",
55
+ "typescript": "^6.0.3"
56
+ },
57
+ "widgets": ["analytics"],
58
+ "routines": ["helloWorldAnalyticsRoutine"],
59
+ "providers": ["layout"]
60
+ }
61
+ ],
62
+ "required": [
63
+ "schemaVersion",
64
+ "id",
65
+ "domain",
66
+ "key",
67
+ "name",
68
+ "description",
69
+ "version",
70
+ "icon",
71
+ "type",
72
+ "entry",
73
+ "uri",
74
+ "publisher",
75
+ "platforms",
76
+ "managerCompatibility",
77
+ "apiCompatibility",
78
+ "permissions",
79
+ "apiScopes",
80
+ "capabilities",
81
+ "isEnabled",
82
+ "isDefault",
83
+ "requirements",
84
+ "optionalRequirements",
85
+ "dependencies",
86
+ "devDependencies"
87
+ ],
88
+ "additionalProperties": true,
89
+ "properties": {
90
+ "schemaVersion": {
91
+ "type": "integer",
92
+ "const": 1,
93
+ "default": 1,
94
+ "title": "Version de schéma",
95
+ "description": "Version du schéma de manifeste. Garantit la compatibilité ascendante de l'outillage de validation et de distribution. Doit rester à 1 tant que le schéma n'introduit pas de rupture."
96
+ },
97
+ "id": {
98
+ "type": "string",
99
+ "pattern": "^[a-z0-9]+(-[a-z0-9]+)*$",
100
+ "minLength": 2,
101
+ "maxLength": 64,
102
+ "title": "Identifiant technique",
103
+ "description": "Identifiant court et unique du module (slug kebab-case, sans domaine). Correspond au dossier racine du module, au champ « id » du package.json et à la clé d'enregistrement dans le registre de modules.",
104
+ "examples": ["accounting", "project-management", "hello-world"]
105
+ },
106
+ "domain": {
107
+ "type": "string",
108
+ "pattern": "^mod\\.[a-z0-9]+(\\.[a-z0-9-]+)*$",
109
+ "minLength": 5,
110
+ "title": "Domaine / identifiant pleinement qualifié",
111
+ "description": "Identifiant de type reverse-DNS unique du module, préfixé par « mod. ». Utilisé comme `identifier` dans la déclaration (ModuleDeclarationInterface) et comme clé de synchronisation avec le backend.",
112
+ "examples": ["mod.liorian.accounting", "mod.liorian.pos-management"]
113
+ },
114
+ "key": {
115
+ "type": "string",
116
+ "pattern": "^[A-Z][A-Z0-9_]*$",
117
+ "minLength": 2,
118
+ "maxLength": 64,
119
+ "title": "Clé publique",
120
+ "description": "Clé lisible et stable du module (SCREAMING_SNAKE_CASE), utilisée pour les permissions, l'occultation des logs et comme identifiant secondaire dans le Module Store.",
121
+ "examples": ["ACCOUNTING", "POS_MANAGEMENT", "HELLO_WORLD"]
122
+ },
123
+ "name": {
124
+ "type": "string",
125
+ "minLength": 1,
126
+ "maxLength": 80,
127
+ "title": "Nom d'affichage",
128
+ "description": "Nom du module tel qu'affiché dans la navigation, le Module Store et les tableaux de bord.",
129
+ "examples": ["Comptabilité", "Point de vente", "E-Commerce"]
130
+ },
131
+ "description": {
132
+ "type": "string",
133
+ "minLength": 1,
134
+ "maxLength": 512,
135
+ "title": "Description",
136
+ "description": "Description du périmètre fonctionnel du module, utilisée dans la fiche produit du Module Store.",
137
+ "examples": ["Plan comptable, écritures, journaux et rapports financiers"]
138
+ },
139
+ "version": {
140
+ "$ref": "#/definitions/semver",
141
+ "title": "Version du module",
142
+ "description": "Version sémantique du module distribuée. Incrémentée selon les conventions SemVer (feat -> mineur, fix -> correctif, rupture -> majeure)."
143
+ },
144
+ "icon": {
145
+ "$ref": "#/definitions/icon-reference",
146
+ "title": "Icône",
147
+ "description": "Nom de l'icône utilisée pour représenter le module (clés `IconKey` du SDK, issues de lucide-react / remix / tabler)."
148
+ },
149
+ "logo": {
150
+ "oneOf": [
151
+ {"type": "string", "minLength": 1},
152
+ {"type": "null"}
153
+ ],
154
+ "title": "Logo",
155
+ "description": "Identifiant média ou URL du logo du module (affiché en priorité face à `icon` dans le Module Store)."
156
+ },
157
+ "banner": {
158
+ "oneOf": [
159
+ {"type": "string", "minLength": 1},
160
+ {"type": "null"}
161
+ ],
162
+ "title": "Bannière",
163
+ "description": "Identifiant média ou URL de la bannière produit (affichée en tête de fiche du Module Store)."
164
+ },
165
+ "type": {
166
+ "type": "string",
167
+ "enum": ["INTERNAL", "EXTERNAL"],
168
+ "title": "Type de module",
169
+ "description": "Nature du module : `INTERNAL` pour les modules livrés avec le socle dans le monorepo, `EXTERNAL` pour les modules distribués de manière indépendante et installables via le Module Store.",
170
+ "default": "INTERNAL"
171
+ },
172
+ "entry": {
173
+ "type": "string",
174
+ "pattern": "^[a-zA-Z0-9_./-]+\\.tsx?$",
175
+ "default": "index.tsx",
176
+ "title": "Point d'entrée",
177
+ "description": "Chemin relatif du fichier contenant l'export default de la `ModuleDeclarationInterface` du module.",
178
+ "examples": ["index.tsx"]
179
+ },
180
+ "uri": {
181
+ "type": "string",
182
+ "pattern": "^/",
183
+ "minLength": 1,
184
+ "title": "URL racine",
185
+ "description": "URL de base de la navigation du module (doit commencer par « / »). C'est la route mère sous laquelle le module déclare ses pages.",
186
+ "examples": ["/accounting", "/pos-management"]
187
+ },
188
+ "category": {
189
+ "type": "string",
190
+ "enum": ["ADMINISTRATION", "COMMERCIAL", "FINANCE", "OPERATIONS", "COMMUNICATION", "DATA", "AUTOMATION", "SYSTEM"],
191
+ "title": "Catégorie",
192
+ "description": "Catégorie du module utilisée pour le filtrage et le regroupement dans le Module Store (alignée sur l'enum `ModuleCategory` du SDK).",
193
+ "examples": ["FINANCE", "COMMERCIAL", "SYSTEM"]
194
+ },
195
+ "publisher": {
196
+ "$ref": "#/definitions/publisher",
197
+ "title": "Éditeur",
198
+ "description": "Identité de l'éditeur du module, affichée dans le Module Store et utilisée pour la vérification de signature."
199
+ },
200
+ "platforms": {
201
+ "$ref": "#/definitions/platforms",
202
+ "title": "Plateformes supportées",
203
+ "description": "Matrice de support du module par plateforme (web, desktop, mobile) et par modes d'exécution."
204
+ },
205
+ "managerCompatibility": {
206
+ "$ref": "#/definitions/version-range",
207
+ "title": "Compatibilité manager",
208
+ "description": "Plage de versions du manager (frontend liorian-socle) acceptées par le module. Hors de cette plage, le module est marqué `incompatible`."
209
+ },
210
+ "apiCompatibility": {
211
+ "$ref": "#/definitions/version-range",
212
+ "title": "Compatibilité API",
213
+ "description": "Plage de versions de l'API backend attendues par le module. Hors de cette plage, les appels de service peuvent ne pas être conformes."
214
+ },
215
+ "permissions": {
216
+ "type": "array",
217
+ "items": {
218
+ "$ref": "#/definitions/permission-code"
219
+ },
220
+ "minItems": 1,
221
+ "uniqueItems": true,
222
+ "title": "Permissions",
223
+ "description": "Liste des permissions demandées par le module (format `<module>.<action>`). Ces permissions sont exposées au moteur d'autorisation via le composant `PermissionActionBadge` / `permission.util`.",
224
+ "examples": [["accounting.read", "accounting.write", "accounting.manage"]]
225
+ },
226
+ "apiScopes": {
227
+ "type": "array",
228
+ "items": {
229
+ "$ref": "#/definitions/permission-code"
230
+ },
231
+ "minItems": 1,
232
+ "uniqueItems": true,
233
+ "title": "Scopes API",
234
+ "description": "Scopes OAuth/API recensés par le module, généralement un sous-ensemble des permissions demandées (lecture/écriture). Utilisés lors de la négociation des accès avec l'API backend.",
235
+ "examples": [["accounting.read", "accounting.write"]]
236
+ },
237
+ "capabilities": {
238
+ "$ref": "#/definitions/capabilities",
239
+ "title": "Capacités",
240
+ "description": "Déclaration des capacités techniques du module (réseau, hors-ligne, organisation requise, utilisateur authentifié, etc.)."
241
+ },
242
+ "isEnabled": {
243
+ "type": "boolean",
244
+ "default": true,
245
+ "title": "Activé par défaut",
246
+ "description": "État d'activation initial du module à l'installation. Peut être modifié par l'utilisateur depuis le Module Store."
247
+ },
248
+ "isDefault": {
249
+ "type": "boolean",
250
+ "default": false,
251
+ "title": "Module par défaut",
252
+ "description": "Si `true`, le module ne peut être ni désactivé ni déplacé (exemple : dashboard, compte, notifications)."
253
+ },
254
+ "requirements": {
255
+ "$ref": "#/definitions/module-version-map",
256
+ "title": "Prérequis fonctionnels",
257
+ "description": "Modules obligatoirement présents et en version suffisante pour que le module fonctionne. Clé : `id` du module requis ; valeur : plage de versions acceptées (comparateurs npm/SemVer).",
258
+ "examples": [{"organization": ">=1.0.0", "identity": ">=1.0.0"}]
259
+ },
260
+ "optionalRequirements": {
261
+ "$ref": "#/definitions/module-version-map",
262
+ "title": "Prérequis optionnels",
263
+ "description": "Modules optionnels dont le module enrichit le comportement s'ils sont présents (intégrations facultatives). La valeur `{}` indique aucun prérequis optionnel.",
264
+ "examples": [{"messenger": ">=1.0.0"}]
265
+ },
266
+ "dependencies": {
267
+ "$ref": "#/definitions/dependency-map",
268
+ "title": "Dépendances npm",
269
+ "description": "Dépendances de packages npm nécessaires à l'exécution du module (nom de package -> plage de versions ou `workspace:*` pour les packages du monorepo).",
270
+ "examples": [{"@liorian/sdk": "workspace:*", "@tanstack/react-query": "^5.101.2"}]
271
+ },
272
+ "devDependencies": {
273
+ "$ref": "#/definitions/dependency-map",
274
+ "title": "Dépendances de développement",
275
+ "description": "Dépendances npm nécessaires uniquement au développement et à la compilation du module (types, toolchain).",
276
+ "examples": [{"typescript": "^6.0.3", "@types/react": "^19.2.17"}]
277
+ },
278
+ "widgets": {
279
+ "type": "array",
280
+ "items": {
281
+ "type": "string",
282
+ "pattern": "^[a-z][a-zA-Z0-9]*$"
283
+ },
284
+ "uniqueItems": true,
285
+ "default": [],
286
+ "title": "Widgets",
287
+ "description": "Clés des widgets de dashboard fournis par le module (ex. : `analytics`, `recentOrders`, `topProducts`), référencées dans la propriété `widgets` de la déclaration React.",
288
+ "examples": [["analytics"], ["analytics", "recentOrders", "topProducts"]]
289
+ },
290
+ "routines": {
291
+ "type": "array",
292
+ "items": {
293
+ "type": "string",
294
+ "pattern": "^[a-zA-Z][a-zA-Z0-9]*$"
295
+ },
296
+ "uniqueItems": true,
297
+ "default": [],
298
+ "title": "Routines",
299
+ "description": "Routines temps réel (rafraîchissement, synchronisation, notifications push) instanciées et déclenchées par le module. Clés : noms exportés des singletons `Routine`.",
300
+ "examples": [["helloWorldAnalyticsRoutine"], ["storeSyncRoutine"]]
301
+ },
302
+ "providers": {
303
+ "type": "array",
304
+ "items": {
305
+ "type": "string",
306
+ "pattern": "^[a-z][a-zA-Z0-9]*$"
307
+ },
308
+ "uniqueItems": true,
309
+ "default": [],
310
+ "title": "Providers de layout",
311
+ "description": "Points d'injection de providers rendus par le socle (ex. : `layout` pour personnaliser le header de l'application). Clés référencées dans la propriété `providers` de la déclaration React.",
312
+ "examples": [["layout"]]
313
+ },
314
+ "configSettings": {
315
+ "type": "array",
316
+ "items": {
317
+ "$ref": "#/definitions/config-settings-field"
318
+ },
319
+ "uniqueItems": true,
320
+ "title": "Paramètres configurables",
321
+ "description": "Champs de configuration du module affichés dans sa fiche du Module Store et persistés par organisation (préférences). Aligné sur `ModuleConfigSettingsFieldInterface` du SDK.",
322
+ "examples": [
323
+ [
324
+ {
325
+ "key": "webhookUrl",
326
+ "label": "URL du webhook",
327
+ "type": "URL",
328
+ "required": false,
329
+ "placeholder": "https://example.com/hook"
330
+ }
331
+ ]
332
+ ]
333
+ },
334
+ "menu": {
335
+ "$ref": "#/definitions/menu",
336
+ "title": "Menu de navigation",
337
+ "description": "Déclaration des éléments de menu du module injectés dans le menu de démarrage (start menu). Les entrées purement programmatiques (`action`) restent dans la déclaration React et ne sont pas représentables en JSON."
338
+ }
339
+ },
340
+ "definitions": {
341
+ "semver": {
342
+ "type": "string",
343
+ "pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-[0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*)?(?:\\+[0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*)?$",
344
+ "title": "Version sémantique (SemVer)",
345
+ "description": "Version au format `majeure.mineure.correctif`, avec pré-version (prerelease) et métadonnées de build optionnelles.",
346
+ "examples": ["1.0.0", "0.27.1", "2.0.0-beta.1"]
347
+ },
348
+ "semver-range": {
349
+ "oneOf": [
350
+ {
351
+ "type": "string",
352
+ "pattern": "^(?:\\^|~|=|>=|<=|>|<)?[Vv]?(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-[0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*)?(?:\\+[0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*)?(\\s+(?:\\^|~|=|>=|<=|>|<)?[Vv]?(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*))?$"
353
+ },
354
+ {
355
+ "type": "string",
356
+ "pattern": "^(?:\\^|~|=|>=|<=|>|<)?[Vv]?(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(?:[xX*])$"
357
+ },
358
+ {
359
+ "type": "string",
360
+ "pattern": "^(?:\\^|~|=|>=|<=|>|<)?[Vv]?(0|[1-9]\\d*)\\.(?:[xX*])$"
361
+ },
362
+ {
363
+ "type": "string",
364
+ "pattern": "^(?:\\^|~|=|>=|<=|>|<)?[Vv]?(0|[1-9]\\d*)\\.(0|[1-9]\\d*)$"
365
+ },
366
+ {
367
+ "type": "string",
368
+ "pattern": "^(\\*|x|X|latest|workspace:\\*)$"
369
+ }
370
+ ],
371
+ "title": "Plage de versions (npm/SemVer)",
372
+ "description": "Plage de versions acceptées au format des comparateurs npm : exacte (`1.2.3`), caret (`^1.2.3`), tilde (`~1.2.3`), comparateurs (`>=1.0.0`), intervalles (`>=1.0.0 <2.0.0`), plages partielles et jokers (`0.17.x`, `0.x`, `*`, `latest`, `workspace:*`).",
373
+ "examples": ["^1.2.3", ">=1.0.0", ">=1.0.0 <2.0.0", "0.17.x", "workspace:*"]
374
+ },
375
+ "version-range": {
376
+ "type": "object",
377
+ "required": ["min"],
378
+ "properties": {
379
+ "min": {
380
+ "$ref": "#/definitions/semver-range",
381
+ "title": "Version minimale acceptée",
382
+ "description": "Borne basse de compatibilité."
383
+ },
384
+ "max": {
385
+ "$ref": "#/definitions/semver-range",
386
+ "title": "Version maximale acceptée",
387
+ "description": "Borne haute de compatibilité (ex. plage `0.17.x`)."
388
+ },
389
+ "strict": {
390
+ "type": "boolean",
391
+ "default": false,
392
+ "title": "Échec strict",
393
+ "description": "Si `true`, une version hors plage rend le module inutilisable (blocage dur). Si `false`, un avertissement est émis."
394
+ }
395
+ },
396
+ "additionalProperties": false,
397
+ "title": "Plage de compatibilité",
398
+ "description": "Contrainte de compatibilité avec le manager (`managerCompatibility`) ou l'API (`apiCompatibility`) : borne minimale requise, borne maximale et sévérité.",
399
+ "examples": [{"min": "0.17.1", "max": "0.17.x"}]
400
+ },
401
+ "module-version-map": {
402
+ "type": "object",
403
+ "propertyNames": {
404
+ "pattern": "^[a-z0-9]+(-[a-z0-9]+)*$"
405
+ },
406
+ "patternProperties": {
407
+ "^[a-z0-9]+(-[a-z0-9]+)*$": {
408
+ "$ref": "#/definitions/semver-range"
409
+ }
410
+ },
411
+ "additionalProperties": false,
412
+ "title": "Carte module -> version",
413
+ "description": "Association d'identifiants de modules (`requirements` / `optionalRequirements`) à des plages de versions acceptées.",
414
+ "examples": [{"organization": ">=1.0.0", "media-library": ">=1.0.0"}]
415
+ },
416
+ "dependency-map": {
417
+ "type": "object",
418
+ "propertyNames": {
419
+ "pattern": "^(?:@[a-z0-9-~][a-z0-9-._~]*\\/)?[a-z0-9-~][a-z0-9-._~]*$"
420
+ },
421
+ "patternProperties": {
422
+ "^(?:@[a-z0-9-~][a-z0-9-._~]*\\/)?[a-z0-9-~][a-z0-9-._~]*$": {
423
+ "$ref": "#/definitions/semver-range"
424
+ }
425
+ },
426
+ "additionalProperties": false,
427
+ "title": "Carte package npm -> version",
428
+ "description": "Association de noms de packages npm (avec ou sans scope `@scope/package`) à des plages de versions acceptées.",
429
+ "examples": [{"@liorian/sdk": "workspace:*", "react": "^19.0.0"}]
430
+ },
431
+ "publisher": {
432
+ "type": "object",
433
+ "required": ["id", "name"],
434
+ "properties": {
435
+ "id": {
436
+ "type": "string",
437
+ "pattern": "^[a-z0-9]+([-_][a-z0-9]+)*$",
438
+ "title": "Identifiant de l'éditeur",
439
+ "description": "Identifiant technique de l'éditeur (ex. `liorian`)."
440
+ },
441
+ "name": {
442
+ "type": "string",
443
+ "minLength": 1,
444
+ "title": "Nom de l'éditeur",
445
+ "description": "Nom affiché de l'éditeur (ex. `Liorian Workspace`)."
446
+ },
447
+ "url": {
448
+ "type": "string",
449
+ "format": "uri",
450
+ "title": "Site de l'éditeur",
451
+ "description": "URL du site officiel de l'éditeur."
452
+ },
453
+ "email": {
454
+ "type": "string",
455
+ "format": "email",
456
+ "title": "Contact",
457
+ "description": "Adresse de contact du support."
458
+ },
459
+ "description": {
460
+ "type": "string",
461
+ "maxLength": 256,
462
+ "title": "Description",
463
+ "description": "Courte présentation de l'éditeur."
464
+ },
465
+ "avatar": {
466
+ "type": "string",
467
+ "format": "uri",
468
+ "title": "Avatar",
469
+ "description": "URL de l'avatar logo de l'éditeur."
470
+ }
471
+ },
472
+ "additionalProperties": false,
473
+ "title": "Éditeur",
474
+ "description": "Identité de l'entité publiant le module.",
475
+ "examples": [{"id": "liorian", "name": "Liorian Workspace"}]
476
+ },
477
+ "platforms": {
478
+ "type": "object",
479
+ "required": ["web", "desktop", "mobile"],
480
+ "properties": {
481
+ "web": {
482
+ "$ref": "#/definitions/platform-support",
483
+ "title": "Support web",
484
+ "description": "Support du module dans le navigateur / client web."
485
+ },
486
+ "desktop": {
487
+ "$ref": "#/definitions/platform-support",
488
+ "title": "Support desktop",
489
+ "description": "Support du module dans le client desktop (Tauri)."
490
+ },
491
+ "mobile": {
492
+ "$ref": "#/definitions/platform-support",
493
+ "title": "Support mobile",
494
+ "description": "Support du module dans le client mobile (Android/iOS)."
495
+ }
496
+ },
497
+ "additionalProperties": false,
498
+ "title": "Matrice de plateformes",
499
+ "description": "Déclaration du support par plateforme. Chaque plateforme fournit un objet `platform-support` (supporté ou non, modes d'exécution et systèmes d'exploitation).",
500
+ "examples": [
501
+ {
502
+ "web": {"supported": true, "modes": ["web"]},
503
+ "desktop": {"supported": true, "modes": ["local-webview"], "os": ["windows", "macos", "linux"]},
504
+ "mobile": {"supported": false, "modes": [], "os": []}
505
+ }
506
+ ]
507
+ },
508
+ "platform-support": {
509
+ "type": "object",
510
+ "required": ["supported"],
511
+ "properties": {
512
+ "supported": {
513
+ "type": "boolean",
514
+ "title": "Supporté",
515
+ "description": "Indique si le module est disponible sur cette plateforme."
516
+ },
517
+ "modes": {
518
+ "type": "array",
519
+ "items": {
520
+ "type": "string"
521
+ },
522
+ "uniqueItems": true,
523
+ "title": "Modes d'exécution",
524
+ "description": "Modes d'exécution supportés (ex. `web`, `pwa`, `local-webview`). Requis si `supported` est `true`.",
525
+ "examples": [["web"], ["local-webview"]]
526
+ },
527
+ "os": {
528
+ "type": "array",
529
+ "items": {
530
+ "type": "string",
531
+ "enum": ["windows", "macos", "linux", "android", "ios"]
532
+ },
533
+ "uniqueItems": true,
534
+ "title": "Systèmes d'exploitation",
535
+ "description": "Systèmes d'exploitation supportés (pertinent pour desktop/mobile).",
536
+ "examples": [["windows", "macos", "linux"]]
537
+ },
538
+ "iosSupported": {
539
+ "type": "boolean",
540
+ "title": "Support iOS",
541
+ "description": "Indique si iOS est supporté sur la plateforme mobile (obsolète si `os` inclut déjà `ios`)."
542
+ },
543
+ "minOsVersion": {
544
+ "type": "string",
545
+ "title": "Version OS minimale",
546
+ "description": "Version minimale du système d'exploitation requise (ex. `14.0`)."
547
+ }
548
+ },
549
+ "additionalProperties": false,
550
+ "allOf": [
551
+ {
552
+ "if": {
553
+ "properties": {
554
+ "supported": {"const": true}
555
+ }
556
+ },
557
+ "then": {
558
+ "properties": {
559
+ "modes": {
560
+ "minItems": 1
561
+ }
562
+ }
563
+ }
564
+ }
565
+ ],
566
+ "title": "Support de plateforme",
567
+ "description": "Définition du support d'un module sur une plateforme donnée."
568
+ },
569
+ "capabilities": {
570
+ "type": "object",
571
+ "properties": {
572
+ "needsNetwork": {
573
+ "type": "boolean",
574
+ "default": true,
575
+ "title": "Réseau requis",
576
+ "description": "Si `true`, le module requiert une connexion réseau pour fonctionner (appels API)."
577
+ },
578
+ "supportsOffline": {
579
+ "type": "boolean",
580
+ "default": false,
581
+ "title": "Mode hors-ligne",
582
+ "description": "Si `true`, le module conserve un fonctionnement dégradé hors connexion (cache local, file d'attente)."
583
+ },
584
+ "requiresOrganization": {
585
+ "type": "boolean",
586
+ "default": true,
587
+ "title": "Organisation requise",
588
+ "description": "Si `true`, le module exige une organisation active (le Module Guard bloque sans organisation)."
589
+ },
590
+ "requiresAuthenticatedUser": {
591
+ "type": "boolean",
592
+ "default": true,
593
+ "title": "Utilisateur authentifié requis",
594
+ "description": "Si `true`, le module exige une session utilisateur authentifiée."
595
+ },
596
+ "requiresAdmin": {
597
+ "type": "boolean",
598
+ "default": false,
599
+ "title": "Administrateur requis",
600
+ "description": "Si `true`, seules les sessions avec le rôle administrateur peuvent accéder au module."
601
+ },
602
+ "supportsRealtime": {
603
+ "type": "boolean",
604
+ "default": false,
605
+ "title": "Temps réel",
606
+ "description": "Si `true`, le module s'appuie sur des routines et/ou événements temps réel (push, websocket)."
607
+ },
608
+ "processesLocalData": {
609
+ "type": "boolean",
610
+ "default": false,
611
+ "title": "Traitement local des données",
612
+ "description": "Si `true`, le module traite des données sur l'appareil (chiffrement local, médias locaux)."
613
+ }
614
+ },
615
+ "additionalProperties": true,
616
+ "title": "Capacités techniques",
617
+ "description": "Déclaration des capacités techniques du module. Les drapeaux inconnus restent autorisés pour préserver l'extensibilité.",
618
+ "examples": [
619
+ {
620
+ "needsNetwork": true,
621
+ "supportsOffline": false,
622
+ "requiresOrganization": true,
623
+ "requiresAuthenticatedUser": true
624
+ }
625
+ ]
626
+ },
627
+ "permission-code": {
628
+ "type": "string",
629
+ "pattern": "^[a-z0-9]+([-_][a-z0-9]+)*(\\.[a-z0-9]+([-_][a-z0-9]+)*)+$",
630
+ "minLength": 3,
631
+ "maxLength": 64,
632
+ "title": "Code de permission / scope",
633
+ "description": "Code hiérarchique au format `<module>.<action>` (ex. `accounting.write`, `project_management.manage`). L'action suit les conventions : `read`, `write`, `manage`, `delete`, `create`, `update`, `list`, `execute`.",
634
+ "examples": ["accounting.read", "project_management.manage", "hello-world.write"]
635
+ },
636
+ "icon-reference": {
637
+ "type": "string",
638
+ "pattern": "^[A-Z][A-Za-z0-9]*$",
639
+ "minLength": 1,
640
+ "maxLength": 64,
641
+ "title": "Référence d'icône",
642
+ "description": "Nom d'une clé `IconKey` du SDK (icônes lucide-react / remix / tabler). Utilisé par le rendu dynamique (`DynamicIcon`).",
643
+ "examples": ["CalculatorIcon", "PackageIcon", "CalendarDays"]
644
+ },
645
+ "menu": {
646
+ "type": "object",
647
+ "required": ["items"],
648
+ "properties": {
649
+ "items": {
650
+ "type": "array",
651
+ "items": {
652
+ "$ref": "#/definitions/menu-item"
653
+ },
654
+ "minItems": 1,
655
+ "title": "Éléments de menu",
656
+ "description": "Liste des éléments de premier niveau du menu du module."
657
+ },
658
+ "dropdown": {
659
+ "type": "string",
660
+ "enum": ["default", "mega", "mini"],
661
+ "default": "default",
662
+ "title": "Type de liste déroulante",
663
+ "description": "Style de menu déroulant appliqué au groupe (liste simple, méga-menu ou mini-menu)."
664
+ }
665
+ },
666
+ "additionalProperties": false,
667
+ "title": "Menu de navigation",
668
+ "description": "Déclaration sérialisable du menu de navigation du module (entrées à URL). Les actions programmatiques restent définies dans la déclaration React."
669
+ },
670
+ "menu-item": {
671
+ "type": "object",
672
+ "required": ["label"],
673
+ "properties": {
674
+ "label": {
675
+ "type": "string",
676
+ "minLength": 1,
677
+ "title": "Libellé",
678
+ "description": "Texte affiché de l'entrée de menu."
679
+ },
680
+ "description": {
681
+ "type": "string",
682
+ "title": "Description",
683
+ "description": "Description courte affichée sous le libellé (méga-menu)."
684
+ },
685
+ "icon": {
686
+ "$ref": "#/definitions/icon-reference",
687
+ "title": "Icône",
688
+ "description": "Icône de l'entrée de menu."
689
+ },
690
+ "url": {
691
+ "type": "string",
692
+ "pattern": "^/",
693
+ "title": "URL de destination",
694
+ "description": "Route interne ciblée par l'entrée de menu."
695
+ },
696
+ "target": {
697
+ "type": "string",
698
+ "enum": ["_self", "_blank", "_parent", "_top"],
699
+ "default": "_self",
700
+ "title": "Cible d'ouverture",
701
+ "description": "Cible d'ouverture du lien."
702
+ },
703
+ "separator": {
704
+ "type": "boolean",
705
+ "const": true,
706
+ "title": "Séparateur",
707
+ "description": "Si présent à `true`, l'entrée est un simple séparateur visuel (aucun autre champ requis)."
708
+ },
709
+ "keywords": {
710
+ "type": "array",
711
+ "items": {
712
+ "type": "string"
713
+ },
714
+ "uniqueItems": true,
715
+ "title": "Mots-clés de recherche",
716
+ "description": "Termes d'indexation pour la recherche dans le menu de démarrage."
717
+ },
718
+ "items": {
719
+ "type": "array",
720
+ "items": {
721
+ "$ref": "#/definitions/menu-item"
722
+ },
723
+ "title": "Sous-menu",
724
+ "description": "Sous-entrées de menu (hiérarchie imbriquée)."
725
+ }
726
+ },
727
+ "additionalProperties": false,
728
+ "anyOf": [
729
+ {"required": ["url"]},
730
+ {"required": ["items"]},
731
+ {"required": ["separator"]}
732
+ ],
733
+ "title": "Entrée de menu",
734
+ "description": "Élément de menu sérialisable : soit un lien (`url`), soit un sous-menu (`items`), soit un séparateur (`separator`)."
735
+ },
736
+ "config-settings-field": {
737
+ "type": "object",
738
+ "required": ["key", "label"],
739
+ "properties": {
740
+ "key": {
741
+ "type": "string",
742
+ "pattern": "^[a-z][a-zA-Z0-9_]*$",
743
+ "title": "Clé de configuration",
744
+ "description": "Clé technique du paramètre (persistée par organisation dans les préférences)."
745
+ },
746
+ "label": {
747
+ "type": "string",
748
+ "minLength": 1,
749
+ "title": "Libellé",
750
+ "description": "Libellé affiché du champ."
751
+ },
752
+ "description": {
753
+ "type": "string",
754
+ "title": "Description",
755
+ "description": "Texte d'aide affiché sous le champ."
756
+ },
757
+ "placeholder": {
758
+ "type": "string",
759
+ "title": "Placeholder",
760
+ "description": "Texte indicatif affiché dans le champ vide."
761
+ },
762
+ "type": {
763
+ "type": "string",
764
+ "enum": ["TEXT", "NUMBER", "EMAIL", "PASSWORD", "URL", "TEL", "SELECT", "TOGGLE"],
765
+ "default": "TEXT",
766
+ "title": "Type de champ",
767
+ "description": "Type de contrôle de saisie (aligné sur `ModuleConfigSettingsFieldType`)."
768
+ },
769
+ "required": {
770
+ "type": "boolean",
771
+ "default": false,
772
+ "title": "Obligatoire",
773
+ "description": "Si `true`, la valeur doit être fournie pour activer le module."
774
+ },
775
+ "defaultValue": {
776
+ "type": "string",
777
+ "title": "Valeur par défaut",
778
+ "description": "Valeur proposée par défaut avant toute saisie."
779
+ },
780
+ "options": {
781
+ "type": "array",
782
+ "items": {
783
+ "type": "object",
784
+ "required": ["label", "value"],
785
+ "properties": {
786
+ "label": {
787
+ "type": "string",
788
+ "title": "Libellé",
789
+ "description": "Texte affiché de l'option."
790
+ },
791
+ "value": {
792
+ "type": "string",
793
+ "title": "Valeur",
794
+ "description": "Valeur technique de l'option."
795
+ }
796
+ },
797
+ "additionalProperties": false
798
+ },
799
+ "uniqueItems": true,
800
+ "title": "Options",
801
+ "description": "Options de sélection (requis lorsque `type` vaut `SELECT`)."
802
+ }
803
+ },
804
+ "additionalProperties": false,
805
+ "title": "Champ de configuration",
806
+ "description": "Définition d'un paramètre configurable du module, affiché dans la fiche du Module Store et persisté par organisation.",
807
+ "examples": [
808
+ {
809
+ "key": "webhookUrl",
810
+ "label": "URL du webhook",
811
+ "type": "URL",
812
+ "required": false,
813
+ "placeholder": "https://example.com/hook"
814
+ }
815
+ ]
816
+ }
817
+ }
818
+ }