@fluid-app/portal-sdk 0.1.62 → 0.1.63

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 (119) hide show
  1. package/dist/{AppDownloadScreen-CLWxnFsd.mjs → AppDownloadScreen-DUGGDlr4.mjs} +9 -9
  2. package/dist/{AppDownloadScreen-CH96k5cA.cjs → AppDownloadScreen-DW3cBnbI.cjs} +9 -9
  3. package/dist/{AppDownloadScreen-BH7GQ-qi.cjs → AppDownloadScreen-oMzxBETr.cjs} +2 -2
  4. package/dist/{AppDownloadScreen-BH7GQ-qi.cjs.map → AppDownloadScreen-oMzxBETr.cjs.map} +1 -1
  5. package/dist/{AppDownloadScreen-DcVl4492.mjs → AppDownloadScreen-pm8fLxZX.mjs} +2 -2
  6. package/dist/{AppDownloadScreen-DcVl4492.mjs.map → AppDownloadScreen-pm8fLxZX.mjs.map} +1 -1
  7. package/dist/{CarouselWidget-lx6QKa-q.mjs → CarouselWidget-BGdjG-xz.mjs} +2 -2
  8. package/dist/{CarouselWidget-lx6QKa-q.mjs.map → CarouselWidget-BGdjG-xz.mjs.map} +1 -1
  9. package/dist/{CarouselWidget-B74eKTnT.cjs → CarouselWidget-CC6ZQZ8e.cjs} +2 -2
  10. package/dist/{CarouselWidget-C_Bpw7nB.cjs → CarouselWidget-DgskhtDP.cjs} +2 -2
  11. package/dist/{CarouselWidget-C_Bpw7nB.cjs.map → CarouselWidget-DgskhtDP.cjs.map} +1 -1
  12. package/dist/{ContactsScreen-IAGjo08W.cjs → ContactsScreen-B3k1fVQx.cjs} +2 -2
  13. package/dist/{ContactsScreen-IAGjo08W.cjs.map → ContactsScreen-B3k1fVQx.cjs.map} +1 -1
  14. package/dist/{ContactsScreen-Dk9bp3Jj.mjs → ContactsScreen-CH6u8cRi.mjs} +2 -2
  15. package/dist/{ContactsScreen-Dk9bp3Jj.mjs.map → ContactsScreen-CH6u8cRi.mjs.map} +1 -1
  16. package/dist/{ContactsScreen-B8iWQTbP.cjs → ContactsScreen-C_c2yy5J.cjs} +9 -9
  17. package/dist/{ContactsScreen-C8Bp62F4.mjs → ContactsScreen-ruymx9Pi.mjs} +9 -9
  18. package/dist/{FluidProvider-9JuTycML.cjs → FluidProvider-SnHdl4ww.cjs} +13 -13
  19. package/dist/{FluidProvider-9JuTycML.cjs.map → FluidProvider-SnHdl4ww.cjs.map} +1 -1
  20. package/dist/{FluidProvider-9ZC28GXK.mjs → FluidProvider-uuu90TSG.mjs} +13 -13
  21. package/dist/{FluidProvider-9ZC28GXK.mjs.map → FluidProvider-uuu90TSG.mjs.map} +1 -1
  22. package/dist/{ImageWidget-BLnPO0Ba.mjs → ImageWidget-BHwucvLx.mjs} +2 -2
  23. package/dist/{ImageWidget-BLnPO0Ba.mjs.map → ImageWidget-BHwucvLx.mjs.map} +1 -1
  24. package/dist/{ImageWidget-DbDhysGw.cjs → ImageWidget-BRfKvv08.cjs} +2 -2
  25. package/dist/{ImageWidget-DbDhysGw.cjs.map → ImageWidget-BRfKvv08.cjs.map} +1 -1
  26. package/dist/{ListWidget-D6XZ53U9.cjs → ListWidget-BwyavG5d.cjs} +2 -2
  27. package/dist/{ListWidget-CiV9j7vm.cjs → ListWidget-DAtEwFCR.cjs} +2 -2
  28. package/dist/{ListWidget-CiV9j7vm.cjs.map → ListWidget-DAtEwFCR.cjs.map} +1 -1
  29. package/dist/{ListWidget-DuPrSL9o.mjs → ListWidget-ZqCYH78q.mjs} +2 -2
  30. package/dist/{ListWidget-DuPrSL9o.mjs.map → ListWidget-ZqCYH78q.mjs.map} +1 -1
  31. package/dist/{MediaRenderer-CY2gR7hk.mjs → MediaRenderer-B3R-Q6Qt.mjs} +8 -5
  32. package/dist/MediaRenderer-B3R-Q6Qt.mjs.map +1 -0
  33. package/dist/{MediaRenderer-CkMwv5q1.cjs → MediaRenderer-CRKJcPD9.cjs} +8 -5
  34. package/dist/MediaRenderer-CRKJcPD9.cjs.map +1 -0
  35. package/dist/{MessagingScreen-DpVYlTyB.cjs → MessagingScreen-27HyrQ1V.cjs} +3 -3
  36. package/dist/{MessagingScreen-DpVYlTyB.cjs.map → MessagingScreen-27HyrQ1V.cjs.map} +1 -1
  37. package/dist/{MessagingScreen-BuZTTy-l.cjs → MessagingScreen-C7xDqpLm.cjs} +9 -9
  38. package/dist/{MessagingScreen-RhCqymLN.mjs → MessagingScreen-CGS474IP.mjs} +9 -9
  39. package/dist/{MessagingScreen-DdQPLrmd.mjs → MessagingScreen-tFbOXFq4.mjs} +3 -3
  40. package/dist/{MessagingScreen-DdQPLrmd.mjs.map → MessagingScreen-tFbOXFq4.mjs.map} +1 -1
  41. package/dist/{MySiteScreen-DadI19bJ.cjs → MySiteScreen-B_UnnWDX.cjs} +9 -9
  42. package/dist/{MySiteScreen-DNn3aWn0.cjs → MySiteScreen-C-cS0_qZ.cjs} +2 -2
  43. package/dist/{MySiteScreen-DNn3aWn0.cjs.map → MySiteScreen-C-cS0_qZ.cjs.map} +1 -1
  44. package/dist/{MySiteScreen-Ddxdk1Pe.mjs → MySiteScreen-DR_xY95c.mjs} +2 -2
  45. package/dist/{MySiteScreen-Ddxdk1Pe.mjs.map → MySiteScreen-DR_xY95c.mjs.map} +1 -1
  46. package/dist/{MySiteScreen-Dbvaw1nu.mjs → MySiteScreen-bUfo9RDR.mjs} +9 -9
  47. package/dist/{NestedWidget-7Fn8H4aI.cjs → NestedWidget-BzFrzPFd.cjs} +2 -2
  48. package/dist/{NestedWidget-DS8F_8SN.mjs → NestedWidget-JS_3-isb.mjs} +2 -2
  49. package/dist/{NestedWidget-DS8F_8SN.mjs.map → NestedWidget-JS_3-isb.mjs.map} +1 -1
  50. package/dist/{NestedWidget-C1neMqH7.cjs → NestedWidget-cl38JElu.cjs} +2 -2
  51. package/dist/{NestedWidget-C1neMqH7.cjs.map → NestedWidget-cl38JElu.cjs.map} +1 -1
  52. package/dist/{OrdersScreen-QFndb0Oi.mjs → OrdersScreen-CO9vm0Wj.mjs} +9 -9
  53. package/dist/{OrdersScreen-CwTIkQNI.mjs → OrdersScreen-CQzgIEa4.mjs} +3 -3
  54. package/dist/{OrdersScreen-CwTIkQNI.mjs.map → OrdersScreen-CQzgIEa4.mjs.map} +1 -1
  55. package/dist/{OrdersScreen-CZdh8mbE.cjs → OrdersScreen-JCVS__ag.cjs} +9 -9
  56. package/dist/{OrdersScreen-DpyL3mIg.cjs → OrdersScreen-OexJlI4Y.cjs} +3 -3
  57. package/dist/{OrdersScreen-DpyL3mIg.cjs.map → OrdersScreen-OexJlI4Y.cjs.map} +1 -1
  58. package/dist/{ProductsScreen-CmZw1rWf.mjs → ProductsScreen-B0BsPJth.mjs} +3 -3
  59. package/dist/{ProductsScreen-CmZw1rWf.mjs.map → ProductsScreen-B0BsPJth.mjs.map} +1 -1
  60. package/dist/{ProductsScreen-dN4s469R.cjs → ProductsScreen-BcM3LqsG.cjs} +9 -9
  61. package/dist/{ProductsScreen-CGjMUHds.cjs → ProductsScreen-BgVl8GAm.cjs} +3 -3
  62. package/dist/{ProductsScreen-CGjMUHds.cjs.map → ProductsScreen-BgVl8GAm.cjs.map} +1 -1
  63. package/dist/{ProductsScreen-HaYLhqt1.mjs → ProductsScreen-GOW8lxiN.mjs} +9 -9
  64. package/dist/{ProfileScreen-1hqd2fN7.cjs → ProfileScreen-DFM_r4T5.cjs} +3 -3
  65. package/dist/{ProfileScreen-1hqd2fN7.cjs.map → ProfileScreen-DFM_r4T5.cjs.map} +1 -1
  66. package/dist/{ProfileScreen-DSr0OwIA.mjs → ProfileScreen-Tcqc5WfU.mjs} +9 -9
  67. package/dist/{ProfileScreen-_4yPoIgh.cjs → ProfileScreen-e-uj2ulO.cjs} +9 -9
  68. package/dist/{ProfileScreen-pCW_VAPN.mjs → ProfileScreen-pvpnY0cG.mjs} +3 -3
  69. package/dist/{ProfileScreen-pCW_VAPN.mjs.map → ProfileScreen-pvpnY0cG.mjs.map} +1 -1
  70. package/dist/{ShareablesScreen-DNzrgsmZ.cjs → ShareablesScreen-8rSANBth.cjs} +9 -9
  71. package/dist/{ShareablesScreen-CdXtyZma.cjs → ShareablesScreen-C7M_kGX9.cjs} +3 -3
  72. package/dist/{ShareablesScreen-CdXtyZma.cjs.map → ShareablesScreen-C7M_kGX9.cjs.map} +1 -1
  73. package/dist/{ShareablesScreen-xqMDNJ6m.mjs → ShareablesScreen-KFwyduqD.mjs} +9 -9
  74. package/dist/{ShareablesScreen-Cm8zbATC.mjs → ShareablesScreen-SS9rcLym.mjs} +3 -3
  75. package/dist/{ShareablesScreen-Cm8zbATC.mjs.map → ShareablesScreen-SS9rcLym.mjs.map} +1 -1
  76. package/dist/{ShopScreen-D2cMeKSk.mjs → ShopScreen-Bg696rqv.mjs} +9 -9
  77. package/dist/{ShopScreen-BnVS75fU.cjs → ShopScreen-DCKr0cbB.cjs} +9 -9
  78. package/dist/{ShopScreen-Dc3lQLGI.mjs → ShopScreen-DFWQY8hT.mjs} +4 -4
  79. package/dist/{ShopScreen-Dc3lQLGI.mjs.map → ShopScreen-DFWQY8hT.mjs.map} +1 -1
  80. package/dist/{ShopScreen-qZa0cEwy.cjs → ShopScreen-qgOXPdUf.cjs} +4 -4
  81. package/dist/{ShopScreen-qZa0cEwy.cjs.map → ShopScreen-qgOXPdUf.cjs.map} +1 -1
  82. package/dist/{SubscriptionsScreen-749p5heX.mjs → SubscriptionsScreen-50w7SgWX.mjs} +3 -3
  83. package/dist/{SubscriptionsScreen-749p5heX.mjs.map → SubscriptionsScreen-50w7SgWX.mjs.map} +1 -1
  84. package/dist/{SubscriptionsScreen-DxVV0sZx.mjs → SubscriptionsScreen-BVLHc7-p.mjs} +9 -9
  85. package/dist/{SubscriptionsScreen-DRgSTuJv.cjs → SubscriptionsScreen-DKI17q_K.cjs} +9 -9
  86. package/dist/{SubscriptionsScreen-7VBEggJ_.cjs → SubscriptionsScreen-Vn6EN634.cjs} +3 -3
  87. package/dist/{SubscriptionsScreen-7VBEggJ_.cjs.map → SubscriptionsScreen-Vn6EN634.cjs.map} +1 -1
  88. package/dist/{TableWidget-BnhJPYUm.cjs → TableWidget-CcPSLT0B.cjs} +2 -2
  89. package/dist/{TableWidget-Vcxw-se8.cjs → TableWidget-Cri6r5Yr.cjs} +2 -2
  90. package/dist/{TableWidget-Vcxw-se8.cjs.map → TableWidget-Cri6r5Yr.cjs.map} +1 -1
  91. package/dist/{TableWidget-CK5jQxjz.mjs → TableWidget-DjYabx1e.mjs} +2 -2
  92. package/dist/{TableWidget-CK5jQxjz.mjs.map → TableWidget-DjYabx1e.mjs.map} +1 -1
  93. package/dist/{VideoWidget-ho9fGQ3V.mjs → VideoWidget-51MxnPRZ.mjs} +4 -4
  94. package/dist/VideoWidget-51MxnPRZ.mjs.map +1 -0
  95. package/dist/{VideoWidget-7Q2eqHFn.cjs → VideoWidget-DnnuIvW1.cjs} +4 -4
  96. package/dist/VideoWidget-DnnuIvW1.cjs.map +1 -0
  97. package/dist/index.cjs +41 -41
  98. package/dist/index.mjs +41 -41
  99. package/dist/{use-account-clients-cHyQEhPp.cjs → use-account-clients-Bem920_7.cjs} +2 -2
  100. package/dist/{use-account-clients-cHyQEhPp.cjs.map → use-account-clients-Bem920_7.cjs.map} +1 -1
  101. package/dist/{use-account-clients-CqC0etbc.mjs → use-account-clients-FUcF1B-z.mjs} +2 -2
  102. package/dist/{use-account-clients-CqC0etbc.mjs.map → use-account-clients-FUcF1B-z.mjs.map} +1 -1
  103. package/dist/{use-current-user-Ccn1lGeB.cjs → use-current-user-Bld9wMVT.cjs} +3 -3
  104. package/dist/{use-current-user-Ccn1lGeB.cjs.map → use-current-user-Bld9wMVT.cjs.map} +1 -1
  105. package/dist/{use-current-user-CyodELl8.mjs → use-current-user-DnBpWIw6.mjs} +3 -3
  106. package/dist/{use-current-user-CyodELl8.mjs.map → use-current-user-DnBpWIw6.mjs.map} +1 -1
  107. package/dist/{use-customer-account-DODRyBye.mjs → use-customer-account-Dix8Ja5O.mjs} +3 -3
  108. package/dist/{use-customer-account-DODRyBye.mjs.map → use-customer-account-Dix8Ja5O.mjs.map} +1 -1
  109. package/dist/{use-customer-account-DOmzp1sM.cjs → use-customer-account-Rm2QXJiZ.cjs} +3 -3
  110. package/dist/{use-customer-account-DOmzp1sM.cjs.map → use-customer-account-Rm2QXJiZ.cjs.map} +1 -1
  111. package/dist/{use-fluid-api-BvakcAkY.mjs → use-fluid-api-CedscoxF.mjs} +2 -2
  112. package/dist/{use-fluid-api-BvakcAkY.mjs.map → use-fluid-api-CedscoxF.mjs.map} +1 -1
  113. package/dist/{use-fluid-api-CBm9h3s3.cjs → use-fluid-api-DyI6LDsV.cjs} +2 -2
  114. package/dist/{use-fluid-api-CBm9h3s3.cjs.map → use-fluid-api-DyI6LDsV.cjs.map} +1 -1
  115. package/package.json +12 -12
  116. package/dist/MediaRenderer-CY2gR7hk.mjs.map +0 -1
  117. package/dist/MediaRenderer-CkMwv5q1.cjs.map +0 -1
  118. package/dist/VideoWidget-7Q2eqHFn.cjs.map +0 -1
  119. package/dist/VideoWidget-ho9fGQ3V.mjs.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fluid-app/portal-sdk",
