@instructure/ui-table 8.14.1-snapshot.7 → 8.14.1-snapshot.70

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 (72) hide show
  1. package/es/Table/Body/index.js +2 -1
  2. package/es/Table/Body/props.js +0 -3
  3. package/es/Table/Cell/index.js +1 -0
  4. package/es/Table/Cell/props.js +0 -4
  5. package/es/Table/ColHeader/index.js +3 -2
  6. package/es/Table/ColHeader/props.js +0 -30
  7. package/es/Table/Head/index.js +19 -15
  8. package/es/Table/Head/props.js +0 -3
  9. package/es/Table/Row/index.js +1 -0
  10. package/es/Table/Row/props.js +0 -3
  11. package/es/Table/RowHeader/index.js +1 -0
  12. package/es/Table/RowHeader/props.js +0 -4
  13. package/es/Table/index.js +10 -9
  14. package/es/Table/props.js +0 -28
  15. package/lib/Table/Body/index.js +2 -1
  16. package/lib/Table/Body/props.js +0 -3
  17. package/lib/Table/Cell/index.js +1 -0
  18. package/lib/Table/Cell/props.js +0 -4
  19. package/lib/Table/ColHeader/index.js +5 -2
  20. package/lib/Table/ColHeader/props.js +0 -30
  21. package/lib/Table/Head/index.js +19 -15
  22. package/lib/Table/Head/props.js +0 -3
  23. package/lib/Table/Row/index.js +1 -0
  24. package/lib/Table/Row/props.js +0 -3
  25. package/lib/Table/RowHeader/index.js +1 -0
  26. package/lib/Table/RowHeader/props.js +0 -4
  27. package/lib/Table/index.js +10 -9
  28. package/lib/Table/props.js +0 -28
  29. package/package.json +17 -17
  30. package/src/Table/Body/index.tsx +6 -6
  31. package/src/Table/Body/props.ts +5 -4
  32. package/src/Table/Cell/index.tsx +1 -0
  33. package/src/Table/Cell/props.ts +5 -5
  34. package/src/Table/ColHeader/index.tsx +6 -15
  35. package/src/Table/ColHeader/props.ts +29 -26
  36. package/src/Table/Head/index.tsx +34 -29
  37. package/src/Table/Head/props.ts +4 -4
  38. package/src/Table/Row/index.tsx +15 -9
  39. package/src/Table/Row/props.ts +5 -4
  40. package/src/Table/RowHeader/index.tsx +1 -0
  41. package/src/Table/RowHeader/props.ts +4 -4
  42. package/src/Table/index.tsx +30 -20
  43. package/src/Table/props.ts +55 -28
  44. package/tsconfig.build.tsbuildinfo +1 -1
  45. package/types/Table/Body/index.d.ts +4 -3
  46. package/types/Table/Body/index.d.ts.map +1 -1
  47. package/types/Table/Body/props.d.ts +5 -1
  48. package/types/Table/Body/props.d.ts.map +1 -1
  49. package/types/Table/Cell/index.d.ts +5 -4
  50. package/types/Table/Cell/index.d.ts.map +1 -1
  51. package/types/Table/Cell/props.d.ts +5 -2
  52. package/types/Table/Cell/props.d.ts.map +1 -1
  53. package/types/Table/ColHeader/index.d.ts +11 -6
  54. package/types/Table/ColHeader/index.d.ts.map +1 -1
  55. package/types/Table/ColHeader/props.d.ts +28 -2
  56. package/types/Table/ColHeader/props.d.ts.map +1 -1
  57. package/types/Table/Head/index.d.ts +3 -2
  58. package/types/Table/Head/index.d.ts.map +1 -1
  59. package/types/Table/Head/props.d.ts +4 -1
  60. package/types/Table/Head/props.d.ts.map +1 -1
  61. package/types/Table/Row/index.d.ts +3 -2
  62. package/types/Table/Row/index.d.ts.map +1 -1
  63. package/types/Table/Row/props.d.ts +5 -1
  64. package/types/Table/Row/props.d.ts.map +1 -1
  65. package/types/Table/RowHeader/index.d.ts +3 -2
  66. package/types/Table/RowHeader/index.d.ts.map +1 -1
  67. package/types/Table/RowHeader/props.d.ts +4 -1
  68. package/types/Table/RowHeader/props.d.ts.map +1 -1
  69. package/types/Table/index.d.ts +4 -3
  70. package/types/Table/index.d.ts.map +1 -1
  71. package/types/Table/props.d.ts +43 -2
  72. package/types/Table/props.d.ts.map +1 -1
@@ -23,7 +23,7 @@
23
23
  */
