@flamingo-stack/openframe-frontend-core 0.0.518-1663.4312.1 → 0.0.519

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 (160) hide show
  1. package/dist/chat-protocol/events.d.ts +15 -1
  2. package/dist/chat-protocol/events.d.ts.map +1 -1
  3. package/dist/chat-protocol/index.cjs +25 -0
  4. package/dist/chat-protocol/index.cjs.map +1 -1
  5. package/dist/chat-protocol/index.js +25 -1
  6. package/dist/chat-protocol/index.js.map +1 -1
  7. package/dist/chat-protocol/nats-decoder.d.ts +5 -0
  8. package/dist/chat-protocol/nats-decoder.d.ts.map +1 -1
  9. package/dist/{chunk-UBTOOE55.js → chunk-5OGHZNY5.js} +10 -1
  10. package/dist/chunk-5OGHZNY5.js.map +1 -0
  11. package/dist/{chunk-KW7GDLSG.cjs → chunk-5PMRHRMM.cjs} +14 -14
  12. package/dist/{chunk-KW7GDLSG.cjs.map → chunk-5PMRHRMM.cjs.map} +1 -1
  13. package/dist/{chunk-MKN6S7SU.cjs → chunk-6FLRFCK4.cjs} +1352 -1152
  14. package/dist/chunk-6FLRFCK4.cjs.map +1 -0
  15. package/dist/{chunk-KRBH3PI4.js → chunk-6WQN7NLD.js} +4 -4
  16. package/dist/{chunk-IIPBTWQR.cjs → chunk-7INXXQVK.cjs} +10 -1
  17. package/dist/{chunk-IIPBTWQR.cjs.map → chunk-7INXXQVK.cjs.map} +1 -1
  18. package/dist/{chunk-IVTENGMF.js → chunk-7J4DGFHZ.js} +2 -2
  19. package/dist/{chunk-WQDDSJWN.cjs → chunk-BFCBR277.cjs} +11 -11
  20. package/dist/{chunk-WQDDSJWN.cjs.map → chunk-BFCBR277.cjs.map} +1 -1
  21. package/dist/{chunk-RJU7YCN3.js → chunk-BUZOZOQ2.js} +2 -2
  22. package/dist/{chunk-URU6YKOA.cjs → chunk-CCK2MFIQ.cjs} +28 -28
  23. package/dist/{chunk-URU6YKOA.cjs.map → chunk-CCK2MFIQ.cjs.map} +1 -1
  24. package/dist/{chunk-PV3LXEHJ.js → chunk-CRJRVUWB.js} +3 -3
  25. package/dist/{chunk-O4XLTA5G.cjs → chunk-FWCENA3G.cjs} +31 -31
  26. package/dist/{chunk-O4XLTA5G.cjs.map → chunk-FWCENA3G.cjs.map} +1 -1
  27. package/dist/{chunk-RLVJISO4.cjs → chunk-GLFQSFYV.cjs} +61 -61
  28. package/dist/{chunk-RLVJISO4.cjs.map → chunk-GLFQSFYV.cjs.map} +1 -1
  29. package/dist/{chunk-P6M5MN3L.js → chunk-HVXGSQ4V.js} +6 -6
  30. package/dist/{chunk-MVY3WDFZ.js → chunk-HWA3NZPK.js} +2 -2
  31. package/dist/{chunk-TFIPJAA5.js → chunk-JMGVYERE.js} +3 -3
  32. package/dist/{chunk-25JSVBPR.cjs → chunk-KCDKQXE5.cjs} +12 -12
  33. package/dist/{chunk-25JSVBPR.cjs.map → chunk-KCDKQXE5.cjs.map} +1 -1
  34. package/dist/{chunk-YUQNJXSC.js → chunk-MEWHQVOU.js} +2 -2
  35. package/dist/{chunk-K26W23C2.cjs → chunk-MKPJYEOR.cjs} +6 -6
  36. package/dist/{chunk-K26W23C2.cjs.map → chunk-MKPJYEOR.cjs.map} +1 -1
  37. package/dist/{chunk-BQXHC336.cjs → chunk-OBJSXQ67.cjs} +3 -3
  38. package/dist/{chunk-BQXHC336.cjs.map → chunk-OBJSXQ67.cjs.map} +1 -1
  39. package/dist/{chunk-QJHBYNHI.js → chunk-OQHHJDUB.js} +4 -4
  40. package/dist/{chunk-LQ2R7IA2.cjs → chunk-QEGGWVFV.cjs} +26 -26
  41. package/dist/{chunk-LQ2R7IA2.cjs.map → chunk-QEGGWVFV.cjs.map} +1 -1
  42. package/dist/{chunk-I6IWT62M.cjs → chunk-QGLEI6T2.cjs} +5 -5
  43. package/dist/{chunk-I6IWT62M.cjs.map → chunk-QGLEI6T2.cjs.map} +1 -1
  44. package/dist/{chunk-YH627NWE.cjs → chunk-QQZWLTYU.cjs} +9 -9
  45. package/dist/{chunk-YH627NWE.cjs.map → chunk-QQZWLTYU.cjs.map} +1 -1
  46. package/dist/{chunk-NJJWY7SO.js → chunk-S4OAWVKF.js} +2 -2
  47. package/dist/{chunk-MOZUJ7IN.js → chunk-SAPKMN4W.js} +2 -2
  48. package/dist/{chunk-MI7WNVWX.js → chunk-UBT2KBK7.js} +6 -6
  49. package/dist/{chunk-DN3GKQ47.cjs → chunk-V3MAG3G5.cjs} +98 -98
  50. package/dist/{chunk-DN3GKQ47.cjs.map → chunk-V3MAG3G5.cjs.map} +1 -1
  51. package/dist/{chunk-XARCNHWZ.js → chunk-VH7BOHRG.js} +3 -3
  52. package/dist/{chunk-CHMQCXYO.cjs → chunk-WEPJKF65.cjs} +37 -37
  53. package/dist/{chunk-CHMQCXYO.cjs.map → chunk-WEPJKF65.cjs.map} +1 -1
  54. package/dist/{chunk-PUBL2NCH.js → chunk-YACGPO7I.js} +2 -2
  55. package/dist/{chunk-LL4C2NXG.js → chunk-ZA5PFNHR.js} +6073 -5873
  56. package/dist/chunk-ZA5PFNHR.js.map +1 -0
  57. package/dist/{chunk-GH5YZSQQ.cjs → chunk-ZGGI4XMF.cjs} +9 -9
  58. package/dist/{chunk-GH5YZSQQ.cjs.map → chunk-ZGGI4XMF.cjs.map} +1 -1
  59. package/dist/components/calendar.cjs +3 -3
  60. package/dist/components/calendar.js +2 -2
  61. package/dist/components/case-studies/index.cjs +9 -9
  62. package/dist/components/case-studies/index.js +3 -3
  63. package/dist/components/chat/ask-display.d.ts +24 -0
  64. package/dist/components/chat/ask-display.d.ts.map +1 -0
  65. package/dist/components/chat/chat-message-enhanced.d.ts.map +1 -1
  66. package/dist/components/chat/chat-message-list.d.ts.map +1 -1
  67. package/dist/components/chat/hooks/use-jetstream-dialog-subscription.d.ts +1 -7
  68. package/dist/components/chat/hooks/use-jetstream-dialog-subscription.d.ts.map +1 -1
  69. package/dist/components/chat/index.cjs +3 -3
  70. package/dist/components/chat/index.cjs.map +1 -1
  71. package/dist/components/chat/index.d.ts +1 -0
  72. package/dist/components/chat/index.d.ts.map +1 -1
  73. package/dist/components/chat/index.js +4 -4
  74. package/dist/components/chat/stream/chat-stream-reducer.d.ts.map +1 -1
  75. package/dist/components/chat/types/api.types.d.ts +4 -22
  76. package/dist/components/chat/types/api.types.d.ts.map +1 -1
  77. package/dist/components/chat/types/component.types.d.ts +25 -1
  78. package/dist/components/chat/types/component.types.d.ts.map +1 -1
  79. package/dist/components/chat/types/message.types.d.ts +32 -2
  80. package/dist/components/chat/types/message.types.d.ts.map +1 -1
  81. package/dist/components/chat/utils/message-segment-accumulator.d.ts +8 -1
  82. package/dist/components/chat/utils/message-segment-accumulator.d.ts.map +1 -1
  83. package/dist/components/chat/utils/process-historical-messages.d.ts.map +1 -1
  84. package/dist/components/contact/index.cjs +4 -4
  85. package/dist/components/contact/index.js +3 -3
  86. package/dist/components/docs/index.cjs +6 -6
  87. package/dist/components/docs/index.js +5 -5
  88. package/dist/components/embeds/index.cjs +4 -4
  89. package/dist/components/embeds/index.js +3 -3
  90. package/dist/components/faq/index.cjs +4 -4
  91. package/dist/components/faq/index.js +3 -3
  92. package/dist/components/features/index.cjs +3 -3
  93. package/dist/components/features/index.js +2 -2
  94. package/dist/components/help-center-pages/index.cjs +23 -23
  95. package/dist/components/help-center-pages/index.js +14 -14
  96. package/dist/components/index.cjs +150 -150
  97. package/dist/components/index.js +14 -14
  98. package/dist/components/meeting-scheduler/index.cjs +41 -41
  99. package/dist/components/meeting-scheduler/index.js +5 -5
  100. package/dist/components/navigation/index.cjs +3 -3
  101. package/dist/components/navigation/index.js +2 -2
  102. package/dist/components/onboarding-guides/index.cjs +6 -6
  103. package/dist/components/onboarding-guides/index.js +5 -5
  104. package/dist/components/related-content/index.cjs +4 -4
  105. package/dist/components/related-content/index.js +3 -3
  106. package/dist/components/tickets/index.cjs +7 -7
  107. package/dist/components/tickets/index.js +6 -6
  108. package/dist/components/ui/button/button.d.ts +1 -1
  109. package/dist/components/ui/button/button.d.ts.map +1 -1
  110. package/dist/components/ui/file-manager/index.cjs +15 -15
  111. package/dist/components/ui/file-manager/index.js +1 -1
  112. package/dist/components/ui/index.cjs +3 -3
  113. package/dist/components/ui/index.cjs.map +1 -1
  114. package/dist/components/ui/index.js +4 -4
  115. package/dist/index.cjs +3 -3
  116. package/dist/index.cjs.map +1 -1
  117. package/dist/index.js +4 -4
  118. package/dist/utils/index.cjs.map +1 -1
  119. package/dist/utils/index.js.map +1 -1
  120. package/package.json +1 -1
  121. package/src/chat-protocol/__tests__/__snapshots__/nats-decoder-golden.test.ts.snap +30 -0
  122. package/src/chat-protocol/__tests__/nats-decoder-golden.test.ts +23 -0
  123. package/src/chat-protocol/events.ts +20 -0
  124. package/src/chat-protocol/nats-decoder.ts +32 -0
  125. package/src/components/chat/__tests__/ask-display.test.tsx +101 -0
  126. package/src/components/chat/__tests__/chat-message-list-ask.test.tsx +100 -0
  127. package/src/components/chat/ask-display.tsx +151 -0
  128. package/src/components/chat/chat-message-enhanced.tsx +39 -2
  129. package/src/components/chat/chat-message-list.tsx +18 -1
  130. package/src/components/chat/embeddable-chat.tsx +22 -0
  131. package/src/components/chat/hooks/.use-jetstream-dialog-subscription.md +4 -11
  132. package/src/components/chat/hooks/use-jetstream-dialog-subscription.ts +6 -71
  133. package/src/components/chat/index.ts +1 -0
  134. package/src/components/chat/stream/__tests__/chat-stream-reducer.test.ts +72 -0
  135. package/src/components/chat/stream/chat-stream-reducer.ts +27 -0
  136. package/src/components/chat/types/api.types.ts +4 -22
  137. package/src/components/chat/types/component.types.ts +28 -1
  138. package/src/components/chat/types/message.types.ts +35 -1
  139. package/src/components/chat/utils/__tests__/history-merge.test.ts +0 -99
  140. package/src/components/chat/utils/__tests__/process-historical-messages-golden.test.ts +74 -0
  141. package/src/components/chat/utils/message-segment-accumulator.ts +15 -0
  142. package/src/components/chat/utils/process-historical-messages.ts +26 -0
  143. package/src/components/ui/button/button.tsx +9 -0
  144. package/dist/chunk-LL4C2NXG.js.map +0 -1
  145. package/dist/chunk-MKN6S7SU.cjs.map +0 -1
  146. package/dist/chunk-UBTOOE55.js.map +0 -1
  147. /package/dist/{chunk-KRBH3PI4.js.map → chunk-6WQN7NLD.js.map} +0 -0
  148. /package/dist/{chunk-IVTENGMF.js.map → chunk-7J4DGFHZ.js.map} +0 -0
  149. /package/dist/{chunk-RJU7YCN3.js.map → chunk-BUZOZOQ2.js.map} +0 -0
  150. /package/dist/{chunk-PV3LXEHJ.js.map → chunk-CRJRVUWB.js.map} +0 -0
  151. /package/dist/{chunk-P6M5MN3L.js.map → chunk-HVXGSQ4V.js.map} +0 -0
  152. /package/dist/{chunk-MVY3WDFZ.js.map → chunk-HWA3NZPK.js.map} +0 -0
  153. /package/dist/{chunk-TFIPJAA5.js.map → chunk-JMGVYERE.js.map} +0 -0
  154. /package/dist/{chunk-YUQNJXSC.js.map → chunk-MEWHQVOU.js.map} +0 -0
  155. /package/dist/{chunk-QJHBYNHI.js.map → chunk-OQHHJDUB.js.map} +0 -0
  156. /package/dist/{chunk-NJJWY7SO.js.map → chunk-S4OAWVKF.js.map} +0 -0
  157. /package/dist/{chunk-MOZUJ7IN.js.map → chunk-SAPKMN4W.js.map} +0 -0
  158. /package/dist/{chunk-MI7WNVWX.js.map → chunk-UBT2KBK7.js.map} +0 -0
  159. /package/dist/{chunk-XARCNHWZ.js.map → chunk-VH7BOHRG.js.map} +0 -0
  160. /package/dist/{chunk-PUBL2NCH.js.map → chunk-YACGPO7I.js.map} +0 -0
