@okta/odyssey-react-mui 1.14.2 → 1.14.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/DataTable/DataTable.js +330 -0
  3. package/dist/DataTable/DataTable.js.map +1 -0
  4. package/dist/DataTable/DataTableRowActions.js +89 -0
  5. package/dist/DataTable/DataTableRowActions.js.map +1 -0
  6. package/dist/DataTable/DataTableSettings.js +72 -0
  7. package/dist/DataTable/DataTableSettings.js.map +1 -0
  8. package/dist/DataTable/constants.js +14 -0
  9. package/dist/DataTable/constants.js.map +1 -0
  10. package/dist/DataTable/index.js +14 -0
  11. package/dist/DataTable/index.js.map +1 -0
  12. package/dist/DataTable/reorderDataRowsLocally.js +26 -0
  13. package/dist/DataTable/reorderDataRowsLocally.js.map +1 -0
  14. package/dist/DataTable/useRowReordering.js +179 -0
  15. package/dist/DataTable/useRowReordering.js.map +1 -0
  16. package/dist/IconWithTooltip.js +63 -0
  17. package/dist/IconWithTooltip.js.map +1 -0
  18. package/dist/index.js +2 -0
  19. package/dist/index.js.map +1 -1
  20. package/dist/labs/DataFilters.js +42 -14
  21. package/dist/labs/DataFilters.js.map +1 -1
  22. package/dist/labs/DataTable.js +16 -11
  23. package/dist/labs/DataTable.js.map +1 -1
  24. package/dist/labs/index.js +0 -1
  25. package/dist/labs/index.js.map +1 -1
  26. package/dist/properties/ts/odyssey-react-mui.js +18 -1
  27. package/dist/properties/ts/odyssey-react-mui.js.map +1 -1
  28. package/dist/src/DataTable/DataTable.d.ts +133 -0
  29. package/dist/src/DataTable/DataTable.d.ts.map +1 -0
  30. package/dist/src/DataTable/DataTableRowActions.d.ts +30 -0
  31. package/dist/src/DataTable/DataTableRowActions.d.ts.map +1 -0
  32. package/dist/src/DataTable/DataTableSettings.d.ts +27 -0
  33. package/dist/src/DataTable/DataTableSettings.d.ts.map +1 -0
  34. package/dist/src/DataTable/constants.d.ts +13 -0
  35. package/dist/src/DataTable/constants.d.ts.map +1 -0
  36. package/dist/src/DataTable/index.d.ts +15 -0
  37. package/dist/src/DataTable/index.d.ts.map +1 -0
  38. package/dist/src/DataTable/reorderDataRowsLocally.d.ts +26 -0
  39. package/dist/src/DataTable/reorderDataRowsLocally.d.ts.map +1 -0
  40. package/dist/src/DataTable/useRowReordering.d.ts +56 -0
  41. package/dist/src/DataTable/useRowReordering.d.ts.map +1 -0
  42. package/dist/src/IconWithTooltip.d.ts +31 -0
  43. package/dist/src/IconWithTooltip.d.ts.map +1 -0
  44. package/dist/src/OdysseyTranslationProvider.d.ts +1 -1
  45. package/dist/src/OdysseyTranslationProvider.d.ts.map +1 -1
  46. package/dist/src/index.d.ts +2 -0
  47. package/dist/src/index.d.ts.map +1 -1
  48. package/dist/src/labs/DataFilters.d.ts.map +1 -1
  49. package/dist/src/labs/DataTable.d.ts +2 -2
  50. package/dist/src/labs/DataTable.d.ts.map +1 -1
  51. package/dist/src/labs/index.d.ts +0 -1
  52. package/dist/src/labs/index.d.ts.map +1 -1
  53. package/dist/src/properties/ts/odyssey-react-mui.d.ts +18 -1
  54. package/dist/src/properties/ts/odyssey-react-mui.d.ts.map +1 -1
  55. package/dist/src/theme/components.d.ts.map +1 -1
  56. package/dist/theme/components.js +37 -18
  57. package/dist/theme/components.js.map +1 -1
  58. package/dist/tsconfig.production.tsbuildinfo +1 -1
  59. package/package.json +3 -3
  60. package/src/DataTable/DataTable.tsx +538 -0
  61. package/src/DataTable/DataTableRowActions.tsx +124 -0
  62. package/src/DataTable/DataTableSettings.tsx +109 -0
  63. package/src/DataTable/constants.ts +13 -0
  64. package/src/DataTable/index.tsx +22 -0
  65. package/src/DataTable/reorderDataRowsLocally.tsx +48 -0
  66. package/src/DataTable/useRowReordering.tsx +233 -0
  67. package/src/IconWithTooltip.tsx +90 -0
  68. package/src/index.ts +2 -0
  69. package/src/labs/DataFilters.tsx +60 -17
  70. package/src/labs/DataTable.tsx +24 -11
  71. package/src/labs/index.ts +0 -1
  72. package/src/properties/odyssey-react-mui.properties +19 -2
  73. package/src/properties/ts/odyssey-react-mui.ts +1 -1
  74. package/src/theme/components.tsx +43 -16
