@flamingo-stack/openframe-frontend-core 0.0.570 → 0.0.571

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 (98) hide show
  1. package/dist/{chunk-U6NPZMNT.js → chunk-2M44PBAP.js} +6 -6
  2. package/dist/{chunk-ZTGWMXJK.js → chunk-3FW6MFJ7.js} +2 -2
  3. package/dist/{chunk-CYY2PEYQ.cjs → chunk-4IXMQIRH.cjs} +3 -3
  4. package/dist/{chunk-CYY2PEYQ.cjs.map → chunk-4IXMQIRH.cjs.map} +1 -1
  5. package/dist/{chunk-XWMEHLDK.js → chunk-6DD7G4UQ.js} +4 -4
  6. package/dist/{chunk-5NVVVIHJ.js → chunk-7SKYZDEJ.js} +31 -41
  7. package/dist/{chunk-5NVVVIHJ.js.map → chunk-7SKYZDEJ.js.map} +1 -1
  8. package/dist/{chunk-3YO2ZIZL.cjs → chunk-AFE6WQFY.cjs} +14 -14
  9. package/dist/{chunk-3YO2ZIZL.cjs.map → chunk-AFE6WQFY.cjs.map} +1 -1
  10. package/dist/{chunk-TQER4FVN.js → chunk-CXJUIBES.js} +2 -2
  11. package/dist/{chunk-HJCXSI7R.cjs → chunk-EHF7XGJO.cjs} +4 -4
  12. package/dist/{chunk-HJCXSI7R.cjs.map → chunk-EHF7XGJO.cjs.map} +1 -1
  13. package/dist/{chunk-Z7DXVKVT.cjs → chunk-FGBMUQTA.cjs} +62 -62
  14. package/dist/{chunk-Z7DXVKVT.cjs.map → chunk-FGBMUQTA.cjs.map} +1 -1
  15. package/dist/{chunk-MT7IDGCM.js → chunk-GE4TSW4P.js} +2 -2
  16. package/dist/{chunk-VZQKENQU.js → chunk-GJXYQNKA.js} +2 -2
  17. package/dist/{chunk-I7CFA5DO.cjs → chunk-GNVIMSJG.cjs} +26 -26
  18. package/dist/{chunk-I7CFA5DO.cjs.map → chunk-GNVIMSJG.cjs.map} +1 -1
  19. package/dist/{chunk-IJA26YDA.cjs → chunk-HKLSQJFM.cjs} +5 -5
  20. package/dist/{chunk-IJA26YDA.cjs.map → chunk-HKLSQJFM.cjs.map} +1 -1
  21. package/dist/{chunk-MTORQ4LY.js → chunk-J7FLU52G.js} +2 -2
  22. package/dist/{chunk-3H6NH2AD.js → chunk-JLEDJPGP.js} +4 -4
  23. package/dist/{chunk-PTDRJCPW.js → chunk-JYMKMW5P.js} +2 -2
  24. package/dist/{chunk-QIU5B2ZD.js → chunk-L4ZWJM3M.js} +2 -2
  25. package/dist/{chunk-T4MB5TX6.cjs → chunk-MXBLRXVV.cjs} +5 -5
  26. package/dist/{chunk-T4MB5TX6.cjs.map → chunk-MXBLRXVV.cjs.map} +1 -1
  27. package/dist/{chunk-RVCCJB6M.cjs → chunk-OIIE5IFT.cjs} +7 -17
  28. package/dist/chunk-OIIE5IFT.cjs.map +1 -0
  29. package/dist/{chunk-Z3MSD6ZE.js → chunk-RTSEWMHW.js} +5 -5
  30. package/dist/{chunk-4BJ4FQPG.cjs → chunk-S2PTGH6H.cjs} +11 -11
  31. package/dist/{chunk-4BJ4FQPG.cjs.map → chunk-S2PTGH6H.cjs.map} +1 -1
  32. package/dist/{chunk-YYESWAAQ.js → chunk-T4MU52P4.js} +2 -2
  33. package/dist/{chunk-GDPPFPLD.cjs → chunk-TIIHOVUA.cjs} +31 -31
  34. package/dist/{chunk-GDPPFPLD.cjs.map → chunk-TIIHOVUA.cjs.map} +1 -1
  35. package/dist/{chunk-6WXL6CIL.cjs → chunk-TK6RPD5T.cjs} +86 -86
  36. package/dist/{chunk-6WXL6CIL.cjs.map → chunk-TK6RPD5T.cjs.map} +1 -1
  37. package/dist/{chunk-PS2TV7WG.cjs → chunk-WFEVKHPP.cjs} +9 -9
  38. package/dist/{chunk-PS2TV7WG.cjs.map → chunk-WFEVKHPP.cjs.map} +1 -1
  39. package/dist/{chunk-CSCAOET4.cjs → chunk-XGNTWDW4.cjs} +39 -39
  40. package/dist/{chunk-CSCAOET4.cjs.map → chunk-XGNTWDW4.cjs.map} +1 -1
  41. package/dist/{chunk-KYDVOX5J.js → chunk-ZCEOADTR.js} +2 -2
  42. package/dist/{chunk-D463PBIY.cjs → chunk-ZNYJD27G.cjs} +20 -20
  43. package/dist/{chunk-D463PBIY.cjs.map → chunk-ZNYJD27G.cjs.map} +1 -1
  44. package/dist/components/case-studies/index.cjs +8 -8
  45. package/dist/components/case-studies/index.js +2 -2
  46. package/dist/components/chat/index.cjs +2 -2
  47. package/dist/components/chat/index.js +1 -1
  48. package/dist/components/contact/index.cjs +3 -3
  49. package/dist/components/contact/index.js +2 -2
  50. package/dist/components/docs/index.cjs +5 -5
  51. package/dist/components/docs/index.js +4 -4
  52. package/dist/components/embeds/claude-embed.d.ts.map +1 -1
  53. package/dist/components/embeds/embed-iframe.d.ts +13 -0
  54. package/dist/components/embeds/embed-iframe.d.ts.map +1 -1
  55. package/dist/components/embeds/embed-viewer-frame.d.ts +6 -7
  56. package/dist/components/embeds/embed-viewer-frame.d.ts.map +1 -1
  57. package/dist/components/embeds/index.cjs +3 -3
  58. package/dist/components/embeds/index.js +2 -2
  59. package/dist/components/faq/index.cjs +3 -3
  60. package/dist/components/faq/index.js +2 -2
  61. package/dist/components/features/index.cjs +2 -2
  62. package/dist/components/features/index.js +1 -1
  63. package/dist/components/help-center-pages/index.cjs +22 -22
  64. package/dist/components/help-center-pages/index.js +13 -13
  65. package/dist/components/index.cjs +132 -132
  66. package/dist/components/index.js +11 -11
  67. package/dist/components/meeting-scheduler/index.cjs +30 -30
  68. package/dist/components/meeting-scheduler/index.js +3 -3
  69. package/dist/components/navigation/index.cjs +2 -2
  70. package/dist/components/navigation/index.js +1 -1
  71. package/dist/components/onboarding-guides/index.cjs +5 -5
  72. package/dist/components/onboarding-guides/index.js +4 -4
  73. package/dist/components/related-content/index.cjs +3 -3
  74. package/dist/components/related-content/index.js +2 -2
  75. package/dist/components/tickets/index.cjs +6 -6
  76. package/dist/components/tickets/index.js +5 -5
  77. package/dist/components/ui/index.cjs +2 -2
  78. package/dist/components/ui/index.js +1 -1
  79. package/dist/index.cjs +2 -2
  80. package/dist/index.js +1 -1
  81. package/package.json +1 -1
  82. package/src/components/embeds/claude-embed.tsx +1 -2
  83. package/src/components/embeds/embed-iframe.tsx +7 -2
  84. package/src/components/embeds/embed-viewer-frame.tsx +13 -23
  85. package/dist/chunk-RVCCJB6M.cjs.map +0 -1
  86. /package/dist/{chunk-U6NPZMNT.js.map → chunk-2M44PBAP.js.map} +0 -0
  87. /package/dist/{chunk-ZTGWMXJK.js.map → chunk-3FW6MFJ7.js.map} +0 -0
  88. /package/dist/{chunk-XWMEHLDK.js.map → chunk-6DD7G4UQ.js.map} +0 -0
  89. /package/dist/{chunk-TQER4FVN.js.map → chunk-CXJUIBES.js.map} +0 -0
  90. /package/dist/{chunk-MT7IDGCM.js.map → chunk-GE4TSW4P.js.map} +0 -0
  91. /package/dist/{chunk-VZQKENQU.js.map → chunk-GJXYQNKA.js.map} +0 -0
  92. /package/dist/{chunk-MTORQ4LY.js.map → chunk-J7FLU52G.js.map} +0 -0
  93. /package/dist/{chunk-3H6NH2AD.js.map → chunk-JLEDJPGP.js.map} +0 -0
  94. /package/dist/{chunk-PTDRJCPW.js.map → chunk-JYMKMW5P.js.map} +0 -0
  95. /package/dist/{chunk-QIU5B2ZD.js.map → chunk-L4ZWJM3M.js.map} +0 -0
  96. /package/dist/{chunk-Z3MSD6ZE.js.map → chunk-RTSEWMHW.js.map} +0 -0
  97. /package/dist/{chunk-YYESWAAQ.js.map → chunk-T4MU52P4.js.map} +0 -0
  98. /package/dist/{chunk-KYDVOX5J.js.map → chunk-ZCEOADTR.js.map} +0 -0
