@fluid-app/portal-sdk 0.1.57 → 0.1.59

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 (94) hide show
  1. package/dist/{AppDownloadScreen-COuwjUfa.mjs → AppDownloadScreen-B-4Om2j8.mjs} +2 -2
  2. package/dist/{AppDownloadScreen-COuwjUfa.mjs.map → AppDownloadScreen-B-4Om2j8.mjs.map} +1 -1
  3. package/dist/{AppDownloadScreen-yDs-QtRS.cjs → AppDownloadScreen-B_SwkDDi.cjs} +2 -2
  4. package/dist/{AppDownloadScreen-yDs-QtRS.cjs.map → AppDownloadScreen-B_SwkDDi.cjs.map} +1 -1
  5. package/dist/{AppDownloadScreen-DMTYrxWg.mjs → AppDownloadScreen-Dw7DyU92.mjs} +3 -3
  6. package/dist/{AppDownloadScreen-B3e3QH3E.cjs → AppDownloadScreen-NJI_UTLu.cjs} +3 -3
  7. package/dist/{ContactsScreen-EaQc1fQf.cjs → ContactsScreen-BHnAPB1v.cjs} +2 -2
  8. package/dist/{ContactsScreen-EaQc1fQf.cjs.map → ContactsScreen-BHnAPB1v.cjs.map} +1 -1
  9. package/dist/{ContactsScreen-U_UzEe8A.mjs → ContactsScreen-BSaedR34.mjs} +3 -3
  10. package/dist/{ContactsScreen-BocpRIYk.cjs → ContactsScreen-C8510XHQ.cjs} +3 -3
  11. package/dist/{ContactsScreen-1q6YYzXK.mjs → ContactsScreen-Dcx-CUNk.mjs} +2 -2
  12. package/dist/{ContactsScreen-1q6YYzXK.mjs.map → ContactsScreen-Dcx-CUNk.mjs.map} +1 -1
  13. package/dist/{FluidProvider-DDcsxdbL.cjs → FluidProvider-BcMVqXGW.cjs} +3 -3
  14. package/dist/{FluidProvider-DDcsxdbL.cjs.map → FluidProvider-BcMVqXGW.cjs.map} +1 -1
  15. package/dist/{FluidProvider-uMkUIfAA.mjs → FluidProvider-NsdWcsos.mjs} +3 -3
  16. package/dist/{FluidProvider-uMkUIfAA.mjs.map → FluidProvider-NsdWcsos.mjs.map} +1 -1
  17. package/dist/{LinkWidget-CtcSfgWD.cjs → LinkWidget-Bvw5OZwU.cjs} +11 -3
  18. package/dist/LinkWidget-Bvw5OZwU.cjs.map +1 -0
  19. package/dist/{LinkWidget-CUHpx9wn.mjs → LinkWidget-dwIVKZD0.mjs} +11 -3
  20. package/dist/LinkWidget-dwIVKZD0.mjs.map +1 -0
  21. package/dist/{LinkWidget-C_YI8H_X.cjs → LinkWidget-hhWO8yWC.cjs} +1 -1
  22. package/dist/{MessagingScreen-B8gg5qJi.cjs → MessagingScreen-BUC6-xNT.cjs} +3 -3
  23. package/dist/{MessagingScreen-DCrqjweY.mjs → MessagingScreen-CGvz_4UM.mjs} +3 -3
  24. package/dist/{MessagingScreen-DCrqjweY.mjs.map → MessagingScreen-CGvz_4UM.mjs.map} +1 -1
  25. package/dist/{MessagingScreen-CFv3DZlx.mjs → MessagingScreen-CMx7NBXH.mjs} +3 -3
  26. package/dist/{MessagingScreen-BQWcyDp7.cjs → MessagingScreen-XSXGBuM5.cjs} +3 -3
  27. package/dist/{MessagingScreen-BQWcyDp7.cjs.map → MessagingScreen-XSXGBuM5.cjs.map} +1 -1
  28. package/dist/{MySiteScreen-BQDG1MIf.cjs → MySiteScreen-6qkt1-AM.cjs} +3 -3
  29. package/dist/{MySiteScreen-BWE6kZNh.mjs → MySiteScreen-BYhZIZth.mjs} +2 -2
  30. package/dist/{MySiteScreen-BWE6kZNh.mjs.map → MySiteScreen-BYhZIZth.mjs.map} +1 -1
  31. package/dist/{MySiteScreen-CMbbIem9.mjs → MySiteScreen-CJaXSfvP.mjs} +3 -3
  32. package/dist/{MySiteScreen-Dq34cH33.cjs → MySiteScreen-armH7ZmU.cjs} +2 -2
  33. package/dist/{MySiteScreen-Dq34cH33.cjs.map → MySiteScreen-armH7ZmU.cjs.map} +1 -1
  34. package/dist/{OrdersScreen-DkMmE8c3.mjs → OrdersScreen-36U1k66t.mjs} +3 -3
  35. package/dist/{OrdersScreen-DkMmE8c3.mjs.map → OrdersScreen-36U1k66t.mjs.map} +1 -1
  36. package/dist/{OrdersScreen-DFIm1noJ.cjs → OrdersScreen-CKfSGMRB.cjs} +3 -3
  37. package/dist/{OrdersScreen-DvtDjt3L.cjs → OrdersScreen-D5qbccVE.cjs} +3 -3
  38. package/dist/{OrdersScreen-DvtDjt3L.cjs.map → OrdersScreen-D5qbccVE.cjs.map} +1 -1
  39. package/dist/{OrdersScreen-Bez4E8IX.mjs → OrdersScreen-cBlQv9h0.mjs} +3 -3
  40. package/dist/{ProductsScreen-DO54qQyx.cjs → ProductsScreen-D1TMPOpi.cjs} +3 -3
  41. package/dist/{ProductsScreen-DO54qQyx.cjs.map → ProductsScreen-D1TMPOpi.cjs.map} +1 -1
  42. package/dist/{ProductsScreen-CnywvrZt.mjs → ProductsScreen-DLysCJ9C.mjs} +3 -3
  43. package/dist/{ProductsScreen-BFsfS9XW.cjs → ProductsScreen-Y3MJJSeK.cjs} +3 -3
  44. package/dist/{ProductsScreen-CNnlXg_I.mjs → ProductsScreen-i6JTXwNY.mjs} +3 -3
  45. package/dist/{ProductsScreen-CNnlXg_I.mjs.map → ProductsScreen-i6JTXwNY.mjs.map} +1 -1
  46. package/dist/{ProfileScreen-D5_7MMej.cjs → ProfileScreen-BGOd1zyN.cjs} +3 -3
  47. package/dist/{ProfileScreen-D5_7MMej.cjs.map → ProfileScreen-BGOd1zyN.cjs.map} +1 -1
  48. package/dist/{ProfileScreen-8nnWzPcP.mjs → ProfileScreen-CFSEMg7L.mjs} +3 -3
  49. package/dist/{ProfileScreen-B6SwwR14.cjs → ProfileScreen-DARnojGI.cjs} +3 -3
  50. package/dist/{ProfileScreen-D4x5J95V.mjs → ProfileScreen-DOGhmpk-.mjs} +3 -3
  51. package/dist/{ProfileScreen-D4x5J95V.mjs.map → ProfileScreen-DOGhmpk-.mjs.map} +1 -1
  52. package/dist/{ShareablesScreen-CH9044d8.cjs → ShareablesScreen-C0OVGZ07.cjs} +3 -3
  53. package/dist/{ShareablesScreen-CH9044d8.cjs.map → ShareablesScreen-C0OVGZ07.cjs.map} +1 -1
  54. package/dist/{ShareablesScreen-vrbI04Hy.cjs → ShareablesScreen-CbcwPnLx.cjs} +3 -3
  55. package/dist/{ShareablesScreen-2smGe_qj.mjs → ShareablesScreen-Clf0Z7vk.mjs} +3 -3
  56. package/dist/{ShareablesScreen-DfGkgR72.mjs → ShareablesScreen-i1KpJcwV.mjs} +3 -3
  57. package/dist/{ShareablesScreen-DfGkgR72.mjs.map → ShareablesScreen-i1KpJcwV.mjs.map} +1 -1
  58. package/dist/{ShopScreen-DwtVHSml.mjs → ShopScreen-1HiWn8Hg.mjs} +4 -4
  59. package/dist/{ShopScreen-DwtVHSml.mjs.map → ShopScreen-1HiWn8Hg.mjs.map} +1 -1
  60. package/dist/{ShopScreen-CrbD5rZR.cjs → ShopScreen-ClGySVDF.cjs} +4 -4
  61. package/dist/{ShopScreen-CrbD5rZR.cjs.map → ShopScreen-ClGySVDF.cjs.map} +1 -1
  62. package/dist/{ShopScreen-CHvoeAxg.cjs → ShopScreen-DE1qzYW6.cjs} +3 -3
  63. package/dist/{ShopScreen-CJY1sx1J.mjs → ShopScreen-Kq0LKtBN.mjs} +3 -3
  64. package/dist/{SubscriptionsScreen-BmtUMKkL.mjs → SubscriptionsScreen-4DRQtr5m.mjs} +3 -3
  65. package/dist/{SubscriptionsScreen-vcSqCDso.cjs → SubscriptionsScreen-CPicMEVG.cjs} +3 -3
  66. package/dist/{SubscriptionsScreen-vcSqCDso.cjs.map → SubscriptionsScreen-CPicMEVG.cjs.map} +1 -1
  67. package/dist/{SubscriptionsScreen-BMVXP9cv.cjs → SubscriptionsScreen-CluHNO3J.cjs} +3 -3
  68. package/dist/{SubscriptionsScreen-5NaNwpQ1.mjs → SubscriptionsScreen-D-pb9t7Z.mjs} +3 -3
  69. package/dist/{SubscriptionsScreen-5NaNwpQ1.mjs.map → SubscriptionsScreen-D-pb9t7Z.mjs.map} +1 -1
  70. package/dist/index.cjs +35 -35
  71. package/dist/index.d.cts +2 -0
  72. package/dist/index.d.cts.map +1 -1
  73. package/dist/index.d.mts +2 -0
  74. package/dist/index.d.mts.map +1 -1
  75. package/dist/index.mjs +35 -35
  76. package/dist/{use-account-clients-yghkzBH9.mjs → use-account-clients-BNdnotPF.mjs} +2 -2
  77. package/dist/{use-account-clients-yghkzBH9.mjs.map → use-account-clients-BNdnotPF.mjs.map} +1 -1
  78. package/dist/{use-account-clients-vZftsKdf.cjs → use-account-clients-BcfCVnN1.cjs} +2 -2
  79. package/dist/{use-account-clients-vZftsKdf.cjs.map → use-account-clients-BcfCVnN1.cjs.map} +1 -1
  80. package/dist/{use-current-user-D_gOoHWA.mjs → use-current-user-BR36V_-x.mjs} +3 -3
  81. package/dist/{use-current-user-D_gOoHWA.mjs.map → use-current-user-BR36V_-x.mjs.map} +1 -1
  82. package/dist/{use-current-user-437rXIp0.cjs → use-current-user-C5ye4E_t.cjs} +3 -3
  83. package/dist/{use-current-user-437rXIp0.cjs.map → use-current-user-C5ye4E_t.cjs.map} +1 -1
  84. package/dist/{use-customer-account-BRdjIAmX.cjs → use-customer-account-BUcZbQG8.cjs} +3 -3
  85. package/dist/{use-customer-account-BRdjIAmX.cjs.map → use-customer-account-BUcZbQG8.cjs.map} +1 -1
  86. package/dist/{use-customer-account-CgmmbLJd.mjs → use-customer-account-CBRukk1K.mjs} +3 -3
  87. package/dist/{use-customer-account-CgmmbLJd.mjs.map → use-customer-account-CBRukk1K.mjs.map} +1 -1
  88. package/dist/{use-fluid-api-BA3oc4fz.mjs → use-fluid-api-ByXKmAb3.mjs} +2 -2
  89. package/dist/{use-fluid-api-BA3oc4fz.mjs.map → use-fluid-api-ByXKmAb3.mjs.map} +1 -1
  90. package/dist/{use-fluid-api-varGfwt1.cjs → use-fluid-api-Cp5NpYvl.cjs} +2 -2
  91. package/dist/{use-fluid-api-varGfwt1.cjs.map → use-fluid-api-Cp5NpYvl.cjs.map} +1 -1
  92. package/package.json +15 -15
  93. package/dist/LinkWidget-CUHpx9wn.mjs.map +0 -1
  94. package/dist/LinkWidget-CtcSfgWD.cjs.map +0 -1
