@rbxts/react-clean-ui 1.0.38 → 1.2.2

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 (97) hide show
  1. package/out/Components/Chart/BarChart.d.ts +1 -0
  2. package/out/Components/Chart/BarChart.luau +149 -112
  3. package/out/Components/Chart/Pie.d.ts +1 -0
  4. package/out/Components/Chart/Pie.luau +21 -5
  5. package/out/Components/Decorator/BoxShadow.d.ts +1 -0
  6. package/out/Components/Decorator/BoxShadow.luau +12 -5
  7. package/out/Components/Decorator/Corners.d.ts +1 -0
  8. package/out/Components/Decorator/Corners.luau +12 -3
  9. package/out/Components/Decorator/Padding.d.ts +3 -1
  10. package/out/Components/Decorator/Padding.luau +12 -7
  11. package/out/Components/Input/Button.d.ts +1 -0
  12. package/out/Components/Input/Button.luau +44 -33
  13. package/out/Components/Input/Checkbox.d.ts +1 -0
  14. package/out/Components/Input/Checkbox.luau +23 -17
  15. package/out/Components/Input/HoverButton.d.ts +1 -0
  16. package/out/Components/Input/HoverButton.luau +44 -40
  17. package/out/Components/Input/Increment.d.ts +1 -0
  18. package/out/Components/Input/Increment.luau +10 -3
  19. package/out/Components/Input/Input.d.ts +3 -1
  20. package/out/Components/Input/Input.luau +96 -87
  21. package/out/Components/Input/Input.validation.d.ts +1 -0
  22. package/out/Components/Input/Input.validation.luau +21 -0
  23. package/out/Components/Input/Select.d.ts +9 -0
  24. package/out/Components/Input/Select.luau +311 -34
  25. package/out/Components/Input/Slider.luau +44 -29
  26. package/out/Components/Input/Switch.d.ts +9 -0
  27. package/out/Components/Input/Switch.luau +147 -0
  28. package/out/Components/Input/index.d.ts +1 -0
  29. package/out/Components/Input/init.luau +3 -0
  30. package/out/Components/Interaction/Modal.d.ts +14 -0
  31. package/out/Components/Interaction/Modal.luau +276 -0
  32. package/out/Components/Interaction/Toast.d.ts +2 -1
  33. package/out/Components/Interaction/Toast.luau +53 -28
  34. package/out/Components/Interaction/Tooltip.luau +36 -24
  35. package/out/Components/Interaction/index.d.ts +1 -0
  36. package/out/Components/Interaction/init.luau +3 -0
  37. package/out/Components/Layout/Accordion.d.ts +4 -3
  38. package/out/Components/Layout/Accordion.luau +68 -21
  39. package/out/Components/Layout/Column.d.ts +1 -0
  40. package/out/Components/Layout/Column.luau +11 -6
  41. package/out/Components/Layout/Container.d.ts +1 -0
  42. package/out/Components/Layout/Container.luau +22 -16
  43. package/out/Components/Layout/Draggable.luau +25 -3
  44. package/out/Components/Layout/Fieldset.d.ts +1 -0
  45. package/out/Components/Layout/Fieldset.luau +14 -8
  46. package/out/Components/Layout/FlexItem.luau +7 -0
  47. package/out/Components/Layout/Group.d.ts +1 -0
  48. package/out/Components/Layout/Group.luau +14 -9
  49. package/out/Components/Layout/HStack.d.ts +4 -0
  50. package/out/Components/Layout/HStack.luau +17 -9
  51. package/out/Components/Layout/Pagination.d.ts +32 -0
  52. package/out/Components/Layout/Pagination.luau +405 -0
  53. package/out/Components/Layout/Row.d.ts +1 -0
  54. package/out/Components/Layout/Row.luau +22 -16
  55. package/out/Components/Layout/Scroller.d.ts +1 -0
  56. package/out/Components/Layout/Scroller.luau +22 -15
  57. package/out/Components/Layout/Table.d.ts +31 -0
  58. package/out/Components/Layout/Table.luau +342 -0
  59. package/out/Components/Layout/Tabs.d.ts +22 -11
  60. package/out/Components/Layout/Tabs.luau +139 -122
  61. package/out/Components/Layout/VStack.d.ts +3 -0
  62. package/out/Components/Layout/VStack.luau +17 -10
  63. package/out/Components/Layout/index.d.ts +2 -0
  64. package/out/Components/Layout/init.luau +6 -0
  65. package/out/Components/Navigation/Menu.d.ts +1 -0
  66. package/out/Components/Navigation/Menu.luau +14 -3
  67. package/out/Components/Surface/Box.d.ts +1 -0
  68. package/out/Components/Surface/Box.luau +29 -27
  69. package/out/Components/Surface/Card.d.ts +7 -2
  70. package/out/Components/Surface/Card.luau +106 -65
  71. package/out/Components/Surface/Icon.d.ts +1 -0
  72. package/out/Components/Surface/Icon.luau +25 -16
  73. package/out/Components/Typography/Text.d.ts +1 -0
  74. package/out/Components/Typography/Text.luau +57 -47
  75. package/out/Contexts/index.d.ts +1 -0
  76. package/out/Contexts/init.luau +3 -0
  77. package/out/Contexts/modal.context.d.ts +15 -0
  78. package/out/Contexts/modal.context.luau +26 -0
  79. package/out/Contexts/toast.context.d.ts +1 -0
  80. package/out/Helpers/spacing.helper.d.ts +3 -2
  81. package/out/Helpers/spacing.helper.luau +102 -18
  82. package/out/Interfaces/css.types.d.ts +2 -0
  83. package/out/Interfaces/css.types.luau +4 -0
  84. package/out/Interfaces/index.d.ts +4 -4
  85. package/out/Interfaces/init.luau +0 -12
  86. package/out/Providers/app.provider.luau +2 -1
  87. package/out/Providers/index.d.ts +1 -0
  88. package/out/Providers/init.luau +3 -0
  89. package/out/Providers/modal.provider.d.ts +6 -0
  90. package/out/Providers/modal.provider.luau +86 -0
  91. package/out/Providers/overlay.provider.luau +1 -0
  92. package/out/Theme/theme.template.d.ts +99 -3
  93. package/out/Theme/themes/dark.theme.luau +103 -0
  94. package/out/Theme/themes/default.theme.luau +130 -0
  95. package/out/Theme/themes/sandstone.theme.luau +103 -0
  96. package/out/Theme/themes/wooden.theme.luau +235 -2
  97. package/package.json +2 -2
