@atelier-ui/react 0.0.6 → 0.0.8

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atelier-ui/react",
3
- "version": "0.0.6",
3
+ "version": "0.0.8",
4
4
  "description": "Atelier UI component library for React — LLM-optimised, accessible, design-token-driven",
5
5
  "keywords": [
6
6
  "react",
package/src/index.d.ts CHANGED
@@ -16,6 +16,7 @@ export * from './lib/radio-group/llm-radio-group';
16
16
  export * from './lib/radio/llm-radio';
17
17
  export * from './lib/select/llm-select';
18
18
  export * from './lib/skeleton/llm-skeleton';
19
+ export * from './lib/table/llm-table';
19
20
  export * from './lib/tabs/llm-tabs';
20
21
  export * from './lib/textarea/llm-textarea';
21
22
  export * from './lib/toast/llm-toast';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../libs/react/src/index.ts"],"names":[],"mappings":"AAAA,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mCAAmC,CAAC;AAClD,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iCAAiC,CAAC;AAChD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,mCAAmC,CAAC;AAClD,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,2BAA2B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../libs/react/src/index.ts"],"names":[],"mappings":"AAAA,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mCAAmC,CAAC;AAClD,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iCAAiC,CAAC;AAChD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,mCAAmC,CAAC;AAClD,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,2BAA2B,CAAC"}
package/src/index.js CHANGED
@@ -16,6 +16,7 @@ export * from './lib/radio-group/llm-radio-group';
16
16
  export * from './lib/radio/llm-radio';
17
17
  export * from './lib/select/llm-select';
18
18
  export * from './lib/skeleton/llm-skeleton';
19
+ export * from './lib/table/llm-table';
19
20
  export * from './lib/tabs/llm-tabs';
20
21
  export * from './lib/textarea/llm-textarea';
21
22
  export * from './lib/toast/llm-toast';
package/src/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../libs/react/src/index.ts"],"names":[],"mappings":"AAAA,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mCAAmC,CAAC;AAClD,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iCAAiC,CAAC;AAChD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,mCAAmC,CAAC;AAClD,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,2BAA2B,CAAC","sourcesContent":["export * from './lib/accordion/llm-accordion';\nexport * from './lib/alert/llm-alert';\nexport * from './lib/avatar/llm-avatar';\nexport * from './lib/badge/llm-badge';\nexport * from './lib/breadcrumbs/llm-breadcrumbs';\nexport * from './lib/button/llm-button';\nexport * from './lib/card/llm-card';\nexport * from './lib/checkbox/llm-checkbox';\nexport * from './lib/dialog/llm-dialog';\nexport * from './lib/drawer/llm-drawer';\nexport * from './lib/input/llm-input';\nexport * from './lib/menu/llm-menu';\nexport * from './lib/pagination/llm-pagination';\nexport * from './lib/progress/llm-progress';\nexport * from './lib/radio-group/llm-radio-group';\nexport * from './lib/radio/llm-radio';\nexport * from './lib/select/llm-select';\nexport * from './lib/skeleton/llm-skeleton';\nexport * from './lib/tabs/llm-tabs';\nexport * from './lib/textarea/llm-textarea';\nexport * from './lib/toast/llm-toast';\nexport * from './lib/toggle/llm-toggle';\nexport * from './lib/tooltip/llm-tooltip';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../libs/react/src/index.ts"],"names":[],"mappings":"AAAA,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mCAAmC,CAAC;AAClD,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iCAAiC,CAAC;AAChD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,mCAAmC,CAAC;AAClD,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,2BAA2B,CAAC","sourcesContent":["export * from './lib/accordion/llm-accordion';\nexport * from './lib/alert/llm-alert';\nexport * from './lib/avatar/llm-avatar';\nexport * from './lib/badge/llm-badge';\nexport * from './lib/breadcrumbs/llm-breadcrumbs';\nexport * from './lib/button/llm-button';\nexport * from './lib/card/llm-card';\nexport * from './lib/checkbox/llm-checkbox';\nexport * from './lib/dialog/llm-dialog';\nexport * from './lib/drawer/llm-drawer';\nexport * from './lib/input/llm-input';\nexport * from './lib/menu/llm-menu';\nexport * from './lib/pagination/llm-pagination';\nexport * from './lib/progress/llm-progress';\nexport * from './lib/radio-group/llm-radio-group';\nexport * from './lib/radio/llm-radio';\nexport * from './lib/select/llm-select';\nexport * from './lib/skeleton/llm-skeleton';\nexport * from './lib/table/llm-table';\nexport * from './lib/tabs/llm-tabs';\nexport * from './lib/textarea/llm-textarea';\nexport * from './lib/toast/llm-toast';\nexport * from './lib/toggle/llm-toggle';\nexport * from './lib/tooltip/llm-tooltip';\n"]}
@@ -0,0 +1,33 @@
1
+ import { HTMLAttributes, ReactNode, TdHTMLAttributes, ThHTMLAttributes } from 'react';
2
+ import type { LlmTableSpec, LlmTbodySpec, LlmTrSpec, LlmThSpec, LlmTdSpec, LlmSortDirection } from '@atelier-ui/spec';
3
+ import './llm-table.css';
4
+ export type { LlmSortDirection };
5
+ export interface LlmTableProps extends HTMLAttributes<HTMLDivElement>, LlmTableSpec {
6
+ children?: ReactNode;
7
+ }
8
+ export declare function LlmTable({ variant, size, stickyHeader, children, className, ...rest }: LlmTableProps): import("react/jsx-runtime").JSX.Element;
9
+ export interface LlmTheadProps {
10
+ children?: ReactNode;
11
+ }
12
+ export declare function LlmThead({ children }: LlmTheadProps): import("react/jsx-runtime").JSX.Element;
13
+ export interface LlmTbodyProps extends LlmTbodySpec {
14
+ children?: ReactNode;
15
+ /** Content shown in place of rows when empty=true. */
16
+ emptyContent?: ReactNode;
17
+ }
18
+ export declare function LlmTbody({ empty, colSpan, children, emptyContent }: LlmTbodyProps): import("react/jsx-runtime").JSX.Element;
19
+ export interface LlmTrProps extends LlmTrSpec {
20
+ children?: ReactNode;
21
+ onSelectedChange?: (selected: boolean) => void;
22
+ }
23
+ export declare function LlmTr({ selected, selectable, children, onSelectedChange, }: LlmTrProps): import("react/jsx-runtime").JSX.Element;
24
+ export interface LlmThProps extends Omit<ThHTMLAttributes<HTMLTableCellElement>, 'align'>, LlmThSpec {
25
+ children?: ReactNode;
26
+ onSort?: (direction: LlmSortDirection) => void;
27
+ }
28
+ export declare function LlmTh({ sortable, sortDirection, align, width, children, onSort, className, ...rest }: LlmThProps): import("react/jsx-runtime").JSX.Element;
29
+ export interface LlmTdProps extends Omit<TdHTMLAttributes<HTMLTableCellElement>, 'align'>, LlmTdSpec {
30
+ children?: ReactNode;
31
+ }
32
+ export declare function LlmTd({ align, children, className, ...rest }: LlmTdProps): import("react/jsx-runtime").JSX.Element;
33
+ //# sourceMappingURL=llm-table.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm-table.d.ts","sourceRoot":"","sources":["../../../../../../libs/react/src/lib/table/llm-table.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAC;AACtF,OAAO,KAAK,EACV,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,SAAS,EACT,SAAS,EACT,gBAAgB,EACjB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,iBAAiB,CAAC;AAEzB,YAAY,EAAE,gBAAgB,EAAE,CAAC;AAMjC,MAAM,WAAW,aAAc,SAAQ,cAAc,CAAC,cAAc,CAAC,EAAE,YAAY;IACjF,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,wBAAgB,QAAQ,CAAC,EACvB,OAAmB,EACnB,IAAW,EACX,YAAoB,EACpB,QAAQ,EACR,SAAS,EACT,GAAG,IAAI,EACR,EAAE,aAAa,2CAkBf;AAMD,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,wBAAgB,QAAQ,CAAC,EAAE,QAAQ,EAAE,EAAE,aAAa,2CAEnD;AAMD,MAAM,WAAW,aAAc,SAAQ,YAAY;IACjD,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,sDAAsD;IACtD,YAAY,CAAC,EAAE,SAAS,CAAC;CAC1B;AAED,wBAAgB,QAAQ,CAAC,EAAE,KAAa,EAAE,OAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,EAAE,aAAa,2CAc7F;AAMD,MAAM,WAAW,UAAW,SAAQ,SAAS;IAC3C,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;CAChD;AAED,wBAAgB,KAAK,CAAC,EACpB,QAAgB,EAChB,UAAkB,EAClB,QAAQ,EACR,gBAAgB,GACjB,EAAE,UAAU,2CAWZ;AAMD,MAAM,WAAW,UAAW,SAAQ,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,EAAE,OAAO,CAAC,EAAE,SAAS;IAClG,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,gBAAgB,KAAK,IAAI,CAAC;CAChD;AAED,wBAAgB,KAAK,CAAC,EACpB,QAAgB,EAChB,aAAoB,EACpB,KAAe,EACf,KAAK,EACL,QAAQ,EACR,MAAM,EACN,SAAS,EACT,GAAG,IAAI,EACR,EAAE,UAAU,2CAoDZ;AAMD,MAAM,WAAW,UAAW,SAAQ,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,EAAE,OAAO,CAAC,EAAE,SAAS;IAClG,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,wBAAgB,KAAK,CAAC,EAAE,KAAe,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,EAAE,UAAU,2CAOlF"}
@@ -0,0 +1,52 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { LlmCheckbox } from '../checkbox/llm-checkbox';
3
+ import './llm-table.css';
4
+ export function LlmTable({ variant = 'default', size = 'md', stickyHeader = false, children, className, ...rest }) {
5
+ const classes = [
6
+ 'llm-table',
7
+ `variant-${variant}`,
8
+ `size-${size}`,
9
+ stickyHeader && 'is-sticky-header',
10
+ className,
11
+ ]
12
+ .filter(Boolean)
13
+ .join(' ');
14
+ return (_jsx("div", { className: classes, ...rest, children: _jsx("div", { className: "llm-table-wrapper", children: _jsx("table", { children: children }) }) }));
15
+ }
16
+ export function LlmThead({ children }) {
17
+ return _jsx("thead", { children: children });
18
+ }
19
+ export function LlmTbody({ empty = false, colSpan = 1, children, emptyContent }) {
20
+ return (_jsx("tbody", { children: !empty ? (children) : (_jsx("tr", { children: _jsx("td", { colSpan: colSpan, className: "llm-tbody-empty-cell", children: emptyContent }) })) }));
21
+ }
22
+ export function LlmTr({ selected = false, selectable = false, children, onSelectedChange, }) {
23
+ return (_jsxs("tr", { "aria-selected": selectable ? selected : undefined, className: selected ? 'is-selected' : undefined, children: [selectable && (_jsx("td", { className: "llm-tr-select-cell", children: _jsx(LlmCheckbox, { checked: selected, onCheckedChange: onSelectedChange }) })), children] }));
24
+ }
25
+ export function LlmTh({ sortable = false, sortDirection = null, align = 'start', width, children, onSort, className, ...rest }) {
26
+ const classes = [
27
+ `align-${align}`,
28
+ sortDirection && 'is-sorted',
29
+ sortDirection === 'asc' && 'sort-asc',
30
+ sortDirection === 'desc' && 'sort-desc',
31
+ className,
32
+ ]
33
+ .filter(Boolean)
34
+ .join(' ') || undefined;
35
+ const ariaSort = sortable
36
+ ? sortDirection === 'asc'
37
+ ? 'ascending'
38
+ : sortDirection === 'desc'
39
+ ? 'descending'
40
+ : 'none'
41
+ : undefined;
42
+ function cycleSort() {
43
+ const next = sortDirection === null ? 'asc' : sortDirection === 'asc' ? 'desc' : null;
44
+ onSort?.(next);
45
+ }
46
+ return (_jsx("th", { "aria-sort": ariaSort, style: width ? { width } : undefined, className: classes, ...rest, children: sortable ? (_jsxs("button", { type: "button", className: "llm-th-sort-btn", onClick: cycleSort, children: [children, _jsxs("svg", { className: "llm-th-sort-icon", "aria-hidden": "true", width: "12", height: "16", viewBox: "0 0 12 16", fill: "none", children: [_jsx("path", { className: "llm-th-sort-asc-arrow", d: "M6 2L11 8H1L6 2Z", fill: "currentColor" }), _jsx("path", { className: "llm-th-sort-desc-arrow", d: "M6 14L1 8H11L6 14Z", fill: "currentColor" })] })] })) : (children) }));
47
+ }
48
+ export function LlmTd({ align = 'start', children, className, ...rest }) {
49
+ const classes = [`align-${align}`, className].filter(Boolean).join(' ');
50
+ return (_jsx("td", { className: classes, ...rest, children: children }));
51
+ }
52
+ //# sourceMappingURL=llm-table.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm-table.js","sourceRoot":"","sources":["../../../../../../libs/react/src/lib/table/llm-table.tsx"],"names":[],"mappings":"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","sourcesContent":["import { HTMLAttributes, ReactNode, TdHTMLAttributes, ThHTMLAttributes } from 'react';\nimport type {\n LlmTableSpec,\n LlmTbodySpec,\n LlmTrSpec,\n LlmThSpec,\n LlmTdSpec,\n LlmSortDirection,\n} from '@atelier-ui/spec';\nimport { LlmCheckbox } from '../checkbox/llm-checkbox';\nimport './llm-table.css';\n\nexport type { LlmSortDirection };\n\n// ---------------------------------------------------------------------------\n// LlmTable\n// ---------------------------------------------------------------------------\n\nexport interface LlmTableProps extends HTMLAttributes<HTMLDivElement>, LlmTableSpec {\n children?: ReactNode;\n}\n\nexport function LlmTable({\n variant = 'default',\n size = 'md',\n stickyHeader = false,\n children,\n className,\n ...rest\n}: LlmTableProps) {\n const classes = [\n 'llm-table',\n `variant-${variant}`,\n `size-${size}`,\n stickyHeader && 'is-sticky-header',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={classes} {...rest}>\n <div className=\"llm-table-wrapper\">\n <table>{children}</table>\n </div>\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------\n// LlmThead\n// ---------------------------------------------------------------------------\n\nexport interface LlmTheadProps {\n children?: ReactNode;\n}\n\nexport function LlmThead({ children }: LlmTheadProps) {\n return <thead>{children}</thead>;\n}\n\n// ---------------------------------------------------------------------------\n// LlmTbody\n// ---------------------------------------------------------------------------\n\nexport interface LlmTbodyProps extends LlmTbodySpec {\n children?: ReactNode;\n /** Content shown in place of rows when empty=true. */\n emptyContent?: ReactNode;\n}\n\nexport function LlmTbody({ empty = false, colSpan = 1, children, emptyContent }: LlmTbodyProps) {\n return (\n <tbody>\n {!empty ? (\n children\n ) : (\n <tr>\n <td colSpan={colSpan} className=\"llm-tbody-empty-cell\">\n {emptyContent}\n </td>\n </tr>\n )}\n </tbody>\n );\n}\n\n// ---------------------------------------------------------------------------\n// LlmTr\n// ---------------------------------------------------------------------------\n\nexport interface LlmTrProps extends LlmTrSpec {\n children?: ReactNode;\n onSelectedChange?: (selected: boolean) => void;\n}\n\nexport function LlmTr({\n selected = false,\n selectable = false,\n children,\n onSelectedChange,\n}: LlmTrProps) {\n return (\n <tr aria-selected={selectable ? selected : undefined} className={selected ? 'is-selected' : undefined}>\n {selectable && (\n <td className=\"llm-tr-select-cell\">\n <LlmCheckbox checked={selected} onCheckedChange={onSelectedChange} />\n </td>\n )}\n {children}\n </tr>\n );\n}\n\n// ---------------------------------------------------------------------------\n// LlmTh\n// ---------------------------------------------------------------------------\n\nexport interface LlmThProps extends Omit<ThHTMLAttributes<HTMLTableCellElement>, 'align'>, LlmThSpec {\n children?: ReactNode;\n onSort?: (direction: LlmSortDirection) => void;\n}\n\nexport function LlmTh({\n sortable = false,\n sortDirection = null,\n align = 'start',\n width,\n children,\n onSort,\n className,\n ...rest\n}: LlmThProps) {\n const classes = [\n `align-${align}`,\n sortDirection && 'is-sorted',\n sortDirection === 'asc' && 'sort-asc',\n sortDirection === 'desc' && 'sort-desc',\n className,\n ]\n .filter(Boolean)\n .join(' ') || undefined;\n\n const ariaSort = sortable\n ? sortDirection === 'asc'\n ? 'ascending'\n : sortDirection === 'desc'\n ? 'descending'\n : 'none'\n : undefined;\n\n function cycleSort() {\n const next: LlmSortDirection =\n sortDirection === null ? 'asc' : sortDirection === 'asc' ? 'desc' : null;\n onSort?.(next);\n }\n\n return (\n <th\n aria-sort={ariaSort}\n style={width ? { width } : undefined}\n className={classes}\n {...rest}\n >\n {sortable ? (\n <button type=\"button\" className=\"llm-th-sort-btn\" onClick={cycleSort}>\n {children}\n <svg\n className=\"llm-th-sort-icon\"\n aria-hidden=\"true\"\n width=\"12\"\n height=\"16\"\n viewBox=\"0 0 12 16\"\n fill=\"none\"\n >\n <path className=\"llm-th-sort-asc-arrow\" d=\"M6 2L11 8H1L6 2Z\" fill=\"currentColor\" />\n <path className=\"llm-th-sort-desc-arrow\" d=\"M6 14L1 8H11L6 14Z\" fill=\"currentColor\" />\n </svg>\n </button>\n ) : (\n children\n )}\n </th>\n );\n}\n\n// ---------------------------------------------------------------------------\n// LlmTd\n// ---------------------------------------------------------------------------\n\nexport interface LlmTdProps extends Omit<TdHTMLAttributes<HTMLTableCellElement>, 'align'>, LlmTdSpec {\n children?: ReactNode;\n}\n\nexport function LlmTd({ align = 'start', children, className, ...rest }: LlmTdProps) {\n const classes = [`align-${align}`, className].filter(Boolean).join(' ');\n return (\n <td className={classes} {...rest}>\n {children}\n </td>\n );\n}\n"]}