@multiplatform.one/table-primitives 7.7.6 → 7.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/index.cjs +46 -1
- package/dist/cjs/index.native.js +48 -1
- package/dist/cjs/index.native.js.map +1 -1
- package/dist/cjs/tableCellContext.native.js.map +1 -1
- package/dist/cjs/textRidesText.native.js.map +1 -1
- package/dist/esm/index.mjs +46 -1
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/index.native.js +48 -1
- package/dist/esm/index.native.js.map +1 -1
- package/dist/esm/tableCellContext.native.js.map +1 -1
- package/dist/esm/textRidesText.native.js.map +1 -1
- package/dist/jsx/index.js +46 -1
- package/dist/jsx/index.js.map +1 -1
- package/dist/jsx/index.mjs +46 -1
- package/dist/jsx/index.mjs.map +1 -1
- package/dist/jsx/index.native.js +48 -1
- package/dist/jsx/index.native.js.map +1 -1
- package/package.json +5 -4
- package/src/TableCaption.stories.tsx +64 -0
- package/src/TableCardsList.stories.tsx +42 -0
- package/src/TableCellContext.stories.tsx +58 -0
- package/src/TableFoot.stories.tsx +64 -0
- package/src/index.tsx +35 -2
- package/src/table.spec.tsx +89 -1
- package/types/index.d.ts.map +1 -1
package/src/index.tsx
CHANGED
|
@@ -476,8 +476,16 @@ function TableCardsList({
|
|
|
476
476
|
...viewProps
|
|
477
477
|
} = props;
|
|
478
478
|
|
|
479
|
+
const motion = knobProps.transition ? { transition: knobProps.transition } : {};
|
|
479
480
|
return (
|
|
480
|
-
<ThemeableStack
|
|
481
|
+
<ThemeableStack
|
|
482
|
+
flexDirection="column"
|
|
483
|
+
{...knobProps.gap}
|
|
484
|
+
{...motion}
|
|
485
|
+
testID="table-cards"
|
|
486
|
+
{...({ "data-animation": knobProps.transition ? "on" : "none" } as Record<string, unknown>)}
|
|
487
|
+
{...viewProps}
|
|
488
|
+
>
|
|
481
489
|
{caption != null &&
|
|
482
490
|
(typeof caption === "string" || typeof caption === "number" ? (
|
|
483
491
|
<SizableText fontSize={knobProps.sizeToken as FontSizeTokens} color="$color10">
|
|
@@ -494,6 +502,7 @@ function TableCardsList({
|
|
|
494
502
|
{...knobProps.surface}
|
|
495
503
|
{...knobProps.cardSurface}
|
|
496
504
|
elevation={knobProps.elevation}
|
|
505
|
+
{...motion}
|
|
497
506
|
borderColor="$color6"
|
|
498
507
|
{...(row.intent ? { backgroundColor: "$color3" as const } : {})}
|
|
499
508
|
>
|
|
@@ -511,7 +520,7 @@ function TableCardsList({
|
|
|
511
520
|
<SizableText
|
|
512
521
|
fontSize={knobProps.sizeToken as FontSizeTokens}
|
|
513
522
|
fontWeight="500"
|
|
514
|
-
color=
|
|
523
|
+
color={knobProps.textAccentColor}
|
|
515
524
|
width="40%"
|
|
516
525
|
flexShrink={0}
|
|
517
526
|
>
|
|
@@ -555,6 +564,7 @@ function ThemedTableComp({ layout = "table", ...props }: ThemedTableProps) {
|
|
|
555
564
|
return <TableCardsList {...props} />;
|
|
556
565
|
}
|
|
557
566
|
|
|
567
|
+
const motion = knobProps.transition ? { transition: knobProps.transition } : {};
|
|
558
568
|
return (
|
|
559
569
|
<TableComp
|
|
560
570
|
// Table frames are R-OUTER + SF-CARD-tier surface (theme-propagation-spec
|
|
@@ -565,9 +575,11 @@ function ThemedTableComp({ layout = "table", ...props }: ThemedTableProps) {
|
|
|
565
575
|
{...(knobProps.outlined ? { backgroundColor: "transparent" as const } : null)}
|
|
566
576
|
borderWidth={resolvedBorderWidth}
|
|
567
577
|
elevation={knobProps.elevation}
|
|
578
|
+
{...motion}
|
|
568
579
|
// Size knob sets default row height through the table context; consumer
|
|
569
580
|
// cellHeight (table- or cell-level) still overrides via {...props}.
|
|
570
581
|
cellHeight={knobProps.sizeToken as SizeTokens}
|
|
582
|
+
{...({ "data-animation": knobProps.transition ? "on" : "none" } as Record<string, unknown>)}
|
|
571
583
|
{...props}
|
|
572
584
|
// borderSpacing 0 neutralizes the real <table> UA default (2px gaps
|
|
573
585
|
// between cells) so the migrated element keeps the div-table look.
|
|
@@ -583,6 +595,8 @@ function ThemedTableHead(props: React.ComponentProps<typeof TableHead>) {
|
|
|
583
595
|
}
|
|
584
596
|
|
|
585
597
|
function ThemedRow({ accent, error, warning, success, ...props }: ThemedRowProps) {
|
|
598
|
+
const { knobProps } = useResolvedKnobs();
|
|
599
|
+
const motion = knobProps.transition ? { transition: knobProps.transition } : {};
|
|
586
600
|
const intent = resolveIntent({ accent, error, warning, success } as ThemedRowProps);
|
|
587
601
|
|
|
588
602
|
// Intent rows must not use the plain <Theme> wrapper: on web it renders a
|
|
@@ -595,6 +609,8 @@ function ThemedRow({ accent, error, warning, success, ...props }: ThemedRowProps
|
|
|
595
609
|
// without emitting any wrapper element.
|
|
596
610
|
const row = (
|
|
597
611
|
<Row
|
|
612
|
+
{...motion}
|
|
613
|
+
{...({ "data-animation": knobProps.transition ? "on" : "none" } as Record<string, unknown>)}
|
|
598
614
|
{...(intent
|
|
599
615
|
? {
|
|
600
616
|
backgroundColor: "$color3" as const,
|
|
@@ -651,6 +667,17 @@ function TableCellSurfaceBody({
|
|
|
651
667
|
key={key}
|
|
652
668
|
fontSize={knobProps.sizeToken as FontSizeTokens}
|
|
653
669
|
fontWeight={isHeader ? "600" : undefined}
|
|
670
|
+
// data-chrome: honour textAccent on labels. Body cells stay T-VALUE
|
|
671
|
+
// (inherit), matching SimpleTable's header vs value split (MPO-132).
|
|
672
|
+
{...(isHeader
|
|
673
|
+
? {
|
|
674
|
+
color: knobProps.textAccentColor,
|
|
675
|
+
...({ "data-text-accent": String(knobProps.textAccentColor) } as Record<
|
|
676
|
+
string,
|
|
677
|
+
unknown
|
|
678
|
+
>),
|
|
679
|
+
}
|
|
680
|
+
: {})}
|
|
654
681
|
>
|
|
655
682
|
{label}
|
|
656
683
|
</SizableText>
|
|
@@ -659,9 +686,12 @@ function TableCellSurfaceBody({
|
|
|
659
686
|
|
|
660
687
|
function ThemedCell({ children, style, ...props }: React.ComponentProps<typeof Cell>) {
|
|
661
688
|
const { knobProps } = useResolvedKnobs();
|
|
689
|
+
const motion = knobProps.transition ? { transition: knobProps.transition } : {};
|
|
662
690
|
return (
|
|
663
691
|
<Cell
|
|
664
692
|
{...getTableCellPadding(knobProps.space)}
|
|
693
|
+
{...motion}
|
|
694
|
+
{...({ "data-animation": knobProps.transition ? "on" : "none" } as Record<string, unknown>)}
|
|
665
695
|
{...props}
|
|
666
696
|
// Compose (not replace) the inline style so a consumer style (e.g.
|
|
667
697
|
// sticky pinned cells) keeps the verticalAlign baseline.
|
|
@@ -674,9 +704,12 @@ function ThemedCell({ children, style, ...props }: React.ComponentProps<typeof C
|
|
|
674
704
|
|
|
675
705
|
function ThemedHeaderCell({ children, style, ...props }: React.ComponentProps<typeof HeaderCell>) {
|
|
676
706
|
const { knobProps } = useResolvedKnobs();
|
|
707
|
+
const motion = knobProps.transition ? { transition: knobProps.transition } : {};
|
|
677
708
|
return (
|
|
678
709
|
<HeaderCell
|
|
679
710
|
{...getTableCellPadding(knobProps.space)}
|
|
711
|
+
{...motion}
|
|
712
|
+
{...({ "data-animation": knobProps.transition ? "on" : "none" } as Record<string, unknown>)}
|
|
680
713
|
{...props}
|
|
681
714
|
// Compose (not replace) the inline style so consumer styles (sticky
|
|
682
715
|
// pinned headers) keep the real-<th> UA neutralizers (bold/centered).
|
package/src/table.spec.tsx
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Table primitives tests
|
|
2
|
+
* Table primitives tests — semantic HTML, knobs, data-chrome animation / textAccent.
|
|
3
3
|
*
|
|
4
4
|
* Note: tamagui 2.0.0-rc derives the DOM element from the `render` prop —
|
|
5
5
|
* the primitives emit REAL <table>/<thead>/<tbody>/<tfoot>/<tr>/<th>/<td>/
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
9
|
import { renderWithProviders } from "@multiplatform.one/test-utils";
|
|
10
|
+
import { Preset } from "@multiplatform.one/theme";
|
|
10
11
|
import { describe, expect, it } from "vitest";
|
|
11
12
|
import { Table } from "./index";
|
|
12
13
|
|
|
@@ -203,4 +204,91 @@ describe("Table Primitives", () => {
|
|
|
203
204
|
expect(getByText("F1")).toBeDefined();
|
|
204
205
|
expect(getByText("F2")).toBeDefined();
|
|
205
206
|
});
|
|
207
|
+
|
|
208
|
+
it("honours animation on the frame, row and cell (data-chrome)", () => {
|
|
209
|
+
const { container: none } = renderWithProviders(
|
|
210
|
+
<Preset overrides={{ animation: "none" }}>
|
|
211
|
+
<Table>
|
|
212
|
+
<Table.Head>
|
|
213
|
+
<Table.Row>
|
|
214
|
+
<Table.HeaderCell>H</Table.HeaderCell>
|
|
215
|
+
</Table.Row>
|
|
216
|
+
</Table.Head>
|
|
217
|
+
<Table.Body>
|
|
218
|
+
<Table.Row>
|
|
219
|
+
<Table.Cell>C</Table.Cell>
|
|
220
|
+
</Table.Row>
|
|
221
|
+
</Table.Body>
|
|
222
|
+
</Table>
|
|
223
|
+
</Preset>,
|
|
224
|
+
);
|
|
225
|
+
const { container: bouncy } = renderWithProviders(
|
|
226
|
+
<Preset overrides={{ animation: "bouncy" }}>
|
|
227
|
+
<Table>
|
|
228
|
+
<Table.Head>
|
|
229
|
+
<Table.Row>
|
|
230
|
+
<Table.HeaderCell>H</Table.HeaderCell>
|
|
231
|
+
</Table.Row>
|
|
232
|
+
</Table.Head>
|
|
233
|
+
<Table.Body>
|
|
234
|
+
<Table.Row>
|
|
235
|
+
<Table.Cell>C</Table.Cell>
|
|
236
|
+
</Table.Row>
|
|
237
|
+
</Table.Body>
|
|
238
|
+
</Table>
|
|
239
|
+
</Preset>,
|
|
240
|
+
);
|
|
241
|
+
|
|
242
|
+
expect(none.querySelector("table")?.getAttribute("data-animation")).toBe("none");
|
|
243
|
+
expect(bouncy.querySelector("table")?.getAttribute("data-animation")).toBe("on");
|
|
244
|
+
expect(none.querySelector("tr")?.getAttribute("data-animation")).toBe("none");
|
|
245
|
+
expect(bouncy.querySelector("tr")?.getAttribute("data-animation")).toBe("on");
|
|
246
|
+
expect(none.querySelector("td")?.getAttribute("data-animation")).toBe("none");
|
|
247
|
+
expect(bouncy.querySelector("td")?.getAttribute("data-animation")).toBe("on");
|
|
248
|
+
});
|
|
249
|
+
|
|
250
|
+
it("honours textAccent on header labels and leaves body cells as T-VALUE", () => {
|
|
251
|
+
const { container: high } = renderWithProviders(
|
|
252
|
+
<Preset overrides={{ textAccent: "high" }}>
|
|
253
|
+
<Table>
|
|
254
|
+
<Table.Head>
|
|
255
|
+
<Table.Row>
|
|
256
|
+
<Table.HeaderCell>Name</Table.HeaderCell>
|
|
257
|
+
</Table.Row>
|
|
258
|
+
</Table.Head>
|
|
259
|
+
<Table.Body>
|
|
260
|
+
<Table.Row>
|
|
261
|
+
<Table.Cell>Ada</Table.Cell>
|
|
262
|
+
</Table.Row>
|
|
263
|
+
</Table.Body>
|
|
264
|
+
</Table>
|
|
265
|
+
</Preset>,
|
|
266
|
+
);
|
|
267
|
+
const { container: low } = renderWithProviders(
|
|
268
|
+
<Preset overrides={{ textAccent: "low" }}>
|
|
269
|
+
<Table>
|
|
270
|
+
<Table.Head>
|
|
271
|
+
<Table.Row>
|
|
272
|
+
<Table.HeaderCell>Name</Table.HeaderCell>
|
|
273
|
+
</Table.Row>
|
|
274
|
+
</Table.Head>
|
|
275
|
+
<Table.Body>
|
|
276
|
+
<Table.Row>
|
|
277
|
+
<Table.Cell>Ada</Table.Cell>
|
|
278
|
+
</Table.Row>
|
|
279
|
+
</Table.Body>
|
|
280
|
+
</Table>
|
|
281
|
+
</Preset>,
|
|
282
|
+
);
|
|
283
|
+
|
|
284
|
+
const headerHigh = high
|
|
285
|
+
.querySelector("th [data-text-accent]")
|
|
286
|
+
?.getAttribute("data-text-accent");
|
|
287
|
+
const headerLow = low.querySelector("th [data-text-accent]")?.getAttribute("data-text-accent");
|
|
288
|
+
expect(headerHigh).toBeTruthy();
|
|
289
|
+
expect(headerLow).toBeTruthy();
|
|
290
|
+
expect(headerHigh).not.toBe(headerLow);
|
|
291
|
+
expect(high.querySelector("td [data-text-accent]")).toBeNull();
|
|
292
|
+
expect(low.querySelector("td [data-text-accent]")).toBeNull();
|
|
293
|
+
});
|
|
206
294
|
});
|
package/types/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,KAAK,EAAkB,UAAU,EAAE,MAAM,SAAS,CAAC;AAY1D,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC7F,YAAY,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAEhE,KAAK,UAAU,GAAG;IAChB,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,KAAK,CAAC;IAC9B,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,KAAK,CAAC;CAC/B,CAAC;AA6BF;;;;;;;;;;GAUG;AAEH,uBAAuB;AACvB,QAAA,MAAM,GAAG;;;;;;;;;;6CAsBP,CAAC;AAEH,QAAA,MAAM,IAAI;;;;;;;;;;;;;6CA4DR,CAAC;AAEH,QAAA,MAAM,UAAU;;;;;;;;;;;;;6CA6Dd,CAAC;AAEH,QAAA,MAAM,SAAS;;;;;;;;;6CAyBb,CAAC;AAEH,QAAA,MAAM,SAAS;;;;;;;;;6CAmBb,CAAC;AAEH,QAAA,MAAM,SAAS;;;;;;;;;6CAiBb,CAAC;AAEH,QAAA,MAAM,YAAY;;;;;;;;6CAUhB,CAAC;AAEH,QAAA,MAAM,SAAS;;;;;;;;;;;;;6CAsCb,CAAC;AAKH,MAAM,WAAW,cAAe,SAAQ,KAAK,CAAC,cAAc,CAAC,OAAO,GAAG,CAAC;IACtE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAUD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG;IAClD,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;CACzB,CAOA;AAED;;;;;;GAMG;AACH,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"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"}
|