@1money/react-ui 1.16.0 → 1.17.1-alpha.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.
- package/AGENTS.md +393 -0
- package/es/components/CheckboxGroup/CheckboxGroup.d.ts +3 -3
- package/es/components/CheckboxGroup/CheckboxGroup.js +94 -91
- package/es/components/CheckboxGroup/interface.d.ts +21 -15
- package/es/components/CheckboxGroup/style/CheckboxGroup.scss +0 -7
- package/es/components/Form/Form.d.ts +29 -0
- package/es/components/Form/Form.js +188 -0
- package/es/components/Form/FormItem.d.ts +4 -0
- package/es/components/Form/FormItem.js +165 -0
- package/es/components/Form/FormItemContent.d.ts +18 -0
- package/es/components/Form/FormItemContent.js +146 -0
- package/es/components/Form/constants.d.ts +46 -0
- package/es/components/Form/constants.js +65 -0
- package/es/components/Form/helper.d.ts +120 -0
- package/es/components/Form/helper.js +284 -0
- package/es/components/Form/index.d.ts +20 -0
- package/es/components/Form/index.js +21 -0
- package/es/components/Form/interface.d.ts +238 -0
- package/es/components/Form/interface.js +2 -0
- package/es/components/Form/style/Form.css +1 -0
- package/es/components/Form/style/Form.scss +167 -0
- package/es/components/Form/style/css.js +2 -0
- package/es/components/Form/style/index.d.ts +1 -0
- package/es/components/Form/style/index.js +2 -0
- package/es/components/Form/useFormItemContext.d.ts +32 -0
- package/es/components/Form/useFormItemContext.js +55 -0
- package/es/components/Form/useFormItemWatch.d.ts +51 -0
- package/es/components/Form/useFormItemWatch.js +69 -0
- package/es/components/Form/useValidationTrigger.d.ts +40 -0
- package/es/components/Form/useValidationTrigger.js +74 -0
- package/es/components/Input/Input.js +72 -74
- package/es/components/Input/interface.d.ts +9 -9
- package/es/components/InputAmount/InputAmount.js +228 -276
- package/es/components/InputAmount/helper.d.ts +46 -0
- package/es/components/InputAmount/helper.js +115 -0
- package/es/components/ProForm/ProForm.d.ts +33 -0
- package/es/components/ProForm/ProForm.js +208 -0
- package/es/components/ProForm/ProFormDependency.d.ts +12 -0
- package/es/components/ProForm/ProFormDependency.js +61 -0
- package/es/components/ProForm/ProFormList.d.ts +19 -0
- package/es/components/ProForm/ProFormList.js +348 -0
- package/es/components/ProForm/Submitter.d.ts +21 -0
- package/es/components/ProForm/Submitter.js +76 -0
- package/es/components/ProForm/constants.d.ts +34 -0
- package/es/components/ProForm/constants.js +40 -0
- package/es/components/ProForm/fields/ProFormCheckbox.d.ts +6 -0
- package/es/components/ProForm/fields/ProFormCheckbox.js +11 -0
- package/es/components/ProForm/fields/ProFormCheckboxGroup.d.ts +6 -0
- package/es/components/ProForm/fields/ProFormCheckboxGroup.js +46 -0
- package/es/components/ProForm/fields/ProFormDigit.d.ts +6 -0
- package/es/components/ProForm/fields/ProFormDigit.js +15 -0
- package/es/components/ProForm/fields/ProFormMoney.d.ts +6 -0
- package/es/components/ProForm/fields/ProFormMoney.js +10 -0
- package/es/components/ProForm/fields/ProFormMultiSelect.d.ts +6 -0
- package/es/components/ProForm/fields/ProFormMultiSelect.js +27 -0
- package/es/components/ProForm/fields/ProFormPassword.d.ts +6 -0
- package/es/components/ProForm/fields/ProFormPassword.js +16 -0
- package/es/components/ProForm/fields/ProFormRadio.d.ts +6 -0
- package/es/components/ProForm/fields/ProFormRadio.js +13 -0
- package/es/components/ProForm/fields/ProFormSelect.d.ts +6 -0
- package/es/components/ProForm/fields/ProFormSelect.js +13 -0
- package/es/components/ProForm/fields/ProFormSwitch.d.ts +6 -0
- package/es/components/ProForm/fields/ProFormSwitch.js +11 -0
- package/es/components/ProForm/fields/ProFormText.d.ts +6 -0
- package/es/components/ProForm/fields/ProFormText.js +15 -0
- package/es/components/ProForm/fields/ProFormTextArea.d.ts +6 -0
- package/es/components/ProForm/fields/ProFormTextArea.js +16 -0
- package/es/components/ProForm/fields/createProFormField.d.ts +43 -0
- package/es/components/ProForm/fields/createProFormField.js +200 -0
- package/es/components/ProForm/fields/index.d.ts +12 -0
- package/es/components/ProForm/fields/index.js +13 -0
- package/es/components/ProForm/index.d.ts +7 -0
- package/es/components/ProForm/index.js +7 -0
- package/es/components/ProForm/interface.d.ts +306 -0
- package/es/components/ProForm/interface.js +2 -0
- package/es/components/ProForm/layouts/DrawerForm.d.ts +16 -0
- package/es/components/ProForm/layouts/DrawerForm.js +79 -0
- package/es/components/ProForm/layouts/ModalForm.d.ts +16 -0
- package/es/components/ProForm/layouts/ModalForm.js +89 -0
- package/es/components/ProForm/layouts/QueryFilter.d.ts +21 -0
- package/es/components/ProForm/layouts/QueryFilter.js +132 -0
- package/es/components/ProForm/layouts/StepsForm.d.ts +13 -0
- package/es/components/ProForm/layouts/StepsForm.js +295 -0
- package/es/components/ProForm/layouts/index.d.ts +4 -0
- package/es/components/ProForm/layouts/index.js +5 -0
- package/es/components/ProForm/layouts/useOverlayForm.d.ts +53 -0
- package/es/components/ProForm/layouts/useOverlayForm.js +140 -0
- package/es/components/ProForm/style/ProForm.module.css +1 -0
- package/es/components/ProForm/style/ProForm.module.scss +59 -0
- package/es/components/ProForm/style/css.js +3 -0
- package/es/components/ProForm/style/index.d.ts +1 -0
- package/es/components/ProForm/style/index.js +3 -0
- package/es/components/ProForm/utils.d.ts +72 -0
- package/es/components/ProForm/utils.js +206 -0
- package/es/components/RadioGroup/RadioGroup.js +46 -23
- package/es/components/RadioGroup/interface.d.ts +3 -1
- package/es/components/Select/Select.d.ts +1 -1
- package/es/components/Select/Select.js +113 -106
- package/es/components/Select/constants.d.ts +18 -0
- package/es/components/Select/constants.js +19 -0
- package/es/components/Sidebar/Sidebar.js +21 -23
- package/es/components/Sidebar/SidebarLogo.d.ts +7 -0
- package/es/components/Sidebar/SidebarLogo.js +33 -0
- package/es/components/Sidebar/SimplySidebar.d.ts +2 -2
- package/es/components/Sidebar/SimplySidebar.js +18 -22
- package/es/components/Sidebar/Stepper.js +14 -14
- package/es/components/Sidebar/constants.d.ts +16 -0
- package/es/components/Sidebar/constants.js +17 -0
- package/es/components/Sidebar/style/Stepper.css +1 -1
- package/es/components/Sidebar/style/Stepper.scss +11 -1
- package/es/components/Switch/Switch.js +28 -25
- package/es/components/Switch/interface.d.ts +9 -4
- package/es/components/useControlledState/index.d.ts +14 -0
- package/es/components/useControlledState/index.js +32 -0
- package/es/components/useEventCallback/index.d.ts +11 -0
- package/es/components/useEventCallback/index.js +17 -0
- package/es/components/useLatest/index.d.ts +9 -0
- package/es/components/useLatest/index.js +15 -0
- package/es/components/useLayoutEffect/index.d.ts +11 -0
- package/es/components/useLayoutEffect/index.js +17 -0
- package/es/components/useLayoutState/index.d.ts +13 -0
- package/es/components/useLayoutState/index.js +71 -0
- package/es/components/useMemoizedFn/index.d.ts +12 -0
- package/es/components/useMemoizedFn/index.js +27 -0
- package/es/components/usePrevious/index.d.ts +11 -0
- package/es/components/usePrevious/index.js +19 -0
- package/es/components/useSafeState/index.d.ts +12 -0
- package/es/components/useSafeState/index.js +24 -0
- package/es/components/useSyncState/index.d.ts +14 -0
- package/es/components/useSyncState/index.js +37 -0
- package/es/components/useUpdateEffect/index.d.ts +9 -0
- package/es/components/useUpdateEffect/index.js +19 -0
- package/es/index.css +1 -1
- package/es/index.d.ts +21 -2
- package/es/index.js +19 -1
- package/jest.setup.d.ts +1 -0
- package/jest.setup.ts +1 -0
- package/lib/components/CheckboxGroup/CheckboxGroup.d.ts +3 -3
- package/lib/components/CheckboxGroup/CheckboxGroup.js +92 -89
- package/lib/components/CheckboxGroup/interface.d.ts +21 -15
- package/lib/components/CheckboxGroup/style/CheckboxGroup.scss +0 -7
- package/lib/components/Form/Form.d.ts +29 -0
- package/lib/components/Form/Form.js +199 -0
- package/lib/components/Form/FormItem.d.ts +4 -0
- package/lib/components/Form/FormItem.js +176 -0
- package/lib/components/Form/FormItemContent.d.ts +18 -0
- package/lib/components/Form/FormItemContent.js +156 -0
- package/lib/components/Form/constants.d.ts +46 -0
- package/lib/components/Form/constants.js +71 -0
- package/lib/components/Form/helper.d.ts +120 -0
- package/lib/components/Form/helper.js +290 -0
- package/lib/components/Form/index.d.ts +20 -0
- package/lib/components/Form/index.js +45 -0
- package/lib/components/Form/interface.d.ts +238 -0
- package/lib/components/Form/interface.js +6 -0
- package/lib/components/Form/style/Form.css +1 -0
- package/lib/components/Form/style/Form.scss +167 -0
- package/lib/components/Form/style/css.js +4 -0
- package/lib/components/Form/style/index.d.ts +1 -0
- package/lib/components/Form/style/index.js +4 -0
- package/lib/components/Form/useFormItemContext.d.ts +32 -0
- package/lib/components/Form/useFormItemContext.js +62 -0
- package/lib/components/Form/useFormItemWatch.d.ts +51 -0
- package/lib/components/Form/useFormItemWatch.js +76 -0
- package/lib/components/Form/useValidationTrigger.d.ts +40 -0
- package/lib/components/Form/useValidationTrigger.js +81 -0
- package/lib/components/Input/Input.js +71 -73
- package/lib/components/Input/interface.d.ts +9 -9
- package/lib/components/InputAmount/InputAmount.js +230 -278
- package/lib/components/InputAmount/helper.d.ts +46 -0
- package/lib/components/InputAmount/helper.js +122 -0
- package/lib/components/ProForm/ProForm.d.ts +33 -0
- package/lib/components/ProForm/ProForm.js +216 -0
- package/lib/components/ProForm/ProFormDependency.d.ts +12 -0
- package/lib/components/ProForm/ProFormDependency.js +67 -0
- package/lib/components/ProForm/ProFormList.d.ts +19 -0
- package/lib/components/ProForm/ProFormList.js +355 -0
- package/lib/components/ProForm/Submitter.d.ts +21 -0
- package/lib/components/ProForm/Submitter.js +83 -0
- package/lib/components/ProForm/constants.d.ts +34 -0
- package/lib/components/ProForm/constants.js +46 -0
- package/lib/components/ProForm/fields/ProFormCheckbox.d.ts +6 -0
- package/lib/components/ProForm/fields/ProFormCheckbox.js +18 -0
- package/lib/components/ProForm/fields/ProFormCheckboxGroup.d.ts +6 -0
- package/lib/components/ProForm/fields/ProFormCheckboxGroup.js +53 -0
- package/lib/components/ProForm/fields/ProFormDigit.d.ts +6 -0
- package/lib/components/ProForm/fields/ProFormDigit.js +22 -0
- package/lib/components/ProForm/fields/ProFormMoney.d.ts +6 -0
- package/lib/components/ProForm/fields/ProFormMoney.js +17 -0
- package/lib/components/ProForm/fields/ProFormMultiSelect.d.ts +6 -0
- package/lib/components/ProForm/fields/ProFormMultiSelect.js +34 -0
- package/lib/components/ProForm/fields/ProFormPassword.d.ts +6 -0
- package/lib/components/ProForm/fields/ProFormPassword.js +23 -0
- package/lib/components/ProForm/fields/ProFormRadio.d.ts +6 -0
- package/lib/components/ProForm/fields/ProFormRadio.js +20 -0
- package/lib/components/ProForm/fields/ProFormSelect.d.ts +6 -0
- package/lib/components/ProForm/fields/ProFormSelect.js +20 -0
- package/lib/components/ProForm/fields/ProFormSwitch.d.ts +6 -0
- package/lib/components/ProForm/fields/ProFormSwitch.js +18 -0
- package/lib/components/ProForm/fields/ProFormText.d.ts +6 -0
- package/lib/components/ProForm/fields/ProFormText.js +22 -0
- package/lib/components/ProForm/fields/ProFormTextArea.d.ts +6 -0
- package/lib/components/ProForm/fields/ProFormTextArea.js +23 -0
- package/lib/components/ProForm/fields/createProFormField.d.ts +43 -0
- package/lib/components/ProForm/fields/createProFormField.js +208 -0
- package/lib/components/ProForm/fields/index.d.ts +12 -0
- package/lib/components/ProForm/fields/index.js +90 -0
- package/lib/components/ProForm/index.d.ts +7 -0
- package/lib/components/ProForm/index.js +73 -0
- package/lib/components/ProForm/interface.d.ts +306 -0
- package/lib/components/ProForm/interface.js +6 -0
- package/lib/components/ProForm/layouts/DrawerForm.d.ts +16 -0
- package/lib/components/ProForm/layouts/DrawerForm.js +86 -0
- package/lib/components/ProForm/layouts/ModalForm.d.ts +16 -0
- package/lib/components/ProForm/layouts/ModalForm.js +96 -0
- package/lib/components/ProForm/layouts/QueryFilter.d.ts +21 -0
- package/lib/components/ProForm/layouts/QueryFilter.js +139 -0
- package/lib/components/ProForm/layouts/StepsForm.d.ts +13 -0
- package/lib/components/ProForm/layouts/StepsForm.js +302 -0
- package/lib/components/ProForm/layouts/index.d.ts +4 -0
- package/lib/components/ProForm/layouts/index.js +40 -0
- package/lib/components/ProForm/layouts/useOverlayForm.d.ts +53 -0
- package/lib/components/ProForm/layouts/useOverlayForm.js +147 -0
- package/lib/components/ProForm/style/ProForm.module.css +1 -0
- package/lib/components/ProForm/style/ProForm.module.scss +59 -0
- package/lib/components/ProForm/style/css.js +4 -0
- package/lib/components/ProForm/style/index.d.ts +1 -0
- package/lib/components/ProForm/style/index.js +4 -0
- package/lib/components/ProForm/utils.d.ts +72 -0
- package/lib/components/ProForm/utils.js +213 -0
- package/lib/components/RadioGroup/RadioGroup.js +45 -22
- package/lib/components/RadioGroup/interface.d.ts +3 -1
- package/lib/components/Select/Select.d.ts +1 -1
- package/lib/components/Select/Select.js +114 -107
- package/lib/components/Select/constants.d.ts +18 -0
- package/lib/components/Select/constants.js +25 -0
- package/lib/components/Sidebar/Sidebar.js +21 -23
- package/lib/components/Sidebar/SidebarLogo.d.ts +7 -0
- package/lib/components/Sidebar/SidebarLogo.js +39 -0
- package/lib/components/Sidebar/SimplySidebar.d.ts +2 -2
- package/lib/components/Sidebar/SimplySidebar.js +17 -21
- package/lib/components/Sidebar/Stepper.js +14 -14
- package/lib/components/Sidebar/constants.d.ts +16 -0
- package/lib/components/Sidebar/constants.js +23 -0
- package/lib/components/Sidebar/style/Stepper.css +1 -1
- package/lib/components/Sidebar/style/Stepper.scss +11 -1
- package/lib/components/Switch/Switch.js +27 -24
- package/lib/components/Switch/interface.d.ts +9 -4
- package/lib/components/useControlledState/index.d.ts +14 -0
- package/lib/components/useControlledState/index.js +39 -0
- package/lib/components/useEventCallback/index.d.ts +11 -0
- package/lib/components/useEventCallback/index.js +24 -0
- package/lib/components/useLatest/index.d.ts +9 -0
- package/lib/components/useLatest/index.js +21 -0
- package/lib/components/useLayoutEffect/index.d.ts +11 -0
- package/lib/components/useLayoutEffect/index.js +23 -0
- package/lib/components/useLayoutState/index.d.ts +13 -0
- package/lib/components/useLayoutState/index.js +79 -0
- package/lib/components/useMemoizedFn/index.d.ts +12 -0
- package/lib/components/useMemoizedFn/index.js +33 -0
- package/lib/components/usePrevious/index.d.ts +11 -0
- package/lib/components/usePrevious/index.js +25 -0
- package/lib/components/useSafeState/index.d.ts +12 -0
- package/lib/components/useSafeState/index.js +31 -0
- package/lib/components/useSyncState/index.d.ts +14 -0
- package/lib/components/useSyncState/index.js +44 -0
- package/lib/components/useUpdateEffect/index.d.ts +9 -0
- package/lib/components/useUpdateEffect/index.js +25 -0
- package/lib/index.css +1 -1
- package/lib/index.d.ts +21 -2
- package/lib/index.js +213 -1
- package/package.json +15 -1
- package/test/jsdom-global-register.d.ts +1 -0
- package/test/jsdom-global-register.js +1 -0
package/AGENTS.md
CHANGED
|
@@ -102,3 +102,396 @@ import '@1money/react-ui/index.css';
|
|
|
102
102
|
- Font assets (Aeonik, Inter, Outfit) are included in `public/fonts/`
|
|
103
103
|
- Lottie animations are used in Loading component
|
|
104
104
|
- Pre-commit hooks enforce code quality via husky and lint-staged
|
|
105
|
+
|
|
106
|
+
## Commit Convention
|
|
107
|
+
|
|
108
|
+
This project follows the [Conventional Commits](https://www.conventionalcommits.org/) specification.
|
|
109
|
+
|
|
110
|
+
### Commit Message Format
|
|
111
|
+
|
|
112
|
+
```
|
|
113
|
+
<type>(<scope>): <subject>
|
|
114
|
+
|
|
115
|
+
[optional body]
|
|
116
|
+
|
|
117
|
+
[optional footer]
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
### Types
|
|
121
|
+
|
|
122
|
+
| Type | Description |
|
|
123
|
+
|------|-------------|
|
|
124
|
+
| `feat` | New feature |
|
|
125
|
+
| `fix` | Bug fix |
|
|
126
|
+
| `docs` | Documentation changes only |
|
|
127
|
+
| `style` | Code style changes (formatting, missing semicolons, etc.) — no logic change |
|
|
128
|
+
| `refactor` | Code refactoring — no feature addition or bug fix |
|
|
129
|
+
| `perf` | Performance improvements |
|
|
130
|
+
| `test` | Adding or updating tests |
|
|
131
|
+
| `chore` | Build process, tooling, or dependency changes |
|
|
132
|
+
| `revert` | Revert a previous commit |
|
|
133
|
+
| `ci` | CI/CD configuration changes |
|
|
134
|
+
|
|
135
|
+
### Scope
|
|
136
|
+
|
|
137
|
+
The scope should be the name of the component or module affected:
|
|
138
|
+
|
|
139
|
+
```
|
|
140
|
+
feat(Button): add loading state support
|
|
141
|
+
fix(Input): correct placeholder color in dark mode
|
|
142
|
+
docs(ProForm): update usage examples
|
|
143
|
+
refactor(utils): simplify classnames helper
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
Omit scope when the change is global or cross-cutting:
|
|
147
|
+
|
|
148
|
+
```
|
|
149
|
+
chore: upgrade PrimeReact to v11
|
|
150
|
+
ci: add lint check to PR workflow
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
### Subject Rules
|
|
154
|
+
|
|
155
|
+
- ✅ Use imperative mood: "add feature" not "added feature" or "adds feature"
|
|
156
|
+
- ✅ Start with a lowercase letter
|
|
157
|
+
- ✅ No period at the end
|
|
158
|
+
- ✅ Keep under 72 characters
|
|
159
|
+
- ❌ Do not use vague messages like "fix bug", "update code", "WIP"
|
|
160
|
+
|
|
161
|
+
### Examples
|
|
162
|
+
|
|
163
|
+
```bash
|
|
164
|
+
# ✅ Good
|
|
165
|
+
feat(ProForm): add StepsForm component with validation support
|
|
166
|
+
fix(Select): prevent dropdown from closing on internal scroll
|
|
167
|
+
refactor(Button): extract size constants to avoid magic strings
|
|
168
|
+
test(Input): add snapshot tests for controlled mode
|
|
169
|
+
docs(README): add installation and usage guide
|
|
170
|
+
chore: update pnpm lockfile after dependency upgrade
|
|
171
|
+
|
|
172
|
+
# ❌ Bad
|
|
173
|
+
fix bug
|
|
174
|
+
update
|
|
175
|
+
WIP
|
|
176
|
+
feat: add stuff
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
### Breaking Changes
|
|
180
|
+
|
|
181
|
+
Breaking changes must be noted in the footer with `BREAKING CHANGE:`:
|
|
182
|
+
|
|
183
|
+
```
|
|
184
|
+
feat(ProForm): change onSubmit callback signature
|
|
185
|
+
|
|
186
|
+
BREAKING CHANGE: onSubmit now receives (values, form) instead of (values).
|
|
187
|
+
Consumers must update their onSubmit handlers accordingly.
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
### Multi-line Body
|
|
191
|
+
|
|
192
|
+
Use the body to explain *why* a change was made, not *what* was changed (the diff shows that):
|
|
193
|
+
|
|
194
|
+
```
|
|
195
|
+
fix(StepsForm): clear downstream step values on backward navigation
|
|
196
|
+
|
|
197
|
+
When a user navigates backward in a multi-step form, previously entered
|
|
198
|
+
values in later steps should be cleared to prevent stale data from
|
|
199
|
+
being submitted. This matches the expected UX behavior.
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
## TypeScript Standards
|
|
203
|
+
|
|
204
|
+
### Core Principles
|
|
205
|
+
|
|
206
|
+
- ✅ All components and functions must provide accurate type definitions
|
|
207
|
+
- ✅ Avoid using `any`; define types as precisely as possible
|
|
208
|
+
- ✅ Use interfaces (`interface`) instead of type aliases (`type`) for object structures
|
|
209
|
+
- ✅ Export all public interface types for easier consumer usage
|
|
210
|
+
- ✅ Follow TypeScript type design principles strictly to ensure type safety
|
|
211
|
+
- ✅ Ensure compilation has no type errors or warnings
|
|
212
|
+
|
|
213
|
+
### Component Type Definitions
|
|
214
|
+
|
|
215
|
+
```tsx
|
|
216
|
+
// ✅ Correct: use interface to define Props
|
|
217
|
+
interface ButtonProps {
|
|
218
|
+
type?: 'primary' | 'secondary' | 'warning';
|
|
219
|
+
onClick?: (e: React.MouseEvent) => void;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
// ❌ Incorrect: avoid using type to define object structures
|
|
223
|
+
type ButtonProps = {
|
|
224
|
+
type?: 'primary' | 'secondary';
|
|
225
|
+
};
|
|
226
|
+
|
|
227
|
+
// ✅ Correct: component Props interface naming
|
|
228
|
+
interface ComponentNameProps {
|
|
229
|
+
// ...
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
// ✅ Correct: component state interface naming
|
|
233
|
+
interface ComponentNameState {
|
|
234
|
+
// ...
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
// ✅ Correct: use ForwardRefRenderFunction to define ref
|
|
238
|
+
const Component = React.forwardRef<ComponentRef, ComponentProps>((props, ref) => {
|
|
239
|
+
// ...
|
|
240
|
+
});
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
### Type Usage Best Practices
|
|
244
|
+
|
|
245
|
+
- ✅ Use generics where appropriate to improve type flexibility
|
|
246
|
+
- ✅ Use intersection types (`&`) to combine multiple types
|
|
247
|
+
- ✅ Use literal union types to define a limited set of options
|
|
248
|
+
- ✅ Avoid `enum`; prefer union types and `as const`
|
|
249
|
+
- ✅ Rely on TypeScript type inference as much as possible
|
|
250
|
+
- ✅ Use type assertions (`as`) only when necessary
|
|
251
|
+
|
|
252
|
+
```tsx
|
|
253
|
+
// ✅ Recommended: use union types and as const
|
|
254
|
+
const ButtonTypes = ['primary', 'secondary', 'warning'] as const;
|
|
255
|
+
type ButtonType = (typeof ButtonTypes)[number];
|
|
256
|
+
|
|
257
|
+
// ❌ Not recommended: use enum
|
|
258
|
+
enum ButtonType {
|
|
259
|
+
Primary = 'primary',
|
|
260
|
+
Default = 'secondary',
|
|
261
|
+
}
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
### Avoid Magic Strings
|
|
265
|
+
|
|
266
|
+
- ✅ Define string constants or use `as const` arrays for repeated string values
|
|
267
|
+
- ✅ Use constants for event names, action types, storage keys, and API endpoints
|
|
268
|
+
- ✅ Extract hardcoded strings into named constants with descriptive names
|
|
269
|
+
- ✅ Keep constants close to their usage or in a dedicated constants file
|
|
270
|
+
|
|
271
|
+
```tsx
|
|
272
|
+
// ✅ Correct: define constants
|
|
273
|
+
const STORAGE_KEY = 'user_preferences';
|
|
274
|
+
const EVENT_SUBMIT = 'submit';
|
|
275
|
+
|
|
276
|
+
localStorage.setItem(STORAGE_KEY, value);
|
|
277
|
+
element.addEventListener(EVENT_SUBMIT, handler);
|
|
278
|
+
|
|
279
|
+
// ✅ Correct: use as const for related values
|
|
280
|
+
const ToastTypes = ['success', 'error', 'warning', 'info'] as const;
|
|
281
|
+
type ToastType = (typeof ToastTypes)[number];
|
|
282
|
+
|
|
283
|
+
// ❌ Incorrect: magic strings scattered in code
|
|
284
|
+
localStorage.setItem('user_preferences', value);
|
|
285
|
+
element.addEventListener('submit', handler);
|
|
286
|
+
if (status === 'success') { ... }
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
## Custom Hooks Usage Guide
|
|
290
|
+
|
|
291
|
+
This library provides 11 custom hooks for common React patterns. Use these hooks to improve code quality and consistency.
|
|
292
|
+
|
|
293
|
+
### useControlledState
|
|
294
|
+
|
|
295
|
+
**When to use**: Building components that support both controlled and uncontrolled modes.
|
|
296
|
+
|
|
297
|
+
```tsx
|
|
298
|
+
// ✅ Use for form components that can be controlled or uncontrolled
|
|
299
|
+
function Input({ value, defaultValue, onChange }: InputProps) {
|
|
300
|
+
const [innerValue, setInnerValue] = useControlledState(defaultValue ?? '', value);
|
|
301
|
+
|
|
302
|
+
const handleChange = (e: ChangeEvent<HTMLInputElement>) => {
|
|
303
|
+
setInnerValue(e.target.value);
|
|
304
|
+
onChange?.(e);
|
|
305
|
+
};
|
|
306
|
+
|
|
307
|
+
return <input value={innerValue} onChange={handleChange} />;
|
|
308
|
+
}
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
### useEventCallback
|
|
312
|
+
|
|
313
|
+
**When to use**: When you need a stable callback reference that always invokes the latest function version. Similar to React's `useEvent` RFC.
|
|
314
|
+
|
|
315
|
+
```tsx
|
|
316
|
+
// ✅ Use when passing callbacks to optimized child components
|
|
317
|
+
function Parent() {
|
|
318
|
+
const [count, setCount] = useState(0);
|
|
319
|
+
|
|
320
|
+
// Stable reference, always calls latest function
|
|
321
|
+
const handleClick = useEventCallback(() => {
|
|
322
|
+
console.log('Current count:', count); // Always gets latest count
|
|
323
|
+
});
|
|
324
|
+
|
|
325
|
+
return <MemoizedChild onClick={handleClick} />;
|
|
326
|
+
}
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
### useLatest
|
|
330
|
+
|
|
331
|
+
**When to use**: When you need to access the latest value in callbacks without causing re-renders or stale closures.
|
|
332
|
+
|
|
333
|
+
```tsx
|
|
334
|
+
// ✅ Use to avoid stale closures in timers or event handlers
|
|
335
|
+
function Timer({ delay, callback }: TimerProps) {
|
|
336
|
+
const callbackRef = useLatest(callback);
|
|
337
|
+
|
|
338
|
+
useEffect(() => {
|
|
339
|
+
const id = setInterval(() => {
|
|
340
|
+
callbackRef.current(); // Always calls the latest callback
|
|
341
|
+
}, delay);
|
|
342
|
+
return () => clearInterval(id);
|
|
343
|
+
}, [delay]); // No need to include callback in deps
|
|
344
|
+
}
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
### useLayoutEffect
|
|
348
|
+
|
|
349
|
+
**When to use**: When you need to know if the effect is running on initial mount or subsequent updates.
|
|
350
|
+
|
|
351
|
+
```tsx
|
|
352
|
+
// ✅ Use when behavior differs between mount and update
|
|
353
|
+
function AnimatedComponent({ value }: Props) {
|
|
354
|
+
useLayoutEffect((mount) => {
|
|
355
|
+
if (mount) {
|
|
356
|
+
// Initial mount - setup without animation
|
|
357
|
+
element.style.opacity = '1';
|
|
358
|
+
} else {
|
|
359
|
+
// Update - animate the change
|
|
360
|
+
animateOpacity(element);
|
|
361
|
+
}
|
|
362
|
+
}, [value]);
|
|
363
|
+
}
|
|
364
|
+
```
|
|
365
|
+
|
|
366
|
+
### useMemoizedFn
|
|
367
|
+
|
|
368
|
+
**When to use**: When you need a stable function reference without managing a dependency array, while always calling the latest version.
|
|
369
|
+
|
|
370
|
+
```tsx
|
|
371
|
+
// ✅ Use for event handlers passed to child components
|
|
372
|
+
function Form({ onSubmit }: FormProps) {
|
|
373
|
+
const [data, setData] = useState({});
|
|
374
|
+
|
|
375
|
+
// Stable reference, no deps needed, always uses latest data
|
|
376
|
+
const handleSubmit = useMemoizedFn(() => {
|
|
377
|
+
onSubmit(data);
|
|
378
|
+
});
|
|
379
|
+
|
|
380
|
+
return <ExpensiveChild onSubmit={handleSubmit} />;
|
|
381
|
+
}
|
|
382
|
+
```
|
|
383
|
+
|
|
384
|
+
### usePrevious
|
|
385
|
+
|
|
386
|
+
**When to use**: When you need to compare current value with the previous render's value.
|
|
387
|
+
|
|
388
|
+
```tsx
|
|
389
|
+
// ✅ Use for detecting value changes
|
|
390
|
+
function Counter({ count }: Props) {
|
|
391
|
+
const prevCount = usePrevious(count);
|
|
392
|
+
|
|
393
|
+
useEffect(() => {
|
|
394
|
+
if (prevCount !== undefined && count > prevCount) {
|
|
395
|
+
console.log('Count increased!');
|
|
396
|
+
}
|
|
397
|
+
}, [count, prevCount]);
|
|
398
|
+
}
|
|
399
|
+
```
|
|
400
|
+
|
|
401
|
+
### useSafeState
|
|
402
|
+
|
|
403
|
+
**When to use**: When setting state in async callbacks where the component might unmount before completion.
|
|
404
|
+
|
|
405
|
+
```tsx
|
|
406
|
+
// ✅ Use for async operations to prevent memory leaks
|
|
407
|
+
function AsyncComponent() {
|
|
408
|
+
const [data, setData] = useSafeState<Data | null>(null);
|
|
409
|
+
|
|
410
|
+
useEffect(() => {
|
|
411
|
+
fetchData().then((result) => {
|
|
412
|
+
setData(result); // Safe: won't update if unmounted
|
|
413
|
+
});
|
|
414
|
+
}, []);
|
|
415
|
+
}
|
|
416
|
+
```
|
|
417
|
+
|
|
418
|
+
### useSyncState
|
|
419
|
+
|
|
420
|
+
**When to use**: When React batches multiple state updates but you need to read the latest value synchronously.
|
|
421
|
+
|
|
422
|
+
```tsx
|
|
423
|
+
// ✅ Use when multiple events fire simultaneously (e.g., onTransitionEnd)
|
|
424
|
+
function AnimatedList() {
|
|
425
|
+
const [getCompletedCount, setCompletedCount] = useSyncState(0);
|
|
426
|
+
|
|
427
|
+
const handleTransitionEnd = () => {
|
|
428
|
+
// Multiple transitions may end at once, React batches them
|
|
429
|
+
// getCompletedCount() always returns the latest value
|
|
430
|
+
setCompletedCount(getCompletedCount() + 1);
|
|
431
|
+
};
|
|
432
|
+
}
|
|
433
|
+
```
|
|
434
|
+
|
|
435
|
+
### useUpdateEffect
|
|
436
|
+
|
|
437
|
+
**When to use**: When you want an effect to run only on updates, skipping the initial mount.
|
|
438
|
+
|
|
439
|
+
```tsx
|
|
440
|
+
// ✅ Use when initial render shouldn't trigger the effect
|
|
441
|
+
function SearchInput({ query, onSearch }: Props) {
|
|
442
|
+
useUpdateEffect(() => {
|
|
443
|
+
// Only runs when query changes, not on initial mount
|
|
444
|
+
onSearch(query);
|
|
445
|
+
}, [query]);
|
|
446
|
+
}
|
|
447
|
+
```
|
|
448
|
+
|
|
449
|
+
### useLayoutState
|
|
450
|
+
|
|
451
|
+
**When to use**: When you need to batch multiple synchronous state updates into a single microtask to reduce unnecessary re-renders. Updates are collected and applied together via `Promise.resolve`, triggering only one render.
|
|
452
|
+
|
|
453
|
+
```tsx
|
|
454
|
+
// ✅ Use when multiple state updates happen synchronously and should be batched
|
|
455
|
+
function VirtualTable({ columns }: Props) {
|
|
456
|
+
const [colWidths, setColWidths] = useLayoutState<Map<string, number>>(new Map());
|
|
457
|
+
|
|
458
|
+
const handleResize = (key: string, width: number) => {
|
|
459
|
+
// Multiple columns may resize at once; updates are batched into one render
|
|
460
|
+
setColWidths(prev => new Map(prev).set(key, width));
|
|
461
|
+
};
|
|
462
|
+
|
|
463
|
+
return <ResizableColumns widths={colWidths} onResize={handleResize} />;
|
|
464
|
+
}
|
|
465
|
+
```
|
|
466
|
+
|
|
467
|
+
### useTimeoutLock
|
|
468
|
+
|
|
469
|
+
**When to use**: When you need a short-lived lock that auto-resets after a timeout (100ms). Useful for preventing duplicate actions or debouncing rapid state changes.
|
|
470
|
+
|
|
471
|
+
```tsx
|
|
472
|
+
// ✅ Use to prevent rapid duplicate submissions
|
|
473
|
+
function SubmitButton() {
|
|
474
|
+
const [setLock, getLock] = useTimeoutLock<string>();
|
|
475
|
+
|
|
476
|
+
const handleClick = () => {
|
|
477
|
+
if (getLock()) return; // Already locked
|
|
478
|
+
setLock('submitting');
|
|
479
|
+
submitForm();
|
|
480
|
+
};
|
|
481
|
+
}
|
|
482
|
+
```
|
|
483
|
+
|
|
484
|
+
### Hook Selection Guide
|
|
485
|
+
|
|
486
|
+
| Scenario | Recommended Hook |
|
|
487
|
+
|----------|------------------|
|
|
488
|
+
| Controlled/uncontrolled component | `useControlledState` |
|
|
489
|
+
| Stable callback for memoized children | `useEventCallback` or `useMemoizedFn` |
|
|
490
|
+
| Access latest value without re-render | `useLatest` |
|
|
491
|
+
| Different logic for mount vs update | `useLayoutEffect` |
|
|
492
|
+
| Compare with previous value | `usePrevious` |
|
|
493
|
+
| Async state updates after unmount | `useSafeState` |
|
|
494
|
+
| Read latest state synchronously | `useSyncState` |
|
|
495
|
+
| Skip effect on initial mount | `useUpdateEffect` |
|
|
496
|
+
| Batch synchronous state updates | `useLayoutState` |
|
|
497
|
+
| Short-lived lock with auto-reset | `useTimeoutLock` |
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { FC
|
|
1
|
+
import type { FC } from 'react';
|
|
2
2
|
import type { CheckboxGroupProps } from './interface';
|
|
3
|
-
export declare const CheckboxGroup: FC<
|
|
4
|
-
declare const _default: import("react").NamedExoticComponent<
|
|
3
|
+
export declare const CheckboxGroup: FC<CheckboxGroupProps>;
|
|
4
|
+
declare const _default: import("react").NamedExoticComponent<CheckboxGroupProps>;
|
|
5
5
|
export default _default;
|
|
@@ -9,11 +9,14 @@ var __rest = this && this.__rest || function (s, e) {
|
|
|
9
9
|
}
|
|
10
10
|
return t;
|
|
11
11
|
};
|
|
12
|
-
import {
|
|
13
|
-
import { memo,
|
|
12
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
13
|
+
import { memo, useMemo } from 'react';
|
|
14
14
|
import { Checkbox as PrimeCheckbox } from 'primereact/checkbox';
|
|
15
15
|
import { TriStateCheckbox } from 'primereact/tristatecheckbox';
|
|
16
16
|
import { default as classnames, joinCls } from '../../utils/classnames';
|
|
17
|
+
import useControlledState from '../useControlledState';
|
|
18
|
+
import useMemoizedFn from '../useMemoizedFn';
|
|
19
|
+
var TriStateCheckboxWithInputId = TriStateCheckbox;
|
|
17
20
|
export var CheckboxGroup = function CheckboxGroup(props) {
|
|
18
21
|
var tristate = props.tristate,
|
|
19
22
|
_props$items = props.items,
|
|
@@ -29,104 +32,104 @@ export var CheckboxGroup = function CheckboxGroup(props) {
|
|
|
29
32
|
size = _props$size === void 0 ? 'md' : _props$size;
|
|
30
33
|
var classes = classnames(prefixCls);
|
|
31
34
|
var sizeClass = "ckbg-".concat(size);
|
|
32
|
-
|
|
33
|
-
return tristate ? TriStateCheckbox : PrimeCheckbox;
|
|
34
|
-
}, [tristate]);
|
|
35
|
+
// Normal mode: controlled/uncontrolled string[] state
|
|
35
36
|
var defaultChecked = useMemo(function () {
|
|
36
37
|
return items.filter(function (item) {
|
|
37
|
-
return
|
|
38
|
+
return item.defaultChecked;
|
|
38
39
|
}).map(function (v) {
|
|
39
40
|
return v.key;
|
|
40
41
|
});
|
|
41
42
|
}, [items]);
|
|
42
|
-
var
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
43
|
+
var normalValue = tristate ? undefined : props.value;
|
|
44
|
+
var _useControlledState = useControlledState(normalValue !== null && normalValue !== void 0 ? normalValue : defaultChecked, normalValue),
|
|
45
|
+
_useControlledState2 = _slicedToArray(_useControlledState, 2),
|
|
46
|
+
checkedItems = _useControlledState2[0],
|
|
47
|
+
setCheckedItems = _useControlledState2[1];
|
|
48
|
+
// Tristate mode: controlled/uncontrolled Record<string, boolean | null> state
|
|
49
|
+
var defaultItemsState = useMemo(function () {
|
|
50
|
+
return Object.fromEntries(items.map(function (v) {
|
|
47
51
|
var _a;
|
|
48
|
-
return
|
|
49
|
-
}))
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
52
|
+
return [v.key, (_a = 'defaultValue' in v ? v.defaultValue : null) !== null && _a !== void 0 ? _a : null];
|
|
53
|
+
}));
|
|
54
|
+
}, [items]);
|
|
55
|
+
var tristateValue = tristate ? props.value : undefined;
|
|
56
|
+
var _useControlledState3 = useControlledState(tristateValue !== null && tristateValue !== void 0 ? tristateValue : defaultItemsState, tristateValue),
|
|
57
|
+
_useControlledState4 = _slicedToArray(_useControlledState3, 2),
|
|
58
|
+
itemsState = _useControlledState4[0],
|
|
59
|
+
setItemsState = _useControlledState4[1];
|
|
60
|
+
var handleNormalChange = useMemoizedFn(function (e, itemOnChange) {
|
|
61
|
+
itemOnChange === null || itemOnChange === void 0 ? void 0 : itemOnChange(!!e.checked);
|
|
62
|
+
var next = e.checked ? [].concat(_toConsumableArray(checkedItems), [e.value]) : checkedItems.filter(function (k) {
|
|
63
|
+
return k !== e.value;
|
|
64
|
+
});
|
|
65
|
+
setCheckedItems(next);
|
|
66
|
+
onChange === null || onChange === void 0 ? void 0 : onChange(next);
|
|
67
|
+
});
|
|
68
|
+
var handleTristateChange = useMemoizedFn(function (e, itemOnChange) {
|
|
69
|
+
itemOnChange === null || itemOnChange === void 0 ? void 0 : itemOnChange(e.value);
|
|
70
|
+
var next = Object.assign(Object.assign({}, itemsState), _defineProperty({}, e.target.id, e.value));
|
|
71
|
+
setItemsState(next);
|
|
72
|
+
onChange === null || onChange === void 0 ? void 0 : onChange(next);
|
|
73
|
+
});
|
|
74
|
+
var renderItem = function renderItem(item) {
|
|
75
|
+
var _a;
|
|
76
|
+
var key = item.key,
|
|
77
|
+
required = item.required,
|
|
78
|
+
disabled = item.disabled,
|
|
79
|
+
label = item.label,
|
|
80
|
+
itemOnChange = item.onChange,
|
|
81
|
+
rest = __rest(item, ["key", "required", "disabled", "label", "onChange"]);
|
|
82
|
+
// Strip defaultValue from rest to avoid passing it to DOM
|
|
83
|
+
var _b = rest,
|
|
84
|
+
_ = _b.defaultValue,
|
|
85
|
+
__ = _b.defaultChecked,
|
|
86
|
+
checkboxRest = __rest(_b, ["defaultValue", "defaultChecked"]);
|
|
87
|
+
var innerClassName = classes('inner-checkbox', checkboxGroupCls);
|
|
88
|
+
var checkboxEl = tristate ? _jsx(TriStateCheckboxWithInputId, Object.assign({}, checkboxRest, {
|
|
89
|
+
id: key,
|
|
90
|
+
inputId: key,
|
|
91
|
+
value: (_a = itemsState[key]) !== null && _a !== void 0 ? _a : null,
|
|
92
|
+
required: required,
|
|
93
|
+
disabled: disabled,
|
|
94
|
+
className: innerClassName,
|
|
95
|
+
uncheckIcon: _jsx("i", {
|
|
96
|
+
className: "pi pi-minus"
|
|
97
|
+
}),
|
|
98
|
+
checkIcon: _jsx("i", {
|
|
99
|
+
className: "pi pi-check"
|
|
100
|
+
}),
|
|
101
|
+
onChange: function onChange(e) {
|
|
102
|
+
if (!disabled) handleTristateChange(e, itemOnChange);
|
|
103
|
+
}
|
|
104
|
+
})) : _jsx(PrimeCheckbox, Object.assign({}, checkboxRest, {
|
|
105
|
+
inputId: key,
|
|
106
|
+
value: key,
|
|
107
|
+
required: required,
|
|
108
|
+
disabled: disabled,
|
|
109
|
+
checked: checkedItems.includes(key),
|
|
110
|
+
className: innerClassName,
|
|
111
|
+
icon: _jsx("i", {
|
|
112
|
+
className: "pi pi-check"
|
|
113
|
+
}),
|
|
114
|
+
onChange: function onChange(e) {
|
|
115
|
+
if (!disabled) handleNormalChange(e, itemOnChange);
|
|
116
|
+
}
|
|
117
|
+
}));
|
|
118
|
+
return _jsx("div", {
|
|
119
|
+
className: joinCls(classes('inner', innerCls), sizeClass),
|
|
120
|
+
children: label ? _jsxs("label", {
|
|
121
|
+
htmlFor: key,
|
|
122
|
+
className: labelCls,
|
|
123
|
+
children: [checkboxEl, tristate ? _jsx("span", {
|
|
124
|
+
children: label
|
|
125
|
+
}) : label]
|
|
126
|
+
}) : checkboxEl
|
|
127
|
+
}, key);
|
|
128
|
+
};
|
|
66
129
|
return _jsx("div", {
|
|
67
130
|
className: classes('wrapper', wrapperCls),
|
|
68
|
-
children: items.map(
|
|
69
|
-
var key = item.key,
|
|
70
|
-
required = item.required,
|
|
71
|
-
disabled = item.disabled,
|
|
72
|
-
_item$defaultValue = item.defaultValue,
|
|
73
|
-
defaultValue = _item$defaultValue === void 0 ? null : _item$defaultValue,
|
|
74
|
-
label = item.label,
|
|
75
|
-
_onChange = item.onChange,
|
|
76
|
-
rest = __rest(item, ["key", "required", "disabled", "defaultValue", "label", "onChange"]);
|
|
77
|
-
var _useState5 = useState(defaultValue),
|
|
78
|
-
_useState6 = _slicedToArray(_useState5, 2),
|
|
79
|
-
trivalue = _useState6[0],
|
|
80
|
-
setTrivalue = _useState6[1];
|
|
81
|
-
var handleLabelClick = useCallback(function () {
|
|
82
|
-
if (!tristate || disabled) return;
|
|
83
|
-
setTrivalue(function (curr) {
|
|
84
|
-
return curr === null ? true : curr === true ? false : null;
|
|
85
|
-
});
|
|
86
|
-
}, [tristate, disabled]);
|
|
87
|
-
var LabelWrapper = useCallback(function (_ref2) {
|
|
88
|
-
var children = _ref2.children;
|
|
89
|
-
if (!label) return children;
|
|
90
|
-
return _jsxs("label", {
|
|
91
|
-
className: labelCls,
|
|
92
|
-
onClick: handleLabelClick,
|
|
93
|
-
children: [children, label]
|
|
94
|
-
});
|
|
95
|
-
}, [label, labelCls, handleLabelClick]);
|
|
96
|
-
return _jsx("div", {
|
|
97
|
-
className: joinCls(classes('inner', innerCls), sizeClass),
|
|
98
|
-
children: _jsx(LabelWrapper, {
|
|
99
|
-
children: _jsx(CheckBoxComponent, Object.assign({}, rest, {
|
|
100
|
-
id: tristate ? key : void 0,
|
|
101
|
-
value: tristate ? trivalue : key,
|
|
102
|
-
required: required,
|
|
103
|
-
disabled: disabled,
|
|
104
|
-
checked: tristate ? void 0 : checkedItems.includes(key),
|
|
105
|
-
className: classes('inner-checkbox', checkboxGroupCls)
|
|
106
|
-
}, tristate ? {
|
|
107
|
-
uncheckIcon: _jsx("i", {
|
|
108
|
-
className: "pi pi-minus"
|
|
109
|
-
})
|
|
110
|
-
} : {}, tristate ? {
|
|
111
|
-
checkIcon: _jsx("i", {
|
|
112
|
-
className: "pi pi-check"
|
|
113
|
-
})
|
|
114
|
-
} : {
|
|
115
|
-
icon: _jsx("i", {
|
|
116
|
-
className: "pi pi-check"
|
|
117
|
-
})
|
|
118
|
-
}, {
|
|
119
|
-
onChange: function onChange(e) {
|
|
120
|
-
if (disabled) return;
|
|
121
|
-
tristate && setTrivalue(e.value);
|
|
122
|
-
_onChange === null || _onChange === void 0 ? void 0 : _onChange(tristate ? e.value : !!e.checked);
|
|
123
|
-
handleOnChange(e);
|
|
124
|
-
}
|
|
125
|
-
}))
|
|
126
|
-
})
|
|
127
|
-
}, key);
|
|
128
|
-
})
|
|
131
|
+
children: items.map(renderItem)
|
|
129
132
|
});
|
|
130
133
|
};
|
|
131
134
|
export default /*#__PURE__*/memo(CheckboxGroup);
|
|
132
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvQ2hlY2tib3hHcm91cC9DaGVja2JveEdyb3VwLmpzIiwiY29tcG9uZW50cy9zcmMvY29tcG9uZW50cy9DaGVja2JveEdyb3VwL0NoZWNrYm94R3JvdXAudHN4Il0sIm5hbWVzIjpbIl9fcmVzdCIsInMiLCJlIiwidCIsInAiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpbmRleE9mIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiaSIsImxlbmd0aCIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwianN4cyIsIl9qc3hzIiwianN4IiwiX2pzeCIsIm1lbW8iLCJ1c2VTdGF0ZSIsInVzZU1lbW8iLCJ1c2VDYWxsYmFjayIsIkNoZWNrYm94IiwiUHJpbWVDaGVja2JveCIsIlRyaVN0YXRlQ2hlY2tib3giLCJkZWZhdWx0IiwiY2xhc3NuYW1lcyIsImpvaW5DbHMiLCJDaGVja2JveEdyb3VwIiwicHJvcHMiLCJ0cmlzdGF0ZSIsIl9wcm9wcyRpdGVtcyIsIml0ZW1zIiwib25DaGFuZ2UiLCJ3cmFwcGVyQ2xzIiwiaW5uZXJDbHMiLCJjaGVja2JveEdyb3VwQ2xzIiwibGFiZWxDbHMiLCJfcHJvcHMkcHJlZml4Q2xzIiwicHJlZml4Q2xzIiwiX3Byb3BzJHNpemUiLCJzaXplIiwiY2xhc3NlcyIsInNpemVDbGFzcyIsImNvbmNhdCIsIkNoZWNrQm94Q29tcG9uZW50IiwiZGVmYXVsdENoZWNrZWQiLCJmaWx0ZXIiLCJpdGVtIiwiYXV0b0ZvY3VzIiwibWFwIiwidiIsImtleSIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheSIsImNoZWNrZWRJdGVtcyIsInNldENoZWNrZWRJdGVtcyIsIl91c2VTdGF0ZTMiLCJhc3NpZ24iLCJhcHBseSIsIl90b0NvbnN1bWFibGVBcnJheSIsIl9hIiwiX2RlZmluZVByb3BlcnR5IiwiZGVmYXVsdFZhbHVlIiwiX3VzZVN0YXRlNCIsIml0ZW1zU3RhdGUiLCJzZXRJdGVtc1N0YXRlIiwiaGFuZGxlT25DaGFuZ2UiLCJfc3RhdGUiLCJ0YXJnZXQiLCJpZCIsInZhbHVlIiwiY2hlY2tlZCIsInB1c2giLCJzcGxpY2UiLCJjbGFzc05hbWUiLCJjaGlsZHJlbiIsInJlcXVpcmVkIiwiZGlzYWJsZWQiLCJfaXRlbSRkZWZhdWx0VmFsdWUiLCJsYWJlbCIsInJlc3QiLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsInRyaXZhbHVlIiwic2V0VHJpdmFsdWUiLCJoYW5kbGVMYWJlbENsaWNrIiwiY3VyciIsIkxhYmVsV3JhcHBlciIsIl9yZWYyIiwib25DbGljayIsImluY2x1ZGVzIiwidW5jaGVja0ljb24iLCJjaGVja0ljb24iLCJpY29uIl0sIm1hcHBpbmdzIjoiOzs7QUFBQSxJQUFJQSxNQUFNLEdBQUksSUFBSSxJQUFJLElBQUksQ0FBQ0EsTUFBTSxJQUFLLFVBQVVDLENBQUMsRUFBRUMsQ0FBQyxFQUFFO0VBQ2xELElBQUlDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDVixLQUFLLElBQUlDLENBQUMsSUFBSUgsQ0FBQyxFQUFFLElBQUlJLE1BQU0sQ0FBQ0MsU0FBUyxDQUFDQyxjQUFjLENBQUNDLElBQUksQ0FBQ1AsQ0FBQyxFQUFFRyxDQUFDLENBQUMsSUFBSUYsQ0FBQyxDQUFDTyxPQUFPLENBQUNMLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFDL0VELENBQUMsQ0FBQ0MsQ0FBQyxDQUFDLEdBQUdILENBQUMsQ0FBQ0csQ0FBQyxDQUFDO0VBQ2YsSUFBSUgsQ0FBQyxJQUFJLElBQUksSUFBSSxPQUFPSSxNQUFNLENBQUNLLHFCQUFxQixLQUFLLFVBQVUsRUFDL0QsS0FBSyxJQUFJQyxDQUFDLEdBQUcsQ0FBQyxFQUFFUCxDQUFDLEdBQUdDLE1BQU0sQ0FBQ0sscUJBQXFCLENBQUNULENBQUMsQ0FBQyxFQUFFVSxDQUFDLEdBQUdQLENBQUMsQ0FBQ1EsTUFBTSxFQUFFRCxDQUFDLEVBQUUsRUFBRTtJQUNwRSxJQUFJVCxDQUFDLENBQUNPLE9BQU8sQ0FB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QUFBLENBQUUsRUFDakU5QyxRQUFRLEdBQUc7WUFBRWdFLFNBQVMsRUFBRTdFLElBQUEsQ0FBQSxHQUFBLEVBQUE7Y0FBRzJELFNBQVMsRUFBQztZQUFhLENBQUE7VUFBTSxDQUFFLEdBQUc7WUFDaEVtQixJQUFJLEVBQUU5RSxJQUFBLENBQUEsR0FBQSxFQUFBO2NBQUcyRCxTQUFTLEVBQUM7WUFBYSxDQUFBO1VEWDFCLENDWVAsRUFBQztZQUNGM0MsUUFBUSxFQUFFLFNBQVZBLFFBQVFBLENBQUUvQixDQUFDLEVBQUc7Y0FDWixJQUFJNkUsUUFBUSxFQUFFO2NBQ2RqRCxRQUFRLElBQUl3RCxXQUFXLENBQUNwRixDQUFDLENBQUNzRSxLQUFLLENBQUM7Y0FDaEN2QyxTQUFRLEtBQUEsSUFBQSxJQUFSQSxTQUFRLEtBQUEsS0FBQSxDQUFBLEdBQUEsS0FBQSxDQUFBLEdBQVJBLFNBQVEsQ0FBR0gsUUFBUSxHQUFHNUIsQ0FBQyxDQUFDc0UsS0FBSyxHQUFHLENBQUMsQ0FBQ3RFLENBQUMsQ0FBQ3VFLE9BQU8sQ0FBQztjQUM1Q0wsY0FBYyxDQUFDbEUsQ0FBQyxDQUFDO1lBQ25CO1VBQUMsQ0FBQSxDQUFBO1FBQ0QsQ0FBQTtNQUNXLENBQUEsRUF0QkFrRCxHQUFHLENBdUJkO0lBQ1IsQ0FBQztFQUFDLENBQUEsQ0FDRTtBQUNSLENBQUM7QUFFRCw0QkFBZWxDLElBQUksQ0FBQ1UsYUFBYSxDQUFDIiwiZmlsZSI6ImNvbXBvbmVudHMvQ2hlY2tib3hHcm91cC9DaGVja2JveEdyb3VwLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIF9fcmVzdCA9ICh0aGlzICYmIHRoaXMuX19yZXN0KSB8fCBmdW5jdGlvbiAocywgZSkge1xuICAgIHZhciB0ID0ge307XG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXG4gICAgICAgIHRbcF0gPSBzW3BdO1xuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xuICAgICAgICB9XG4gICAgcmV0dXJuIHQ7XG59O1xuaW1wb3J0IHsganN4cyBhcyBfanN4cywganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IG1lbW8sIHVzZVN0YXRlLCB1c2VNZW1vLCB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IENoZWNrYm94IGFzIFByaW1lQ2hlY2tib3ggfSBmcm9tICdwcmltZXJlYWN0L2NoZWNrYm94JztcbmltcG9ydCB7IFRyaVN0YXRlQ2hlY2tib3ggfSBmcm9tICdwcmltZXJlYWN0L3RyaXN0YXRlY2hlY2tib3gnO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBjbGFzc25hbWVzLCBqb2luQ2xzIH0gZnJvbSAnLi4vLi4vdXRpbHMvY2xhc3NuYW1lcyc7XG5leHBvcnQgY29uc3QgQ2hlY2tib3hHcm91cCA9IHByb3BzID0+IHtcbiAgICBjb25zdCB7IHRyaXN0YXRlLCBpdGVtcyA9IFtdLCBvbkNoYW5nZSwgd3JhcHBlckNscywgaW5uZXJDbHMsIGNoZWNrYm94R3JvdXBDbHMsIGxhYmVsQ2xzLCBwcmVmaXhDbHMgPSAnY2hlY2tib3hncm91cCcsIHNpemUgPSAnbWQnIH0gPSBwcm9wcztcbiAgICBjb25zdCBjbGFzc2VzID0gY2xhc3NuYW1lcyhwcmVmaXhDbHMpO1xuICAgIGNvbnN0IHNpemVDbGFzcyA9IGBja2JnLSR7c2l6ZX1gO1xuICAgIGNvbnN0IENoZWNrQm94Q29tcG9uZW50ID0gdXNlTWVtbygoKSA9PiB0cmlzdGF0ZSA/IFRyaVN0YXRlQ2hlY2tib3ggOiBQcmltZUNoZWNrYm94LCBbdHJpc3RhdGVdKTtcbiAgICBjb25zdCBkZWZhdWx0Q2hlY2tlZCA9IHVzZU1lbW8oKCkgPT4gaXRlbXMuZmlsdGVyKGl0ZW0gPT4gISFpdGVtLmF1dG9Gb2N1cykubWFwKHYgPT4gdi5rZXkpLCBbaXRlbXNdKTtcbiAgICBjb25zdCBbY2hlY2tlZEl0ZW1zLCBzZXRDaGVja2VkSXRlbXNdID0gdXNlU3RhdGUoZGVmYXVsdENoZWNrZWQpO1xuICAgIGNvbnN0IFtpdGVtc1N0YXRlLCBzZXRJdGVtc1N0YXRlXSA9IHVzZVN0YXRlKE9iamVjdC5hc3NpZ24oe30sIC4uLml0ZW1zLm1hcCh2ID0+IHsgdmFyIF9hOyByZXR1cm4gKHsgW3Yua2V5XTogKF9hID0gdi5kZWZhdWx0VmFsdWUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IG51bGwgfSk7IH0pKSk7XG4gICAgY29uc3QgaGFuZGxlT25DaGFuZ2UgPSB1c2VDYWxsYmFjaygoZSkgPT4ge1xuICAgICAgICBsZXQgX3N0YXRlO1xuICAgICAgICBpZiAodHJpc3RhdGUpIHtcbiAgICAgICAgICAgIF9zdGF0ZSA9IE9iamVjdC5hc3NpZ24oe30sIGl0ZW1zU3RhdGUpO1xuICAgICAgICAgICAgX3N0YXRlW2UudGFyZ2V0LmlkXSA9IGUudmFsdWU7XG4gICAgICAgICAgICBzZXRJdGVtc1N0YXRlKF9zdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBfc3RhdGUgPSBbLi4uY2hlY2tlZEl0ZW1zXTtcbiAgICAgICAgICAgIGUuY2hlY2tlZCA/IF9zdGF0ZS5wdXNoKGUudmFsdWUpIDogX3N0YXRlLnNwbGljZShfc3RhdGUuaW5kZXhPZihlLnZhbHVlKSwgMSk7XG4gICAgICAgICAgICBzZXRDaGVja2VkSXRlbXMoX3N0YXRlKTtcbiAgICAgICAgfVxuICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UoX3N0YXRlKTtcbiAgICB9LCBbb25DaGFuZ2UsIHRyaXN0YXRlLCBpdGVtc1N0YXRlLCBjaGVja2VkSXRlbXNdKTtcbiAgICByZXR1cm4gX2pzeChcImRpdlwiLCB7IGNsYXNzTmFtZTogY2xhc3Nlcygnd3JhcHBlcicsIHdyYXBwZXJDbHMpLCBjaGlsZHJlbjogaXRlbXMubWFwKGl0ZW0gPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBrZXksIHJlcXVpcmVkLCBkaXNhYmxlZCwgZGVmYXVsdFZhbHVlID0gbnVsbCwgbGFiZWwsIG9uQ2hhbmdlIH0gPSBpdGVtLCByZXN0ID0gX19yZXN0KGl0ZW0sIFtcImtleVwiLCBcInJlcXVpcmVkXCIsIFwiZGlzYWJsZWRcIiwgXCJkZWZhdWx0VmFsdWVcIiwgXCJsYWJlbFwiLCBcIm9uQ2hhbmdlXCJdKTtcbiAgICAgICAgICAgIGNvbnN0IFt0cml2YWx1ZSwgc2V0VHJpdmFsdWVdID0gdXNlU3RhdGUoZGVmYXVsdFZhbHVlKTtcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZUxhYmVsQ2xpY2sgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0cmlzdGF0ZSB8fCBkaXNhYmxlZClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIHNldFRyaXZhbHVlKGN1cnIgPT4gY3VyciA9PT0gbnVsbCA/IHRydWUgOiBjdXJyID09PSB0cnVlID8gZmFsc2UgOiBudWxsKTtcbiAgICAgICAgICAgIH0sIFt0cmlzdGF0ZSwgZGlzYWJsZWRdKTtcbiAgICAgICAgICAgIGNvbnN0IExhYmVsV3JhcHBlciA9IHVzZUNhbGxiYWNrKCh7IGNoaWxkcmVuIH0pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWxhYmVsKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGRyZW47XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9qc3hzKFwibGFiZWxcIiwgeyBjbGFzc05hbWU6IGxhYmVsQ2xzLCBvbkNsaWNrOiBoYW5kbGVMYWJlbENsaWNrLCBjaGlsZHJlbjogW2NoaWxkcmVuLCBsYWJlbF0gfSk7XG4gICAgICAgICAgICB9LCBbbGFiZWwsIGxhYmVsQ2xzLCBoYW5kbGVMYWJlbENsaWNrXSk7XG4gICAgICAgICAgICByZXR1cm4gX2pzeChcImRpdlwiLCB7IGNsYXNzTmFtZTogam9pbkNscyhjbGFzc2VzKCdpbm5lcicsIGlubmVyQ2xzKSwgc2l6ZUNsYXNzKSwgY2hpbGRyZW46IF9qc3goTGFiZWxXcmFwcGVyLCB7IGNoaWxkcmVuOiBfanN4KENoZWNrQm94Q29tcG9uZW50LCBPYmplY3QuYXNzaWduKHt9LCByZXN0LCB7IGlkOiB0cmlzdGF0ZSA/IGtleSA6IHZvaWQgMCwgdmFsdWU6IHRyaXN0YXRlID8gdHJpdmFsdWUgOiBrZXksIHJlcXVpcmVkOiByZXF1aXJlZCwgZGlzYWJsZWQ6IGRpc2FibGVkLCBjaGVja2VkOiB0cmlzdGF0ZSA/IHZvaWQgMCA6IGNoZWNrZWRJdGVtcy5pbmNsdWRlcyhrZXkpLCBjbGFzc05hbWU6IGNsYXNzZXMoJ2lubmVyLWNoZWNrYm94JywgY2hlY2tib3hHcm91cENscykgfSwgKHRyaXN0YXRlID8geyB1bmNoZWNrSWNvbjogX2pzeChcImlcIiwgeyBjbGFzc05hbWU6IFwicGkgcGktbWludXNcIiB9KSB9IDoge30pLCAodHJpc3RhdGUgPyB7IGNoZWNrSWNvbjogX2pzeChcImlcIiwgeyBjbGFzc05hbWU6IFwicGkgcGktY2hlY2tcIiB9KSB9IDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbjogX2pzeChcImlcIiwgeyBjbGFzc05hbWU6IFwicGkgcGktY2hlY2tcIiB9KVxuICAgICAgICAgICAgICAgICAgICB9KSwgeyBvbkNoYW5nZTogZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRpc2FibGVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpc3RhdGUgJiYgc2V0VHJpdmFsdWUoZS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKHRyaXN0YXRlID8gZS52YWx1ZSA6ICEhZS5jaGVja2VkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVPbkNoYW5nZShlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gfSkpIH0pIH0sIGtleSk7XG4gICAgICAgIH0pIH0pO1xufTtcbmV4cG9ydCBkZWZhdWx0IG1lbW8oQ2hlY2tib3hHcm91cCk7IixudWxsXSwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYyJ9
|
|
135
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvQ2hlY2tib3hHcm91cC9DaGVja2JveEdyb3VwLmpzIiwiY29tcG9uZW50cy9zcmMvY29tcG9uZW50cy9DaGVja2JveEdyb3VwL0NoZWNrYm94R3JvdXAudHN4Il0sIm5hbWVzIjpbIl9fcmVzdCIsInMiLCJlIiwidCIsInAiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpbmRleE9mIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiaSIsImxlbmd0aCIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwianN4IiwiX2pzeCIsImpzeHMiLCJfanN4cyIsIm1lbW8iLCJ1c2VNZW1vIiwiQ2hlY2tib3giLCJQcmltZUNoZWNrYm94IiwiVHJpU3RhdGVDaGVja2JveCIsImRlZmF1bHQiLCJjbGFzc25hbWVzIiwiam9pbkNscyIsInVzZUNvbnRyb2xsZWRTdGF0ZSIsInVzZU1lbW9pemVkRm4iLCJUcmlTdGF0ZUNoZWNrYm94V2l0aElucHV0SWQiLCJDaGVja2JveEdyb3VwIiwicHJvcHMiLCJ0cmlzdGF0ZSIsIl9wcm9wcyRpdGVtcyIsIml0ZW1zIiwib25DaGFuZ2UiLCJ3cmFwcGVyQ2xzIiwiaW5uZXJDbHMiLCJjaGVja2JveEdyb3VwQ2xzIiwibGFiZWxDbHMiLCJfcHJvcHMkcHJlZml4Q2xzIiwicHJlZml4Q2xzIiwiX3Byb3BzJHNpemUiLCJzaXplIiwiY2xhc3NlcyIsInNpemVDbGFzcyIsImNvbmNhdCIsImRlZmF1bHRDaGVja2VkIiwiZmlsdGVyIiwiaXRlbSIsIm1hcCIsInYiLCJrZXkiLCJub3JtYWxWYWx1ZSIsInVuZGVmaW5lZCIsInZhbHVlIiwiX3VzZUNvbnRyb2xsZWRTdGF0ZSIsIl91c2VDb250cm9sbGVkU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJjaGVja2VkSXRlbXMiLCJzZXRDaGVja2VkSXRlbXMiLCJkZWZhdWx0SXRlbXNTdGF0ZSIsImZyb21FbnRyaWVzIiwiX2EiLCJkZWZhdWx0VmFsdWUiLCJ0cmlzdGF0ZVZhbHVlIiwiX3VzZUNvbnRyb2xsZWRTdGF0ZTMiLCJfdXNlQ29udHJvbGxlZFN0YXRlNCIsIml0ZW1zU3RhdGUiLCJzZXRJdGVtc1N0YXRlIiwiaGFuZGxlTm9ybWFsQ2hhbmdlIiwiaXRlbU9uQ2hhbmdlIiwiY2hlY2tlZCIsIm5leHQiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJrIiwiaGFuZGxlVHJpc3RhdGVDaGFuZ2UiLCJhc3NpZ24iLCJfZGVmaW5lUHJvcGVydHkiLCJ0YXJnZXQiLCJpZCIsInJlbmRlckl0ZW0iLCJyZXF1aXJlZCIsImRpc2FibGVkIiwibGFiZWwiLCJyZXN0IiwiX2IiLCJfIiwiX18iLCJjaGVja2JveFJlc3QiLCJpbm5lckNsYXNzTmFtZSIsImNoZWNrYm94RWwiLCJpbnB1dElkIiwiY2xhc3NOYW1lIiwidW5jaGVja0ljb24iLCJjaGVja0ljb24iLCJpbmNsdWRlcyIsImljb24iLCJjaGlsZHJlbiIsImh0bWxGb3IiXSwibWFwcGluZ3MiOiI7OztBQUFBLElBQUlBLE1BQU0sR0FBSSxJQUFJLElBQUksSUFBSSxDQUFDQSxNQUFNLElBQUssVUFBVUMsQ0FBQyxFQUFFQyxDQUFDLEVBQUU7RUFDbEQsSUFBSUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNWLEtBQUssSUFBSUMsQ0FBQyxJQUFJSCxDQUFDLEVBQUUsSUFBSUksTUFBTSxDQUFDQyxTQUFTLENBQUNDLGNBQWMsQ0FBQ0MsSUFBSSxDQUFDUCxDQUFDLEVBQUVHLENBQUMsQ0FBQyxJQUFJRixDQUFDLENBQUNPLE9BQU8sQ0FBQ0wsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUMvRUQsQ0FBQyxDQUFDQyxDQUFDLENBQUMsR0FBR0gsQ0FBQyxDQUFDRyxDQUFDLENBQUM7RUFDZixJQUFJSCxDQUFDLElBQUksSUFBSSxJQUFJLE9BQU9JLE1BQU0sQ0FBQ0sscUJBQXFCLEtBQUssVUFBVSxFQUMvRCxLQUFLLElBQUlDLENBQUMsR0FBRyxDQUFDLEVBQUVQLENBQUMsR0FBR0MsTUFBTSxDQUFDSyxx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QSxFQUhOdkMsR0FBRyxDQUlQO0VBRVYsQ0FBQztFQUVELE9BQ0VwQyxJQUFBLENBQUEsS0FBQSxFQUFBO0lBQUs2RSxTQUFTLEVBQUVqRCxPQUFPLENBQUMsU0FBUyxFQUFFUixVQUFVLENBQUM7SUFBQThELFFBQUEsRUFDM0NoRSxLQUFLLENBQUNnQixHQUFHLENBQUMrQixVQUFVO0VBQUMsQ0FBQSxDQUNsQjtBQUVWLENBQUM7QUFFRCw0QkFBZTlELElBQUksQ0FBQ1csYUFBYSxDQUFDIiwiZmlsZSI6ImNvbXBvbmVudHMvQ2hlY2tib3hHcm91cC9DaGVja2JveEdyb3VwLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIF9fcmVzdCA9ICh0aGlzICYmIHRoaXMuX19yZXN0KSB8fCBmdW5jdGlvbiAocywgZSkge1xuICAgIHZhciB0ID0ge307XG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXG4gICAgICAgIHRbcF0gPSBzW3BdO1xuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xuICAgICAgICB9XG4gICAgcmV0dXJuIHQ7XG59O1xuaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IG1lbW8sIHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBDaGVja2JveCBhcyBQcmltZUNoZWNrYm94IH0gZnJvbSAncHJpbWVyZWFjdC9jaGVja2JveCc7XG5pbXBvcnQgeyBUcmlTdGF0ZUNoZWNrYm94IH0gZnJvbSAncHJpbWVyZWFjdC90cmlzdGF0ZWNoZWNrYm94JztcbmltcG9ydCB7IGRlZmF1bHQgYXMgY2xhc3NuYW1lcywgam9pbkNscyB9IGZyb20gJy4uLy4uL3V0aWxzL2NsYXNzbmFtZXMnO1xuaW1wb3J0IHVzZUNvbnRyb2xsZWRTdGF0ZSBmcm9tICcuLi91c2VDb250cm9sbGVkU3RhdGUnO1xuaW1wb3J0IHVzZU1lbW9pemVkRm4gZnJvbSAnLi4vdXNlTWVtb2l6ZWRGbic7XG5jb25zdCBUcmlTdGF0ZUNoZWNrYm94V2l0aElucHV0SWQgPSBUcmlTdGF0ZUNoZWNrYm94O1xuZXhwb3J0IGNvbnN0IENoZWNrYm94R3JvdXAgPSBwcm9wcyA9PiB7XG4gICAgY29uc3QgeyB0cmlzdGF0ZSwgaXRlbXMgPSBbXSwgb25DaGFuZ2UsIHdyYXBwZXJDbHMsIGlubmVyQ2xzLCBjaGVja2JveEdyb3VwQ2xzLCBsYWJlbENscywgcHJlZml4Q2xzID0gJ2NoZWNrYm94Z3JvdXAnLCBzaXplID0gJ21kJyB9ID0gcHJvcHM7XG4gICAgY29uc3QgY2xhc3NlcyA9IGNsYXNzbmFtZXMocHJlZml4Q2xzKTtcbiAgICBjb25zdCBzaXplQ2xhc3MgPSBgY2tiZy0ke3NpemV9YDtcbiAgICAvLyBOb3JtYWwgbW9kZTogY29udHJvbGxlZC91bmNvbnRyb2xsZWQgc3RyaW5nW10gc3RhdGVcbiAgICBjb25zdCBkZWZhdWx0Q2hlY2tlZCA9IHVzZU1lbW8oKCkgPT4gaXRlbXMuZmlsdGVyKGl0ZW0gPT4gaXRlbS5kZWZhdWx0Q2hlY2tlZCkubWFwKHYgPT4gdi5rZXkpLCBbaXRlbXNdKTtcbiAgICBjb25zdCBub3JtYWxWYWx1ZSA9IHRyaXN0YXRlID8gdW5kZWZpbmVkIDogcHJvcHMudmFsdWU7XG4gICAgY29uc3QgW2NoZWNrZWRJdGVtcywgc2V0Q2hlY2tlZEl0ZW1zXSA9IHVzZUNvbnRyb2xsZWRTdGF0ZShub3JtYWxWYWx1ZSAhPT0gbnVsbCAmJiBub3JtYWxWYWx1ZSAhPT0gdm9pZCAwID8gbm9ybWFsVmFsdWUgOiBkZWZhdWx0Q2hlY2tlZCwgbm9ybWFsVmFsdWUpO1xuICAgIC8vIFRyaXN0YXRlIG1vZGU6IGNvbnRyb2xsZWQvdW5jb250cm9sbGVkIFJlY29yZDxzdHJpbmcsIGJvb2xlYW4gfCBudWxsPiBzdGF0ZVxuICAgIGNvbnN0IGRlZmF1bHRJdGVtc1N0YXRlID0gdXNlTWVtbygoKSA9PiBPYmplY3QuZnJvbUVudHJpZXMoaXRlbXMubWFwKHYgPT4geyB2YXIgX2E7IHJldHVybiBbdi5rZXksIChfYSA9ICgnZGVmYXVsdFZhbHVlJyBpbiB2ID8gdi5kZWZhdWx0VmFsdWUgOiBudWxsKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogbnVsbF07IH0pKSwgW2l0ZW1zXSk7XG4gICAgY29uc3QgdHJpc3RhdGVWYWx1ZSA9IHRyaXN0YXRlID8gcHJvcHMudmFsdWUgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgW2l0ZW1zU3RhdGUsIHNldEl0ZW1zU3RhdGVdID0gdXNlQ29udHJvbGxlZFN0YXRlKHRyaXN0YXRlVmFsdWUgIT09IG51bGwgJiYgdHJpc3RhdGVWYWx1ZSAhPT0gdm9pZCAwID8gdHJpc3RhdGVWYWx1ZSA6IGRlZmF1bHRJdGVtc1N0YXRlLCB0cmlzdGF0ZVZhbHVlKTtcbiAgICBjb25zdCBoYW5kbGVOb3JtYWxDaGFuZ2UgPSB1c2VNZW1vaXplZEZuKChlLCBpdGVtT25DaGFuZ2UpID0+IHtcbiAgICAgICAgaXRlbU9uQ2hhbmdlID09PSBudWxsIHx8IGl0ZW1PbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogaXRlbU9uQ2hhbmdlKCEhZS5jaGVja2VkKTtcbiAgICAgICAgY29uc3QgbmV4dCA9IGUuY2hlY2tlZFxuICAgICAgICAgICAgPyBbLi4uY2hlY2tlZEl0ZW1zLCBlLnZhbHVlXVxuICAgICAgICAgICAgOiBjaGVja2VkSXRlbXMuZmlsdGVyKGsgPT4gayAhPT0gZS52YWx1ZSk7XG4gICAgICAgIHNldENoZWNrZWRJdGVtcyhuZXh0KTtcbiAgICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKG5leHQpO1xuICAgIH0pO1xuICAgIGNvbnN0IGhhbmRsZVRyaXN0YXRlQ2hhbmdlID0gdXNlTWVtb2l6ZWRGbigoZSwgaXRlbU9uQ2hhbmdlKSA9PiB7XG4gICAgICAgIGl0ZW1PbkNoYW5nZSA9PT0gbnVsbCB8fCBpdGVtT25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGl0ZW1PbkNoYW5nZShlLnZhbHVlKTtcbiAgICAgICAgY29uc3QgbmV4dCA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgaXRlbXNTdGF0ZSksIHsgW2UudGFyZ2V0LmlkXTogZS52YWx1ZSB9KTtcbiAgICAgICAgc2V0SXRlbXNTdGF0ZShuZXh0KTtcbiAgICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKG5leHQpO1xuICAgIH0pO1xuICAgIGNvbnN0IHJlbmRlckl0ZW0gPSAoaXRlbSkgPT4ge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IHsga2V5LCByZXF1aXJlZCwgZGlzYWJsZWQsIGxhYmVsLCBvbkNoYW5nZTogaXRlbU9uQ2hhbmdlIH0gPSBpdGVtLCByZXN0ID0gX19yZXN0KGl0ZW0sIFtcImtleVwiLCBcInJlcXVpcmVkXCIsIFwiZGlzYWJsZWRcIiwgXCJsYWJlbFwiLCBcIm9uQ2hhbmdlXCJdKTtcbiAgICAgICAgLy8gU3RyaXAgZGVmYXVsdFZhbHVlIGZyb20gcmVzdCB0byBhdm9pZCBwYXNzaW5nIGl0IHRvIERPTVxuICAgICAgICBjb25zdCBfYiA9IHJlc3QsIHsgZGVmYXVsdFZhbHVlOiBfLCBkZWZhdWx0Q2hlY2tlZDogX18gfSA9IF9iLCBjaGVja2JveFJlc3QgPSBfX3Jlc3QoX2IsIFtcImRlZmF1bHRWYWx1ZVwiLCBcImRlZmF1bHRDaGVja2VkXCJdKTtcbiAgICAgICAgY29uc3QgaW5uZXJDbGFzc05hbWUgPSBjbGFzc2VzKCdpbm5lci1jaGVja2JveCcsIGNoZWNrYm94R3JvdXBDbHMpO1xuICAgICAgICBjb25zdCBjaGVja2JveEVsID0gdHJpc3RhdGVcbiAgICAgICAgICAgID8gX2pzeChUcmlTdGF0ZUNoZWNrYm94V2l0aElucHV0SWQsIE9iamVjdC5hc3NpZ24oe30sIGNoZWNrYm94UmVzdCwgeyBpZDoga2V5LCBpbnB1dElkOiBrZXksIHZhbHVlOiAoX2EgPSBpdGVtc1N0YXRlW2tleV0pICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IG51bGwsIHJlcXVpcmVkOiByZXF1aXJlZCwgZGlzYWJsZWQ6IGRpc2FibGVkLCBjbGFzc05hbWU6IGlubmVyQ2xhc3NOYW1lLCB1bmNoZWNrSWNvbjogX2pzeChcImlcIiwgeyBjbGFzc05hbWU6IFwicGkgcGktbWludXNcIiB9KSwgY2hlY2tJY29uOiBfanN4KFwiaVwiLCB7IGNsYXNzTmFtZTogXCJwaSBwaS1jaGVja1wiIH0pLCBvbkNoYW5nZTogKGUpID0+IHsgaWYgKCFkaXNhYmxlZClcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlVHJpc3RhdGVDaGFuZ2UoZSwgaXRlbU9uQ2hhbmdlKTsgfSB9KSlcbiAgICAgICAgICAgIDogX2pzeChQcmltZUNoZWNrYm94LCBPYmplY3QuYXNzaWduKHt9LCBjaGVja2JveFJlc3QsIHsgaW5wdXRJZDoga2V5LCB2YWx1ZToga2V5LCByZXF1aXJlZDogcmVxdWlyZWQsIGRpc2FibGVkOiBkaXNhYmxlZCwgY2hlY2tlZDogY2hlY2tlZEl0ZW1zLmluY2x1ZGVzKGtleSksIGNsYXNzTmFtZTogaW5uZXJDbGFzc05hbWUsIGljb246IF9qc3goXCJpXCIsIHsgY2xhc3NOYW1lOiBcInBpIHBpLWNoZWNrXCIgfSksIG9uQ2hhbmdlOiAoZSkgPT4geyBpZiAoIWRpc2FibGVkKVxuICAgICAgICAgICAgICAgICAgICBoYW5kbGVOb3JtYWxDaGFuZ2UoZSwgaXRlbU9uQ2hhbmdlKTsgfSB9KSk7XG4gICAgICAgIHJldHVybiAoX2pzeChcImRpdlwiLCB7IGNsYXNzTmFtZTogam9pbkNscyhjbGFzc2VzKCdpbm5lcicsIGlubmVyQ2xzKSwgc2l6ZUNsYXNzKSwgY2hpbGRyZW46IGxhYmVsXG4gICAgICAgICAgICAgICAgPyBfanN4cyhcImxhYmVsXCIsIHsgaHRtbEZvcjoga2V5LCBjbGFzc05hbWU6IGxhYmVsQ2xzLCBjaGlsZHJlbjogW2NoZWNrYm94RWwsIHRyaXN0YXRlID8gX2pzeChcInNwYW5cIiwgeyBjaGlsZHJlbjogbGFiZWwgfSkgOiBsYWJlbF0gfSlcbiAgICAgICAgICAgICAgICA6IGNoZWNrYm94RWwgfSwga2V5KSk7XG4gICAgfTtcbiAgICByZXR1cm4gKF9qc3goXCJkaXZcIiwgeyBjbGFzc05hbWU6IGNsYXNzZXMoJ3dyYXBwZXInLCB3cmFwcGVyQ2xzKSwgY2hpbGRyZW46IGl0ZW1zLm1hcChyZW5kZXJJdGVtKSB9KSk7XG59O1xuZXhwb3J0IGRlZmF1bHQgbWVtbyhDaGVja2JveEdyb3VwKTsiLG51bGxdLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjIn0=
|