@flamingo-stack/openframe-frontend-core 0.0.315 → 0.0.316

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 (163) hide show
  1. package/dist/{chunk-7U4YFQX2.js → chunk-2Y4DLBFO.js} +96 -92
  2. package/dist/{chunk-7U4YFQX2.js.map → chunk-2Y4DLBFO.js.map} +1 -1
  3. package/dist/{chunk-HATCNFQL.cjs → chunk-4MCMPYEM.cjs} +12 -12
  4. package/dist/{chunk-HATCNFQL.cjs.map → chunk-4MCMPYEM.cjs.map} +1 -1
  5. package/dist/{chunk-VY5YF4B7.js → chunk-4NVA6W3J.js} +27 -22
  6. package/dist/chunk-4NVA6W3J.js.map +1 -0
  7. package/dist/chunk-4V3TCOFC.cjs +394 -0
  8. package/dist/chunk-4V3TCOFC.cjs.map +1 -0
  9. package/dist/{chunk-A2H6TFS4.cjs → chunk-63A53WQN.cjs} +33 -33
  10. package/dist/{chunk-A2H6TFS4.cjs.map → chunk-63A53WQN.cjs.map} +1 -1
  11. package/dist/{chunk-6W54MBU2.js → chunk-64DZ2J7Q.js} +5 -5
  12. package/dist/{chunk-47JZOP7Y.js → chunk-6KERXOFE.js} +3 -3
  13. package/dist/{chunk-JALO4TAZ.js → chunk-AI5X5JTD.js} +4 -4
  14. package/dist/chunk-CSLMCBZV.js +1464 -0
  15. package/dist/chunk-CSLMCBZV.js.map +1 -0
  16. package/dist/{chunk-BSAFGQVW.cjs → chunk-CUNMBP3A.cjs} +13 -13
  17. package/dist/{chunk-BSAFGQVW.cjs.map → chunk-CUNMBP3A.cjs.map} +1 -1
  18. package/dist/{chunk-TVNILN2F.cjs → chunk-DHVL36CA.cjs} +40 -40
  19. package/dist/{chunk-TVNILN2F.cjs.map → chunk-DHVL36CA.cjs.map} +1 -1
  20. package/dist/chunk-FCEVVNWY.cjs +1916 -0
  21. package/dist/chunk-FCEVVNWY.cjs.map +1 -0
  22. package/dist/chunk-FOVX3W3C.cjs +1464 -0
  23. package/dist/chunk-FOVX3W3C.cjs.map +1 -0
  24. package/dist/{chunk-4D37W55K.js → chunk-GHVVOST5.js} +95 -116
  25. package/dist/chunk-GHVVOST5.js.map +1 -0
  26. package/dist/{chunk-TRSDXD23.js → chunk-JAZM3A7E.js} +2 -2
  27. package/dist/{chunk-TK6OABYF.js → chunk-JEBL5PQK.js} +21 -35
  28. package/dist/{chunk-TK6OABYF.js.map → chunk-JEBL5PQK.js.map} +1 -1
  29. package/dist/{chunk-5ATH263N.cjs → chunk-L5JSGNT3.cjs} +35 -35
  30. package/dist/{chunk-5ATH263N.cjs.map → chunk-L5JSGNT3.cjs.map} +1 -1
  31. package/dist/{chunk-TQ7CMFSY.cjs → chunk-LAMDFGE3.cjs} +41 -36
  32. package/dist/chunk-LAMDFGE3.cjs.map +1 -0
  33. package/dist/{chunk-V4IIBNTA.js → chunk-LQHMXPOJ.js} +5 -5
  34. package/dist/{chunk-LGLPNWS6.cjs → chunk-LWNPMLIH.cjs} +3 -3
  35. package/dist/{chunk-LGLPNWS6.cjs.map → chunk-LWNPMLIH.cjs.map} +1 -1
  36. package/dist/chunk-M3NULYCR.js +1916 -0
  37. package/dist/chunk-M3NULYCR.js.map +1 -0
  38. package/dist/{chunk-MOOV4ORG.js → chunk-OKGZK6TT.js} +3 -3
  39. package/dist/{chunk-WFHNXCI3.cjs → chunk-OLEW7FYZ.cjs} +123 -144
  40. package/dist/chunk-OLEW7FYZ.cjs.map +1 -0
  41. package/dist/chunk-PIJ4JLJU.js +394 -0
  42. package/dist/chunk-PIJ4JLJU.js.map +1 -0
  43. package/dist/{chunk-E4CQ4RUG.js → chunk-Q4AMYLKX.js} +11 -11
  44. package/dist/{chunk-FQOTC3UU.cjs → chunk-QJGRP2YE.cjs} +4 -4
  45. package/dist/{chunk-FQOTC3UU.cjs.map → chunk-QJGRP2YE.cjs.map} +1 -1
  46. package/dist/{chunk-ZPK5HW7B.cjs → chunk-UGDGUO26.cjs} +3 -3
  47. package/dist/{chunk-ZPK5HW7B.cjs.map → chunk-UGDGUO26.cjs.map} +1 -1
  48. package/dist/{chunk-QW6OL4NY.cjs → chunk-VCE3ZEN3.cjs} +5 -5
  49. package/dist/{chunk-QW6OL4NY.cjs.map → chunk-VCE3ZEN3.cjs.map} +1 -1
  50. package/dist/{chunk-2JPSWDSM.cjs → chunk-XAQJ4ZLY.cjs} +447 -443
  51. package/dist/{chunk-2JPSWDSM.cjs.map → chunk-XAQJ4ZLY.cjs.map} +1 -1
  52. package/dist/{chunk-2MLMZAK4.js → chunk-YFGDZFUG.js} +4 -4
  53. package/dist/{chunk-VFIWQGJZ.js → chunk-Z3YORGG4.js} +2 -2
  54. package/dist/{chunk-OSEKWT6X.cjs → chunk-ZYGVJXJ5.cjs} +33 -47
  55. package/dist/chunk-ZYGVJXJ5.cjs.map +1 -0
  56. package/dist/components/case-studies/index.cjs +18 -18
  57. package/dist/components/case-studies/index.cjs.map +1 -1
  58. package/dist/components/case-studies/index.js +8 -8
  59. package/dist/components/chat/index.cjs +8 -8
  60. package/dist/components/chat/index.js +7 -7
  61. package/dist/components/contact/index.cjs +9 -9
  62. package/dist/components/contact/index.js +8 -8
  63. package/dist/components/docs/doc-viewer.d.ts +4 -0
  64. package/dist/components/docs/doc-viewer.d.ts.map +1 -1
  65. package/dist/components/docs/index.cjs +11 -11
  66. package/dist/components/docs/index.js +10 -10
  67. package/dist/components/embeds/index.cjs +9 -9
  68. package/dist/components/embeds/index.js +8 -8
  69. package/dist/components/faq/faq-document-page.d.ts +18 -20
  70. package/dist/components/faq/faq-document-page.d.ts.map +1 -1
  71. package/dist/components/faq/index.cjs +10 -10
  72. package/dist/components/faq/index.js +9 -9
  73. package/dist/components/features/index.cjs +8 -8
  74. package/dist/components/features/index.js +7 -7
  75. package/dist/components/help-center-pages/delivery-page.d.ts +27 -0
  76. package/dist/components/help-center-pages/delivery-page.d.ts.map +1 -0
  77. package/dist/components/help-center-pages/index.cjs +164 -0
  78. package/dist/components/help-center-pages/index.cjs.map +1 -0
  79. package/dist/components/help-center-pages/index.d.ts +25 -0
  80. package/dist/components/help-center-pages/index.d.ts.map +1 -0
  81. package/dist/components/help-center-pages/index.js +164 -0
  82. package/dist/components/help-center-pages/index.js.map +1 -0
  83. package/dist/components/help-center-pages/onboarding-guides-catalog-page.d.ts +41 -0
  84. package/dist/components/help-center-pages/onboarding-guides-catalog-page.d.ts.map +1 -0
  85. package/dist/components/help-center-pages/product-releases-list-page.d.ts +34 -0
  86. package/dist/components/help-center-pages/product-releases-list-page.d.ts.map +1 -0
  87. package/dist/components/help-center-pages/roadmap-page.d.ts +40 -0
  88. package/dist/components/help-center-pages/roadmap-page.d.ts.map +1 -0
  89. package/dist/components/icons/index.cjs +3 -3
  90. package/dist/components/icons/index.js +2 -2
  91. package/dist/components/index.cjs +177 -1555
  92. package/dist/components/index.cjs.map +1 -1
  93. package/dist/components/index.js +348 -1726
  94. package/dist/components/index.js.map +1 -1
  95. package/dist/components/layout/page-layout.d.ts +4 -1
  96. package/dist/components/layout/page-layout.d.ts.map +1 -1
  97. package/dist/components/layout/title-block.d.ts +5 -1
  98. package/dist/components/layout/title-block.d.ts.map +1 -1
  99. package/dist/components/navigation/index.cjs +8 -8
  100. package/dist/components/navigation/index.js +7 -7
  101. package/dist/components/onboarding-guides/index.cjs +15 -364
  102. package/dist/components/onboarding-guides/index.cjs.map +1 -1
  103. package/dist/components/onboarding-guides/index.js +20 -369
  104. package/dist/components/onboarding-guides/index.js.map +1 -1
  105. package/dist/components/onboarding-guides/onboarding-guide-detail-view.d.ts +9 -1
  106. package/dist/components/onboarding-guides/onboarding-guide-detail-view.d.ts.map +1 -1
  107. package/dist/components/related-content/index.cjs +10 -10
  108. package/dist/components/related-content/index.js +9 -9
  109. package/dist/components/shared/dev-section/dev-section-page.d.ts +7 -1
  110. package/dist/components/shared/dev-section/dev-section-page.d.ts.map +1 -1
  111. package/dist/components/shared/dev-section/dev-section-view.d.ts +7 -1
  112. package/dist/components/shared/dev-section/dev-section-view.d.ts.map +1 -1
  113. package/dist/components/shared/legal-document/legal-document-page.d.ts +5 -1
  114. package/dist/components/shared/legal-document/legal-document-page.d.ts.map +1 -1
  115. package/dist/components/shared/product-release/release-detail-page.d.ts +11 -2
  116. package/dist/components/shared/product-release/release-detail-page.d.ts.map +1 -1
  117. package/dist/components/tickets/help-center-list.d.ts +5 -1
  118. package/dist/components/tickets/help-center-list.d.ts.map +1 -1
  119. package/dist/components/tickets/index.cjs +15 -1882
  120. package/dist/components/tickets/index.cjs.map +1 -1
  121. package/dist/components/tickets/index.js +28 -1895
  122. package/dist/components/tickets/index.js.map +1 -1
  123. package/dist/components/ui/file-manager/index.cjs +53 -53
  124. package/dist/components/ui/file-manager/index.cjs.map +1 -1
  125. package/dist/components/ui/file-manager/index.js +4 -4
  126. package/dist/components/ui/index.cjs +8 -8
  127. package/dist/components/ui/index.cjs.map +1 -1
  128. package/dist/components/ui/index.js +7 -7
  129. package/dist/hooks/index.cjs +5 -5
  130. package/dist/hooks/index.js +4 -4
  131. package/dist/index.cjs +10 -10
  132. package/dist/index.cjs.map +1 -1
  133. package/dist/index.js +9 -9
  134. package/package.json +7 -1
  135. package/src/components/docs/doc-viewer.tsx +21 -34
  136. package/src/components/faq/faq-document-page.tsx +33 -60
  137. package/src/components/help-center-pages/delivery-page.tsx +45 -0
  138. package/src/components/help-center-pages/index.ts +41 -0
  139. package/src/components/help-center-pages/onboarding-guides-catalog-page.tsx +66 -0
  140. package/src/components/help-center-pages/product-releases-list-page.tsx +58 -0
  141. package/src/components/help-center-pages/roadmap-page.tsx +68 -0
  142. package/src/components/layout/page-layout.tsx +11 -0
  143. package/src/components/layout/title-block.tsx +15 -2
  144. package/src/components/onboarding-guides/onboarding-guide-detail-view.tsx +30 -19
  145. package/src/components/shared/dev-section/dev-section-page.tsx +29 -19
  146. package/src/components/shared/dev-section/dev-section-view.tsx +26 -19
  147. package/src/components/shared/legal-document/legal-document-page.tsx +19 -23
  148. package/src/components/shared/product-release/release-detail-page.tsx +36 -36
  149. package/src/components/tickets/help-center-list.tsx +11 -3
  150. package/dist/chunk-4D37W55K.js.map +0 -1
  151. package/dist/chunk-OSEKWT6X.cjs.map +0 -1
  152. package/dist/chunk-TQ7CMFSY.cjs.map +0 -1
  153. package/dist/chunk-VY5YF4B7.js.map +0 -1
  154. package/dist/chunk-WFHNXCI3.cjs.map +0 -1
  155. /package/dist/{chunk-6W54MBU2.js.map → chunk-64DZ2J7Q.js.map} +0 -0
  156. /package/dist/{chunk-47JZOP7Y.js.map → chunk-6KERXOFE.js.map} +0 -0
  157. /package/dist/{chunk-JALO4TAZ.js.map → chunk-AI5X5JTD.js.map} +0 -0
  158. /package/dist/{chunk-TRSDXD23.js.map → chunk-JAZM3A7E.js.map} +0 -0
  159. /package/dist/{chunk-V4IIBNTA.js.map → chunk-LQHMXPOJ.js.map} +0 -0
  160. /package/dist/{chunk-MOOV4ORG.js.map → chunk-OKGZK6TT.js.map} +0 -0
  161. /package/dist/{chunk-E4CQ4RUG.js.map → chunk-Q4AMYLKX.js.map} +0 -0
  162. /package/dist/{chunk-2MLMZAK4.js.map → chunk-YFGDZFUG.js.map} +0 -0
  163. /package/dist/{chunk-VFIWQGJZ.js.map → chunk-Z3YORGG4.js.map} +0 -0
@@ -1,5 +1,27 @@
1
1
  "use client";
2
2
  "use client";
3
+ import "../chunk-GZ4C3XW6.js";
4
+ import {
5
+ GROUP_PAGE_SIZE,
6
+ RelatedContentSection
7
+ } from "../chunk-OKGZK6TT.js";
8
+ import {
9
+ DeliveryLists,
10
+ DeliveryTable,
11
+ LegalDocumentPage,
12
+ MediaGalleryStrip,
13
+ PersistentPagination,
14
+ PersistentPaginationWrapper,
15
+ ProductReleasesView,
16
+ ReleaseDetailPage,
17
+ ReleaseDetailSkeleton,
18
+ RoadmapGrid,
19
+ RoadmapGridSkeleton,
20
+ RoadmapView,
21
+ useLegalDocs,
22
+ usePaginationLoading,
23
+ useRoadmapVoting
24
+ } from "../chunk-CSLMCBZV.js";
3
25
  import {
4
26
  AnnouncementBarSkeleton,
5
27
  ArticleLayoutSkeleton,
@@ -32,22 +54,17 @@ import {
32
54
  useDocNavigation,
33
55
  useDocumentTree,
34
56
  useScrollSpy
35
- } from "../chunk-4D37W55K.js";
36
- import "../chunk-GZ4C3XW6.js";
57
+ } from "../chunk-GHVVOST5.js";
37
58
  import {
38
59
  FileDownloadCard,
39
60
  GoogleSheetsViewer,
40
61
  PdfViewer
41
- } from "../chunk-6W54MBU2.js";
62
+ } from "../chunk-64DZ2J7Q.js";
42
63
  import {
43
64
  FaqAccordion,
44
65
  FaqDocumentPage,
45
66
  FaqSection
46
- } from "../chunk-TK6OABYF.js";
47
- import {
48
- GROUP_PAGE_SIZE,
49
- RelatedContentSection
50
- } from "../chunk-MOOV4ORG.js";
67
+ } from "../chunk-JEBL5PQK.js";
51
68
  import {
52
69
  DeliveryRow,
53
70
  DevCardRowContent,
@@ -57,13 +74,12 @@ import {
57
74
  DevSectionView,
58
75
  EmptyState,
59
76
  UnifiedPagination,
60
- init_unified_pagination,
61
- unified_pagination_exports
62
- } from "../chunk-VY5YF4B7.js";
77
+ init_unified_pagination
78
+ } from "../chunk-4NVA6W3J.js";
63
79
  import {
64
80
  ArticleAuthorByline,
65
81
  DetailPageSkeleton
66
- } from "../chunk-VFIWQGJZ.js";
82
+ } from "../chunk-Z3YORGG4.js";
67
83
  import {
68
84
  DocSearchBar,
69
85
  DocSearchResultRow,
@@ -71,10 +87,8 @@ import {
71
87
  mapDocSearchResults,
72
88
  resolveSearchResultAction,
73
89
  useDocSearch
74
- } from "../chunk-47JZOP7Y.js";
75
- import {
76
- useSelfFetch
77
- } from "../chunk-TRSDXD23.js";
90
+ } from "../chunk-6KERXOFE.js";
91
+ import "../chunk-JAZM3A7E.js";
78
92
  import "../chunk-4XLJWX2N.js";