3
- "version": "0.1.62",
3
+ "version": "0.1.63",
4
4
  "description": "SDK for building custom Fluid portals",
5
5
  "files": [
6
6
  "dist",
@@ -64,45 +64,45 @@
64
64
  "tsdown": "^0.21.0",
65
65
  "typescript": "^5",
66
66
  "zod": "4.3.5",
67
+ "@fluid-app/auth": "0.1.0",
67
68
  "@fluid-app/api-client-core": "0.1.0",
68
69
  "@fluid-app/company-switcher-ui": "0.1.0",
70
+ "@fluid-app/company-switcher-core": "0.1.0",
69
71
  "@fluid-app/contacts-ui": "0.1.0",
70
- "@fluid-app/auth": "0.1.0",
71
- "@fluid-app/file-picker-api-client": "0.1.0",
72
72
  "@fluid-app/fluid-pay-api-client": "0.1.0",
73
73
  "@fluid-app/fluidos-api-client": "0.1.0",
74
74
  "@fluid-app/messaging-api-client": "0.1.0",
75
75
  "@fluid-app/messaging-core": "0.1.0",
76
76
  "@fluid-app/messaging-ui": "0.1.0",
77
+ "@fluid-app/file-picker-api-client": "0.1.0",
77
78
  "@fluid-app/mysite-ui": "0.1.0",
78
- "@fluid-app/company-switcher-core": "0.1.0",
79
79
  "@fluid-app/orders-api-client": "0.1.0",
80
80
  "@fluid-app/orders-core": "0.1.0",
81
81
  "@fluid-app/orders-ui": "0.1.0",
82
82
  "@fluid-app/permissions": "0.1.0",
83
83
  "@fluid-app/portal-app-download-ui": "0.1.0",
84
- "@fluid-app/portal-core": "0.1.23",
85
84
  "@fluid-app/portal-preview": "0.1.0",
85
+ "@fluid-app/portal-core": "0.1.23",
86
86
  "@fluid-app/portal-pro-upgrade-ui": "0.1.0",
87
87
  "@fluid-app/portal-react": "0.1.0",
88
88
  "@fluid-app/portal-widgets": "0.1.22",
89
- "@fluid-app/products-core": "0.1.0",
90
89
  "@fluid-app/products-api-client": "0.1.0",
90
+ "@fluid-app/products-core": "0.1.0",
91
91
  "@fluid-app/profile-core": "0.1.0",
92
92
  "@fluid-app/profile-ui": "0.1.0",
93
93
  "@fluid-app/query-persister": "0.1.0",
94
94
  "@fluid-app/shareables-api-client": "0.1.0",
95
95
  "@fluid-app/shareables-core": "0.1.0",
96
- "@fluid-app/shareables-ui": "0.1.0",
97
96
  "@fluid-app/shop-ui": "0.1.0",
98
- "@fluid-app/subscriptions-core": "0.1.0",
99
- "@fluid-app/subscriptions-ui": "0.1.0",
97
+ "@fluid-app/shareables-ui": "0.1.0",
100
98
  "@fluid-app/subscriptions-api-client": "0.1.0",
101
- "@fluid-app/typescript-config": "0.0.0",
99
+ "@fluid-app/subscriptions-ui": "0.1.0",
102
100
  "@fluid-app/ui-primitives": "0.1.13",
103
- "@fluid-app/user-notes-api-client": "0.1.0",
101
+ "@fluid-app/subscriptions-core": "0.1.0",
102
+ "@fluid-app/typescript-config": "0.0.0",
104
103
  "@fluid-app/user-contacts-api-client": "0.1.0",
105
- "@fluid-app/user-tasks-api-client": "0.1.0"
104
+ "@fluid-app/user-tasks-api-client": "0.1.0",
105
+ "@fluid-app/user-notes-api-client": "0.1.0"
106
106
  },
