@sanity/table

3.1.153.1.16
~

Modified (2 files)

Index: package/package.json
===================================================================
--- package/package.json
+++ package/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@sanity/table",
-  "version": "3.1.15",
+  "version": "3.1.16",
   "description": "Table schema type and input component for Sanity Studio",
   "keywords": [
     "sanity",
     "sanity-plugin"
@@ -36,9 +36,9 @@
     "@sanity/tsdown-config": "^0.26.0",
     "@types/node": "^24.13.3",
     "@types/react": "^19.2.18",
     "@types/react-dom": "^19.2.4",
-    "babel-plugin-react-compiler": "^1.0.0",
+    "oxc-transform-react": "^0.145.0",
     "react": "^19.2.8",
     "react-dom": "^19.2.8",
     "sanity": "^6.10.1",
     "styled-components": "^6.5.3",
Index: package/dist/index.js.map
===================================================================
--- package/dist/index.js.map
+++ package/dist/index.js.map
@@ -1,1 +1,1 @@
-{"version":3,"file":"index.js","names":["RemoveIcon","Box","Button","TextInput","ChangeEvent","TableRow","TableInputProps","rows","updateCell","e","HTMLInputElement","rowIndex","cellIndex","removeRow","index","removeColumn","TableInput","props","$","_c","t0","Symbol","for","width","t1","t2","row","_key","cells","map","cell","textAlign","t3","t4","_","i","t5","AddIcon","ControlsIcon","WarningOutlineIcon","Box","Button","Card","Dialog","Inline","Placement","TextInput","Menu","MenuButton","MenuDivider","MenuItem","ChangeEventHandler","useState","TableMenuProps","id","addColumns","count","addColumnAt","index","addRows","addRowAt","remove","placement","TableMenu","props","$","_c","handleRemove","dialog","setDialog","setCount","t0","Symbol","for","e","currentTarget","value","updateCount","t1","type","callback","c","t2","t3","c_0","t4","index_0","addColumnsAt","parsedCount","t5","Number","parseInt","isInteger","isValidCount","t6","onConfirm","t7","textAlign","undefined","t8","t9","t10","t11","t12","t13","t14","t15","t16","t17","t18","t19","AddIcon","Box","Button","Card","Dialog","Flex","Inline","Text","uuid","ChangeEvent","useState","ObjectInputProps","set","unset","TableInput","TableMenu","deepClone","data","T","globalThis","structuredClone","JSON","parse","stringify","TableValue","_type","rows","TableRow","TableProps","_key","cells","TableComponent","props","$","_c","id","rowType","t0","value","onChange","undefined","dialog","setDialog","t1","v","updateValue","t2","resetValue","t3","newValue","createTable","confirmRemoveTable","type","callback","removeTable","t4","t5","count","newRows","columnCount","length","i","push","Array","fill","addRows","t6","index","newRows_0","columnCount_0","splice","addRowAt","index_0","newRows_1","removeRow","t7","index_1","confirmRemoveRow","addColumnAt","addColumns","confirmRemoveColumn","index_2","removeColumn","t8","count_0","newRows_2","forEach","row","j","t9","index_3","newRows_3","row_0","index_4","newRows_4","row_1","e","rowIndex","cellIndex","newRows_5","row_2","currentTarget","updateCell","textAlign","t10","t11","t12","t13","t14","createTableComponent","Table","TableIcon","$","_c","t0","Symbol","for","Box","Card","Grid","Inline","Label","Text","PreviewProps","TableRow","TableIcon","TablePreviewProps","rows","Table","t0","$","_c","numCols","cells","length","t1","map","_temp","t2","TablePreview","props","schemaType","title","undefined","previewTitle","Symbol","for","t3","t4","t5","row","cell","i","_key","outline","definePlugin","defineType","createTableComponent","TableComponent","TablePreview","TableProps","TableRow","TableValue","TableConfig","rowType","table","config","tableRowSchema","title","name","type","fields","of","tableSchema","components","input","preview","select","rows","prepare","schema","types"],"sources":["../src/components/TableInput.tsx","../src/components/TableMenu.tsx","../src/components/TableComponent.tsx","../src/components/TableIcon.tsx","../src/components/TablePreview.tsx","../src/index.ts"],"sourcesContent":["import {RemoveIcon} from '@sanity/icons/Remove'\nimport {Box, Button, TextInput} from '@sanity/ui'\nimport type {ChangeEvent} from 'react'\n\nimport type {TableRow} from './TableComponent'\n\ninterface TableInputProps {\n  rows: TableRow[]\n  updateCell: (e: ChangeEvent<HTMLInputElement>, rowIndex: number, cellIndex: number) => void\n  removeRow: (index: number) => void\n  removeColumn: (index: number) => void\n}\n\nexport const TableInput = (props: TableInputProps) => {\n  const {rows, updateCell, removeRow, removeColumn} = props\n\n  return (\n    <table style={{width: '100%'}}>\n      <tbody>\n        {rows.map((row, rowIndex) => (\n          <tr key={row._key}>\n            {row.cells.map((cell, cellIndex) => (\n              // Cells are plain strings; the cell position is the only stable identity\n              // eslint-disable-next-line react/no-array-index-key\n              <td key={`${row._key}-${cellIndex}`}>\n                <TextInput\n                  fontSize={1}\n                  padding={3}\n                  value={cell}\n                  onChange={(e) => updateCell(e, rowIndex, cellIndex)}\n                />\n              </td>\n            ))}\n            <td key={`${row._key}-remove`}>\n              <Box marginLeft={1} style={{textAlign: 'center'}}>\n                <Button\n                  icon={RemoveIcon}\n                  padding={2}\n                  onClick={() => removeRow(rowIndex)}\n                  mode=\"bleed\"\n                />\n              </Box>\n            </td>\n          </tr>\n        ))}\n        <tr>\n          {(rows[0]?.cells || []).map((_, i) => (\n            // Cells are plain strings; the column position is the only stable identity\n            // eslint-disable-next-line react/no-array-index-key\n            <td key={i}>\n              <Box marginTop={1} style={{textAlign: 'center'}}>\n                <Button\n                  icon={RemoveIcon}\n                  padding={2}\n                  onClick={() => removeColumn(i)}\n                  mode=\"bleed\"\n                />\n              </Box>\n            </td>\n          ))}\n        </tr>\n      </tbody>\n    </table>\n  )\n}\n","import {AddIcon} from '@sanity/icons/Add'\nimport {ControlsIcon} from '@sanity/icons/Controls'\nimport {WarningOutlineIcon} from '@sanity/icons/WarningOutline'\nimport {Box, Button, Card, Dialog, Inline, type Placement, TextInput} from '@sanity/ui'\nimport {Menu, MenuButton, MenuDivider, MenuItem} from '@sanity/ui/menu'\nimport {type ChangeEventHandler, useState} from 'react'\n\ninterface TableMenuProps {\n  id: string\n  addColumns: (count: number) => void\n  addColumnAt: (index: number) => void\n  addRows: (count: number) => void\n  addRowAt: (index: number) => void\n  remove: () => void\n  placement: Placement\n}\n\nexport const TableMenu = (props: TableMenuProps): React.JSX.Element => {\n  const {id, remove: handleRemove} = props\n  const [dialog, setDialog] = useState<{\n    type: string\n    callback: (count: number) => void\n  } | null>(null)\n\n  // Keep `count` always a string so the TextInput is controlled for the component lifetime.\n  const [count, setCount] = useState<string>('')\n\n  const updateCount: ChangeEventHandler<HTMLInputElement> = (e) => {\n    setCount(e.currentTarget.value)\n  }\n\n  const addRows = () => {\n    setDialog({type: 'rows', callback: (c) => props.addRows(c)})\n    setCount('') // ensure input starts controlled when dialog opens\n  }\n\n  const addRowAt = () => {\n    setDialog({type: 'rows', callback: (index) => props.addRowAt(index)})\n    setCount('')\n  }\n\n  const addColumns = () => {\n    setDialog({\n      type: 'columns',\n      callback: (c) => props.addColumns(c),\n    })\n    setCount('')\n  }\n\n  const addColumnsAt = () => {\n    setDialog({type: 'columns', callback: (index) => props.addColumnAt(index)})\n    setCount('')\n  }\n\n  // The dialog is reused for \"add N rows/columns\" (a count) and \"add at index\"\n  // (a position where 0 is valid), so allow 0 but reject NaN/negative/too-large.\n  const parsedCount = Number.parseInt(count, 10)\n  const isValidCount = Number.isInteger(parsedCount) && parsedCount >= 0 && parsedCount < 100\n\n  const onConfirm = () => {\n    if (!isValidCount) {\n      return\n    }\n    setDialog(null)\n    dialog?.callback(parsedCount)\n    setCount('')\n  }\n\n  return (\n    <>\n      {dialog && (\n        <Dialog\n          header={`Add ${dialog.type}`}\n          id={`${id}-dialog-add`}\n          onClose={() => {\n            setDialog(null)\n            setCount('')\n          }}\n          zOffset={1000}\n        >\n          <Card padding={4}>\n            <TextInput\n              style={{textAlign: 'left'}}\n              fontSize={2}\n              padding={3}\n              type=\"number\"\n              value={count}\n              onChange={updateCount}\n              customValidity={\n                count !== '' && !isValidCount ? 'Enter a whole number from 0 to 99' : undefined\n              }\n            />\n            <Box marginTop={4}>\n              <Inline gap={1} style={{textAlign: 'right'}}>\n                <Button\n                  text=\"Cancel\"\n                  mode=\"ghost\"\n                  onClick={() => {\n                    setDialog(null)\n                    setCount('')\n                  }}\n                />\n                <Button\n                  text=\"Confirm\"\n                  tone=\"critical\"\n                  onClick={onConfirm}\n                  disabled={!isValidCount}\n                />\n              </Inline>\n            </Box>\n          </Card>\n        </Dialog>\n      )}\n      <MenuButton\n        button={<Button icon={ControlsIcon} fontSize={1} padding={2} mode=\"ghost\" />}\n        id={`${id}-menu-button`}\n        menu={\n          <Menu>\n            <MenuItem icon={AddIcon} fontSize={1} text=\"Add Row(s)\" onClick={addRows} />\n            <MenuItem icon={AddIcon} fontSize={1} text=\"Add Row At Index\" onClick={addRowAt} />\n            <MenuItem icon={AddIcon} fontSize={1} text=\"Add Column(s)\" onClick={addColumns} />\n            <MenuItem\n              icon={AddIcon}\n              fontSize={1}\n              text=\"Add Column At Index\"\n              onClick={addColumnsAt}\n            />\n            <MenuDivider />\n            <MenuItem\n              icon={WarningOutlineIcon}\n              fontSize={1}\n              text=\"Remove\"\n              tone=\"critical\"\n              onClick={handleRemove}\n            />\n          </Menu>\n        }\n        popover={{placement: props.placement}}\n      />\n    </>\n  )\n}\n","import {AddIcon} from '@sanity/icons/Add'\nimport {Box, Button, Card, Dialog, Flex, Inline, Text} from '@sanity/ui'\nimport {uuid} from '@sanity/uuid'\nimport {type ChangeEvent, useState} from 'react'\nimport {type ObjectInputProps, set, unset} from 'sanity'\n\nimport {TableInput} from './TableInput'\nimport {TableMenu} from './TableMenu'\n\nconst deepClone: <T>(data: T) => T =\n  globalThis.structuredClone ?? ((data) => JSON.parse(JSON.stringify(data)))\n\nexport interface TableValue {\n  _type?: 'table'\n  rows?: TableRow[]\n}\n\nexport type TableProps = ObjectInputProps<TableValue>\n\nexport type TableRow = {\n  _type: string\n  _key: string\n  cells: string[]\n}\n\n// TODO refactor deepClone stuff to use proper patches\n// TODO use callback all the things\n\nexport const TableComponent = (props: TableProps & {rowType?: string}) => {\n  const {id, rowType = 'tableRow', value, onChange} = props\n  const [dialog, setDialog] = useState<{\n    type: string\n    callback: () => void\n  } | null>(null)\n\n  const updateValue = (v?: Omit<TableValue, '_type'>) => {\n    return onChange(set(v))\n  }\n\n  const resetValue = () => {\n    return onChange(unset())\n  }\n\n  const createTable = () => {\n    const newValue: Omit<TableValue, '_type'> = {\n      rows: [\n        {\n          _type: rowType,\n          _key: uuid(),\n          cells: ['', ''],\n        },\n        {\n          _type: rowType,\n          _key: uuid(),\n          cells: ['', ''],\n        },\n      ],\n    }\n    return updateValue({...value, ...newValue})\n  }\n\n  const confirmRemoveTable = () => {\n    setDialog({type: 'table', callback: removeTable})\n  }\n\n  const removeTable = () => {\n    resetValue()\n    setDialog(null)\n  }\n\n  const addRows = (count = 1) => {\n    if (!value?.rows) {\n      return\n    }\n    const newRows = deepClone(value.rows)\n    // Calculate the column count from the first row\n    const columnCount = value.rows[0]?.cells.length ?? 0\n    for (let i = 0; i < count; i++) {\n      // Add as many cells as we have columns\n      newRows.push({\n        _type: rowType,\n        _key: uuid(),\n        cells: Array(columnCount).fill(''),\n      })\n    }\n    return updateValue({...value, rows: newRows})\n  }\n\n  const addRowAt = (index = 0) => {\n    if (!value?.rows) {\n      return\n    }\n    const newRows = deepClone(value.rows)\n    // Calculate the column count from the first row\n    const columnCount = value.rows[0]?.cells.length ?? 0\n\n    newRows.splice(index, 0, {\n      _type: rowType,\n      _key: uuid(),\n      cells: Array(columnCount).fill(''),\n    })\n\n    return updateValue({...value, rows: newRows})\n  }\n\n  const removeRow = (index: number) => {\n    if (!value?.rows) {\n      return\n    }\n    const newRows = deepClone(value.rows)\n    newRows.splice(index, 1)\n    updateValue({...value, rows: newRows})\n    setDialog(null)\n  }\n\n  const confirmRemoveRow = (index: number) => {\n    if (!value?.rows) {\n      return\n    }\n    if (value.rows.length <= 1) return confirmRemoveTable()\n    return setDialog({type: 'row', callback: () => removeRow(index)})\n  }\n\n  const confirmRemoveColumn = (index: number) => {\n    if (!value?.rows) {\n      return\n    }\n    if ((value.rows[0]?.cells.length ?? 0) <= 1) return confirmRemoveTable()\n    return setDialog({type: 'column', callback: () => removeColumn(index)})\n  }\n\n  const addColumns = (count: number) => {\n    if (!value?.rows) {\n      return\n    }\n    const newRows = deepClone(value.rows)\n    // Add a cell to each of the rows\n    newRows.forEach((row) => {\n      for (let j = 0; j < count; j++) {\n        row.cells.push('')\n      }\n    })\n    return updateValue({...value, rows: newRows})\n  }\n\n  const addColumnAt = (index: number) => {\n    if (!value?.rows) {\n      return\n    }\n    const newRows = deepClone(value.rows)\n\n    newRows.forEach((row) => {\n      row.cells.splice(index, 0, '')\n    })\n\n    return updateValue({...value, rows: newRows})\n  }\n\n  const removeColumn = (index: number) => {\n    if (!value?.rows) {\n      return\n    }\n    const newRows = deepClone(value.rows)\n    newRows.forEach((row) => {\n      row.cells.splice(index, 1)\n    })\n    updateValue({...value, rows: newRows})\n    setDialog(null)\n  }\n\n  const updateCell = (e: ChangeEvent<HTMLInputElement>, rowIndex: number, cellIndex: number) => {\n    if (!value?.rows) {\n      return\n    }\n    const newRows = deepClone(value.rows)\n    const row = newRows[rowIndex]\n    if (!row) {\n      return\n    }\n    row.cells[cellIndex] = e.currentTarget.value\n    return updateValue({...value, rows: newRows})\n  }\n\n  return (\n    <div>\n      {dialog && (\n        <Dialog\n          header={`Remove ${dialog.type}`}\n          id={`${id}-dialog-remove`}\n          onClose={() => setDialog(null)}\n          zOffset={1000}\n        >\n          <Card padding={4}>\n            <Text>Are you sure you want to remove this {dialog.type}?</Text>\n            <Box marginTop={4}>\n              <Inline gap={1} style={{textAlign: 'right'}}>\n                <Button text=\"Cancel\" mode=\"ghost\" onClick={() => setDialog(null)} />\n                <Button text=\"Confirm\" tone=\"critical\" onClick={() => dialog.callback()} />\n              </Inline>\n            </Box>\n          </Card>\n        </Dialog>\n      )}\n      <Box>\n        <Flex justify=\"flex-end\">\n          {value?.rows?.length ? (\n            <Inline gap={1}>\n              <Button\n                fontSize={1}\n                padding={2}\n                icon={AddIcon}\n                text=\"Add row\"\n                mode=\"ghost\"\n                onClick={() => addRows(1)}\n              />\n              <Button\n                fontSize={1}\n                padding={2}\n                icon={AddIcon}\n                text=\"Add column\"\n                mode=\"ghost\"\n                onClick={() => addColumns(1)}\n              />\n              <TableMenu\n                id={id}\n                addColumns={addColumns}\n                addColumnAt={addColumnAt}\n                addRows={addRows}\n                addRowAt={addRowAt}\n                remove={confirmRemoveTable}\n                placement=\"left\"\n              />\n            </Inline>\n          ) : null}\n        </Flex>\n      </Box>\n      {value?.rows?.length ? (\n        <TableInput\n          rows={value.rows}\n          removeRow={confirmRemoveRow}\n          removeColumn={confirmRemoveColumn}\n          updateCell={updateCell}\n        />\n      ) : null}\n      {!value || !value?.rows?.length ? (\n        <Inline gap={1}>\n          <Button\n            fontSize={1}\n            padding={3}\n            icon={AddIcon}\n            text=\"Create Table\"\n            tone=\"primary\"\n            mode=\"ghost\"\n            onClick={createTable}\n          />\n        </Inline>\n      ) : null}\n    </div>\n  )\n}\n\nexport function createTableComponent(rowType: string) {\n  return function Table(props: TableProps) {\n    return <TableComponent {...props} rowType={rowType} />\n  }\n}\n","export function TableIcon() {\n  return (\n    <svg\n      width=\"1em\"\n      height=\"1em\"\n      viewBox=\"0 0 25 25\"\n      fill=\"none\"\n      stroke=\"currentColor\"\n      strokeWidth=\"1.2\"\n    >\n      <path d=\"M3 3h18v18H3zM21 9H3M21 15H3M12 3v18\" />\n    </svg>\n  )\n}\n","import {Box, Card, Grid, Inline, Label, Text} from '@sanity/ui'\nimport type {PreviewProps} from 'sanity'\n\nimport type {TableRow} from './TableComponent'\nimport {TableIcon} from './TableIcon'\n\ninterface TablePreviewProps extends PreviewProps {\n  rows?: TableRow[]\n}\n\nconst Table = ({rows}: {rows: TableRow[]}) => {\n  const numCols = rows[0]?.cells.length ?? 0\n\n  return (\n    <Grid gridTemplateColumns={numCols} padding={2}>\n      {rows.map((row) =>\n        row.cells.map((cell, i) => (\n          // Cells are plain strings; the cell position is the only stable identity\n          // eslint-disable-next-line react/no-array-index-key\n          <Card key={row._key + i} padding={2} style={{outline: '1px solid #DFE2E9'}}>\n            <Text textOverflow=\"ellipsis\">{cell}</Text>\n          </Card>\n        )),\n      )}\n    </Grid>\n  )\n}\n\nexport const TablePreview = (props: TablePreviewProps) => {\n  const {schemaType, rows = [], title} = props\n  const previewTitle = schemaType?.title ?? (typeof title === 'string' ? title : 'Title missing')\n\n  return (\n    <>\n      <Box padding={3}>\n        <Inline gap={3}>\n          <Card>\n            <Label size={4}>\n              <TableIcon />\n            </Label>\n          </Card>\n          <Card>\n            <Text>{previewTitle}</Text>\n          </Card>\n        </Inline>\n      </Box>\n      <Box padding={2}>\n        {rows.length === 0 ? <Label muted>Empty Table</Label> : <Table rows={rows} />}\n      </Box>\n    </>\n  )\n}\n","import '@sanity/ui/styles.css'\nimport {definePlugin, defineType} from 'sanity'\n\nimport {createTableComponent, TableComponent} from './components/TableComponent'\nimport {TablePreview} from './components/TablePreview'\nexport type {TableProps, TableRow, TableValue} from './components/TableComponent'\n\nexport {TableComponent, TablePreview}\n\nexport interface TableConfig {\n  rowType?: string\n}\n\nexport const table = definePlugin<TableConfig | void>((config) => {\n  const tableRowSchema = defineType({\n    title: 'Table Row',\n    name: config?.rowType || 'tableRow',\n    type: 'object',\n    fields: [\n      {\n        name: 'cells',\n        type: 'array',\n        of: [{type: 'string'}],\n      },\n    ],\n  })\n\n  const tableSchema = defineType({\n    title: 'Table',\n    name: 'table',\n    type: 'object',\n    fields: [\n      {\n        name: 'rows',\n        type: 'array',\n        of: [\n          {\n            type: tableRowSchema.name,\n          },\n        ],\n      },\n    ],\n    components: {\n      input: createTableComponent(tableRowSchema.name),\n      preview: TablePreview,\n    },\n    preview: {\n      select: {\n        rows: 'rows',\n        title: 'title',\n      },\n      prepare: ({title, rows = []}) => ({\n        title,\n        rows,\n      }),\n    },\n  })\n\n  return {\n    name: 'table',\n    schema: {\n      types: [tableRowSchema, tableSchema],\n    },\n  }\n})\n"],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"index.js","names":["{width: '100%'}","rows.map((row, rowIndex) => (\n          <tr key={row._key}>\n            {row.cells.map((cell, cellIndex) => (\n              // Cells are plain strings; the cell position is the only stable identity\n              // eslint-disable-next-line react/no-array-index-key\n              <td key={`${row._key}-${cellIndex}`}>\n                <TextInput\n                  fontSize={1}\n                  padding={3}\n                  value={cell}\n                  onChange={(e) => updateCell(e, rowIndex, cellIndex)}\n                />\n              </td>\n            ))}\n            <td key={`${row._key}-remove`}>\n              <Box marginLeft={1} style={{textAlign: 'center'}}>\n                <Button\n                  icon={RemoveIcon}\n                  padding={2}\n                  onClick={() => removeRow(rowIndex)}\n                  mode=\"bleed\"\n                />\n              </Box>\n            </td>\n          </tr>\n        ))","(row, rowIndex) => (\n          <tr key={row._key}>\n            {row.cells.map((cell, cellIndex) => (\n              // Cells are plain strings; the cell position is the only stable identity\n              // eslint-disable-next-line react/no-array-index-key\n              <td key={`${row._key}-${cellIndex}`}>\n                <TextInput\n                  fontSize={1}\n                  padding={3}\n                  value={cell}\n                  onChange={(e) => updateCell(e, rowIndex, cellIndex)}\n                />\n              </td>\n            ))}\n            <td key={`${row._key}-remove`}>\n              <Box marginLeft={1} style={{textAlign: 'center'}}>\n                <Button\n                  icon={RemoveIcon}\n                  padding={2}\n                  onClick={() => removeRow(rowIndex)}\n                  mode=\"bleed\"\n                />\n              </Box>\n            </td>\n          </tr>\n        )","rows[0]?.cells || []","cells","(rows[0]?.cells || []).map((_, i) => (\n            // Cells are plain strings; the column position is the only stable identity\n            // eslint-disable-next-line react/no-array-index-key\n            <td key={i}>\n              <Box marginTop={1} style={{textAlign: 'center'}}>\n                <Button\n                  icon={RemoveIcon}\n                  padding={2}\n                  onClick={() => removeColumn(i)}\n                  mode=\"bleed\"\n                />\n              </Box>\n            </td>\n          ))","(_, i) => (\n            // Cells are plain strings; the column position is the only stable identity\n            // eslint-disable-next-line react/no-array-index-key\n            <td key={i}>\n              <Box marginTop={1} style={{textAlign: 'center'}}>\n                <Button\n                  icon={RemoveIcon}\n                  padding={2}\n                  onClick={() => removeColumn(i)}\n                  mode=\"bleed\"\n                />\n              </Box>\n            </td>\n          )","<tr>\n          {(rows[0]?.cells || []).map((_, i) => (\n            // Cells are plain strings; the column position is the only stable identity\n            // eslint-disable-next-line react/no-array-index-key\n            <td key={i}>\n              <Box marginTop={1} style={{textAlign: 'center'}}>\n                <Button\n                  icon={RemoveIcon}\n                  padding={2}\n                  onClick={() => removeColumn(i)}\n                  mode=\"bleed\"\n                />\n              </Box>\n            </td>\n          ))}\n        </tr>","<table style={{width: '100%'}}>\n      <tbody>\n        {rows.map((row, rowIndex) => (\n          <tr key={row._key}>\n            {row.cells.map((cell, cellIndex) => (\n              // Cells are plain strings; the cell position is the only stable identity\n              // eslint-disable-next-line react/no-array-index-key\n              <td key={`${row._key}-${cellIndex}`}>\n                <TextInput\n                  fontSize={1}\n                  padding={3}\n                  value={cell}\n                  onChange={(e) => updateCell(e, rowIndex, cellIndex)}\n                />\n              </td>\n            ))}\n            <td key={`${row._key}-remove`}>\n              <Box marginLeft={1} style={{textAlign: 'center'}}>\n                <Button\n                  icon={RemoveIcon}\n                  padding={2}\n                  onClick={() => removeRow(rowIndex)}\n                  mode=\"bleed\"\n                />\n              </Box>\n            </td>\n          </tr>\n        ))}\n        <tr>\n          {(rows[0]?.cells || []).map((_, i) => (\n            // Cells are plain strings; the column position is the only stable identity\n            // eslint-disable-next-line react/no-array-index-key\n            <td key={i}>\n              <Box marginTop={1} style={{textAlign: 'center'}}>\n                <Button\n                  icon={RemoveIcon}\n                  padding={2}\n                  onClick={() => removeColumn(i)}\n                  mode=\"bleed\"\n                />\n              </Box>\n            </td>\n          ))}\n        </tr>\n      </tbody>\n    </table>","(e) => {\n    setCount(e.currentTarget.value)\n  }","() => {\n    setDialog({type: 'rows', callback: (c) => props.addRows(c)})\n    setCount('') // ensure input starts controlled when dialog opens\n  }","() => {\n    setDialog({type: 'rows', callback: (index) => props.addRowAt(index)})\n    setCount('')\n  }","() => {\n    setDialog({\n      type: 'columns',\n      callback: (c) => props.addColumns(c),\n    })\n    setCount('')\n  }","c","() => {\n    setDialog({type: 'columns', callback: (index) => props.addColumnAt(index)})\n    setCount('')\n  }","index","Number.isInteger(parsedCount) && parsedCount >= 0 && parsedCount < 100","() => {\n    if (!isValidCount) {\n      return\n    }\n    setDialog(null)\n    dialog?.callback(parsedCount)\n    setCount('')\n  }","dialog?.callback","dialog && (\n        <Dialog\n          header={`Add ${dialog.type}`}\n          id={`${id}-dialog-add`}\n          onClose={() => {\n            setDialog(null)\n            setCount('')\n          }}\n          zOffset={1000}\n        >\n          <Card padding={4}>\n            <TextInput\n              style={{textAlign: 'left'}}\n              fontSize={2}\n              padding={3}\n              type=\"number\"\n              value={count}\n              onChange={updateCount}\n              customValidity={\n                count !== '' && !isValidCount ? 'Enter a whole number from 0 to 99' : undefined\n              }\n            />\n            <Box marginTop={4}>\n              <Inline gap={1} style={{textAlign: 'right'}}>\n                <Button\n                  text=\"Cancel\"\n                  mode=\"ghost\"\n                  onClick={() => {\n                    setDialog(null)\n                    setCount('')\n                  }}\n                />\n                <Button\n                  text=\"Confirm\"\n                  tone=\"critical\"\n                  onClick={onConfirm}\n                  disabled={!isValidCount}\n                />\n              </Inline>\n            </Box>\n          </Card>\n        </Dialog>\n      )","<Button icon={ControlsIcon} fontSize={1} padding={2} mode=\"ghost\" />","<MenuItem icon={AddIcon} fontSize={1} text=\"Add Row(s)\" onClick={addRows} />","<MenuItem icon={AddIcon} fontSize={1} text=\"Add Row At Index\" onClick={addRowAt} />","<MenuItem icon={AddIcon} fontSize={1} text=\"Add Column(s)\" onClick={addColumns} />","<MenuItem\n              icon={AddIcon}\n              fontSize={1}\n              text=\"Add Column At Index\"\n              onClick={addColumnsAt}\n            />","<MenuDivider />","<MenuItem\n              icon={WarningOutlineIcon}\n              fontSize={1}\n              text=\"Remove\"\n              tone=\"critical\"\n              onClick={handleRemove}\n            />","<Menu>\n            <MenuItem icon={AddIcon} fontSize={1} text=\"Add Row(s)\" onClick={addRows} />\n            <MenuItem icon={AddIcon} fontSize={1} text=\"Add Row At Index\" onClick={addRowAt} />\n            <MenuItem icon={AddIcon} fontSize={1} text=\"Add Column(s)\" onClick={addColumns} />\n            <MenuItem\n              icon={AddIcon}\n              fontSize={1}\n              text=\"Add Column At Index\"\n              onClick={addColumnsAt}\n            />\n            <MenuDivider />\n            <MenuItem\n              icon={WarningOutlineIcon}\n              fontSize={1}\n              text=\"Remove\"\n              tone=\"critical\"\n              onClick={handleRemove}\n            />\n          </Menu>","{placement: props.placement}","placement","<MenuButton\n        button={<Button icon={ControlsIcon} fontSize={1} padding={2} mode=\"ghost\" />}\n        id={`${id}-menu-button`}\n        menu={\n          <Menu>\n            <MenuItem icon={AddIcon} fontSize={1} text=\"Add Row(s)\" onClick={addRows} />\n            <MenuItem icon={AddIcon} fontSize={1} text=\"Add Row At Index\" onClick={addRowAt} />\n            <MenuItem icon={AddIcon} fontSize={1} text=\"Add Column(s)\" onClick={addColumns} />\n            <MenuItem\n              icon={AddIcon}\n              fontSize={1}\n              text=\"Add Column At Index\"\n              onClick={addColumnsAt}\n            />\n            <MenuDivider />\n            <MenuItem\n              icon={WarningOutlineIcon}\n              fontSize={1}\n              text=\"Remove\"\n              tone=\"critical\"\n              onClick={handleRemove}\n            />\n          </Menu>\n        }\n        popover={{placement: props.placement}}\n      />","`${id}-menu-button`","<>\n      {dialog && (\n        <Dialog\n          header={`Add ${dialog.type}`}\n          id={`${id}-dialog-add`}\n          onClose={() => {\n            setDialog(null)\n            setCount('')\n          }}\n          zOffset={1000}\n        >\n          <Card padding={4}>\n            <TextInput\n              style={{textAlign: 'left'}}\n              fontSize={2}\n              padding={3}\n              type=\"number\"\n              value={count}\n              onChange={updateCount}\n              customValidity={\n                count !== '' && !isValidCount ? 'Enter a whole number from 0 to 99' : undefined\n              }\n            />\n            <Box marginTop={4}>\n              <Inline gap={1} style={{textAlign: 'right'}}>\n                <Button\n                  text=\"Cancel\"\n                  mode=\"ghost\"\n                  onClick={() => {\n                    setDialog(null)\n                    setCount('')\n                  }}\n                />\n                <Button\n                  text=\"Confirm\"\n                  tone=\"critical\"\n                  onClick={onConfirm}\n                  disabled={!isValidCount}\n                />\n              </Inline>\n            </Box>\n          </Card>\n        </Dialog>\n      )}\n      <MenuButton\n        button={<Button icon={ControlsIcon} fontSize={1} padding={2} mode=\"ghost\" />}\n        id={`${id}-menu-button`}\n        menu={\n          <Menu>\n            <MenuItem icon={AddIcon} fontSize={1} text=\"Add Row(s)\" onClick={addRows} />\n            <MenuItem icon={AddIcon} fontSize={1} text=\"Add Row At Index\" onClick={addRowAt} />\n            <MenuItem icon={AddIcon} fontSize={1} text=\"Add Column(s)\" onClick={addColumns} />\n            <MenuItem\n              icon={AddIcon}\n              fontSize={1}\n              text=\"Add Column At Index\"\n              onClick={addColumnsAt}\n            />\n            <MenuDivider />\n            <MenuItem\n              icon={WarningOutlineIcon}\n              fontSize={1}\n              text=\"Remove\"\n              tone=\"critical\"\n              onClick={handleRemove}\n            />\n          </Menu>\n        }\n        popover={{placement: props.placement}}\n      />\n    </>","rowType = 'tableRow'","(v?: Omit<TableValue, '_type'>) => {\n    return onChange(set(v))\n  }","() => {\n    return onChange(unset())\n  }","() => {\n    const newValue: Omit<TableValue, '_type'> = {\n      rows: [\n        {\n          _type: rowType,\n          _key: uuid(),\n          cells: ['', ''],\n        },\n        {\n          _type: rowType,\n          _key: uuid(),\n          cells: ['', ''],\n        },\n      ],\n    }\n    return updateValue({...value, ...newValue})\n  }","(count = 1) => {\n    if (!value?.rows) {\n      return\n    }\n    const newRows = deepClone(value.rows)\n    // Calculate the column count from the first row\n    const columnCount = value.rows[0]?.cells.length ?? 0\n    for (let i = 0; i < count; i++) {\n      // Add as many cells as we have columns\n      newRows.push({\n        _type: rowType,\n        _key: uuid(),\n        cells: Array(columnCount).fill(''),\n      })\n    }\n    return updateValue({...value, rows: newRows})\n  }","value?.rows","count = 1","(index = 0) => {\n    if (!value?.rows) {\n      return\n    }\n    const newRows = deepClone(value.rows)\n    // Calculate the column count from the first row\n    const columnCount = value.rows[0]?.cells.length ?? 0\n\n    newRows.splice(index, 0, {\n      _type: rowType,\n      _key: uuid(),\n      cells: Array(columnCount).fill(''),\n    })\n\n    return updateValue({...value, rows: newRows})\n  }","index = 0","newRows","columnCount","(index: number) => {\n    if (!value?.rows) {\n      return\n    }\n    const newRows = deepClone(value.rows)\n    newRows.splice(index, 1)\n    updateValue({...value, rows: newRows})\n    setDialog(null)\n  }","index","(index: number) => {\n    if (!value?.rows) {\n      return\n    }\n    if (value.rows.length <= 1) return confirmRemoveTable()\n    return setDialog({type: 'row', callback: () => removeRow(index)})\n  }","(count: number) => {\n    if (!value?.rows) {\n      return\n    }\n    const newRows = deepClone(value.rows)\n    // Add a cell to each of the rows\n    newRows.forEach((row) => {\n      for (let j = 0; j < count; j++) {\n        row.cells.push('')\n      }\n    })\n    return updateValue({...value, rows: newRows})\n  }","count","(index: number) => {\n    if (!value?.rows) {\n      return\n    }\n    const newRows = deepClone(value.rows)\n\n    newRows.forEach((row) => {\n      row.cells.splice(index, 0, '')\n    })\n\n    return updateValue({...value, rows: newRows})\n  }","(e: ChangeEvent<HTMLInputElement>, rowIndex: number, cellIndex: number) => {\n    if (!value?.rows) {\n      return\n    }\n    const newRows = deepClone(value.rows)\n    const row = newRows[rowIndex]\n    if (!row) {\n      return\n    }\n    row.cells[cellIndex] = e.currentTarget.value\n    return updateValue({...value, rows: newRows})\n  }","row","dialog && (\n        <Dialog\n          header={`Remove ${dialog.type}`}\n          id={`${id}-dialog-remove`}\n          onClose={() => setDialog(null)}\n          zOffset={1000}\n        >\n          <Card padding={4}>\n            <Text>Are you sure you want to remove this {dialog.type}?</Text>\n            <Box marginTop={4}>\n              <Inline gap={1} style={{textAlign: 'right'}}>\n                <Button text=\"Cancel\" mode=\"ghost\" onClick={() => setDialog(null)} />\n                <Button text=\"Confirm\" tone=\"critical\" onClick={() => dialog.callback()} />\n              </Inline>\n            </Box>\n          </Card>\n        </Dialog>\n      )","value?.rows?.length ? (\n            <Inline gap={1}>\n              <Button\n                fontSize={1}\n                padding={2}\n                icon={AddIcon}\n                text=\"Add row\"\n                mode=\"ghost\"\n                onClick={() => addRows(1)}\n              />\n              <Button\n                fontSize={1}\n                padding={2}\n                icon={AddIcon}\n                text=\"Add column\"\n                mode=\"ghost\"\n                onClick={() => addColumns(1)}\n              />\n              <TableMenu\n                id={id}\n                addColumns={addColumns}\n                addColumnAt={addColumnAt}\n                addRows={addRows}\n                addRowAt={addRowAt}\n                remove={confirmRemoveTable}\n                placement=\"left\"\n              />\n            </Inline>\n          ) : null","length","<Box>\n        <Flex justify=\"flex-end\">\n          {value?.rows?.length ? (\n            <Inline gap={1}>\n              <Button\n                fontSize={1}\n                padding={2}\n                icon={AddIcon}\n                text=\"Add row\"\n                mode=\"ghost\"\n                onClick={() => addRows(1)}\n              />\n              <Button\n                fontSize={1}\n                padding={2}\n                icon={AddIcon}\n                text=\"Add column\"\n                mode=\"ghost\"\n                onClick={() => addColumns(1)}\n              />\n              <TableMenu\n                id={id}\n                addColumns={addColumns}\n                addColumnAt={addColumnAt}\n                addRows={addRows}\n                addRowAt={addRowAt}\n                remove={confirmRemoveTable}\n                placement=\"left\"\n              />\n            </Inline>\n          ) : null}\n        </Flex>\n      </Box>","value?.rows?.length ? (\n        <TableInput\n          rows={value.rows}\n          removeRow={confirmRemoveRow}\n          removeColumn={confirmRemoveColumn}\n          updateCell={updateCell}\n        />\n      ) : null","value?.rows?.length","!value || !value?.rows?.length ? (\n        <Inline gap={1}>\n          <Button\n            fontSize={1}\n            padding={3}\n            icon={AddIcon}\n            text=\"Create Table\"\n            tone=\"primary\"\n            mode=\"ghost\"\n            onClick={createTable}\n          />\n        </Inline>\n      ) : null","<div>\n      {dialog && (\n        <Dialog\n          header={`Remove ${dialog.type}`}\n          id={`${id}-dialog-remove`}\n          onClose={() => setDialog(null)}\n          zOffset={1000}\n        >\n          <Card padding={4}>\n            <Text>Are you sure you want to remove this {dialog.type}?</Text>\n            <Box marginTop={4}>\n              <Inline gap={1} style={{textAlign: 'right'}}>\n                <Button text=\"Cancel\" mode=\"ghost\" onClick={() => setDialog(null)} />\n                <Button text=\"Confirm\" tone=\"critical\" onClick={() => dialog.callback()} />\n              </Inline>\n            </Box>\n          </Card>\n        </Dialog>\n      )}\n      <Box>\n        <Flex justify=\"flex-end\">\n          {value?.rows?.length ? (\n            <Inline gap={1}>\n              <Button\n                fontSize={1}\n                padding={2}\n                icon={AddIcon}\n                text=\"Add row\"\n                mode=\"ghost\"\n                onClick={() => addRows(1)}\n              />\n              <Button\n                fontSize={1}\n                padding={2}\n                icon={AddIcon}\n                text=\"Add column\"\n                mode=\"ghost\"\n                onClick={() => addColumns(1)}\n              />\n              <TableMenu\n                id={id}\n                addColumns={addColumns}\n                addColumnAt={addColumnAt}\n                addRows={addRows}\n                addRowAt={addRowAt}\n                remove={confirmRemoveTable}\n                placement=\"left\"\n              />\n            </Inline>\n          ) : null}\n        </Flex>\n      </Box>\n      {value?.rows?.length ? (\n        <TableInput\n          rows={value.rows}\n          removeRow={confirmRemoveRow}\n          removeColumn={confirmRemoveColumn}\n          updateCell={updateCell}\n        />\n      ) : null}\n      {!value || !value?.rows?.length ? (\n        <Inline gap={1}>\n          <Button\n            fontSize={1}\n            padding={3}\n            icon={AddIcon}\n            text=\"Create Table\"\n            tone=\"primary\"\n            mode=\"ghost\"\n            onClick={createTable}\n          />\n        </Inline>\n      ) : null}\n    </div>","<svg\n      width=\"1em\"\n      height=\"1em\"\n      viewBox=\"0 0 25 25\"\n      fill=\"none\"\n      stroke=\"currentColor\"\n      strokeWidth=\"1.2\"\n    >\n      <path d=\"M3 3h18v18H3zM21 9H3M21 15H3M12 3v18\" />\n    </svg>","{rows}: {rows: TableRow[]}","rows.map((row) =>\n        row.cells.map((cell, i) => (\n          // Cells are plain strings; the cell position is the only stable identity\n          // eslint-disable-next-line react/no-array-index-key\n          <Card key={row._key + i} padding={2} style={{outline: '1px solid #DFE2E9'}}>\n            <Text textOverflow=\"ellipsis\">{cell}</Text>\n          </Card>\n        )),\n      )","(row) =>\n        row.cells.map((cell, i) => (\n          // Cells are plain strings; the cell position is the only stable identity\n          // eslint-disable-next-line react/no-array-index-key\n          <Card key={row._key + i} padding={2} style={{outline: '1px solid #DFE2E9'}}>\n            <Text textOverflow=\"ellipsis\">{cell}</Text>\n          </Card>\n        ))","<Grid gridTemplateColumns={numCols} padding={2}>\n      {rows.map((row) =>\n        row.cells.map((cell, i) => (\n          // Cells are plain strings; the cell position is the only stable identity\n          // eslint-disable-next-line react/no-array-index-key\n          <Card key={row._key + i} padding={2} style={{outline: '1px solid #DFE2E9'}}>\n            <Text textOverflow=\"ellipsis\">{cell}</Text>\n          </Card>\n        )),\n      )}\n    </Grid>","rows = []","<Card>\n            <Label size={4}>\n              <TableIcon />\n            </Label>\n          </Card>","<Box padding={3}>\n        <Inline gap={3}>\n          <Card>\n            <Label size={4}>\n              <TableIcon />\n            </Label>\n          </Card>\n          <Card>\n            <Text>{previewTitle}</Text>\n          </Card>\n        </Inline>\n      </Box>","<Box padding={2}>\n        {rows.length === 0 ? <Label muted>Empty Table</Label> : <Table rows={rows} />}\n      </Box>","rows.length","<>\n      <Box padding={3}>\n        <Inline gap={3}>\n          <Card>\n            <Label size={4}>\n              <TableIcon />\n            </Label>\n          </Card>\n          <Card>\n            <Text>{previewTitle}</Text>\n          </Card>\n        </Inline>\n      </Box>\n      <Box padding={2}>\n        {rows.length === 0 ? <Label muted>Empty Table</Label> : <Table rows={rows} />}\n      </Box>\n    </>"],"sources":["../src/components/TableInput.tsx","../src/components/TableMenu.tsx","../src/components/TableComponent.tsx","../src/components/TableIcon.tsx","../src/components/TablePreview.tsx","../src/index.ts"],"sourcesContent":["import {RemoveIcon} from '@sanity/icons/Remove'\nimport {Box, Button, TextInput} from '@sanity/ui'\nimport type {ChangeEvent} from 'react'\n\nimport type {TableRow} from './TableComponent'\n\ninterface TableInputProps {\n  rows: TableRow[]\n  updateCell: (e: ChangeEvent<HTMLInputElement>, rowIndex: number, cellIndex: number) => void\n  removeRow: (index: number) => void\n  removeColumn: (index: number) => void\n}\n\nexport const TableInput = (props: TableInputProps) => {\n  const {rows, updateCell, removeRow, removeColumn} = props\n\n  return (\n    <table style={{width: '100%'}}>\n      <tbody>\n        {rows.map((row, rowIndex) => (\n          <tr key={row._key}>\n            {row.cells.map((cell, cellIndex) => (\n              // Cells are plain strings; the cell position is the only stable identity\n              // eslint-disable-next-line react/no-array-index-key\n              <td key={`${row._key}-${cellIndex}`}>\n                <TextInput\n                  fontSize={1}\n                  padding={3}\n                  value={cell}\n                  onChange={(e) => updateCell(e, rowIndex, cellIndex)}\n                />\n              </td>\n            ))}\n            <td key={`${row._key}-remove`}>\n              <Box marginLeft={1} style={{textAlign: 'center'}}>\n                <Button\n                  icon={RemoveIcon}\n                  padding={2}\n                  onClick={() => removeRow(rowIndex)}\n                  mode=\"bleed\"\n                />\n              </Box>\n            </td>\n          </tr>\n        ))}\n        <tr>\n          {(rows[0]?.cells || []).map((_, i) => (\n            // Cells are plain strings; the column position is the only stable identity\n            // eslint-disable-next-line react/no-array-index-key\n            <td key={i}>\n              <Box marginTop={1} style={{textAlign: 'center'}}>\n                <Button\n                  icon={RemoveIcon}\n                  padding={2}\n                  onClick={() => removeColumn(i)}\n                  mode=\"bleed\"\n                />\n              </Box>\n            </td>\n          ))}\n        </tr>\n      </tbody>\n    </table>\n  )\n}\n","import {AddIcon} from '@sanity/icons/Add'\nimport {ControlsIcon} from '@sanity/icons/Controls'\nimport {WarningOutlineIcon} from '@sanity/icons/WarningOutline'\nimport {Box, Button, Card, Dialog, Inline, type Placement, TextInput} from '@sanity/ui'\nimport {Menu, MenuButton, MenuDivider, MenuItem} from '@sanity/ui/menu'\nimport {type ChangeEventHandler, useState} from 'react'\n\ninterface TableMenuProps {\n  id: string\n  addColumns: (count: number) => void\n  addColumnAt: (index: number) => void\n  addRows: (count: number) => void\n  addRowAt: (index: number) => void\n  remove: () => void\n  placement: Placement\n}\n\nexport const TableMenu = (props: TableMenuProps): React.JSX.Element => {\n  const {id, remove: handleRemove} = props\n  const [dialog, setDialog] = useState<{\n    type: string\n    callback: (count: number) => void\n  } | null>(null)\n\n  // Keep `count` always a string so the TextInput is controlled for the component lifetime.\n  const [count, setCount] = useState<string>('')\n\n  const updateCount: ChangeEventHandler<HTMLInputElement> = (e) => {\n    setCount(e.currentTarget.value)\n  }\n\n  const addRows = () => {\n    setDialog({type: 'rows', callback: (c) => props.addRows(c)})\n    setCount('') // ensure input starts controlled when dialog opens\n  }\n\n  const addRowAt = () => {\n    setDialog({type: 'rows', callback: (index) => props.addRowAt(index)})\n    setCount('')\n  }\n\n  const addColumns = () => {\n    setDialog({\n      type: 'columns',\n      callback: (c) => props.addColumns(c),\n    })\n    setCount('')\n  }\n\n  const addColumnsAt = () => {\n    setDialog({type: 'columns', callback: (index) => props.addColumnAt(index)})\n    setCount('')\n  }\n\n  // The dialog is reused for \"add N rows/columns\" (a count) and \"add at index\"\n  // (a position where 0 is valid), so allow 0 but reject NaN/negative/too-large.\n  const parsedCount = Number.parseInt(count, 10)\n  const isValidCount = Number.isInteger(parsedCount) && parsedCount >= 0 && parsedCount < 100\n\n  const onConfirm = () => {\n    if (!isValidCount) {\n      return\n    }\n    setDialog(null)\n    dialog?.callback(parsedCount)\n    setCount('')\n  }\n\n  return (\n    <>\n      {dialog && (\n        <Dialog\n          header={`Add ${dialog.type}`}\n          id={`${id}-dialog-add`}\n          onClose={() => {\n            setDialog(null)\n            setCount('')\n          }}\n          zOffset={1000}\n        >\n          <Card padding={4}>\n            <TextInput\n              style={{textAlign: 'left'}}\n              fontSize={2}\n              padding={3}\n              type=\"number\"\n              value={count}\n              onChange={updateCount}\n              customValidity={\n                count !== '' && !isValidCount ? 'Enter a whole number from 0 to 99' : undefined\n              }\n            />\n            <Box marginTop={4}>\n              <Inline gap={1} style={{textAlign: 'right'}}>\n                <Button\n                  text=\"Cancel\"\n                  mode=\"ghost\"\n                  onClick={() => {\n                    setDialog(null)\n                    setCount('')\n                  }}\n                />\n                <Button\n                  text=\"Confirm\"\n                  tone=\"critical\"\n                  onClick={onConfirm}\n                  disabled={!isValidCount}\n                />\n              </Inline>\n            </Box>\n          </Card>\n        </Dialog>\n      )}\n      <MenuButton\n        button={<Button icon={ControlsIcon} fontSize={1} padding={2} mode=\"ghost\" />}\n        id={`${id}-menu-button`}\n        menu={\n          <Menu>\n            <MenuItem icon={AddIcon} fontSize={1} text=\"Add Row(s)\" onClick={addRows} />\n            <MenuItem icon={AddIcon} fontSize={1} text=\"Add Row At Index\" onClick={addRowAt} />\n            <MenuItem icon={AddIcon} fontSize={1} text=\"Add Column(s)\" onClick={addColumns} />\n            <MenuItem\n              icon={AddIcon}\n              fontSize={1}\n              text=\"Add Column At Index\"\n              onClick={addColumnsAt}\n            />\n            <MenuDivider />\n            <MenuItem\n              icon={WarningOutlineIcon}\n              fontSize={1}\n              text=\"Remove\"\n              tone=\"critical\"\n              onClick={handleRemove}\n            />\n          </Menu>\n        }\n        popover={{placement: props.placement}}\n      />\n    </>\n  )\n}\n","import {AddIcon} from '@sanity/icons/Add'\nimport {Box, Button, Card, Dialog, Flex, Inline, Text} from '@sanity/ui'\nimport {uuid} from '@sanity/uuid'\nimport {type ChangeEvent, useState} from 'react'\nimport {type ObjectInputProps, set, unset} from 'sanity'\n\nimport {TableInput} from './TableInput'\nimport {TableMenu} from './TableMenu'\n\nconst deepClone: <T>(data: T) => T =\n  globalThis.structuredClone ?? ((data) => JSON.parse(JSON.stringify(data)))\n\nexport interface TableValue {\n  _type?: 'table'\n  rows?: TableRow[]\n}\n\nexport type TableProps = ObjectInputProps<TableValue>\n\nexport type TableRow = {\n  _type: string\n  _key: string\n  cells: string[]\n}\n\n// TODO refactor deepClone stuff to use proper patches\n// TODO use callback all the things\n\nexport const TableComponent = (props: TableProps & {rowType?: string}) => {\n  const {id, rowType = 'tableRow', value, onChange} = props\n  const [dialog, setDialog] = useState<{\n    type: string\n    callback: () => void\n  } | null>(null)\n\n  const updateValue = (v?: Omit<TableValue, '_type'>) => {\n    return onChange(set(v))\n  }\n\n  const resetValue = () => {\n    return onChange(unset())\n  }\n\n  const createTable = () => {\n    const newValue: Omit<TableValue, '_type'> = {\n      rows: [\n        {\n          _type: rowType,\n          _key: uuid(),\n          cells: ['', ''],\n        },\n        {\n          _type: rowType,\n          _key: uuid(),\n          cells: ['', ''],\n        },\n      ],\n    }\n    return updateValue({...value, ...newValue})\n  }\n\n  const confirmRemoveTable = () => {\n    setDialog({type: 'table', callback: removeTable})\n  }\n\n  const removeTable = () => {\n    resetValue()\n    setDialog(null)\n  }\n\n  const addRows = (count = 1) => {\n    if (!value?.rows) {\n      return\n    }\n    const newRows = deepClone(value.rows)\n    // Calculate the column count from the first row\n    const columnCount = value.rows[0]?.cells.length ?? 0\n    for (let i = 0; i < count; i++) {\n      // Add as many cells as we have columns\n      newRows.push({\n        _type: rowType,\n        _key: uuid(),\n        cells: Array(columnCount).fill(''),\n      })\n    }\n    return updateValue({...value, rows: newRows})\n  }\n\n  const addRowAt = (index = 0) => {\n    if (!value?.rows) {\n      return\n    }\n    const newRows = deepClone(value.rows)\n    // Calculate the column count from the first row\n    const columnCount = value.rows[0]?.cells.length ?? 0\n\n    newRows.splice(index, 0, {\n      _type: rowType,\n      _key: uuid(),\n      cells: Array(columnCount).fill(''),\n    })\n\n    return updateValue({...value, rows: newRows})\n  }\n\n  const removeRow = (index: number) => {\n    if (!value?.rows) {\n      return\n    }\n    const newRows = deepClone(value.rows)\n    newRows.splice(index, 1)\n    updateValue({...value, rows: newRows})\n    setDialog(null)\n  }\n\n  const confirmRemoveRow = (index: number) => {\n    if (!value?.rows) {\n      return\n    }\n    if (value.rows.length <= 1) return confirmRemoveTable()\n    return setDialog({type: 'row', callback: () => removeRow(index)})\n  }\n\n  const confirmRemoveColumn = (index: number) => {\n    if (!value?.rows) {\n      return\n    }\n    if ((value.rows[0]?.cells.length ?? 0) <= 1) return confirmRemoveTable()\n    return setDialog({type: 'column', callback: () => removeColumn(index)})\n  }\n\n  const addColumns = (count: number) => {\n    if (!value?.rows) {\n      return\n    }\n    const newRows = deepClone(value.rows)\n    // Add a cell to each of the rows\n    newRows.forEach((row) => {\n      for (let j = 0; j < count; j++) {\n        row.cells.push('')\n      }\n    })\n    return updateValue({...value, rows: newRows})\n  }\n\n  const addColumnAt = (index: number) => {\n    if (!value?.rows) {\n      return\n    }\n    const newRows = deepClone(value.rows)\n\n    newRows.forEach((row) => {\n      row.cells.splice(index, 0, '')\n    })\n\n    return updateValue({...value, rows: newRows})\n  }\n\n  const removeColumn = (index: number) => {\n    if (!value?.rows) {\n      return\n    }\n    const newRows = deepClone(value.rows)\n    newRows.forEach((row) => {\n      row.cells.splice(index, 1)\n    })\n    updateValue({...value, rows: newRows})\n    setDialog(null)\n  }\n\n  const updateCell = (e: ChangeEvent<HTMLInputElement>, rowIndex: number, cellIndex: number) => {\n    if (!value?.rows) {\n      return\n    }\n    const newRows = deepClone(value.rows)\n    const row = newRows[rowIndex]\n    if (!row) {\n      return\n    }\n    row.cells[cellIndex] = e.currentTarget.value\n    return updateValue({...value, rows: newRows})\n  }\n\n  return (\n    <div>\n      {dialog && (\n        <Dialog\n          header={`Remove ${dialog.type}`}\n          id={`${id}-dialog-remove`}\n          onClose={() => setDialog(null)}\n          zOffset={1000}\n        >\n          <Card padding={4}>\n            <Text>Are you sure you want to remove this {dialog.type}?</Text>\n            <Box marginTop={4}>\n              <Inline gap={1} style={{textAlign: 'right'}}>\n                <Button text=\"Cancel\" mode=\"ghost\" onClick={() => setDialog(null)} />\n                <Button text=\"Confirm\" tone=\"critical\" onClick={() => dialog.callback()} />\n              </Inline>\n            </Box>\n          </Card>\n        </Dialog>\n      )}\n      <Box>\n        <Flex justify=\"flex-end\">\n          {value?.rows?.length ? (\n            <Inline gap={1}>\n              <Button\n                fontSize={1}\n                padding={2}\n                icon={AddIcon}\n                text=\"Add row\"\n                mode=\"ghost\"\n                onClick={() => addRows(1)}\n              />\n              <Button\n                fontSize={1}\n                padding={2}\n                icon={AddIcon}\n                text=\"Add column\"\n                mode=\"ghost\"\n                onClick={() => addColumns(1)}\n              />\n              <TableMenu\n                id={id}\n                addColumns={addColumns}\n                addColumnAt={addColumnAt}\n                addRows={addRows}\n                addRowAt={addRowAt}\n                remove={confirmRemoveTable}\n                placement=\"left\"\n              />\n            </Inline>\n          ) : null}\n        </Flex>\n      </Box>\n      {value?.rows?.length ? (\n        <TableInput\n          rows={value.rows}\n          removeRow={confirmRemoveRow}\n          removeColumn={confirmRemoveColumn}\n          updateCell={updateCell}\n        />\n      ) : null}\n      {!value || !value?.rows?.length ? (\n        <Inline gap={1}>\n          <Button\n            fontSize={1}\n            padding={3}\n            icon={AddIcon}\n            text=\"Create Table\"\n            tone=\"primary\"\n            mode=\"ghost\"\n            onClick={createTable}\n          />\n        </Inline>\n      ) : null}\n    </div>\n  )\n}\n\nexport function createTableComponent(rowType: string) {\n  return function Table(props: TableProps) {\n    return <TableComponent {...props} rowType={rowType} />\n  }\n}\n","export function TableIcon() {\n  return (\n    <svg\n      width=\"1em\"\n      height=\"1em\"\n      viewBox=\"0 0 25 25\"\n      fill=\"none\"\n      stroke=\"currentColor\"\n      strokeWidth=\"1.2\"\n    >\n      <path d=\"M3 3h18v18H3zM21 9H3M21 15H3M12 3v18\" />\n    </svg>\n  )\n}\n","import {Box, Card, Grid, Inline, Label, Text} from '@sanity/ui'\nimport type {PreviewProps} from 'sanity'\n\nimport type {TableRow} from './TableComponent'\nimport {TableIcon} from './TableIcon'\n\ninterface TablePreviewProps extends PreviewProps {\n  rows?: TableRow[]\n}\n\nconst Table = ({rows}: {rows: TableRow[]}) => {\n  const numCols = rows[0]?.cells.length ?? 0\n\n  return (\n    <Grid gridTemplateColumns={numCols} padding={2}>\n      {rows.map((row) =>\n        row.cells.map((cell, i) => (\n          // Cells are plain strings; the cell position is the only stable identity\n          // eslint-disable-next-line react/no-array-index-key\n          <Card key={row._key + i} padding={2} style={{outline: '1px solid #DFE2E9'}}>\n            <Text textOverflow=\"ellipsis\">{cell}</Text>\n          </Card>\n        )),\n      )}\n    </Grid>\n  )\n}\n\nexport const TablePreview = (props: TablePreviewProps) => {\n  const {schemaType, rows = [], title} = props\n  const previewTitle = schemaType?.title ?? (typeof title === 'string' ? title : 'Title missing')\n\n  return (\n    <>\n      <Box padding={3}>\n        <Inline gap={3}>\n          <Card>\n            <Label size={4}>\n              <TableIcon />\n            </Label>\n          </Card>\n          <Card>\n            <Text>{previewTitle}</Text>\n          </Card>\n        </Inline>\n      </Box>\n      <Box padding={2}>\n        {rows.length === 0 ? <Label muted>Empty Table</Label> : <Table rows={rows} />}\n      </Box>\n    </>\n  )\n}\n","import '@sanity/ui/styles.css'\nimport {definePlugin, defineType} from 'sanity'\n\nimport {createTableComponent, TableComponent} from './components/TableComponent'\nimport {TablePreview} from './components/TablePreview'\nexport type {TableProps, TableRow, TableValue} from './components/TableComponent'\n\nexport {TableComponent, TablePreview}\n\nexport interface TableConfig {\n  rowType?: string\n}\n\nexport const table = definePlugin<TableConfig | void>((config) => {\n  const tableRowSchema = defineType({\n    title: 'Table Row',\n    name: config?.rowType || 'tableRow',\n    type: 'object',\n    fields: [\n      {\n        name: 'cells',\n        type: 'array',\n        of: [{type: 'string'}],\n      },\n    ],\n  })\n\n  const tableSchema = defineType({\n    title: 'Table',\n    name: 'table',\n    type: 'object',\n    fields: [\n      {\n        name: 'rows',\n        type: 'array',\n        of: [\n          {\n            type: tableRowSchema.name,\n          },\n        ],\n      },\n    ],\n    components: {\n      input: createTableComponent(tableRowSchema.name),\n      preview: TablePreview,\n    },\n    preview: {\n      select: {\n        rows: 'rows',\n        title: 'title',\n      },\n      prepare: ({title, rows = []}) => ({\n        title,\n        rows,\n      }),\n    },\n  })\n\n  return {\n    name: 'table',\n    schema: {\n      types: [tableRowSchema, tableSchema],\n    },\n  }\n})\n"],"mappings":"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"}
\ No newline at end of file