@@ -30,7 +30,9 @@ import { Button } from "../Button";
30
30
  import {
31
31
  IconButton as MuiIconButton,
32
32
  Menu as MuiMenu,
33
+ MenuItem as MuiMenuItem,
33
34
  Popover as MuiPopover,
35
+ Typography as MuiTypography,
34
36
  } from "@mui/material";
35
37
  import {
36
38
  CheckIcon,
@@ -38,14 +40,14 @@ import {
38
40
  CloseCircleFilledIcon,
39
41
  FilterIcon,
40
42
  } from "../icons.generated";
41
- import { MenuItem } from "../MenuItem";
42
- import { Paragraph, Subordinate } from "../Typography";
43
+ import { Subordinate } from "../Typography";
43
44
  import { TextField } from "../TextField";
44
45
  import { CheckboxGroup } from "../CheckboxGroup";
45
46
  import { Checkbox } from "../Checkbox";
46
47
  import { RadioGroup } from "../RadioGroup";
47
48
  import { Radio } from "../Radio";
48
49
  import { MRT_ColumnDef, MRT_RowData } from "material-react-table";
50
+ import { Trans, useTranslation } from "react-i18next";
49
51
 
50
52
  export type DataFilterValue = string | string[] | undefined;
51
53
 
@@ -128,6 +130,7 @@ const DataFilters = ({
128
130
  filters: filtersProp = [],
129
131
  }: DataFiltersProps) => {
130
132
  const [filters, setFilters] = useState<DataFilter[]>(filtersProp);
133
+ const { t } = useTranslation();
131
134
 
132
135
  const initialInputValues = useMemo(() => {
133
136
  return filtersProp.reduce(
@@ -307,7 +310,7 @@ const DataFilters = ({
307
310
  aria-controls={isFiltersMenuOpen ? "filters-menu" : undefined}
308
311
  aria-expanded={isFiltersMenuOpen ? "true" : undefined}
309
312
  aria-haspopup="true"
310
- ariaLabel="Filters"
313
+ ariaLabel={t("filters.filters.arialabel")}
311
314
  endIcon={<FilterIcon />}
312
315
  onClick={(event) => {
313
316
  setFiltersMenuAnchorElement(event.currentTarget);
@@ -337,13 +340,23 @@ const DataFilters = ({
337
340
  )?.value;
338
341
 
339
342
  return (
340
- <MenuItem
343
+ <MuiMenuItem
341
344
  key={filter.id}
342
345
  onClick={(event) => {
343
346
  setIsFilterPopoverOpen(true);
344
347
  setFilterPopoverAnchorElement(event.currentTarget);
345
348
  setFilterPopoverCurrentFilter(filter);
346
349
  }}
350
+ selected={
351
+ filterPopoverCurrentFilter === filter &&
352
+ isFilterPopoverOpen === true
353
+ }
354
+ className={
355
+ filterPopoverCurrentFilter === filter &&
356
+ isFilterPopoverOpen === true
357
+ ? "isVisiblySelected"
358
+ : undefined
359
+ }
347
360
  >
348
361
  <Box
349
362
  sx={{
@@ -352,29 +365,54 @@ const DataFilters = ({
352
365
  justifyContent: "space-between",
353
366
  width: "100%",
354
367
  minWidth: 180,
368
+ paddingBlock: 1,
369
+ paddingInlineStart: 2,
355
370
  }}
356
371
  >
357
372
  <Box sx={{ marginRight: 2 }}>
358
- <Paragraph component="div">{filter.label}</Paragraph>
373
+ <MuiTypography fontWeight="500" sx={{ marginBlockEnd: 2 }}>
374
+ {filter.label}
375
+ </MuiTypography>
359
376
  <Subordinate component="div">
360
377
  {!latestFilterValue ||
361
378
  (Array.isArray(latestFilterValue) &&
362
- latestFilterValue.length === 0)
363
- ? `Any ${filter.label.toLowerCase()}`
364
- : Array.isArray(latestFilterValue)
365
- ? `${latestFilterValue.length} selected`
366
- : latestFilterValue}
379
+ latestFilterValue.length === 0) ? (
380
+ <Trans
381
+ i18nKey="filters.menuitem.any"
382
+ values={{
383
+ label: filter.label.toLowerCase(),
384
+ }}
385
+ />
386
+ ) : Array.isArray(latestFilterValue) ? (
387
+ <Trans
388
+ count={latestFilterValue.length}
389
+ i18nKey="filters.menuitem.selected"
390
+ values={{
391
+ selected: latestFilterValue.length,
392
+ }}
393
+ />
394
+ ) : (
395
+ latestFilterValue
396
+ )}
367
397
  </Subordinate>
368
398
  </Box>
369
399
  <ChevronRightIcon />
370
400
  </Box>
371
- </MenuItem>
401
+ </MuiMenuItem>
372
402
  );
373
403
  })}
374
404
  </MuiMenu>
375
405
  </>
376
406
  ),
377
- [isFiltersMenuOpen, filtersMenuAnchorElement, filtersProp, filters],
407
+ [
408
+ isFiltersMenuOpen,
409
+ filterPopoverCurrentFilter,
410
+ isFilterPopoverOpen,
411
+ filtersMenuAnchorElement,
412
+ filtersProp,
413
+ filters,
414
+ t,
415
+ ],
378
416
  );
379
417
 
380
418
  return (
@@ -390,6 +428,11 @@ const DataFilters = ({
390
428
  {/* Filter popover */}
391
429
  <MuiPopover
392
430
  anchorEl={filterPopoverAnchorElement}
431
+ // Positions the popover flush with the edge of the parent menu
432
+ // and at the right shadow elevation. These magic values are simply
433
+ // to match the default popover offset.
434
+ elevation={2}
435
+ sx={{ marginLeft: 2, marginTop: -1 }}
393
436
  open={isFilterPopoverOpen}
394
437
  anchorOrigin={{ vertical: "top", horizontal: "right" }}
395
438
  onClose={(ev: MouseEvent) => {
@@ -493,7 +536,7 @@ const DataFilters = ({
493
536
  inputValues[filterPopoverCurrentFilter.id] && (
494
537
  <MuiIconButton
495
538
  size="small"
496
- aria-label="Clear filter"
539
+ aria-label={t("filters.filter.clear")}
497
540
  onClick={() => {
498
541
  updateInputValue({
499
542
  filterId: filterPopoverCurrentFilter.id,
@@ -571,7 +614,7 @@ const DataFilters = ({
571
614
  }}
572
615
  >
573
616
  <Radio
574
- label="Any"
617
+ label={t("filters.filter.any")}
575
618
  value={""}
576
619
  isChecked={
577
620
  !inputValues[filterPopoverCurrentFilter.id]
@@ -615,7 +658,7 @@ const DataFilters = ({
615
658
  <Box sx={{ display: "flex", gap: 2, width: "100%" }}>
616
659
  <SearchField
617
660
  value={searchValue}
618
- label="Search"
661
+ label={t("filters.search.label")}
619
662
  onClear={() => {
620
663
  setSearchValue("");
621
664
  onChangeSearch("");
@@ -626,7 +669,7 @@ const DataFilters = ({
626
669
  <Box>
627
670
  <Button
628
671
  variant="primary"
629
- label="Search"
672
+ label={t("filters.search.label")}
630
673
  onClick={() => onChangeSearch(searchValue)}
631
674
  />
632
675
  </Box>
@@ -642,7 +685,7 @@ const DataFilters = ({
642
685
  <Box>
643
686
  <Button
644
687
  variant="secondary"
645
- label="Clear filters"
688
+ label={t("filters.clear.label")}
646
689
  onClick={clearAllFilters}
647
690
  />
648
691
  </Box>
@@ -57,6 +57,7 @@ import { Button } from "../Button";
57
57
  import { Box } from "../Box";
58
58
  import { MenuButton, MenuItem } from "..";
59
59
  import { ArrowUnsortedIcon } from "../icons.generated";
60
+ import { useTranslation } from "react-i18next";
60
61
 
61
62
  export const densityValues = ["comfortable", "spacious", "compact"] as const;
62
63
 
@@ -68,7 +69,7 @@ export type {
68
69
 
69
70
  // The shape of the table columns,
70
71
  // with props named to match their MRT_ColumnDef counterparts
71
- export type DataColumn = {
72
+ export type DataTableColumn = {
72
73
  /**
73
74
  * The unique ID of the column
74
75
  */
@@ -130,7 +131,7 @@ export type DataTableProps = {
130
131
  /**
131
132
  * The columns that make up the table
132
133
  */
133
- columns: DataColumn[];
134
+ columns: DataTableColumn[];
134
135
  /**
135
136
  * The data that goes into the table, which will be displayed
136
137
  * as the table rows
@@ -310,6 +311,7 @@ const DataTable = ({
310
311
  hasSorting,
311
312
  }: DataTableProps) => {
312
313
  const odysseyDesignTokens = useOdysseyDesignTokens();
314
+ const { t } = useTranslation();
313
315
  const [draggingRow, setDraggingRow] = useState<MRT_Row<MRT_RowData> | null>();
314
316
  const [showSkeletons, setShowSkeletons] = useState<boolean>(true);
315
317
  const [data, setData] =
@@ -550,17 +552,29 @@ const DataTable = ({
550
552
  [draggingRow],
551
553
  );
552
554
 
553
- const table = useMaterialReactTable({
554
- columns: columns,
555
- data: data,
556
- state: {
555
+ const tableState = useMemo(
556
+ () => ({
557
557
  density,
558
558
  sorting,
559
559
  globalFilter,
560
560
  columnVisibility,
561
561
  rowSelection,
562
562
  showSkeletons,
563
- },
563
+ }),
564
+ [
565
+ density,
566
+ sorting,
567
+ globalFilter,
568
+ columnVisibility,
569
+ rowSelection,
570
+ showSkeletons,
571
+ ],
572
+ );
573
+
574
+ const table = useMaterialReactTable({
575
+ columns: columns,
576
+ data: data,
577
+ state: tableState,
564
578
  rowVirtualizerInstanceRef: rowVirtualizerInstanceRef,
565
579
  rowVirtualizerOptions: { overscan: 4 },
566
580
  enableRowVirtualization:
@@ -648,9 +662,8 @@ const DataTable = ({
648
662
  }),
649
663
 
650
664
  muiRowDragHandleProps: ({ table, row }) => ({
651
- title: "Drag row or press space/enter key to start and stop reordering",
652
- "aria-label":
653
- "Drag row to reorder. Or, press space or enter to start and stop reordering and esc to cancel.",
665
+ title: t("table.draghandle.tooltip"),
666
+ "aria-label": t("table.draghandle.arialabel"),
654
667
  onKeyDown: (event) => handleDragHandleKeyDown({ table, row, event }),
655
668
  onBlur: () => {
656
669
  resetDraggingAndHoveredRow(table);
@@ -680,7 +693,7 @@ const DataTable = ({
680
693
  endIcon={<MoreIcon />}
681
694
  size="small"
682
695
  buttonVariant="floating"
683
- ariaLabel="More actions"
696
+ ariaLabel={t("table.moreactions.arialabel")}
684
697
  menuAlignment="right"
685
698
  >
686
699
  {rowActionMenuItems && (
package/src/labs/index.ts CHANGED
@@ -17,7 +17,6 @@ export type { LocalizationProviderProps } from "@mui/x-date-pickers";
17
17
  export * from "./DatePicker";
18
18
  export * from "./datePickerTheme";
19
19
 
20
- export * from "./DataTable";
21
20
  export * from "./DataTablePagination";
22
21
  export * from "./DataFilters";
23
22
 
@@ -4,16 +4,33 @@ close.text = close
4
4
  fielderror.screenreader.text = Error
5
5
  fieldlabel.optional.text = Optional
6
6
  fieldlabel.required.text = Required
7
- passwordfield.icon.label.show = Show password
7
+ filters.clear.label = Clear filters
8
+ filters.filter.any = Any
9
+ filters.filter.clear = Clear filter
10
+ filters.filters.arialabel = Filters
11
+ filters.menuitem.any = Any {{label}}
12
+ filters.menuitem.selected = {{selected}} selected
13
+ filters.search.label = Search
8
14
  passwordfield.icon.label.hide = Hide password
15
+ passwordfield.icon.label.show = Show password
9
16
  severity.error = error
10
17
  severity.info = info
11
18
  severity.success = success
12
19
  severity.warning = warning
13
20
  switch.active = Active
14
21
  switch.inactive = Inactive
22
+ table.actions = Actions
23
+ table.columnvisibility.arialabel = Show/hide columns
24
+ table.density.arialabel = Table density
25
+ table.draghandle.arialabel = Drag row to reorder. Or, press space or enter to start and stop reordering and esc to cancel.
26
+ table.draghandle.tooltip = Drag row or press space/enter key to start and stop reordering
15
27
  table.error = Error loading data.
16
28
  table.fetchedrows.text = Fetched {{totalRows}} row
17
29
  table.fetchedrows.text_plural = Fetched {{totalRows}} total rows
30
+ table.moreactions.arialabel = More actions
31
+ table.reorder.backward = Send backward
32
+ table.reorder.forward = Bring forward
33
+ table.reorder.toback = Send to back
34
+ table.reorder.tofront = Bring to front
18
35
  table.rows.text = {{totalRows}} row
19
- table.rows.text_plural = {{totalRows}} rows
36
+ table.rows.text_plural = {{totalRows}} rows
@@ -1 +1 @@
1
- export const translation = {"breadcrumbs.home.text":"Home","breadcrumbs.label.text":"Breadcrumbs","close.text":"close","fielderror.screenreader.text":"Error","fieldlabel.optional.text":"Optional","fieldlabel.required.text":"Required","passwordfield.icon.label.show":"Show password","passwordfield.icon.label.hide":"Hide password","severity.error":"error","severity.info":"info","severity.success":"success","severity.warning":"warning","switch.active":"Active","switch.inactive":"Inactive","table.error":"Error loading data.","table.fetchedrows.text":"Fetched {{totalRows}} row","table.fetchedrows.text_plural":"Fetched {{totalRows}} total rows","table.rows.text":"{{totalRows}} row","table.rows.text_plural":"{{totalRows}} rows"};
1
+ export const translation = {"breadcrumbs.home.text":"Home","breadcrumbs.label.text":"Breadcrumbs","close.text":"close","fielderror.screenreader.text":"Error","fieldlabel.optional.text":"Optional","fieldlabel.required.text":"Required","filters.clear.label":"Clear filters","filters.filter.any":"Any","filters.filter.clear":"Clear filter","filters.filters.arialabel":"Filters","filters.menuitem.any":"Any {{label}}","filters.menuitem.selected":"{{selected}} selected","filters.search.label":"Search","passwordfield.icon.label.hide":"Hide password","passwordfield.icon.label.show":"Show password","severity.error":"error","severity.info":"info","severity.success":"success","severity.warning":"warning","switch.active":"Active","switch.inactive":"Inactive","table.actions":"Actions","table.columnvisibility.arialabel":"Show/hide columns","table.density.arialabel":"Table density","table.draghandle.arialabel":"Drag row to reorder. Or, press space or enter to start and stop reordering and esc to cancel.","table.draghandle.tooltip":"Drag row or press space/enter key to start and stop reordering","table.error":"Error loading data.","table.fetchedrows.text":"Fetched {{totalRows}} row","table.fetchedrows.text_plural":"Fetched {{totalRows}} total rows","table.moreactions.arialabel":"More actions","table.reorder.backward":"Send backward","table.reorder.forward":"Bring forward","table.reorder.toback":"Send to back","table.reorder.tofront":"Bring to front","table.rows.text":"{{totalRows}} row","table.rows.text_plural":"{{totalRows}} rows"};
@@ -809,7 +809,7 @@ export const components = ({
809
809
  }),
810
810
  },
811
811
 
812
- "&.Mui-checked": {
812
+ "&.Mui-checked, &.MuiCheckbox-indeterminate": {
813
813
  backgroundColor: odysseyTokens.PalettePrimaryMain,
814
814
  borderColor: odysseyTokens.PalettePrimaryMain,
815
815
 
@@ -1993,6 +1993,9 @@ export const components = ({
1993
1993
  },
1994
1994
  },
1995
1995
  MuiMenu: {
1996
+ defaultProps: {
1997
+ elevation: 2,
1998
+ },
1996
1999
  styleOverrides: {
1997
2000
  list: {
1998
2001
  paddingBlock: odysseyTokens.Spacing2,
@@ -2015,7 +2018,7 @@ export const components = ({
2015
2018
  minHeight: "unset",
2016
2019
  paddingBlock: odysseyTokens.Spacing3,
2017
2020
  paddingInline: odysseyTokens.Spacing4,
2018
- borderRadius: odysseyTokens.BorderRadiusTight,
2021
+ borderRadius: odysseyTokens.BorderRadiusMain,
2019
2022
 
2020
2023
  [`& .${formControlLabelClasses.root}`]: {
2021
2024
  gap: "unset",
@@ -2043,6 +2046,14 @@ export const components = ({
2043
2046
  },
2044
2047
  },
2045
2048
 
2049
+ "&.isVisiblySelected": {
2050
+ backgroundColor: `${odysseyTokens.PalettePrimaryLighter} !important`,
2051
+
2052
+ [`& .${typographyClasses.root}`]: {
2053
+ color: odysseyTokens.HueBlue600,
2054
+ },
2055
+ },
2056
+
2046
2057
  [`&.${menuItemClasses.selected}`]: {
2047
2058
  backgroundColor: "transparent",
2048
2059
  color: odysseyTokens.TypographyColorAction,
@@ -2517,12 +2528,14 @@ export const components = ({
2517
2528
 
2518
2529
  [`.${tableHeadClasses.root} &`]: {
2519
2530
  color: odysseyTokens.TypographyColorHeading,
2520
- fontSize: odysseyTokens.TypographySizeSubordinate,
2531
+ fontSize: `0.71428571rem`,
2521
2532
  lineHeight: odysseyTokens.TypographyLineHeightBody,
2522
2533
  fontWeight: odysseyTokens.TypographyWeightBodyBold,
2523
2534
  textTransform: "uppercase",
2524
2535
  backgroundColor: odysseyTokens.HueNeutral50,
2525
2536
  borderBottom: 0,
2537
+ height: `${odysseyTokens.Spacing7} !important`,
2538
+ paddingBlock: `${odysseyTokens.Spacing3} !important`,
2526
2539
  },
2527
2540
 
2528
2541
  [`.${tableHeadClasses.root} &:first-of-type`]: {
@@ -2535,10 +2548,11 @@ export const components = ({
2535
2548
  borderBottomRightRadius: odysseyTokens.Spacing2,
2536
2549
  },
2537
2550
 
2538
- ...(ownerState.variant === "head" && {
2539
- lineHeight: odysseyTokens.TypographyLineHeightBody,
2540
- fontWeight: odysseyTokens.TypographyWeightBodyBold,
2541
- }),
2551
+ [`.${tableHeadClasses.root} .ods-actions-cell + &:last-of-type, .${tableBodyClasses.root} .ods-actions-cell + &:last-of-type`]:
2552
+ {
2553
+ flexGrow: 0,
2554
+ width: odysseyTokens.Spacing2,
2555
+ },
2542
2556
 
2543
2557
  ...(ownerState.variant === "number" && {
2544
2558
  textAlign: "end",
@@ -2571,14 +2585,21 @@ export const components = ({
2571
2585
  textAlign: "justify",
2572
2586
  }),
2573
2587
 
2574
- ["&.MuiTableCell-compact"]: {
2575
- fontSize: odysseyTokens.TypographySizeSubordinate,
2576
- padding: odysseyTokens.Spacing2,
2577
- },
2588
+ ...(ownerState.variant !== "head" && {
2589
+ ["&.MuiTableCell-compact"]: {
2590
+ // TODO: Find a way to tokenize these values.
2591
+ // We can't currently because these are between existing token
2592
+ // values, but we need these precise values to match design.
2593
+ // We use rems so this can scale with the text size.
2594
+ padding: "0.4285714286rem",
2595
+ height: "2.5714285714rem",
2596
+ },
2578
2597
 
2579
- ["&.MuiTableCell-spacious"]: {
2580
- padding: odysseyTokens.Spacing4,
2581
- },
2598
+ ["&.MuiTableCell-spacious"]: {
2599
+ padding: odysseyTokens.Spacing4,
2600
+ height: odysseyTokens.Spacing9,
2601
+ },
2602
+ }),
2582
2603
 
2583
2604
  [`& .${checkboxClasses.root}`]: {
2584
2605
  width: `${odysseyTokens.TypographyLineHeightUi}rem`,
@@ -2587,10 +2608,16 @@ export const components = ({
2587
2608
  },
2588
2609
 
2589
2610
  [`& .${dividerClasses.vertical}`]: {
2590
- borderStyle: "none none none dotted",
2591
- borderWidth: 2,
2611
+ borderStyle: "none none none solid",
2612
+ borderWidth: 1,
2592
2613
  borderRadius: 0,
2593
2614
  marginRight: 2,
2615
+ borderColor: odysseyTokens.HueNeutral400,
2616
+ height: 18,
2617
+ },
2618
+
2619
+ ["&.ods-drag-handle svg"]: {
2620
+ color: odysseyTokens.HueNeutral500,
2594
2621
  },
2595
2622
  }),
2596
2623
  },