@@ -1,4 +1,6 @@
1
1
  -- Compiled with roblox-ts v3.0.0
2
+ local TS = _G[script]
3
+ local CssHelper = TS.import(script, script.Parent, "css.helper").CssHelper
2
4
  local SpacingHelper
3
5
  do
4
6
  SpacingHelper = setmetatable({}, {
@@ -13,35 +15,117 @@ do
13
15
  end
14
16
  function SpacingHelper:constructor()
15
17
  end
16
- function SpacingHelper:GetResolvedPadding(theme, props, component)
17
- local amount = self:GetPadding(theme, props.spacing, component)
18
- return {
19
- top = if props.top then self:GetPadding(theme, props.top) else amount,
20
- bottom = if props.bottom then self:GetPadding(theme, props.bottom) else amount,
21
- left = if props.left then self:GetPadding(theme, props.left) else amount,
22
- right = if props.right then self:GetPadding(theme, props.right) else amount,
23
- }
24
- end
25
18
  function SpacingHelper:GetPadding(theme, spacing, component)
26
19
  if spacing == "None" then
27
20
  return 0
28
21
  end
29
- local resolveSpacing = if spacing ~= nil then spacing else theme.default.spacing
30
- local _result
31
- if component ~= nil then
32
- local _condition = component[resolveSpacing]
22
+ local key = spacing or theme.default.spacing
23
+ local _result = component
24
+ if _result ~= nil then
25
+ _result = _result[key]
26
+ end
27
+ local _condition = _result
28
+ if _condition == nil then
29
+ _condition = theme.spacing[key]
33
30
  if _condition == nil then
34
31
  _condition = 0
35
32
  end
36
- _result = _condition
33
+ end
34
+ return _condition
35
+ end
36
+ function SpacingHelper:GetResolvedPadding(theme, props, componentSpacing, componentPadding, defaultSpacing)
37
+ if props.resolvedPadding ~= nil then
38
+ return props.resolvedPadding
39
+ end
40
+ local isNone = props.spacing == "None"
41
+ local key = if props.spacing ~= nil and props.spacing ~= "None" then props.spacing else (defaultSpacing or theme.default.spacing)
42
+ -- tier 3: a scale-indexed map picks the quad for the active key
43
+ -- (falling through to tiers 1/2 if that key isn't defined in the
44
+ -- map); a plain quad applies regardless of key.
45
+ local _result
46
+ if isNone or componentPadding == nil then
47
+ _result = nil
48
+ else
49
+ local _componentPadding = componentPadding
50
+ _result = if type(_componentPadding) == "table" then componentPadding[key] else componentPadding
51
+ end
52
+ local quadForKey = _result
53
+ local base = if quadForKey ~= nil then CssHelper:parseCssQuad(quadForKey) else self:ResolveNumberPadding(if isNone then 0 else self:GetPadding(theme, key, componentSpacing))
54
+ local instanceQuad = if props.padding ~= nil then CssHelper:parseCssQuad(props.padding) else nil
55
+ local _object = {}
56
+ local _left = "top"
57
+ local _result_1
58
+ if props.top ~= nil then
59
+ _result_1 = self:GetPadding(theme, props.top, componentSpacing)
37
60
  else
38
- local _condition = theme.spacing[resolveSpacing]
61
+ local _result_2 = instanceQuad
62
+ if _result_2 ~= nil then
63
+ _result_2 = _result_2.top
64
+ end
65
+ local _condition = _result_2
39
66
  if _condition == nil then
40
- _condition = 0
67
+ _condition = base.top
68
+ end
69
+ _result_1 = _condition
70
+ end
71
+ _object[_left] = _result_1
72
+ local _left_1 = "bottom"
73
+ local _result_2
74
+ if props.bottom ~= nil then
75
+ _result_2 = self:GetPadding(theme, props.bottom, componentSpacing)
76
+ else
77
+ local _result_3 = instanceQuad
78
+ if _result_3 ~= nil then
79
+ _result_3 = _result_3.bottom
80
+ end
81
+ local _condition = _result_3
82
+ if _condition == nil then
83
+ _condition = base.bottom
84
+ end
85
+ _result_2 = _condition
86
+ end
87
+ _object[_left_1] = _result_2
88
+ local _left_2 = "left"
89
+ local _result_3
90
+ if props.left ~= nil then
91
+ _result_3 = self:GetPadding(theme, props.left, componentSpacing)
92
+ else
93
+ local _result_4 = instanceQuad
94
+ if _result_4 ~= nil then
95
+ _result_4 = _result_4.left
96
+ end
97
+ local _condition = _result_4
98
+ if _condition == nil then
99
+ _condition = base.left
41
100
  end
42
- _result = _condition
101
+ _result_3 = _condition
102
+ end
103
+ _object[_left_2] = _result_3
104
+ local _left_3 = "right"
105
+ local _result_4
106
+ if props.right ~= nil then
107
+ _result_4 = self:GetPadding(theme, props.right, componentSpacing)
108
+ else
109
+ local _result_5 = instanceQuad
110
+ if _result_5 ~= nil then
111
+ _result_5 = _result_5.right
112
+ end
113
+ local _condition = _result_5
114
+ if _condition == nil then
115
+ _condition = base.right
116
+ end
117
+ _result_4 = _condition
118
+ end
119
+ _object[_left_3] = _result_4
120
+ return _object
121
+ end
122
+ function SpacingHelper:GetExplicitPadding(componentPadding, key)
123
+ if componentPadding == nil then
124
+ return nil
43
125
  end
44
- return _result
126
+ local _componentPadding = componentPadding
127
+ local quad = if type(_componentPadding) == "table" then componentPadding[key] else componentPadding
128
+ return if quad ~= nil then CssHelper:parseCssQuad(quad) else nil
45
129
  end
46
130
  function SpacingHelper:ResolveNumberPadding(value)
47
131
  return {
@@ -1,3 +1,4 @@
1
+ import { ScaleSizeValue } from "./responsive.types";
1
2
  export type CssUnit = "px" | "%";
2
3
  export type CssSize = "Auto" | number | `${number}` | `${number}${CssUnit}`;
3
4
  export type CssCalcSize = CssSize | `${number}% - ${number}px` | `${number}% + ${number}px`;
@@ -25,4 +26,5 @@ export type CssBoxShadow = {
25
26
  transparency: number;
26
27
  };
27
28
  export type CssPadding = CssQuad;
29
+ export type ScaledCssPadding = CssPadding | ScaleSizeValue<CssPadding>;
28
30
  export type ResponsiveCssSize = CssSize | CssBreakpointSize;
@@ -15,3 +15,7 @@
15
15
  -- absolute pixel corner coordinates for Rect.new(minX, minY, maxX, maxY)-style slicing,
16
16
  -- e.g. Roblox's SliceCenter — not a CSS border-image-slice edge-inset shorthand, since
17
17
  -- Roblox has no intrinsic-image-size equivalent to derive corners from an inset alone
18
+ -- A CssPadding quad, or a scale-key-indexed map of quads (e.g. a component's
19
+ -- theme.components.X.padding tier, which can pick a different quad shape per
20
+ -- spacing scale key the same way theme.components.X.spacing does for the
21
+ -- numeric tier).
@@ -1,5 +1,5 @@
1
- export * from './css.types';
1
+ export type * from './css.types';
2
2
  export * from './responsive.types';
3
- export * from './element.props';
4
- export * from './semantics';
5
- export * from './icon';
3
+ export type * from './element.props';
4
+ export type * from './semantics';
5
+ export type * from './icon';
@@ -1,19 +1,7 @@
1
1
  -- Compiled with roblox-ts v3.0.0
2
2
  local TS = _G[script]
3
3
  local exports = {}
4
- for _k, _v in TS.import(script, script, "css.types") or {} do
5
- exports[_k] = _v
6
- end
7
4
  for _k, _v in TS.import(script, script, "responsive.types") or {} do
8
5
  exports[_k] = _v
9
6
  end
10
- for _k, _v in TS.import(script, script, "element.props") or {} do
11
- exports[_k] = _v
12
- end
13
- for _k, _v in TS.import(script, script, "semantics") or {} do
14
- exports[_k] = _v
15
- end
16
- for _k, _v in TS.import(script, script, "icon") or {} do
17
- exports[_k] = _v
18
- end
19
7
  return exports
@@ -5,6 +5,7 @@ local ToastContainer = TS.import(script, script.Parent.Parent, "Components", "In
5
5
  local RegistryProvider = TS.import(script, script.Parent, "registry.provider").RegistryProvider
6
6
  local ThemeProvider = TS.import(script, script.Parent, "theme.provider").ThemeProvider
7
7
  local OverlayProvider = TS.import(script, script.Parent, "overlay.provider").OverlayProvider
8
+ local ModalProvider = TS.import(script, script.Parent, "modal.provider").ModalProvider
8
9
  local ToastProvider = TS.import(script, script.Parent, "toast.provider").ToastProvider
9
10
  local function CleanUiProvider(_param)
10
11
  local children = _param.children
@@ -15,7 +16,7 @@ local function CleanUiProvider(_param)
15
16
  end
16
17
  return React.createElement(RegistryProvider, nil, React.createElement(ThemeProvider, {
17
18
  theme = theme,
18
- }, React.createElement(OverlayProvider, nil, React.createElement(ToastProvider, nil, children, toasts and React.createElement(ToastContainer)))))
19
+ }, React.createElement(OverlayProvider, nil, React.createElement(ModalProvider, nil, React.createElement(ToastProvider, nil, children, toasts and React.createElement(ToastContainer))))))
19
20
  end
20
21
  return {
21
22
  CleanUiProvider = CleanUiProvider,
@@ -1,3 +1,4 @@
1
+ export * from './modal.provider';
1
2
  export * from './overlay.provider';
2
3
  export * from './registry.provider';
3
4
  export * from './theme.provider';
@@ -1,6 +1,9 @@
1
1
  -- Compiled with roblox-ts v3.0.0
2
2
  local TS = _G[script]
3
3
  local exports = {}
4
+ for _k, _v in TS.import(script, script, "modal.provider") or {} do
5
+ exports[_k] = _v
6
+ end
4
7
  for _k, _v in TS.import(script, script, "overlay.provider") or {} do
5
8
  exports[_k] = _v
6
9
  end
@@ -0,0 +1,6 @@
1
+ import React from "@rbxts/react";
2
+ interface ModalProviderProps {
3
+ children?: React.ReactNode;
4
+ }
5
+ export declare function ModalProvider(props: ModalProviderProps): React.JSX.Element;
6
+ export {};
@@ -0,0 +1,86 @@
1
+ -- Compiled with roblox-ts v3.0.0
2
+ local TS = _G[script]
3
+ local React = TS.import(script, TS.getModule(script, "@rbxts", "react"))
4
+ local ModalStackContext = TS.import(script, script.Parent.Parent, "Contexts", "modal.context").ModalStackContext
5
+ local CustomInputService = TS.import(script, script.Parent.Parent, "Helpers", "input.helper").CustomInputService
6
+ local function ModalProvider(props)
7
+ local stack, setStack = React.useState({})
8
+ local stackRef = React.useRef(stack)
9
+ React.useEffect(function()
10
+ stackRef.current = stack
11
+ end, { stack })
12
+ local register = React.useCallback(function(layer)
13
+ setStack(function(current)
14
+ local _array = {}
15
+ local _length = #_array
16
+ local _currentLength = #current
17
+ table.move(current, 1, _currentLength, _length + 1, _array)
18
+ _length += _currentLength
19
+ _array[_length + 1] = layer
20
+ return _array
21
+ end)
22
+ end, {})
23
+ local unregister = React.useCallback(function(id)
24
+ setStack(function(current)
25
+ -- ▼ ReadonlyArray.filter ▼
26
+ local _newValue = {}
27
+ local _callback = function(layer)
28
+ return layer.id ~= id
29
+ end
30
+ local _length = 0
31
+ for _k, _v in current do
32
+ if _callback(_v, _k - 1, current) == true then
33
+ _length += 1
34
+ _newValue[_length] = _v
35
+ end
36
+ end
37
+ -- ▲ ReadonlyArray.filter ▲
38
+ return _newValue
39
+ end)
40
+ end, {})
41
+ local getLayerIndex = React.useCallback(function(id)
42
+ -- ▼ ReadonlyArray.findIndex ▼
43
+ local _callback = function(layer)
44
+ return layer.id == id
45
+ end
46
+ local _result = -1
47
+ for _i, _v in stack do
48
+ if _callback(_v, _i - 1, stack) == true then
49
+ _result = _i - 1
50
+ break
51
+ end
52
+ end
53
+ -- ▲ ReadonlyArray.findIndex ▲
54
+ return _result
55
+ end, { stack })
56
+ React.useEffect(function()
57
+ local connection = CustomInputService.InputBegan:Connect(function(input, gameProcessed)
58
+ if gameProcessed then
59
+ return nil
60
+ end
61
+ if input.KeyCode ~= Enum.KeyCode.Escape and input.KeyCode ~= Enum.KeyCode.ButtonB then
62
+ return nil
63
+ end
64
+ local top = stackRef.current[#stackRef.current]
65
+ if top ~= nil and top.closeOnEscape() then
66
+ top.requestClose()
67
+ end
68
+ end)
69
+ return function()
70
+ connection:Disconnect()
71
+ end
72
+ end, {})
73
+ local value = React.useMemo(function()
74
+ return {
75
+ register = register,
76
+ unregister = unregister,
77
+ getLayerIndex = getLayerIndex,
78
+ }
79
+ end, { register, unregister, getLayerIndex })
80
+ return React.createElement(ModalStackContext.Provider, {
81
+ value = value,
82
+ }, props.children)
83
+ end
84
+ return {
85
+ ModalProvider = ModalProvider,
86
+ }
@@ -11,6 +11,7 @@ local function OverlayProvider(props)
11
11
  overlay = overlay,
12
12
  },
13
13
  }, props.children, React.createElement("frame", {
14
+ key = "OverlayProvider",
14
15
  ref = function(instance)
15
16
  setOverlay(instance)
16
17
  end,
@@ -1,4 +1,4 @@
1
- import { CssShadow, CssSize, CssPadding, Breakpoint, BreakpointValue, ScaleSizeValue, ScaleSize, Intent, IconSet, TextVariant, PositionElementProps, CssBoxShadow } from "../Interfaces/";
1
+ import { CssShadow, CssSize, ScaledCssPadding, Breakpoint, BreakpointValue, ScaleSizeValue, ScaleSize, Intent, IconSet, TextVariant, PositionElementProps, CssBoxShadow } from "../Interfaces/";
2
2
  import { TypographyStyle, ScaledTypographyStyle, IntentScheme, IntentColors, InlineIntentColors, CssBackgroundImage, CssPosition } from "./theme.style";
3
3
  export interface ThemeTemplate {
4
4
  colors: {
@@ -48,7 +48,8 @@ export interface ThemeTemplate {
48
48
  borderColor: Color3;
49
49
  borderThickness: number;
50
50
  cornerRadius: CssSize;
51
- padding?: CssPadding;
51
+ spacing?: ScaleSizeValue<number>;
52
+ padding?: ScaledCssPadding;
52
53
  boxShadow?: CssShadow;
53
54
  backgroundImage?: CssBackgroundImage;
54
55
  intents?: Partial<Record<Intent, InlineIntentColors>>;
@@ -71,6 +72,7 @@ export interface ThemeTemplate {
71
72
  typography?: Partial<TypographyStyle> | ScaledTypographyStyle;
72
73
  backgroundImage?: CssBackgroundImage;
73
74
  placeholder?: Partial<TypographyStyle> | ScaledTypographyStyle;
75
+ iconColor?: Color3;
74
76
  };
75
77
  select: {
76
78
  borderColor: Color3;
@@ -81,6 +83,18 @@ export interface ThemeTemplate {
81
83
  typography?: Partial<TypographyStyle> | ScaledTypographyStyle;
82
84
  intents?: Partial<Record<Intent, InlineIntentColors>>;
83
85
  maxDropDownHeight: number;
86
+ optGroup: {
87
+ textColor: Color3;
88
+ typography?: Partial<TypographyStyle> | ScaledTypographyStyle;
89
+ backgroundColor?: Color3;
90
+ backgroundTransparency?: number;
91
+ spacing?: ScaleSizeValue<number>;
92
+ padding?: ScaledCssPadding;
93
+ };
94
+ search: {
95
+ spacing?: ScaleSizeValue<number>;
96
+ padding?: ScaledCssPadding;
97
+ };
84
98
  };
85
99
  checkbox: {
86
100
  borderColor: Color3;
@@ -89,14 +103,42 @@ export interface ThemeTemplate {
89
103
  cornerRadius: CssSize;
90
104
  intents?: Partial<Record<Intent, InlineIntentColors>>;
91
105
  spacing?: ScaleSizeValue<number>;
106
+ padding?: ScaledCssPadding;
92
107
  backgroundImage?: CssBackgroundImage;
93
108
  };
109
+ switch: {
110
+ width: CssSize;
111
+ height: CssSize;
112
+ cornerRadius: CssSize;
113
+ borderThickness: number;
114
+ disabledTransparency: number;
115
+ animation: {
116
+ duration: number;
117
+ };
118
+ track: {
119
+ backgroundColor: Color3;
120
+ backgroundTransparency: number;
121
+ borderColor: Color3;
122
+ intents?: Partial<Record<Intent, InlineIntentColors>>;
123
+ };
124
+ thumb: {
125
+ inset: CssSize;
126
+ cornerRadius: CssSize;
127
+ backgroundColor: Color3;
128
+ backgroundTransparency: number;
129
+ borderColor: Color3;
130
+ borderThickness: number;
131
+ boxShadow?: CssShadow;
132
+ };
133
+ };
94
134
  tabs: {
95
135
  borderColor: Color3;
96
136
  backgroundColor: Color3;
137
+ backgroundImage?: CssBackgroundImage;
97
138
  borderThickness: number;
98
139
  cornerRadius: CssSize;
99
140
  spacing?: ScaleSizeValue<number>;
141
+ padding?: ScaledCssPadding;
100
142
  list: {
101
143
  borderColor?: Color3;
102
144
  backgroundColor?: Color3;
@@ -104,12 +146,32 @@ export interface ThemeTemplate {
104
146
  borderThickness: number;
105
147
  cornerRadius: CssSize;
106
148
  spacing?: ScaleSizeValue<number>;
149
+ padding?: ScaledCssPadding;
107
150
  backgroundImage?: CssBackgroundImage;
108
151
  };
109
152
  button: {
110
153
  borderThickness: number;
111
154
  cornerRadius: CssSize;
112
155
  spacing?: ScaleSizeValue<number>;
156
+ padding?: ScaledCssPadding;
157
+ boxShadow?: CssShadow;
158
+ typography?: Partial<TypographyStyle> | ScaledTypographyStyle;
159
+ intents?: Partial<Record<Intent, InlineIntentColors>>;
160
+ };
161
+ };
162
+ pagination: {
163
+ backgroundColor: Color3;
164
+ backgroundTransparency: number;
165
+ borderColor: Color3;
166
+ borderThickness: number;
167
+ cornerRadius: CssSize;
168
+ spacing?: ScaleSizeValue<number>;
169
+ padding?: ScaledCssPadding;
170
+ item: {
171
+ borderThickness: number;
172
+ cornerRadius: CssSize;
173
+ spacing?: ScaleSizeValue<number>;
174
+ padding?: ScaledCssPadding;
113
175
  boxShadow?: CssShadow;
114
176
  typography?: Partial<TypographyStyle> | ScaledTypographyStyle;
115
177
  intents?: Partial<Record<Intent, InlineIntentColors>>;
@@ -122,6 +184,7 @@ export interface ThemeTemplate {
122
184
  spacing?: ScaleSizeValue<number>;
123
185
  header: {
124
186
  spacing?: ScaleSizeValue<number>;
187
+ padding?: ScaledCssPadding;
125
188
  typography?: Partial<TypographyStyle> | ScaledTypographyStyle;
126
189
  intents?: Partial<Record<Intent, InlineIntentColors>>;
127
190
  indicatorSize: number;
@@ -129,6 +192,7 @@ export interface ThemeTemplate {
129
192
  };
130
193
  content: {
131
194
  spacing?: ScaleSizeValue<number>;
195
+ padding?: ScaledCssPadding;
132
196
  backgroundColor: Color3;
133
197
  backgroundTransparency: number;
134
198
  };
@@ -136,23 +200,45 @@ export interface ThemeTemplate {
136
200
  duration: number;
137
201
  };
138
202
  };
203
+ table: {
204
+ backgroundColor: Color3;
205
+ backgroundTransparency: number;
206
+ borderColor: Color3;
207
+ borderThickness: number;
208
+ cornerRadius: CssSize;
209
+ rowDividerColor: Color3;
210
+ rowDividerThickness: number;
211
+ header: {
212
+ backgroundColor: Color3;
213
+ backgroundTransparency: number;
214
+ typography?: Partial<TypographyStyle> | ScaledTypographyStyle;
215
+ };
216
+ cell: {
217
+ spacing?: ScaleSizeValue<number>;
218
+ padding?: ScaledCssPadding;
219
+ typography?: Partial<TypographyStyle> | ScaledTypographyStyle;
220
+ };
221
+ };
139
222
  card: {
140
223
  borderThickness: number;
141
224
  cornerRadius: CssSize;
142
225
  header: {
143
226
  borderThickness?: number;
144
227
  spacing?: ScaleSizeValue<number>;
228
+ padding?: ScaledCssPadding;
145
229
  intents?: Partial<Record<Intent, InlineIntentColors>>;
146
230
  position?: CssPosition;
147
231
  };
148
232
  footer: {
149
233
  borderThickness?: number;
150
234
  spacing?: ScaleSizeValue<number>;
235
+ padding?: ScaledCssPadding;
151
236
  intents?: Partial<Record<Intent, InlineIntentColors>>;
152
237
  position?: CssPosition;
153
238
  };
154
239
  body?: {
155
- padding?: CssPadding;
240
+ spacing?: ScaleSizeValue<number>;
241
+ padding?: ScaledCssPadding;
156
242
  };
157
243
  };
158
244
  slider: {
@@ -206,6 +292,16 @@ export interface ThemeTemplate {
206
292
  cornerRadius: CssSize;
207
293
  intents?: Partial<Record<Intent, Partial<IntentScheme>>>;
208
294
  };
295
+ modal: {
296
+ fadeDuration: number;
297
+ baseZIndex: number;
298
+ zIndexStep: number;
299
+ width?: CssSize;
300
+ backdrop: {
301
+ backgroundColor: Color3;
302
+ backgroundTransparency: number;
303
+ };
304
+ };
209
305
  charts: {
210
306
  colors: Color3[];
211
307
  pie: {
@@ -214,6 +214,7 @@ local DarkTheme = createTheme({
214
214
  placeholder = {
215
215
  color = Color3.fromHex("#697386"),
216
216
  },
217
+ iconColor = Color3.fromHex("#697386"),
217
218
  },
218
219
  select = {
219
220
  dropDownBackgroundColor = Color3.fromHex("#20252E"),
@@ -238,6 +239,25 @@ local DarkTheme = createTheme({
238
239
  },
239
240
  },
240
241
  },
242
+ optGroup = {
243
+ textColor = Color3.fromHex("#8892A6"),
244
+ spacing = {
245
+ xs = 4,
246
+ sm = 6,
247
+ md = 8,
248
+ lg = 10,
249
+ xl = 12,
250
+ },
251
+ },
252
+ search = {
253
+ spacing = {
254
+ xs = 4,
255
+ sm = 6,
256
+ md = 8,
257
+ lg = 10,
258
+ xl = 12,
259
+ },
260
+ },
241
261
  },
242
262
  checkbox = {
243
263
  borderColor = Color3.fromHex("#3A4352"),
@@ -251,6 +271,30 @@ local DarkTheme = createTheme({
251
271
  xl = 8,
252
272
  },
253
273
  },
274
+ switch = {
275
+ width = 40,
276
+ height = 22,
277
+ cornerRadius = "100%",
278
+ borderThickness = 1,
279
+ disabledTransparency = 0.5,
280
+ animation = {
281
+ duration = 0.15,
282
+ },
283
+ track = {
284
+ backgroundColor = Color3.fromHex("#2A303B"),
285
+ backgroundTransparency = 0,
286
+ borderColor = Color3.fromHex("#3A4352"),
287
+ },
288
+ thumb = {
289
+ inset = 2,
290
+ cornerRadius = "100%",
291
+ backgroundColor = Color3.fromHex("#E8EDF8"),
292
+ backgroundTransparency = 0,
293
+ borderColor = Color3.fromHex("#4B74C7"),
294
+ borderThickness = 1,
295
+ boxShadow = "0px 0px 2px 1px",
296
+ },
297
+ },
254
298
  tabs = {
255
299
  borderColor = Color3.fromHex("#343B49"),
256
300
  backgroundColor = Color3.fromHex("#1B1F27"),
@@ -301,6 +345,57 @@ local DarkTheme = createTheme({
301
345
  },
302
346
  },
303
347
  },
348
+ pagination = {
349
+ backgroundColor = Color3.fromHex("#14181F"),
350
+ backgroundTransparency = 0,
351
+ borderColor = Color3.fromHex("#343B49"),
352
+ borderThickness = 1,
353
+ cornerRadius = 8,
354
+ spacing = {
355
+ xs = 2,
356
+ sm = 4,
357
+ md = 6,
358
+ lg = 8,
359
+ xl = 12,
360
+ },
361
+ item = {
362
+ borderThickness = 0,
363
+ cornerRadius = 4,
364
+ spacing = {
365
+ xs = 1,
366
+ sm = 2,
367
+ md = 4,
368
+ lg = 6,
369
+ xl = 8,
370
+ },
371
+ intents = {
372
+ primary = {
373
+ default = {
374
+ backgroundTransparency = 1,
375
+ textColor = Color3.fromHex("#AAB3C2"),
376
+ },
377
+ hover = {
378
+ backgroundTransparency = 1,
379
+ textColor = Color3.fromHex("#FFFFFF"),
380
+ },
381
+ focus = {
382
+ textColor = Color3.fromHex("#FFFFFF"),
383
+ backgroundColor = Color3.fromHex("#2A303B"),
384
+ backgroundTransparency = 0,
385
+ boxShadow = "2px 2px 6px 0px",
386
+ typography = {
387
+ weight = Enum.FontWeight.Bold,
388
+ },
389
+ },
390
+ disabled = {
391
+ backgroundTransparency = 1,
392
+ borderColor = Color3.fromHex("#343B49"),
393
+ textColor = Color3.fromHex("#697386"),
394
+ },
395
+ },
396
+ },
397
+ },
398
+ },
304
399
  accordion = {
305
400
  borderColor = Color3.fromHex("#4B5568"),
306
401
  header = {
@@ -330,6 +425,14 @@ local DarkTheme = createTheme({
330
425
  backgroundColor = Color3.fromHex("#171B22"),
331
426
  },
332
427
  },
428
+ table = {
429
+ backgroundColor = Color3.fromHex("#171B22"),
430
+ borderColor = Color3.fromHex("#4B5568"),
431
+ rowDividerColor = Color3.fromHex("#343C4A"),
432
+ header = {
433
+ backgroundColor = Color3.fromHex("#252B36"),
434
+ },
435
+ },
333
436
  draggable = {
334
437
  placeholder = {
335
438
  backgroundColor = Color3.fromHex("#2A303B"),