@@ -1,16 +1,16 @@
1
1
  "use client";
2
2
  import {
3
3
  PersistentPaginationWrapper
4
- } from "./chunk-PUBL2NCH.js";
4
+ } from "./chunk-YACGPO7I.js";
5
5
  import {
6
6
  DeliveryRow
7
- } from "./chunk-MVY3WDFZ.js";
7
+ } from "./chunk-HWA3NZPK.js";
8
8
  import {
9
9
  EmptyState
10
- } from "./chunk-PV3LXEHJ.js";
10
+ } from "./chunk-CRJRVUWB.js";
11
11
  import {
12
12
  DetailPageSkeleton
13
- } from "./chunk-RJU7YCN3.js";
13
+ } from "./chunk-BUZOZOQ2.js";
14
14
  import {
15
15
  useSelfFetch
16
16
  } from "./chunk-RCBRCZUF.js";
@@ -45,7 +45,7 @@ import {
45
45
  resolveContentHref,
46
46
  toStripProfile,
47
47
  useEntityCardLink
48
- } from "./chunk-LL4C2NXG.js";
48
+ } from "./chunk-ZA5PFNHR.js";
49
49
  import {
50
50
  STICKY_HEADER_OFFSET_PX,
51
51
  contentFetch,
@@ -1303,4 +1303,4 @@ export {
1303
1303
  useLegalDocs,
1304
1304
  LegalDocumentPage
1305
1305
  };
1306
- //# sourceMappingURL=chunk-P6M5MN3L.js.map
1306
+ //# sourceMappingURL=chunk-HVXGSQ4V.js.map
@@ -10,7 +10,7 @@ import {
10
10
  TASK_TYPE_LABELS,
11
11
  TASK_TYPE_TEXT_COLORS,
12
12
  getStatusColorScheme
13
- } from "./chunk-LL4C2NXG.js";
13
+ } from "./chunk-ZA5PFNHR.js";
14
14
  import {
15
15
  init_next_navigation,
16
16
  usePathname,
@@ -262,4 +262,4 @@ export {
262
262
  DevCardRowSkeletonList,
263
263
  DeliveryRow
264
264
  };
265
- //# sourceMappingURL=chunk-MVY3WDFZ.js.map
265
+ //# sourceMappingURL=chunk-HWA3NZPK.js.map
@@ -12,7 +12,7 @@ import {
12
12
  SelectValue,
13
13
  Textarea,
14
14
  useChatAttachments
15
- } from "./chunk-LL4C2NXG.js";
15
+ } from "./chunk-ZA5PFNHR.js";
16
16
  import {
17
17
  useContactSubmission,
18
18
  useHumanitySignals
@@ -22,7 +22,7 @@ import {
22
22
  } from "./chunk-27OKD7ZV.js";
23
23
  import {
24
24
  Button
25
- } from "./chunk-UBTOOE55.js";
25
+ } from "./chunk-5OGHZNY5.js";
26
26
 
27
27
  // src/components/contact/contact-form.tsx
28
28
  import { useState } from "react";
@@ -374,4 +374,4 @@ function ContactForm({
374
374
  export {
375
375
  ContactForm
376
376
  };
377
- //# sourceMappingURL=chunk-TFIPJAA5.js.map
377
+ //# sourceMappingURL=chunk-JMGVYERE.js.map
@@ -4,14 +4,14 @@
4
4
 
5
5
 
6
6
 
7
- var _chunkMKN6S7SUcjs = require('./chunk-MKN6S7SU.cjs');
7
+ var _chunk6FLRFCK4cjs = require('./chunk-6FLRFCK4.cjs');
8
8
 
9
9
 
10
10
 
11
11
  var _chunkUTVOBFXRcjs = require('./chunk-UTVOBFXR.cjs');
12
12
 
13
13
 
14
- var _chunkIIPBTWQRcjs = require('./chunk-IIPBTWQR.cjs');
14
+ var _chunk7INXXQVKcjs = require('./chunk-7INXXQVK.cjs');
15
15
 
16
16
  // src/components/embeds/pdf-viewer.tsx
17
17
  var _lucidereact = require('lucide-react');
@@ -25,13 +25,13 @@ function PdfViewer({ src, fileName, onPreview, onDownload, height }) {
25
25
  ] });
26
26
  }
27
27
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
28
- _chunkMKN6S7SUcjs.EmbedViewerFrame,
28
+ _chunk6FLRFCK4cjs.EmbedViewerFrame,
29
29
  {
30
30
  icon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkUTVOBFXRcjs.AdobePdfIcon, { className: "w-5 h-5 shrink-0" }),
31
31
  title: displayName,
32
32
  actions: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center gap-2 w-full sm:w-auto", children: [
33
33
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
34
- _chunkIIPBTWQRcjs.Button,
34
+ _chunk7INXXQVKcjs.Button,
35
35
  {
36
36
  variant: "outline",
37
37
  size: "small-legacy",
@@ -44,7 +44,7 @@ function PdfViewer({ src, fileName, onPreview, onDownload, height }) {
44
44
  }
45
45
  ),
46
46
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
47
- _chunkIIPBTWQRcjs.Button,
47
+ _chunk7INXXQVKcjs.Button,
48
48
  {
49
49
  variant: "outline",
50
50
  size: "small-legacy",
@@ -75,16 +75,16 @@ function GoogleSheetsViewer({ externalUrl, fileName, height }) {
75
75
  ] });
76
76
  }
77
77
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
78
- _chunkMKN6S7SUcjs.EmbedViewerFrame,
78
+ _chunk6FLRFCK4cjs.EmbedViewerFrame,
79
79
  {
80
80
  icon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkUTVOBFXRcjs.GoogleSheetsIcon, { className: "w-5 h-5 shrink-0" }),
81
81
  title: displayName,
82
82
  actions: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
83
- _chunkIIPBTWQRcjs.Button,
83
+ _chunk7INXXQVKcjs.Button,
84
84
  {
85
85
  variant: "outline",
86
86
  size: "small-legacy",
87
- href: _chunkMKN6S7SUcjs.toGoogleSheetsOriginalUrl.call(void 0, externalUrl),
87
+ href: _chunk6FLRFCK4cjs.toGoogleSheetsOriginalUrl.call(void 0, externalUrl),
88
88
  openInNewTab: true,
89
89
  leftIcon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkUTVOBFXRcjs.GoogleSheetsIcon, { className: "w-4 h-4" }),
90
90
  rightIcon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.ExternalLink, { className: "w-4 h-4" }),
@@ -92,7 +92,7 @@ function GoogleSheetsViewer({ externalUrl, fileName, height }) {
92
92
  children: "Open in Google Sheets"
93
93
  }
94
94
  ),
95
- src: _chunkMKN6S7SUcjs.toGoogleSheetsEmbedUrl.call(void 0, externalUrl),
95
+ src: _chunk6FLRFCK4cjs.toGoogleSheetsEmbedUrl.call(void 0, externalUrl),
96
96
  height
97
97
  }
98
98
  );
@@ -113,11 +113,11 @@ function FileDownloadCard({
113
113
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "h3", { className: "text-h3 text-ods-text-primary", children: fileName || "File" }),
114
114
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center justify-center gap-3 mt-2 text-h6 text-ods-text-secondary", children: [
115
115
  mimeType && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { children: mimeType }),
116
- typeof fileSize === "number" && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { children: _chunkMKN6S7SUcjs.formatFileSize.call(void 0, fileSize) })
116
+ typeof fileSize === "number" && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { children: _chunk6FLRFCK4cjs.formatFileSize.call(void 0, fileSize) })
117
117
  ] })
118
118
  ] }),
119
119
  fileUrl && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