@@ -46,7 +46,7 @@ const alignmentClasses = {
46
46
  center: "justify-center",
47
47
  right: "justify-end"
48
48
  };
49
- function LinkWidget({ text = "Click Here", linkType = "url", href = "", openInNewTab = true, screenSlug, shareSource, shareResource, shareUrl, variant = "default", size = "default", fontSize = "sm", alignment = "center", fullWidth = false, padding = 0, borderRadius, borderRadiusTL, borderRadiusTR, borderRadiusBL, borderRadiusBR, borderWidth = "none", borderColor = "muted", previewMode = false, editMode = false, className, ...props }) {
49
+ function LinkWidget({ text = "Click Here", linkType = "url", href = "", openInNewTab = true, screenSlug, shareSource, shareResource, shareUrl, variant = "default", size = "default", fontSize = "sm", alignment = "center", fullWidth = false, padding = 0, borderRadius, borderRadiusTL, borderRadiusTR, borderRadiusBL, borderRadiusBR, borderWidth = "none", borderColor = "muted", underline = false, previewMode = false, editMode = false, className, ...props }) {
50
50
  const { onNavigate, buildHref } = require_WidgetInteractionContext.useWidgetInteraction();
51
51
  const handleShareClick = (0, react.useCallback)(async () => {
52
52
  const isResourceMode = shareSource === "resource" || shareSource == null;
@@ -100,7 +100,7 @@ function LinkWidget({ text = "Click Here", linkType = "url", href = "", openInNe
100
100
  const tr = borderRadiusTR ?? fallback;
101
101
  const bl = borderRadiusBL ?? fallback;
102
102
  const br = borderRadiusBR ?? fallback;
103
- const buttonClasses = `text-${fontSize} ${`rounded-none ${borderRadiusTLClasses[tl]} ${borderRadiusTRClasses[tr]} ${borderRadiusBLClasses[bl]} ${borderRadiusBRClasses[br]}`} ${fullWidth ? "w-full" : ""}`;
103
+ const buttonClasses = `text-${fontSize} ${`rounded-none ${borderRadiusTLClasses[tl]} ${borderRadiusTRClasses[tr]} ${borderRadiusBLClasses[bl]} ${borderRadiusBRClasses[br]}`} ${fullWidth ? "w-full" : ""} ${underline ? "underline" : ""}`;
104
104
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
105
105
  className: `flex ${alignmentClasses[alignment]} p-${padding} ${_fluid_app_portal_core_registries.borderWidthClasses[borderWidth]} ${borderWidth !== "none" ? _fluid_app_portal_core_registries.borderColorClasses[borderColor] : ""} ${className ?? ""}`,
106
106
  ...props,
@@ -301,6 +301,14 @@ const linkWidgetPropertySchema = {
301
301
  defaultValue: "sm",
302
302
  group: "Button Style"
303
303
  }),
304
+ {
305
+ key: "underline",
306
+ label: "Underline",
307
+ type: "boolean",
308
+ description: "Underline the button text",
309
+ defaultValue: false,
310
+ group: "Button Style"
311
+ },
304
312
  {
305
313
  key: "alignment",
306
314
  label: "Alignment",
@@ -374,4 +382,4 @@ Object.defineProperty(exports, "linkWidgetPropertySchema", {
374
382
  }
375
383
  });
376
384
 
377
- //# sourceMappingURL=LinkWidget-CtcSfgWD.cjs.map
385
+ //# sourceMappingURL=LinkWidget-Bvw5OZwU.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LinkWidget-Bvw5OZwU.cjs","names":["useWidgetInteraction","borderWidthClasses","borderColorClasses","Button"],"sources":["../../widgets/src/widgets/LinkWidget.tsx"],"sourcesContent":["import type { WidgetPropertySchema } from \"@fluid-app/portal-core/registries\";\nimport { useCallback, type ComponentProps } from \"react\";\nimport type React from \"react\";\nimport { Button } from \"@fluid-app/ui-primitives\";\nimport { useWidgetInteraction } from \"../contexts/WidgetInteractionContext\";\nimport {\n getBorderRadiusCompositeField,\n getBorderWidthField,\n getBorderColorField,\n borderWidthClasses,\n borderColorClasses,\n getButtonSizeField,\n getFontSizeField,\n getPaddingField,\n} from \"../core/fields\";\nimport type {\n BorderRadiusOptions,\n BorderWidthOptions,\n ButtonSizeOptions,\n ColorOptions,\n FontSizeOptions,\n PaddingOptions,\n} from \"@fluid-app/portal-core/types\";\nimport type { ShareableItem } from \"@fluid-app/portal-core/types\";\n\ntype LinkVariant =\n | \"default\"\n | \"outline\"\n | \"secondary\"\n | \"ghost\"\n | \"destructive\";\n\nconst borderRadiusTLClasses: Record<BorderRadiusOptions, string> = {\n none: \"rounded-tl-none\",\n sm: \"rounded-tl-sm\",\n md: \"rounded-tl-md\",\n lg: \"rounded-tl-lg\",\n xl: \"rounded-tl-xl\",\n full: \"rounded-tl-full\",\n};\n\nconst borderRadiusTRClasses: Record<BorderRadiusOptions, string> = {\n none: \"rounded-tr-none\",\n sm: \"rounded-tr-sm\",\n md: \"rounded-tr-md\",\n lg: \"rounded-tr-lg\",\n xl: \"rounded-tr-xl\",\n full: \"rounded-tr-full\",\n};\n\nconst borderRadiusBLClasses: Record<BorderRadiusOptions, string> = {\n none: \"rounded-bl-none\",\n sm: \"rounded-bl-sm\",\n md: \"rounded-bl-md\",\n lg: \"rounded-bl-lg\",\n xl: \"rounded-bl-xl\",\n full: \"rounded-bl-full\",\n};\n\nconst borderRadiusBRClasses: Record<BorderRadiusOptions, string> = {\n none: \"rounded-br-none\",\n sm: \"rounded-br-sm\",\n md: \"rounded-br-md\",\n lg: \"rounded-br-lg\",\n xl: \"rounded-br-xl\",\n full: \"rounded-br-full\",\n};\n\nfunction sanitizeHref(url: string): string | undefined {\n if (!url) return undefined;\n if (/^(https?:|mailto:|tel:|\\/)/i.test(url)) return url;\n return undefined;\n}\n\nexport type LinkType = \"url\" | \"screen\" | \"share\";\nexport type ShareSource = \"resource\" | \"url\";\n\ntype LinkWidgetProps = ComponentProps<\"div\"> & {\n text?: string;\n linkType?: LinkType;\n // URL mode\n href?: string;\n openInNewTab?: boolean;\n // Screen mode\n screenSlug?: string;\n // Share mode\n shareSource?: ShareSource;\n shareResource?: ShareableItem;\n shareUrl?: string;\n // Styling\n variant?: LinkVariant;\n size?: ButtonSizeOptions;\n fontSize?: FontSizeOptions;\n alignment?: \"left\" | \"center\" | \"right\";\n fullWidth?: boolean;\n padding?: PaddingOptions;\n /** @deprecated Use per-corner props instead */\n borderRadius?: BorderRadiusOptions;\n borderRadiusTL?: BorderRadiusOptions;\n borderRadiusTR?: BorderRadiusOptions;\n borderRadiusBL?: BorderRadiusOptions;\n borderRadiusBR?: BorderRadiusOptions;\n borderWidth?: BorderWidthOptions;\n borderColor?: ColorOptions;\n underline?: boolean;\n previewMode?: boolean;\n editMode?: boolean;\n};\n\nconst alignmentClasses = {\n left: \"justify-start\",\n center: \"justify-center\",\n right: \"justify-end\",\n} as const;\n\nexport function LinkWidget({\n text = \"Click Here\",\n linkType = \"url\",\n href = \"\",\n openInNewTab = true,\n screenSlug,\n shareSource,\n shareResource,\n shareUrl,\n variant = \"default\",\n size = \"default\",\n fontSize = \"sm\",\n alignment = \"center\",\n fullWidth = false,\n padding = 0,\n borderRadius,\n borderRadiusTL,\n borderRadiusTR,\n borderRadiusBL,\n borderRadiusBR,\n borderWidth = \"none\",\n borderColor = \"muted\",\n underline = false,\n previewMode = false,\n editMode = false,\n className,\n ...props\n}: LinkWidgetProps): React.JSX.Element {\n const { onNavigate, buildHref } = useWidgetInteraction();\n\n const handleShareClick = useCallback(async () => {\n const isResourceMode = shareSource === \"resource\" || shareSource == null;\n const url = isResourceMode\n ? (shareResource?.share_link ?? undefined)\n : (shareUrl ?? undefined);\n if (!url) return;\n\n if (navigator.share) {\n try {\n await navigator.share({\n url,\n ...(isResourceMode && shareResource?.title\n ? { title: shareResource.title }\n : {}),\n });\n return;\n } catch (e) {\n // User intentionally dismissed the share sheet — do not copy to clipboard\n if (e instanceof DOMException && e.name === \"AbortError\") return;\n // Other errors (e.g. NotAllowedError) — fall through to clipboard\n }\n }\n\n try {\n await navigator.clipboard.writeText(url);\n } catch {\n // Clipboard API not available\n }\n }, [shareSource, shareUrl, shareResource]);\n\n const handleScreenClick = useCallback(\n (e: React.MouseEvent) => {\n if (onNavigate && screenSlug) {\n e.preventDefault();\n onNavigate(screenSlug);\n }\n },\n [onNavigate, screenSlug],\n );\n\n const screenHref = screenSlug\n ? (buildHref?.(screenSlug) ?? screenSlug)\n : undefined;\n if (previewMode) {\n return (\n <div className={`flex justify-center p-4 ${className ?? \"\"}`} {...props}>\n <span\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n height: \"36px\",\n padding: \"0 16px\",\n borderRadius: \"6px\",\n backgroundColor: \"#18181b\",\n color: \"#ffffff\",\n fontSize: \"14px\",\n fontWeight: 500,\n }}\n >\n {text}\n </span>\n </div>\n );\n }\n\n const fallback = borderRadius ?? \"md\";\n const tl = borderRadiusTL ?? fallback;\n const tr = borderRadiusTR ?? fallback;\n const bl = borderRadiusBL ?? fallback;\n const br = borderRadiusBR ?? fallback;\n const borderRadiusClasses = `rounded-none ${borderRadiusTLClasses[tl]} ${borderRadiusTRClasses[tr]} ${borderRadiusBLClasses[bl]} ${borderRadiusBRClasses[br]}`;\n const buttonClasses = `text-${fontSize} ${borderRadiusClasses} ${fullWidth ? \"w-full\" : \"\"} ${underline ? \"underline\" : \"\"}`;\n\n return (\n <div\n className={`flex ${alignmentClasses[alignment]} p-${padding} ${borderWidthClasses[borderWidth]} ${borderWidth !== \"none\" ? borderColorClasses[borderColor] : \"\"} ${className ?? \"\"}`}\n {...props}\n >\n <Button asChild variant={variant} size={size} className={buttonClasses}>\n {editMode ? (\n <span className=\"cursor-default\">{text}</span>\n ) : linkType === \"share\" ? (\n <button type=\"button\" onClick={handleShareClick}>\n {text}\n </button>\n ) : linkType === \"screen\" ? (\n screenSlug ? (\n <a href={screenHref} onClick={handleScreenClick}>\n {text}\n </a>\n ) : (\n <span className=\"cursor-default\">{text}</span>\n )\n ) : (\n <a\n href={sanitizeHref(href)}\n {...(openInNewTab\n ? { target: \"_blank\", rel: \"noopener noreferrer\" }\n : {})}\n >\n {text}\n </a>\n )}\n </Button>\n </div>\n );\n}\n\nexport const linkWidgetPropertySchema: WidgetPropertySchema = {\n widgetType: \"LinkWidget\",\n displayName: \"Link Button\",\n fields: [\n // Link Group\n {\n key: \"linkType\",\n label: \"Link Type\",\n type: \"buttonGroup\",\n options: [\n { label: \"URL\", value: \"url\" },\n { label: \"Screen\", value: \"screen\" },\n { label: \"Share\", value: \"share\" },\n ],\n defaultValue: \"url\",\n group: \"Link\",\n },\n {\n key: \"text\",\n label: \"Text\",\n type: \"text\",\n description: \"The button label text\",\n defaultValue: \"Click Here\",\n group: \"Link\",\n },\n // URL mode fields\n {\n key: \"href\",\n label: \"URL\",\n type: \"text\",\n description: \"The destination URL\",\n defaultValue: \"\",\n group: \"Link\",\n requiresKeyValue: { key: \"linkType\", value: \"url\" },\n },\n {\n key: \"openInNewTab\",\n label: \"Open in New Tab\",\n type: \"boolean\",\n description: \"Whether to open the link in a new tab\",\n defaultValue: true,\n group: \"Link\",\n requiresKeyValue: { key: \"linkType\", value: \"url\" },\n },\n // Screen mode fields\n {\n key: \"screenSlug\",\n label: \"Screen\",\n type: \"screenPicker\",\n description: \"Select a screen to navigate to\",\n includeSystemItems: true,\n group: \"Link\",\n requiresKeyValue: { key: \"linkType\", value: \"screen\" },\n },\n // Share mode fields\n {\n key: \"shareSource\",\n label: \"Share Source\",\n type: \"buttonGroup\",\n options: [\n { label: \"Resource\", value: \"resource\" },\n { label: \"URL\", value: \"url\" },\n ],\n defaultValue: \"resource\",\n group: \"Link\",\n requiresKeyValue: { key: \"linkType\", value: \"share\" },\n },\n {\n key: \"shareResource\",\n label: \"Shareable Content\",\n type: \"resource\",\n description: \"Select content to share\",\n allowedTypes: [\"Product\", \"Medium\", \"Library\", \"Page\", \"EnrollmentPack\"],\n group: \"Link\",\n requiresKeyValue: [\n { key: \"linkType\", value: \"share\" },\n { key: \"shareSource\", value: \"resource\" },\n ],\n },\n {\n key: \"shareUrl\",\n label: \"Share URL\",\n type: \"text\",\n description: \"The URL to share\",\n defaultValue: \"\",\n group: \"Link\",\n requiresKeyValue: [\n { key: \"linkType\", value: \"share\" },\n { key: \"shareSource\", value: \"url\" },\n ],\n },\n // Button Style Group\n {\n key: \"variant\",\n label: \"Variant\",\n type: \"select\",\n description: \"The visual style of the button\",\n options: [\n { label: \"Default\", value: \"default\" },\n { label: \"Outline\", value: \"outline\" },\n { label: \"Secondary\", value: \"secondary\" },\n { label: \"Ghost\", value: \"ghost\" },\n { label: \"Destructive\", value: \"destructive\" },\n ],\n defaultValue: \"default\",\n group: \"Button Style\",\n },\n getButtonSizeField({\n key: \"size\",\n label: \"Size\",\n description: \"The size of the button\",\n defaultValue: \"default\",\n group: \"Button Style\",\n }),\n getFontSizeField({\n key: \"fontSize\",\n label: \"Text Size\",\n description: \"The font size of the button text\",\n defaultValue: \"sm\",\n group: \"Button Style\",\n }),\n {\n key: \"underline\",\n label: \"Underline\",\n type: \"boolean\",\n description: \"Underline the button text\",\n defaultValue: false,\n group: \"Button Style\",\n },\n // Layout Group\n {\n key: \"alignment\",\n label: \"Alignment\",\n type: \"buttonGroup\",\n description: \"Horizontal alignment of the button\",\n options: [\n { label: \"Left\", value: \"left\" },\n { label: \"Center\", value: \"center\" },\n { label: \"Right\", value: \"right\" },\n ],\n defaultValue: \"center\",\n group: \"Layout\",\n },\n {\n key: \"fullWidth\",\n label: \"Full Width\",\n type: \"boolean\",\n description: \"Makes the button stretch to full container width\",\n defaultValue: false,\n group: \"Layout\",\n },\n getPaddingField({\n key: \"padding\",\n label: \"Padding\",\n description: \"Outer container padding\",\n defaultValue: 0,\n group: \"Layout\",\n }),\n // Design Group\n getBorderRadiusCompositeField({\n key: \"borderRadiusGroup\",\n label: \"Border Radius\",\n defaultValue: \"md\",\n group: \"Design\",\n }),\n getBorderWidthField({\n key: \"borderWidth\",\n label: \"Border Width\",\n description: \"Border width for the widget\",\n defaultValue: \"none\",\n group: \"Design\",\n }),\n getBorderColorField({\n key: \"borderColor\",\n label: \"Border Color\",\n description: \"Border color for the widget\",\n defaultValue: \"muted\",\n group: \"Design\",\n }),\n ],\n};\n"],"mappings":"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"}
@@ -50,7 +50,7 @@ const alignmentClasses = {
50
50
  center: "justify-center",
51
51
  right: "justify-end"
52
52
  };
53
- function LinkWidget({ text = "Click Here", linkType = "url", href = "", openInNewTab = true, screenSlug, shareSource, shareResource, shareUrl, variant = "default", size = "default", fontSize = "sm", alignment = "center", fullWidth = false, padding = 0, borderRadius, borderRadiusTL, borderRadiusTR, borderRadiusBL, borderRadiusBR, borderWidth = "none", borderColor = "muted", previewMode = false, editMode = false, className, ...props }) {
53
+ function LinkWidget({ text = "Click Here", linkType = "url", href = "", openInNewTab = true, screenSlug, shareSource, shareResource, shareUrl, variant = "default", size = "default", fontSize = "sm", alignment = "center", fullWidth = false, padding = 0, borderRadius, borderRadiusTL, borderRadiusTR, borderRadiusBL, borderRadiusBR, borderWidth = "none", borderColor = "muted", underline = false, previewMode = false, editMode = false, className, ...props }) {
54
54
  const { onNavigate, buildHref } = useWidgetInteraction();
55
55
  const handleShareClick = useCallback(async () => {
56
56
  const isResourceMode = shareSource === "resource" || shareSource == null;
@@ -104,7 +104,7 @@ function LinkWidget({ text = "Click Here", linkType = "url", href = "", openInNe
104
104
  const tr = borderRadiusTR ?? fallback;
105
105
  const bl = borderRadiusBL ?? fallback;
106
106
  const br = borderRadiusBR ?? fallback;
107
- const buttonClasses = `text-${fontSize} ${`rounded-none ${borderRadiusTLClasses[tl]} ${borderRadiusTRClasses[tr]} ${borderRadiusBLClasses[bl]} ${borderRadiusBRClasses[br]}`} ${fullWidth ? "w-full" : ""}`;
107
+ const buttonClasses = `text-${fontSize} ${`rounded-none ${borderRadiusTLClasses[tl]} ${borderRadiusTRClasses[tr]} ${borderRadiusBLClasses[bl]} ${borderRadiusBRClasses[br]}`} ${fullWidth ? "w-full" : ""} ${underline ? "underline" : ""}`;
108
108
  return /* @__PURE__ */ jsx("div", {
109
109
  className: `flex ${alignmentClasses[alignment]} p-${padding} ${borderWidthClasses[borderWidth]} ${borderWidth !== "none" ? borderColorClasses[borderColor] : ""} ${className ?? ""}`,
110
110
  ...props,
@@ -305,6 +305,14 @@ const linkWidgetPropertySchema = {
305
305
  defaultValue: "sm",
306
306
  group: "Button Style"
307
307
  }),
308
+ {
309
+ key: "underline",
310
+ label: "Underline",
311
+ type: "boolean",
312
+ description: "Underline the button text",
313
+ defaultValue: false,
314
+ group: "Button Style"
315
+ },
308
316
  {
309
317
  key: "alignment",
310
318
  label: "Alignment",
@@ -367,4 +375,4 @@ const linkWidgetPropertySchema = {
367
375
  //#endregion
368
376
  export { LinkWidget_exports as n, linkWidgetPropertySchema as r, LinkWidget as t };
369
377
 
370
- //# sourceMappingURL=LinkWidget-CUHpx9wn.mjs.map
378
+ //# sourceMappingURL=LinkWidget-dwIVKZD0.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LinkWidget-dwIVKZD0.mjs","names":[],"sources":["../../widgets/src/widgets/LinkWidget.tsx"],"sourcesContent":["import type { WidgetPropertySchema } from \"@fluid-app/portal-core/registries\";\nimport { useCallback, type ComponentProps } from \"react\";\nimport type React from \"react\";\nimport { Button } from \"@fluid-app/ui-primitives\";\nimport { useWidgetInteraction } from \"../contexts/WidgetInteractionContext\";\nimport {\n getBorderRadiusCompositeField,\n getBorderWidthField,\n getBorderColorField,\n borderWidthClasses,\n borderColorClasses,\n getButtonSizeField,\n getFontSizeField,\n getPaddingField,\n} from \"../core/fields\";\nimport type {\n BorderRadiusOptions,\n BorderWidthOptions,\n ButtonSizeOptions,\n ColorOptions,\n FontSizeOptions,\n PaddingOptions,\n} from \"@fluid-app/portal-core/types\";\nimport type { ShareableItem } from \"@fluid-app/portal-core/types\";\n\ntype LinkVariant =\n | \"default\"\n | \"outline\"\n | \"secondary\"\n | \"ghost\"\n | \"destructive\";\n\nconst borderRadiusTLClasses: Record<BorderRadiusOptions, string> = {\n none: \"rounded-tl-none\",\n sm: \"rounded-tl-sm\",\n md: \"rounded-tl-md\",\n lg: \"rounded-tl-lg\",\n xl: \"rounded-tl-xl\",\n full: \"rounded-tl-full\",\n};\n\nconst borderRadiusTRClasses: Record<BorderRadiusOptions, string> = {\n none: \"rounded-tr-none\",\n sm: \"rounded-tr-sm\",\n md: \"rounded-tr-md\",\n lg: \"rounded-tr-lg\",\n xl: \"rounded-tr-xl\",\n full: \"rounded-tr-full\",\n};\n\nconst borderRadiusBLClasses: Record<BorderRadiusOptions, string> = {\n none: \"rounded-bl-none\",\n sm: \"rounded-bl-sm\",\n md: \"rounded-bl-md\",\n lg: \"rounded-bl-lg\",\n xl: \"rounded-bl-xl\",\n full: \"rounded-bl-full\",\n};\n\nconst borderRadiusBRClasses: Record<BorderRadiusOptions, string> = {\n none: \"rounded-br-none\",\n sm: \"rounded-br-sm\",\n md: \"rounded-br-md\",\n lg: \"rounded-br-lg\",\n xl: \"rounded-br-xl\",\n full: \"rounded-br-full\",\n};\n\nfunction sanitizeHref(url: string): string | undefined {\n if (!url) return undefined;\n if (/^(https?:|mailto:|tel:|\\/)/i.test(url)) return url;\n return undefined;\n}\n\nexport type LinkType = \"url\" | \"screen\" | \"share\";\nexport type ShareSource = \"resource\" | \"url\";\n\ntype LinkWidgetProps = ComponentProps<\"div\"> & {\n text?: string;\n linkType?: LinkType;\n // URL mode\n href?: string;\n openInNewTab?: boolean;\n // Screen mode\n screenSlug?: string;\n // Share mode\n shareSource?: ShareSource;\n shareResource?: ShareableItem;\n shareUrl?: string;\n // Styling\n variant?: LinkVariant;\n size?: ButtonSizeOptions;\n fontSize?: FontSizeOptions;\n alignment?: \"left\" | \"center\" | \"right\";\n fullWidth?: boolean;\n padding?: PaddingOptions;\n /** @deprecated Use per-corner props instead */\n borderRadius?: BorderRadiusOptions;\n borderRadiusTL?: BorderRadiusOptions;\n borderRadiusTR?: BorderRadiusOptions;\n borderRadiusBL?: BorderRadiusOptions;\n borderRadiusBR?: BorderRadiusOptions;\n borderWidth?: BorderWidthOptions;\n borderColor?: ColorOptions;\n underline?: boolean;\n previewMode?: boolean;\n editMode?: boolean;\n};\n\nconst alignmentClasses = {\n left: \"justify-start\",\n center: \"justify-center\",\n right: \"justify-end\",\n} as const;\n\nexport function LinkWidget({\n text = \"Click Here\",\n linkType = \"url\",\n href = \"\",\n openInNewTab = true,\n screenSlug,\n shareSource,\n shareResource,\n shareUrl,\n variant = \"default\",\n size = \"default\",\n fontSize = \"sm\",\n alignment = \"center\",\n fullWidth = false,\n padding = 0,\n borderRadius,\n borderRadiusTL,\n borderRadiusTR,\n borderRadiusBL,\n borderRadiusBR,\n borderWidth = \"none\",\n borderColor = \"muted\",\n underline = false,\n previewMode = false,\n editMode = false,\n className,\n ...props\n}: LinkWidgetProps): React.JSX.Element {\n const { onNavigate, buildHref } = useWidgetInteraction();\n\n const handleShareClick = useCallback(async () => {\n const isResourceMode = shareSource === \"resource\" || shareSource == null;\n const url = isResourceMode\n ? (shareResource?.share_link ?? undefined)\n : (shareUrl ?? undefined);\n if (!url) return;\n\n if (navigator.share) {\n try {\n await navigator.share({\n url,\n ...(isResourceMode && shareResource?.title\n ? { title: shareResource.title }\n : {}),\n });\n return;\n } catch (e) {\n // User intentionally dismissed the share sheet — do not copy to clipboard\n if (e instanceof DOMException && e.name === \"AbortError\") return;\n // Other errors (e.g. NotAllowedError) — fall through to clipboard\n }\n }\n\n try {\n await navigator.clipboard.writeText(url);\n } catch {\n // Clipboard API not available\n }\n }, [shareSource, shareUrl, shareResource]);\n\n const handleScreenClick = useCallback(\n (e: React.MouseEvent) => {\n if (onNavigate && screenSlug) {\n e.preventDefault();\n onNavigate(screenSlug);\n }\n },\n [onNavigate, screenSlug],\n );\n\n const screenHref = screenSlug\n ? (buildHref?.(screenSlug) ?? screenSlug)\n : undefined;\n if (previewMode) {\n return (\n <div className={`flex justify-center p-4 ${className ?? \"\"}`} {...props}>\n <span\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n height: \"36px\",\n padding: \"0 16px\",\n borderRadius: \"6px\",\n backgroundColor: \"#18181b\",\n color: \"#ffffff\",\n fontSize: \"14px\",\n fontWeight: 500,\n }}\n >\n {text}\n </span>\n </div>\n );\n }\n\n const fallback = borderRadius ?? \"md\";\n const tl = borderRadiusTL ?? fallback;\n const tr = borderRadiusTR ?? fallback;\n const bl = borderRadiusBL ?? fallback;\n const br = borderRadiusBR ?? fallback;\n const borderRadiusClasses = `rounded-none ${borderRadiusTLClasses[tl]} ${borderRadiusTRClasses[tr]} ${borderRadiusBLClasses[bl]} ${borderRadiusBRClasses[br]}`;\n const buttonClasses = `text-${fontSize} ${borderRadiusClasses} ${fullWidth ? \"w-full\" : \"\"} ${underline ? \"underline\" : \"\"}`;\n\n return (\n <div\n className={`flex ${alignmentClasses[alignment]} p-${padding} ${borderWidthClasses[borderWidth]} ${borderWidth !== \"none\" ? borderColorClasses[borderColor] : \"\"} ${className ?? \"\"}`}\n {...props}\n >\n <Button asChild variant={variant} size={size} className={buttonClasses}>\n {editMode ? (\n <span className=\"cursor-default\">{text}</span>\n ) : linkType === \"share\" ? (\n <button type=\"button\" onClick={handleShareClick}>\n {text}\n </button>\n ) : linkType === \"screen\" ? (\n screenSlug ? (\n <a href={screenHref} onClick={handleScreenClick}>\n {text}\n </a>\n ) : (\n <span className=\"cursor-default\">{text}</span>\n )\n ) : (\n <a\n href={sanitizeHref(href)}\n {...(openInNewTab\n ? { target: \"_blank\", rel: \"noopener noreferrer\" }\n : {})}\n >\n {text}\n </a>\n )}\n </Button>\n </div>\n );\n}\n\nexport const linkWidgetPropertySchema: WidgetPropertySchema = {\n widgetType: \"LinkWidget\",\n displayName: \"Link Button\",\n fields: [\n // Link Group\n {\n key: \"linkType\",\n label: \"Link Type\",\n type: \"buttonGroup\",\n options: [\n { label: \"URL\", value: \"url\" },\n { label: \"Screen\", value: \"screen\" },\n { label: \"Share\", value: \"share\" },\n ],\n defaultValue: \"url\",\n group: \"Link\",\n },\n {\n key: \"text\",\n label: \"Text\",\n type: \"text\",\n description: \"The button label text\",\n defaultValue: \"Click Here\",\n group: \"Link\",\n },\n // URL mode fields\n {\n key: \"href\",\n label: \"URL\",\n type: \"text\",\n description: \"The destination URL\",\n defaultValue: \"\",\n group: \"Link\",\n requiresKeyValue: { key: \"linkType\", value: \"url\" },\n },\n {\n key: \"openInNewTab\",\n label: \"Open in New Tab\",\n type: \"boolean\",\n description: \"Whether to open the link in a new tab\",\n defaultValue: true,\n group: \"Link\",\n requiresKeyValue: { key: \"linkType\", value: \"url\" },\n },\n // Screen mode fields\n {\n key: \"screenSlug\",\n label: \"Screen\",\n type: \"screenPicker\",\n description: \"Select a screen to navigate to\",\n includeSystemItems: true,\n group: \"Link\",\n requiresKeyValue: { key: \"linkType\", value: \"screen\" },\n },\n // Share mode fields\n {\n key: \"shareSource\",\n label: \"Share Source\",\n type: \"buttonGroup\",\n options: [\n { label: \"Resource\", value: \"resource\" },\n { label: \"URL\", value: \"url\" },\n ],\n defaultValue: \"resource\",\n group: \"Link\",\n requiresKeyValue: { key: \"linkType\", value: \"share\" },\n },\n {\n key: \"shareResource\",\n label: \"Shareable Content\",\n type: \"resource\",\n description: \"Select content to share\",\n allowedTypes: [\"Product\", \"Medium\", \"Library\", \"Page\", \"EnrollmentPack\"],\n group: \"Link\",\n requiresKeyValue: [\n { key: \"linkType\", value: \"share\" },\n { key: \"shareSource\", value: \"resource\" },\n ],\n },\n {\n key: \"shareUrl\",\n label: \"Share URL\",\n type: \"text\",\n description: \"The URL to share\",\n defaultValue: \"\",\n group: \"Link\",\n requiresKeyValue: [\n { key: \"linkType\", value: \"share\" },\n { key: \"shareSource\", value: \"url\" },\n ],\n },\n // Button Style Group\n {\n key: \"variant\",\n label: \"Variant\",\n type: \"select\",\n description: \"The visual style of the button\",\n options: [\n { label: \"Default\", value: \"default\" },\n { label: \"Outline\", value: \"outline\" },\n { label: \"Secondary\", value: \"secondary\" },\n { label: \"Ghost\", value: \"ghost\" },\n { label: \"Destructive\", value: \"destructive\" },\n ],\n defaultValue: \"default\",\n group: \"Button Style\",\n },\n getButtonSizeField({\n key: \"size\",\n label: \"Size\",\n description: \"The size of the button\",\n defaultValue: \"default\",\n group: \"Button Style\",\n }),\n getFontSizeField({\n key: \"fontSize\",\n label: \"Text Size\",\n description: \"The font size of the button text\",\n defaultValue: \"sm\",\n group: \"Button Style\",\n }),\n {\n key: \"underline\",\n label: \"Underline\",\n type: \"boolean\",\n description: \"Underline the button text\",\n defaultValue: false,\n group: \"Button Style\",\n },\n // Layout Group\n {\n key: \"alignment\",\n label: \"Alignment\",\n type: \"buttonGroup\",\n description: \"Horizontal alignment of the button\",\n options: [\n { label: \"Left\", value: \"left\" },\n { label: \"Center\", value: \"center\" },\n { label: \"Right\", value: \"right\" },\n ],\n defaultValue: \"center\",\n group: \"Layout\",\n },\n {\n key: \"fullWidth\",\n label: \"Full Width\",\n type: \"boolean\",\n description: \"Makes the button stretch to full container width\",\n defaultValue: false,\n group: \"Layout\",\n },\n getPaddingField({\n key: \"padding\",\n label: \"Padding\",\n description: \"Outer container padding\",\n defaultValue: 0,\n group: \"Layout\",\n }),\n // Design Group\n getBorderRadiusCompositeField({\n key: \"borderRadiusGroup\",\n label: \"Border Radius\",\n defaultValue: \"md\",\n group: \"Design\",\n }),\n getBorderWidthField({\n key: \"borderWidth\",\n label: \"Border Width\",\n description: \"Border width for the widget\",\n defaultValue: \"none\",\n group: \"Design\",\n }),\n getBorderColorField({\n key: \"borderColor\",\n label: \"Border Color\",\n description: \"Border color for the widget\",\n defaultValue: \"muted\",\n group: \"Design\",\n }),\n ],\n};\n"],"mappings":"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"}
@@ -2,5 +2,5 @@ require("./chunk-DAgNkxik.cjs");
2
2
  require("./WidgetInteractionContext-DMd_i8np.cjs");
3
3
  require("./fields-7guHEnCH.cjs");
4
4
  require("./src-DqIS-4ns.cjs");
5
- const require_LinkWidget = require("./LinkWidget-CtcSfgWD.cjs");
5
+ const require_LinkWidget = require("./LinkWidget-Bvw5OZwU.cjs");
6
6
  exports.linkWidgetPropertySchema = require_LinkWidget.linkWidgetPropertySchema;
@@ -1,5 +1,5 @@
1
1
  require("./chunk-DAgNkxik.cjs");
2
- require("./FluidProvider-DDcsxdbL.cjs");
2
+ require("./FluidProvider-BcMVqXGW.cjs");
3
3
  require("./error-state-CGCSDJIJ.cjs");
4
4
  require("./PointsWidget-Bs74dyFl.cjs");
5
5
  require("./ScreenRenderer-D-vpSa-G.cjs");
@@ -21,7 +21,7 @@ require("./ChartWidget-CS600CjN.cjs");
21
21
  require("./LayoutWidget-q4xxJVPn.cjs");
22
22
  require("./ContainerWidget-CdUs8OBL.cjs");
23
23
  require("./ImageWidget-DbDhysGw.cjs");
24
- require("./LinkWidget-CtcSfgWD.cjs");
24
+ require("./LinkWidget-Bvw5OZwU.cjs");
25
25
  require("./ListWidget-CiV9j7vm.cjs");
26
26
  require("./MySiteWidget-BPp8ZoqT.cjs");
27
27
  require("./NestedWidget-C1neMqH7.cjs");
@@ -32,7 +32,7 @@ require("./SpacerWidget-Br2IZFFv.cjs");
32
32
  require("./TableWidget-Vcxw-se8.cjs");
33
33
  require("./ToDoWidget-Bv6POc5R.cjs");
34
34
  require("./VideoWidget-7Q2eqHFn.cjs");
35
- const require_MessagingScreen = require("./MessagingScreen-BQWcyDp7.cjs");
35
+ const require_MessagingScreen = require("./MessagingScreen-XSXGBuM5.cjs");
36
36
  require("./dist-NpiIdjkL.cjs");
37
37
  require("./es-qN_AsxTa.cjs");
38
38
  exports.MessagingScreen = require_MessagingScreen.MessagingScreen;
@@ -1,7 +1,7 @@
1
1
  import { a as __toESM, i as __require, n as __exportAll, t as __commonJSMin } from "./chunk-CRV2RMSr.mjs";
2
- import { K as ApiError, n as useFluidContext, o as useFluidAuthContext } from "./FluidProvider-uMkUIfAA.mjs";
2
+ import { K as ApiError, n as useFluidContext, o as useFluidAuthContext } from "./FluidProvider-NsdWcsos.mjs";
3
3
  import { At as isSameYear, Bt as addMonths, Ft as differenceInCalendarMonths, Gt as millisecondsInMinute, Ht as toDate, I as Input, It as isSameDay, J as DropdownMenuItem, K as DropdownMenu, L as IconToggle, Lt as differenceInCalendarDays, Mt as isAfter, Nt as format$1, Ot as Calendar$1, Pt as endOfMonth, R as IconButton, Rt as startOfDay, Ut as constructFrom, Vt as addDays, Wt as millisecondsInHour, X as DropdownMenuSeparator, Y as DropdownMenuLabel, _ as SpinnerWithText, dn as Button, dt as PopoverContent, et as DropdownMenuTrigger, ft as PopoverTrigger, i as TooltipTrigger, jt as isBefore, kt as subDays, n as TooltipContent, nt as DialogClose, q as DropdownMenuContent, r as TooltipProvider, rt as DialogContent, t as Tooltip, tt as Dialog, ut as Popover, yn as cn, zt as normalizeDates } from "./src-Bh-9OV8i.mjs";
4
- import { t as useFluidApi } from "./use-fluid-api-BA3oc4fz.mjs";
4
+ import { t as useFluidApi } from "./use-fluid-api-ByXKmAb3.mjs";
5
5
  import { C as PluginKey, D as Node$2, E as Mark$1, O as Schema$1, S as Plugin, T as Fragment$2, _ as index$1, a as useEditor, b as Decoration, c as Mark, d as escapeForRegEx, f as findChildrenInRange, g as getMarksBetween, h as getHTMLFromFragment, i as ReactRenderer, l as Node$1, m as getChangedRanges, o as Placeholder, p as getAttributes, r as EditorContent, s as Extension, t as StarterKit, u as combineTransactionSteps, v as markPasteRule, w as DOMParser, x as DecorationSet, y as mergeAttributes } from "./dist-CMGXkSgZ.mjs";
6
6
  import { t as useDropzone } from "./es-CrIkZTQ3.mjs";
7
7
  import * as React$1 from "react";
@@ -54591,4 +54591,4 @@ const messagingScreenPropertySchema = {
54591
54591
  //#endregion
54592
54592
  export { useMessagingAuth as a, useMessagingConfig as i, messagingScreenPropertySchema as n, createFluidFileUploader as r, MessagingScreen as t };
54593
54593
 
54594
- //# sourceMappingURL=MessagingScreen-DCrqjweY.mjs.map
54594
+ //# sourceMappingURL=MessagingScreen-CGvz_4UM.mjs.map