@moduix/react 2.5.0 → 2.6.0

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 (200) hide show
  1. package/README.md +65 -86
  2. package/THIRD_PARTY_NOTICES.md +49 -0
  3. package/dist/components/accordion/Accordion.js +7 -8
  4. package/dist/components/alert/Alert.js +6 -7
  5. package/dist/components/alert/Alert_module.css +3 -16
  6. package/dist/components/angle-slider/AngleSlider.d.ts +5 -11
  7. package/dist/components/angle-slider/AngleSlider.js +17 -59
  8. package/dist/components/aspect-ratio/AspectRatio.js +1 -2
  9. package/dist/components/aspect-ratio/AspectRatio_module.css +0 -13
  10. package/dist/components/avatar/Avatar.d.ts +3 -6
  11. package/dist/components/avatar/Avatar.js +7 -50
  12. package/dist/components/avatar/Avatar.module.js +1 -2
  13. package/dist/components/avatar/Avatar_module.css +0 -6
  14. package/dist/components/badge/Badge.d.ts +2 -2
  15. package/dist/components/badge/Badge.js +5 -10
  16. package/dist/components/badge/Badge_module.css +7 -14
  17. package/dist/components/bleed/Bleed.js +1 -2
  18. package/dist/components/breadcrumbs/Breadcrumbs.d.ts +1 -1
  19. package/dist/components/breadcrumbs/Breadcrumbs.js +16 -32
  20. package/dist/components/breadcrumbs/Breadcrumbs_module.css +12 -14
  21. package/dist/components/button/Button.d.ts +4 -4
  22. package/dist/components/button/Button.js +1 -2
  23. package/dist/components/button/Button_module.css +2 -7
  24. package/dist/components/card/Card.d.ts +15 -15
  25. package/dist/components/card/Card.js +10 -11
  26. package/dist/components/card/Card_module.css +1 -17
  27. package/dist/components/carousel/Carousel.js +12 -13
  28. package/dist/components/carousel/Carousel_module.css +10 -3
  29. package/dist/components/chart/Chart.d.ts +9 -8
  30. package/dist/components/chart/Chart.js +7 -8
  31. package/dist/components/chart/Chart_module.css +0 -2
  32. package/dist/components/checkbox/Checkbox.d.ts +3 -2
  33. package/dist/components/checkbox/Checkbox.js +12 -35
  34. package/dist/components/clipboard/Clipboard.js +8 -9
  35. package/dist/components/close-button/CloseButton.js +1 -2
  36. package/dist/components/close-button/CloseButton_module.css +1 -10
  37. package/dist/components/collapsible/Collapsible.js +6 -9
  38. package/dist/components/collapsible/Collapsible_module.css +2 -4
  39. package/dist/components/color-picker/ColorPicker.d.ts +4 -3
  40. package/dist/components/color-picker/ColorPicker.js +32 -45
  41. package/dist/components/color-picker/ColorPicker_module.css +0 -1
  42. package/dist/components/combobox/Combobox.d.ts +5 -5
  43. package/dist/components/combobox/Combobox.js +20 -29
  44. package/dist/components/combobox/Combobox_module.css +0 -1
  45. package/dist/components/command-palette/CommandPalette.d.ts +7 -18
  46. package/dist/components/command-palette/CommandPalette.js +51 -78
  47. package/dist/components/command-palette/CommandPalette_module.css +11 -18
  48. package/dist/components/container/Container.js +1 -2
  49. package/dist/components/date-input/DateInput.d.ts +7 -9
  50. package/dist/components/date-input/DateInput.js +14 -44
  51. package/dist/components/date-input/DateInput_module.css +0 -1
  52. package/dist/components/date-picker/DatePicker.d.ts +1 -1
  53. package/dist/components/date-picker/DatePicker.js +34 -43
  54. package/dist/components/date-picker/DatePicker.module.js +1 -1
  55. package/dist/components/date-picker/DatePicker_module.css +14 -4
  56. package/dist/components/dialog/Dialog.d.ts +1 -1
  57. package/dist/components/dialog/Dialog.js +11 -12
  58. package/dist/components/drawer/Drawer.d.ts +6 -3
  59. package/dist/components/drawer/Drawer.js +33 -24
  60. package/dist/components/editable/Editable.d.ts +1 -1
  61. package/dist/components/editable/Editable.js +10 -11
  62. package/dist/components/empty/Empty.js +6 -7
  63. package/dist/components/field/Field.js +10 -11
  64. package/dist/components/fieldset/Fieldset.js +5 -6
  65. package/dist/components/file-upload/FileUpload.d.ts +3 -2
  66. package/dist/components/file-upload/FileUpload.js +28 -55
  67. package/dist/components/file-upload/FileUpload_module.css +4 -13
  68. package/dist/components/floating-panel/FloatingPanel.d.ts +2 -2
  69. package/dist/components/floating-panel/FloatingPanel.js +14 -15
  70. package/dist/components/floating-panel/FloatingPanel_module.css +4 -17
  71. package/dist/components/heading/Heading.js +1 -2
  72. package/dist/components/highlight/Highlight.js +1 -2
  73. package/dist/components/hover-card/HoverCard.d.ts +2 -1
  74. package/dist/components/hover-card/HoverCard.js +15 -6
  75. package/dist/components/hover-card/HoverCard.module.js +1 -0
  76. package/dist/components/hover-card/HoverCard_module.css +18 -3
  77. package/dist/components/image/Image.js +1 -2
  78. package/dist/components/image-cropper/ImageCropper.d.ts +1 -1
  79. package/dist/components/image-cropper/ImageCropper.js +7 -8
  80. package/dist/components/input/Input.d.ts +4 -4
  81. package/dist/components/input/Input.js +1 -2
  82. package/dist/components/input-group/InputGroup.d.ts +5 -5
  83. package/dist/components/input-group/InputGroup.js +5 -6
  84. package/dist/components/json-tree-view/JsonTreeView.js +3 -4
  85. package/dist/components/json-tree-view/JsonTreeView_module.css +26 -10
  86. package/dist/components/kbd/Kbd.js +2 -3
  87. package/dist/components/lightbox/Lightbox.d.ts +1 -1
  88. package/dist/components/lightbox/Lightbox.js +13 -14
  89. package/dist/components/lightbox/Lightbox_module.css +0 -3
  90. package/dist/components/list/List.js +2 -3
  91. package/dist/components/listbox/Listbox.d.ts +5 -5
  92. package/dist/components/listbox/Listbox.js +19 -25
  93. package/dist/components/listbox/Listbox.module.js +2 -2
  94. package/dist/components/listbox/Listbox_module.css +3 -13
  95. package/dist/components/marquee/Marquee.js +6 -7
  96. package/dist/components/menu/Menu.d.ts +2 -1
  97. package/dist/components/menu/Menu.js +34 -41
  98. package/dist/components/menu/Menu.module.js +1 -1
  99. package/dist/components/menu/Menu_module.css +8 -8
  100. package/dist/components/native-select/NativeSelect.js +2 -3
  101. package/dist/components/native-select/NativeSelect_module.css +0 -1
  102. package/dist/components/navigation-menu/NavigationMenu.js +17 -36
  103. package/dist/components/navigation-menu/NavigationMenu.module.js +2 -3
  104. package/dist/components/navigation-menu/NavigationMenu_module.css +15 -32
  105. package/dist/components/number-input/NumberInput.js +9 -10
  106. package/dist/components/pagination/Pagination.js +17 -20
  107. package/dist/components/pagination/Pagination_module.css +1 -5
  108. package/dist/components/password-input/PasswordInput.js +7 -8
  109. package/dist/components/pin-input/PinInput.d.ts +3 -2
  110. package/dist/components/pin-input/PinInput.js +13 -54
  111. package/dist/components/popover/Popover.d.ts +5 -3
  112. package/dist/components/popover/Popover.js +16 -17
  113. package/dist/components/progress-circular/ProgressCircular.js +8 -9
  114. package/dist/components/progress-circular/ProgressCircular.module.js +1 -3
  115. package/dist/components/progress-circular/ProgressCircular_module.css +0 -10
  116. package/dist/components/progress-linear/ProgressLinear.js +7 -8
  117. package/dist/components/progress-linear/ProgressLinear.module.js +1 -5
  118. package/dist/components/progress-linear/ProgressLinear_module.css +0 -20
  119. package/dist/components/qr-code/QrCode.js +6 -7
  120. package/dist/components/radio-group/RadioGroup.d.ts +1 -0
  121. package/dist/components/radio-group/RadioGroup.js +13 -27
  122. package/dist/components/radio-group/RadioGroup_module.css +0 -1
  123. package/dist/components/rating-group/RatingGroup.d.ts +1 -0
  124. package/dist/components/rating-group/RatingGroup.js +12 -29
  125. package/dist/components/rating-group/RatingGroup_module.css +1 -1
  126. package/dist/components/scroll-area/ScrollArea.js +7 -8
  127. package/dist/components/segment-group/SegmentGroup.d.ts +1 -0
  128. package/dist/components/segment-group/SegmentGroup.js +16 -30
  129. package/dist/components/segment-group/SegmentGroup_module.css +4 -0
  130. package/dist/components/select/Select.d.ts +4 -7
  131. package/dist/components/select/Select.js +36 -86
  132. package/dist/components/select/Select.module.js +1 -1
  133. package/dist/components/select/Select_module.css +4 -31
  134. package/dist/components/separator/Separator.d.ts +6 -6
  135. package/dist/components/separator/Separator.js +1 -2
  136. package/dist/components/sidebar/Sidebar.d.ts +24 -22
  137. package/dist/components/sidebar/Sidebar.js +88 -75
  138. package/dist/components/sidebar/Sidebar.module.js +2 -3
  139. package/dist/components/sidebar/Sidebar_module.css +112 -178
  140. package/dist/components/signature-pad/SignaturePad.d.ts +5 -8
  141. package/dist/components/signature-pad/SignaturePad.js +17 -46
  142. package/dist/components/signature-pad/SignaturePad_module.css +0 -1
  143. package/dist/components/simple-grid/SimpleGrid.js +13 -8
  144. package/dist/components/skeleton/Skeleton.d.ts +2 -2
  145. package/dist/components/skeleton/Skeleton.js +1 -2
  146. package/dist/components/slider/Slider.d.ts +2 -2
  147. package/dist/components/slider/Slider.js +18 -32
  148. package/dist/components/spinner/Spinner.d.ts +2 -2
  149. package/dist/components/spinner/Spinner.js +1 -2
  150. package/dist/components/split-button/SplitButton.d.ts +4 -4
  151. package/dist/components/split-button/SplitButton.js +11 -8
  152. package/dist/components/splitter/Splitter.js +5 -6
  153. package/dist/components/splitter/Splitter_module.css +2 -10
  154. package/dist/components/stack/Stack.d.ts +6 -6
  155. package/dist/components/stack/Stack.js +4 -5
  156. package/dist/components/stack/Stack_module.css +1 -1
  157. package/dist/components/steps/Steps.js +12 -13
  158. package/dist/components/steps/Steps_module.css +2 -3
  159. package/dist/components/swap/Swap.js +3 -4
  160. package/dist/components/switch/Switch.d.ts +3 -2
  161. package/dist/components/switch/Switch.js +12 -35
  162. package/dist/components/switch/Switch_module.css +0 -1
  163. package/dist/components/table/Table.d.ts +5 -5
  164. package/dist/components/table/Table.js +12 -13
  165. package/dist/components/tabs/Tabs.js +6 -7
  166. package/dist/components/tabs/Tabs_module.css +5 -10
  167. package/dist/components/tag/Tag.js +5 -6
  168. package/dist/components/tag/Tag_module.css +2 -4
  169. package/dist/components/tags-input/TagsInput.d.ts +3 -3
  170. package/dist/components/tags-input/TagsInput.js +21 -75
  171. package/dist/components/tags-input/TagsInput_module.css +0 -1
  172. package/dist/components/text/Text.js +1 -2
  173. package/dist/components/textarea/Textarea.js +1 -2
  174. package/dist/components/timer/Timer.js +7 -8
  175. package/dist/components/toast/Toast.d.ts +1 -1
  176. package/dist/components/toast/Toast.js +7 -8
  177. package/dist/components/toast/Toast_module.css +1 -2
  178. package/dist/components/toc/Toc.js +10 -11
  179. package/dist/components/toc/Toc_module.css +2 -2
  180. package/dist/components/toggle/Toggle.js +2 -3
  181. package/dist/components/toggle-group/ToggleGroup.d.ts +1 -1
  182. package/dist/components/toggle-group/ToggleGroup.js +3 -4
  183. package/dist/components/tooltip/Tooltip.d.ts +1 -1
  184. package/dist/components/tooltip/Tooltip.js +6 -7
  185. package/dist/components/tooltip/Tooltip_module.css +1 -1
  186. package/dist/components/tour/Tour.d.ts +1 -1
  187. package/dist/components/tour/Tour.js +14 -15
  188. package/dist/components/tree-view/TreeView.d.ts +4 -4
  189. package/dist/components/tree-view/TreeView.js +17 -18
  190. package/dist/components/tree-view/TreeView_module.css +39 -12
  191. package/dist/components/typeset/Typeset.js +2 -3
  192. package/dist/components/typeset/Typeset_module.css +300 -159
  193. package/dist/internal/icons/ui/Icons.d.ts +9 -30
  194. package/dist/internal/icons/ui/Icons.js +67 -807
  195. package/dist/internal/icons/ui/index.d.ts +1 -1
  196. package/dist/styles/animations.css +310 -0
  197. package/dist/styles/style.css +168 -2
  198. package/package.json +25 -25
  199. package/dist/internal/normalizeClassName.d.ts +0 -1
  200. package/dist/internal/normalizeClassName.js +0 -2
