@mframework/layer-shared 0.0.1

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 (456) hide show
  1. package/README.md +2 -0
  2. package/dist/api/global-search.d.ts +8 -0
  3. package/dist/api/global-search.js +1 -0
  4. package/dist/app/components/Gallery/__tests__/Gallery.spec.d.ts +1 -0
  5. package/dist/app/components/Gallery/__tests__/Gallery.spec.js +12 -0
  6. package/dist/app/components/Heading/__tests__/Heading.spec.d.ts +1 -0
  7. package/dist/app/components/Heading/__tests__/Heading.spec.js +12 -0
  8. package/dist/app/components/Heading/types.d.ts +5 -0
  9. package/dist/app/components/Heading/types.js +1 -0
  10. package/dist/app/components/ui/AccordionItem/__tests__/AccordionItem.spec.d.ts +1 -0
  11. package/dist/app/components/ui/AccordionItem/__tests__/AccordionItem.spec.js +12 -0
  12. package/dist/app/components/ui/AccordionItem/types.d.ts +5 -0
  13. package/dist/app/components/ui/AccordionItem/types.js +1 -0
  14. package/dist/app/components/ui/Alert/types.d.ts +5 -0
  15. package/dist/app/components/ui/Alert/types.js +1 -0
  16. package/dist/app/components/ui/Breadcrumbs/__tests__/Breadcrumbs.spec.d.ts +1 -0
  17. package/dist/app/components/ui/Breadcrumbs/__tests__/Breadcrumbs.spec.js +12 -0
  18. package/dist/app/components/ui/Breadcrumbs/types.d.ts +7 -0
  19. package/dist/app/components/ui/Breadcrumbs/types.js +1 -0
  20. package/dist/app/components/ui/CartProductCard/types.d.ts +17 -0
  21. package/dist/app/components/ui/CartProductCard/types.js +1 -0
  22. package/dist/app/components/ui/CategoryCard/types.d.ts +8 -0
  23. package/dist/app/components/ui/CategoryCard/types.js +1 -0
  24. package/dist/app/components/ui/Display/types.d.ts +12 -0
  25. package/dist/app/components/ui/Display/types.js +1 -0
  26. package/dist/app/components/ui/Divider/__tests__/Divider.spec.d.ts +1 -0
  27. package/dist/app/components/ui/Divider/__tests__/Divider.spec.js +8 -0
  28. package/dist/app/components/ui/Form/__tests__/FormHelperText.spec.d.ts +1 -0
  29. package/dist/app/components/ui/Form/__tests__/FormHelperText.spec.js +8 -0
  30. package/dist/app/components/ui/Form/__tests__/FormLabel.spec.d.ts +1 -0
  31. package/dist/app/components/ui/Form/__tests__/FormLabel.spec.js +8 -0
  32. package/dist/app/components/ui/Hero/types.d.ts +10 -0
  33. package/dist/app/components/ui/Hero/types.js +1 -0
  34. package/dist/app/components/ui/Modal/types.d.ts +7 -0
  35. package/dist/app/components/ui/Modal/types.js +1 -0
  36. package/dist/app/components/ui/Overlay/__tests__/Overlay.spec.d.ts +1 -0
  37. package/dist/app/components/ui/Overlay/__tests__/Overlay.spec.js +12 -0
  38. package/dist/app/components/ui/Overlay/types.d.ts +3 -0
  39. package/dist/app/components/ui/Overlay/types.js +1 -0
  40. package/dist/app/components/ui/Pagination/__tests__/Pagination.spec.d.ts +1 -0
  41. package/dist/app/components/ui/Pagination/__tests__/Pagination.spec.js +15 -0
  42. package/dist/app/components/ui/Pagination/types.d.ts +6 -0
  43. package/dist/app/components/ui/Pagination/types.js +1 -0
  44. package/dist/app/components/ui/ProductCard/__tests__/ProductCard.spec.d.ts +1 -0
  45. package/dist/app/components/ui/ProductCard/__tests__/ProductCard.spec.js +14 -0
  46. package/dist/app/components/ui/ProductCard/types.d.ts +12 -0
  47. package/dist/app/components/ui/ProductCard/types.js +1 -0
  48. package/dist/app/components/ui/ProductCardHorizontal/__tests__/ProductCardHorizontal.spec.d.ts +1 -0
  49. package/dist/app/components/ui/ProductCardHorizontal/__tests__/ProductCardHorizontal.spec.js +34 -0
  50. package/dist/app/components/ui/ProductCardHorizontal/types.d.ts +4 -0
  51. package/dist/app/components/ui/ProductCardHorizontal/types.js +1 -0
  52. package/dist/app/components/ui/PurchaseCard/__tests__/PurchaseCard.spec.d.ts +1 -0
  53. package/dist/app/components/ui/PurchaseCard/__tests__/PurchaseCard.spec.js +12 -0
  54. package/dist/app/components/ui/PurchaseCard/types.d.ts +4 -0
  55. package/dist/app/components/ui/PurchaseCard/types.js +1 -0
  56. package/dist/app/components/ui/QuantitySelector/__tests__/QuantitySelector.spec.d.ts +1 -0
  57. package/dist/app/components/ui/QuantitySelector/__tests__/QuantitySelector.spec.js +13 -0
  58. package/dist/app/components/ui/QuantitySelector/types.d.ts +5 -0
  59. package/dist/app/components/ui/QuantitySelector/types.js +1 -0
  60. package/dist/app/components/ui/Review/__tests__/Review.spec.d.ts +1 -0
  61. package/dist/app/components/ui/Review/__tests__/Review.spec.js +13 -0
  62. package/dist/app/components/ui/Review/types.d.ts +4 -0
  63. package/dist/app/components/ui/Review/types.js +1 -0
  64. package/dist/app/components/ui/Tag/__tests__/Tag.spec.d.ts +1 -0
  65. package/dist/app/components/ui/Tag/__tests__/Tag.spec.js +8 -0
  66. package/dist/app/components/ui/Tag/types.d.ts +14 -0
  67. package/dist/app/components/ui/Tag/types.js +11 -0
  68. package/dist/app/composables/globals/useAdminTable.d.ts +3 -0
  69. package/dist/app/composables/globals/useAdminTable.js +9 -0
  70. package/dist/app/composables/globals/useCustomFetch.d.ts +2 -0
  71. package/dist/app/composables/globals/useCustomFetch.js +8 -0
  72. package/dist/app/composables/globals/useDirectusField.d.ts +10 -0
  73. package/dist/app/composables/globals/useDirectusField.js +119 -0
  74. package/dist/app/composables/globals/useDirectusForm.d.ts +10 -0
  75. package/dist/app/composables/globals/useDirectusForm.js +66 -0
  76. package/dist/app/composables/globals/useFileManager.d.ts +14 -0
  77. package/dist/app/composables/globals/useFileManager.js +62 -0
  78. package/dist/app/composables/globals/useLivePreview.d.ts +1 -0
  79. package/dist/app/composables/globals/useLivePreview.js +16 -0
  80. package/dist/app/composables/globals/useLoading.d.ts +6 -0
  81. package/dist/app/composables/globals/useLoading.js +19 -0
  82. package/dist/app/composables/globals/useNotifications.d.ts +35 -0
  83. package/dist/app/composables/globals/useNotifications.js +133 -0
  84. package/dist/app/composables/globals/useRichText.d.ts +1 -0
  85. package/dist/app/composables/globals/useRichText.js +32 -0
  86. package/dist/app/composables/globals/useServerRootMixin.d.ts +3 -0
  87. package/dist/app/composables/globals/useServerRootMixin.js +15 -0
  88. package/dist/app/composables/globals/useVisualEditing.d.ts +17 -0
  89. package/dist/app/composables/globals/useVisualEditing.js +27 -0
  90. package/dist/app/composables/mappers/createMapper.d.ts +2 -0
  91. package/dist/app/composables/mappers/createMapper.js +6 -0
  92. package/dist/app/composables/mappers/errors.d.ts +6 -0
  93. package/dist/app/composables/mappers/errors.js +12 -0
  94. package/dist/app/composables/mappers/index.d.ts +6 -0
  95. package/dist/app/composables/mappers/index.js +7 -0
  96. package/dist/app/composables/mappers/registry.d.ts +5 -0
  97. package/dist/app/composables/mappers/registry.js +18 -0
  98. package/dist/app/composables/mappers/testHarness.d.ts +13 -0
  99. package/dist/app/composables/mappers/testHarness.js +98 -0
  100. package/dist/app/composables/mappers/types.d.ts +5 -0
  101. package/dist/app/composables/mappers/types.js +1 -0
  102. package/dist/app/composables/mappers/zodMapper.d.ts +9 -0
  103. package/dist/app/composables/mappers/zodMapper.js +17 -0
  104. package/dist/app/composables/media/useFile.d.ts +2 -0
  105. package/dist/app/composables/media/useFile.js +4 -0
  106. package/dist/app/composables/media/useMediaCenter.d.ts +29 -0
  107. package/dist/app/composables/media/useMediaCenter.js +321 -0
  108. package/dist/app/composables/media/useVideojs.d.ts +11 -0
  109. package/dist/app/composables/media/useVideojs.js +42 -0
  110. package/dist/app/composables/registry.d.ts +3 -0
  111. package/dist/app/composables/registry.js +10 -0
  112. package/dist/app/composables/schema/commerce/attributes.d.ts +7 -0
  113. package/dist/app/composables/schema/commerce/attributes.js +1 -0
  114. package/dist/app/composables/schema/commerce/blocks.d.ts +6 -0
  115. package/dist/app/composables/schema/commerce/blocks.js +1 -0
  116. package/dist/app/composables/schema/commerce/bundleProduts.d.ts +10 -0
  117. package/dist/app/composables/schema/commerce/bundleProduts.js +1 -0
  118. package/dist/app/composables/schema/commerce/cart.d.ts +29 -0
  119. package/dist/app/composables/schema/commerce/cart.js +1 -0
  120. package/dist/app/composables/schema/commerce/category.d.ts +12 -0
  121. package/dist/app/composables/schema/commerce/category.js +1 -0
  122. package/dist/app/composables/schema/commerce/checkout.d.ts +9 -0
  123. package/dist/app/composables/schema/commerce/checkout.js +1 -0
  124. package/dist/app/composables/schema/commerce/company.d.ts +7 -0
  125. package/dist/app/composables/schema/commerce/company.js +1 -0
  126. package/dist/app/composables/schema/commerce/configurableProducts.d.ts +12 -0
  127. package/dist/app/composables/schema/commerce/configurableProducts.js +1 -0
  128. package/dist/app/composables/schema/commerce/coupons.d.ts +9 -0
  129. package/dist/app/composables/schema/commerce/coupons.js +1 -0
  130. package/dist/app/composables/schema/commerce/credit-memos.d.ts +48 -0
  131. package/dist/app/composables/schema/commerce/credit-memos.js +1 -0
  132. package/dist/app/composables/schema/commerce/digitalProducts.d.ts +11 -0
  133. package/dist/app/composables/schema/commerce/digitalProducts.js +1 -0
  134. package/dist/app/composables/schema/commerce/directory.d.ts +7 -0
  135. package/dist/app/composables/schema/commerce/directory.js +1 -0
  136. package/dist/app/composables/schema/commerce/events.d.ts +27 -0
  137. package/dist/app/composables/schema/commerce/events.js +1 -0
  138. package/dist/app/composables/schema/commerce/gift-registry.d.ts +7 -0
  139. package/dist/app/composables/schema/commerce/gift-registry.js +1 -0
  140. package/dist/app/composables/schema/commerce/guest-cart.d.ts +4 -0
  141. package/dist/app/composables/schema/commerce/guest-cart.js +1 -0
  142. package/dist/app/composables/schema/commerce/inventory.d.ts +8 -0
  143. package/dist/app/composables/schema/commerce/inventory.js +1 -0
  144. package/dist/app/composables/schema/commerce/invoices.d.ts +47 -0
  145. package/dist/app/composables/schema/commerce/invoices.js +1 -0
  146. package/dist/app/composables/schema/commerce/orders.d.ts +32 -0
  147. package/dist/app/composables/schema/commerce/orders.js +1 -0
  148. package/dist/app/composables/schema/commerce/payments.d.ts +8 -0
  149. package/dist/app/composables/schema/commerce/payments.js +1 -0
  150. package/dist/app/composables/schema/commerce/price.d.ts +9 -0
  151. package/dist/app/composables/schema/commerce/price.js +1 -0
  152. package/dist/app/composables/schema/commerce/product-types.d.ts +6 -0
  153. package/dist/app/composables/schema/commerce/product-types.js +1 -0
  154. package/dist/app/composables/schema/commerce/product.d.ts +20 -0
  155. package/dist/app/composables/schema/commerce/product.js +1 -0
  156. package/dist/app/composables/schema/commerce/quotes.d.ts +13 -0
  157. package/dist/app/composables/schema/commerce/quotes.js +1 -0
  158. package/dist/app/composables/schema/commerce/requisition-lists.d.ts +9 -0
  159. package/dist/app/composables/schema/commerce/requisition-lists.js +1 -0
  160. package/dist/app/composables/schema/commerce/returns.d.ts +8 -0
  161. package/dist/app/composables/schema/commerce/returns.js +1 -0
  162. package/dist/app/composables/schema/commerce/reward.d.ts +7 -0
  163. package/dist/app/composables/schema/commerce/reward.js +1 -0
  164. package/dist/app/composables/schema/commerce/rules.d.ts +7 -0
  165. package/dist/app/composables/schema/commerce/rules.js +1 -0
  166. package/dist/app/composables/schema/commerce/shipment.d.ts +18 -0
  167. package/dist/app/composables/schema/commerce/shipment.js +1 -0
  168. package/dist/app/composables/schema/commerce/shops.d.ts +8 -0
  169. package/dist/app/composables/schema/commerce/shops.js +1 -0
  170. package/dist/app/composables/schema/commerce/stockItems.d.ts +7 -0
  171. package/dist/app/composables/schema/commerce/stockItems.js +1 -0
  172. package/dist/app/composables/schema/commerce/store.d.ts +7 -0
  173. package/dist/app/composables/schema/commerce/store.js +1 -0
  174. package/dist/app/composables/schema/commerce/subscriptons.d.ts +9 -0
  175. package/dist/app/composables/schema/commerce/subscriptons.js +1 -0
  176. package/dist/app/composables/schema/commerce/taxRates.d.ts +7 -0
  177. package/dist/app/composables/schema/commerce/taxRates.js +1 -0
  178. package/dist/app/composables/schema/commerce/taxRules.d.ts +7 -0
  179. package/dist/app/composables/schema/commerce/taxRules.js +1 -0
  180. package/dist/app/composables/schema/commerce/teams.d.ts +6 -0
  181. package/dist/app/composables/schema/commerce/teams.js +1 -0
  182. package/dist/app/composables/schema/commerce/transactions.d.ts +11 -0
  183. package/dist/app/composables/schema/commerce/transactions.js +1 -0
  184. package/dist/app/composables/schema/identity/customerGroup.d.ts +7 -0
  185. package/dist/app/composables/schema/identity/customerGroup.js +1 -0
  186. package/dist/app/composables/schema/identity/user.d.ts +45 -0
  187. package/dist/app/composables/schema/identity/user.js +1 -0
  188. package/dist/app/composables/schema/media/asset.d.ts +28 -0
  189. package/dist/app/composables/schema/media/asset.js +1 -0
  190. package/dist/app/composables/schema/social/post.d.ts +25 -0
  191. package/dist/app/composables/schema/social/post.js +1 -0
  192. package/dist/app/composables/schema/social/profile.d.ts +22 -0
  193. package/dist/app/composables/schema/social/profile.js +1 -0
  194. package/dist/app/composables/schema/social/space.d.ts +17 -0
  195. package/dist/app/composables/schema/social/space.js +1 -0
  196. package/dist/app/composables/types.d.ts +11 -0
  197. package/dist/app/composables/types.js +1 -0
  198. package/dist/app/composables/useContent.d.ts +4 -0
  199. package/dist/app/composables/useContent.js +10 -0
  200. package/dist/app/composables/useDirectusRequest.d.ts +12 -0
  201. package/dist/app/composables/useDirectusRequest.js +83 -0
  202. package/dist/app/composables/utils/assert.d.ts +1 -0
  203. package/dist/app/composables/utils/assert.js +5 -0
  204. package/dist/app/composables/utils/deepMerge.d.ts +1 -0
  205. package/dist/app/composables/utils/deepMerge.js +15 -0
  206. package/dist/app/composables/utils/index.d.ts +4 -0
  207. package/dist/app/composables/utils/index.js +4 -0
  208. package/dist/app/composables/utils/isObject.d.ts +1 -0
  209. package/dist/app/composables/utils/isObject.js +5 -0
  210. package/dist/app/composables/utils/module.d.ts +4 -0
  211. package/dist/app/composables/utils/module.js +14 -0
  212. package/dist/app/composables/utils/safeGet.d.ts +1 -0
  213. package/dist/app/composables/utils/safeGet.js +5 -0
  214. package/dist/app/stores/index.d.ts +0 -0
  215. package/dist/app/stores/index.js +1 -0
  216. package/dist/app/utils/billing-address.d.ts +2 -0
  217. package/dist/app/utils/billing-address.js +18 -0
  218. package/dist/app/utils/color.d.ts +2 -0
  219. package/dist/app/utils/color.js +11 -0
  220. package/dist/app/utils/currency.d.ts +6 -0
  221. package/dist/app/utils/currency.js +20 -0
  222. package/dist/app/utils/embed.d.ts +2 -0
  223. package/dist/app/utils/embed.js +52 -0
  224. package/dist/app/utils/errors.d.ts +5 -0
  225. package/dist/app/utils/errors.js +6 -0
  226. package/dist/app/utils/fonts.d.ts +5 -0
  227. package/dist/app/utils/fonts.js +18 -0
  228. package/dist/app/utils/formkit.d.ts +12 -0
  229. package/dist/app/utils/formkit.js +59 -0
  230. package/dist/app/utils/icons.d.ts +4 -0
  231. package/dist/app/utils/icons.js +36 -0
  232. package/dist/app/utils/links.d.ts +7 -0
  233. package/dist/app/utils/links.js +21 -0
  234. package/dist/app/utils/lodash.d.ts +2 -0
  235. package/dist/app/utils/lodash.js +23 -0
  236. package/dist/app/utils/markdown.d.ts +1 -0
  237. package/dist/app/utils/markdown.js +8 -0
  238. package/dist/app/utils/math.d.ts +6 -0
  239. package/dist/app/utils/math.js +21 -0
  240. package/dist/app/utils/navigation.d.ts +2 -0
  241. package/dist/app/utils/navigation.js +9 -0
  242. package/dist/app/utils/objects.d.ts +3 -0
  243. package/dist/app/utils/objects.js +11 -0
  244. package/dist/app/utils/paths.d.ts +21 -0
  245. package/dist/app/utils/paths.js +21 -0
  246. package/dist/app/utils/relations.d.ts +9 -0
  247. package/dist/app/utils/relations.js +24 -0
  248. package/dist/app/utils/strings.d.ts +14 -0
  249. package/dist/app/utils/strings.js +92 -0
  250. package/dist/app/utils/time.d.ts +13 -0
  251. package/dist/app/utils/time.js +124 -0
  252. package/dist/app/utils/url.d.ts +12 -0
  253. package/dist/app/utils/url.js +20 -0
  254. package/dist/app/utils/user-name.d.ts +2 -0
  255. package/dist/app/utils/user-name.js +15 -0
  256. package/dist/blocks/block-button-group.d.ts +6 -0
  257. package/dist/blocks/block-button-group.js +1 -0
  258. package/dist/blocks/block-button.d.ts +13 -0
  259. package/dist/blocks/block-button.js +1 -0
  260. package/dist/blocks/block-column.d.ts +18 -0
  261. package/dist/blocks/block-column.js +1 -0
  262. package/dist/blocks/block-cta.d.ts +11 -0
  263. package/dist/blocks/block-cta.js +1 -0
  264. package/dist/blocks/block-divider.d.ts +4 -0
  265. package/dist/blocks/block-divider.js +1 -0
  266. package/dist/blocks/block-faq.d.ts +11 -0
  267. package/dist/blocks/block-faq.js +1 -0
  268. package/dist/blocks/block-form.d.ts +7 -0
  269. package/dist/blocks/block-form.js +1 -0
  270. package/dist/blocks/block-gallery.d.ts +13 -0
  271. package/dist/blocks/block-gallery.js +1 -0
  272. package/dist/blocks/block-hero.d.ts +11 -0
  273. package/dist/blocks/block-hero.js +1 -0
  274. package/dist/blocks/block-html.d.ts +4 -0
  275. package/dist/blocks/block-html.js +1 -0
  276. package/dist/blocks/block-logocloud.d.ts +13 -0
  277. package/dist/blocks/block-logocloud.js +1 -0
  278. package/dist/blocks/block-quote.d.ts +10 -0
  279. package/dist/blocks/block-quote.js +1 -0
  280. package/dist/blocks/block-richtext.d.ts +7 -0
  281. package/dist/blocks/block-richtext.js +1 -0
  282. package/dist/blocks/block-steps.d.ts +21 -0
  283. package/dist/blocks/block-steps.js +1 -0
  284. package/dist/blocks/block-team.d.ts +6 -0
  285. package/dist/blocks/block-team.js +1 -0
  286. package/dist/blocks/block-testimonial.d.ts +13 -0
  287. package/dist/blocks/block-testimonial.js +1 -0
  288. package/dist/blocks/block-video.d.ts +9 -0
  289. package/dist/blocks/block-video.js +1 -0
  290. package/dist/blocks/block.d.ts +17 -0
  291. package/dist/blocks/block.js +1 -0
  292. package/dist/blocks/index.d.ts +18 -0
  293. package/dist/blocks/index.js +1 -0
  294. package/dist/componentMap.d.ts +6 -0
  295. package/dist/componentMap.js +8 -0
  296. package/dist/content/category.d.ts +10 -0
  297. package/dist/content/category.js +1 -0
  298. package/dist/content/form.d.ts +21 -0
  299. package/dist/content/form.js +1 -0
  300. package/dist/content/index.d.ts +6 -0
  301. package/dist/content/index.js +1 -0
  302. package/dist/content/page.d.ts +38 -0
  303. package/dist/content/page.js +1 -0
  304. package/dist/content/post.d.ts +38 -0
  305. package/dist/content/post.js +1 -0
  306. package/dist/content/team.d.ts +17 -0
  307. package/dist/content/team.js +1 -0
  308. package/dist/content/testimonial.d.ts +18 -0
  309. package/dist/content/testimonial.js +1 -0
  310. package/dist/help/index.d.ts +51 -0
  311. package/dist/help/index.js +1 -0
  312. package/dist/index.d.ts +7 -0
  313. package/dist/index.js +1 -0
  314. package/dist/meta/analytics.d.ts +21 -0
  315. package/dist/meta/analytics.js +1 -0
  316. package/dist/meta/config.d.ts +22 -0
  317. package/dist/meta/config.js +1 -0
  318. package/dist/meta/globals.d.ts +33 -0
  319. package/dist/meta/globals.js +1 -0
  320. package/dist/meta/index.d.ts +6 -0
  321. package/dist/meta/index.js +1 -0
  322. package/dist/meta/navigation.d.ts +31 -0
  323. package/dist/meta/navigation.js +1 -0
  324. package/dist/meta/redirect.d.ts +12 -0
  325. package/dist/meta/redirect.js +1 -0
  326. package/dist/meta/seo.d.ts +19 -0
  327. package/dist/meta/seo.js +1 -0
  328. package/dist/os/contact.d.ts +22 -0
  329. package/dist/os/contact.js +1 -0
  330. package/dist/os/conversation.d.ts +23 -0
  331. package/dist/os/conversation.js +1 -0
  332. package/dist/os/index.d.ts +16 -0
  333. package/dist/os/index.js +1 -0
  334. package/dist/os/organization.d.ts +51 -0
  335. package/dist/os/organization.js +1 -0
  336. package/dist/os/os-activity.d.ts +26 -0
  337. package/dist/os/os-activity.js +1 -0
  338. package/dist/os/os-deal.d.ts +42 -0
  339. package/dist/os/os-deal.js +1 -0
  340. package/dist/os/os-expense.d.ts +21 -0
  341. package/dist/os/os-expense.js +1 -0
  342. package/dist/os/os-invoice.d.ts +46 -0
  343. package/dist/os/os-invoice.js +1 -0
  344. package/dist/os/os-item.d.ts +17 -0
  345. package/dist/os/os-item.js +1 -0
  346. package/dist/os/os-payment.d.ts +27 -0
  347. package/dist/os/os-payment.js +1 -0
  348. package/dist/os/os-project.d.ts +45 -0
  349. package/dist/os/os-project.js +1 -0
  350. package/dist/os/os-proposal.d.ts +61 -0
  351. package/dist/os/os-proposal.js +1 -0
  352. package/dist/os/os-settings.d.ts +17 -0
  353. package/dist/os/os-settings.js +1 -0
  354. package/dist/os/os-subscription.d.ts +12 -0
  355. package/dist/os/os-subscription.js +1 -0
  356. package/dist/os/os-task.d.ts +32 -0
  357. package/dist/os/os-task.js +1 -0
  358. package/dist/os/os-tax-rate.d.ts +12 -0
  359. package/dist/os/os-tax-rate.js +1 -0
  360. package/dist/package.json +72 -0
  361. package/dist/pageComponentMap.d.ts +2 -0
  362. package/dist/pageComponentMap.js +7 -0
  363. package/dist/schema.d.ts +78 -0
  364. package/dist/schema.js +1 -0
  365. package/dist/system/file.d.ts +47 -0
  366. package/dist/system/file.js +1 -0
  367. package/dist/system/folder.d.ts +8 -0
  368. package/dist/system/folder.js +1 -0
  369. package/dist/system/index.d.ts +4 -0
  370. package/dist/system/index.js +1 -0
  371. package/dist/system/role.d.ts +20 -0
  372. package/dist/system/role.js +1 -0
  373. package/dist/system/user.d.ts +57 -0
  374. package/dist/system/user.js +1 -0
  375. package/dist/tsconfig.tsbuildinfo +1 -0
  376. package/i18n/.gitkeep +0 -0
  377. package/i18n/config.ts +9 -0
  378. package/i18n/da_DK.json +613 -0
  379. package/i18n/de-DE/account.json +100 -0
  380. package/i18n/de-DE/cart.json +19 -0
  381. package/i18n/de-DE/changePassword.json +15 -0
  382. package/i18n/de-DE/checkout.json +68 -0
  383. package/i18n/de-DE/de-DE.ts +27 -0
  384. package/i18n/de-DE/errors.json +46 -0
  385. package/i18n/de-DE/form.json +42 -0
  386. package/i18n/de-DE/general.json +62 -0
  387. package/i18n/de-DE/listing.json +15 -0
  388. package/i18n/de-DE/newsletter.json +11 -0
  389. package/i18n/de-DE/product.json +48 -0
  390. package/i18n/de-DE/recoveryPassword.json +21 -0
  391. package/i18n/de-DE/validations.json +24 -0
  392. package/i18n/de_DE.json +613 -0
  393. package/i18n/en-GB/account.json +102 -0
  394. package/i18n/en-GB/cart.json +19 -0
  395. package/i18n/en-GB/changePassword.json +15 -0
  396. package/i18n/en-GB/checkout.json +68 -0
  397. package/i18n/en-GB/en-GB.ts +27 -0
  398. package/i18n/en-GB/errors.json +47 -0
  399. package/i18n/en-GB/form.json +42 -0
  400. package/i18n/en-GB/general.json +64 -0
  401. package/i18n/en-GB/listing.json +15 -0
  402. package/i18n/en-GB/newsletter.json +11 -0
  403. package/i18n/en-GB/product.json +48 -0
  404. package/i18n/en-GB/recoveryPassword.json +21 -0
  405. package/i18n/en-GB/validations.json +24 -0
  406. package/i18n/en_US.json +264 -0
  407. package/i18n/es_ES.json +613 -0
  408. package/i18n/fa_IR.json +613 -0
  409. package/i18n/fi_FI.json +613 -0
  410. package/i18n/fr_FR.json +613 -0
  411. package/i18n/it_IT.json +613 -0
  412. package/i18n/lv_LV.json +613 -0
  413. package/i18n/nb_NO.json +613 -0
  414. package/i18n/nl_NL.json +613 -0
  415. package/i18n/pl-PL/account.json +100 -0
  416. package/i18n/pl-PL/cart.json +19 -0
  417. package/i18n/pl-PL/changePassword.json +15 -0
  418. package/i18n/pl-PL/checkout.json +69 -0
  419. package/i18n/pl-PL/errors.json +46 -0
  420. package/i18n/pl-PL/form.json +42 -0
  421. package/i18n/pl-PL/general.json +64 -0
  422. package/i18n/pl-PL/listing.json +15 -0
  423. package/i18n/pl-PL/newsletter.json +11 -0
  424. package/i18n/pl-PL/pl-PL.ts +25 -0
  425. package/i18n/pl-PL/product.json +48 -0
  426. package/i18n/pl-PL/recoveryPassword.json +21 -0
  427. package/i18n/pl-PL/validations.json +24 -0
  428. package/i18n/pl_PL.json +613 -0
  429. package/i18n/pt_BR.json +613 -0
  430. package/i18n/ru_RU.json +613 -0
  431. package/i18n/sl_SI.json +613 -0
  432. package/i18n/src/helpers/prefix.ts +17 -0
  433. package/i18n/src/langs/de-DE.ts +2 -0
  434. package/i18n/src/langs/en-GB.ts +2 -0
  435. package/i18n/src/langs/pl-PL.ts +2 -0
  436. package/i18n/sv_SE.json +613 -0
  437. package/i18n/tr_TR.json +613 -0
  438. package/i18n/utils/i18n-validators.ts +31 -0
  439. package/i18n/zh_TW.json +613 -0
  440. package/nuxt.config.ts +91 -0
  441. package/package.json +72 -0
  442. package/prisma/generated/browser.ts +44 -0
  443. package/prisma/generated/client.ts +66 -0
  444. package/prisma/generated/commonInputTypes.ts +432 -0
  445. package/prisma/generated/enums.ts +15 -0
  446. package/prisma/generated/internal/class.ts +232 -0
  447. package/prisma/generated/internal/prismaNamespace.ts +1154 -0
  448. package/prisma/generated/internal/prismaNamespaceBrowser.ts +179 -0
  449. package/prisma/generated/models/Account.ts +1620 -0
  450. package/prisma/generated/models/Session.ts +1484 -0
  451. package/prisma/generated/models/Upload.ts +1291 -0
  452. package/prisma/generated/models/User.ts +1780 -0
  453. package/prisma/generated/models/Verification.ts +1172 -0
  454. package/prisma/generated/models.ts +16 -0
  455. package/prisma/schema.prisma +102 -0
  456. package/runtime/plugins/vuetify.ts +12 -0