120
- _chunkIIPBTWQRcjs.Button,
120
+ _chunk7INXXQVKcjs.Button,
121
121
  {
122
122
  variant: "accent",
123
123
  href: fileUrl,
@@ -134,4 +134,4 @@ function FileDownloadCard({
134
134
 
135
135
 
136
136
  exports.PdfViewer = PdfViewer; exports.GoogleSheetsViewer = GoogleSheetsViewer; exports.FileDownloadCard = FileDownloadCard;
137
- //# sourceMappingURL=chunk-25JSVBPR.cjs.map
137
+ //# sourceMappingURL=chunk-KCDKQXE5.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/openframe-oss-lib/openframe-oss-lib/openframe-frontend-core/dist/chunk-25JSVBPR.cjs","../src/components/embeds/pdf-viewer.tsx","../src/components/embeds/google-sheets-viewer.tsx","../src/components/embeds/file-download-card.tsx"],"names":["jsxs","jsx","Download"],"mappings":"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","file":"/home/runner/work/openframe-oss-lib/openframe-oss-lib/openframe-frontend-core/dist/chunk-25JSVBPR.cjs","sourcesContent":[null,"\"use client\"\n\nimport React from 'react'\nimport { Button } from '../ui'\nimport { Download, Eye } from 'lucide-react'\nimport { AdobePdfIcon } from '../icons-v2-generated'\nimport { EmbedViewerFrame } from './embed-viewer-frame'\n\nexport interface PdfViewerProps {\n src: string\n fileName?: string\n onPreview?: () => void\n onDownload?: () => void\n height?: string\n}\n\nexport function PdfViewer({ src, fileName, onPreview, onDownload, height }: PdfViewerProps) {\n const displayName = fileName || 'PDF Document'\n\n // Historical shape: no src at all → standalone empty state with NO header.\n if (!src) {\n return (\n <div className=\"flex flex-col items-center justify-center py-16 text-center\">\n <AdobePdfIcon className=\"w-16 h-16 text-ods-text-secondary mb-4\" />\n <p className=\"text-ods-text-secondary\">PDF file not available</p>\n </div>\n )\n }\n\n return (\n <EmbedViewerFrame\n icon={<AdobePdfIcon className=\"w-5 h-5 shrink-0\" />}\n title={displayName}\n actions={\n <div className=\"flex items-center gap-2 w-full sm:w-auto\">\n <Button\n variant=\"outline\"\n size=\"small-legacy\"\n href={onPreview ? undefined : src}\n openInNewTab={!onPreview}\n onClick={onPreview}\n leftIcon={<Eye className=\"w-4 h-4\" />}\n className=\"flex-1 sm:flex-initial\"\n >\n Preview\n </Button>\n <Button\n variant=\"outline\"\n size=\"small-legacy\"\n href={onDownload ? undefined : src}\n openInNewTab={!onDownload}\n onClick={onDownload}\n leftIcon={<Download className=\"w-4 h-4\" />}\n className=\"flex-1 sm:flex-initial\"\n >\n Download\n </Button>\n </div>\n }\n src={src}\n height={height}\n />\n )\n}\n","\"use client\"\n\nimport React from 'react'\nimport { Button } from '../ui'\nimport { ExternalLink } from 'lucide-react'\nimport { GoogleSheetsIcon } from '../icons-v2-generated'\nimport { EmbedViewerFrame } from './embed-viewer-frame'\nimport { toGoogleSheetsEmbedUrl, toGoogleSheetsOriginalUrl } from '../../utils/embed-url-converters'\n\nexport interface GoogleSheetsViewerProps {\n externalUrl: string\n fileName?: string\n height?: string\n}\n\nexport function GoogleSheetsViewer({ externalUrl, fileName, height }: GoogleSheetsViewerProps) {\n const displayName = fileName || 'Google Sheet'\n\n // Historical shape: no URL at all → standalone empty state with NO header\n // (the frame's empty body keeps the header — that's the figma behavior).\n if (!externalUrl) {\n return (\n <div className=\"flex flex-col items-center justify-center py-16 text-center\">\n <GoogleSheetsIcon className=\"w-16 h-16 text-ods-text-secondary mb-4\" />\n <p className=\"text-ods-text-secondary\">Google Sheet URL not configured</p>\n </div>\n )\n }\n\n return (\n <EmbedViewerFrame\n icon={<GoogleSheetsIcon className=\"w-5 h-5 shrink-0\" />}\n title={displayName}\n actions={\n <Button\n variant=\"outline\"\n size=\"small-legacy\"\n href={toGoogleSheetsOriginalUrl(externalUrl)}\n openInNewTab\n leftIcon={<GoogleSheetsIcon className=\"w-4 h-4\" />}\n rightIcon={<ExternalLink className=\"w-4 h-4\" />}\n className=\"w-full sm:w-auto\"\n >\n Open in Google Sheets\n </Button>\n }\n src={toGoogleSheetsEmbedUrl(externalUrl)}\n height={height}\n />\n )\n}\n","import React from 'react'\nimport { Button } from '../ui'\nimport { FileText, Download } from 'lucide-react'\nimport { formatFileSize } from '../../utils'\n\nexport interface FileDownloadCardProps {\n fileName?: string\n mimeType?: string\n fileSize?: number\n fileUrl?: string\n}\n\n/**\n * Generic downloadable-file card for the `file` document type. Used by\n * `<DocsHubPage>`'s default `documentTypeRenderers.file`. Embedders can\n * override the default by passing their own `file` renderer.\n *\n * When `fileUrl` is missing, the Download button is omitted (the card still\n * renders the filename + type + size so the user knows what they were\n * about to download).\n */\nexport function FileDownloadCard({\n fileName,\n mimeType,\n fileSize,\n fileUrl,\n}: FileDownloadCardProps) {\n return (\n <div className=\"flex flex-col items-center justify-center py-16\">\n <div className=\"bg-ods-card border border-ods-border rounded-xl p-8 max-w-md w-full text-center space-y-4\">\n <FileText className=\"w-16 h-16 text-ods-text-secondary mx-auto\" />\n <div>\n <h3 className=\"text-h3 text-ods-text-primary\">\n {fileName || 'File'}\n </h3>\n <div className=\"flex items-center justify-center gap-3 mt-2 text-h6 text-ods-text-secondary\">\n {mimeType && <span>{mimeType}</span>}\n {typeof fileSize === 'number' && <span>{formatFileSize(fileSize)}</span>}\n </div>\n </div>\n {fileUrl && (\n <Button\n variant=\"accent\"\n href={fileUrl}\n openInNewTab\n leftIcon={<Download className=\"w-4 h-4\" />}\n >\n Download File\n </Button>\n )}\n </div>\n </div>\n )\n}\n"]}
1
+ {"version":3,"sources":["/home/runner/work/openframe-oss-lib/openframe-oss-lib/openframe-frontend-core/dist/chunk-KCDKQXE5.cjs","../src/components/embeds/pdf-viewer.tsx","../src/components/embeds/google-sheets-viewer.tsx","../src/components/embeds/file-download-card.tsx"],"names":["jsxs","jsx","Download"],"mappings":"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","file":"/home/runner/work/openframe-oss-lib/openframe-oss-lib/openframe-frontend-core/dist/chunk-KCDKQXE5.cjs","sourcesContent":[null,"\"use client\"\n\nimport React from 'react'\nimport { Button } from '../ui'\nimport { Download, Eye } from 'lucide-react'\nimport { AdobePdfIcon } from '../icons-v2-generated'\nimport { EmbedViewerFrame } from './embed-viewer-frame'\n\nexport interface PdfViewerProps {\n src: string\n fileName?: string\n onPreview?: () => void\n onDownload?: () => void\n height?: string\n}\n\nexport function PdfViewer({ src, fileName, onPreview, onDownload, height }: PdfViewerProps) {\n const displayName = fileName || 'PDF Document'\n\n // Historical shape: no src at all → standalone empty state with NO header.\n if (!src) {\n return (\n <div className=\"flex flex-col items-center justify-center py-16 text-center\">\n <AdobePdfIcon className=\"w-16 h-16 text-ods-text-secondary mb-4\" />\n <p className=\"text-ods-text-secondary\">PDF file not available</p>\n </div>\n )\n }\n\n return (\n <EmbedViewerFrame\n icon={<AdobePdfIcon className=\"w-5 h-5 shrink-0\" />}\n title={displayName}\n actions={\n <div className=\"flex items-center gap-2 w-full sm:w-auto\">\n <Button\n variant=\"outline\"\n size=\"small-legacy\"\n href={onPreview ? undefined : src}\n openInNewTab={!onPreview}\n onClick={onPreview}\n leftIcon={<Eye className=\"w-4 h-4\" />}\n className=\"flex-1 sm:flex-initial\"\n >\n Preview\n </Button>\n <Button\n variant=\"outline\"\n size=\"small-legacy\"\n href={onDownload ? undefined : src}\n openInNewTab={!onDownload}\n onClick={onDownload}\n leftIcon={<Download className=\"w-4 h-4\" />}\n className=\"flex-1 sm:flex-initial\"\n >\n Download\n </Button>\n </div>\n }\n src={src}\n height={height}\n />\n )\n}\n","\"use client\"\n\nimport React from 'react'\nimport { Button } from '../ui'\nimport { ExternalLink } from 'lucide-react'\nimport { GoogleSheetsIcon } from '../icons-v2-generated'\nimport { EmbedViewerFrame } from './embed-viewer-frame'\nimport { toGoogleSheetsEmbedUrl, toGoogleSheetsOriginalUrl } from '../../utils/embed-url-converters'\n\nexport interface GoogleSheetsViewerProps {\n externalUrl: string\n fileName?: string\n height?: string\n}\n\nexport function GoogleSheetsViewer({ externalUrl, fileName, height }: GoogleSheetsViewerProps) {\n const displayName = fileName || 'Google Sheet'\n\n // Historical shape: no URL at all → standalone empty state with NO header\n // (the frame's empty body keeps the header — that's the figma behavior).\n if (!externalUrl) {\n return (\n <div className=\"flex flex-col items-center justify-center py-16 text-center\">\n <GoogleSheetsIcon className=\"w-16 h-16 text-ods-text-secondary mb-4\" />\n <p className=\"text-ods-text-secondary\">Google Sheet URL not configured</p>\n </div>\n )\n }\n\n return (\n <EmbedViewerFrame\n icon={<GoogleSheetsIcon className=\"w-5 h-5 shrink-0\" />}\n title={displayName}\n actions={\n <Button\n variant=\"outline\"\n size=\"small-legacy\"\n href={toGoogleSheetsOriginalUrl(externalUrl)}\n openInNewTab\n leftIcon={<GoogleSheetsIcon className=\"w-4 h-4\" />}\n rightIcon={<ExternalLink className=\"w-4 h-4\" />}\n className=\"w-full sm:w-auto\"\n >\n Open in Google Sheets\n </Button>\n }\n src={toGoogleSheetsEmbedUrl(externalUrl)}\n height={height}\n />\n )\n}\n","import React from 'react'\nimport { Button } from '../ui'\nimport { FileText, Download } from 'lucide-react'\nimport { formatFileSize } from '../../utils'\n\nexport interface FileDownloadCardProps {\n fileName?: string\n mimeType?: string\n fileSize?: number\n fileUrl?: string\n}\n\n/**\n * Generic downloadable-file card for the `file` document type. Used by\n * `<DocsHubPage>`'s default `documentTypeRenderers.file`. Embedders can\n * override the default by passing their own `file` renderer.\n *\n * When `fileUrl` is missing, the Download button is omitted (the card still\n * renders the filename + type + size so the user knows what they were\n * about to download).\n */\nexport function FileDownloadCard({\n fileName,\n mimeType,\n fileSize,\n fileUrl,\n}: FileDownloadCardProps) {\n return (\n <div className=\"flex flex-col items-center justify-center py-16\">\n <div className=\"bg-ods-card border border-ods-border rounded-xl p-8 max-w-md w-full text-center space-y-4\">\n <FileText className=\"w-16 h-16 text-ods-text-secondary mx-auto\" />\n <div>\n <h3 className=\"text-h3 text-ods-text-primary\">\n {fileName || 'File'}\n </h3>\n <div className=\"flex items-center justify-center gap-3 mt-2 text-h6 text-ods-text-secondary\">\n {mimeType && <span>{mimeType}</span>}\n {typeof fileSize === 'number' && <span>{formatFileSize(fileSize)}</span>}\n </div>\n </div>\n {fileUrl && (\n <Button\n variant=\"accent\"\n href={fileUrl}\n openInNewTab\n leftIcon={<Download className=\"w-4 h-4\" />}\n >\n Download File\n </Button>\n )}\n </div>\n </div>\n )\n}\n"]}
@@ -11,7 +11,7 @@ import {
11
11
  faqSectionSlug,
12
12
  parseFaqHash,
13
13
  serializeJsonLd
14
- } from "./chunk-LL4C2NXG.js";
14
+ } from "./chunk-ZA5PFNHR.js";
15
15
  import {
16
16
  STICKY_HEADER_OFFSET_PX,
17
17
  navigateSamePageHash,
@@ -382,4 +382,4 @@ export {
382
382
  FaqSection,
383
383
  FaqDocumentPage
384
384
  };
385
- //# sourceMappingURL=chunk-YUQNJXSC.js.map
385
+ //# sourceMappingURL=chunk-MEWHQVOU.js.map
@@ -2,7 +2,7 @@
2
2
 
3
3
 
4
4
 
5
- var _chunkIIPBTWQRcjs = require('./chunk-IIPBTWQR.cjs');
5
+ var _chunk7INXXQVKcjs = require('./chunk-7INXXQVK.cjs');
6
6
 
7
7
 
8
8
 
@@ -10,7 +10,7 @@ var _chunkKI4EGKNVcjs = require('./chunk-KI4EGKNV.cjs');
10
10
 
11
11
  // src/components/calendar.tsx
12
12
  _chunkKI4EGKNVcjs.init_cn.call(void 0, );
13
- _chunkIIPBTWQRcjs.init_button2.call(void 0, );
13
+ _chunk7INXXQVKcjs.init_button2.call(void 0, );
14
14
  var _lucidereact = require('lucide-react');
15
15
  var _reactdaypicker = require('react-day-picker');
16
16
  var _jsxruntime = require('react/jsx-runtime');
@@ -36,11 +36,11 @@ function Calendar({
36
36
  // `aria-disabled` depending on the react-day-picker code path — style
37
37
  // both (the same pairing buttonSurfaceClasses uses).
38
38
  button_previous: _chunkKI4EGKNVcjs.cn.call(void 0,
39
- _chunkIIPBTWQRcjs.buttonVariants.call(void 0, { variant: "outline", size: "icon-sm" }),
39
+ _chunk7INXXQVKcjs.buttonVariants.call(void 0, { variant: "outline", size: "icon-sm" }),
40
40
  "bg-transparent opacity-60 hover:opacity-100 disabled:opacity-25 aria-disabled:opacity-25 aria-disabled:pointer-events-none"
41
41
  ),
42
42
  button_next: _chunkKI4EGKNVcjs.cn.call(void 0,
43
- _chunkIIPBTWQRcjs.buttonVariants.call(void 0, { variant: "outline", size: "icon-sm" }),
43
+ _chunk7INXXQVKcjs.buttonVariants.call(void 0, { variant: "outline", size: "icon-sm" }),
44
44
  "bg-transparent opacity-60 hover:opacity-100 disabled:opacity-25 aria-disabled:opacity-25 aria-disabled:pointer-events-none"
45
45
  ),
46
46
  month_caption: "flex h-8 items-center justify-center",
@@ -53,7 +53,7 @@ function Calendar({
53
53
  // 'icon-sm' again: a size MUST be passed or the default's `md:h-12` +
54
54
  // `text-h3` leak through and inflate day cells on desktop.
55
55
  day_button: _chunkKI4EGKNVcjs.cn.call(void 0,
56
- _chunkIIPBTWQRcjs.buttonVariants.call(void 0, { variant: "transparent", size: "icon-sm" }),
56
+ _chunk7INXXQVKcjs.buttonVariants.call(void 0, { variant: "transparent", size: "icon-sm" }),
57
57
  "h-9 w-9 rounded-md p-0 text-h6 font-normal text-ods-text-primary"
58
58
  ),
59
59
  selected: "[&>button]:bg-ods-accent [&>button]:text-ods-text-on-accent [&>button]:hover:bg-ods-accent",
@@ -85,4 +85,4 @@ Calendar.displayName = "Calendar";
85
85
 
86
86
 
87
87
  exports.Calendar = Calendar;
88
- //# sourceMappingURL=chunk-K26W23C2.cjs.map
88
+ //# sourceMappingURL=chunk-MKPJYEOR.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/openframe-oss-lib/openframe-oss-lib/openframe-frontend-core/dist/chunk-K26W23C2.cjs","../src/components/calendar.tsx"],"names":[],"mappings":"AAAA,qFAAY;AACZ;AACE;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACF,wDAA6B;AAC7B;AACA;ACJA,uCAAA,CAAA;AACA,4CAAA,CAAA;AAJA,2CAAkE;AAClE,kDAA0B;AA6EoB,+CAAA;AAzD9C,SAAS,QAAA,CAAS;AAAA,EAChB,SAAA;AAAA,EACA,UAAA;AAAA,EACA,gBAAA,EAAkB,IAAA;AAAA,EAClB,GAAG;AACL,CAAA,EAAkB;AAChB,EAAA,uBACE,6BAAA;AAAA,IAAC,yBAAA;AAAA,IAAA;AAAA,MACC,eAAA;AAAA,MACA,SAAA,EAAW,kCAAA,KAAG,EAAO,SAAS,CAAA;AAAA,MAC9B,UAAA,EAAY;AAAA,QACV,MAAA,EAAQ,mEAAA;AAAA,QACR,KAAA,EAAO,6CAAA;AAAA,QACP,GAAA,EAAK,qEAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAOL,eAAA,EAAiB,kCAAA;AAAA,UACf,8CAAA,EAAiB,OAAA,EAAS,SAAA,EAAW,IAAA,EAAM,UAAU,CAAC,CAAA;AAAA,UACtD;AAAA,QACF,CAAA;AAAA,QACA,WAAA,EAAa,kCAAA;AAAA,UACX,8CAAA,EAAiB,OAAA,EAAS,SAAA,EAAW,IAAA,EAAM,UAAU,CAAC,CAAA;AAAA,UACtD;AAAA,QACF,CAAA;AAAA,QACA,aAAA,EAAe,sCAAA;AAAA,QACf,aAAA,EAAe,+BAAA;AAAA,QACf,UAAA,EAAY,oCAAA;AAAA,QACZ,QAAA,EAAU,EAAA;AAAA,QACV,OAAA,EAAS,kFAAA;AAAA,QACT,IAAA,EAAM,EAAA;AAAA,QACN,GAAA,EAAK,sCAAA;AAAA;AAAA;AAAA,QAGL,UAAA,EAAY,kCAAA;AAAA,UACV,8CAAA,EAAiB,OAAA,EAAS,aAAA,EAAe,IAAA,EAAM,UAAU,CAAC,CAAA;AAAA,UAC1D;AAAA,QACF,CAAA;AAAA,QACA,QAAA,EACE,4FAAA;AAAA,QACF,KAAA,EAAO,8EAAA;AAAA,QACP,OAAA,EAAS,sDAAA;AAAA;AAAA;AAAA;AAAA,QAIT,QAAA,EACE,yGAAA;AAAA,QACF,MAAA,EAAQ,WAAA;AAAA,QACR,GAAG;AAAA,MACL,CAAA;AAAA,MACA,UAAA,EAAY;AAAA;AAAA,QAEV,OAAA,EAAS,CAAC,EAAE,WAAA,EAAa,SAAA,EAAW,iBAAiB,CAAA,EAAA,GAAM;AACzD,UAAA,MAAM,IAAA,EAAM,kCAAA,SAAG,EAAW,gBAAgB,CAAA;AAC1C,UAAA,GAAA,CAAI,YAAA,IAAgB,OAAA,EAAS,uBAAO,6BAAA,yBAAC,EAAA,EAAa,SAAA,EAAW,IAAA,CAAK,CAAA;AAClE,UAAA,GAAA,CAAI,YAAA,IAAgB,IAAA,EAAM,uBAAO,6BAAA,sBAAC,EAAA,EAAU,SAAA,EAAW,IAAA,CAAK,CAAA;AAC5D,UAAA,GAAA,CAAI,YAAA,IAAgB,MAAA,EAAQ,uBAAO,6BAAA,wBAAC,EAAA,EAAY,SAAA,EAAW,IAAA,CAAK,CAAA;AAChE,UAAA,uBAAO,6BAAA,wBAAC,EAAA,EAAY,SAAA,EAAW,IAAA,CAAK,CAAA;AAAA,QACtC;AAAA,MACF,CAAA;AAAA,MACC,GAAG;AAAA,IAAA;AAAA,EACN,CAAA;AAEJ;AACA,QAAA,CAAS,YAAA,EAAc,UAAA;ADRvB;AACA;AACE;AACF,4BAAC","file":"/home/runner/work/openframe-oss-lib/openframe-oss-lib/openframe-frontend-core/dist/chunk-K26W23C2.cjs","sourcesContent":[null,"\"use client\"\n\nimport * as React from \"react\"\nimport { ChevronDown, ChevronLeft, ChevronRight, ChevronUp } from \"lucide-react\"\nimport { DayPicker } from \"react-day-picker\"\n\nimport { cn } from \"../utils/cn\"\nimport { buttonVariants } from \"./ui/button\"\n\nexport type CalendarProps = React.ComponentProps<typeof DayPicker>\n\n/**\n * ODS-styled DayPicker wrapper.\n *\n * IMPORTANT: the installed react-day-picker is **v9** — the classNames keys\n * below are the v9 vocabulary (`weekdays`/`weekday`/`week`/`day`/`day_button`/\n * `selected`/`disabled`/…). The previous v8 shadcn map (`head_row`, `cell`,\n * `day_selected`, …) was silently IGNORED by v9, which shipped default\n * browser-table chrome: misaligned weekday headers, no disabled styling,\n * wrapping rows on mobile. Do not reintroduce v8 keys.\n *\n * Day-cell display stays `table-cell` (only the inner `day_button` is\n * flex) — converting `<td>`s to inline-flex is what made rows wrap.\n */\nfunction Calendar({\n className,\n classNames,\n showOutsideDays = true,\n ...props\n}: CalendarProps) {\n return (\n <DayPicker\n showOutsideDays={showOutsideDays}\n className={cn(\"p-3\", className)}\n classNames={{\n months: \"relative flex flex-col md:flex-row gap-[var(--spacing-system-mf)]\",\n month: \"flex flex-col gap-[var(--spacing-system-s)]\",\n nav: \"absolute inset-x-0 top-0 z-10 flex h-8 items-center justify-between\",\n // size 'icon-sm' = the lib's fixed 32px icon button (no md: growth —\n // the DEFAULT size carries `md:h-12`, which tailwind-merge does NOT\n // drop for a plain `h-8` override and the nav ballooned on desktop).\n // Boundary-month nav state arrives as BOTH native `disabled` and\n // `aria-disabled` depending on the react-day-picker code path — style\n // both (the same pairing buttonSurfaceClasses uses).\n button_previous: cn(\n buttonVariants({ variant: \"outline\", size: \"icon-sm\" }),\n \"bg-transparent opacity-60 hover:opacity-100 disabled:opacity-25 aria-disabled:opacity-25 aria-disabled:pointer-events-none\"\n ),\n button_next: cn(\n buttonVariants({ variant: \"outline\", size: \"icon-sm\" }),\n \"bg-transparent opacity-60 hover:opacity-100 disabled:opacity-25 aria-disabled:opacity-25 aria-disabled:pointer-events-none\"\n ),\n month_caption: \"flex h-8 items-center justify-center\",\n caption_label: \"text-h6 text-ods-text-primary\",\n month_grid: \"border-separate border-spacing-y-1\",\n weekdays: \"\",\n weekday: \"h-9 w-9 p-0 text-center align-middle text-h6 font-normal text-ods-text-secondary\",\n week: \"\",\n day: \"h-9 w-9 p-0 text-center align-middle\",\n // 'icon-sm' again: a size MUST be passed or the default's `md:h-12` +\n // `text-h3` leak through and inflate day cells on desktop.\n day_button: cn(\n buttonVariants({ variant: \"transparent\", size: \"icon-sm\" }),\n \"h-9 w-9 rounded-md p-0 text-h6 font-normal text-ods-text-primary\"\n ),\n selected:\n \"[&>button]:bg-ods-accent [&>button]:text-ods-text-on-accent [&>button]:hover:bg-ods-accent\",\n today: \"[&>button]:text-ods-accent [&[aria-selected]>button]:text-ods-text-on-accent\",\n outside: \"[&>button]:text-ods-text-muted [&>button]:opacity-50\",\n // `cursor-not-allowed` on the CELL, not the button: the day button is a\n // core `Button`, whose disabled state carries `pointer-events-none`, so\n // a cursor set on it never applies — the pointer is over the cell.\n disabled:\n \"cursor-not-allowed [&>button]:text-ods-text-muted [&>button]:opacity-40 [&>button]:hover:bg-transparent\",\n hidden: \"invisible\",\n ...classNames,\n }}\n components={{\n // v9 passes 'up'/'down' for dropdown captions too — branch all four.\n Chevron: ({ orientation, className: chevronClassName }) => {\n const cls = cn(\"h-4 w-4\", chevronClassName)\n if (orientation === \"right\") return <ChevronRight className={cls} />\n if (orientation === \"up\") return <ChevronUp className={cls} />\n if (orientation === \"down\") return <ChevronDown className={cls} />\n return <ChevronLeft className={cls} />\n },\n }}\n {...props}\n />\n )\n}\nCalendar.displayName = \"Calendar\"\n\nexport { Calendar }\n"]}
1
+ {"version":3,"sources":["/home/runner/work/openframe-oss-lib/openframe-oss-lib/openframe-frontend-core/dist/chunk-MKPJYEOR.cjs","../src/components/calendar.tsx"],"names":[],"mappings":"AAAA,qFAAY;AACZ;AACE;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACF,wDAA6B;AAC7B;AACA;ACJA,uCAAA,CAAA;AACA,4CAAA,CAAA;AAJA,2CAAkE;AAClE,kDAA0B;AA6EoB,+CAAA;AAzD9C,SAAS,QAAA,CAAS;AAAA,EAChB,SAAA;AAAA,EACA,UAAA;AAAA,EACA,gBAAA,EAAkB,IAAA;AAAA,EAClB,GAAG;AACL,CAAA,EAAkB;AAChB,EAAA,uBACE,6BAAA;AAAA,IAAC,yBAAA;AAAA,IAAA;AAAA,MACC,eAAA;AAAA,MACA,SAAA,EAAW,kCAAA,KAAG,EAAO,SAAS,CAAA;AAAA,MAC9B,UAAA,EAAY;AAAA,QACV,MAAA,EAAQ,mEAAA;AAAA,QACR,KAAA,EAAO,6CAAA;AAAA,QACP,GAAA,EAAK,qEAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAOL,eAAA,EAAiB,kCAAA;AAAA,UACf,8CAAA,EAAiB,OAAA,EAAS,SAAA,EAAW,IAAA,EAAM,UAAU,CAAC,CAAA;AAAA,UACtD;AAAA,QACF,CAAA;AAAA,QACA,WAAA,EAAa,kCAAA;AAAA,UACX,8CAAA,EAAiB,OAAA,EAAS,SAAA,EAAW,IAAA,EAAM,UAAU,CAAC,CAAA;AAAA,UACtD;AAAA,QACF,CAAA;AAAA,QACA,aAAA,EAAe,sCAAA;AAAA,QACf,aAAA,EAAe,+BAAA;AAAA,QACf,UAAA,EAAY,oCAAA;AAAA,QACZ,QAAA,EAAU,EAAA;AAAA,QACV,OAAA,EAAS,kFAAA;AAAA,QACT,IAAA,EAAM,EAAA;AAAA,QACN,GAAA,EAAK,sCAAA;AAAA;AAAA;AAAA,QAGL,UAAA,EAAY,kCAAA;AAAA,UACV,8CAAA,EAAiB,OAAA,EAAS,aAAA,EAAe,IAAA,EAAM,UAAU,CAAC,CAAA;AAAA,UAC1D;AAAA,QACF,CAAA;AAAA,QACA,QAAA,EACE,4FAAA;AAAA,QACF,KAAA,EAAO,8EAAA;AAAA,QACP,OAAA,EAAS,sDAAA;AAAA;AAAA;AAAA;AAAA,QAIT,QAAA,EACE,yGAAA;AAAA,QACF,MAAA,EAAQ,WAAA;AAAA,QACR,GAAG;AAAA,MACL,CAAA;AAAA,MACA,UAAA,EAAY;AAAA;AAAA,QAEV,OAAA,EAAS,CAAC,EAAE,WAAA,EAAa,SAAA,EAAW,iBAAiB,CAAA,EAAA,GAAM;AACzD,UAAA,MAAM,IAAA,EAAM,kCAAA,SAAG,EAAW,gBAAgB,CAAA;AAC1C,UAAA,GAAA,CAAI,YAAA,IAAgB,OAAA,EAAS,uBAAO,6BAAA,yBAAC,EAAA,EAAa,SAAA,EAAW,IAAA,CAAK,CAAA;AAClE,UAAA,GAAA,CAAI,YAAA,IAAgB,IAAA,EAAM,uBAAO,6BAAA,sBAAC,EAAA,EAAU,SAAA,EAAW,IAAA,CAAK,CAAA;AAC5D,UAAA,GAAA,CAAI,YAAA,IAAgB,MAAA,EAAQ,uBAAO,6BAAA,wBAAC,EAAA,EAAY,SAAA,EAAW,IAAA,CAAK,CAAA;AAChE,UAAA,uBAAO,6BAAA,wBAAC,EAAA,EAAY,SAAA,EAAW,IAAA,CAAK,CAAA;AAAA,QACtC;AAAA,MACF,CAAA;AAAA,MACC,GAAG;AAAA,IAAA;AAAA,EACN,CAAA;AAEJ;AACA,QAAA,CAAS,YAAA,EAAc,UAAA;ADRvB;AACA;AACE;AACF,4BAAC","file":"/home/runner/work/openframe-oss-lib/openframe-oss-lib/openframe-frontend-core/dist/chunk-MKPJYEOR.cjs","sourcesContent":[null,"\"use client\"\n\nimport * as React from \"react\"\nimport { ChevronDown, ChevronLeft, ChevronRight, ChevronUp } from \"lucide-react\"\nimport { DayPicker } from \"react-day-picker\"\n\nimport { cn } from \"../utils/cn\"\nimport { buttonVariants } from \"./ui/button\"\n\nexport type CalendarProps = React.ComponentProps<typeof DayPicker>\n\n/**\n * ODS-styled DayPicker wrapper.\n *\n * IMPORTANT: the installed react-day-picker is **v9** — the classNames keys\n * below are the v9 vocabulary (`weekdays`/`weekday`/`week`/`day`/`day_button`/\n * `selected`/`disabled`/…). The previous v8 shadcn map (`head_row`, `cell`,\n * `day_selected`, …) was silently IGNORED by v9, which shipped default\n * browser-table chrome: misaligned weekday headers, no disabled styling,\n * wrapping rows on mobile. Do not reintroduce v8 keys.\n *\n * Day-cell display stays `table-cell` (only the inner `day_button` is\n * flex) — converting `<td>`s to inline-flex is what made rows wrap.\n */\nfunction Calendar({\n className,\n classNames,\n showOutsideDays = true,\n ...props\n}: CalendarProps) {\n return (\n <DayPicker\n showOutsideDays={showOutsideDays}\n className={cn(\"p-3\", className)}\n classNames={{\n months: \"relative flex flex-col md:flex-row gap-[var(--spacing-system-mf)]\",\n month: \"flex flex-col gap-[var(--spacing-system-s)]\",\n nav: \"absolute inset-x-0 top-0 z-10 flex h-8 items-center justify-between\",\n // size 'icon-sm' = the lib's fixed 32px icon button (no md: growth —\n // the DEFAULT size carries `md:h-12`, which tailwind-merge does NOT\n // drop for a plain `h-8` override and the nav ballooned on desktop).\n // Boundary-month nav state arrives as BOTH native `disabled` and\n // `aria-disabled` depending on the react-day-picker code path — style\n // both (the same pairing buttonSurfaceClasses uses).\n button_previous: cn(\n buttonVariants({ variant: \"outline\", size: \"icon-sm\" }),\n \"bg-transparent opacity-60 hover:opacity-100 disabled:opacity-25 aria-disabled:opacity-25 aria-disabled:pointer-events-none\"\n ),\n button_next: cn(\n buttonVariants({ variant: \"outline\", size: \"icon-sm\" }),\n \"bg-transparent opacity-60 hover:opacity-100 disabled:opacity-25 aria-disabled:opacity-25 aria-disabled:pointer-events-none\"\n ),\n month_caption: \"flex h-8 items-center justify-center\",\n caption_label: \"text-h6 text-ods-text-primary\",\n month_grid: \"border-separate border-spacing-y-1\",\n weekdays: \"\",\n weekday: \"h-9 w-9 p-0 text-center align-middle text-h6 font-normal text-ods-text-secondary\",\n week: \"\",\n day: \"h-9 w-9 p-0 text-center align-middle\",\n // 'icon-sm' again: a size MUST be passed or the default's `md:h-12` +\n // `text-h3` leak through and inflate day cells on desktop.\n day_button: cn(\n buttonVariants({ variant: \"transparent\", size: \"icon-sm\" }),\n \"h-9 w-9 rounded-md p-0 text-h6 font-normal text-ods-text-primary\"\n ),\n selected:\n \"[&>button]:bg-ods-accent [&>button]:text-ods-text-on-accent [&>button]:hover:bg-ods-accent\",\n today: \"[&>button]:text-ods-accent [&[aria-selected]>button]:text-ods-text-on-accent\",\n outside: \"[&>button]:text-ods-text-muted [&>button]:opacity-50\",\n // `cursor-not-allowed` on the CELL, not the button: the day button is a\n // core `Button`, whose disabled state carries `pointer-events-none`, so\n // a cursor set on it never applies — the pointer is over the cell.\n disabled:\n \"cursor-not-allowed [&>button]:text-ods-text-muted [&>button]:opacity-40 [&>button]:hover:bg-transparent\",\n hidden: \"invisible\",\n ...classNames,\n }}\n components={{\n // v9 passes 'up'/'down' for dropdown captions too — branch all four.\n Chevron: ({ orientation, className: chevronClassName }) => {\n const cls = cn(\"h-4 w-4\", chevronClassName)\n if (orientation === \"right\") return <ChevronRight className={cls} />\n if (orientation === \"up\") return <ChevronUp className={cls} />\n if (orientation === \"down\") return <ChevronDown className={cls} />\n return <ChevronLeft className={cls} />\n },\n }}\n {...props}\n />\n )\n}\nCalendar.displayName = \"Calendar\"\n\nexport { Calendar }\n"]}
@@ -2,7 +2,7 @@
2
2
 
3
3
 
4
4
 
5
- var _chunkYH627NWEcjs = require('./chunk-YH627NWE.cjs');
5
+ var _chunkQQZWLTYUcjs = require('./chunk-QQZWLTYU.cjs');
6
6
 
7
7
 
8
8
 
@@ -112,7 +112,7 @@ function PersistentPaginationWrapper({
112
112
  const displayCurrentPage = hasResults ? currentPage : 1;
113
113
  const isPaginationDisabled = isLoading;
114
114
  const hasNoResults = !hasResults && !isLoading;
115
- const PaginationComponent = (_chunkYH627NWEcjs.init_unified_pagination.call(void 0, ), _chunkVRHGVLSLcjs.__toCommonJS.call(void 0, _chunkYH627NWEcjs.unified_pagination_exports)).UnifiedPagination;
115
+ const PaginationComponent = (_chunkQQZWLTYUcjs.init_unified_pagination.call(void 0, ), _chunkVRHGVLSLcjs.__toCommonJS.call(void 0, _chunkQQZWLTYUcjs.unified_pagination_exports)).UnifiedPagination;
116
116
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
117
117
  "div",
118
118
  {
@@ -172,4 +172,4 @@ function PersistentPaginationWrapper({
172
172
 
173
173
 
174
174
  exports.PersistentPagination = PersistentPagination; exports.usePaginationLoading = usePaginationLoading; exports.PersistentPaginationWrapper = PersistentPaginationWrapper;
175
- //# sourceMappingURL=chunk-BQXHC336.cjs.map
175
+ //# sourceMappingURL=chunk-OBJSXQ67.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/openframe-oss-lib/openframe-oss-lib/openframe-frontend-core/dist/chunk-BQXHC336.cjs","../src/components/persistent-pagination.tsx"],"names":[],"mappings":"AAAA,qFAAY;AACZ;AACE;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACA;ACVA,uCAAA,CAAA;AA6FQ,+CAAA;AAhCD,SAAS,oBAAA,CAAqB;AAAA,EACnC,SAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA,SAAA;AAAA,EACA,gBAAA,EAAkB,GAAA;AAAA,EAClB,mBAAA,EAAqB,GAAA;AAAA,EACrB,iBAAA,EAAmB;AACrB,CAAA,EAA8B;AAI5B,EAAA,uBACE,8BAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,kCAAA;AAAA,QACT,qCAAA;AAAA,QACA,kCAAA;AAAA,QACA,UAAA,GAAa,qBAAA;AAAA,QACb;AAAA,MACF,CAAA;AAAA,MACA,KAAA,EAAO;AAAA,QACL,OAAA,EAAS,UAAA,EAAY,gBAAA,EAAkB,CAAA;AAAA,QACvC,kBAAA,EAAoB,CAAA,EAAA;AACtB,MAAA;AACK,MAAA;AACM,MAAA;AACA,MAAA;AACG,MAAA;AAGb,MAAA;AACC,QAAA;AAAC,UAAA;AAAA,UAAA;AACW,YAAA;AACL,YAAA;AACK,YAAA;AACX,YAAA;AAAA,cAAA;AACqD,cAAA;AAAY,cAAA;AAAK,cAAA;AAAA,YAAA;AAAA,UAAA;AACvE,QAAA;AAIF,wBAAA;AAAC,UAAA;AAAA,UAAA;AACY,YAAA;AACT,cAAA;AACa,cAAA;AACf,YAAA;AACO,YAAA;AACL,cAAA;AACF,YAAA;AACa,YAAA;AAEZ,YAAA;AAAA,UAAA;AACH,QAAA;AAAA,MAAA;AAAA,IAAA;AAGF,EAAA;AAEJ;AAKgB;AAKR,EAAA;AAEkB,EAAA;AACT,IAAA;AACG,IAAA;AACK,IAAA;AACD,IAAA;AACtB,EAAA;AAE0B,EAAA;AACT,IAAA;AACU,MAAA;AACzB,IAAA;AACe,IAAA;AACjB,EAAA;AAEO,EAAA;AACL,IAAA;AACA,IAAA;AACA,IAAA;AACF,EAAA;AACF;AAcgB;AACd,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACU,EAAA;AACyB;AACT,EAAA;AACxB,IAAA;AACA,IAAA;AACA,IAAA;AACF,EAAA;AAImB,EAAA;AACO,EAAA;AACC,EAAA;AAErB,EAAA;AACgB,EAAA;AAIhB,EAAA;AAGJ,EAAA;AAAC,IAAA;AAAA,IAAA;AACY,MAAA;AACT,QAAA;AACC,QAAA;AACD,QAAA;AACF,MAAA;AACO,MAAA;AACI,QAAA;AACW,QAAA;AACtB,MAAA;AACK,MAAA;AACM,MAAA;AACA,MAAA;AACG,MAAA;AACI,MAAA;AAGhB,MAAA;AAAc,QAAA;AACb,UAAA;AAAA,UAAA;AACW,YAAA;AACL,YAAA;AACK,YAAA;AAET,YAAA;AAEG,UAAA;AAEN,QAAA;AAIF,wBAAA;AAAC,UAAA;AAAA,UAAA;AACY,YAAA;AACT,cAAA;AACA,cAAA;AACF,YAAA;AACO,YAAA;AACL,cAAA;AACF,YAAA;AACa,YAAA;AAEb,YAAA;AAAC,cAAA;AAAA,cAAA;AACc,gBAAA;AACD,gBAAA;AACZ,gBAAA;AAAiD,gBAAA;AAAA,cAAA;AACnD,YAAA;AAAA,UAAA;AACF,QAAA;AAAA,MAAA;AAAA,IAAA;AAGF,EAAA;AAEJ;AD9E6B;AACA;AACA;AACA;AACA;AACA","file":"/home/runner/work/openframe-oss-lib/openframe-oss-lib/openframe-frontend-core/dist/chunk-BQXHC336.cjs","sourcesContent":[null,"\"use client\"\n\nimport { ReactNode } from \"react\"\nimport { cn } from \"../utils/cn\"\n\ninterface PersistentPaginationProps {\n /**\n * Whether pagination is currently in a loading state\n */\n isLoading: boolean\n /**\n * The pagination component\n */\n children: ReactNode\n /**\n * Current page number\n */\n currentPage: number\n /**\n * Total number of pages\n */\n totalPages: number\n /**\n * Additional CSS classes\n */\n className?: string\n /**\n * Disabled opacity (0-1)\n */\n disabledOpacity?: number\n /**\n * Transition duration in milliseconds\n */\n transitionDuration?: number\n /**\n * Whether to show loading state in pagination\n */\n showLoadingState?: boolean\n}\n\n/**\n * PersistentPagination\n * \n * A wrapper component that keeps pagination visible during loading states\n * but provides visual feedback that it's temporarily disabled.\n * \n * Features:\n * - Maintains pagination visibility during content loading\n * - Disables interaction but preserves layout\n * - Shows current page context even when loading\n * - Provides accessibility support for loading states\n * - Smooth transitions between enabled/disabled states\n * \n * Usage:\n * ```tsx\n * <PersistentPagination\n * isLoading={isLoadingVendors}\n * currentPage={currentPage}\n * totalPages={totalPages}\n * >\n * <Pagination currentPage={currentPage} totalPages={totalPages} />\n * </PersistentPagination>\n * ```\n */\nexport function PersistentPagination({\n isLoading,\n children,\n currentPage,\n totalPages,\n className,\n disabledOpacity = 0.5,\n transitionDuration = 300,\n showLoadingState = true,\n}: PersistentPaginationProps) {\n // ALWAYS show pagination for predictable layout - just gray it out when not needed\n // Removed condition that hides pagination completely\n\n return (\n <div \n className={cn(\n \"relative transition-all ease-in-out\",\n \"flex justify-center items-center\",\n isLoading && \"pointer-events-none\",\n className\n )}\n style={{\n opacity: isLoading ? disabledOpacity : 1,\n transitionDuration: `${transitionDuration}ms`\n }}\n role=\"navigation\"\n aria-label=\"Pagination\"\n aria-busy={isLoading}\n data-loading={isLoading}\n >\n {/* Loading state announcement for screen readers */}\n {isLoading && (\n <div \n className=\"sr-only\" \n role=\"status\" \n aria-live=\"polite\"\n >\n Pagination temporarily disabled while loading page {currentPage} of {totalPages}\n </div>\n )}\n\n {/* Pagination controls with disabled state */}\n <div \n className={cn(\n \"relative transition-all ease-in-out\",\n isLoading && \"cursor-not-allowed\"\n )}\n style={{\n transitionDuration: `${transitionDuration}ms`\n }}\n aria-hidden={isLoading}\n >\n {children}\n </div>\n\n {/* REMOVED: Loading overlay - only card skeletons should show during loading */}\n </div>\n )\n}\n\n/**\n * Hook for managing pagination loading states\n */\nexport function usePaginationLoading(\n isLoading: boolean,\n currentPage: number,\n totalPages: number\n) {\n const shouldShowPagination = totalPages > 1 || isLoading\n \n const paginationProps = {\n 'aria-busy': isLoading,\n 'data-loading': isLoading,\n 'data-current-page': currentPage,\n 'data-total-pages': totalPages,\n }\n\n const getLoadingMessage = () => {\n if (isLoading) {\n return `Loading page ${currentPage} of ${totalPages}`\n }\n return `Page ${currentPage} of ${totalPages}`\n }\n\n return {\n shouldShowPagination,\n paginationProps,\n getLoadingMessage,\n }\n}\n\n/**\n * Enhanced pagination component that includes loading states\n */\ninterface PersistentPaginationWrapperProps {\n isLoading: boolean\n currentPage: number\n totalPages: number\n onPageChange?: (page: number) => void\n className?: string\n variant?: 'vendor' | 'blog'\n}\n\nexport function PersistentPaginationWrapper({\n isLoading,\n currentPage,\n totalPages,\n onPageChange,\n className,\n variant = 'vendor'\n}: PersistentPaginationWrapperProps) {\n const { getLoadingMessage } = usePaginationLoading(\n isLoading,\n currentPage,\n totalPages\n )\n\n // ALWAYS show pagination for predictable layout\n // For no results (totalPages = 0), show grayed out pagination\n const hasResults = totalPages > 0\n const displayTotalPages = hasResults ? totalPages : 1\n const displayCurrentPage = hasResults ? currentPage : 1\n // Only disable during loading, but still show when no results (just grayed out)\n const isPaginationDisabled = isLoading\n const hasNoResults = !hasResults && !isLoading\n\n // Use UnifiedPagination directly from ui-kit instead of importing from consuming apps\n // Both Pagination and BlogPagination in multi-platform-hub are just wrappers around UnifiedPagination\n const PaginationComponent = require('./unified-pagination').UnifiedPagination\n\n return (\n <div \n className={cn(\n \"relative transition-all ease-in-out flex justify-center items-center\",\n (isPaginationDisabled || hasNoResults) && \"pointer-events-none\",\n className\n )}\n style={{\n opacity: isPaginationDisabled ? 0.3 : hasNoResults ? 0.5 : 1,\n transitionDuration: \"300ms\"\n }}\n role=\"navigation\"\n aria-label=\"Pagination\"\n aria-busy={isLoading}\n data-loading={isLoading}\n data-has-results={hasResults}\n >\n {/* Loading/no results state announcement for screen readers */}\n {(isLoading || !hasResults) && (\n <div \n className=\"sr-only\" \n role=\"status\" \n aria-live=\"polite\"\n >\n {isLoading \n ? `Pagination temporarily disabled while loading page ${displayCurrentPage} of ${displayTotalPages}`\n : `No results available - pagination disabled`\n }\n </div>\n )}\n\n {/* Pagination controls with disabled state */}\n <div \n className={cn(\n \"relative transition-all ease-in-out\",\n isPaginationDisabled && \"cursor-not-allowed\"\n )}\n style={{\n transitionDuration: \"300ms\"\n }}\n aria-hidden={isPaginationDisabled}\n >\n <PaginationComponent\n currentPage={displayCurrentPage}\n totalPages={displayTotalPages}\n onPageChange={hasResults ? onPageChange : () => {}} // Provide empty function instead of undefined\n />\n </div>\n\n {/* REMOVED: Loading overlays - only card skeletons should show during loading */}\n </div>\n )\n} "]}
1
+ {"version":3,"sources":["/home/runner/work/openframe-oss-lib/openframe-oss-lib/openframe-frontend-core/dist/chunk-OBJSXQ67.cjs","../src/components/persistent-pagination.tsx"],"names":[],"mappings":"AAAA,qFAAY;AACZ;AACE;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACA;ACVA,uCAAA,CAAA;AA6FQ,+CAAA;AAhCD,SAAS,oBAAA,CAAqB;AAAA,EACnC,SAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA,SAAA;AAAA,EACA,gBAAA,EAAkB,GAAA;AAAA,EAClB,mBAAA,EAAqB,GAAA;AAAA,EACrB,iBAAA,EAAmB;AACrB,CAAA,EAA8B;AAI5B,EAAA,uBACE,8BAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,kCAAA;AAAA,QACT,qCAAA;AAAA,QACA,kCAAA;AAAA,QACA,UAAA,GAAa,qBAAA;AAAA,QACb;AAAA,MACF,CAAA;AAAA,MACA,KAAA,EAAO;AAAA,QACL,OAAA,EAAS,UAAA,EAAY,gBAAA,EAAkB,CAAA;AAAA,QACvC,kBAAA,EAAoB,CAAA,EAAA;AACtB,MAAA;AACK,MAAA;AACM,MAAA;AACA,MAAA;AACG,MAAA;AAGb,MAAA;AACC,QAAA;AAAC,UAAA;AAAA,UAAA;AACW,YAAA;AACL,YAAA;AACK,YAAA;AACX,YAAA;AAAA,cAAA;AACqD,cAAA;AAAY,cAAA;AAAK,cAAA;AAAA,YAAA;AAAA,UAAA;AACvE,QAAA;AAIF,wBAAA;AAAC,UAAA;AAAA,UAAA;AACY,YAAA;AACT,cAAA;AACa,cAAA;AACf,YAAA;AACO,YAAA;AACL,cAAA;AACF,YAAA;AACa,YAAA;AAEZ,YAAA;AAAA,UAAA;AACH,QAAA;AAAA,MAAA;AAAA,IAAA;AAGF,EAAA;AAEJ;AAKgB;AAKR,EAAA;AAEkB,EAAA;AACT,IAAA;AACG,IAAA;AACK,IAAA;AACD,IAAA;AACtB,EAAA;AAE0B,EAAA;AACT,IAAA;AACU,MAAA;AACzB,IAAA;AACe,IAAA;AACjB,EAAA;AAEO,EAAA;AACL,IAAA;AACA,IAAA;AACA,IAAA;AACF,EAAA;AACF;AAcgB;AACd,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACU,EAAA;AACyB;AACT,EAAA;AACxB,IAAA;AACA,IAAA;AACA,IAAA;AACF,EAAA;AAImB,EAAA;AACO,EAAA;AACC,EAAA;AAErB,EAAA;AACgB,EAAA;AAIhB,EAAA;AAGJ,EAAA;AAAC,IAAA;AAAA,IAAA;AACY,MAAA;AACT,QAAA;AACC,QAAA;AACD,QAAA;AACF,MAAA;AACO,MAAA;AACI,QAAA;AACW,QAAA;AACtB,MAAA;AACK,MAAA;AACM,MAAA;AACA,MAAA;AACG,MAAA;AACI,MAAA;AAGhB,MAAA;AAAc,QAAA;AACb,UAAA;AAAA,UAAA;AACW,YAAA;AACL,YAAA;AACK,YAAA;AAET,YAAA;AAEG,UAAA;AAEN,QAAA;AAIF,wBAAA;AAAC,UAAA;AAAA,UAAA;AACY,YAAA;AACT,cAAA;AACA,cAAA;AACF,YAAA;AACO,YAAA;AACL,cAAA;AACF,YAAA;AACa,YAAA;AAEb,YAAA;AAAC,cAAA;AAAA,cAAA;AACc,gBAAA;AACD,gBAAA;AACZ,gBAAA;AAAiD,gBAAA;AAAA,cAAA;AACnD,YAAA;AAAA,UAAA;AACF,QAAA;AAAA,MAAA;AAAA,IAAA;AAGF,EAAA;AAEJ;AD9E6B;AACA;AACA;AACA;AACA;AACA","file":"/home/runner/work/openframe-oss-lib/openframe-oss-lib/openframe-frontend-core/dist/chunk-OBJSXQ67.cjs","sourcesContent":[null,"\"use client\"\n\nimport { ReactNode } from \"react\"\nimport { cn } from \"../utils/cn\"\n\ninterface PersistentPaginationProps {\n /**\n * Whether pagination is currently in a loading state\n */\n isLoading: boolean\n /**\n * The pagination component\n */\n children: ReactNode\n /**\n * Current page number\n */\n currentPage: number\n /**\n * Total number of pages\n */\n totalPages: number\n /**\n * Additional CSS classes\n */\n className?: string\n /**\n * Disabled opacity (0-1)\n */\n disabledOpacity?: number\n /**\n * Transition duration in milliseconds\n */\n transitionDuration?: number\n /**\n * Whether to show loading state in pagination\n */\n showLoadingState?: boolean\n}\n\n/**\n * PersistentPagination\n * \n * A wrapper component that keeps pagination visible during loading states\n * but provides visual feedback that it's temporarily disabled.\n * \n * Features:\n * - Maintains pagination visibility during content loading\n * - Disables interaction but preserves layout\n * - Shows current page context even when loading\n * - Provides accessibility support for loading states\n * - Smooth transitions between enabled/disabled states\n * \n * Usage:\n * ```tsx\n * <PersistentPagination\n * isLoading={isLoadingVendors}\n * currentPage={currentPage}\n * totalPages={totalPages}\n * >\n * <Pagination currentPage={currentPage} totalPages={totalPages} />\n * </PersistentPagination>\n * ```\n */\nexport function PersistentPagination({\n isLoading,\n children,\n currentPage,\n totalPages,\n className,\n disabledOpacity = 0.5,\n transitionDuration = 300,\n showLoadingState = true,\n}: PersistentPaginationProps) {\n // ALWAYS show pagination for predictable layout - just gray it out when not needed\n // Removed condition that hides pagination completely\n\n return (\n <div \n className={cn(\n \"relative transition-all ease-in-out\",\n \"flex justify-center items-center\",\n isLoading && \"pointer-events-none\",\n className\n )}\n style={{\n opacity: isLoading ? disabledOpacity : 1,\n transitionDuration: `${transitionDuration}ms`\n }}\n role=\"navigation\"\n aria-label=\"Pagination\"\n aria-busy={isLoading}\n data-loading={isLoading}\n >\n {/* Loading state announcement for screen readers */}\n {isLoading && (\n <div \n className=\"sr-only\" \n role=\"status\" \n aria-live=\"polite\"\n >\n Pagination temporarily disabled while loading page {currentPage} of {totalPages}\n </div>\n )}\n\n {/* Pagination controls with disabled state */}\n <div \n className={cn(\n \"relative transition-all ease-in-out\",\n isLoading && \"cursor-not-allowed\"\n )}\n style={{\n transitionDuration: `${transitionDuration}ms`\n }}\n aria-hidden={isLoading}\n >\n {children}\n </div>\n\n {/* REMOVED: Loading overlay - only card skeletons should show during loading */}\n </div>\n )\n}\n\n/**\n * Hook for managing pagination loading states\n */\nexport function usePaginationLoading(\n isLoading: boolean,\n currentPage: number,\n totalPages: number\n) {\n const shouldShowPagination = totalPages > 1 || isLoading\n \n const paginationProps = {\n 'aria-busy': isLoading,\n 'data-loading': isLoading,\n 'data-current-page': currentPage,\n 'data-total-pages': totalPages,\n }\n\n const getLoadingMessage = () => {\n if (isLoading) {\n return `Loading page ${currentPage} of ${totalPages}`\n }\n return `Page ${currentPage} of ${totalPages}`\n }\n\n return {\n shouldShowPagination,\n paginationProps,\n getLoadingMessage,\n }\n}\n\n/**\n * Enhanced pagination component that includes loading states\n */\ninterface PersistentPaginationWrapperProps {\n isLoading: boolean\n currentPage: number\n totalPages: number\n onPageChange?: (page: number) => void\n className?: string\n variant?: 'vendor' | 'blog'\n}\n\nexport function PersistentPaginationWrapper({\n isLoading,\n currentPage,\n totalPages,\n onPageChange,\n className,\n variant = 'vendor'\n}: PersistentPaginationWrapperProps) {\n const { getLoadingMessage } = usePaginationLoading(\n isLoading,\n currentPage,\n totalPages\n )\n\n // ALWAYS show pagination for predictable layout\n // For no results (totalPages = 0), show grayed out pagination\n const hasResults = totalPages > 0\n const displayTotalPages = hasResults ? totalPages : 1\n const displayCurrentPage = hasResults ? currentPage : 1\n // Only disable during loading, but still show when no results (just grayed out)\n const isPaginationDisabled = isLoading\n const hasNoResults = !hasResults && !isLoading\n\n // Use UnifiedPagination directly from ui-kit instead of importing from consuming apps\n // Both Pagination and BlogPagination in multi-platform-hub are just wrappers around UnifiedPagination\n const PaginationComponent = require('./unified-pagination').UnifiedPagination\n\n return (\n <div \n className={cn(\n \"relative transition-all ease-in-out flex justify-center items-center\",\n (isPaginationDisabled || hasNoResults) && \"pointer-events-none\",\n className\n )}\n style={{\n opacity: isPaginationDisabled ? 0.3 : hasNoResults ? 0.5 : 1,\n transitionDuration: \"300ms\"\n }}\n role=\"navigation\"\n aria-label=\"Pagination\"\n aria-busy={isLoading}\n data-loading={isLoading}\n data-has-results={hasResults}\n >\n {/* Loading/no results state announcement for screen readers */}\n {(isLoading || !hasResults) && (\n <div \n className=\"sr-only\" \n role=\"status\" \n aria-live=\"polite\"\n >\n {isLoading \n ? `Pagination temporarily disabled while loading page ${displayCurrentPage} of ${displayTotalPages}`\n : `No results available - pagination disabled`\n }\n </div>\n )}\n\n {/* Pagination controls with disabled state */}\n <div \n className={cn(\n \"relative transition-all ease-in-out\",\n isPaginationDisabled && \"cursor-not-allowed\"\n )}\n style={{\n transitionDuration: \"300ms\"\n }}\n aria-hidden={isPaginationDisabled}\n >\n <PaginationComponent\n currentPage={displayCurrentPage}\n totalPages={displayTotalPages}\n onPageChange={hasResults ? onPageChange : () => {}} // Provide empty function instead of undefined\n />\n </div>\n\n {/* REMOVED: Loading overlays - only card skeletons should show during loading */}\n </div>\n )\n} "]}
@@ -2,11 +2,11 @@
2
2
  import {
3
3
  ArticleAuthorByline,
4
4
  DetailPageSkeleton
5
- } from "./chunk-RJU7YCN3.js";
5
+ } from "./chunk-BUZOZOQ2.js";
6
6
  import {
7
7
  DocSearchBar,
8
8
  useDocSearch
9
- } from "./chunk-NJJWY7SO.js";
9
+ } from "./chunk-S4OAWVKF.js";
10
10
  import {
11
11
  useSelfFetch
12
12
  } from "./chunk-RCBRCZUF.js";
@@ -26,7 +26,7 @@ import {
26
26
  resolveContentHref,
27
27
  toStripProfile,
28
28
  useVideoWarmup
29
- } from "./chunk-LL4C2NXG.js";
29
+ } from "./chunk-ZA5PFNHR.js";
30
30
  import {
31
31
  buildOgPlaceholderUrl
32
32
  } from "./chunk-GS4HJA2G.js";
@@ -396,4 +396,4 @@ export {
396
396
  useOnboardingGuide,
397
397
  useOnboardingGuideSections
398
398
  };
399
- //# sourceMappingURL=chunk-QJHBYNHI.js.map
399
+ //# sourceMappingURL=chunk-OQHHJDUB.js.map
@@ -2,11 +2,11 @@
2
2
 
3
3
 
4
4
 
5
- var _chunkI6IWT62Mcjs = require('./chunk-I6IWT62M.cjs');
5
+ var _chunkQGLEI6T2cjs = require('./chunk-QGLEI6T2.cjs');
6
6
 
7
7
 
8
8
 
9
- var _chunkGH5YZSQQcjs = require('./chunk-GH5YZSQQ.cjs');
9
+ var _chunkZGGI4XMFcjs = require('./chunk-ZGGI4XMF.cjs');
10
10
 
11
11
 
12
12
  var _chunkGYONSC3Ucjs = require('./chunk-GYONSC3U.cjs');
@@ -26,7 +26,7 @@ var _chunkGYONSC3Ucjs = require('./chunk-GYONSC3U.cjs');
26
26
 
27
27
 
28
28
 
29
- var _chunkMKN6S7SUcjs = require('./chunk-MKN6S7SU.cjs');
29
+ var _chunk6FLRFCK4cjs = require('./chunk-6FLRFCK4.cjs');
30
30
 
31
31
 
32
32
  var _chunkSXLEPNY2cjs = require('./chunk-SXLEPNY2.cjs');
@@ -64,7 +64,7 @@ function OnboardingGuidesCatalogSkeleton() {
64
64
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "h-6 w-40 bg-ods-border/70 rounded" }),
65
65
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "h-5 w-8 bg-ods-text-secondary/20 rounded-full" })
66
66
  ] }),
67
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "ul", { className: "flex flex-col gap-4", children: Array.from({ length: cardCount }).map((_, cardIdx) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "li", { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkMKN6S7SUcjs.OnboardingGuideCardSkeleton, { size: "catalog" }) }, cardIdx)) })
67
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "ul", { className: "flex flex-col gap-4", children: Array.from({ length: cardCount }).map((_, cardIdx) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "li", { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6FLRFCK4cjs.OnboardingGuideCardSkeleton, { size: "catalog" }) }, cardIdx)) })
68
68
  ] }, sectionIdx)) })
