@rbxts/react-clean-ui 1.0.12 → 1.0.19

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 (43) hide show
  1. package/out/Components/Chart/Pie.d.ts +27 -0
  2. package/out/Components/Chart/Pie.luau +281 -0
  3. package/out/Components/Chart/index.d.ts +1 -0
  4. package/out/Components/Chart/init.luau +7 -0
  5. package/out/Components/Decorator/BoxShadow.d.ts +2 -1
  6. package/out/Components/Decorator/BoxShadow.luau +51 -28
  7. package/out/Components/Input/Select.d.ts +6 -14
  8. package/out/Components/Input/Select.luau +111 -151
  9. package/out/Components/Input/Slider.d.ts +3 -37
  10. package/out/Components/Input/Slider.luau +271 -300
  11. package/out/Components/Layout/Column.d.ts +2 -8
  12. package/out/Components/Layout/Column.luau +28 -48
  13. package/out/Components/Layout/Draggable.d.ts +7 -31
  14. package/out/Components/Layout/Draggable.luau +190 -214
  15. package/out/Components/Layout/Fieldset.d.ts +8 -18
  16. package/out/Components/Layout/Fieldset.luau +42 -84
  17. package/out/Components/Layout/Group.d.ts +7 -14
  18. package/out/Components/Layout/Group.luau +111 -129
  19. package/out/Components/Layout/Row.d.ts +2 -11
  20. package/out/Components/Layout/Row.luau +46 -71
  21. package/out/Components/Layout/Tabs.d.ts +10 -18
  22. package/out/Components/Layout/Tabs.luau +85 -104
  23. package/out/Components/Navigation/Menu.d.ts +6 -10
  24. package/out/Components/Navigation/Menu.luau +38 -65
  25. package/out/Components/Surface/Card.d.ts +8 -11
  26. package/out/Components/Surface/Card.luau +28 -48
  27. package/out/Components/Surface/index.d.ts +0 -1
  28. package/out/Components/Surface/init.luau +0 -3
  29. package/out/Components/index.d.ts +1 -0
  30. package/out/Components/init.luau +3 -0
  31. package/out/Helpers/css.helper.d.ts +2 -1
  32. package/out/Helpers/css.helper.luau +25 -0
  33. package/out/Helpers/size.helper.luau +1 -1
  34. package/out/Interfaces/clean.element.props.d.ts +5 -0
  35. package/out/Providers/registry.provider.d.ts +1 -0
  36. package/out/Providers/registry.provider.luau +5 -0
  37. package/out/Theme/theme.template.d.ts +15 -1
  38. package/out/Theme/themes/dark.theme.luau +3 -0
  39. package/out/Theme/themes/default.theme.luau +15 -0
  40. package/out/Theme/themes/sandstone.theme.luau +13 -0
  41. package/package.json +1 -1
  42. package/out/Components/Surface/Panel.d.ts +0 -4
  43. package/out/Components/Surface/Panel.luau +0 -33
@@ -1,9 +1,6 @@
1
1
  -- Compiled with roblox-ts v3.0.0
2
2
  local TS = _G[script]
3
- local _react = TS.import(script, TS.getModule(script, "@rbxts", "react"))
4
- local React = _react
5
- local Component = _react.Component
6
- local ReactComponent = _react.ReactComponent
3
+ local React = TS.import(script, TS.getModule(script, "@rbxts", "react"))
7
4
  local ReactRoblox = TS.import(script, TS.getModule(script, "@rbxts", "react-roblox"))
8
5
  local _Contexts = TS.import(script, script.Parent.Parent.Parent, "Contexts")
9
6
  local CleanThemeContext = _Contexts.CleanThemeContext
@@ -16,6 +13,7 @@ local _Decorator = TS.import(script, script.Parent.Parent, "Decorator")
16
13
  local Corners = _Decorator.Corners
17
14
  local Padding = _Decorator.Padding
18
15
  local _Layout = TS.import(script, script.Parent.Parent, "Layout")
