@rbxts/uiblox 0.2.0-alpha.26 → 0.2.0-alpha.28

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/README.md CHANGED
@@ -2,13 +2,35 @@
2
2
 
3
3
  # uiblox-rbxts
4
4
 
5
+ > This package is a work in progress.
6
+
5
7
  UI library and theming for roblox-ts projects.
6
8
 
9
+ ## Background
10
+
11
+ Roblox has their own internal design system, coined "uiblox-web", that it uses for its new
12
+ web-facing products. This system offers reusable components, implemented in
13
+ React Typescript, that are derived from material UI (MUI). As well, it offers a
14
+ common theme/pallete for consistent UI/UX.
15
+
16
+ Anyone is able to view their design system as
17
+ [UIBlox-Web](https://uiblox.roblox.com). You can see that they leverage
18
+ [Storybook](https://storybook.js.org), a UI component explorer for frontend
19
+ developers, to render component previews.
20
+
21
+ Design systems all help engineers cut down on implementation time and ensure
22
+ consitent UX across products.
23
+
7
24
  ## Overview
8
25
 
9
- Uiblox is a roblox-ts UI kit: semantic themes, `makeStyles` / `createStyles`, and typed React components for Studio and games. Public APIs aim for familiar Material UI–style capability (props and behavior), implemented independently for Roblox Instances, input modes, and performance.
26
+ So what is uiblox-rbxts? Simply put, its my stab at a design system that mimics
27
+ uiblox-web for games written using roblox-ts.
10
28
 
11
- Main exports from `@rbxts/uiblox`:
29
+ UIBlox-rbxts aims to provide extensible components that can be reusable by
30
+ anyone who installs this npm package. It also offers a theme and styling system
31
+ that aids UI/UX consistentency.
32
+
33
+ How does it do this? Well, there are two main exports from this package:
12
34
 
13
35
  - @rbxts/uiblox -> theme
14
36
  - An extensible Theme type + default Dark (default) and Light themes
@@ -24,47 +46,11 @@ Main exports from `@rbxts/uiblox`:
24
46
 
25
47
  ### Installation
26
48
 
27
- ```
28
- npm install @rbxts/uiblox
29
- ```
30
-
31
- ## Quickstart
49
+ Install the package to get started.
32
50
 
33
- 1. Wrap your app (or a subtree) in `ThemeProvider` with `DarkTheme` or `LightTheme`.
34
- 2. Build styles with `makeStyles` / `createStyles` (or `componentStyles`) and spread them onto Instances.
35
- 3. For hover/press/focus/disabled (and list `_first` / `_last`), put `_hover`-style keys on the style table and call `resolveStyle(style, state)` before spreading.
36
- 4. Use packaged components from `@rbxts/uiblox` (`Button`, `Input`, `Select`, …).
37
- 5. Preview components in [Storyblox](https://github.com/bjlarouche/storyblox) with `*.stories` modules.
51
+ `npm install @rbxts/uiblox`
38
52
 
39
- Token reference (spacing, density, typography, shape, palette, `resolveStyle`): [docs/STYLING.md](docs/STYLING.md).
40
-
41
- ```tsx
42
- import React from "@rbxts/react";
43
- import { Button, DarkTheme, ThemeProvider } from "@rbxts/uiblox";
44
-
45
- export function App() {
46
- return (
47
- <ThemeProvider theme={DarkTheme}>
48
- <Button text="Continue" onLeftClick={() => {}} />
49
- </ThemeProvider>
50
- );
51
- }
52
- ```
53
-
54
- ## Parity checklist
55
-
56
- Capability parity, not pixel parity. For each public component, expect:
57
-
58
- - [ ] Typed controlled props where interaction needs state
59
- - [ ] Theme tokens (light/dark) via `ThemeProvider`
60
- - [ ] Style slots / variants through the styling helpers
61
- - [ ] Disabled / loading / error when the control type warrants it
62
- - [ ] Mouse, touch, and gamepad-friendly activation where interactive
63
- - [ ] Cleanup and focused unit checks in-repo
64
- - [ ] `stateMatrix` rows for visual capture planning
65
- - [ ] A Storyblox story (dev fixtures OK)
66
-
67
- Skipped on purpose: browser-only addons (MDX, iframes, hosted visual-review clouds).
53
+ Spacing, density, and sx notes are in [docs/STYLING.md](docs/STYLING.md).
68
54
 
69
55
  ## Example
70
56
 
@@ -211,74 +197,6 @@ const useMyComponentStyles = makeStyles<MyComponentProps>((theme: Theme, props:
211
197
  export default useMyComponentStyles;
212
198
  ```
213
199
 
214
- ### Style precedence
215
-
216
- Components spread their own styles first, then `className`, then the props that
217
- carry state. Later always wins:
218
-
219
- 1. Component styles from the theme
220
- 2. `className` (merge several with `cx(a, condition && b)`; later args win, falsy
221
- args are skipped)
222
- 3. State props the component owns: `Active`, `Selectable`, `Text`, and the
223
- value-driven sizes/positions of Slider, SplitPane, and so on
224
-
225
- So `className` can restyle anything except a control's state. Pass `disabled`
226
- instead of overriding `Active`.
227
-
228
- ### Controls
229
-
230
- Inputs are controlled: `{ value, onChange, disabled? }`. They call `onChange`
231
- only when the value actually changes, and never while disabled.
232
-
233
- | Component | Value | Notes |
234
- | --- | --- | --- |
235
- | Checkbox | `boolean` | `mixed` shows indeterminate; activating commits `true` |
236
- | Switch | `boolean` | |
237
- | RadioGroup / Select / Tabs | `T` from `options: { label, value: T, disabled? }[]` | compared by identity; disabled options are skipped |
238
- | NumberInput | `number` | commits on focus lost or Enter; clamps to `min`/`max`, snaps to `step` |
239
- | Slider | `number` | `onChange` while dragging, `onCommit` on release |
240
- | SplitPane | first pane size (px) | display clamps to `min`/`max`; Escape cancels a drag |
241
- | Input | `text` | `onInput` while typing, `onTextChanged` on commit |
242
-
243
- Select and Tooltip render through `Popup`, which portals into the nearest
244
- `LayerCollector` so clipping parents do not cut them off. The popup follows its
245
- anchor when that anchor moves or resizes, and Select closes if the anchor leaves
246
- the layer. Select handles Up, Down, Enter, and Escape while it is open or
247
- selected, including when the pointer is not over it.
248
-
249
- ### Loading
250
-
251
- `Skeleton` covers a block that is still loading. `variant` is `text`,
252
- `rectangular`, `rounded`, or `circular`. `width` and `height` are pixels.
253
- `lines` and `gap` stack text rows. `SkeletonText` is the text variant.
254
- `animation` is `pulse`, `shimmer`, or `false`. `reducedMotion` holds the block
255
- still. A later theme preference can set that prop for you.
256
-
257
- `CircularProgress` spins while `value` is omitted. A `value` from 0 to 1 draws
258
- an arc and stops the spin. `size`, `thickness`, and `color` restyle the ring.
259
- `LinearProgress` is the existing `ProgressBar`: pass `value` from 0 to 1 or
260
- `progress` from 0 to 100. `indeterminate` slides the bar. `disabled` and
261
- `reducedMotion` stop the motion and fade the fill.
262
-
263
- `Button` and `IconButton` take `loading`. The control ignores clicks, hover,
264
- and focus while loading, and its size stays put. `loadingLabel` replaces the
265
- caption. `loadingPosition` is `start`, `center`, or `end`. `reducedMotion`
266
- keeps the spinner still.
267
-
268
- ### State captures
269
-
270
- `stateMatrix` is the gallery list for Storyblox. Each row is one shot: `theme`
271
- (`Dark` or `Light`), `width`, and `pointer` (`rest`, `hover`, `press`, or
272
- `focus`). Rows are built in small helper functions and concatenated so the
273
- compiled Luau chunk stays under the 200-local register limit. `open` means the
274
- Select list is showing. `options` and `disabledOption` build RadioGroup, Select,
275
- and Tabs. `selected` and `filter` are TreeView. `value`, `text`, `disabled`,
276
- `loading`, `mixed`, `hasError`, and `placeholder` are that control's props.
277
- `variant`, `animation` (`pulse`, `shimmer`, or `false`), `reducedMotion`, and
278
- `indeterminate` cover skeleton and progress shots. Those shots stay still when
279
- `animation` is `false` or `reducedMotion` is set. Hover, press, and focus rows
280
- are only there when the control actually changes.
281
-
282
200
  ### Client
283
201
 
284
202
  Some sample logic for mounting app when player spawns (on client).
@@ -134,25 +134,31 @@ local function Fab(props)
134
134
  local _exp_1 = React.createElement(Shadow)
135
135
  local _result_1
136
136
  if extended then
137
- local _attributes_2 = table.clone(styles.padding)
138
- setmetatable(_attributes_2, nil)
139
- local _exp_2 = React.createElement("uipadding", _attributes_2)
140
- local _attributes_3 = table.clone(styles.row)
137
+ local _attributes_2 = {
138
+ key = "Content",
139
+ }
140
+ for _k, _v in styles.content do
141
+ _attributes_2[_k] = _v
142
+ end
143
+ local _attributes_3 = table.clone(styles.padding)
141
144
  setmetatable(_attributes_3, nil)
142
- local _exp_3 = React.createElement("uilistlayout", _attributes_3)
145
+ local _exp_2 = React.createElement("uipadding", _attributes_3)
146
+ local _attributes_4 = table.clone(styles.row)
147
+ setmetatable(_attributes_4, nil)
148
+ local _exp_3 = React.createElement("uilistlayout", _attributes_4)
143
149
  local _exp_4 = iconEl
144
150
  local _condition_1 = not loading
145
151
  if _condition_1 then
146
- local _attributes_4 = {
152
+ local _attributes_5 = {
147
153
  key = "Label",
148
154
  }
149
155
  for _k, _v in styles.label do
150
- _attributes_4[_k] = _v
156
+ _attributes_5[_k] = _v
151
157
  end
152
- _attributes_4.Text = label
153
- _condition_1 = React.createElement("textlabel", _attributes_4)
158
+ _attributes_5.Text = label
159
+ _condition_1 = React.createElement("textlabel", _attributes_5)
154
160
  end
155
- _result_1 = (React.createElement(React.Fragment, nil, _exp_2, _exp_3, _exp_4, _condition_1))
161
+ _result_1 = (React.createElement("frame", _attributes_2, _exp_2, _exp_3, _exp_4, _condition_1))
156
162
  else
157
163
  _result_1 = iconEl
158
164
  end
@@ -31,6 +31,12 @@ local useFabStyles = componentStyles("Fab", function(theme, _param)
31
31
  corner = {
32
32
  CornerRadius = UDim.new(1, 0),
33
33
  },
34
+ content = {
35
+ Size = UDim2.new(0, 0, 0, diameter),
36
+ AutomaticSize = Enum.AutomaticSize.X,
37
+ BackgroundTransparency = 1,
38
+ BorderSizePixel = 0,
39
+ },
34
40
  padding = {
35
41
  PaddingLeft = UDim.new(0, theme.padding.calc(2)),
36
42
  PaddingRight = UDim.new(0, theme.padding.calc(2.5)),
@@ -72,6 +72,7 @@ local function SxHost(props)
72
72
  local paint = paintHostStyle(theme, _exp, _exp_1, sx, width, _object)
73
73
  local rest = hostRest(props)
74
74
  local caller = rest.Event
75
+ local pressable = tag == "textbutton" or tag == "imagebutton"
75
76
  local _object_1 = {}
76
77
  if caller then
77
78
  for _k, _v in caller do
@@ -103,30 +104,6 @@ local function SxHost(props)
103
104
  end
104
105
  end
105
106
  end
106
- _object_1.MouseButton1Down = function(...)
107
- local args = { ... }
108
- if not locked then
109
- setPressed(true)
110
- end
111
- local _result_1 = caller
112
- if _result_1 ~= nil then
113
- _result_1 = _result_1.MouseButton1Down
114
- if _result_1 ~= nil then
115
- _result_1(unpack(args))
116
- end
117
- end
118
- end
119
- _object_1.MouseButton1Up = function(...)
120
- local args = { ... }
121
- setPressed(false)
122
- local _result_1 = caller
123
- if _result_1 ~= nil then
124
- _result_1 = _result_1.MouseButton1Up
125
- if _result_1 ~= nil then
126
- _result_1(unpack(args))
127
- end
128
- end
129
- end
130
107
  _object_1.SelectionGained = function(...)
131
108
  local args = { ... }
132
109
  if not locked then
@@ -152,6 +129,34 @@ local function SxHost(props)
152
129
  end
153
130
  end
154
131
  rest.Event = _object_1
132
+ -- GuiButton-only; Frames reject MouseButton1* and crash Select/Menu hosts.
133
+ if pressable then
134
+ local events = rest.Event
135
+ events.MouseButton1Down = function(...)
136
+ local args = { ... }
137
+ if not locked then
138
+ setPressed(true)
139
+ end
140
+ local _result_1 = caller
141
+ if _result_1 ~= nil then
142
+ _result_1 = _result_1.MouseButton1Down
143
+ if _result_1 ~= nil then
144
+ _result_1(unpack(args))
145
+ end
146
+ end
147
+ end
148
+ events.MouseButton1Up = function(...)
149
+ local args = { ... }
150
+ setPressed(false)
151
+ local _result_1 = caller
152
+ if _result_1 ~= nil then
153
+ _result_1 = _result_1.MouseButton1Up
154
+ if _result_1 ~= nil then
155
+ _result_1(unpack(args))
156
+ end
157
+ end
158
+ end
159
+ end
155
160
  local nodes = React.Children.toArray(props.children)
156
161
  local painted = {}
157
162
  local hasPad = false
@@ -9,8 +9,10 @@ local useShadowStyles = TS.import(script, script.Parent, "Shadow.styles").defaul
9
9
  local function Shadow(props)
10
10
  local _binding = useShadowStyles()
11
11
  local container = _binding.container
12
+ local blob = _binding.blob
12
13
  local parent, setParent = useState(nil)
13
14
  local cornerRadius, setCornerRadius = useState()
15
+ local blobSize, setBlobSize = useState(UDim2.fromOffset(0, 0))
14
16
  local _binding_1 = props
15
17
  local className = _binding_1.className
16
18
  local sx = _binding_1.sx
@@ -22,30 +24,30 @@ local function Shadow(props)
22
24
  end
23
25
  local defaultZIndex = _condition
24
26
  local zIndex, setZIndex = useState(defaultZIndex)
25
- -- Set any inherited properties
26
27
  useEffect(function()
27
28
  if not parent then
28
29
  return nil
29
30
  end
30
- local _cornerRadius = parent
31
+ local _cornerRadius = parent:FindFirstChildOfClass("UICorner")
31
32
  if _cornerRadius ~= nil then
32
- _cornerRadius = _cornerRadius:FindFirstChildOfClass("UICorner")
33
- if _cornerRadius ~= nil then
34
- _cornerRadius = _cornerRadius.CornerRadius
35
- end
33
+ _cornerRadius = _cornerRadius.CornerRadius
36
34
  end
37
35
  local cornerRadius = _cornerRadius
38
36
  setCornerRadius(cornerRadius)
39
- local _result = parent
40
- if _result ~= nil then
41
- _result = _result.ZIndex
42
- end
43
- local _condition_1 = _result
37
+ local _condition_1 = parent.ZIndex
44
38
  if _condition_1 == nil then
45
39
  _condition_1 = defaultZIndex
46
40
  end
47
41
  setZIndex(_condition_1 - 1)
48
42
  parent.ClipsDescendants = false
43
+ local sync = function()
44
+ setBlobSize(UDim2.fromOffset(parent.AbsoluteSize.X, parent.AbsoluteSize.Y))
45
+ end
46
+ sync()
47
+ local conn = parent:GetPropertyChangedSignal("AbsoluteSize"):Connect(sync)
48
+ return function()
49
+ return conn:Disconnect()
50
+ end
49
51
  end, { parent })
50
52
  local _attributes = {
51
53
  tag = "frame",
@@ -67,10 +69,18 @@ local function Shadow(props)
67
69
  end
68
70
  end,
69
71
  }
70
- return React.createElement(SxHost, _attributes, cornerRadius ~= nil and React.createElement("uicorner", {
72
+ local _attributes_1 = {
73
+ key = "Blob",
74
+ }
75
+ for _k, _v in blob do
76
+ _attributes_1[_k] = _v
77
+ end
78
+ _attributes_1.Size = blobSize
79
+ _attributes_1.ZIndex = zIndex
80
+ return React.createElement(SxHost, _attributes, React.createElement("frame", _attributes_1, cornerRadius ~= nil and React.createElement("uicorner", {
71
81
  key = "Corner",
72
82
  CornerRadius = cornerRadius,
73
- }))
83
+ })))
74
84
  end
75
85
  local default = Shadow
76
86
  return {
@@ -6,11 +6,16 @@ local componentStyles = _theme.componentStyles
6
6
  local useShadowStyles = componentStyles("Shadow", function(theme)
7
7
  return createStyles({
8
8
  container = {
9
- Size = UDim2.new(1, theme.spacing.calc(0.25), 1, theme.spacing.calc(0.25)),
9
+ Size = UDim2.fromOffset(0, 0),
10
+ BackgroundTransparency = 1,
11
+ BorderSizePixel = 0,
12
+ ZIndex = -100,
13
+ },
14
+ blob = {
10
15
  BackgroundColor3 = theme.palette.shadow,
11
16
  BackgroundTransparency = 0.8,
12
17
  BorderSizePixel = 0,
13
- ZIndex = -100,
18
+ Position = UDim2.fromOffset(theme.spacing.calc(0.25), theme.spacing.calc(0.25)),
14
19
  },
15
20
  })
16
21
  end)
@@ -1957,84 +1957,97 @@ local function chromeRows()
1957
1957
  local _Length_54 = #_array_55
1958
1958
  table.move(_array_55, 1, _Length_54, _length + 1, _array)
1959
1959
  _length += _Length_54
1960
- local _array_56 = pair("Fab", "small", {
1961
- size = "small",
1960
+ local _array_56 = pair("Fab", "extended-narrow", {
1961
+ text = "Compose",
1962
+ width = 128,
1962
1963
  })
1963
1964
  local _Length_55 = #_array_56
1964
1965
  table.move(_array_56, 1, _Length_55, _length + 1, _array)
1965
1966
  _length += _Length_55
1966
- local _array_57 = pair("Fab", "large", {
1967
- size = "large",
1967
+ local _array_57 = pair("Fab", "small", {
1968
+ size = "small",
1968
1969
  })
1969
1970
  local _Length_56 = #_array_57
1970
1971
  table.move(_array_57, 1, _Length_56, _length + 1, _array)
1971
1972
  _length += _Length_56
1972
- local _array_58 = pair("Fab", "disabled", {
1973
- disabled = true,
1973
+ local _array_58 = pair("Fab", "medium", {
1974
+ size = "medium",
1974
1975
  })
1975
1976
  local _Length_57 = #_array_58
1976
1977
  table.move(_array_58, 1, _Length_57, _length + 1, _array)
1977
1978
  _length += _Length_57
1978
- local _array_59 = pair("Fab", "loading", {
1979
- loading = true,
1979
+ local _array_59 = pair("Fab", "large", {
1980
+ size = "large",
1980
1981
  })
1981
1982
  local _Length_58 = #_array_59
1982
1983
  table.move(_array_59, 1, _Length_58, _length + 1, _array)
1983
1984
  _length += _Length_58
1984
- local _array_60 = pair("Fab", "accent", {
1985
- variant = "accent",
1985
+ local _array_60 = pair("Fab", "disabled", {
1986
+ disabled = true,
1986
1987
  })
1987
1988
  local _Length_59 = #_array_60
1988
1989
  table.move(_array_60, 1, _Length_59, _length + 1, _array)
1989
1990
  _length += _Length_59
1990
- local _array_61 = pair("Fab", "sx", {
1991
- variant = "sx",
1991
+ local _array_61 = pair("Fab", "loading", {
1992
+ loading = true,
1992
1993
  })
1993
1994
  local _Length_60 = #_array_61
1994
1995
  table.move(_array_61, 1, _Length_60, _length + 1, _array)
1995
1996
  _length += _Length_60
1996
- local _array_62 = pair("AppBar", "default", {
1997
- text = "Storyblox",
1997
+ local _array_62 = pair("Fab", "accent", {
1998
+ variant = "accent",
1998
1999
  })
1999
2000
  local _Length_61 = #_array_62
2000
2001
  table.move(_array_62, 1, _Length_61, _length + 1, _array)
2001
2002
  _length += _Length_61
2002
- local _array_63 = pair("AppBar", "flat", {
2003
- text = "Storyblox",
2004
- variant = "flat",
2003
+ local _array_63 = pair("Fab", "sx", {
2004
+ variant = "sx",
2005
2005
  })
2006
2006
  local _Length_62 = #_array_63
2007
2007
  table.move(_array_63, 1, _Length_62, _length + 1, _array)
2008
2008
  _length += _Length_62
2009
- local _array_64 = pair("AppBar", "raised", {
2009
+ local _array_64 = pair("AppBar", "default", {
2010
2010
  text = "Storyblox",
2011
- variant = "raised",
2012
2011
  })
2013
2012
  local _Length_63 = #_array_64
2014
2013
  table.move(_array_64, 1, _Length_63, _length + 1, _array)
2015
2014
  _length += _Length_63
2016
- local _array_65 = pair("AppBar", "primary", {
2015
+ local _array_65 = pair("AppBar", "flat", {
2017
2016
  text = "Storyblox",
2018
- variant = "primary",
2017
+ variant = "flat",
2019
2018
  })
2020
2019
  local _Length_64 = #_array_65
2021
2020
  table.move(_array_65, 1, _Length_64, _length + 1, _array)
2022
2021
  _length += _Length_64
2023
- local _array_66 = pair("AppBar", "sx", {
2022
+ local _array_66 = pair("AppBar", "raised", {
2024
2023
  text = "Storyblox",
2025
- variant = "sx",
2024
+ variant = "raised",
2026
2025
  })
2027
2026
  local _Length_65 = #_array_66
2028
2027
  table.move(_array_66, 1, _Length_65, _length + 1, _array)
2029
2028
  _length += _Length_65
2030
- local _array_67 = pair("BottomNavigation", "default", {
2029
+ local _array_67 = pair("AppBar", "primary", {
2030
+ text = "Storyblox",
2031
+ variant = "primary",
2032
+ })
2033
+ local _Length_66 = #_array_67
2034
+ table.move(_array_67, 1, _Length_66, _length + 1, _array)
2035
+ _length += _Length_66
2036
+ local _array_68 = pair("AppBar", "sx", {
2037
+ text = "Storyblox",
2038
+ variant = "sx",
2039
+ })
2040
+ local _Length_67 = #_array_68
2041
+ table.move(_array_68, 1, _Length_67, _length + 1, _array)
2042
+ _length += _Length_67
2043
+ local _array_69 = pair("BottomNavigation", "default", {
2031
2044
  value = "Home",
2032
2045
  options = { "Home", "Search", "Profile" },
2033
2046
  })
2034
- table.move(_array_67, 1, #_array_67, _length + 1, _array)
2047
+ table.move(_array_69, 1, #_array_69, _length + 1, _array)
2035
2048
  return _array
2036
2049
  end
2037
- local function miscRows()
2050
+ local function miscRowsA()
2038
2051
  local _array = {}
2039
2052
  local _length = #_array
2040
2053
  local _array_1 = pair("BottomNavigation", "selected", {
@@ -2383,306 +2396,309 @@ local function miscRows()
2383
2396
  local _array_54 = pair("StyleSx", "loading", {
2384
2397
  loading = true,
2385
2398
  })
2386
- local _Length_53 = #_array_54
2387
- table.move(_array_54, 1, _Length_53, _length + 1, _array)
2388
- _length += _Length_53
2389
- local _array_55 = pair("Container", "default", {
2399
+ table.move(_array_54, 1, #_array_54, _length + 1, _array)
2400
+ return _array
2401
+ end
2402
+ local function miscRowsB()
2403
+ local _array = {}
2404
+ local _length = #_array
2405
+ local _array_1 = pair("Container", "default", {
2390
2406
  variant = "lg",
2391
2407
  })
2392
- local _Length_54 = #_array_55
2393
- table.move(_array_55, 1, _Length_54, _length + 1, _array)
2394
- _length += _Length_54
2395
- local _array_56 = pair("Container", "sm", {
2408
+ local _Length = #_array_1
2409
+ table.move(_array_1, 1, _Length, _length + 1, _array)
2410
+ _length += _Length
2411
+ local _array_2 = pair("Container", "sm", {
2396
2412
  variant = "sm",
2397
2413
  })
2398
- local _Length_55 = #_array_56
2399
- table.move(_array_56, 1, _Length_55, _length + 1, _array)
2400
- _length += _Length_55
2401
- local _array_57 = pair("Container", "fluid", {
2414
+ local _Length_1 = #_array_2
2415
+ table.move(_array_2, 1, _Length_1, _length + 1, _array)
2416
+ _length += _Length_1
2417
+ local _array_3 = pair("Container", "fluid", {
2402
2418
  variant = "false",
2403
2419
  })
2404
- local _Length_56 = #_array_57
2405
- table.move(_array_57, 1, _Length_56, _length + 1, _array)
2406
- _length += _Length_56
2407
- local _array_58 = pair("Backdrop", "default")
2408
- local _Length_57 = #_array_58
2409
- table.move(_array_58, 1, _Length_57, _length + 1, _array)
2410
- _length += _Length_57
2411
- local _array_59 = pair("Backdrop", "invisible", {
2420
+ local _Length_2 = #_array_3
2421
+ table.move(_array_3, 1, _Length_2, _length + 1, _array)
2422
+ _length += _Length_2
2423
+ local _array_4 = pair("Backdrop", "default")
2424
+ local _Length_3 = #_array_4
2425
+ table.move(_array_4, 1, _Length_3, _length + 1, _array)
2426
+ _length += _Length_3
2427
+ local _array_5 = pair("Backdrop", "invisible", {
2412
2428
  variant = "invisible",
2413
2429
  })
2414
- local _Length_58 = #_array_59
2415
- table.move(_array_59, 1, _Length_58, _length + 1, _array)
2416
- _length += _Length_58
2417
- local _array_60 = pair("Backdrop", "closed", {
2430
+ local _Length_4 = #_array_5
2431
+ table.move(_array_5, 1, _Length_4, _length + 1, _array)
2432
+ _length += _Length_4
2433
+ local _array_6 = pair("Backdrop", "closed", {
2418
2434
  open = false,
2419
2435
  })
2420
- local _Length_59 = #_array_60
2421
- table.move(_array_60, 1, _Length_59, _length + 1, _array)
2422
- _length += _Length_59
2423
- local _array_61 = pair("Backdrop", "sx", {
2436
+ local _Length_5 = #_array_6
2437
+ table.move(_array_6, 1, _Length_5, _length + 1, _array)
2438
+ _length += _Length_5
2439
+ local _array_7 = pair("Backdrop", "sx", {
2424
2440
  variant = "sx",
2425
2441
  })
2426
- local _Length_60 = #_array_61
2427
- table.move(_array_61, 1, _Length_60, _length + 1, _array)
2428
- _length += _Length_60
2429
- local _array_62 = pair("Sidebar", "sx", {
2442
+ local _Length_6 = #_array_7
2443
+ table.move(_array_7, 1, _Length_6, _length + 1, _array)
2444
+ _length += _Length_6
2445
+ local _array_8 = pair("Sidebar", "sx", {
2430
2446
  variant = "sx",
2431
2447
  })
2432
- local _Length_61 = #_array_62
2433
- table.move(_array_62, 1, _Length_61, _length + 1, _array)
2434
- _length += _Length_61
2435
- local _array_63 = pair("Divider", "horizontal", {
2448
+ local _Length_7 = #_array_8
2449
+ table.move(_array_8, 1, _Length_7, _length + 1, _array)
2450
+ _length += _Length_7
2451
+ local _array_9 = pair("Divider", "horizontal", {
2436
2452
  variant = "horizontal",
2437
2453
  })
2438
- local _Length_62 = #_array_63
2439
- table.move(_array_63, 1, _Length_62, _length + 1, _array)
2440
- _length += _Length_62
2441
- local _array_64 = pair("Divider", "vertical", {
2454
+ local _Length_8 = #_array_9
2455
+ table.move(_array_9, 1, _Length_8, _length + 1, _array)
2456
+ _length += _Length_8
2457
+ local _array_10 = pair("Divider", "vertical", {
2442
2458
  variant = "vertical",
2443
2459
  })
2444
- local _Length_63 = #_array_64
2445
- table.move(_array_64, 1, _Length_63, _length + 1, _array)
2446
- _length += _Length_63
2447
- local _array_65 = pair("Divider", "label", {
2460
+ local _Length_9 = #_array_10
2461
+ table.move(_array_10, 1, _Length_9, _length + 1, _array)
2462
+ _length += _Length_9
2463
+ local _array_11 = pair("Divider", "label", {
2448
2464
  text = "Or",
2449
2465
  })
2450
- local _Length_64 = #_array_65
2451
- table.move(_array_65, 1, _Length_64, _length + 1, _array)
2452
- _length += _Length_64
2453
- local _array_66 = pair("Divider", "sx", {
2466
+ local _Length_10 = #_array_11
2467
+ table.move(_array_11, 1, _Length_10, _length + 1, _array)
2468
+ _length += _Length_10
2469
+ local _array_12 = pair("Divider", "sx", {
2454
2470
  variant = "sx",
2455
2471
  })
2456
- local _Length_65 = #_array_66
2457
- table.move(_array_66, 1, _Length_65, _length + 1, _array)
2458
- _length += _Length_65
2459
- local _array_67 = pair("Icon", "sx", {
2472
+ local _Length_11 = #_array_12
2473
+ table.move(_array_12, 1, _Length_11, _length + 1, _array)
2474
+ _length += _Length_11
2475
+ local _array_13 = pair("Icon", "sx", {
2460
2476
  variant = "sx",
2461
2477
  })
2462
- local _Length_66 = #_array_67
2463
- table.move(_array_67, 1, _Length_66, _length + 1, _array)
2464
- _length += _Length_66
2465
- local _array_68 = pair("ImageList", "default")
2466
- local _Length_67 = #_array_68
2467
- table.move(_array_68, 1, _Length_67, _length + 1, _array)
2468
- _length += _Length_67
2469
- local _array_69 = pair("ImageList", "dense", {
2478
+ local _Length_12 = #_array_13
2479
+ table.move(_array_13, 1, _Length_12, _length + 1, _array)
2480
+ _length += _Length_12
2481
+ local _array_14 = pair("ImageList", "default")
2482
+ local _Length_13 = #_array_14
2483
+ table.move(_array_14, 1, _Length_13, _length + 1, _array)
2484
+ _length += _Length_13
2485
+ local _array_15 = pair("ImageList", "dense", {
2470
2486
  size = "small",
2471
2487
  })
2472
- local _Length_68 = #_array_69
2473
- table.move(_array_69, 1, _Length_68, _length + 1, _array)
2474
- _length += _Length_68
2475
- local _array_70 = pair("ImageList", "wide", {
2488
+ local _Length_14 = #_array_15
2489
+ table.move(_array_15, 1, _Length_14, _length + 1, _array)
2490
+ _length += _Length_14
2491
+ local _array_16 = pair("ImageList", "wide", {
2476
2492
  size = "large",
2477
2493
  })
2478
- local _Length_69 = #_array_70
2479
- table.move(_array_70, 1, _Length_69, _length + 1, _array)
2480
- _length += _Length_69
2481
- local _array_71 = pair("ImageList", "titled", {
2494
+ local _Length_15 = #_array_16
2495
+ table.move(_array_16, 1, _Length_15, _length + 1, _array)
2496
+ _length += _Length_15
2497
+ local _array_17 = pair("ImageList", "titled", {
2482
2498
  text = "Cove",
2483
2499
  })
2484
- local _Length_70 = #_array_71
2485
- table.move(_array_71, 1, _Length_70, _length + 1, _array)
2486
- _length += _Length_70
2487
- local _array_72 = pair("ImageList", "untitled", {
2500
+ local _Length_16 = #_array_17
2501
+ table.move(_array_17, 1, _Length_16, _length + 1, _array)
2502
+ _length += _Length_16
2503
+ local _array_18 = pair("ImageList", "untitled", {
2488
2504
  text = "",
2489
2505
  })
2490
- local _Length_71 = #_array_72
2491
- table.move(_array_72, 1, _Length_71, _length + 1, _array)
2492
- _length += _Length_71
2493
- local _array_73 = pair("ImageList", "sx")
2494
- local _Length_72 = #_array_73
2495
- table.move(_array_73, 1, _Length_72, _length + 1, _array)
2496
- _length += _Length_72
2497
- local _array_74 = pair("SpeedDial", "closed", {
2506
+ local _Length_17 = #_array_18
2507
+ table.move(_array_18, 1, _Length_17, _length + 1, _array)
2508
+ _length += _Length_17
2509
+ local _array_19 = pair("ImageList", "sx")
2510
+ local _Length_18 = #_array_19
2511
+ table.move(_array_19, 1, _Length_18, _length + 1, _array)
2512
+ _length += _Length_18
2513
+ local _array_20 = pair("SpeedDial", "closed", {
2498
2514
  open = false,
2499
2515
  })
2500
- local _Length_73 = #_array_74
2501
- table.move(_array_74, 1, _Length_73, _length + 1, _array)
2502
- _length += _Length_73
2503
- local _array_75 = pair("SpeedDial", "open", {
2516
+ local _Length_19 = #_array_20
2517
+ table.move(_array_20, 1, _Length_19, _length + 1, _array)
2518
+ _length += _Length_19
2519
+ local _array_21 = pair("SpeedDial", "open", {
2504
2520
  open = true,
2505
2521
  })
2506
- local _Length_74 = #_array_75
2507
- table.move(_array_75, 1, _Length_74, _length + 1, _array)
2508
- _length += _Length_74
2509
- local _array_76 = pair("SpeedDial", "disabled", {
2522
+ local _Length_20 = #_array_21
2523
+ table.move(_array_21, 1, _Length_20, _length + 1, _array)
2524
+ _length += _Length_20
2525
+ local _array_22 = pair("SpeedDial", "disabled", {
2510
2526
  open = false,
2511
2527
  disabled = true,
2512
2528
  })
2513
- local _Length_75 = #_array_76
2514
- table.move(_array_76, 1, _Length_75, _length + 1, _array)
2515
- _length += _Length_75
2516
- local _array_77 = pair("SpeedDial", "down", {
2529
+ local _Length_21 = #_array_22
2530
+ table.move(_array_22, 1, _Length_21, _length + 1, _array)
2531
+ _length += _Length_21
2532
+ local _array_23 = pair("SpeedDial", "down", {
2517
2533
  open = true,
2518
2534
  variant = "down",
2519
2535
  })
2520
- local _Length_76 = #_array_77
2521
- table.move(_array_77, 1, _Length_76, _length + 1, _array)
2522
- _length += _Length_76
2523
- local _array_78 = pair("SpeedDial", "sx", {
2536
+ local _Length_22 = #_array_23
2537
+ table.move(_array_23, 1, _Length_22, _length + 1, _array)
2538
+ _length += _Length_22
2539
+ local _array_24 = pair("SpeedDial", "sx", {
2524
2540
  open = false,
2525
2541
  })
2526
- local _Length_77 = #_array_78
2527
- table.move(_array_78, 1, _Length_77, _length + 1, _array)
2528
- _length += _Length_77
2529
- local _array_79 = pair("List", "sx")
2530
- local _Length_78 = #_array_79
2531
- table.move(_array_79, 1, _Length_78, _length + 1, _array)
2532
- _length += _Length_78
2533
- local _array_80 = pair("Preloader", "sx")
2534
- local _Length_79 = #_array_80
2535
- table.move(_array_80, 1, _Length_79, _length + 1, _array)
2536
- _length += _Length_79
2537
- local _array_81 = pair("VirtualList", "sx")
2538
- local _Length_80 = #_array_81
2539
- table.move(_array_81, 1, _Length_80, _length + 1, _array)
2540
- _length += _Length_80
2541
- local _array_82 = pair("FormLabel", "default", {
2542
+ local _Length_23 = #_array_24
2543
+ table.move(_array_24, 1, _Length_23, _length + 1, _array)
2544
+ _length += _Length_23
2545
+ local _array_25 = pair("List", "sx")
2546
+ local _Length_24 = #_array_25
2547
+ table.move(_array_25, 1, _Length_24, _length + 1, _array)
2548
+ _length += _Length_24
2549
+ local _array_26 = pair("Preloader", "sx")
2550
+ local _Length_25 = #_array_26
2551
+ table.move(_array_26, 1, _Length_25, _length + 1, _array)
2552
+ _length += _Length_25
2553
+ local _array_27 = pair("VirtualList", "sx")
2554
+ local _Length_26 = #_array_27
2555
+ table.move(_array_27, 1, _Length_26, _length + 1, _array)
2556
+ _length += _Length_26
2557
+ local _array_28 = pair("FormLabel", "default", {
2542
2558
  text = "Email",
2543
2559
  })
2544
- local _Length_81 = #_array_82
2545
- table.move(_array_82, 1, _Length_81, _length + 1, _array)
2546
- _length += _Length_81
2547
- local _array_83 = pair("FormLabel", "required", {
2560
+ local _Length_27 = #_array_28
2561
+ table.move(_array_28, 1, _Length_27, _length + 1, _array)
2562
+ _length += _Length_27
2563
+ local _array_29 = pair("FormLabel", "required", {
2548
2564
  text = "Email",
2549
2565
  value = true,
2550
2566
  })
2551
- local _Length_82 = #_array_83
2552
- table.move(_array_83, 1, _Length_82, _length + 1, _array)
2553
- _length += _Length_82
2554
- local _array_84 = pair("FormLabel", "error", {
2567
+ local _Length_28 = #_array_29
2568
+ table.move(_array_29, 1, _Length_28, _length + 1, _array)
2569
+ _length += _Length_28
2570
+ local _array_30 = pair("FormLabel", "error", {
2555
2571
  text = "Email",
2556
2572
  hasError = true,
2557
2573
  })
2558
- local _Length_83 = #_array_84
2559
- table.move(_array_84, 1, _Length_83, _length + 1, _array)
2560
- _length += _Length_83
2561
- local _array_85 = pair("FormLabel", "sx", {
2574
+ local _Length_29 = #_array_30
2575
+ table.move(_array_30, 1, _Length_29, _length + 1, _array)
2576
+ _length += _Length_29
2577
+ local _array_31 = pair("FormLabel", "sx", {
2562
2578
  text = "Email",
2563
2579
  variant = "sx",
2564
2580
  })
2565
- local _Length_84 = #_array_85
2566
- table.move(_array_85, 1, _Length_84, _length + 1, _array)
2567
- _length += _Length_84
2568
- local _array_86 = pair("FormHelperText", "default", {
2581
+ local _Length_30 = #_array_31
2582
+ table.move(_array_31, 1, _Length_30, _length + 1, _array)
2583
+ _length += _Length_30
2584
+ local _array_32 = pair("FormHelperText", "default", {
2569
2585
  text = "We never share this",
2570
2586
  })
2571
- local _Length_85 = #_array_86
2572
- table.move(_array_86, 1, _Length_85, _length + 1, _array)
2573
- _length += _Length_85
2574
- local _array_87 = pair("FormHelperText", "error", {
2587
+ local _Length_31 = #_array_32
2588
+ table.move(_array_32, 1, _Length_31, _length + 1, _array)
2589
+ _length += _Length_31
2590
+ local _array_33 = pair("FormHelperText", "error", {
2575
2591
  text = "Required",
2576
2592
  hasError = true,
2577
2593
  })
2578
- local _Length_86 = #_array_87
2579
- table.move(_array_87, 1, _Length_86, _length + 1, _array)
2580
- _length += _Length_86
2581
- local _array_88 = pair("FormHelperText", "sx", {
2594
+ local _Length_32 = #_array_33
2595
+ table.move(_array_33, 1, _Length_32, _length + 1, _array)
2596
+ _length += _Length_32
2597
+ local _array_34 = pair("FormHelperText", "sx", {
2582
2598
  text = "Hint",
2583
2599
  variant = "sx",
2584
2600
  })
2585
- local _Length_87 = #_array_88
2586
- table.move(_array_88, 1, _Length_87, _length + 1, _array)
2587
- _length += _Length_87
2588
- local _array_89 = pair("Typography", "sx", {
2601
+ local _Length_33 = #_array_34
2602
+ table.move(_array_34, 1, _Length_33, _length + 1, _array)
2603
+ _length += _Length_33
2604
+ local _array_35 = pair("Typography", "sx", {
2589
2605
  text = "Title",
2590
2606
  variant = "sx",
2591
2607
  })
2592
- local _Length_88 = #_array_89
2593
- table.move(_array_89, 1, _Length_88, _length + 1, _array)
2594
- _length += _Length_88
2595
- local _array_90 = pair("Menu", "closed", {
2608
+ local _Length_34 = #_array_35
2609
+ table.move(_array_35, 1, _Length_34, _length + 1, _array)
2610
+ _length += _Length_34
2611
+ local _array_36 = pair("Menu", "closed", {
2596
2612
  open = false,
2597
2613
  })
2598
- local _Length_89 = #_array_90
2599
- table.move(_array_90, 1, _Length_89, _length + 1, _array)
2600
- _length += _Length_89
2601
- local _array_91 = pair("Menu", "open", {
2614
+ local _Length_35 = #_array_36
2615
+ table.move(_array_36, 1, _Length_35, _length + 1, _array)
2616
+ _length += _Length_35
2617
+ local _array_37 = pair("Menu", "open", {
2602
2618
  open = true,
2603
2619
  })
2604
- local _Length_90 = #_array_91
2605
- table.move(_array_91, 1, _Length_90, _length + 1, _array)
2606
- _length += _Length_90
2607
- local _array_92 = pair("Menu", "empty", {
2620
+ local _Length_36 = #_array_37
2621
+ table.move(_array_37, 1, _Length_36, _length + 1, _array)
2622
+ _length += _Length_36
2623
+ local _array_38 = pair("Menu", "empty", {
2608
2624
  open = true,
2609
2625
  options = {},
2610
2626
  })
2611
- local _Length_91 = #_array_92
2612
- table.move(_array_92, 1, _Length_91, _length + 1, _array)
2613
- _length += _Length_91
2614
- local _array_93 = pair("Menu", "dense", {
2627
+ local _Length_37 = #_array_38
2628
+ table.move(_array_38, 1, _Length_37, _length + 1, _array)
2629
+ _length += _Length_37
2630
+ local _array_39 = pair("Menu", "dense", {
2615
2631
  open = true,
2616
2632
  variant = "dense",
2617
2633
  })
2618
- local _Length_92 = #_array_93
2619
- table.move(_array_93, 1, _Length_92, _length + 1, _array)
2620
- _length += _Length_92
2621
- local _array_94 = pair("Menu", "selected", {
2634
+ local _Length_38 = #_array_39
2635
+ table.move(_array_39, 1, _Length_38, _length + 1, _array)
2636
+ _length += _Length_38
2637
+ local _array_40 = pair("Menu", "selected", {
2622
2638
  open = true,
2623
2639
  selected = "a",
2624
2640
  })
2625
- local _Length_93 = #_array_94
2626
- table.move(_array_94, 1, _Length_93, _length + 1, _array)
2627
- _length += _Length_93
2628
- local _array_95 = pair("Menu", "sx", {
2641
+ local _Length_39 = #_array_40
2642
+ table.move(_array_40, 1, _Length_39, _length + 1, _array)
2643
+ _length += _Length_39
2644
+ local _array_41 = pair("Menu", "sx", {
2629
2645
  open = true,
2630
2646
  })
2631
- local _Length_94 = #_array_95
2632
- table.move(_array_95, 1, _Length_94, _length + 1, _array)
2633
- _length += _Length_94
2634
- local _array_96 = pair("Markdown", "default", {
2647
+ local _Length_40 = #_array_41
2648
+ table.move(_array_41, 1, _Length_40, _length + 1, _array)
2649
+ _length += _Length_40
2650
+ local _array_42 = pair("Markdown", "default", {
2635
2651
  text = "# Title\n\nHello **world**",
2636
2652
  })
2637
- local _Length_95 = #_array_96
2638
- table.move(_array_96, 1, _Length_95, _length + 1, _array)
2639
- _length += _Length_95
2640
- local _array_97 = pair("Markdown", "empty", {
2653
+ local _Length_41 = #_array_42
2654
+ table.move(_array_42, 1, _Length_41, _length + 1, _array)
2655
+ _length += _Length_41
2656
+ local _array_43 = pair("Markdown", "empty", {
2641
2657
  text = "",
2642
2658
  })
2643
- local _Length_96 = #_array_97
2644
- table.move(_array_97, 1, _Length_96, _length + 1, _array)
2645
- _length += _Length_96
2646
- local _array_98 = pair("Markdown", "sx", {
2659
+ local _Length_42 = #_array_43
2660
+ table.move(_array_43, 1, _Length_42, _length + 1, _array)
2661
+ _length += _Length_42
2662
+ local _array_44 = pair("Markdown", "sx", {
2647
2663
  text = "# Title",
2648
2664
  })
2649
- local _Length_97 = #_array_98
2650
- table.move(_array_98, 1, _Length_97, _length + 1, _array)
2651
- _length += _Length_97
2652
- local _array_99 = pair("MarkdownEditor", "split", {
2665
+ local _Length_43 = #_array_44
2666
+ table.move(_array_44, 1, _Length_43, _length + 1, _array)
2667
+ _length += _Length_43
2668
+ local _array_45 = pair("MarkdownEditor", "split", {
2653
2669
  text = "# Title",
2654
2670
  variant = "split",
2655
2671
  })
2656
- local _Length_98 = #_array_99
2657
- table.move(_array_99, 1, _Length_98, _length + 1, _array)
2658
- _length += _Length_98
2659
- local _array_100 = pair("MarkdownEditor", "edit", {
2672
+ local _Length_44 = #_array_45
2673
+ table.move(_array_45, 1, _Length_44, _length + 1, _array)
2674
+ _length += _Length_44
2675
+ local _array_46 = pair("MarkdownEditor", "edit", {
2660
2676
  text = "# Title",
2661
2677
  variant = "edit",
2662
2678
  })
2663
- local _Length_99 = #_array_100
2664
- table.move(_array_100, 1, _Length_99, _length + 1, _array)
2665
- _length += _Length_99
2666
- local _array_101 = pair("MarkdownEditor", "preview", {
2679
+ local _Length_45 = #_array_46
2680
+ table.move(_array_46, 1, _Length_45, _length + 1, _array)
2681
+ _length += _Length_45
2682
+ local _array_47 = pair("MarkdownEditor", "preview", {
2667
2683
  text = "# Title",
2668
2684
  variant = "preview",
2669
2685
  })
2670
- local _Length_100 = #_array_101
2671
- table.move(_array_101, 1, _Length_100, _length + 1, _array)
2672
- _length += _Length_100
2673
- local _array_102 = pair("MarkdownEditor", "density-compact", {
2686
+ local _Length_46 = #_array_47
2687
+ table.move(_array_47, 1, _Length_46, _length + 1, _array)
2688
+ _length += _Length_46
2689
+ local _array_48 = pair("MarkdownEditor", "density-compact", {
2674
2690
  text = "# Title",
2675
2691
  density = "compact",
2676
2692
  variant = "split",
2677
2693
  })
2678
- local _Length_101 = #_array_102
2679
- table.move(_array_102, 1, _Length_101, _length + 1, _array)
2680
- _length += _Length_101
2681
- local _array_103 = pair("MarkdownEditor", "sx", {
2694
+ local _Length_47 = #_array_48
2695
+ table.move(_array_48, 1, _Length_47, _length + 1, _array)
2696
+ _length += _Length_47
2697
+ local _array_49 = pair("MarkdownEditor", "sx", {
2682
2698
  text = "# Title",
2683
2699
  variant = "split",
2684
2700
  })
2685
- table.move(_array_103, 1, #_array_103, _length + 1, _array)
2701
+ table.move(_array_49, 1, #_array_49, _length + 1, _array)
2686
2702
  return _array
2687
2703
  end
2688
2704
  local function concatRows(...)
@@ -2695,7 +2711,7 @@ local function concatRows(...)
2695
2711
  end
2696
2712
  return out
2697
2713
  end
2698
- local stateMatrix = concatRows(controlsRows(), editorsRows(), togglesRows(), compositeRows(), surfacesRows(), chromeRows(), miscRows())
2714
+ local stateMatrix = concatRows(controlsRows(), editorsRows(), togglesRows(), compositeRows(), surfacesRows(), chromeRows(), miscRowsA(), miscRowsB())
2699
2715
  return {
2700
2716
  stateMatrix = stateMatrix,
2701
2717
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rbxts/uiblox",
3
- "version": "0.2.0-alpha.26",
3
+ "version": "0.2.0-alpha.28",
4
4
  "description": "UI Library and theming for roblox-ts projects",
5
5
  "main": "out/init.luau",
6
6
  "packageManager": "pnpm@11.3.0",