all-purpose-table 1.0.3 → 1.0.4

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.js CHANGED
@@ -26,7 +26,7 @@ function styleInject(css, { insertAt } = {}) {
26
26
  }
27
27
 
28
28
  // src/styles.css
29
- styleInject(":root {\n --apt-color-primary: #371f1f;\n --apt-color-border: #d1d5db;\n --apt-color-bg: white;\n --apt-color-bg-secondary: #e5e7eb;\n --apt-color-bg-hover: #f3f4f6;\n --apt-color-text: #1f2937;\n --apt-color-text-muted: #6b7280;\n --apt-color-text-muted-light: #9ca3af;\n --apt-color-accent: #9333ea;\n --apt-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1);\n --apt-shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);\n --apt-resizer-color: #bbb;\n --apt-resizer-hover-color: #888;\n --apt-th-sortable-hover: #d1d5db;\n --apt-btn-bg: white;\n --apt-btn-hover-bg: #d1d5db;\n}\n@media (prefers-color-scheme: dark) {\n :root {\n --apt-color-primary: #eee;\n --apt-color-border: #333;\n --apt-color-bg: #1e1e1e;\n --apt-color-bg-secondary: #333;\n --apt-color-bg-hover: rgba(126, 126, 126, 0.15);\n --apt-color-text: #eee;\n --apt-color-text-muted: #d1d5db;\n --apt-color-text-muted-light: #444;\n --apt-color-accent: #a855f7;\n --apt-resizer-color: #666;\n --apt-resizer-hover-color: #999;\n --apt-th-sortable-hover: #444;\n --apt-btn-bg: #444;\n --apt-btn-hover-bg: #555;\n }\n}\n.dark {\n --apt-color-primary: #eee;\n --apt-color-border: #333;\n --apt-color-bg: #1e1e1e;\n --apt-color-bg-secondary: #333;\n --apt-color-bg-hover: rgba(126, 126, 126, 0.15);\n --apt-color-text: #eee;\n --apt-color-text-muted: #d1d5db;\n --apt-color-text-muted-light: #444;\n --apt-color-accent: #a855f7;\n --apt-resizer-color: #666;\n --apt-resizer-hover-color: #999;\n --apt-th-sortable-hover: #444;\n --apt-btn-bg: #444;\n --apt-btn-hover-bg: #555;\n}\n.apt-table-container {\n color: var(--apt-color-text);\n border-radius: 6px;\n margin: 0;\n padding: 0;\n border: 1px solid var(--apt-color-border);\n background-color: var(--apt-color-bg);\n box-shadow: var(--apt-shadow);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n.apt-empty-state {\n flex-grow: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n text-align: center;\n padding: 48px 0;\n color: var(--apt-color-text-muted-light);\n}\n.apt-scroll-area {\n flex-grow: 1;\n overflow: auto;\n}\n.apt-table {\n width: 100%;\n text-align: left;\n font-size: 0.75rem;\n table-layout: fixed;\n border-collapse: collapse;\n border-spacing: 0;\n margin: 0;\n padding: 0;\n}\n.apt-thead {\n position: sticky;\n top: 0;\n background-color: var(--apt-color-bg-secondary);\n z-index: 10;\n}\n.apt-th {\n position: relative;\n padding: 12px 8px;\n border: none;\n}\n.apt-th-sortable {\n cursor: pointer;\n}\n.apt-th-sortable:hover {\n background-color: var(--apt-th-sortable-hover);\n}\n.apt-th-content {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.apt-resizer {\n position: absolute;\n right: 0;\n top: 4px;\n height: 80%;\n width: 3px;\n border-radius: 2px;\n cursor: col-resize;\n user-select: none;\n touch-action: none;\n background-color: var(--apt-resizer-color);\n}\n.apt-resizer:hover,\n.apt-th:hover .apt-resizer {\n background-color: var(--apt-resizer-hover-color);\n}\n.apt-tbody {\n border: none;\n}\n.apt-tbody tr {\n border: none;\n}\n.apt-row {\n transition: background-color 0.15s;\n}\n.apt-row:hover {\n background-color: var(--apt-color-bg-hover);\n}\n.apt-row-expanded {\n background-color: var(--apt-color-bg-hover);\n}\n.apt-td {\n padding: 4px 8px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n border: none;\n}\n.apt-td-actions {\n padding: 4px 8px;\n border: none;\n}\n.apt-footer {\n display: grid;\n grid-template-columns: 1fr 1fr 1fr;\n align-items: center;\n padding: 8px;\n background-color: var(--apt-color-bg-secondary);\n}\n.apt-footer-left {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n.apt-footer-center {\n justify-self: center;\n font-size: 0.875rem;\n color: var(--apt-color-text);\n}\n.apt-footer-right {\n justify-self: end;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n.apt-rows-label {\n font-size: 0.75rem;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: var(--apt-color-text-muted);\n}\n.apt-rows-select {\n padding: 4px 8px;\n font-size: 0.875rem;\n border-radius: 4px;\n background-color: var(--apt-btn-bg);\n color: var(--apt-color-text);\n border: 1px solid var(--apt-color-border);\n}\n.apt-btn {\n padding: 4px 12px;\n font-size: 0.875rem;\n border-radius: 4px;\n background-color: var(--apt-btn-bg);\n color: var(--apt-color-text);\n border: 0;\n cursor: pointer;\n transition: background-color 0.15s;\n}\n.apt-btn:hover:not(:disabled) {\n background-color: var(--apt-btn-hover-bg);\n}\n.apt-btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n.apt-sort-icon {\n display: inline-block;\n margin-left: 4px;\n width: 14px;\n height: 14px;\n opacity: 0.3;\n}\n.apt-sort-icon-active {\n opacity: 1;\n}\n.apt-column-toggle-container {\n position: relative;\n}\n.apt-column-toggle-btn {\n display: flex;\n align-items: center;\n gap: 8px;\n border-radius: 8px;\n border: 1px solid var(--apt-color-border);\n background-color: var(--apt-color-bg-hover);\n padding: 8px 12px;\n font-size: 0.875rem;\n font-weight: 500;\n color: var(--apt-color-primary);\n box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1);\n cursor: pointer;\n transition: background-color 0.15s;\n}\n.apt-column-toggle-btn:hover {\n background-color: var(--apt-color-bg-secondary);\n}\n.apt-column-toggle-btn:focus {\n outline: none;\n}\n.apt-column-toggle-icon {\n font-size: 1.125rem;\n}\n.apt-column-toggle-count {\n font-size: 0.75rem;\n opacity: 0.7;\n}\n.apt-column-toggle-menu {\n position: absolute;\n right: 0;\n margin-top: 8px;\n width: 288px;\n border-radius: 8px;\n border: 1px solid var(--apt-color-border);\n background-color: var(--apt-color-bg);\n box-shadow: var(--apt-shadow-lg);\n z-index: 50;\n max-height: 384px;\n overflow-y: auto;\n}\n.apt-column-toggle-menu-inner {\n padding: 12px;\n}\n.apt-column-toggle-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 12px;\n border-bottom: 1px solid var(--apt-color-border);\n padding-bottom: 8px;\n}\n.apt-column-toggle-title {\n font-size: 0.875rem;\n font-weight: 600;\n color: var(--apt-color-primary);\n}\n.apt-column-toggle-select-all {\n font-size: 0.75rem;\n color: var(--apt-color-accent);\n background: none;\n border: none;\n cursor: pointer;\n text-decoration: none;\n}\n.apt-column-toggle-select-all:hover {\n text-decoration: underline;\n}\n.apt-column-toggle-list {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n.apt-column-toggle-item {\n display: flex;\n align-items: center;\n gap: 8px;\n cursor: pointer;\n padding: 6px 8px;\n border-radius: 4px;\n transition: background-color 0.15s;\n}\n.apt-column-toggle-item:hover {\n background-color: var(--apt-color-bg-hover);\n}\n.apt-column-toggle-checkbox {\n width: 16px;\n height: 16px;\n color: var(--apt-color-accent);\n border-radius: 12px;\n cursor: pointer;\n accent-color: var(--apt-color-accent);\n}\n.apt-column-toggle-label {\n font-size: 0.875rem;\n color: var(--apt-color-primary);\n flex: 1;\n}\n.apt-flex {\n display: flex;\n}\n.apt-items-center {\n align-items: center;\n}\n.apt-gap-2 {\n gap: 8px;\n}\n");
29
+ styleInject(":root {\n --apt-color-primary: #371f1f;\n --apt-color-border: #d1d5db;\n --apt-color-bg: white;\n --apt-color-bg-secondary: #e5e7eb;\n --apt-color-bg-hover: #f3f4f6;\n --apt-color-text: #1f2937;\n --apt-color-text-muted: #6b7280;\n --apt-color-text-muted-light: #9ca3af;\n --apt-color-accent: #9333ea;\n --apt-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1);\n --apt-shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);\n --apt-resizer-color: #bbb;\n --apt-resizer-hover-color: #888;\n --apt-th-sortable-hover: #d1d5db;\n --apt-btn-bg: white;\n --apt-btn-hover-bg: #d1d5db;\n}\n@media (prefers-color-scheme: dark) {\n :root {\n --apt-color-primary: #eee;\n --apt-color-border: #333;\n --apt-color-bg: #1e1e1e;\n --apt-color-bg-secondary: #333;\n --apt-color-bg-hover: rgba(126, 126, 126, 0.15);\n --apt-color-text: #eee;\n --apt-color-text-muted: #d1d5db;\n --apt-color-text-muted-light: #444;\n --apt-color-accent: #a855f7;\n --apt-resizer-color: #666;\n --apt-resizer-hover-color: #999;\n --apt-th-sortable-hover: #444;\n --apt-btn-bg: #444;\n --apt-btn-hover-bg: #555;\n }\n}\nhtml.dark,\n.dark,\n:root.dark {\n --apt-color-primary: #eee;\n --apt-color-border: #333;\n --apt-color-bg: #1e1e1e;\n --apt-color-bg-secondary: #333;\n --apt-color-bg-hover: rgba(126, 126, 126, 0.15);\n --apt-color-text: #eee;\n --apt-color-text-muted: #d1d5db;\n --apt-color-text-muted-light: #444;\n --apt-color-accent: #a855f7;\n --apt-resizer-color: #666;\n --apt-resizer-hover-color: #999;\n --apt-th-sortable-hover: #444;\n --apt-btn-bg: #444;\n --apt-btn-hover-bg: #555;\n}\nhtml.light,\n.light,\n:root.light {\n --apt-color-primary: #371f1f;\n --apt-color-border: #d1d5db;\n --apt-color-bg: white;\n --apt-color-bg-secondary: #e5e7eb;\n --apt-color-bg-hover: #f3f4f6;\n --apt-color-text: #1f2937;\n --apt-color-text-muted: #6b7280;\n --apt-color-text-muted-light: #9ca3af;\n --apt-color-accent: #9333ea;\n --apt-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1);\n --apt-shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);\n --apt-resizer-color: #bbb;\n --apt-resizer-hover-color: #888;\n --apt-th-sortable-hover: #d1d5db;\n --apt-btn-bg: white;\n --apt-btn-hover-bg: #d1d5db;\n}\n.apt-table-container {\n color: var(--apt-color-text);\n border-radius: 6px;\n margin: 0;\n padding: 0;\n border: 1px solid var(--apt-color-border);\n background-color: var(--apt-color-bg);\n box-shadow: var(--apt-shadow);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n.apt-empty-state {\n flex-grow: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n text-align: center;\n padding: 48px 0;\n color: var(--apt-color-text-muted-light);\n}\n.apt-scroll-area {\n flex-grow: 1;\n overflow: auto;\n}\n.apt-table {\n width: 100%;\n text-align: left;\n font-size: 0.75rem;\n table-layout: fixed;\n border-collapse: collapse;\n border-spacing: 0;\n margin: 0;\n padding: 0;\n}\n.apt-thead {\n position: sticky;\n top: 0;\n background-color: var(--apt-color-bg-secondary);\n z-index: 10;\n}\n.apt-th {\n position: relative;\n padding: 12px 8px;\n border: none;\n}\n.apt-th-sortable {\n cursor: pointer;\n}\n.apt-th-sortable:hover {\n background-color: var(--apt-th-sortable-hover);\n}\n.apt-th-content {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.apt-resizer {\n position: absolute;\n right: 0;\n top: 4px;\n height: 80%;\n width: 3px;\n border-radius: 2px;\n cursor: col-resize;\n user-select: none;\n touch-action: none;\n background-color: var(--apt-resizer-color);\n}\n.apt-resizer:hover,\n.apt-th:hover .apt-resizer {\n background-color: var(--apt-resizer-hover-color);\n}\n.apt-tbody {\n border: none;\n}\n.apt-tbody tr {\n border: none;\n}\n.apt-row {\n transition: background-color 0.15s;\n}\n.apt-row:hover {\n background-color: var(--apt-color-bg-hover);\n}\n.apt-row-expanded {\n background-color: var(--apt-color-bg-hover);\n}\n.apt-td {\n padding: 4px 8px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n border: none;\n}\n.apt-td-actions {\n padding: 4px 8px;\n border: none;\n}\n.apt-footer {\n display: grid;\n grid-template-columns: 1fr 1fr 1fr;\n align-items: center;\n padding: 8px;\n background-color: var(--apt-color-bg-secondary);\n}\n.apt-footer-left {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n.apt-footer-center {\n justify-self: center;\n font-size: 0.875rem;\n color: var(--apt-color-text);\n}\n.apt-footer-right {\n justify-self: end;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n.apt-rows-label {\n font-size: 0.75rem;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: var(--apt-color-text-muted);\n}\n.apt-rows-select {\n padding: 4px 8px;\n font-size: 0.875rem;\n border-radius: 4px;\n background-color: var(--apt-btn-bg);\n color: var(--apt-color-text);\n border: 1px solid var(--apt-color-border);\n}\n.apt-btn {\n padding: 4px 12px;\n font-size: 0.875rem;\n border-radius: 4px;\n background-color: var(--apt-btn-bg);\n color: var(--apt-color-text);\n border: 0;\n cursor: pointer;\n transition: background-color 0.15s;\n}\n.apt-btn:hover:not(:disabled) {\n background-color: var(--apt-btn-hover-bg);\n}\n.apt-btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n.apt-sort-icon {\n display: inline-block;\n margin-left: 4px;\n width: 14px;\n height: 14px;\n opacity: 0.3;\n}\n.apt-sort-icon-active {\n opacity: 1;\n}\n.apt-column-toggle-container {\n position: relative;\n}\n.apt-column-toggle-btn {\n display: flex;\n align-items: center;\n gap: 8px;\n border-radius: 8px;\n border: 1px solid var(--apt-color-border);\n background-color: var(--apt-color-bg-hover);\n padding: 8px 12px;\n font-size: 0.875rem;\n font-weight: 500;\n color: var(--apt-color-primary);\n box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1);\n cursor: pointer;\n transition: background-color 0.15s;\n}\n.apt-column-toggle-btn:hover {\n background-color: var(--apt-color-bg-secondary);\n}\n.apt-column-toggle-btn:focus {\n outline: none;\n}\n.apt-column-toggle-icon {\n font-size: 1.125rem;\n}\n.apt-column-toggle-count {\n font-size: 0.75rem;\n opacity: 0.7;\n}\n.apt-column-toggle-menu {\n position: absolute;\n right: 0;\n margin-top: 8px;\n width: 288px;\n border-radius: 8px;\n border: 1px solid var(--apt-color-border);\n background-color: var(--apt-color-bg);\n box-shadow: var(--apt-shadow-lg);\n z-index: 50;\n max-height: 384px;\n overflow-y: auto;\n}\n.apt-column-toggle-menu-inner {\n padding: 12px;\n}\n.apt-column-toggle-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 12px;\n border-bottom: 1px solid var(--apt-color-border);\n padding-bottom: 8px;\n}\n.apt-column-toggle-title {\n font-size: 0.875rem;\n font-weight: 600;\n color: var(--apt-color-primary);\n}\n.apt-column-toggle-select-all {\n font-size: 0.75rem;\n color: var(--apt-color-accent);\n background: none;\n border: none;\n cursor: pointer;\n text-decoration: none;\n}\n.apt-column-toggle-select-all:hover {\n text-decoration: underline;\n}\n.apt-column-toggle-list {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n.apt-column-toggle-item {\n display: flex;\n align-items: center;\n gap: 8px;\n cursor: pointer;\n padding: 6px 8px;\n border-radius: 4px;\n transition: background-color 0.15s;\n}\n.apt-column-toggle-item:hover {\n background-color: var(--apt-color-bg-hover);\n}\n.apt-column-toggle-checkbox {\n width: 16px;\n height: 16px;\n color: var(--apt-color-accent);\n border-radius: 12px;\n cursor: pointer;\n accent-color: var(--apt-color-accent);\n}\n.apt-column-toggle-label {\n font-size: 0.875rem;\n color: var(--apt-color-primary);\n flex: 1;\n}\n.apt-flex {\n display: flex;\n}\n.apt-items-center {\n align-items: center;\n}\n.apt-gap-2 {\n gap: 8px;\n}\n");
30
30
  var SortIcon = ({ className }) => /* @__PURE__ */ jsxRuntime.jsx(
31
31
  "svg",
32
32
  {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["#style-inject:#style-inject","../src/styles.css","../src/Table.tsx","../src/ColumnVisibilityToggle.tsx"],"names":["jsx","useState","useRef","useMemo","useEffect","jsxs","Fragment"],"mappings":"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","file":"index.js","sourcesContent":["\n export default function styleInject(css, { insertAt } = {}) {\n if (!css || typeof document === 'undefined') return\n \n const head = document.head || document.getElementsByTagName('head')[0]\n const style = document.createElement('style')\n style.type = 'text/css'\n \n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild)\n } else {\n head.appendChild(style)\n }\n } else {\n head.appendChild(style)\n }\n \n if (style.styleSheet) {\n style.styleSheet.cssText = css\n } else {\n style.appendChild(document.createTextNode(css))\n }\n }\n ","import styleInject from '#style-inject';styleInject(\":root {\\n --apt-color-primary: #371f1f;\\n --apt-color-border: #d1d5db;\\n --apt-color-bg: white;\\n --apt-color-bg-secondary: #e5e7eb;\\n --apt-color-bg-hover: #f3f4f6;\\n --apt-color-text: #1f2937;\\n --apt-color-text-muted: #6b7280;\\n --apt-color-text-muted-light: #9ca3af;\\n --apt-color-accent: #9333ea;\\n --apt-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1);\\n --apt-shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);\\n --apt-resizer-color: #bbb;\\n --apt-resizer-hover-color: #888;\\n --apt-th-sortable-hover: #d1d5db;\\n --apt-btn-bg: white;\\n --apt-btn-hover-bg: #d1d5db;\\n}\\n@media (prefers-color-scheme: dark) {\\n :root {\\n --apt-color-primary: #eee;\\n --apt-color-border: #333;\\n --apt-color-bg: #1e1e1e;\\n --apt-color-bg-secondary: #333;\\n --apt-color-bg-hover: rgba(126, 126, 126, 0.15);\\n --apt-color-text: #eee;\\n --apt-color-text-muted: #d1d5db;\\n --apt-color-text-muted-light: #444;\\n --apt-color-accent: #a855f7;\\n --apt-resizer-color: #666;\\n --apt-resizer-hover-color: #999;\\n --apt-th-sortable-hover: #444;\\n --apt-btn-bg: #444;\\n --apt-btn-hover-bg: #555;\\n }\\n}\\n.dark {\\n --apt-color-primary: #eee;\\n --apt-color-border: #333;\\n --apt-color-bg: #1e1e1e;\\n --apt-color-bg-secondary: #333;\\n --apt-color-bg-hover: rgba(126, 126, 126, 0.15);\\n --apt-color-text: #eee;\\n --apt-color-text-muted: #d1d5db;\\n --apt-color-text-muted-light: #444;\\n --apt-color-accent: #a855f7;\\n --apt-resizer-color: #666;\\n --apt-resizer-hover-color: #999;\\n --apt-th-sortable-hover: #444;\\n --apt-btn-bg: #444;\\n --apt-btn-hover-bg: #555;\\n}\\n.apt-table-container {\\n color: var(--apt-color-text);\\n border-radius: 6px;\\n margin: 0;\\n padding: 0;\\n border: 1px solid var(--apt-color-border);\\n background-color: var(--apt-color-bg);\\n box-shadow: var(--apt-shadow);\\n display: flex;\\n flex-direction: column;\\n overflow: hidden;\\n}\\n.apt-empty-state {\\n flex-grow: 1;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n text-align: center;\\n padding: 48px 0;\\n color: var(--apt-color-text-muted-light);\\n}\\n.apt-scroll-area {\\n flex-grow: 1;\\n overflow: auto;\\n}\\n.apt-table {\\n width: 100%;\\n text-align: left;\\n font-size: 0.75rem;\\n table-layout: fixed;\\n border-collapse: collapse;\\n border-spacing: 0;\\n margin: 0;\\n padding: 0;\\n}\\n.apt-thead {\\n position: sticky;\\n top: 0;\\n background-color: var(--apt-color-bg-secondary);\\n z-index: 10;\\n}\\n.apt-th {\\n position: relative;\\n padding: 12px 8px;\\n border: none;\\n}\\n.apt-th-sortable {\\n cursor: pointer;\\n}\\n.apt-th-sortable:hover {\\n background-color: var(--apt-th-sortable-hover);\\n}\\n.apt-th-content {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n}\\n.apt-resizer {\\n position: absolute;\\n right: 0;\\n top: 4px;\\n height: 80%;\\n width: 3px;\\n border-radius: 2px;\\n cursor: col-resize;\\n user-select: none;\\n touch-action: none;\\n background-color: var(--apt-resizer-color);\\n}\\n.apt-resizer:hover,\\n.apt-th:hover .apt-resizer {\\n background-color: var(--apt-resizer-hover-color);\\n}\\n.apt-tbody {\\n border: none;\\n}\\n.apt-tbody tr {\\n border: none;\\n}\\n.apt-row {\\n transition: background-color 0.15s;\\n}\\n.apt-row:hover {\\n background-color: var(--apt-color-bg-hover);\\n}\\n.apt-row-expanded {\\n background-color: var(--apt-color-bg-hover);\\n}\\n.apt-td {\\n padding: 4px 8px;\\n white-space: nowrap;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n border: none;\\n}\\n.apt-td-actions {\\n padding: 4px 8px;\\n border: none;\\n}\\n.apt-footer {\\n display: grid;\\n grid-template-columns: 1fr 1fr 1fr;\\n align-items: center;\\n padding: 8px;\\n background-color: var(--apt-color-bg-secondary);\\n}\\n.apt-footer-left {\\n display: flex;\\n align-items: center;\\n gap: 8px;\\n}\\n.apt-footer-center {\\n justify-self: center;\\n font-size: 0.875rem;\\n color: var(--apt-color-text);\\n}\\n.apt-footer-right {\\n justify-self: end;\\n display: flex;\\n align-items: center;\\n gap: 8px;\\n}\\n.apt-rows-label {\\n font-size: 0.75rem;\\n text-transform: uppercase;\\n letter-spacing: 0.05em;\\n color: var(--apt-color-text-muted);\\n}\\n.apt-rows-select {\\n padding: 4px 8px;\\n font-size: 0.875rem;\\n border-radius: 4px;\\n background-color: var(--apt-btn-bg);\\n color: var(--apt-color-text);\\n border: 1px solid var(--apt-color-border);\\n}\\n.apt-btn {\\n padding: 4px 12px;\\n font-size: 0.875rem;\\n border-radius: 4px;\\n background-color: var(--apt-btn-bg);\\n color: var(--apt-color-text);\\n border: 0;\\n cursor: pointer;\\n transition: background-color 0.15s;\\n}\\n.apt-btn:hover:not(:disabled) {\\n background-color: var(--apt-btn-hover-bg);\\n}\\n.apt-btn:disabled {\\n opacity: 0.5;\\n cursor: not-allowed;\\n}\\n.apt-sort-icon {\\n display: inline-block;\\n margin-left: 4px;\\n width: 14px;\\n height: 14px;\\n opacity: 0.3;\\n}\\n.apt-sort-icon-active {\\n opacity: 1;\\n}\\n.apt-column-toggle-container {\\n position: relative;\\n}\\n.apt-column-toggle-btn {\\n display: flex;\\n align-items: center;\\n gap: 8px;\\n border-radius: 8px;\\n border: 1px solid var(--apt-color-border);\\n background-color: var(--apt-color-bg-hover);\\n padding: 8px 12px;\\n font-size: 0.875rem;\\n font-weight: 500;\\n color: var(--apt-color-primary);\\n box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1);\\n cursor: pointer;\\n transition: background-color 0.15s;\\n}\\n.apt-column-toggle-btn:hover {\\n background-color: var(--apt-color-bg-secondary);\\n}\\n.apt-column-toggle-btn:focus {\\n outline: none;\\n}\\n.apt-column-toggle-icon {\\n font-size: 1.125rem;\\n}\\n.apt-column-toggle-count {\\n font-size: 0.75rem;\\n opacity: 0.7;\\n}\\n.apt-column-toggle-menu {\\n position: absolute;\\n right: 0;\\n margin-top: 8px;\\n width: 288px;\\n border-radius: 8px;\\n border: 1px solid var(--apt-color-border);\\n background-color: var(--apt-color-bg);\\n box-shadow: var(--apt-shadow-lg);\\n z-index: 50;\\n max-height: 384px;\\n overflow-y: auto;\\n}\\n.apt-column-toggle-menu-inner {\\n padding: 12px;\\n}\\n.apt-column-toggle-header {\\n display: flex;\\n align-items: center;\\n justify-content: space-between;\\n margin-bottom: 12px;\\n border-bottom: 1px solid var(--apt-color-border);\\n padding-bottom: 8px;\\n}\\n.apt-column-toggle-title {\\n font-size: 0.875rem;\\n font-weight: 600;\\n color: var(--apt-color-primary);\\n}\\n.apt-column-toggle-select-all {\\n font-size: 0.75rem;\\n color: var(--apt-color-accent);\\n background: none;\\n border: none;\\n cursor: pointer;\\n text-decoration: none;\\n}\\n.apt-column-toggle-select-all:hover {\\n text-decoration: underline;\\n}\\n.apt-column-toggle-list {\\n display: flex;\\n flex-direction: column;\\n gap: 4px;\\n}\\n.apt-column-toggle-item {\\n display: flex;\\n align-items: center;\\n gap: 8px;\\n cursor: pointer;\\n padding: 6px 8px;\\n border-radius: 4px;\\n transition: background-color 0.15s;\\n}\\n.apt-column-toggle-item:hover {\\n background-color: var(--apt-color-bg-hover);\\n}\\n.apt-column-toggle-checkbox {\\n width: 16px;\\n height: 16px;\\n color: var(--apt-color-accent);\\n border-radius: 12px;\\n cursor: pointer;\\n accent-color: var(--apt-color-accent);\\n}\\n.apt-column-toggle-label {\\n font-size: 0.875rem;\\n color: var(--apt-color-primary);\\n flex: 1;\\n}\\n.apt-flex {\\n display: flex;\\n}\\n.apt-items-center {\\n align-items: center;\\n}\\n.apt-gap-2 {\\n gap: 8px;\\n}\\n\")","import {\r\n Fragment,\r\n useEffect,\r\n useMemo,\r\n useRef,\r\n useState,\r\n CSSProperties,\r\n} from \"react\";\r\n\r\n// ============= TypeScript Interfaces =============\r\n\r\nexport interface TableHeader {\r\n accessor: string;\r\n label: string;\r\n isSortable?: boolean;\r\n width?: string | number;\r\n minWidth?: string | number;\r\n cellRenderer?: (args: { row: any; value: any }) => React.ReactNode;\r\n}\r\n\r\nexport interface SortConfig {\r\n key: string;\r\n direction: \"asc\" | \"desc\";\r\n}\r\n\r\nexport interface TableProps {\r\n manualHeaders: TableHeader[];\r\n manualRowData: Record<string, any>[];\r\n initialSort?: SortConfig | null;\r\n height?: string;\r\n rowHeight?: number;\r\n rowsPerPage?: number;\r\n shouldPaginate?: boolean;\r\n rowClassName?: (row: any) => string;\r\n onRowClick?: (row: any) => void;\r\n minColWidth?: number;\r\n mobileAutoSizeOnHeaderClick?: boolean;\r\n mobileBreakpoint?: number;\r\n columnWidthsStorageKey?: string;\r\n rowsPerPageOptions?: number[];\r\n onRowsPerPageChange?: (value: number) => void;\r\n expandedRowId?: string | null;\r\n renderExpandedRow?: (row: any) => React.ReactNode;\r\n renderFullRow?: (row: any) => React.ReactNode;\r\n}\r\n\r\n// ============= SVG Icons (replaced react-icons) =============\r\n\r\nconst SortIcon: React.FC<{ className?: string }> = ({ className }) => (\r\n <svg\r\n className={className}\r\n width=\"12\"\r\n height=\"12\"\r\n viewBox=\"0 0 12 12\"\r\n fill=\"currentColor\"\r\n >\r\n <path d=\"M6 2L3 5h6L6 2zM6 10l3-3H3l3 3z\" />\r\n </svg>\r\n);\r\n\r\nconst SortUpIcon: React.FC<{ className?: string }> = ({ className }) => (\r\n <svg\r\n className={className}\r\n width=\"12\"\r\n height=\"12\"\r\n viewBox=\"0 0 12 12\"\r\n fill=\"currentColor\"\r\n >\r\n <path d=\"M6 2L2 7h8L6 2z\" />\r\n </svg>\r\n);\r\n\r\nconst SortDownIcon: React.FC<{ className?: string }> = ({ className }) => (\r\n <svg\r\n className={className}\r\n width=\"12\"\r\n height=\"12\"\r\n viewBox=\"0 0 12 12\"\r\n fill=\"currentColor\"\r\n >\r\n <path d=\"M6 10l4-5H2l4 5z\" />\r\n </svg>\r\n);\r\n\r\n// ============= Main Component =============\r\n\r\nconst Table: React.FC<TableProps> = ({\r\n manualHeaders,\r\n manualRowData,\r\n initialSort,\r\n height = \"100%\",\r\n rowHeight = 40,\r\n rowsPerPage = 60,\r\n shouldPaginate = true,\r\n rowClassName,\r\n onRowClick,\r\n minColWidth = 50,\r\n mobileAutoSizeOnHeaderClick = false,\r\n mobileBreakpoint = 768,\r\n columnWidthsStorageKey,\r\n rowsPerPageOptions = [20, 50, 100],\r\n onRowsPerPageChange,\r\n expandedRowId,\r\n renderExpandedRow,\r\n renderFullRow,\r\n}) => {\r\n const [sortConfig, setSortConfig] = useState<SortConfig | null>(\r\n initialSort || null,\r\n );\r\n const [currentPage, setCurrentPage] = useState(1);\r\n const [columnWidths, setColumnWidths] = useState<\r\n Record<string, string | number>\r\n >({});\r\n const [expandedColumns, setExpandedColumns] = useState<Set<string>>(\r\n () => new Set(),\r\n );\r\n const initialColumnWidthsRef = useRef<\r\n Record<string, string | number | undefined>\r\n >({});\r\n const tableRef = useRef<HTMLTableElement>(null);\r\n const textMeasureContextRef = useRef<CanvasRenderingContext2D | null>(null);\r\n const [isMobile, setIsMobile] = useState(() => {\r\n if (typeof window === \"undefined\") return false;\r\n return window.innerWidth < mobileBreakpoint;\r\n });\r\n\r\n const headers = useMemo(() => manualHeaders || [], [manualHeaders]);\r\n\r\n const loadStoredColumnWidths = (\r\n fallback: Record<string, string | number | undefined>,\r\n ) => {\r\n if (!columnWidthsStorageKey || typeof window === \"undefined\") {\r\n return fallback;\r\n }\r\n try {\r\n const raw = window.localStorage.getItem(columnWidthsStorageKey);\r\n if (!raw) return fallback;\r\n const parsed = JSON.parse(raw);\r\n if (!parsed || typeof parsed !== \"object\") return fallback;\r\n const next = { ...fallback };\r\n Object.keys(next).forEach((key) => {\r\n const val = parsed[key];\r\n if (typeof val === \"number\" || typeof val === \"string\") {\r\n next[key] = val;\r\n }\r\n });\r\n return next;\r\n } catch {\r\n return fallback;\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n const initialWidths: Record<string, string | number | undefined> = {};\r\n headers.forEach((header) => {\r\n initialWidths[header.accessor] = header.width;\r\n });\r\n initialColumnWidthsRef.current = initialWidths;\r\n setColumnWidths(\r\n loadStoredColumnWidths(initialWidths) as Record<string, string | number>,\r\n );\r\n setExpandedColumns(new Set());\r\n }, [headers, columnWidthsStorageKey]);\r\n\r\n useEffect(() => {\r\n if (!columnWidthsStorageKey || typeof window === \"undefined\") return;\r\n if (Object.keys(columnWidths).length === 0) return;\r\n window.localStorage.setItem(\r\n columnWidthsStorageKey,\r\n JSON.stringify(columnWidths),\r\n );\r\n }, [columnWidths, columnWidthsStorageKey]);\r\n\r\n useEffect(() => {\r\n if (typeof window === \"undefined\") return undefined;\r\n const handleResize = () =>\r\n setIsMobile(window.innerWidth < mobileBreakpoint);\r\n window.addEventListener(\"resize\", handleResize);\r\n return () => window.removeEventListener(\"resize\", handleResize);\r\n }, [mobileBreakpoint]);\r\n\r\n useEffect(() => {\r\n setCurrentPage(1);\r\n }, [rowsPerPage]);\r\n\r\n const measureTextWidth = (text: any): number => {\r\n if (typeof document === \"undefined\") return String(text ?? \"\").length * 8;\r\n const ctx =\r\n textMeasureContextRef.current ||\r\n (() => {\r\n const canvas = document.createElement(\"canvas\");\r\n const context = canvas.getContext(\"2d\");\r\n if (tableRef.current && context) {\r\n const font = window.getComputedStyle(tableRef.current).font;\r\n context.font = font || \"12px sans-serif\";\r\n }\r\n textMeasureContextRef.current = context;\r\n return context;\r\n })();\r\n return ctx ? ctx.measureText(String(text ?? \"\")).width : 0;\r\n };\r\n\r\n const parseWidthValue = (\r\n value: string | number | undefined,\r\n fallback: number,\r\n ): number => {\r\n if (typeof value === \"number\" && !Number.isNaN(value)) return value;\r\n if (typeof value === \"string\") {\r\n const parsed = parseFloat(value);\r\n if (!Number.isNaN(parsed)) return parsed;\r\n }\r\n return fallback;\r\n };\r\n\r\n const rows = useMemo(() => {\r\n if (!Array.isArray(manualRowData)) return [];\r\n\r\n const src = manualRowData\r\n .filter(Boolean)\r\n .filter((r) => typeof r === \"object\");\r\n\r\n const makeSafeId = (full: any, idx: number): string => {\r\n const rawId = full?.id;\r\n const v1 =\r\n rawId !== undefined && rawId !== null && String(rawId).trim() !== \"\"\r\n ? String(rawId).trim()\r\n : \"\";\r\n const v2 = [\r\n full?.order_id,\r\n full?.bom_id,\r\n full?.bom_workstation_status_id,\r\n full?.bom_data_id,\r\n full?.unique_task_info_id,\r\n full?.order_data_id,\r\n ]\r\n .filter((v) => v !== undefined && v !== null && String(v) !== \"\")\r\n .join(\"-\");\r\n return v1 || `${v2}-row${idx}`;\r\n };\r\n\r\n return src.map((full: any, idx: number) => {\r\n const id = makeSafeId(full, idx);\r\n const base: any = { id, \"#\": idx + 1, _meta: full };\r\n headers.forEach((h) => {\r\n if (![\"#\", \"details_meta\"].includes(h.accessor)) {\r\n base[h.accessor] = full?.[h.accessor] ?? \"\";\r\n }\r\n });\r\n return base;\r\n });\r\n }, [manualRowData, headers]);\r\n\r\n const sortedRows = useMemo(() => {\r\n if (!sortConfig || !sortConfig.key) {\r\n return rows;\r\n }\r\n const sortableRows = [...rows];\r\n sortableRows.sort((a, b) => {\r\n const aVal = a[sortConfig.key];\r\n const bVal = b[sortConfig.key];\r\n\r\n if (aVal < bVal) {\r\n return sortConfig.direction === \"asc\" ? -1 : 1;\r\n }\r\n if (aVal > bVal) {\r\n return sortConfig.direction === \"asc\" ? 1 : -1;\r\n }\r\n return 0;\r\n });\r\n return sortableRows;\r\n }, [rows, sortConfig]);\r\n\r\n const effectiveShouldPaginate =\r\n shouldPaginate && sortedRows.length > rowsPerPage;\r\n\r\n const totalPages = effectiveShouldPaginate\r\n ? Math.ceil(sortedRows.length / rowsPerPage)\r\n : 1;\r\n\r\n if (currentPage > totalPages && totalPages > 0) {\r\n setCurrentPage(1);\r\n }\r\n\r\n const paginatedRows = useMemo(() => {\r\n if (!effectiveShouldPaginate) return sortedRows;\r\n const startIndex = (currentPage - 1) * rowsPerPage;\r\n return sortedRows.slice(startIndex, startIndex + rowsPerPage);\r\n }, [sortedRows, currentPage, rowsPerPage, effectiveShouldPaginate]);\r\n\r\n const handleSort = (key: string, isSortable?: boolean) => {\r\n if (!isSortable) return;\r\n let direction: \"asc\" | \"desc\" = \"asc\";\r\n if (\r\n sortConfig &&\r\n sortConfig.key === key &&\r\n sortConfig.direction === \"asc\"\r\n ) {\r\n direction = \"desc\";\r\n }\r\n setSortConfig({ key, direction });\r\n setCurrentPage(1);\r\n };\r\n\r\n const autoSizeColumn = (colIndex: number, header: TableHeader) => {\r\n if (!tableRef.current) return;\r\n const tableEl = tableRef.current;\r\n let maxWidth = measureTextWidth(header?.label || \"\");\r\n\r\n const collectCellWidth = (cell: HTMLTableCellElement | null) => {\r\n if (!cell) return;\r\n const scrollWidth = cell.scrollWidth || cell.offsetWidth || 0;\r\n const style = window.getComputedStyle(cell);\r\n const borderWidth =\r\n parseFloat(style.borderLeftWidth || \"0\") +\r\n parseFloat(style.borderRightWidth || \"0\");\r\n maxWidth = Math.max(maxWidth, Math.ceil(scrollWidth + borderWidth));\r\n };\r\n\r\n const headerCell =\r\n tableEl.tHead?.rows?.[0]?.cells?.[colIndex] ||\r\n tableEl.querySelector(`thead th:nth-child(${colIndex + 1})`);\r\n collectCellWidth(headerCell as HTMLTableCellElement);\r\n\r\n const bodyRows = tableEl.tBodies?.[0]?.rows || [];\r\n for (const row of bodyRows) {\r\n collectCellWidth(row.cells?.[colIndex] as HTMLTableCellElement);\r\n }\r\n\r\n rows.forEach((r) => {\r\n maxWidth = Math.max(\r\n maxWidth,\r\n Math.ceil(measureTextWidth(r[header.accessor])),\r\n );\r\n });\r\n\r\n const minWidthPx = parseWidthValue(\r\n header?.minWidth,\r\n parseWidthValue(minColWidth, 50),\r\n );\r\n const finalWidth = Math.max(maxWidth + 12, minWidthPx);\r\n setColumnWidths((prev) => ({\r\n ...prev,\r\n [header.accessor]: `${finalWidth}px`,\r\n }));\r\n };\r\n\r\n const resetColumnWidth = (accessor: string) => {\r\n const regularWidth = initialColumnWidthsRef.current[accessor];\r\n setColumnWidths((prev) => {\r\n if (regularWidth === undefined) {\r\n const next = { ...prev };\r\n delete next[accessor];\r\n return next;\r\n }\r\n return { ...prev, [accessor]: regularWidth };\r\n });\r\n };\r\n\r\n const handleHeaderClick = (header: TableHeader, colIndex: number) => {\r\n if (mobileAutoSizeOnHeaderClick && isMobile) {\r\n const isExpanded = expandedColumns.has(header.accessor);\r\n if (isExpanded) {\r\n resetColumnWidth(header.accessor);\r\n setExpandedColumns((prev) => {\r\n const next = new Set(prev);\r\n next.delete(header.accessor);\r\n return next;\r\n });\r\n } else {\r\n autoSizeColumn(colIndex, header);\r\n setExpandedColumns((prev) => {\r\n const next = new Set(prev);\r\n next.add(header.accessor);\r\n return next;\r\n });\r\n }\r\n return;\r\n }\r\n handleSort(header.accessor, header.isSortable);\r\n };\r\n\r\n const getSortIcon = (key: string): React.ReactNode => {\r\n if (mobileAutoSizeOnHeaderClick && isMobile) return null;\r\n if (!sortConfig || sortConfig.key !== key) {\r\n return <SortIcon className=\"apt-sort-icon\" />;\r\n }\r\n return sortConfig.direction === \"asc\" ? (\r\n <SortUpIcon className=\"apt-sort-icon apt-sort-icon-active\" />\r\n ) : (\r\n <SortDownIcon className=\"apt-sort-icon apt-sort-icon-active\" />\r\n );\r\n };\r\n\r\n const handleMouseDown = (e: React.MouseEvent, accessor: string) => {\r\n e.preventDefault();\r\n const startX = e.clientX;\r\n const th = (e.target as HTMLElement).closest(\"th\");\r\n if (!th) return;\r\n\r\n const header = headers.find((h) => h.accessor === accessor);\r\n const minResizeWidth = parseWidthValue(header?.minWidth, minColWidth);\r\n\r\n const startWidth = th.offsetWidth;\r\n\r\n document.body.style.cursor = \"col-resize\";\r\n document.body.style.userSelect = \"none\";\r\n\r\n const handleMouseMove = (moveEvent: MouseEvent) => {\r\n const deltaX = moveEvent.clientX - startX;\r\n const newWidth = startWidth + deltaX;\r\n const finalWidth = Math.max(newWidth, minResizeWidth);\r\n\r\n setColumnWidths((prev) => ({\r\n ...prev,\r\n [accessor]: `${finalWidth}px`,\r\n }));\r\n };\r\n\r\n const handleMouseUp = () => {\r\n document.body.style.cursor = \"\";\r\n document.body.style.userSelect = \"\";\r\n document.removeEventListener(\"mousemove\", handleMouseMove);\r\n document.removeEventListener(\"mouseup\", handleMouseUp);\r\n };\r\n\r\n document.addEventListener(\"mousemove\", handleMouseMove);\r\n document.addEventListener(\"mouseup\", handleMouseUp);\r\n };\r\n\r\n const containerStyle: CSSProperties = {\r\n height:\r\n sortedRows.length === 0\r\n ? height\r\n : !effectiveShouldPaginate\r\n ? \"auto\"\r\n : height,\r\n maxHeight: !effectiveShouldPaginate ? height : undefined,\r\n };\r\n\r\n return (\r\n <div className=\"apt-table-container\" style={containerStyle}>\r\n {sortedRows.length === 0 ? (\r\n <div className=\"apt-empty-state\">No rows to display.</div>\r\n ) : (\r\n <>\r\n <div className=\"apt-scroll-area\">\r\n <table className=\"apt-table\" ref={tableRef}>\r\n <colgroup>\r\n {headers.map((header) => (\r\n <col\r\n key={`col-${header.accessor}`}\r\n style={{\r\n width: columnWidths[header.accessor],\r\n minWidth: `${parseWidthValue(\r\n header.minWidth,\r\n minColWidth,\r\n )}px`,\r\n }}\r\n />\r\n ))}\r\n </colgroup>\r\n <thead className=\"apt-thead\">\r\n <tr>\r\n {headers.map((header, idx) => {\r\n const isHeaderClickable =\r\n (mobileAutoSizeOnHeaderClick && isMobile) ||\r\n header.isSortable;\r\n return (\r\n <th\r\n key={header.accessor}\r\n onClick={() => handleHeaderClick(header, idx)}\r\n className={`apt-th ${\r\n isHeaderClickable ? \"apt-th-sortable\" : \"\"\r\n }`}\r\n >\r\n <div className=\"apt-th-content\">\r\n {header.label}\r\n {header.isSortable &&\r\n !(mobileAutoSizeOnHeaderClick && isMobile) &&\r\n getSortIcon(header.accessor)}\r\n </div>\r\n <div\r\n className=\"apt-resizer\"\r\n onMouseDown={(e) => {\r\n e.stopPropagation();\r\n handleMouseDown(e, header.accessor);\r\n }}\r\n />\r\n </th>\r\n );\r\n })}\r\n </tr>\r\n </thead>\r\n <tbody className=\"apt-tbody\">\r\n {paginatedRows.map((row) => {\r\n const isExpanded = expandedRowId === row.id;\r\n const isFullRow =\r\n typeof renderFullRow === \"function\" && row?._meta?.fullRow;\r\n return (\r\n <Fragment key={row.id}>\r\n {isFullRow ? (\r\n <tr\r\n className={`apt-row ${rowClassName ? rowClassName(row) : \"\"}`}\r\n onClick={() => onRowClick && onRowClick(row)}\r\n >\r\n <td\r\n colSpan={headers.length}\r\n className=\"apt-td\"\r\n style={{ padding: 0 }}\r\n >\r\n {renderFullRow(row)}\r\n </td>\r\n </tr>\r\n ) : (\r\n <tr\r\n className={`apt-row ${rowClassName ? rowClassName(row) : \"\"}`}\r\n onClick={() => onRowClick && onRowClick(row)}\r\n style={{ height: `${rowHeight}px` }}\r\n >\r\n {headers.map((header) => {\r\n const value = row[header.accessor];\r\n const cellContent = header.cellRenderer\r\n ? header.cellRenderer({ row, value })\r\n : value;\r\n return (\r\n <td\r\n key={`${row.id}-${header.accessor}`}\r\n className={\r\n header.accessor === \"actions\"\r\n ? \"apt-td-actions\"\r\n : \"apt-td\"\r\n }\r\n >\r\n {header.accessor === \"actions\" ? (\r\n <div onClick={(e) => e.stopPropagation()}>\r\n {cellContent}\r\n </div>\r\n ) : (\r\n cellContent\r\n )}\r\n </td>\r\n );\r\n })}\r\n </tr>\r\n )}\r\n {isExpanded &&\r\n typeof renderExpandedRow === \"function\" && (\r\n <tr className=\"apt-row-expanded\">\r\n <td\r\n colSpan={headers.length}\r\n className=\"apt-td\"\r\n style={{ padding: 0 }}\r\n >\r\n {renderExpandedRow(row)}\r\n </td>\r\n </tr>\r\n )}\r\n </Fragment>\r\n );\r\n })}\r\n </tbody>\r\n </table>\r\n </div>\r\n {(shouldPaginate && totalPages > 1) ||\r\n (Array.isArray(rowsPerPageOptions) && rowsPerPageOptions.length) ? (\r\n <div className=\"apt-footer\">\r\n <div className=\"apt-footer-left\">\r\n {Array.isArray(rowsPerPageOptions) &&\r\n rowsPerPageOptions.length > 0 &&\r\n onRowsPerPageChange && (\r\n <>\r\n <label className=\"apt-rows-label\">Rows</label>\r\n <select\r\n value={rowsPerPage}\r\n onChange={(e) =>\r\n onRowsPerPageChange(Number(e.target.value))\r\n }\r\n className=\"apt-rows-select\"\r\n >\r\n {rowsPerPageOptions.map((opt) => (\r\n <option key={opt} value={opt}>\r\n {opt}\r\n </option>\r\n ))}\r\n </select>\r\n </>\r\n )}\r\n </div>\r\n <div className=\"apt-footer-center\">\r\n {shouldPaginate && totalPages > 1\r\n ? `Page ${currentPage} of ${totalPages}`\r\n : \"\"}\r\n </div>\r\n <div className=\"apt-footer-right\">\r\n {shouldPaginate && totalPages > 1 ? (\r\n <>\r\n <button\r\n onClick={() => setCurrentPage((p) => Math.max(1, p - 1))}\r\n disabled={currentPage === 1}\r\n className=\"apt-btn\"\r\n >\r\n Previous\r\n </button>\r\n <button\r\n onClick={() =>\r\n setCurrentPage((p) => Math.min(totalPages, p + 1))\r\n }\r\n disabled={currentPage === totalPages}\r\n className=\"apt-btn\"\r\n >\r\n Next\r\n </button>\r\n </>\r\n ) : null}\r\n </div>\r\n </div>\r\n ) : null}\r\n </>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default Table;\r\n","import { useState, useRef, useEffect } from \"react\";\r\n\r\n// ============= TypeScript Interfaces =============\r\n\r\nexport interface ColumnDefinition {\r\n key: string;\r\n label: string;\r\n}\r\n\r\nexport interface ColumnVisibilityToggleProps {\r\n availableColumns: ColumnDefinition[];\r\n visibleColumns: string[];\r\n onColumnsChange: (columns: string[]) => void;\r\n storageKey?: string;\r\n}\r\n\r\n// ============= SVG Icon (replaced react-icons) =============\r\n\r\nconst ViewColumnIcon: React.FC<{ className?: string }> = ({ className }) => (\r\n <svg\r\n className={className}\r\n width=\"18\"\r\n height=\"18\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"currentColor\"\r\n >\r\n <path d=\"M10 18h5V5h-5v13zm-6 0h5V5H4v13zM16 5v13h5V5h-5z\" />\r\n </svg>\r\n);\r\n\r\n// ============= Main Component =============\r\n\r\nconst ColumnVisibilityToggle: React.FC<ColumnVisibilityToggleProps> = ({\r\n availableColumns,\r\n visibleColumns,\r\n onColumnsChange,\r\n storageKey,\r\n}) => {\r\n const [isOpen, setIsOpen] = useState(false);\r\n const menuRef = useRef<HTMLDivElement>(null);\r\n\r\n // Close menu when clicking outside\r\n useEffect(() => {\r\n const handleClickOutside = (event: MouseEvent) => {\r\n if (menuRef.current && !menuRef.current.contains(event.target as Node)) {\r\n setIsOpen(false);\r\n }\r\n };\r\n\r\n if (isOpen) {\r\n document.addEventListener(\"mousedown\", handleClickOutside);\r\n }\r\n\r\n return () => {\r\n document.removeEventListener(\"mousedown\", handleClickOutside);\r\n };\r\n }, [isOpen]);\r\n\r\n const saveToStorage = (columns: string[]) => {\r\n if (storageKey && typeof window !== \"undefined\") {\r\n try {\r\n window.localStorage.setItem(storageKey, JSON.stringify(columns));\r\n } catch (error) {\r\n console.warn(\r\n \"Failed to save column visibility to localStorage:\",\r\n error,\r\n );\r\n }\r\n }\r\n };\r\n\r\n const handleToggleColumn = (columnKey: string) => {\r\n const newVisibleColumns = visibleColumns.includes(columnKey)\r\n ? visibleColumns.filter((key) => key !== columnKey)\r\n : [...visibleColumns, columnKey];\r\n\r\n saveToStorage(newVisibleColumns);\r\n onColumnsChange(newVisibleColumns);\r\n };\r\n\r\n const handleSelectAll = () => {\r\n const allKeys = availableColumns.map((col) => col.key);\r\n saveToStorage(allKeys);\r\n onColumnsChange(allKeys);\r\n };\r\n\r\n return (\r\n <div className=\"apt-column-toggle-container\" ref={menuRef}>\r\n <button\r\n type=\"button\"\r\n onClick={() => setIsOpen(!isOpen)}\r\n className=\"apt-column-toggle-btn\"\r\n aria-label=\"Toggle column visibility\"\r\n aria-expanded={isOpen}\r\n >\r\n <ViewColumnIcon className=\"apt-column-toggle-icon\" />\r\n <span>Columns</span>\r\n <span className=\"apt-column-toggle-count\">\r\n ({visibleColumns.length})\r\n </span>\r\n </button>\r\n\r\n {isOpen && (\r\n <div className=\"apt-column-toggle-menu\">\r\n <div className=\"apt-column-toggle-menu-inner\">\r\n <div className=\"apt-column-toggle-header\">\r\n <h3 className=\"apt-column-toggle-title\">Toggle Columns</h3>\r\n <button\r\n type=\"button\"\r\n onClick={handleSelectAll}\r\n className=\"apt-column-toggle-select-all\"\r\n >\r\n Select All\r\n </button>\r\n </div>\r\n <div className=\"apt-column-toggle-list\">\r\n {availableColumns.map((column) => {\r\n const isVisible = visibleColumns.includes(column.key);\r\n return (\r\n <label key={column.key} className=\"apt-column-toggle-item\">\r\n <input\r\n type=\"checkbox\"\r\n checked={isVisible}\r\n onChange={() => handleToggleColumn(column.key)}\r\n className=\"apt-column-toggle-checkbox\"\r\n />\r\n <span className=\"apt-column-toggle-label\">\r\n {column.label}\r\n </span>\r\n </label>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default ColumnVisibilityToggle;\r\n"]}
1
+ {"version":3,"sources":["#style-inject:#style-inject","../src/styles.css","../src/Table.tsx","../src/ColumnVisibilityToggle.tsx"],"names":["jsx","useState","useRef","useMemo","useEffect","jsxs","Fragment"],"mappings":"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","file":"index.js","sourcesContent":["\n export default function styleInject(css, { insertAt } = {}) {\n if (!css || typeof document === 'undefined') return\n \n const head = document.head || document.getElementsByTagName('head')[0]\n const style = document.createElement('style')\n style.type = 'text/css'\n \n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild)\n } else {\n head.appendChild(style)\n }\n } else {\n head.appendChild(style)\n }\n \n if (style.styleSheet) {\n style.styleSheet.cssText = css\n } else {\n style.appendChild(document.createTextNode(css))\n }\n }\n ","import styleInject from '#style-inject';styleInject(\":root {\\n --apt-color-primary: #371f1f;\\n --apt-color-border: #d1d5db;\\n --apt-color-bg: white;\\n --apt-color-bg-secondary: #e5e7eb;\\n --apt-color-bg-hover: #f3f4f6;\\n --apt-color-text: #1f2937;\\n --apt-color-text-muted: #6b7280;\\n --apt-color-text-muted-light: #9ca3af;\\n --apt-color-accent: #9333ea;\\n --apt-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1);\\n --apt-shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);\\n --apt-resizer-color: #bbb;\\n --apt-resizer-hover-color: #888;\\n --apt-th-sortable-hover: #d1d5db;\\n --apt-btn-bg: white;\\n --apt-btn-hover-bg: #d1d5db;\\n}\\n@media (prefers-color-scheme: dark) {\\n :root {\\n --apt-color-primary: #eee;\\n --apt-color-border: #333;\\n --apt-color-bg: #1e1e1e;\\n --apt-color-bg-secondary: #333;\\n --apt-color-bg-hover: rgba(126, 126, 126, 0.15);\\n --apt-color-text: #eee;\\n --apt-color-text-muted: #d1d5db;\\n --apt-color-text-muted-light: #444;\\n --apt-color-accent: #a855f7;\\n --apt-resizer-color: #666;\\n --apt-resizer-hover-color: #999;\\n --apt-th-sortable-hover: #444;\\n --apt-btn-bg: #444;\\n --apt-btn-hover-bg: #555;\\n }\\n}\\nhtml.dark,\\n.dark,\\n:root.dark {\\n --apt-color-primary: #eee;\\n --apt-color-border: #333;\\n --apt-color-bg: #1e1e1e;\\n --apt-color-bg-secondary: #333;\\n --apt-color-bg-hover: rgba(126, 126, 126, 0.15);\\n --apt-color-text: #eee;\\n --apt-color-text-muted: #d1d5db;\\n --apt-color-text-muted-light: #444;\\n --apt-color-accent: #a855f7;\\n --apt-resizer-color: #666;\\n --apt-resizer-hover-color: #999;\\n --apt-th-sortable-hover: #444;\\n --apt-btn-bg: #444;\\n --apt-btn-hover-bg: #555;\\n}\\nhtml.light,\\n.light,\\n:root.light {\\n --apt-color-primary: #371f1f;\\n --apt-color-border: #d1d5db;\\n --apt-color-bg: white;\\n --apt-color-bg-secondary: #e5e7eb;\\n --apt-color-bg-hover: #f3f4f6;\\n --apt-color-text: #1f2937;\\n --apt-color-text-muted: #6b7280;\\n --apt-color-text-muted-light: #9ca3af;\\n --apt-color-accent: #9333ea;\\n --apt-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1);\\n --apt-shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);\\n --apt-resizer-color: #bbb;\\n --apt-resizer-hover-color: #888;\\n --apt-th-sortable-hover: #d1d5db;\\n --apt-btn-bg: white;\\n --apt-btn-hover-bg: #d1d5db;\\n}\\n.apt-table-container {\\n color: var(--apt-color-text);\\n border-radius: 6px;\\n margin: 0;\\n padding: 0;\\n border: 1px solid var(--apt-color-border);\\n background-color: var(--apt-color-bg);\\n box-shadow: var(--apt-shadow);\\n display: flex;\\n flex-direction: column;\\n overflow: hidden;\\n}\\n.apt-empty-state {\\n flex-grow: 1;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n text-align: center;\\n padding: 48px 0;\\n color: var(--apt-color-text-muted-light);\\n}\\n.apt-scroll-area {\\n flex-grow: 1;\\n overflow: auto;\\n}\\n.apt-table {\\n width: 100%;\\n text-align: left;\\n font-size: 0.75rem;\\n table-layout: fixed;\\n border-collapse: collapse;\\n border-spacing: 0;\\n margin: 0;\\n padding: 0;\\n}\\n.apt-thead {\\n position: sticky;\\n top: 0;\\n background-color: var(--apt-color-bg-secondary);\\n z-index: 10;\\n}\\n.apt-th {\\n position: relative;\\n padding: 12px 8px;\\n border: none;\\n}\\n.apt-th-sortable {\\n cursor: pointer;\\n}\\n.apt-th-sortable:hover {\\n background-color: var(--apt-th-sortable-hover);\\n}\\n.apt-th-content {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n}\\n.apt-resizer {\\n position: absolute;\\n right: 0;\\n top: 4px;\\n height: 80%;\\n width: 3px;\\n border-radius: 2px;\\n cursor: col-resize;\\n user-select: none;\\n touch-action: none;\\n background-color: var(--apt-resizer-color);\\n}\\n.apt-resizer:hover,\\n.apt-th:hover .apt-resizer {\\n background-color: var(--apt-resizer-hover-color);\\n}\\n.apt-tbody {\\n border: none;\\n}\\n.apt-tbody tr {\\n border: none;\\n}\\n.apt-row {\\n transition: background-color 0.15s;\\n}\\n.apt-row:hover {\\n background-color: var(--apt-color-bg-hover);\\n}\\n.apt-row-expanded {\\n background-color: var(--apt-color-bg-hover);\\n}\\n.apt-td {\\n padding: 4px 8px;\\n white-space: nowrap;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n border: none;\\n}\\n.apt-td-actions {\\n padding: 4px 8px;\\n border: none;\\n}\\n.apt-footer {\\n display: grid;\\n grid-template-columns: 1fr 1fr 1fr;\\n align-items: center;\\n padding: 8px;\\n background-color: var(--apt-color-bg-secondary);\\n}\\n.apt-footer-left {\\n display: flex;\\n align-items: center;\\n gap: 8px;\\n}\\n.apt-footer-center {\\n justify-self: center;\\n font-size: 0.875rem;\\n color: var(--apt-color-text);\\n}\\n.apt-footer-right {\\n justify-self: end;\\n display: flex;\\n align-items: center;\\n gap: 8px;\\n}\\n.apt-rows-label {\\n font-size: 0.75rem;\\n text-transform: uppercase;\\n letter-spacing: 0.05em;\\n color: var(--apt-color-text-muted);\\n}\\n.apt-rows-select {\\n padding: 4px 8px;\\n font-size: 0.875rem;\\n border-radius: 4px;\\n background-color: var(--apt-btn-bg);\\n color: var(--apt-color-text);\\n border: 1px solid var(--apt-color-border);\\n}\\n.apt-btn {\\n padding: 4px 12px;\\n font-size: 0.875rem;\\n border-radius: 4px;\\n background-color: var(--apt-btn-bg);\\n color: var(--apt-color-text);\\n border: 0;\\n cursor: pointer;\\n transition: background-color 0.15s;\\n}\\n.apt-btn:hover:not(:disabled) {\\n background-color: var(--apt-btn-hover-bg);\\n}\\n.apt-btn:disabled {\\n opacity: 0.5;\\n cursor: not-allowed;\\n}\\n.apt-sort-icon {\\n display: inline-block;\\n margin-left: 4px;\\n width: 14px;\\n height: 14px;\\n opacity: 0.3;\\n}\\n.apt-sort-icon-active {\\n opacity: 1;\\n}\\n.apt-column-toggle-container {\\n position: relative;\\n}\\n.apt-column-toggle-btn {\\n display: flex;\\n align-items: center;\\n gap: 8px;\\n border-radius: 8px;\\n border: 1px solid var(--apt-color-border);\\n background-color: var(--apt-color-bg-hover);\\n padding: 8px 12px;\\n font-size: 0.875rem;\\n font-weight: 500;\\n color: var(--apt-color-primary);\\n box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1);\\n cursor: pointer;\\n transition: background-color 0.15s;\\n}\\n.apt-column-toggle-btn:hover {\\n background-color: var(--apt-color-bg-secondary);\\n}\\n.apt-column-toggle-btn:focus {\\n outline: none;\\n}\\n.apt-column-toggle-icon {\\n font-size: 1.125rem;\\n}\\n.apt-column-toggle-count {\\n font-size: 0.75rem;\\n opacity: 0.7;\\n}\\n.apt-column-toggle-menu {\\n position: absolute;\\n right: 0;\\n margin-top: 8px;\\n width: 288px;\\n border-radius: 8px;\\n border: 1px solid var(--apt-color-border);\\n background-color: var(--apt-color-bg);\\n box-shadow: var(--apt-shadow-lg);\\n z-index: 50;\\n max-height: 384px;\\n overflow-y: auto;\\n}\\n.apt-column-toggle-menu-inner {\\n padding: 12px;\\n}\\n.apt-column-toggle-header {\\n display: flex;\\n align-items: center;\\n justify-content: space-between;\\n margin-bottom: 12px;\\n border-bottom: 1px solid var(--apt-color-border);\\n padding-bottom: 8px;\\n}\\n.apt-column-toggle-title {\\n font-size: 0.875rem;\\n font-weight: 600;\\n color: var(--apt-color-primary);\\n}\\n.apt-column-toggle-select-all {\\n font-size: 0.75rem;\\n color: var(--apt-color-accent);\\n background: none;\\n border: none;\\n cursor: pointer;\\n text-decoration: none;\\n}\\n.apt-column-toggle-select-all:hover {\\n text-decoration: underline;\\n}\\n.apt-column-toggle-list {\\n display: flex;\\n flex-direction: column;\\n gap: 4px;\\n}\\n.apt-column-toggle-item {\\n display: flex;\\n align-items: center;\\n gap: 8px;\\n cursor: pointer;\\n padding: 6px 8px;\\n border-radius: 4px;\\n transition: background-color 0.15s;\\n}\\n.apt-column-toggle-item:hover {\\n background-color: var(--apt-color-bg-hover);\\n}\\n.apt-column-toggle-checkbox {\\n width: 16px;\\n height: 16px;\\n color: var(--apt-color-accent);\\n border-radius: 12px;\\n cursor: pointer;\\n accent-color: var(--apt-color-accent);\\n}\\n.apt-column-toggle-label {\\n font-size: 0.875rem;\\n color: var(--apt-color-primary);\\n flex: 1;\\n}\\n.apt-flex {\\n display: flex;\\n}\\n.apt-items-center {\\n align-items: center;\\n}\\n.apt-gap-2 {\\n gap: 8px;\\n}\\n\")","import {\r\n Fragment,\r\n useEffect,\r\n useMemo,\r\n useRef,\r\n useState,\r\n CSSProperties,\r\n} from \"react\";\r\n\r\n// ============= TypeScript Interfaces =============\r\n\r\nexport interface TableHeader {\r\n accessor: string;\r\n label: string;\r\n isSortable?: boolean;\r\n width?: string | number;\r\n minWidth?: string | number;\r\n cellRenderer?: (args: { row: any; value: any }) => React.ReactNode;\r\n}\r\n\r\nexport interface SortConfig {\r\n key: string;\r\n direction: \"asc\" | \"desc\";\r\n}\r\n\r\nexport interface TableProps {\r\n manualHeaders: TableHeader[];\r\n manualRowData: Record<string, any>[];\r\n initialSort?: SortConfig | null;\r\n height?: string;\r\n rowHeight?: number;\r\n rowsPerPage?: number;\r\n shouldPaginate?: boolean;\r\n rowClassName?: (row: any) => string;\r\n onRowClick?: (row: any) => void;\r\n minColWidth?: number;\r\n mobileAutoSizeOnHeaderClick?: boolean;\r\n mobileBreakpoint?: number;\r\n columnWidthsStorageKey?: string;\r\n rowsPerPageOptions?: number[];\r\n onRowsPerPageChange?: (value: number) => void;\r\n expandedRowId?: string | null;\r\n renderExpandedRow?: (row: any) => React.ReactNode;\r\n renderFullRow?: (row: any) => React.ReactNode;\r\n}\r\n\r\n// ============= SVG Icons (replaced react-icons) =============\r\n\r\nconst SortIcon: React.FC<{ className?: string }> = ({ className }) => (\r\n <svg\r\n className={className}\r\n width=\"12\"\r\n height=\"12\"\r\n viewBox=\"0 0 12 12\"\r\n fill=\"currentColor\"\r\n >\r\n <path d=\"M6 2L3 5h6L6 2zM6 10l3-3H3l3 3z\" />\r\n </svg>\r\n);\r\n\r\nconst SortUpIcon: React.FC<{ className?: string }> = ({ className }) => (\r\n <svg\r\n className={className}\r\n width=\"12\"\r\n height=\"12\"\r\n viewBox=\"0 0 12 12\"\r\n fill=\"currentColor\"\r\n >\r\n <path d=\"M6 2L2 7h8L6 2z\" />\r\n </svg>\r\n);\r\n\r\nconst SortDownIcon: React.FC<{ className?: string }> = ({ className }) => (\r\n <svg\r\n className={className}\r\n width=\"12\"\r\n height=\"12\"\r\n viewBox=\"0 0 12 12\"\r\n fill=\"currentColor\"\r\n >\r\n <path d=\"M6 10l4-5H2l4 5z\" />\r\n </svg>\r\n);\r\n\r\n// ============= Main Component =============\r\n\r\nconst Table: React.FC<TableProps> = ({\r\n manualHeaders,\r\n manualRowData,\r\n initialSort,\r\n height = \"100%\",\r\n rowHeight = 40,\r\n rowsPerPage = 60,\r\n shouldPaginate = true,\r\n rowClassName,\r\n onRowClick,\r\n minColWidth = 50,\r\n mobileAutoSizeOnHeaderClick = false,\r\n mobileBreakpoint = 768,\r\n columnWidthsStorageKey,\r\n rowsPerPageOptions = [20, 50, 100],\r\n onRowsPerPageChange,\r\n expandedRowId,\r\n renderExpandedRow,\r\n renderFullRow,\r\n}) => {\r\n const [sortConfig, setSortConfig] = useState<SortConfig | null>(\r\n initialSort || null,\r\n );\r\n const [currentPage, setCurrentPage] = useState(1);\r\n const [columnWidths, setColumnWidths] = useState<\r\n Record<string, string | number>\r\n >({});\r\n const [expandedColumns, setExpandedColumns] = useState<Set<string>>(\r\n () => new Set(),\r\n );\r\n const initialColumnWidthsRef = useRef<\r\n Record<string, string | number | undefined>\r\n >({});\r\n const tableRef = useRef<HTMLTableElement>(null);\r\n const textMeasureContextRef = useRef<CanvasRenderingContext2D | null>(null);\r\n const [isMobile, setIsMobile] = useState(() => {\r\n if (typeof window === \"undefined\") return false;\r\n return window.innerWidth < mobileBreakpoint;\r\n });\r\n\r\n const headers = useMemo(() => manualHeaders || [], [manualHeaders]);\r\n\r\n const loadStoredColumnWidths = (\r\n fallback: Record<string, string | number | undefined>,\r\n ) => {\r\n if (!columnWidthsStorageKey || typeof window === \"undefined\") {\r\n return fallback;\r\n }\r\n try {\r\n const raw = window.localStorage.getItem(columnWidthsStorageKey);\r\n if (!raw) return fallback;\r\n const parsed = JSON.parse(raw);\r\n if (!parsed || typeof parsed !== \"object\") return fallback;\r\n const next = { ...fallback };\r\n Object.keys(next).forEach((key) => {\r\n const val = parsed[key];\r\n if (typeof val === \"number\" || typeof val === \"string\") {\r\n next[key] = val;\r\n }\r\n });\r\n return next;\r\n } catch {\r\n return fallback;\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n const initialWidths: Record<string, string | number | undefined> = {};\r\n headers.forEach((header) => {\r\n initialWidths[header.accessor] = header.width;\r\n });\r\n initialColumnWidthsRef.current = initialWidths;\r\n setColumnWidths(\r\n loadStoredColumnWidths(initialWidths) as Record<string, string | number>,\r\n );\r\n setExpandedColumns(new Set());\r\n }, [headers, columnWidthsStorageKey]);\r\n\r\n useEffect(() => {\r\n if (!columnWidthsStorageKey || typeof window === \"undefined\") return;\r\n if (Object.keys(columnWidths).length === 0) return;\r\n window.localStorage.setItem(\r\n columnWidthsStorageKey,\r\n JSON.stringify(columnWidths),\r\n );\r\n }, [columnWidths, columnWidthsStorageKey]);\r\n\r\n useEffect(() => {\r\n if (typeof window === \"undefined\") return undefined;\r\n const handleResize = () =>\r\n setIsMobile(window.innerWidth < mobileBreakpoint);\r\n window.addEventListener(\"resize\", handleResize);\r\n return () => window.removeEventListener(\"resize\", handleResize);\r\n }, [mobileBreakpoint]);\r\n\r\n useEffect(() => {\r\n setCurrentPage(1);\r\n }, [rowsPerPage]);\r\n\r\n const measureTextWidth = (text: any): number => {\r\n if (typeof document === \"undefined\") return String(text ?? \"\").length * 8;\r\n const ctx =\r\n textMeasureContextRef.current ||\r\n (() => {\r\n const canvas = document.createElement(\"canvas\");\r\n const context = canvas.getContext(\"2d\");\r\n if (tableRef.current && context) {\r\n const font = window.getComputedStyle(tableRef.current).font;\r\n context.font = font || \"12px sans-serif\";\r\n }\r\n textMeasureContextRef.current = context;\r\n return context;\r\n })();\r\n return ctx ? ctx.measureText(String(text ?? \"\")).width : 0;\r\n };\r\n\r\n const parseWidthValue = (\r\n value: string | number | undefined,\r\n fallback: number,\r\n ): number => {\r\n if (typeof value === \"number\" && !Number.isNaN(value)) return value;\r\n if (typeof value === \"string\") {\r\n const parsed = parseFloat(value);\r\n if (!Number.isNaN(parsed)) return parsed;\r\n }\r\n return fallback;\r\n };\r\n\r\n const rows = useMemo(() => {\r\n if (!Array.isArray(manualRowData)) return [];\r\n\r\n const src = manualRowData\r\n .filter(Boolean)\r\n .filter((r) => typeof r === \"object\");\r\n\r\n const makeSafeId = (full: any, idx: number): string => {\r\n const rawId = full?.id;\r\n const v1 =\r\n rawId !== undefined && rawId !== null && String(rawId).trim() !== \"\"\r\n ? String(rawId).trim()\r\n : \"\";\r\n const v2 = [\r\n full?.order_id,\r\n full?.bom_id,\r\n full?.bom_workstation_status_id,\r\n full?.bom_data_id,\r\n full?.unique_task_info_id,\r\n full?.order_data_id,\r\n ]\r\n .filter((v) => v !== undefined && v !== null && String(v) !== \"\")\r\n .join(\"-\");\r\n return v1 || `${v2}-row${idx}`;\r\n };\r\n\r\n return src.map((full: any, idx: number) => {\r\n const id = makeSafeId(full, idx);\r\n const base: any = { id, \"#\": idx + 1, _meta: full };\r\n headers.forEach((h) => {\r\n if (![\"#\", \"details_meta\"].includes(h.accessor)) {\r\n base[h.accessor] = full?.[h.accessor] ?? \"\";\r\n }\r\n });\r\n return base;\r\n });\r\n }, [manualRowData, headers]);\r\n\r\n const sortedRows = useMemo(() => {\r\n if (!sortConfig || !sortConfig.key) {\r\n return rows;\r\n }\r\n const sortableRows = [...rows];\r\n sortableRows.sort((a, b) => {\r\n const aVal = a[sortConfig.key];\r\n const bVal = b[sortConfig.key];\r\n\r\n if (aVal < bVal) {\r\n return sortConfig.direction === \"asc\" ? -1 : 1;\r\n }\r\n if (aVal > bVal) {\r\n return sortConfig.direction === \"asc\" ? 1 : -1;\r\n }\r\n return 0;\r\n });\r\n return sortableRows;\r\n }, [rows, sortConfig]);\r\n\r\n const effectiveShouldPaginate =\r\n shouldPaginate && sortedRows.length > rowsPerPage;\r\n\r\n const totalPages = effectiveShouldPaginate\r\n ? Math.ceil(sortedRows.length / rowsPerPage)\r\n : 1;\r\n\r\n if (currentPage > totalPages && totalPages > 0) {\r\n setCurrentPage(1);\r\n }\r\n\r\n const paginatedRows = useMemo(() => {\r\n if (!effectiveShouldPaginate) return sortedRows;\r\n const startIndex = (currentPage - 1) * rowsPerPage;\r\n return sortedRows.slice(startIndex, startIndex + rowsPerPage);\r\n }, [sortedRows, currentPage, rowsPerPage, effectiveShouldPaginate]);\r\n\r\n const handleSort = (key: string, isSortable?: boolean) => {\r\n if (!isSortable) return;\r\n let direction: \"asc\" | \"desc\" = \"asc\";\r\n if (\r\n sortConfig &&\r\n sortConfig.key === key &&\r\n sortConfig.direction === \"asc\"\r\n ) {\r\n direction = \"desc\";\r\n }\r\n setSortConfig({ key, direction });\r\n setCurrentPage(1);\r\n };\r\n\r\n const autoSizeColumn = (colIndex: number, header: TableHeader) => {\r\n if (!tableRef.current) return;\r\n const tableEl = tableRef.current;\r\n let maxWidth = measureTextWidth(header?.label || \"\");\r\n\r\n const collectCellWidth = (cell: HTMLTableCellElement | null) => {\r\n if (!cell) return;\r\n const scrollWidth = cell.scrollWidth || cell.offsetWidth || 0;\r\n const style = window.getComputedStyle(cell);\r\n const borderWidth =\r\n parseFloat(style.borderLeftWidth || \"0\") +\r\n parseFloat(style.borderRightWidth || \"0\");\r\n maxWidth = Math.max(maxWidth, Math.ceil(scrollWidth + borderWidth));\r\n };\r\n\r\n const headerCell =\r\n tableEl.tHead?.rows?.[0]?.cells?.[colIndex] ||\r\n tableEl.querySelector(`thead th:nth-child(${colIndex + 1})`);\r\n collectCellWidth(headerCell as HTMLTableCellElement);\r\n\r\n const bodyRows = tableEl.tBodies?.[0]?.rows || [];\r\n for (const row of bodyRows) {\r\n collectCellWidth(row.cells?.[colIndex] as HTMLTableCellElement);\r\n }\r\n\r\n rows.forEach((r) => {\r\n maxWidth = Math.max(\r\n maxWidth,\r\n Math.ceil(measureTextWidth(r[header.accessor])),\r\n );\r\n });\r\n\r\n const minWidthPx = parseWidthValue(\r\n header?.minWidth,\r\n parseWidthValue(minColWidth, 50),\r\n );\r\n const finalWidth = Math.max(maxWidth + 12, minWidthPx);\r\n setColumnWidths((prev) => ({\r\n ...prev,\r\n [header.accessor]: `${finalWidth}px`,\r\n }));\r\n };\r\n\r\n const resetColumnWidth = (accessor: string) => {\r\n const regularWidth = initialColumnWidthsRef.current[accessor];\r\n setColumnWidths((prev) => {\r\n if (regularWidth === undefined) {\r\n const next = { ...prev };\r\n delete next[accessor];\r\n return next;\r\n }\r\n return { ...prev, [accessor]: regularWidth };\r\n });\r\n };\r\n\r\n const handleHeaderClick = (header: TableHeader, colIndex: number) => {\r\n if (mobileAutoSizeOnHeaderClick && isMobile) {\r\n const isExpanded = expandedColumns.has(header.accessor);\r\n if (isExpanded) {\r\n resetColumnWidth(header.accessor);\r\n setExpandedColumns((prev) => {\r\n const next = new Set(prev);\r\n next.delete(header.accessor);\r\n return next;\r\n });\r\n } else {\r\n autoSizeColumn(colIndex, header);\r\n setExpandedColumns((prev) => {\r\n const next = new Set(prev);\r\n next.add(header.accessor);\r\n return next;\r\n });\r\n }\r\n return;\r\n }\r\n handleSort(header.accessor, header.isSortable);\r\n };\r\n\r\n const getSortIcon = (key: string): React.ReactNode => {\r\n if (mobileAutoSizeOnHeaderClick && isMobile) return null;\r\n if (!sortConfig || sortConfig.key !== key) {\r\n return <SortIcon className=\"apt-sort-icon\" />;\r\n }\r\n return sortConfig.direction === \"asc\" ? (\r\n <SortUpIcon className=\"apt-sort-icon apt-sort-icon-active\" />\r\n ) : (\r\n <SortDownIcon className=\"apt-sort-icon apt-sort-icon-active\" />\r\n );\r\n };\r\n\r\n const handleMouseDown = (e: React.MouseEvent, accessor: string) => {\r\n e.preventDefault();\r\n const startX = e.clientX;\r\n const th = (e.target as HTMLElement).closest(\"th\");\r\n if (!th) return;\r\n\r\n const header = headers.find((h) => h.accessor === accessor);\r\n const minResizeWidth = parseWidthValue(header?.minWidth, minColWidth);\r\n\r\n const startWidth = th.offsetWidth;\r\n\r\n document.body.style.cursor = \"col-resize\";\r\n document.body.style.userSelect = \"none\";\r\n\r\n const handleMouseMove = (moveEvent: MouseEvent) => {\r\n const deltaX = moveEvent.clientX - startX;\r\n const newWidth = startWidth + deltaX;\r\n const finalWidth = Math.max(newWidth, minResizeWidth);\r\n\r\n setColumnWidths((prev) => ({\r\n ...prev,\r\n [accessor]: `${finalWidth}px`,\r\n }));\r\n };\r\n\r\n const handleMouseUp = () => {\r\n document.body.style.cursor = \"\";\r\n document.body.style.userSelect = \"\";\r\n document.removeEventListener(\"mousemove\", handleMouseMove);\r\n document.removeEventListener(\"mouseup\", handleMouseUp);\r\n };\r\n\r\n document.addEventListener(\"mousemove\", handleMouseMove);\r\n document.addEventListener(\"mouseup\", handleMouseUp);\r\n };\r\n\r\n const containerStyle: CSSProperties = {\r\n height:\r\n sortedRows.length === 0\r\n ? height\r\n : !effectiveShouldPaginate\r\n ? \"auto\"\r\n : height,\r\n maxHeight: !effectiveShouldPaginate ? height : undefined,\r\n };\r\n\r\n return (\r\n <div className=\"apt-table-container\" style={containerStyle}>\r\n {sortedRows.length === 0 ? (\r\n <div className=\"apt-empty-state\">No rows to display.</div>\r\n ) : (\r\n <>\r\n <div className=\"apt-scroll-area\">\r\n <table className=\"apt-table\" ref={tableRef}>\r\n <colgroup>\r\n {headers.map((header) => (\r\n <col\r\n key={`col-${header.accessor}`}\r\n style={{\r\n width: columnWidths[header.accessor],\r\n minWidth: `${parseWidthValue(\r\n header.minWidth,\r\n minColWidth,\r\n )}px`,\r\n }}\r\n />\r\n ))}\r\n </colgroup>\r\n <thead className=\"apt-thead\">\r\n <tr>\r\n {headers.map((header, idx) => {\r\n const isHeaderClickable =\r\n (mobileAutoSizeOnHeaderClick && isMobile) ||\r\n header.isSortable;\r\n return (\r\n <th\r\n key={header.accessor}\r\n onClick={() => handleHeaderClick(header, idx)}\r\n className={`apt-th ${\r\n isHeaderClickable ? \"apt-th-sortable\" : \"\"\r\n }`}\r\n >\r\n <div className=\"apt-th-content\">\r\n {header.label}\r\n {header.isSortable &&\r\n !(mobileAutoSizeOnHeaderClick && isMobile) &&\r\n getSortIcon(header.accessor)}\r\n </div>\r\n <div\r\n className=\"apt-resizer\"\r\n onMouseDown={(e) => {\r\n e.stopPropagation();\r\n handleMouseDown(e, header.accessor);\r\n }}\r\n />\r\n </th>\r\n );\r\n })}\r\n </tr>\r\n </thead>\r\n <tbody className=\"apt-tbody\">\r\n {paginatedRows.map((row) => {\r\n const isExpanded = expandedRowId === row.id;\r\n const isFullRow =\r\n typeof renderFullRow === \"function\" && row?._meta?.fullRow;\r\n return (\r\n <Fragment key={row.id}>\r\n {isFullRow ? (\r\n <tr\r\n className={`apt-row ${rowClassName ? rowClassName(row) : \"\"}`}\r\n onClick={() => onRowClick && onRowClick(row)}\r\n >\r\n <td\r\n colSpan={headers.length}\r\n className=\"apt-td\"\r\n style={{ padding: 0 }}\r\n >\r\n {renderFullRow(row)}\r\n </td>\r\n </tr>\r\n ) : (\r\n <tr\r\n className={`apt-row ${rowClassName ? rowClassName(row) : \"\"}`}\r\n onClick={() => onRowClick && onRowClick(row)}\r\n style={{ height: `${rowHeight}px` }}\r\n >\r\n {headers.map((header) => {\r\n const value = row[header.accessor];\r\n const cellContent = header.cellRenderer\r\n ? header.cellRenderer({ row, value })\r\n : value;\r\n return (\r\n <td\r\n key={`${row.id}-${header.accessor}`}\r\n className={\r\n header.accessor === \"actions\"\r\n ? \"apt-td-actions\"\r\n : \"apt-td\"\r\n }\r\n >\r\n {header.accessor === \"actions\" ? (\r\n <div onClick={(e) => e.stopPropagation()}>\r\n {cellContent}\r\n </div>\r\n ) : (\r\n cellContent\r\n )}\r\n </td>\r\n );\r\n })}\r\n </tr>\r\n )}\r\n {isExpanded &&\r\n typeof renderExpandedRow === \"function\" && (\r\n <tr className=\"apt-row-expanded\">\r\n <td\r\n colSpan={headers.length}\r\n className=\"apt-td\"\r\n style={{ padding: 0 }}\r\n >\r\n {renderExpandedRow(row)}\r\n </td>\r\n </tr>\r\n )}\r\n </Fragment>\r\n );\r\n })}\r\n </tbody>\r\n </table>\r\n </div>\r\n {(shouldPaginate && totalPages > 1) ||\r\n (Array.isArray(rowsPerPageOptions) && rowsPerPageOptions.length) ? (\r\n <div className=\"apt-footer\">\r\n <div className=\"apt-footer-left\">\r\n {Array.isArray(rowsPerPageOptions) &&\r\n rowsPerPageOptions.length > 0 &&\r\n onRowsPerPageChange && (\r\n <>\r\n <label className=\"apt-rows-label\">Rows</label>\r\n <select\r\n value={rowsPerPage}\r\n onChange={(e) =>\r\n onRowsPerPageChange(Number(e.target.value))\r\n }\r\n className=\"apt-rows-select\"\r\n >\r\n {rowsPerPageOptions.map((opt) => (\r\n <option key={opt} value={opt}>\r\n {opt}\r\n </option>\r\n ))}\r\n </select>\r\n </>\r\n )}\r\n </div>\r\n <div className=\"apt-footer-center\">\r\n {shouldPaginate && totalPages > 1\r\n ? `Page ${currentPage} of ${totalPages}`\r\n : \"\"}\r\n </div>\r\n <div className=\"apt-footer-right\">\r\n {shouldPaginate && totalPages > 1 ? (\r\n <>\r\n <button\r\n onClick={() => setCurrentPage((p) => Math.max(1, p - 1))}\r\n disabled={currentPage === 1}\r\n className=\"apt-btn\"\r\n >\r\n Previous\r\n </button>\r\n <button\r\n onClick={() =>\r\n setCurrentPage((p) => Math.min(totalPages, p + 1))\r\n }\r\n disabled={currentPage === totalPages}\r\n className=\"apt-btn\"\r\n >\r\n Next\r\n </button>\r\n </>\r\n ) : null}\r\n </div>\r\n </div>\r\n ) : null}\r\n </>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default Table;\r\n","import { useState, useRef, useEffect } from \"react\";\r\n\r\n// ============= TypeScript Interfaces =============\r\n\r\nexport interface ColumnDefinition {\r\n key: string;\r\n label: string;\r\n}\r\n\r\nexport interface ColumnVisibilityToggleProps {\r\n availableColumns: ColumnDefinition[];\r\n visibleColumns: string[];\r\n onColumnsChange: (columns: string[]) => void;\r\n storageKey?: string;\r\n}\r\n\r\n// ============= SVG Icon (replaced react-icons) =============\r\n\r\nconst ViewColumnIcon: React.FC<{ className?: string }> = ({ className }) => (\r\n <svg\r\n className={className}\r\n width=\"18\"\r\n height=\"18\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"currentColor\"\r\n >\r\n <path d=\"M10 18h5V5h-5v13zm-6 0h5V5H4v13zM16 5v13h5V5h-5z\" />\r\n </svg>\r\n);\r\n\r\n// ============= Main Component =============\r\n\r\nconst ColumnVisibilityToggle: React.FC<ColumnVisibilityToggleProps> = ({\r\n availableColumns,\r\n visibleColumns,\r\n onColumnsChange,\r\n storageKey,\r\n}) => {\r\n const [isOpen, setIsOpen] = useState(false);\r\n const menuRef = useRef<HTMLDivElement>(null);\r\n\r\n // Close menu when clicking outside\r\n useEffect(() => {\r\n const handleClickOutside = (event: MouseEvent) => {\r\n if (menuRef.current && !menuRef.current.contains(event.target as Node)) {\r\n setIsOpen(false);\r\n }\r\n };\r\n\r\n if (isOpen) {\r\n document.addEventListener(\"mousedown\", handleClickOutside);\r\n }\r\n\r\n return () => {\r\n document.removeEventListener(\"mousedown\", handleClickOutside);\r\n };\r\n }, [isOpen]);\r\n\r\n const saveToStorage = (columns: string[]) => {\r\n if (storageKey && typeof window !== \"undefined\") {\r\n try {\r\n window.localStorage.setItem(storageKey, JSON.stringify(columns));\r\n } catch (error) {\r\n console.warn(\r\n \"Failed to save column visibility to localStorage:\",\r\n error,\r\n );\r\n }\r\n }\r\n };\r\n\r\n const handleToggleColumn = (columnKey: string) => {\r\n const newVisibleColumns = visibleColumns.includes(columnKey)\r\n ? visibleColumns.filter((key) => key !== columnKey)\r\n : [...visibleColumns, columnKey];\r\n\r\n saveToStorage(newVisibleColumns);\r\n onColumnsChange(newVisibleColumns);\r\n };\r\n\r\n const handleSelectAll = () => {\r\n const allKeys = availableColumns.map((col) => col.key);\r\n saveToStorage(allKeys);\r\n onColumnsChange(allKeys);\r\n };\r\n\r\n return (\r\n <div className=\"apt-column-toggle-container\" ref={menuRef}>\r\n <button\r\n type=\"button\"\r\n onClick={() => setIsOpen(!isOpen)}\r\n className=\"apt-column-toggle-btn\"\r\n aria-label=\"Toggle column visibility\"\r\n aria-expanded={isOpen}\r\n >\r\n <ViewColumnIcon className=\"apt-column-toggle-icon\" />\r\n <span>Columns</span>\r\n <span className=\"apt-column-toggle-count\">\r\n ({visibleColumns.length})\r\n </span>\r\n </button>\r\n\r\n {isOpen && (\r\n <div className=\"apt-column-toggle-menu\">\r\n <div className=\"apt-column-toggle-menu-inner\">\r\n <div className=\"apt-column-toggle-header\">\r\n <h3 className=\"apt-column-toggle-title\">Toggle Columns</h3>\r\n <button\r\n type=\"button\"\r\n onClick={handleSelectAll}\r\n className=\"apt-column-toggle-select-all\"\r\n >\r\n Select All\r\n </button>\r\n </div>\r\n <div className=\"apt-column-toggle-list\">\r\n {availableColumns.map((column) => {\r\n const isVisible = visibleColumns.includes(column.key);\r\n return (\r\n <label key={column.key} className=\"apt-column-toggle-item\">\r\n <input\r\n type=\"checkbox\"\r\n checked={isVisible}\r\n onChange={() => handleToggleColumn(column.key)}\r\n className=\"apt-column-toggle-checkbox\"\r\n />\r\n <span className=\"apt-column-toggle-label\">\r\n {column.label}\r\n </span>\r\n </label>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default ColumnVisibilityToggle;\r\n"]}
package/dist/index.mjs CHANGED
@@ -24,7 +24,7 @@ function styleInject(css, { insertAt } = {}) {
24
24
  }
25
25
 
26
26
  // src/styles.css
27
- styleInject(":root {\n --apt-color-primary: #371f1f;\n --apt-color-border: #d1d5db;\n --apt-color-bg: white;\n --apt-color-bg-secondary: #e5e7eb;\n --apt-color-bg-hover: #f3f4f6;\n --apt-color-text: #1f2937;\n --apt-color-text-muted: #6b7280;\n --apt-color-text-muted-light: #9ca3af;\n --apt-color-accent: #9333ea;\n --apt-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1);\n --apt-shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);\n --apt-resizer-color: #bbb;\n --apt-resizer-hover-color: #888;\n --apt-th-sortable-hover: #d1d5db;\n --apt-btn-bg: white;\n --apt-btn-hover-bg: #d1d5db;\n}\n@media (prefers-color-scheme: dark) {\n :root {\n --apt-color-primary: #eee;\n --apt-color-border: #333;\n --apt-color-bg: #1e1e1e;\n --apt-color-bg-secondary: #333;\n --apt-color-bg-hover: rgba(126, 126, 126, 0.15);\n --apt-color-text: #eee;\n --apt-color-text-muted: #d1d5db;\n --apt-color-text-muted-light: #444;\n --apt-color-accent: #a855f7;\n --apt-resizer-color: #666;\n --apt-resizer-hover-color: #999;\n --apt-th-sortable-hover: #444;\n --apt-btn-bg: #444;\n --apt-btn-hover-bg: #555;\n }\n}\n.dark {\n --apt-color-primary: #eee;\n --apt-color-border: #333;\n --apt-color-bg: #1e1e1e;\n --apt-color-bg-secondary: #333;\n --apt-color-bg-hover: rgba(126, 126, 126, 0.15);\n --apt-color-text: #eee;\n --apt-color-text-muted: #d1d5db;\n --apt-color-text-muted-light: #444;\n --apt-color-accent: #a855f7;\n --apt-resizer-color: #666;\n --apt-resizer-hover-color: #999;\n --apt-th-sortable-hover: #444;\n --apt-btn-bg: #444;\n --apt-btn-hover-bg: #555;\n}\n.apt-table-container {\n color: var(--apt-color-text);\n border-radius: 6px;\n margin: 0;\n padding: 0;\n border: 1px solid var(--apt-color-border);\n background-color: var(--apt-color-bg);\n box-shadow: var(--apt-shadow);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n.apt-empty-state {\n flex-grow: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n text-align: center;\n padding: 48px 0;\n color: var(--apt-color-text-muted-light);\n}\n.apt-scroll-area {\n flex-grow: 1;\n overflow: auto;\n}\n.apt-table {\n width: 100%;\n text-align: left;\n font-size: 0.75rem;\n table-layout: fixed;\n border-collapse: collapse;\n border-spacing: 0;\n margin: 0;\n padding: 0;\n}\n.apt-thead {\n position: sticky;\n top: 0;\n background-color: var(--apt-color-bg-secondary);\n z-index: 10;\n}\n.apt-th {\n position: relative;\n padding: 12px 8px;\n border: none;\n}\n.apt-th-sortable {\n cursor: pointer;\n}\n.apt-th-sortable:hover {\n background-color: var(--apt-th-sortable-hover);\n}\n.apt-th-content {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.apt-resizer {\n position: absolute;\n right: 0;\n top: 4px;\n height: 80%;\n width: 3px;\n border-radius: 2px;\n cursor: col-resize;\n user-select: none;\n touch-action: none;\n background-color: var(--apt-resizer-color);\n}\n.apt-resizer:hover,\n.apt-th:hover .apt-resizer {\n background-color: var(--apt-resizer-hover-color);\n}\n.apt-tbody {\n border: none;\n}\n.apt-tbody tr {\n border: none;\n}\n.apt-row {\n transition: background-color 0.15s;\n}\n.apt-row:hover {\n background-color: var(--apt-color-bg-hover);\n}\n.apt-row-expanded {\n background-color: var(--apt-color-bg-hover);\n}\n.apt-td {\n padding: 4px 8px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n border: none;\n}\n.apt-td-actions {\n padding: 4px 8px;\n border: none;\n}\n.apt-footer {\n display: grid;\n grid-template-columns: 1fr 1fr 1fr;\n align-items: center;\n padding: 8px;\n background-color: var(--apt-color-bg-secondary);\n}\n.apt-footer-left {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n.apt-footer-center {\n justify-self: center;\n font-size: 0.875rem;\n color: var(--apt-color-text);\n}\n.apt-footer-right {\n justify-self: end;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n.apt-rows-label {\n font-size: 0.75rem;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: var(--apt-color-text-muted);\n}\n.apt-rows-select {\n padding: 4px 8px;\n font-size: 0.875rem;\n border-radius: 4px;\n background-color: var(--apt-btn-bg);\n color: var(--apt-color-text);\n border: 1px solid var(--apt-color-border);\n}\n.apt-btn {\n padding: 4px 12px;\n font-size: 0.875rem;\n border-radius: 4px;\n background-color: var(--apt-btn-bg);\n color: var(--apt-color-text);\n border: 0;\n cursor: pointer;\n transition: background-color 0.15s;\n}\n.apt-btn:hover:not(:disabled) {\n background-color: var(--apt-btn-hover-bg);\n}\n.apt-btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n.apt-sort-icon {\n display: inline-block;\n margin-left: 4px;\n width: 14px;\n height: 14px;\n opacity: 0.3;\n}\n.apt-sort-icon-active {\n opacity: 1;\n}\n.apt-column-toggle-container {\n position: relative;\n}\n.apt-column-toggle-btn {\n display: flex;\n align-items: center;\n gap: 8px;\n border-radius: 8px;\n border: 1px solid var(--apt-color-border);\n background-color: var(--apt-color-bg-hover);\n padding: 8px 12px;\n font-size: 0.875rem;\n font-weight: 500;\n color: var(--apt-color-primary);\n box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1);\n cursor: pointer;\n transition: background-color 0.15s;\n}\n.apt-column-toggle-btn:hover {\n background-color: var(--apt-color-bg-secondary);\n}\n.apt-column-toggle-btn:focus {\n outline: none;\n}\n.apt-column-toggle-icon {\n font-size: 1.125rem;\n}\n.apt-column-toggle-count {\n font-size: 0.75rem;\n opacity: 0.7;\n}\n.apt-column-toggle-menu {\n position: absolute;\n right: 0;\n margin-top: 8px;\n width: 288px;\n border-radius: 8px;\n border: 1px solid var(--apt-color-border);\n background-color: var(--apt-color-bg);\n box-shadow: var(--apt-shadow-lg);\n z-index: 50;\n max-height: 384px;\n overflow-y: auto;\n}\n.apt-column-toggle-menu-inner {\n padding: 12px;\n}\n.apt-column-toggle-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 12px;\n border-bottom: 1px solid var(--apt-color-border);\n padding-bottom: 8px;\n}\n.apt-column-toggle-title {\n font-size: 0.875rem;\n font-weight: 600;\n color: var(--apt-color-primary);\n}\n.apt-column-toggle-select-all {\n font-size: 0.75rem;\n color: var(--apt-color-accent);\n background: none;\n border: none;\n cursor: pointer;\n text-decoration: none;\n}\n.apt-column-toggle-select-all:hover {\n text-decoration: underline;\n}\n.apt-column-toggle-list {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n.apt-column-toggle-item {\n display: flex;\n align-items: center;\n gap: 8px;\n cursor: pointer;\n padding: 6px 8px;\n border-radius: 4px;\n transition: background-color 0.15s;\n}\n.apt-column-toggle-item:hover {\n background-color: var(--apt-color-bg-hover);\n}\n.apt-column-toggle-checkbox {\n width: 16px;\n height: 16px;\n color: var(--apt-color-accent);\n border-radius: 12px;\n cursor: pointer;\n accent-color: var(--apt-color-accent);\n}\n.apt-column-toggle-label {\n font-size: 0.875rem;\n color: var(--apt-color-primary);\n flex: 1;\n}\n.apt-flex {\n display: flex;\n}\n.apt-items-center {\n align-items: center;\n}\n.apt-gap-2 {\n gap: 8px;\n}\n");
27
+ styleInject(":root {\n --apt-color-primary: #371f1f;\n --apt-color-border: #d1d5db;\n --apt-color-bg: white;\n --apt-color-bg-secondary: #e5e7eb;\n --apt-color-bg-hover: #f3f4f6;\n --apt-color-text: #1f2937;\n --apt-color-text-muted: #6b7280;\n --apt-color-text-muted-light: #9ca3af;\n --apt-color-accent: #9333ea;\n --apt-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1);\n --apt-shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);\n --apt-resizer-color: #bbb;\n --apt-resizer-hover-color: #888;\n --apt-th-sortable-hover: #d1d5db;\n --apt-btn-bg: white;\n --apt-btn-hover-bg: #d1d5db;\n}\n@media (prefers-color-scheme: dark) {\n :root {\n --apt-color-primary: #eee;\n --apt-color-border: #333;\n --apt-color-bg: #1e1e1e;\n --apt-color-bg-secondary: #333;\n --apt-color-bg-hover: rgba(126, 126, 126, 0.15);\n --apt-color-text: #eee;\n --apt-color-text-muted: #d1d5db;\n --apt-color-text-muted-light: #444;\n --apt-color-accent: #a855f7;\n --apt-resizer-color: #666;\n --apt-resizer-hover-color: #999;\n --apt-th-sortable-hover: #444;\n --apt-btn-bg: #444;\n --apt-btn-hover-bg: #555;\n }\n}\nhtml.dark,\n.dark,\n:root.dark {\n --apt-color-primary: #eee;\n --apt-color-border: #333;\n --apt-color-bg: #1e1e1e;\n --apt-color-bg-secondary: #333;\n --apt-color-bg-hover: rgba(126, 126, 126, 0.15);\n --apt-color-text: #eee;\n --apt-color-text-muted: #d1d5db;\n --apt-color-text-muted-light: #444;\n --apt-color-accent: #a855f7;\n --apt-resizer-color: #666;\n --apt-resizer-hover-color: #999;\n --apt-th-sortable-hover: #444;\n --apt-btn-bg: #444;\n --apt-btn-hover-bg: #555;\n}\nhtml.light,\n.light,\n:root.light {\n --apt-color-primary: #371f1f;\n --apt-color-border: #d1d5db;\n --apt-color-bg: white;\n --apt-color-bg-secondary: #e5e7eb;\n --apt-color-bg-hover: #f3f4f6;\n --apt-color-text: #1f2937;\n --apt-color-text-muted: #6b7280;\n --apt-color-text-muted-light: #9ca3af;\n --apt-color-accent: #9333ea;\n --apt-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1);\n --apt-shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);\n --apt-resizer-color: #bbb;\n --apt-resizer-hover-color: #888;\n --apt-th-sortable-hover: #d1d5db;\n --apt-btn-bg: white;\n --apt-btn-hover-bg: #d1d5db;\n}\n.apt-table-container {\n color: var(--apt-color-text);\n border-radius: 6px;\n margin: 0;\n padding: 0;\n border: 1px solid var(--apt-color-border);\n background-color: var(--apt-color-bg);\n box-shadow: var(--apt-shadow);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n.apt-empty-state {\n flex-grow: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n text-align: center;\n padding: 48px 0;\n color: var(--apt-color-text-muted-light);\n}\n.apt-scroll-area {\n flex-grow: 1;\n overflow: auto;\n}\n.apt-table {\n width: 100%;\n text-align: left;\n font-size: 0.75rem;\n table-layout: fixed;\n border-collapse: collapse;\n border-spacing: 0;\n margin: 0;\n padding: 0;\n}\n.apt-thead {\n position: sticky;\n top: 0;\n background-color: var(--apt-color-bg-secondary);\n z-index: 10;\n}\n.apt-th {\n position: relative;\n padding: 12px 8px;\n border: none;\n}\n.apt-th-sortable {\n cursor: pointer;\n}\n.apt-th-sortable:hover {\n background-color: var(--apt-th-sortable-hover);\n}\n.apt-th-content {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.apt-resizer {\n position: absolute;\n right: 0;\n top: 4px;\n height: 80%;\n width: 3px;\n border-radius: 2px;\n cursor: col-resize;\n user-select: none;\n touch-action: none;\n background-color: var(--apt-resizer-color);\n}\n.apt-resizer:hover,\n.apt-th:hover .apt-resizer {\n background-color: var(--apt-resizer-hover-color);\n}\n.apt-tbody {\n border: none;\n}\n.apt-tbody tr {\n border: none;\n}\n.apt-row {\n transition: background-color 0.15s;\n}\n.apt-row:hover {\n background-color: var(--apt-color-bg-hover);\n}\n.apt-row-expanded {\n background-color: var(--apt-color-bg-hover);\n}\n.apt-td {\n padding: 4px 8px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n border: none;\n}\n.apt-td-actions {\n padding: 4px 8px;\n border: none;\n}\n.apt-footer {\n display: grid;\n grid-template-columns: 1fr 1fr 1fr;\n align-items: center;\n padding: 8px;\n background-color: var(--apt-color-bg-secondary);\n}\n.apt-footer-left {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n.apt-footer-center {\n justify-self: center;\n font-size: 0.875rem;\n color: var(--apt-color-text);\n}\n.apt-footer-right {\n justify-self: end;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n.apt-rows-label {\n font-size: 0.75rem;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: var(--apt-color-text-muted);\n}\n.apt-rows-select {\n padding: 4px 8px;\n font-size: 0.875rem;\n border-radius: 4px;\n background-color: var(--apt-btn-bg);\n color: var(--apt-color-text);\n border: 1px solid var(--apt-color-border);\n}\n.apt-btn {\n padding: 4px 12px;\n font-size: 0.875rem;\n border-radius: 4px;\n background-color: var(--apt-btn-bg);\n color: var(--apt-color-text);\n border: 0;\n cursor: pointer;\n transition: background-color 0.15s;\n}\n.apt-btn:hover:not(:disabled) {\n background-color: var(--apt-btn-hover-bg);\n}\n.apt-btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n.apt-sort-icon {\n display: inline-block;\n margin-left: 4px;\n width: 14px;\n height: 14px;\n opacity: 0.3;\n}\n.apt-sort-icon-active {\n opacity: 1;\n}\n.apt-column-toggle-container {\n position: relative;\n}\n.apt-column-toggle-btn {\n display: flex;\n align-items: center;\n gap: 8px;\n border-radius: 8px;\n border: 1px solid var(--apt-color-border);\n background-color: var(--apt-color-bg-hover);\n padding: 8px 12px;\n font-size: 0.875rem;\n font-weight: 500;\n color: var(--apt-color-primary);\n box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1);\n cursor: pointer;\n transition: background-color 0.15s;\n}\n.apt-column-toggle-btn:hover {\n background-color: var(--apt-color-bg-secondary);\n}\n.apt-column-toggle-btn:focus {\n outline: none;\n}\n.apt-column-toggle-icon {\n font-size: 1.125rem;\n}\n.apt-column-toggle-count {\n font-size: 0.75rem;\n opacity: 0.7;\n}\n.apt-column-toggle-menu {\n position: absolute;\n right: 0;\n margin-top: 8px;\n width: 288px;\n border-radius: 8px;\n border: 1px solid var(--apt-color-border);\n background-color: var(--apt-color-bg);\n box-shadow: var(--apt-shadow-lg);\n z-index: 50;\n max-height: 384px;\n overflow-y: auto;\n}\n.apt-column-toggle-menu-inner {\n padding: 12px;\n}\n.apt-column-toggle-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 12px;\n border-bottom: 1px solid var(--apt-color-border);\n padding-bottom: 8px;\n}\n.apt-column-toggle-title {\n font-size: 0.875rem;\n font-weight: 600;\n color: var(--apt-color-primary);\n}\n.apt-column-toggle-select-all {\n font-size: 0.75rem;\n color: var(--apt-color-accent);\n background: none;\n border: none;\n cursor: pointer;\n text-decoration: none;\n}\n.apt-column-toggle-select-all:hover {\n text-decoration: underline;\n}\n.apt-column-toggle-list {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n.apt-column-toggle-item {\n display: flex;\n align-items: center;\n gap: 8px;\n cursor: pointer;\n padding: 6px 8px;\n border-radius: 4px;\n transition: background-color 0.15s;\n}\n.apt-column-toggle-item:hover {\n background-color: var(--apt-color-bg-hover);\n}\n.apt-column-toggle-checkbox {\n width: 16px;\n height: 16px;\n color: var(--apt-color-accent);\n border-radius: 12px;\n cursor: pointer;\n accent-color: var(--apt-color-accent);\n}\n.apt-column-toggle-label {\n font-size: 0.875rem;\n color: var(--apt-color-primary);\n flex: 1;\n}\n.apt-flex {\n display: flex;\n}\n.apt-items-center {\n align-items: center;\n}\n.apt-gap-2 {\n gap: 8px;\n}\n");
28
28
  var SortIcon = ({ className }) => /* @__PURE__ */ jsx(
29
29
  "svg",
30
30
  {
@@ -1 +1 @@
1
- {"version":3,"sources":["#style-inject:#style-inject","../src/styles.css","../src/Table.tsx","../src/ColumnVisibilityToggle.tsx"],"names":["Fragment","jsx","useState","useRef","useEffect","jsxs"],"mappings":"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","file":"index.mjs","sourcesContent":["\n export default function styleInject(css, { insertAt } = {}) {\n if (!css || typeof document === 'undefined') return\n \n const head = document.head || document.getElementsByTagName('head')[0]\n const style = document.createElement('style')\n style.type = 'text/css'\n \n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild)\n } else {\n head.appendChild(style)\n }\n } else {\n head.appendChild(style)\n }\n \n if (style.styleSheet) {\n style.styleSheet.cssText = css\n } else {\n style.appendChild(document.createTextNode(css))\n }\n }\n ","import styleInject from '#style-inject';styleInject(\":root {\\n --apt-color-primary: #371f1f;\\n --apt-color-border: #d1d5db;\\n --apt-color-bg: white;\\n --apt-color-bg-secondary: #e5e7eb;\\n --apt-color-bg-hover: #f3f4f6;\\n --apt-color-text: #1f2937;\\n --apt-color-text-muted: #6b7280;\\n --apt-color-text-muted-light: #9ca3af;\\n --apt-color-accent: #9333ea;\\n --apt-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1);\\n --apt-shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);\\n --apt-resizer-color: #bbb;\\n --apt-resizer-hover-color: #888;\\n --apt-th-sortable-hover: #d1d5db;\\n --apt-btn-bg: white;\\n --apt-btn-hover-bg: #d1d5db;\\n}\\n@media (prefers-color-scheme: dark) {\\n :root {\\n --apt-color-primary: #eee;\\n --apt-color-border: #333;\\n --apt-color-bg: #1e1e1e;\\n --apt-color-bg-secondary: #333;\\n --apt-color-bg-hover: rgba(126, 126, 126, 0.15);\\n --apt-color-text: #eee;\\n --apt-color-text-muted: #d1d5db;\\n --apt-color-text-muted-light: #444;\\n --apt-color-accent: #a855f7;\\n --apt-resizer-color: #666;\\n --apt-resizer-hover-color: #999;\\n --apt-th-sortable-hover: #444;\\n --apt-btn-bg: #444;\\n --apt-btn-hover-bg: #555;\\n }\\n}\\n.dark {\\n --apt-color-primary: #eee;\\n --apt-color-border: #333;\\n --apt-color-bg: #1e1e1e;\\n --apt-color-bg-secondary: #333;\\n --apt-color-bg-hover: rgba(126, 126, 126, 0.15);\\n --apt-color-text: #eee;\\n --apt-color-text-muted: #d1d5db;\\n --apt-color-text-muted-light: #444;\\n --apt-color-accent: #a855f7;\\n --apt-resizer-color: #666;\\n --apt-resizer-hover-color: #999;\\n --apt-th-sortable-hover: #444;\\n --apt-btn-bg: #444;\\n --apt-btn-hover-bg: #555;\\n}\\n.apt-table-container {\\n color: var(--apt-color-text);\\n border-radius: 6px;\\n margin: 0;\\n padding: 0;\\n border: 1px solid var(--apt-color-border);\\n background-color: var(--apt-color-bg);\\n box-shadow: var(--apt-shadow);\\n display: flex;\\n flex-direction: column;\\n overflow: hidden;\\n}\\n.apt-empty-state {\\n flex-grow: 1;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n text-align: center;\\n padding: 48px 0;\\n color: var(--apt-color-text-muted-light);\\n}\\n.apt-scroll-area {\\n flex-grow: 1;\\n overflow: auto;\\n}\\n.apt-table {\\n width: 100%;\\n text-align: left;\\n font-size: 0.75rem;\\n table-layout: fixed;\\n border-collapse: collapse;\\n border-spacing: 0;\\n margin: 0;\\n padding: 0;\\n}\\n.apt-thead {\\n position: sticky;\\n top: 0;\\n background-color: var(--apt-color-bg-secondary);\\n z-index: 10;\\n}\\n.apt-th {\\n position: relative;\\n padding: 12px 8px;\\n border: none;\\n}\\n.apt-th-sortable {\\n cursor: pointer;\\n}\\n.apt-th-sortable:hover {\\n background-color: var(--apt-th-sortable-hover);\\n}\\n.apt-th-content {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n}\\n.apt-resizer {\\n position: absolute;\\n right: 0;\\n top: 4px;\\n height: 80%;\\n width: 3px;\\n border-radius: 2px;\\n cursor: col-resize;\\n user-select: none;\\n touch-action: none;\\n background-color: var(--apt-resizer-color);\\n}\\n.apt-resizer:hover,\\n.apt-th:hover .apt-resizer {\\n background-color: var(--apt-resizer-hover-color);\\n}\\n.apt-tbody {\\n border: none;\\n}\\n.apt-tbody tr {\\n border: none;\\n}\\n.apt-row {\\n transition: background-color 0.15s;\\n}\\n.apt-row:hover {\\n background-color: var(--apt-color-bg-hover);\\n}\\n.apt-row-expanded {\\n background-color: var(--apt-color-bg-hover);\\n}\\n.apt-td {\\n padding: 4px 8px;\\n white-space: nowrap;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n border: none;\\n}\\n.apt-td-actions {\\n padding: 4px 8px;\\n border: none;\\n}\\n.apt-footer {\\n display: grid;\\n grid-template-columns: 1fr 1fr 1fr;\\n align-items: center;\\n padding: 8px;\\n background-color: var(--apt-color-bg-secondary);\\n}\\n.apt-footer-left {\\n display: flex;\\n align-items: center;\\n gap: 8px;\\n}\\n.apt-footer-center {\\n justify-self: center;\\n font-size: 0.875rem;\\n color: var(--apt-color-text);\\n}\\n.apt-footer-right {\\n justify-self: end;\\n display: flex;\\n align-items: center;\\n gap: 8px;\\n}\\n.apt-rows-label {\\n font-size: 0.75rem;\\n text-transform: uppercase;\\n letter-spacing: 0.05em;\\n color: var(--apt-color-text-muted);\\n}\\n.apt-rows-select {\\n padding: 4px 8px;\\n font-size: 0.875rem;\\n border-radius: 4px;\\n background-color: var(--apt-btn-bg);\\n color: var(--apt-color-text);\\n border: 1px solid var(--apt-color-border);\\n}\\n.apt-btn {\\n padding: 4px 12px;\\n font-size: 0.875rem;\\n border-radius: 4px;\\n background-color: var(--apt-btn-bg);\\n color: var(--apt-color-text);\\n border: 0;\\n cursor: pointer;\\n transition: background-color 0.15s;\\n}\\n.apt-btn:hover:not(:disabled) {\\n background-color: var(--apt-btn-hover-bg);\\n}\\n.apt-btn:disabled {\\n opacity: 0.5;\\n cursor: not-allowed;\\n}\\n.apt-sort-icon {\\n display: inline-block;\\n margin-left: 4px;\\n width: 14px;\\n height: 14px;\\n opacity: 0.3;\\n}\\n.apt-sort-icon-active {\\n opacity: 1;\\n}\\n.apt-column-toggle-container {\\n position: relative;\\n}\\n.apt-column-toggle-btn {\\n display: flex;\\n align-items: center;\\n gap: 8px;\\n border-radius: 8px;\\n border: 1px solid var(--apt-color-border);\\n background-color: var(--apt-color-bg-hover);\\n padding: 8px 12px;\\n font-size: 0.875rem;\\n font-weight: 500;\\n color: var(--apt-color-primary);\\n box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1);\\n cursor: pointer;\\n transition: background-color 0.15s;\\n}\\n.apt-column-toggle-btn:hover {\\n background-color: var(--apt-color-bg-secondary);\\n}\\n.apt-column-toggle-btn:focus {\\n outline: none;\\n}\\n.apt-column-toggle-icon {\\n font-size: 1.125rem;\\n}\\n.apt-column-toggle-count {\\n font-size: 0.75rem;\\n opacity: 0.7;\\n}\\n.apt-column-toggle-menu {\\n position: absolute;\\n right: 0;\\n margin-top: 8px;\\n width: 288px;\\n border-radius: 8px;\\n border: 1px solid var(--apt-color-border);\\n background-color: var(--apt-color-bg);\\n box-shadow: var(--apt-shadow-lg);\\n z-index: 50;\\n max-height: 384px;\\n overflow-y: auto;\\n}\\n.apt-column-toggle-menu-inner {\\n padding: 12px;\\n}\\n.apt-column-toggle-header {\\n display: flex;\\n align-items: center;\\n justify-content: space-between;\\n margin-bottom: 12px;\\n border-bottom: 1px solid var(--apt-color-border);\\n padding-bottom: 8px;\\n}\\n.apt-column-toggle-title {\\n font-size: 0.875rem;\\n font-weight: 600;\\n color: var(--apt-color-primary);\\n}\\n.apt-column-toggle-select-all {\\n font-size: 0.75rem;\\n color: var(--apt-color-accent);\\n background: none;\\n border: none;\\n cursor: pointer;\\n text-decoration: none;\\n}\\n.apt-column-toggle-select-all:hover {\\n text-decoration: underline;\\n}\\n.apt-column-toggle-list {\\n display: flex;\\n flex-direction: column;\\n gap: 4px;\\n}\\n.apt-column-toggle-item {\\n display: flex;\\n align-items: center;\\n gap: 8px;\\n cursor: pointer;\\n padding: 6px 8px;\\n border-radius: 4px;\\n transition: background-color 0.15s;\\n}\\n.apt-column-toggle-item:hover {\\n background-color: var(--apt-color-bg-hover);\\n}\\n.apt-column-toggle-checkbox {\\n width: 16px;\\n height: 16px;\\n color: var(--apt-color-accent);\\n border-radius: 12px;\\n cursor: pointer;\\n accent-color: var(--apt-color-accent);\\n}\\n.apt-column-toggle-label {\\n font-size: 0.875rem;\\n color: var(--apt-color-primary);\\n flex: 1;\\n}\\n.apt-flex {\\n display: flex;\\n}\\n.apt-items-center {\\n align-items: center;\\n}\\n.apt-gap-2 {\\n gap: 8px;\\n}\\n\")","import {\r\n Fragment,\r\n useEffect,\r\n useMemo,\r\n useRef,\r\n useState,\r\n CSSProperties,\r\n} from \"react\";\r\n\r\n// ============= TypeScript Interfaces =============\r\n\r\nexport interface TableHeader {\r\n accessor: string;\r\n label: string;\r\n isSortable?: boolean;\r\n width?: string | number;\r\n minWidth?: string | number;\r\n cellRenderer?: (args: { row: any; value: any }) => React.ReactNode;\r\n}\r\n\r\nexport interface SortConfig {\r\n key: string;\r\n direction: \"asc\" | \"desc\";\r\n}\r\n\r\nexport interface TableProps {\r\n manualHeaders: TableHeader[];\r\n manualRowData: Record<string, any>[];\r\n initialSort?: SortConfig | null;\r\n height?: string;\r\n rowHeight?: number;\r\n rowsPerPage?: number;\r\n shouldPaginate?: boolean;\r\n rowClassName?: (row: any) => string;\r\n onRowClick?: (row: any) => void;\r\n minColWidth?: number;\r\n mobileAutoSizeOnHeaderClick?: boolean;\r\n mobileBreakpoint?: number;\r\n columnWidthsStorageKey?: string;\r\n rowsPerPageOptions?: number[];\r\n onRowsPerPageChange?: (value: number) => void;\r\n expandedRowId?: string | null;\r\n renderExpandedRow?: (row: any) => React.ReactNode;\r\n renderFullRow?: (row: any) => React.ReactNode;\r\n}\r\n\r\n// ============= SVG Icons (replaced react-icons) =============\r\n\r\nconst SortIcon: React.FC<{ className?: string }> = ({ className }) => (\r\n <svg\r\n className={className}\r\n width=\"12\"\r\n height=\"12\"\r\n viewBox=\"0 0 12 12\"\r\n fill=\"currentColor\"\r\n >\r\n <path d=\"M6 2L3 5h6L6 2zM6 10l3-3H3l3 3z\" />\r\n </svg>\r\n);\r\n\r\nconst SortUpIcon: React.FC<{ className?: string }> = ({ className }) => (\r\n <svg\r\n className={className}\r\n width=\"12\"\r\n height=\"12\"\r\n viewBox=\"0 0 12 12\"\r\n fill=\"currentColor\"\r\n >\r\n <path d=\"M6 2L2 7h8L6 2z\" />\r\n </svg>\r\n);\r\n\r\nconst SortDownIcon: React.FC<{ className?: string }> = ({ className }) => (\r\n <svg\r\n className={className}\r\n width=\"12\"\r\n height=\"12\"\r\n viewBox=\"0 0 12 12\"\r\n fill=\"currentColor\"\r\n >\r\n <path d=\"M6 10l4-5H2l4 5z\" />\r\n </svg>\r\n);\r\n\r\n// ============= Main Component =============\r\n\r\nconst Table: React.FC<TableProps> = ({\r\n manualHeaders,\r\n manualRowData,\r\n initialSort,\r\n height = \"100%\",\r\n rowHeight = 40,\r\n rowsPerPage = 60,\r\n shouldPaginate = true,\r\n rowClassName,\r\n onRowClick,\r\n minColWidth = 50,\r\n mobileAutoSizeOnHeaderClick = false,\r\n mobileBreakpoint = 768,\r\n columnWidthsStorageKey,\r\n rowsPerPageOptions = [20, 50, 100],\r\n onRowsPerPageChange,\r\n expandedRowId,\r\n renderExpandedRow,\r\n renderFullRow,\r\n}) => {\r\n const [sortConfig, setSortConfig] = useState<SortConfig | null>(\r\n initialSort || null,\r\n );\r\n const [currentPage, setCurrentPage] = useState(1);\r\n const [columnWidths, setColumnWidths] = useState<\r\n Record<string, string | number>\r\n >({});\r\n const [expandedColumns, setExpandedColumns] = useState<Set<string>>(\r\n () => new Set(),\r\n );\r\n const initialColumnWidthsRef = useRef<\r\n Record<string, string | number | undefined>\r\n >({});\r\n const tableRef = useRef<HTMLTableElement>(null);\r\n const textMeasureContextRef = useRef<CanvasRenderingContext2D | null>(null);\r\n const [isMobile, setIsMobile] = useState(() => {\r\n if (typeof window === \"undefined\") return false;\r\n return window.innerWidth < mobileBreakpoint;\r\n });\r\n\r\n const headers = useMemo(() => manualHeaders || [], [manualHeaders]);\r\n\r\n const loadStoredColumnWidths = (\r\n fallback: Record<string, string | number | undefined>,\r\n ) => {\r\n if (!columnWidthsStorageKey || typeof window === \"undefined\") {\r\n return fallback;\r\n }\r\n try {\r\n const raw = window.localStorage.getItem(columnWidthsStorageKey);\r\n if (!raw) return fallback;\r\n const parsed = JSON.parse(raw);\r\n if (!parsed || typeof parsed !== \"object\") return fallback;\r\n const next = { ...fallback };\r\n Object.keys(next).forEach((key) => {\r\n const val = parsed[key];\r\n if (typeof val === \"number\" || typeof val === \"string\") {\r\n next[key] = val;\r\n }\r\n });\r\n return next;\r\n } catch {\r\n return fallback;\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n const initialWidths: Record<string, string | number | undefined> = {};\r\n headers.forEach((header) => {\r\n initialWidths[header.accessor] = header.width;\r\n });\r\n initialColumnWidthsRef.current = initialWidths;\r\n setColumnWidths(\r\n loadStoredColumnWidths(initialWidths) as Record<string, string | number>,\r\n );\r\n setExpandedColumns(new Set());\r\n }, [headers, columnWidthsStorageKey]);\r\n\r\n useEffect(() => {\r\n if (!columnWidthsStorageKey || typeof window === \"undefined\") return;\r\n if (Object.keys(columnWidths).length === 0) return;\r\n window.localStorage.setItem(\r\n columnWidthsStorageKey,\r\n JSON.stringify(columnWidths),\r\n );\r\n }, [columnWidths, columnWidthsStorageKey]);\r\n\r\n useEffect(() => {\r\n if (typeof window === \"undefined\") return undefined;\r\n const handleResize = () =>\r\n setIsMobile(window.innerWidth < mobileBreakpoint);\r\n window.addEventListener(\"resize\", handleResize);\r\n return () => window.removeEventListener(\"resize\", handleResize);\r\n }, [mobileBreakpoint]);\r\n\r\n useEffect(() => {\r\n setCurrentPage(1);\r\n }, [rowsPerPage]);\r\n\r\n const measureTextWidth = (text: any): number => {\r\n if (typeof document === \"undefined\") return String(text ?? \"\").length * 8;\r\n const ctx =\r\n textMeasureContextRef.current ||\r\n (() => {\r\n const canvas = document.createElement(\"canvas\");\r\n const context = canvas.getContext(\"2d\");\r\n if (tableRef.current && context) {\r\n const font = window.getComputedStyle(tableRef.current).font;\r\n context.font = font || \"12px sans-serif\";\r\n }\r\n textMeasureContextRef.current = context;\r\n return context;\r\n })();\r\n return ctx ? ctx.measureText(String(text ?? \"\")).width : 0;\r\n };\r\n\r\n const parseWidthValue = (\r\n value: string | number | undefined,\r\n fallback: number,\r\n ): number => {\r\n if (typeof value === \"number\" && !Number.isNaN(value)) return value;\r\n if (typeof value === \"string\") {\r\n const parsed = parseFloat(value);\r\n if (!Number.isNaN(parsed)) return parsed;\r\n }\r\n return fallback;\r\n };\r\n\r\n const rows = useMemo(() => {\r\n if (!Array.isArray(manualRowData)) return [];\r\n\r\n const src = manualRowData\r\n .filter(Boolean)\r\n .filter((r) => typeof r === \"object\");\r\n\r\n const makeSafeId = (full: any, idx: number): string => {\r\n const rawId = full?.id;\r\n const v1 =\r\n rawId !== undefined && rawId !== null && String(rawId).trim() !== \"\"\r\n ? String(rawId).trim()\r\n : \"\";\r\n const v2 = [\r\n full?.order_id,\r\n full?.bom_id,\r\n full?.bom_workstation_status_id,\r\n full?.bom_data_id,\r\n full?.unique_task_info_id,\r\n full?.order_data_id,\r\n ]\r\n .filter((v) => v !== undefined && v !== null && String(v) !== \"\")\r\n .join(\"-\");\r\n return v1 || `${v2}-row${idx}`;\r\n };\r\n\r\n return src.map((full: any, idx: number) => {\r\n const id = makeSafeId(full, idx);\r\n const base: any = { id, \"#\": idx + 1, _meta: full };\r\n headers.forEach((h) => {\r\n if (![\"#\", \"details_meta\"].includes(h.accessor)) {\r\n base[h.accessor] = full?.[h.accessor] ?? \"\";\r\n }\r\n });\r\n return base;\r\n });\r\n }, [manualRowData, headers]);\r\n\r\n const sortedRows = useMemo(() => {\r\n if (!sortConfig || !sortConfig.key) {\r\n return rows;\r\n }\r\n const sortableRows = [...rows];\r\n sortableRows.sort((a, b) => {\r\n const aVal = a[sortConfig.key];\r\n const bVal = b[sortConfig.key];\r\n\r\n if (aVal < bVal) {\r\n return sortConfig.direction === \"asc\" ? -1 : 1;\r\n }\r\n if (aVal > bVal) {\r\n return sortConfig.direction === \"asc\" ? 1 : -1;\r\n }\r\n return 0;\r\n });\r\n return sortableRows;\r\n }, [rows, sortConfig]);\r\n\r\n const effectiveShouldPaginate =\r\n shouldPaginate && sortedRows.length > rowsPerPage;\r\n\r\n const totalPages = effectiveShouldPaginate\r\n ? Math.ceil(sortedRows.length / rowsPerPage)\r\n : 1;\r\n\r\n if (currentPage > totalPages && totalPages > 0) {\r\n setCurrentPage(1);\r\n }\r\n\r\n const paginatedRows = useMemo(() => {\r\n if (!effectiveShouldPaginate) return sortedRows;\r\n const startIndex = (currentPage - 1) * rowsPerPage;\r\n return sortedRows.slice(startIndex, startIndex + rowsPerPage);\r\n }, [sortedRows, currentPage, rowsPerPage, effectiveShouldPaginate]);\r\n\r\n const handleSort = (key: string, isSortable?: boolean) => {\r\n if (!isSortable) return;\r\n let direction: \"asc\" | \"desc\" = \"asc\";\r\n if (\r\n sortConfig &&\r\n sortConfig.key === key &&\r\n sortConfig.direction === \"asc\"\r\n ) {\r\n direction = \"desc\";\r\n }\r\n setSortConfig({ key, direction });\r\n setCurrentPage(1);\r\n };\r\n\r\n const autoSizeColumn = (colIndex: number, header: TableHeader) => {\r\n if (!tableRef.current) return;\r\n const tableEl = tableRef.current;\r\n let maxWidth = measureTextWidth(header?.label || \"\");\r\n\r\n const collectCellWidth = (cell: HTMLTableCellElement | null) => {\r\n if (!cell) return;\r\n const scrollWidth = cell.scrollWidth || cell.offsetWidth || 0;\r\n const style = window.getComputedStyle(cell);\r\n const borderWidth =\r\n parseFloat(style.borderLeftWidth || \"0\") +\r\n parseFloat(style.borderRightWidth || \"0\");\r\n maxWidth = Math.max(maxWidth, Math.ceil(scrollWidth + borderWidth));\r\n };\r\n\r\n const headerCell =\r\n tableEl.tHead?.rows?.[0]?.cells?.[colIndex] ||\r\n tableEl.querySelector(`thead th:nth-child(${colIndex + 1})`);\r\n collectCellWidth(headerCell as HTMLTableCellElement);\r\n\r\n const bodyRows = tableEl.tBodies?.[0]?.rows || [];\r\n for (const row of bodyRows) {\r\n collectCellWidth(row.cells?.[colIndex] as HTMLTableCellElement);\r\n }\r\n\r\n rows.forEach((r) => {\r\n maxWidth = Math.max(\r\n maxWidth,\r\n Math.ceil(measureTextWidth(r[header.accessor])),\r\n );\r\n });\r\n\r\n const minWidthPx = parseWidthValue(\r\n header?.minWidth,\r\n parseWidthValue(minColWidth, 50),\r\n );\r\n const finalWidth = Math.max(maxWidth + 12, minWidthPx);\r\n setColumnWidths((prev) => ({\r\n ...prev,\r\n [header.accessor]: `${finalWidth}px`,\r\n }));\r\n };\r\n\r\n const resetColumnWidth = (accessor: string) => {\r\n const regularWidth = initialColumnWidthsRef.current[accessor];\r\n setColumnWidths((prev) => {\r\n if (regularWidth === undefined) {\r\n const next = { ...prev };\r\n delete next[accessor];\r\n return next;\r\n }\r\n return { ...prev, [accessor]: regularWidth };\r\n });\r\n };\r\n\r\n const handleHeaderClick = (header: TableHeader, colIndex: number) => {\r\n if (mobileAutoSizeOnHeaderClick && isMobile) {\r\n const isExpanded = expandedColumns.has(header.accessor);\r\n if (isExpanded) {\r\n resetColumnWidth(header.accessor);\r\n setExpandedColumns((prev) => {\r\n const next = new Set(prev);\r\n next.delete(header.accessor);\r\n return next;\r\n });\r\n } else {\r\n autoSizeColumn(colIndex, header);\r\n setExpandedColumns((prev) => {\r\n const next = new Set(prev);\r\n next.add(header.accessor);\r\n return next;\r\n });\r\n }\r\n return;\r\n }\r\n handleSort(header.accessor, header.isSortable);\r\n };\r\n\r\n const getSortIcon = (key: string): React.ReactNode => {\r\n if (mobileAutoSizeOnHeaderClick && isMobile) return null;\r\n if (!sortConfig || sortConfig.key !== key) {\r\n return <SortIcon className=\"apt-sort-icon\" />;\r\n }\r\n return sortConfig.direction === \"asc\" ? (\r\n <SortUpIcon className=\"apt-sort-icon apt-sort-icon-active\" />\r\n ) : (\r\n <SortDownIcon className=\"apt-sort-icon apt-sort-icon-active\" />\r\n );\r\n };\r\n\r\n const handleMouseDown = (e: React.MouseEvent, accessor: string) => {\r\n e.preventDefault();\r\n const startX = e.clientX;\r\n const th = (e.target as HTMLElement).closest(\"th\");\r\n if (!th) return;\r\n\r\n const header = headers.find((h) => h.accessor === accessor);\r\n const minResizeWidth = parseWidthValue(header?.minWidth, minColWidth);\r\n\r\n const startWidth = th.offsetWidth;\r\n\r\n document.body.style.cursor = \"col-resize\";\r\n document.body.style.userSelect = \"none\";\r\n\r\n const handleMouseMove = (moveEvent: MouseEvent) => {\r\n const deltaX = moveEvent.clientX - startX;\r\n const newWidth = startWidth + deltaX;\r\n const finalWidth = Math.max(newWidth, minResizeWidth);\r\n\r\n setColumnWidths((prev) => ({\r\n ...prev,\r\n [accessor]: `${finalWidth}px`,\r\n }));\r\n };\r\n\r\n const handleMouseUp = () => {\r\n document.body.style.cursor = \"\";\r\n document.body.style.userSelect = \"\";\r\n document.removeEventListener(\"mousemove\", handleMouseMove);\r\n document.removeEventListener(\"mouseup\", handleMouseUp);\r\n };\r\n\r\n document.addEventListener(\"mousemove\", handleMouseMove);\r\n document.addEventListener(\"mouseup\", handleMouseUp);\r\n };\r\n\r\n const containerStyle: CSSProperties = {\r\n height:\r\n sortedRows.length === 0\r\n ? height\r\n : !effectiveShouldPaginate\r\n ? \"auto\"\r\n : height,\r\n maxHeight: !effectiveShouldPaginate ? height : undefined,\r\n };\r\n\r\n return (\r\n <div className=\"apt-table-container\" style={containerStyle}>\r\n {sortedRows.length === 0 ? (\r\n <div className=\"apt-empty-state\">No rows to display.</div>\r\n ) : (\r\n <>\r\n <div className=\"apt-scroll-area\">\r\n <table className=\"apt-table\" ref={tableRef}>\r\n <colgroup>\r\n {headers.map((header) => (\r\n <col\r\n key={`col-${header.accessor}`}\r\n style={{\r\n width: columnWidths[header.accessor],\r\n minWidth: `${parseWidthValue(\r\n header.minWidth,\r\n minColWidth,\r\n )}px`,\r\n }}\r\n />\r\n ))}\r\n </colgroup>\r\n <thead className=\"apt-thead\">\r\n <tr>\r\n {headers.map((header, idx) => {\r\n const isHeaderClickable =\r\n (mobileAutoSizeOnHeaderClick && isMobile) ||\r\n header.isSortable;\r\n return (\r\n <th\r\n key={header.accessor}\r\n onClick={() => handleHeaderClick(header, idx)}\r\n className={`apt-th ${\r\n isHeaderClickable ? \"apt-th-sortable\" : \"\"\r\n }`}\r\n >\r\n <div className=\"apt-th-content\">\r\n {header.label}\r\n {header.isSortable &&\r\n !(mobileAutoSizeOnHeaderClick && isMobile) &&\r\n getSortIcon(header.accessor)}\r\n </div>\r\n <div\r\n className=\"apt-resizer\"\r\n onMouseDown={(e) => {\r\n e.stopPropagation();\r\n handleMouseDown(e, header.accessor);\r\n }}\r\n />\r\n </th>\r\n );\r\n })}\r\n </tr>\r\n </thead>\r\n <tbody className=\"apt-tbody\">\r\n {paginatedRows.map((row) => {\r\n const isExpanded = expandedRowId === row.id;\r\n const isFullRow =\r\n typeof renderFullRow === \"function\" && row?._meta?.fullRow;\r\n return (\r\n <Fragment key={row.id}>\r\n {isFullRow ? (\r\n <tr\r\n className={`apt-row ${rowClassName ? rowClassName(row) : \"\"}`}\r\n onClick={() => onRowClick && onRowClick(row)}\r\n >\r\n <td\r\n colSpan={headers.length}\r\n className=\"apt-td\"\r\n style={{ padding: 0 }}\r\n >\r\n {renderFullRow(row)}\r\n </td>\r\n </tr>\r\n ) : (\r\n <tr\r\n className={`apt-row ${rowClassName ? rowClassName(row) : \"\"}`}\r\n onClick={() => onRowClick && onRowClick(row)}\r\n style={{ height: `${rowHeight}px` }}\r\n >\r\n {headers.map((header) => {\r\n const value = row[header.accessor];\r\n const cellContent = header.cellRenderer\r\n ? header.cellRenderer({ row, value })\r\n : value;\r\n return (\r\n <td\r\n key={`${row.id}-${header.accessor}`}\r\n className={\r\n header.accessor === \"actions\"\r\n ? \"apt-td-actions\"\r\n : \"apt-td\"\r\n }\r\n >\r\n {header.accessor === \"actions\" ? (\r\n <div onClick={(e) => e.stopPropagation()}>\r\n {cellContent}\r\n </div>\r\n ) : (\r\n cellContent\r\n )}\r\n </td>\r\n );\r\n })}\r\n </tr>\r\n )}\r\n {isExpanded &&\r\n typeof renderExpandedRow === \"function\" && (\r\n <tr className=\"apt-row-expanded\">\r\n <td\r\n colSpan={headers.length}\r\n className=\"apt-td\"\r\n style={{ padding: 0 }}\r\n >\r\n {renderExpandedRow(row)}\r\n </td>\r\n </tr>\r\n )}\r\n </Fragment>\r\n );\r\n })}\r\n </tbody>\r\n </table>\r\n </div>\r\n {(shouldPaginate && totalPages > 1) ||\r\n (Array.isArray(rowsPerPageOptions) && rowsPerPageOptions.length) ? (\r\n <div className=\"apt-footer\">\r\n <div className=\"apt-footer-left\">\r\n {Array.isArray(rowsPerPageOptions) &&\r\n rowsPerPageOptions.length > 0 &&\r\n onRowsPerPageChange && (\r\n <>\r\n <label className=\"apt-rows-label\">Rows</label>\r\n <select\r\n value={rowsPerPage}\r\n onChange={(e) =>\r\n onRowsPerPageChange(Number(e.target.value))\r\n }\r\n className=\"apt-rows-select\"\r\n >\r\n {rowsPerPageOptions.map((opt) => (\r\n <option key={opt} value={opt}>\r\n {opt}\r\n </option>\r\n ))}\r\n </select>\r\n </>\r\n )}\r\n </div>\r\n <div className=\"apt-footer-center\">\r\n {shouldPaginate && totalPages > 1\r\n ? `Page ${currentPage} of ${totalPages}`\r\n : \"\"}\r\n </div>\r\n <div className=\"apt-footer-right\">\r\n {shouldPaginate && totalPages > 1 ? (\r\n <>\r\n <button\r\n onClick={() => setCurrentPage((p) => Math.max(1, p - 1))}\r\n disabled={currentPage === 1}\r\n className=\"apt-btn\"\r\n >\r\n Previous\r\n </button>\r\n <button\r\n onClick={() =>\r\n setCurrentPage((p) => Math.min(totalPages, p + 1))\r\n }\r\n disabled={currentPage === totalPages}\r\n className=\"apt-btn\"\r\n >\r\n Next\r\n </button>\r\n </>\r\n ) : null}\r\n </div>\r\n </div>\r\n ) : null}\r\n </>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default Table;\r\n","import { useState, useRef, useEffect } from \"react\";\r\n\r\n// ============= TypeScript Interfaces =============\r\n\r\nexport interface ColumnDefinition {\r\n key: string;\r\n label: string;\r\n}\r\n\r\nexport interface ColumnVisibilityToggleProps {\r\n availableColumns: ColumnDefinition[];\r\n visibleColumns: string[];\r\n onColumnsChange: (columns: string[]) => void;\r\n storageKey?: string;\r\n}\r\n\r\n// ============= SVG Icon (replaced react-icons) =============\r\n\r\nconst ViewColumnIcon: React.FC<{ className?: string }> = ({ className }) => (\r\n <svg\r\n className={className}\r\n width=\"18\"\r\n height=\"18\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"currentColor\"\r\n >\r\n <path d=\"M10 18h5V5h-5v13zm-6 0h5V5H4v13zM16 5v13h5V5h-5z\" />\r\n </svg>\r\n);\r\n\r\n// ============= Main Component =============\r\n\r\nconst ColumnVisibilityToggle: React.FC<ColumnVisibilityToggleProps> = ({\r\n availableColumns,\r\n visibleColumns,\r\n onColumnsChange,\r\n storageKey,\r\n}) => {\r\n const [isOpen, setIsOpen] = useState(false);\r\n const menuRef = useRef<HTMLDivElement>(null);\r\n\r\n // Close menu when clicking outside\r\n useEffect(() => {\r\n const handleClickOutside = (event: MouseEvent) => {\r\n if (menuRef.current && !menuRef.current.contains(event.target as Node)) {\r\n setIsOpen(false);\r\n }\r\n };\r\n\r\n if (isOpen) {\r\n document.addEventListener(\"mousedown\", handleClickOutside);\r\n }\r\n\r\n return () => {\r\n document.removeEventListener(\"mousedown\", handleClickOutside);\r\n };\r\n }, [isOpen]);\r\n\r\n const saveToStorage = (columns: string[]) => {\r\n if (storageKey && typeof window !== \"undefined\") {\r\n try {\r\n window.localStorage.setItem(storageKey, JSON.stringify(columns));\r\n } catch (error) {\r\n console.warn(\r\n \"Failed to save column visibility to localStorage:\",\r\n error,\r\n );\r\n }\r\n }\r\n };\r\n\r\n const handleToggleColumn = (columnKey: string) => {\r\n const newVisibleColumns = visibleColumns.includes(columnKey)\r\n ? visibleColumns.filter((key) => key !== columnKey)\r\n : [...visibleColumns, columnKey];\r\n\r\n saveToStorage(newVisibleColumns);\r\n onColumnsChange(newVisibleColumns);\r\n };\r\n\r\n const handleSelectAll = () => {\r\n const allKeys = availableColumns.map((col) => col.key);\r\n saveToStorage(allKeys);\r\n onColumnsChange(allKeys);\r\n };\r\n\r\n return (\r\n <div className=\"apt-column-toggle-container\" ref={menuRef}>\r\n <button\r\n type=\"button\"\r\n onClick={() => setIsOpen(!isOpen)}\r\n className=\"apt-column-toggle-btn\"\r\n aria-label=\"Toggle column visibility\"\r\n aria-expanded={isOpen}\r\n >\r\n <ViewColumnIcon className=\"apt-column-toggle-icon\" />\r\n <span>Columns</span>\r\n <span className=\"apt-column-toggle-count\">\r\n ({visibleColumns.length})\r\n </span>\r\n </button>\r\n\r\n {isOpen && (\r\n <div className=\"apt-column-toggle-menu\">\r\n <div className=\"apt-column-toggle-menu-inner\">\r\n <div className=\"apt-column-toggle-header\">\r\n <h3 className=\"apt-column-toggle-title\">Toggle Columns</h3>\r\n <button\r\n type=\"button\"\r\n onClick={handleSelectAll}\r\n className=\"apt-column-toggle-select-all\"\r\n >\r\n Select All\r\n </button>\r\n </div>\r\n <div className=\"apt-column-toggle-list\">\r\n {availableColumns.map((column) => {\r\n const isVisible = visibleColumns.includes(column.key);\r\n return (\r\n <label key={column.key} className=\"apt-column-toggle-item\">\r\n <input\r\n type=\"checkbox\"\r\n checked={isVisible}\r\n onChange={() => handleToggleColumn(column.key)}\r\n className=\"apt-column-toggle-checkbox\"\r\n />\r\n <span className=\"apt-column-toggle-label\">\r\n {column.label}\r\n </span>\r\n </label>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default ColumnVisibilityToggle;\r\n"]}
1
+ {"version":3,"sources":["#style-inject:#style-inject","../src/styles.css","../src/Table.tsx","../src/ColumnVisibilityToggle.tsx"],"names":["Fragment","jsx","useState","useRef","useEffect","jsxs"],"mappings":"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","file":"index.mjs","sourcesContent":["\n export default function styleInject(css, { insertAt } = {}) {\n if (!css || typeof document === 'undefined') return\n \n const head = document.head || document.getElementsByTagName('head')[0]\n const style = document.createElement('style')\n style.type = 'text/css'\n \n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild)\n } else {\n head.appendChild(style)\n }\n } else {\n head.appendChild(style)\n }\n \n if (style.styleSheet) {\n style.styleSheet.cssText = css\n } else {\n style.appendChild(document.createTextNode(css))\n }\n }\n ","import styleInject from '#style-inject';styleInject(\":root {\\n --apt-color-primary: #371f1f;\\n --apt-color-border: #d1d5db;\\n --apt-color-bg: white;\\n --apt-color-bg-secondary: #e5e7eb;\\n --apt-color-bg-hover: #f3f4f6;\\n --apt-color-text: #1f2937;\\n --apt-color-text-muted: #6b7280;\\n --apt-color-text-muted-light: #9ca3af;\\n --apt-color-accent: #9333ea;\\n --apt-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1);\\n --apt-shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);\\n --apt-resizer-color: #bbb;\\n --apt-resizer-hover-color: #888;\\n --apt-th-sortable-hover: #d1d5db;\\n --apt-btn-bg: white;\\n --apt-btn-hover-bg: #d1d5db;\\n}\\n@media (prefers-color-scheme: dark) {\\n :root {\\n --apt-color-primary: #eee;\\n --apt-color-border: #333;\\n --apt-color-bg: #1e1e1e;\\n --apt-color-bg-secondary: #333;\\n --apt-color-bg-hover: rgba(126, 126, 126, 0.15);\\n --apt-color-text: #eee;\\n --apt-color-text-muted: #d1d5db;\\n --apt-color-text-muted-light: #444;\\n --apt-color-accent: #a855f7;\\n --apt-resizer-color: #666;\\n --apt-resizer-hover-color: #999;\\n --apt-th-sortable-hover: #444;\\n --apt-btn-bg: #444;\\n --apt-btn-hover-bg: #555;\\n }\\n}\\nhtml.dark,\\n.dark,\\n:root.dark {\\n --apt-color-primary: #eee;\\n --apt-color-border: #333;\\n --apt-color-bg: #1e1e1e;\\n --apt-color-bg-secondary: #333;\\n --apt-color-bg-hover: rgba(126, 126, 126, 0.15);\\n --apt-color-text: #eee;\\n --apt-color-text-muted: #d1d5db;\\n --apt-color-text-muted-light: #444;\\n --apt-color-accent: #a855f7;\\n --apt-resizer-color: #666;\\n --apt-resizer-hover-color: #999;\\n --apt-th-sortable-hover: #444;\\n --apt-btn-bg: #444;\\n --apt-btn-hover-bg: #555;\\n}\\nhtml.light,\\n.light,\\n:root.light {\\n --apt-color-primary: #371f1f;\\n --apt-color-border: #d1d5db;\\n --apt-color-bg: white;\\n --apt-color-bg-secondary: #e5e7eb;\\n --apt-color-bg-hover: #f3f4f6;\\n --apt-color-text: #1f2937;\\n --apt-color-text-muted: #6b7280;\\n --apt-color-text-muted-light: #9ca3af;\\n --apt-color-accent: #9333ea;\\n --apt-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1);\\n --apt-shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);\\n --apt-resizer-color: #bbb;\\n --apt-resizer-hover-color: #888;\\n --apt-th-sortable-hover: #d1d5db;\\n --apt-btn-bg: white;\\n --apt-btn-hover-bg: #d1d5db;\\n}\\n.apt-table-container {\\n color: var(--apt-color-text);\\n border-radius: 6px;\\n margin: 0;\\n padding: 0;\\n border: 1px solid var(--apt-color-border);\\n background-color: var(--apt-color-bg);\\n box-shadow: var(--apt-shadow);\\n display: flex;\\n flex-direction: column;\\n overflow: hidden;\\n}\\n.apt-empty-state {\\n flex-grow: 1;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n text-align: center;\\n padding: 48px 0;\\n color: var(--apt-color-text-muted-light);\\n}\\n.apt-scroll-area {\\n flex-grow: 1;\\n overflow: auto;\\n}\\n.apt-table {\\n width: 100%;\\n text-align: left;\\n font-size: 0.75rem;\\n table-layout: fixed;\\n border-collapse: collapse;\\n border-spacing: 0;\\n margin: 0;\\n padding: 0;\\n}\\n.apt-thead {\\n position: sticky;\\n top: 0;\\n background-color: var(--apt-color-bg-secondary);\\n z-index: 10;\\n}\\n.apt-th {\\n position: relative;\\n padding: 12px 8px;\\n border: none;\\n}\\n.apt-th-sortable {\\n cursor: pointer;\\n}\\n.apt-th-sortable:hover {\\n background-color: var(--apt-th-sortable-hover);\\n}\\n.apt-th-content {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n}\\n.apt-resizer {\\n position: absolute;\\n right: 0;\\n top: 4px;\\n height: 80%;\\n width: 3px;\\n border-radius: 2px;\\n cursor: col-resize;\\n user-select: none;\\n touch-action: none;\\n background-color: var(--apt-resizer-color);\\n}\\n.apt-resizer:hover,\\n.apt-th:hover .apt-resizer {\\n background-color: var(--apt-resizer-hover-color);\\n}\\n.apt-tbody {\\n border: none;\\n}\\n.apt-tbody tr {\\n border: none;\\n}\\n.apt-row {\\n transition: background-color 0.15s;\\n}\\n.apt-row:hover {\\n background-color: var(--apt-color-bg-hover);\\n}\\n.apt-row-expanded {\\n background-color: var(--apt-color-bg-hover);\\n}\\n.apt-td {\\n padding: 4px 8px;\\n white-space: nowrap;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n border: none;\\n}\\n.apt-td-actions {\\n padding: 4px 8px;\\n border: none;\\n}\\n.apt-footer {\\n display: grid;\\n grid-template-columns: 1fr 1fr 1fr;\\n align-items: center;\\n padding: 8px;\\n background-color: var(--apt-color-bg-secondary);\\n}\\n.apt-footer-left {\\n display: flex;\\n align-items: center;\\n gap: 8px;\\n}\\n.apt-footer-center {\\n justify-self: center;\\n font-size: 0.875rem;\\n color: var(--apt-color-text);\\n}\\n.apt-footer-right {\\n justify-self: end;\\n display: flex;\\n align-items: center;\\n gap: 8px;\\n}\\n.apt-rows-label {\\n font-size: 0.75rem;\\n text-transform: uppercase;\\n letter-spacing: 0.05em;\\n color: var(--apt-color-text-muted);\\n}\\n.apt-rows-select {\\n padding: 4px 8px;\\n font-size: 0.875rem;\\n border-radius: 4px;\\n background-color: var(--apt-btn-bg);\\n color: var(--apt-color-text);\\n border: 1px solid var(--apt-color-border);\\n}\\n.apt-btn {\\n padding: 4px 12px;\\n font-size: 0.875rem;\\n border-radius: 4px;\\n background-color: var(--apt-btn-bg);\\n color: var(--apt-color-text);\\n border: 0;\\n cursor: pointer;\\n transition: background-color 0.15s;\\n}\\n.apt-btn:hover:not(:disabled) {\\n background-color: var(--apt-btn-hover-bg);\\n}\\n.apt-btn:disabled {\\n opacity: 0.5;\\n cursor: not-allowed;\\n}\\n.apt-sort-icon {\\n display: inline-block;\\n margin-left: 4px;\\n width: 14px;\\n height: 14px;\\n opacity: 0.3;\\n}\\n.apt-sort-icon-active {\\n opacity: 1;\\n}\\n.apt-column-toggle-container {\\n position: relative;\\n}\\n.apt-column-toggle-btn {\\n display: flex;\\n align-items: center;\\n gap: 8px;\\n border-radius: 8px;\\n border: 1px solid var(--apt-color-border);\\n background-color: var(--apt-color-bg-hover);\\n padding: 8px 12px;\\n font-size: 0.875rem;\\n font-weight: 500;\\n color: var(--apt-color-primary);\\n box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1);\\n cursor: pointer;\\n transition: background-color 0.15s;\\n}\\n.apt-column-toggle-btn:hover {\\n background-color: var(--apt-color-bg-secondary);\\n}\\n.apt-column-toggle-btn:focus {\\n outline: none;\\n}\\n.apt-column-toggle-icon {\\n font-size: 1.125rem;\\n}\\n.apt-column-toggle-count {\\n font-size: 0.75rem;\\n opacity: 0.7;\\n}\\n.apt-column-toggle-menu {\\n position: absolute;\\n right: 0;\\n margin-top: 8px;\\n width: 288px;\\n border-radius: 8px;\\n border: 1px solid var(--apt-color-border);\\n background-color: var(--apt-color-bg);\\n box-shadow: var(--apt-shadow-lg);\\n z-index: 50;\\n max-height: 384px;\\n overflow-y: auto;\\n}\\n.apt-column-toggle-menu-inner {\\n padding: 12px;\\n}\\n.apt-column-toggle-header {\\n display: flex;\\n align-items: center;\\n justify-content: space-between;\\n margin-bottom: 12px;\\n border-bottom: 1px solid var(--apt-color-border);\\n padding-bottom: 8px;\\n}\\n.apt-column-toggle-title {\\n font-size: 0.875rem;\\n font-weight: 600;\\n color: var(--apt-color-primary);\\n}\\n.apt-column-toggle-select-all {\\n font-size: 0.75rem;\\n color: var(--apt-color-accent);\\n background: none;\\n border: none;\\n cursor: pointer;\\n text-decoration: none;\\n}\\n.apt-column-toggle-select-all:hover {\\n text-decoration: underline;\\n}\\n.apt-column-toggle-list {\\n display: flex;\\n flex-direction: column;\\n gap: 4px;\\n}\\n.apt-column-toggle-item {\\n display: flex;\\n align-items: center;\\n gap: 8px;\\n cursor: pointer;\\n padding: 6px 8px;\\n border-radius: 4px;\\n transition: background-color 0.15s;\\n}\\n.apt-column-toggle-item:hover {\\n background-color: var(--apt-color-bg-hover);\\n}\\n.apt-column-toggle-checkbox {\\n width: 16px;\\n height: 16px;\\n color: var(--apt-color-accent);\\n border-radius: 12px;\\n cursor: pointer;\\n accent-color: var(--apt-color-accent);\\n}\\n.apt-column-toggle-label {\\n font-size: 0.875rem;\\n color: var(--apt-color-primary);\\n flex: 1;\\n}\\n.apt-flex {\\n display: flex;\\n}\\n.apt-items-center {\\n align-items: center;\\n}\\n.apt-gap-2 {\\n gap: 8px;\\n}\\n\")","import {\r\n Fragment,\r\n useEffect,\r\n useMemo,\r\n useRef,\r\n useState,\r\n CSSProperties,\r\n} from \"react\";\r\n\r\n// ============= TypeScript Interfaces =============\r\n\r\nexport interface TableHeader {\r\n accessor: string;\r\n label: string;\r\n isSortable?: boolean;\r\n width?: string | number;\r\n minWidth?: string | number;\r\n cellRenderer?: (args: { row: any; value: any }) => React.ReactNode;\r\n}\r\n\r\nexport interface SortConfig {\r\n key: string;\r\n direction: \"asc\" | \"desc\";\r\n}\r\n\r\nexport interface TableProps {\r\n manualHeaders: TableHeader[];\r\n manualRowData: Record<string, any>[];\r\n initialSort?: SortConfig | null;\r\n height?: string;\r\n rowHeight?: number;\r\n rowsPerPage?: number;\r\n shouldPaginate?: boolean;\r\n rowClassName?: (row: any) => string;\r\n onRowClick?: (row: any) => void;\r\n minColWidth?: number;\r\n mobileAutoSizeOnHeaderClick?: boolean;\r\n mobileBreakpoint?: number;\r\n columnWidthsStorageKey?: string;\r\n rowsPerPageOptions?: number[];\r\n onRowsPerPageChange?: (value: number) => void;\r\n expandedRowId?: string | null;\r\n renderExpandedRow?: (row: any) => React.ReactNode;\r\n renderFullRow?: (row: any) => React.ReactNode;\r\n}\r\n\r\n// ============= SVG Icons (replaced react-icons) =============\r\n\r\nconst SortIcon: React.FC<{ className?: string }> = ({ className }) => (\r\n <svg\r\n className={className}\r\n width=\"12\"\r\n height=\"12\"\r\n viewBox=\"0 0 12 12\"\r\n fill=\"currentColor\"\r\n >\r\n <path d=\"M6 2L3 5h6L6 2zM6 10l3-3H3l3 3z\" />\r\n </svg>\r\n);\r\n\r\nconst SortUpIcon: React.FC<{ className?: string }> = ({ className }) => (\r\n <svg\r\n className={className}\r\n width=\"12\"\r\n height=\"12\"\r\n viewBox=\"0 0 12 12\"\r\n fill=\"currentColor\"\r\n >\r\n <path d=\"M6 2L2 7h8L6 2z\" />\r\n </svg>\r\n);\r\n\r\nconst SortDownIcon: React.FC<{ className?: string }> = ({ className }) => (\r\n <svg\r\n className={className}\r\n width=\"12\"\r\n height=\"12\"\r\n viewBox=\"0 0 12 12\"\r\n fill=\"currentColor\"\r\n >\r\n <path d=\"M6 10l4-5H2l4 5z\" />\r\n </svg>\r\n);\r\n\r\n// ============= Main Component =============\r\n\r\nconst Table: React.FC<TableProps> = ({\r\n manualHeaders,\r\n manualRowData,\r\n initialSort,\r\n height = \"100%\",\r\n rowHeight = 40,\r\n rowsPerPage = 60,\r\n shouldPaginate = true,\r\n rowClassName,\r\n onRowClick,\r\n minColWidth = 50,\r\n mobileAutoSizeOnHeaderClick = false,\r\n mobileBreakpoint = 768,\r\n columnWidthsStorageKey,\r\n rowsPerPageOptions = [20, 50, 100],\r\n onRowsPerPageChange,\r\n expandedRowId,\r\n renderExpandedRow,\r\n renderFullRow,\r\n}) => {\r\n const [sortConfig, setSortConfig] = useState<SortConfig | null>(\r\n initialSort || null,\r\n );\r\n const [currentPage, setCurrentPage] = useState(1);\r\n const [columnWidths, setColumnWidths] = useState<\r\n Record<string, string | number>\r\n >({});\r\n const [expandedColumns, setExpandedColumns] = useState<Set<string>>(\r\n () => new Set(),\r\n );\r\n const initialColumnWidthsRef = useRef<\r\n Record<string, string | number | undefined>\r\n >({});\r\n const tableRef = useRef<HTMLTableElement>(null);\r\n const textMeasureContextRef = useRef<CanvasRenderingContext2D | null>(null);\r\n const [isMobile, setIsMobile] = useState(() => {\r\n if (typeof window === \"undefined\") return false;\r\n return window.innerWidth < mobileBreakpoint;\r\n });\r\n\r\n const headers = useMemo(() => manualHeaders || [], [manualHeaders]);\r\n\r\n const loadStoredColumnWidths = (\r\n fallback: Record<string, string | number | undefined>,\r\n ) => {\r\n if (!columnWidthsStorageKey || typeof window === \"undefined\") {\r\n return fallback;\r\n }\r\n try {\r\n const raw = window.localStorage.getItem(columnWidthsStorageKey);\r\n if (!raw) return fallback;\r\n const parsed = JSON.parse(raw);\r\n if (!parsed || typeof parsed !== \"object\") return fallback;\r\n const next = { ...fallback };\r\n Object.keys(next).forEach((key) => {\r\n const val = parsed[key];\r\n if (typeof val === \"number\" || typeof val === \"string\") {\r\n next[key] = val;\r\n }\r\n });\r\n return next;\r\n } catch {\r\n return fallback;\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n const initialWidths: Record<string, string | number | undefined> = {};\r\n headers.forEach((header) => {\r\n initialWidths[header.accessor] = header.width;\r\n });\r\n initialColumnWidthsRef.current = initialWidths;\r\n setColumnWidths(\r\n loadStoredColumnWidths(initialWidths) as Record<string, string | number>,\r\n );\r\n setExpandedColumns(new Set());\r\n }, [headers, columnWidthsStorageKey]);\r\n\r\n useEffect(() => {\r\n if (!columnWidthsStorageKey || typeof window === \"undefined\") return;\r\n if (Object.keys(columnWidths).length === 0) return;\r\n window.localStorage.setItem(\r\n columnWidthsStorageKey,\r\n JSON.stringify(columnWidths),\r\n );\r\n }, [columnWidths, columnWidthsStorageKey]);\r\n\r\n useEffect(() => {\r\n if (typeof window === \"undefined\") return undefined;\r\n const handleResize = () =>\r\n setIsMobile(window.innerWidth < mobileBreakpoint);\r\n window.addEventListener(\"resize\", handleResize);\r\n return () => window.removeEventListener(\"resize\", handleResize);\r\n }, [mobileBreakpoint]);\r\n\r\n useEffect(() => {\r\n setCurrentPage(1);\r\n }, [rowsPerPage]);\r\n\r\n const measureTextWidth = (text: any): number => {\r\n if (typeof document === \"undefined\") return String(text ?? \"\").length * 8;\r\n const ctx =\r\n textMeasureContextRef.current ||\r\n (() => {\r\n const canvas = document.createElement(\"canvas\");\r\n const context = canvas.getContext(\"2d\");\r\n if (tableRef.current && context) {\r\n const font = window.getComputedStyle(tableRef.current).font;\r\n context.font = font || \"12px sans-serif\";\r\n }\r\n textMeasureContextRef.current = context;\r\n return context;\r\n })();\r\n return ctx ? ctx.measureText(String(text ?? \"\")).width : 0;\r\n };\r\n\r\n const parseWidthValue = (\r\n value: string | number | undefined,\r\n fallback: number,\r\n ): number => {\r\n if (typeof value === \"number\" && !Number.isNaN(value)) return value;\r\n if (typeof value === \"string\") {\r\n const parsed = parseFloat(value);\r\n if (!Number.isNaN(parsed)) return parsed;\r\n }\r\n return fallback;\r\n };\r\n\r\n const rows = useMemo(() => {\r\n if (!Array.isArray(manualRowData)) return [];\r\n\r\n const src = manualRowData\r\n .filter(Boolean)\r\n .filter((r) => typeof r === \"object\");\r\n\r\n const makeSafeId = (full: any, idx: number): string => {\r\n const rawId = full?.id;\r\n const v1 =\r\n rawId !== undefined && rawId !== null && String(rawId).trim() !== \"\"\r\n ? String(rawId).trim()\r\n : \"\";\r\n const v2 = [\r\n full?.order_id,\r\n full?.bom_id,\r\n full?.bom_workstation_status_id,\r\n full?.bom_data_id,\r\n full?.unique_task_info_id,\r\n full?.order_data_id,\r\n ]\r\n .filter((v) => v !== undefined && v !== null && String(v) !== \"\")\r\n .join(\"-\");\r\n return v1 || `${v2}-row${idx}`;\r\n };\r\n\r\n return src.map((full: any, idx: number) => {\r\n const id = makeSafeId(full, idx);\r\n const base: any = { id, \"#\": idx + 1, _meta: full };\r\n headers.forEach((h) => {\r\n if (![\"#\", \"details_meta\"].includes(h.accessor)) {\r\n base[h.accessor] = full?.[h.accessor] ?? \"\";\r\n }\r\n });\r\n return base;\r\n });\r\n }, [manualRowData, headers]);\r\n\r\n const sortedRows = useMemo(() => {\r\n if (!sortConfig || !sortConfig.key) {\r\n return rows;\r\n }\r\n const sortableRows = [...rows];\r\n sortableRows.sort((a, b) => {\r\n const aVal = a[sortConfig.key];\r\n const bVal = b[sortConfig.key];\r\n\r\n if (aVal < bVal) {\r\n return sortConfig.direction === \"asc\" ? -1 : 1;\r\n }\r\n if (aVal > bVal) {\r\n return sortConfig.direction === \"asc\" ? 1 : -1;\r\n }\r\n return 0;\r\n });\r\n return sortableRows;\r\n }, [rows, sortConfig]);\r\n\r\n const effectiveShouldPaginate =\r\n shouldPaginate && sortedRows.length > rowsPerPage;\r\n\r\n const totalPages = effectiveShouldPaginate\r\n ? Math.ceil(sortedRows.length / rowsPerPage)\r\n : 1;\r\n\r\n if (currentPage > totalPages && totalPages > 0) {\r\n setCurrentPage(1);\r\n }\r\n\r\n const paginatedRows = useMemo(() => {\r\n if (!effectiveShouldPaginate) return sortedRows;\r\n const startIndex = (currentPage - 1) * rowsPerPage;\r\n return sortedRows.slice(startIndex, startIndex + rowsPerPage);\r\n }, [sortedRows, currentPage, rowsPerPage, effectiveShouldPaginate]);\r\n\r\n const handleSort = (key: string, isSortable?: boolean) => {\r\n if (!isSortable) return;\r\n let direction: \"asc\" | \"desc\" = \"asc\";\r\n if (\r\n sortConfig &&\r\n sortConfig.key === key &&\r\n sortConfig.direction === \"asc\"\r\n ) {\r\n direction = \"desc\";\r\n }\r\n setSortConfig({ key, direction });\r\n setCurrentPage(1);\r\n };\r\n\r\n const autoSizeColumn = (colIndex: number, header: TableHeader) => {\r\n if (!tableRef.current) return;\r\n const tableEl = tableRef.current;\r\n let maxWidth = measureTextWidth(header?.label || \"\");\r\n\r\n const collectCellWidth = (cell: HTMLTableCellElement | null) => {\r\n if (!cell) return;\r\n const scrollWidth = cell.scrollWidth || cell.offsetWidth || 0;\r\n const style = window.getComputedStyle(cell);\r\n const borderWidth =\r\n parseFloat(style.borderLeftWidth || \"0\") +\r\n parseFloat(style.borderRightWidth || \"0\");\r\n maxWidth = Math.max(maxWidth, Math.ceil(scrollWidth + borderWidth));\r\n };\r\n\r\n const headerCell =\r\n tableEl.tHead?.rows?.[0]?.cells?.[colIndex] ||\r\n tableEl.querySelector(`thead th:nth-child(${colIndex + 1})`);\r\n collectCellWidth(headerCell as HTMLTableCellElement);\r\n\r\n const bodyRows = tableEl.tBodies?.[0]?.rows || [];\r\n for (const row of bodyRows) {\r\n collectCellWidth(row.cells?.[colIndex] as HTMLTableCellElement);\r\n }\r\n\r\n rows.forEach((r) => {\r\n maxWidth = Math.max(\r\n maxWidth,\r\n Math.ceil(measureTextWidth(r[header.accessor])),\r\n );\r\n });\r\n\r\n const minWidthPx = parseWidthValue(\r\n header?.minWidth,\r\n parseWidthValue(minColWidth, 50),\r\n );\r\n const finalWidth = Math.max(maxWidth + 12, minWidthPx);\r\n setColumnWidths((prev) => ({\r\n ...prev,\r\n [header.accessor]: `${finalWidth}px`,\r\n }));\r\n };\r\n\r\n const resetColumnWidth = (accessor: string) => {\r\n const regularWidth = initialColumnWidthsRef.current[accessor];\r\n setColumnWidths((prev) => {\r\n if (regularWidth === undefined) {\r\n const next = { ...prev };\r\n delete next[accessor];\r\n return next;\r\n }\r\n return { ...prev, [accessor]: regularWidth };\r\n });\r\n };\r\n\r\n const handleHeaderClick = (header: TableHeader, colIndex: number) => {\r\n if (mobileAutoSizeOnHeaderClick && isMobile) {\r\n const isExpanded = expandedColumns.has(header.accessor);\r\n if (isExpanded) {\r\n resetColumnWidth(header.accessor);\r\n setExpandedColumns((prev) => {\r\n const next = new Set(prev);\r\n next.delete(header.accessor);\r\n return next;\r\n });\r\n } else {\r\n autoSizeColumn(colIndex, header);\r\n setExpandedColumns((prev) => {\r\n const next = new Set(prev);\r\n next.add(header.accessor);\r\n return next;\r\n });\r\n }\r\n return;\r\n }\r\n handleSort(header.accessor, header.isSortable);\r\n };\r\n\r\n const getSortIcon = (key: string): React.ReactNode => {\r\n if (mobileAutoSizeOnHeaderClick && isMobile) return null;\r\n if (!sortConfig || sortConfig.key !== key) {\r\n return <SortIcon className=\"apt-sort-icon\" />;\r\n }\r\n return sortConfig.direction === \"asc\" ? (\r\n <SortUpIcon className=\"apt-sort-icon apt-sort-icon-active\" />\r\n ) : (\r\n <SortDownIcon className=\"apt-sort-icon apt-sort-icon-active\" />\r\n );\r\n };\r\n\r\n const handleMouseDown = (e: React.MouseEvent, accessor: string) => {\r\n e.preventDefault();\r\n const startX = e.clientX;\r\n const th = (e.target as HTMLElement).closest(\"th\");\r\n if (!th) return;\r\n\r\n const header = headers.find((h) => h.accessor === accessor);\r\n const minResizeWidth = parseWidthValue(header?.minWidth, minColWidth);\r\n\r\n const startWidth = th.offsetWidth;\r\n\r\n document.body.style.cursor = \"col-resize\";\r\n document.body.style.userSelect = \"none\";\r\n\r\n const handleMouseMove = (moveEvent: MouseEvent) => {\r\n const deltaX = moveEvent.clientX - startX;\r\n const newWidth = startWidth + deltaX;\r\n const finalWidth = Math.max(newWidth, minResizeWidth);\r\n\r\n setColumnWidths((prev) => ({\r\n ...prev,\r\n [accessor]: `${finalWidth}px`,\r\n }));\r\n };\r\n\r\n const handleMouseUp = () => {\r\n document.body.style.cursor = \"\";\r\n document.body.style.userSelect = \"\";\r\n document.removeEventListener(\"mousemove\", handleMouseMove);\r\n document.removeEventListener(\"mouseup\", handleMouseUp);\r\n };\r\n\r\n document.addEventListener(\"mousemove\", handleMouseMove);\r\n document.addEventListener(\"mouseup\", handleMouseUp);\r\n };\r\n\r\n const containerStyle: CSSProperties = {\r\n height:\r\n sortedRows.length === 0\r\n ? height\r\n : !effectiveShouldPaginate\r\n ? \"auto\"\r\n : height,\r\n maxHeight: !effectiveShouldPaginate ? height : undefined,\r\n };\r\n\r\n return (\r\n <div className=\"apt-table-container\" style={containerStyle}>\r\n {sortedRows.length === 0 ? (\r\n <div className=\"apt-empty-state\">No rows to display.</div>\r\n ) : (\r\n <>\r\n <div className=\"apt-scroll-area\">\r\n <table className=\"apt-table\" ref={tableRef}>\r\n <colgroup>\r\n {headers.map((header) => (\r\n <col\r\n key={`col-${header.accessor}`}\r\n style={{\r\n width: columnWidths[header.accessor],\r\n minWidth: `${parseWidthValue(\r\n header.minWidth,\r\n minColWidth,\r\n )}px`,\r\n }}\r\n />\r\n ))}\r\n </colgroup>\r\n <thead className=\"apt-thead\">\r\n <tr>\r\n {headers.map((header, idx) => {\r\n const isHeaderClickable =\r\n (mobileAutoSizeOnHeaderClick && isMobile) ||\r\n header.isSortable;\r\n return (\r\n <th\r\n key={header.accessor}\r\n onClick={() => handleHeaderClick(header, idx)}\r\n className={`apt-th ${\r\n isHeaderClickable ? \"apt-th-sortable\" : \"\"\r\n }`}\r\n >\r\n <div className=\"apt-th-content\">\r\n {header.label}\r\n {header.isSortable &&\r\n !(mobileAutoSizeOnHeaderClick && isMobile) &&\r\n getSortIcon(header.accessor)}\r\n </div>\r\n <div\r\n className=\"apt-resizer\"\r\n onMouseDown={(e) => {\r\n e.stopPropagation();\r\n handleMouseDown(e, header.accessor);\r\n }}\r\n />\r\n </th>\r\n );\r\n })}\r\n </tr>\r\n </thead>\r\n <tbody className=\"apt-tbody\">\r\n {paginatedRows.map((row) => {\r\n const isExpanded = expandedRowId === row.id;\r\n const isFullRow =\r\n typeof renderFullRow === \"function\" && row?._meta?.fullRow;\r\n return (\r\n <Fragment key={row.id}>\r\n {isFullRow ? (\r\n <tr\r\n className={`apt-row ${rowClassName ? rowClassName(row) : \"\"}`}\r\n onClick={() => onRowClick && onRowClick(row)}\r\n >\r\n <td\r\n colSpan={headers.length}\r\n className=\"apt-td\"\r\n style={{ padding: 0 }}\r\n >\r\n {renderFullRow(row)}\r\n </td>\r\n </tr>\r\n ) : (\r\n <tr\r\n className={`apt-row ${rowClassName ? rowClassName(row) : \"\"}`}\r\n onClick={() => onRowClick && onRowClick(row)}\r\n style={{ height: `${rowHeight}px` }}\r\n >\r\n {headers.map((header) => {\r\n const value = row[header.accessor];\r\n const cellContent = header.cellRenderer\r\n ? header.cellRenderer({ row, value })\r\n : value;\r\n return (\r\n <td\r\n key={`${row.id}-${header.accessor}`}\r\n className={\r\n header.accessor === \"actions\"\r\n ? \"apt-td-actions\"\r\n : \"apt-td\"\r\n }\r\n >\r\n {header.accessor === \"actions\" ? (\r\n <div onClick={(e) => e.stopPropagation()}>\r\n {cellContent}\r\n </div>\r\n ) : (\r\n cellContent\r\n )}\r\n </td>\r\n );\r\n })}\r\n </tr>\r\n )}\r\n {isExpanded &&\r\n typeof renderExpandedRow === \"function\" && (\r\n <tr className=\"apt-row-expanded\">\r\n <td\r\n colSpan={headers.length}\r\n className=\"apt-td\"\r\n style={{ padding: 0 }}\r\n >\r\n {renderExpandedRow(row)}\r\n </td>\r\n </tr>\r\n )}\r\n </Fragment>\r\n );\r\n })}\r\n </tbody>\r\n </table>\r\n </div>\r\n {(shouldPaginate && totalPages > 1) ||\r\n (Array.isArray(rowsPerPageOptions) && rowsPerPageOptions.length) ? (\r\n <div className=\"apt-footer\">\r\n <div className=\"apt-footer-left\">\r\n {Array.isArray(rowsPerPageOptions) &&\r\n rowsPerPageOptions.length > 0 &&\r\n onRowsPerPageChange && (\r\n <>\r\n <label className=\"apt-rows-label\">Rows</label>\r\n <select\r\n value={rowsPerPage}\r\n onChange={(e) =>\r\n onRowsPerPageChange(Number(e.target.value))\r\n }\r\n className=\"apt-rows-select\"\r\n >\r\n {rowsPerPageOptions.map((opt) => (\r\n <option key={opt} value={opt}>\r\n {opt}\r\n </option>\r\n ))}\r\n </select>\r\n </>\r\n )}\r\n </div>\r\n <div className=\"apt-footer-center\">\r\n {shouldPaginate && totalPages > 1\r\n ? `Page ${currentPage} of ${totalPages}`\r\n : \"\"}\r\n </div>\r\n <div className=\"apt-footer-right\">\r\n {shouldPaginate && totalPages > 1 ? (\r\n <>\r\n <button\r\n onClick={() => setCurrentPage((p) => Math.max(1, p - 1))}\r\n disabled={currentPage === 1}\r\n className=\"apt-btn\"\r\n >\r\n Previous\r\n </button>\r\n <button\r\n onClick={() =>\r\n setCurrentPage((p) => Math.min(totalPages, p + 1))\r\n }\r\n disabled={currentPage === totalPages}\r\n className=\"apt-btn\"\r\n >\r\n Next\r\n </button>\r\n </>\r\n ) : null}\r\n </div>\r\n </div>\r\n ) : null}\r\n </>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default Table;\r\n","import { useState, useRef, useEffect } from \"react\";\r\n\r\n// ============= TypeScript Interfaces =============\r\n\r\nexport interface ColumnDefinition {\r\n key: string;\r\n label: string;\r\n}\r\n\r\nexport interface ColumnVisibilityToggleProps {\r\n availableColumns: ColumnDefinition[];\r\n visibleColumns: string[];\r\n onColumnsChange: (columns: string[]) => void;\r\n storageKey?: string;\r\n}\r\n\r\n// ============= SVG Icon (replaced react-icons) =============\r\n\r\nconst ViewColumnIcon: React.FC<{ className?: string }> = ({ className }) => (\r\n <svg\r\n className={className}\r\n width=\"18\"\r\n height=\"18\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"currentColor\"\r\n >\r\n <path d=\"M10 18h5V5h-5v13zm-6 0h5V5H4v13zM16 5v13h5V5h-5z\" />\r\n </svg>\r\n);\r\n\r\n// ============= Main Component =============\r\n\r\nconst ColumnVisibilityToggle: React.FC<ColumnVisibilityToggleProps> = ({\r\n availableColumns,\r\n visibleColumns,\r\n onColumnsChange,\r\n storageKey,\r\n}) => {\r\n const [isOpen, setIsOpen] = useState(false);\r\n const menuRef = useRef<HTMLDivElement>(null);\r\n\r\n // Close menu when clicking outside\r\n useEffect(() => {\r\n const handleClickOutside = (event: MouseEvent) => {\r\n if (menuRef.current && !menuRef.current.contains(event.target as Node)) {\r\n setIsOpen(false);\r\n }\r\n };\r\n\r\n if (isOpen) {\r\n document.addEventListener(\"mousedown\", handleClickOutside);\r\n }\r\n\r\n return () => {\r\n document.removeEventListener(\"mousedown\", handleClickOutside);\r\n };\r\n }, [isOpen]);\r\n\r\n const saveToStorage = (columns: string[]) => {\r\n if (storageKey && typeof window !== \"undefined\") {\r\n try {\r\n window.localStorage.setItem(storageKey, JSON.stringify(columns));\r\n } catch (error) {\r\n console.warn(\r\n \"Failed to save column visibility to localStorage:\",\r\n error,\r\n );\r\n }\r\n }\r\n };\r\n\r\n const handleToggleColumn = (columnKey: string) => {\r\n const newVisibleColumns = visibleColumns.includes(columnKey)\r\n ? visibleColumns.filter((key) => key !== columnKey)\r\n : [...visibleColumns, columnKey];\r\n\r\n saveToStorage(newVisibleColumns);\r\n onColumnsChange(newVisibleColumns);\r\n };\r\n\r\n const handleSelectAll = () => {\r\n const allKeys = availableColumns.map((col) => col.key);\r\n saveToStorage(allKeys);\r\n onColumnsChange(allKeys);\r\n };\r\n\r\n return (\r\n <div className=\"apt-column-toggle-container\" ref={menuRef}>\r\n <button\r\n type=\"button\"\r\n onClick={() => setIsOpen(!isOpen)}\r\n className=\"apt-column-toggle-btn\"\r\n aria-label=\"Toggle column visibility\"\r\n aria-expanded={isOpen}\r\n >\r\n <ViewColumnIcon className=\"apt-column-toggle-icon\" />\r\n <span>Columns</span>\r\n <span className=\"apt-column-toggle-count\">\r\n ({visibleColumns.length})\r\n </span>\r\n </button>\r\n\r\n {isOpen && (\r\n <div className=\"apt-column-toggle-menu\">\r\n <div className=\"apt-column-toggle-menu-inner\">\r\n <div className=\"apt-column-toggle-header\">\r\n <h3 className=\"apt-column-toggle-title\">Toggle Columns</h3>\r\n <button\r\n type=\"button\"\r\n onClick={handleSelectAll}\r\n className=\"apt-column-toggle-select-all\"\r\n >\r\n Select All\r\n </button>\r\n </div>\r\n <div className=\"apt-column-toggle-list\">\r\n {availableColumns.map((column) => {\r\n const isVisible = visibleColumns.includes(column.key);\r\n return (\r\n <label key={column.key} className=\"apt-column-toggle-item\">\r\n <input\r\n type=\"checkbox\"\r\n checked={isVisible}\r\n onChange={() => handleToggleColumn(column.key)}\r\n className=\"apt-column-toggle-checkbox\"\r\n />\r\n <span className=\"apt-column-toggle-label\">\r\n {column.label}\r\n </span>\r\n </label>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default ColumnVisibilityToggle;\r\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "all-purpose-table",
3
- "version": "1.0.3",
3
+ "version": "1.0.4",
4
4
  "description": "A production-grade, plug-and-play React Table component with TypeScript support",
5
5
  "main": "dist/index.cjs",
6
6
  "module": "dist/index.js",