package/README.md CHANGED
@@ -6,72 +6,55 @@
6
6
 
7
7
  # @moduix/react
8
8
 
9
- Polished React components for product interfaces, built on
10
- [Ark UI](https://ark-ui.com/) and styled with native CSS.
9
+ React components built on [Ark UI](https://ark-ui.com/), with accessible behavior, explicit
10
+ composition, and CSS Modules styling.
11
11
 
12
- The package combines Ark's accessible interaction model with shadcn-inspired clarity: calm defaults,
13
- explicit named parts, consistent states, and a token-first theme contract. No styling framework is
14
- required.
12
+ moduix gives Ark UI primitives a coherent visual system without adding a styling runtime. Components
13
+ are composed from named parts, styled with regular CSS, and customizable through CSS custom
14
+ properties, `className`, stable `data-slot` hooks, and Ark state attributes.
15
15
 
16
16
  [Documentation](https://moduix.dev/) ·
17
17
  [Quick start](https://moduix.dev/docs/quick-start) ·
18
18
  [Components](https://moduix.dev/docs/components) ·
19
19
  [Tokens](https://moduix.dev/docs/tokens)
20
20
 
21
- ## Highlights
22
-
23
- - Ark-aligned composition, controlled and uncontrolled state, context, callbacks, and form behavior.
24
- - Consistent `36px` primary controls and `32px` popup rows through shared size tokens.
25
- - Native CSS, CSS Modules, cascade layers, semantic tokens, and component-level variables.
26
- - Stable moduix `data-slot` hooks alongside Ark part and state attributes.
27
- - Optional reset and curated `dense`, `soft`, and `contrast` presets.
28
- - React 18 and 19 support.
29
- - A matching hosted shadcn registry when source ownership is the better workflow.
30
-
31
21
  ## Install
32
22
 
33
23
  Install the package and its Ark UI peer dependency:
34
24
 
35
25
  ```bash
36
- npm install @moduix/react @ark-ui/react
26
+ pnpm add @moduix/react @ark-ui/react
37
27
  ```
38
28
 
39
- `react`, `react-dom`, and `@ark-ui/react` are peer dependencies, so the package does not ship
40
- duplicate framework or primitive runtimes.
41
-
42
- ## Compatibility
29
+ `react`, `react-dom`, and `@ark-ui/react` are peer dependencies. moduix supports React 18 and 19.
43
30
 
44
- | Environment | Supported versions |
45
- | ----------- | ------------------------------------------------------------------------- |
46
- | React | 18 and 19 |
47
- | Browsers | The latest two stable releases of Chrome, Edge, and Firefox; Safari 16.4+ |
48
- | SSR | Node.js 20+ with native ESM imports |
31
+ The optional `Chart` component also requires its TanStack peer dependency:
49
32
 
50
- Published JavaScript uses ES2023 syntax. `@moduix/react` is ESM-only: use `import` (or dynamic
51
- `import()` from CommonJS); `require()` is not supported. Transpile the package in your application
52
- build if you support an older environment.
33
+ ```bash
34
+ pnpm add @tanstack/charts
35
+ ```
53
36
 
54
- ## Add Styles
37
+ ## Add styles
55
38
 
56
- Import the required foundation stylesheet once in your application entry point:
39
+ Import the shared foundation stylesheet once in your application entry point:
57
40
 
58
41
  ```tsx
59
42
  import '@moduix/react/style.css';
60
43
  ```
61
44
 
62
- This entrypoint provides shared design tokens and base styles. Component imports bring along their
63
- own CSS.
45
+ It provides the shared tokens and base layer styles. Component imports carry their own CSS Modules,
46
+ so their styles follow the components that use them.
64
47
 
65
- The reset is optional and intentionally separate:
48
+ The reset is optional. Import it first when you choose to use it:
66
49
 
67
50
  ```tsx
68
51
  import '@moduix/react/reset.css';
69
52
  import '@moduix/react/style.css';
70
53
  ```
71
54
 
72
- ## Use Components
55
+ ## Use components
73
56
 
74
- Import the component subpaths you use and compose their named parts:
57
+ Import component subpaths and compose their named parts:
75
58
 
76
59
  ```tsx
77
60
  import { Button } from '@moduix/react/button';
@@ -79,7 +62,7 @@ import { Dialog } from '@moduix/react/dialog';
79
62
 
80
63
  export function Example() {
81
64
  return (
82
- <Dialog.Root>
65
+ <Dialog>
83
66
  <Dialog.Trigger asChild>
84
67
  <Button>Open settings</Button>
85
68
  </Dialog.Trigger>
@@ -97,52 +80,39 @@ export function Example() {
97
80
  </Dialog.Footer>
98
81
  </Dialog.Content>
99
82
  </Dialog.Positioner>
100
- </Dialog.Root>
83
+ </Dialog>
101
84
  );
102
85
  }
103
86
  ```
104
87
 
105
- moduix keeps important Ark anatomy visible. Higher-level convenience parts are documented as the
106
- recommended path where they exist, while low-level composition remains available for advanced
107
- cases.
108
-
109
- ## Theme the System
110
-
111
- Theme values are CSS custom properties. Change broad semantic decisions first and use component
112
- aliases for deliberate exceptions:
113
-
114
- ```css
115
- :root {
116
- --moduix-primary: oklch(0.52 0.18 145);
117
- --moduix-radius: 0.75rem;
118
- --moduix-size-md: 36px;
119
- --moduix-size-sm: 32px;
120
- }
88
+ Use the short root alias, such as `Dialog`, in application code. The matching `Dialog.Root` export is
89
+ available when an explicit namespace improves a local abstraction, but it is not required.
121
90
 
122
- .compact-toolbar {
123
- --moduix-button-size-md: 32px;
124
- }
125
- ```
91
+ ## Customize deliberately
126
92
 
127
- The token hierarchy is:
93
+ CSS Modules keep the package defaults locally scoped while leaving clear extension points for your
94
+ application:
128
95
 
129
- 1. theme primitives such as `--moduix-primary`, `--moduix-spacing-2`, `--moduix-size-md`, and `--moduix-radius`;
130
- 2. semantic aliases such as `--moduix-color-primary`, `--moduix-spacing-md`, and `--moduix-radius-md`;
131
- 3. shared family defaults such as `--moduix-popup-item-min-height` and `--moduix-focus-ring-width`;
132
- 4. component aliases such as `--moduix-input-height` and `--moduix-select-item-min-height`.
96
+ - use `className` on a root or named part for local CSS;
97
+ - use stable moduix `data-slot` hooks and Ark state attributes for structural or state-specific
98
+ selectors;
99
+ - override public CSS custom properties at the theme, semantic, or component layer.
133
100
 
134
- Library styles use predictable cascade layers:
101
+ For example, set product-level theme primitives in your own stylesheet:
135
102
 
136
103
  ```css
137
- @layer moduix.reset, moduix.tokens, moduix.base, moduix.components;
104
+ :root {
105
+ --moduix-primary: oklch(0.5 0.17 285);
106
+ --moduix-radius: 0.875rem;
107
+ }
138
108
  ```
139
109
 
140
- Components also expose `className`, `data-slot`, and the Ark `data-scope`, `data-part`, and
141
- state attributes supported by their primitives.
110
+ See [Tokens](https://moduix.dev/docs/tokens) and [Themes](https://moduix.dev/docs/themes) for the
111
+ token hierarchy and component-specific variables.
142
112
 
143
- ## Optional Presets
113
+ ## Optional presets
144
114
 
145
- Import one preset after `style.css` and activate it on the document root:
115
+ Import one preset after `style.css` and enable it on the document root:
146
116
 
147
117
  ```tsx
148
118
  import '@moduix/react/style.css';
@@ -153,32 +123,25 @@ import '@moduix/react/presets/soft.css';
153
123
  <html data-moduix-theme="soft"></html>
154
124
  ```
155
125
 
156
- Available presets are `dense`, `soft`, and `contrast`. See
157
- [Themes](https://moduix.dev/docs/themes) before combining presets or creating a reusable custom
158
- theme.
126
+ The available presets are `dense`, `soft`, and `contrast`.
159
127
 
160
- ## Prefer to Own the Source?
128
+ ## Prefer to own the source?
161
129
 
162
- The moduix registry uses the shadcn distribution format while preserving the same Ark-aligned
163
- component contracts. Create the ready-to-use `components.json` from the
164
- [complete Quick Start](https://moduix.dev/docs/quick-start), then add the components you need:
130
+ The hosted shadcn-compatible registry provides the same Ark-aligned component contracts in source
131
+ form. Set up `components.json` with the [Quick start](https://moduix.dev/docs/quick-start), then add
132
+ the components you need:
165
133
 
166
134
  ```bash
167
- npx shadcn@latest add @moduix-react/button @moduix-react/dialog
135
+ pnpm dlx shadcn@latest add @moduix-react/button @moduix-react/dialog
168
136
  ```
169
137
 
170
- Generated files are installed under `@/components/moduix/*` and `@/lib/moduix/*`. Read the
171
- [complete Quick Start](https://moduix.dev/docs/quick-start) for alias setup, registry inspection,
172
- dry runs, and generated stylesheet imports.
138
+ Generated files include the component source, CSS Modules, and required supporting files. Their
139
+ destination paths are controlled by your `components.json` aliases.
173
140
 
174
- ## Acknowledgements
141
+ ## Compatibility
175
142
 
176
- - [Ark UI](https://ark-ui.com/) provides the primitive behavior and composition model.
177
- - [Chakra UI](https://chakra-ui.com/) informs Ark-aligned ergonomics and design-system craft.
178
- - [shadcn/ui](https://ui.shadcn.com/) inspires open-code delivery, beautiful defaults, and practical
179
- documentation.
180
- - [UnoCSS](https://unocss.dev/) and [Tailwind CSS](https://tailwindcss.com/) provide foundations
181
- adapted by the optional reset.
143
+ The package is ESM-only and ships modern JavaScript targeting ES2023. Consume it through a modern
144
+ application bundler configured for the browsers your application supports.
182
145
 
183
146
  ## Links
184
147
 
@@ -187,6 +150,22 @@ dry runs, and generated stylesheet imports.
187
150
  - [Source repository](https://github.com/Blinks44/moduix)
188
151
  - [Issues](https://github.com/Blinks44/moduix/issues)
189
152
 
153
+ ## Acknowledgements
154
+
155
+ moduix is possible because of the work and ideas of these projects:
156
+
157
+ - [Ark UI](https://ark-ui.com/) for the accessible, state-machine-backed primitives that define the
158
+ behavioral foundation.
159
+ - [Chakra UI](https://chakra-ui.com/) for Ark-aligned composition ergonomics and design-system
160
+ craft.
161
+ - [shadcn/ui](https://ui.shadcn.com/) for open-code distribution, beautiful defaults, and a
162
+ documentation style centered on practical ownership.
163
+ - [UnoCSS](https://unocss.dev/) and [Tailwind CSS](https://tailwindcss.com/) for the foundations
164
+ adapted by the optional reset.
165
+ - [Rstack](https://rstack.rs/) for its Rust-based ecosystem: Rspress for documentation, Rslib for
166
+ library builds, and Rstest for tests.
167
+ - [VoidZero](https://voidzero.dev/) for the JavaScript tooling used throughout the workspace.
168
+
190
169
  ## License
191
170
 
192
171
  [MIT](./LICENSE.md)
@@ -0,0 +1,49 @@
1
+ # Third-Party Notices
2
+
3
+ moduix uses and includes portions of Lucide Icons.
4
+
5
+ ## Lucide
6
+
7
+ ISC License
8
+
9
+ Copyright (c) 2026 Lucide Icons and Contributors
10
+
11
+ Permission to use, copy, modify, and/or distribute this software for any
12
+ purpose with or without fee is hereby granted, provided that the above
13
+ copyright notice and this permission notice appear in all copies.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
16
+ WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
17
+ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
18
+ ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
19
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
20
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
21
+ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
22
+
23
+ ---
24
+
25
+ The following Lucide icons are derived from the Feather project:
26
+
27
+ airplay, alert-circle, alert-octagon, alert-triangle, aperture, arrow-down-circle, arrow-down-left, arrow-down-right, arrow-down, arrow-left-circle, arrow-left, arrow-right-circle, arrow-right, arrow-up-circle, arrow-up-left, arrow-up-right, arrow-up, at-sign, calendar, cast, check, chevron-down, chevron-left, chevron-right, chevron-up, chevrons-down, chevrons-left, chevrons-right, chevrons-up, circle, clipboard, clock, code, columns, command, compass, corner-down-left, corner-down-right, corner-left-down, corner-left-up, corner-right-down, corner-right-up, corner-up-left, corner-up-right, crosshair, database, divide-circle, divide-square, dollar-sign, download, external-link, feather, frown, hash, headphones, help-circle, info, italic, key, layout, life-buoy, link-2, link, loader, lock, log-in, log-out, maximize, meh, minimize, minimize-2, minus-circle, minus-square, minus, monitor, moon, more-horizontal, more-vertical, move, music, navigation-2, navigation, octagon, pause-circle, percent, plus-circle, plus-square, plus, power, radio, rss, search, server, share, shopping-bag, sidebar, smartphone, smile, square, table-2, tablet, target, terminal, trash-2, trash, triangle, tv, type, upload, x-circle, x-octagon, x-square, x, zoom-in, zoom-out
28
+
29
+ The MIT License (MIT) (for the icons listed above)
30
+
31
+ Copyright (c) 2013-present Cole Bemis
32
+
33
+ Permission is hereby granted, free of charge, to any person obtaining a copy
34
+ of this software and associated documentation files (the "Software"), to deal
35
+ in the Software without restriction, including without limitation the rights
36
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
37
+ copies of the Software, and to permit persons to whom the Software is
38
+ furnished to do so, subject to the following conditions:
39
+
40
+ The above copyright notice and this permission notice shall be included in all
41
+ copies or substantial portions of the Software.
42
+
43
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
44
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
45
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
46
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
47
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
48
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
49
+ SOFTWARE.
@@ -5,13 +5,12 @@ import { ark } from "@ark-ui/react/factory";
5
5
  import { clsx } from "clsx";
6
6
  import { forwardRef } from "react";
7
7
  import { PlusIcon } from "../../internal/icons/ui/index.js";
8
- import { normalizeClassName } from "../../internal/normalizeClassName.js";
9
8
  import Accordion_module from "./Accordion.module.js";
10
9
  const Accordion_AccordionRoot = /*#__PURE__*/ forwardRef(function({ className, ...props }, ref) {
11
10
  return /*#__PURE__*/ jsx(Accordion.Root, {
12
11
  ref: ref,
13
12
  "data-slot": "accordion-root",
14
- className: clsx(Accordion_module.root, normalizeClassName(className)),
13
+ className: clsx(Accordion_module.root, className),
15
14
  ...props
16
15
  });
17
16
  });
@@ -19,7 +18,7 @@ const Accordion_AccordionRootProvider = /*#__PURE__*/ forwardRef(function({ clas
19
18
  return /*#__PURE__*/ jsx(Accordion.RootProvider, {
20
19
  ref: ref,
21
20
  "data-slot": "accordion-root-provider",
22
- className: clsx(Accordion_module.root, normalizeClassName(className)),
21
+ className: clsx(Accordion_module.root, className),
23
22
  ...props
24
23
  });
25
24
  });
@@ -27,7 +26,7 @@ const Accordion_AccordionItem = /*#__PURE__*/ forwardRef(function({ className, .
27
26
  return /*#__PURE__*/ jsx(Accordion.Item, {
28
27
  ref: ref,
29
28
  "data-slot": "accordion-item",
30
- className: clsx(Accordion_module.item, normalizeClassName(className)),
29
+ className: clsx(Accordion_module.item, className),
31
30
  ...props
32
31
  });
33
32
  });
@@ -35,7 +34,7 @@ const Accordion_AccordionItemTrigger = /*#__PURE__*/ forwardRef(function({ class
35
34
  return /*#__PURE__*/ jsx(Accordion.ItemTrigger, {
36
35
  ref: ref,
37
36
  "data-slot": "accordion-item-trigger",
38
- className: clsx(Accordion_module.itemTrigger, normalizeClassName(className)),
37
+ className: clsx(Accordion_module.itemTrigger, className),
39
38
  ...props
40
39
  });
41
40
  });
@@ -43,7 +42,7 @@ const Accordion_AccordionItemIndicator = /*#__PURE__*/ forwardRef(function({ cla
43
42
  return /*#__PURE__*/ jsx(Accordion.ItemIndicator, {
44
43
  ref: ref,
45
44
  "data-slot": "accordion-item-indicator",
46
- className: clsx(Accordion_module.itemIndicator, normalizeClassName(className)),
45
+ className: clsx(Accordion_module.itemIndicator, className),
47
46
  ...props,
48
47
  children: children ?? /*#__PURE__*/ jsx(PlusIcon, {})
49
48
  });
@@ -52,7 +51,7 @@ const Accordion_AccordionItemContent = /*#__PURE__*/ forwardRef(function({ class
52
51
  return /*#__PURE__*/ jsx(Accordion.ItemContent, {
53
52
  ref: ref,
54
53
  "data-slot": "accordion-item-content",
55
- className: clsx(Accordion_module.itemContent, normalizeClassName(className)),
54
+ className: clsx(Accordion_module.itemContent, className),
56
55
  ...props
57
56
  });
58
57
  });
@@ -62,7 +61,7 @@ const Accordion_AccordionItemBody = /*#__PURE__*/ forwardRef(function({ classNam
62
61
  "data-scope": "accordion",
63
62
  "data-part": "item-body",
64
63
  "data-slot": "accordion-item-body",
65
- className: clsx(Accordion_module.itemBody, normalizeClassName(className)),
64
+ className: clsx(Accordion_module.itemBody, className),
66
65
  ...props
67
66
  });
68
67
  });
@@ -2,7 +2,6 @@ import { jsx } from "react/jsx-runtime";
2
2
  import { ark } from "@ark-ui/react/factory";
3
3
  import { clsx } from "clsx";
4
4
  import { forwardRef } from "react";
5
- import { normalizeClassName } from "../../internal/normalizeClassName.js";
6
5
  import Alert_module from "./Alert.module.js";
7
6
  const Alert_AlertRoot = /*#__PURE__*/ forwardRef(function({ children, className, role, status = 'info', ...props }, ref) {
8
7
  return /*#__PURE__*/ jsx(ark.div, {
@@ -12,7 +11,7 @@ const Alert_AlertRoot = /*#__PURE__*/ forwardRef(function({ children, className,
12
11
  "data-part": "root",
13
12
  "data-slot": "alert-root",
14
13
  "data-status": status,
15
- className: clsx(Alert_module.root, normalizeClassName(className)),
14
+ className: clsx(Alert_module.root, className),
16
15
  ...props,
17
16
  children: children
18
17
  });
@@ -24,7 +23,7 @@ const Alert_AlertIndicator = /*#__PURE__*/ forwardRef(function({ className, ...p
24
23
  "data-part": "indicator",
25
24
  "data-slot": "alert-indicator",
26
25
  "aria-hidden": "true",
27
- className: clsx(Alert_module.indicator, normalizeClassName(className)),
26
+ className: clsx(Alert_module.indicator, className),
28
27
  ...props
29
28
  });
30
29
  });
@@ -34,7 +33,7 @@ const Alert_AlertContent = /*#__PURE__*/ forwardRef(function({ className, ...pro
34
33
  "data-scope": "alert",
35
34
  "data-part": "content",
36
35
  "data-slot": "alert-content",
37
- className: clsx(Alert_module.content, normalizeClassName(className)),
36
+ className: clsx(Alert_module.content, className),
38
37
  ...props
39
38
  });
40
39
  });
@@ -44,7 +43,7 @@ const Alert_AlertTitle = /*#__PURE__*/ forwardRef(function({ className, ...props
44
43
  "data-scope": "alert",
45
44
  "data-part": "title",
46
45
  "data-slot": "alert-title",
47
- className: clsx(Alert_module.title, normalizeClassName(className)),
46
+ className: clsx(Alert_module.title, className),
48
47
  ...props
49
48
  });
50
49
  });
@@ -54,7 +53,7 @@ const Alert_AlertDescription = /*#__PURE__*/ forwardRef(function({ className, ..
54
53
  "data-scope": "alert",
55
54
  "data-part": "description",
56
55
  "data-slot": "alert-description",
57
- className: clsx(Alert_module.description, normalizeClassName(className)),
56
+ className: clsx(Alert_module.description, className),
58
57
  ...props
59
58
  });
60
59
  });
@@ -64,7 +63,7 @@ const Alert_AlertActions = /*#__PURE__*/ forwardRef(function({ className, ...pro
64
63
  "data-scope": "alert",
65
64
  "data-part": "actions",
66
65
  "data-slot": "alert-actions",
67
- className: clsx(Alert_module.actions, normalizeClassName(className)),
66
+ className: clsx(Alert_module.actions, className),
68
67
  ...props
69
68
  });
70
69
  });
@@ -2,8 +2,7 @@
2
2
  .root-QHB4Xj {
3
3
  box-sizing: border-box;
4
4
  align-items: start;
5
- row-gap: var(--moduix-alert-content-gap, var(--moduix-spacing-1));
6
- column-gap: var(--moduix-alert-gap, var(--moduix-spacing-3));
5
+ gap: var(--moduix-alert-gap, var(--moduix-spacing-3));
7
6
  border: var(--moduix-alert-border-width, var(--moduix-border-width-sm)) solid
8
7
  var(--moduix-alert-border-color, var(--_alert-border-color-default, var(--moduix-color-border)));
9
8
  border-radius: var(--moduix-alert-radius, var(--moduix-radius-lg));
@@ -17,12 +16,7 @@
17
16
  --_alert-border-color-default: var(--moduix-alert-info-border-color, var(--moduix-color-border));
18
17
  --_alert-color-default: var(--moduix-alert-info-color, var(--moduix-color-card-foreground));
19
18
  --_alert-indicator-color-default: var(--moduix-alert-info-indicator-color, var(--moduix-color-muted-foreground));
20
- grid-template-columns: auto minmax(0, 1fr);
21
- display: grid;
22
- }
23
-
24
- .root-QHB4Xj > [data-part="title"], .root-QHB4Xj > [data-part="description"] {
25
- grid-column: 2;
19
+ display: flex;
26
20
  }
27
21
 
28
22
  .root-QHB4Xj[data-status="success"] {
@@ -46,14 +40,6 @@
46
40
  --_alert-indicator-color-default: var(--moduix-alert-error-indicator-color, var(--moduix-color-destructive));
47
41
  }
48
42
 
49
- .root-QHB4Xj:not(:has( > [data-part="indicator"])) {
50
- grid-template-columns: minmax(0, 1fr);
51
- }
52
-
53
- .root-QHB4Xj:not(:has( > [data-part="indicator"])) > [data-part="content"], .root-QHB4Xj:not(:has( > [data-part="indicator"])) > [data-part="title"], .root-QHB4Xj:not(:has( > [data-part="indicator"])) > [data-part="description"] {
54
- grid-column: 1;
55
- }
56
-
57
43
  .indicator-FFj13M {
58
44
  width: var(--moduix-alert-indicator-size, var(--moduix-spacing-4));
59
45
  height: var(--moduix-alert-indicator-size, var(--moduix-spacing-4));
@@ -73,6 +59,7 @@
73
59
 
74
60
  .content-wQ3ew3 {
75
61
  gap: var(--moduix-alert-content-gap, var(--moduix-spacing-1));
62
+ flex: 1;
76
63
  min-width: 0;
77
64
  display: grid;
78
65
  }
@@ -6,19 +6,13 @@ type AngleSliderMarksProps = Omit<ComponentProps<typeof AngleSliderPrimitive.Mar
6
6
  declare function AngleSliderMarks({ values, ...props }: AngleSliderMarksProps): import("react").JSX.Element;
7
7
  type AngleSliderDialProps = Omit<ComponentProps<typeof AngleSliderPrimitive.Control>, 'asChild' | 'children'> & {
8
8
  children?: ReactNode;
9
- thumbClassName?: string;
10
9
  };
11
- declare function AngleSliderDial({ children, thumbClassName, ...props }: AngleSliderDialProps): import("react").JSX.Element;
12
- declare const AngleSlider: import("react").ForwardRefExoticComponent<Omit<AngleSliderPrimitive.RootProps & import("react").RefAttributes<HTMLDivElement> & {
13
- form?: string;
14
- }, "ref"> & import("react").RefAttributes<HTMLDivElement>> & {
15
- Root: import("react").ForwardRefExoticComponent<Omit<AngleSliderPrimitive.RootProps & import("react").RefAttributes<HTMLDivElement> & {
16
- form?: string;
17
- }, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
18
- RootProvider: import("react").ForwardRefExoticComponent<Omit<AngleSliderPrimitive.RootProviderProps & import("react").RefAttributes<HTMLDivElement> & {
19
- form?: string;
20
- }, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
10
+ declare function AngleSliderDial({ children, ...props }: AngleSliderDialProps): import("react").JSX.Element;
11
+ declare const AngleSlider: import("react").ForwardRefExoticComponent<Omit<AngleSliderPrimitive.RootProps & import("react").RefAttributes<HTMLDivElement>, "ref"> & import("react").RefAttributes<HTMLDivElement>> & {
12
+ Root: import("react").ForwardRefExoticComponent<Omit<AngleSliderPrimitive.RootProps & import("react").RefAttributes<HTMLDivElement>, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
13
+ RootProvider: import("react").ForwardRefExoticComponent<Omit<AngleSliderPrimitive.RootProviderProps & import("react").RefAttributes<HTMLDivElement>, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
21
14
  Context: (props: AngleSliderPrimitive.ContextProps) => ReactNode;
15
+ HiddenInput: import("react").ForwardRefExoticComponent<AngleSliderPrimitive.HiddenInputProps & import("react").RefAttributes<HTMLInputElement>>;
22
16
  Label: import("react").ForwardRefExoticComponent<Omit<AngleSliderPrimitive.LabelProps & import("react").RefAttributes<HTMLLabelElement>, "ref"> & import("react").RefAttributes<HTMLLabelElement>>;
23
17
  Control: import("react").ForwardRefExoticComponent<Omit<AngleSliderPrimitive.ControlProps & import("react").RefAttributes<HTMLDivElement>, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
24
18
  Dial: typeof AngleSliderDial;
@@ -1,80 +1,39 @@
1
1
  "use client";
2
- import { Fragment, jsx, jsxs } from "react/jsx-runtime";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
3
  import { AngleSlider, useAngleSlider, useAngleSliderContext } from "@ark-ui/react/angle-slider";
4
4
  import { clsx } from "clsx";
5
- import { Children, cloneElement, forwardRef, useEffect, useRef } from "react";
6
- import { normalizeClassName } from "../../internal/normalizeClassName.js";
5
+ import { forwardRef } from "react";
7
6
  import AngleSlider_module from "./AngleSlider.module.js";
8
- const AngleSlider_AngleSliderRoot = /*#__PURE__*/ forwardRef(function({ asChild, children, className, defaultValue, form, value, ...props }, ref) {
7
+ const AngleSlider_AngleSliderRoot = /*#__PURE__*/ forwardRef(function({ className, ...props }, ref) {
9
8
  return /*#__PURE__*/ jsx(AngleSlider.Root, {
10
9
  ref: ref,
11
10
  "data-slot": "angle-slider-root",
12
- className: clsx(AngleSlider_module.root, normalizeClassName(className)),
13
- asChild: asChild,
14
- defaultValue: defaultValue,
15
- value: value,
16
- ...props,
17
- children: withHiddenInput(children, asChild, form, void 0 === value ? defaultValue ?? 0 : void 0)
11
+ className: clsx(AngleSlider_module.root, className),
12
+ ...props
18
13
  });
19
14
  });
20
15
  const AngleSlider_AngleSliderLabel = /*#__PURE__*/ forwardRef(function({ className, ...props }, ref) {
21
16
  return /*#__PURE__*/ jsx(AngleSlider.Label, {
22
17
  ref: ref,
23
18
  "data-slot": "angle-slider-label",
24
- className: clsx(AngleSlider_module.label, normalizeClassName(className)),
19
+ className: clsx(AngleSlider_module.label, className),
25
20
  ...props
26
21
  });
27
22
  });
28
- const AngleSlider_AngleSliderRootProvider = /*#__PURE__*/ forwardRef(function({ asChild, children, className, form, value, ...props }, ref) {
29
- const initialValue = useRef(value.value);
23
+ const AngleSlider_AngleSliderRootProvider = /*#__PURE__*/ forwardRef(function({ className, value, ...props }, ref) {
30
24
  return /*#__PURE__*/ jsx(AngleSlider.RootProvider, {
31
25
  ref: ref,
32
26
  "data-slot": "angle-slider-root-provider",
33
- className: clsx(AngleSlider_module.root, normalizeClassName(className)),
34
- asChild: asChild,
27
+ className: clsx(AngleSlider_module.root, className),
35
28
  value: value,
36
- ...props,
37
- children: withHiddenInput(children, asChild, form, initialValue.current)
29
+ ...props
38
30
  });
39
31
  });
40
- function AngleSliderHiddenInput({ form, resetValue }) {
41
- const angleSlider = useAngleSliderContext();
42
- const inputRef = useRef(null);
43
- useEffect(()=>{
44
- const formElement = inputRef.current?.form;
45
- if (!formElement || void 0 === resetValue) return;
46
- const handleReset = ()=>angleSlider.setValue(resetValue);
47
- formElement.addEventListener('reset', handleReset);
48
- return ()=>formElement.removeEventListener('reset', handleReset);
49
- }, [
50
- angleSlider,
51
- resetValue
52
- ]);
53
- return /*#__PURE__*/ jsx(AngleSlider.HiddenInput, {
54
- ref: inputRef,
55
- "data-slot": "angle-slider-hidden-input",
56
- form: form
57
- });
58
- }
59
- function withHiddenInput(children, asChild, form, resetValue) {
60
- const hiddenInput = /*#__PURE__*/ jsx(AngleSliderHiddenInput, {
61
- form: form,
62
- resetValue: resetValue
63
- });
64
- if (!asChild) return /*#__PURE__*/ jsxs(Fragment, {
65
- children: [
66
- children,
67
- hiddenInput
68
- ]
69
- });
70
- const child = Children.only(children);
71
- return /*#__PURE__*/ cloneElement(child, {}, child.props.children, hiddenInput);
72
- }
73
32
  const AngleSlider_AngleSliderControl = /*#__PURE__*/ forwardRef(function({ className, ...props }, ref) {
74
33
  return /*#__PURE__*/ jsx(AngleSlider.Control, {
75
34
  ref: ref,
76
35
  "data-slot": "angle-slider-control",
77
- className: clsx(AngleSlider_module.control, normalizeClassName(className)),
36
+ className: clsx(AngleSlider_module.control, className),
78
37
  ...props
79
38
  });
80
39
  });
@@ -82,7 +41,7 @@ const AngleSlider_AngleSliderThumb = /*#__PURE__*/ forwardRef(function({ classNa
82
41
  return /*#__PURE__*/ jsx(AngleSlider.Thumb, {
83
42
  ref: ref,
84
43
  "data-slot": "angle-slider-thumb",
85
- className: clsx(AngleSlider_module.thumb, normalizeClassName(className)),
44
+ className: clsx(AngleSlider_module.thumb, className),
86
45
  ...props
87
46
  });
88
47
  });
@@ -90,7 +49,7 @@ const AngleSlider_AngleSliderMarkerGroup = /*#__PURE__*/ forwardRef(function({ c
90
49
  return /*#__PURE__*/ jsx(AngleSlider.MarkerGroup, {
91
50
  ref: ref,
92
51
  "data-slot": "angle-slider-marker-group",
93
- className: clsx(AngleSlider_module.markerGroup, normalizeClassName(className)),
52
+ className: clsx(AngleSlider_module.markerGroup, className),
94
53
  ...props
95
54
  });
96
55
  });
@@ -98,7 +57,7 @@ const AngleSlider_AngleSliderMarker = /*#__PURE__*/ forwardRef(function({ classN
98
57
  return /*#__PURE__*/ jsx(AngleSlider.Marker, {
99
58
  ref: ref,
100
59
  "data-slot": "angle-slider-marker",
101
- className: clsx(AngleSlider_module.marker, normalizeClassName(className)),
60
+ className: clsx(AngleSlider_module.marker, className),
102
61
  ...props
103
62
  });
104
63
  });
@@ -110,14 +69,12 @@ function AngleSliderMarks({ values, ...props }) {
110
69
  }, `${value}-${index}`))
111
70
  });
112
71
  }
113
- function AngleSliderDial({ children, thumbClassName, ...props }) {
72
+ function AngleSliderDial({ children, ...props }) {
114
73
  return /*#__PURE__*/ jsxs(AngleSlider_AngleSliderControl, {
115
74
  ...props,
116
75
  children: [
117
76
  children,
118
- /*#__PURE__*/ jsx(AngleSlider_AngleSliderThumb, {
119
- className: thumbClassName
120
- })
77
+ /*#__PURE__*/ jsx(AngleSlider_AngleSliderThumb, {})
121
78
  ]
122
79
  });
123
80
  }
@@ -125,7 +82,7 @@ const AngleSlider_AngleSliderValueText = /*#__PURE__*/ forwardRef(function({ cla
125
82
  return /*#__PURE__*/ jsx(AngleSlider.ValueText, {
126
83
  ref: ref,
127
84
  "data-slot": "angle-slider-value-text",
128
- className: clsx(AngleSlider_module.valueText, normalizeClassName(className)),
85
+ className: clsx(AngleSlider_module.valueText, className),
129
86
  ...props
130
87
  });
131
88
  });
@@ -133,6 +90,7 @@ const AngleSlider_AngleSlider = Object.assign(AngleSlider_AngleSliderRoot, {
133
90
  Root: AngleSlider_AngleSliderRoot,
134
91
  RootProvider: AngleSlider_AngleSliderRootProvider,
135
92
  Context: AngleSlider.Context,
93
+ HiddenInput: AngleSlider.HiddenInput,
136
94
  Label: AngleSlider_AngleSliderLabel,
137
95
  Control: AngleSlider_AngleSliderControl,
138
96
  Dial: AngleSliderDial,