jattac.libs.web.responsive-table 0.12.0 → 0.13.0

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.
package/dist/index.es.js CHANGED
@@ -6,7 +6,7 @@ function styleInject(css, ref) {
6
6
  if ( ref === void 0 ) ref = {};
7
7
  var insertAt = ref.insertAt;
8
8
 
9
- if (!css || typeof document === 'undefined') { return; }
9
+ if (typeof document === 'undefined') { return; }
10
10
 
11
11
  var head = document.head || document.getElementsByTagName('head')[0];
12
12
  var style = document.createElement('style');
@@ -29,9 +29,9 @@ function styleInject(css, ref) {
29
29
  }
30
30
  }
31
31
 
32
- var css_248z$2 = ".ResponsiveTable-module_responsiveTable__4y-Od{--table-border-color:#e0e0e0;--table-header-bg:#f8f9fa;--table-row-hover-bg:#f1f3f5;--table-row-stripe-bg:#fafbfc;--card-bg:#fff;--card-border-color:#d1d5db;--card-shadow:0 2px 8px rgba(0,0,0,.06);--text-color:#212529;--text-color-muted:#6c757d;--interactive-color:#0056b3;--primary-color:#007bff;--rt-mobile-card-shadow:0 1px 2px rgba(0,0,0,.04),0 4px 12px rgba(0,0,0,.06),0 12px 32px rgba(0,0,0,.04);--rt-mobile-card-radius:16px;--rt-mobile-bg-wash:#f1f5f9;--rt-mobile-label-color:#475569;--rt-mobile-value-color:#1e293b}.ResponsiveTable-module_tableContainer__VjWjH{border:1px solid var(--table-border-color);border-radius:8px;overflow-x:auto;width:100%}.ResponsiveTable-module_responsiveTable__4y-Od{background-color:var(--card-bg);border-collapse:collapse;color:var(--text-color);width:100%}.ResponsiveTable-module_responsiveTable__4y-Od thead th{background-color:var(--table-header-bg);border-bottom:2px solid var(--table-border-color);color:var(--text-color-muted);font-size:.75rem;font-weight:600;letter-spacing:.05em;padding:1rem;text-align:left;text-transform:uppercase;z-index:1}.ResponsiveTable-module_responsiveTable__4y-Od td{border-bottom:1px solid var(--table-border-color);font-size:.9rem;padding:1rem;text-align:left}.ResponsiveTable-module_responsiveTable__4y-Od tr:last-child td{border-bottom:none}.ResponsiveTable-module_responsiveTable__4y-Od tr:nth-child(2n){background-color:var(--table-row-stripe-bg)}.ResponsiveTable-module_responsiveTable__4y-Od tr:hover{background-color:var(--table-row-hover-bg)}.ResponsiveTable-module_cardContainer__Het4h{background-color:var(--rt-mobile-bg-wash);border-radius:var(--rt-mobile-card-radius);display:flex;flex-direction:column;gap:1.25rem;padding:1rem}.ResponsiveTable-module_card__b-U2v{background-color:var(--card-bg);border:1px solid var(--card-border-color);border-bottom:3px solid var(--primary-color);border-radius:var(--rt-mobile-card-radius);box-shadow:var(--rt-mobile-card-shadow);overflow:hidden;padding:1rem;transition:box-shadow .2s ease-in-out,transform .2s ease-in-out}.ResponsiveTable-module_card__b-U2v:hover{box-shadow:0 2px 4px rgba(0,0,0,.06),0 8px 24px rgba(0,0,0,.08),0 16px 48px rgba(0,0,0,.06);transform:translateY(-4px)}.ResponsiveTable-module_card-header__Ttk51{border-bottom:1px solid var(--table-border-color);margin-bottom:1rem;padding-bottom:.5rem}.ResponsiveTable-module_card-row__qvIUJ{align-items:flex-start;display:flex;gap:1rem;justify-content:space-between;margin:0 0 .75rem}.ResponsiveTable-module_card-row__qvIUJ.ResponsiveTable-module_stacked__FSaTB{align-items:stretch;flex-direction:column;gap:.25rem;margin-bottom:1rem}.ResponsiveTable-module_card-row__qvIUJ:last-child{margin-bottom:0}.ResponsiveTable-module_card-label__v9L71{color:var(--rt-mobile-label-color);font-size:.75rem;font-weight:600;text-transform:uppercase;white-space:nowrap}.ResponsiveTable-module_card-value__BO-c-{color:var(--rt-mobile-value-color);font-size:.95rem;text-align:right}.ResponsiveTable-module_card-row__qvIUJ.ResponsiveTable-module_stacked__FSaTB .ResponsiveTable-module_card-value__BO-c-{text-align:left}.ResponsiveTable-module_numberValue__-TLR1{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;text-align:right!important}.ResponsiveTable-module_dateValue__UMvqJ{color:var(--text-color-muted);font-size:.85rem}.ResponsiveTable-module_imageValue__wVb-p img{border-radius:8px;height:auto;max-width:100%;object-fit:cover}.ResponsiveTable-module_inputValue__CrGMx{margin-top:.5rem;width:100%}.ResponsiveTable-module_inputValue__CrGMx button,.ResponsiveTable-module_inputValue__CrGMx input[type=text],.ResponsiveTable-module_inputValue__CrGMx select,.ResponsiveTable-module_inputValue__CrGMx textarea{min-height:44px;width:100%!important}.ResponsiveTable-module_clickableRow__0kjWm{cursor:pointer}.ResponsiveTable-module_responsiveTable__4y-Od tbody tr{transition:background-color .12s ease}.ResponsiveTable-module_responsiveTable__4y-Od tbody tr.ResponsiveTable-module_clickableRow__0kjWm:active{background-color:var(--table-row-active-bg,#dde3ea);transition:background-color .08s ease}.ResponsiveTable-module_responsiveTable__4y-Od tbody tr.ResponsiveTable-module_clickableRow__0kjWm:focus-visible{outline:2px solid var(--primary-color,#3b82f6);outline-offset:-2px}.ResponsiveTable-module_card__b-U2v.ResponsiveTable-module_clickableRow__0kjWm:active{box-shadow:0 1px 3px rgba(0,0,0,.08);transform:translateY(-1px);transition:transform .08s ease,box-shadow .08s ease}.ResponsiveTable-module_card__b-U2v.ResponsiveTable-module_clickableRow__0kjWm:focus-visible{outline:2px solid var(--primary-color,#3b82f6);outline-offset:-2px}.ResponsiveTable-module_clickableHeader__xHQhF{cursor:pointer;transition:color .2s}.ResponsiveTable-module_clickableHeader__xHQhF:hover{color:var(--interactive-color)}.ResponsiveTable-module_sortable__yvA60{cursor:pointer}.ResponsiveTable-module_sorted-asc__jzOIa,.ResponsiveTable-module_sorted-desc__7WCFK{background-color:#f0f7ff!important;color:var(--interactive-color)!important}.ResponsiveTable-module_headerInnerWrapper__3VAhD{align-items:center;display:flex;justify-content:space-between;width:100%}.ResponsiveTable-module_headerContent__ODMzS{flex-grow:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ResponsiveTable-module_sortIcon__A9WtD{background-position:50%;background-repeat:no-repeat;background-size:contain;flex-shrink:0;height:1rem;margin-left:.5rem;opacity:.3;width:1rem}.ResponsiveTable-module_sortable__yvA60:hover .ResponsiveTable-module_sortIcon__A9WtD{opacity:.8}.ResponsiveTable-module_sortable__yvA60 .ResponsiveTable-module_sortIcon__A9WtD{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%236c757d'%3E%3Cpath d='M10 18h4v-2h-4v2zm-6-8v2h16V8H4zm3-6h10v2H7V2z'/%3E%3C/svg%3E\")}.ResponsiveTable-module_sorted-asc__jzOIa .ResponsiveTable-module_sortIcon__A9WtD{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%230056b3'%3E%3Cpath d='m7 14 5-5 5 5z'/%3E%3C/svg%3E\");opacity:1}.ResponsiveTable-module_sorted-desc__7WCFK .ResponsiveTable-module_sortIcon__A9WtD{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%230056b3'%3E%3Cpath d='m7 10 5 5 5-5z'/%3E%3C/svg%3E\");opacity:1}.ResponsiveTable-module_responsiveTable__4y-Od tfoot{background-color:var(--table-header-bg);border-top:2px solid var(--table-border-color)}.ResponsiveTable-module_footerCell__8H-uG{font-size:.9rem;font-weight:600;padding:1rem;text-align:right}.ResponsiveTable-module_clickableFooterCell__WB9Ss{color:var(--interactive-color);cursor:pointer}.ResponsiveTable-module_clickableFooterCell__WB9Ss:hover{text-decoration:underline}.ResponsiveTable-module_footerCard__-NE2M{background-color:var(--table-header-bg);border:1px solid var(--card-border-color);border-radius:12px;margin-top:1rem;overflow:hidden;padding:1.25rem}.ResponsiveTable-module_footer-card-row__Vv6Ur{display:flex;font-size:.9rem;font-weight:600;justify-content:space-between;margin:0 0 .75rem}.ResponsiveTable-module_selectedRow__-JyNW{background-color:#e7f1ff!important;transition:background-color .15s ease}.ResponsiveTable-module_card__b-U2v.ResponsiveTable-module_selectedRow__-JyNW{background-color:#e7f1ff;border-left:4px solid var(--primary-color)}.ResponsiveTable-module_animatedRow__SFjrJ{animation:ResponsiveTable-module_cardEntrance__6JjRV .5s cubic-bezier(.2,.8,.2,1) forwards;opacity:0}@keyframes ResponsiveTable-module_cardEntrance__6JjRV{0%{opacity:0;transform:translateY(15px) scale(.98)}to{opacity:1;transform:translateY(0) scale(1)}}@keyframes ResponsiveTable-module_fadeInUp__jMCS7{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.ResponsiveTable-module_skeleton__XxsXW{background-color:#f0f0f0;border-radius:4px;overflow:hidden;position:relative}.ResponsiveTable-module_skeleton__XxsXW:after{animation:ResponsiveTable-module_shimmer__H8PhC 1.5s infinite;background:linear-gradient(90deg,transparent,hsla(0,0%,100%,.6),transparent);content:\"\";height:100%;left:-150%;position:absolute;top:0;width:150%}@keyframes ResponsiveTable-module_shimmer__H8PhC{0%{transform:translateX(0)}to{transform:translateX(100%)}}.ResponsiveTable-module_noDataWrapper__Rj-k3{align-items:center;background-color:var(--table-header-bg);border:2px dashed var(--table-border-color);border-radius:12px;color:var(--text-color-muted);display:flex;flex-direction:column;gap:1rem;justify-content:center;padding:4rem 2rem}.ResponsiveTable-module_noData__IpwNq{font-size:1.1rem;font-weight:500}.ResponsiveTable-module_spinner__Pn-3D{animation:ResponsiveTable-module_spin__i3NHn .8s linear infinite;border:3px solid rgba(0,0,0,.1);border-left:3px solid var(--primary-color);border-radius:50%;height:24px;width:24px}@keyframes ResponsiveTable-module_spin__i3NHn{to{transform:rotate(1turn)}}.ResponsiveTable-module_infoContainer__b9IF5{align-items:center;color:var(--text-color-muted);display:flex;font-size:.85rem;gap:.5rem;justify-content:center;padding:1.5rem}.ResponsiveTable-module_stickyHeader__-jjN- th{box-shadow:0 2px 4px rgba(0,0,0,.05);position:sticky;top:0}.ResponsiveTable-module_internalStickyHeader__idiJY th{position:sticky;top:0}.ResponsiveTable-module_detailCell__hb9C5{background:rgba(0,0,0,.012);border-top:none;padding:0;transition:border-left .2s ease}.ResponsiveTable-module_detailCellHasContent__F-DX5{padding-bottom:.5rem}.ResponsiveTable-module_detailCellExpanded__Zr6UF{border-left:2px solid var(--primary-color,#3b82f6)}.ResponsiveTable-module_detailToggleBar__F5Qrk{height:0;overflow:hidden;transition:height .2s ease}.ResponsiveTable-module_detailToggleBarVisible__q9b-3{align-items:center;background:rgba(59,130,246,.08);box-shadow:inset 0 1px 0 rgba(0,0,0,.04);cursor:pointer;display:flex;height:2.5rem;padding:0 .75rem;user-select:none}.ResponsiveTable-module_detailToggleBarVisible__q9b-3:hover{background:rgba(59,130,246,.14)}.ResponsiveTable-module_detailChevron__mBs8j{align-items:center;color:var(--primary-color,#3b82f6);display:flex;font-size:2.2rem;transform:rotate(-90deg);transition:transform .25s ease}.ResponsiveTable-module_detailChevronExpanded__zGFTQ{transform:rotate(0deg)}.ResponsiveTable-module_detailContentWrapper__VzM29{display:grid;grid-template-rows:0fr;transition:grid-template-rows .3s ease}.ResponsiveTable-module_detailContentWrapperExpanded__bkiUb{grid-template-rows:1fr}.ResponsiveTable-module_detailContentInner__GWVaq{overflow:hidden;padding-left:1.5rem}.ResponsiveTable-module_mobileDetailOuter__gusle{background:rgba(0,0,0,.012);overflow:hidden}";
33
- var styles$2 = {"responsiveTable":"ResponsiveTable-module_responsiveTable__4y-Od","tableContainer":"ResponsiveTable-module_tableContainer__VjWjH","cardContainer":"ResponsiveTable-module_cardContainer__Het4h","card":"ResponsiveTable-module_card__b-U2v","card-header":"ResponsiveTable-module_card-header__Ttk51","card-row":"ResponsiveTable-module_card-row__qvIUJ","stacked":"ResponsiveTable-module_stacked__FSaTB","card-label":"ResponsiveTable-module_card-label__v9L71","card-value":"ResponsiveTable-module_card-value__BO-c-","numberValue":"ResponsiveTable-module_numberValue__-TLR1","dateValue":"ResponsiveTable-module_dateValue__UMvqJ","imageValue":"ResponsiveTable-module_imageValue__wVb-p","inputValue":"ResponsiveTable-module_inputValue__CrGMx","clickableRow":"ResponsiveTable-module_clickableRow__0kjWm","clickableHeader":"ResponsiveTable-module_clickableHeader__xHQhF","sortable":"ResponsiveTable-module_sortable__yvA60","sorted-asc":"ResponsiveTable-module_sorted-asc__jzOIa","sorted-desc":"ResponsiveTable-module_sorted-desc__7WCFK","headerInnerWrapper":"ResponsiveTable-module_headerInnerWrapper__3VAhD","headerContent":"ResponsiveTable-module_headerContent__ODMzS","sortIcon":"ResponsiveTable-module_sortIcon__A9WtD","footerCell":"ResponsiveTable-module_footerCell__8H-uG","clickableFooterCell":"ResponsiveTable-module_clickableFooterCell__WB9Ss","footerCard":"ResponsiveTable-module_footerCard__-NE2M","footer-card-row":"ResponsiveTable-module_footer-card-row__Vv6Ur","selectedRow":"ResponsiveTable-module_selectedRow__-JyNW","animatedRow":"ResponsiveTable-module_animatedRow__SFjrJ","cardEntrance":"ResponsiveTable-module_cardEntrance__6JjRV","skeleton":"ResponsiveTable-module_skeleton__XxsXW","shimmer":"ResponsiveTable-module_shimmer__H8PhC","noDataWrapper":"ResponsiveTable-module_noDataWrapper__Rj-k3","noData":"ResponsiveTable-module_noData__IpwNq","spinner":"ResponsiveTable-module_spinner__Pn-3D","spin":"ResponsiveTable-module_spin__i3NHn","infoContainer":"ResponsiveTable-module_infoContainer__b9IF5","stickyHeader":"ResponsiveTable-module_stickyHeader__-jjN-","internalStickyHeader":"ResponsiveTable-module_internalStickyHeader__idiJY","detailCell":"ResponsiveTable-module_detailCell__hb9C5","detailCellHasContent":"ResponsiveTable-module_detailCellHasContent__F-DX5","detailCellExpanded":"ResponsiveTable-module_detailCellExpanded__Zr6UF","detailToggleBar":"ResponsiveTable-module_detailToggleBar__F5Qrk","detailToggleBarVisible":"ResponsiveTable-module_detailToggleBarVisible__q9b-3","detailChevron":"ResponsiveTable-module_detailChevron__mBs8j","detailChevronExpanded":"ResponsiveTable-module_detailChevronExpanded__zGFTQ","detailContentWrapper":"ResponsiveTable-module_detailContentWrapper__VzM29","detailContentWrapperExpanded":"ResponsiveTable-module_detailContentWrapperExpanded__bkiUb","detailContentInner":"ResponsiveTable-module_detailContentInner__GWVaq","mobileDetailOuter":"ResponsiveTable-module_mobileDetailOuter__gusle","fadeInUp":"ResponsiveTable-module_fadeInUp__jMCS7"};
34
- styleInject(css_248z$2);
32
+ var css_248z = ".ResponsiveTable-module_responsiveTable__4y-Od{--table-border-color:#e0e0e0;--table-header-bg:#f8f9fa;--table-row-hover-bg:#f1f3f5;--table-row-stripe-bg:#fafbfc;--card-bg:#fff;--card-border-color:#d1d5db;--card-shadow:0 2px 8px rgba(0,0,0,.06);--text-color:#212529;--text-color-muted:#6c757d;--interactive-color:#0056b3;--primary-color:#007bff;--rt-mobile-card-shadow:0 1px 2px rgba(0,0,0,.04),0 4px 12px rgba(0,0,0,.06),0 12px 32px rgba(0,0,0,.04);--rt-mobile-card-radius:16px;--rt-mobile-bg-wash:#f1f5f9;--rt-mobile-label-color:#475569;--rt-mobile-value-color:#1e293b}.ResponsiveTable-module_tableContainer__VjWjH{border:1px solid var(--table-border-color);border-radius:8px;overflow-x:auto;width:100%}.ResponsiveTable-module_responsiveTable__4y-Od{background-color:var(--card-bg);border-collapse:collapse;color:var(--text-color);width:100%}.ResponsiveTable-module_responsiveTable__4y-Od thead th{background-color:var(--table-header-bg);border-bottom:2px solid var(--table-border-color);color:var(--text-color-muted);font-size:.75rem;font-weight:600;letter-spacing:.05em;padding:1rem;text-align:left;text-transform:uppercase;z-index:1}.ResponsiveTable-module_responsiveTable__4y-Od td{border-bottom:1px solid var(--table-border-color);font-size:.9rem;padding:1rem;text-align:left}.ResponsiveTable-module_responsiveTable__4y-Od tr:last-child td{border-bottom:none}.ResponsiveTable-module_responsiveTable__4y-Od tr:nth-child(2n){background-color:var(--table-row-stripe-bg)}.ResponsiveTable-module_responsiveTable__4y-Od tr:hover{background-color:var(--table-row-hover-bg)}.ResponsiveTable-module_cardContainer__Het4h{background-color:var(--rt-mobile-bg-wash);border-radius:var(--rt-mobile-card-radius);display:flex;flex-direction:column;gap:1.25rem;padding:1rem}.ResponsiveTable-module_card__b-U2v{background-color:var(--card-bg);border:1px solid var(--card-border-color);border-bottom:3px solid var(--primary-color);border-radius:var(--rt-mobile-card-radius);box-shadow:var(--rt-mobile-card-shadow);overflow:hidden;padding:1rem;transition:box-shadow .2s ease-in-out,transform .2s ease-in-out}.ResponsiveTable-module_card__b-U2v:hover{box-shadow:0 2px 4px rgba(0,0,0,.06),0 8px 24px rgba(0,0,0,.08),0 16px 48px rgba(0,0,0,.06);transform:translateY(-4px)}.ResponsiveTable-module_card-header__Ttk51{border-bottom:1px solid var(--table-border-color);margin-bottom:1rem;padding-bottom:.5rem}.ResponsiveTable-module_card-row__qvIUJ{align-items:flex-start;display:flex;gap:1rem;justify-content:space-between;margin:0 0 .75rem}.ResponsiveTable-module_card-row__qvIUJ.ResponsiveTable-module_stacked__FSaTB{align-items:stretch;flex-direction:column;gap:.25rem;margin-bottom:1rem}.ResponsiveTable-module_card-row__qvIUJ:last-child{margin-bottom:0}.ResponsiveTable-module_card-label__v9L71{color:var(--rt-mobile-label-color);font-size:.75rem;font-weight:600;text-transform:uppercase;white-space:nowrap}.ResponsiveTable-module_card-value__BO-c-{color:var(--rt-mobile-value-color);font-size:.95rem;text-align:right}.ResponsiveTable-module_card-row__qvIUJ.ResponsiveTable-module_stacked__FSaTB .ResponsiveTable-module_card-value__BO-c-{text-align:left}.ResponsiveTable-module_numberValue__-TLR1{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;text-align:right!important}.ResponsiveTable-module_dateValue__UMvqJ{color:var(--text-color-muted);font-size:.85rem}.ResponsiveTable-module_imageValue__wVb-p img{border-radius:8px;height:auto;max-width:100%;object-fit:cover}.ResponsiveTable-module_inputValue__CrGMx{margin-top:.5rem;width:100%}.ResponsiveTable-module_inputValue__CrGMx button,.ResponsiveTable-module_inputValue__CrGMx input[type=text],.ResponsiveTable-module_inputValue__CrGMx select,.ResponsiveTable-module_inputValue__CrGMx textarea{min-height:44px;width:100%!important}.ResponsiveTable-module_clickableRow__0kjWm{cursor:pointer}.ResponsiveTable-module_responsiveTable__4y-Od tbody tr{transition:background-color .12s ease}.ResponsiveTable-module_responsiveTable__4y-Od tbody tr.ResponsiveTable-module_clickableRow__0kjWm:active{background-color:var(--table-row-active-bg,#dde3ea);transition:background-color .08s ease}.ResponsiveTable-module_responsiveTable__4y-Od tbody tr.ResponsiveTable-module_clickableRow__0kjWm:focus-visible{outline:2px solid var(--primary-color,#3b82f6);outline-offset:-2px}.ResponsiveTable-module_card__b-U2v.ResponsiveTable-module_clickableRow__0kjWm:active{box-shadow:0 1px 3px rgba(0,0,0,.08);transform:translateY(-1px);transition:transform .08s ease,box-shadow .08s ease}.ResponsiveTable-module_card__b-U2v.ResponsiveTable-module_clickableRow__0kjWm:focus-visible{outline:2px solid var(--primary-color,#3b82f6);outline-offset:-2px}.ResponsiveTable-module_clickableHeader__xHQhF{cursor:pointer;transition:color .2s}.ResponsiveTable-module_clickableHeader__xHQhF:hover{color:var(--interactive-color)}.ResponsiveTable-module_sortable__yvA60{cursor:pointer}.ResponsiveTable-module_sorted-asc__jzOIa,.ResponsiveTable-module_sorted-desc__7WCFK{background-color:#f0f7ff!important;color:var(--interactive-color)!important}.ResponsiveTable-module_headerInnerWrapper__3VAhD{align-items:center;display:flex;justify-content:space-between;width:100%}.ResponsiveTable-module_headerContent__ODMzS{flex-grow:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ResponsiveTable-module_sortIcon__A9WtD{background-position:50%;background-repeat:no-repeat;background-size:contain;flex-shrink:0;height:1rem;margin-left:.5rem;opacity:.3;width:1rem}.ResponsiveTable-module_sortable__yvA60:hover .ResponsiveTable-module_sortIcon__A9WtD{opacity:.8}.ResponsiveTable-module_sortable__yvA60 .ResponsiveTable-module_sortIcon__A9WtD{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%236c757d'%3E%3Cpath d='M10 18h4v-2h-4v2zm-6-8v2h16V8H4zm3-6h10v2H7V2z'/%3E%3C/svg%3E\")}.ResponsiveTable-module_sorted-asc__jzOIa .ResponsiveTable-module_sortIcon__A9WtD{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%230056b3'%3E%3Cpath d='m7 14 5-5 5 5z'/%3E%3C/svg%3E\");opacity:1}.ResponsiveTable-module_sorted-desc__7WCFK .ResponsiveTable-module_sortIcon__A9WtD{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%230056b3'%3E%3Cpath d='m7 10 5 5 5-5z'/%3E%3C/svg%3E\");opacity:1}.ResponsiveTable-module_responsiveTable__4y-Od tfoot{background-color:var(--table-header-bg);border-top:2px solid var(--table-border-color)}.ResponsiveTable-module_footerCell__8H-uG{font-size:.9rem;font-weight:600;padding:1rem;text-align:right}.ResponsiveTable-module_clickableFooterCell__WB9Ss{color:var(--interactive-color);cursor:pointer}.ResponsiveTable-module_clickableFooterCell__WB9Ss:hover{text-decoration:underline}.ResponsiveTable-module_footerCard__-NE2M{background-color:var(--table-header-bg);border:1px solid var(--card-border-color);border-radius:12px;margin-top:1rem;overflow:hidden;padding:1.25rem}.ResponsiveTable-module_footer-card-row__Vv6Ur{display:flex;font-size:.9rem;font-weight:600;justify-content:space-between;margin:0 0 .75rem}.ResponsiveTable-module_selectedRow__-JyNW{background-color:#e7f1ff!important;transition:background-color .15s ease}.ResponsiveTable-module_card__b-U2v.ResponsiveTable-module_selectedRow__-JyNW{background-color:#e7f1ff;border-left:4px solid var(--primary-color)}.ResponsiveTable-module_animatedRow__SFjrJ{animation:ResponsiveTable-module_cardEntrance__6JjRV .5s cubic-bezier(.2,.8,.2,1) forwards;opacity:0}@keyframes ResponsiveTable-module_cardEntrance__6JjRV{0%{opacity:0;transform:translateY(15px) scale(.98)}to{opacity:1;transform:translateY(0) scale(1)}}@keyframes ResponsiveTable-module_fadeInUp__jMCS7{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.ResponsiveTable-module_skeleton__XxsXW{background-color:#f0f0f0;border-radius:4px;overflow:hidden;position:relative}.ResponsiveTable-module_skeleton__XxsXW:after{animation:ResponsiveTable-module_shimmer__H8PhC 1.5s infinite;background:linear-gradient(90deg,transparent,hsla(0,0%,100%,.6),transparent);content:\"\";height:100%;left:-150%;position:absolute;top:0;width:150%}@keyframes ResponsiveTable-module_shimmer__H8PhC{0%{transform:translateX(0)}to{transform:translateX(100%)}}.ResponsiveTable-module_noDataWrapper__Rj-k3{align-items:center;background-color:var(--table-header-bg);border:2px dashed var(--table-border-color);border-radius:12px;color:var(--text-color-muted);display:flex;flex-direction:column;gap:1rem;justify-content:center;padding:4rem 2rem}.ResponsiveTable-module_noData__IpwNq{font-size:1.1rem;font-weight:500}.ResponsiveTable-module_spinner__Pn-3D{animation:ResponsiveTable-module_spin__i3NHn .8s linear infinite;border:3px solid rgba(0,0,0,.1);border-left:3px solid var(--primary-color);border-radius:50%;height:24px;width:24px}@keyframes ResponsiveTable-module_spin__i3NHn{to{transform:rotate(1turn)}}.ResponsiveTable-module_infoContainer__b9IF5{align-items:center;color:var(--text-color-muted);display:flex;font-size:.85rem;gap:.5rem;justify-content:center;padding:1.5rem}.ResponsiveTable-module_stickyHeader__-jjN- th{box-shadow:0 2px 4px rgba(0,0,0,.05);position:sticky;top:0}.ResponsiveTable-module_internalStickyHeader__idiJY th{position:sticky;top:0}.ResponsiveTable-module_expandColumn__yvwN-{border-bottom:1px solid var(--table-border-color);min-width:2rem;padding:0!important;text-align:center;vertical-align:middle;width:2rem}.ResponsiveTable-module_expandChevron__7JalN{align-items:center;border-radius:.25rem;color:var(--primary-color,#3b82f6);cursor:pointer;display:inline-flex;font-size:1.125rem;height:1.5rem;justify-content:center;opacity:.25;transform:rotate(-90deg);transition:opacity .15s ease,transform .25s ease;user-select:none;width:1.5rem}.ResponsiveTable-module_expandChevron__7JalN:focus-visible{outline:2px solid var(--primary-color,#3b82f6);outline-offset:2px}@keyframes ResponsiveTable-module_chevronGreeting__nLVUh{0%{opacity:0;transform:rotate(-90deg) scale(.6)}12%{opacity:1;transform:rotate(-90deg) scale(1.3)}22%{opacity:.35;transform:rotate(-90deg) scale(1)}32%{opacity:1;transform:rotate(-90deg) scale(1.15)}45%{opacity:.25;transform:rotate(-90deg) scale(1)}to{opacity:.25;transform:rotate(-90deg) scale(1)}}.ResponsiveTable-module_expandChevronGreeting__hu51J{animation:ResponsiveTable-module_chevronGreeting__nLVUh 2.2s ease-out forwards;animation-delay:calc(var(--row-idx, 0)*60ms)}.ResponsiveTable-module_expandChevronHovered__aNVCU{opacity:.6}.ResponsiveTable-module_expandChevronExpanded__iQ1bV{opacity:1;transform:rotate(0deg)}.ResponsiveTable-module_detailCell__hb9C5{background:rgba(0,0,0,.012);border-top:none;padding:0;transition:border-left .2s ease}.ResponsiveTable-module_detailCellHasContent__F-DX5{padding-bottom:.5rem}.ResponsiveTable-module_detailCellExpanded__Zr6UF{border-left:2px solid var(--primary-color,#3b82f6)}.ResponsiveTable-module_detailToggleBar__F5Qrk{height:0;overflow:hidden;transition:height .25s ease,background .25s ease}.ResponsiveTable-module_detailToggleBarExpanded__l8IWq{align-items:center;background:rgba(59,130,246,.08);box-shadow:inset 0 1px 0 rgba(0,0,0,.04);cursor:pointer;display:flex;gap:.5rem;height:2rem;padding:0 .75rem;user-select:none}.ResponsiveTable-module_detailToggleBarExpanded__l8IWq:hover{background:rgba(59,130,246,.14)}.ResponsiveTable-module_detailToggleChevron__KWp3H{align-items:center;color:var(--primary-color,#3b82f6);display:flex;font-size:1.25rem;opacity:1}.ResponsiveTable-module_detailContentWrapper__VzM29{display:grid;grid-template-rows:0fr;transition:grid-template-rows .3s ease}.ResponsiveTable-module_detailContentWrapperExpanded__bkiUb{grid-template-rows:1fr}.ResponsiveTable-module_detailContentInner__GWVaq{overflow:hidden;padding-left:1.5rem}.ResponsiveTable-module_mobileDetailOuter__gusle{background:rgba(0,0,0,.012);overflow:hidden}.ResponsiveTable-module_mobileExpandRow__Fb0AP{align-items:center;border-bottom:1px solid var(--table-border-color);display:flex;justify-content:flex-start;margin-bottom:.25rem;padding:0 0 .25rem}";
33
+ var styles = {"responsiveTable":"ResponsiveTable-module_responsiveTable__4y-Od","tableContainer":"ResponsiveTable-module_tableContainer__VjWjH","cardContainer":"ResponsiveTable-module_cardContainer__Het4h","card":"ResponsiveTable-module_card__b-U2v","card-header":"ResponsiveTable-module_card-header__Ttk51","card-row":"ResponsiveTable-module_card-row__qvIUJ","stacked":"ResponsiveTable-module_stacked__FSaTB","card-label":"ResponsiveTable-module_card-label__v9L71","card-value":"ResponsiveTable-module_card-value__BO-c-","numberValue":"ResponsiveTable-module_numberValue__-TLR1","dateValue":"ResponsiveTable-module_dateValue__UMvqJ","imageValue":"ResponsiveTable-module_imageValue__wVb-p","inputValue":"ResponsiveTable-module_inputValue__CrGMx","clickableRow":"ResponsiveTable-module_clickableRow__0kjWm","clickableHeader":"ResponsiveTable-module_clickableHeader__xHQhF","sortable":"ResponsiveTable-module_sortable__yvA60","sorted-asc":"ResponsiveTable-module_sorted-asc__jzOIa","sorted-desc":"ResponsiveTable-module_sorted-desc__7WCFK","headerInnerWrapper":"ResponsiveTable-module_headerInnerWrapper__3VAhD","headerContent":"ResponsiveTable-module_headerContent__ODMzS","sortIcon":"ResponsiveTable-module_sortIcon__A9WtD","footerCell":"ResponsiveTable-module_footerCell__8H-uG","clickableFooterCell":"ResponsiveTable-module_clickableFooterCell__WB9Ss","footerCard":"ResponsiveTable-module_footerCard__-NE2M","footer-card-row":"ResponsiveTable-module_footer-card-row__Vv6Ur","selectedRow":"ResponsiveTable-module_selectedRow__-JyNW","animatedRow":"ResponsiveTable-module_animatedRow__SFjrJ","cardEntrance":"ResponsiveTable-module_cardEntrance__6JjRV","skeleton":"ResponsiveTable-module_skeleton__XxsXW","shimmer":"ResponsiveTable-module_shimmer__H8PhC","noDataWrapper":"ResponsiveTable-module_noDataWrapper__Rj-k3","noData":"ResponsiveTable-module_noData__IpwNq","spinner":"ResponsiveTable-module_spinner__Pn-3D","spin":"ResponsiveTable-module_spin__i3NHn","infoContainer":"ResponsiveTable-module_infoContainer__b9IF5","stickyHeader":"ResponsiveTable-module_stickyHeader__-jjN-","internalStickyHeader":"ResponsiveTable-module_internalStickyHeader__idiJY","expandColumn":"ResponsiveTable-module_expandColumn__yvwN-","expandChevron":"ResponsiveTable-module_expandChevron__7JalN","expandChevronGreeting":"ResponsiveTable-module_expandChevronGreeting__hu51J","chevronGreeting":"ResponsiveTable-module_chevronGreeting__nLVUh","expandChevronHovered":"ResponsiveTable-module_expandChevronHovered__aNVCU","expandChevronExpanded":"ResponsiveTable-module_expandChevronExpanded__iQ1bV","detailCell":"ResponsiveTable-module_detailCell__hb9C5","detailCellHasContent":"ResponsiveTable-module_detailCellHasContent__F-DX5","detailCellExpanded":"ResponsiveTable-module_detailCellExpanded__Zr6UF","detailToggleBar":"ResponsiveTable-module_detailToggleBar__F5Qrk","detailToggleBarExpanded":"ResponsiveTable-module_detailToggleBarExpanded__l8IWq","detailToggleChevron":"ResponsiveTable-module_detailToggleChevron__KWp3H","detailContentWrapper":"ResponsiveTable-module_detailContentWrapper__VzM29","detailContentWrapperExpanded":"ResponsiveTable-module_detailContentWrapperExpanded__bkiUb","detailContentInner":"ResponsiveTable-module_detailContentInner__GWVaq","mobileDetailOuter":"ResponsiveTable-module_mobileDetailOuter__gusle","mobileExpandRow":"ResponsiveTable-module_mobileExpandRow__Fb0AP","fadeInUp":"ResponsiveTable-module_fadeInUp__jMCS7"};
34
+ styleInject(css_248z);
35
35
 