79
93
  import {
80
94
  ADMIN_APPROVAL_REQUEST_CONTEXT_TYPE,
@@ -258,7 +272,6 @@ import {
258
272
  DEFAULT_CUSTOM_STATUS_COLOR,
259
273
  DEFAULT_DOCUMENT_TYPE_TO_TABLE_ID,
260
274
  DEFAULT_THEME,
261
- DEV_SECTION_PARAM_KEYS,
262
275
  DashboardInfoCard,
263
276
  DataRoomDocCard,
264
277
  DataRoomDocCardSkeleton,
@@ -670,7 +683,6 @@ import {
670
683
  defaultTableIdForDocumentType,
671
684
  deriveColumns,
672
685
  detectAspectRatio,
673
- devSectionAnchorId,
674
686
  escapeMarkdownInline,
675
687
  executeNavigation,
676
688
  executeNavigationImperative,
@@ -688,9 +700,7 @@ import {
688
700
  formatBioText,
689
701
  formatChatAttachmentMarkdownForBubble,
690
702
  formatInvestorUpdatePeriod,
691
- formatLegalDate,
692
703
  formatRelativeTime,
693
- formatReleaseDate,
694
704
  formatSingularLookupInvocation,
695
705
  getApprovalMeta,
696
706
  getCaptionsUrl,
@@ -748,7 +758,6 @@ import {
748
758
  remarkMentionChips,
749
759
  renderChatInlineEntityCard,
750
760
  resolutionToStatus,
751
- resolveContentHref,
752
761
  resolveExternalNavigation,
753
762
  resolveOnboardingIcon,
754
763
  resolveSourceIcon,
@@ -780,7 +789,6 @@ import {
780
789
  useDataTableContext,
781
790
  useDynamicTheme,
782
791
  useEmptyStateConfig,
783
- useEntityCardLink,
784
792
  useFiltersDropdown,
785
793
  useJetStreamDialogSubscription,
786
794
  useLoading,
@@ -806,15 +814,13 @@ import {
806
814
  useVideoOriginPreconnect,
807
815
  useVideoWarmup,
808
816
  usesCanonicalStatusStyle
809
- } from "../chunk-7U4YFQX2.js";
817
+ } from "../chunk-2Y4DLBFO.js";
810
818
  import {
811
819
  CommandApprovalToast,
812
- STICKY_HEADER_OFFSET_PX,
813
820
  ToastCard,
814
821
  Toaster,
815
822
  applyProxyAuth,
816
823
  clearEmbedProxyAuth,
817
- contentFetch,
818
824
  dotColorByVariant,
819
825
  embedAuthedFetch,
820
826
  getAppType,
@@ -825,9 +831,9 @@ import {
825
831
  showCommandApprovalToast,
826
832
  showToast,
827
833
  useOnboardingState,
828
- useScrollToHash,
829
834
  useToast
830
- } from "../chunk-E4CQ4RUG.js";
835
+ } from "../chunk-Q4AMYLKX.js";
836
+ import "../chunk-J7AV6H63.js";
831
837
  import {
832
838
  useChatRuntime,
833
839
  useEndpointsRuntime
@@ -835,7 +841,6 @@ import {
835
841
  import "../chunk-EL5YVPD5.js";
836
842
  import {
837
843
  init_next_navigation,
838
- usePathname,
839
844
  useRouter,
840
845
  useSearchParams
841
846
  } from "../chunk-PLJLE4A4.js";
@@ -873,7 +878,8 @@ import {
873
878
  SplitButton,
874
879
  buttonVariants,
875
880
  init_button2 as init_button
876
- } from "../chunk-JALO4TAZ.js";
881
+ } from "../chunk-AI5X5JTD.js";
882
+ import "../chunk-6U3IUD57.js";
877
883
  import {
878
884
  init_next_link,
879
885
  next_link_default
@@ -1029,19 +1035,15 @@ import {
1029
1035
  YouTubeIcon,
1030
1036
  getDeviceTypeIcon,
1031
1037
  renderSvgIcon
1032
- } from "../chunk-V4IIBNTA.js";
1038
+ } from "../chunk-LQHMXPOJ.js";
1039
+ import "../chunk-W72U7OU7.js";
1033
1040
  import {
1034
1041
  cn,
1035
1042
  getBaseUrl,
1036
1043
  init_cn
1037
1044
  } from "../chunk-XTCBRQN2.js";
1038
- import "../chunk-J7AV6H63.js";
1039
- import "../chunk-6U3IUD57.js";
1040
- import "../chunk-W72U7OU7.js";
1041
1045
  import "../chunk-PHWQLKVE.js";
1042
- import {
1043
- __toCommonJS
1044
- } from "../chunk-GGWZFCYS.js";
1046
+ import "../chunk-GGWZFCYS.js";
1045
1047
 
1046
1048
  // src/components/announcement-bar.tsx
1047
1049
  import { useState, useEffect } from "react";
@@ -3206,164 +3208,8 @@ import { jsx as jsx23, jsxs as jsxs17 } from "react/jsx-runtime";
3206
3208
  // src/components/index.ts
3207
3209
  init_pagination();
3208
3210
 
3209
- // src/components/persistent-pagination.tsx
3210
- init_cn();
3211
- import { jsx as jsx24, jsxs as jsxs18 } from "react/jsx-runtime";
3212
- function PersistentPagination({
3213
- isLoading,
3214
- children,
3215
- currentPage,
3216
- totalPages,
3217
- className,
3218
- disabledOpacity = 0.5,
3219
- transitionDuration = 300,
3220
- showLoadingState = true
3221
- }) {
3222
- return /* @__PURE__ */ jsxs18(
3223
- "div",
3224
- {
3225
- className: cn(
3226
- "relative transition-all ease-in-out",
3227
- "flex justify-center items-center",
3228
- isLoading && "pointer-events-none",
3229
- className
3230
- ),
3231
- style: {
3232
- opacity: isLoading ? disabledOpacity : 1,
3233
- transitionDuration: `${transitionDuration}ms`
3234
- },
3235
- role: "navigation",
3236
- "aria-label": "Pagination",
3237
- "aria-busy": isLoading,
3238
- "data-loading": isLoading,
3239
- children: [
3240
- isLoading && /* @__PURE__ */ jsxs18(
3241
- "div",
3242
- {
3243
- className: "sr-only",
3244
- role: "status",
3245
- "aria-live": "polite",
3246
- children: [
3247
- "Pagination temporarily disabled while loading page ",
3248
- currentPage,
3249
- " of ",
3250
- totalPages
3251
- ]
3252
- }
3253
- ),
3254
- /* @__PURE__ */ jsx24(
3255
- "div",
3256
- {
3257
- className: cn(
3258
- "relative transition-all ease-in-out",
3259
- isLoading && "cursor-not-allowed"
3260
- ),
3261
- style: {
3262
- transitionDuration: `${transitionDuration}ms`
3263
- },
3264
- "aria-hidden": isLoading,
3265
- children
3266
- }
3267
- )
3268
- ]
3269
- }
3270
- );
3271
- }
3272
- function usePaginationLoading(isLoading, currentPage, totalPages) {
3273
- const shouldShowPagination = totalPages > 1 || isLoading;
3274
- const paginationProps = {
3275
- "aria-busy": isLoading,
3276
- "data-loading": isLoading,
3277
- "data-current-page": currentPage,
3278
- "data-total-pages": totalPages
3279
- };
3280
- const getLoadingMessage = () => {
3281
- if (isLoading) {
3282
- return `Loading page ${currentPage} of ${totalPages}`;
3283
- }
3284
- return `Page ${currentPage} of ${totalPages}`;
3285
- };
3286
- return {
3287
- shouldShowPagination,
3288
- paginationProps,
3289
- getLoadingMessage
3290
- };
3291
- }
3292
- function PersistentPaginationWrapper({
3293
- isLoading,
3294
- currentPage,
3295
- totalPages,
3296
- onPageChange,
3297
- className,
3298
- variant = "vendor"
3299
- }) {
3300
- const { getLoadingMessage } = usePaginationLoading(
3301
- isLoading,
3302
- currentPage,
3303
- totalPages
3304
- );
3305
- const hasResults = totalPages > 0;
3306
- const displayTotalPages = hasResults ? totalPages : 1;
3307
- const displayCurrentPage = hasResults ? currentPage : 1;
3308
- const isPaginationDisabled = isLoading;
3309
- const hasNoResults = !hasResults && !isLoading;
3310
- const PaginationComponent = (init_unified_pagination(), __toCommonJS(unified_pagination_exports)).UnifiedPagination;
3311
- return /* @__PURE__ */ jsxs18(
3312
- "div",
3313
- {
3314
- className: cn(
3315
- "relative transition-all ease-in-out flex justify-center items-center",
3316
- (isPaginationDisabled || hasNoResults) && "pointer-events-none",
3317
- className
3318
- ),
3319
- style: {
3320
- opacity: isPaginationDisabled ? 0.3 : hasNoResults ? 0.5 : 1,
3321
- transitionDuration: "300ms"
3322
- },
3323
- role: "navigation",
3324
- "aria-label": "Pagination",
3325
- "aria-busy": isLoading,
3326
- "data-loading": isLoading,
3327
- "data-has-results": hasResults,
3328
- children: [
3329
- (isLoading || !hasResults) && /* @__PURE__ */ jsx24(
3330
- "div",
3331
- {
3332
- className: "sr-only",
3333
- role: "status",
3334
- "aria-live": "polite",
3335
- children: isLoading ? `Pagination temporarily disabled while loading page ${displayCurrentPage} of ${displayTotalPages}` : `No results available - pagination disabled`
3336
- }
3337
- ),
3338
- /* @__PURE__ */ jsx24(
3339
- "div",
3340
- {
3341
- className: cn(
3342
- "relative transition-all ease-in-out",
3343
- isPaginationDisabled && "cursor-not-allowed"
3344
- ),
3345
- style: {
3346
- transitionDuration: "300ms"
3347
- },
3348
- "aria-hidden": isPaginationDisabled,
3349
- children: /* @__PURE__ */ jsx24(
3350
- PaginationComponent,
3351
- {
3352
- currentPage: displayCurrentPage,
3353
- totalPages: displayTotalPages,
3354
- onPageChange: hasResults ? onPageChange : () => {
3355
- }
3356
- }
3357
- )
3358
- }
3359
- )
3360
- ]
3361
- }
3362
- );
3363
- }
3364
-
3365
3211
  // src/components/pricing-display.tsx
3366
- import { jsx as jsx25, jsxs as jsxs19 } from "react/jsx-runtime";
3212
+ import { jsx as jsx24, jsxs as jsxs18 } from "react/jsx-runtime";
3367
3213
  var PRICING_STYLES = {
3368
3214
  // Comparison table style (current default)
3369
3215
  comparison: {
@@ -3399,19 +3245,19 @@ function PricingDisplay({
3399
3245
  styleConfig = PRICING_STYLES.comparison
3400
3246
  }) {
3401
3247
  if (typeof pricing === "string") {
3402
- return /* @__PURE__ */ jsx25(LegacyPricingDisplay, { pricing, className, styleConfig });
3248
+ return /* @__PURE__ */ jsx24(LegacyPricingDisplay, { pricing, className, styleConfig });
3403
3249
  }
3404
3250
  const pricingArray = Array.isArray(pricing) ? pricing : [pricing];
3405
3251
  if (!pricingArray || pricingArray.length === 0) {
3406
- return /* @__PURE__ */ jsx25("span", { className: `${styleConfig.priceTextColor} ${styleConfig.priceTextSize} ${styleConfig.fontFamily} ${className}`, children: "No pricing data" });
3252
+ return /* @__PURE__ */ jsx24("span", { className: `${styleConfig.priceTextColor} ${styleConfig.priceTextSize} ${styleConfig.fontFamily} ${className}`, children: "No pricing data" });
3407
3253
  }
3408
3254
  if (pricingArray.length === 1) {
3409
3255
  const item = pricingArray[0];
3410
3256
  const price = item.ranges?.[0]?.min || 0;
3411
3257
  const unit = item.ranges?.[0]?.unit;
3412
- return /* @__PURE__ */ jsxs19("span", { className: `${styleConfig.fontFamily} ${className}`, children: [
3413
- /* @__PURE__ */ jsx25("span", { className: `${styleConfig.priceTextColor} ${styleConfig.priceTextSize}`, children: formatPriceValue(price, styleConfig.showTildePrefix) }),
3414
- unit && /* @__PURE__ */ jsxs19("span", { className: `${styleConfig.secondaryTextColor} ${styleConfig.secondaryTextSize}`, children: [
3258
+ return /* @__PURE__ */ jsxs18("span", { className: `${styleConfig.fontFamily} ${className}`, children: [
3259
+ /* @__PURE__ */ jsx24("span", { className: `${styleConfig.priceTextColor} ${styleConfig.priceTextSize}`, children: formatPriceValue(price, styleConfig.showTildePrefix) }),
3260
+ unit && /* @__PURE__ */ jsxs18("span", { className: `${styleConfig.secondaryTextColor} ${styleConfig.secondaryTextSize}`, children: [
3415
3261
  "/",
3416
3262
  unit
3417
3263
  ] })
@@ -3419,9 +3265,9 @@ function PricingDisplay({
3419
3265
  }
3420
3266
  const priceValues = pricingArray.map((item) => formatPriceValue(item.ranges?.[0]?.min || 0, styleConfig.showTildePrefix));
3421
3267
  const itemWithUnit = pricingArray.find((item) => item.ranges?.[0]?.unit);
3422
- return /* @__PURE__ */ jsxs19("span", { className: `${styleConfig.fontFamily} ${className}`, children: [
3423
- /* @__PURE__ */ jsx25("span", { className: `${styleConfig.priceTextColor} ${styleConfig.priceTextSize}`, children: priceValues.join(" | ") }),
3424
- itemWithUnit && itemWithUnit.ranges?.[0]?.unit && /* @__PURE__ */ jsxs19("span", { className: `${styleConfig.secondaryTextColor} ${styleConfig.secondaryTextSize}`, children: [
3268
+ return /* @__PURE__ */ jsxs18("span", { className: `${styleConfig.fontFamily} ${className}`, children: [
3269
+ /* @__PURE__ */ jsx24("span", { className: `${styleConfig.priceTextColor} ${styleConfig.priceTextSize}`, children: priceValues.join(" | ") }),
3270
+ itemWithUnit && itemWithUnit.ranges?.[0]?.unit && /* @__PURE__ */ jsxs18("span", { className: `${styleConfig.secondaryTextColor} ${styleConfig.secondaryTextSize}`, children: [
3425
3271
  "/",
3426
3272
  itemWithUnit.ranges[0].unit
3427
3273
  ] })
@@ -3442,7 +3288,7 @@ function LegacyPricingDisplay({
3442
3288
  styleConfig = PRICING_STYLES.comparison
3443
3289
  }) {
3444
3290
  if (pricing === "Free" || pricing === "No pricing data") {
3445
- return /* @__PURE__ */ jsx25("span", { className: `${styleConfig.priceTextColor} ${styleConfig.priceTextSize} ${styleConfig.fontFamily} ${className}`, children: pricing });
3291
+ return /* @__PURE__ */ jsx24("span", { className: `${styleConfig.priceTextColor} ${styleConfig.priceTextSize} ${styleConfig.fontFamily} ${className}`, children: pricing });
3446
3292
  }
3447
3293
  const parsePricing = (pricingStr) => {
3448
3294
  if (pricingStr.includes(", ")) {
@@ -3498,9 +3344,9 @@ function LegacyPricingDisplay({
3498
3344
  };
3499
3345
  };
3500
3346
  const { mainValue, secondaryInfo } = parsePricing(pricing);
3501
- return /* @__PURE__ */ jsxs19("span", { className: `${styleConfig.fontFamily} ${className}`, children: [
3502
- /* @__PURE__ */ jsx25("span", { className: `${styleConfig.priceTextColor} ${styleConfig.priceTextSize}`, children: mainValue }),
3503
- secondaryInfo && /* @__PURE__ */ jsx25("span", { className: `${styleConfig.secondaryTextColor} ${styleConfig.secondaryTextSize}`, children: secondaryInfo })
3347
+ return /* @__PURE__ */ jsxs18("span", { className: `${styleConfig.fontFamily} ${className}`, children: [
3348
+ /* @__PURE__ */ jsx24("span", { className: `${styleConfig.priceTextColor} ${styleConfig.priceTextSize}`, children: mainValue }),
3349
+ secondaryInfo && /* @__PURE__ */ jsx24("span", { className: `${styleConfig.secondaryTextColor} ${styleConfig.secondaryTextSize}`, children: secondaryInfo })
3504
3350
  ] });
3505
3351
  }
3506
3352
  function formatPricingForDisplay(pricing) {
@@ -3508,7 +3354,7 @@ function formatPricingForDisplay(pricing) {
3508
3354
  }
3509
3355
 
3510
3356
  // src/components/results-count.tsx
3511
- import { Fragment as Fragment5, jsx as jsx26, jsxs as jsxs20 } from "react/jsx-runtime";
3357
+ import { Fragment as Fragment5, jsx as jsx25, jsxs as jsxs19 } from "react/jsx-runtime";
3512
3358
  function ResultsCount({
3513
3359
  currentPage,
3514
3360
  pageSize,
@@ -3524,7 +3370,7 @@ function ResultsCount({
3524
3370
  const plural = resultType === "vendors" ? "vendors" : "posts";
3525
3371
  const singular = resultType === "vendors" ? "vendor" : "post";
3526
3372
  const displayType = totalResults === 1 ? singular : plural;
3527
- return /* @__PURE__ */ jsx26("div", { className: "mb-6", children: /* @__PURE__ */ jsx26("p", { className: "text-ods-text-secondary text-sm font-['DM_Sans']", children: totalResults > 0 && /* @__PURE__ */ jsxs20(Fragment5, { children: [
3373
+ return /* @__PURE__ */ jsx25("div", { className: "mb-6", children: /* @__PURE__ */ jsx25("p", { className: "text-ods-text-secondary text-sm font-['DM_Sans']", children: totalResults > 0 && /* @__PURE__ */ jsxs19(Fragment5, { children: [
3528
3374
  "Showing ",
3529
3375
  startIndex,
3530
3376
  "-",
@@ -3533,7 +3379,7 @@ function ResultsCount({
3533
3379
  totalResults,
3534
3380
  " ",
3535
3381
  displayType,
3536
- sortingMessage && /* @__PURE__ */ jsxs20("span", { className: "ml-2 text-ods-accent", children: [
3382
+ sortingMessage && /* @__PURE__ */ jsxs19("span", { className: "ml-2 text-ods-accent", children: [
3537
3383
  "\u2022 ",
3538
3384
  sortingMessage
3539
3385
  ] })
@@ -3543,7 +3389,7 @@ function ResultsCount({
3543
3389
  // src/components/vendor-tag.tsx
3544
3390
  init_cn();
3545
3391
  import { Hand, Sparkles } from "lucide-react";
3546
- import { jsx as jsx27, jsxs as jsxs21 } from "react/jsx-runtime";
3392
+ import { jsx as jsx26, jsxs as jsxs20 } from "react/jsx-runtime";
3547
3393
  function VendorTag({
3548
3394
  type,
3549
3395
  text,
@@ -3562,89 +3408,89 @@ function VendorTag({
3562
3408
  return {
3563
3409
  text: "Placeholder",
3564
3410
  textColor: "text-ods-text-primary",
3565
- icon: /* @__PURE__ */ jsx27("div", { className: "w-4 h-4 rounded-sm flex items-center justify-center flex-shrink-0", children: /* @__PURE__ */ jsx27(Sparkles, { width: 10, height: 10, className: "text-ods-text-primary" }) })
3411
+ icon: /* @__PURE__ */ jsx26("div", { className: "w-4 h-4 rounded-sm flex items-center justify-center flex-shrink-0", children: /* @__PURE__ */ jsx26(Sparkles, { width: 10, height: 10, className: "text-ods-text-primary" }) })
3566
3412
  };
3567
3413
  case "ai":
3568
3414
  return {
3569
3415
  text: "AI Selected",
3570
3416
  textColor: "text-ods-text-primary",
3571
- icon: /* @__PURE__ */ jsx27("div", { className: "w-4 h-4 rounded-sm flex items-center justify-center flex-shrink-0", children: /* @__PURE__ */ jsx27(Sparkles, { width: 10, height: 10, className: "text-ods-text-primary" }) })
3417
+ icon: /* @__PURE__ */ jsx26("div", { className: "w-4 h-4 rounded-sm flex items-center justify-center flex-shrink-0", children: /* @__PURE__ */ jsx26(Sparkles, { width: 10, height: 10, className: "text-ods-text-primary" }) })
3572
3418
  };
3573
3419
  case "manual":
3574
3420
  return {
3575
3421
  text: "Manually Selected",
3576
3422
  textColor: "text-ods-text-secondary",
3577
- icon: /* @__PURE__ */ jsx27("div", { className: "w-4 h-4 rounded-sm flex items-center justify-center flex-shrink-0", children: /* @__PURE__ */ jsx27(Hand, { width: 10, height: 10, className: "text-ods-text-secondary" }) })
3423
+ icon: /* @__PURE__ */ jsx26("div", { className: "w-4 h-4 rounded-sm flex items-center justify-center flex-shrink-0", children: /* @__PURE__ */ jsx26(Hand, { width: 10, height: 10, className: "text-ods-text-secondary" }) })
3578
3424
  };
3579
3425
  case "open-source":
3580
3426
  return {
3581
3427
  text: text || "Open Source",
3582
- icon: /* @__PURE__ */ jsx27(
3428
+ icon: /* @__PURE__ */ jsx26(
3583
3429
  "div",
3584
3430
  {
3585
3431
  className: "w-4 h-4 bg-ods-accent rounded-sm flex items-center justify-center flex-shrink-0",
3586
3432
  style: accentColor ? { backgroundColor: accentColor } : void 0,
3587
- children: /* @__PURE__ */ jsx27(OpenSourceIcon2, { width: 10, height: 10, className: "text-[#1A1A1A]" })
3433
+ children: /* @__PURE__ */ jsx26(OpenSourceIcon2, { width: 10, height: 10, className: "text-[#1A1A1A]" })
3588
3434
  }
3589
3435
  )
3590
3436
  };
3591
3437
  case "commercial":
3592
3438
  return {
3593
3439
  text: text || "Commercial Vendor",
3594
- icon: /* @__PURE__ */ jsx27("div", { className: "w-4 h-4 bg-ods-border rounded-sm flex items-center justify-center flex-shrink-0", children: /* @__PURE__ */ jsx27(CoinsIcon2, { width: 10, height: 10, className: "text-ods-text-secondary" }) })
3440
+ icon: /* @__PURE__ */ jsx26("div", { className: "w-4 h-4 bg-ods-border rounded-sm flex items-center justify-center flex-shrink-0", children: /* @__PURE__ */ jsx26(CoinsIcon2, { width: 10, height: 10, className: "text-ods-text-secondary" }) })
3595
3441
  };
3596
3442
  case "free":
3597
3443
  return {
3598
3444
  text: text || "Free",
3599
- icon: /* @__PURE__ */ jsx27("div", { className: "w-4 h-4 bg-ods-accent rounded-sm flex items-center justify-center flex-shrink-0", children: /* @__PURE__ */ jsx27("span", { className: "text-[#1A1A1A] text-[8px] font-bold", children: "$" }) })
3445
+ icon: /* @__PURE__ */ jsx26("div", { className: "w-4 h-4 bg-ods-accent rounded-sm flex items-center justify-center flex-shrink-0", children: /* @__PURE__ */ jsx26("span", { className: "text-[#1A1A1A] text-[8px] font-bold", children: "$" }) })
3600
3446
  };
3601
3447
  case "freemium":
3602
3448
  return {
3603
3449
  text: text || "Freemium",
3604
- icon: /* @__PURE__ */ jsx27("div", { className: "w-4 h-4 bg-ods-accent rounded-sm flex items-center justify-center flex-shrink-0", children: /* @__PURE__ */ jsx27("span", { className: "text-[#1A1A1A] text-[8px] font-bold", children: "$" }) })
3450
+ icon: /* @__PURE__ */ jsx26("div", { className: "w-4 h-4 bg-ods-accent rounded-sm flex items-center justify-center flex-shrink-0", children: /* @__PURE__ */ jsx26("span", { className: "text-[#1A1A1A] text-[8px] font-bold", children: "$" }) })
3605
3451
  };
3606
3452
  case "paid":
3607
3453
  return {
3608
3454
  text: text || "Paid",
3609
- icon: /* @__PURE__ */ jsx27("div", { className: "w-4 h-4 bg-ods-border rounded-sm flex items-center justify-center flex-shrink-0", children: /* @__PURE__ */ jsx27(CoinsIcon2, { width: 10, height: 10, className: "text-ods-text-secondary" }) })
3455
+ icon: /* @__PURE__ */ jsx26("div", { className: "w-4 h-4 bg-ods-border rounded-sm flex items-center justify-center flex-shrink-0", children: /* @__PURE__ */ jsx26(CoinsIcon2, { width: 10, height: 10, className: "text-ods-text-secondary" }) })
3610
3456
  };
3611
3457
  case "enterprise":
3612
3458
  return {
3613
3459
  text: text || "Enterprise",
3614
- icon: /* @__PURE__ */ jsx27("div", { className: "w-4 h-4 bg-ods-accent rounded-sm flex items-center justify-center flex-shrink-0", children: /* @__PURE__ */ jsx27("span", { className: "text-[#1A1A1A] text-[8px] font-bold", children: "E" }) })
3460
+ icon: /* @__PURE__ */ jsx26("div", { className: "w-4 h-4 bg-ods-accent rounded-sm flex items-center justify-center flex-shrink-0", children: /* @__PURE__ */ jsx26("span", { className: "text-[#1A1A1A] text-[8px] font-bold", children: "E" }) })
3615
3461
  };
3616
3462
  case "recommended":
3617
3463
  return {
3618
3464
  text: text || "Recommended",
3619
- icon: /* @__PURE__ */ jsx27("div", { className: "w-4 h-4 bg-ods-accent rounded-sm flex items-center justify-center flex-shrink-0", children: /* @__PURE__ */ jsx27("span", { className: "text-[#1A1A1A] text-[8px] font-bold", children: "\u2605" }) })
3465
+ icon: /* @__PURE__ */ jsx26("div", { className: "w-4 h-4 bg-ods-accent rounded-sm flex items-center justify-center flex-shrink-0", children: /* @__PURE__ */ jsx26("span", { className: "text-[#1A1A1A] text-[8px] font-bold", children: "\u2605" }) })
3620
3466
  };
3621
3467
  case "classification":
3622
3468
  const classificationType = text?.toLowerCase();
3623
3469
  if (classificationType === "open_source") {
3624
3470
  return {
3625
3471
  text: "Open Source",
3626
- icon: /* @__PURE__ */ jsx27("div", { className: "w-4 h-4 bg-ods-accent rounded-sm flex items-center justify-center flex-shrink-0", children: /* @__PURE__ */ jsx27(OpenSourceIcon2, { width: 10, height: 10, className: "text-[#1A1A1A]" }) })
3472
+ icon: /* @__PURE__ */ jsx26("div", { className: "w-4 h-4 bg-ods-accent rounded-sm flex items-center justify-center flex-shrink-0", children: /* @__PURE__ */ jsx26(OpenSourceIcon2, { width: 10, height: 10, className: "text-[#1A1A1A]" }) })
3627
3473
  };
3628
3474
  } else if (classificationType === "commercial") {
3629
3475
  return {
3630
3476
  text: "Commercial Vendor",
3631
- icon: /* @__PURE__ */ jsx27("div", { className: "w-4 h-4 bg-ods-border rounded-sm flex items-center justify-center flex-shrink-0", children: /* @__PURE__ */ jsx27(CoinsIcon2, { width: 10, height: 10, className: "text-ods-text-secondary" }) })
3477
+ icon: /* @__PURE__ */ jsx26("div", { className: "w-4 h-4 bg-ods-border rounded-sm flex items-center justify-center flex-shrink-0", children: /* @__PURE__ */ jsx26(CoinsIcon2, { width: 10, height: 10, className: "text-ods-text-secondary" }) })
3632
3478
  };
3633
3479
  } else if (classificationType === "openframe_selected") {
3634
3480
  return {
3635
3481
  text: "OpenFrame Selected",
3636
- icon: /* @__PURE__ */ jsx27(OpenFrameLogo2, { lowerPathColor: "currentColor", upperPathColor: "currentColor", className: "h-4 w-4 text-ods-accent" })
3482
+ icon: /* @__PURE__ */ jsx26(OpenFrameLogo2, { lowerPathColor: "currentColor", upperPathColor: "currentColor", className: "h-4 w-4 text-ods-accent" })
3637
3483
  };
3638
3484
  } else {
3639
3485
  return {
3640
3486
  text: text || "Classification",
3641
- icon: /* @__PURE__ */ jsx27("div", { className: "w-4 h-4 bg-ods-accent rounded-sm flex items-center justify-center flex-shrink-0", children: /* @__PURE__ */ jsx27("span", { className: "text-[#1A1A1A] text-[8px] font-bold", children: "C" }) })
3487
+ icon: /* @__PURE__ */ jsx26("div", { className: "w-4 h-4 bg-ods-accent rounded-sm flex items-center justify-center flex-shrink-0", children: /* @__PURE__ */ jsx26("span", { className: "text-[#1A1A1A] text-[8px] font-bold", children: "C" }) })
3642
3488
  };
3643
3489
  }
3644
3490
  case "openframe_selected":
3645
3491
  return {
3646
3492
  text: text || "OpenFrame Selected",
3647
- icon: /* @__PURE__ */ jsx27(OpenFrameLogo2, { lowerPathColor: "currentColor", upperPathColor: "currentColor", className: "h-4 w-4 text-ods-accent" })
3493
+ icon: /* @__PURE__ */ jsx26(OpenFrameLogo2, { lowerPathColor: "currentColor", upperPathColor: "currentColor", className: "h-4 w-4 text-ods-accent" })
3648
3494
  };
3649
3495
  default:
3650
3496
  return {
@@ -3654,9 +3500,9 @@ function VendorTag({
3654
3500
  }
3655
3501
  };
3656
3502
  const { text: displayText, icon, textColor } = getTagContent();
3657
- return /* @__PURE__ */ jsxs21("div", { className: cn(baseClasses, className, hidden && "invisible"), children: [
3503
+ return /* @__PURE__ */ jsxs20("div", { className: cn(baseClasses, className, hidden && "invisible"), children: [
3658
3504
  icon,
3659
- /* @__PURE__ */ jsx27("span", { className: cn(
3505
+ /* @__PURE__ */ jsx26("span", { className: cn(
3660
3506
  "font-mono font-semibold uppercase",
3661
3507
  textColor ? textColor : "text-ods-text-primary",
3662
3508
  size === "sm" ? "text-[10px]" : "text-xs"
@@ -3665,12 +3511,12 @@ function VendorTag({
3665
3511
  }
3666
3512
 
3667
3513
  // src/components/selection-source-badge.tsx
3668
- import { jsx as jsx28 } from "react/jsx-runtime";
3514
+ import { jsx as jsx27 } from "react/jsx-runtime";
3669
3515
  function SelectionSourceBadge({ source, hidden = false }) {
3670
3516
  if (!source) {
3671
3517
  return null;
3672
3518
  }
3673
- return /* @__PURE__ */ jsx28(
3519
+ return /* @__PURE__ */ jsx27(
3674
3520
  VendorTag,
3675
3521
  {
3676
3522
  type: source?.toLowerCase(),
@@ -3683,26 +3529,26 @@ function SelectionSourceBadge({ source, hidden = false }) {
3683
3529
 
3684
3530
  // src/components/user-display.tsx
3685
3531
  init_cn();
3686
- import { jsx as jsx29, jsxs as jsxs22 } from "react/jsx-runtime";
3532
+ import { jsx as jsx28, jsxs as jsxs21 } from "react/jsx-runtime";
3687
3533
  function UserDisplay({ name, avatarUrl, subtitle, size = 32, className }) {
3688
- return /* @__PURE__ */ jsxs22("div", { className: cn("flex items-center gap-2 min-w-0", className), children: [
3689
- /* @__PURE__ */ jsx29(SquareAvatar2, { src: avatarUrl ?? void 0, fallbackName: name, size }),
3690
- /* @__PURE__ */ jsxs22("div", { className: "min-w-0 flex-1", children: [
3691
- /* @__PURE__ */ jsx29("p", { className: "font-['DM_Sans'] text-lg leading-[22px] text-ods-text-primary truncate", children: name }),
3692
- subtitle && /* @__PURE__ */ jsx29("span", { className: "font-['DM_Sans'] text-md leading-[16px] text-ods-text-secondary truncate", children: subtitle })
3534
+ return /* @__PURE__ */ jsxs21("div", { className: cn("flex items-center gap-2 min-w-0", className), children: [
3535
+ /* @__PURE__ */ jsx28(SquareAvatar2, { src: avatarUrl ?? void 0, fallbackName: name, size }),
3536
+ /* @__PURE__ */ jsxs21("div", { className: "min-w-0 flex-1", children: [
3537
+ /* @__PURE__ */ jsx28("p", { className: "font-['DM_Sans'] text-lg leading-[22px] text-ods-text-primary truncate", children: name }),
3538
+ subtitle && /* @__PURE__ */ jsx28("span", { className: "font-['DM_Sans'] text-md leading-[16px] text-ods-text-secondary truncate", children: subtitle })
3693
3539
  ] })
3694
3540
  ] });
3695
3541
  }
3696
3542
 
3697
3543
  // src/components/loading/content-skeleton.tsx
3698
3544
  init_cn();
3699
- import { jsx as jsx30, jsxs as jsxs23 } from "react/jsx-runtime";
3545
+ import { jsx as jsx29, jsxs as jsxs22 } from "react/jsx-runtime";
3700
3546
  function ParagraphSkeleton({
3701
3547
  className,
3702
3548
  lines = 4
3703
3549
  }) {
3704
3550
  const lineWidths = ["w-full", "w-full", "w-5/6", "w-3/4", "w-4/5", "w-2/3"];
3705
- return /* @__PURE__ */ jsx30("div", { className: cn("space-y-2", className), children: Array.from({ length: lines }).map((_, index) => /* @__PURE__ */ jsx30(
3551
+ return /* @__PURE__ */ jsx29("div", { className: cn("space-y-2", className), children: Array.from({ length: lines }).map((_, index) => /* @__PURE__ */ jsx29(
3706
3552
  TextSkeleton.Body,
3707
3553
  {
3708
3554
  className: lineWidths[index % lineWidths.length]
@@ -3716,14 +3562,14 @@ function ListSkeleton({
3716
3562
  showIcons = false,
3717
3563
  showActions = false
3718
3564
  }) {
3719
- return /* @__PURE__ */ jsx30("div", { className: cn("space-y-3", className), children: Array.from({ length: items }).map((_, index) => /* @__PURE__ */ jsxs23("div", { className: "flex items-center justify-between", children: [
3720
- /* @__PURE__ */ jsxs23("div", { className: "flex items-center gap-3", children: [
3721
- showIcons && /* @__PURE__ */ jsx30(MediaSkeleton.Icon, { size: "sm" }),
3722
- /* @__PURE__ */ jsx30(TextSkeleton.Body, { className: "w-32 md:w-48" })
3565
+ return /* @__PURE__ */ jsx29("div", { className: cn("space-y-3", className), children: Array.from({ length: items }).map((_, index) => /* @__PURE__ */ jsxs22("div", { className: "flex items-center justify-between", children: [
3566
+ /* @__PURE__ */ jsxs22("div", { className: "flex items-center gap-3", children: [
3567
+ showIcons && /* @__PURE__ */ jsx29(MediaSkeleton.Icon, { size: "sm" }),
3568
+ /* @__PURE__ */ jsx29(TextSkeleton.Body, { className: "w-32 md:w-48" })
3723
3569
  ] }),
3724
- showActions && /* @__PURE__ */ jsxs23("div", { className: "flex items-center gap-2", children: [
3725
- /* @__PURE__ */ jsx30(TextSkeleton.Caption, { className: "w-8" }),
3726
- /* @__PURE__ */ jsx30(UnifiedSkeleton, { variant: "default", className: "w-4 h-4" })
3570
+ showActions && /* @__PURE__ */ jsxs22("div", { className: "flex items-center gap-2", children: [
3571
+ /* @__PURE__ */ jsx29(TextSkeleton.Caption, { className: "w-8" }),
3572
+ /* @__PURE__ */ jsx29(UnifiedSkeleton, { variant: "default", className: "w-4 h-4" })
3727
3573
  ] })
3728
3574
  ] }, index)) });
3729
3575
  }
@@ -3732,14 +3578,14 @@ function TableSkeleton({
3732
3578
  rows = 5,
3733
3579
  columns = 4
3734
3580
  }) {
3735
- return /* @__PURE__ */ jsxs23("div", { className: cn("space-y-4", className), children: [
3736
- /* @__PURE__ */ jsx30("div", { className: "grid gap-4", style: { gridTemplateColumns: `repeat(${columns}, 1fr)` }, children: Array.from({ length: columns }).map((_, index) => /* @__PURE__ */ jsx30(TextSkeleton.Subheading, { className: "w-3/4" }, index)) }),
3737
- /* @__PURE__ */ jsx30("div", { className: "space-y-3", children: Array.from({ length: rows }).map((_, rowIndex) => /* @__PURE__ */ jsx30(
3581
+ return /* @__PURE__ */ jsxs22("div", { className: cn("space-y-4", className), children: [
3582
+ /* @__PURE__ */ jsx29("div", { className: "grid gap-4", style: { gridTemplateColumns: `repeat(${columns}, 1fr)` }, children: Array.from({ length: columns }).map((_, index) => /* @__PURE__ */ jsx29(TextSkeleton.Subheading, { className: "w-3/4" }, index)) }),
3583
+ /* @__PURE__ */ jsx29("div", { className: "space-y-3", children: Array.from({ length: rows }).map((_, rowIndex) => /* @__PURE__ */ jsx29(
3738
3584
  "div",
3739
3585
  {
3740
3586
  className: "grid gap-4 py-2 border-b border-ods-divider",
3741
3587
  style: { gridTemplateColumns: `repeat(${columns}, 1fr)` },
3742
- children: Array.from({ length: columns }).map((_2, colIndex) => /* @__PURE__ */ jsx30(TextSkeleton.Body, { className: "w-2/3" }, colIndex))
3588
+ children: Array.from({ length: columns }).map((_2, colIndex) => /* @__PURE__ */ jsx29(TextSkeleton.Body, { className: "w-2/3" }, colIndex))
3743
3589
  },
3744
3590
  rowIndex
3745
3591
  )) })
@@ -3749,15 +3595,15 @@ function FormSkeleton({
3749
3595
  className,
3750
3596
  fields = 4
3751
3597
  }) {
3752
- return /* @__PURE__ */ jsxs23("div", { className: cn("space-y-6", className), children: [
3753
- Array.from({ length: fields }).map((_, index) => /* @__PURE__ */ jsxs23("div", { className: "space-y-2", children: [
3754
- /* @__PURE__ */ jsx30(TextSkeleton.Body, { className: "w-24" }),
3755
- /* @__PURE__ */ jsx30(InteractiveSkeleton.Input, {}),
3756
- index % 3 === 0 && /* @__PURE__ */ jsx30(TextSkeleton.Caption, { className: "w-48" })
3598
+ return /* @__PURE__ */ jsxs22("div", { className: cn("space-y-6", className), children: [
3599
+ Array.from({ length: fields }).map((_, index) => /* @__PURE__ */ jsxs22("div", { className: "space-y-2", children: [
3600
+ /* @__PURE__ */ jsx29(TextSkeleton.Body, { className: "w-24" }),
3601
+ /* @__PURE__ */ jsx29(InteractiveSkeleton.Input, {}),
3602
+ index % 3 === 0 && /* @__PURE__ */ jsx29(TextSkeleton.Caption, { className: "w-48" })
3757
3603
  ] }, index)),
3758
- /* @__PURE__ */ jsxs23("div", { className: "flex gap-4 pt-4", children: [
3759
- /* @__PURE__ */ jsx30(InteractiveSkeleton.Button, {}),
3760
- /* @__PURE__ */ jsx30(InteractiveSkeleton.Button, { className: "bg-ods-border" })
3604
+ /* @__PURE__ */ jsxs22("div", { className: "flex gap-4 pt-4", children: [
3605
+ /* @__PURE__ */ jsx29(InteractiveSkeleton.Button, {}),
3606
+ /* @__PURE__ */ jsx29(InteractiveSkeleton.Button, { className: "bg-ods-border" })
3761
3607
  ] })
3762
3608
  ] });
3763
3609
  }
@@ -3766,7 +3612,7 @@ function NavigationSkeleton({
3766
3612
  items = 6,
3767
3613
  horizontal = true
3768
3614
  }) {
3769
- return /* @__PURE__ */ jsx30(
3615
+ return /* @__PURE__ */ jsx29(
3770
3616
  "nav",
3771
3617
  {
3772
3618
  className: cn(
@@ -3776,7 +3622,7 @@ function NavigationSkeleton({
3776
3622
  ),
3777
3623
  role: "status",
3778
3624
  "aria-label": "Loading navigation",
3779
- children: Array.from({ length: items }).map((_, index) => /* @__PURE__ */ jsx30(TextSkeleton.Body, { className: "w-16 md:w-20" }, index))
3625
+ children: Array.from({ length: items }).map((_, index) => /* @__PURE__ */ jsx29(TextSkeleton.Body, { className: "w-16 md:w-20" }, index))
3780
3626
  }
3781
3627
  );
3782
3628
  }
@@ -3785,32 +3631,32 @@ function ProfileSkeleton({
3785
3631
  showBio = true,
3786
3632
  showStats = true
3787
3633
  }) {
3788
- return /* @__PURE__ */ jsxs23("div", { className: cn("space-y-4", className), children: [
3789
- /* @__PURE__ */ jsxs23("div", { className: "flex items-start gap-4", children: [
3790
- /* @__PURE__ */ jsx30(MediaSkeleton.Avatar, { size: "lg" }),
3791
- /* @__PURE__ */ jsxs23("div", { className: "flex-1 space-y-2", children: [
3792
- /* @__PURE__ */ jsx30(TextSkeleton.Subheading, { className: "w-1/2" }),
3793
- /* @__PURE__ */ jsx30(TextSkeleton.Caption, { className: "w-1/3" }),
3794
- /* @__PURE__ */ jsx30(TextSkeleton.Body, { className: "w-2/3" })
3634
+ return /* @__PURE__ */ jsxs22("div", { className: cn("space-y-4", className), children: [
3635
+ /* @__PURE__ */ jsxs22("div", { className: "flex items-start gap-4", children: [
3636
+ /* @__PURE__ */ jsx29(MediaSkeleton.Avatar, { size: "lg" }),
3637
+ /* @__PURE__ */ jsxs22("div", { className: "flex-1 space-y-2", children: [
3638
+ /* @__PURE__ */ jsx29(TextSkeleton.Subheading, { className: "w-1/2" }),
3639
+ /* @__PURE__ */ jsx29(TextSkeleton.Caption, { className: "w-1/3" }),
3640
+ /* @__PURE__ */ jsx29(TextSkeleton.Body, { className: "w-2/3" })
3795
3641
  ] })
3796
3642
  ] }),
3797
- showBio && /* @__PURE__ */ jsxs23("div", { className: "space-y-2", children: [
3798
- /* @__PURE__ */ jsx30(TextSkeleton.Body, { className: "w-full" }),
3799
- /* @__PURE__ */ jsx30(TextSkeleton.Body, { className: "w-4/5" }),
3800
- /* @__PURE__ */ jsx30(TextSkeleton.Body, { className: "w-3/4" })
3643
+ showBio && /* @__PURE__ */ jsxs22("div", { className: "space-y-2", children: [
3644
+ /* @__PURE__ */ jsx29(TextSkeleton.Body, { className: "w-full" }),
3645
+ /* @__PURE__ */ jsx29(TextSkeleton.Body, { className: "w-4/5" }),
3646
+ /* @__PURE__ */ jsx29(TextSkeleton.Body, { className: "w-3/4" })
3801
3647
  ] }),
3802
- showStats && /* @__PURE__ */ jsxs23("div", { className: "flex gap-6", children: [
3803
- /* @__PURE__ */ jsxs23("div", { className: "text-center", children: [
3804
- /* @__PURE__ */ jsx30(TextSkeleton.Subheading, { className: "w-8 mx-auto" }),
3805
- /* @__PURE__ */ jsx30(TextSkeleton.Caption, { className: "w-12 mx-auto" })
3648
+ showStats && /* @__PURE__ */ jsxs22("div", { className: "flex gap-6", children: [
3649
+ /* @__PURE__ */ jsxs22("div", { className: "text-center", children: [
3650
+ /* @__PURE__ */ jsx29(TextSkeleton.Subheading, { className: "w-8 mx-auto" }),
3651
+ /* @__PURE__ */ jsx29(TextSkeleton.Caption, { className: "w-12 mx-auto" })
3806
3652
  ] }),
3807
- /* @__PURE__ */ jsxs23("div", { className: "text-center", children: [
3808
- /* @__PURE__ */ jsx30(TextSkeleton.Subheading, { className: "w-8 mx-auto" }),
3809
- /* @__PURE__ */ jsx30(TextSkeleton.Caption, { className: "w-16 mx-auto" })
3653
+ /* @__PURE__ */ jsxs22("div", { className: "text-center", children: [
3654
+ /* @__PURE__ */ jsx29(TextSkeleton.Subheading, { className: "w-8 mx-auto" }),
3655
+ /* @__PURE__ */ jsx29(TextSkeleton.Caption, { className: "w-16 mx-auto" })
3810
3656
  ] }),
3811
- /* @__PURE__ */ jsxs23("div", { className: "text-center", children: [
3812
- /* @__PURE__ */ jsx30(TextSkeleton.Subheading, { className: "w-8 mx-auto" }),
3813
- /* @__PURE__ */ jsx30(TextSkeleton.Caption, { className: "w-14 mx-auto" })
3657
+ /* @__PURE__ */ jsxs22("div", { className: "text-center", children: [
3658
+ /* @__PURE__ */ jsx29(TextSkeleton.Subheading, { className: "w-8 mx-auto" }),
3659
+ /* @__PURE__ */ jsx29(TextSkeleton.Caption, { className: "w-14 mx-auto" })
3814
3660
  ] })
3815
3661
  ] })
3816
3662
  ] });
@@ -3820,34 +3666,34 @@ function CommentSkeleton({
3820
3666
  showRating = false,
3821
3667
  showReplies = false
3822
3668
  }) {
3823
- return /* @__PURE__ */ jsxs23("div", { className: cn("space-y-3", className), children: [
3824
- /* @__PURE__ */ jsxs23("div", { className: "flex items-center gap-3", children: [
3825
- /* @__PURE__ */ jsx30(MediaSkeleton.Avatar, { size: "sm" }),
3826
- /* @__PURE__ */ jsxs23("div", { className: "flex-1 flex items-center gap-4", children: [
3827
- /* @__PURE__ */ jsx30(TextSkeleton.Body, { className: "w-24" }),
3828
- /* @__PURE__ */ jsx30(TextSkeleton.Caption, { className: "w-16" }),
3829
- showRating && /* @__PURE__ */ jsx30("div", { className: "flex gap-1", children: Array.from({ length: 5 }).map((_, i) => /* @__PURE__ */ jsx30(MediaSkeleton.Icon, { size: "sm" }, i)) })
3669
+ return /* @__PURE__ */ jsxs22("div", { className: cn("space-y-3", className), children: [
3670
+ /* @__PURE__ */ jsxs22("div", { className: "flex items-center gap-3", children: [
3671
+ /* @__PURE__ */ jsx29(MediaSkeleton.Avatar, { size: "sm" }),
3672
+ /* @__PURE__ */ jsxs22("div", { className: "flex-1 flex items-center gap-4", children: [
3673
+ /* @__PURE__ */ jsx29(TextSkeleton.Body, { className: "w-24" }),
3674
+ /* @__PURE__ */ jsx29(TextSkeleton.Caption, { className: "w-16" }),
3675
+ showRating && /* @__PURE__ */ jsx29("div", { className: "flex gap-1", children: Array.from({ length: 5 }).map((_, i) => /* @__PURE__ */ jsx29(MediaSkeleton.Icon, { size: "sm" }, i)) })
3830
3676
  ] })
3831
3677
  ] }),
3832
- /* @__PURE__ */ jsxs23("div", { className: "ml-11 space-y-2", children: [
3833
- /* @__PURE__ */ jsx30(TextSkeleton.Body, { className: "w-full" }),
3834
- /* @__PURE__ */ jsx30(TextSkeleton.Body, { className: "w-3/4" }),
3835
- /* @__PURE__ */ jsx30(TextSkeleton.Body, { className: "w-1/2" })
3678
+ /* @__PURE__ */ jsxs22("div", { className: "ml-11 space-y-2", children: [
3679
+ /* @__PURE__ */ jsx29(TextSkeleton.Body, { className: "w-full" }),
3680
+ /* @__PURE__ */ jsx29(TextSkeleton.Body, { className: "w-3/4" }),
3681
+ /* @__PURE__ */ jsx29(TextSkeleton.Body, { className: "w-1/2" })
3836
3682
  ] }),
3837
- /* @__PURE__ */ jsxs23("div", { className: "ml-11 flex gap-4", children: [
3838
- /* @__PURE__ */ jsx30(TextSkeleton.Caption, { className: "w-12" }),
3839
- /* @__PURE__ */ jsx30(TextSkeleton.Caption, { className: "w-16" }),
3840
- /* @__PURE__ */ jsx30(TextSkeleton.Caption, { className: "w-8" })
3683
+ /* @__PURE__ */ jsxs22("div", { className: "ml-11 flex gap-4", children: [
3684
+ /* @__PURE__ */ jsx29(TextSkeleton.Caption, { className: "w-12" }),
3685
+ /* @__PURE__ */ jsx29(TextSkeleton.Caption, { className: "w-16" }),
3686
+ /* @__PURE__ */ jsx29(TextSkeleton.Caption, { className: "w-8" })
3841
3687
  ] }),
3842
- showReplies && /* @__PURE__ */ jsx30("div", { className: "ml-11 pl-4 border-l border-ods-divider space-y-4", children: Array.from({ length: 2 }).map((_, index) => /* @__PURE__ */ jsxs23("div", { className: "space-y-2", children: [
3843
- /* @__PURE__ */ jsxs23("div", { className: "flex items-center gap-3", children: [
3844
- /* @__PURE__ */ jsx30(MediaSkeleton.Avatar, { size: "sm" }),
3845
- /* @__PURE__ */ jsx30(TextSkeleton.Body, { className: "w-20" }),
3846
- /* @__PURE__ */ jsx30(TextSkeleton.Caption, { className: "w-12" })
3688
+ showReplies && /* @__PURE__ */ jsx29("div", { className: "ml-11 pl-4 border-l border-ods-divider space-y-4", children: Array.from({ length: 2 }).map((_, index) => /* @__PURE__ */ jsxs22("div", { className: "space-y-2", children: [
3689
+ /* @__PURE__ */ jsxs22("div", { className: "flex items-center gap-3", children: [
3690
+ /* @__PURE__ */ jsx29(MediaSkeleton.Avatar, { size: "sm" }),
3691
+ /* @__PURE__ */ jsx29(TextSkeleton.Body, { className: "w-20" }),
3692
+ /* @__PURE__ */ jsx29(TextSkeleton.Caption, { className: "w-12" })
3847
3693
  ] }),
3848
- /* @__PURE__ */ jsxs23("div", { className: "ml-11", children: [
3849
- /* @__PURE__ */ jsx30(TextSkeleton.Body, { className: "w-full" }),
3850
- /* @__PURE__ */ jsx30(TextSkeleton.Body, { className: "w-2/3" })
3694
+ /* @__PURE__ */ jsxs22("div", { className: "ml-11", children: [
3695
+ /* @__PURE__ */ jsx29(TextSkeleton.Body, { className: "w-full" }),
3696
+ /* @__PURE__ */ jsx29(TextSkeleton.Body, { className: "w-2/3" })
3851
3697
  ] })
3852
3698
  ] }, index)) })
3853
3699
  ] });
@@ -3859,35 +3705,35 @@ function FeatureListSkeleton({
3859
3705
  grouped = false
3860
3706
  }) {
3861
3707
  if (grouped) {
3862
- return /* @__PURE__ */ jsx30("div", { className: cn("space-y-6", className), children: Array.from({ length: 3 }).map((_, groupIndex) => /* @__PURE__ */ jsxs23("div", { className: "space-y-3", children: [
3863
- /* @__PURE__ */ jsx30(TextSkeleton.Subheading, { className: "w-1/3" }),
3864
- /* @__PURE__ */ jsx30("div", { className: "space-y-2", children: Array.from({ length: features / 3 }).map((_2, featureIndex) => /* @__PURE__ */ jsxs23("div", { className: "flex items-center gap-3", children: [
3865
- showIcons && /* @__PURE__ */ jsx30(MediaSkeleton.Icon, { size: "sm" }),
3866
- /* @__PURE__ */ jsx30(TextSkeleton.Body, { className: "w-2/3" })
3708
+ return /* @__PURE__ */ jsx29("div", { className: cn("space-y-6", className), children: Array.from({ length: 3 }).map((_, groupIndex) => /* @__PURE__ */ jsxs22("div", { className: "space-y-3", children: [
3709
+ /* @__PURE__ */ jsx29(TextSkeleton.Subheading, { className: "w-1/3" }),
3710
+ /* @__PURE__ */ jsx29("div", { className: "space-y-2", children: Array.from({ length: features / 3 }).map((_2, featureIndex) => /* @__PURE__ */ jsxs22("div", { className: "flex items-center gap-3", children: [
3711
+ showIcons && /* @__PURE__ */ jsx29(MediaSkeleton.Icon, { size: "sm" }),
3712
+ /* @__PURE__ */ jsx29(TextSkeleton.Body, { className: "w-2/3" })
3867
3713
  ] }, featureIndex)) })
3868
3714
  ] }, groupIndex)) });
3869
3715
  }
3870
- return /* @__PURE__ */ jsx30("div", { className: cn("space-y-3", className), children: Array.from({ length: features }).map((_, index) => /* @__PURE__ */ jsxs23("div", { className: "flex items-center gap-3", children: [
3871
- showIcons && /* @__PURE__ */ jsx30(MediaSkeleton.Icon, { size: "sm" }),
3872
- /* @__PURE__ */ jsx30(TextSkeleton.Body, { className: "w-2/3" })
3716
+ return /* @__PURE__ */ jsx29("div", { className: cn("space-y-3", className), children: Array.from({ length: features }).map((_, index) => /* @__PURE__ */ jsxs22("div", { className: "flex items-center gap-3", children: [
3717
+ showIcons && /* @__PURE__ */ jsx29(MediaSkeleton.Icon, { size: "sm" }),
3718
+ /* @__PURE__ */ jsx29(TextSkeleton.Body, { className: "w-2/3" })
3873
3719
  ] }, index)) });
3874
3720
  }
3875
3721
  function TimelineSkeleton({
3876
3722
  className,
3877
3723
  items = 5
3878
3724
  }) {
3879
- return /* @__PURE__ */ jsx30("div", { className: cn("space-y-6", className), children: Array.from({ length: items }).map((_, index) => /* @__PURE__ */ jsxs23("div", { className: "flex gap-4", children: [
3880
- /* @__PURE__ */ jsxs23("div", { className: "flex flex-col items-center", children: [
3881
- /* @__PURE__ */ jsx30(MediaSkeleton.Icon, { size: "sm" }),
3882
- index < items - 1 && /* @__PURE__ */ jsx30("div", { className: "w-px h-12 bg-ods-border mt-2" })
3725
+ return /* @__PURE__ */ jsx29("div", { className: cn("space-y-6", className), children: Array.from({ length: items }).map((_, index) => /* @__PURE__ */ jsxs22("div", { className: "flex gap-4", children: [
3726
+ /* @__PURE__ */ jsxs22("div", { className: "flex flex-col items-center", children: [
3727
+ /* @__PURE__ */ jsx29(MediaSkeleton.Icon, { size: "sm" }),
3728
+ index < items - 1 && /* @__PURE__ */ jsx29("div", { className: "w-px h-12 bg-ods-border mt-2" })
3883
3729
  ] }),
3884
- /* @__PURE__ */ jsxs23("div", { className: "flex-1 space-y-2", children: [
3885
- /* @__PURE__ */ jsxs23("div", { className: "flex items-center gap-3", children: [
3886
- /* @__PURE__ */ jsx30(TextSkeleton.Body, { className: "w-1/3" }),
3887
- /* @__PURE__ */ jsx30(TextSkeleton.Caption, { className: "w-16" })
3730
+ /* @__PURE__ */ jsxs22("div", { className: "flex-1 space-y-2", children: [
3731
+ /* @__PURE__ */ jsxs22("div", { className: "flex items-center gap-3", children: [
3732
+ /* @__PURE__ */ jsx29(TextSkeleton.Body, { className: "w-1/3" }),
3733
+ /* @__PURE__ */ jsx29(TextSkeleton.Caption, { className: "w-16" })
3888
3734
  ] }),
3889
- /* @__PURE__ */ jsx30(TextSkeleton.Body, { className: "w-full" }),
3890
- /* @__PURE__ */ jsx30(TextSkeleton.Body, { className: "w-3/4" })
3735
+ /* @__PURE__ */ jsx29(TextSkeleton.Body, { className: "w-full" }),
3736
+ /* @__PURE__ */ jsx29(TextSkeleton.Body, { className: "w-3/4" })
3891
3737
  ] })
3892
3738
  ] }, index)) });
3893
3739
  }
@@ -3895,54 +3741,54 @@ function PricingSkeleton({
3895
3741
  className,
3896
3742
  plans = 3
3897
3743
  }) {
3898
- return /* @__PURE__ */ jsx30("div", { className: cn(
3744
+ return /* @__PURE__ */ jsx29("div", { className: cn(
3899
3745
  "grid gap-6",
3900
3746
  plans === 2 && "grid-cols-1 md:grid-cols-2",
3901
3747
  plans === 3 && "grid-cols-1 md:grid-cols-3",
3902
3748
  plans === 4 && "grid-cols-1 md:grid-cols-2 lg:grid-cols-4",
3903
3749
  className
3904
- ), children: Array.from({ length: plans }).map((_, index) => /* @__PURE__ */ jsx30("div", { className: "bg-ods-card border border-ods-border rounded-lg p-6", children: /* @__PURE__ */ jsxs23("div", { className: "space-y-4", children: [
3905
- /* @__PURE__ */ jsx30(TextSkeleton.Subheading, { className: "w-1/2" }),
3906
- /* @__PURE__ */ jsxs23("div", { className: "space-y-1", children: [
3907
- /* @__PURE__ */ jsx30(TextSkeleton.Heading, { className: "w-1/3" }),
3908
- /* @__PURE__ */ jsx30(TextSkeleton.Caption, { className: "w-1/4" })
3750
+ ), children: Array.from({ length: plans }).map((_, index) => /* @__PURE__ */ jsx29("div", { className: "bg-ods-card border border-ods-border rounded-lg p-6", children: /* @__PURE__ */ jsxs22("div", { className: "space-y-4", children: [
3751
+ /* @__PURE__ */ jsx29(TextSkeleton.Subheading, { className: "w-1/2" }),
3752
+ /* @__PURE__ */ jsxs22("div", { className: "space-y-1", children: [
3753
+ /* @__PURE__ */ jsx29(TextSkeleton.Heading, { className: "w-1/3" }),
3754
+ /* @__PURE__ */ jsx29(TextSkeleton.Caption, { className: "w-1/4" })
3909
3755
  ] }),
3910
- /* @__PURE__ */ jsx30("div", { className: "space-y-3 py-4", children: Array.from({ length: 5 }).map((_2, featureIndex) => /* @__PURE__ */ jsxs23("div", { className: "flex items-center gap-2", children: [
3911
- /* @__PURE__ */ jsx30(MediaSkeleton.Icon, { size: "sm" }),
3912
- /* @__PURE__ */ jsx30(TextSkeleton.Body, { className: "w-3/4" })
3756
+ /* @__PURE__ */ jsx29("div", { className: "space-y-3 py-4", children: Array.from({ length: 5 }).map((_2, featureIndex) => /* @__PURE__ */ jsxs22("div", { className: "flex items-center gap-2", children: [
3757
+ /* @__PURE__ */ jsx29(MediaSkeleton.Icon, { size: "sm" }),
3758
+ /* @__PURE__ */ jsx29(TextSkeleton.Body, { className: "w-3/4" })
3913
3759
  ] }, featureIndex)) }),
3914
- /* @__PURE__ */ jsx30(InteractiveSkeleton.Button, { className: "w-full" })
3760
+ /* @__PURE__ */ jsx29(InteractiveSkeleton.Button, { className: "w-full" })
3915
3761
  ] }) }, index)) });
3916
3762
  }
3917
3763
 
3918
3764
  // src/components/profile/ProfileLoadingSkeleton.tsx
3919
3765
  init_cn();
3920
- import { jsx as jsx31, jsxs as jsxs24 } from "react/jsx-runtime";
3766
+ import { jsx as jsx30, jsxs as jsxs23 } from "react/jsx-runtime";
3921
3767
  function ProfileLoadingSkeleton({ className }) {
3922
- return /* @__PURE__ */ jsxs24("div", { className: cn("space-y-6", className), children: [
3923
- /* @__PURE__ */ jsxs24("div", { className: "flex items-center space-x-4", children: [
3924
- /* @__PURE__ */ jsx31("div", { className: "h-16 w-16 bg-gray-200 rounded-full animate-pulse" }),
3925
- /* @__PURE__ */ jsxs24("div", { className: "space-y-2", children: [
3926
- /* @__PURE__ */ jsx31("div", { className: "h-4 w-32 bg-gray-200 rounded animate-pulse" }),
3927
- /* @__PURE__ */ jsx31("div", { className: "h-3 w-24 bg-gray-200 rounded animate-pulse" })
3768
+ return /* @__PURE__ */ jsxs23("div", { className: cn("space-y-6", className), children: [
3769
+ /* @__PURE__ */ jsxs23("div", { className: "flex items-center space-x-4", children: [
3770
+ /* @__PURE__ */ jsx30("div", { className: "h-16 w-16 bg-gray-200 rounded-full animate-pulse" }),
3771
+ /* @__PURE__ */ jsxs23("div", { className: "space-y-2", children: [
3772
+ /* @__PURE__ */ jsx30("div", { className: "h-4 w-32 bg-gray-200 rounded animate-pulse" }),
3773
+ /* @__PURE__ */ jsx30("div", { className: "h-3 w-24 bg-gray-200 rounded animate-pulse" })
3928
3774
  ] })
3929
3775
  ] }),
3930
- /* @__PURE__ */ jsxs24("div", { className: "space-y-4", children: [
3931
- /* @__PURE__ */ jsx31("div", { className: "h-4 w-full bg-gray-200 rounded animate-pulse" }),
3932
- /* @__PURE__ */ jsx31("div", { className: "h-4 w-3/4 bg-gray-200 rounded animate-pulse" }),
3933
- /* @__PURE__ */ jsx31("div", { className: "h-4 w-1/2 bg-gray-200 rounded animate-pulse" })
3776
+ /* @__PURE__ */ jsxs23("div", { className: "space-y-4", children: [
3777
+ /* @__PURE__ */ jsx30("div", { className: "h-4 w-full bg-gray-200 rounded animate-pulse" }),
3778
+ /* @__PURE__ */ jsx30("div", { className: "h-4 w-3/4 bg-gray-200 rounded animate-pulse" }),
3779
+ /* @__PURE__ */ jsx30("div", { className: "h-4 w-1/2 bg-gray-200 rounded animate-pulse" })
3934
3780
  ] })
3935
3781
  ] });
3936
3782
  }
3937
3783
 
3938
3784
  // src/components/loading/msp-profile-form-skeleton.tsx
3939
3785
  init_cn();
3940
- import { jsx as jsx32, jsxs as jsxs25 } from "react/jsx-runtime";
3786
+ import { jsx as jsx31, jsxs as jsxs24 } from "react/jsx-runtime";
3941
3787
  function MspProfileFormSkeleton({
3942
3788
  className,
3943
3789
  fields = 4
3944
3790
  }) {
3945
- return /* @__PURE__ */ jsxs25(
3791
+ return /* @__PURE__ */ jsxs24(
3946
3792
  "div",
3947
3793
  {
3948
3794
  className: cn(
@@ -3952,13 +3798,13 @@ function MspProfileFormSkeleton({
3952
3798
  role: "status",
3953
3799
  "aria-label": "Loading MSP profile form",
3954
3800
  children: [
3955
- /* @__PURE__ */ jsxs25("div", { className: "flex flex-col space-y-2 h-full", children: [
3956
- /* @__PURE__ */ jsx32(TextSkeleton.Body, { className: "w-28" }),
3957
- /* @__PURE__ */ jsx32("div", { className: "flex-1 min-h-[180px] md:min-h-full", children: /* @__PURE__ */ jsx32(UnifiedSkeleton, { className: "w-full h-full rounded-lg", "aria-label": "Loading company logo" }) })
3801
+ /* @__PURE__ */ jsxs24("div", { className: "flex flex-col space-y-2 h-full", children: [
3802
+ /* @__PURE__ */ jsx31(TextSkeleton.Body, { className: "w-28" }),
3803
+ /* @__PURE__ */ jsx31("div", { className: "flex-1 min-h-[180px] md:min-h-full", children: /* @__PURE__ */ jsx31(UnifiedSkeleton, { className: "w-full h-full rounded-lg", "aria-label": "Loading company logo" }) })
3958
3804
  ] }),
3959
- /* @__PURE__ */ jsx32("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-4", children: Array.from({ length: fields }).map((_, idx) => /* @__PURE__ */ jsxs25("div", { className: "space-y-2 flex flex-col", children: [
3960
- /* @__PURE__ */ jsx32(TextSkeleton.Body, { className: "w-40" }),
3961
- /* @__PURE__ */ jsx32(InteractiveSkeleton.Input, {})
3805
+ /* @__PURE__ */ jsx31("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-4", children: Array.from({ length: fields }).map((_, idx) => /* @__PURE__ */ jsxs24("div", { className: "space-y-2 flex flex-col", children: [
3806
+ /* @__PURE__ */ jsx31(TextSkeleton.Body, { className: "w-40" }),
3807
+ /* @__PURE__ */ jsx31(InteractiveSkeleton.Input, {})
3962
3808
  ] }, idx)) })
3963
3809
  ]
3964
3810
  }
@@ -3967,9 +3813,9 @@ function MspProfileFormSkeleton({
3967
3813
 
3968
3814
  // src/components/loading/category-card-skeleton.tsx
3969
3815
  init_cn();
3970
- import { jsx as jsx33, jsxs as jsxs26 } from "react/jsx-runtime";
3816
+ import { jsx as jsx32, jsxs as jsxs25 } from "react/jsx-runtime";
3971
3817
  function CategoryCardSkeleton({ className }) {
3972
- return /* @__PURE__ */ jsxs26(
3818
+ return /* @__PURE__ */ jsxs25(
3973
3819
  "article",
3974
3820
  {
3975
3821
  className: cn(
@@ -3979,7 +3825,7 @@ function CategoryCardSkeleton({ className }) {
3979
3825
  role: "status",
3980
3826
  "aria-label": "Loading category card",
3981
3827
  children: [
3982
- /* @__PURE__ */ jsx33("div", { className: "flex gap-6 mb-8 justify-center items-center", children: Array.from({ length: 10 }).map((_, i) => /* @__PURE__ */ jsx33(
3828
+ /* @__PURE__ */ jsx32("div", { className: "flex gap-6 mb-8 justify-center items-center", children: Array.from({ length: 10 }).map((_, i) => /* @__PURE__ */ jsx32(
3983
3829
  UnifiedSkeleton,
3984
3830
  {
3985
3831
  variant: "circular",
@@ -3988,12 +3834,12 @@ function CategoryCardSkeleton({ className }) {
3988
3834
  },
3989
3835
  i
3990
3836
  )) }),
3991
- /* @__PURE__ */ jsxs26("div", { className: "flex-1 flex flex-col space-y-3", children: [
3992
- /* @__PURE__ */ jsx33(TextSkeleton.Heading, { className: "w-3/4" }),
3993
- /* @__PURE__ */ jsx33(TextSkeleton.Body, { className: "w-1/2" }),
3994
- /* @__PURE__ */ jsx33(TextSkeleton.Body, { className: "w-full" })
3837
+ /* @__PURE__ */ jsxs25("div", { className: "flex-1 flex flex-col space-y-3", children: [
3838
+ /* @__PURE__ */ jsx32(TextSkeleton.Heading, { className: "w-3/4" }),
3839
+ /* @__PURE__ */ jsx32(TextSkeleton.Body, { className: "w-1/2" }),
3840
+ /* @__PURE__ */ jsx32(TextSkeleton.Body, { className: "w-full" })
3995
3841
  ] }),
3996
- /* @__PURE__ */ jsx33("div", { className: "mt-4 flex justify-end", children: /* @__PURE__ */ jsx33(UnifiedSkeleton, { className: "w-12 h-12 rounded-[6px]", "aria-label": "Loading button" }) })
3842
+ /* @__PURE__ */ jsx32("div", { className: "mt-4 flex justify-end", children: /* @__PURE__ */ jsx32(UnifiedSkeleton, { className: "w-12 h-12 rounded-[6px]", "aria-label": "Loading button" }) })
3997
3843
  ]
3998
3844
  }
3999
3845
  );
@@ -4001,22 +3847,22 @@ function CategoryCardSkeleton({ className }) {
4001
3847
 
4002
3848
  // src/components/loading/category-vendor-selector-skeleton.tsx
4003
3849
  init_cn();
4004
- import { jsx as jsx34, jsxs as jsxs27 } from "react/jsx-runtime";
3850
+ import { jsx as jsx33, jsxs as jsxs26 } from "react/jsx-runtime";
4005
3851
  function CategoryVendorSelectorSkeleton({ subcategories = 3, className }) {
4006
- return /* @__PURE__ */ jsxs27(
3852
+ return /* @__PURE__ */ jsxs26(
4007
3853
  "div",
4008
3854
  {
4009
3855
  className: cn("bg-ods-card border border-ods-border rounded-lg p-6", className),
4010
3856
  role: "status",
4011
3857
  "aria-label": "Loading category section",
4012
3858
  children: [
4013
- /* @__PURE__ */ jsxs27("div", { className: "mb-6 space-y-2 max-w-xl", children: [
4014
- /* @__PURE__ */ jsx34(TextSkeleton.Heading, { className: "w-1/2" }),
4015
- /* @__PURE__ */ jsx34(TextSkeleton.Body, { className: "w-3/4" })
3859
+ /* @__PURE__ */ jsxs26("div", { className: "mb-6 space-y-2 max-w-xl", children: [
3860
+ /* @__PURE__ */ jsx33(TextSkeleton.Heading, { className: "w-1/2" }),
3861
+ /* @__PURE__ */ jsx33(TextSkeleton.Body, { className: "w-3/4" })
4016
3862
  ] }),
4017
- /* @__PURE__ */ jsx34("div", { className: "space-y-6", children: Array.from({ length: subcategories }).map((_, idx) => /* @__PURE__ */ jsxs27("div", { className: "space-y-2", children: [
4018
- /* @__PURE__ */ jsx34(TextSkeleton.Subheading, { className: "w-1/3" }),
4019
- /* @__PURE__ */ jsx34("div", { className: "grid grid-cols-2 md:grid-cols-3 gap-4", children: Array.from({ length: 2 }).map((__, j) => /* @__PURE__ */ jsx34(UnifiedSkeleton, { className: "h-20 rounded-lg" }, j)) })
3863
+ /* @__PURE__ */ jsx33("div", { className: "space-y-6", children: Array.from({ length: subcategories }).map((_, idx) => /* @__PURE__ */ jsxs26("div", { className: "space-y-2", children: [
3864
+ /* @__PURE__ */ jsx33(TextSkeleton.Subheading, { className: "w-1/3" }),
3865
+ /* @__PURE__ */ jsx33("div", { className: "grid grid-cols-2 md:grid-cols-3 gap-4", children: Array.from({ length: 2 }).map((__, j) => /* @__PURE__ */ jsx33(UnifiedSkeleton, { className: "h-20 rounded-lg" }, j)) })
4020
3866
  ] }, idx)) })
4021
3867
  ]
4022
3868
  }
@@ -4025,90 +3871,90 @@ function CategoryVendorSelectorSkeleton({ subcategories = 3, className }) {
4025
3871
 
4026
3872
  // src/components/loading/wizard-layout-skeleton.tsx
4027
3873
  init_cn();
4028
- import { jsx as jsx35, jsxs as jsxs28 } from "react/jsx-runtime";
3874
+ import { jsx as jsx34, jsxs as jsxs27 } from "react/jsx-runtime";
4029
3875
  function WizardLayoutSkeleton({ steps = 6, className }) {
4030
- return /* @__PURE__ */ jsxs28("div", { className: cn("space-y-6", className), role: "status", "aria-label": "Loading wizard layout", children: [
4031
- /* @__PURE__ */ jsx35("div", { className: "flex flex-wrap items-center gap-2", children: Array.from({ length: steps }).map((_, i) => /* @__PURE__ */ jsx35(UnifiedSkeleton, { className: "h-6 w-24 rounded" }, i)) }),
4032
- /* @__PURE__ */ jsxs28("div", { className: "space-y-2 max-w-2xl", children: [
4033
- /* @__PURE__ */ jsx35(TextSkeleton.Heading, { className: "w-2/3" }),
4034
- /* @__PURE__ */ jsx35(TextSkeleton.Body, { className: "w-1/2" })
3876
+ return /* @__PURE__ */ jsxs27("div", { className: cn("space-y-6", className), role: "status", "aria-label": "Loading wizard layout", children: [
3877
+ /* @__PURE__ */ jsx34("div", { className: "flex flex-wrap items-center gap-2", children: Array.from({ length: steps }).map((_, i) => /* @__PURE__ */ jsx34(UnifiedSkeleton, { className: "h-6 w-24 rounded" }, i)) }),
3878
+ /* @__PURE__ */ jsxs27("div", { className: "space-y-2 max-w-2xl", children: [
3879
+ /* @__PURE__ */ jsx34(TextSkeleton.Heading, { className: "w-2/3" }),
3880
+ /* @__PURE__ */ jsx34(TextSkeleton.Body, { className: "w-1/2" })
4035
3881
  ] }),
4036
- /* @__PURE__ */ jsxs28("div", { className: "flex justify-between mt-10", children: [
4037
- /* @__PURE__ */ jsx35(UnifiedSkeleton, { className: "h-10 w-24 rounded" }),
4038
- /* @__PURE__ */ jsx35(UnifiedSkeleton, { className: "h-10 w-32 rounded" })
3882
+ /* @__PURE__ */ jsxs27("div", { className: "flex justify-between mt-10", children: [
3883
+ /* @__PURE__ */ jsx34(UnifiedSkeleton, { className: "h-10 w-24 rounded" }),
3884
+ /* @__PURE__ */ jsx34(UnifiedSkeleton, { className: "h-10 w-32 rounded" })
4039
3885
  ] })
4040
3886
  ] });
4041
3887
  }
4042
3888
 
4043
3889
  // src/components/loading/margin-report-skeleton.tsx
4044
- import { jsx as jsx36, jsxs as jsxs29 } from "react/jsx-runtime";
3890
+ import { jsx as jsx35, jsxs as jsxs28 } from "react/jsx-runtime";
4045
3891
  function MarginReportSkeleton({ animate = true, description, overlayContent }) {
4046
- return /* @__PURE__ */ jsxs29("main", { className: `bg-ods-bg ${animate ? "animate-pulse" : ""} relative min-h-screen`, children: [
4047
- /* @__PURE__ */ jsxs29("div", { className: "max-w-[1920px] px-6 md:px-20 py-6 md:py-10 mx-auto space-y-10", children: [
4048
- /* @__PURE__ */ jsxs29("div", { className: "space-y-3", children: [
4049
- /* @__PURE__ */ jsx36("div", { className: "h-10 w-72 bg-[#2A2A2A] rounded" }),
4050
- /* @__PURE__ */ jsx36("div", { className: "h-4 w-80 bg-[#2A2A2A] rounded" })
3892
+ return /* @__PURE__ */ jsxs28("main", { className: `bg-ods-bg ${animate ? "animate-pulse" : ""} relative min-h-screen`, children: [
3893
+ /* @__PURE__ */ jsxs28("div", { className: "max-w-[1920px] px-6 md:px-20 py-6 md:py-10 mx-auto space-y-10", children: [
3894
+ /* @__PURE__ */ jsxs28("div", { className: "space-y-3", children: [
3895
+ /* @__PURE__ */ jsx35("div", { className: "h-10 w-72 bg-[#2A2A2A] rounded" }),
3896
+ /* @__PURE__ */ jsx35("div", { className: "h-4 w-80 bg-[#2A2A2A] rounded" })
4051
3897
  ] }),
4052
- /* @__PURE__ */ jsx36("div", { className: "grid grid-cols-1 md:grid-cols-3 gap-6", children: Array.from({ length: 3 }).map((_, i) => /* @__PURE__ */ jsx36("div", { className: "h-32 bg-ods-card border border-ods-border rounded" }, i)) }),
4053
- /* @__PURE__ */ jsxs29("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-6", children: [
4054
- /* @__PURE__ */ jsxs29("div", { className: "bg-ods-card border border-ods-border rounded-lg p-6 flex items-center gap-4 animate-pulse", children: [
4055
- /* @__PURE__ */ jsx36("div", { className: "w-14 h-14 rounded-lg bg-[#2A2A2A]" }),
4056
- /* @__PURE__ */ jsxs29("div", { className: "flex-1 space-y-2", children: [
4057
- /* @__PURE__ */ jsx36("div", { className: "h-4 bg-[#2A2A2A] rounded w-3/4" }),
4058
- /* @__PURE__ */ jsx36("div", { className: "h-3 bg-[#2A2A2A] rounded w-1/2" })
3898
+ /* @__PURE__ */ jsx35("div", { className: "grid grid-cols-1 md:grid-cols-3 gap-6", children: Array.from({ length: 3 }).map((_, i) => /* @__PURE__ */ jsx35("div", { className: "h-32 bg-ods-card border border-ods-border rounded" }, i)) }),
3899
+ /* @__PURE__ */ jsxs28("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-6", children: [
3900
+ /* @__PURE__ */ jsxs28("div", { className: "bg-ods-card border border-ods-border rounded-lg p-6 flex items-center gap-4 animate-pulse", children: [
3901
+ /* @__PURE__ */ jsx35("div", { className: "w-14 h-14 rounded-lg bg-[#2A2A2A]" }),
3902
+ /* @__PURE__ */ jsxs28("div", { className: "flex-1 space-y-2", children: [
3903
+ /* @__PURE__ */ jsx35("div", { className: "h-4 bg-[#2A2A2A] rounded w-3/4" }),
3904
+ /* @__PURE__ */ jsx35("div", { className: "h-3 bg-[#2A2A2A] rounded w-1/2" })
4059
3905
  ] })
4060
3906
  ] }),
4061
- /* @__PURE__ */ jsxs29("div", { className: "bg-ods-card border border-ods-border rounded-lg p-6 flex flex-col gap-4 animate-pulse", children: [
4062
- /* @__PURE__ */ jsxs29("div", { className: "flex items-center justify-between gap-4", children: [
4063
- /* @__PURE__ */ jsxs29("div", { className: "flex items-center gap-2", children: [
4064
- /* @__PURE__ */ jsx36("div", { className: "w-10 h-10 rounded-lg bg-[#2A2A2A]" }),
4065
- /* @__PURE__ */ jsxs29("div", { className: "space-y-1", children: [
4066
- /* @__PURE__ */ jsx36("div", { className: "h-4 w-32 bg-[#2A2A2A] rounded" }),
4067
- /* @__PURE__ */ jsx36("div", { className: "h-3 w-20 bg-[#2A2A2A] rounded" })
3907
+ /* @__PURE__ */ jsxs28("div", { className: "bg-ods-card border border-ods-border rounded-lg p-6 flex flex-col gap-4 animate-pulse", children: [
3908
+ /* @__PURE__ */ jsxs28("div", { className: "flex items-center justify-between gap-4", children: [
3909
+ /* @__PURE__ */ jsxs28("div", { className: "flex items-center gap-2", children: [
3910
+ /* @__PURE__ */ jsx35("div", { className: "w-10 h-10 rounded-lg bg-[#2A2A2A]" }),
3911
+ /* @__PURE__ */ jsxs28("div", { className: "space-y-1", children: [
3912
+ /* @__PURE__ */ jsx35("div", { className: "h-4 w-32 bg-[#2A2A2A] rounded" }),
3913
+ /* @__PURE__ */ jsx35("div", { className: "h-3 w-20 bg-[#2A2A2A] rounded" })
4068
3914
  ] })
4069
3915
  ] }),
4070
- /* @__PURE__ */ jsx36("div", { className: "h-6 w-36 bg-[#2A2A2A] rounded" })
3916
+ /* @__PURE__ */ jsx35("div", { className: "h-6 w-36 bg-[#2A2A2A] rounded" })
4071
3917
  ] }),
4072
- /* @__PURE__ */ jsx36("div", { className: "h-4 w-40 bg-[#2A2A2A] rounded mt-4" })
3918
+ /* @__PURE__ */ jsx35("div", { className: "h-4 w-40 bg-[#2A2A2A] rounded mt-4" })
4073
3919
  ] })
4074
3920
  ] }),
4075
- /* @__PURE__ */ jsx36("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-6", children: ["Commercial Stack", "Open-Source Stack"].map((label, idx) => /* @__PURE__ */ jsxs29("div", { className: "bg-ods-card border border-ods-border rounded-lg overflow-hidden flex flex-col animate-pulse", children: [
4076
- /* @__PURE__ */ jsxs29("div", { className: "flex items-center justify-between px-6 py-4", children: [
4077
- /* @__PURE__ */ jsx36("div", { className: "h-6 w-40 bg-[#2A2A2A] rounded" }),
4078
- /* @__PURE__ */ jsxs29("div", { className: "flex items-center gap-2", children: [
4079
- /* @__PURE__ */ jsx36("div", { className: "h-5 w-20 bg-[#2A2A2A] rounded" }),
4080
- /* @__PURE__ */ jsx36("div", { className: "h-4 w-10 bg-[#2A2A2A] rounded" })
3921
+ /* @__PURE__ */ jsx35("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-6", children: ["Commercial Stack", "Open-Source Stack"].map((label, idx) => /* @__PURE__ */ jsxs28("div", { className: "bg-ods-card border border-ods-border rounded-lg overflow-hidden flex flex-col animate-pulse", children: [
3922
+ /* @__PURE__ */ jsxs28("div", { className: "flex items-center justify-between px-6 py-4", children: [
3923
+ /* @__PURE__ */ jsx35("div", { className: "h-6 w-40 bg-[#2A2A2A] rounded" }),
3924
+ /* @__PURE__ */ jsxs28("div", { className: "flex items-center gap-2", children: [
3925
+ /* @__PURE__ */ jsx35("div", { className: "h-5 w-20 bg-[#2A2A2A] rounded" }),
3926
+ /* @__PURE__ */ jsx35("div", { className: "h-4 w-10 bg-[#2A2A2A] rounded" })
4081
3927
  ] })
4082
3928
  ] }),
4083
- /* @__PURE__ */ jsx36("div", { className: "flex-1 flex flex-col gap-3 p-3", children: Array.from({ length: 5 }).map((_, j) => /* @__PURE__ */ jsxs29("div", { className: "bg-ods-bg border border-ods-border rounded-lg px-4 py-3 flex items-center justify-between", children: [
4084
- /* @__PURE__ */ jsxs29("div", { className: "flex items-center gap-3 min-w-0", children: [
4085
- /* @__PURE__ */ jsx36("div", { className: "w-12 h-12 bg-[#2A2A2A] rounded-lg flex-shrink-0" }),
4086
- /* @__PURE__ */ jsxs29("div", { className: "flex flex-col min-w-0", children: [
4087
- /* @__PURE__ */ jsx36("div", { className: "h-4 w-32 bg-[#2A2A2A] rounded" }),
4088
- /* @__PURE__ */ jsx36("div", { className: "hidden md:block h-3 w-24 bg-[#2A2A2A] rounded mt-1" })
3929
+ /* @__PURE__ */ jsx35("div", { className: "flex-1 flex flex-col gap-3 p-3", children: Array.from({ length: 5 }).map((_, j) => /* @__PURE__ */ jsxs28("div", { className: "bg-ods-bg border border-ods-border rounded-lg px-4 py-3 flex items-center justify-between", children: [
3930
+ /* @__PURE__ */ jsxs28("div", { className: "flex items-center gap-3 min-w-0", children: [
3931
+ /* @__PURE__ */ jsx35("div", { className: "w-12 h-12 bg-[#2A2A2A] rounded-lg flex-shrink-0" }),
3932
+ /* @__PURE__ */ jsxs28("div", { className: "flex flex-col min-w-0", children: [
3933
+ /* @__PURE__ */ jsx35("div", { className: "h-4 w-32 bg-[#2A2A2A] rounded" }),
3934
+ /* @__PURE__ */ jsx35("div", { className: "hidden md:block h-3 w-24 bg-[#2A2A2A] rounded mt-1" })
4089
3935
  ] })
4090
3936
  ] }),
4091
- /* @__PURE__ */ jsxs29("div", { className: "flex items-center gap-1 flex-shrink-0", children: [
4092
- /* @__PURE__ */ jsx36("div", { className: "h-4 w-16 bg-[#2A2A2A] rounded" }),
4093
- /* @__PURE__ */ jsx36("div", { className: "h-3 w-8 bg-[#2A2A2A] rounded" })
3937
+ /* @__PURE__ */ jsxs28("div", { className: "flex items-center gap-1 flex-shrink-0", children: [
3938
+ /* @__PURE__ */ jsx35("div", { className: "h-4 w-16 bg-[#2A2A2A] rounded" }),
3939
+ /* @__PURE__ */ jsx35("div", { className: "h-3 w-8 bg-[#2A2A2A] rounded" })
4094
3940
  ] })
4095
3941
  ] }, j)) })
4096
3942
  ] }, idx)) }),
4097
- /* @__PURE__ */ jsx36("div", { className: "h-6 w-60 bg-[#2A2A2A] rounded" }),
4098
- /* @__PURE__ */ jsx36("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6", children: Array.from({ length: 3 }).map((_, i) => /* @__PURE__ */ jsx36("div", { className: "h-48 bg-ods-card border border-ods-border rounded" }, i)) }),
4099
- /* @__PURE__ */ jsxs29("div", { className: "border border-ods-border rounded-3xl p-8 space-y-6", children: [
4100
- /* @__PURE__ */ jsxs29("div", { className: "flex items-start gap-6", children: [
4101
- /* @__PURE__ */ jsxs29("div", { className: "flex-1 space-y-2 min-w-0", children: [
4102
- /* @__PURE__ */ jsx36("div", { className: "h-8 w-72 bg-[#2A2A2A] rounded" }),
4103
- /* @__PURE__ */ jsx36("div", { className: "h-4 w-3/4 bg-[#2A2A2A] rounded" })
3943
+ /* @__PURE__ */ jsx35("div", { className: "h-6 w-60 bg-[#2A2A2A] rounded" }),
3944
+ /* @__PURE__ */ jsx35("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6", children: Array.from({ length: 3 }).map((_, i) => /* @__PURE__ */ jsx35("div", { className: "h-48 bg-ods-card border border-ods-border rounded" }, i)) }),
3945
+ /* @__PURE__ */ jsxs28("div", { className: "border border-ods-border rounded-3xl p-8 space-y-6", children: [
3946
+ /* @__PURE__ */ jsxs28("div", { className: "flex items-start gap-6", children: [
3947
+ /* @__PURE__ */ jsxs28("div", { className: "flex-1 space-y-2 min-w-0", children: [
3948
+ /* @__PURE__ */ jsx35("div", { className: "h-8 w-72 bg-[#2A2A2A] rounded" }),
3949
+ /* @__PURE__ */ jsx35("div", { className: "h-4 w-3/4 bg-[#2A2A2A] rounded" })
4104
3950
  ] }),
4105
- /* @__PURE__ */ jsx36("div", { className: "w-12 h-12 bg-[#2A2A2A] rounded-md shrink-0" })
3951
+ /* @__PURE__ */ jsx35("div", { className: "w-12 h-12 bg-[#2A2A2A] rounded-md shrink-0" })
4106
3952
  ] }),
4107
- /* @__PURE__ */ jsx36("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6", children: Array.from({ length: 3 }).map((_, i) => /* @__PURE__ */ jsx36("div", { className: "h-32 bg-ods-card border border-ods-border rounded" }, i)) })
3953
+ /* @__PURE__ */ jsx35("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6", children: Array.from({ length: 3 }).map((_, i) => /* @__PURE__ */ jsx35("div", { className: "h-32 bg-ods-card border border-ods-border rounded" }, i)) })
4108
3954
  ] })
4109
3955
  ] }),
4110
- overlayContent && /* @__PURE__ */ jsx36("div", { className: "absolute inset-0 bg-ods-card/80 z-10 rounded-lg pointer-events-none", children: /* @__PURE__ */ jsxs29("div", { className: "fixed top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 pointer-events-auto flex flex-col items-center gap-4 text-center px-4", children: [
4111
- description && /* @__PURE__ */ jsx36("h3", { children: description }),
3956
+ overlayContent && /* @__PURE__ */ jsx35("div", { className: "absolute inset-0 bg-ods-card/80 z-10 rounded-lg pointer-events-none", children: /* @__PURE__ */ jsxs28("div", { className: "fixed top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 pointer-events-auto flex flex-col items-center gap-4 text-center px-4", children: [
3957
+ description && /* @__PURE__ */ jsx35("h3", { children: description }),
4112
3958
  overlayContent
4113
3959
  ] }) })
4114
3960
  ] });
@@ -4116,18 +3962,18 @@ function MarginReportSkeleton({ animate = true, description, overlayContent }) {
4116
3962
 
4117
3963
  // src/components/loading/users-grid-skeleton.tsx
4118
3964
  init_cn();
4119
- import { jsx as jsx37, jsxs as jsxs30 } from "react/jsx-runtime";
3965
+ import { jsx as jsx36, jsxs as jsxs29 } from "react/jsx-runtime";
4120
3966
  function UsersGridSkeleton({ rows = 10, className }) {
4121
3967
  const skeletonRows = Array.from({ length: rows });
4122
- return /* @__PURE__ */ jsx37("div", { className: cn("overflow-x-auto rounded-lg border border-ods-border bg-ods-card animate-pulse", className), children: /* @__PURE__ */ jsxs30("table", { className: "min-w-full divide-y divide-ods-border", children: [
4123
- /* @__PURE__ */ jsx37("thead", { className: "bg-[#2A2A2A]", children: /* @__PURE__ */ jsx37("tr", { children: ["Name", "Email", "Role", "Created", "Last Sign-In"].map((h) => /* @__PURE__ */ jsx37("th", { className: "px-4 py-3 text-left text-[12px] font-medium text-ods-text-primary font-['DM_Sans']", children: h }, h)) }) }),
4124
- /* @__PURE__ */ jsx37("tbody", { className: "divide-y divide-ods-border", children: skeletonRows.map((_, idx) => /* @__PURE__ */ jsx37("tr", { children: Array.from({ length: 5 }).map((__, cell) => /* @__PURE__ */ jsx37("td", { className: "px-4 py-3 whitespace-nowrap", children: /* @__PURE__ */ jsx37("div", { className: "h-4 bg-ods-border rounded w-full" }) }, cell)) }, idx)) })
3968
+ return /* @__PURE__ */ jsx36("div", { className: cn("overflow-x-auto rounded-lg border border-ods-border bg-ods-card animate-pulse", className), children: /* @__PURE__ */ jsxs29("table", { className: "min-w-full divide-y divide-ods-border", children: [
3969
+ /* @__PURE__ */ jsx36("thead", { className: "bg-[#2A2A2A]", children: /* @__PURE__ */ jsx36("tr", { children: ["Name", "Email", "Role", "Created", "Last Sign-In"].map((h) => /* @__PURE__ */ jsx36("th", { className: "px-4 py-3 text-left text-[12px] font-medium text-ods-text-primary font-['DM_Sans']", children: h }, h)) }) }),
3970
+ /* @__PURE__ */ jsx36("tbody", { className: "divide-y divide-ods-border", children: skeletonRows.map((_, idx) => /* @__PURE__ */ jsx36("tr", { children: Array.from({ length: 5 }).map((__, cell) => /* @__PURE__ */ jsx36("td", { className: "px-4 py-3 whitespace-nowrap", children: /* @__PURE__ */ jsx36("div", { className: "h-4 bg-ods-border rounded w-full" }) }, cell)) }, idx)) })
4125
3971
  ] }) });
4126
3972
  }
4127
3973
 
4128
3974
  // src/components/loading/organization-icon-skeleton.tsx
4129
3975
  init_cn();
4130
- import { jsx as jsx38 } from "react/jsx-runtime";
3976
+ import { jsx as jsx37 } from "react/jsx-runtime";
4131
3977
  var sizeClasses2 = {
4132
3978
  xs: "w-6 h-6",
4133
3979
  sm: "w-8 h-8",
@@ -4154,27 +4000,27 @@ function OrganizationIconSkeleton({
4154
4000
  !showBackground && "overflow-hidden",
4155
4001
  className
4156
4002
  );
4157
- return /* @__PURE__ */ jsx38(
4003
+ return /* @__PURE__ */ jsx37(
4158
4004
  "div",
4159
4005
  {
4160
4006
  className: containerClasses,
4161
4007
  role: "status",
4162
4008
  "aria-label": "Loading organization icon",
4163
- children: /* @__PURE__ */ jsx38("div", { className: "w-1/2 h-1/2 bg-ods-border rounded-sm animate-pulse" })
4009
+ children: /* @__PURE__ */ jsx37("div", { className: "w-1/2 h-1/2 bg-ods-border rounded-sm animate-pulse" })
4164
4010
  }
4165
4011
  );
4166
4012
  }
4167
4013
 
4168
4014
  // src/components/loading/organization-card-skeleton.tsx
4169
4015
  init_cn();
4170
- import { jsx as jsx39, jsxs as jsxs31 } from "react/jsx-runtime";
4016
+ import { jsx as jsx38, jsxs as jsxs30 } from "react/jsx-runtime";
4171
4017
  function OrganizationCardSkeleton({
4172
4018
  className,
4173
4019
  containerClassName,
4174
4020
  showFooter = true,
4175
4021
  showDescription = true
4176
4022
  }) {
4177
- return /* @__PURE__ */ jsx39(
4023
+ return /* @__PURE__ */ jsx38(
4178
4024
  "div",
4179
4025
  {
4180
4026
  className: cn(
@@ -4184,9 +4030,9 @@ function OrganizationCardSkeleton({
4184
4030
  ),
4185
4031
  role: "status",
4186
4032
  "aria-label": "Loading organization card",
4187
- children: /* @__PURE__ */ jsxs31("div", { className: "p-4 gap-3 flex flex-col", children: [
4188
- /* @__PURE__ */ jsxs31("div", { className: "flex items-start gap-3 w-full", children: [
4189
- /* @__PURE__ */ jsx39(
4033
+ children: /* @__PURE__ */ jsxs30("div", { className: "p-4 gap-3 flex flex-col", children: [
4034
+ /* @__PURE__ */ jsxs30("div", { className: "flex items-start gap-3 w-full", children: [
4035
+ /* @__PURE__ */ jsx38(
4190
4036
  OrganizationIconSkeleton,
4191
4037
  {
4192
4038
  size: "xl",
@@ -4195,29 +4041,29 @@ function OrganizationCardSkeleton({
4195
4041
  className: "w-[60px] h-[60px]"
4196
4042
  }
4197
4043
  ),
4198
- /* @__PURE__ */ jsxs31("div", { className: "flex-1 flex flex-col justify-center py-2 min-w-0 space-y-1", children: [
4199
- /* @__PURE__ */ jsx39(TextSkeleton.Subheading, { className: "w-3/4" }),
4200
- /* @__PURE__ */ jsx39(TextSkeleton.Caption, { className: "w-1/2" })
4044
+ /* @__PURE__ */ jsxs30("div", { className: "flex-1 flex flex-col justify-center py-2 min-w-0 space-y-1", children: [
4045
+ /* @__PURE__ */ jsx38(TextSkeleton.Subheading, { className: "w-3/4" }),
4046
+ /* @__PURE__ */ jsx38(TextSkeleton.Caption, { className: "w-1/2" })
4201
4047
  ] })
4202
4048
  ] }),
4203
- showDescription && /* @__PURE__ */ jsx39("div", { className: "w-full h-12 overflow-hidden flex items-center", children: /* @__PURE__ */ jsxs31("div", { className: "space-y-1 w-full", children: [
4204
- /* @__PURE__ */ jsx39(TextSkeleton.Body, { className: "w-full" }),
4205
- /* @__PURE__ */ jsx39(TextSkeleton.Body, { className: "w-2/3" })
4049
+ showDescription && /* @__PURE__ */ jsx38("div", { className: "w-full h-12 overflow-hidden flex items-center", children: /* @__PURE__ */ jsxs30("div", { className: "space-y-1 w-full", children: [
4050
+ /* @__PURE__ */ jsx38(TextSkeleton.Body, { className: "w-full" }),
4051
+ /* @__PURE__ */ jsx38(TextSkeleton.Body, { className: "w-2/3" })
4206
4052
  ] }) }),
4207
- showFooter && /* @__PURE__ */ jsxs31("div", { className: "flex items-center justify-between gap-2 w-full min-w-0", children: [
4208
- /* @__PURE__ */ jsxs31("div", { className: "flex items-center gap-3 md:gap-4 min-w-0 flex-shrink", children: [
4209
- /* @__PURE__ */ jsxs31("div", { className: "flex items-center gap-1 flex-shrink-0", children: [
4210
- /* @__PURE__ */ jsx39(MediaSkeleton.Icon, { size: "sm", className: "w-5 h-5" }),
4211
- /* @__PURE__ */ jsx39(TextSkeleton.Caption, { className: "w-8" })
4053
+ showFooter && /* @__PURE__ */ jsxs30("div", { className: "flex items-center justify-between gap-2 w-full min-w-0", children: [
4054
+ /* @__PURE__ */ jsxs30("div", { className: "flex items-center gap-3 md:gap-4 min-w-0 flex-shrink", children: [
4055
+ /* @__PURE__ */ jsxs30("div", { className: "flex items-center gap-1 flex-shrink-0", children: [
4056
+ /* @__PURE__ */ jsx38(MediaSkeleton.Icon, { size: "sm", className: "w-5 h-5" }),
4057
+ /* @__PURE__ */ jsx38(TextSkeleton.Caption, { className: "w-8" })
4212
4058
  ] }),
4213
- /* @__PURE__ */ jsxs31("div", { className: "flex items-center gap-1 flex-shrink-0", children: [
4214
- /* @__PURE__ */ jsx39(MediaSkeleton.Icon, { size: "sm", className: "w-5 h-5" }),
4215
- /* @__PURE__ */ jsx39(TextSkeleton.Caption, { className: "w-10" })
4059
+ /* @__PURE__ */ jsxs30("div", { className: "flex items-center gap-1 flex-shrink-0", children: [
4060
+ /* @__PURE__ */ jsx38(MediaSkeleton.Icon, { size: "sm", className: "w-5 h-5" }),
4061
+ /* @__PURE__ */ jsx38(TextSkeleton.Caption, { className: "w-10" })
4216
4062
  ] })
4217
4063
  ] }),
4218
- /* @__PURE__ */ jsx39("div", { className: "flex-shrink-0", children: /* @__PURE__ */ jsxs31("div", { className: "flex items-center gap-1.5 bg-ods-bg border border-ods-border rounded px-2.5 py-1.5", children: [
4219
- /* @__PURE__ */ jsx39("div", { className: "w-4 h-4 bg-ods-border rounded-sm flex items-center justify-center flex-shrink-0", children: /* @__PURE__ */ jsx39(MediaSkeleton.Icon, { size: "sm", className: "w-2.5 h-2.5" }) }),
4220
- /* @__PURE__ */ jsx39(TextSkeleton.Caption, { className: "w-16" })
4064
+ /* @__PURE__ */ jsx38("div", { className: "flex-shrink-0", children: /* @__PURE__ */ jsxs30("div", { className: "flex items-center gap-1.5 bg-ods-bg border border-ods-border rounded px-2.5 py-1.5", children: [
4065
+ /* @__PURE__ */ jsx38("div", { className: "w-4 h-4 bg-ods-border rounded-sm flex items-center justify-center flex-shrink-0", children: /* @__PURE__ */ jsx38(MediaSkeleton.Icon, { size: "sm", className: "w-2.5 h-2.5" }) }),
4066
+ /* @__PURE__ */ jsx38(TextSkeleton.Caption, { className: "w-16" })
4221
4067
  ] }) })
4222
4068
  ] })
4223
4069
  ] })
@@ -4231,7 +4077,7 @@ function OrganizationCardSkeletonGrid({
4231
4077
  showFooter = true,
4232
4078
  showDescription = true
4233
4079
  }) {
4234
- return /* @__PURE__ */ jsx39(
4080
+ return /* @__PURE__ */ jsx38(
4235
4081
  "div",
4236
4082
  {
4237
4083
  className: cn(
@@ -4240,7 +4086,7 @@ function OrganizationCardSkeletonGrid({
4240
4086
  ),
4241
4087
  role: "status",
4242
4088
  "aria-label": `Loading ${count} organization cards`,
4243
- children: Array.from({ length: count }, (_, index) => /* @__PURE__ */ jsx39(
4089
+ children: Array.from({ length: count }, (_, index) => /* @__PURE__ */ jsx38(
4244
4090
  OrganizationCardSkeleton,
4245
4091
  {
4246
4092
  containerClassName,
@@ -4255,9 +4101,9 @@ function OrganizationCardSkeletonGrid({
4255
4101
 
4256
4102
  // src/components/loading/device-card-skeleton.tsx
4257
4103
  init_cn();
4258
- import { jsx as jsx40, jsxs as jsxs32 } from "react/jsx-runtime";
4104
+ import { jsx as jsx39, jsxs as jsxs31 } from "react/jsx-runtime";
4259
4105
  function DeviceCardSkeleton({ className }) {
4260
- return /* @__PURE__ */ jsxs32(
4106
+ return /* @__PURE__ */ jsxs31(
4261
4107
  "div",
4262
4108
  {
4263
4109
  className: cn(
@@ -4267,19 +4113,19 @@ function DeviceCardSkeleton({ className }) {
4267
4113
  role: "status",
4268
4114
  "aria-label": "Loading device card",
4269
4115
  children: [
4270
- /* @__PURE__ */ jsxs32("div", { className: "flex gap-4 items-center px-4 py-3", children: [
4271
- /* @__PURE__ */ jsx40("div", { className: "w-8 h-8 bg-ods-bg border border-ods-border rounded-[6px] flex items-center justify-center flex-shrink-0", children: /* @__PURE__ */ jsx40("div", { className: "w-4 h-4 bg-ods-border rounded animate-pulse" }) }),
4272
- /* @__PURE__ */ jsx40("div", { className: "flex-1 min-w-0", children: /* @__PURE__ */ jsx40("div", { className: "h-6 w-3/4 bg-ods-border rounded animate-pulse" }) }),
4273
- /* @__PURE__ */ jsx40("div", { className: "w-12 h-12 bg-ods-border rounded-[6px] flex-shrink-0 animate-pulse" })
4116
+ /* @__PURE__ */ jsxs31("div", { className: "flex gap-4 items-center px-4 py-3", children: [
4117
+ /* @__PURE__ */ jsx39("div", { className: "w-8 h-8 bg-ods-bg border border-ods-border rounded-[6px] flex items-center justify-center flex-shrink-0", children: /* @__PURE__ */ jsx39("div", { className: "w-4 h-4 bg-ods-border rounded animate-pulse" }) }),
4118
+ /* @__PURE__ */ jsx39("div", { className: "flex-1 min-w-0", children: /* @__PURE__ */ jsx39("div", { className: "h-6 w-3/4 bg-ods-border rounded animate-pulse" }) }),
4119
+ /* @__PURE__ */ jsx39("div", { className: "w-12 h-12 bg-ods-border rounded-[6px] flex-shrink-0 animate-pulse" })
4274
4120
  ] }),
4275
- /* @__PURE__ */ jsxs32("div", { className: "flex gap-4 items-center px-4 py-2", children: [
4276
- /* @__PURE__ */ jsx40("div", { className: "w-24 h-6 bg-ods-border rounded flex-shrink-0 animate-pulse" }),
4277
- /* @__PURE__ */ jsx40(OrganizationIconSkeleton, { size: "sm" }),
4278
- /* @__PURE__ */ jsx40("div", { className: "flex-1 min-w-0", children: /* @__PURE__ */ jsx40("div", { className: "h-5 w-1/2 bg-ods-border rounded animate-pulse" }) })
4121
+ /* @__PURE__ */ jsxs31("div", { className: "flex gap-4 items-center px-4 py-2", children: [
4122
+ /* @__PURE__ */ jsx39("div", { className: "w-24 h-6 bg-ods-border rounded flex-shrink-0 animate-pulse" }),
4123
+ /* @__PURE__ */ jsx39(OrganizationIconSkeleton, { size: "sm" }),
4124
+ /* @__PURE__ */ jsx39("div", { className: "flex-1 min-w-0", children: /* @__PURE__ */ jsx39("div", { className: "h-5 w-1/2 bg-ods-border rounded animate-pulse" }) })
4279
4125
  ] }),
4280
- /* @__PURE__ */ jsxs32("div", { className: "flex gap-4 items-center px-4 py-2", children: [
4281
- /* @__PURE__ */ jsx40("div", { className: "w-20 h-6 bg-ods-border rounded-full flex-shrink-0 animate-pulse" }),
4282
- /* @__PURE__ */ jsx40("div", { className: "flex-1", children: /* @__PURE__ */ jsx40("div", { className: "h-5 w-40 bg-ods-border rounded animate-pulse" }) })
4126
+ /* @__PURE__ */ jsxs31("div", { className: "flex gap-4 items-center px-4 py-2", children: [
4127
+ /* @__PURE__ */ jsx39("div", { className: "w-20 h-6 bg-ods-border rounded-full flex-shrink-0 animate-pulse" }),
4128
+ /* @__PURE__ */ jsx39("div", { className: "flex-1", children: /* @__PURE__ */ jsx39("div", { className: "h-5 w-40 bg-ods-border rounded animate-pulse" }) })
4283
4129
  ] })
4284
4130
  ]
4285
4131
  }
@@ -4289,7 +4135,7 @@ function DeviceCardSkeletonGrid({
4289
4135
  count = 12,
4290
4136
  className
4291
4137
  }) {
4292
- return /* @__PURE__ */ jsx40(
4138
+ return /* @__PURE__ */ jsx39(
4293
4139
  "div",
4294
4140
  {
4295
4141
  className: cn(
@@ -4298,22 +4144,22 @@ function DeviceCardSkeletonGrid({
4298
4144
  ),
4299
4145
  role: "status",
4300
4146
  "aria-label": `Loading ${count} device cards`,
4301
- children: Array.from({ length: count }, (_, index) => /* @__PURE__ */ jsx40(DeviceCardSkeleton, {}, index))
4147
+ children: Array.from({ length: count }, (_, index) => /* @__PURE__ */ jsx39(DeviceCardSkeleton, {}, index))
4302
4148
  }
4303
4149
  );
4304
4150
  }
4305
4151
 
4306
4152
  // src/components/vendor-page-skeleton.tsx
4307
- import { jsx as jsx41 } from "react/jsx-runtime";
4153
+ import { jsx as jsx40 } from "react/jsx-runtime";
4308
4154
  function VendorPageSkeleton() {
4309
- return /* @__PURE__ */ jsx41(VendorDetailLayoutSkeleton, {});
4155
+ return /* @__PURE__ */ jsx40(VendorDetailLayoutSkeleton, {});
4310
4156
  }
4311
4157
 
4312
4158
  // src/components/why-it-matters.tsx
4313
- import { jsx as jsx42, jsxs as jsxs33 } from "react/jsx-runtime";
4159
+ import { jsx as jsx41, jsxs as jsxs32 } from "react/jsx-runtime";
4314
4160
 
4315
4161
  // src/components/yes-no-display.tsx
4316
- import { jsx as jsx43, jsxs as jsxs34 } from "react/jsx-runtime";
4162
+ import { jsx as jsx42, jsxs as jsxs33 } from "react/jsx-runtime";
4317
4163
  function YesNoDisplay({
4318
4164
  value,
4319
4165
  yesText = "Yes",
@@ -4322,20 +4168,20 @@ function YesNoDisplay({
4322
4168
  className = ""
4323
4169
  }) {
4324
4170
  if (customText) {
4325
- return /* @__PURE__ */ jsxs34("div", { className: `flex items-center gap-2 ${className}`, children: [
4326
- /* @__PURE__ */ jsx43(CheckCircleIcon2, { className: "h-6 w-6" }),
4327
- /* @__PURE__ */ jsx43("span", { className: "text-ods-text-primary text-[16px]", children: customText })
4171
+ return /* @__PURE__ */ jsxs33("div", { className: `flex items-center gap-2 ${className}`, children: [
4172
+ /* @__PURE__ */ jsx42(CheckCircleIcon2, { className: "h-6 w-6" }),
4173
+ /* @__PURE__ */ jsx42("span", { className: "text-ods-text-primary text-[16px]", children: customText })
4328
4174
  ] });
4329
4175
  }
4330
4176
  if (value) {
4331
- return /* @__PURE__ */ jsxs34("div", { className: `flex items-center gap-2 ${className}`, children: [
4332
- /* @__PURE__ */ jsx43(CheckCircleIcon2, { className: "h-6 w-6" }),
4333
- /* @__PURE__ */ jsx43("span", { className: "text-ods-text-primary text-[16px]", children: yesText })
4177
+ return /* @__PURE__ */ jsxs33("div", { className: `flex items-center gap-2 ${className}`, children: [
4178
+ /* @__PURE__ */ jsx42(CheckCircleIcon2, { className: "h-6 w-6" }),
4179
+ /* @__PURE__ */ jsx42("span", { className: "text-ods-text-primary text-[16px]", children: yesText })
4334
4180
  ] });
4335
4181
  }
4336
- return /* @__PURE__ */ jsxs34("div", { className: `flex items-center gap-2 ${className}`, children: [
4337
- /* @__PURE__ */ jsx43(XCircleIcon, { className: "h-6 w-6" }),
4338
- /* @__PURE__ */ jsx43("span", { className: "text-ods-text-secondary text-[16px]", children: noText })
4182
+ return /* @__PURE__ */ jsxs33("div", { className: `flex items-center gap-2 ${className}`, children: [
4183
+ /* @__PURE__ */ jsx42(XCircleIcon, { className: "h-6 w-6" }),
4184
+ /* @__PURE__ */ jsx42("span", { className: "text-ods-text-secondary text-[16px]", children: noText })
4339
4185
  ] });
4340
4186
  }
4341
4187
  function evaluateFeatureValue(value, dataType) {
@@ -4370,7 +4216,7 @@ function evaluateFeatureValue(value, dataType) {
4370
4216
 
4371
4217
  // src/components/made-with-love.tsx
4372
4218
  import { useState as useState5, useEffect as useEffect4 } from "react";
4373
- import { jsx as jsx44, jsxs as jsxs35 } from "react/jsx-runtime";
4219
+ import { jsx as jsx43, jsxs as jsxs34 } from "react/jsx-runtime";
4374
4220
  function MadeWithLove({
4375
4221
  className = "",
4376
4222
  size = "md",
@@ -4444,14 +4290,14 @@ function MadeWithLove({
4444
4290
  marginLeft: "4px",
4445
4291
  textDecoration: "none"
4446
4292
  };
4447
- return /* @__PURE__ */ jsxs35(
4293
+ return /* @__PURE__ */ jsxs34(
4448
4294
  "div",
4449
4295
  {
4450
4296
  style: containerStyle,
4451
4297
  className,
4452
4298
  children: [
4453
4299
  "Made with love by",
4454
- /* @__PURE__ */ jsxs35(
4300
+ /* @__PURE__ */ jsxs34(
4455
4301
  "a",
4456
4302
  {
4457
4303
  href: flamingoUrl,
@@ -4461,14 +4307,14 @@ function MadeWithLove({
4461
4307
  onMouseEnter: () => setIsHovered(true),
4462
4308
  onMouseLeave: () => setIsHovered(false),
4463
4309
  children: [
4464
- /* @__PURE__ */ jsx44("div", { style: logoStyle, children: /* @__PURE__ */ jsx44(
4310
+ /* @__PURE__ */ jsx43("div", { style: logoStyle, children: /* @__PURE__ */ jsx43(
4465
4311
  FlamingoLogo2,
4466
4312
  {
4467
4313
  size: config.logoSize,
4468
4314
  color: "#f357bb"
4469
4315
  }
4470
4316
  ) }),
4471
- /* @__PURE__ */ jsx44("span", { style: textStyle, children: "Flamingo" })
4317
+ /* @__PURE__ */ jsx43("span", { style: textStyle, children: "Flamingo" })
4472
4318
  ]
4473
4319
  }
4474
4320
  )
@@ -4480,7 +4326,7 @@ function MadeWithLove({
4480
4326
  // src/components/date-time-picker.tsx
4481
4327
  init_cn();
4482
4328
  import DatePicker2 from "react-datepicker";
4483
- import { jsx as jsx45, jsxs as jsxs36 } from "react/jsx-runtime";
4329
+ import { jsx as jsx44, jsxs as jsxs35 } from "react/jsx-runtime";
4484
4330
  var inputClassName = cn(
4485
4331
  "flex h-10 w-full rounded-md border px-3 py-2 text-sm ring-offset-background",
4486
4332
  "file:border-0 file:bg-transparent file:text-sm file:font-medium",
@@ -4504,9 +4350,9 @@ function DateTimePicker({
4504
4350
  timeIntervals = 15,
4505
4351
  dateFormat = "MMMM d, yyyy h:mm aa"
4506
4352
  }) {
4507
- return /* @__PURE__ */ jsxs36("div", { className: cn("space-y-2", className), children: [
4508
- label && /* @__PURE__ */ jsx45(Label, { className: "font-['Azeret_Mono'] text-[12px] font-semibold leading-[1em] tracking-[-0.02em] text-ods-text-secondary uppercase", children: label }),
4509
- /* @__PURE__ */ jsx45("div", { className: "w-full", children: /* @__PURE__ */ jsx45(
4353
+ return /* @__PURE__ */ jsxs35("div", { className: cn("space-y-2", className), children: [
4354
+ label && /* @__PURE__ */ jsx44(Label, { className: "font-['Azeret_Mono'] text-[12px] font-semibold leading-[1em] tracking-[-0.02em] text-ods-text-secondary uppercase", children: label }),
4355
+ /* @__PURE__ */ jsx44("div", { className: "w-full", children: /* @__PURE__ */ jsx44(
4510
4356
  DatePicker2,
4511
4357
  {
4512
4358
  selected: value,
@@ -4521,7 +4367,7 @@ function DateTimePicker({
4521
4367
  className: inputClassName
4522
4368
  }
4523
4369
  ) }),
4524
- /* @__PURE__ */ jsx45("style", { dangerouslySetInnerHTML: { __html: `
4370
+ /* @__PURE__ */ jsx44("style", { dangerouslySetInnerHTML: { __html: `
4525
4371
  .react-datepicker-wrapper {
4526
4372
  width: 100% !important;
4527
4373
  display: block !important;
@@ -4624,1233 +4470,9 @@ function DateTimePicker({
4624
4470
  ] });
4625
4471
  }
4626
4472
 
4627
- // src/components/shared/product-release/product-releases-view.tsx
4628
- init_cn();
4629
- import { Fragment as Fragment6, jsx as jsx46, jsxs as jsxs37 } from "react/jsx-runtime";
4630
- var DEFAULT_ENDPOINT = "/api/releases";
4631
- var DEFAULT_SEARCH_PARAM_KEY = DEV_SECTION_PARAM_KEYS.search;
4632
- var DEFAULT_STATUS_PARAM_KEY = DEV_SECTION_PARAM_KEYS.releaseStatus;
4633
- var DEFAULT_PAGE_PARAM_KEY = "page";
4634
- function ReleaseRow({
4635
- release,
4636
- basePath,
4637
- buildCardProps
4638
- }) {
4639
- const runtime = useChatRuntime();
4640
- const router = useRouter();
4641
- const cta = resolveContentHref(runtime?.composeContentUrl, {
4642
- type: "product_release",
4643
- slug: release.slug,
4644
- basePath,
4645
- platforms: release.product_release_platforms
4646
- });
4647
- const { target, rel } = useEntityCardLink({ href: cta.href, targetPlatform: cta.targetPlatform });
4648
- const onClick = (e) => {
4649
- if (e.defaultPrevented || isModifierClick(e) || target === "_blank") return;
4650
- e.preventDefault();
4651
- executeNavigationImperative({
4652
- runtime,
4653
- href: cta.href,
4654
- targetPlatform: cta.targetPlatform,
4655
- fallbackNavigate: router.push
4656
- });
4657
- };
4658
- return /* @__PURE__ */ jsx46(
4659
- ProductReleaseCard,
4660
- {
4661
- size: "lg",
4662
- title: release.title,
4663
- summary: release.summary,
4664
- version: release.version,
4665
- ...buildCardProps(release),
4666
- anchorProps: { href: cta.href, target, rel, onClick }
4667
- }
4668
- );
4669
- }
4670
- function ProductReleasesView({
4671
- endpoint = DEFAULT_ENDPOINT,
4672
- initialData,
4673
- itemsPerPage = 5,
4674
- basePath = "/releases",
4675
- buildCardProps = buildProductReleaseCardProps,
4676
- searchParamKey = DEFAULT_SEARCH_PARAM_KEY,
4677
- statusParamKey = DEFAULT_STATUS_PARAM_KEY,
4678
- pageParamKey = DEFAULT_PAGE_PARAM_KEY,
4679
- className
4680
- } = {}) {
4681
- const searchParams = useSearchParams();
4682
- const router = useRouter();
4683
- const pathname = usePathname();
4684
- const search = searchParams.get(searchParamKey) || "";
4685
- const status = searchParams.get(statusParamKey) || "all";
4686
- const currentPage = Math.max(1, parseInt(searchParams.get(pageParamKey) || "1", 10) || 1);
4687
- const offset = (currentPage - 1) * itemsPerPage;
4688
- const listParams = new URLSearchParams({ limit: String(itemsPerPage), offset: String(offset) });
4689
- if (search) listParams.set(searchParamKey, search);
4690
- if (status && status !== "all") listParams.set(statusParamKey, status);
4691
- const { data, isLoading, error, reload } = useSelfFetch(
4692
- `${endpoint}?${listParams.toString()}`,
4693
- { initialData }
4694
- );
4695
- const releases = data?.data ?? [];
4696
- const totalCount = data?.count ?? 0;
4697
- const totalPages = Math.ceil(totalCount / itemsPerPage);
4698
- const hasActiveFilters = search !== "" || status !== "all";
4699
- const showEmpty = !isLoading && !error && releases.length === 0;
4700
- const goToPage = (page) => {
4701
- const params = new URLSearchParams(searchParams.toString());
4702
- params.set(pageParamKey, String(page));
4703
- router.replace(`${pathname}?${params.toString()}`, { scroll: false });
4704
- };
4705
- const resetFilters = () => {
4706
- const params = new URLSearchParams(searchParams.toString());
4707
- params.delete(searchParamKey);
4708
- params.delete(statusParamKey);
4709
- params.delete(pageParamKey);
4710
- router.replace(`${pathname}?${params.toString()}`, { scroll: false });
4711
- };
4712
- if (error) {
4713
- return /* @__PURE__ */ jsx46("div", { className: cn("w-full", className), children: /* @__PURE__ */ jsx46(LoadError, { message: "Failed to load releases.", onRetry: reload }) });
4714
- }
4715
- return /* @__PURE__ */ jsx46("div", { className: cn("w-full flex flex-col gap-[40px]", className), children: /* @__PURE__ */ jsx46("div", { className: "min-h-[600px]", children: showEmpty ? /* @__PURE__ */ jsx46("div", { className: "h-[600px] flex items-center justify-center", children: hasActiveFilters ? /* @__PURE__ */ jsx46(
4716
- EmptyState,
4717
- {
4718
- type: "search",
4719
- title: "No releases found",
4720
- description: "No releases match your current filters. Try adjusting your search or status filter.",
4721
- showCTA: true,
4722
- ctaText: "Reset Filters",
4723
- onCtaClick: resetFilters
4724
- }
4725
- ) : /* @__PURE__ */ jsx46(
4726
- EmptyState,
4727
- {
4728
- type: "generic",
4729
- title: "No releases available",
4730
- description: "Check back soon for product updates!",
4731
- showCTA: false
4732
- }
4733
- ) }) : /* @__PURE__ */ jsxs37(Fragment6, { children: [
4734
- /* @__PURE__ */ jsx46("div", { className: "flex flex-col gap-6", children: Array.from({ length: itemsPerPage }).map((_, i) => {
4735
- const release = releases[i];
4736
- const hasData = !!release;
4737
- return /* @__PURE__ */ jsx46(
4738
- "div",
4739
- {
4740
- style: { visibility: isLoading || hasData ? "visible" : "hidden" },
4741
- children: isLoading ? /* @__PURE__ */ jsx46(ProductReleaseCardSkeleton, { size: "lg" }) : release ? /* @__PURE__ */ jsx46(ReleaseRow, { release, basePath, buildCardProps }) : /* @__PURE__ */ jsx46(ProductReleaseCardSkeleton, { size: "lg" })
4742
- },
4743
- release?.id ?? `slot-${i}`
4744
- );
4745
- }) }),
4746
- /* @__PURE__ */ jsx46("div", { className: "mt-6 md:mt-8 flex justify-center", children: isLoading ? /* @__PURE__ */ jsx46("div", { className: "h-12 m-3 w-64" }) : releases.length > 0 && totalPages > 1 ? /* @__PURE__ */ jsx46(
4747
- PersistentPaginationWrapper,
4748
- {
4749
- isLoading: false,
4750
- currentPage,
4751
- totalPages,
4752
- onPageChange: goToPage,
4753
- variant: "blog"
4754
- }
4755
- ) : /* @__PURE__ */ jsx46("div", { className: "h-12 m-3 w-64", style: { visibility: "hidden" } }) })
4756
- ] }) }) });
4757
- }
4758
-
4759
- // src/components/shared/product-release/release-detail-page.tsx
4760
- init_next_link();
4761
- init_next_navigation();
4762
- import { useState as useState7, useEffect as useEffect5 } from "react";
4763
-
4764
- // src/components/shared/media-gallery-strip.tsx
4765
- import { useState as useState6 } from "react";
4766
- import { Fragment as Fragment7, jsx as jsx47, jsxs as jsxs38 } from "react/jsx-runtime";
4767
- function isGalleryImage(mediaType) {
4768
- return mediaType !== "video" && mediaType !== "demo";
4769
- }
4770
- function MediaGalleryStrip({ items, maxDisplay, className }) {
4771
- const [galleryOpen, setGalleryOpen] = useState6(false);
4772
- const [galleryIndex, setGalleryIndex] = useState6(0);
4773
- if (!items || items.length === 0) return null;
4774
- const display = typeof maxDisplay === "number" ? items.slice(0, Math.max(0, maxDisplay)) : items;
4775
- const galleryImages = display.filter((m) => isGalleryImage(m.media_type)).map((m) => m.media_url);
4776
- const tileClass = "shrink-0 w-[240px] h-[200px] rounded-md overflow-hidden border border-ods-border bg-black transition-opacity";
4777
- return /* @__PURE__ */ jsxs38(Fragment7, { children: [
4778
- /* @__PURE__ */ jsx47("div", { className: `flex gap-6 overflow-x-auto w-full ${className ?? ""}`, children: display.map((mediaItem, index) => {
4779
- if (isGalleryImage(mediaItem.media_type)) {
4780
- return /* @__PURE__ */ jsx47(
4781
- "button",
4782
- {
4783
- type: "button",
4784
- className: `${tileClass} cursor-pointer hover:opacity-80`,
4785
- "aria-label": `Open ${mediaItem.title || `media ${index + 1}`} in gallery`,
4786
- onClick: () => {
4787
- setGalleryIndex(display.slice(0, index).filter((m) => isGalleryImage(m.media_type)).length);
4788
- setGalleryOpen(true);
4789
- },
4790
- children: /* @__PURE__ */ jsx47("img", { src: mediaItem.media_url, alt: mediaItem.title || `Media ${index + 1}`, className: "w-full h-full object-cover" })
4791
- },
4792
- mediaItem.id || index
4793
- );
4794
- }
4795
- return /* @__PURE__ */ jsx47("div", { className: tileClass, children: /* @__PURE__ */ jsx47(Video, { url: mediaItem.media_url, layout: "native" }) }, mediaItem.id || index);
4796
- }) }),
4797
- galleryImages.length > 0 && /* @__PURE__ */ jsx47(
4798
- ImageGalleryModal,
4799
- {
4800
- images: galleryImages,
4801
- isOpen: galleryOpen,
4802
- onClose: () => setGalleryOpen(false),
4803
- initialIndex: galleryIndex
4804
- }
4805
- )
4806
- ] });
4807
- }
4808
-
4809
- // src/components/shared/product-release/release-detail-page.tsx
4810
- import { AlertTriangle, ExternalLink, BookMarked, Sparkles as Sparkles2, TrendingUp, Wrench } from "lucide-react";
4811
- import { Fragment as Fragment8, jsx as jsx48, jsxs as jsxs39 } from "react/jsx-runtime";
4812
- var DefaultMarkdownRenderer = RichMarkdownRenderer;
4813
- function ReleaseDetailPage({
4814
- authorHref,
4815
- slug,
4816
- initialData,
4817
- useRelease,
4818
- MarkdownRenderer = DefaultMarkdownRenderer,
4819
- RoadmapSection,
4820
- DeliverySection,
4821
- VideoSection,
4822
- VideoDisplaySection,
4823
- roadmapApiEndpoint = "/api/roadmap",
4824
- deliveryApiEndpoint = "/api/delivery",
4825
- backButton
4826
- }) {
4827
- const router = useRouter();
4828
- const { data: fetchedRelease, error, isLoading } = useRelease(initialData ? void 0 : slug);
4829
- const release = initialData || fetchedRelease;
4830
- const showBackButton = backButton !== false;
4831
- const backLabel = (backButton ? backButton.label : void 0) ?? "Back to home";
4832
- const backHref = (backButton ? backButton.href : void 0) ?? "/";
4833
- const [roadmapTasks, setRoadmapTasks] = useState7([]);
4834
- const [deliveryData, setDeliveryData] = useState7(null);
4835
- const [roadmapLoading, setRoadmapLoading] = useState7(false);
4836
- const [deliveryLoading, setDeliveryLoading] = useState7(false);
4837
- useEffect5(() => {
4838
- async function fetchLinkedTasks() {
4839
- if (!release) return;
4840
- try {
4841
- const roadmapTasksData = release.clickup_roadmap_tasks;
4842
- if (roadmapTasksData && roadmapTasksData.length > 0 && RoadmapSection) {
4843
- setRoadmapLoading(true);
4844
- const roadmapIds = roadmapTasksData.map((t) => t.clickup_task_id).join(",");
4845
- const roadmapResponse = await contentFetch(`${roadmapApiEndpoint}?task_ids=${roadmapIds}`);
4846
- const roadmapData = await roadmapResponse.json();
4847
- setRoadmapTasks(roadmapData.items || []);
4848
- setRoadmapLoading(false);
4849
- }
4850
- const deliveryTasksData = release.clickup_delivery_tasks;
4851
- if (deliveryTasksData && deliveryTasksData.length > 0 && DeliverySection) {
4852
- setDeliveryLoading(true);
4853
- const deliveryIds = deliveryTasksData.map((t) => t.clickup_task_id).join(",");
4854
- const deliveryResponse = await contentFetch(`${deliveryApiEndpoint}?task_ids=${deliveryIds}`);
4855
- const deliveryResponseData = await deliveryResponse.json();
4856
- setDeliveryData(deliveryResponseData);
4857
- setDeliveryLoading(false);
4858
- }
4859
- } catch (err) {
4860
- console.error("Error fetching linked tasks:", err);
4861
- setRoadmapLoading(false);
4862
- setDeliveryLoading(false);
4863
- }
4864
- }
4865
- fetchLinkedTasks();
4866
- }, [release, RoadmapSection, DeliverySection, roadmapApiEndpoint, deliveryApiEndpoint]);
4867
- if (!initialData && isLoading) {
4868
- return /* @__PURE__ */ jsx48(PageShell, { children: /* @__PURE__ */ jsx48("div", { className: "pt-[var(--spacing-system-l)]", children: /* @__PURE__ */ jsx48(DetailPageSkeleton, { bare: true, metadataColumns: 4, showImageGallery: true }) }) });
4869
- }
4870
- if (error || !release) {
4871
- return /* @__PURE__ */ jsx48(PageShell, { children: /* @__PURE__ */ jsxs39("div", { className: "text-center py-16", children: [
4872
- /* @__PURE__ */ jsx48("h1", { className: "text-4xl font-bold text-ods-text-primary mb-4", children: "Release Not Found" }),
4873
- /* @__PURE__ */ jsx48("p", { className: "text-xl text-ods-text-secondary", children: "The release you're looking for doesn't exist." })
4874
- ] }) });
4875
- }
4876
- const hasBreakingChanges = Array.isArray(release.breaking_changes) && release.breaking_changes.length > 0;
4877
- const releaseTitle = release.title;
4878
- const releaseVersion = release.version;
4879
- const releaseSummary = release.summary;
4880
- const releaseContent = release.content;
4881
- const releaseDate = release.release_date;
4882
- const releaseType = release.release_type;
4883
- const releaseStatus = release.release_status;
4884
- const releaseMedia = release.release_media;
4885
- const author = release.author;
4886
- const githubReleases = release.github_releases;
4887
- const knowledgeBaseLinks = release.knowledge_base_links;
4888
- const migrationGuideUrl = release.migration_guide_url;
4889
- const documentationUrl = release.documentation_url;
4890
- const youtubeUrl = release.youtube_url;
4891
- const mainVideoUrl = release.main_video_url;
4892
- const videoBites = release.video_bites;
4893
- const highlightVideoUrl = release.highlight_video_url;
4894
- const highlightVideoThumbnail = release.highlight_video_thumbnail;
4895
- const breakingChanges = release.breaking_changes;
4896
- const featuresAdded = release.features_added;
4897
- const bugFixed = release.bugs_fixed;
4898
- const improvements = release.improvements;
4899
- return /* @__PURE__ */ jsx48(PageShell, { children: /* @__PURE__ */ jsx48(
4900
- PageLayout,
4901
- {
4902
- backButton: showBackButton ? { label: backLabel, onClick: () => router.push(backHref) } : void 0,
4903
- children: /* @__PURE__ */ jsxs39("div", { className: "space-y-6 md:space-y-8", children: [
4904
- /* @__PURE__ */ jsx48("div", { className: "flex flex-col md:flex-row md:items-end gap-4 w-full", children: /* @__PURE__ */ jsxs39("div", { className: "flex-1 flex flex-col gap-2", children: [
4905
- /* @__PURE__ */ jsx48("h1", { className: "text-h1 tracking-[-1.12px] text-ods-text-primary", children: releaseTitle }),
4906
- /* @__PURE__ */ jsxs39("p", { className: "text-h4 text-ods-text-secondary", children: [
4907
- "Version: ",
4908
- releaseVersion
4909
- ] })
4910
- ] }) }),
4911
- /* @__PURE__ */ jsx48(EntityTagBadges, { tags: release.product_release_tags }),
4912
- /* @__PURE__ */ jsxs39("div", { className: "grid grid-cols-1 md:grid-cols-4 border border-ods-border rounded-md overflow-hidden w-full", children: [
4913
- /* @__PURE__ */ jsx48("div", { className: "bg-ods-card border-b md:border-b-0 md:border-r border-ods-border p-4 flex flex-col gap-3", children: /* @__PURE__ */ jsxs39("div", { className: "flex flex-col gap-0", children: [
4914
- /* @__PURE__ */ jsx48("p", { className: "text-h4 text-ods-text-primary", children: releaseType.toLocaleUpperCase() }),
4915
- /* @__PURE__ */ jsx48("p", { className: "font-['DM_Sans'] font-medium text-[14px] leading-[20px] text-ods-text-secondary", children: "Release Type" })
4916
- ] }) }),
4917
- /* @__PURE__ */ jsx48("div", { className: "bg-ods-card border-b md:border-b-0 md:border-r border-ods-border p-4 flex flex-col gap-3", children: /* @__PURE__ */ jsxs39("div", { className: "flex flex-col gap-0", children: [
4918
- /* @__PURE__ */ jsx48("p", { className: "text-h4 text-ods-text-primary", children: releaseStatus.toLocaleUpperCase() }),
4919
- /* @__PURE__ */ jsx48("p", { className: "font-['DM_Sans'] font-medium text-[14px] leading-[20px] text-ods-text-secondary", children: "Release Status" })
4920
- ] }) }),
4921
- /* @__PURE__ */ jsx48("div", { className: "bg-ods-card border-b md:border-b-0 md:border-r border-ods-border p-4 flex flex-col gap-3", children: /* @__PURE__ */ jsxs39("div", { className: "flex flex-col gap-0", children: [
4922
- /* @__PURE__ */ jsx48("p", { className: "text-h4 text-ods-text-primary", children: formatReleaseDate(releaseDate) }),
4923
- /* @__PURE__ */ jsx48("p", { className: "font-['DM_Sans'] font-medium text-[14px] leading-[20px] text-ods-text-secondary", children: "Release Date" })
4924
- ] }) }),
4925
- /* @__PURE__ */ jsx48(
4926
- EntityMetadataAuthorCell,
4927
- {
4928
- author: author ?? { full_name: null, avatar_url: null },
4929
- authorHref: author?.full_name ? authorHref : void 0
4930
- }
4931
- )
4932
- ] }),
4933
- /* @__PURE__ */ jsx48(MediaGalleryStrip, { items: releaseMedia ?? [], maxDisplay: 5 }),
4934
- releaseSummary && /* @__PURE__ */ jsx48("div", { className: "text-h4 text-ods-text-primary", children: /* @__PURE__ */ jsx48("p", { children: releaseSummary }) }),
4935
- VideoDisplaySection ? /* @__PURE__ */ jsx48(
4936
- VideoDisplaySection,
4937
- {
4938
- mainVideoUrl,
4939
- youtubeUrl,
4940
- highlightVideoUrl,
4941
- highlightVideoThumbnail,
4942
- title: releaseTitle,
4943
- videoBites,
4944
- bitesTitle: "Video Clips",
4945
- filterPublishedBites: true,
4946
- srtContent: release?.srt_content,
4947
- captionsUrl: release?.captionsUrl
4948
- }
4949
- ) : /* @__PURE__ */ jsxs39(Fragment8, { children: [
4950
- youtubeUrl && /* @__PURE__ */ jsx48(
4951
- Video,
4952
- {
4953
- kind: "youtube",
4954
- url: youtubeUrl,
4955
- title: `${releaseTitle} - Video`,
4956
- layout: "native"
4957
- }
4958
- ),
4959
- !youtubeUrl && mainVideoUrl && /* @__PURE__ */ jsx48(
4960
- Video,
4961
- {
4962
- url: mainVideoUrl,
4963
- srtContent: release?.srt_content,
4964
- captionsUrl: release?.captionsUrl,
4965
- layout: "centered"
4966
- }
4967
- ),
4968
- highlightVideoUrl && /* @__PURE__ */ jsx48(
4969
- Video,
4970
- {
4971
- url: highlightVideoUrl,
4972
- poster: highlightVideoThumbnail,
4973
- layout: "centered"
4974
- }
4975
- )
4976
- ] }),
4977
- releaseContent && /* @__PURE__ */ jsx48("div", { className: "text-h4 text-ods-text-primary", children: /* @__PURE__ */ jsx48(MarkdownRenderer, { content: releaseContent }) }),
4978
- hasBreakingChanges && /* @__PURE__ */ jsx48(Card, { className: "border-red-500 bg-red-500/10", children: /* @__PURE__ */ jsx48(CardContent, { className: "p-6", children: /* @__PURE__ */ jsxs39("div", { className: "flex items-center gap-3", children: [
4979
- /* @__PURE__ */ jsx48(AlertTriangle, { className: "h-6 w-6 text-red-500" }),
4980
- /* @__PURE__ */ jsxs39("div", { children: [
4981
- /* @__PURE__ */ jsx48("h3", { className: "font-bold text-red-500 text-lg", children: "Breaking Changes" }),
4982
- /* @__PURE__ */ jsx48("p", { className: "text-ods-text-secondary", children: "This release contains breaking changes. Review carefully before upgrading." })
4983
- ] })
4984
- ] }) }) }),
4985
- /* @__PURE__ */ jsx48(
4986
- ReleaseChangelogSection,
4987
- {
4988
- title: "Breaking Changes",
4989
- entries: breakingChanges || [],
4990
- isBreaking: true,
4991
- hideTitle: true,
4992
- icon: /* @__PURE__ */ jsx48(AlertTriangle, { className: "h-6 w-6" }),
4993
- SimpleMarkdownRenderer: MarkdownRenderer
4994
- }
4995
- ),
4996
- /* @__PURE__ */ jsx48(
4997
- ReleaseChangelogSection,
4998
- {
4999
- title: "Features Added",
5000
- entries: featuresAdded || [],
5001
- icon: /* @__PURE__ */ jsx48(Sparkles2, { className: "h-6 w-6" }),
5002
- previewFirst: true,
5003
- SimpleMarkdownRenderer: MarkdownRenderer
5004
- }
5005
- ),
5006
- /* @__PURE__ */ jsx48(
5007
- ReleaseChangelogSection,
5008
- {
5009
- title: "Bugs Fixed",
5010
- entries: bugFixed || [],
5011
- icon: /* @__PURE__ */ jsx48(Wrench, { className: "h-6 w-6" }),
5012
- previewFirst: true,
5013
- SimpleMarkdownRenderer: MarkdownRenderer
5014
- }
5015
- ),
5016
- /* @__PURE__ */ jsx48(
5017
- ReleaseChangelogSection,
5018
- {
5019
- title: "Improvements",
5020
- entries: improvements || [],
5021
- icon: /* @__PURE__ */ jsx48(TrendingUp, { className: "h-6 w-6" }),
5022
- previewFirst: true,
5023
- SimpleMarkdownRenderer: MarkdownRenderer
5024
- }
5025
- ),
5026
- !VideoDisplaySection && VideoSection && videoBites && videoBites.length > 0 && /* @__PURE__ */ jsx48(
5027
- VideoSection,
5028
- {
5029
- bites: videoBites,
5030
- title: "Video Clips",
5031
- filterPublished: true
5032
- }
5033
- ),
5034
- RoadmapSection && (roadmapLoading || roadmapTasks.length > 0) && /* @__PURE__ */ jsxs39("div", { className: "space-y-4 w-full", children: [
5035
- /* @__PURE__ */ jsx48("p", { className: "text-h5 tracking-[-0.28px] text-ods-text-secondary", children: "Related Roadmap Items" }),
5036
- /* @__PURE__ */ jsx48(
5037
- RoadmapSection,
5038
- {
5039
- items: roadmapTasks,
5040
- isLoading: roadmapLoading,
5041
- onItemUpdate: (updatedItem) => {
5042
- setRoadmapTasks(
5043
- (prevTasks) => prevTasks.map(
5044
- (task) => task.id === updatedItem.id ? updatedItem : task
5045
- )
5046
- );
5047
- }
5048
- }
5049
- )
5050
- ] }),
5051
- DeliverySection && (deliveryLoading || deliveryData && (deliveryData.completed.length > 0 || deliveryData.inProgress.length > 0)) && /* @__PURE__ */ jsxs39("div", { className: "w-full space-y-4", children: [
5052
- /* @__PURE__ */ jsx48("p", { className: "text-h5 tracking-[-0.28px] text-ods-text-secondary", children: "Related Enhancements and Bug-fixes" }),
5053
- /* @__PURE__ */ jsx48(
5054
- DeliverySection,
5055
- {
5056
- data: deliveryData,
5057
- isLoading: deliveryLoading
5058
- }
5059
- )
5060
- ] }),
5061
- (githubReleases?.length || knowledgeBaseLinks?.length || migrationGuideUrl || documentationUrl) && /* @__PURE__ */ jsxs39("div", { className: "space-y-1 w-full", children: [
5062
- /* @__PURE__ */ jsx48("p", { className: "text-h5 tracking-[-0.28px] text-ods-text-secondary", children: "Related Links" }),
5063
- /* @__PURE__ */ jsx48(Card, { className: "bg-ods-card border-ods-border p-6", children: /* @__PURE__ */ jsxs39("div", { className: "space-y-4", children: [
5064
- githubReleases && githubReleases.length > 0 && /* @__PURE__ */ jsx48(Fragment8, { children: githubReleases.map((ghRelease) => /* @__PURE__ */ jsxs39("div", { className: "flex items-start gap-1", children: [
5065
- /* @__PURE__ */ jsx48(GitHubIcon, { className: "shrink-0", width: 24, height: 24, color: "var(--color-text-secondary)" }),
5066
- /* @__PURE__ */ jsx48("span", { className: "text-h4 text-ods-text-primary", children: "Github Release" }),
5067
- /* @__PURE__ */ jsx48(
5068
- "a",
5069
- {
5070
- href: ghRelease.github_release_url,
5071
- target: "_blank",
5072
- rel: "noopener noreferrer",
5073
- className: "text-h4 text-[#ffc008] hover:underline",
5074
- children: ghRelease.github_release_url.split("/").pop()
5075
- }
5076
- ),
5077
- /* @__PURE__ */ jsx48(ExternalLink, { className: "h-6 w-6 text-[#ffc008] shrink-0" })
5078
- ] }, ghRelease.id)) }),
5079
- knowledgeBaseLinks && knowledgeBaseLinks.length > 0 && /* @__PURE__ */ jsx48(Fragment8, { children: knowledgeBaseLinks.map((linkObj) => {
5080
- const path = typeof linkObj === "string" ? linkObj : linkObj.kb_article_path;
5081
- const linkId = typeof linkObj === "string" ? path : linkObj.id || path;
5082
- return /* @__PURE__ */ jsxs39("div", { className: "flex items-start gap-1", children: [
5083
- /* @__PURE__ */ jsx48(BookMarked, { className: "h-6 w-6 text-ods-text-secondary shrink-0" }),
5084
- /* @__PURE__ */ jsx48("span", { className: "text-h4 text-ods-text-primary", children: "Knowledge Base" }),
5085
- /* @__PURE__ */ jsx48(
5086
- next_link_default,
5087
- {
5088
- href: path.startsWith("http") ? path : `/knowledge-base${path.startsWith("/") ? "" : "/"}${path}`,
5089
- className: "text-h4 text-[#ffc008] hover:underline",
5090
- children: path.replace(/^\//, "").split("/").pop()?.replace(/-/g, " ") || "View Article"
5091
- }
5092
- ),
5093
- /* @__PURE__ */ jsx48(ExternalLink, { className: "h-6 w-6 text-[#ffc008] shrink-0" })
5094
- ] }, linkId);
5095
- }) }),
5096
- migrationGuideUrl && /* @__PURE__ */ jsxs39("div", { className: "flex items-start gap-1", children: [
5097
- /* @__PURE__ */ jsx48(BookMarked, { className: "h-6 w-6 text-ods-text-secondary shrink-0" }),
5098
- /* @__PURE__ */ jsx48(
5099
- "a",
5100
- {
5101
- href: migrationGuideUrl,
5102
- target: "_blank",
5103
- rel: "noopener noreferrer",
5104
- className: "text-h4 text-[#ffc008] hover:underline",
5105
- children: "\u{1F4D6} Migration Guide"
5106
- }
5107
- ),
5108
- /* @__PURE__ */ jsx48(ExternalLink, { className: "h-6 w-6 text-[#ffc008] shrink-0" })
5109
- ] }),
5110
- documentationUrl && /* @__PURE__ */ jsxs39("div", { className: "flex items-start gap-1", children: [
5111
- /* @__PURE__ */ jsx48(BookMarked, { className: "h-6 w-6 text-ods-text-secondary shrink-0" }),
5112
- /* @__PURE__ */ jsx48(
5113
- "a",
5114
- {
5115
- href: documentationUrl,
5116
- target: "_blank",
5117
- rel: "noopener noreferrer",
5118
- className: "text-h4 text-[#ffc008] hover:underline",
5119
- children: "\u{1F4DA} Documentation"
5120
- }
5121
- ),
5122
- /* @__PURE__ */ jsx48(ExternalLink, { className: "h-6 w-6 text-[#ffc008] shrink-0" })
5123
- ] })
5124
- ] }) })
5125
- ] })
5126
- ] })
5127
- }
5128
- ) });
5129
- }
5130
-
5131
- // src/components/shared/product-release/release-detail-skeleton.tsx
5132
- import { jsx as jsx49 } from "react/jsx-runtime";
5133
- function ReleaseDetailSkeleton() {
5134
- return /* @__PURE__ */ jsx49(DetailPageSkeleton, { metadataColumns: 4, showImageGallery: true });
5135
- }
5136
-
5137
- // src/components/shared/roadmap/roadmap-grid.tsx
5138
- import { useEffect as useEffect7, useRef as useRef4, useState as useState9 } from "react";
5139
-
5140
- // src/components/shared/roadmap/use-roadmap-voting.ts
5141
- import { useState as useState8, useEffect as useEffect6, useCallback as useCallback3 } from "react";
5142
- var DEFAULT_VOTE_ENDPOINT = "/api/roadmap/vote";
5143
- var DEFAULT_STORAGE_KEY = "roadmap_votes_v1";
5144
- function useRoadmapVoting(options = {}) {
5145
- const voteApiEndpoint = options.voteApiEndpoint ?? DEFAULT_VOTE_ENDPOINT;
5146
- const storageKey = options.storageKey ?? DEFAULT_STORAGE_KEY;
5147
- const [votes, setVotes] = useState8({});
5148
- const [isLoading, setIsLoading] = useState8(true);
5149
- useEffect6(() => {
5150
- setIsLoading(true);
5151
- setVotes({});
5152
- try {
5153
- const stored = localStorage.getItem(storageKey);
5154
- if (stored) {
5155
- setVotes(JSON.parse(stored));
5156
- }
5157
- } catch (error) {
5158
- console.error("[Voting] Error loading votes from localStorage:", error);
5159
- } finally {
5160
- setIsLoading(false);
5161
- }
5162
- }, [storageKey]);
5163
- useEffect6(() => {
5164
- if (!isLoading) {
5165
- try {
5166
- localStorage.setItem(storageKey, JSON.stringify(votes));
5167
- } catch (error) {
5168
- console.error("[Voting] Error saving votes to localStorage:", error);
5169
- }
5170
- }
5171
- }, [votes, isLoading, storageKey]);
5172
- const getVote = useCallback3(
5173
- (taskId) => {
5174
- return votes[taskId] || null;
5175
- },
5176
- [votes]
5177
- );
5178
- const toggleVote = useCallback3(
5179
- async (taskId, voteType) => {
5180
- const currentVote = votes[taskId];
5181
- let newVote = null;
5182
- let action = "add";
5183
- if (currentVote === voteType) {
5184
- newVote = null;
5185
- action = "remove";
5186
- } else {
5187
- if (currentVote) {
5188
- await contentFetch(voteApiEndpoint, {
5189
- method: "POST",
5190
- headers: { "Content-Type": "application/json" },
5191
- body: JSON.stringify({
5192
- taskId,
5193
- voteType: currentVote,
5194
- action: "remove"
5195
- })
5196
- }).catch((err) => console.error("[Voting] Error removing opposite vote:", err));
5197
- }
5198
- newVote = voteType;
5199
- action = "add";
5200
- }
5201
- setVotes((prev) => ({
5202
- ...prev,
5203
- [taskId]: newVote
5204
- }));
5205
- try {
5206
- const response = await contentFetch(voteApiEndpoint, {
5207
- method: "POST",
5208
- headers: { "Content-Type": "application/json" },
5209
- body: JSON.stringify({ taskId, voteType, action })
5210
- });
5211
- if (!response.ok) {
5212
- throw new Error("Vote API request failed");
5213
- }
5214
- return { success: true, newVote, action };
5215
- } catch (error) {
5216
- console.error("[Voting] API error:", error);
5217
- setVotes((prev) => ({
5218
- ...prev,
5219
- [taskId]: currentVote
5220
- }));
5221
- return { success: false, newVote: currentVote, action };
5222
- }
5223
- },
5224
- [votes, voteApiEndpoint]
5225
- );
5226
- const clearVotes = useCallback3(() => {
5227
- setVotes({});
5228
- localStorage.removeItem(storageKey);
5229
- }, [storageKey]);
5230
- return {
5231
- votes,
5232
- isLoading,
5233
- getVote,
5234
- toggleVote,
5235
- clearVotes
5236
- };
5237
- }
5238
-
5239
- // src/components/shared/roadmap/roadmap-grid.tsx
5240
- init_cn();
5241
- import { jsx as jsx50, jsxs as jsxs40 } from "react/jsx-runtime";
5242
- var DEFAULT_BUILD_REFRESH_URL = (taskId) => `/api/roadmap/${taskId}`;
5243
- var BACKLOG = "Backlog";
5244
- function getStatusPriority(status) {
5245
- const s = (status || "").toLowerCase();
5246
- if (s.includes("complete") || s.includes("done")) return 1;
5247
- if (s.includes("working") || s.includes("progress")) return 2;
5248
- if (s.includes("review")) return 3;
5249
- if (s.includes("to do") || s.includes("plan")) return 4;
5250
- return 5;
5251
- }
5252
- function parseQuarterString(q) {
5253
- const match = q.match(/Q(\d+)\s+(\d+)/);
5254
- if (!match) return null;
5255
- return { quarter: parseInt(match[1], 10), year: parseInt(match[2], 10) };
5256
- }
5257
- function compareQuarters(a, b) {
5258
- if (a.year !== b.year) return a.year - b.year;
5259
- return a.quarter - b.quarter;
5260
- }
5261
- function getCurrentQuarter() {
5262
- const now = /* @__PURE__ */ new Date();
5263
- return { quarter: Math.floor(now.getMonth() / 3) + 1, year: now.getFullYear() };
5264
- }
5265
- function computeDefaultExpandedQuarters(quarters, quartersToKeepClosed) {
5266
- const currentQ = getCurrentQuarter();
5267
- const out = [];
5268
- for (const q of quarters) {
5269
- if (q === BACKLOG) continue;
5270
- const parsed = parseQuarterString(q);
5271
- if (!parsed) continue;
5272
- const diff = compareQuarters(parsed, currentQ);
5273
- if (diff >= 0) {
5274
- out.push(q);
5275
- } else {
5276
- const quartersAgo = currentQ.year * 4 + currentQ.quarter - (parsed.year * 4 + parsed.quarter);
5277
- if (quartersAgo < quartersToKeepClosed) out.push(q);
5278
- }
5279
- }
5280
- if (quarters.includes(BACKLOG)) out.push(BACKLOG);
5281
- return out;
5282
- }
5283
- function RoadmapGridSingle({
5284
- items,
5285
- showLeftMargin,
5286
- getVote,
5287
- onVote,
5288
- votingTasks
5289
- }) {
5290
- return /* @__PURE__ */ jsx50("div", { className: `grid grid-cols-1 md:grid-cols-2 gap-6 ${showLeftMargin ? "md:ml-[120px]" : ""}`, children: items.map((item) => (
5291
- // DOM id + sticky-header scroll offset live ON RoadmapCard's own
5292
- // outer element (no wrapper div). Anchor mirrors
5293
- // `buildDevSectionUrl('roadmap', <id>)` → `#roadmap-<external_id>`;
5294
- // `useScrollToHash` in `roadmap-view.tsx` finds the card by id
5295
- // and scrolls.
5296
- /* @__PURE__ */ jsx50(
5297
- RoadmapCard,
5298
- {
5299
- item,
5300
- id: devSectionAnchorId("roadmap", item.id),
5301
- userVote: getVote(item.id),
5302
- onVote: (voteType) => onVote(item.id, voteType),
5303
- isVoting: votingTasks.has(item.id)
5304
- },
5305
- item.id
5306
- )
5307
- )) });
5308
- }
5309
- function RoadmapGrid({
5310
- items,
5311
- onItemUpdate,
5312
- showLeftMargin = true,
5313
- buildRefreshUrl = DEFAULT_BUILD_REFRESH_URL,
5314
- votingOptions,
5315
- groupByQuarter = false,
5316
- hasActiveFilters = false,
5317
- quartersToKeepClosed = 2
5318
- }) {
5319
- const { getVote, toggleVote } = useRoadmapVoting(votingOptions);
5320
- const [votingTasks, setVotingTasks] = useState9(/* @__PURE__ */ new Set());
5321
- const handleVote = async (taskId, voteType) => {
5322
- if (votingTasks.has(taskId)) return;
5323
- setVotingTasks((prev) => new Set(prev).add(taskId));
5324
- try {
5325
- const result = await toggleVote(taskId, voteType);
5326
- if (result.success) {
5327
- const response = await contentFetch(buildRefreshUrl(taskId));
5328
- if (response.ok) {
5329
- const data = await response.json();
5330
- if (data.item && onItemUpdate) onItemUpdate(data.item);
5331
- }
5332
- }
5333
- } finally {
5334
- setVotingTasks((prev) => {
5335
- const next = new Set(prev);
5336
- next.delete(taskId);
5337
- return next;
5338
- });
5339
- }
5340
- };
5341
- const itemsByQuarter = items.reduce((acc, item) => {
5342
- const q = item.quarter || BACKLOG;
5343
- (acc[q] || (acc[q] = [])).push(item);
5344
- return acc;
5345
- }, {});
5346
- for (const q of Object.keys(itemsByQuarter)) {
5347
- itemsByQuarter[q].sort((a, b) => getStatusPriority(a.status) - getStatusPriority(b.status));
5348
- }
5349
- const sortedQuarters = Object.keys(itemsByQuarter).sort((a, b) => {
5350
- if (a === BACKLOG) return 1;
5351
- if (b === BACKLOG) return -1;
5352
- const aD = parseQuarterString(a) ?? { quarter: 0, year: 0 };
5353
- const bD = parseQuarterString(b) ?? { quarter: 0, year: 0 };
5354
- return compareQuarters(aD, bD);
5355
- });
5356
- const sortedQuartersKey = sortedQuarters.join(",");
5357
- const [expandedQuarters, setExpandedQuarters] = useState9([]);
5358
- const [isInitialized, setIsInitialized] = useState9(false);
5359
- const hasSetInitialState = useRef4(false);
5360
- const prevItemsLength = useRef4(0);
5361
- useEffect7(() => {
5362
- const itemsJustLoaded = prevItemsLength.current === 0 && items.length > 0;
5363
- prevItemsLength.current = items.length;
5364
- if (sortedQuarters.length > 0 && (!hasSetInitialState.current || itemsJustLoaded)) {
5365
- hasSetInitialState.current = true;
5366
- setExpandedQuarters(
5367
- hasActiveFilters ? [...sortedQuarters] : computeDefaultExpandedQuarters(sortedQuarters, quartersToKeepClosed)
5368
- );
5369
- setIsInitialized(true);
5370
- }
5371
- }, [sortedQuarters.length, items.length]);
5372
- useEffect7(() => {
5373
- if (!isInitialized || sortedQuarters.length === 0) return;
5374
- setExpandedQuarters(
5375
- hasActiveFilters ? [...sortedQuarters] : computeDefaultExpandedQuarters(sortedQuarters, quartersToKeepClosed)
5376
- );
5377
- }, [hasActiveFilters, sortedQuartersKey, isInitialized, quartersToKeepClosed]);
5378
- if (items.length === 0) {
5379
- return /* @__PURE__ */ jsx50(
5380
- EmptyState,
5381
- {
5382
- type: "generic",
5383
- title: "No roadmap items",
5384
- description: "Check back soon for upcoming features and improvements!"
5385
- }
5386
- );
5387
- }
5388
- if (!groupByQuarter) {
5389
- return /* @__PURE__ */ jsx50(
5390
- RoadmapGridSingle,
5391
- {
5392
- items,
5393
- showLeftMargin,
5394
- getVote,
5395
- onVote: handleVote,
5396
- votingTasks
5397
- }
5398
- );
5399
- }
5400
- return /* @__PURE__ */ jsx50(
5401
- Accordion,
5402
- {
5403
- type: "multiple",
5404
- value: expandedQuarters,
5405
- onValueChange: setExpandedQuarters,
5406
- className: "flex flex-col gap-10",
5407
- children: sortedQuarters.map((quarter) => {
5408
- const itemCount = itemsByQuarter[quarter]?.length || 0;
5409
- const isExpanded = expandedQuarters.includes(quarter);
5410
- return /* @__PURE__ */ jsxs40(
5411
- AccordionItem,
5412
- {
5413
- value: quarter,
5414
- id: `quarter-${quarter.replace(/\s+/g, "-").toLowerCase()}`,
5415
- className: "border-0",
5416
- children: [
5417
- /* @__PURE__ */ jsx50(AccordionTrigger, { className: "w-full p-0 hover:no-underline [&>svg]:h-5 [&>svg]:w-5 [&>svg]:text-ods-text-secondary [&>svg]:ml-auto [&>svg]:shrink-0", children: /* @__PURE__ */ jsxs40("div", { className: "flex items-center gap-3", children: [
5418
- /* @__PURE__ */ jsxs40(
5419
- "h3",
5420
- {
5421
- className: cn(
5422
- "font-['Azeret_Mono'] font-semibold text-[24px] md:text-[28px] lg:text-[32px] leading-[32px] md:leading-[36px] lg:leading-[40px] text-ods-text-primary tracking-[-0.48px] md:tracking-[-0.56px] lg:tracking-[-0.64px] transition-opacity",
5423
- isExpanded ? "opacity-100" : "opacity-60"
5424
- ),
5425
- children: [
5426
- quarter,
5427
- /* @__PURE__ */ jsx50("span", { className: "text-ods-accent", children: ":" })
5428
- ]
5429
- }
5430
- ),
5431
- /* @__PURE__ */ jsxs40(
5432
- "span",
5433
- {
5434
- className: cn(
5435
- "text-sm font-medium transition-opacity",
5436
- isExpanded ? "text-ods-text-secondary opacity-100" : "text-ods-text-tertiary opacity-60"
5437
- ),
5438
- children: [
5439
- itemCount,
5440
- " ",
5441
- itemCount === 1 ? "item" : "items",
5442
- isInitialized && !isExpanded && /* @__PURE__ */ jsx50("span", { className: "ml-2 text-ods-accent", children: "Click to expand" })
5443
- ]
5444
- }
5445
- )
5446
- ] }) }),
5447
- /* @__PURE__ */ jsx50(AccordionContent, { className: "pt-4 pb-0 overflow-hidden data-[state=closed]:animate-none data-[state=open]:animate-none", children: /* @__PURE__ */ jsx50(
5448
- RoadmapGridSingle,
5449
- {
5450
- items: itemsByQuarter[quarter],
5451
- showLeftMargin,
5452
- getVote,
5453
- onVote: handleVote,
5454
- votingTasks
5455
- }
5456
- ) })
5457
- ]
5458
- },
5459
- quarter
5460
- );
5461
- })
5462
- }
5463
- );
5464
- }
5465
-
5466
- // src/components/shared/roadmap/roadmap-grid-skeleton.tsx
5467
- import { jsx as jsx51, jsxs as jsxs41 } from "react/jsx-runtime";
5468
- function RoadmapCardSkeleton2() {
5469
- return /* @__PURE__ */ jsxs41("div", { className: "bg-ods-card border border-ods-border rounded-[6px] p-[24px] flex flex-col gap-[16px] min-h-[340px] relative", children: [
5470
- /* @__PURE__ */ jsx51("div", { className: "absolute top-[24px] right-[24px]", children: /* @__PURE__ */ jsx51("div", { className: "h-[20px] w-[80px] bg-ods-border rounded animate-pulse" }) }),
5471
- /* @__PURE__ */ jsxs41("div", { className: "flex items-center gap-[16px] pr-[120px]", children: [
5472
- /* @__PURE__ */ jsx51("div", { className: "w-[80px] h-[80px] bg-ods-border rounded-lg flex-shrink-0 animate-pulse" }),
5473
- /* @__PURE__ */ jsxs41("div", { className: "flex-1 min-w-0 flex flex-col gap-1", children: [
5474
- /* @__PURE__ */ jsx51("div", { className: "min-h-[48px] flex items-center", children: /* @__PURE__ */ jsx51("div", { className: "h-[24px] w-full bg-ods-border rounded animate-pulse" }) }),
5475
- /* @__PURE__ */ jsx51("div", { className: "min-h-[20px] flex items-center", children: /* @__PURE__ */ jsx51("div", { className: "h-[14px] w-1/2 bg-ods-border rounded animate-pulse" }) })
5476
- ] })
5477
- ] }),
5478
- /* @__PURE__ */ jsx51("div", { className: "min-h-[72px] flex items-center", children: /* @__PURE__ */ jsxs41("div", { className: "w-full space-y-2", children: [
5479
- /* @__PURE__ */ jsx51("div", { className: "h-[24px] bg-ods-border rounded animate-pulse" }),
5480
- /* @__PURE__ */ jsx51("div", { className: "h-[24px] bg-ods-border rounded animate-pulse" }),
5481
- /* @__PURE__ */ jsx51("div", { className: "h-[24px] w-4/5 bg-ods-border rounded animate-pulse" })
5482
- ] }) }),
5483
- /* @__PURE__ */ jsx51("div", { className: "flex-1" }),
5484
- /* @__PURE__ */ jsxs41("div", { className: "flex items-center justify-between", children: [
5485
- /* @__PURE__ */ jsx51("div", { className: "h-[48px] w-[120px] bg-ods-border rounded animate-pulse" }),
5486
- /* @__PURE__ */ jsx51("div", { className: "h-[32px] w-[100px] bg-ods-border rounded animate-pulse" })
5487
- ] })
5488
- ] });
5489
- }
5490
- function RoadmapGridSkeleton({ count = 4, showLeftMargin = true }) {
5491
- return /* @__PURE__ */ jsx51("div", { className: `grid grid-cols-1 md:grid-cols-2 gap-6 ${showLeftMargin ? "md:ml-[120px]" : ""}`, children: Array.from({ length: count }).map((_, i) => /* @__PURE__ */ jsx51(RoadmapCardSkeleton2, {}, i)) });
5492
- }
5493
-
5494
- // src/components/shared/roadmap/roadmap-view.tsx
5495
- import { useMemo as useMemo2 } from "react";
5496
- import { jsx as jsx52 } from "react/jsx-runtime";
5497
- var DEFAULT_ENDPOINT2 = "/api/roadmap";
5498
- var DEFAULT_SEARCH_PARAM_KEY2 = DEV_SECTION_PARAM_KEYS.search;
5499
- var DEFAULT_STATUS_PARAM_KEY2 = DEV_SECTION_PARAM_KEYS.status;
5500
- function RoadmapView({
5501
- endpoint = DEFAULT_ENDPOINT2,
5502
- initialItems,
5503
- showLeftMargin,
5504
- buildRefreshUrl,
5505
- votingOptions,
5506
- searchParamKey = DEFAULT_SEARCH_PARAM_KEY2,
5507
- statusParamKey = DEFAULT_STATUS_PARAM_KEY2
5508
- } = {}) {
5509
- const searchParams = useSearchParams();
5510
- const search = searchParams.get(searchParamKey) || "";
5511
- const status = searchParams.get(statusParamKey) || "all";
5512
- const listParams = new URLSearchParams();
5513
- if (search) listParams.set(searchParamKey, search);
5514
- if (status && status !== "all") listParams.set(statusParamKey, status);
5515
- const qs = listParams.toString();
5516
- const url = qs ? `${endpoint}?${qs}` : endpoint;
5517
- const initialData = useMemo2(() => initialItems ? { items: initialItems } : void 0, [initialItems]);
5518
- const { data, setData, isLoading, error, reload } = useSelfFetch(
5519
- url,
5520
- { initialData }
5521
- );
5522
- const items = data?.items ?? [];
5523
- useScrollToHash(data, { headerOffset: STICKY_HEADER_OFFSET_PX });
5524
- if (error) {
5525
- return /* @__PURE__ */ jsx52(LoadError, { message: "Failed to load roadmap.", onRetry: reload });
5526
- }
5527
- if (isLoading && !data) {
5528
- return /* @__PURE__ */ jsx52(RoadmapGridSkeleton, { showLeftMargin });
5529
- }
5530
- return /* @__PURE__ */ jsx52(
5531
- RoadmapGrid,
5532
- {
5533
- items,
5534
- showLeftMargin,
5535
- buildRefreshUrl,
5536
- votingOptions,
5537
- groupByQuarter: true,
5538
- hasActiveFilters: search !== "" || status !== "all",
5539
- onItemUpdate: (updated) => setData(
5540
- (prev) => prev ? { ...prev, items: (prev.items ?? []).map((it) => it.id === updated.id ? updated : it) } : prev
5541
- )
5542
- }
5543
- );
5544
- }
5545
-
5546
- // src/components/shared/delivery/delivery-lists.tsx
5547
- import { useEffect as useEffect8, useState as useState10 } from "react";
5548
-
5549
- // src/components/shared/delivery/delivery-table.tsx
5550
- import { jsx as jsx53, jsxs as jsxs42 } from "react/jsx-runtime";
5551
- function SkeletonRow() {
5552
- return /* @__PURE__ */ jsx53("div", { className: "border-b border-ods-border last:border-b-0 p-[12px] md:p-[16px]", children: /* @__PURE__ */ jsxs42("div", { className: "flex flex-col md:flex-row items-start justify-between gap-[12px] md:gap-[16px] w-full", children: [
5553
- /* @__PURE__ */ jsxs42("div", { className: "flex-1 min-w-0 w-full md:w-auto flex flex-col gap-[12px] md:gap-[16px]", children: [
5554
- /* @__PURE__ */ jsx53("div", { className: "min-h-[24px] flex items-center", children: /* @__PURE__ */ jsx53("div", { className: "h-[20px] bg-ods-border rounded animate-pulse w-full" }) }),
5555
- /* @__PURE__ */ jsx53("div", { className: "min-h-[20px] flex items-center", children: /* @__PURE__ */ jsx53("div", { className: "h-[20px] bg-ods-border rounded animate-pulse w-1/2" }) }),
5556
- /* @__PURE__ */ jsx53("div", { className: "min-h-[72px] flex items-center", children: /* @__PURE__ */ jsxs42("div", { className: "flex-1 space-y-1", children: [
5557
- /* @__PURE__ */ jsx53("div", { className: "h-[20px] bg-ods-border rounded animate-pulse w-full" }),
5558
- /* @__PURE__ */ jsx53("div", { className: "h-[20px] bg-ods-border rounded animate-pulse w-full" }),
5559
- /* @__PURE__ */ jsx53("div", { className: "h-[20px] bg-ods-border rounded animate-pulse w-2/3" })
5560
- ] }) })
5561
- ] }),
5562
- /* @__PURE__ */ jsxs42("div", { className: "flex-shrink-0 self-start flex flex-col gap-2", children: [
5563
- /* @__PURE__ */ jsx53("div", { className: "h-[32px] w-[100px] bg-ods-border rounded animate-pulse" }),
5564
- /* @__PURE__ */ jsx53("div", { className: "h-[32px] w-[120px] bg-ods-border rounded animate-pulse" })
5565
- ] })
5566
- ] }) });
5567
- }
5568
- function DeliveryTable({ items, isLoading = false }) {
5569
- if (isLoading) {
5570
- return /* @__PURE__ */ jsx53("div", { className: "bg-ods-card border border-ods-border rounded-[6px] overflow-hidden w-full", children: /* @__PURE__ */ jsx53("div", { className: "w-full", children: [1, 2, 3, 4, 5].map((i) => /* @__PURE__ */ jsx53(SkeletonRow, {}, i)) }) });
5571
- }
5572
- if (items.length === 0) {
5573
- return /* @__PURE__ */ jsx53("div", { className: "bg-ods-card border border-ods-border rounded-[6px] p-[40px] text-center w-full", children: /* @__PURE__ */ jsx53("p", { className: "text-ods-text-secondary text-[14px] font-['DM_Sans'] font-medium", children: "No tasks available" }) });
5574
- }
5575
- return /* @__PURE__ */ jsx53("div", { className: "bg-ods-card border border-ods-border rounded-[6px] overflow-hidden w-full", children: /* @__PURE__ */ jsx53("div", { className: "w-full", children: items.map((item) => (
5576
- // DOM id lives on DeliveryRow's own outer element (no wrapper
5577
- // div). Anchor mirrors `buildDevSectionUrl('delivery', <id>)`
5578
- // → `#delivery-<external_id>`; `useScrollToHash` in
5579
- // `delivery-lists.tsx` finds the row by id and scrolls. The
5580
- // outer wrapper here ONLY exists for the row separators.
5581
- /* @__PURE__ */ jsx53(
5582
- "div",
5583
- {
5584
- className: "border-b border-ods-border last:border-b-0",
5585
- children: /* @__PURE__ */ jsx53(DeliveryRow, { item, id: devSectionAnchorId("delivery", item.id) })
5586
- },
5587
- item.id
5588
- )
5589
- )) }) });
5590
- }
5591
-
5592
- // src/components/shared/delivery/delivery-lists.tsx
5593
- import { jsx as jsx54, jsxs as jsxs43 } from "react/jsx-runtime";
5594
- var DEFAULT_COMPLETED_ENDPOINT = "/api/delivery/completed";
5595
- var DEFAULT_IN_PROGRESS_ENDPOINT = "/api/delivery/in-progress";
5596
- var DEFAULT_SEARCH_PARAM_KEY3 = DEV_SECTION_PARAM_KEYS.search;
5597
- var DEFAULT_TASK_TYPE_PARAM_KEY = DEV_SECTION_PARAM_KEYS.deliveryTaskType;
5598
- function DeliveryLists({
5599
- completedApiEndpoint = DEFAULT_COMPLETED_ENDPOINT,
5600
- inProgressApiEndpoint = DEFAULT_IN_PROGRESS_ENDPOINT,
5601
- searchParamKey = DEFAULT_SEARCH_PARAM_KEY3,
5602
- taskTypeParamKey = DEFAULT_TASK_TYPE_PARAM_KEY
5603
- } = {}) {
5604
- const searchParams = useSearchParams();
5605
- const router = useRouter();
5606
- const pathname = usePathname();
5607
- const [data, setData] = useState10(null);
5608
- const [isLoading, setIsLoading] = useState10(true);
5609
- const [error, setError] = useState10(null);
5610
- const searchQuery = searchParams.get(searchParamKey) || "";
5611
- const taskTypeFilter = searchParams.get(taskTypeParamKey) || "all";
5612
- useEffect8(() => {
5613
- async function fetchDeliveryData() {
5614
- try {
5615
- setIsLoading(true);
5616
- setError(null);
5617
- const params = new URLSearchParams();
5618
- if (searchQuery) {
5619
- params.set(searchParamKey, searchQuery);
5620
- }
5621
- if (taskTypeFilter && taskTypeFilter !== "all") {
5622
- params.set(taskTypeParamKey, taskTypeFilter);
5623
- }
5624
- const queryString = params.toString();
5625
- const queryParam = queryString ? `?${queryString}` : "";
5626
- const [completedResponse, inProgressResponse] = await Promise.all([
5627
- contentFetch(`${completedApiEndpoint}${queryParam}`),
5628
- contentFetch(`${inProgressApiEndpoint}${queryParam}`)
5629
- ]);
5630
- if (!completedResponse.ok || !inProgressResponse.ok) {
5631
- throw new Error("Failed to fetch delivery items");
5632
- }
5633
- const [completedResult, inProgressResult] = await Promise.all([
5634
- completedResponse.json(),
5635
- inProgressResponse.json()
5636
- ]);
5637
- setData({
5638
- completed: completedResult.items || [],
5639
- inProgress: inProgressResult.items || []
5640
- });
5641
- } catch (err) {
5642
- console.error("Error fetching delivery items:", err);
5643
- setError("Failed to load delivery items. Please try again later.");
5644
- } finally {
5645
- setIsLoading(false);
5646
- }
5647
- }
5648
- fetchDeliveryData();
5649
- }, [searchQuery, taskTypeFilter, completedApiEndpoint, inProgressApiEndpoint, searchParamKey, taskTypeParamKey]);
5650
- const filteredCompleted = data?.completed || [];
5651
- const filteredInProgress = data?.inProgress || [];
5652
- useScrollToHash(data, { headerOffset: STICKY_HEADER_OFFSET_PX });
5653
- const showCompleted = true;
5654
- const showInProgress = true;
5655
- const hasActiveFilters = searchQuery !== "" || taskTypeFilter !== "all";
5656
- const hasResults = showCompleted && filteredCompleted.length > 0 || showInProgress && filteredInProgress.length > 0;
5657
- if (error) {
5658
- return /* @__PURE__ */ jsx54("div", { className: "w-full", children: /* @__PURE__ */ jsx54(LoadError, { message: error, onRetry: () => window.location.reload() }) });
5659
- }
5660
- return /* @__PURE__ */ jsxs43("div", { className: "w-full flex flex-col gap-[40px]", children: [
5661
- !isLoading && !hasResults && (hasActiveFilters ? /* @__PURE__ */ jsx54(
5662
- EmptyState,
5663
- {
5664
- type: "search",
5665
- title: "No tasks found",
5666
- description: "No tasks match your current filters. Try adjusting your search or status filter.",
5667
- showCTA: true,
5668
- ctaText: "Reset Filters",
5669
- onCtaClick: () => {
5670
- const params = new URLSearchParams(searchParams.toString());
5671
- params.delete(searchParamKey);
5672
- params.delete(taskTypeParamKey);
5673
- router.replace(`${pathname}?${params.toString()}`, { scroll: false });
5674
- }
5675
- }
5676
- ) : /* @__PURE__ */ jsx54(
5677
- EmptyState,
5678
- {
5679
- type: "generic",
5680
- title: "No tasks available",
5681
- description: "Check back soon for upcoming tasks!",
5682
- showCTA: false
5683
- }
5684
- )),
5685
- showCompleted && (hasResults || isLoading) && /* @__PURE__ */ jsxs43("div", { className: "w-full", children: [
5686
- /* @__PURE__ */ jsxs43("h3", { className: "text-h2 text-ods-text-primary tracking-[-0.48px] md:tracking-[-0.56px] lg:tracking-[-0.64px] mb-4", children: [
5687
- "Recently Completed",
5688
- /* @__PURE__ */ jsx54("span", { className: "text-ods-accent", children: ":" })
5689
- ] }),
5690
- /* @__PURE__ */ jsx54(
5691
- DeliveryTable,
5692
- {
5693
- items: filteredCompleted,
5694
- isLoading
5695
- }
5696
- )
5697
- ] }),
5698
- showInProgress && (hasResults || isLoading) && /* @__PURE__ */ jsxs43("div", { className: "w-full", children: [
5699
- /* @__PURE__ */ jsxs43("h3", { className: "text-h2 text-ods-text-primary tracking-[-0.48px] md:tracking-[-0.56px] lg:tracking-[-0.64px] mb-4", children: [
5700
- "Active Tasks",
5701
- /* @__PURE__ */ jsx54("span", { className: "text-ods-accent", children: ":" })
5702
- ] }),
5703
- /* @__PURE__ */ jsx54(
5704
- DeliveryTable,
5705
- {
5706
- items: filteredInProgress,
5707
- isLoading
5708
- }
5709
- )
5710
- ] })
5711
- ] });
5712
- }
5713
-
5714
- // src/components/shared/legal-document/legal-document-page.tsx
5715
- init_next_navigation();
5716
-
5717
- // src/components/shared/legal-document/use-legal-docs.ts
5718
- import { useState as useState11, useEffect as useEffect9, useCallback as useCallback4 } from "react";
5719
- function useLegalDocs(docType, options = {}) {
5720
- const { initialData = null, apiEndpoint } = options;
5721
- const effectiveEndpoint = apiEndpoint ?? `/api/legal/${docType}`;
5722
- const [data, setData] = useState11(initialData ?? null);
5723
- const [isLoading, setIsLoading] = useState11(!initialData);
5724
- const [error, setError] = useState11(null);
5725
- const fetchDocument = useCallback4(async () => {
5726
- try {
5727
- setIsLoading(true);
5728
- setError(null);
5729
- const response = await contentFetch(effectiveEndpoint);
5730
- if (!response.ok) {
5731
- throw new Error(
5732
- `Failed to fetch ${docType} document: ${response.status} ${response.statusText}`
5733
- );
5734
- }
5735
- const result = await response.json();
5736
- if (!result.content) {
5737
- throw new Error(`${docType} document content is empty`);
5738
- }
5739
- setData(result);
5740
- } catch (err) {
5741
- const errorMessage = err instanceof Error ? err.message : "Unknown error occurred";
5742
- console.error("Error fetching legal document:", docType, err);
5743
- setError(errorMessage);
5744
- } finally {
5745
- setIsLoading(false);
5746
- }
5747
- }, [docType, effectiveEndpoint]);
5748
- useEffect9(() => {
5749
- setData(initialData ?? null);
5750
- setError(null);
5751
- setIsLoading(!initialData);
5752
- }, [docType, initialData]);
5753
- useEffect9(() => {
5754
- if (initialData) return;
5755
- fetchDocument();
5756
- }, [fetchDocument, initialData]);
5757
- const refetch = () => {
5758
- fetchDocument();
5759
- };
5760
- return {
5761
- data,
5762
- isLoading,
5763
- error,
5764
- refetch
5765
- };
5766
- }
5767
-
5768
- // src/components/shared/legal-document/legal-document-page.tsx
5769
- import { jsx as jsx55, jsxs as jsxs44 } from "react/jsx-runtime";
5770
- function LegalDocumentPage({
5771
- docType,
5772
- title,
5773
- fallbackDescription,
5774
- contactEmail,
5775
- errorContactPrompt,
5776
- errorTitle,
5777
- emptyStateMessage,
5778
- initialData = null,
5779
- initialLastUpdatedLabel = null,
5780
- apiEndpoint,
5781
- MarkdownRenderer = RichMarkdownRenderer,
5782
- backButton
5783
- }) {
5784
- const router = useRouter();
5785
- const { data, isLoading, error } = useLegalDocs(docType, { initialData, apiEndpoint });
5786
- const backCfg = backButton === false ? void 0 : {
5787
- label: backButton?.label ?? "Back to home",
5788
- onClick: () => router.push(backButton?.href ?? "/")
5789
- };
5790
- const fallbackLastUpdatedLabel = data?.lastSynced != null ? formatLegalDate(data.lastSynced) : null;
5791
- const effectiveLastUpdatedLabel = initialLastUpdatedLabel ?? fallbackLastUpdatedLabel;
5792
- const customTitle = /* @__PURE__ */ jsxs44("div", { className: "flex flex-col gap-4", children: [
5793
- /* @__PURE__ */ jsxs44(PageHeading, { children: [
5794
- /* @__PURE__ */ jsx55("span", { children: title }),
5795
- /* @__PURE__ */ jsx55("span", { className: "text-ods-accent", children: "." })
5796
- ] }),
5797
- /* @__PURE__ */ jsxs44("p", { className: "font-['DM_Sans'] text-base md:text-lg text-ods-text-secondary max-w-2xl", children: [
5798
- effectiveLastUpdatedLabel ? `Last Updated: ${effectiveLastUpdatedLabel}` : fallbackDescription,
5799
- data?.sourceFile && /* @__PURE__ */ jsxs44("span", { className: "block text-sm mt-1 opacity-75", children: [
5800
- "Source: ",
5801
- data.sourceFile
5802
- ] })
5803
- ] })
5804
- ] });
5805
- return /* @__PURE__ */ jsx55(PageShell, { children: /* @__PURE__ */ jsxs44(PageLayout, { backButton: backCfg, children: [
5806
- /* @__PURE__ */ jsx55("div", { className: "flex flex-col gap-4", children: customTitle }),
5807
- /* @__PURE__ */ jsx55("div", { className: "flex flex-col lg:flex-row gap-6 lg:gap-10 items-start flex-1", children: /* @__PURE__ */ jsx55("div", { className: "flex-1", children: /* @__PURE__ */ jsx55("div", { className: "w-full", children: /* @__PURE__ */ jsx55("article", { className: "space-y-2", children: isLoading ? (
5808
- // Loading skeleton matching Knowledge Hub pattern
5809
- /* @__PURE__ */ jsxs44("div", { className: "space-y-6", children: [
5810
- /* @__PURE__ */ jsx55("div", { className: "h-10 bg-ods-skeleton rounded-lg w-3/4 animate-pulse" }),
5811
- /* @__PURE__ */ jsxs44("div", { className: "space-y-4", children: [
5812
- /* @__PURE__ */ jsx55("div", { className: "h-4 bg-ods-skeleton rounded w-full animate-pulse" }),
5813
- /* @__PURE__ */ jsx55("div", { className: "h-4 bg-ods-skeleton rounded w-full animate-pulse" }),
5814
- /* @__PURE__ */ jsx55("div", { className: "h-4 bg-ods-skeleton rounded w-5/6 animate-pulse" })
5815
- ] }),
5816
- /* @__PURE__ */ jsx55("div", { className: "h-32 bg-ods-card border border-ods-border rounded-lg animate-pulse" }),
5817
- /* @__PURE__ */ jsxs44("div", { className: "space-y-4", children: [
5818
- /* @__PURE__ */ jsx55("div", { className: "h-4 bg-ods-skeleton rounded w-full animate-pulse" }),
5819
- /* @__PURE__ */ jsx55("div", { className: "h-4 bg-ods-skeleton rounded w-4/5 animate-pulse" })
5820
- ] })
5821
- ] })
5822
- ) : error ? /* @__PURE__ */ jsxs44("div", { className: "text-center space-y-4", children: [
5823
- /* @__PURE__ */ jsxs44("div", { className: "bg-red-900/20 border border-red-700 rounded-lg p-6", children: [
5824
- /* @__PURE__ */ jsx55("p", { className: "text-red-400 mb-2", children: errorTitle }),
5825
- /* @__PURE__ */ jsx55("p", { className: "text-red-300 text-sm", children: error })
5826
- ] }),
5827
- /* @__PURE__ */ jsxs44("div", { className: "text-ods-text-secondary", children: [
5828
- /* @__PURE__ */ jsx55("p", { children: errorContactPrompt }),
5829
- /* @__PURE__ */ jsx55("a", { href: `mailto:${contactEmail}`, className: "text-ods-accent hover:underline", children: contactEmail })
5830
- ] })
5831
- ] }) : data ? /* @__PURE__ */ jsx55(
5832
- MarkdownRenderer,
5833
- {
5834
- content: data.content,
5835
- sectionIds: data.sections || [],
5836
- demoteMarkdownH1ToH2: true
5837
- }
5838
- ) : /* @__PURE__ */ jsxs44("div", { className: "text-center text-ods-text-secondary py-16", children: [
5839
- /* @__PURE__ */ jsx55("p", { className: "text-xl", children: emptyStateMessage }),
5840
- /* @__PURE__ */ jsxs44("p", { className: "mt-2", children: [
5841
- "Please contact",
5842
- " ",
5843
- /* @__PURE__ */ jsx55("a", { href: `mailto:${contactEmail}`, className: "text-ods-accent hover:underline", children: contactEmail }),
5844
- " ",
5845
- "for more information."
5846
- ] })
5847
- ] }) }) }) }) })
5848
- ] }) });
5849
- }
5850
-
5851
4473
  // src/components/authors/author-detail-view.tsx
5852
4474
  init_cn();
5853
- import { jsx as jsx56, jsxs as jsxs45 } from "react/jsx-runtime";
4475
+ import { jsx as jsx45, jsxs as jsxs36 } from "react/jsx-runtime";
5854
4476
  function AuthorDetailView({
5855
4477
  author,
5856
4478
  proxyImageUrl,
@@ -5865,9 +4487,9 @@ function AuthorDetailView({
5865
4487
  }) ?? author.avatarUrl : null;
5866
4488
  const subtitle = [author.jobTitle, author.company].filter(Boolean).join(" @ ");
5867
4489
  const bioText = formatBioText(author.about);
5868
- return /* @__PURE__ */ jsxs45("div", { className: cn("flex flex-col gap-5 md:gap-6", className), children: [
5869
- /* @__PURE__ */ jsxs45("div", { className: "flex gap-6 w-full items-start", children: [
5870
- /* @__PURE__ */ jsx56("div", { className: "relative shrink-0 h-24 w-24", children: /* @__PURE__ */ jsx56("div", { className: "rounded-full overflow-hidden bg-ods-bg-secondary border border-ods-border w-full h-full relative", children: proxiedAvatar ? /* @__PURE__ */ jsx56(
4490
+ return /* @__PURE__ */ jsxs36("div", { className: cn("flex flex-col gap-5 md:gap-6", className), children: [
4491
+ /* @__PURE__ */ jsxs36("div", { className: "flex gap-6 w-full items-start", children: [
4492
+ /* @__PURE__ */ jsx45("div", { className: "relative shrink-0 h-24 w-24", children: /* @__PURE__ */ jsx45("div", { className: "rounded-full overflow-hidden bg-ods-bg-secondary border border-ods-border w-full h-full relative", children: proxiedAvatar ? /* @__PURE__ */ jsx45(
5871
4493
  next_image_default,
5872
4494
  {
5873
4495
  src: proxiedAvatar,
@@ -5876,12 +4498,12 @@ function AuthorDetailView({
5876
4498
  className: "object-cover",
5877
4499
  unoptimized: true
5878
4500
  }
5879
- ) : /* @__PURE__ */ jsx56("div", { className: "flex items-center justify-center h-full w-full text-3xl text-ods-text-secondary font-['Azeret_Mono']", children: author.fullName.charAt(0).toUpperCase() }) }) }),
5880
- /* @__PURE__ */ jsxs45("div", { className: "min-w-0 flex flex-col justify-center gap-2", children: [
5881
- /* @__PURE__ */ jsx56("p", { className: "text-h2 text-ods-text-primary leading-none truncate", children: author.fullName }),
5882
- subtitle && /* @__PURE__ */ jsx56("p", { className: "font-body text-lg text-ods-text-secondary leading-none truncate", children: subtitle }),
4501
+ ) : /* @__PURE__ */ jsx45("div", { className: "flex items-center justify-center h-full w-full text-3xl text-ods-text-secondary font-['Azeret_Mono']", children: author.fullName.charAt(0).toUpperCase() }) }) }),
4502
+ /* @__PURE__ */ jsxs36("div", { className: "min-w-0 flex flex-col justify-center gap-2", children: [
4503
+ /* @__PURE__ */ jsx45("p", { className: "text-h2 text-ods-text-primary leading-none truncate", children: author.fullName }),
4504
+ subtitle && /* @__PURE__ */ jsx45("p", { className: "font-body text-lg text-ods-text-secondary leading-none truncate", children: subtitle }),
5883
4505
  author.socialLinks.length > 0 && // Ghost compact row (transparent 32px) — metadata, not CTAs.
5884
- /* @__PURE__ */ jsx56(
4506
+ /* @__PURE__ */ jsx45(
5885
4507
  SocialIconRow,
5886
4508
  {
5887
4509
  compact: true,
@@ -5894,8 +4516,8 @@ function AuthorDetailView({
5894
4516
  )
5895
4517
  ] })
5896
4518
  ] }),
5897
- bioText && /* @__PURE__ */ jsx56("p", { className: "font-body text-base leading-relaxed text-ods-text-secondary", children: bioText }),
5898
- author.knowsAbout.length > 0 && /* @__PURE__ */ jsx56("div", { className: "flex flex-wrap gap-2", children: author.knowsAbout.map((topic) => /* @__PURE__ */ jsx56(StatusBadge, { text: topic, variant: "button", colorScheme: "cyan", singleLine: true }, topic)) }),
4519
+ bioText && /* @__PURE__ */ jsx45("p", { className: "font-body text-base leading-relaxed text-ods-text-secondary", children: bioText }),
4520
+ author.knowsAbout.length > 0 && /* @__PURE__ */ jsx45("div", { className: "flex flex-wrap gap-2", children: author.knowsAbout.map((topic) => /* @__PURE__ */ jsx45(StatusBadge, { text: topic, variant: "button", colorScheme: "cyan", singleLine: true }, topic)) }),
5899
4521
  children
5900
4522
  ] });
5901
4523
  }