24
24
 
25
25
  /** @jsx jsx */
26
- import { Component, Children, ReactElement } from 'react'
26
+ import { Component, Children } from 'react'
27
27
 
28
28
  import {
29
29
  matchComponentTypes,
@@ -44,13 +44,24 @@ import { Row } from './Row'
44
44
  import { ColHeader } from './ColHeader'
45
45
  import { RowHeader } from './RowHeader'
46
46
  import { Cell } from './Cell'
47
- import type { TableProps } from './props'
47
+
48
+ import type {
49
+ TableProps,
50
+ HeadChild,
51
+ BodyChild,
52
+ RowChild,
53
+ ColHeaderChild,
54
+ RowHeaderChild,
55
+ CellChild
56
+ } from './props'
57
+
48
58
  import { allowedProps, propTypes } from './props'
49
59
 
50
60
  /**
51
61
  ---
52
62
  category: components
53
63
  ---
64
+ @tsProps
54
65
  **/
55
66
  @withStyle(generateStyle, generateComponentTheme)
56
67
  class Table extends Component<TableProps> {
@@ -94,28 +105,29 @@ class Table extends Component<TableProps> {
94
105
 
95
106
  getHeaders() {
96
107
  const { children } = this.props
97
- const [head] = Children.toArray(children)
108
+ const [head] = Children.toArray(children) as HeadChild[]
98
109
 
99
- if (matchComponentTypes(head, [Head])) {
100
- // @ts-expect-error ts-migrate(2339) FIXME: Property 'props' does not exist on type 'string | ... Remove this comment to see the full error message
110
+ if (matchComponentTypes<HeadChild>(head, [Head])) {
101
111
  const [row] = Children.toArray(head.props.children)
102
112
 
103
- if (matchComponentTypes(row, [Row])) {
104
- // @ts-expect-error ts-migrate(2339) FIXME: Property 'props' does not exist on type 'string | ... Remove this comment to see the full error message
105
- return Children.map(row.props.children, (colHeader) => {
106
- return matchComponentTypes(colHeader, [ColHeader])
107
- ? colHeader.props.children
108
- : null
109
- })
113
+ if (matchComponentTypes<RowChild>(row, [Row])) {
114
+ return Children.map(
115
+ row.props.children as (ColHeaderChild | RowHeaderChild | CellChild)[],
116
+ (colHeader) => {
117
+ return matchComponentTypes<ColHeaderChild>(colHeader, [ColHeader])
118
+ ? colHeader.props.children
119
+ : undefined
120
+ }
121
+ )
110
122
  }
111
123
  }
112
- return null
124
+ return undefined
113
125
  }
114
126
 
115
127
  render() {
116
128
  const { margin, layout, caption, children, hover, styles } = this.props
117
129
  const isStacked = layout === 'stacked'
118
- const headers = isStacked ? this.getHeaders() : null
130
+ const headers = isStacked ? this.getHeaders() : undefined
119
131
 
120
132
  return (
121
133
  <View
@@ -136,16 +148,14 @@ class Table extends Component<TableProps> {
136
148
  </caption>
137
149
  )}
138
150
  {Children.map(children, (child) => {
139
- if (matchComponentTypes(child, [Head])) {
140
- return safeCloneElement(child as ReactElement, {
141
- // @ts-expect-error ts-migrate(2533) FIXME: Object is possibly 'null' or 'undefined'.
151
+ if (matchComponentTypes<HeadChild>(child, [Head])) {
152
+ return safeCloneElement(child, {
142
153
  key: child.props.name,
143
154
  isStacked
144
155
  })
145
156
  }
146
- if (matchComponentTypes(child, [Body])) {
147
- return safeCloneElement(child as ReactElement, {
148
- // @ts-expect-error ts-migrate(2533) FIXME: Object is possibly 'null' or 'undefined'.
157
+ if (matchComponentTypes<BodyChild>(child, [Body])) {
158
+ return safeCloneElement(child, {
149
159
  key: child.props.name,
150
160
  isStacked,
151
161
  hover,
@@ -27,9 +27,6 @@ import PropTypes from 'prop-types'
27
27
  import { Children as ChildrenPropTypes } from '@instructure/ui-prop-types'
28
28
  import { ThemeablePropTypes } from '@instructure/emotion'
29
29
 
30
- import { Head } from './Head'
31
- import { Body } from './Body'
32
-
33
30
  import type {
34
31
  Spacing,
35
32
  WithStyleProps,
@@ -41,12 +38,55 @@ import type {
41
38
  TableTheme
42
39
  } from '@instructure/shared-types'
43
40
 
41
+ import { Head } from './Head'
42
+ import type { TableHeadProps } from './Head/props'
43
+ import { Body } from './Body'
44
+ import type { TableBodyProps } from './Body/props'
45
+ import { Row } from './Row'
46
+ import type { TableRowProps } from './Row/props'
47
+ import { ColHeader } from './ColHeader'
48
+ import type { TableColHeaderProps } from './ColHeader/props'
49
+ import { RowHeader } from './RowHeader'
50
+ import type { TableRowHeaderProps } from './RowHeader/props'
51
+ import { Cell } from './Cell'
52
+ import type { TableCellProps } from './Cell/props'
53
+
54
+ type HeadChild = React.ComponentElement<TableHeadProps, Head>
55
+ type BodyChild = React.ComponentElement<TableBodyProps, Body>
56
+ type RowChild = React.ComponentElement<TableRowProps, Row>
57
+ type ColHeaderChild = React.ComponentElement<TableColHeaderProps, ColHeader>
58
+ type RowHeaderChild = React.ComponentElement<TableRowHeaderProps, RowHeader>
59
+ type CellChild = React.ComponentElement<TableCellProps, Cell>
60
+
44
61
  type TableOwnProps = {
45
- caption: React.ReactNode
62
+ /**
63
+ * Provide a screen reader friendly description. Anything passed to this
64
+ * prop will be wrapped by `<ScreenReaderContent>` when it is rendered.
65
+ */
66
+ caption?: React.ReactNode
67
+ /**
68
+ * Valid values are `0`, `none`, `auto`, `xxx-small`, `xx-small`, `x-small`,
69
+ * `small`, `medium`, `large`, `x-large`, `xx-large`. Apply these values via
70
+ * familiar CSS-like shorthand. For example: `margin="small auto large"`.
71
+ */
46
72
  margin?: Spacing
73
+ /**
74
+ * Provide a reference to the underlying html element
75
+ */
47
76
  elementRef?: (element: Element | null) => void
77
+ /**
78
+ * Highlight each row on hover
79
+ */
48
80
  hover?: boolean
81
+ /**
82
+ * `auto` lets the browser determine table column widths based on cell content,
83
+ * while `fixed` forces columns of equal width. `stacked` renders table in one
84
+ * column to be more readable on narrow screens
85
+ */
49
86
  layout?: 'auto' | 'fixed' | 'stacked'
87
+ /**
88
+ * Build table via `Table.Head` and `Table.Body`
89
+ */
50
90
  children?: React.ReactNode
51
91
  }
52
92
 
@@ -61,34 +101,11 @@ type TableProps = TableOwnProps &
61
101
  type TableStyle = ComponentStyle<'table'>
62
102
 
63
103
  const propTypes: PropValidators<PropKeys> = {
64
- /**
65
- * Provide a screen reader friendly description. Anything passed to this
66
- * prop will be wrapped by `<ScreenReaderContent>` when it is rendered.
67
- */
68
104
  caption: PropTypes.node.isRequired,
69
- /**
70
- * Build table via `Table.Head` and `Table.Body`
71
- */
72
105
  children: ChildrenPropTypes.oneOf([Head, Body]),
73
- /**
74
- * Valid values are `0`, `none`, `auto`, `xxx-small`, `xx-small`, `x-small`,
75
- * `small`, `medium`, `large`, `x-large`, `xx-large`. Apply these values via
76
- * familiar CSS-like shorthand. For example: `margin="small auto large"`.
77
- */
78
106
  margin: ThemeablePropTypes.spacing,
79
- /**
80
- * Provide a reference to the underlying html element
81
- */
82
107
  elementRef: PropTypes.func,
83
- /**
84
- * Highlight each row on hover
85
- */
86
108
  hover: PropTypes.bool,
87
- /**
88
- * `auto` lets the browser determine table column widths based on cell content,
89
- * while `fixed` forces columns of equal width. `stacked` renders table in one
90
- * column to be more readable on narrow screens
91
- */
92
109
  layout: PropTypes.oneOf(['auto', 'fixed', 'stacked'])
93
110
  }
94
111
 
@@ -101,5 +118,15 @@ const allowedProps: AllowedPropKeys = [
101
118
  'layout'
102
119
  ]
103
120
 
104
- export type { TableProps, TableStyle }
121
+ export type {
122
+ TableProps,
123
+ TableStyle,
124
+ // children
125
+ HeadChild,
126
+ BodyChild,
127
+ RowChild,
128
+ ColHeaderChild,
129
+ RowHeaderChild,
130
+ CellChild
131
+ }
105
132
  export { propTypes, allowedProps }