16
+ local Container = _Layout.Container
19
17
  local FieldsetContext = _Layout.FieldsetContext
20
18
  local FlexItem = _Layout.FlexItem
21
19
  local HStack = _Layout.HStack
@@ -77,101 +75,131 @@ local function SelectOption(props)
77
75
  TextColor3 = ColorHelper:getIntentColors(theme, "primary", if context.selected == props.index then "focus" elseif hover then "hover" else "default", theme.components.select.intents).textColor,
78
76
  }), props.children)
79
77
  end
80
- local function ActivateSelect(context, overlay)
81
- local button = context.buttonRef.current
82
- if button and overlay.overlay then
83
- if context.open then
84
- context.closeDropdown()
85
- return nil
86
- end
87
- local buttonPosition = button.AbsolutePosition
88
- local overlayPosition = overlay.overlay.AbsolutePosition
89
- local localPosition = buttonPosition - overlayPosition
90
- context.openDropdown(UDim2.fromOffset(button.AbsoluteSize.X, button.AbsoluteSize.Y), UDim2.fromOffset(localPosition.X, localPosition.Y))
91
- end
92
- end
93
- local function SelectRenderer(props)
94
- local context = React.useContext(SelectContext)
78
+ local Select = React.forwardRef(function(props, ref)
95
79
  local theme = React.useContext(CleanThemeContext)
96
80
  local overlay = React.useContext(OverlayContext)
97
81
  local fieldset = React.useContext(FieldsetContext)
98
- local contentHeight, setContentHeight = React.useState(0)
99
- local _labelActivated = fieldset
100
- if _labelActivated ~= nil then
101
- _labelActivated = _labelActivated.labelActivated
102
- end
103
- local labelActivated = _labelActivated
104
- local overlayInstance = overlay.overlay
105
- local _buttonRef = context
106
- if _buttonRef ~= nil then
107
- _buttonRef = _buttonRef.buttonRef
108
- end
109
- local buttonRef = _buttonRef
110
- local _openDropdown = context
111
- if _openDropdown ~= nil then
112
- _openDropdown = _openDropdown.openDropdown
113
- end
114
- local openDropdown = _openDropdown
115
- local _arg0 = context ~= nil
116
- assert(_arg0, "SelectRenderer must be used inside a Select")
117
- if context.open and overlay.overlay == nil then
118
- warn("You have used a Select component without using the Overlay Provider")
82
+ local _condition = props.selected
83
+ if _condition == nil then
84
+ _condition = 0
119
85
  end
120
- local typography = TypographyHelper:getTypography(theme, context.props.scale, theme.components.select.typography)
121
- local children = React.Children.toArray(context.props.children)
122
- local selectedOption = (children[context.selected + 1] or children[1])
86
+ local selected, setSelected = React.useState(_condition)
87
+ local open, setOpen = React.useState(false)
88
+ local dropdownSize, setDropdownSize = React.useState(UDim2.fromOffset(0, 0))
89
+ local dropdownPosition, setDropdownPosition = React.useState(UDim2.fromOffset(0, 0))
90
+ local contentHeight, setContentHeight = React.useState(0)
91
+ local buttonRef = React.useRef()
92
+ local context = React.useMemo(function()
93
+ return {
94
+ selected = selected,
95
+ open = open,
96
+ dropdownSize = dropdownSize,
97
+ dropdownPosition = dropdownPosition,
98
+ buttonRef = buttonRef,
99
+ setSelected = function(index, value)
100
+ local _result = props.onChange
101
+ if _result ~= nil then
102
+ _result(index, value)
103
+ end
104
+ setSelected(index)
105
+ end,
106
+ openDropdown = function(size, position)
107
+ setDropdownPosition(position)
108
+ setDropdownSize(size)
109
+ setOpen(true)
110
+ end,
111
+ closeDropdown = function()
112
+ setOpen(false)
113
+ end,
114
+ toggleOpen = function()
115
+ setOpen(function(current)
116
+ return not current
117
+ end)
118
+ end,
119
+ }
120
+ end, { props.onChange, selected, open, dropdownSize, dropdownPosition })
121
+ local typography = TypographyHelper:getTypography(theme, props.scale, theme.components.select.typography)
122
+ local children = React.Children.toArray(props.children)
123
+ local selectedOption = (children[selected + 1] or children[1])
123
124
  local dropdownHeight = math.min(contentHeight, if props["max-height"] ~= nil then SizeHelper:toUDim(props["max-height"]).Offset else theme.components.select.maxDropDownHeight)
124
- React.useEffect(function()
125
+ local activateSelect = React.useCallback(function()
126
+ local button = buttonRef.current
127
+ local overlayInstance = overlay.overlay
128
+ if not button or not overlayInstance then
129
+ return nil
130
+ end
131
+ if open then
132
+ setOpen(false)
133
+ return nil
134
+ end
135
+ local _absolutePosition = button.AbsolutePosition
136
+ local _absolutePosition_1 = overlayInstance.AbsolutePosition
137
+ local localPosition = _absolutePosition - _absolutePosition_1
138
+ setDropdownPosition(UDim2.fromOffset(localPosition.X, localPosition.Y))
139
+ setDropdownSize(UDim2.fromOffset(button.AbsoluteSize.X, button.AbsoluteSize.Y))
140
+ setOpen(true)
141
+ end, { open, overlay.overlay })
142
+ local _exp = function()
143
+ local _labelActivated = fieldset
144
+ if _labelActivated ~= nil then
145
+ _labelActivated = _labelActivated.labelActivated
146
+ end
147
+ local labelActivated = _labelActivated
125
148
  if not labelActivated then
126
149
  return nil
127
150
  end
128
- local connection = labelActivated.Event:Connect(function()
129
- ActivateSelect(context, overlay)
130
- end)
151
+ local connection = labelActivated.Event:Connect(activateSelect)
131
152
  return function()
132
153
  return connection:Disconnect()
133
154
  end
134
- end, { labelActivated, overlayInstance, buttonRef, openDropdown })
135
- local _exp = React.createElement("uistroke", {
155
+ end
156
+ local _result = fieldset
157
+ if _result ~= nil then
158
+ _result = _result.labelActivated
159
+ end
160
+ React.useEffect(_exp, { _result, activateSelect })
161
+ if open and overlay.overlay == nil then
162
+ warn("You have used a Select component without using the Overlay Provider")
163
+ end
164
+ local _exp_1 = React.createElement("uistroke", {
136
165
  Thickness = theme.components.select.borderThickness,
137
166
  BorderStrokePosition = Enum.BorderStrokePosition.Inner,
138
167
  Color = theme.components.select.borderColor,
139
168
  })
140
- local _exp_1 = React.createElement(Corners, {
169
+ local _exp_2 = React.createElement(Corners, {
141
170
  radius = theme.components.select.cornerRadius,
142
171
  })
143
- local _attributes = table.clone(context.props)
172
+ local _attributes = table.clone(props)
144
173
  setmetatable(_attributes, nil)
145
- local _exp_2 = React.createElement(Padding, _attributes)
174
+ local _exp_3 = React.createElement(Padding, _attributes)
146
175
  local _attributes_1 = {}
147
- local _result = selectedOption
148
- if _result ~= nil then
149
- _result = _result.props.text
176
+ local _result_1 = selectedOption
177
+ if _result_1 ~= nil then
178
+ _result_1 = _result_1.props.text
150
179
  end
151
- local _condition = _result
152
- if _condition == nil then
153
- _condition = "No Options"
180
+ local _condition_1 = _result_1
181
+ if _condition_1 == nil then
182
+ _condition_1 = "No Options"
154
183
  end
155
- _attributes_1.text = _condition
184
+ _attributes_1.text = _condition_1
156
185
  _attributes_1.typography = typography
157
- local _exp_3 = React.createElement(HStack, nil, React.createElement(FlexItem, nil, React.createElement(Text, _attributes_1)), React.createElement(Icon, {
186
+ local _exp_4 = React.createElement(HStack, nil, React.createElement(FlexItem, nil, React.createElement(Text, _attributes_1)), React.createElement(Icon, {
158
187
  icon = "caret-down",
159
188
  color = theme.colors.intents.primary.default.textColor,
160
189
  }))
161
- local _condition_1 = context.open and overlay.overlay ~= nil
162
- if _condition_1 then
190
+ local _condition_2 = open and overlay.overlay ~= nil
191
+ if _condition_2 then
163
192
  local _attributes_2 = {
164
193
  BackgroundTransparency = 0,
165
194
  BackgroundColor3 = theme.components.select.dropDownBackgroundColor,
166
195
  AnchorPoint = Vector2.zero,
167
196
  }
168
- local _dropdownPosition = context.dropdownPosition
169
- local _uDim2 = UDim2.new(0, 0, 0, context.dropdownSize.Y.Offset)
170
- _attributes_2.Position = _dropdownPosition + _uDim2
171
- _attributes_2.Size = UDim2.fromOffset(context.dropdownSize.X.Offset, 0)
197
+ local _uDim2 = UDim2.new(0, 0, 0, dropdownSize.Y.Offset)
198
+ _attributes_2.Position = dropdownPosition + _uDim2
199
+ _attributes_2.Size = UDim2.fromOffset(dropdownSize.X.Offset, 0)
172
200
  _attributes_2.AutomaticSize = Enum.AutomaticSize.Y
173
201
  _attributes_2.ClipsDescendants = true
174
- _condition_1 = ReactRoblox.createPortal(React.createElement("frame", _attributes_2, React.createElement("uistroke", {
202
+ _condition_2 = ReactRoblox.createPortal(React.createElement("frame", _attributes_2, React.createElement("uistroke", {
175
203
  Thickness = theme.components.select.borderThickness,
176
204
  BorderStrokePosition = Enum.BorderStrokePosition.Outer,
177
205
  Color = theme.components.select.borderColor,
@@ -187,102 +215,34 @@ local function SelectRenderer(props)
187
215
  setContentHeight(layout.AbsoluteContentSize.Y)
188
216
  end,
189
217
  },
190
- }, React.Children.map(context.props.children, function(child, index)
218
+ }, React.Children.map(props.children, function(child, childIndex)
191
219
  if not React.isValidElement(child) then
192
220
  return child
193
221
  end
222
+ -- React.Children.map uses a 1-based index in roblox-ts.
223
+ local optionIndex = childIndex - 1
194
224
  return React.cloneElement(child, {
195
- index = index - 1,
225
+ index = optionIndex,
196
226
  })
197
227
  end)))), overlay.overlay)
198
228
  end
199
- return React.createElement("imagebutton", {
200
- ref = context.buttonRef,
229
+ return React.createElement(Container, {
230
+ ref = ref,
231
+ Size = UDim2.fromScale(1, 0),
232
+ AutomaticSize = Enum.AutomaticSize.Y,
233
+ }, React.createElement(SelectContext.Provider, {
234
+ value = context,
235
+ }, React.createElement("imagebutton", {
236
+ ref = buttonRef,
201
237
  Size = UDim2.fromScale(1, 0),
202
238
  AutomaticSize = Enum.AutomaticSize.Y,
203
239
  BackgroundTransparency = 1,
204
240
  Event = {
205
- Activated = function()
206
- ActivateSelect(context, overlay)
207
- end,
241
+ Activated = activateSelect,
208
242
  },
209
- }, _exp, _exp_1, _exp_2, _exp_3, _condition_1)
210
- end
211
- local Select
212
- do
213
- local super = Component
214
- Select = setmetatable({}, {
215
- __tostring = function()
216
- return "Select"
217
- end,
218
- __index = super,
219
- })
220
- Select.__index = Select
221
- function Select.new(...)
222
- local self = setmetatable({}, Select)
223
- return self:constructor(...) or self
224
- end
225
- function Select:constructor(...)
226
- super.constructor(self, ...)
227
- local _object = {}
228
- local _left = "selected"
229
- local _condition = self.props.selected
230
- if _condition == nil then
231
- _condition = 0
232
- end
233
- _object[_left] = _condition
234
- _object.open = false
235
- _object.dropdownSize = UDim2.fromOffset(0, 0)
236
- _object.dropdownPosition = UDim2.fromOffset(0, 0)
237
- self.state = _object
238
- self.buttonRef = React.createRef()
239
- end
240
- function Select:render()
241
- local context = {
242
- props = self.props,
243
- selected = self.state.selected,
244
- open = self.state.open,
245
- dropdownSize = self.state.dropdownSize,
246
- dropdownPosition = self.state.dropdownPosition,
247
- buttonRef = self.buttonRef,
248
- setSelected = function(selected, value)
249
- local _result = self.props.onChange
250
- if _result ~= nil then
251
- _result(selected, value)
252
- end
253
- self:setState({
254
- selected = selected,
255
- })
256
- end,
257
- openDropdown = function(size, position)
258
- self:setState({
259
- dropdownSize = size,
260
- dropdownPosition = position,
261
- open = true,
262
- })
263
- end,
264
- closeDropdown = function()
265
- self:setState({
266
- open = false,
267
- })
268
- end,
269
- toggleOpen = function()
270
- self:setState(function(state)
271
- return {
272
- open = not state.open,
273
- }
274
- end)
275
- end,
276
- }
277
- local _attributes = table.clone(self.props)
278
- setmetatable(_attributes, nil)
279
- return React.createElement(SelectContext.Provider, {
280
- value = context,
281
- }, React.createElement(SelectRenderer, _attributes))
282
- end
283
- Select.Option = SelectOption
284
- Select = ReactComponent(Select) or Select
285
- end
243
+ }, _exp_1, _exp_2, _exp_3, _exp_4, _condition_2)))
244
+ end)
245
+ Select.Option = SelectOption
286
246
  return {
287
247
  Select = Select,
288
248
  }
@@ -1,10 +1,8 @@
1
- import React, { Component } from "@rbxts/react";
1
+ import React from "@rbxts/react";
2
2
  import { ContainerProps } from "../Layout";
3
- import { CleanThemeContext } from "../../Contexts";
4
3
  type SliderValue = number | Vector2;
5
- type SliderHandleIndex = 0 | 1;
6
4
  type HighlightOption = "start" | "end" | "middle";
7
- interface SliderProps extends ContainerProps {
5
+ export interface SliderProps extends ContainerProps {
8
6
  "max-value": number;
9
7
  "min-value"?: number;
10
8
  value?: SliderValue;
@@ -15,37 +13,5 @@ interface SliderProps extends ContainerProps {
15
13
  range?: boolean;
16
14
  highlight?: HighlightOption;
17
15
  }
18
- interface SliderState {
19
- value: SliderValue;
20
- dragging: boolean;
21
- hoveredHandle?: SliderHandleIndex;
22
- }
23
- export declare class Slider extends Component<SliderProps, SliderState> {
24
- private inputChangedListener?;
25
- private inputEndedListener?;
26
- private isDragging;
27
- private activeHandle?;
28
- containerRef: React.RefObject<Frame>;
29
- static contextType: React.Context<import("../..").CleanTheme>;
30
- context: React.ContextType<typeof CleanThemeContext>;
31
- state: SliderState;
32
- private getInitialValue;
33
- /**
34
- * Returns the value currently used to render the slider.
35
- */
36
- private getCurrentValue;
37
- /**
38
- * Converts an input position into a single slider value.
39
- */
40
- private getNumberFromInput;
41
- /**
42
- * Converts a single input value into either a number or Vector2,
43
- * depending on whether range mode is enabled.
44
- */
45
- private getValueFromInput;
46
- private beginDragging;
47
- componentDidMount(): void;
48
- componentWillUnmount(): void;
49
- render(): React.ReactNode;
50
- }
16
+ export declare const Slider: React.ForwardRefExoticComponent<Omit<SliderProps, "ref"> & React.RefAttributes<Frame>>;
51
17
  export {};