{"version":3,"file":"table-CFLDF1bd.mjs","names":[],"sources":["../src/components/table.tsx"],"sourcesContent":["export type TableItem = Record<string, unknown>;\n\nexport type TableProps<T extends TableItem> = {\n  data: T[];\n  columns: (TableColumn<NoInfer<T>> | undefined)[];\n  caption?: JSX.Element;\n  toolbar?: JSX.Element;\n};\n\nexport type TableColumn<T extends TableItem> = {\n  id: keyof T | (string & {});\n  header?: JSX.Element;\n  cell?: (item: T) => JSX.Element | null;\n  style?: JSX.HtmlTag[\"style\"];\n};\n\nexport function Table<T extends TableItem>({\n  caption: safeCaption,\n  columns,\n  data,\n  toolbar: safeToolbar,\n}: TableProps<T>) {\n  const cols = columns.filter(Boolean) as TableColumn<T>[];\n\n  return (\n    <div style={{ display: \"flex\", flexDirection: \"column\", gap: \"0.5rem\" }}>\n      <div\n        style={{\n          display: \"flex\",\n          justifyContent: \"space-between\",\n          alignItems: \"end\",\n          margin: 0,\n          gap: \"1rem\",\n        }}\n      >\n        {\n          <div\n            style={{\n              fontSize: \"1.25em\",\n              fontWeight: \"bold\",\n              paddingLeft: \"1rem\",\n            }}\n          >\n            {safeCaption}\n          </div>\n        }\n        {<div>{safeToolbar}</div>}\n      </div>\n      <table style={{ flex: 1 }}>\n        <thead>\n          <tr>\n            {cols.map((col) => (\n              <th safe>{String(col.header || col.id)}</th>\n            ))}\n          </tr>\n        </thead>\n        <tbody>\n          {data.map((item) => {\n            return (\n              <tr>\n                {cols.map((col) => {\n                  const value = col.cell?.(item) || item[col.id];\n                  if (!value) return <td />;\n\n                  if (typeof value === \"string\") {\n                    const safeValue = value;\n                    return <td style={col.style}>{safeValue}</td>;\n                  }\n\n                  if (typeof value === \"object\") {\n                    return (\n                      <td safe style={col.style}>\n                        {JSON.stringify(value)}\n                      </td>\n                    );\n                  }\n\n                  return (\n                    <td safe style={col.style}>\n                      {String(value)}\n                    </td>\n                  );\n                })}\n              </tr>\n            );\n          })}\n        </tbody>\n      </table>\n    </div>\n  );\n}\n"],"mappings":";;;;AAgBA,SAAgB,MAA2B,EACzC,SAAS,aACT,SACA,MACA,SAAS,aACK,EAAE;CAChB,MAAM,OAAO,QAAQ,OAAO,QAAQ;AAEpC,qDACG;EAAI,OAAO;GAAE,SAAS;GAAQ,eAAe;GAAU,KAAK;EAAU;0DACpE;GACC,OAAO;IACL,SAAS;IACT,gBAAgB;IAChB,YAAY;IACZ,QAAQ;IACR,KAAK;GACN;0DAGE;IACC,OAAO;KACL,UAAU;KACV,YAAY;KACZ,aAAa;IACd;cAEA;KACG,8CAEN,mBAAK,cAAkB;IACrB,+CACL;GAAM,OAAO,EAAE,MAAM,EAAG;0DACtB,iEACE,kBACE,KAAK,IAAI,CAAC,oDACR;IAAG;cAAM,OAAO,IAAI,UAAU,IAAI,GAAG;KAAM,CAC5C,GACC,GACC,8CACP,qBACE,KAAK,IAAI,CAAC,SAAS;AAClB,uDACG,kBACE,KAAK,IAAI,CAAC,QAAQ;KACjB,MAAM,QAAQ,IAAI,OAAO,KAAK,IAAI,KAAK,IAAI;AAC3C,SAAI,CAAC,MAAO,oDAAQ,SAAK;AAEzB,SAAI,OAAO,UAAU,UAAU;MAC7B,MAAM,YAAY;AAClB,yDAAQ;OAAG,OAAO,IAAI;iBAAQ;QAAe;KAC9C;AAED,SAAI,OAAO,UAAU,SACnB,oDACG;MAAG;MAAK,OAAO,IAAI;gBACjB,KAAK,UAAU,MAAM;OACnB;AAIT,wDACG;MAAG;MAAK,OAAO,IAAI;gBACjB,OAAO,MAAM;OACX;IAER,EAAC,GACC;GAER,EAAC,GACI;IACF;GACJ;AAET"}