@rbxts/uiblox 0.2.0-alpha.34 → 0.2.0-alpha.35

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.
@@ -1,9 +1,22 @@
1
+ import React from "@rbxts/react";
1
2
  import { CustomizedProps } from "../../../../theme/index";
3
+ import { TableAlign, TableSortDirection } from "./tableColumns";
4
+ export interface TableColumn {
5
+ header: string | React.ReactNode;
6
+ width?: number | UDim;
7
+ flex?: number;
8
+ align?: TableAlign;
9
+ sortable?: boolean;
10
+ }
11
+ export type TableCell = string | React.ReactNode;
2
12
  export interface TableProps {
3
- columns: string[];
4
- rows: string[][];
13
+ columns: Array<string | TableColumn>;
14
+ rows: Array<Array<TableCell>>;
5
15
  selected?: number;
6
16
  dense?: boolean;
17
+ sortColumn?: number;
18
+ sortDirection?: TableSortDirection;
19
+ onSort?: (column: number) => void;
7
20
  onRowActivated?: (index: number) => void;
8
21
  }
9
22
  declare function Table(props: CustomizedProps<Frame, TableProps>): JSX.Element;
@@ -2,15 +2,33 @@
2
2
  local TS = _G[script]
3
3
  local React = TS.import(script, TS.getModule(script, "@rbxts", "react"))
4
4
  local cx = TS.import(script, script.Parent.Parent.Parent.Parent.Parent, "theme").cx
5
- local rowSelected = TS.import(script, script.Parent, "rowSelected").rowSelected
6
5
  local SxHost = TS.import(script, script.Parent.Parent.Parent, "host").SxHost
6
+ local rowSelected = TS.import(script, script.Parent, "rowSelected").rowSelected
7
+ local _tableColumns = TS.import(script, script.Parent, "tableColumns")
8
+ local canSort = _tableColumns.canSort
9
+ local columnSizes = _tableColumns.columnSizes
10
+ local headerText = _tableColumns.headerText
11
+ local isTextCell = _tableColumns.isTextCell
12
+ local resolveColumn = _tableColumns.resolveColumn
7
13
  local useTableStyles = TS.import(script, script.Parent, "Table.styles").default
14
+ local function textAlign(align)
15
+ if align == "center" then
16
+ return Enum.TextXAlignment.Center
17
+ end
18
+ if align == "right" then
19
+ return Enum.TextXAlignment.Right
20
+ end
21
+ return Enum.TextXAlignment.Left
22
+ end
8
23
  local function Table(props)
9
24
  local _binding = props
10
25
  local columns = _binding.columns
11
26
  local rows = _binding.rows
12
27
  local selected = _binding.selected
13
28
  local dense = _binding.dense
29
+ local sortColumn = _binding.sortColumn
30
+ local sortDirection = _binding.sortDirection
31
+ local onSort = _binding.onSort
14
32
  local onRowActivated = _binding.onRowActivated
15
33
  local className = _binding.className
16
34
  local sx = _binding.sx
@@ -19,7 +37,17 @@ local function Table(props)
19
37
  local styles = useTableStyles({
20
38
  dense = dense,
21
39
  })
