@flamingo-stack/openframe-frontend-core 0.0.531 → 0.0.532-1706.4487.3

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 (93) hide show
  1. package/dist/{chunk-XD5F25VK.js → chunk-5657HM5K.js} +2 -2
  2. package/dist/{chunk-6W456TWS.js → chunk-6JAIEBYK.js} +2 -2
  3. package/dist/{chunk-VLCQ6HZ3.js → chunk-6VYPCGTN.js} +5 -5
  4. package/dist/{chunk-MJDQXAXV.cjs → chunk-AHZPFPPW.cjs} +26 -26
  5. package/dist/{chunk-MJDQXAXV.cjs.map → chunk-AHZPFPPW.cjs.map} +1 -1
  6. package/dist/{chunk-32DLXUYF.js → chunk-C4EQJ67G.js} +2 -2
  7. package/dist/{chunk-N527DMHC.cjs → chunk-D52PBPO5.cjs} +31 -31
  8. package/dist/{chunk-N527DMHC.cjs.map → chunk-D52PBPO5.cjs.map} +1 -1
  9. package/dist/{chunk-VAFG2AG5.js → chunk-DUWV4BK7.js} +6 -6
  10. package/dist/{chunk-PNY6EOCO.js → chunk-DWTPGKDE.js} +2 -2
  11. package/dist/{chunk-ECXZ6WHK.cjs → chunk-DXHNMMDF.cjs} +87 -87
  12. package/dist/{chunk-ECXZ6WHK.cjs.map → chunk-DXHNMMDF.cjs.map} +1 -1
  13. package/dist/{chunk-O5A744JN.js → chunk-FKI5C6LC.js} +2 -2
  14. package/dist/{chunk-7O5DMB3G.cjs → chunk-I4BCL4PO.cjs} +80 -71
  15. package/dist/chunk-I4BCL4PO.cjs.map +1 -0
  16. package/dist/{chunk-LEWLHSAG.js → chunk-J4JN2NET.js} +2 -2
  17. package/dist/{chunk-PBOP6ELZ.cjs → chunk-JJDYCEVI.cjs} +3 -3
  18. package/dist/{chunk-PBOP6ELZ.cjs.map → chunk-JJDYCEVI.cjs.map} +1 -1
  19. package/dist/{chunk-VADVXY6O.js → chunk-K3O7CSN6.js} +80 -71
  20. package/dist/chunk-K3O7CSN6.js.map +1 -0
  21. package/dist/{chunk-CGUBRBCS.js → chunk-KSHV3HF5.js} +2 -2
  22. package/dist/{chunk-UY3YBHRJ.cjs → chunk-KVKPWEMB.cjs} +37 -37
  23. package/dist/{chunk-UY3YBHRJ.cjs.map → chunk-KVKPWEMB.cjs.map} +1 -1
  24. package/dist/{chunk-PQCHN5YB.js → chunk-MB3QZ2F2.js} +2 -2
  25. package/dist/{chunk-CZM462OL.js → chunk-PC63ZEJN.js} +4 -4
  26. package/dist/{chunk-YQ624GYP.js → chunk-QG4ZZIQI.js} +2 -2
  27. package/dist/{chunk-VH5QSA6J.js → chunk-RJWELEAS.js} +4 -4
  28. package/dist/{chunk-34BEDXMN.cjs → chunk-SLYBC5OV.cjs} +61 -61
  29. package/dist/{chunk-34BEDXMN.cjs.map → chunk-SLYBC5OV.cjs.map} +1 -1
  30. package/dist/{chunk-SZZLUWXD.cjs → chunk-TF27WJD6.cjs} +5 -5
  31. package/dist/{chunk-SZZLUWXD.cjs.map → chunk-TF27WJD6.cjs.map} +1 -1
  32. package/dist/{chunk-SCDSPHXM.cjs → chunk-VLIVYXJ4.cjs} +9 -9
  33. package/dist/{chunk-SCDSPHXM.cjs.map → chunk-VLIVYXJ4.cjs.map} +1 -1
  34. package/dist/{chunk-26F2CUNM.cjs → chunk-XFCXEAXK.cjs} +4 -4
  35. package/dist/{chunk-26F2CUNM.cjs.map → chunk-XFCXEAXK.cjs.map} +1 -1
  36. package/dist/{chunk-KG5ASJ3J.cjs → chunk-XFXZGL4E.cjs} +14 -14
  37. package/dist/{chunk-KG5ASJ3J.cjs.map → chunk-XFXZGL4E.cjs.map} +1 -1
  38. package/dist/{chunk-YO5UTO76.cjs → chunk-XUBTCRTM.cjs} +7 -7
  39. package/dist/{chunk-YO5UTO76.cjs.map → chunk-XUBTCRTM.cjs.map} +1 -1
  40. package/dist/{chunk-4OLXJHIU.cjs → chunk-ZH3K53MI.cjs} +26 -26
  41. package/dist/{chunk-4OLXJHIU.cjs.map → chunk-ZH3K53MI.cjs.map} +1 -1
  42. package/dist/{chunk-SZ36GZNI.cjs → chunk-ZR7XZ33P.cjs} +11 -11
  43. package/dist/{chunk-SZ36GZNI.cjs.map → chunk-ZR7XZ33P.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/index.cjs +3 -3
  53. package/dist/components/embeds/index.js +2 -2
  54. package/dist/components/faq/index.cjs +3 -3
  55. package/dist/components/faq/index.js +2 -2
  56. package/dist/components/features/index.cjs +2 -2
  57. package/dist/components/features/index.js +1 -1
  58. package/dist/components/help-center-pages/index.cjs +22 -22
  59. package/dist/components/help-center-pages/index.js +13 -13
  60. package/dist/components/index.cjs +132 -132
  61. package/dist/components/index.js +11 -11
  62. package/dist/components/meeting-scheduler/index.cjs +34 -34
  63. package/dist/components/meeting-scheduler/index.js +3 -3
  64. package/dist/components/navigation/index.cjs +2 -2
  65. package/dist/components/navigation/index.js +1 -1
  66. package/dist/components/onboarding-guides/index.cjs +5 -5
  67. package/dist/components/onboarding-guides/index.js +4 -4
  68. package/dist/components/related-content/index.cjs +3 -3
  69. package/dist/components/related-content/index.js +2 -2
  70. package/dist/components/tickets/index.cjs +6 -6
  71. package/dist/components/tickets/index.js +5 -5
  72. package/dist/components/ui/index.cjs +2 -2
  73. package/dist/components/ui/index.js +1 -1
  74. package/dist/components/ui/modal-v2.d.ts.map +1 -1
  75. package/dist/index.cjs +2 -2
  76. package/dist/index.js +1 -1
  77. package/package.json +1 -1
  78. package/src/components/ui/modal-v2.tsx +8 -1
  79. package/dist/chunk-7O5DMB3G.cjs.map +0 -1
  80. package/dist/chunk-VADVXY6O.js.map +0 -1
  81. /package/dist/{chunk-XD5F25VK.js.map → chunk-5657HM5K.js.map} +0 -0
  82. /package/dist/{chunk-6W456TWS.js.map → chunk-6JAIEBYK.js.map} +0 -0
  83. /package/dist/{chunk-VLCQ6HZ3.js.map → chunk-6VYPCGTN.js.map} +0 -0
  84. /package/dist/{chunk-32DLXUYF.js.map → chunk-C4EQJ67G.js.map} +0 -0
  85. /package/dist/{chunk-VAFG2AG5.js.map → chunk-DUWV4BK7.js.map} +0 -0
  86. /package/dist/{chunk-PNY6EOCO.js.map → chunk-DWTPGKDE.js.map} +0 -0
  87. /package/dist/{chunk-O5A744JN.js.map → chunk-FKI5C6LC.js.map} +0 -0
  88. /package/dist/{chunk-LEWLHSAG.js.map → chunk-J4JN2NET.js.map} +0 -0
  89. /package/dist/{chunk-CGUBRBCS.js.map → chunk-KSHV3HF5.js.map} +0 -0
  90. /package/dist/{chunk-PQCHN5YB.js.map → chunk-MB3QZ2F2.js.map} +0 -0
  91. /package/dist/{chunk-CZM462OL.js.map → chunk-PC63ZEJN.js.map} +0 -0
  92. /package/dist/{chunk-YQ624GYP.js.map → chunk-QG4ZZIQI.js.map} +0 -0
  93. /package/dist/{chunk-VH5QSA6J.js.map → chunk-RJWELEAS.js.map} +0 -0
@@ -4,7 +4,7 @@ import {
4
4
  formatFileSize,
5
5
  toGoogleSheetsEmbedUrl,
6
6
  toGoogleSheetsOriginalUrl
7
- } from "./chunk-VADVXY6O.js";
7
+ } from "./chunk-K3O7CSN6.js";
8
8
  import {
9
9
  AdobePdfIcon,
10
10
  GoogleSheetsIcon
@@ -134,4 +134,4 @@ export {
134
134
  GoogleSheetsViewer,
135
135
  FileDownloadCard
136
136
  };
137
- //# sourceMappingURL=chunk-LEWLHSAG.js.map
137
+ //# sourceMappingURL=chunk-J4JN2NET.js.map
@@ -2,7 +2,7 @@
2
2
 
3
3
 
4
4
 
5
- var _chunk26F2CUNMcjs = require('./chunk-26F2CUNM.cjs');
5
+ var _chunkXFCXEAXKcjs = require('./chunk-XFCXEAXK.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 = (_chunk26F2CUNMcjs.init_unified_pagination.call(void 0, ), _chunkVRHGVLSLcjs.__toCommonJS.call(void 0, _chunk26F2CUNMcjs.unified_pagination_exports)).UnifiedPagination;
115
+ const PaginationComponent = (_chunkXFCXEAXKcjs.init_unified_pagination.call(void 0, ), _chunkVRHGVLSLcjs.__toCommonJS.call(void 0, _chunkXFCXEAXKcjs.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-PBOP6ELZ.cjs.map
175
+ //# sourceMappingURL=chunk-JJDYCEVI.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/openframe-oss-lib/openframe-oss-lib/openframe-frontend-core/dist/chunk-PBOP6ELZ.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-PBOP6ELZ.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-JJDYCEVI.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-JJDYCEVI.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} "]}
@@ -10871,76 +10871,85 @@ var Modal = React26.forwardRef(
10871
10871
  }, [isOpen, onClose]);
10872
10872
  if (!isMounted) return null;
10873
10873
  const state = isOpen ? "open" : "closed";
10874
- return /* @__PURE__ */ jsx57(RemoveScroll, { enabled: isOpen, removeScrollBar: false, children: /* @__PURE__ */ jsxs46(
10875
- "div",
10876
- {
10877
- className: "fixed inset-0 z-[1300] flex items-end md:items-center justify-center transition-[padding] duration-200",
10878
- style: { paddingBottom: "var(--of-keyboard-inset, 0px)" },
10879
- children: [
10880
- /* @__PURE__ */ jsx57(
10881
- "div",
10882
- {
10883
- "data-state": state,
10884
- className: cn(
10885
- "absolute inset-0 bg-ods-overlay backdrop-blur-[2px] md:backdrop-blur-none",
10886
- "duration-200 fill-mode-forwards",
10887
- "data-[state=open]:animate-in data-[state=open]:fade-in-0",
10888
- "data-[state=closed]:animate-out data-[state=closed]:fade-out-0",
10889
- // Hold the hidden end-state until unmount so the backdrop doesn't
10890
- // flash back to full opacity when the animation finishes a frame
10891
- // before the unmount timeout fires.
10892
- "data-[state=closed]:fill-mode-forwards"
10893
- ),
10894
- onClick: onClose,
10895
- "aria-hidden": "true"
10896
- }
10897
- ),
10898
- /* @__PURE__ */ jsx57(
10899
- "div",
10900
- {
10901
- ref: (node) => {
10902
- panelRef.current = node;
10903
- if (typeof ref === "function") ref(node);
10904
- else if (ref) ref.current = node;
10905
- },
10906
- tabIndex: -1,
10907
- "data-state": state,
10908
- className: cn(
10909
- // min() keeps the desktop cap at 28rem while never letting content
10910
- // stretch the panel past the viewport (minus the mx-4 margins) on
10911
- // narrow screens. A single base utility (not md:max-w-md) so consumer
10912
- // max-w-* overrides via className still win at every breakpoint.
10913
- "relative z-10 w-full min-w-0 max-w-[min(28rem,calc(100vw-2rem))] flex flex-col",
10914
- "mx-4 mb-4 md:mb-0",
10915
- // dvh, not vh: vh ignores a mobile browser's retracting URL bar, so
10916
- // 90vh already overflowed behind Safari's toolbar. The `100%-2rem`
10917
- // arm resolves against the keyboard-padded wrapper above and caps
10918
- // the panel to what's left of it, less the 1rem `mb-4` and a
10919
- // matching 1rem of breathing room at the top header and footer
10920
- // stay pinned, ModalV2Content scrolls. min() picks 90dvh on any
10921
- // viewport over 320px tall, so desktop is untouched.
10922
- "max-h-[min(90dvh,100%-2rem)]",
10923
- "bg-ods-bg md:bg-ods-card",
10924
- "border border-ods-border rounded-md shadow-xl",
10925
- "p-[var(--spacing-system-xl)] gap-[var(--spacing-system-l)]",
10926
- "duration-200 fill-mode-forwards",
10927
- "data-[state=open]:animate-in data-[state=open]:fade-in-0",
10928
- "data-[state=open]:slide-in-from-bottom-4 md:data-[state=open]:slide-in-from-bottom-0 md:data-[state=open]:zoom-in-95",
10929
- "data-[state=closed]:animate-out data-[state=closed]:fade-out-0",
10930
- "data-[state=closed]:slide-out-to-bottom-4 md:data-[state=closed]:slide-out-to-bottom-0 md:data-[state=closed]:zoom-out-95",
10931
- // Hold the hidden end-state until unmount so the panel doesn't snap
10932
- // back to opacity/scale 1 for a frame before it unmounts.
10933
- "data-[state=closed]:fill-mode-forwards",
10934
- className
10935
- ),
10936
- role: "dialog",
10937
- "aria-modal": "true",
10938
- children: /* @__PURE__ */ jsx57(ModalContext.Provider, { value: { onClose }, children })
10939
- }
10940
- )
10941
- ]
10942
- }
10943
- ) });
10874
+ return (
10875
+ // `forwardProps` — RemoveScroll's default is to WRAP its children in a
10876
+ // plain <div>. That wrapper is in normal flow, so a modal rendered inside
10877
+ // a `flex`/`grid` container with a `gap` became an extra (zero-height)
10878
+ // track the moment it opened, shifting every sibling below it down by one
10879
+ // gap. Cloning onto the child instead leaves only the `fixed` overlay,
10880
+ // which is out of flow and therefore not a flex/grid item at all.
10881
+ // The child must stay a single element for `Children.only`.
10882
+ /* @__PURE__ */ jsx57(RemoveScroll, { enabled: isOpen, removeScrollBar: false, forwardProps: true, children: /* @__PURE__ */ jsxs46(
10883
+ "div",
10884
+ {
10885
+ className: "fixed inset-0 z-[1300] flex items-end md:items-center justify-center transition-[padding] duration-200",
10886
+ style: { paddingBottom: "var(--of-keyboard-inset, 0px)" },
10887
+ children: [
10888
+ /* @__PURE__ */ jsx57(
10889
+ "div",
10890
+ {
10891
+ "data-state": state,
10892
+ className: cn(
10893
+ "absolute inset-0 bg-ods-overlay backdrop-blur-[2px] md:backdrop-blur-none",
10894
+ "duration-200 fill-mode-forwards",
10895
+ "data-[state=open]:animate-in data-[state=open]:fade-in-0",
10896
+ "data-[state=closed]:animate-out data-[state=closed]:fade-out-0",
10897
+ // Hold the hidden end-state until unmount so the backdrop doesn't
10898
+ // flash back to full opacity when the animation finishes a frame
10899
+ // before the unmount timeout fires.
10900
+ "data-[state=closed]:fill-mode-forwards"
10901
+ ),
10902
+ onClick: onClose,
10903
+ "aria-hidden": "true"
10904
+ }
10905
+ ),
10906
+ /* @__PURE__ */ jsx57(
10907
+ "div",
10908
+ {
10909
+ ref: (node) => {
10910
+ panelRef.current = node;
10911
+ if (typeof ref === "function") ref(node);
10912
+ else if (ref) ref.current = node;
10913
+ },
10914
+ tabIndex: -1,
10915
+ "data-state": state,
10916
+ className: cn(
10917
+ // min() keeps the desktop cap at 28rem while never letting content
10918
+ // stretch the panel past the viewport (minus the mx-4 margins) on
10919
+ // narrow screens. A single base utility (not md:max-w-md) so consumer
10920
+ // max-w-* overrides via className still win at every breakpoint.
10921
+ "relative z-10 w-full min-w-0 max-w-[min(28rem,calc(100vw-2rem))] flex flex-col",
10922
+ "mx-4 mb-4 md:mb-0",
10923
+ // dvh, not vh: vh ignores a mobile browser's retracting URL bar, so
10924
+ // 90vh already overflowed behind Safari's toolbar. The `100%-2rem`
10925
+ // arm resolves against the keyboard-padded wrapper above and caps
10926
+ // the panel to what's left of it, less the 1rem `mb-4` and a
10927
+ // matching 1rem of breathing room at the top — header and footer
10928
+ // stay pinned, ModalV2Content scrolls. min() picks 90dvh on any
10929
+ // viewport over 320px tall, so desktop is untouched.
10930
+ "max-h-[min(90dvh,100%-2rem)]",
10931
+ "bg-ods-bg md:bg-ods-card",
10932
+ "border border-ods-border rounded-md shadow-xl",
10933
+ "p-[var(--spacing-system-xl)] gap-[var(--spacing-system-l)]",
10934
+ "duration-200 fill-mode-forwards",
10935
+ "data-[state=open]:animate-in data-[state=open]:fade-in-0",
10936
+ "data-[state=open]:slide-in-from-bottom-4 md:data-[state=open]:slide-in-from-bottom-0 md:data-[state=open]:zoom-in-95",
10937
+ "data-[state=closed]:animate-out data-[state=closed]:fade-out-0",
10938
+ "data-[state=closed]:slide-out-to-bottom-4 md:data-[state=closed]:slide-out-to-bottom-0 md:data-[state=closed]:zoom-out-95",
10939
+ // Hold the hidden end-state until unmount so the panel doesn't snap
10940
+ // back to opacity/scale 1 for a frame before it unmounts.
10941
+ "data-[state=closed]:fill-mode-forwards",
10942
+ className
10943
+ ),
10944
+ role: "dialog",
10945
+ "aria-modal": "true",
10946
+ children: /* @__PURE__ */ jsx57(ModalContext.Provider, { value: { onClose }, children })
10947
+ }
10948
+ )
10949
+ ]
10950
+ }
10951
+ ) })
10952
+ );
10944
10953
  }
10945
10954
  );
10946
10955
  Modal.displayName = "ModalV2";
@@ -62107,4 +62116,4 @@ export {
62107
62116
  LogsList,
62108
62117
  assets
62109
62118
  };
62110
- //# sourceMappingURL=chunk-VADVXY6O.js.map
62119
+ //# sourceMappingURL=chunk-K3O7CSN6.js.map