@@ -1,16 +1,16 @@
1
1
  "use client";
2
2
  import {
3
3
  PersistentPaginationWrapper
4
- } from "./chunk-ZTGWMXJK.js";
4
+ } from "./chunk-3FW6MFJ7.js";
5
5
  import {
6
6
  DeliveryRow
7
- } from "./chunk-KYDVOX5J.js";
7
+ } from "./chunk-ZCEOADTR.js";
8
8
  import {
9
9
  EmptyState
10
- } from "./chunk-PTDRJCPW.js";
10
+ } from "./chunk-JYMKMW5P.js";
11
11
  import {
12
12
  DetailPageSkeleton
13
- } from "./chunk-QIU5B2ZD.js";
13
+ } from "./chunk-L4ZWJM3M.js";
14
14
  import {
15
15
  useSelfFetch
16
16
  } from "./chunk-ZAYZ7JHF.js";
@@ -46,7 +46,7 @@ import {
46
46
  toStripProfile,
47
47
  useCaptions,
48
48
  useEntityCardLink
49
- } from "./chunk-5NVVVIHJ.js";
49
+ } from "./chunk-7SKYZDEJ.js";
50
50
  import {
51
51
  STICKY_HEADER_OFFSET_PX,
52
52
  contentFetch,
@@ -1324,4 +1324,4 @@ export {
1324
1324
  useLegalDocs,
1325
1325
  LegalDocumentPage
1326
1326
  };
1327
- //# sourceMappingURL=chunk-U6NPZMNT.js.map
1327
+ //# sourceMappingURL=chunk-2M44PBAP.js.map
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  init_unified_pagination,
4
4
  unified_pagination_exports
5
- } from "./chunk-PTDRJCPW.js";
5
+ } from "./chunk-JYMKMW5P.js";
6
6
  import {
7
7
  cn,
8
8
  init_cn
@@ -172,4 +172,4 @@ export {
172
172
  usePaginationLoading,
173
173
  PersistentPaginationWrapper
174
174
  };
175
- //# sourceMappingURL=chunk-ZTGWMXJK.js.map
175
+ //# sourceMappingURL=chunk-3FW6MFJ7.js.map
@@ -2,7 +2,7 @@
2
2
 
3
3
 
4
4
 
5
- var _chunkHJCXSI7Rcjs = require('./chunk-HJCXSI7R.cjs');
5
+ var _chunkEHF7XGJOcjs = require('./chunk-EHF7XGJO.cjs');
6
6
 
7
7
 
8
8
 
@@ -112,7 +112,7 @@ function PersistentPaginationWrapper({
112
112
  const displayCurrentPage = hasResults ? currentPage : 1;
113
113
  const isPaginationDisabled = isLoading;
114
114
  const hasNoResults = !hasResults && !isLoading;
115
- const PaginationComponent = (_chunkHJCXSI7Rcjs.init_unified_pagination.call(void 0, ), _chunkVRHGVLSLcjs.__toCommonJS.call(void 0, _chunkHJCXSI7Rcjs.unified_pagination_exports)).UnifiedPagination;
115
+ const PaginationComponent = (_chunkEHF7XGJOcjs.init_unified_pagination.call(void 0, ), _chunkVRHGVLSLcjs.__toCommonJS.call(void 0, _chunkEHF7XGJOcjs.unified_pagination_exports)).UnifiedPagination;
116
116
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
117
117
  "div",
118
118
  {
@@ -172,4 +172,4 @@ function PersistentPaginationWrapper({
172
172
 
173
173
 
174
174
  exports.PersistentPagination = PersistentPagination; exports.usePaginationLoading = usePaginationLoading; exports.PersistentPaginationWrapper = PersistentPaginationWrapper;
175
- //# sourceMappingURL=chunk-CYY2PEYQ.cjs.map
175
+ //# sourceMappingURL=chunk-4IXMQIRH.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/openframe-oss-lib/openframe-oss-lib/openframe-frontend-core/dist/chunk-CYY2PEYQ.cjs","../src/components/persistent-pagination.tsx"],"names":[],"mappings":"AAAA,qFAAY;AACZ;AACE;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACA;ACVA,uCAAA,CAAA;AA6FQ,+CAAA;AAhCD,SAAS,oBAAA,CAAqB;AAAA,EACnC,SAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA,SAAA;AAAA,EACA,gBAAA,EAAkB,GAAA;AAAA,EAClB,mBAAA,EAAqB,GAAA;AAAA,EACrB,iBAAA,EAAmB;AACrB,CAAA,EAA8B;AAI5B,EAAA,uBACE,8BAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,kCAAA;AAAA,QACT,qCAAA;AAAA,QACA,kCAAA;AAAA,QACA,UAAA,GAAa,qBAAA;AAAA,QACb;AAAA,MACF,CAAA;AAAA,MACA,KAAA,EAAO;AAAA,QACL,OAAA,EAAS,UAAA,EAAY,gBAAA,EAAkB,CAAA;AAAA,QACvC,kBAAA,EAAoB,CAAA,EAAA;AACtB,MAAA;AACK,MAAA;AACM,MAAA;AACA,MAAA;AACG,MAAA;AAGb,MAAA;AACC,QAAA;AAAC,UAAA;AAAA,UAAA;AACW,YAAA;AACL,YAAA;AACK,YAAA;AACX,YAAA;AAAA,cAAA;AACqD,cAAA;AAAY,cAAA;AAAK,cAAA;AAAA,YAAA;AAAA,UAAA;AACvE,QAAA;AAIF,wBAAA;AAAC,UAAA;AAAA,UAAA;AACY,YAAA;AACT,cAAA;AACa,cAAA;AACf,YAAA;AACO,YAAA;AACL,cAAA;AACF,YAAA;AACa,YAAA;AAEZ,YAAA;AAAA,UAAA;AACH,QAAA;AAAA,MAAA;AAAA,IAAA;AAGF,EAAA;AAEJ;AAKgB;AAKR,EAAA;AAEkB,EAAA;AACT,IAAA;AACG,IAAA;AACK,IAAA;AACD,IAAA;AACtB,EAAA;AAE0B,EAAA;AACT,IAAA;AACU,MAAA;AACzB,IAAA;AACe,IAAA;AACjB,EAAA;AAEO,EAAA;AACL,IAAA;AACA,IAAA;AACA,IAAA;AACF,EAAA;AACF;AAcgB;AACd,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACU,EAAA;AACyB;AACT,EAAA;AACxB,IAAA;AACA,IAAA;AACA,IAAA;AACF,EAAA;AAImB,EAAA;AACO,EAAA;AACC,EAAA;AAErB,EAAA;AACgB,EAAA;AAIhB,EAAA;AAGJ,EAAA;AAAC,IAAA;AAAA,IAAA;AACY,MAAA;AACT,QAAA;AACC,QAAA;AACD,QAAA;AACF,MAAA;AACO,MAAA;AACI,QAAA;AACW,QAAA;AACtB,MAAA;AACK,MAAA;AACM,MAAA;AACA,MAAA;AACG,MAAA;AACI,MAAA;AAGhB,MAAA;AAAc,QAAA;AACb,UAAA;AAAA,UAAA;AACW,YAAA;AACL,YAAA;AACK,YAAA;AAET,YAAA;AAEG,UAAA;AAEN,QAAA;AAIF,wBAAA;AAAC,UAAA;AAAA,UAAA;AACY,YAAA;AACT,cAAA;AACA,cAAA;AACF,YAAA;AACO,YAAA;AACL,cAAA;AACF,YAAA;AACa,YAAA;AAEb,YAAA;AAAC,cAAA;AAAA,cAAA;AACc,gBAAA;AACD,gBAAA;AACZ,gBAAA;AAAiD,gBAAA;AAAA,cAAA;AACnD,YAAA;AAAA,UAAA;AACF,QAAA;AAAA,MAAA;AAAA,IAAA;AAGF,EAAA;AAEJ;AD9E6B;AACA;AACA;AACA;AACA;AACA","file":"/home/runner/work/openframe-oss-lib/openframe-oss-lib/openframe-frontend-core/dist/chunk-CYY2PEYQ.cjs","sourcesContent":[null,"\"use client\"\n\nimport { ReactNode } from \"react\"\nimport { cn } from \"../utils/cn\"\n\ninterface PersistentPaginationProps {\n /**\n * Whether pagination is currently in a loading state\n */\n isLoading: boolean\n /**\n * The pagination component\n */\n children: ReactNode\n /**\n * Current page number\n */\n currentPage: number\n /**\n * Total number of pages\n */\n totalPages: number\n /**\n * Additional CSS classes\n */\n className?: string\n /**\n * Disabled opacity (0-1)\n */\n disabledOpacity?: number\n /**\n * Transition duration in milliseconds\n */\n transitionDuration?: number\n /**\n * Whether to show loading state in pagination\n */\n showLoadingState?: boolean\n}\n\n/**\n * PersistentPagination\n * \n * A wrapper component that keeps pagination visible during loading states\n * but provides visual feedback that it's temporarily disabled.\n * \n * Features:\n * - Maintains pagination visibility during content loading\n * - Disables interaction but preserves layout\n * - Shows current page context even when loading\n * - Provides accessibility support for loading states\n * - Smooth transitions between enabled/disabled states\n * \n * Usage:\n * ```tsx\n * <PersistentPagination\n * isLoading={isLoadingVendors}\n * currentPage={currentPage}\n * totalPages={totalPages}\n * >\n * <Pagination currentPage={currentPage} totalPages={totalPages} />\n * </PersistentPagination>\n * ```\n */\nexport function PersistentPagination({\n isLoading,\n children,\n currentPage,\n totalPages,\n className,\n disabledOpacity = 0.5,\n transitionDuration = 300,\n showLoadingState = true,\n}: PersistentPaginationProps) {\n // ALWAYS show pagination for predictable layout - just gray it out when not needed\n // Removed condition that hides pagination completely\n\n return (\n <div \n className={cn(\n \"relative transition-all ease-in-out\",\n \"flex justify-center items-center\",\n isLoading && \"pointer-events-none\",\n className\n )}\n style={{\n opacity: isLoading ? disabledOpacity : 1,\n transitionDuration: `${transitionDuration}ms`\n }}\n role=\"navigation\"\n aria-label=\"Pagination\"\n aria-busy={isLoading}\n data-loading={isLoading}\n >\n {/* Loading state announcement for screen readers */}\n {isLoading && (\n <div \n className=\"sr-only\" \n role=\"status\" \n aria-live=\"polite\"\n >\n Pagination temporarily disabled while loading page {currentPage} of {totalPages}\n </div>\n )}\n\n {/* Pagination controls with disabled state */}\n <div \n className={cn(\n \"relative transition-all ease-in-out\",\n isLoading && \"cursor-not-allowed\"\n )}\n style={{\n transitionDuration: `${transitionDuration}ms`\n }}\n aria-hidden={isLoading}\n >\n {children}\n </div>\n\n {/* REMOVED: Loading overlay - only card skeletons should show during loading */}\n </div>\n )\n}\n\n/**\n * Hook for managing pagination loading states\n */\nexport function usePaginationLoading(\n isLoading: boolean,\n currentPage: number,\n totalPages: number\n) {\n const shouldShowPagination = totalPages > 1 || isLoading\n \n const paginationProps = {\n 'aria-busy': isLoading,\n 'data-loading': isLoading,\n 'data-current-page': currentPage,\n 'data-total-pages': totalPages,\n }\n\n const getLoadingMessage = () => {\n if (isLoading) {\n return `Loading page ${currentPage} of ${totalPages}`\n }\n return `Page ${currentPage} of ${totalPages}`\n }\n\n return {\n shouldShowPagination,\n paginationProps,\n getLoadingMessage,\n }\n}\n\n/**\n * Enhanced pagination component that includes loading states\n */\ninterface PersistentPaginationWrapperProps {\n isLoading: boolean\n currentPage: number\n totalPages: number\n onPageChange?: (page: number) => void\n className?: string\n variant?: 'vendor' | 'blog'\n}\n\nexport function PersistentPaginationWrapper({\n isLoading,\n currentPage,\n totalPages,\n onPageChange,\n className,\n variant = 'vendor'\n}: PersistentPaginationWrapperProps) {\n const { getLoadingMessage } = usePaginationLoading(\n isLoading,\n currentPage,\n totalPages\n )\n\n // ALWAYS show pagination for predictable layout\n // For no results (totalPages = 0), show grayed out pagination\n const hasResults = totalPages > 0\n const displayTotalPages = hasResults ? totalPages : 1\n const displayCurrentPage = hasResults ? currentPage : 1\n // Only disable during loading, but still show when no results (just grayed out)\n const isPaginationDisabled = isLoading\n const hasNoResults = !hasResults && !isLoading\n\n // Use UnifiedPagination directly from ui-kit instead of importing from consuming apps\n // Both Pagination and BlogPagination in multi-platform-hub are just wrappers around UnifiedPagination\n const PaginationComponent = require('./unified-pagination').UnifiedPagination\n\n return (\n <div \n className={cn(\n \"relative transition-all ease-in-out flex justify-center items-center\",\n (isPaginationDisabled || hasNoResults) && \"pointer-events-none\",\n className\n )}\n style={{\n opacity: isPaginationDisabled ? 0.3 : hasNoResults ? 0.5 : 1,\n transitionDuration: \"300ms\"\n }}\n role=\"navigation\"\n aria-label=\"Pagination\"\n aria-busy={isLoading}\n data-loading={isLoading}\n data-has-results={hasResults}\n >\n {/* Loading/no results state announcement for screen readers */}\n {(isLoading || !hasResults) && (\n <div \n className=\"sr-only\" \n role=\"status\" \n aria-live=\"polite\"\n >\n {isLoading \n ? `Pagination temporarily disabled while loading page ${displayCurrentPage} of ${displayTotalPages}`\n : `No results available - pagination disabled`\n }\n </div>\n )}\n\n {/* Pagination controls with disabled state */}\n <div \n className={cn(\n \"relative transition-all ease-in-out\",\n isPaginationDisabled && \"cursor-not-allowed\"\n )}\n style={{\n transitionDuration: \"300ms\"\n }}\n aria-hidden={isPaginationDisabled}\n >\n <PaginationComponent\n currentPage={displayCurrentPage}\n totalPages={displayTotalPages}\n onPageChange={hasResults ? onPageChange : () => {}} // Provide empty function instead of undefined\n />\n </div>\n\n {/* REMOVED: Loading overlays - only card skeletons should show during loading */}\n </div>\n )\n} "]}
1
+ {"version":3,"sources":["/home/runner/work/openframe-oss-lib/openframe-oss-lib/openframe-frontend-core/dist/chunk-4IXMQIRH.cjs","../src/components/persistent-pagination.tsx"],"names":[],"mappings":"AAAA,qFAAY;AACZ;AACE;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACA;ACVA,uCAAA,CAAA;AA6FQ,+CAAA;AAhCD,SAAS,oBAAA,CAAqB;AAAA,EACnC,SAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA,SAAA;AAAA,EACA,gBAAA,EAAkB,GAAA;AAAA,EAClB,mBAAA,EAAqB,GAAA;AAAA,EACrB,iBAAA,EAAmB;AACrB,CAAA,EAA8B;AAI5B,EAAA,uBACE,8BAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,kCAAA;AAAA,QACT,qCAAA;AAAA,QACA,kCAAA;AAAA,QACA,UAAA,GAAa,qBAAA;AAAA,QACb;AAAA,MACF,CAAA;AAAA,MACA,KAAA,EAAO;AAAA,QACL,OAAA,EAAS,UAAA,EAAY,gBAAA,EAAkB,CAAA;AAAA,QACvC,kBAAA,EAAoB,CAAA,EAAA;AACtB,MAAA;AACK,MAAA;AACM,MAAA;AACA,MAAA;AACG,MAAA;AAGb,MAAA;AACC,QAAA;AAAC,UAAA;AAAA,UAAA;AACW,YAAA;AACL,YAAA;AACK,YAAA;AACX,YAAA;AAAA,cAAA;AACqD,cAAA;AAAY,cAAA;AAAK,cAAA;AAAA,YAAA;AAAA,UAAA;AACvE,QAAA;AAIF,wBAAA;AAAC,UAAA;AAAA,UAAA;AACY,YAAA;AACT,cAAA;AACa,cAAA;AACf,YAAA;AACO,YAAA;AACL,cAAA;AACF,YAAA;AACa,YAAA;AAEZ,YAAA;AAAA,UAAA;AACH,QAAA;AAAA,MAAA;AAAA,IAAA;AAGF,EAAA;AAEJ;AAKgB;AAKR,EAAA;AAEkB,EAAA;AACT,IAAA;AACG,IAAA;AACK,IAAA;AACD,IAAA;AACtB,EAAA;AAE0B,EAAA;AACT,IAAA;AACU,MAAA;AACzB,IAAA;AACe,IAAA;AACjB,EAAA;AAEO,EAAA;AACL,IAAA;AACA,IAAA;AACA,IAAA;AACF,EAAA;AACF;AAcgB;AACd,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACU,EAAA;AACyB;AACT,EAAA;AACxB,IAAA;AACA,IAAA;AACA,IAAA;AACF,EAAA;AAImB,EAAA;AACO,EAAA;AACC,EAAA;AAErB,EAAA;AACgB,EAAA;AAIhB,EAAA;AAGJ,EAAA;AAAC,IAAA;AAAA,IAAA;AACY,MAAA;AACT,QAAA;AACC,QAAA;AACD,QAAA;AACF,MAAA;AACO,MAAA;AACI,QAAA;AACW,QAAA;AACtB,MAAA;AACK,MAAA;AACM,MAAA;AACA,MAAA;AACG,MAAA;AACI,MAAA;AAGhB,MAAA;AAAc,QAAA;AACb,UAAA;AAAA,UAAA;AACW,YAAA;AACL,YAAA;AACK,YAAA;AAET,YAAA;AAEG,UAAA;AAEN,QAAA;AAIF,wBAAA;AAAC,UAAA;AAAA,UAAA;AACY,YAAA;AACT,cAAA;AACA,cAAA;AACF,YAAA;AACO,YAAA;AACL,cAAA;AACF,YAAA;AACa,YAAA;AAEb,YAAA;AAAC,cAAA;AAAA,cAAA;AACc,gBAAA;AACD,gBAAA;AACZ,gBAAA;AAAiD,gBAAA;AAAA,cAAA;AACnD,YAAA;AAAA,UAAA;AACF,QAAA;AAAA,MAAA;AAAA,IAAA;AAGF,EAAA;AAEJ;AD9E6B;AACA;AACA;AACA;AACA;AACA","file":"/home/runner/work/openframe-oss-lib/openframe-oss-lib/openframe-frontend-core/dist/chunk-4IXMQIRH.cjs","sourcesContent":[null,"\"use client\"\n\nimport { ReactNode } from \"react\"\nimport { cn } from \"../utils/cn\"\n\ninterface PersistentPaginationProps {\n /**\n * Whether pagination is currently in a loading state\n */\n isLoading: boolean\n /**\n * The pagination component\n */\n children: ReactNode\n /**\n * Current page number\n */\n currentPage: number\n /**\n * Total number of pages\n */\n totalPages: number\n /**\n * Additional CSS classes\n */\n className?: string\n /**\n * Disabled opacity (0-1)\n */\n disabledOpacity?: number\n /**\n * Transition duration in milliseconds\n */\n transitionDuration?: number\n /**\n * Whether to show loading state in pagination\n */\n showLoadingState?: boolean\n}\n\n/**\n * PersistentPagination\n * \n * A wrapper component that keeps pagination visible during loading states\n * but provides visual feedback that it's temporarily disabled.\n * \n * Features:\n * - Maintains pagination visibility during content loading\n * - Disables interaction but preserves layout\n * - Shows current page context even when loading\n * - Provides accessibility support for loading states\n * - Smooth transitions between enabled/disabled states\n * \n * Usage:\n * ```tsx\n * <PersistentPagination\n * isLoading={isLoadingVendors}\n * currentPage={currentPage}\n * totalPages={totalPages}\n * >\n * <Pagination currentPage={currentPage} totalPages={totalPages} />\n * </PersistentPagination>\n * ```\n */\nexport function PersistentPagination({\n isLoading,\n children,\n currentPage,\n totalPages,\n className,\n disabledOpacity = 0.5,\n transitionDuration = 300,\n showLoadingState = true,\n}: PersistentPaginationProps) {\n // ALWAYS show pagination for predictable layout - just gray it out when not needed\n // Removed condition that hides pagination completely\n\n return (\n <div \n className={cn(\n \"relative transition-all ease-in-out\",\n \"flex justify-center items-center\",\n isLoading && \"pointer-events-none\",\n className\n )}\n style={{\n opacity: isLoading ? disabledOpacity : 1,\n transitionDuration: `${transitionDuration}ms`\n }}\n role=\"navigation\"\n aria-label=\"Pagination\"\n aria-busy={isLoading}\n data-loading={isLoading}\n >\n {/* Loading state announcement for screen readers */}\n {isLoading && (\n <div \n className=\"sr-only\" \n role=\"status\" \n aria-live=\"polite\"\n >\n Pagination temporarily disabled while loading page {currentPage} of {totalPages}\n </div>\n )}\n\n {/* Pagination controls with disabled state */}\n <div \n className={cn(\n \"relative transition-all ease-in-out\",\n isLoading && \"cursor-not-allowed\"\n )}\n style={{\n transitionDuration: `${transitionDuration}ms`\n }}\n aria-hidden={isLoading}\n >\n {children}\n </div>\n\n {/* REMOVED: Loading overlay - only card skeletons should show during loading */}\n </div>\n )\n}\n\n/**\n * Hook for managing pagination loading states\n */\nexport function usePaginationLoading(\n isLoading: boolean,\n currentPage: number,\n totalPages: number\n) {\n const shouldShowPagination = totalPages > 1 || isLoading\n \n const paginationProps = {\n 'aria-busy': isLoading,\n 'data-loading': isLoading,\n 'data-current-page': currentPage,\n 'data-total-pages': totalPages,\n }\n\n const getLoadingMessage = () => {\n if (isLoading) {\n return `Loading page ${currentPage} of ${totalPages}`\n }\n return `Page ${currentPage} of ${totalPages}`\n }\n\n return {\n shouldShowPagination,\n paginationProps,\n getLoadingMessage,\n }\n}\n\n/**\n * Enhanced pagination component that includes loading states\n */\ninterface PersistentPaginationWrapperProps {\n isLoading: boolean\n currentPage: number\n totalPages: number\n onPageChange?: (page: number) => void\n className?: string\n variant?: 'vendor' | 'blog'\n}\n\nexport function PersistentPaginationWrapper({\n isLoading,\n currentPage,\n totalPages,\n onPageChange,\n className,\n variant = 'vendor'\n}: PersistentPaginationWrapperProps) {\n const { getLoadingMessage } = usePaginationLoading(\n isLoading,\n currentPage,\n totalPages\n )\n\n // ALWAYS show pagination for predictable layout\n // For no results (totalPages = 0), show grayed out pagination\n const hasResults = totalPages > 0\n const displayTotalPages = hasResults ? totalPages : 1\n const displayCurrentPage = hasResults ? currentPage : 1\n // Only disable during loading, but still show when no results (just grayed out)\n const isPaginationDisabled = isLoading\n const hasNoResults = !hasResults && !isLoading\n\n // Use UnifiedPagination directly from ui-kit instead of importing from consuming apps\n // Both Pagination and BlogPagination in multi-platform-hub are just wrappers around UnifiedPagination\n const PaginationComponent = require('./unified-pagination').UnifiedPagination\n\n return (\n <div \n className={cn(\n \"relative transition-all ease-in-out flex justify-center items-center\",\n (isPaginationDisabled || hasNoResults) && \"pointer-events-none\",\n className\n )}\n style={{\n opacity: isPaginationDisabled ? 0.3 : hasNoResults ? 0.5 : 1,\n transitionDuration: \"300ms\"\n }}\n role=\"navigation\"\n aria-label=\"Pagination\"\n aria-busy={isLoading}\n data-loading={isLoading}\n data-has-results={hasResults}\n >\n {/* Loading/no results state announcement for screen readers */}\n {(isLoading || !hasResults) && (\n <div \n className=\"sr-only\" \n role=\"status\" \n aria-live=\"polite\"\n >\n {isLoading \n ? `Pagination temporarily disabled while loading page ${displayCurrentPage} of ${displayTotalPages}`\n : `No results available - pagination disabled`\n }\n </div>\n )}\n\n {/* Pagination controls with disabled state */}\n <div \n className={cn(\n \"relative transition-all ease-in-out\",\n isPaginationDisabled && \"cursor-not-allowed\"\n )}\n style={{\n transitionDuration: \"300ms\"\n }}\n aria-hidden={isPaginationDisabled}\n >\n <PaginationComponent\n currentPage={displayCurrentPage}\n totalPages={displayTotalPages}\n onPageChange={hasResults ? onPageChange : () => {}} // Provide empty function instead of undefined\n />\n </div>\n\n {/* REMOVED: Loading overlays - only card skeletons should show during loading */}\n </div>\n )\n} "]}
@@ -2,11 +2,11 @@
2
2
  import {
3
3
  ArticleAuthorByline,
4
4
  DetailPageSkeleton
5
- } from "./chunk-QIU5B2ZD.js";
5
+ } from "./chunk-L4ZWJM3M.js";
6
6
  import {
7
7
  DocSearchBar,
8
8
  useDocSearch
9
- } from "./chunk-YYESWAAQ.js";
9
+ } from "./chunk-T4MU52P4.js";
10
10
  import {
11
11
  useSelfFetch
12
12
  } from "./chunk-ZAYZ7JHF.js";
@@ -26,7 +26,7 @@ import {
26
26
  toStripProfile,
27
27
  useCaptions,
28
28
  useVideoWarmup
29
- } from "./chunk-5NVVVIHJ.js";
29
+ } from "./chunk-7SKYZDEJ.js";
30
30
  import {
31
31
  buildOgPlaceholderUrl
32
32
  } from "./chunk-YFLKONLB.js";
@@ -398,4 +398,4 @@ export {
398
398
  useOnboardingGuide,
399
399
  useOnboardingGuideSections
400
400
  };
401
- //# sourceMappingURL=chunk-XWMEHLDK.js.map
401
+ //# sourceMappingURL=chunk-6DD7G4UQ.js.map
@@ -24835,7 +24835,7 @@ import { ExternalLink as ExternalLink3, Play as Play3, LayoutGrid } from "lucide
24835
24835
  // src/components/embeds/embed-viewer-frame.tsx
24836
24836
  init_cn();
24837
24837
  import { useEffect as useEffect46, useRef as useRef36, useState as useState55 } from "react";
24838
- import { Loader2 as Loader22, Maximize2, Minimize2 } from "lucide-react";
24838
+ import { Maximize2, Minimize2 } from "lucide-react";
24839
24839
 
24840
24840
  // src/utils/fullscreen-switch.ts
24841
24841
  var fullscreenElementOf = (doc) => doc.fullscreenElement ?? doc.webkitFullscreenElement ?? null;
@@ -25017,7 +25017,6 @@ function EmbedViewerFrame({
25017
25017
  isLoading,
25018
25018
  emptyIcon,
25019
25019
  emptyMessage = "Content not available",
25020
- loadingMessage = "Loading\u2026",
25021
25020
  height,
25022
25021
  allow,
25023
25022
  allowFullScreen,
@@ -25088,20 +25087,12 @@ function EmbedViewerFrame({
25088
25087
  sandbox
25089
25088
  }
25090
25089
  ) : isLoading ? (
25091
- // SAME box as the empty/iframe state (height + border), so a viewer
25092
- // resolving its frame doesn't collapse then jump it reads as
25093
- // "loading" and settles into the iframe in place.
25094
- /* @__PURE__ */ jsxs130(
25095
- "div",
25096
- {
25097
- className: "flex flex-col items-center justify-center gap-3 rounded-lg border border-ods-border px-4 py-16 text-center",
25098
- style: height ? { height } : void 0,
25099
- children: [
25100
- /* @__PURE__ */ jsx170(Loader22, { className: "h-8 w-8 animate-spin text-ods-accent" }),
25101
- /* @__PURE__ */ jsx170("p", { className: "text-ods-text-secondary", children: loadingMessage })
25102
- ]
25103
- }
25104
- )
25090
+ // The EXACT skeleton every embed shows while its iframe loads
25091
+ // (`EmbedIframe`'s `EmbedLoadingSkeleton`) so a viewer still
25092
+ // RESOLVING where its frame points (ClaudeEmbed probing for a mirror,
25093
+ // before it has a `src`) reads 1:1 with the Figma/Sheets/PDF loading
25094
+ // state, then settles into the iframe in place.
25095
+ /* @__PURE__ */ jsx170(EmbedLoadingSkeleton, { height })
25105
25096
  ) : (
25106
25097
  // The SAME box the iframe would have filled: same height, same rounded
25107
25098
  // border. A viewer whose content is missing must not collapse the page
@@ -25236,7 +25227,6 @@ function ClaudeEmbed({ url, kind = "artifact", title, height, loading = "lazy" }
25236
25227
  title: title?.trim() || KIND_HEADING[kind],
25237
25228
  titleVariant: "h6",
25238
25229
  isLoading: isProbing,
25239
- loadingMessage: "Loading artifact\u2026",
25240
25230
  actions: /* @__PURE__ */ jsx172(
25241
25231
  Button,
25242
25232
  {
@@ -30724,7 +30714,7 @@ function useThemeToggle() {
30724
30714
 
30725
30715
  // src/components/features/array-entry-manager.tsx
30726
30716
  import { useState as useState64, useEffect as useEffect52 } from "react";
30727
- import { Trash2, Plus as Plus2, Save, Loader2 as Loader23 } from "lucide-react";
30717
+ import { Trash2, Plus as Plus2, Save, Loader2 as Loader22 } from "lucide-react";
30728
30718
  import { jsx as jsx217, jsxs as jsxs165 } from "react/jsx-runtime";
30729
30719
  function ArrayEntryManager({
30730
30720
  title,
@@ -30808,7 +30798,7 @@ function ArrayEntryManager({
30808
30798
  size: "small-legacy",
30809
30799
  onClick: handleSave,
30810
30800
  disabled: isSaving,
30811
- leftIcon: isSaving ? /* @__PURE__ */ jsx217(Loader23, { className: "h-4 w-4 animate-spin" }) : /* @__PURE__ */ jsx217(Save, { className: "h-4 w-4" }),
30801
+ leftIcon: isSaving ? /* @__PURE__ */ jsx217(Loader22, { className: "h-4 w-4 animate-spin" }) : /* @__PURE__ */ jsx217(Save, { className: "h-4 w-4" }),
30812
30802
  className: "text-h6 bg-ods-accent text-ods-text-on-accent hover:bg-ods-accent-hover",
30813
30803
  children: isSaving ? "Saving..." : saveButtonText
30814
30804
  }
@@ -33477,7 +33467,7 @@ import {
33477
33467
  Image as ImageIcon2,
33478
33468
  Video as VideoIcon,
33479
33469
  Trash2 as Trash23,
33480
- Loader2 as Loader24,
33470
+ Loader2 as Loader23,
33481
33471
  GripVertical,
33482
33472
  Plus as Plus4
33483
33473
  } from "lucide-react";
@@ -33564,7 +33554,7 @@ function MediaGalleryManager({
33564
33554
  onClick: () => handleDeleteMedia(index),
33565
33555
  disabled: isDeleting,
33566
33556
  className: "h-8 w-8 p-0 bg-ods-error hover:bg-ods-error-hover border-ods-error",
33567
- children: isDeleting ? /* @__PURE__ */ jsx246(Loader24, { className: "h-4 w-4 animate-spin text-ods-text-on-dark" }) : /* @__PURE__ */ jsx246(Trash23, { className: "h-4 w-4 text-ods-text-on-dark" })
33557
+ children: isDeleting ? /* @__PURE__ */ jsx246(Loader23, { className: "h-4 w-4 animate-spin text-ods-text-on-dark" }) : /* @__PURE__ */ jsx246(Trash23, { className: "h-4 w-4 text-ods-text-on-dark" })
33568
33558
  }
33569
33559
  ) }),
33570
33560
  /* @__PURE__ */ jsx246("div", { className: "aspect-video relative bg-ods-bg rounded-lg overflow-hidden", children: mediaItem.media_type === "video" || mediaItem.media_type === "demo" ? (
@@ -33595,7 +33585,7 @@ function MediaGalleryManager({
33595
33585
  }, [deletingIndex, handleDragStart, handleDragOver, handleDrop, handleDeleteMedia]);
33596
33586
  const content = /* @__PURE__ */ jsxs187("div", { className: `space-y-6 ${className}`, children: [
33597
33587
  /* @__PURE__ */ jsx246("div", { className: "border-2 border-dashed border-ods-border rounded-lg p-6 text-center hover:border-ods-accent/50 transition-colors", children: /* @__PURE__ */ jsxs187("div", { className: "flex flex-col items-center gap-4", children: [
33598
- /* @__PURE__ */ jsx246("div", { className: "w-12 h-12 rounded-full bg-ods-card flex items-center justify-center", children: isUploading ? /* @__PURE__ */ jsx246(Loader24, { className: "h-6 w-6 animate-spin text-ods-accent" }) : /* @__PURE__ */ jsx246(Upload, { className: "h-6 w-6 text-ods-accent" }) }),
33588
+ /* @__PURE__ */ jsx246("div", { className: "w-12 h-12 rounded-full bg-ods-card flex items-center justify-center", children: isUploading ? /* @__PURE__ */ jsx246(Loader23, { className: "h-6 w-6 animate-spin text-ods-accent" }) : /* @__PURE__ */ jsx246(Upload, { className: "h-6 w-6 text-ods-accent" }) }),
33599
33589
  /* @__PURE__ */ jsxs187("div", { children: [
33600
33590
  /* @__PURE__ */ jsx246("h3", { className: "text-h3 text-ods-text-primary mb-1", children: isUploading ? "Uploading..." : "Upload Media" }),
33601
33591
  /* @__PURE__ */ jsx246("p", { className: "text-h6 text-ods-text-secondary", children: "Drag and drop or click to select images and videos" }),
@@ -34259,7 +34249,7 @@ function PushButtonSelector({
34259
34249
 
34260
34250
  // src/components/features/release-media-manager.tsx
34261
34251
  import { useState as useState73, useRef as useRef42 } from "react";
34262
- import { Trash2 as Trash24, Plus as Plus5, Image as ImageIcon3, Video as VideoIcon2, Upload as Upload2, Loader2 as Loader25, GripVertical as GripVertical2 } from "lucide-react";
34252
+ import { Trash2 as Trash24, Plus as Plus5, Image as ImageIcon3, Video as VideoIcon2, Upload as Upload2, Loader2 as Loader24, GripVertical as GripVertical2 } from "lucide-react";
34263
34253
  import { jsx as jsx253, jsxs as jsxs193 } from "react/jsx-runtime";
34264
34254
  function ReleaseMediaManager({
34265
34255
  media,
@@ -34339,7 +34329,7 @@ function ReleaseMediaManager({
34339
34329
  };
34340
34330
  return /* @__PURE__ */ jsxs193("div", { className: `space-y-4 ${className}`, children: [
34341
34331
  /* @__PURE__ */ jsx253("div", { className: "border-2 border-dashed border-ods-border rounded-lg p-6 text-center hover:border-ods-accent/50 transition-colors", children: /* @__PURE__ */ jsxs193("div", { className: "flex flex-col items-center gap-4", children: [
34342
- /* @__PURE__ */ jsx253("div", { className: "w-12 h-12 rounded-full bg-ods-card flex items-center justify-center", children: uploadingIndex !== null ? /* @__PURE__ */ jsx253(Loader25, { className: "h-6 w-6 animate-spin text-ods-accent" }) : /* @__PURE__ */ jsx253(Upload2, { className: "h-6 w-6 text-ods-accent" }) }),
34332
+ /* @__PURE__ */ jsx253("div", { className: "w-12 h-12 rounded-full bg-ods-card flex items-center justify-center", children: uploadingIndex !== null ? /* @__PURE__ */ jsx253(Loader24, { className: "h-6 w-6 animate-spin text-ods-accent" }) : /* @__PURE__ */ jsx253(Upload2, { className: "h-6 w-6 text-ods-accent" }) }),
34343
34333
  /* @__PURE__ */ jsxs193("div", { children: [
34344
34334
  /* @__PURE__ */ jsx253("h3", { className: "text-h3 text-ods-text-primary mb-1", children: uploadingIndex !== null ? "Uploading..." : "Upload Media" }),
34345
34335
  /* @__PURE__ */ jsx253("p", { className: "text-h6 text-ods-text-secondary", children: "Drag and drop or click to select images and videos" }),
@@ -34415,7 +34405,7 @@ function ReleaseMediaManager({
34415
34405
  }
34416
34406
  ) }),
34417
34407
  item._uploading && /* @__PURE__ */ jsx253("div", { className: "aspect-video bg-ods-bg flex items-center justify-center", children: /* @__PURE__ */ jsxs193("div", { className: "flex flex-col items-center gap-2", children: [
34418
- /* @__PURE__ */ jsx253(Loader25, { className: "h-8 w-8 animate-spin text-ods-accent" }),
34408
+ /* @__PURE__ */ jsx253(Loader24, { className: "h-8 w-8 animate-spin text-ods-accent" }),
34419
34409
  /* @__PURE__ */ jsx253("span", { className: "text-h6 text-ods-text-secondary", children: "Uploading..." })
34420
34410
  ] }) }),
34421
34411
  /* @__PURE__ */ jsxs193("div", { className: "p-3 space-y-2", children: [
@@ -34530,7 +34520,7 @@ SelectButton.displayName = "SelectButton";
34530
34520
 
34531
34521
  // src/components/features/seo-editor-preview.tsx
34532
34522
  import { useState as useState74 } from "react";
34533
- import { Globe as Globe3, ExternalLink as ExternalLink8, Upload as Upload3, X as X6, Loader2 as Loader26 } from "lucide-react";
34523
+ import { Globe as Globe3, ExternalLink as ExternalLink8, Upload as Upload3, X as X6, Loader2 as Loader25 } from "lucide-react";
34534
34524
  import { Fragment as Fragment47, jsx as jsx255, jsxs as jsxs195 } from "react/jsx-runtime";
34535
34525
  var SEO_MEDIA_BOX_HEIGHT = "h-[280px]";
34536
34526
  function SEOEditorPreview({
@@ -34714,7 +34704,7 @@ function SEOEditorPreview({
34714
34704
  {
34715
34705
  className: cn(SEO_MEDIA_BOX_HEIGHT, "border-2 border-dashed border-ods-border rounded-lg flex flex-col items-center justify-center cursor-pointer hover:border-ods-accent transition-colors bg-ods-bg-hover"),
34716
34706
  onClick: () => onOgImageUpload && fileInputRef?.click(),
34717
- children: isUploading ? /* @__PURE__ */ jsx255(Loader26, { className: "h-8 w-8 animate-spin text-ods-accent" }) : /* @__PURE__ */ jsxs195(Fragment47, { children: [
34707
+ children: isUploading ? /* @__PURE__ */ jsx255(Loader25, { className: "h-8 w-8 animate-spin text-ods-accent" }) : /* @__PURE__ */ jsxs195(Fragment47, { children: [
34718
34708
  /* @__PURE__ */ jsx255(Upload3, { className: "h-8 w-8 text-ods-text-secondary mb-2" }),
34719
34709
  /* @__PURE__ */ jsx255("span", { className: "text-h6 text-ods-text-secondary", children: onOgImageUpload ? "Click to upload OG image" : "No image" })
34720
34710
  ] })
@@ -35017,7 +35007,7 @@ function StatusFilterComponent({
35017
35007
 
35018
35008
  // src/components/features/tags-selector.tsx
35019
35009
  import { useState as useState75 } from "react";
35020
- import { Search as Search2, X as X7, Plus as Plus6, Loader2 as Loader27 } from "lucide-react";
35010
+ import { Search as Search2, X as X7, Plus as Plus6, Loader2 as Loader26 } from "lucide-react";
35021
35011
  import { jsx as jsx259, jsxs as jsxs198 } from "react/jsx-runtime";
35022
35012
  function TagsSelector({
35023
35013
  availableTags,
@@ -35158,7 +35148,7 @@ function TagsSelector({
35158
35148
  type: "button",
35159
35149
  onClick: handleCreateTag,
35160
35150
  disabled: isCreating,
35161
- leftIcon: isCreating ? /* @__PURE__ */ jsx259(Loader27, { className: "w-3 h-3 animate-spin" }) : /* @__PURE__ */ jsx259(Plus6, { className: "w-3 h-3" }),
35151
+ leftIcon: isCreating ? /* @__PURE__ */ jsx259(Loader26, { className: "w-3 h-3 animate-spin" }) : /* @__PURE__ */ jsx259(Plus6, { className: "w-3 h-3" }),
35162
35152
  className: "w-full flex flex-row items-center gap-1.5 px-2 py-1 mb-2 h-auto rounded border-dashed border-ods-accent bg-ods-bg hover:bg-ods-card text-ods-accent !text-h6",
35163
35153
  children: [
35164
35154
  "Create tag: ",
@@ -36388,7 +36378,7 @@ var AIWarningsSection = ({
36388
36378
 
36389
36379
  // src/components/features/ai-enrich/AIEnrichSection.tsx
36390
36380
  init_button2();
36391
- import { CheckCircle as CheckCircle2, AlertCircle, Loader2 as Loader28, X as X9 } from "lucide-react";
36381
+ import { CheckCircle as CheckCircle2, AlertCircle, Loader2 as Loader27, X as X9 } from "lucide-react";
36392
36382
  import { jsx as jsx269, jsxs as jsxs206 } from "react/jsx-runtime";
36393
36383
  var AIEnrichSection = ({
36394
36384
  onEnrich,
@@ -36502,7 +36492,7 @@ var AIEnrichSection = ({
36502
36492
  size: "small-legacy",
36503
36493
  onClick: onCancel,
36504
36494
  disabled: isCancelling,
36505
- leftIcon: isCancelling ? /* @__PURE__ */ jsx269(Loader28, { className: "h-4 w-4 animate-spin" }) : /* @__PURE__ */ jsx269(X9, { className: "h-4 w-4" }),
36495
+ leftIcon: isCancelling ? /* @__PURE__ */ jsx269(Loader27, { className: "h-4 w-4 animate-spin" }) : /* @__PURE__ */ jsx269(X9, { className: "h-4 w-4" }),
36506
36496
  className: "!w-full",
36507
36497
  children: isCancelling ? "Cancelling..." : "Cancel Processing"
36508
36498
  }
@@ -36523,7 +36513,7 @@ var AIEnrichSection = ({
36523
36513
  )) })
36524
36514
  ] }),
36525
36515
  loading && statusMessage && /* @__PURE__ */ jsxs206("div", { className: "flex items-center gap-3 p-3 rounded-lg bg-ods-bg-surface", children: [
36526
- /* @__PURE__ */ jsx269(Loader28, { className: "h-5 w-5 text-ods-accent animate-spin" }),
36516
+ /* @__PURE__ */ jsx269(Loader27, { className: "h-5 w-5 text-ods-accent animate-spin" }),
36527
36517
  /* @__PURE__ */ jsx269("span", { className: "text-h6 text-ods-text-primary", children: statusMessage })
36528
36518
  ] }),
36529
36519
  hasResults && /* @__PURE__ */ jsxs206("div", { className: "space-y-4", children: [
@@ -48112,7 +48102,7 @@ function TagSearchInput({
48112
48102
  // src/components/ui/markdown-editor.tsx
48113
48103
  import { useRef as useRef71, useCallback as useCallback49, useState as useState110, useEffect as useEffect85 } from "react";
48114
48104
  init_cn();
48115
- import { Loader2 as Loader29, Upload as Upload8 } from "lucide-react";
48105
+ import { Loader2 as Loader28, Upload as Upload8 } from "lucide-react";
48116
48106
  import { jsx as jsx369, jsxs as jsxs289 } from "react/jsx-runtime";
48117
48107
  var MDEditor = dynamic(() => import("@uiw/react-md-editor"), { ssr: false });
48118
48108
  var MARKDOWN_EDITOR_STYLE_ID = "ods-markdown-editor-styles";
@@ -48252,7 +48242,7 @@ function MarkdownEditor({
48252
48242
  name: "upload",
48253
48243
  keyCommand: "upload",
48254
48244
  buttonProps: { "aria-label": "Upload file", title: "Upload file" },
48255
- icon: isUploading ? /* @__PURE__ */ jsx369(Loader29, { className: "w-3 h-3 animate-spin" }) : /* @__PURE__ */ jsx369(Upload8, { className: "w-3 h-3" }),
48245
+ icon: isUploading ? /* @__PURE__ */ jsx369(Loader28, { className: "w-3 h-3 animate-spin" }) : /* @__PURE__ */ jsx369(Upload8, { className: "w-3 h-3" }),
48256
48246
  execute: () => {
48257
48247
  fileInputRef.current?.click();
48258
48248
  }
@@ -48340,7 +48330,7 @@ function MarkdownEditor({
48340
48330
  accept: "image/*,.pdf,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.zip,.txt"
48341
48331
  }
48342
48332
  ),
48343
- !MDEditor && /* @__PURE__ */ jsx369("div", { className: "flex items-center justify-center h-64", children: /* @__PURE__ */ jsx369(Loader29, { className: "h-8 w-8 animate-spin" }) }),
48333
+ !MDEditor && /* @__PURE__ */ jsx369("div", { className: "flex items-center justify-center h-64", children: /* @__PURE__ */ jsx369(Loader28, { className: "h-8 w-8 animate-spin" }) }),
48344
48334
  MDEditor && /* @__PURE__ */ jsx369(
48345
48335
  MDEditor,
48346
48336
  {
@@ -48386,7 +48376,7 @@ function MarkdownEditor({
48386
48376
 
48387
48377
  // src/components/ui/file-upload.tsx
48388
48378
  import * as React133 from "react";
48389
- import { Loader2 as Loader210 } from "lucide-react";
48379
+ import { Loader2 as Loader29 } from "lucide-react";
48390
48380
  init_cn();
48391
48381
  import { jsx as jsx370, jsxs as jsxs290 } from "react/jsx-runtime";
48392
48382
  function formatFileSize2(bytes) {
@@ -48624,7 +48614,7 @@ function FileUpload({
48624
48614
  /* @__PURE__ */ jsxs290("div", { className: "flex items-center gap-[var(--spacing-system-xsf)]", children: [
48625
48615
  /* @__PURE__ */ jsx370("span", { className: "text-h6 text-ods-text-secondary", children: formatFileSize2(entry.fileSize) }),
48626
48616
  entry.status === "uploading" && /* @__PURE__ */ jsxs290("span", { className: "flex items-center gap-[var(--spacing-system-xxs)] text-h6 text-ods-text-secondary", children: [
48627
- /* @__PURE__ */ jsx370(Loader210, { className: "size-3 animate-spin" }),
48617
+ /* @__PURE__ */ jsx370(Loader29, { className: "size-3 animate-spin" }),
48628
48618
  "Uploading..."
48629
48619
  ] }),
48630
48620
  entry.status === "error" && /* @__PURE__ */ jsx370("span", { className: "text-h6 text-ods-error", children: entry.error || "Upload failed" })
@@ -48712,7 +48702,7 @@ function FileUpload({
48712
48702
 
48713
48703
  // src/components/ui/image-uploader.tsx
48714
48704
  import * as React134 from "react";
48715
- import { Loader2 as Loader211 } from "lucide-react";
48705
+ import { Loader2 as Loader210 } from "lucide-react";
48716
48706
  init_cn();
48717
48707
  import { Fragment as Fragment74, jsx as jsx371, jsxs as jsxs291 } from "react/jsx-runtime";
48718
48708
  var DEFAULT_MAX_SIZE = 25 * 1024 * 1024;
@@ -48879,8 +48869,8 @@ function ImageUploader({
48879
48869
  }
48880
48870
  )
48881
48871
  ] }),
48882
- loading && /* @__PURE__ */ jsx371("div", { className: "absolute inset-0 flex items-center justify-center rounded-md bg-ods-overlay", children: /* @__PURE__ */ jsx371(Loader211, { className: "size-8 animate-spin text-ods-text-on-dark" }) })
48883
- ] }) : loading ? /* @__PURE__ */ jsx371(Loader211, { className: "size-8 animate-spin text-ods-accent" }) : /* @__PURE__ */ jsxs291(Fragment74, { children: [
48872
+ loading && /* @__PURE__ */ jsx371("div", { className: "absolute inset-0 flex items-center justify-center rounded-md bg-ods-overlay", children: /* @__PURE__ */ jsx371(Loader210, { className: "size-8 animate-spin text-ods-text-on-dark" }) })
48873
+ ] }) : loading ? /* @__PURE__ */ jsx371(Loader210, { className: "size-8 animate-spin text-ods-accent" }) : /* @__PURE__ */ jsxs291(Fragment74, { children: [
48884
48874
  /* @__PURE__ */ jsx371("div", { className: "flex shrink-0 items-center justify-center rounded-full border border-ods-border bg-ods-card p-[var(--spacing-system-s)]", children: /* @__PURE__ */ jsx371(ImagePlusIcon, { className: "size-6 text-ods-text-primary" }) }),
48885
48875
  /* @__PURE__ */ jsxs291("div", { className: "flex w-full flex-col items-center text-center", children: [
48886
48876
  /* @__PURE__ */ jsx371("p", { className: "text-h4 text-ods-text-primary", children: label }),
@@ -63990,4 +63980,4 @@ export {
63990
63980
  LogsList,
63991
63981
  assets
63992
63982
  };
63993
- //# sourceMappingURL=chunk-5NVVVIHJ.js.map
63983
+ //# sourceMappingURL=chunk-7SKYZDEJ.js.map