22
- local width = if #columns > 0 then 1 / #columns else 1
40
+ -- ▼ ReadonlyArray.map ▼
41
+ local _newValue = table.create(#columns)
42
+ local _callback = function(column)
43
+ return resolveColumn(column)
44
+ end
45
+ for _k, _v in columns do
46
+ _newValue[_k] = _callback(_v, _k - 1, columns)
47
+ end
48
+ -- ▲ ReadonlyArray.map ▲
49
+ local resolved = _newValue
50
+ local sizes = columnSizes(resolved)
23
51
  local _attributes = {
24
52
  tag = "frame",
25
53
  }
@@ -52,27 +80,72 @@ local function Table(props)
52
80
  setmetatable(_attributes_5, nil)
53
81
  local _exp_3 = React.createElement("uilistlayout", _attributes_5)
54
82
  -- ▼ ReadonlyArray.map ▼
55
- local _newValue = table.create(#columns)
56
- local _callback = function(label, index)
57
- local _attributes_6 = {
58
- key = `h-{label}-{index}`,
59
- }
60
- for _k, _v in cx(styles.cell, styles.headerCell) do
61
- _attributes_6[_k] = _v
83
+ local _newValue_1 = table.create(#resolved)
84
+ local _callback_1 = function(column, index)
85
+ local size = sizes[index + 1]
86
+ local box = UDim2.new(size.scale, size.offset, 0, 0)
87
+ local align = textAlign(column.align)
88
+ local active = sortColumn == index and column.sortable
89
+ local _header = column.header
90
+ local label = if type(_header) == "string" then headerText(column.header, active, sortDirection) else nil
91
+ local clickable = canSort(column.sortable, onSort ~= nil)
92
+ if clickable then
93
+ local _attributes_6 = {
94
+ key = `h-{index}`,
95
+ }
96
+ for _k, _v in (cx(styles.cell, styles.headerCell)) do
97
+ _attributes_6[_k] = _v
98
+ end
99
+ local _condition_1 = label
100
+ if _condition_1 == nil then
101
+ _condition_1 = ""
102
+ end
103
+ _attributes_6.Text = _condition_1
104
+ _attributes_6.Size = box
105
+ _attributes_6.TextXAlignment = align
106
+ _attributes_6.AutoButtonColor = false
107
+ _attributes_6.LayoutOrder = index
108
+ _attributes_6.Event = {
109
+ Activated = function()
110
+ local _result = onSort
111
+ if _result ~= nil then
112
+ _result = _result(index)
113
+ end
114
+ return _result
115
+ end,
116
+ }
117
+ return React.createElement("textbutton", _attributes_6, label == nil and (column.header))
62
118
  end
63
- _attributes_6.Text = label
64
- _attributes_6.Size = UDim2.new(width, 0, 0, 0)
65
- _attributes_6.LayoutOrder = index
66
- return React.createElement("textlabel", _attributes_6)
119
+ if label ~= nil then
120
+ local _attributes_6 = {
121
+ key = `h-{index}`,
122
+ }
123
+ for _k, _v in cx(styles.cell, styles.headerCell) do
124
+ _attributes_6[_k] = _v
125
+ end
126
+ _attributes_6.Text = label
127
+ _attributes_6.Size = box
128
+ _attributes_6.TextXAlignment = align
129
+ _attributes_6.LayoutOrder = index
130
+ return React.createElement("textlabel", _attributes_6)
131
+ end
132
+ return React.createElement("frame", {
133
+ key = `h-{index}`,
134
+ Size = box,
135
+ AutomaticSize = Enum.AutomaticSize.Y,
136
+ BackgroundTransparency = 1,
137
+ BorderSizePixel = 0,
138
+ LayoutOrder = index,
139
+ }, column.header)
67
140
  end
68
- for _k, _v in columns do
69
- _newValue[_k] = _callback(_v, _k - 1, columns)
141
+ for _k, _v in resolved do
142
+ _newValue_1[_k] = _callback_1(_v, _k - 1, resolved)
70
143
  end
71
144
  -- ▲ ReadonlyArray.map ▲
72
- local _exp_4 = React.createElement("frame", _attributes_3, _exp_2, _exp_3, React.createElement(React.Fragment, nil, _newValue))
145
+ local _exp_4 = React.createElement("frame", _attributes_3, _exp_2, _exp_3, React.createElement(React.Fragment, nil, _newValue_1))
73
146
  -- ▼ ReadonlyArray.map ▼
74
- local _newValue_1 = table.create(#rows)
75
- local _callback_1 = function(cells, rowIndex)
147
+ local _newValue_2 = table.create(#rows)
148
+ local _callback_2 = function(cells, rowIndex)
76
149
  local _attributes_6 = {
77
150
  key = `r-{rowIndex}`,
78
151
  }
@@ -96,34 +169,48 @@ local function Table(props)
96
169
  setmetatable(_attributes_8, nil)
97
170
  local _exp_6 = React.createElement("uilistlayout", _attributes_8)
98
171
  -- ▼ ReadonlyArray.map ▼
99
- local _newValue_2 = table.create(#columns)
100
- local _callback_2 = function(_, colIndex)
101
- local _attributes_9 = {
102
- key = `c-{rowIndex}-{colIndex}`,
103
- }
104
- for _k, _v in styles.cell do
105
- _attributes_9[_k] = _v
106
- end
107
- local _condition_1 = cells[colIndex + 1]
108
- if _condition_1 == nil then
109
- _condition_1 = ""
172
+ local _newValue_3 = table.create(#resolved)
173
+ local _callback_3 = function(column, colIndex)
174
+ local size = sizes[colIndex + 1]
175
+ local box = UDim2.new(size.scale, size.offset, 0, 0)
176
+ local value = cells[colIndex + 1]
177
+ if isTextCell(value) then
178
+ local _attributes_9 = {
179
+ key = `c-{rowIndex}-{colIndex}`,
180
+ }
181
+ for _k, _v in styles.cell do
182
+ _attributes_9[_k] = _v
183
+ end
184
+ local _condition_1 = value
185
+ if _condition_1 == nil then
186
+ _condition_1 = ""
187
+ end
188
+ _attributes_9.Text = _condition_1
189
+ _attributes_9.Size = box
190
+ _attributes_9.TextXAlignment = textAlign(column.align)
191
+ _attributes_9.LayoutOrder = colIndex
192
+ return React.createElement("textlabel", _attributes_9)
110
193
  end
111
- _attributes_9.Text = _condition_1
112
- _attributes_9.Size = UDim2.new(width, 0, 0, 0)
113
- _attributes_9.LayoutOrder = colIndex
114
- return React.createElement("textlabel", _attributes_9)
194
+ return React.createElement("frame", {
195
+ key = `c-{rowIndex}-{colIndex}`,
196
+ Size = box,
197
+ AutomaticSize = Enum.AutomaticSize.Y,
198
+ BackgroundTransparency = 1,
199
+ BorderSizePixel = 0,
200
+ LayoutOrder = colIndex,
201
+ }, value)
115
202
  end
116
- for _k, _v in columns do
117
- _newValue_2[_k] = _callback_2(_v, _k - 1, columns)
203
+ for _k, _v in resolved do
204
+ _newValue_3[_k] = _callback_3(_v, _k - 1, resolved)
118
205
  end
119
206
  -- ▲ ReadonlyArray.map ▲
120
- return React.createElement("textbutton", _attributes_6, _exp_5, _exp_6, React.createElement(React.Fragment, nil, _newValue_2))
207
+ return React.createElement("textbutton", _attributes_6, _exp_5, _exp_6, React.createElement(React.Fragment, nil, _newValue_3))
121
208
  end
122
209
  for _k, _v in rows do
123
- _newValue_1[_k] = _callback_1(_v, _k - 1, rows)
210
+ _newValue_2[_k] = _callback_2(_v, _k - 1, rows)
124
211
  end
125
212
  -- ▲ ReadonlyArray.map ▲
126
- return React.createElement(SxHost, _attributes, _exp, _exp_1, _exp_4, React.createElement(React.Fragment, nil, _newValue_1))
213
+ return React.createElement(SxHost, _attributes, _exp, _exp_1, _exp_4, React.createElement(React.Fragment, nil, _newValue_2))
127
214
  end
128
215
  local default = Table
129
216
  return {
@@ -0,0 +1,26 @@
1
+ export type TableAlign = "left" | "center" | "right";
2
+ export type TableSortDirection = "asc" | "desc";
3
+ export interface TableColumnSpec {
4
+ header: unknown;
5
+ width?: number | UDim;
6
+ flex?: number;
7
+ align?: TableAlign;
8
+ sortable?: boolean;
9
+ }
10
+ export interface ResolvedColumn {
11
+ header: unknown;
12
+ width?: number | UDim;
13
+ flex?: number;
14
+ align: TableAlign;
15
+ sortable: boolean;
16
+ }
17
+ export interface ColumnSize {
18
+ scale: number;
19
+ offset: number;
20
+ }
21
+ export declare function resolveColumn(column: string | TableColumnSpec): ResolvedColumn;
22
+ /** Scale/offset for each column. Number widths are scales. Flex shares whatever scale is left. */
23
+ export declare function columnSizes(columns: ReadonlyArray<Pick<ResolvedColumn, "width" | "flex">>): ColumnSize[];
24
+ export declare function isTextCell(value: unknown): value is string | undefined;
25
+ export declare function canSort(sortable: boolean | undefined, hasHandler: boolean): boolean;
26
+ export declare function headerText(label: string, active: boolean, direction?: TableSortDirection): string;
@@ -0,0 +1,92 @@
1
+ -- Compiled with roblox-ts v3.0.0
2
+ local function resolveColumn(column)
3
+ local _column = column
4
+ if type(_column) == "string" then
5
+ return {
6
+ header = column,
7
+ align = "left",
8
+ sortable = false,
9
+ }
10
+ end
11
+ return {
12
+ header = column.header,
13
+ width = column.width,
14
+ flex = column.flex,
15
+ align = column.align or "left",
16
+ sortable = column.sortable == true,
17
+ }
18
+ end
19
+ --* Scale/offset for each column. Number widths are scales. Flex shares whatever scale is left.
20
+ local function columnSizes(columns)
21
+ local fixed = 0
22
+ local flexTotal = 0
23
+ for _, column in columns do
24
+ local width = column.width
25
+ if type(width) == "number" then
26
+ fixed += width
27
+ elseif width ~= nil then
28
+ fixed += width.Scale
29
+ else
30
+ local _condition = column.flex
31
+ if _condition == nil then
32
+ _condition = 1
33
+ end
34
+ flexTotal += _condition
35
+ end
36
+ end
37
+ local remain = math.max(0, 1 - fixed)
38
+ local sizes = {}
39
+ for _, column in columns do
40
+ local width = column.width
41
+ if type(width) == "number" then
42
+ local _arg0 = {
43
+ scale = width,
44
+ offset = 0,
45
+ }
46
+ table.insert(sizes, _arg0)
47
+ elseif width ~= nil then
48
+ local _arg0 = {
49
+ scale = width.Scale,
50
+ offset = width.Offset,
51
+ }
52
+ table.insert(sizes, _arg0)
53
+ else
54
+ local _condition = column.flex
55
+ if _condition == nil then
56
+ _condition = 1
57
+ end
58
+ local flex = _condition
59
+ local share = if flexTotal > 0 then (flex / flexTotal) * remain else 0
60
+ local _arg0 = {
61
+ scale = share,
62
+ offset = 0,
63
+ }
64
+ table.insert(sizes, _arg0)
65
+ end
66
+ end
67
+ return sizes
68
+ end
69
+ local function isTextCell(value)
70
+ local _value = value
71
+ local _condition = type(_value) == "string"
72
+ if not _condition then
73
+ _condition = value == nil
74
+ end
75
+ return _condition
76
+ end
77
+ local function canSort(sortable, hasHandler)
78
+ return sortable == true and hasHandler
79
+ end
80
+ local function headerText(label, active, direction)
81
+ if not active then
82
+ return label
83
+ end
84
+ return if direction == "desc" then `{label} ↓` else `{label} ↑`
85
+ end
86
+ return {
87
+ resolveColumn = resolveColumn,
88
+ columnSizes = columnSizes,
89
+ isTextCell = isTextCell,
90
+ canSort = canSort,
91
+ headerText = headerText,
92
+ }
@@ -1,2 +1,3 @@
1
1
  export { default as Table } from "./components/Table";
2
- export { TableProps } from "./components/Table";
2
+ export { TableProps, TableColumn, TableCell } from "./components/Table";
3
+ export { TableAlign, TableSortDirection } from "./components/tableColumns";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rbxts/uiblox",
3
- "version": "0.2.0-alpha.34",
3
+ "version": "0.2.0-alpha.35",
4
4
  "description": "UI Library and theming for roblox-ts projects",
5
5
  "main": "out/init.luau",
6
6
  "packageManager": "pnpm@11.3.0",
@@ -8,7 +8,7 @@
8
8
  "build": "rbxtsc",
9
9
  "watch": "rbxtsc -w",
10
10
  "pack:check": "node scripts/pack-check.mjs",
11
- "test": "node scripts/no-internal-refs.check.mjs && node scripts/import-case.check.mjs && node --experimental-strip-types scripts/theme-scope.check.mjs && node --experimental-strip-types scripts/style-types.check.mjs && node --experimental-strip-types scripts/style-cache.check.mjs && node --experimental-strip-types scripts/style-variants.check.mjs && node --experimental-strip-types scripts/component-styles.check.mjs && node --experimental-strip-types scripts/interaction-styles.check.mjs && node --experimental-strip-types scripts/resolve-style.check.mjs && node --experimental-strip-types scripts/resolve-sx.check.mjs && node --experimental-strip-types scripts/sx-prop.check.mjs && node --experimental-strip-types scripts/style-system.check.mjs && node --experimental-strip-types scripts/host-sx.check.mjs && node --experimental-strip-types scripts/density.check.mjs && node --experimental-strip-types scripts/styles.check.mjs && node --experimental-strip-types scripts/contrast.check.mjs && node --experimental-strip-types scripts/primitives.check.mjs && node scripts/state-matrix-registers.check.mjs && node --experimental-strip-types scripts/paper.check.mjs && node --experimental-strip-types scripts/list-item.check.mjs && node --experimental-strip-types scripts/slider.check.mjs && node --experimental-strip-types scripts/input.check.mjs && node --experimental-strip-types scripts/menu.check.mjs && node --experimental-strip-types scripts/guard.check.mjs && node --experimental-strip-types scripts/breakpoints.check.mjs && node --experimental-strip-types scripts/viewport-observer.check.mjs && node --experimental-strip-types scripts/focus-trap.check.mjs && node --experimental-strip-types scripts/select-typeahead.check.mjs && node --experimental-strip-types scripts/select-groups.check.mjs && node --experimental-strip-types scripts/select-multi.check.mjs && node --experimental-strip-types scripts/select-polish.check.mjs && node --experimental-strip-types scripts/reduced-motion.check.mjs && node --experimental-strip-types scripts/card.check.mjs && node --experimental-strip-types scripts/chip.check.mjs && node --experimental-strip-types scripts/badge.check.mjs && node --experimental-strip-types scripts/avatar.check.mjs && node --experimental-strip-types scripts/imageList.check.mjs && node --experimental-strip-types scripts/drawer.check.mjs && node --experimental-strip-types scripts/breadcrumbs.check.mjs && node --experimental-strip-types scripts/pagination.check.mjs && node --experimental-strip-types scripts/stepper.check.mjs && node --experimental-strip-types scripts/accordion.check.mjs && node --experimental-strip-types scripts/snackbar.check.mjs && node --experimental-strip-types scripts/table.check.mjs && node --experimental-strip-types scripts/autocomplete.check.mjs && node --experimental-strip-types scripts/field-loading.check.mjs && node --experimental-strip-types scripts/fab.check.mjs && node --experimental-strip-types scripts/appbar.check.mjs && node --experimental-strip-types scripts/bottom-navigation.check.mjs && node --experimental-strip-types scripts/alert.check.mjs && node --experimental-strip-types scripts/toggle-button.check.mjs && node --experimental-strip-types scripts/link.check.mjs && node --experimental-strip-types scripts/rating.check.mjs && node --experimental-strip-types scripts/stack.check.mjs && node --experimental-strip-types scripts/flex-item.check.mjs && node --experimental-strip-types scripts/grid.check.mjs && node --experimental-strip-types scripts/speed-dial.check.mjs && node --experimental-strip-types scripts/form-text.check.mjs && node --experimental-strip-types scripts/box.check.mjs && node --experimental-strip-types scripts/scroll-view.check.mjs && node --experimental-strip-types scripts/image-list.check.mjs && node --experimental-strip-types scripts/radio-group.check.mjs && node --experimental-strip-types scripts/container.check.mjs && node --experimental-strip-types scripts/divider.check.mjs && node --experimental-strip-types scripts/markdown.check.mjs && node --experimental-strip-types scripts/switch.check.mjs && node --experimental-strip-types scripts/tabs.check.mjs && node --experimental-strip-types scripts/dialog.check.mjs && node --experimental-strip-types scripts/backdrop.check.mjs && node --experimental-strip-types scripts/cframe-editor.check.mjs && node --experimental-strip-types scripts/enum-picker.check.mjs && node --experimental-strip-types scripts/number-range.check.mjs && node --experimental-strip-types scripts/date-range.check.mjs && node --experimental-strip-types scripts/sparkline.check.mjs && node --experimental-strip-types scripts/rect-editor.check.mjs && node --experimental-strip-types scripts/asset-field.check.mjs && node --experimental-strip-types scripts/gradient-editor.check.mjs && node --experimental-strip-types scripts/ray-editor.check.mjs && node --experimental-strip-types scripts/physical-properties.check.mjs && node --experimental-strip-types scripts/brickcolor-picker.check.mjs",
11
+ "test": "node scripts/no-internal-refs.check.mjs && node scripts/import-case.check.mjs && node --experimental-strip-types scripts/theme-scope.check.mjs && node --experimental-strip-types scripts/style-types.check.mjs && node --experimental-strip-types scripts/style-cache.check.mjs && node --experimental-strip-types scripts/style-variants.check.mjs && node --experimental-strip-types scripts/component-styles.check.mjs && node --experimental-strip-types scripts/interaction-styles.check.mjs && node --experimental-strip-types scripts/resolve-style.check.mjs && node --experimental-strip-types scripts/resolve-sx.check.mjs && node --experimental-strip-types scripts/sx-prop.check.mjs && node --experimental-strip-types scripts/style-system.check.mjs && node --experimental-strip-types scripts/host-sx.check.mjs && node --experimental-strip-types scripts/density.check.mjs && node --experimental-strip-types scripts/styles.check.mjs && node --experimental-strip-types scripts/contrast.check.mjs && node --experimental-strip-types scripts/primitives.check.mjs && node scripts/state-matrix-registers.check.mjs && node --experimental-strip-types scripts/paper.check.mjs && node --experimental-strip-types scripts/list-item.check.mjs && node --experimental-strip-types scripts/slider.check.mjs && node --experimental-strip-types scripts/input.check.mjs && node --experimental-strip-types scripts/menu.check.mjs && node --experimental-strip-types scripts/guard.check.mjs && node --experimental-strip-types scripts/breakpoints.check.mjs && node --experimental-strip-types scripts/viewport-observer.check.mjs && node --experimental-strip-types scripts/focus-trap.check.mjs && node --experimental-strip-types scripts/select-typeahead.check.mjs && node --experimental-strip-types scripts/select-groups.check.mjs && node --experimental-strip-types scripts/select-multi.check.mjs && node --experimental-strip-types scripts/select-polish.check.mjs && node --experimental-strip-types scripts/reduced-motion.check.mjs && node --experimental-strip-types scripts/card.check.mjs && node --experimental-strip-types scripts/chip.check.mjs && node --experimental-strip-types scripts/badge.check.mjs && node --experimental-strip-types scripts/avatar.check.mjs && node --experimental-strip-types scripts/imageList.check.mjs && node --experimental-strip-types scripts/drawer.check.mjs && node --experimental-strip-types scripts/breadcrumbs.check.mjs && node --experimental-strip-types scripts/pagination.check.mjs && node --experimental-strip-types scripts/stepper.check.mjs && node --experimental-strip-types scripts/accordion.check.mjs && node --experimental-strip-types scripts/snackbar.check.mjs && node --experimental-strip-types scripts/table.check.mjs && node --experimental-strip-types scripts/table-columns.check.mjs && node --experimental-strip-types scripts/autocomplete.check.mjs && node --experimental-strip-types scripts/field-loading.check.mjs && node --experimental-strip-types scripts/fab.check.mjs && node --experimental-strip-types scripts/appbar.check.mjs && node --experimental-strip-types scripts/bottom-navigation.check.mjs && node --experimental-strip-types scripts/alert.check.mjs && node --experimental-strip-types scripts/toggle-button.check.mjs && node --experimental-strip-types scripts/link.check.mjs && node --experimental-strip-types scripts/rating.check.mjs && node --experimental-strip-types scripts/stack.check.mjs && node --experimental-strip-types scripts/flex-item.check.mjs && node --experimental-strip-types scripts/grid.check.mjs && node --experimental-strip-types scripts/speed-dial.check.mjs && node --experimental-strip-types scripts/form-text.check.mjs && node --experimental-strip-types scripts/box.check.mjs && node --experimental-strip-types scripts/scroll-view.check.mjs && node --experimental-strip-types scripts/image-list.check.mjs && node --experimental-strip-types scripts/radio-group.check.mjs && node --experimental-strip-types scripts/container.check.mjs && node --experimental-strip-types scripts/divider.check.mjs && node --experimental-strip-types scripts/markdown.check.mjs && node --experimental-strip-types scripts/switch.check.mjs && node --experimental-strip-types scripts/tabs.check.mjs && node --experimental-strip-types scripts/dialog.check.mjs && node --experimental-strip-types scripts/backdrop.check.mjs && node --experimental-strip-types scripts/cframe-editor.check.mjs && node --experimental-strip-types scripts/enum-picker.check.mjs && node --experimental-strip-types scripts/number-range.check.mjs && node --experimental-strip-types scripts/date-range.check.mjs && node --experimental-strip-types scripts/sparkline.check.mjs && node --experimental-strip-types scripts/rect-editor.check.mjs && node --experimental-strip-types scripts/asset-field.check.mjs && node --experimental-strip-types scripts/gradient-editor.check.mjs && node --experimental-strip-types scripts/ray-editor.check.mjs && node --experimental-strip-types scripts/physical-properties.check.mjs && node --experimental-strip-types scripts/brickcolor-picker.check.mjs",
12
12
  "prepublishOnly": "pnpm build"
13
13
  },
14
14
  "keywords": [