36
36
  /******************************************************************************
37
37
  Copyright (c) Microsoft Corporation.
@@ -112,7 +112,7 @@ function TableProvider({ children, value }) {
112
112
  var _a;
113
113
  const rawColumnDefinition = getRawColumnDefinition(colDef);
114
114
  return onHeaderClick
115
- ? ((_a = rawColumnDefinition.interactivity) === null || _a === void 0 ? void 0 : _a.className) || styles$2.clickableHeader
115
+ ? ((_a = rawColumnDefinition.interactivity) === null || _a === void 0 ? void 0 : _a.className) || styles.clickableHeader
116
116
  : '';
117
117
  }, [getRawColumnDefinition]);
118
118
  const getHeaderProps = useCallback((colDef) => {
@@ -192,13 +192,13 @@ function TableHeaderCell(props) {
192
192
  const rawColDef = getRawColumnDefinition(columnDefinition);
193
193
  const clickableHeaderClassName = getClickableHeaderClassName(onHeaderClick, columnDefinition);
194
194
  const headerProps = getHeaderProps(columnDefinition);
195
- const combinedClassName = `${clickableHeaderClassName} ${headerProps.className ? styles$2[headerProps.className] : ''} ${rawColDef.headerClassName || ''}`.trim();
195
+ const combinedClassName = `${clickableHeaderClassName} ${headerProps.className ? styles[headerProps.className] : ''} ${rawColDef.headerClassName || ''}`.trim();
196
196
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
197
197
  const { className } = headerProps, restHeaderProps = __rest(headerProps, ["className"]);
198
198
  return (React.createElement("th", Object.assign({ key: colIndex, className: combinedClassName, style: Object.assign(Object.assign({}, headerProps.style), rawColDef.headerStyle) }, restHeaderProps, { onClick: onHeaderClick ? () => onHeaderClick(rawColDef.interactivity.id) : restHeaderProps.onClick }),
199
- React.createElement("div", { className: styles$2.headerInnerWrapper },
200
- React.createElement("div", { className: styles$2.headerContent }, getColumnDefinition(columnDefinition, 0).displayLabel),
201
- React.createElement("span", { className: styles$2.sortIcon }))));
199
+ React.createElement("div", { className: styles.headerInnerWrapper },
200
+ React.createElement("div", { className: styles.headerContent }, getColumnDefinition(columnDefinition, 0).displayLabel),
201
+ React.createElement("span", { className: styles.sortIcon }))));
202
202
  }
203
203
 
204
204
  function TableBodyCell(props) {
@@ -210,12 +210,12 @@ function TableBodyCell(props) {
210
210
  }
211
211
 
212
212
  function TableBodyRow(props) {
213
- const { row, rowIndex, columnDefinitions, onRowClick, selectionProps, animationProps, } = props;
213
+ const { row, rowIndex, columnDefinitions, onRowClick, selectionProps, animationProps, expandCell, onMouseEnter, onMouseLeave, } = props;
214
214
  const { getRowProps } = useTableContext();
215
215
  const rowProps = getRowProps(row);
216
216
  const isClickable = onRowClick || selectionProps;
217
217
  const pluginOnClick = rowProps.onClick;
218
- return (React.createElement("tr", { className: `${isClickable ? styles$2.clickableRow : ''} ${(animationProps === null || animationProps === void 0 ? void 0 : animationProps.animateOnLoad) ? styles$2.animatedRow : ''} ${rowProps.className || ''}`.trim(), style: { animationDelay: `${rowIndex * 0.05}s` }, tabIndex: isClickable ? 0 : undefined, "aria-selected": rowProps['aria-selected'], onClickCapture: (e) => {
218
+ return (React.createElement("tr", { className: `${isClickable ? styles.clickableRow : ''} ${(animationProps === null || animationProps === void 0 ? void 0 : animationProps.animateOnLoad) ? styles.animatedRow : ''} ${rowProps.className || ''}`.trim(), style: { animationDelay: `${rowIndex * 0.05}s` }, tabIndex: isClickable ? 0 : undefined, "aria-selected": rowProps['aria-selected'], onMouseEnter: onMouseEnter, onMouseLeave: onMouseLeave, onClickCapture: (e) => {
219
219
  // Capture Phase: Check for the ignore attribute BEFORE child handlers run.
220
220
  // This prevents issues where child handlers trigger a re-render/unmount
221
221
  // that detaches the target from the DOM before the bubbling phase.
@@ -234,42 +234,45 @@ function TableBodyRow(props) {
234
234
  if (onRowClick) {
235
235
  onRowClick(row);
236
236
  }
237
- } }, columnDefinitions.map((columnDefinition, colIndex) => (React.createElement("td", { key: colIndex },
238
- React.createElement(TableBodyCell, { row: row, rowIndex: rowIndex, columnDefinition: columnDefinition }))))));
237
+ } },
238
+ expandCell,
239
+ columnDefinitions.map((columnDefinition, colIndex) => (React.createElement("td", { key: colIndex },
240
+ React.createElement(TableBodyCell, { row: row, rowIndex: rowIndex, columnDefinition: columnDefinition }))))));
239
241
  }
240
242
 
241
- function DetailRow({ row, rowIndex, colSpan, expandRowRenderer, isExpanded, onToggle, expandChevronClassName }) {
243
+ function DetailRow({ row, rowIndex, colSpan, expandRowRenderer, isExpanded, onToggle }) {
242
244
  const content = expandRowRenderer(row, rowIndex);
243
245
  const hasContent = content != null;
244
246
  const [everExpanded, setEverExpanded] = useState(false);
245
247
  if (isExpanded && !everExpanded)
246
248
  setEverExpanded(true);
247
249
  const tdClass = [
248
- styles$2.detailCell,
249
- hasContent ? styles$2.detailCellHasContent : '',
250
- isExpanded ? styles$2.detailCellExpanded : '',
250
+ styles.detailCell,
251
+ hasContent ? styles.detailCellHasContent : '',
252
+ isExpanded ? styles.detailCellExpanded : '',
251
253
  ].join(' ').trim();
252
- const chevronClass = [
253
- styles$2.detailChevron,
254
- isExpanded ? styles$2.detailChevronExpanded : '',
255
- expandChevronClassName !== null && expandChevronClassName !== void 0 ? expandChevronClassName : '',
254
+ const toggleBarClass = [
255
+ styles.detailToggleBar,
256
+ isExpanded ? styles.detailToggleBarExpanded : '',
256
257
  ].join(' ').trim();
258
+ const toggleAttrs = {
259
+ role: 'button',
260
+ tabIndex: 0,
261
+ 'aria-expanded': isExpanded,
262
+ onClick: onToggle,
263
+ onKeyDown: (e) => { if (e.key === 'Enter' || e.key === ' ') {
264
+ e.preventDefault();
265
+ onToggle();
266
+ } },
267
+ 'data-rt-ignore-row-click': true,
268
+ };
257
269
  return (React.createElement("tr", null,
258
270
  React.createElement("td", { colSpan: colSpan, className: tdClass },
259
- React.createElement("div", Object.assign({ className: `${styles$2.detailToggleBar} ${hasContent ? styles$2.detailToggleBarVisible : ''}` }, (hasContent ? {
260
- role: 'button',
261
- tabIndex: 0,
262
- 'aria-expanded': isExpanded,
263
- onClick: onToggle,
264
- onKeyDown: (e) => { if (e.key === 'Enter' || e.key === ' ') {
265
- e.preventDefault();
266
- onToggle();
267
- } },
268
- 'data-rt-ignore-row-click': true,
269
- } : {})), hasContent && (React.createElement("span", { className: chevronClass },
270
- React.createElement(MdArrowDropDown, null)))),
271
- React.createElement("div", { className: `${styles$2.detailContentWrapper} ${isExpanded ? styles$2.detailContentWrapperExpanded : ''}` },
272
- React.createElement("div", { className: styles$2.detailContentInner }, everExpanded && content)))));
271
+ isExpanded && (React.createElement("div", Object.assign({ className: toggleBarClass }, toggleAttrs),
272
+ React.createElement("span", { className: styles.detailToggleChevron },
273
+ React.createElement(MdArrowDropDown, null)))),
274
+ React.createElement("div", { className: `${styles.detailContentWrapper} ${isExpanded ? styles.detailContentWrapperExpanded : ''}` },
275
+ React.createElement("div", { className: styles.detailContentInner }, everExpanded && content)))));
273
276
  }
274
277
 
275
278
  const TableSentinel = ({ onIntersect, isLoading }) => {
@@ -303,6 +306,12 @@ function DesktopView(props) {
303
306
  const { maxHeight, isHeaderSticky, tableContainerRef, headerRef, footerRows, renderPluginFooters, onScroll, } = props;
304
307
  const { visibleColumns, originalColumnDefinitions, currentData, getRawColumnDefinition, onRowClick, selectionProps, animationProps, pagination, expandRowRenderer, expandChevronClassName, getRowId, } = useTableContext();
305
308
  const [expandedIds, setExpandedIds] = useState(new Set());
309
+ const [hoveredRowId, setHoveredRowId] = useState(null);
310
+ const [greetingActive, setGreetingActive] = useState(true);
311
+ useEffect(() => {
312
+ const t = setTimeout(() => setGreetingActive(false), 3200);
313
+ return () => clearTimeout(t);
314
+ }, []);
306
315
  const toggleExpanded = useCallback((id) => {
307
316
  setExpandedIds(prev => {
308
317
  const next = new Set(prev);
@@ -333,41 +342,60 @@ function DesktopView(props) {
333
342
  }
334
343
  return (React.createElement("tfoot", null, footerRows.map((row, rowIndex) => {
335
344
  let currentOriginalIndex = 0;
336
- return (React.createElement("tr", { key: rowIndex }, row.columns.map((col, colIndex) => {
337
- const effectiveColSpan = getEffectiveColSpan(col, currentOriginalIndex);
338
- currentOriginalIndex += (col.colSpan || 1);
339
- if (effectiveColSpan === 0)
340
- return null;
341
- return (React.createElement("td", { key: colIndex, colSpan: effectiveColSpan, className: `${styles$2.footerCell} ${col.className || ''} ${col.onCellClick ? styles$2.clickableFooterCell : ''}`, onClick: col.onCellClick }, col.cellRenderer()));
342
- })));
345
+ return (React.createElement("tr", { key: rowIndex },
346
+ expandRowRenderer && React.createElement("td", { className: styles.expandColumn }),
347
+ row.columns.map((col, colIndex) => {
348
+ const effectiveColSpan = getEffectiveColSpan(col, currentOriginalIndex);
349
+ currentOriginalIndex += (col.colSpan || 1);
350
+ if (effectiveColSpan === 0)
351
+ return null;
352
+ return (React.createElement("td", { key: colIndex, colSpan: effectiveColSpan, className: `${styles.footerCell} ${col.className || ''} ${col.onCellClick ? styles.clickableFooterCell : ''}`, onClick: col.onCellClick }, col.cellRenderer()));
353
+ })));
343
354
  })));
344
- }, [footerRows, getEffectiveColSpan]);
355
+ }, [footerRows, getEffectiveColSpan, expandRowRenderer]);
345
356
  const useFixedHeaders = !!maxHeight;
346
357
  const fixedHeadersStyle = useFixedHeaders
347
358
  ? { maxHeight, overflowY: 'auto' }
348
359
  : {};
349
360
  const headerClassName = useFixedHeaders
350
- ? styles$2.internalStickyHeader
351
- : (isHeaderSticky ? styles$2.stickyHeader : '');
352
- return (React.createElement("div", { className: styles$2.tableContainer, style: fixedHeadersStyle, ref: tableContainerRef, onScroll: onScroll },
353
- React.createElement("table", { className: styles$2['responsiveTable'] },
361
+ ? styles.internalStickyHeader
362
+ : (isHeaderSticky ? styles.stickyHeader : '');
363
+ return (React.createElement("div", { className: styles.tableContainer, style: fixedHeadersStyle, ref: tableContainerRef, onScroll: onScroll },
364
+ React.createElement("table", { className: styles['responsiveTable'] },
354
365
  React.createElement("thead", { ref: headerRef, className: headerClassName },
355
- React.createElement("tr", null, visibleColumns.map((columnDefinition, colIndex) => (React.createElement(TableHeaderCell, { key: colIndex, columnDefinition: columnDefinition, colIndex: colIndex }))))),
366
+ React.createElement("tr", null,
367
+ expandRowRenderer && React.createElement("th", { className: styles.expandColumn }),
368
+ visibleColumns.map((columnDefinition, colIndex) => (React.createElement(TableHeaderCell, { key: colIndex, columnDefinition: columnDefinition, colIndex: colIndex }))))),
356
369
  React.createElement("tbody", null, currentData.map((row, rowIndex) => {
357
370
  const rowId = getRowId(row, rowIndex);
371
+ const isExpanded = expandedIds.has(rowId);
372
+ const isHovered = hoveredRowId === rowId;
373
+ const rowContent = expandRowRenderer === null || expandRowRenderer === void 0 ? void 0 : expandRowRenderer(row, rowIndex);
374
+ const rowHasContent = rowContent != null;
375
+ const chevronClasses = [
376
+ styles.expandChevron,
377
+ greetingActive && rowHasContent ? styles.expandChevronGreeting : '',
378
+ isExpanded ? styles.expandChevronExpanded : '',
379
+ isHovered && !isExpanded ? styles.expandChevronHovered : '',
380
+ expandChevronClassName !== null && expandChevronClassName !== void 0 ? expandChevronClassName : '',
381
+ ].filter(Boolean).join(' ').trim();
358
382
  return (React.createElement(React.Fragment, { key: rowId },
359
- React.createElement(TableBodyRow, { row: row, rowIndex: rowIndex, columnDefinitions: visibleColumns, onRowClick: onRowClick, selectionProps: selectionProps, animationProps: animationProps }),
360
- expandRowRenderer && (React.createElement(DetailRow, { row: row, rowIndex: rowIndex, colSpan: visibleColumns.length, expandRowRenderer: expandRowRenderer, isExpanded: expandedIds.has(rowId), onToggle: () => toggleExpanded(rowId), expandChevronClassName: expandChevronClassName }))));
383
+ React.createElement(TableBodyRow, { row: row, rowIndex: rowIndex, columnDefinitions: visibleColumns, onRowClick: onRowClick, selectionProps: selectionProps, animationProps: animationProps, expandCell: expandRowRenderer ? (React.createElement("td", { className: styles.expandColumn, style: { '--row-idx': rowIndex } }, rowHasContent && (React.createElement("span", { className: chevronClasses, role: "button", tabIndex: 0, "aria-expanded": isExpanded, onClick: (e) => { e.stopPropagation(); toggleExpanded(rowId); }, onKeyDown: (e) => { if (e.key === 'Enter' || e.key === ' ') {
384
+ e.preventDefault();
385
+ toggleExpanded(rowId);
386
+ } }, "data-rt-ignore-row-click": true },
387
+ React.createElement(MdArrowDropDown, null))))) : undefined, onMouseEnter: () => expandRowRenderer && setHoveredRowId(rowId), onMouseLeave: () => expandRowRenderer && setHoveredRowId(null) }),
388
+ expandRowRenderer && rowHasContent && (React.createElement(DetailRow, { row: row, rowIndex: rowIndex, colSpan: visibleColumns.length + 1, expandRowRenderer: expandRowRenderer, isExpanded: isExpanded, onToggle: () => toggleExpanded(rowId) }))));
361
389
  })),
362
390
  tableFooter),
363
391
  (pagination === null || pagination === void 0 ? void 0 : pagination.hasMore) && (React.createElement(TableSentinel, { onIntersect: () => pagination.loadNextPage(), isLoading: pagination.isFetchingMore })),
364
- (pagination === null || pagination === void 0 ? void 0 : pagination.isFetchingMore) && (React.createElement("div", { className: styles$2.infoContainer },
365
- React.createElement("div", { className: styles$2.spinner }),
392
+ (pagination === null || pagination === void 0 ? void 0 : pagination.isFetchingMore) && (React.createElement("div", { className: styles.infoContainer },
393
+ React.createElement("div", { className: styles.spinner }),
366
394
  React.createElement("span", null, "Loading more items..."))),
367
395
  renderPluginFooters()));
368
396
  }
369
397
 
370
- function MobileDetailSection({ row, rowIndex, expandRowRenderer, isExpanded, onToggle, expandChevronClassName }) {
398
+ function MobileDetailSection({ row, rowIndex, expandRowRenderer, isExpanded, onToggle }) {
371
399
  const content = expandRowRenderer(row, rowIndex);
372
400
  const hasContent = content != null;
373
401
  const [everExpanded, setEverExpanded] = useState(false);
@@ -375,31 +403,44 @@ function MobileDetailSection({ row, rowIndex, expandRowRenderer, isExpanded, onT
375
403
  setEverExpanded(true);
376
404
  if (!hasContent)
377
405
  return null;
378
- const chevronClass = [
379
- styles$2.detailChevron,
380
- isExpanded ? styles$2.detailChevronExpanded : '',
381
- expandChevronClassName !== null && expandChevronClassName !== void 0 ? expandChevronClassName : '',
382
- ].join(' ').trim();
383
406
  const outerClass = [
384
- styles$2.mobileDetailOuter,
385
- styles$2.detailCellHasContent,
386
- isExpanded ? styles$2.detailCellExpanded : '',
407
+ styles.mobileDetailOuter,
408
+ styles.detailCellHasContent,
409
+ isExpanded ? styles.detailCellExpanded : '',
410
+ ].join(' ').trim();
411
+ const toggleBarClass = [
412
+ styles.detailToggleBar,
413
+ isExpanded ? styles.detailToggleBarExpanded : '',
387
414
  ].join(' ').trim();
415
+ const toggleAttrs = {
416
+ role: 'button',
417
+ tabIndex: 0,
418
+ 'aria-expanded': isExpanded,
419
+ onClick: onToggle,
420
+ onKeyDown: (e) => { if (e.key === 'Enter' || e.key === ' ') {
421
+ e.preventDefault();
422
+ onToggle();
423
+ } },
424
+ 'data-rt-ignore-row-click': true,
425
+ };
388
426
  return (React.createElement("div", { className: outerClass },
389
- React.createElement("div", { className: `${styles$2.detailToggleBar} ${styles$2.detailToggleBarVisible}`, role: "button", tabIndex: 0, "aria-expanded": isExpanded, onClick: onToggle, onKeyDown: (e) => { if (e.key === 'Enter' || e.key === ' ') {
390
- e.preventDefault();
391
- onToggle();
392
- } }, "data-rt-ignore-row-click": true },
393
- React.createElement("span", { className: chevronClass },
394
- React.createElement(MdArrowDropDown, null))),
395
- React.createElement("div", { className: `${styles$2.detailContentWrapper} ${isExpanded ? styles$2.detailContentWrapperExpanded : ''}` },
396
- React.createElement("div", { className: styles$2.detailContentInner }, everExpanded && content))));
427
+ isExpanded && (React.createElement("div", Object.assign({ className: toggleBarClass }, toggleAttrs),
428
+ React.createElement("span", { className: styles.detailToggleChevron },
429
+ React.createElement(MdArrowDropDown, null)))),
430
+ React.createElement("div", { className: `${styles.detailContentWrapper} ${isExpanded ? styles.detailContentWrapperExpanded : ''}` },
431
+ React.createElement("div", { className: styles.detailContentInner }, everExpanded && content))));
397
432
  }
398
433
  function MobileView(props) {
399
434
  const { mobileFooter } = props;
400
435
  const { currentData, visibleColumns, onRowClick, selectionProps, animationProps, getRowProps, getRowId, getColumnDefinition, onHeaderClickCallback, getClickableHeaderClassName, pagination, mobileCardClassName, expandRowRenderer, expandChevronClassName, } = useTableContext();
401
436
  const isClickable = onRowClick || selectionProps;
402
437
  const [expandedIds, setExpandedIds] = useState(new Set());
438
+ const [hoveredRowId, setHoveredRowId] = useState(null);
439
+ const [greetingActive, setGreetingActive] = useState(true);
440
+ useEffect(() => {
441
+ const t = setTimeout(() => setGreetingActive(false), 3200);
442
+ return () => clearTimeout(t);
443
+ }, []);
403
444
  const toggleExpanded = useCallback((id) => {
404
445
  setExpandedIds(prev => {
405
446
  const next = new Set(prev);
@@ -440,19 +481,30 @@ function MobileView(props) {
440
481
  };
441
482
  const getTypeClassName = (dataType) => {
442
483
  switch (dataType) {
443
- case 'number': return styles$2.numberValue;
444
- case 'date': return styles$2.dateValue;
445
- case 'image': return styles$2.imageValue;
446
- case 'input': return styles$2.inputValue;
484
+ case 'number': return styles.numberValue;
485
+ case 'date': return styles.dateValue;
486
+ case 'image': return styles.imageValue;
487
+ case 'input': return styles.inputValue;
447
488
  default: return '';
448
489
  }
449
490
  };
450
- return (React.createElement("div", { className: styles$2.cardContainer },
491
+ return (React.createElement("div", { className: styles.cardContainer },
451
492
  currentData.map((row, rowIndex) => {
452
493
  const rowProps = getRowProps(row);
453
494
  const pluginOnClick = rowProps.onClick;
454
- return (React.createElement(React.Fragment, { key: getRowId(row, rowIndex) },
455
- React.createElement("div", { className: `${styles$2.card} ${isClickable ? styles$2.clickableRow : ''} ${(animationProps === null || animationProps === void 0 ? void 0 : animationProps.animateOnLoad) ? styles$2.animatedRow : ''} ${rowProps.className || ''} ${mobileCardClassName || ''}`.trim(), style: { animationDelay: `${rowIndex * 0.05}s` }, tabIndex: isClickable ? 0 : undefined, "aria-selected": rowProps['aria-selected'], onClickCapture: (e) => {
495
+ const rowId = getRowId(row, rowIndex);
496
+ const isExpanded = expandedIds.has(rowId);
497
+ const rowContent = expandRowRenderer === null || expandRowRenderer === void 0 ? void 0 : expandRowRenderer(row, rowIndex);
498
+ const rowHasContent = rowContent != null;
499
+ const chevronClasses = [
500
+ styles.expandChevron,
501
+ greetingActive && rowHasContent ? styles.expandChevronGreeting : '',
502
+ isExpanded ? styles.expandChevronExpanded : '',
503
+ hoveredRowId === rowId && !isExpanded ? styles.expandChevronHovered : '',
504
+ expandChevronClassName !== null && expandChevronClassName !== void 0 ? expandChevronClassName : '',
505
+ ].filter(Boolean).join(' ').trim();
506
+ return (React.createElement(React.Fragment, { key: rowId },
507
+ React.createElement("div", { className: `${styles.card} ${isClickable ? styles.clickableRow : ''} ${(animationProps === null || animationProps === void 0 ? void 0 : animationProps.animateOnLoad) ? styles.animatedRow : ''} ${rowProps.className || ''} ${mobileCardClassName || ''}`.trim(), style: { animationDelay: `${rowIndex * 0.05}s` }, tabIndex: isClickable ? 0 : undefined, "aria-selected": rowProps['aria-selected'], onMouseEnter: () => expandRowRenderer && setHoveredRowId(rowId), onMouseLeave: () => expandRowRenderer && setHoveredRowId(null), onClickCapture: (e) => {
456
508
  const target = e.target;
457
509
  if (target.closest('[data-rt-ignore-row-click]')) {
458
510
  e.nativeEvent._rtIgnoreRowClick = true;
@@ -466,7 +518,13 @@ function MobileView(props) {
466
518
  if (onRowClick)
467
519
  onRowClick(row);
468
520
  } },
469
- React.createElement("div", { className: styles$2['card-body'] }, visibleColumns.map((columnDefinition, colIndex) => {
521
+ expandRowRenderer && rowHasContent && (React.createElement("div", { className: styles.mobileExpandRow, style: { '--row-idx': rowIndex } },
522
+ React.createElement("span", { className: chevronClasses, role: "button", tabIndex: 0, "aria-expanded": isExpanded, onClick: (e) => { e.stopPropagation(); toggleExpanded(rowId); }, onKeyDown: (e) => { if (e.key === 'Enter' || e.key === ' ') {
523
+ e.preventDefault();
524
+ toggleExpanded(rowId);
525
+ } }, "data-rt-ignore-row-click": true },
526
+ React.createElement(MdArrowDropDown, null)))),
527
+ React.createElement("div", { className: styles['card-body'] }, visibleColumns.map((columnDefinition, colIndex) => {
470
528
  const colDef = getColumnDefinition(columnDefinition, rowIndex);
471
529
  const onHeaderClick = onHeaderClickCallback(columnDefinition);
472
530
  const clickableHeaderClassName = getClickableHeaderClassName(onHeaderClick, columnDefinition);
@@ -475,21 +533,21 @@ function MobileView(props) {
475
533
  const sampleValue = colDef.dataKey ? row[colDef.dataKey] : null;
476
534
  const dataType = inferDataType(colDef, sampleValue);
477
535
  const typeClassName = getTypeClassName(dataType);
478
- return (React.createElement("div", { key: colIndex, className: `${styles$2['card-row']} ${styles$2.stacked}` },
479
- React.createElement("span", { className: `${styles$2['card-label']} ${clickableHeaderClassName} ${colDef.headerClassName || ''}`, style: colDef.headerStyle, onClick: (e) => {
536
+ return (React.createElement("div", { key: colIndex, className: `${styles['card-row']} ${styles.stacked}` },
537
+ React.createElement("span", { className: `${styles['card-label']} ${clickableHeaderClassName} ${colDef.headerClassName || ''}`, style: colDef.headerStyle, onClick: (e) => {
480
538
  if (onHeaderClick) {
481
539
  e.stopPropagation();
482
540
  onHeaderClick(colDef.interactivity.id);
483
541
  }
484
542
  } }, colDef.displayLabel),
485
- React.createElement("span", { className: `${styles$2['card-value']} ${typeClassName} ${colDef.cellClassName || ''}`, style: colDef.cellStyle },
543
+ React.createElement("span", { className: `${styles['card-value']} ${typeClassName} ${colDef.cellClassName || ''}`, style: colDef.cellStyle },
486
544
  React.createElement(TableBodyCell, { row: row, rowIndex: rowIndex, columnDefinition: columnDefinition }))));
487
545
  }))),
488
- expandRowRenderer && (React.createElement(MobileDetailSection, { row: row, rowIndex: rowIndex, expandRowRenderer: expandRowRenderer, isExpanded: expandedIds.has(getRowId(row, rowIndex)), onToggle: () => toggleExpanded(getRowId(row, rowIndex)), expandChevronClassName: expandChevronClassName }))));
546
+ expandRowRenderer && rowHasContent && (React.createElement(MobileDetailSection, { row: row, rowIndex: rowIndex, expandRowRenderer: expandRowRenderer, isExpanded: isExpanded, onToggle: () => toggleExpanded(rowId) }))));
489
547
  }),
490
548
  (pagination === null || pagination === void 0 ? void 0 : pagination.hasMore) && (React.createElement(TableSentinel, { onIntersect: () => pagination.loadNextPage(), isLoading: pagination.isFetchingMore })),
491
- (pagination === null || pagination === void 0 ? void 0 : pagination.isFetchingMore) && (React.createElement("div", { className: styles$2.infoContainer },
492
- React.createElement("div", { className: styles$2.spinner }),
549
+ (pagination === null || pagination === void 0 ? void 0 : pagination.isFetchingMore) && (React.createElement("div", { className: styles.infoContainer },
550
+ React.createElement("div", { className: styles.spinner }),
493
551
  React.createElement("span", null, "Loading more items..."))),
494
552
  mobileFooter));
495
553
  }
@@ -499,35 +557,16 @@ function SkeletonView(props) {
499
557
  const skeletonRowCount = 5;
500
558
  const columnCount = columnDefinitions.length;
501
559
  if (isMobile) {
502
- return (React.createElement("div", null, [...Array(skeletonRowCount)].map((_, i) => (React.createElement("div", { key: i, className: styles$2.skeletonCard }, [...Array(columnCount)].map((_, j) => (React.createElement("div", { key: j, className: `${styles$2.skeleton} ${styles$2.skeletonText}`, style: { marginBottom: '0.5rem' } }))))))));
560
+ return (React.createElement("div", null, [...Array(skeletonRowCount)].map((_, i) => (React.createElement("div", { key: i, className: styles.skeletonCard }, [...Array(columnCount)].map((_, j) => (React.createElement("div", { key: j, className: `${styles.skeleton} ${styles.skeletonText}`, style: { marginBottom: '0.5rem' } }))))))));
503
561
  }
504
- return (React.createElement("table", { className: styles$2.responsiveTable },
562
+ return (React.createElement("table", { className: styles.responsiveTable },
505
563
  React.createElement("thead", null,
506
564
  React.createElement("tr", null, [...Array(columnCount)].map((_, i) => (React.createElement("th", { key: i },
507
- React.createElement("div", { className: `${styles$2.skeleton} ${styles$2.skeletonText}` })))))),
565
+ React.createElement("div", { className: `${styles.skeleton} ${styles.skeletonText}` })))))),
508
566
  React.createElement("tbody", null, [...Array(skeletonRowCount)].map((_, i) => (React.createElement("tr", { key: i }, [...Array(columnCount)].map((_, j) => (React.createElement("td", { key: j },
509
- React.createElement("div", { className: `${styles$2.skeleton} ${styles$2.skeletonText}` }))))))))));
567
+ React.createElement("div", { className: `${styles.skeleton} ${styles.skeletonText}` }))))))))));
510
568
  }
511
569
 
512
- var css_248z$1 = ".LoadingSpinner-module_spinner__F9V3x{animation:LoadingSpinner-module_spin__VkBDO .8s cubic-bezier(.4,0,.2,1) infinite;border:3px solid rgba(0,0,0,.05);border-left:3px solid var(--primary-color,#007bff);border-radius:50%;display:inline-block;height:28px;vertical-align:middle;width:28px}@keyframes LoadingSpinner-module_spin__VkBDO{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}";
513
- var styles$1 = {"spinner":"LoadingSpinner-module_spinner__F9V3x"};
514
- styleInject(css_248z$1);
515
-
516
- var css_248z = ".NoMoreDataMessage-module_infoContainer__dk1r5{align-items:center;background-color:var(--table-header-bg,#f8f9fa);border-top:1px solid var(--table-border-color,#e0e0e0);color:var(--text-color-muted,#6c757d);display:flex;font-size:.85rem;gap:.75rem;justify-content:center;padding:2rem;width:100%}.NoMoreDataMessage-module_infoContainer__dk1r5.NoMoreDataMessage-module_noMoreData__ATuIg{font-weight:600;letter-spacing:.02em}";
517
- var styles = {"infoContainer":"NoMoreDataMessage-module_infoContainer__dk1r5","noMoreData":"NoMoreDataMessage-module_noMoreData__ATuIg"};
518
- styleInject(css_248z);
519
-
520
- const LoadingSpinner = () => {
521
- return (React.createElement("div", { className: styles.infoContainer },
522
- React.createElement("div", { className: styles$1.spinner }),
523
- React.createElement("span", null, "Loading more items...")));
524
- };
525
-
526
- const NoMoreDataMessage = () => {
527
- return (React.createElement("div", { className: `${styles.infoContainer} ${styles.noMoreData}` },
528
- React.createElement("p", null, "You've reached the end!")));
529
- };
530
-
531
570
  function debounce(func, delay) {
532
571
  let timeout;
533
572
  return function (...args) {
@@ -742,7 +781,7 @@ class SelectionPlugin {
742
781
  const rowId = this.getRowId(row);
743
782
  const isSelected = selectedIds.has(rowId);
744
783
  const combinedClassName = [
745
- isSelected ? styles$2.selectedRow : '',
784
+ isSelected ? styles.selectedRow : '',
746
785
  isSelected ? selectedRowClassName : ''
747
786
  ].filter(Boolean).join(' ');
748
787
  return {
@@ -887,7 +926,7 @@ class SortPlugin {
887
926
  }
888
927
 
889
928
  const useTablePlugins = (props) => {
890
- const { data, plugins, filterProps, selectionProps, sortProps, columnDefinitions, getScrollableElement, infiniteScrollProps, onFilterChange, } = props;
929
+ const { data, plugins, filterProps, selectionProps, sortProps, columnDefinitions, getScrollableElement, onFilterChange, } = props;
891
930
  const [processedData, setProcessedData] = useState(data);
892
931
  const [activePlugins, setActivePlugins] = useState([]);
893
932
  // Persist internal plugins using refs to prevent state loss
@@ -957,7 +996,6 @@ const useTablePlugins = (props) => {
957
996
  getData: () => data,
958
997
  forceUpdate: forceUpdatePlugins,
959
998
  getScrollableElement: getScrollableElement,
960
- infiniteScrollProps: infiniteScrollProps,
961
999
  filterProps: filterProps,
962
1000
  selectionProps: selectionProps,
963
1001
  columnDefinitions: columnDefinitions,
@@ -985,7 +1023,6 @@ const useTablePlugins = (props) => {
985
1023
  sortProps,
986
1024
  columnDefinitions,
987
1025
  getScrollableElement,
988
- infiniteScrollProps,
989
1026
  getRawColumnDefinition,
990
1027
  onFilterChange,
991
1028
  ]);
@@ -999,157 +1036,6 @@ const useTablePlugins = (props) => {
999
1036
  return { processedData, activePlugins, visibleColumns, forceUpdatePlugins };
1000
1037
  };
1001
1038
 
1002
- function InfiniteTable(props) {
1003
- const { columnDefinitions, data, noDataComponent, maxHeight, onRowClick, footerRows, mobileBreakpoint, plugins, enablePageLevelStickyHeader, infiniteScrollProps, filterProps, selectionProps, animationProps, sortProps, } = props;
1004
- const tableContainerRef = useRef(null);
1005
- const headerRef = useRef(null);
1006
- const { isMobile, isHeaderSticky, debouncedScrollHandler } = useResponsiveTable({
1007
- mobileBreakpoint,
1008
- enablePageLevelStickyHeader,
1009
- maxHeight,
1010
- headerRef,
1011
- scrollableRef: tableContainerRef,
1012
- });
1013
- const [internalData, setInternalData] = useState(data || []);
1014
- const [isLoadingMore, setIsLoadingMore] = useState(false);
1015
- const [internalHasMore, setInternalHasMore] = useState(true);
1016
- const getScrollableElement = useCallback(() => tableContainerRef.current, []);
1017
- const { processedData, activePlugins, visibleColumns } = useTablePlugins({
1018
- data: internalData,
1019
- plugins,
1020
- filterProps,
1021
- selectionProps,
1022
- sortProps,
1023
- columnDefinitions,
1024
- getScrollableElement,
1025
- infiniteScrollProps,
1026
- });
1027
- const currentHasMore = (infiniteScrollProps === null || infiniteScrollProps === void 0 ? void 0 : infiniteScrollProps.hasMore) !== undefined
1028
- ? infiniteScrollProps.hasMore
1029
- : internalHasMore;
1030
- const hasData = useMemo(() => processedData.length > 0, [processedData]);
1031
- const noDataComponentNode = noDataComponent || React.createElement("div", { className: styles$2.noData }, "No data");
1032
- const defaultLoadingComponent = React.createElement(LoadingSpinner, null);
1033
- const defaultNoMoreDataComponent = React.createElement(NoMoreDataMessage, null);
1034
- const loadMoreData = useCallback(() => __awaiter(this, void 0, void 0, function* () {
1035
- var _a;
1036
- if (!infiniteScrollProps || isLoadingMore)
1037
- return;
1038
- setIsLoadingMore(true);
1039
- try {
1040
- const newItems = yield ((_a = infiniteScrollProps.onLoadMore) === null || _a === void 0 ? void 0 : _a.call(infiniteScrollProps, internalData));
1041
- if (infiniteScrollProps.hasMore === undefined) {
1042
- if (!newItems || newItems.length === 0) {
1043
- setInternalHasMore(false);
1044
- }
1045
- }
1046
- if (newItems && newItems.length > 0) {
1047
- setInternalData(prevData => [...prevData, ...newItems]);
1048
- }
1049
- }
1050
- catch (error) {
1051
- console.error("Failed to load more items for infinite scroll:", error);
1052
- }
1053
- finally {
1054
- setIsLoadingMore(false);
1055
- }
1056
- }), [infiniteScrollProps, isLoadingMore, internalData]);
1057
- useEffect(() => {
1058
- setInternalData(data || []);
1059
- }, [data]);
1060
- useEffect(() => {
1061
- if (data.length === 0) {
1062
- loadMoreData();
1063
- }
1064
- }, [data.length, loadMoreData]);
1065
- const handleScrollForInfinite = useCallback((currentTarget) => {
1066
- if (!currentTarget)
1067
- return;
1068
- const { scrollHeight, scrollTop, clientHeight } = currentTarget;
1069
- if (currentHasMore && !isLoadingMore && scrollHeight - scrollTop - clientHeight < 100) {
1070
- loadMoreData();
1071
- }
1072
- }, [currentHasMore, isLoadingMore, loadMoreData]);
1073
- const mobileFooter = useMemo(() => {
1074
- if (!footerRows || footerRows.length === 0) {
1075
- return null;
1076
- }
1077
- // Helper to get raw column definition in this context
1078
- const getRaw = (colDef) => {
1079
- if (typeof colDef === 'function') {
1080
- return processedData.length > 0 ? colDef(processedData[0], 0) : { displayLabel: '', cellRenderer: () => '' };
1081
- }
1082
- return colDef;
1083
- };
1084
- return (React.createElement("div", { className: styles$2.footerCard },
1085
- React.createElement("div", { className: styles$2['footer-card-body'] }, footerRows.map((row, rowIndex) => {
1086
- let currentColumnIndex = 0;
1087
- return (React.createElement("div", { key: rowIndex }, row.columns.map((col, colIndex) => {
1088
- let label = col.displayLabel;
1089
- if (!label && col.colSpan === 1) {
1090
- const header = columnDefinitions[currentColumnIndex];
1091
- if (header) {
1092
- label = getRaw(header).displayLabel;
1093
- }
1094
- }
1095
- currentColumnIndex += col.colSpan;
1096
- return (React.createElement("p", { key: colIndex, className: `${styles$2['footer-card-row']} ${col.className || ''} ${col.onCellClick ? styles$2.clickableFooterCell : ''}`, onClick: col.onCellClick },
1097
- label && React.createElement("span", { className: styles$2['card-label'] }, label),
1098
- React.createElement("span", { className: styles$2['card-value'] }, col.cellRenderer())));
1099
- })));
1100
- }))));
1101
- }, [footerRows, columnDefinitions, processedData]);
1102
- const renderPluginHeaders = useCallback(() => {
1103
- if (!activePlugins) {
1104
- return null;
1105
- }
1106
- return activePlugins.map((plugin) => {
1107
- if (plugin.renderHeader) {
1108
- if (plugin.id === 'sort' && !isMobile) {
1109
- return null;
1110
- }
1111
- return React.createElement("div", { key: plugin.id }, plugin.renderHeader());
1112
- }
1113
- return null;
1114
- });
1115
- }, [activePlugins, isMobile]);
1116
- const renderPluginFooters = useCallback(() => {
1117
- if (!plugins) {
1118
- return null;
1119
- }
1120
- return plugins.map((plugin) => {
1121
- if (plugin.renderFooter) {
1122
- return React.createElement("div", { key: plugin.id + '-footer' }, plugin.renderFooter());
1123
- }
1124
- return null;
1125
- });
1126
- }, [plugins]);
1127
- const infiniteStatusUI = (React.createElement(React.Fragment, null,
1128
- isLoadingMore && ((infiniteScrollProps === null || infiniteScrollProps === void 0 ? void 0 : infiniteScrollProps.loadingMoreComponent) || defaultLoadingComponent),
1129
- !isLoadingMore && !currentHasMore && ((infiniteScrollProps === null || infiniteScrollProps === void 0 ? void 0 : infiniteScrollProps.noMoreDataComponent) || defaultNoMoreDataComponent)));
1130
- if ((animationProps === null || animationProps === void 0 ? void 0 : animationProps.isLoading) && !hasData) {
1131
- return React.createElement(SkeletonView, { isMobile: isMobile, columnDefinitions: visibleColumns });
1132
- }
1133
- return (React.createElement(TableProvider, { value: {
1134
- data: internalData,
1135
- processedData,
1136
- visibleColumns,
1137
- originalColumnDefinitions: columnDefinitions,
1138
- activePlugins,
1139
- onRowClick,
1140
- selectionProps,
1141
- animationProps,
1142
- } },
1143
- React.createElement("div", null,
1144
- React.createElement("div", { style: { display: 'flex', justifyContent: 'flex-end' } }, renderPluginHeaders()),
1145
- !hasData && noDataComponentNode,
1146
- hasData && (isMobile ? (React.createElement(MobileView, { mobileFooter: mobileFooter })) : (React.createElement(DesktopView, { maxHeight: maxHeight, isHeaderSticky: isHeaderSticky, tableContainerRef: tableContainerRef, headerRef: headerRef, footerRows: footerRows, renderPluginFooters: renderPluginFooters, onScroll: (e) => {
1147
- debouncedScrollHandler(e.currentTarget); // For sticky header
1148
- handleScrollForInfinite(e.currentTarget); // For infinite scroll
1149
- } }))),
1150
- hasData && infiniteStatusUI)));
1151
- }
1152
-
1153
1039
  const useTableDataSource = (props) => {
1154
1040
  const { dataSource, pageSize = 20, initialData = [], sort, filter } = props;
1155
1041
  const [data, setData] = useState(initialData);
@@ -1251,7 +1137,7 @@ const useTableDataSource = (props) => {
1251
1137
  * Supports static data or async data sources with built-in infinite scroll.
1252
1138
  */
