pne-ui 4.3.0-rc.13 → 4.3.0-rc.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +126 -0
- package/cjs/component/PneCheckbox.js +2 -0
- package/cjs/component/PneCheckbox.js.map +1 -1
- package/cjs/component/PneField.d.ts +49 -9
- package/cjs/component/PneField.js +108 -23
- package/cjs/component/PneField.js.map +1 -1
- package/cjs/component/PneFieldContext.d.ts +30 -9
- package/cjs/component/PneFieldContext.js +33 -13
- package/cjs/component/PneFieldContext.js.map +1 -1
- package/cjs/component/PneModal.d.ts +65 -22
- package/cjs/component/PneModal.js +308 -31
- package/cjs/component/PneModal.js.map +1 -1
- package/cjs/component/PneModalActions.d.ts +12 -3
- package/cjs/component/PneModalActions.js +57 -31
- package/cjs/component/PneModalActions.js.map +1 -1
- package/cjs/component/PneSwitch.js +2 -0
- package/cjs/component/PneSwitch.js.map +1 -1
- package/cjs/component/PneTextField.js +122 -23
- package/cjs/component/PneTextField.js.map +1 -1
- package/cjs/component/PneToggleInput.d.ts +2 -0
- package/cjs/component/PneToggleInput.js +15 -1
- package/cjs/component/PneToggleInput.js.map +1 -1
- package/cjs/component/confirm/PneConfirmProvider.js +4 -1
- package/cjs/component/confirm/PneConfirmProvider.js.map +1 -1
- package/cjs/component/dropdown/PneAutocompleteShared.js +5 -7
- package/cjs/component/dropdown/PneAutocompleteShared.js.map +1 -1
- package/cjs/component/dropdown/PneSelect.js +38 -10
- package/cjs/component/dropdown/PneSelect.js.map +1 -1
- package/cjs/component/non-abstract-entity-selector/AbstractEntitySelectModal.d.ts +1 -0
- package/cjs/component/non-abstract-entity-selector/AbstractEntitySelectModal.js +5 -2
- package/cjs/component/non-abstract-entity-selector/AbstractEntitySelectModal.js.map +1 -1
- package/cjs/component/search-ui/filters/component/criterion/GroupingCriterion.js +1 -6
- package/cjs/component/search-ui/filters/component/criterion/GroupingCriterion.js.map +1 -1
- package/cjs/component/search-ui/filters/component/criterion/MultigetCriterionPanel.js +6 -9
- package/cjs/component/search-ui/filters/component/criterion/MultigetCriterionPanel.js.map +1 -1
- package/cjs/component/search-ui/filters/component/criterion/TransactionSessionStatusCriterion.js +6 -9
- package/cjs/component/search-ui/filters/component/criterion/TransactionSessionStatusCriterion.js.map +1 -1
- package/cjs/component/search-ui/filters/component/template/SearchUITemplatePanel.js +6 -9
- package/cjs/component/search-ui/filters/component/template/SearchUITemplatePanel.js.map +1 -1
- package/cjs/component/widget-board/WidgetBoardHeaderControls.js +1 -1
- package/cjs/component/widget-board/WidgetBoardHeaderControls.js.map +1 -1
- package/cjs/component/widget-board/WidgetBoardVisibilityModal.js +1 -1
- package/cjs/component/widget-board/WidgetBoardVisibilityModal.js.map +1 -1
- package/cjs/component/widget-board/WidgetLayoutsPanel.js +1 -1
- package/cjs/component/widget-board/WidgetLayoutsPanel.js.map +1 -1
- package/cjs/exports/buttons.d.ts +0 -1
- package/cjs/exports/buttons.js +1 -3
- package/cjs/exports/buttons.js.map +1 -1
- package/cjs/exports/inputs.d.ts +3 -1
- package/cjs/exports/inputs.js +3 -1
- package/cjs/exports/inputs.js.map +1 -1
- package/cjs/exports/modals.d.ts +1 -1
- package/cjs/exports/modals.js.map +1 -1
- package/esm/component/PneCheckbox.js +2 -0
- package/esm/component/PneCheckbox.js.map +1 -1
- package/esm/component/PneField.d.ts +49 -9
- package/esm/component/PneField.js +109 -24
- package/esm/component/PneField.js.map +1 -1
- package/esm/component/PneFieldContext.d.ts +30 -9
- package/esm/component/PneFieldContext.js +30 -10
- package/esm/component/PneFieldContext.js.map +1 -1
- package/esm/component/PneModal.d.ts +65 -22
- package/esm/component/PneModal.js +310 -33
- package/esm/component/PneModal.js.map +1 -1
- package/esm/component/PneModalActions.d.ts +12 -3
- package/esm/component/PneModalActions.js +57 -31
- package/esm/component/PneModalActions.js.map +1 -1
- package/esm/component/PneSwitch.js +2 -0
- package/esm/component/PneSwitch.js.map +1 -1
- package/esm/component/PneTextField.js +122 -23
- package/esm/component/PneTextField.js.map +1 -1
- package/esm/component/PneToggleInput.d.ts +2 -0
- package/esm/component/PneToggleInput.js +15 -1
- package/esm/component/PneToggleInput.js.map +1 -1
- package/esm/component/confirm/PneConfirmProvider.js +4 -1
- package/esm/component/confirm/PneConfirmProvider.js.map +1 -1
- package/esm/component/dropdown/PneAutocompleteShared.js +5 -7
- package/esm/component/dropdown/PneAutocompleteShared.js.map +1 -1
- package/esm/component/dropdown/PneSelect.js +38 -10
- package/esm/component/dropdown/PneSelect.js.map +1 -1
- package/esm/component/non-abstract-entity-selector/AbstractEntitySelectModal.d.ts +1 -0
- package/esm/component/non-abstract-entity-selector/AbstractEntitySelectModal.js +5 -2
- package/esm/component/non-abstract-entity-selector/AbstractEntitySelectModal.js.map +1 -1
- package/esm/component/search-ui/filters/component/criterion/GroupingCriterion.js +1 -6
- package/esm/component/search-ui/filters/component/criterion/GroupingCriterion.js.map +1 -1
- package/esm/component/search-ui/filters/component/criterion/MultigetCriterionPanel.js +6 -9
- package/esm/component/search-ui/filters/component/criterion/MultigetCriterionPanel.js.map +1 -1
- package/esm/component/search-ui/filters/component/criterion/TransactionSessionStatusCriterion.js +6 -9
- package/esm/component/search-ui/filters/component/criterion/TransactionSessionStatusCriterion.js.map +1 -1
- package/esm/component/search-ui/filters/component/template/SearchUITemplatePanel.js +6 -9
- package/esm/component/search-ui/filters/component/template/SearchUITemplatePanel.js.map +1 -1
- package/esm/component/widget-board/WidgetBoardHeaderControls.js +1 -1
- package/esm/component/widget-board/WidgetBoardHeaderControls.js.map +1 -1
- package/esm/component/widget-board/WidgetBoardVisibilityModal.js +1 -1
- package/esm/component/widget-board/WidgetBoardVisibilityModal.js.map +1 -1
- package/esm/component/widget-board/WidgetLayoutsPanel.js +1 -1
- package/esm/component/widget-board/WidgetLayoutsPanel.js.map +1 -1
- package/esm/exports/buttons.d.ts +0 -1
- package/esm/exports/buttons.js +0 -1
- package/esm/exports/buttons.js.map +1 -1
- package/esm/exports/inputs.d.ts +3 -1
- package/esm/exports/inputs.js +1 -0
- package/esm/exports/inputs.js.map +1 -1
- package/esm/exports/modals.d.ts +1 -1
- package/esm/exports/modals.js.map +1 -1
- package/package.json +1 -1
- package/cjs/component/PneButtonGroup.d.ts +0 -3
- package/cjs/component/PneButtonGroup.js +0 -20
- package/cjs/component/PneButtonGroup.js.map +0 -1
- package/esm/component/PneButtonGroup.d.ts +0 -3
- package/esm/component/PneButtonGroup.js +0 -15
- package/esm/component/PneButtonGroup.js.map +0 -1
package/README.md
CHANGED
|
@@ -49,6 +49,79 @@ major-версии MUI не входят в поддерживаемый peer co
|
|
|
49
49
|
Компонент сохраняет polymorphic MUI-контракт для `component` и `href`; типы DOM props, событий и `ref`
|
|
50
50
|
выводятся из фактического root element. Это поведение рассчитано на React 19 ref-as-prop.
|
|
51
51
|
|
|
52
|
+
`PneButtonGroup` удалён из публичного API. Для группировки используйте `ButtonGroup` напрямую из
|
|
53
|
+
`@mui/material`; расстояние между независимыми действиями задавайте на layout-контейнере.
|
|
54
|
+
|
|
55
|
+
## PneField
|
|
56
|
+
|
|
57
|
+
`PneField` задаёт общий семантический контракт для одного поля: label, helper text, error/disabled/required state и
|
|
58
|
+
их ARIA-связи с единственным логическим control или control group. `PneTextField`, `PneSelect`,
|
|
59
|
+
`PneAutocomplete`, `PneAsyncAutocomplete`, `PneCheckbox` и `PneSwitch` читают этот контракт автоматически.
|
|
60
|
+
Внутри `PneField` должен быть ровно один логический control; для группы передавайте один group component, а не
|
|
61
|
+
несколько соседних controls. `PneField` не принимает ID произвольной layout-обёртки за ID самого control.
|
|
62
|
+
|
|
63
|
+
`id` принадлежит root `FormControl` и служит namespace для сгенерированных ID. `controlId` принадлежит самому
|
|
64
|
+
интерактивному control и используется в `label[for]`; эти ID должны различаться. Указанный на child `id` не
|
|
65
|
+
переопределяет field-owned ID, поэтому при миграции переносите его в `controlId`. Prop `htmlFor` оставлен только
|
|
66
|
+
как deprecated alias `controlId` и не должен использоваться в новом коде. ID обрезаются по краям; пустые ID и
|
|
67
|
+
ID с внутренними пробельными символами считаются невалидными, игнорируются и заменяются сгенерированными.
|
|
68
|
+
|
|
69
|
+
```tsx
|
|
70
|
+
<PneField
|
|
71
|
+
id="delivery-field"
|
|
72
|
+
controlId="delivery-control"
|
|
73
|
+
label="Delivery server"
|
|
74
|
+
helperText="Select one server"
|
|
75
|
+
slotProps={{
|
|
76
|
+
label: {id: "delivery-label", "data-autotest": "delivery-label"},
|
|
77
|
+
helperText: {id: "delivery-help", "data-autotest": "delivery-help"},
|
|
78
|
+
}}
|
|
79
|
+
>
|
|
80
|
+
<PneSelect options={servers} value={server} onChange={setServer}/>
|
|
81
|
+
</PneField>
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
Для произвольного control используйте render prop и передайте результат `getControlProps` на фактический
|
|
85
|
+
focusable control или group root. Adapter сохраняет дополнительные props, объединяет consumer
|
|
86
|
+
`aria-labelledby`/`aria-describedby` с ID label/helper text и дедуплицирует ссылки. Явный `aria-label`
|
|
87
|
+
остаётся самостоятельным naming override и не смешивается с `aria-labelledby`. При disabled field adapter
|
|
88
|
+
возвращает одновременно `disabled` и `aria-disabled`; это сохраняет нативную/MUI блокировку и корректно
|
|
89
|
+
описывает composite control с group-role.
|
|
90
|
+
|
|
91
|
+
```tsx
|
|
92
|
+
<PneField label="Period" helperText="Choose a unit" error={Boolean(error)} required>
|
|
93
|
+
{({getControlProps, fullWidth}) => (
|
|
94
|
+
<ToggleButtonGroup
|
|
95
|
+
{...getControlProps({"aria-describedby": "period-format"})}
|
|
96
|
+
exclusive
|
|
97
|
+
sx={{width: fullWidth ? "100%" : "auto"}}
|
|
98
|
+
value={period}
|
|
99
|
+
onChange={(_event, value) => setPeriod(value)}
|
|
100
|
+
>
|
|
101
|
+
<ToggleButton value="day">Day</ToggleButton>
|
|
102
|
+
<ToggleButton value="week">Week</ToggleButton>
|
|
103
|
+
</ToggleButtonGroup>
|
|
104
|
+
)}
|
|
105
|
+
</PneField>
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
Если adapter нужен внутри отдельного descendant component, вызовите `usePneFieldControl()` там; вне
|
|
109
|
+
`PneField` hook возвращает `undefined`. Render prop предпочтительнее для прямой композиции, потому что явно
|
|
110
|
+
показывает место применения DOM-контракта.
|
|
111
|
+
|
|
112
|
+
`PneField` владеет ID и связями label/helper text. Значения `true` у field-level `disabled`, `error` и
|
|
113
|
+
`required` нельзя ослабить props дочернего control; его дополнительные ARIA ID при этом не теряются. Явный
|
|
114
|
+
`fullWidth` у встроенного PNE control может переопределить field default. `required` на `PneField` добавляет
|
|
115
|
+
asterisk и `aria-required`, но намеренно не устанавливает нативный `required`: browser constraint validation
|
|
116
|
+
включается только `required` на самом input/select/checkbox/switch.
|
|
117
|
+
|
|
118
|
+
`slotProps.label` и `slotProps.helperText` предназначены для `id`, `className`, `sx`, `ref`, ARIA и `data-*`
|
|
119
|
+
соответствующих slots. Старые `labelSx` и `helperTextSx` deprecated. Split-state props MUI FormControl
|
|
120
|
+
(`color`, `focused`, `hiddenLabel`, `size`, `variant`) не входят в публичный API `PneField`; внешний вид control
|
|
121
|
+
настраивается на самом control, а label/helper — через `slotProps`. Root остаётся polymorphic через `component`,
|
|
122
|
+
и тип `ref` выводится из выбранного root element. `margin` остаётся исключительно layout-prop root
|
|
123
|
+
`FormControl` и не передаётся дочернему control.
|
|
124
|
+
|
|
52
125
|
## PneTextField
|
|
53
126
|
|
|
54
127
|
`PneTextField` сохраняет API MUI `TextField` и по умолчанию использует `size="small"`. Его `ref` указывает на
|
|
@@ -106,6 +179,59 @@ ID helper text, сохраняет явный `helperTextProps.id` и объед
|
|
|
106
179
|
</PneField>
|
|
107
180
|
```
|
|
108
181
|
|
|
182
|
+
## PneModal и PneModalActions
|
|
183
|
+
|
|
184
|
+
`PneModal` владеет структурой dialog, focus trap и ARIA-связями. Передайте видимый `title`; для модалок без
|
|
185
|
+
визуального заголовка используйте `ariaLabel`. Если компонент внутри `title` сам возвращает `null`, передайте
|
|
186
|
+
`title={null}` и `ariaLabel` явно: содержимое произвольного React-компонента нельзя определить до его рендера.
|
|
187
|
+
`title` и `subtitle` принимают `ReactNode`. `ref` указывает на
|
|
188
|
+
`HTMLDivElement` с `role="dialog"`. Структурные `role`, `aria-modal`, `aria-labelledby` и `aria-describedby`
|
|
189
|
+
нельзя переопределить через container slot; дополнительное описание подключается через `ariaDescribedBy`.
|
|
190
|
+
|
|
191
|
+
`onClose(event, reason)` различает `closeButtonClick`, `escapeKeyDown` и `backdropClick`. Существующие callbacks
|
|
192
|
+
без аргументов остаются совместимыми. `closeLabel` необязателен и по умолчанию равен `Close`; передавайте перевод
|
|
193
|
+
только там, где он доступен consumer-у. `hideCloseButton` скрывает icon button без дополнительных обязательных
|
|
194
|
+
props.
|
|
195
|
+
|
|
196
|
+
```tsx
|
|
197
|
+
<PneModal
|
|
198
|
+
actions={<PneModalActions
|
|
199
|
+
secondary={<PneButton pneStyle="outlined">Cancel</PneButton>}
|
|
200
|
+
primary={<PneButton>Save</PneButton>}
|
|
201
|
+
/>}
|
|
202
|
+
closeLabel="Close"
|
|
203
|
+
onClose={(_event, reason) => {
|
|
204
|
+
if (reason !== "backdropClick") setOpen(false)
|
|
205
|
+
}}
|
|
206
|
+
open={open}
|
|
207
|
+
title={<span>Edit account</span>}
|
|
208
|
+
slotProps={{
|
|
209
|
+
container: {"data-autotest": "account-dialog"},
|
|
210
|
+
title: {component: "h2"},
|
|
211
|
+
}}
|
|
212
|
+
>
|
|
213
|
+
Account form
|
|
214
|
+
</PneModal>
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
`blockingOverlay` предназначен для loading-состояния всей модалки. Пока slot присутствует, dialog получает
|
|
218
|
+
`aria-busy`, header/body/footer становятся inert, focus остаётся на границе dialog, а Escape, backdrop и close
|
|
219
|
+
button не вызывают `onClose`. После снятия overlay прежний focused control восстанавливается, если он всё ещё
|
|
220
|
+
существует. Старый `overlay` оставлен как deprecated alias.
|
|
221
|
+
|
|
222
|
+
Внутренние части настраиваются через `slotProps`, но их element type, owned content и dialog semantics остаются
|
|
223
|
+
фиксированными. `modalProps` содержит только безопасные настройки MUI root и не позволяет подменять root/backdrop
|
|
224
|
+
slots. Прежние `containerProps` и `closeButtonProps` оставлены deprecated на период миграции.
|
|
225
|
+
|
|
226
|
+
Частые тестовые маркеры `data-*` передаются прямо в `PneModal` и попадают на семантический dialog container:
|
|
227
|
+
`<PneModal data-testattribute="edit-modal" ... />`. Для них не требуется обёртка `slotProps.container`;
|
|
228
|
+
этот slot остаётся для остальных безопасных атрибутов и `sx` контейнера.
|
|
229
|
+
|
|
230
|
+
`PneModalActions` сохраняет одни и те же keyed action nodes, но синхронизирует DOM/focus order с layout:
|
|
231
|
+
`leading → secondary → primary` на desktop и `primary → secondary → leading` на экране до 480 px. При смене
|
|
232
|
+
breakpoint существующие controls только перемещаются внутри дерева, не перемонтируются и не теряют focus/state.
|
|
233
|
+
Root фиксирован как `div`, поддерживает `ref`, `sx`, обычные HTML/ARIA/data attributes.
|
|
234
|
+
|
|
109
235
|
## PneSelect
|
|
110
236
|
|
|
111
237
|
`PneSelect` — controlled single-select для произвольного типа option. `value` имеет тип `T | null`, а `onChange`
|
|
@@ -43,7 +43,9 @@ exports.PneCheckbox = (0, react_1.forwardRef)((props, ref) => {
|
|
|
43
43
|
}
|
|
44
44
|
}, [indeterminate]);
|
|
45
45
|
const inputSlotProps = (0, PneToggleInput_1.composeToggleInputSlotProps)([defaultInputSlotProps, consumerInputSlotProps], {
|
|
46
|
+
controlId: controlProps.id ?? id,
|
|
46
47
|
describedBy: controlProps.ariaDescribedBy,
|
|
48
|
+
forceDisabled: controlProps.disabled === true || disabled === true,
|
|
47
49
|
forceInvalid: controlProps.error,
|
|
48
50
|
forceRequired: controlProps.ariaRequired,
|
|
49
51
|
inputAriaProps,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PneCheckbox.js","sourceRoot":"","sources":["../../src/component/PneCheckbox.tsx"],"names":[],"mappings":";;;;AAAA,uDAA6D;AAC7D,4CAA8D;AAE9D,6EAAkE;AAClE,iDAA6C;AAC7C,oGAAmE;AACnE,uDAAyD;AACzD,qDAAkF;AAQrE,QAAA,WAAW,GAAG,IAAA,kBAAU,EAAoC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;IACpF,MAAM,oBAAoB,GAAqB,KAAK,CAAC,IAAI,KAAK,SAAS;QACnE,CAAC,CAAC,EAAC,GAAG,KAAK,EAAE,IAAI,EAAE,OAAO,EAAC;QAC3B,CAAC,CAAC,KAAK,CAAA;IACX,MAAM,KAAK,GAAG,IAAA,iBAAQ,GAAE,CAAA;IACxB,MAAM,sBAAsB,GAAG,KAAK,CAAC,SAAS,EAAE,KAAK,CAAA;IACrD,MAAM,qBAAqB,GAAG,KAAK,CAAC,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,SAAS,EAAE,KAAK,CAAA;IAC3F,MAAM,WAAW,GAAG,IAAA,sCAAe,EAAC;QAChC,IAAI,EAAE,aAAa;QACnB,KAAK,EAAE;YACH,GAAG,oBAAoB;YACvB,SAAS,EAAE;gBACP,GAAG,oBAAoB,CAAC,SAAS;gBACjC,6DAA6D;gBAC7D,0DAA0D;gBAC1D,KAAK,EAAE,EAAE;aACZ;SACJ;KACJ,CAAC,CAAA;IACF,MAAM,iCAAiC,GAAG,oCAAoC,EAAE,CAAA;IAChF,MAAM,EACF,QAAQ,EACR,EAAE,EACF,aAAa,GAAG,KAAK,EACrB,QAAQ,EACR,QAAQ,GAAG,KAAK,EAChB,QAAQ,EACR,EAAE,EACF,IAAI,GAAG,OAAO,EACd,SAAS,EACT,GAAG,IAAI,EACV,GAAG,WAAW,CAAA;IACf,MAAM,EAAC,cAAc,EAAE,SAAS,EAAC,GAAG,IAAA,qCAAoB,EAAC,IAAI,CAAC,CAAA;IAC9D,MAAM,YAAY,GAAG,IAAA,yCAAuB,EAAC;QACzC,eAAe,EAAE,cAAc,CAAC,kBAAkB,CAAC;QACnD,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,EAAE,EAAE,KAAK,CAAC,EAAE;QACZ,QAAQ,EAAE,KAAK,CAAC,QAAQ;KAC3B,CAAC,CAAA;IACF,MAAM,cAAc,GAAG,IAAA,mBAAW,EAAC,CAAC,KAA8B,EAAE,EAAE;QAClE,IAAI,KAAK,EAAE,CAAC;YACR,KAAK,CAAC,aAAa,GAAG,aAAa,CAAA;QACvC,CAAC;IACL,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAA;IACnB,MAAM,cAAc,GAAG,IAAA,4CAA2B,EAC9C,CAAC,qBAAqB,EAAE,sBAAsB,CAAC,EAC/C;QACI,WAAW,EAAE,YAAY,CAAC,eAAe;QACzC,YAAY,EAAE,YAAY,CAAC,KAAK;QAChC,aAAa,EAAE,YAAY,CAAC,YAAY;QACxC,cAAc;QACd,QAAQ;QACR,aAAa;QACb,gBAAgB,EAAE,cAAc;QAChC,OAAO,EAAE,YAAY,CAAC,OAAO;QAC7B,sBAAsB,EAAE,KAAK,CAAC,UAAU,EAAE,sBAAsB;QAChE,QAAQ;KACX,CACsB,CAAA;IAE3B,MAAM,GAAG,GAAY;QACjB,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;KACrC,CAAA;IACD,sEAAsE;IACtE,wEAAwE;IACxE,MAAM,UAAU,GAAG,GAAmC,CAAA;IAEtD,OAAO,8BAAC,8BAAoB,IAAC,KAAK,EAAE,iCAAiC;QACjE,8BAAC,mBAAQ,OACD,SAAS,EACb,QAAQ,EAAE,YAAY,CAAC,QAAQ,IAAI,QAAQ,EAC3C,EAAE,EAAE,YAAY,CAAC,EAAE,IAAI,EAAE,EACzB,aAAa,EAAE,aAAa,EAC5B,QAAQ,EAAE,QAAQ,EAClB,GAAG,EAAE,UAAU,EACf,QAAQ,EAAE,YAAY,CAAC,QAAQ,IAAI,QAAQ,EAC3C,IAAI,EAAE,IAAI,EACV,SAAS,EAAE;gBACP,GAAG,SAAS;gBACZ,KAAK,EAAE,cAAc;aACxB,EACD,EAAE,EAAE,GAAG,GACT,CACiB,CAAA;AAC3B,CAAC,CAAC,CAAA;AAEF,mBAAW,CAAC,WAAW,GAAG,aAAa,CAAA;AAEvC,MAAM,oCAAoC,GAAG,GAAG,EAAE;IAC9C,MAAM,KAAK,GAAG,IAAA,iBAAQ,GAAE,CAAA;IAExB,OAAO,IAAA,eAAO,EAAC,GAAG,EAAE;QAChB,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAA;QACnC,MAAM,cAAc,GAAG,UAAU,EAAE,WAAW,CAAA;QAE9C,IAAI,CAAC,cAAc,EAAE,YAAY,EAAE,CAAC;YAChC,OAAO,UAAU,IAAI,EAAE,CAAA;QAC3B,CAAC;QAED,MAAM,6BAA6B,GAAG,EAAC,GAAG,cAAc,EAAC,CAAA;QACzD,OAAO,CAAC,cAAc,CAAC,6BAA6B,EAAE,cAAc,CAAC,CAAA;QAErE,OAAO;YACH,GAAG,UAAU;YACb,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC,MAAM,GAAG,CAAC;gBAC9D,CAAC,CAAC,6BAA6B;gBAC/B,CAAC,CAAC,SAAS;SAClB,CAAA;IACL,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAA;AAC1B,CAAC,CAAA"}
|
|
1
|
+
{"version":3,"file":"PneCheckbox.js","sourceRoot":"","sources":["../../src/component/PneCheckbox.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,18 +1,58 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import type { FormControlTypeMap } from '@mui/material/FormControl';
|
|
2
|
+
import type { FormHelperTextProps } from '@mui/material/FormHelperText';
|
|
3
|
+
import type { FormLabelProps } from '@mui/material/FormLabel';
|
|
4
|
+
import type { OverridableComponent, OverrideProps } from '@mui/material/OverridableComponent';
|
|
5
|
+
import type { SxProps, Theme } from '@mui/material/styles';
|
|
6
|
+
import * as React from 'react';
|
|
7
|
+
import { type PneFieldControlAdapter } from './PneFieldContext';
|
|
8
|
+
type PneFieldDataAttributes = {
|
|
9
|
+
[attribute: `data-${string}`]: string | number | boolean | undefined;
|
|
10
|
+
};
|
|
11
|
+
export type PneFieldLabelSlotProps = Omit<FormLabelProps, 'children' | 'component' | 'disabled' | 'error' | 'filled' | 'focused' | 'htmlFor' | 'required'> & {
|
|
12
|
+
ref?: React.Ref<HTMLLabelElement>;
|
|
13
|
+
} & PneFieldDataAttributes;
|
|
14
|
+
export type PneFieldHelperTextSlotProps = Omit<FormHelperTextProps, 'children' | 'component' | 'disabled' | 'error' | 'filled' | 'focused' | 'margin' | 'required' | 'variant'> & {
|
|
15
|
+
ref?: React.Ref<HTMLParagraphElement>;
|
|
16
|
+
} & PneFieldDataAttributes;
|
|
17
|
+
export interface PneFieldSlotProps {
|
|
18
|
+
helperText?: PneFieldHelperTextSlotProps;
|
|
19
|
+
label?: PneFieldLabelSlotProps;
|
|
20
|
+
}
|
|
21
|
+
export type PneFieldChildren = React.ReactElement | ((field: PneFieldControlAdapter) => React.ReactElement);
|
|
22
|
+
type RemovedFormControlProp = 'children' | 'color' | 'disabled' | 'error' | 'focused' | 'fullWidth' | 'hiddenLabel' | 'required' | 'size' | 'variant';
|
|
23
|
+
type PneFieldOwnProps = Omit<FormControlTypeMap['props'], RemovedFormControlProp> & {
|
|
24
|
+
children: PneFieldChildren;
|
|
25
|
+
/** ID owned by the primary control. `PneField` state always wins conflicting child IDs. */
|
|
26
|
+
controlId?: string;
|
|
6
27
|
disabled?: boolean;
|
|
7
28
|
error?: boolean;
|
|
8
29
|
fullWidth?: boolean;
|
|
9
|
-
helperText?: ReactNode;
|
|
30
|
+
helperText?: React.ReactNode;
|
|
31
|
+
/** @deprecated Use `slotProps.helperText.sx`. */
|
|
10
32
|
helperTextSx?: SxProps<Theme>;
|
|
33
|
+
/** @deprecated Use `controlId`; kept as a compatibility alias. */
|
|
11
34
|
htmlFor?: string;
|
|
35
|
+
/** ID of the field root and namespace for generated label/helper/control IDs. */
|
|
12
36
|
id?: string;
|
|
13
|
-
label?: ReactNode;
|
|
37
|
+
label?: React.ReactNode;
|
|
38
|
+
/** @deprecated Use `slotProps.label.sx`. */
|
|
14
39
|
labelSx?: SxProps<Theme>;
|
|
15
40
|
required?: boolean;
|
|
16
|
-
|
|
17
|
-
|
|
41
|
+
slotProps?: PneFieldSlotProps;
|
|
42
|
+
/** Split FormControl appearance state is intentionally not part of the field contract. */
|
|
43
|
+
color?: never;
|
|
44
|
+
focused?: never;
|
|
45
|
+
hiddenLabel?: never;
|
|
46
|
+
size?: never;
|
|
47
|
+
variant?: never;
|
|
48
|
+
};
|
|
49
|
+
type PneFieldTypeMap<AdditionalProps = {}, RootComponent extends React.ElementType = 'div'> = {
|
|
50
|
+
props: PneFieldOwnProps & AdditionalProps;
|
|
51
|
+
defaultComponent: RootComponent;
|
|
52
|
+
};
|
|
53
|
+
export type PneFieldProps<RootComponent extends React.ElementType = 'div', AdditionalProps = {}> = OverrideProps<PneFieldTypeMap<AdditionalProps, RootComponent>, RootComponent> & {
|
|
54
|
+
component?: RootComponent;
|
|
55
|
+
};
|
|
56
|
+
type PneFieldComponent = OverridableComponent<PneFieldTypeMap>;
|
|
57
|
+
declare const PneField: PneFieldComponent;
|
|
18
58
|
export default PneField;
|
|
@@ -1,34 +1,75 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const tslib_1 = require("tslib");
|
|
4
|
-
const react_1 = tslib_1.__importStar(require("react"));
|
|
5
4
|
const material_1 = require("@mui/material");
|
|
5
|
+
const React = tslib_1.__importStar(require("react"));
|
|
6
6
|
const PneFieldContext_1 = require("./PneFieldContext");
|
|
7
|
-
const
|
|
8
|
-
const { children, disabled = false, error = false, fullWidth = true, helperText, helperTextSx, htmlFor, id, label, labelSx, required = false, sx, ...rest } = props;
|
|
9
|
-
const generatedId =
|
|
10
|
-
const
|
|
11
|
-
const
|
|
12
|
-
const
|
|
13
|
-
const
|
|
14
|
-
const
|
|
15
|
-
const
|
|
7
|
+
const PneFieldImplementation = (props) => {
|
|
8
|
+
const { children, controlId: controlIdProp, disabled = false, error = false, fullWidth = true, helperText, helperTextSx, htmlFor, id, label, labelSx, required = false, slotProps, sx, ...rest } = props;
|
|
9
|
+
const generatedId = React.useId();
|
|
10
|
+
const rootId = normalizeId(id);
|
|
11
|
+
const fieldId = rootId ?? generatedId;
|
|
12
|
+
const explicitControlId = normalizeId(controlIdProp);
|
|
13
|
+
const legacyControlId = normalizeId(htmlFor);
|
|
14
|
+
const controlId = explicitControlId ?? legacyControlId ?? `${fieldId}-control`;
|
|
15
|
+
const hasLabel = hasRenderableContent(label);
|
|
16
|
+
const hasHelperText = hasRenderableContent(helperText);
|
|
17
|
+
const labelSlotId = normalizeId(slotProps?.label?.id);
|
|
18
|
+
const helperTextSlotId = normalizeId(slotProps?.helperText?.id);
|
|
19
|
+
const labelId = hasLabel ? labelSlotId ?? `${fieldId}-label` : undefined;
|
|
20
|
+
const helperTextId = hasHelperText
|
|
21
|
+
? helperTextSlotId ?? `${fieldId}-helper-text`
|
|
22
|
+
: undefined;
|
|
23
|
+
warnAboutFieldIdConflicts({
|
|
24
|
+
controlId,
|
|
25
|
+
controlIdProp: explicitControlId,
|
|
26
|
+
htmlFor: legacyControlId,
|
|
27
|
+
rootId,
|
|
28
|
+
});
|
|
29
|
+
const adapter = React.useMemo(() => ({
|
|
16
30
|
controlId,
|
|
17
31
|
disabled,
|
|
18
32
|
error,
|
|
19
33
|
fullWidth,
|
|
34
|
+
getControlProps: (controlProps) => {
|
|
35
|
+
const ownProps = controlProps
|
|
36
|
+
?? {};
|
|
37
|
+
const ownId = normalizeId(ownProps.id);
|
|
38
|
+
if (process.env.NODE_ENV !== 'production' && ownId && ownId !== controlId) {
|
|
39
|
+
console.warn(`PneField owns control ID "${controlId}" and ignores conflicting child ID "${ownId}". `
|
|
40
|
+
+ 'Move the ID to PneField controlId.');
|
|
41
|
+
}
|
|
42
|
+
return {
|
|
43
|
+
...ownProps,
|
|
44
|
+
'aria-describedby': (0, PneFieldContext_1.mergeAriaIds)(ownProps['aria-describedby'], helperTextId),
|
|
45
|
+
'aria-disabled': disabled || ownProps.disabled === true
|
|
46
|
+
? true
|
|
47
|
+
: ownProps['aria-disabled'],
|
|
48
|
+
'aria-invalid': error ? true : ownProps['aria-invalid'],
|
|
49
|
+
'aria-labelledby': hasAriaLabel(ownProps['aria-label'])
|
|
50
|
+
? undefined
|
|
51
|
+
: (0, PneFieldContext_1.mergeAriaIds)(labelId, ownProps['aria-labelledby']),
|
|
52
|
+
'aria-required': required ? true : ownProps['aria-required'],
|
|
53
|
+
disabled: disabled || ownProps.disabled === true,
|
|
54
|
+
id: controlId,
|
|
55
|
+
};
|
|
56
|
+
},
|
|
20
57
|
helperTextId,
|
|
21
58
|
labelId,
|
|
22
59
|
required,
|
|
23
|
-
};
|
|
24
|
-
|
|
60
|
+
}), [controlId, disabled, error, fullWidth, helperTextId, labelId, required]);
|
|
61
|
+
const resolvedChildren = typeof children === 'function' ? children(adapter) : children;
|
|
62
|
+
validateChildren(resolvedChildren, hasLabel);
|
|
63
|
+
const { id: _labelId, ref: labelRef, sx: labelSlotSx, ...labelSlotProps } = slotProps?.label ?? {};
|
|
64
|
+
const { id: _helperTextId, ref: helperTextRef, sx: helperTextSlotSx, ...helperTextSlotProps } = slotProps?.helperText ?? {};
|
|
65
|
+
return React.createElement(material_1.FormControl, { disabled: disabled, error: error, fullWidth: fullWidth, id: rootId, required: required, sx: [
|
|
25
66
|
{
|
|
26
67
|
gap: '4px',
|
|
27
68
|
},
|
|
28
69
|
...(Array.isArray(sx) ? sx : [sx]),
|
|
29
70
|
], ...rest },
|
|
30
|
-
|
|
31
|
-
?
|
|
71
|
+
hasLabel
|
|
72
|
+
? React.createElement(material_1.FormLabel, { ...labelSlotProps, htmlFor: controlId, id: labelId, ref: labelRef, required: required, sx: [
|
|
32
73
|
{
|
|
33
74
|
alignSelf: 'flex-start',
|
|
34
75
|
color: error ? 'error.main' : 'text.secondary',
|
|
@@ -43,25 +84,69 @@ const PneField = (0, react_1.forwardRef)((props, ref) => {
|
|
|
43
84
|
},
|
|
44
85
|
},
|
|
45
86
|
...(Array.isArray(labelSx) ? labelSx : [labelSx]),
|
|
87
|
+
...(Array.isArray(labelSlotSx) ? labelSlotSx : [labelSlotSx]),
|
|
46
88
|
] }, label)
|
|
47
89
|
: null,
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
?
|
|
90
|
+
React.createElement(PneFieldContext_1.PneFieldContext.Provider, { value: adapter }, resolvedChildren),
|
|
91
|
+
hasHelperText
|
|
92
|
+
? React.createElement(material_1.FormHelperText, { ...helperTextSlotProps, id: helperTextId, ref: helperTextRef, sx: [
|
|
51
93
|
{
|
|
52
94
|
mx: '14px',
|
|
53
95
|
},
|
|
54
96
|
...(Array.isArray(helperTextSx) ? helperTextSx : [helperTextSx]),
|
|
97
|
+
...(Array.isArray(helperTextSlotSx) ? helperTextSlotSx : [helperTextSlotSx]),
|
|
55
98
|
] }, helperText)
|
|
56
99
|
: null);
|
|
57
|
-
}
|
|
58
|
-
const
|
|
59
|
-
if (
|
|
100
|
+
};
|
|
101
|
+
const normalizeId = (value) => {
|
|
102
|
+
if (typeof value !== 'string') {
|
|
60
103
|
return undefined;
|
|
61
104
|
}
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
105
|
+
const normalized = value.trim();
|
|
106
|
+
if (normalized === '') {
|
|
107
|
+
return undefined;
|
|
108
|
+
}
|
|
109
|
+
if (/\s/.test(normalized)) {
|
|
110
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
111
|
+
console.warn(`PneField ignores invalid ID containing whitespace: "${value}".`);
|
|
112
|
+
}
|
|
113
|
+
return undefined;
|
|
114
|
+
}
|
|
115
|
+
return normalized;
|
|
116
|
+
};
|
|
117
|
+
const hasRenderableContent = (value) => value !== undefined && value !== null && typeof value !== 'boolean' && value !== '';
|
|
118
|
+
const hasAriaLabel = (value) => typeof value === 'string' && value.trim() !== '';
|
|
119
|
+
const warnAboutFieldIdConflicts = (options) => {
|
|
120
|
+
if (process.env.NODE_ENV === 'production') {
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
if (options.controlIdProp && options.htmlFor && options.controlIdProp !== options.htmlFor) {
|
|
124
|
+
console.warn(`PneField controlId "${options.controlIdProp}" overrides conflicting deprecated htmlFor `
|
|
125
|
+
+ `"${options.htmlFor}".`);
|
|
126
|
+
}
|
|
127
|
+
if (options.rootId && options.rootId === options.controlId) {
|
|
128
|
+
console.warn(`PneField root ID and controlId are both "${options.rootId}". `
|
|
129
|
+
+ 'Use distinct IDs to avoid duplicate DOM IDs.');
|
|
130
|
+
}
|
|
131
|
+
};
|
|
132
|
+
const validateChildren = (children, hasLabel) => {
|
|
133
|
+
const directChildren = React.isValidElement(children)
|
|
134
|
+
&& children.type === React.Fragment
|
|
135
|
+
? children.props.children
|
|
136
|
+
: children;
|
|
137
|
+
if (React.Children.count(directChildren) !== 1) {
|
|
138
|
+
throw new Error('PneField expects exactly one logical control or group.');
|
|
139
|
+
}
|
|
140
|
+
if (process.env.NODE_ENV === 'production') {
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
if (hasLabel
|
|
144
|
+
&& React.isValidElement(children)
|
|
145
|
+
&& hasRenderableContent(children.props.label)) {
|
|
146
|
+
console.warn('PneField and its direct child both provide labels. Use one label owner to avoid an ambiguous accessible name.');
|
|
147
|
+
}
|
|
65
148
|
};
|
|
149
|
+
PneFieldImplementation.displayName = 'PneField';
|
|
150
|
+
const PneField = PneFieldImplementation;
|
|
66
151
|
exports.default = PneField;
|
|
67
152
|
//# sourceMappingURL=PneField.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PneField.js","sourceRoot":"","sources":["../../src/component/PneField.tsx"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"PneField.js","sourceRoot":"","sources":["../../src/component/PneField.tsx"],"names":[],"mappings":";;;AAIA,4CAAoE;AAEpE,qDAA8B;AAC9B,uDAM0B;AAoG1B,MAAM,sBAAsB,GAAG,CAC3B,KAAwC,EAC1C,EAAE;IACA,MAAM,EACF,QAAQ,EACR,SAAS,EAAE,aAAa,EACxB,QAAQ,GAAG,KAAK,EAChB,KAAK,GAAG,KAAK,EACb,SAAS,GAAG,IAAI,EAChB,UAAU,EACV,YAAY,EACZ,OAAO,EACP,EAAE,EACF,KAAK,EACL,OAAO,EACP,QAAQ,GAAG,KAAK,EAChB,SAAS,EACT,EAAE,EACF,GAAG,IAAI,EACV,GAAG,KAAK,CAAA;IAET,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,EAAE,CAAA;IACjC,MAAM,MAAM,GAAG,WAAW,CAAC,EAAE,CAAC,CAAA;IAC9B,MAAM,OAAO,GAAG,MAAM,IAAI,WAAW,CAAA;IACrC,MAAM,iBAAiB,GAAG,WAAW,CAAC,aAAa,CAAC,CAAA;IACpD,MAAM,eAAe,GAAG,WAAW,CAAC,OAAO,CAAC,CAAA;IAC5C,MAAM,SAAS,GAAG,iBAAiB,IAAI,eAAe,IAAI,GAAG,OAAO,UAAU,CAAA;IAC9E,MAAM,QAAQ,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAA;IAC5C,MAAM,aAAa,GAAG,oBAAoB,CAAC,UAAU,CAAC,CAAA;IACtD,MAAM,WAAW,GAAG,WAAW,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,CAAC,CAAA;IACrD,MAAM,gBAAgB,GAAG,WAAW,CAAC,SAAS,EAAE,UAAU,EAAE,EAAE,CAAC,CAAA;IAC/D,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,WAAW,IAAI,GAAG,OAAO,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAA;IACxE,MAAM,YAAY,GAAG,aAAa;QAC9B,CAAC,CAAC,gBAAgB,IAAI,GAAG,OAAO,cAAc;QAC9C,CAAC,CAAC,SAAS,CAAA;IAEf,yBAAyB,CAAC;QACtB,SAAS;QACT,aAAa,EAAE,iBAAiB;QAChC,OAAO,EAAE,eAAe;QACxB,MAAM;KACT,CAAC,CAAA;IAEF,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAyB,GAAG,EAAE,CAAC,CAAC;QACzD,SAAS;QACT,QAAQ;QACR,KAAK;QACL,SAAS;QACT,eAAe,EAAE,CACb,YAAqD,EACvD,EAAE;YACA,MAAM,QAAQ,GAA2C,YAAY;mBAC9D,EAA4C,CAAA;YACnD,MAAM,KAAK,GAAG,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;YAEtC,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,IAAI,KAAK,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxE,OAAO,CAAC,IAAI,CACR,6BAA6B,SAAS,uCAAuC,KAAK,KAAK;sBACrF,oCAAoC,CACzC,CAAA;YACL,CAAC;YAED,OAAO;gBACH,GAAG,QAAQ;gBACX,kBAAkB,EAAE,IAAA,8BAAY,EAC5B,QAAQ,CAAC,kBAAkB,CAAC,EAC5B,YAAY,CACf;gBACD,eAAe,EAAE,QAAQ,IAAI,QAAQ,CAAC,QAAQ,KAAK,IAAI;oBACnD,CAAC,CAAC,IAAI;oBACN,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC;gBAC/B,cAAc,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC;gBACvD,iBAAiB,EAAE,YAAY,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;oBACnD,CAAC,CAAC,SAAS;oBACX,CAAC,CAAC,IAAA,8BAAY,EAAC,OAAO,EAAE,QAAQ,CAAC,iBAAiB,CAAC,CAAC;gBACxD,eAAe,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC;gBAC5D,QAAQ,EAAE,QAAQ,IAAI,QAAQ,CAAC,QAAQ,KAAK,IAAI;gBAChD,EAAE,EAAE,SAAS;aAEoB,CAAA;QACzC,CAAC;QACD,YAAY;QACZ,OAAO;QACP,QAAQ;KACX,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAA;IAE7E,MAAM,gBAAgB,GAAG,OAAO,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAA;IACtF,gBAAgB,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAA;IAE5C,MAAM,EACF,EAAE,EAAE,QAAQ,EACZ,GAAG,EAAE,QAAQ,EACb,EAAE,EAAE,WAAW,EACf,GAAG,cAAc,EACpB,GAAG,SAAS,EAAE,KAAK,IAAI,EAAE,CAAA;IAC1B,MAAM,EACF,EAAE,EAAE,aAAa,EACjB,GAAG,EAAE,aAAa,EAClB,EAAE,EAAE,gBAAgB,EACpB,GAAG,mBAAmB,EACzB,GAAG,SAAS,EAAE,UAAU,IAAI,EAAE,CAAA;IAE/B,OAAO,oBAAC,sBAAW,IACf,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,SAAS,EACpB,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,QAAQ,EAClB,EAAE,EAAE;YACA;gBACI,GAAG,EAAE,KAAK;aACb;YACD,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;SACrC,KACG,IAAI;QAEP,QAAQ;YACL,CAAC,CAAC,oBAAC,oBAAS,OACJ,cAAc,EAClB,OAAO,EAAE,SAAS,EAClB,EAAE,EAAE,OAAO,EACX,GAAG,EAAE,QAAQ,EACb,QAAQ,EAAE,QAAQ,EAClB,EAAE,EAAE;oBACA;wBACI,SAAS,EAAE,YAAY;wBACvB,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,gBAAgB;wBAC9C,QAAQ,EAAE,UAAU;wBACpB,UAAU,EAAE,MAAM;wBAClB,QAAQ,EAAE,MAAM;wBAChB,eAAe,EAAE;4BACb,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,gBAAgB;yBACjD;wBACD,0BAA0B,EAAE;4BACxB,KAAK,EAAE,YAAY;yBACtB;qBACJ;oBACD,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;oBACjD,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;iBAChE,IAEA,KAAK,CACE;YACZ,CAAC,CAAC,IAAI;QACV,oBAAC,iCAAe,CAAC,QAAQ,IAAC,KAAK,EAAE,OAAO,IACnC,gBAAgB,CACM;QAC1B,aAAa;YACV,CAAC,CAAC,oBAAC,yBAAc,OACT,mBAAmB,EACvB,EAAE,EAAE,YAAY,EAChB,GAAG,EAAE,aAAa,EAClB,EAAE,EAAE;oBACA;wBACI,EAAE,EAAE,MAAM;qBACb;oBACD,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;oBAChE,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;iBAC/E,IAEA,UAAU,CACE;YACjB,CAAC,CAAC,IAAI,CACA,CAAA;AAClB,CAAC,CAAA;AAED,MAAM,WAAW,GAAG,CAAC,KAAc,EAAsB,EAAE;IACvD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,SAAS,CAAA;IACpB,CAAC;IAED,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAA;IAC/B,IAAI,UAAU,KAAK,EAAE,EAAE,CAAC;QACpB,OAAO,SAAS,CAAA;IACpB,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QACxB,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;YACxC,OAAO,CAAC,IAAI,CAAC,uDAAuD,KAAK,IAAI,CAAC,CAAA;QAClF,CAAC;QAED,OAAO,SAAS,CAAA;IACpB,CAAC;IAED,OAAO,UAAU,CAAA;AACrB,CAAC,CAAA;AAED,MAAM,oBAAoB,GAAG,CAAC,KAAsB,EAAW,EAAE,CAC7D,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,CAAA;AAEvF,MAAM,YAAY,GAAG,CAAC,KAAyC,EAAW,EAAE,CACxE,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAA;AAEpD,MAAM,yBAAyB,GAAG,CAC9B,OAKC,EACH,EAAE;IACA,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;QACxC,OAAM;IACV,CAAC;IAED,IAAI,OAAO,CAAC,aAAa,IAAI,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,aAAa,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC;QACxF,OAAO,CAAC,IAAI,CACR,uBAAuB,OAAO,CAAC,aAAa,6CAA6C;cACvF,IAAI,OAAO,CAAC,OAAO,IAAI,CAC5B,CAAA;IACL,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,KAAK,OAAO,CAAC,SAAS,EAAE,CAAC;QACzD,OAAO,CAAC,IAAI,CACR,4CAA4C,OAAO,CAAC,MAAM,KAAK;cAC7D,8CAA8C,CACnD,CAAA;IACL,CAAC;AACL,CAAC,CAAA;AAED,MAAM,gBAAgB,GAAG,CAAC,QAA4B,EAAE,QAAiB,EAAE,EAAE;IACzE,MAAM,cAAc,GAAG,KAAK,CAAC,cAAc,CAA+B,QAAQ,CAAC;WAC5E,QAAQ,CAAC,IAAI,KAAK,KAAK,CAAC,QAAQ;QACnC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ;QACzB,CAAC,CAAC,QAAQ,CAAA;IAEd,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7C,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAA;IAC7E,CAAC;IAED,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;QACxC,OAAM;IACV,CAAC;IAED,IACI,QAAQ;WACL,KAAK,CAAC,cAAc,CAA4B,QAAQ,CAAC;WACzD,oBAAoB,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,EAC/C,CAAC;QACC,OAAO,CAAC,IAAI,CACR,+GAA+G,CAClH,CAAA;IACL,CAAC;AACL,CAAC,CAAA;AAED,sBAAsB,CAAC,WAAW,GAAG,UAAU,CAAA;AAE/C,MAAM,QAAQ,GAAG,sBAA2C,CAAA;AAE5D,kBAAe,QAAQ,CAAA"}
|
|
@@ -1,14 +1,33 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import type { AriaAttributes } from 'react';
|
|
2
|
+
export interface PneFieldControlDomProps {
|
|
3
|
+
'aria-describedby'?: string;
|
|
4
|
+
'aria-disabled'?: AriaAttributes['aria-disabled'];
|
|
5
|
+
'aria-invalid'?: AriaAttributes['aria-invalid'];
|
|
6
|
+
'aria-label'?: AriaAttributes['aria-label'];
|
|
7
|
+
'aria-labelledby'?: string;
|
|
8
|
+
'aria-required'?: AriaAttributes['aria-required'];
|
|
3
9
|
disabled?: boolean;
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
10
|
+
id?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface ResolvedPneFieldControlDomProps extends Omit<PneFieldControlDomProps, 'disabled' | 'id'> {
|
|
13
|
+
disabled: boolean;
|
|
14
|
+
id: string;
|
|
15
|
+
}
|
|
16
|
+
export interface PneFieldControlAdapter {
|
|
17
|
+
readonly controlId: string;
|
|
18
|
+
readonly disabled: boolean;
|
|
19
|
+
readonly error: boolean;
|
|
20
|
+
readonly fullWidth: boolean;
|
|
21
|
+
readonly helperTextId?: string;
|
|
22
|
+
readonly labelId?: string;
|
|
23
|
+
readonly required: boolean;
|
|
24
|
+
getControlProps: <Props extends object = PneFieldControlDomProps>(props?: Props & PneFieldControlDomProps) => Omit<Props, keyof PneFieldControlDomProps> & ResolvedPneFieldControlDomProps;
|
|
9
25
|
}
|
|
10
26
|
export interface PneFieldControlProps {
|
|
11
27
|
ariaDescribedBy?: string;
|
|
28
|
+
ariaInvalid?: AriaAttributes['aria-invalid'];
|
|
29
|
+
ariaLabelledBy?: string;
|
|
30
|
+
ariaRequired?: AriaAttributes['aria-required'];
|
|
12
31
|
disabled?: boolean;
|
|
13
32
|
error?: boolean;
|
|
14
33
|
fullWidth?: boolean;
|
|
@@ -19,7 +38,9 @@ export interface ResolvedPneFieldControlProps extends PneFieldControlProps {
|
|
|
19
38
|
ariaRequired?: boolean;
|
|
20
39
|
labelId?: string;
|
|
21
40
|
}
|
|
22
|
-
export declare const PneFieldContext: import("react").Context<
|
|
23
|
-
export declare const
|
|
41
|
+
export declare const PneFieldContext: import("react").Context<PneFieldControlAdapter | undefined>;
|
|
42
|
+
export declare const usePneFieldControl: () => PneFieldControlAdapter | undefined;
|
|
24
43
|
export declare const usePneFieldControlProps: (props?: PneFieldControlProps) => ResolvedPneFieldControlProps;
|
|
44
|
+
export declare const mergeAriaIds: (...ids: Array<string | undefined>) => string | undefined;
|
|
45
|
+
/** @deprecated Use `mergeAriaIds`; this alias remains for internal source compatibility. */
|
|
25
46
|
export declare const mergeAriaDescribedBy: (...ids: Array<string | undefined>) => string | undefined;
|
|
@@ -1,31 +1,51 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.mergeAriaDescribedBy = exports.usePneFieldControlProps = exports.
|
|
3
|
+
exports.mergeAriaDescribedBy = exports.mergeAriaIds = exports.usePneFieldControlProps = exports.usePneFieldControl = exports.PneFieldContext = void 0;
|
|
4
4
|
const react_1 = require("react");
|
|
5
5
|
exports.PneFieldContext = (0, react_1.createContext)(undefined);
|
|
6
|
-
const
|
|
7
|
-
exports.
|
|
6
|
+
const usePneFieldControl = () => (0, react_1.useContext)(exports.PneFieldContext);
|
|
7
|
+
exports.usePneFieldControl = usePneFieldControl;
|
|
8
8
|
const usePneFieldControlProps = (props = {}) => {
|
|
9
|
-
const
|
|
9
|
+
const field = (0, exports.usePneFieldControl)();
|
|
10
|
+
const ariaInvalid = props.error === undefined
|
|
11
|
+
? props.ariaInvalid
|
|
12
|
+
: props.error
|
|
13
|
+
? true
|
|
14
|
+
: props.ariaInvalid ?? false;
|
|
15
|
+
const controlProps = field?.getControlProps({
|
|
16
|
+
'aria-describedby': props.ariaDescribedBy,
|
|
17
|
+
'aria-invalid': ariaInvalid,
|
|
18
|
+
'aria-labelledby': props.ariaLabelledBy,
|
|
19
|
+
'aria-required': props.ariaRequired,
|
|
20
|
+
disabled: props.disabled,
|
|
21
|
+
id: props.id,
|
|
22
|
+
});
|
|
10
23
|
return {
|
|
11
|
-
ariaDescribedBy:
|
|
12
|
-
|
|
24
|
+
ariaDescribedBy: controlProps?.['aria-describedby'] ?? props.ariaDescribedBy,
|
|
25
|
+
ariaInvalid: controlProps?.['aria-invalid'] ?? ariaInvalid,
|
|
26
|
+
ariaLabelledBy: controlProps?.['aria-labelledby'] ?? props.ariaLabelledBy,
|
|
27
|
+
ariaRequired: isAriaTrue(controlProps?.['aria-required']) || isAriaTrue(props.ariaRequired)
|
|
13
28
|
? true
|
|
14
29
|
: undefined,
|
|
15
|
-
disabled:
|
|
16
|
-
error: props.error
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
30
|
+
disabled: controlProps?.disabled ?? props.disabled,
|
|
31
|
+
error: field?.error === true || props.error === true
|
|
32
|
+
? true
|
|
33
|
+
: props.error ?? field?.error,
|
|
34
|
+
fullWidth: props.fullWidth ?? field?.fullWidth,
|
|
35
|
+
id: controlProps?.id ?? props.id,
|
|
36
|
+
labelId: field?.labelId,
|
|
20
37
|
required: props.required,
|
|
21
38
|
};
|
|
22
39
|
};
|
|
23
40
|
exports.usePneFieldControlProps = usePneFieldControlProps;
|
|
24
|
-
const
|
|
41
|
+
const mergeAriaIds = (...ids) => {
|
|
25
42
|
const mergedIds = ids
|
|
26
43
|
.flatMap(id => id?.split(/\s+/) ?? [])
|
|
27
44
|
.filter((id, index, allIds) => id !== '' && allIds.indexOf(id) === index);
|
|
28
45
|
return mergedIds.length > 0 ? mergedIds.join(' ') : undefined;
|
|
29
46
|
};
|
|
30
|
-
exports.
|
|
47
|
+
exports.mergeAriaIds = mergeAriaIds;
|
|
48
|
+
const isAriaTrue = (value) => value === true || value === 'true';
|
|
49
|
+
/** @deprecated Use `mergeAriaIds`; this alias remains for internal source compatibility. */
|
|
50
|
+
exports.mergeAriaDescribedBy = exports.mergeAriaIds;
|
|
31
51
|
//# sourceMappingURL=PneFieldContext.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PneFieldContext.js","sourceRoot":"","sources":["../../src/component/PneFieldContext.ts"],"names":[],"mappings":";;;AAAA,iCAA+C;
|
|
1
|
+
{"version":3,"file":"PneFieldContext.js","sourceRoot":"","sources":["../../src/component/PneFieldContext.ts"],"names":[],"mappings":";;;AAAA,iCAA+C;AAoDlC,QAAA,eAAe,GAAG,IAAA,qBAAa,EAAqC,SAAS,CAAC,CAAA;AAEpF,MAAM,kBAAkB,GAAG,GAAuC,EAAE,CAAC,IAAA,kBAAU,EAAC,uBAAe,CAAC,CAAA;AAA1F,QAAA,kBAAkB,sBAAwE;AAEhG,MAAM,uBAAuB,GAAG,CACnC,QAA8B,EAAE,EACJ,EAAE;IAC9B,MAAM,KAAK,GAAG,IAAA,0BAAkB,GAAE,CAAA;IAClC,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,KAAK,SAAS;QACzC,CAAC,CAAC,KAAK,CAAC,WAAW;QACnB,CAAC,CAAC,KAAK,CAAC,KAAK;YACT,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,KAAK,CAAC,WAAW,IAAI,KAAK,CAAA;IACpC,MAAM,YAAY,GAAG,KAAK,EAAE,eAAe,CAAC;QACxC,kBAAkB,EAAE,KAAK,CAAC,eAAe;QACzC,cAAc,EAAE,WAAW;QAC3B,iBAAiB,EAAE,KAAK,CAAC,cAAc;QACvC,eAAe,EAAE,KAAK,CAAC,YAAY;QACnC,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,EAAE,EAAE,KAAK,CAAC,EAAE;KACf,CAAC,CAAA;IAEF,OAAO;QACH,eAAe,EAAE,YAAY,EAAE,CAAC,kBAAkB,CAAC,IAAI,KAAK,CAAC,eAAe;QAC5E,WAAW,EAAE,YAAY,EAAE,CAAC,cAAc,CAAC,IAAI,WAAW;QAC1D,cAAc,EAAE,YAAY,EAAE,CAAC,iBAAiB,CAAC,IAAI,KAAK,CAAC,cAAc;QACzE,YAAY,EAAE,UAAU,CAAC,YAAY,EAAE,CAAC,eAAe,CAAC,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,YAAY,CAAC;YACvF,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,SAAS;QACf,QAAQ,EAAE,YAAY,EAAE,QAAQ,IAAI,KAAK,CAAC,QAAQ;QAClD,KAAK,EAAE,KAAK,EAAE,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI;YAChD,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,EAAE,KAAK;QACjC,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,KAAK,EAAE,SAAS;QAC9C,EAAE,EAAE,YAAY,EAAE,EAAE,IAAI,KAAK,CAAC,EAAE;QAChC,OAAO,EAAE,KAAK,EAAE,OAAO;QACvB,QAAQ,EAAE,KAAK,CAAC,QAAQ;KAC3B,CAAA;AACL,CAAC,CAAA;AAlCY,QAAA,uBAAuB,2BAkCnC;AAEM,MAAM,YAAY,GAAG,CACxB,GAAG,GAA8B,EACf,EAAE;IACpB,MAAM,SAAS,GAAG,GAAG;SAChB,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;SACrC,MAAM,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,KAAK,CAAC,CAAA;IAE7E,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;AACjE,CAAC,CAAA;AARY,QAAA,YAAY,gBAQxB;AAED,MAAM,UAAU,GAAG,CAAC,KAAsC,EAAW,EAAE,CACnE,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,MAAM,CAAA;AAEtC,4FAA4F;AAC/E,QAAA,oBAAoB,GAAG,oBAAY,CAAA"}
|