107
107
  "peerDependencies": {
108
108
  "@hookform/resolvers": "^5.2.2",
@@ -1 +0,0 @@
1
- {"version":3,"file":"MediaRenderer-CY2gR7hk.mjs","names":[],"sources":["../../widgets/src/components/MediaRenderer.tsx"],"sourcesContent":["import type React from \"react\";\nimport { Image, Video } from \"lucide-react\";\nimport type { ShareableItem, WidgetSchema } from \"@fluid-app/portal-core/types\";\n\nexport type MediaRendererProps = {\n src?: string | undefined;\n alt?: string | undefined;\n objectFit?: \"contain\" | \"cover\" | \"fill\" | \"none\" | undefined;\n focusPoint?: string | undefined;\n mediaType?: \"image\" | \"video\" | undefined;\n poster?: string | undefined;\n autoplay?: boolean | undefined;\n loop?: boolean | undefined;\n muted?: boolean | undefined;\n controls?: boolean | undefined;\n};\n\nexport function MediaRenderer({\n src,\n alt = \"Media\",\n objectFit = \"cover\",\n focusPoint,\n mediaType = \"image\",\n poster,\n autoplay = false,\n loop = false,\n muted = false,\n controls = true,\n}: MediaRendererProps): React.JSX.Element {\n const hasValidSrc = src && src.trim() !== \"\";\n const objectPosition = focusPoint?.replace(\"-\", \" \");\n\n if (!hasValidSrc) {\n const Icon = mediaType === \"video\" ? Video : Image;\n const label =\n mediaType === \"video\" ? \"No video selected\" : \"No image selected\";\n return (\n <div className=\"bg-muted flex h-full min-h-[200px] w-full items-center justify-center\">\n <div className=\"text-muted-foreground flex flex-col items-center gap-2\">\n <Icon className=\"h-12 w-12\" />\n <p className=\"text-sm\">{label}</p>\n </div>\n </div>\n );\n }\n\n const isContainMode = objectFit === \"contain\";\n const blurSrc = isContainMode ? `${src}?tr=bl-50` : undefined;\n\n if (mediaType === \"video\") {\n const blurredBgSrc = isContainMode\n ? poster\n ? `${poster}?tr=bl-50`\n : blurSrc\n : undefined;\n\n if (isContainMode && blurredBgSrc) {\n return (\n <div className=\"relative h-full w-full overflow-hidden\">\n <img\n src={blurredBgSrc}\n alt=\"\"\n className=\"absolute inset-0 h-full w-full object-cover\"\n aria-hidden=\"true\"\n />\n <div className=\"absolute inset-0 bg-black/30\" aria-hidden=\"true\" />\n <video\n src={src}\n poster={poster}\n controls={controls}\n autoPlay={autoplay}\n loop={loop}\n muted={muted}\n className={`relative z-10 h-full w-full object-contain ${!controls ? \"pointer-events-none\" : \"\"}`}\n >\n Your browser does not support the video tag.\n </video>\n </div>\n );\n }\n\n return (\n <video\n src={src}\n poster={poster}\n controls={controls}\n autoPlay={autoplay}\n loop={loop}\n muted={muted}\n className={`h-full w-full object-${objectFit} ${!controls ? \"pointer-events-none\" : \"\"}`}\n style={objectPosition ? { objectPosition } : undefined}\n >\n Your browser does not support the video tag.\n </video>\n );\n }\n\n if (isContainMode) {\n return (\n <div className=\"relative h-full w-full overflow-hidden\">\n <img\n src={blurSrc}\n alt=\"\"\n className=\"absolute inset-0 h-full w-full object-cover\"\n aria-hidden=\"true\"\n />\n <div className=\"absolute inset-0 bg-black/30\" aria-hidden=\"true\" />\n <img\n src={src}\n alt={alt}\n className=\"relative z-10 h-full w-full object-contain\"\n />\n </div>\n );\n }\n\n return (\n <img\n src={src}\n alt={alt}\n className={`h-full w-full object-${objectFit}`}\n style={objectPosition ? { objectPosition } : undefined}\n />\n );\n}\n\n/**\n * Converts a ShareableItem to MediaRenderer props.\n * Replaces the createWidgetFromShareable → ScreenRenderer pattern.\n */\nexport function getMediaPropsFromShareable(\n item: ShareableItem,\n): MediaRendererProps {\n const isVideo = item.kind === \"video\" || !!item.videoUrl;\n\n if (isVideo && item.videoUrl) {\n const result: MediaRendererProps = {\n mediaType: \"video\",\n src: item.videoUrl,\n alt: item.title ?? \"Video\",\n };\n if (item.imageUrl != null) result.poster = item.imageUrl;\n return result;\n }\n\n const result: MediaRendererProps = {\n mediaType: \"image\",\n alt: item.title || \"Image\",\n objectFit: \"cover\",\n };\n if (item.imageUrl != null) result.src = item.imageUrl;\n return result;\n}\n\n/**\n * Extracts media props from an ImageWidget/VideoWidget schema.\n * Used by CarouselWidget for slide.content rendering.\n */\nexport function getMediaPropsFromWidgetSchema(\n schema: WidgetSchema,\n): MediaRendererProps {\n const props = schema.props;\n\n const resource = props.resource as ShareableItem | undefined;\n const useCustomUrl = props.useCustomUrl as boolean | undefined;\n const focusPoint = props.focusPoint as string | undefined;\n const displayFit = props.displayFit as\n | MediaRendererProps[\"objectFit\"]\n | undefined;\n\n if (schema.type === \"VideoWidget\") {\n const result: MediaRendererProps = {\n mediaType: \"video\",\n autoplay: (props.autoplay as boolean | undefined) ?? false,\n loop: (props.loop as boolean | undefined) ?? false,\n muted: (props.muted as boolean | undefined) ?? false,\n controls: (props.controls as boolean | undefined) ?? true,\n objectFit: displayFit ?? \"cover\",\n focusPoint,\n };\n if (useCustomUrl) {\n if (typeof props.src === \"string\") result.src = props.src;\n if (typeof props.poster === \"string\") result.poster = props.poster;\n } else if (resource) {\n if (resource.videoUrl) result.src = resource.videoUrl;\n else if (typeof props.src === \"string\") result.src = props.src;\n if (resource.imageUrl) result.poster = resource.imageUrl;\n else if (typeof props.poster === \"string\") result.poster = props.poster;\n } else {\n if (typeof props.src === \"string\") result.src = props.src;\n if (typeof props.poster === \"string\") result.poster = props.poster;\n }\n return result;\n }\n\n const result: MediaRendererProps = {\n mediaType: \"image\",\n alt: (props.alt as string | undefined) ?? \"Image\",\n objectFit: displayFit ?? \"cover\",\n focusPoint,\n };\n if (useCustomUrl) {\n if (typeof props.src === \"string\") result.src = props.src;\n } else if (resource) {\n if (resource.imageUrl) result.src = resource.imageUrl;\n else if (typeof props.src === \"string\") result.src = props.src;\n if (resource.title) result.alt = resource.title;\n } else {\n if (typeof props.src === \"string\") result.src = props.src;\n }\n return result;\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"MediaRenderer-CkMwv5q1.cjs","names":["Video","Image"],"sources":["../../widgets/src/components/MediaRenderer.tsx"],"sourcesContent":["import type React from \"react\";\nimport { Image, Video } from \"lucide-react\";\nimport type { ShareableItem, WidgetSchema } from \"@fluid-app/portal-core/types\";\n\nexport type MediaRendererProps = {\n src?: string | undefined;\n alt?: string | undefined;\n objectFit?: \"contain\" | \"cover\" | \"fill\" | \"none\" | undefined;\n focusPoint?: string | undefined;\n mediaType?: \"image\" | \"video\" | undefined;\n poster?: string | undefined;\n autoplay?: boolean | undefined;\n loop?: boolean | undefined;\n muted?: boolean | undefined;\n controls?: boolean | undefined;\n};\n\nexport function MediaRenderer({\n src,\n alt = \"Media\",\n objectFit = \"cover\",\n focusPoint,\n mediaType = \"image\",\n poster,\n autoplay = false,\n loop = false,\n muted = false,\n controls = true,\n}: MediaRendererProps): React.JSX.Element {\n const hasValidSrc = src && src.trim() !== \"\";\n const objectPosition = focusPoint?.replace(\"-\", \" \");\n\n if (!hasValidSrc) {\n const Icon = mediaType === \"video\" ? Video : Image;\n const label =\n mediaType === \"video\" ? \"No video selected\" : \"No image selected\";\n return (\n <div className=\"bg-muted flex h-full min-h-[200px] w-full items-center justify-center\">\n <div className=\"text-muted-foreground flex flex-col items-center gap-2\">\n <Icon className=\"h-12 w-12\" />\n <p className=\"text-sm\">{label}</p>\n </div>\n </div>\n );\n }\n\n const isContainMode = objectFit === \"contain\";\n const blurSrc = isContainMode ? `${src}?tr=bl-50` : undefined;\n\n if (mediaType === \"video\") {\n const blurredBgSrc = isContainMode\n ? poster\n ? `${poster}?tr=bl-50`\n : blurSrc\n : undefined;\n\n if (isContainMode && blurredBgSrc) {\n return (\n <div className=\"relative h-full w-full overflow-hidden\">\n <img\n src={blurredBgSrc}\n alt=\"\"\n className=\"absolute inset-0 h-full w-full object-cover\"\n aria-hidden=\"true\"\n />\n <div className=\"absolute inset-0 bg-black/30\" aria-hidden=\"true\" />\n <video\n src={src}\n poster={poster}\n controls={controls}\n autoPlay={autoplay}\n loop={loop}\n muted={muted}\n className={`relative z-10 h-full w-full object-contain ${!controls ? \"pointer-events-none\" : \"\"}`}\n >\n Your browser does not support the video tag.\n </video>\n </div>\n );\n }\n\n return (\n <video\n src={src}\n poster={poster}\n controls={controls}\n autoPlay={autoplay}\n loop={loop}\n muted={muted}\n className={`h-full w-full object-${objectFit} ${!controls ? \"pointer-events-none\" : \"\"}`}\n style={objectPosition ? { objectPosition } : undefined}\n >\n Your browser does not support the video tag.\n </video>\n );\n }\n\n if (isContainMode) {\n return (\n <div className=\"relative h-full w-full overflow-hidden\">\n <img\n src={blurSrc}\n alt=\"\"\n className=\"absolute inset-0 h-full w-full object-cover\"\n aria-hidden=\"true\"\n />\n <div className=\"absolute inset-0 bg-black/30\" aria-hidden=\"true\" />\n <img\n src={src}\n alt={alt}\n className=\"relative z-10 h-full w-full object-contain\"\n />\n </div>\n );\n }\n\n return (\n <img\n src={src}\n alt={alt}\n className={`h-full w-full object-${objectFit}`}\n style={objectPosition ? { objectPosition } : undefined}\n />\n );\n}\n\n/**\n * Converts a ShareableItem to MediaRenderer props.\n * Replaces the createWidgetFromShareable → ScreenRenderer pattern.\n */\nexport function getMediaPropsFromShareable(\n item: ShareableItem,\n): MediaRendererProps {\n const isVideo = item.kind === \"video\" || !!item.videoUrl;\n\n if (isVideo && item.videoUrl) {\n const result: MediaRendererProps = {\n mediaType: \"video\",\n src: item.videoUrl,\n alt: item.title ?? \"Video\",\n };\n if (item.imageUrl != null) result.poster = item.imageUrl;\n return result;\n }\n\n const result: MediaRendererProps = {\n mediaType: \"image\",\n alt: item.title || \"Image\",\n objectFit: \"cover\",\n };\n if (item.imageUrl != null) result.src = item.imageUrl;\n return result;\n}\n\n/**\n * Extracts media props from an ImageWidget/VideoWidget schema.\n * Used by CarouselWidget for slide.content rendering.\n */\nexport function getMediaPropsFromWidgetSchema(\n schema: WidgetSchema,\n): MediaRendererProps {\n const props = schema.props;\n\n const resource = props.resource as ShareableItem | undefined;\n const useCustomUrl = props.useCustomUrl as boolean | undefined;\n const focusPoint = props.focusPoint as string | undefined;\n const displayFit = props.displayFit as\n | MediaRendererProps[\"objectFit\"]\n | undefined;\n\n if (schema.type === \"VideoWidget\") {\n const result: MediaRendererProps = {\n mediaType: \"video\",\n autoplay: (props.autoplay as boolean | undefined) ?? false,\n loop: (props.loop as boolean | undefined) ?? false,\n muted: (props.muted as boolean | undefined) ?? false,\n controls: (props.controls as boolean | undefined) ?? true,\n objectFit: displayFit ?? \"cover\",\n focusPoint,\n };\n if (useCustomUrl) {\n if (typeof props.src === \"string\") result.src = props.src;\n if (typeof props.poster === \"string\") result.poster = props.poster;\n } else if (resource) {\n if (resource.videoUrl) result.src = resource.videoUrl;\n else if (typeof props.src === \"string\") result.src = props.src;\n if (resource.imageUrl) result.poster = resource.imageUrl;\n else if (typeof props.poster === \"string\") result.poster = props.poster;\n } else {\n if (typeof props.src === \"string\") result.src = props.src;\n if (typeof props.poster === \"string\") result.poster = props.poster;\n }\n return result;\n }\n\n const result: MediaRendererProps = {\n mediaType: \"image\",\n alt: (props.alt as string | undefined) ?? \"Image\",\n objectFit: displayFit ?? \"cover\",\n focusPoint,\n };\n if (useCustomUrl) {\n if (typeof props.src === \"string\") result.src = props.src;\n } else if (resource) {\n if (resource.imageUrl) result.src = resource.imageUrl;\n else if (typeof props.src === \"string\") result.src = props.src;\n if (resource.title) result.alt = resource.title;\n } else {\n if (typeof props.src === \"string\") result.src = props.src;\n }\n return result;\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"VideoWidget-7Q2eqHFn.cjs","names":["borderWidthClasses","borderColorClasses","MediaRenderer"],"sources":["../../widgets/src/widgets/VideoWidget.tsx"],"sourcesContent":["import type { ComponentProps } from \"react\";\nimport type React from \"react\";\nimport {\n getBorderRadiusField,\n getBorderWidthField,\n getBorderColorField,\n borderWidthClasses,\n borderColorClasses,\n getHeightField,\n type WidgetPropertySchema,\n} from \"@fluid-app/portal-core/registries\";\nimport type {\n BorderRadiusOptions,\n BorderWidthOptions,\n ColorOptions,\n ShareableItem,\n} from \"@fluid-app/portal-core/types\";\nimport { MediaRenderer } from \"../components/MediaRenderer\";\n\ntype VideoWidgetProps = ComponentProps<\"div\"> & {\n src?: string;\n poster?: string;\n borderRadius?: BorderRadiusOptions;\n borderWidth?: BorderWidthOptions;\n borderColor?: ColorOptions;\n verticalSizing?: \"auto\" | \"fixed\";\n fixedHeight?: string;\n displayFit?: \"cover\" | \"contain\";\n focusPoint?: string;\n controls?: boolean;\n autoplay?: boolean;\n loop?: boolean;\n muted?: boolean;\n resource?: ShareableItem;\n useCustomUrl?: boolean;\n};\n\nexport function VideoWidget({\n src = \"\",\n poster = \"\",\n borderRadius = \"md\",\n borderWidth = \"none\",\n borderColor = \"muted\",\n verticalSizing = \"auto\",\n fixedHeight = \"200px\",\n displayFit = \"cover\",\n focusPoint,\n controls = true,\n autoplay = false,\n loop = false,\n muted = false,\n resource,\n useCustomUrl,\n}: VideoWidgetProps): React.JSX.Element {\n const effectiveSrc = useCustomUrl ? src : (resource?.videoUrl ?? src);\n const effectivePoster = useCustomUrl\n ? poster\n : (resource?.imageUrl ?? poster);\n\n const isFixed = verticalSizing === \"fixed\";\n\n return (\n <div\n className={`relative w-full overflow-hidden rounded-${borderRadius} ${borderWidthClasses[borderWidth]} ${borderWidth !== \"none\" ? borderColorClasses[borderColor] : \"\"}`}\n style={isFixed ? { height: fixedHeight } : undefined}\n >\n <MediaRenderer\n mediaType=\"video\"\n src={effectiveSrc}\n poster={effectivePoster}\n objectFit={isFixed ? displayFit : undefined}\n focusPoint={isFixed ? focusPoint : undefined}\n controls={controls}\n autoplay={autoplay}\n loop={loop}\n muted={muted}\n />\n </div>\n );\n}\n\nexport const videoWidgetPropertySchema: WidgetPropertySchema = {\n widgetType: \"VideoWidget\",\n displayName: \"Video\",\n tabsConfig: [\n { id: \"styling\", label: \"Styling\" },\n { id: \"behavior\", label: \"Behavior\" },\n ],\n fields: [\n // Styling tab - Content group\n {\n key: \"resource\",\n label: \"Select Video\",\n type: \"resource\",\n description: \"Browse and select a video\",\n allowedTypes: [\"Medium\"],\n tab: \"styling\",\n group: \"Content\",\n },\n {\n key: \"useCustomUrl\",\n label: \"Use Custom URL\",\n type: \"boolean\",\n description: \"Enter a custom video URL instead of selecting media\",\n defaultValue: false,\n tab: \"styling\",\n group: \"Content\",\n },\n {\n key: \"src\",\n label: \"Video URL\",\n type: \"text\",\n description: \"The source URL of the video\",\n defaultValue: \"\",\n tab: \"styling\",\n group: \"Content\",\n requiresKeyToBeTrue: \"useCustomUrl\",\n },\n {\n key: \"poster\",\n label: \"Poster Image URL\",\n type: \"text\",\n description: \"Thumbnail image displayed before video plays\",\n defaultValue: \"\",\n tab: \"styling\",\n group: \"Content\",\n requiresKeyToBeTrue: \"useCustomUrl\",\n },\n\n // Styling tab - Design group\n getBorderRadiusField({\n key: \"borderRadius\",\n label: \"Border Radius\",\n description: \"Border radius for the calendar container\",\n defaultValue: \"md\",\n tab: \"styling\",\n group: \"Design\",\n }),\n getBorderWidthField({\n key: \"borderWidth\",\n label: \"Border Width\",\n description: \"Border width for the widget\",\n defaultValue: \"none\",\n tab: \"styling\",\n group: \"Design\",\n }),\n getBorderColorField({\n key: \"borderColor\",\n label: \"Border Color\",\n description: \"Border color for the widget\",\n defaultValue: \"muted\",\n tab: \"styling\",\n group: \"Design\",\n }),\n {\n key: \"verticalSizing\",\n label: \"Vertical Sizing\",\n type: \"buttonGroup\",\n description: \"How the video height is determined\",\n options: [\n { label: \"Auto\", value: \"auto\" },\n { label: \"Fixed\", value: \"fixed\" },\n ],\n defaultValue: \"auto\",\n tab: \"styling\",\n group: \"Design\",\n },\n getHeightField({\n key: \"fixedHeight\",\n label: \"Height\",\n description: \"Fixed height of the video container\",\n defaultValue: \"200px\",\n tab: \"styling\",\n group: \"Design\",\n requiresKeyValue: { key: \"verticalSizing\", value: \"fixed\" },\n }),\n {\n key: \"displayFit\",\n label: \"Display Fit\",\n type: \"buttonGroup\",\n description: \"How the video fills its container\",\n options: [\n { label: \"Cover\", value: \"cover\" },\n { label: \"Contain\", value: \"contain\" },\n ],\n defaultValue: \"cover\",\n tab: \"styling\",\n group: \"Design\",\n requiresKeyValue: { key: \"verticalSizing\", value: \"fixed\" },\n },\n {\n key: \"focusPoint\",\n label: \"Focus Point\",\n type: \"contentPosition\",\n description: \"The focal point of the video within its container\",\n defaultValue: \"center\",\n tab: \"styling\",\n group: \"Design\",\n requiresKeyValue: { key: \"verticalSizing\", value: \"fixed\" },\n },\n\n // Behavior tab\n {\n key: \"controls\",\n label: \"Show Controls\",\n type: \"boolean\",\n description: \"Display video playback controls\",\n defaultValue: true,\n tab: \"behavior\",\n group: \"Behavior\",\n },\n {\n key: \"autoplay\",\n label: \"Autoplay\",\n type: \"boolean\",\n description: \"Automatically start playing the video\",\n defaultValue: false,\n tab: \"behavior\",\n group: \"Behavior\",\n },\n {\n key: \"loop\",\n label: \"Loop\",\n type: \"boolean\",\n description: \"Repeat the video when it ends\",\n defaultValue: false,\n tab: \"behavior\",\n group: \"Behavior\",\n },\n {\n key: \"muted\",\n label: \"Muted\",\n type: \"boolean\",\n description: \"Start with audio muted\",\n defaultValue: false,\n tab: \"behavior\",\n group: \"Behavior\",\n },\n ],\n};\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"VideoWidget-ho9fGQ3V.mjs","names":[],"sources":["../../widgets/src/widgets/VideoWidget.tsx"],"sourcesContent":["import type { ComponentProps } from \"react\";\nimport type React from \"react\";\nimport {\n getBorderRadiusField,\n getBorderWidthField,\n getBorderColorField,\n borderWidthClasses,\n borderColorClasses,\n getHeightField,\n type WidgetPropertySchema,\n} from \"@fluid-app/portal-core/registries\";\nimport type {\n BorderRadiusOptions,\n BorderWidthOptions,\n ColorOptions,\n ShareableItem,\n} from \"@fluid-app/portal-core/types\";\nimport { MediaRenderer } from \"../components/MediaRenderer\";\n\ntype VideoWidgetProps = ComponentProps<\"div\"> & {\n src?: string;\n poster?: string;\n borderRadius?: BorderRadiusOptions;\n borderWidth?: BorderWidthOptions;\n borderColor?: ColorOptions;\n verticalSizing?: \"auto\" | \"fixed\";\n fixedHeight?: string;\n displayFit?: \"cover\" | \"contain\";\n focusPoint?: string;\n controls?: boolean;\n autoplay?: boolean;\n loop?: boolean;\n muted?: boolean;\n resource?: ShareableItem;\n useCustomUrl?: boolean;\n};\n\nexport function VideoWidget({\n src = \"\",\n poster = \"\",\n borderRadius = \"md\",\n borderWidth = \"none\",\n borderColor = \"muted\",\n verticalSizing = \"auto\",\n fixedHeight = \"200px\",\n displayFit = \"cover\",\n focusPoint,\n controls = true,\n autoplay = false,\n loop = false,\n muted = false,\n resource,\n useCustomUrl,\n}: VideoWidgetProps): React.JSX.Element {\n const effectiveSrc = useCustomUrl ? src : (resource?.videoUrl ?? src);\n const effectivePoster = useCustomUrl\n ? poster\n : (resource?.imageUrl ?? poster);\n\n const isFixed = verticalSizing === \"fixed\";\n\n return (\n <div\n className={`relative w-full overflow-hidden rounded-${borderRadius} ${borderWidthClasses[borderWidth]} ${borderWidth !== \"none\" ? borderColorClasses[borderColor] : \"\"}`}\n style={isFixed ? { height: fixedHeight } : undefined}\n >\n <MediaRenderer\n mediaType=\"video\"\n src={effectiveSrc}\n poster={effectivePoster}\n objectFit={isFixed ? displayFit : undefined}\n focusPoint={isFixed ? focusPoint : undefined}\n controls={controls}\n autoplay={autoplay}\n loop={loop}\n muted={muted}\n />\n </div>\n );\n}\n\nexport const videoWidgetPropertySchema: WidgetPropertySchema = {\n widgetType: \"VideoWidget\",\n displayName: \"Video\",\n tabsConfig: [\n { id: \"styling\", label: \"Styling\" },\n { id: \"behavior\", label: \"Behavior\" },\n ],\n fields: [\n // Styling tab - Content group\n {\n key: \"resource\",\n label: \"Select Video\",\n type: \"resource\",\n description: \"Browse and select a video\",\n allowedTypes: [\"Medium\"],\n tab: \"styling\",\n group: \"Content\",\n },\n {\n key: \"useCustomUrl\",\n label: \"Use Custom URL\",\n type: \"boolean\",\n description: \"Enter a custom video URL instead of selecting media\",\n defaultValue: false,\n tab: \"styling\",\n group: \"Content\",\n },\n {\n key: \"src\",\n label: \"Video URL\",\n type: \"text\",\n description: \"The source URL of the video\",\n defaultValue: \"\",\n tab: \"styling\",\n group: \"Content\",\n requiresKeyToBeTrue: \"useCustomUrl\",\n },\n {\n key: \"poster\",\n label: \"Poster Image URL\",\n type: \"text\",\n description: \"Thumbnail image displayed before video plays\",\n defaultValue: \"\",\n tab: \"styling\",\n group: \"Content\",\n requiresKeyToBeTrue: \"useCustomUrl\",\n },\n\n // Styling tab - Design group\n getBorderRadiusField({\n key: \"borderRadius\",\n label: \"Border Radius\",\n description: \"Border radius for the calendar container\",\n defaultValue: \"md\",\n tab: \"styling\",\n group: \"Design\",\n }),\n getBorderWidthField({\n key: \"borderWidth\",\n label: \"Border Width\",\n description: \"Border width for the widget\",\n defaultValue: \"none\",\n tab: \"styling\",\n group: \"Design\",\n }),\n getBorderColorField({\n key: \"borderColor\",\n label: \"Border Color\",\n description: \"Border color for the widget\",\n defaultValue: \"muted\",\n tab: \"styling\",\n group: \"Design\",\n }),\n {\n key: \"verticalSizing\",\n label: \"Vertical Sizing\",\n type: \"buttonGroup\",\n description: \"How the video height is determined\",\n options: [\n { label: \"Auto\", value: \"auto\" },\n { label: \"Fixed\", value: \"fixed\" },\n ],\n defaultValue: \"auto\",\n tab: \"styling\",\n group: \"Design\",\n },\n getHeightField({\n key: \"fixedHeight\",\n label: \"Height\",\n description: \"Fixed height of the video container\",\n defaultValue: \"200px\",\n tab: \"styling\",\n group: \"Design\",\n requiresKeyValue: { key: \"verticalSizing\", value: \"fixed\" },\n }),\n {\n key: \"displayFit\",\n label: \"Display Fit\",\n type: \"buttonGroup\",\n description: \"How the video fills its container\",\n options: [\n { label: \"Cover\", value: \"cover\" },\n { label: \"Contain\", value: \"contain\" },\n ],\n defaultValue: \"cover\",\n tab: \"styling\",\n group: \"Design\",\n requiresKeyValue: { key: \"verticalSizing\", value: \"fixed\" },\n },\n {\n key: \"focusPoint\",\n label: \"Focus Point\",\n type: \"contentPosition\",\n description: \"The focal point of the video within its container\",\n defaultValue: \"center\",\n tab: \"styling\",\n group: \"Design\",\n requiresKeyValue: { key: \"verticalSizing\", value: \"fixed\" },\n },\n\n // Behavior tab\n {\n key: \"controls\",\n label: \"Show Controls\",\n type: \"boolean\",\n description: \"Display video playback controls\",\n defaultValue: true,\n tab: \"behavior\",\n group: \"Behavior\",\n },\n {\n key: \"autoplay\",\n label: \"Autoplay\",\n type: \"boolean\",\n description: \"Automatically start playing the video\",\n defaultValue: false,\n tab: \"behavior\",\n group: \"Behavior\",\n },\n {\n key: \"loop\",\n label: \"Loop\",\n type: \"boolean\",\n description: \"Repeat the video when it ends\",\n defaultValue: false,\n tab: \"behavior\",\n group: \"Behavior\",\n },\n {\n key: \"muted\",\n label: \"Muted\",\n type: \"boolean\",\n description: \"Start with audio muted\",\n defaultValue: false,\n tab: \"behavior\",\n group: \"Behavior\",\n },\n ],\n};\n"],"mappings":"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"}