1253
1139
  function ResponsiveTableInner(props, ref) {
1254
- const { columnDefinitions, data: initialData, dataSource, pageSize, noDataComponent, maxHeight, onRowClick, footerRows, mobileBreakpoint, plugins, enablePageLevelStickyHeader, infiniteScrollProps, filterProps, selectionProps, animationProps, sortProps, mobileCardClassName, onDataSourceStateChange, onPageChange, onDataSourceError, expandRowRenderer, expandChevronClassName, } = props;
1140
+ const { columnDefinitions, data: initialData, dataSource, pageSize, noDataComponent, maxHeight, onRowClick, footerRows, mobileBreakpoint, plugins, enablePageLevelStickyHeader, filterProps, selectionProps, animationProps, sortProps, mobileCardClassName, onDataSourceStateChange, onPageChange, onDataSourceError, expandRowRenderer, expandChevronClassName, } = props;
1255
1141
  const tableContainerRef = useRef(null);
1256
1142
  const headerRef = useRef(null);
1257
1143
  const { isMobile, isHeaderSticky } = useResponsiveTable({
@@ -1311,7 +1197,6 @@ function ResponsiveTableInner(props, ref) {
1311
1197
  sortProps,
1312
1198
  columnDefinitions,
1313
1199
  getScrollableElement,
1314
- infiniteScrollProps,
1315
1200
  });
1316
1201
  // Fire onDataSourceStateChange when dataSource state changes
1317
1202
  useEffect(() => {
@@ -1342,9 +1227,9 @@ function ResponsiveTableInner(props, ref) {
1342
1227
  const hasData = useMemo(() => processedData.length > 0, [processedData]);
1343
1228
  const noDataSvg = (React.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", fill: "#ccc", height: "40", width: "40", viewBox: "0 0 24 24" },
1344
1229
  React.createElement("path", { d: "M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm-1-14h2v6h-2zm0 8h2v2h-2z" })));
1345
- const noDataComponentNode = noDataComponent || (React.createElement("div", { className: styles$2.noDataWrapper },
1230
+ const noDataComponentNode = noDataComponent || (React.createElement("div", { className: styles.noDataWrapper },
1346
1231
  noDataSvg,
1347
- React.createElement("div", { className: styles$2.noData }, "No data")));
1232
+ React.createElement("div", { className: styles.noData }, "No data")));
1348
1233
  const mobileFooter = useMemo(() => {
1349
1234
  if (!footerRows || footerRows.length === 0) {
1350
1235
  return null;
@@ -1356,8 +1241,8 @@ function ResponsiveTableInner(props, ref) {
1356
1241
  }
1357
1242
  return colDef;
1358
1243
  };
1359
- return (React.createElement("div", { className: styles$2.footerCard },
1360
- React.createElement("div", { className: styles$2['footer-card-body'] }, footerRows.map((row, rowIndex) => {
1244
+ return (React.createElement("div", { className: styles.footerCard },
1245
+ React.createElement("div", { className: styles['footer-card-body'] }, footerRows.map((row, rowIndex) => {
1361
1246
  let currentColumnIndex = 0;
1362
1247
  return (React.createElement("div", { key: rowIndex }, row.columns.map((col, colIndex) => {
1363
1248
  let label = col.displayLabel;
@@ -1368,9 +1253,9 @@ function ResponsiveTableInner(props, ref) {
1368
1253
  }
1369
1254
  }
1370
1255
  currentColumnIndex += col.colSpan;
1371
- return (React.createElement("p", { key: colIndex, className: `${styles$2['footer-card-row']} ${col.className || ''} ${col.onCellClick ? styles$2.clickableFooterCell : ''}`, onClick: col.onCellClick },
1372
- label && React.createElement("span", { className: styles$2['card-label'] }, label),
1373
- React.createElement("span", { className: styles$2['card-value'] }, col.cellRenderer())));
1256
+ return (React.createElement("p", { key: colIndex, className: `${styles['footer-card-row']} ${col.className || ''} ${col.onCellClick ? styles.clickableFooterCell : ''}`, onClick: col.onCellClick },
1257
+ label && React.createElement("span", { className: styles['card-label'] }, label),
1258
+ React.createElement("span", { className: styles['card-value'] }, col.cellRenderer())));
1374
1259
  })));
1375
1260
  }))));
1376
1261
  }, [footerRows, columnDefinitions, processedData]);
@@ -1404,9 +1289,6 @@ function ResponsiveTableInner(props, ref) {
1404
1289
  animateOnLoad: animationProps === null || animationProps === void 0 ? void 0 : animationProps.animateOnLoad,
1405
1290
  isLoading,
1406
1291
  }), [animationProps === null || animationProps === void 0 ? void 0 : animationProps.animateOnLoad, animationProps === null || animationProps === void 0 ? void 0 : animationProps.isLoading, isLoading]);
1407
- if (infiniteScrollProps) {
1408
- return React.createElement(InfiniteTable, Object.assign({}, props));
1409
- }
1410
1292
  if (isLoading && !hasData) {
1411
1293
  return React.createElement(SkeletonView, { isMobile: isMobile, columnDefinitions: visibleColumns });
1412
1294
  }
@@ -1467,58 +1349,5 @@ function ResponsiveTableInner(props, ref) {
1467
1349
  }
1468
1350
  const ResponsiveTable = forwardRef(ResponsiveTableInner);
1469
1351
 
1470
- class InfiniteScrollPlugin {
1471
- constructor() {
1472
- this.id = 'infinite-scroll';
1473
- this.isLoadingMore = false;
1474
- this.onPluginInit = (api) => {
1475
- this.api = api;
1476
- this.attachScrollListener();
1477
- };
1478
- this.attachScrollListener = () => {
1479
- var _a, _b;
1480
- const scrollableElement = (_b = (_a = this.api).getScrollableElement) === null || _b === void 0 ? void 0 : _b.call(_a);
1481
- if (scrollableElement) {
1482
- scrollableElement.addEventListener('scroll', this.handleScroll);
1483
- }
1484
- };
1485
- this.handleScroll = () => __awaiter(this, void 0, void 0, function* () {
1486
- var _a, _b, _c, _d;
1487
- const scrollableElement = (_b = (_a = this.api).getScrollableElement) === null || _b === void 0 ? void 0 : _b.call(_a);
1488
- if (!scrollableElement || !this.api.infiniteScrollProps) {
1489
- return;
1490
- }
1491
- const { scrollTop, scrollHeight, clientHeight } = scrollableElement;
1492
- const scrollThreshold = 200; // Load more data when 200px from the bottom
1493
- if (scrollHeight - scrollTop - clientHeight < scrollThreshold &&
1494
- this.api.infiniteScrollProps.hasMore &&
1495
- !this.isLoadingMore) {
1496
- this.isLoadingMore = true;
1497
- this.api.forceUpdate(); // Trigger re-render to show loading component
1498
- yield ((_d = (_c = this.api.infiniteScrollProps).onLoadMore) === null || _d === void 0 ? void 0 : _d.call(_c, this.api.getData()));
1499
- this.isLoadingMore = false;
1500
- this.api.forceUpdate(); // Trigger re-render to hide loading component
1501
- }
1502
- });
1503
- this.processData = (data) => {
1504
- // This plugin doesn't modify the data directly, but rather triggers loading more.
1505
- // The main component's data prop should be updated by the consumer of the table.
1506
- return data;
1507
- };
1508
- this.renderFooter = () => {
1509
- if (!this.api.infiniteScrollProps) {
1510
- return null;
1511
- }
1512
- if (this.isLoadingMore) {
1513
- return this.api.infiniteScrollProps.loadingMoreComponent || React.createElement("div", null, "Loading more...");
1514
- }
1515
- else if (!this.api.infiniteScrollProps.hasMore) {
1516
- return this.api.infiniteScrollProps.noMoreDataComponent || React.createElement("div", null, "No more data.");
1517
- }
1518
- return null;
1519
- };
1520
- }
1521
- }
1522
-
1523
- export { FilterPlugin, InfiniteScrollPlugin, SelectionPlugin, SortPlugin, ResponsiveTable as default, useTableContext };
1352
+ export { FilterPlugin, SelectionPlugin, SortPlugin, ResponsiveTable as default, useTableContext };
1524
1353
  //# sourceMappingURL=index.es.js.map