@@ -0,0 +1,18 @@
1
+ import { MapperNotFoundError } from './errors';
2
+ const registry = new Map();
3
+ export function registerMapper(mapper) {
4
+ registry.set(mapper.name, mapper);
5
+ }
6
+ export function getMapper(name) {
7
+ const mapper = registry.get(name);
8
+ if (!mapper) {
9
+ throw new MapperNotFoundError(name);
10
+ }
11
+ return mapper;
12
+ }
13
+ export function hasMapper(name) {
14
+ return registry.has(name);
15
+ }
16
+ export function listMappers() {
17
+ return Array.from(registry.keys());
18
+ }
@@ -0,0 +1,13 @@
1
+ import { MapperDefinition } from './types';
2
+ export interface MapperTestCase<TInput, TOutput> {
3
+ name: string;
4
+ input: TInput;
5
+ expected: TOutput | ((output: TOutput) => void | Promise<void>);
6
+ snapshot?: boolean;
7
+ }
8
+ export interface MapperTestOptions<TInput, TOutput> {
9
+ mapper: MapperDefinition<TInput, TOutput>;
10
+ cases: MapperTestCase<TInput, TOutput>[];
11
+ async?: boolean;
12
+ }
13
+ export declare function runMapperTests<TInput, TOutput>(options: MapperTestOptions<TInput, TOutput>): Promise<void>;
@@ -0,0 +1,98 @@
1
+ import { MapperError } from './errors';
2
+ export async function runMapperTests(options) {
3
+ const { mapper, cases } = options;
4
+ for (const testCase of cases) {
5
+ const { name, input, expected, snapshot } = testCase;
6
+ try {
7
+ const result = await maybeAsync(mapper.map, input);
8
+ // Snapshot mode (stringified)
9
+ if (snapshot) {
10
+ const snap = JSON.stringify(result, null, 2);
11
+ console.log(`\n📸 Snapshot for "${mapper.name}" → "${name}":\n${snap}\n`);
12
+ }
13
+ // Function-based expectation
14
+ if (isExpectedFunction(expected)) {
15
+ await expected(result);
16
+ continue;
17
+ }
18
+ // Deep equality check
19
+ const pass = deepEqual(result, expected);
20
+ if (!pass) {
21
+ throw new MapperError(`Mapper "${mapper.name}" test "${name}" failed.\n` +
22
+ diffString(expected, result));
23
+ }
24
+ }
25
+ catch (error) {
26
+ if (error instanceof Error) {
27
+ throw new MapperError(`Mapper "${mapper.name}" test "${name}" threw an error:\n${error.message}`);
28
+ }
29
+ throw error;
30
+ }
31
+ }
32
+ }
33
+ /* -------------------------------------------------------
34
+ Helpers
35
+ ------------------------------------------------------- */
36
+ async function maybeAsync(fn, input) {
37
+ return await fn(input);
38
+ }
39
+ function isExpectedFunction(value) {
40
+ return typeof value === 'function';
41
+ }
42
+ function deepEqual(a, b) {
43
+ if (Object.is(a, b))
44
+ return true;
45
+ if (typeof a !== 'object' ||
46
+ typeof b !== 'object' ||
47
+ a === null ||
48
+ b === null) {
49
+ return false;
50
+ }
51
+ const aKeys = Object.keys(a);
52
+ const bKeys = Object.keys(b);
53
+ if (aKeys.length !== bKeys.length)
54
+ return false;
55
+ for (const key of aKeys) {
56
+ if (!deepEqual(a[key], b[key]))
57
+ return false;
58
+ }
59
+ return true;
60
+ }
61
+ /**
62
+ * Pretty diff output (no deps)
63
+ */
64
+ function diffString(expected, received) {
65
+ const exp = JSON.stringify(expected, null, 2);
66
+ const rec = JSON.stringify(received, null, 2);
67
+ return (`\nExpected:\n${indent(exp)}\n\nReceived:\n${indent(rec)}\n` +
68
+ `\nDiff:\n${indent(generateDiff(exp, rec))}`);
69
+ }
70
+ function indent(str) {
71
+ return str
72
+ .split('\n')
73
+ .map((line) => ` ${line}`)
74
+ .join('\n');
75
+ }
76
+ /**
77
+ * Minimal diff generator (line-by-line)
78
+ */
79
+ function generateDiff(a, b) {
80
+ const aLines = a.split('\n');
81
+ const bLines = b.split('\n');
82
+ const max = Math.max(aLines.length, bLines.length);
83
+ const diff = [];
84
+ for (let i = 0; i < max; i++) {
85
+ const left = aLines[i];
86
+ const right = bLines[i];
87
+ if (left === right) {
88
+ diff.push(` ${left ?? ''}`);
89
+ }
90
+ else {
91
+ if (left !== undefined)
92
+ diff.push(`- ${left}`);
93
+ if (right !== undefined)
94
+ diff.push(`+ ${right}`);
95
+ }
96
+ }
97
+ return diff.join('\n');
98
+ }
@@ -0,0 +1,5 @@
1
+ export type MapperFn<TInput, TOutput> = (input: TInput) => TOutput;
2
+ export interface MapperDefinition<TInput, TOutput> {
3
+ name: string;
4
+ map: MapperFn<TInput, TOutput>;
5
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,9 @@
1
+ import type { ZodSchema } from 'zod';
2
+ import type { MapperDefinition, MapperFn } from './types';
3
+ export interface ZodMapperOptions<TInput, TOutput> {
4
+ name: string;
5
+ inputSchema: ZodSchema<TInput>;
6
+ outputSchema: ZodSchema<TOutput>;
7
+ map: MapperFn<TInput, TOutput>;
8
+ }
9
+ export declare function createZodMapper<TInput, TOutput>(options: ZodMapperOptions<TInput, TOutput>): MapperDefinition<TInput, TOutput>;
@@ -0,0 +1,17 @@
1
+ import { createMapper } from './createMapper';
2
+ import { MapperError } from './errors';
3
+ export function createZodMapper(options) {
4
+ const { name, inputSchema, outputSchema, map } = options;
5
+ return createMapper(name, (rawInput) => {
6
+ const parsedInput = inputSchema.safeParse(rawInput);
7
+ if (!parsedInput.success) {
8
+ throw new MapperError(`Mapper "${name}" input validation failed: ${parsedInput.error.message}`);
9
+ }
10
+ const output = map(parsedInput.data);
11
+ const parsedOutput = outputSchema.safeParse(output);
12
+ if (!parsedOutput.success) {
13
+ throw new MapperError(`Mapper "${name}" output validation failed: ${parsedOutput.error.message}`);
14
+ }
15
+ return parsedOutput.data;
16
+ });
17
+ }
@@ -0,0 +1,2 @@
1
+ import type { FilePlugin } from '../../types/index.d';
2
+ export declare function useFile(): FilePlugin;
@@ -0,0 +1,4 @@
1
+ export function useFile() {
2
+ const { $file } = useNuxtApp();
3
+ return $file;
4
+ }
@@ -0,0 +1,29 @@
1
+ export declare function useMediaCenter(): {
2
+ allMedia: import("vue").Ref<any[], any[]>;
3
+ audioMedia: import("vue").ComputedRef<any[]>;
4
+ videoMedia: import("vue").ComputedRef<any[]>;
5
+ imageMedia: import("vue").ComputedRef<any[]>;
6
+ textMedia: import("vue").ComputedRef<any[]>;
7
+ documentMedia: import("vue").ComputedRef<any[]>;
8
+ folders: import("vue").Ref<any[], any[]>;
9
+ currentFolder: import("vue").Ref<string | null, string | null>;
10
+ sharedWithMe: import("vue").Ref<any[], any[]>;
11
+ searchResults: import("vue").Ref<any[], any[]>;
12
+ smartAlbums: import("vue").Ref<any[], any[]>;
13
+ isInitialLoading: import("vue").Ref<boolean, boolean>;
14
+ isLoadingMore: import("vue").Ref<boolean, boolean>;
15
+ hasMore: import("vue").Ref<boolean, boolean>;
16
+ fetchNextPage: () => Promise<void>;
17
+ uploadFiles: (files: File[], onProgress?: (info: {
18
+ index: number;
19
+ total: number;
20
+ status: "starting" | "done" | "error";
21
+ name?: string;
22
+ }) => void) => Promise<any[]>;
23
+ fetchFolders: () => Promise<void>;
24
+ createFolder: (name: string, parent?: string | null) => Promise<void>;
25
+ filterByFolder: (folderId: string | null) => void;
26
+ reorderFolders: (updated: any[]) => Promise<void>;
27
+ fetchSharedWithMe: () => Promise<void>;
28
+ searchMedia: (query: string) => Promise<void>;
29
+ };
@@ -0,0 +1,321 @@
1
+ import { ref, computed, unref } from 'vue';
2
+ import { useNuxtApp } from '#imports';
3
+ import useDirectusRequest from '../useDirectusRequest';
4
+ import { useAuth } from '~/composables/globals/useAuth';
5
+ export function useMediaCenter() {
6
+ // Prefer a BetterAuth `useAuth()` composable when available (provided by the auth layer).
7
+ // Fallback to null if not present so the rest of the composable degrades gracefully.
8
+ // `useAuth()` typically exposes `user` and `session` refs and a `fetchSession()` method.
9
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
10
+ const auth = globalThis.$useAuth ?? (typeof useAuth !== 'undefined' ? useAuth() : null);
11
+ const user = computed(() => {
12
+ if (!auth)
13
+ return null;
14
+ // If auth exposes `user` ref directly
15
+ if (typeof auth.user !== 'undefined')
16
+ return unref(auth.user) || null;
17
+ // If auth exposes `session` ref containing `{ user }`
18
+ if (typeof auth.session !== 'undefined')
19
+ return unref(auth.session)?.user || null;
20
+ return null;
21
+ });
22
+ const userId = computed(() => user.value?.id || null);
23
+ const { $directus, $readItems, $createItem, $uploadFiles, } = useNuxtApp();
24
+ // CORE MEDIA STATE
25
+ const allMedia = ref([]);
26
+ const isInitialLoading = ref(true);
27
+ const isLoadingMore = ref(false);
28
+ const hasMore = ref(true);
29
+ const limit = 24;
30
+ const offset = ref(0);
31
+ // FOLDERS
32
+ const folders = ref([]);
33
+ const currentFolder = ref(null);
34
+ // SHARED & SEARCH
35
+ const sharedWithMe = ref([]);
36
+ const searchResults = ref([]);
37
+ // SMART ALBUMS
38
+ const smartAlbums = ref([]);
39
+ /* ---------- MIME HELPERS ---------- */
40
+ const mime = (i) => i?.directus_files_id?.type || '';
41
+ const isAudio = (i) => mime(i).startsWith('audio');
42
+ const isVideo = (i) => mime(i).startsWith('video');
43
+ const isImage = (i) => mime(i).startsWith('image');
44
+ const isText = (i) => mime(i).startsWith('text');
45
+ const isDoc = (i) => [
46
+ 'application/pdf',
47
+ 'application/msword',
48
+ 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
49
+ 'application/vnd.ms-excel',
50
+ 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
51
+ ].includes(mime(i));
52
+ /* ---------- FILTERED LISTS ---------- */
53
+ const filteredMedia = computed(() => {
54
+ if (!currentFolder.value)
55
+ return allMedia.value;
56
+ return allMedia.value.filter(m => m.folder === currentFolder.value);
57
+ });
58
+ const audioMedia = computed(() => filteredMedia.value.filter(isAudio));
59
+ const videoMedia = computed(() => filteredMedia.value.filter(isVideo));
60
+ const imageMedia = computed(() => filteredMedia.value.filter(isImage));
61
+ const textMedia = computed(() => filteredMedia.value.filter(isText));
62
+ const documentMedia = computed(() => filteredMedia.value.filter(isDoc));
63
+ /* ---------- RESET PAGINATION ---------- */
64
+ function resetPagination() {
65
+ allMedia.value = [];
66
+ offset.value = 0;
67
+ hasMore.value = true;
68
+ }
69
+ /* ---------- FETCH USER MEDIA (PAGINATED) ---------- */
70
+ async function fetchNextPage() {
71
+ if (!userId.value) {
72
+ isInitialLoading.value = false;
73
+ return;
74
+ }
75
+ if (!hasMore.value)
76
+ return;
77
+ isLoadingMore.value = true;
78
+ const filter = { user: { _eq: userId.value } };
79
+ if (currentFolder.value) {
80
+ filter.folder = { _eq: currentFolder.value };
81
+ }
82
+ try {
83
+ const items = await $readItems('media', {
84
+ fields: [
85
+ '*',
86
+ { directus_files_id: ['id', 'type', 'filename_download', 'title'] },
87
+ ],
88
+ filter,
89
+ sort: ['-date_created'],
90
+ limit,
91
+ offset: offset.value,
92
+ });
93
+ if (!items.length) {
94
+ hasMore.value = false;
95
+ }
96
+ else {
97
+ allMedia.value.push(...items);
98
+ offset.value += items.length;
99
+ if (items.length < limit)
100
+ hasMore.value = false;
101
+ }
102
+ }
103
+ finally {
104
+ isLoadingMore.value = false;
105
+ isInitialLoading.value = false;
106
+ }
107
+ }
108
+ /* ---------- UPLOAD FILES ---------- */
109
+ /**
110
+ * Upload files to Directus and create `media` entries.
111
+ * Uploads are performed one-by-one so callers can track progress.
112
+ *
113
+ * @param files - array of File objects
114
+ * @param onProgress - optional callback called with { index, total, status, name }
115
+ */
116
+ async function uploadFiles(files, onProgress) {
117
+ if (!userId.value) {
118
+ // Try to fetch session once in case the auth state wasn't loaded yet
119
+ try {
120
+ if (auth && typeof auth.fetchSession === 'function')
121
+ await auth.fetchSession();
122
+ else if (auth && typeof auth.fetch === 'function')
123
+ await auth.fetch();
124
+ }
125
+ catch (_) { }
126
+ if (!userId.value) {
127
+ try {
128
+ const nuxt = useNuxtApp();
129
+ const toast = nuxt?.$toast;
130
+ if (toast && typeof toast.error === 'function')
131
+ toast.error('You must be signed in to upload files');
132
+ }
133
+ catch (_) { }
134
+ throw new Error('User not authenticated');
135
+ }
136
+ }
137
+ const { request } = useDirectusRequest();
138
+ const newItems = [];
139
+ for (let i = 0; i < files.length; i++) {
140
+ const file = files[i];
141
+ if (!file) {
142
+ onProgress && onProgress({ index: i, total: files.length, status: 'error' });
143
+ continue;
144
+ }
145
+ try {
146
+ onProgress && onProgress({ index: i, total: files.length, status: 'starting', name: file.name });
147
+ const formData = new FormData();
148
+ formData.append('file', file);
149
+ const resp = await request($uploadFiles(formData));
150
+ const uploaded = Array.isArray(resp) ? resp : (resp ? [resp] : []);
151
+ for (const up of uploaded) {
152
+ const mediaItem = await $createItem('media', {
153
+ user: userId.value,
154
+ directus_files_id: up.id,
155
+ title: up.filename_download || up.title || up.id,
156
+ folder: currentFolder.value || null,
157
+ });
158
+ newItems.push({ ...mediaItem, directus_files_id: up });
159
+ }
160
+ onProgress && onProgress({ index: i, total: files.length, status: 'done', name: file.name });
161
+ }
162
+ catch (e) {
163
+ onProgress && onProgress({ index: i, total: files.length, status: 'error', name: file.name });
164
+ try {
165
+ const nuxt = useNuxtApp();
166
+ const toast = nuxt?.$toast;
167
+ if (toast && typeof toast.error === 'function')
168
+ toast.error(`Upload failed: ${file.name}`);
169
+ }
170
+ catch (_) { }
171
+ console.error('uploadFiles failed for file', file.name, e);
172
+ }
173
+ }
174
+ if (newItems.length) {
175
+ // add newly created items to the beginning of allMedia
176
+ allMedia.value.unshift(...newItems);
177
+ try {
178
+ const nuxt = useNuxtApp();
179
+ const toast = nuxt?.$toast;
180
+ if (toast && typeof toast.success === 'function')
181
+ toast.success(`Uploaded ${newItems.length} file${newItems.length === 1 ? '' : 's'}`);
182
+ }
183
+ catch (_) { }
184
+ }
185
+ return newItems;
186
+ }
187
+ /* ---------- FOLDERS ---------- */
188
+ async function fetchFolders() {
189
+ if (!userId.value)
190
+ return;
191
+ folders.value = await $readItems('folders', {
192
+ filter: { user: { _eq: userId.value } },
193
+ sort: ['sort', 'name'],
194
+ });
195
+ }
196
+ async function createFolder(name, parent = null) {
197
+ await $createItem('folders', {
198
+ name,
199
+ user: userId.value,
200
+ parent_folder: parent,
201
+ });
202
+ await fetchFolders();
203
+ }
204
+ function filterByFolder(folderId) {
205
+ currentFolder.value = folderId;
206
+ resetPagination();
207
+ fetchNextPage();
208
+ }
209
+ async function reorderFolders(updated) {
210
+ // You can persist a "sort" field here if you add it to folders.
211
+ // Example (pseudo-batched):
212
+ //
213
+ // for (let index = 0; index < updated.length; index++) {
214
+ // const folder = updated[index]
215
+ // await $directus.request(
216
+ // $updateItem('folders', folder.id, { sort: index })
217
+ // )
218
+ // }
219
+ //
220
+ // For now, we just update local state:
221
+ folders.value = [...updated];
222
+ }
223
+ /* ---------- SHARED WITH ME ---------- */
224
+ async function fetchSharedWithMe() {
225
+ if (!userId.value)
226
+ return;
227
+ sharedWithMe.value = await $readItems('media', {
228
+ fields: [
229
+ '*',
230
+ { directus_files_id: ['id', 'type', 'filename_download', 'title'] },
231
+ ],
232
+ filter: { shared_with: { _contains: userId.value } },
233
+ sort: ['-date_created'],
234
+ });
235
+ }
236
+ /* ---------- SEARCH ---------- */
237
+ async function searchMedia(query) {
238
+ if (!query) {
239
+ searchResults.value = [];
240
+ return;
241
+ }
242
+ searchResults.value = await $readItems('media', {
243
+ fields: [
244
+ '*',
245
+ { directus_files_id: ['id', 'type', 'filename_download', 'title'] },
246
+ ],
247
+ filter: {
248
+ _or: [
249
+ { title: { _icontains: query } },
250
+ { tags: { _icontains: query } },
251
+ {
252
+ directus_files_id: {
253
+ title: { _icontains: query },
254
+ },
255
+ },
256
+ ],
257
+ },
258
+ sort: ['-date_created'],
259
+ });
260
+ }
261
+ /* ---------- SMART ALBUMS ---------- */
262
+ const smartAlbumsComputed = computed(() => {
263
+ const albums = [];
264
+ const now = new Date();
265
+ const todayKey = now.toISOString().slice(0, 10);
266
+ const buckets = {};
267
+ for (const item of allMedia.value) {
268
+ const dateKey = (item.date_created || '').slice(0, 10) || 'unknown';
269
+ const typeBucket = isImage(item)
270
+ ? 'Images'
271
+ : isVideo(item)
272
+ ? 'Videos'
273
+ : isAudio(item)
274
+ ? 'Audio'
275
+ : 'Other';
276
+ const key = dateKey === todayKey
277
+ ? `Today / ${typeBucket}`
278
+ : `${dateKey} / ${typeBucket}`;
279
+ if (!buckets[key])
280
+ buckets[key] = [];
281
+ buckets[key].push(item);
282
+ }
283
+ for (const key of Object.keys(buckets)) {
284
+ albums.push({
285
+ id: key,
286
+ label: key,
287
+ items: buckets[key],
288
+ });
289
+ }
290
+ return albums;
291
+ });
292
+ smartAlbums.value = smartAlbumsComputed.value;
293
+ /* ---------- RETURN API ---------- */
294
+ return {
295
+ // state
296
+ allMedia,
297
+ audioMedia,
298
+ videoMedia,
299
+ imageMedia,
300
+ textMedia,
301
+ documentMedia,
302
+ folders,
303
+ currentFolder,
304
+ sharedWithMe,
305
+ searchResults,
306
+ smartAlbums,
307
+ // flags
308
+ isInitialLoading,
309
+ isLoadingMore,
310
+ hasMore,
311
+ // actions
312
+ fetchNextPage,
313
+ uploadFiles,
314
+ fetchFolders,
315
+ createFolder,
316
+ filterByFolder,
317
+ reorderFolders,
318
+ fetchSharedWithMe,
319
+ searchMedia,
320
+ };
321
+ }
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Composable wrapper for the shared `videojs` Nuxt plugin.
3
+ * Provides access to the provided `videojs` instance and registration helpers.
4
+ */
5
+ export default function useVideojs(): {
6
+ videojs: any;
7
+ registerVideojsPlugin: any;
8
+ registerVideojsPlugins: any;
9
+ createPlayer: (el: Element | string | null, options?: any, ready?: (this: any) => void) => any;
10
+ disposePlayer: (player: any) => void;
11
+ };
@@ -0,0 +1,42 @@
1
+ import { useNuxtApp } from '#imports';
2
+ /**
3
+ * Composable wrapper for the shared `videojs` Nuxt plugin.
4
+ * Provides access to the provided `videojs` instance and registration helpers.
5
+ */
6
+ export default function useVideojs() {
7
+ const nuxtApp = useNuxtApp();
8
+ // Provided by layers/shared-app/app/plugins/videojs.client.js
9
+ const videojs = nuxtApp.$videojs || null;
10
+ const registerVideojsPlugin = nuxtApp.$registerVideojsPlugin || ((name, plugin) => { });
11
+ const registerVideojsPlugins = nuxtApp.$registerVideojsPlugins || ((defs) => { });
12
+ function createPlayer(el, options, ready) {
13
+ if (!videojs) {
14
+ // fallback: try to import dynamically (client-side only)
15
+ // but avoid bundling here; return null instead
16
+ return null;
17
+ }
18
+ try {
19
+ return videojs(el, options, ready);
20
+ }
21
+ catch (e) {
22
+ // eslint-disable-next-line no-console
23
+ console.warn('[useVideojs] createPlayer failed', e);
24
+ return null;
25
+ }
26
+ }
27
+ function disposePlayer(player) {
28
+ try {
29
+ player && typeof player.dispose === 'function' && player.dispose();
30
+ }
31
+ catch (e) {
32
+ // ignore
33
+ }
34
+ }
35
+ return {
36
+ videojs,
37
+ registerVideojsPlugin,
38
+ registerVideojsPlugins,
39
+ createPlayer,
40
+ disposePlayer,
41
+ };
42
+ }
@@ -0,0 +1,3 @@
1
+ import { ContentProvider } from "./types";
2
+ export declare function registerContentProvider(name: string, provider: ContentProvider): void;
3
+ export declare function getContentProvider(name: string): ContentProvider;
@@ -0,0 +1,10 @@
1
+ const providers = {};
2
+ export function registerContentProvider(name, provider) {
3
+ providers[name] = provider;
4
+ }
5
+ export function getContentProvider(name) {
6
+ const provider = providers[name];
7
+ if (!provider)
8
+ throw new Error(`Content provider "${name}" not found`);
9
+ return provider;
10
+ }
@@ -0,0 +1,7 @@
1
+ export interface MeeoviAttribute {
2
+ id: number;
3
+ default_label?: string | null;
4
+ isPublic?: boolean | null;
5
+ options?: Record<string, unknown> | null;
6
+ attribute_code?: string | null;
7
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,6 @@
1
+ export interface MeeoviBlock {
2
+ id: string;
3
+ type: string;
4
+ content: string | null;
5
+ metadata?: Record<string, unknown>;
6
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,10 @@
1
+ import { MeeoviProduct } from './product';
2
+ export interface MeeoviBundleProduct {
3
+ id: string;
4
+ title: string;
5
+ items: MeeoviProduct[];
6
+ price: number;
7
+ currency: string;
8
+ stock: number | null;
9
+ metadata?: Record<string, unknown>;
10
+ }
@@ -0,0 +1,29 @@
1
+ export interface MeeoviCartItem {
2
+ id: number;
3
+ quantity?: number | null;
4
+ metadata?: Record<string, unknown> | null;
5
+ products?: string | null;
6
+ cart?: number | null;
7
+ product_id?: string | null;
8
+ price?: number | null;
9
+ total?: number | null;
10
+ variant_id?: string | null;
11
+ variant?: string | null;
12
+ }
13
+ export interface MeeoviCart {
14
+ id: number;
15
+ date_created?: string | null;
16
+ user_updated?: string | null;
17
+ date_updated?: string | null;
18
+ session_id?: string | null;
19
+ total_price?: number | null;
20
+ user?: string | null;
21
+ status?: string | null;
22
+ subtotal?: number | null;
23
+ tax_amount?: number | null;
24
+ shipping_amount?: number | null;
25
+ discount_amount?: number | null;
26
+ total?: number | null;
27
+ currency?: string | null;
28
+ coupon_code?: string | null;
29
+ }
@@ -0,0 +1 @@
1
+ export {};