69
69
  ] });
70
70
  }
@@ -133,21 +133,21 @@ function OnboardingGuidesCatalogView({
133
133
  });
134
134
  };
135
135
  const source = _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _4 => _4.source]), () => ( "openframe"));
136
- const docSearch = _chunkGH5YZSQQcjs.useDocSearch.call(void 0, {
136
+ const docSearch = _chunkZGGI4XMFcjs.useDocSearch.call(void 0, {
137
137
  source,
138
138
  baseRoute: basePath,
139
139
  onNavigate: (path) => router.push(path),
140
140
  tableIds: ["onboarding-guides"]
141
141
  });
142
142
  const defaultRenderCard = (guide) => {
143
- const cta = _chunkMKN6S7SUcjs.resolveContentHref.call(void 0, _optionalChain([runtime, 'optionalAccess', _5 => _5.composeContentUrl]), {
143
+ const cta = _chunk6FLRFCK4cjs.resolveContentHref.call(void 0, _optionalChain([runtime, 'optionalAccess', _5 => _5.composeContentUrl]), {
144
144
  type: "onboarding_guide",
145
145
  slug: guide.slug,
146
146
  basePath,
147
147
  platforms: guide.onboarding_guide_platforms
148
148
  });
149
149
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
150
- _chunkMKN6S7SUcjs.OnboardingGuideCard,
150
+ _chunk6FLRFCK4cjs.OnboardingGuideCard,
151
151
  {
152
152
  guide,
153
153
  href: cta.href,
@@ -159,7 +159,7 @@ function OnboardingGuidesCatalogView({
159
159
  const renderCardFn = _nullishCoalesce(renderCard, () => ( defaultRenderCard));
160
160
  const preControls = /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "space-y-4", children: [
161
161
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
162
- _chunkGH5YZSQQcjs.DocSearchBar,
162
+ _chunkZGGI4XMFcjs.DocSearchBar,
163
163
  {
164
164
  placeholder: "Search onboarding guides, releases, case studies\u2026",
165
165
  query: docSearch.query,
@@ -171,7 +171,7 @@ function OnboardingGuidesCatalogView({
171
171
  }
172
172
  ),
173
173
  sections.length > 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
174
- _chunkMKN6S7SUcjs.FilterPillRow,
174
+ _chunk6FLRFCK4cjs.FilterPillRow,
175
175
  {
176
176
  label: "Section",
177
177
  selectedValue: activeSection,
@@ -181,7 +181,7 @@ function OnboardingGuidesCatalogView({
181
181
  )
182
182
  ] });
183
183
  if (selfFetch && guidesRes.error) {
184
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkMKN6S7SUcjs.LoadError, { message: "Failed to load onboarding guides.", onRetry: guidesRes.reload });
184
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6FLRFCK4cjs.LoadError, { message: "Failed to load onboarding guides.", onRetry: guidesRes.reload });
185
185
  }
186
186
  if (selfFetch && guidesRes.data == null && isLoading) {
187
187
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, OnboardingGuidesCatalogSkeleton, {});
@@ -213,7 +213,7 @@ function OnboardingGuideDetailView({
213
213
  slug,
214
214
  guideEndpoint,
215
215
  related = [],
216
- MarkdownRenderer = _chunkMKN6S7SUcjs.RichMarkdownRenderer,
216
+ MarkdownRenderer = _chunk6FLRFCK4cjs.RichMarkdownRenderer,
217
217
  renderRelatedCard,
218
218
  backHref,
219
219
  backLabel = "Back to Getting Started",
@@ -224,49 +224,49 @@ function OnboardingGuideDetailView({
224
224
  const resolvedBackHref = _nullishCoalesce(backHref, () => ( basePath));
225
225
  const runtime = _chunk7OPWSWEJcjs.useChatRuntime.call(void 0, );
226
226
  const router = _chunkSSJNN5BScjs.useRouter.call(void 0, );
227
- const renderShell = (node) => shell ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkMKN6S7SUcjs.PageShell, { children: node }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "page-shell-content", children: node });
227
+ const renderShell = (node) => shell ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6FLRFCK4cjs.PageShell, { children: node }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "page-shell-content", children: node });
228
228
  const url = initialData ? null : slug && guideEndpoint ? guideEndpoint(slug) : null;
229
229
  const { data: guide, isLoading, error, reload } = _chunkGYONSC3Ucjs.useSelfFetch.call(void 0, url, { initialData });
230
- const { ref: videoWarmupRef } = _chunkMKN6S7SUcjs.useVideoWarmup.call(void 0, {
230
+ const { ref: videoWarmupRef } = _chunk6FLRFCK4cjs.useVideoWarmup.call(void 0, {
231
231
  videoUrl: _optionalChain([guide, 'optionalAccess', _6 => _6.main_video_url]),
232
232
  supabaseStorageOrigin: _optionalChain([runtime, 'optionalAccess', _7 => _7.endpoints, 'access', _8 => _8.supabaseStorageOrigin])
233
233
  });
234
234
  if (error || !guide && !isLoading) {
235
- return renderShell(/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkMKN6S7SUcjs.LoadError, { message: "Guide not found.", onRetry: reload }));
235
+ return renderShell(/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6FLRFCK4cjs.LoadError, { message: "Guide not found.", onRetry: reload }));
236
236
  }
237
237
  if (!guide) {
238
238
  return renderShell(
239
239
  // Match the loaded page's top offset (TitleBlock's
240
240
  // `pt-[var(--spacing-system-l)]`) so content doesn't jump on load.
241
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "pt-[var(--spacing-system-l)]", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkI6IWT62Mcjs.DetailPageSkeleton, { bare: true, showImageGallery: false }) })
241
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "pt-[var(--spacing-system-l)]", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkQGLEI6T2cjs.DetailPageSkeleton, { bare: true, showImageGallery: false }) })
242
242
  );
243
243
  }
244
- const captionsUrl = _chunkMKN6S7SUcjs.getCaptionsUrl.call(void 0, "onboarding_guide", guide.id, guide.srt_content);
244
+ const captionsUrl = _chunk6FLRFCK4cjs.getCaptionsUrl.call(void 0, "onboarding_guide", guide.id, guide.srt_content);
245
245
  const videoPoster = guide.main_video_thumbnail || guide.featured_image || guide.og_image_url || // `buildOgPlaceholderUrl` always returns a usable string (relative route at
246
246
  // worst), so it's the terminal fallback — no trailing `|| undefined` needed.
247
247
  _chunkSXLEPNY2cjs.buildOgPlaceholderUrl.call(void 0, _optionalChain([runtime, 'optionalAccess', _9 => _9.endpoints]), guide.title, { aspect: "wide" });
248
248
  const defaultRenderRelatedCard = (g) => {
249
- const cta = _chunkMKN6S7SUcjs.resolveContentHref.call(void 0, _optionalChain([runtime, 'optionalAccess', _10 => _10.composeContentUrl]), {
249
+ const cta = _chunk6FLRFCK4cjs.resolveContentHref.call(void 0, _optionalChain([runtime, 'optionalAccess', _10 => _10.composeContentUrl]), {
250
250
  type: "onboarding_guide",
251
251
  slug: g.slug,
252
252
  basePath,
253
253
  platforms: g.onboarding_guide_platforms
254
254
  });
255
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkMKN6S7SUcjs.OnboardingGuideCard, { guide: g, href: cta.href, targetPlatform: cta.targetPlatform });
255
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6FLRFCK4cjs.OnboardingGuideCard, { guide: g, href: cta.href, targetPlatform: cta.targetPlatform });
256
256
  };
257
257
  const renderRelatedCardFn = _nullishCoalesce(renderRelatedCard, () => ( defaultRenderRelatedCard));
258
258
  return renderShell(
259
259
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
260
- _chunkMKN6S7SUcjs.PageLayout,
260
+ _chunk6FLRFCK4cjs.PageLayout,
261
261
  {
262
262
  title: guide.title,
263
263
  titleSize: "h1",
264
264
  titleWrap: true,
265
265
  backButton: { label: backLabel, onClick: () => router.push(resolvedBackHref) },
266
266
  children: [
267
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkMKN6S7SUcjs.EntityTagBadges, { tags: guide.onboarding_guide_tags }),
267
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6FLRFCK4cjs.EntityTagBadges, { tags: guide.onboarding_guide_tags }),
268
268
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
269
- _chunkMKN6S7SUcjs.EntityAuthorCard,
269
+ _chunk6FLRFCK4cjs.EntityAuthorCard,
270
270
  {
271
271
  author: guide.author,
272
272
  authorHref,
@@ -281,7 +281,7 @@ function OnboardingGuideDetailView({
281
281
  }
282
282
  ),
283
283
  (guide.main_video_url || guide.youtube_url) && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { ref: videoWarmupRef, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
284
- _chunkMKN6S7SUcjs.EntityVideoSection,
284
+ _chunk6FLRFCK4cjs.EntityVideoSection,
285
285
  {
286
286
  mainVideoUrl: guide.main_video_url,
287
287
  youtubeUrl: guide.youtube_url || void 0,
@@ -298,17 +298,17 @@ function OnboardingGuideDetailView({
298
298
  ) }),
299
299
  guide.content && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "space-y-4", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, MarkdownRenderer, { content: guide.content }) }),
300
300
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
301
- _chunkMKN6S7SUcjs.VideoBitesStrip,
301
+ _chunk6FLRFCK4cjs.VideoBitesStrip,
302
302
  {
303
303
  bites: _nullishCoalesce(guide.video_bites, () => ( [])),
304
304
  filterPublished: true,
305
305
  showTitle: false,
306
- profile: _chunkMKN6S7SUcjs.toStripProfile.call(void 0, guide.author),
306
+ profile: _chunk6FLRFCK4cjs.toStripProfile.call(void 0, guide.author),
307
307
  href: `/onboarding-guides/${guide.slug}`
308
308
  }
309
309
  ),
