@fluid-app/portal-sdk 0.1.215 → 0.1.217
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.
- package/dist/{AppDownloadScreen-rZkhl4Q9.cjs → AppDownloadScreen-CBoC31wL.cjs} +2 -2
- package/dist/{AppDownloadScreen-rZkhl4Q9.cjs.map → AppDownloadScreen-CBoC31wL.cjs.map} +1 -1
- package/dist/{AppDownloadScreen-CTqsyx3n.mjs → AppDownloadScreen-CZ0EOIZ5.mjs} +2 -2
- package/dist/{AppDownloadScreen-CTqsyx3n.mjs.map → AppDownloadScreen-CZ0EOIZ5.mjs.map} +1 -1
- package/dist/{AppNavigationContext-N5oUbgNL.cjs → AppNavigationContext-CbK8uCjS.cjs} +1 -1
- package/dist/{AppNavigationContext-N5oUbgNL.cjs.map → AppNavigationContext-CbK8uCjS.cjs.map} +1 -1
- package/dist/{AppNavigationContext-BW3lSpfT.mjs → AppNavigationContext-Cq3BDKSf.mjs} +1 -1
- package/dist/{AppNavigationContext-BW3lSpfT.mjs.map → AppNavigationContext-Cq3BDKSf.mjs.map} +1 -1
- package/dist/{CardWidget-Scr2BDrZ.mjs → CardWidget-B1-STzEY.mjs} +2 -2
- package/dist/{CardWidget-Scr2BDrZ.mjs.map → CardWidget-B1-STzEY.mjs.map} +1 -1
- package/dist/{CardWidget-BAl-3dJF.cjs → CardWidget-CdrGXdUr.cjs} +2 -2
- package/dist/{CardWidget-BAl-3dJF.cjs.map → CardWidget-CdrGXdUr.cjs.map} +1 -1
- package/dist/{CardWidget-CFtUC9RB.cjs → CardWidget-Cze0MIZ4.cjs} +2 -2
- package/dist/{ContactsScreen-UnYKZlkb.cjs → ContactsScreen-CSY7Of6x.cjs} +6 -6
- package/dist/{ContactsScreen-UnYKZlkb.cjs.map → ContactsScreen-CSY7Of6x.cjs.map} +1 -1
- package/dist/{ContactsScreen-DscaUwNM.mjs → ContactsScreen-CbV-r1fn.mjs} +6 -6
- package/dist/{ContactsScreen-DscaUwNM.mjs.map → ContactsScreen-CbV-r1fn.mjs.map} +1 -1
- package/dist/{ContactsScreen-Cs9bKvMr.cjs → ContactsScreen-D-g7XEB-.cjs} +6 -6
- package/dist/{ContainerWidget-DXgM6Mxa.cjs → ContainerWidget-D89LdXUJ.cjs} +2 -2
- package/dist/{ContainerWidget-DXgM6Mxa.cjs.map → ContainerWidget-D89LdXUJ.cjs.map} +1 -1
- package/dist/{ContainerWidget-CxAu29Rz.mjs → ContainerWidget-DQwZ-weo.mjs} +2 -2
- package/dist/{ContainerWidget-CxAu29Rz.mjs.map → ContainerWidget-DQwZ-weo.mjs.map} +1 -1
- package/dist/{ContainerWidget-DV-Ng6tH.cjs → ContainerWidget-oF_cuYkn.cjs} +3 -3
- package/dist/{CustomersScreen-BgbvmBoF.mjs → CustomersScreen-DSNokGQu.mjs} +1 -1
- package/dist/{CustomersScreen-BgbvmBoF.mjs.map → CustomersScreen-DSNokGQu.mjs.map} +1 -1
- package/dist/{CustomersScreen-CKMopTNU.cjs → CustomersScreen-Rf5uucRx.cjs} +1 -1
- package/dist/{CustomersScreen-CKMopTNU.cjs.map → CustomersScreen-Rf5uucRx.cjs.map} +1 -1
- package/dist/EmbedWidget-BysWpVIC.cjs +684 -0
- package/dist/EmbedWidget-BysWpVIC.cjs.map +1 -0
- package/dist/EmbedWidget-tU8njf5H.mjs +654 -0
- package/dist/EmbedWidget-tU8njf5H.mjs.map +1 -0
- package/dist/{FluidProvider-_xK5H6F3.mjs → FluidProvider-02beRTpR.mjs} +27 -24
- package/dist/{FluidProvider-_xK5H6F3.mjs.map → FluidProvider-02beRTpR.mjs.map} +1 -1
- package/dist/{FluidProvider-CG8EpvkS.cjs → FluidProvider-BgFmXtHo.cjs} +27 -24
- package/dist/{FluidProvider-CG8EpvkS.cjs.map → FluidProvider-BgFmXtHo.cjs.map} +1 -1
- package/dist/{InfiniteScrollSentinel-CUU5C88p.mjs → InfiniteScrollSentinel-DCxWTHrA.mjs} +1 -1
- package/dist/{InfiniteScrollSentinel-CUU5C88p.mjs.map → InfiniteScrollSentinel-DCxWTHrA.mjs.map} +1 -1
- package/dist/{InfiniteScrollSentinel-BGXp134B.cjs → InfiniteScrollSentinel-DPyNdLiU.cjs} +1 -1
- package/dist/{InfiniteScrollSentinel-BGXp134B.cjs.map → InfiniteScrollSentinel-DPyNdLiU.cjs.map} +1 -1
- package/dist/{LayoutWidget-MTchacII.mjs → LayoutWidget-BqzP7L10.mjs} +2 -2
- package/dist/{LayoutWidget-MTchacII.mjs.map → LayoutWidget-BqzP7L10.mjs.map} +1 -1
- package/dist/{LayoutWidget-CSouwqRJ.cjs → LayoutWidget-CTxbrzsY.cjs} +2 -2
- package/dist/{LayoutWidget-BbABNLAR.cjs → LayoutWidget-Dh8JWX2-.cjs} +2 -2
- package/dist/{LayoutWidget-BbABNLAR.cjs.map → LayoutWidget-Dh8JWX2-.cjs.map} +1 -1
- package/dist/{MessagingScreen-p-ZeCwpa.cjs → MessagingScreen-BkLcqJbs.cjs} +5 -5
- package/dist/{MessagingScreen-p-ZeCwpa.cjs.map → MessagingScreen-BkLcqJbs.cjs.map} +1 -1
- package/dist/{MessagingScreen-C58vXVET.mjs → MessagingScreen-CJlVOY5R.mjs} +3 -3
- package/dist/{MessagingScreen-C58vXVET.mjs.map → MessagingScreen-CJlVOY5R.mjs.map} +1 -1
- package/dist/{MessagingScreen-DgmMx15d.cjs → MessagingScreen-sN7aBvGk.cjs} +17 -16
- package/dist/{MySiteScreen-CiQcyMSg.cjs → MySiteScreen-B0aOIzU4.cjs} +4 -4
- package/dist/{MySiteScreen-Cjkw8dKY.cjs → MySiteScreen-B1L8coGs.cjs} +4 -4
- package/dist/{MySiteScreen-Cjkw8dKY.cjs.map → MySiteScreen-B1L8coGs.cjs.map} +1 -1
- package/dist/{MySiteScreen-Bg0gFxf0.mjs → MySiteScreen-DUN5TTvU.mjs} +4 -4
- package/dist/{MySiteScreen-Bg0gFxf0.mjs.map → MySiteScreen-DUN5TTvU.mjs.map} +1 -1
- package/dist/OrdersScreen-BmwiVbLV.cjs +9 -0
- package/dist/{OrdersScreen-BklAH7FW.mjs → OrdersScreen-D-SgUl2a.mjs} +4 -4
- package/dist/{OrdersScreen-BklAH7FW.mjs.map → OrdersScreen-D-SgUl2a.mjs.map} +1 -1
- package/dist/{OrdersScreen-DPSqqmhe.cjs → OrdersScreen-Dp7SzXVv.cjs} +4 -4
- package/dist/{OrdersScreen-DPSqqmhe.cjs.map → OrdersScreen-Dp7SzXVv.cjs.map} +1 -1
- package/dist/{PortalContentApiProvider-CB32GRS5.mjs → PortalContentApiProvider-C9FeVwRb.mjs} +7 -7
- package/dist/{PortalContentApiProvider-CB32GRS5.mjs.map → PortalContentApiProvider-C9FeVwRb.mjs.map} +1 -1
- package/dist/{PortalContentApiProvider-BU3UTVjk.cjs → PortalContentApiProvider-RXBp8FNj.cjs} +8 -8
- package/dist/{PortalContentApiProvider-BU3UTVjk.cjs.map → PortalContentApiProvider-RXBp8FNj.cjs.map} +1 -1
- package/dist/{PortalProductsApiProvider-DHni3Y1V.mjs → PortalProductsApiProvider-CE71zDj9.mjs} +1 -1
- package/dist/{PortalProductsApiProvider-DHni3Y1V.mjs.map → PortalProductsApiProvider-CE71zDj9.mjs.map} +1 -1
- package/dist/{PortalProductsApiProvider-DnhHoraV.cjs → PortalProductsApiProvider-Ca1oeTtJ.cjs} +1 -1
- package/dist/{PortalProductsApiProvider-DnhHoraV.cjs.map → PortalProductsApiProvider-Ca1oeTtJ.cjs.map} +1 -1
- package/dist/{ProductsScreen-DNMT2I69.cjs → ProductsScreen-BD53vh6Y.cjs} +6 -6
- package/dist/{ProductsScreen-DNMT2I69.cjs.map → ProductsScreen-BD53vh6Y.cjs.map} +1 -1
- package/dist/{ProductsScreen-C8GO63G2.mjs → ProductsScreen-BtUZxJCt.mjs} +6 -6
- package/dist/{ProductsScreen-C8GO63G2.mjs.map → ProductsScreen-BtUZxJCt.mjs.map} +1 -1
- package/dist/ProductsScreen-DNpzJ6lh.cjs +15 -0
- package/dist/ProductsScreen-pkOeOW8M.mjs +13 -0
- package/dist/{ProfileScreen-CfCewCM7.cjs → ProfileScreen-Bgo6iTKe.cjs} +16 -15
- package/dist/{ProfileScreen-TLKSlv4_.mjs → ProfileScreen-CNYqUDNB.mjs} +4 -4
- package/dist/{ProfileScreen-TLKSlv4_.mjs.map → ProfileScreen-CNYqUDNB.mjs.map} +1 -1
- package/dist/{ProfileScreen-T7HQoFiw.cjs → ProfileScreen-rPqgsNCc.cjs} +4 -4
- package/dist/{ProfileScreen-T7HQoFiw.cjs.map → ProfileScreen-rPqgsNCc.cjs.map} +1 -1
- package/dist/QuickLinksWidget-BwEGtrV0.cjs +563 -0
- package/dist/QuickLinksWidget-BwEGtrV0.cjs.map +1 -0
- package/dist/QuickLinksWidget-D8RlDvkB.mjs +546 -0
- package/dist/QuickLinksWidget-D8RlDvkB.mjs.map +1 -0
- package/dist/{QuickShareWidget-CkPsax9Z.mjs → QuickShareWidget-BURtESV2.mjs} +1 -1
- package/dist/{QuickShareWidget-CkPsax9Z.mjs.map → QuickShareWidget-BURtESV2.mjs.map} +1 -1
- package/dist/{QuickShareWidget-BwOhBs6H.cjs → QuickShareWidget-D171Z9mX.cjs} +1 -1
- package/dist/{QuickShareWidget-BwOhBs6H.cjs.map → QuickShareWidget-D171Z9mX.cjs.map} +1 -1
- package/dist/{RecentActivityWidget-Bg7N2Lpp.cjs → RecentActivityWidget-BmE7_-iJ.cjs} +1 -1
- package/dist/{RecentActivityWidget-Bg7N2Lpp.cjs.map → RecentActivityWidget-BmE7_-iJ.cjs.map} +1 -1
- package/dist/{RecentActivityWidget-8LkuMmbc.mjs → RecentActivityWidget-Dy5SAx61.mjs} +1 -1
- package/dist/{RecentActivityWidget-8LkuMmbc.mjs.map → RecentActivityWidget-Dy5SAx61.mjs.map} +1 -1
- package/dist/{ScreenHeaderContext-FYyYk97y.mjs → ScreenHeaderContext-BDjNSUfr.mjs} +1 -1
- package/dist/{ScreenHeaderContext-FYyYk97y.mjs.map → ScreenHeaderContext-BDjNSUfr.mjs.map} +1 -1
- package/dist/{ScreenHeaderContext-DA8cEfP-.cjs → ScreenHeaderContext-BXgWydjB.cjs} +1 -1
- package/dist/{ScreenHeaderContext-DA8cEfP-.cjs.map → ScreenHeaderContext-BXgWydjB.cjs.map} +1 -1
- package/dist/{ScreenRenderer-Cv2rxvtF.mjs → ScreenRenderer-BqDTKZEZ.mjs} +2 -1
- package/dist/ScreenRenderer-BqDTKZEZ.mjs.map +1 -0
- package/dist/{ScreenRenderer-DfeRRgBO.cjs → ScreenRenderer-Cg85jtXq.cjs} +2 -1
- package/dist/ScreenRenderer-Cg85jtXq.cjs.map +1 -0
- package/dist/{SearchSort-CPkF1EaA.cjs → SearchSort-DHDDqero.cjs} +1 -1
- package/dist/{SearchSort-CPkF1EaA.cjs.map → SearchSort-DHDDqero.cjs.map} +1 -1
- package/dist/{SearchSort-YYd9-Hdf.mjs → SearchSort-DXBt-uj0.mjs} +1 -1
- package/dist/{SearchSort-YYd9-Hdf.mjs.map → SearchSort-DXBt-uj0.mjs.map} +1 -1
- package/dist/{SeparatorWidget-DeCY23G9.mjs → SeparatorWidget-CheNBJwz.mjs} +1 -1
- package/dist/{SeparatorWidget-DeCY23G9.mjs.map → SeparatorWidget-CheNBJwz.mjs.map} +1 -1
- package/dist/{SeparatorWidget-R9PjLUJh.cjs → SeparatorWidget-CjVHbHzQ.cjs} +1 -1
- package/dist/{SeparatorWidget-R9PjLUJh.cjs.map → SeparatorWidget-CjVHbHzQ.cjs.map} +1 -1
- package/dist/{ShareablesScreen-DRpf5u05.mjs → ShareablesScreen-CW1e9x4K.mjs} +7 -7
- package/dist/{ShareablesScreen-DRpf5u05.mjs.map → ShareablesScreen-CW1e9x4K.mjs.map} +1 -1
- package/dist/ShareablesScreen-D1J2Kljk.mjs +15 -0
- package/dist/{ShareablesScreen-D9Q0dQhz.cjs → ShareablesScreen-DC8xXUo4.cjs} +7 -7
- package/dist/{ShareablesScreen-D9Q0dQhz.cjs.map → ShareablesScreen-DC8xXUo4.cjs.map} +1 -1
- package/dist/ShareablesScreen-smU5pGyH.cjs +17 -0
- package/dist/{ShopScreen-u8i7hVdL.mjs → ShopScreen-B9lHJ8L2.mjs} +7 -7
- package/dist/{ShopScreen-u8i7hVdL.mjs.map → ShopScreen-B9lHJ8L2.mjs.map} +1 -1
- package/dist/{ShopScreen-C7aJIMGh.cjs → ShopScreen-DUHzufCU.cjs} +7 -7
- package/dist/{ShopScreen-C7aJIMGh.cjs.map → ShopScreen-DUHzufCU.cjs.map} +1 -1
- package/dist/{ShopScreen-DLcv_4Iu.cjs → ShopScreen-g6FQ4R1_.cjs} +18 -17
- package/dist/{SpacerWidget-CvuJeeAj.mjs → SpacerWidget-D-WjN1xb.mjs} +1 -1
- package/dist/{SpacerWidget-CvuJeeAj.mjs.map → SpacerWidget-D-WjN1xb.mjs.map} +1 -1
- package/dist/{SpacerWidget-CYHjTF38.cjs → SpacerWidget-D9lOLPr5.cjs} +1 -1
- package/dist/{SpacerWidget-CYHjTF38.cjs.map → SpacerWidget-D9lOLPr5.cjs.map} +1 -1
- package/dist/{SubscriptionsScreen-oMAid0AM.cjs → SubscriptionsScreen-8zup9pEX.cjs} +5 -5
- package/dist/{SubscriptionsScreen-rYK8dckl.mjs → SubscriptionsScreen-CwUdB9rW.mjs} +7 -7
- package/dist/{SubscriptionsScreen-rYK8dckl.mjs.map → SubscriptionsScreen-CwUdB9rW.mjs.map} +1 -1
- package/dist/{SubscriptionsScreen-C1GXipTn.cjs → SubscriptionsScreen-DKyatNoJ.cjs} +8 -8
- package/dist/{SubscriptionsScreen-C1GXipTn.cjs.map → SubscriptionsScreen-DKyatNoJ.cjs.map} +1 -1
- package/dist/{TableWidget-CT7Ydlw8.cjs → TableWidget-C2BG7wMg.cjs} +1 -1
- package/dist/{TableWidget-BAwpJ-Vb.mjs → TableWidget-CDVOq4aN.mjs} +1 -1
- package/dist/{TableWidget-BAwpJ-Vb.mjs.map → TableWidget-CDVOq4aN.mjs.map} +1 -1
- package/dist/{TableWidget-QlLGELmp.cjs → TableWidget-D5gAsgv6.cjs} +1 -1
- package/dist/{TableWidget-QlLGELmp.cjs.map → TableWidget-D5gAsgv6.cjs.map} +1 -1
- package/dist/{ToDoWidget-DT30Nnjt.mjs → ToDoWidget-BRNDE3MH.mjs} +1 -1
- package/dist/{ToDoWidget-DT30Nnjt.mjs.map → ToDoWidget-BRNDE3MH.mjs.map} +1 -1
- package/dist/{ToDoWidget-Tcy4VK1v.cjs → ToDoWidget-x86UGKLQ.cjs} +1 -1
- package/dist/{ToDoWidget-Tcy4VK1v.cjs.map → ToDoWidget-x86UGKLQ.cjs.map} +1 -1
- package/dist/{UpgradeScreen-BZ92a6w9.cjs → UpgradeScreen-BdY0rCoF.cjs} +1 -1
- package/dist/{UpgradeScreen-CNieK9ud.mjs → UpgradeScreen-Dau5Elx4.mjs} +1 -1
- package/dist/{UpgradeScreen-CNieK9ud.mjs.map → UpgradeScreen-Dau5Elx4.mjs.map} +1 -1
- package/dist/{UpgradeScreen-BEHFQRlO.cjs → UpgradeScreen-DrBa2uzD.cjs} +1 -1
- package/dist/{UpgradeScreen-BEHFQRlO.cjs.map → UpgradeScreen-DrBa2uzD.cjs.map} +1 -1
- package/dist/{VideoWidget-CK4I8Xmv.cjs → VideoWidget-BIokMYTX.cjs} +1 -1
- package/dist/{VideoWidget-CK4I8Xmv.cjs.map → VideoWidget-BIokMYTX.cjs.map} +1 -1
- package/dist/{VideoWidget-BE_cv0Fm.mjs → VideoWidget-BMIt-eiQ.mjs} +1 -1
- package/dist/{VideoWidget-BE_cv0Fm.mjs.map → VideoWidget-BMIt-eiQ.mjs.map} +1 -1
- package/dist/{dist-BRT-FAUb.cjs → dist-CGuUUVNt.cjs} +1 -1
- package/dist/{dist-BRT-FAUb.cjs.map → dist-CGuUUVNt.cjs.map} +1 -1
- package/dist/{dist-DBPpJ567.mjs → dist-Cis8L6HV.mjs} +2 -2
- package/dist/{dist-DBPpJ567.mjs.map → dist-Cis8L6HV.mjs.map} +1 -1
- package/dist/{dist-BETEuYfn.mjs → dist-D39Yezrv.mjs} +1 -1
- package/dist/{dist-BETEuYfn.mjs.map → dist-D39Yezrv.mjs.map} +1 -1
- package/dist/{dist-Y1iryX8H.cjs → dist-DDZMFlal.cjs} +2 -2
- package/dist/{dist-Y1iryX8H.cjs.map → dist-DDZMFlal.cjs.map} +1 -1
- package/dist/{dist-Ck1Xpuzh.cjs → dist-DWs3-WOI.cjs} +1 -1
- package/dist/{dist-Ck1Xpuzh.cjs.map → dist-DWs3-WOI.cjs.map} +1 -1
- package/dist/{es-Dr47illR.cjs → es-DHLLltoR.cjs} +1 -1
- package/dist/{es-Dr47illR.cjs.map → es-DHLLltoR.cjs.map} +1 -1
- package/dist/{format-C3sl4r8U.cjs → format-B8vxOIbt.cjs} +1 -1
- package/dist/{format-C3sl4r8U.cjs.map → format-B8vxOIbt.cjs.map} +1 -1
- package/dist/index.cjs +66 -63
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +141 -1
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +141 -1
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +64 -63
- package/dist/index.mjs.map +1 -1
- package/dist/{order-status-badge-CPPesrcx.cjs → order-status-badge-CAu3UIzD.cjs} +3 -3
- package/dist/{order-status-badge-CPPesrcx.cjs.map → order-status-badge-CAu3UIzD.cjs.map} +1 -1
- package/dist/{order-status-badge-B2_tZYhG.mjs → order-status-badge-b0F_B7mu.mjs} +3 -3
- package/dist/{order-status-badge-B2_tZYhG.mjs.map → order-status-badge-b0F_B7mu.mjs.map} +1 -1
- package/dist/{sortable.esm-DFTEWOHN.mjs → sortable.esm-CJLSD-Ce.mjs} +1 -1
- package/dist/{sortable.esm-DFTEWOHN.mjs.map → sortable.esm-CJLSD-Ce.mjs.map} +1 -1
- package/dist/{use-account-8Bv6INGF.cjs → use-account-C5QI6NSe.cjs} +1 -1
- package/dist/{use-account-8Bv6INGF.cjs.map → use-account-C5QI6NSe.cjs.map} +1 -1
- package/dist/{use-account-B16Tor2Q.mjs → use-account-Cvig0exB.mjs} +1 -1
- package/dist/{use-account-B16Tor2Q.mjs.map → use-account-Cvig0exB.mjs.map} +1 -1
- package/dist/{use-mysite-portal-axe_PFzR.mjs → use-mysite-portal-BV-BP3CE.mjs} +1 -1
- package/dist/{use-mysite-portal-axe_PFzR.mjs.map → use-mysite-portal-BV-BP3CE.mjs.map} +1 -1
- package/dist/{use-mysite-portal-CJBowMpK.cjs → use-mysite-portal-DzDYRU0u.cjs} +1 -1
- package/dist/{use-mysite-portal-CJBowMpK.cjs.map → use-mysite-portal-DzDYRU0u.cjs.map} +1 -1
- package/dist/{use-store-CdYGxnIk.cjs → use-store-BLcehk1A.cjs} +1 -1
- package/dist/{use-store-CdYGxnIk.cjs.map → use-store-BLcehk1A.cjs.map} +1 -1
- package/dist/{use-store-BnHhQDYo.mjs → use-store-efmQhKpB.mjs} +1 -1
- package/dist/{use-store-BnHhQDYo.mjs.map → use-store-efmQhKpB.mjs.map} +1 -1
- package/package.json +15 -15
- package/dist/EmbedWidget-C3mGurOv.mjs +0 -221
- package/dist/EmbedWidget-C3mGurOv.mjs.map +0 -1
- package/dist/EmbedWidget-PIWoA9sU.cjs +0 -251
- package/dist/EmbedWidget-PIWoA9sU.cjs.map +0 -1
- package/dist/OrdersScreen-CH4wrbZJ.cjs +0 -9
- package/dist/ProductsScreen-A9LG5Pk7.mjs +0 -13
- package/dist/ProductsScreen-DFFOXSgX.cjs +0 -15
- package/dist/ScreenRenderer-Cv2rxvtF.mjs.map +0 -1
- package/dist/ScreenRenderer-DfeRRgBO.cjs.map +0 -1
- package/dist/ShareablesScreen-CoOLXqJ6.cjs +0 -17
- package/dist/ShareablesScreen-ysqC_x6z.mjs +0 -15
|
@@ -0,0 +1,563 @@
|
|
|
1
|
+
const require_chunk = require("./chunk-9hOWP6kD.cjs");
|
|
2
|
+
const require_registries = require("./registries-CpUM406S.cjs");
|
|
3
|
+
require("react");
|
|
4
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
5
|
+
let lucide_react = require("lucide-react");
|
|
6
|
+
//#region ../widgets/src/widgets/QuickLinksWidget.tsx
|
|
7
|
+
var QuickLinksWidget_exports = /* @__PURE__ */ require_chunk.__exportAll({
|
|
8
|
+
QuickLinksWidget: () => QuickLinksWidget,
|
|
9
|
+
quickLinksWidgetPropertySchema: () => quickLinksWidgetPropertySchema
|
|
10
|
+
});
|
|
11
|
+
const ICON_MAP = {
|
|
12
|
+
User: lucide_react.User,
|
|
13
|
+
Share2: lucide_react.Share2,
|
|
14
|
+
ShoppingBag: lucide_react.ShoppingBag,
|
|
15
|
+
Video: lucide_react.Video,
|
|
16
|
+
Mail: lucide_react.Mail,
|
|
17
|
+
MessageCircle: lucide_react.MessageCircle,
|
|
18
|
+
Globe: lucide_react.Globe,
|
|
19
|
+
Calendar: lucide_react.Calendar,
|
|
20
|
+
Bell: lucide_react.Bell,
|
|
21
|
+
Heart: lucide_react.Heart,
|
|
22
|
+
Star: lucide_react.Star,
|
|
23
|
+
Zap: lucide_react.Zap,
|
|
24
|
+
Gift: lucide_react.Gift,
|
|
25
|
+
Phone: lucide_react.Phone,
|
|
26
|
+
MapPin: lucide_react.MapPin,
|
|
27
|
+
Play: lucide_react.Play,
|
|
28
|
+
Package: lucide_react.Package,
|
|
29
|
+
ExternalLink: lucide_react.ExternalLink,
|
|
30
|
+
Bookmark: lucide_react.BookmarkIcon,
|
|
31
|
+
Trophy: lucide_react.Trophy,
|
|
32
|
+
Sparkles: lucide_react.Sparkles,
|
|
33
|
+
Link: lucide_react.Link
|
|
34
|
+
};
|
|
35
|
+
const ICON_OPTIONS = [
|
|
36
|
+
{
|
|
37
|
+
label: "Link (default)",
|
|
38
|
+
value: "Link"
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
label: "User / Profile",
|
|
42
|
+
value: "User"
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
label: "Share",
|
|
46
|
+
value: "Share2"
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
label: "Shopping Bag",
|
|
50
|
+
value: "ShoppingBag"
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
label: "Video",
|
|
54
|
+
value: "Video"
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
label: "Mail",
|
|
58
|
+
value: "Mail"
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
label: "Message",
|
|
62
|
+
value: "MessageCircle"
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
label: "Globe",
|
|
66
|
+
value: "Globe"
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
label: "Calendar",
|
|
70
|
+
value: "Calendar"
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
label: "Bell / Notifications",
|
|
74
|
+
value: "Bell"
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
label: "Heart",
|
|
78
|
+
value: "Heart"
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
label: "Star",
|
|
82
|
+
value: "Star"
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
label: "Zap / Lightning",
|
|
86
|
+
value: "Zap"
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
label: "Gift",
|
|
90
|
+
value: "Gift"
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
label: "Phone",
|
|
94
|
+
value: "Phone"
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
label: "Map Pin",
|
|
98
|
+
value: "MapPin"
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
label: "Play",
|
|
102
|
+
value: "Play"
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
label: "Package",
|
|
106
|
+
value: "Package"
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
label: "External Link",
|
|
110
|
+
value: "ExternalLink"
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
label: "Bookmark",
|
|
114
|
+
value: "Bookmark"
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
label: "Trophy",
|
|
118
|
+
value: "Trophy"
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
label: "Sparkles",
|
|
122
|
+
value: "Sparkles"
|
|
123
|
+
}
|
|
124
|
+
];
|
|
125
|
+
const capitalize = (s) => s ? s.charAt(0).toUpperCase() + s.slice(1) : s;
|
|
126
|
+
const getIcon = (name) => {
|
|
127
|
+
if (!name) return lucide_react.Link;
|
|
128
|
+
return ICON_MAP[name] ?? ICON_MAP[capitalize(name)] ?? lucide_react.Link;
|
|
129
|
+
};
|
|
130
|
+
const isColorOption = (value) => [
|
|
131
|
+
"background",
|
|
132
|
+
"foreground",
|
|
133
|
+
"primary",
|
|
134
|
+
"secondary",
|
|
135
|
+
"accent",
|
|
136
|
+
"muted",
|
|
137
|
+
"destructive"
|
|
138
|
+
].includes(value);
|
|
139
|
+
const FALLBACK_COLOR_CYCLE = [
|
|
140
|
+
"primary",
|
|
141
|
+
"accent",
|
|
142
|
+
"secondary",
|
|
143
|
+
"destructive"
|
|
144
|
+
];
|
|
145
|
+
const parseLegacyLinks = (raw) => {
|
|
146
|
+
return (Array.isArray(raw) ? raw : raw.split(/\r?\n/).filter(Boolean)).map((line, index) => {
|
|
147
|
+
const parts = line.split("|").map((s) => s.trim());
|
|
148
|
+
const label = parts[0] ?? "";
|
|
149
|
+
if (!label) return null;
|
|
150
|
+
const url = parts[1] ?? "#";
|
|
151
|
+
const iconName = parts[2] && parts[2].length > 0 ? parts[2] : "Link";
|
|
152
|
+
const colorCandidate = parts[3];
|
|
153
|
+
const iconColor = colorCandidate && isColorOption(colorCandidate) ? colorCandidate : FALLBACK_COLOR_CYCLE[index % FALLBACK_COLOR_CYCLE.length] ?? "primary";
|
|
154
|
+
return {
|
|
155
|
+
id: `link-${index}`,
|
|
156
|
+
label,
|
|
157
|
+
url,
|
|
158
|
+
iconName,
|
|
159
|
+
iconColor
|
|
160
|
+
};
|
|
161
|
+
}).filter((x) => x !== null);
|
|
162
|
+
};
|
|
163
|
+
const MAX_LINKS = 8;
|
|
164
|
+
const resolveLinks = (slots, legacy) => {
|
|
165
|
+
return slots.map((slot, index) => {
|
|
166
|
+
const legacyEntry = legacy[index];
|
|
167
|
+
if (slot.label !== void 0 || slot.url !== void 0 || slot.icon !== void 0 || slot.color !== void 0) {
|
|
168
|
+
if (!(index === 0 || slot.enabled)) return null;
|
|
169
|
+
const label = (slot.label ?? legacyEntry?.label ?? "").trim();
|
|
170
|
+
if (!label) return null;
|
|
171
|
+
const url = slot.url && slot.url.length > 0 ? slot.url : legacyEntry?.url ?? "#";
|
|
172
|
+
const iconName = slot.icon && slot.icon.length > 0 ? slot.icon : legacyEntry?.iconName ?? "Link";
|
|
173
|
+
const iconColor = slot.color ?? legacyEntry?.iconColor ?? FALLBACK_COLOR_CYCLE[index % FALLBACK_COLOR_CYCLE.length] ?? "primary";
|
|
174
|
+
return {
|
|
175
|
+
id: `link-${index}`,
|
|
176
|
+
label,
|
|
177
|
+
url,
|
|
178
|
+
iconName,
|
|
179
|
+
iconColor
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
return legacyEntry ?? null;
|
|
183
|
+
}).filter((x) => x !== null);
|
|
184
|
+
};
|
|
185
|
+
function LinkRow({ link, textColor, borderRadius, openInNewTab, showChevron, iconRadius, layout, isLast }) {
|
|
186
|
+
const Icon = getIcon(link.iconName);
|
|
187
|
+
const wrapperBase = `group relative flex items-center gap-3 py-3 transition-all duration-200`;
|
|
188
|
+
const wrapperCardClasses = `rounded-${borderRadius} px-3 bg-${textColor}/5 hover:bg-${textColor}/10 hover:-translate-y-0.5`;
|
|
189
|
+
const wrapperListClasses = `px-0 hover:bg-${textColor}/5 rounded-md`;
|
|
190
|
+
const wrapperClasses = layout === "cards" ? `${wrapperBase} ${wrapperCardClasses}` : `${wrapperBase} ${wrapperListClasses}`;
|
|
191
|
+
const content = /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
|
|
192
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
193
|
+
"aria-hidden": "true",
|
|
194
|
+
className: `relative flex size-10 shrink-0 items-center justify-center rounded-${iconRadius} text-${link.iconColor}-foreground`,
|
|
195
|
+
style: {
|
|
196
|
+
background: `linear-gradient(135deg, color-mix(in oklch, var(--color-${link.iconColor}) 75%, white 25%) 0%, var(--color-${link.iconColor}) 100%)`,
|
|
197
|
+
boxShadow: `
|
|
198
|
+
inset 0 1px 0 rgba(255,255,255,0.25),
|
|
199
|
+
inset 0 -1px 0 rgba(0,0,0,0.1),
|
|
200
|
+
0 1px 2px color-mix(in oklch, var(--color-${link.iconColor}) 30%, transparent)
|
|
201
|
+
`
|
|
202
|
+
},
|
|
203
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Icon, {
|
|
204
|
+
className: "size-5",
|
|
205
|
+
strokeWidth: 2.25
|
|
206
|
+
})
|
|
207
|
+
}),
|
|
208
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
209
|
+
className: `min-w-0 flex-1 truncate text-[15px] font-bold tracking-[-0.01em] text-${textColor}`,
|
|
210
|
+
children: link.label
|
|
211
|
+
}),
|
|
212
|
+
showChevron && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.ChevronRight, {
|
|
213
|
+
"aria-hidden": "true",
|
|
214
|
+
className: `size-4 shrink-0 text-${textColor}/35 transition-transform duration-200 group-hover:translate-x-0.5 group-hover:text-${textColor}/60`
|
|
215
|
+
})
|
|
216
|
+
] });
|
|
217
|
+
const separator = layout === "list" && !isLast ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
218
|
+
"aria-hidden": "true",
|
|
219
|
+
className: "ml-[52px]",
|
|
220
|
+
style: { borderBottom: `1px solid color-mix(in oklch, var(--color-${textColor}) 8%, transparent)` }
|
|
221
|
+
}) : null;
|
|
222
|
+
const href = link.url && link.url !== "#" ? link.url : void 0;
|
|
223
|
+
if (href) return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("a", {
|
|
224
|
+
href,
|
|
225
|
+
target: openInNewTab ? "_blank" : void 0,
|
|
226
|
+
rel: openInNewTab ? "noopener noreferrer" : void 0,
|
|
227
|
+
className: wrapperClasses,
|
|
228
|
+
children: content
|
|
229
|
+
}), separator] });
|
|
230
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
231
|
+
className: wrapperClasses,
|
|
232
|
+
children: content
|
|
233
|
+
}), separator] });
|
|
234
|
+
}
|
|
235
|
+
function QuickLinksWidget({ titleEnabled = true, title = "Quick Links", titleFontSize = "md", titleColor = "foreground", link1Label, link1Url, link1Icon, link1Color, link2Enabled = true, link2Label, link2Url, link2Icon, link2Color, link3Enabled = true, link3Label, link3Url, link3Icon, link3Color, link4Enabled = true, link4Label, link4Url, link4Icon, link4Color, link5Enabled = false, link5Label, link5Url, link5Icon, link5Color, link6Enabled = false, link6Label, link6Url, link6Icon, link6Color, link7Enabled = false, link7Label, link7Url, link7Icon, link7Color, link8Enabled = false, link8Label, link8Url, link8Icon, link8Color, links, layout = "cards", iconRadius = "lg", showChevron = true, openInNewTab = false, background = {
|
|
236
|
+
type: "solid",
|
|
237
|
+
color: "background"
|
|
238
|
+
}, textColor = "foreground", padding = 4, borderRadius = "md", borderWidth = "none", borderColor = "muted", className, ...props }) {
|
|
239
|
+
const backgroundColor = background.color || "background";
|
|
240
|
+
const backgroundImage = (background.resource?.image_url || background.resource?.imageUrl) && background.type === "image" ? `url(${background.resource.image_url || background.resource.imageUrl})` : "none";
|
|
241
|
+
const parsed = resolveLinks([
|
|
242
|
+
{
|
|
243
|
+
enabled: true,
|
|
244
|
+
label: link1Label,
|
|
245
|
+
url: link1Url,
|
|
246
|
+
icon: link1Icon,
|
|
247
|
+
color: link1Color
|
|
248
|
+
},
|
|
249
|
+
{
|
|
250
|
+
enabled: link2Enabled,
|
|
251
|
+
label: link2Label,
|
|
252
|
+
url: link2Url,
|
|
253
|
+
icon: link2Icon,
|
|
254
|
+
color: link2Color
|
|
255
|
+
},
|
|
256
|
+
{
|
|
257
|
+
enabled: link3Enabled,
|
|
258
|
+
label: link3Label,
|
|
259
|
+
url: link3Url,
|
|
260
|
+
icon: link3Icon,
|
|
261
|
+
color: link3Color
|
|
262
|
+
},
|
|
263
|
+
{
|
|
264
|
+
enabled: link4Enabled,
|
|
265
|
+
label: link4Label,
|
|
266
|
+
url: link4Url,
|
|
267
|
+
icon: link4Icon,
|
|
268
|
+
color: link4Color
|
|
269
|
+
},
|
|
270
|
+
{
|
|
271
|
+
enabled: link5Enabled,
|
|
272
|
+
label: link5Label,
|
|
273
|
+
url: link5Url,
|
|
274
|
+
icon: link5Icon,
|
|
275
|
+
color: link5Color
|
|
276
|
+
},
|
|
277
|
+
{
|
|
278
|
+
enabled: link6Enabled,
|
|
279
|
+
label: link6Label,
|
|
280
|
+
url: link6Url,
|
|
281
|
+
icon: link6Icon,
|
|
282
|
+
color: link6Color
|
|
283
|
+
},
|
|
284
|
+
{
|
|
285
|
+
enabled: link7Enabled,
|
|
286
|
+
label: link7Label,
|
|
287
|
+
url: link7Url,
|
|
288
|
+
icon: link7Icon,
|
|
289
|
+
color: link7Color
|
|
290
|
+
},
|
|
291
|
+
{
|
|
292
|
+
enabled: link8Enabled,
|
|
293
|
+
label: link8Label,
|
|
294
|
+
url: link8Url,
|
|
295
|
+
icon: link8Icon,
|
|
296
|
+
color: link8Color
|
|
297
|
+
}
|
|
298
|
+
], links ? parseLegacyLinks(links) : []);
|
|
299
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
300
|
+
className: `@container overflow-hidden rounded-${borderRadius} bg-${backgroundColor} ${require_registries.borderWidthClasses[borderWidth]} ${borderWidth !== "none" ? require_registries.borderColorClasses[borderColor] : ""} ${className ?? ""}`,
|
|
301
|
+
style: { backgroundImage },
|
|
302
|
+
...props,
|
|
303
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
304
|
+
className: `p-${padding} flex flex-col gap-3`,
|
|
305
|
+
children: [titleEnabled && title && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("h2", {
|
|
306
|
+
className: `text-${titleFontSize} leading-tight font-bold tracking-[-0.01em] text-${titleColor}`,
|
|
307
|
+
children: title
|
|
308
|
+
}), parsed.length === 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
309
|
+
className: `text-[13px] text-${textColor}/55`,
|
|
310
|
+
children: "No links configured."
|
|
311
|
+
}) : layout === "cards" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
312
|
+
className: "flex flex-col gap-2",
|
|
313
|
+
children: parsed.map((link, idx) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(LinkRow, {
|
|
314
|
+
link,
|
|
315
|
+
textColor,
|
|
316
|
+
borderRadius,
|
|
317
|
+
openInNewTab,
|
|
318
|
+
showChevron,
|
|
319
|
+
iconRadius,
|
|
320
|
+
layout: "cards",
|
|
321
|
+
isLast: idx === parsed.length - 1
|
|
322
|
+
}, link.id))
|
|
323
|
+
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
324
|
+
className: `flex flex-col overflow-hidden rounded-${borderRadius} bg-${textColor}/5`,
|
|
325
|
+
children: parsed.map((link, idx) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(LinkRow, {
|
|
326
|
+
link,
|
|
327
|
+
textColor,
|
|
328
|
+
borderRadius,
|
|
329
|
+
openInNewTab,
|
|
330
|
+
showChevron,
|
|
331
|
+
iconRadius,
|
|
332
|
+
layout: "list",
|
|
333
|
+
isLast: idx === parsed.length - 1
|
|
334
|
+
}, link.id))
|
|
335
|
+
})]
|
|
336
|
+
})
|
|
337
|
+
});
|
|
338
|
+
}
|
|
339
|
+
const SLOT_DEFAULTS = {
|
|
340
|
+
1: {
|
|
341
|
+
label: "Profile",
|
|
342
|
+
icon: "User",
|
|
343
|
+
color: "primary"
|
|
344
|
+
},
|
|
345
|
+
2: {
|
|
346
|
+
label: "Social",
|
|
347
|
+
icon: "Share2",
|
|
348
|
+
color: "accent"
|
|
349
|
+
},
|
|
350
|
+
3: {
|
|
351
|
+
label: "Product Links",
|
|
352
|
+
icon: "ShoppingBag",
|
|
353
|
+
color: "secondary"
|
|
354
|
+
},
|
|
355
|
+
4: {
|
|
356
|
+
label: "Video",
|
|
357
|
+
icon: "Video",
|
|
358
|
+
color: "destructive"
|
|
359
|
+
}
|
|
360
|
+
};
|
|
361
|
+
function buildLinkSlotFields(slot) {
|
|
362
|
+
const group = `Link ${slot}`;
|
|
363
|
+
const isFirst = slot === 1;
|
|
364
|
+
const defaults = SLOT_DEFAULTS[slot];
|
|
365
|
+
const enabledDefault = slot >= 2 && slot <= 4;
|
|
366
|
+
const requires = isFirst ? void 0 : `link${slot}Enabled`;
|
|
367
|
+
const fields = [];
|
|
368
|
+
if (!isFirst) fields.push({
|
|
369
|
+
key: `link${slot}Enabled`,
|
|
370
|
+
label: `Show Link ${slot}`,
|
|
371
|
+
type: "boolean",
|
|
372
|
+
description: `Display link slot ${slot}`,
|
|
373
|
+
defaultValue: enabledDefault,
|
|
374
|
+
group
|
|
375
|
+
});
|
|
376
|
+
fields.push({
|
|
377
|
+
key: `link${slot}Label`,
|
|
378
|
+
label: "Label",
|
|
379
|
+
type: "text",
|
|
380
|
+
description: "Text shown on the link",
|
|
381
|
+
defaultValue: defaults?.label ?? "",
|
|
382
|
+
group,
|
|
383
|
+
...requires ? { requiresKeyToBeTrue: requires } : {}
|
|
384
|
+
});
|
|
385
|
+
fields.push({
|
|
386
|
+
key: `link${slot}Url`,
|
|
387
|
+
label: "URL",
|
|
388
|
+
type: "text",
|
|
389
|
+
description: "Where the link points (use '#' for a placeholder)",
|
|
390
|
+
defaultValue: "#",
|
|
391
|
+
group,
|
|
392
|
+
...requires ? { requiresKeyToBeTrue: requires } : {}
|
|
393
|
+
});
|
|
394
|
+
fields.push({
|
|
395
|
+
key: `link${slot}Icon`,
|
|
396
|
+
label: "Icon",
|
|
397
|
+
type: "select",
|
|
398
|
+
description: "Icon displayed in the colored badge",
|
|
399
|
+
options: ICON_OPTIONS,
|
|
400
|
+
defaultValue: defaults?.icon ?? "Link",
|
|
401
|
+
group,
|
|
402
|
+
...requires ? { requiresKeyToBeTrue: requires } : {}
|
|
403
|
+
});
|
|
404
|
+
fields.push({
|
|
405
|
+
key: `link${slot}Color`,
|
|
406
|
+
label: "Badge Color",
|
|
407
|
+
type: "colorSelect",
|
|
408
|
+
description: "Color of the icon badge",
|
|
409
|
+
defaultValue: defaults?.color ?? FALLBACK_COLOR_CYCLE[(slot - 1) % FALLBACK_COLOR_CYCLE.length] ?? "primary",
|
|
410
|
+
group,
|
|
411
|
+
...requires ? { requiresKeyToBeTrue: requires } : {}
|
|
412
|
+
});
|
|
413
|
+
return fields;
|
|
414
|
+
}
|
|
415
|
+
const linkSlotFields = Array.from({ length: MAX_LINKS }, (_, i) => buildLinkSlotFields(i + 1)).flat();
|
|
416
|
+
const quickLinksWidgetPropertySchema = {
|
|
417
|
+
widgetType: "QuickLinksWidget",
|
|
418
|
+
displayName: "Quick Links",
|
|
419
|
+
fields: [
|
|
420
|
+
{
|
|
421
|
+
key: "titleEnabled",
|
|
422
|
+
label: "Show Title",
|
|
423
|
+
type: "boolean",
|
|
424
|
+
description: "Small heading shown above the link list",
|
|
425
|
+
defaultValue: true,
|
|
426
|
+
group: "Title"
|
|
427
|
+
},
|
|
428
|
+
{
|
|
429
|
+
key: "title",
|
|
430
|
+
label: "Title",
|
|
431
|
+
type: "text",
|
|
432
|
+
description: "Heading shown above the links",
|
|
433
|
+
defaultValue: "Quick Links",
|
|
434
|
+
group: "Title",
|
|
435
|
+
requiresKeyToBeTrue: "titleEnabled"
|
|
436
|
+
},
|
|
437
|
+
require_registries.getFontSizeField({
|
|
438
|
+
key: "titleFontSize",
|
|
439
|
+
label: "Title Font Size",
|
|
440
|
+
description: "Font size for the widget title",
|
|
441
|
+
defaultValue: "md",
|
|
442
|
+
group: "Title",
|
|
443
|
+
requiresKeyToBeTrue: "titleEnabled"
|
|
444
|
+
}),
|
|
445
|
+
require_registries.getColorField({
|
|
446
|
+
key: "titleColor",
|
|
447
|
+
label: "Title Color",
|
|
448
|
+
description: "Color for the widget title",
|
|
449
|
+
defaultValue: "foreground",
|
|
450
|
+
group: "Title",
|
|
451
|
+
requiresKeyToBeTrue: "titleEnabled"
|
|
452
|
+
}),
|
|
453
|
+
...linkSlotFields,
|
|
454
|
+
{
|
|
455
|
+
key: "layout",
|
|
456
|
+
label: "Layout",
|
|
457
|
+
type: "buttonGroup",
|
|
458
|
+
description: "Cards: separated tiles. List: grouped rows with dividers.",
|
|
459
|
+
defaultValue: "cards",
|
|
460
|
+
options: [{
|
|
461
|
+
label: "Cards",
|
|
462
|
+
value: "cards"
|
|
463
|
+
}, {
|
|
464
|
+
label: "List",
|
|
465
|
+
value: "list"
|
|
466
|
+
}],
|
|
467
|
+
group: "Layout"
|
|
468
|
+
},
|
|
469
|
+
require_registries.getBorderRadiusField({
|
|
470
|
+
key: "iconRadius",
|
|
471
|
+
label: "Icon Corner Radius",
|
|
472
|
+
description: "Corner radius for the colored icon badge",
|
|
473
|
+
defaultValue: "lg",
|
|
474
|
+
group: "Layout"
|
|
475
|
+
}),
|
|
476
|
+
{
|
|
477
|
+
key: "showChevron",
|
|
478
|
+
label: "Show Chevron",
|
|
479
|
+
type: "boolean",
|
|
480
|
+
description: "Right-aligned chevron indicating each row is a link",
|
|
481
|
+
defaultValue: true,
|
|
482
|
+
group: "Layout"
|
|
483
|
+
},
|
|
484
|
+
{
|
|
485
|
+
key: "openInNewTab",
|
|
486
|
+
label: "Open in New Tab",
|
|
487
|
+
type: "boolean",
|
|
488
|
+
description: "Open links in a new tab instead of the same window",
|
|
489
|
+
defaultValue: false,
|
|
490
|
+
group: "Layout"
|
|
491
|
+
},
|
|
492
|
+
{
|
|
493
|
+
type: "background",
|
|
494
|
+
key: "background",
|
|
495
|
+
label: "Background",
|
|
496
|
+
description: "Background for the widget container",
|
|
497
|
+
defaultValue: "background",
|
|
498
|
+
group: "Design"
|
|
499
|
+
},
|
|
500
|
+
require_registries.getColorField({
|
|
501
|
+
key: "textColor",
|
|
502
|
+
label: "Text Color",
|
|
503
|
+
description: "Label + chevron color, and the base for row backgrounds (via opacity)",
|
|
504
|
+
defaultValue: "foreground",
|
|
505
|
+
group: "Design"
|
|
506
|
+
}),
|
|
507
|
+
{
|
|
508
|
+
key: "separator",
|
|
509
|
+
type: "separator",
|
|
510
|
+
label: "Separator",
|
|
511
|
+
group: "Design"
|
|
512
|
+
},
|
|
513
|
+
require_registries.getPaddingField({
|
|
514
|
+
key: "padding",
|
|
515
|
+
label: "Padding",
|
|
516
|
+
description: "Padding around the widget",
|
|
517
|
+
defaultValue: 4,
|
|
518
|
+
group: "Design"
|
|
519
|
+
}),
|
|
520
|
+
require_registries.getBorderRadiusField({
|
|
521
|
+
key: "borderRadius",
|
|
522
|
+
label: "Border Radius",
|
|
523
|
+
description: "Widget border radius (also drives row corners in cards layout)",
|
|
524
|
+
defaultValue: "md",
|
|
525
|
+
group: "Design"
|
|
526
|
+
}),
|
|
527
|
+
require_registries.getBorderWidthField({
|
|
528
|
+
key: "borderWidth",
|
|
529
|
+
label: "Border Width",
|
|
530
|
+
description: "Widget border width",
|
|
531
|
+
defaultValue: "none",
|
|
532
|
+
group: "Design"
|
|
533
|
+
}),
|
|
534
|
+
require_registries.getBorderColorField({
|
|
535
|
+
key: "borderColor",
|
|
536
|
+
label: "Border Color",
|
|
537
|
+
description: "Widget border color",
|
|
538
|
+
defaultValue: "muted",
|
|
539
|
+
group: "Design"
|
|
540
|
+
})
|
|
541
|
+
]
|
|
542
|
+
};
|
|
543
|
+
//#endregion
|
|
544
|
+
Object.defineProperty(exports, "QuickLinksWidget", {
|
|
545
|
+
enumerable: true,
|
|
546
|
+
get: function() {
|
|
547
|
+
return QuickLinksWidget;
|
|
548
|
+
}
|
|
549
|
+
});
|
|
550
|
+
Object.defineProperty(exports, "QuickLinksWidget_exports", {
|
|
551
|
+
enumerable: true,
|
|
552
|
+
get: function() {
|
|
553
|
+
return QuickLinksWidget_exports;
|
|
554
|
+
}
|
|
555
|
+
});
|
|
556
|
+
Object.defineProperty(exports, "quickLinksWidgetPropertySchema", {
|
|
557
|
+
enumerable: true,
|
|
558
|
+
get: function() {
|
|
559
|
+
return quickLinksWidgetPropertySchema;
|
|
560
|
+
}
|
|
561
|
+
});
|
|
562
|
+
|
|
563
|
+
//# sourceMappingURL=QuickLinksWidget-BwEGtrV0.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QuickLinksWidget-BwEGtrV0.cjs","names":["BookmarkIcon","LinkIcon","ChevronRight","borderWidthClasses","borderColorClasses","getFontSizeField","getColorField","getBorderRadiusField","getPaddingField","getBorderWidthField","getBorderColorField"],"sources":["../../widgets/src/widgets/QuickLinksWidget.tsx"],"sourcesContent":["import { type ComponentProps } from \"react\";\nimport type React from \"react\";\nimport type {\n BackgroundValue,\n BorderRadiusOptions,\n BorderWidthOptions,\n ColorOptions,\n FontSizeOptions,\n PaddingOptions,\n} from \"@fluid-app/portal-core/types\";\nimport type {\n PropertyField,\n WidgetPropertySchema,\n} from \"@fluid-app/portal-core/registries\";\nimport {\n getBorderRadiusField,\n getBorderWidthField,\n getBorderColorField,\n getColorField,\n getFontSizeField,\n getPaddingField,\n borderWidthClasses,\n borderColorClasses,\n} from \"../core/fields\";\nimport {\n Bell,\n BookmarkIcon,\n Calendar,\n ChevronRight,\n ExternalLink,\n Gift,\n Globe,\n Heart,\n Link as LinkIcon,\n Mail,\n MapPin,\n MessageCircle,\n Package,\n Phone,\n Play,\n Share2,\n ShoppingBag,\n Sparkles,\n Star,\n Trophy,\n User,\n Video,\n Zap,\n type LucideIcon,\n} from \"lucide-react\";\n\n// ---------- icon registry ----------\n\nconst ICON_MAP: Record<string, LucideIcon> = {\n User,\n Share2,\n ShoppingBag,\n Video,\n Mail,\n MessageCircle,\n Globe,\n Calendar,\n Bell,\n Heart,\n Star,\n Zap,\n Gift,\n Phone,\n MapPin,\n Play,\n Package,\n ExternalLink,\n Bookmark: BookmarkIcon,\n Trophy,\n Sparkles,\n Link: LinkIcon,\n};\n\nconst ICON_OPTIONS: Array<{ label: string; value: string }> = [\n { label: \"Link (default)\", value: \"Link\" },\n { label: \"User / Profile\", value: \"User\" },\n { label: \"Share\", value: \"Share2\" },\n { label: \"Shopping Bag\", value: \"ShoppingBag\" },\n { label: \"Video\", value: \"Video\" },\n { label: \"Mail\", value: \"Mail\" },\n { label: \"Message\", value: \"MessageCircle\" },\n { label: \"Globe\", value: \"Globe\" },\n { label: \"Calendar\", value: \"Calendar\" },\n { label: \"Bell / Notifications\", value: \"Bell\" },\n { label: \"Heart\", value: \"Heart\" },\n { label: \"Star\", value: \"Star\" },\n { label: \"Zap / Lightning\", value: \"Zap\" },\n { label: \"Gift\", value: \"Gift\" },\n { label: \"Phone\", value: \"Phone\" },\n { label: \"Map Pin\", value: \"MapPin\" },\n { label: \"Play\", value: \"Play\" },\n { label: \"Package\", value: \"Package\" },\n { label: \"External Link\", value: \"ExternalLink\" },\n { label: \"Bookmark\", value: \"Bookmark\" },\n { label: \"Trophy\", value: \"Trophy\" },\n { label: \"Sparkles\", value: \"Sparkles\" },\n];\n\nconst capitalize = (s: string): string =>\n s ? s.charAt(0).toUpperCase() + s.slice(1) : s;\n\nconst getIcon = (name: string | undefined): LucideIcon => {\n if (!name) return LinkIcon;\n return ICON_MAP[name] ?? ICON_MAP[capitalize(name)] ?? LinkIcon;\n};\n\n// ---------- link parsing / collection ----------\n\ntype ParsedLink = {\n id: string;\n label: string;\n url: string;\n iconName: string;\n iconColor: ColorOptions;\n};\n\nconst isColorOption = (value: string): value is ColorOptions =>\n [\n \"background\",\n \"foreground\",\n \"primary\",\n \"secondary\",\n \"accent\",\n \"muted\",\n \"destructive\",\n ].includes(value);\n\nconst FALLBACK_COLOR_CYCLE: ColorOptions[] = [\n \"primary\",\n \"accent\",\n \"secondary\",\n \"destructive\",\n];\n\n// Legacy format per line: \"Label | URL | IconName | ColorOption\"\n// Kept for backwards compatibility with existing saved configs.\nconst parseLegacyLinks = (raw: string[] | string): ParsedLink[] => {\n const lines = Array.isArray(raw) ? raw : raw.split(/\\r?\\n/).filter(Boolean);\n return lines\n .map((line, index) => {\n const parts = line.split(\"|\").map((s) => s.trim());\n const label = parts[0] ?? \"\";\n if (!label) return null;\n const url = parts[1] ?? \"#\";\n const iconName = parts[2] && parts[2].length > 0 ? parts[2] : \"Link\";\n const colorCandidate = parts[3];\n const iconColor: ColorOptions =\n colorCandidate && isColorOption(colorCandidate)\n ? colorCandidate\n : (FALLBACK_COLOR_CYCLE[index % FALLBACK_COLOR_CYCLE.length] ??\n \"primary\");\n return {\n id: `link-${index}`,\n label,\n url,\n iconName,\n iconColor,\n };\n })\n .filter((x): x is ParsedLink => x !== null);\n};\n\n// New structured format — gather links from individual link{n}* props\nconst MAX_LINKS = 8;\n\ntype SlotProps = {\n enabled: boolean;\n label: string | undefined;\n url: string | undefined;\n icon: string | undefined;\n color: ColorOptions | undefined;\n};\n\n// Per-slot merge of structured props with the legacy `links` array. A slot\n// is \"structurally configured\" when at least one of its content props\n// (label / url / icon / color) is explicitly set; in that case structured\n// props win and the slot's `enabled` flag is honored. Slots that haven't\n// been structurally touched fall back to the legacy entry at the same\n// index — so editing one slot in a legacy-format widget doesn't silently\n// drop URLs/icons/colors for the other slots.\nconst resolveLinks = (\n slots: SlotProps[],\n legacy: ParsedLink[],\n): ParsedLink[] => {\n return slots\n .map((slot, index): ParsedLink | null => {\n const legacyEntry = legacy[index];\n\n const hasStructured =\n slot.label !== undefined ||\n slot.url !== undefined ||\n slot.icon !== undefined ||\n slot.color !== undefined;\n\n if (hasStructured) {\n // Slot 1 is always enabled; slots 2+ need enabled=true.\n const isSlotActive = index === 0 || slot.enabled;\n if (!isSlotActive) return null;\n\n const label = (slot.label ?? legacyEntry?.label ?? \"\").trim();\n if (!label) return null;\n\n const url =\n slot.url && slot.url.length > 0\n ? slot.url\n : (legacyEntry?.url ?? \"#\");\n const iconName =\n slot.icon && slot.icon.length > 0\n ? slot.icon\n : (legacyEntry?.iconName ?? \"Link\");\n const iconColor: ColorOptions =\n slot.color ??\n legacyEntry?.iconColor ??\n FALLBACK_COLOR_CYCLE[index % FALLBACK_COLOR_CYCLE.length] ??\n \"primary\";\n\n return {\n id: `link-${index}`,\n label,\n url,\n iconName,\n iconColor,\n };\n }\n\n // No structured props for this slot — use the legacy entry as-is.\n // Legacy widgets predate the per-slot `enabled` toggle, so we don't\n // gate legacy entries on it (otherwise legacy slots 5+ would vanish\n // because their `linkNEnabled` defaults to `false`).\n return legacyEntry ?? null;\n })\n .filter((x): x is ParsedLink => x !== null);\n};\n\n// ---------- link row ----------\n\ntype LinkRowProps = {\n link: ParsedLink;\n textColor: ColorOptions;\n borderRadius: BorderRadiusOptions;\n openInNewTab: boolean;\n showChevron: boolean;\n iconRadius: BorderRadiusOptions;\n layout: \"cards\" | \"list\";\n isLast: boolean;\n};\n\nfunction LinkRow({\n link,\n textColor,\n borderRadius,\n openInNewTab,\n showChevron,\n iconRadius,\n layout,\n isLast,\n}: LinkRowProps) {\n const Icon = getIcon(link.iconName);\n\n const wrapperBase = `group relative flex items-center gap-3 py-3 transition-all duration-200`;\n const wrapperCardClasses = `rounded-${borderRadius} px-3 bg-${textColor}/5 hover:bg-${textColor}/10 hover:-translate-y-0.5`;\n const wrapperListClasses = `px-0 hover:bg-${textColor}/5 rounded-md`;\n\n const wrapperClasses =\n layout === \"cards\"\n ? `${wrapperBase} ${wrapperCardClasses}`\n : `${wrapperBase} ${wrapperListClasses}`;\n\n const content = (\n <>\n {/* Icon badge — colored gradient square with white icon centered */}\n <span\n aria-hidden=\"true\"\n className={`relative flex size-10 shrink-0 items-center justify-center rounded-${iconRadius} text-${link.iconColor}-foreground`}\n style={{\n background: `linear-gradient(135deg, color-mix(in oklch, var(--color-${link.iconColor}) 75%, white 25%) 0%, var(--color-${link.iconColor}) 100%)`,\n boxShadow: `\n inset 0 1px 0 rgba(255,255,255,0.25),\n inset 0 -1px 0 rgba(0,0,0,0.1),\n 0 1px 2px color-mix(in oklch, var(--color-${link.iconColor}) 30%, transparent)\n `,\n }}\n >\n <Icon className=\"size-5\" strokeWidth={2.25} />\n </span>\n\n {/* Label */}\n <span\n className={`min-w-0 flex-1 truncate text-[15px] font-bold tracking-[-0.01em] text-${textColor}`}\n >\n {link.label}\n </span>\n\n {/* Chevron */}\n {showChevron && (\n <ChevronRight\n aria-hidden=\"true\"\n className={`size-4 shrink-0 text-${textColor}/35 transition-transform duration-200 group-hover:translate-x-0.5 group-hover:text-${textColor}/60`}\n />\n )}\n </>\n );\n\n const separator =\n layout === \"list\" && !isLast ? (\n <div\n aria-hidden=\"true\"\n className=\"ml-[52px]\"\n style={{\n borderBottom: `1px solid color-mix(in oklch, var(--color-${textColor}) 8%, transparent)`,\n }}\n />\n ) : null;\n\n const href = link.url && link.url !== \"#\" ? link.url : undefined;\n\n if (href) {\n return (\n <>\n <a\n href={href}\n target={openInNewTab ? \"_blank\" : undefined}\n rel={openInNewTab ? \"noopener noreferrer\" : undefined}\n className={wrapperClasses}\n >\n {content}\n </a>\n {separator}\n </>\n );\n }\n\n return (\n <>\n <div className={wrapperClasses}>{content}</div>\n {separator}\n </>\n );\n}\n\n// ---------- widget ----------\n\ntype QuickLinksWidgetProps = ComponentProps<\"div\"> & {\n // Title\n titleEnabled?: boolean;\n title?: string;\n titleFontSize?: FontSizeOptions;\n titleColor?: ColorOptions;\n\n // Links — new structured per-slot props\n link1Label?: string;\n link1Url?: string;\n link1Icon?: string;\n link1Color?: ColorOptions;\n link2Enabled?: boolean;\n link2Label?: string;\n link2Url?: string;\n link2Icon?: string;\n link2Color?: ColorOptions;\n link3Enabled?: boolean;\n link3Label?: string;\n link3Url?: string;\n link3Icon?: string;\n link3Color?: ColorOptions;\n link4Enabled?: boolean;\n link4Label?: string;\n link4Url?: string;\n link4Icon?: string;\n link4Color?: ColorOptions;\n link5Enabled?: boolean;\n link5Label?: string;\n link5Url?: string;\n link5Icon?: string;\n link5Color?: ColorOptions;\n link6Enabled?: boolean;\n link6Label?: string;\n link6Url?: string;\n link6Icon?: string;\n link6Color?: ColorOptions;\n link7Enabled?: boolean;\n link7Label?: string;\n link7Url?: string;\n link7Icon?: string;\n link7Color?: ColorOptions;\n link8Enabled?: boolean;\n link8Label?: string;\n link8Url?: string;\n link8Icon?: string;\n link8Color?: ColorOptions;\n\n // Legacy — still accepted for backwards compatibility\n links?: string[] | string;\n\n // Layout\n layout?: \"cards\" | \"list\";\n iconRadius?: BorderRadiusOptions;\n showChevron?: boolean;\n openInNewTab?: boolean;\n\n // Design\n background?: BackgroundValue;\n textColor?: ColorOptions;\n padding?: PaddingOptions;\n borderRadius?: BorderRadiusOptions;\n borderWidth?: BorderWidthOptions;\n borderColor?: ColorOptions;\n};\n\nexport function QuickLinksWidget({\n titleEnabled = true,\n title = \"Quick Links\",\n titleFontSize = \"md\",\n titleColor = \"foreground\",\n\n link1Label,\n link1Url,\n link1Icon,\n link1Color,\n link2Enabled = true,\n link2Label,\n link2Url,\n link2Icon,\n link2Color,\n link3Enabled = true,\n link3Label,\n link3Url,\n link3Icon,\n link3Color,\n link4Enabled = true,\n link4Label,\n link4Url,\n link4Icon,\n link4Color,\n link5Enabled = false,\n link5Label,\n link5Url,\n link5Icon,\n link5Color,\n link6Enabled = false,\n link6Label,\n link6Url,\n link6Icon,\n link6Color,\n link7Enabled = false,\n link7Label,\n link7Url,\n link7Icon,\n link7Color,\n link8Enabled = false,\n link8Label,\n link8Url,\n link8Icon,\n link8Color,\n\n links,\n\n layout = \"cards\",\n iconRadius = \"lg\",\n showChevron = true,\n openInNewTab = false,\n\n background = { type: \"solid\", color: \"background\" },\n textColor = \"foreground\",\n padding = 4,\n borderRadius = \"md\",\n borderWidth = \"none\",\n borderColor = \"muted\",\n\n className,\n ...props\n}: QuickLinksWidgetProps): React.JSX.Element {\n const backgroundColor = background.color || \"background\";\n const backgroundImage =\n (background.resource?.image_url || background.resource?.imageUrl) &&\n background.type === \"image\"\n ? `url(${background.resource.image_url || background.resource.imageUrl})`\n : \"none\";\n\n // Pass props through verbatim — schema `defaultValue`s pre-populate the\n // builder, so the component shouldn't second-guess with hardcoded\n // fallbacks (which would mask a user's explicit blank label).\n const slots: SlotProps[] = [\n {\n enabled: true,\n label: link1Label,\n url: link1Url,\n icon: link1Icon,\n color: link1Color,\n },\n {\n enabled: link2Enabled,\n label: link2Label,\n url: link2Url,\n icon: link2Icon,\n color: link2Color,\n },\n {\n enabled: link3Enabled,\n label: link3Label,\n url: link3Url,\n icon: link3Icon,\n color: link3Color,\n },\n {\n enabled: link4Enabled,\n label: link4Label,\n url: link4Url,\n icon: link4Icon,\n color: link4Color,\n },\n {\n enabled: link5Enabled,\n label: link5Label,\n url: link5Url,\n icon: link5Icon,\n color: link5Color,\n },\n {\n enabled: link6Enabled,\n label: link6Label,\n url: link6Url,\n icon: link6Icon,\n color: link6Color,\n },\n {\n enabled: link7Enabled,\n label: link7Label,\n url: link7Url,\n icon: link7Icon,\n color: link7Color,\n },\n {\n enabled: link8Enabled,\n label: link8Label,\n url: link8Url,\n icon: link8Icon,\n color: link8Color,\n },\n ];\n\n const legacyLinks: ParsedLink[] = links ? parseLegacyLinks(links) : [];\n const parsed: ParsedLink[] = resolveLinks(slots, legacyLinks);\n\n return (\n <div\n className={`@container overflow-hidden rounded-${borderRadius} bg-${backgroundColor} ${borderWidthClasses[borderWidth]} ${borderWidth !== \"none\" ? borderColorClasses[borderColor] : \"\"} ${className ?? \"\"}`}\n style={{ backgroundImage }}\n {...props}\n >\n <div className={`p-${padding} flex flex-col gap-3`}>\n {titleEnabled && title && (\n <h2\n className={`text-${titleFontSize} leading-tight font-bold tracking-[-0.01em] text-${titleColor}`}\n >\n {title}\n </h2>\n )}\n\n {parsed.length === 0 ? (\n <p className={`text-[13px] text-${textColor}/55`}>\n No links configured.\n </p>\n ) : layout === \"cards\" ? (\n <div className=\"flex flex-col gap-2\">\n {parsed.map((link, idx) => (\n <LinkRow\n key={link.id}\n link={link}\n textColor={textColor}\n borderRadius={borderRadius}\n openInNewTab={openInNewTab}\n showChevron={showChevron}\n iconRadius={iconRadius}\n layout=\"cards\"\n isLast={idx === parsed.length - 1}\n />\n ))}\n </div>\n ) : (\n <div\n className={`flex flex-col overflow-hidden rounded-${borderRadius} bg-${textColor}/5`}\n >\n {parsed.map((link, idx) => (\n <LinkRow\n key={link.id}\n link={link}\n textColor={textColor}\n borderRadius={borderRadius}\n openInNewTab={openInNewTab}\n showChevron={showChevron}\n iconRadius={iconRadius}\n layout=\"list\"\n isLast={idx === parsed.length - 1}\n />\n ))}\n </div>\n )}\n </div>\n </div>\n );\n}\n\n// ---------- schema helpers ----------\n\ntype SlotDefaults = {\n label: string;\n icon: string;\n color: ColorOptions;\n};\n\nconst SLOT_DEFAULTS: Record<number, SlotDefaults | undefined> = {\n 1: { label: \"Profile\", icon: \"User\", color: \"primary\" },\n 2: { label: \"Social\", icon: \"Share2\", color: \"accent\" },\n 3: { label: \"Product Links\", icon: \"ShoppingBag\", color: \"secondary\" },\n 4: { label: \"Video\", icon: \"Video\", color: \"destructive\" },\n};\n\nfunction buildLinkSlotFields(slot: number): PropertyField[] {\n const group = `Link ${slot}`;\n const isFirst = slot === 1;\n const defaults = SLOT_DEFAULTS[slot];\n // Enable slots 2-4 by default to match the previous widget behavior.\n const enabledDefault = slot >= 2 && slot <= 4;\n const requires = isFirst ? undefined : `link${slot}Enabled`;\n\n const fields: PropertyField[] = [];\n\n if (!isFirst) {\n fields.push({\n key: `link${slot}Enabled`,\n label: `Show Link ${slot}`,\n type: \"boolean\",\n description: `Display link slot ${slot}`,\n defaultValue: enabledDefault,\n group,\n });\n }\n\n fields.push({\n key: `link${slot}Label`,\n label: \"Label\",\n type: \"text\",\n description: \"Text shown on the link\",\n defaultValue: defaults?.label ?? \"\",\n group,\n ...(requires ? { requiresKeyToBeTrue: requires } : {}),\n });\n\n fields.push({\n key: `link${slot}Url`,\n label: \"URL\",\n type: \"text\",\n description: \"Where the link points (use '#' for a placeholder)\",\n defaultValue: \"#\",\n group,\n ...(requires ? { requiresKeyToBeTrue: requires } : {}),\n });\n\n fields.push({\n key: `link${slot}Icon`,\n label: \"Icon\",\n type: \"select\",\n description: \"Icon displayed in the colored badge\",\n options: ICON_OPTIONS,\n defaultValue: defaults?.icon ?? \"Link\",\n group,\n ...(requires ? { requiresKeyToBeTrue: requires } : {}),\n });\n\n fields.push({\n key: `link${slot}Color`,\n label: \"Badge Color\",\n type: \"colorSelect\",\n description: \"Color of the icon badge\",\n defaultValue:\n defaults?.color ??\n FALLBACK_COLOR_CYCLE[(slot - 1) % FALLBACK_COLOR_CYCLE.length] ??\n \"primary\",\n group,\n ...(requires ? { requiresKeyToBeTrue: requires } : {}),\n });\n\n return fields;\n}\n\nconst linkSlotFields: PropertyField[] = Array.from(\n { length: MAX_LINKS },\n (_, i) => buildLinkSlotFields(i + 1),\n).flat();\n\n// ---------- schema ----------\n\nexport const quickLinksWidgetPropertySchema: WidgetPropertySchema = {\n widgetType: \"QuickLinksWidget\",\n displayName: \"Quick Links\",\n fields: [\n // Title group\n {\n key: \"titleEnabled\",\n label: \"Show Title\",\n type: \"boolean\",\n description: \"Small heading shown above the link list\",\n defaultValue: true,\n group: \"Title\",\n },\n {\n key: \"title\",\n label: \"Title\",\n type: \"text\",\n description: \"Heading shown above the links\",\n defaultValue: \"Quick Links\",\n group: \"Title\",\n requiresKeyToBeTrue: \"titleEnabled\",\n },\n getFontSizeField({\n key: \"titleFontSize\",\n label: \"Title Font Size\",\n description: \"Font size for the widget title\",\n defaultValue: \"md\",\n group: \"Title\",\n requiresKeyToBeTrue: \"titleEnabled\",\n }),\n getColorField({\n key: \"titleColor\",\n label: \"Title Color\",\n description: \"Color for the widget title\",\n defaultValue: \"foreground\",\n group: \"Title\",\n requiresKeyToBeTrue: \"titleEnabled\",\n }),\n\n // Links — 8 structured slots\n ...linkSlotFields,\n\n // Layout group\n {\n key: \"layout\",\n label: \"Layout\",\n type: \"buttonGroup\",\n description: \"Cards: separated tiles. List: grouped rows with dividers.\",\n defaultValue: \"cards\",\n options: [\n { label: \"Cards\", value: \"cards\" },\n { label: \"List\", value: \"list\" },\n ],\n group: \"Layout\",\n },\n getBorderRadiusField({\n key: \"iconRadius\",\n label: \"Icon Corner Radius\",\n description: \"Corner radius for the colored icon badge\",\n defaultValue: \"lg\",\n group: \"Layout\",\n }),\n {\n key: \"showChevron\",\n label: \"Show Chevron\",\n type: \"boolean\",\n description: \"Right-aligned chevron indicating each row is a link\",\n defaultValue: true,\n group: \"Layout\",\n },\n {\n key: \"openInNewTab\",\n label: \"Open in New Tab\",\n type: \"boolean\",\n description: \"Open links in a new tab instead of the same window\",\n defaultValue: false,\n group: \"Layout\",\n },\n\n // Design group\n {\n type: \"background\",\n key: \"background\",\n label: \"Background\",\n description: \"Background for the widget container\",\n defaultValue: \"background\",\n group: \"Design\",\n },\n getColorField({\n key: \"textColor\",\n label: \"Text Color\",\n description:\n \"Label + chevron color, and the base for row backgrounds (via opacity)\",\n defaultValue: \"foreground\",\n group: \"Design\",\n }),\n {\n key: \"separator\",\n type: \"separator\",\n label: \"Separator\",\n group: \"Design\",\n },\n getPaddingField({\n key: \"padding\",\n label: \"Padding\",\n description: \"Padding around the widget\",\n defaultValue: 4,\n group: \"Design\",\n }),\n getBorderRadiusField({\n key: \"borderRadius\",\n label: \"Border Radius\",\n description:\n \"Widget border radius (also drives row corners in cards layout)\",\n defaultValue: \"md\",\n group: \"Design\",\n }),\n getBorderWidthField({\n key: \"borderWidth\",\n label: \"Border Width\",\n description: \"Widget border width\",\n defaultValue: \"none\",\n group: \"Design\",\n }),\n getBorderColorField({\n key: \"borderColor\",\n label: \"Border Color\",\n description: \"Widget border color\",\n defaultValue: \"muted\",\n group: \"Design\",\n }),\n ],\n} as const satisfies WidgetPropertySchema;\n"],"mappings":"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BAAA,GAAA,kBAAA,MAAA,kBAAA,UAAA,EAAA,UAAA,CACE,iBAAA,GAAA,kBAAA,KAAC,OAAD;EAAK,WAAW;YAAiB;EAAc,CAAA,EAC9C,UACA,EAAA,CAAA;;AAwEP,SAAgB,iBAAiB,EAC/B,eAAe,MACf,QAAQ,eACR,gBAAgB,MAChB,aAAa,cAEb,YACA,UACA,WACA,YACA,eAAe,MACf,YACA,UACA,WACA,YACA,eAAe,MACf,YACA,UACA,WACA,YACA,eAAe,MACf,YACA,UACA,WACA,YACA,eAAe,OACf,YACA,UACA,WACA,YACA,eAAe,OACf,YACA,UACA,WACA,YACA,eAAe,OACf,YACA,UACA,WACA,YACA,eAAe,OACf,YACA,UACA,WACA,YAEA,OAEA,SAAS,SACT,aAAa,MACb,cAAc,MACd,eAAe,OAEf,aAAa;CAAE,MAAM;CAAS,OAAO;CAAc,EACnD,YAAY,cACZ,UAAU,GACV,eAAe,MACf,cAAc,QACd,cAAc,SAEd,WACA,GAAG,SACwC;CAC3C,MAAM,kBAAkB,WAAW,SAAS;CAC5C,MAAM,mBACH,WAAW,UAAU,aAAa,WAAW,UAAU,aACxD,WAAW,SAAS,UAChB,OAAO,WAAW,SAAS,aAAa,WAAW,SAAS,SAAS,KACrE;CAiEN,MAAM,SAAuB,aA5DF;EACzB;GACE,SAAS;GACT,OAAO;GACP,KAAK;GACL,MAAM;GACN,OAAO;GACR;EACD;GACE,SAAS;GACT,OAAO;GACP,KAAK;GACL,MAAM;GACN,OAAO;GACR;EACD;GACE,SAAS;GACT,OAAO;GACP,KAAK;GACL,MAAM;GACN,OAAO;GACR;EACD;GACE,SAAS;GACT,OAAO;GACP,KAAK;GACL,MAAM;GACN,OAAO;GACR;EACD;GACE,SAAS;GACT,OAAO;GACP,KAAK;GACL,MAAM;GACN,OAAO;GACR;EACD;GACE,SAAS;GACT,OAAO;GACP,KAAK;GACL,MAAM;GACN,OAAO;GACR;EACD;GACE,SAAS;GACT,OAAO;GACP,KAAK;GACL,MAAM;GACN,OAAO;GACR;EACD;GACE,SAAS;GACT,OAAO;GACP,KAAK;GACL,MAAM;GACN,OAAO;G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"}
|