310
310
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
311
- _chunkI6IWT62Mcjs.ArticleAuthorByline,
311
+ _chunkQGLEI6T2cjs.ArticleAuthorByline,
312
312
  {
313
313
  author: _nullishCoalesce(_optionalChain([guide, 'access', _11 => _11.author, 'optionalAccess', _12 => _12.full_name]), () => ( null)),
314
314
  avatar: _optionalChain([guide, 'access', _13 => _13.author, 'optionalAccess', _14 => _14.avatar_url]),
@@ -396,4 +396,4 @@ function useOnboardingGuideSections() {
396
396
 
397
397
 
398
398
  exports.OnboardingGuidesCatalogSkeleton = OnboardingGuidesCatalogSkeleton; exports.OnboardingGuidesCatalogView = OnboardingGuidesCatalogView; exports.OnboardingGuideDetailView = OnboardingGuideDetailView; exports.onboardingGuideKeys = onboardingGuideKeys; exports.useOnboardingGuides = useOnboardingGuides; exports.useOnboardingGuide = useOnboardingGuide; exports.useOnboardingGuideSections = useOnboardingGuideSections;
399
- //# sourceMappingURL=chunk-LQ2R7IA2.cjs.map
399
+ //# sourceMappingURL=chunk-QEGGWVFV.cjs.map