pne-ui 4.0.18 → 4.0.20

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.
@@ -0,0 +1,18 @@
1
+ import React, { ReactNode } from 'react';
2
+ import { FormControlProps, SxProps } from '@mui/material';
3
+ import { Theme } from '@mui/material/styles';
4
+ export interface PneFieldProps extends Omit<FormControlProps, 'children' | 'disabled' | 'error' | 'fullWidth' | 'required'> {
5
+ children: ReactNode;
6
+ disabled?: boolean;
7
+ error?: boolean;
8
+ fullWidth?: boolean;
9
+ helperText?: ReactNode;
10
+ helperTextSx?: SxProps<Theme>;
11
+ htmlFor?: string;
12
+ id?: string;
13
+ label?: ReactNode;
14
+ labelSx?: SxProps<Theme>;
15
+ required?: boolean;
16
+ }
17
+ declare const PneField: React.ForwardRefExoticComponent<Omit<PneFieldProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
18
+ export default PneField;
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const react_1 = tslib_1.__importStar(require("react"));
5
+ const material_1 = require("@mui/material");
6
+ const PneField = (0, react_1.forwardRef)((props, ref) => {
7
+ const { children, disabled = false, error = false, fullWidth = true, helperText, helperTextSx, htmlFor, id, label, labelSx, required = false, sx, ...rest } = props;
8
+ const helperTextId = helperText && id ? `${id}-helper-text` : undefined;
9
+ return react_1.default.createElement(material_1.FormControl, { disabled: disabled, error: error, fullWidth: fullWidth, id: id, required: required, ref: ref, sx: [
10
+ {
11
+ gap: '4px',
12
+ },
13
+ ...(Array.isArray(sx) ? sx : [sx]),
14
+ ], ...rest },
15
+ label
16
+ ? react_1.default.createElement(material_1.FormLabel, { htmlFor: htmlFor, required: required, sx: [
17
+ {
18
+ color: error ? 'error.main' : 'text.secondary',
19
+ fontSize: '0.875rem',
20
+ lineHeight: '20px',
21
+ '&.Mui-focused': {
22
+ color: error ? 'error.main' : 'text.secondary',
23
+ },
24
+ '& .MuiFormLabel-asterisk': {
25
+ color: 'error.main',
26
+ },
27
+ },
28
+ ...(Array.isArray(labelSx) ? labelSx : [labelSx]),
29
+ ] }, label)
30
+ : null,
31
+ children,
32
+ helperText
33
+ ? react_1.default.createElement(material_1.FormHelperText, { id: helperTextId, sx: [
34
+ {
35
+ mx: 0,
36
+ },
37
+ ...(Array.isArray(helperTextSx) ? helperTextSx : [helperTextSx]),
38
+ ] }, helperText)
39
+ : null);
40
+ });
41
+ exports.default = PneField;
42
+ //# sourceMappingURL=PneField.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PneField.js","sourceRoot":"","sources":["../../src/component/PneField.tsx"],"names":[],"mappings":";;;AAAA,uDAAkD;AAClD,4CAA+F;AAkB/F,MAAM,QAAQ,GAAG,IAAA,kBAAU,EAAgC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;IACtE,MAAM,EACF,QAAQ,EACR,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,EAAE,EACF,GAAG,IAAI,EACV,GAAG,KAAK,CAAA;IAET,MAAM,YAAY,GAAG,UAAU,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC,CAAC,SAAS,CAAA;IAEvE,OAAO,8BAAC,sBAAW,IACf,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,SAAS,EACpB,EAAE,EAAE,EAAE,EACN,QAAQ,EAAE,QAAQ,EAClB,GAAG,EAAE,GAAG,EACR,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,KAAK;YACF,CAAC,CAAC,8BAAC,oBAAS,IACR,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,QAAQ,EAClB,EAAE,EAAE;oBACA;wBACI,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,gBAAgB;wBAC9C,QAAQ,EAAE,UAAU;wBACpB,UAAU,EAAE,MAAM;wBAClB,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;iBACpD,IAEA,KAAK,CACE;YACZ,CAAC,CAAC,IAAI;QACT,QAAQ;QACR,UAAU;YACP,CAAC,CAAC,8BAAC,yBAAc,IACb,EAAE,EAAE,YAAY,EAChB,EAAE,EAAE;oBACA;wBACI,EAAE,EAAE,CAAC;qBACR;oBACD,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;iBACnE,IAEA,UAAU,CACE;YACjB,CAAC,CAAC,IAAI,CACA,CAAA;AAClB,CAAC,CAAC,CAAA;AAEF,kBAAe,QAAQ,CAAA"}
@@ -1,4 +1,6 @@
1
1
  import React from 'react';
2
2
  import { SwitchProps } from '@mui/material';
3
+ export type PneSwitchSize = NonNullable<SwitchProps['size']>;
4
+ export type PneSwitchProps = SwitchProps;
3
5
  declare const PneSwitch: React.ForwardRefExoticComponent<Omit<SwitchProps, "ref"> & React.RefAttributes<HTMLButtonElement>>;
4
6
  export default PneSwitch;
@@ -3,12 +3,169 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const tslib_1 = require("tslib");
4
4
  const react_1 = tslib_1.__importStar(require("react"));
5
5
  const material_1 = require("@mui/material");
6
+ const styles_1 = require("@mui/material/styles");
6
7
  const PneSwitch = (0, react_1.forwardRef)((props, ref) => {
7
- const { sx, size = 'small', ...rest } = props;
8
+ const { sx, size = 'medium', ...rest } = props;
8
9
  const _sx = [
10
+ switchSxBySize[size],
9
11
  ...(Array.isArray(sx) ? sx : [sx]),
10
12
  ];
11
13
  return react_1.default.createElement(material_1.Switch, { sx: _sx, size: size, ...rest, ref: ref });
12
14
  });
15
+ const createSwitchSx = (config) => theme => {
16
+ const trackFeedbackColor = (0, styles_1.alpha)(theme.palette.primary.main, 0.1);
17
+ return {
18
+ width: config.rootWidth,
19
+ height: config.rootHeight,
20
+ padding: 0,
21
+ overflow: 'visible',
22
+ '&:hover .MuiSwitch-track::before, & .MuiSwitch-switchBase:hover + .MuiSwitch-track::before': {
23
+ boxShadow: `0 0 0 2px ${trackFeedbackColor}`,
24
+ opacity: 1,
25
+ transform: 'scale(1)',
26
+ },
27
+ '&:active .MuiSwitch-track::before, & .MuiSwitch-switchBase:active + .MuiSwitch-track::before': {
28
+ boxShadow: `0 0 0 ${config.pressedOutlineWidth}px ${trackFeedbackColor}`,
29
+ opacity: 1,
30
+ transform: 'scale(1)',
31
+ transitionDuration: '80ms',
32
+ },
33
+ '& .MuiSwitch-switchBase': {
34
+ top: config.trackTop,
35
+ left: config.trackLeft,
36
+ padding: `${config.thumbPadding}px`,
37
+ color: '#fff',
38
+ '&.Mui-checked': {
39
+ transform: `translateX(${config.checkedShift}px)`,
40
+ color: '#fff',
41
+ '& + .MuiSwitch-track': {
42
+ backgroundColor: 'primary.main',
43
+ opacity: 1,
44
+ },
45
+ },
46
+ '&:hover + .MuiSwitch-track': {
47
+ backgroundColor: '#5E7594',
48
+ opacity: 1,
49
+ },
50
+ '&.Mui-checked:hover + .MuiSwitch-track': {
51
+ backgroundColor: 'primary.dark',
52
+ opacity: 1,
53
+ },
54
+ '&.Mui-disabled': {
55
+ color: '#fff',
56
+ opacity: 1,
57
+ '& .MuiSwitch-thumb': {
58
+ backgroundColor: '#fff',
59
+ },
60
+ '& + .MuiSwitch-track': {
61
+ backgroundColor: '#E6E6E6',
62
+ opacity: 1,
63
+ },
64
+ '& + .MuiSwitch-track::before': {
65
+ boxShadow: 'none',
66
+ opacity: 0,
67
+ transform: 'scale(1)',
68
+ },
69
+ },
70
+ '&.Mui-checked.Mui-disabled + .MuiSwitch-track': {
71
+ backgroundColor: '#E6E6E6',
72
+ opacity: 1,
73
+ },
74
+ '&.Mui-checked.Mui-disabled .MuiSwitch-thumb': {
75
+ backgroundColor: '#fff',
76
+ },
77
+ '&.Mui-checked.Mui-disabled': {
78
+ color: '#fff',
79
+ opacity: 1,
80
+ '& + .MuiSwitch-track': {
81
+ backgroundColor: '#E6E6E6',
82
+ opacity: 1,
83
+ },
84
+ '& + .MuiSwitch-track::before': {
85
+ boxShadow: 'none',
86
+ opacity: 0,
87
+ transform: 'scale(1)',
88
+ },
89
+ },
90
+ '&.Mui-disabled:hover + .MuiSwitch-track': {
91
+ backgroundColor: '#E6E6E6',
92
+ opacity: 1,
93
+ },
94
+ '&.Mui-checked.Mui-disabled:hover + .MuiSwitch-track': {
95
+ backgroundColor: '#E6E6E6',
96
+ opacity: 1,
97
+ },
98
+ '&.Mui-focusVisible:not(.Mui-disabled) + .MuiSwitch-track::before': {
99
+ boxShadow: `0 0 0 ${config.focusOutlineWidth}px ${trackFeedbackColor}`,
100
+ opacity: 1,
101
+ transform: 'scale(1)',
102
+ },
103
+ },
104
+ '&:active .MuiSwitch-switchBase.Mui-focusVisible:not(.Mui-disabled) + .MuiSwitch-track::before, & .MuiSwitch-switchBase.Mui-focusVisible:not(.Mui-disabled):active + .MuiSwitch-track::before': {
105
+ boxShadow: `0 0 0 ${config.pressedOutlineWidth}px ${trackFeedbackColor}`,
106
+ opacity: 1,
107
+ transform: 'scale(1)',
108
+ transitionDuration: '80ms',
109
+ },
110
+ '& .MuiSwitch-thumb': {
111
+ width: config.thumbSize,
112
+ height: config.thumbSize,
113
+ borderRadius: '50%',
114
+ boxShadow: '0px 1px 4px rgba(0, 0, 0, 0.2)',
115
+ },
116
+ '& .MuiSwitch-track': {
117
+ position: 'absolute',
118
+ top: config.trackTop,
119
+ left: config.trackLeft,
120
+ width: config.trackWidth,
121
+ height: config.trackHeight,
122
+ borderRadius: 40,
123
+ backgroundColor: '#809EAE',
124
+ opacity: 1,
125
+ overflow: 'visible',
126
+ '&::before': {
127
+ borderRadius: 'inherit',
128
+ boxShadow: 'none',
129
+ boxSizing: 'border-box',
130
+ content: '""',
131
+ inset: 0,
132
+ opacity: 0,
133
+ pointerEvents: 'none',
134
+ position: 'absolute',
135
+ transform: 'scale(1)',
136
+ transformOrigin: 'center',
137
+ transition: 'box-shadow 150ms cubic-bezier(0.4, 0, 0.2, 1), opacity 150ms cubic-bezier(0.4, 0, 0.2, 1), transform 150ms cubic-bezier(0.4, 0, 0.2, 1)',
138
+ },
139
+ },
140
+ };
141
+ };
142
+ const switchSxBySize = {
143
+ small: createSwitchSx({
144
+ rootWidth: 40,
145
+ rootHeight: 24,
146
+ trackLeft: 8,
147
+ trackTop: 4,
148
+ trackWidth: 24,
149
+ trackHeight: 16,
150
+ thumbSize: 12,
151
+ thumbPadding: 2,
152
+ checkedShift: 8,
153
+ focusOutlineWidth: 2,
154
+ pressedOutlineWidth: 4,
155
+ }),
156
+ medium: createSwitchSx({
157
+ rootWidth: 58,
158
+ rootHeight: 32,
159
+ trackLeft: 12,
160
+ trackTop: 5,
161
+ trackWidth: 34,
162
+ trackHeight: 22,
163
+ thumbSize: 16,
164
+ thumbPadding: 3,
165
+ checkedShift: 12,
166
+ focusOutlineWidth: 4,
167
+ pressedOutlineWidth: 6,
168
+ }),
169
+ };
13
170
  exports.default = PneSwitch;
14
171
  //# sourceMappingURL=PneSwitch.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PneSwitch.js","sourceRoot":"","sources":["../../src/component/PneSwitch.tsx"],"names":[],"mappings":";;;AAAA,uDAA4C;AAC5C,4CAA0D;AAE1D,MAAM,SAAS,GAAG,IAAA,kBAAU,EAAC,CACzB,KAAkB,EAClB,GAA2B,EAC7B,EAAE;IACA,MAAM,EACF,EAAE,EACF,IAAI,GAAG,OAAO,EACd,GAAG,IAAI,EACV,GAAG,KAAK,CAAA;IAET,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;IAED,OAAO,8BAAC,iBAAM,IAAC,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,KAAM,IAAI,EAAE,GAAG,EAAE,GAAG,GAAG,CAAA;AAC7D,CAAC,CAAC,CAAA;AAEF,kBAAe,SAAS,CAAA"}
1
+ {"version":3,"file":"PneSwitch.js","sourceRoot":"","sources":["../../src/component/PneSwitch.tsx"],"names":[],"mappings":"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"}
@@ -2,10 +2,11 @@ import React, { ReactNode } from 'react';
2
2
  import { SelectProps, SelectVariants } from '@mui/material';
3
3
  import { PneDropdownChoice } from '../../common/paynet/dropdown';
4
4
  import { SelectOption } from '../../common/pne/type';
5
- export interface IProps<T extends PneDropdownChoice> extends Omit<SelectProps<T>, 'children' | 'onChange' | 'variant'> {
5
+ export interface IProps<T extends PneDropdownChoice> extends Omit<SelectProps<T>, 'children' | 'onChange' | 'placeholder' | 'variant'> {
6
6
  options: readonly T[];
7
7
  onChange: (option: T) => void;
8
8
  getOptionLabel?: (option: SelectOption) => ReactNode;
9
+ placeholder?: ReactNode;
9
10
  variant?: SelectVariants;
10
11
  disableMenuItem?: (option: SelectOption) => boolean;
11
12
  }
@@ -6,20 +6,55 @@ const material_1 = require("@mui/material");
6
6
  const type_1 = require("../../common/pne/type");
7
7
  const type_2 = require("../../common/paynet/type");
8
8
  const PneSelect = (0, react_1.forwardRef)((props, ref) => {
9
- const { options, onChange, size = 'small', getOptionLabel = createDefaultOptionLabel, variant = 'outlined', disableMenuItem, label, disabled, error, required, sx, ...rest } = props;
9
+ const { options, onChange, size = 'small', getOptionLabel = createDefaultOptionLabel, variant = 'outlined', disableMenuItem, label, disabled, error, required, sx, displayEmpty, placeholder, renderValue, ...rest } = props;
10
+ const labelId = (0, react_1.useId)();
11
+ const hasLabel = label !== undefined && label !== null && label !== '';
12
+ const mappedOptions = options.map(mapChoiceToSelectOption);
10
13
  const handleChange = (event) => {
11
14
  const value = event.target.value;
12
15
  onChange((0, type_1.ensure)(options.find(opt => mapChoiceToSelectOption(opt).value === value)));
13
16
  };
14
17
  const optionsPresent = options?.length > 0;
18
+ const shouldRenderPlaceholder = placeholder !== undefined && placeholder !== null;
19
+ const renderSelectedValue = (selected) => {
20
+ if (isEmptyValue(selected)) {
21
+ return react_1.default.createElement(material_1.Box, { component: 'span', sx: { color: 'text.secondary' } }, placeholder);
22
+ }
23
+ if (Array.isArray(selected)) {
24
+ return selected.map((value, index) => react_1.default.createElement(react_1.default.Fragment, { key: String(value) },
25
+ index > 0 ? ', ' : null,
26
+ renderSingleSelectedValue(value, mappedOptions, getOptionLabel)));
27
+ }
28
+ return renderSingleSelectedValue(selected, mappedOptions, getOptionLabel);
29
+ };
15
30
  return react_1.default.createElement(material_1.FormControl, { size: size, variant: variant, disabled: disabled, error: error, required: required, sx: sx, fullWidth: true },
16
- react_1.default.createElement(material_1.InputLabel, { id: "select-label" }, label),
17
- react_1.default.createElement(material_1.Select, { ref: ref, labelId: "select-label", onChange: handleChange, size: size, variant: variant, label: label, ...rest }, optionsPresent ? options.map(mapChoiceToSelectOption).map(option => react_1.default.createElement(material_1.MenuItem, { disabled: disableMenuItem ? disableMenuItem(option) : false, key: option.value, value: option.value }, getOptionLabel(option))) : null));
31
+ hasLabel ? react_1.default.createElement(material_1.InputLabel, { id: labelId }, label) : null,
32
+ react_1.default.createElement(material_1.Select, { ref: ref, displayEmpty: displayEmpty ?? shouldRenderPlaceholder, labelId: hasLabel ? labelId : undefined, onChange: handleChange, size: size, variant: variant, label: hasLabel ? label : undefined, renderValue: renderValue ?? (shouldRenderPlaceholder ? renderSelectedValue : undefined), ...rest }, optionsPresent ? mappedOptions.map(option => react_1.default.createElement(material_1.MenuItem, { disabled: disableMenuItem ? disableMenuItem(option) : false, key: option.value, value: option.value }, getOptionLabel(option))) : null));
18
33
  });
19
34
  exports.default = PneSelect;
20
35
  const createDefaultOptionLabel = (option) => {
21
36
  return option.label;
22
37
  };
38
+ const isEmptyValue = (value) => {
39
+ return value === '' || value === undefined || value === null
40
+ || (Array.isArray(value) && value.length === 0);
41
+ };
42
+ const renderSingleSelectedValue = (value, options, getOptionLabel) => {
43
+ const option = options.find(option => option.value === value);
44
+ if (option) {
45
+ return getOptionLabel(option);
46
+ }
47
+ if (typeof value === 'string' || typeof value === 'number') {
48
+ return value;
49
+ }
50
+ if ((0, type_2.isIAutoCompleteChoice)(value)) {
51
+ return value.displayName;
52
+ }
53
+ if ((0, type_2.isAbstractEntity)(value)) {
54
+ return value.displayName;
55
+ }
56
+ return '';
57
+ };
23
58
  const mapChoiceToSelectOption = (choice) => {
24
59
  if (typeof choice === 'string') {
25
60
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"PneSelect.js","sourceRoot":"","sources":["../../../src/component/dropdown/PneSelect.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PneSelect.js","sourceRoot":"","sources":["../../../src/component/dropdown/PneSelect.tsx"],"names":[],"mappings":"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"}
@@ -1,4 +1,6 @@
1
1
  export { default as PneTextField } from '../component/PneTextField';
2
+ export { default as PneField } from '../component/PneField';
3
+ export type { PneFieldProps } from '../component/PneField';
2
4
  export { default as PneAutocomplete } from '../component/dropdown/PneAutocomplete';
3
5
  export { default as PneAsyncAutocomplete } from '../component/dropdown/PneAsyncAutocomplete';
4
6
  export type { PneAsyncAutocompleteProps } from '../component/dropdown/PneAsyncAutocomplete';
@@ -8,3 +10,4 @@ export { PneCheckbox } from '../component/PneCheckbox';
8
10
  export { PneLabeledCheckbox } from '../component/PneLabeledCheckbox';
9
11
  export { PneHighContrastLabeledCheckbox } from '../component/PneHighContrastLabeledCheckbox';
10
12
  export { default as PneSwitch } from '../component/PneSwitch';
13
+ export type { PneSwitchProps, PneSwitchSize } from '../component/PneSwitch';
@@ -1,9 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.PneSwitch = exports.PneHighContrastLabeledCheckbox = exports.PneLabeledCheckbox = exports.PneCheckbox = exports.PneSelect = exports.PneAsyncAutocomplete = exports.PneAutocomplete = exports.PneTextField = void 0;
3
+ exports.PneSwitch = exports.PneHighContrastLabeledCheckbox = exports.PneLabeledCheckbox = exports.PneCheckbox = exports.PneSelect = exports.PneAsyncAutocomplete = exports.PneAutocomplete = exports.PneField = exports.PneTextField = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  var PneTextField_1 = require("../component/PneTextField");
6
6
  Object.defineProperty(exports, "PneTextField", { enumerable: true, get: function () { return tslib_1.__importDefault(PneTextField_1).default; } });
7
+ var PneField_1 = require("../component/PneField");
8
+ Object.defineProperty(exports, "PneField", { enumerable: true, get: function () { return tslib_1.__importDefault(PneField_1).default; } });
7
9
  var PneAutocomplete_1 = require("../component/dropdown/PneAutocomplete");
8
10
  Object.defineProperty(exports, "PneAutocomplete", { enumerable: true, get: function () { return tslib_1.__importDefault(PneAutocomplete_1).default; } });
9
11
  var PneAsyncAutocomplete_1 = require("../component/dropdown/PneAsyncAutocomplete");
@@ -1 +1 @@
1
- {"version":3,"file":"inputs.js","sourceRoot":"","sources":["../../src/exports/inputs.ts"],"names":[],"mappings":";;;;AAAA,0DAAmE;AAA1D,qIAAA,OAAO,OAAgB;AAChC,yEAAkF;AAAzE,2IAAA,OAAO,OAAmB;AACnC,mFAA4F;AAAnF,qJAAA,OAAO,OAAwB;AAExC,6DAAsE;AAA7D,+HAAA,OAAO,OAAa;AAG7B,wDAAsD;AAA7C,0GAAA,WAAW,OAAA;AACpB,sEAAoE;AAA3D,wHAAA,kBAAkB,OAAA;AAC3B,8FAA4F;AAAnF,gJAAA,8BAA8B,OAAA;AACvC,oDAA6D;AAApD,+HAAA,OAAO,OAAa"}
1
+ {"version":3,"file":"inputs.js","sourceRoot":"","sources":["../../src/exports/inputs.ts"],"names":[],"mappings":";;;;AAAA,0DAAmE;AAA1D,qIAAA,OAAO,OAAgB;AAChC,kDAA2D;AAAlD,6HAAA,OAAO,OAAY;AAE5B,yEAAkF;AAAzE,2IAAA,OAAO,OAAmB;AACnC,mFAA4F;AAAnF,qJAAA,OAAO,OAAwB;AAExC,6DAAsE;AAA7D,+HAAA,OAAO,OAAa;AAG7B,wDAAsD;AAA7C,0GAAA,WAAW,OAAA;AACpB,sEAAoE;AAA3D,wHAAA,kBAAkB,OAAA;AAC3B,8FAA4F;AAAnF,gJAAA,8BAA8B,OAAA;AACvC,oDAA6D;AAApD,+HAAA,OAAO,OAAa"}
@@ -0,0 +1,18 @@
1
+ import React, { ReactNode } from 'react';
2
+ import { FormControlProps, SxProps } from '@mui/material';
3
+ import { Theme } from '@mui/material/styles';
4
+ export interface PneFieldProps extends Omit<FormControlProps, 'children' | 'disabled' | 'error' | 'fullWidth' | 'required'> {
5
+ children: ReactNode;
6
+ disabled?: boolean;
7
+ error?: boolean;
8
+ fullWidth?: boolean;
9
+ helperText?: ReactNode;
10
+ helperTextSx?: SxProps<Theme>;
11
+ htmlFor?: string;
12
+ id?: string;
13
+ label?: ReactNode;
14
+ labelSx?: SxProps<Theme>;
15
+ required?: boolean;
16
+ }
17
+ declare const PneField: React.ForwardRefExoticComponent<Omit<PneFieldProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
18
+ export default PneField;
@@ -0,0 +1,39 @@
1
+ import React, { forwardRef } from 'react';
2
+ import { FormControl, FormHelperText, FormLabel } from '@mui/material';
3
+ const PneField = forwardRef((props, ref) => {
4
+ const { children, disabled = false, error = false, fullWidth = true, helperText, helperTextSx, htmlFor, id, label, labelSx, required = false, sx, ...rest } = props;
5
+ const helperTextId = helperText && id ? `${id}-helper-text` : undefined;
6
+ return React.createElement(FormControl, { disabled: disabled, error: error, fullWidth: fullWidth, id: id, required: required, ref: ref, sx: [
7
+ {
8
+ gap: '4px',
9
+ },
10
+ ...(Array.isArray(sx) ? sx : [sx]),
11
+ ], ...rest },
12
+ label
13
+ ? React.createElement(FormLabel, { htmlFor: htmlFor, required: required, sx: [
14
+ {
15
+ color: error ? 'error.main' : 'text.secondary',
16
+ fontSize: '0.875rem',
17
+ lineHeight: '20px',
18
+ '&.Mui-focused': {
19
+ color: error ? 'error.main' : 'text.secondary',
20
+ },
21
+ '& .MuiFormLabel-asterisk': {
22
+ color: 'error.main',
23
+ },
24
+ },
25
+ ...(Array.isArray(labelSx) ? labelSx : [labelSx]),
26
+ ] }, label)
27
+ : null,
28
+ children,
29
+ helperText
30
+ ? React.createElement(FormHelperText, { id: helperTextId, sx: [
31
+ {
32
+ mx: 0,
33
+ },
34
+ ...(Array.isArray(helperTextSx) ? helperTextSx : [helperTextSx]),
35
+ ] }, helperText)
36
+ : null);
37
+ });
38
+ export default PneField;
39
+ //# sourceMappingURL=PneField.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PneField.js","sourceRoot":"","sources":["../../src/component/PneField.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAY,UAAU,EAAC,MAAM,OAAO,CAAA;AAClD,OAAO,EAAC,WAAW,EAAoB,cAAc,EAAE,SAAS,EAAU,MAAM,eAAe,CAAA;AAkB/F,MAAM,QAAQ,GAAG,UAAU,CAAgC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;IACtE,MAAM,EACF,QAAQ,EACR,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,EAAE,EACF,GAAG,IAAI,EACV,GAAG,KAAK,CAAA;IAET,MAAM,YAAY,GAAG,UAAU,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC,CAAC,SAAS,CAAA;IAEvE,OAAO,oBAAC,WAAW,IACf,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,SAAS,EACpB,EAAE,EAAE,EAAE,EACN,QAAQ,EAAE,QAAQ,EAClB,GAAG,EAAE,GAAG,EACR,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,KAAK;YACF,CAAC,CAAC,oBAAC,SAAS,IACR,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,QAAQ,EAClB,EAAE,EAAE;oBACA;wBACI,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,gBAAgB;wBAC9C,QAAQ,EAAE,UAAU;wBACpB,UAAU,EAAE,MAAM;wBAClB,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;iBACpD,IAEA,KAAK,CACE;YACZ,CAAC,CAAC,IAAI;QACT,QAAQ;QACR,UAAU;YACP,CAAC,CAAC,oBAAC,cAAc,IACb,EAAE,EAAE,YAAY,EAChB,EAAE,EAAE;oBACA;wBACI,EAAE,EAAE,CAAC;qBACR;oBACD,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;iBACnE,IAEA,UAAU,CACE;YACjB,CAAC,CAAC,IAAI,CACA,CAAA;AAClB,CAAC,CAAC,CAAA;AAEF,eAAe,QAAQ,CAAA"}
@@ -1,4 +1,6 @@
1
1
  import React from 'react';
2
2
  import { SwitchProps } from '@mui/material';
3
+ export type PneSwitchSize = NonNullable<SwitchProps['size']>;
4
+ export type PneSwitchProps = SwitchProps;
3
5
  declare const PneSwitch: React.ForwardRefExoticComponent<Omit<SwitchProps, "ref"> & React.RefAttributes<HTMLButtonElement>>;
4
6
  export default PneSwitch;
@@ -1,11 +1,168 @@
1
1
  import React, { forwardRef } from 'react';
2
2
  import { Switch } from '@mui/material';
3
+ import { alpha } from '@mui/material/styles';
3
4
  const PneSwitch = forwardRef((props, ref) => {
4
- const { sx, size = 'small', ...rest } = props;
5
+ const { sx, size = 'medium', ...rest } = props;
5
6
  const _sx = [
7
+ switchSxBySize[size],
6
8
  ...(Array.isArray(sx) ? sx : [sx]),
7
9
  ];
8
10
  return React.createElement(Switch, { sx: _sx, size: size, ...rest, ref: ref });
9
11
  });
12
+ const createSwitchSx = (config) => theme => {
13
+ const trackFeedbackColor = alpha(theme.palette.primary.main, 0.1);
14
+ return {
15
+ width: config.rootWidth,
16
+ height: config.rootHeight,
17
+ padding: 0,
18
+ overflow: 'visible',
19
+ '&:hover .MuiSwitch-track::before, & .MuiSwitch-switchBase:hover + .MuiSwitch-track::before': {
20
+ boxShadow: `0 0 0 2px ${trackFeedbackColor}`,
21
+ opacity: 1,
22
+ transform: 'scale(1)',
23
+ },
24
+ '&:active .MuiSwitch-track::before, & .MuiSwitch-switchBase:active + .MuiSwitch-track::before': {
25
+ boxShadow: `0 0 0 ${config.pressedOutlineWidth}px ${trackFeedbackColor}`,
26
+ opacity: 1,
27
+ transform: 'scale(1)',
28
+ transitionDuration: '80ms',
29
+ },
30
+ '& .MuiSwitch-switchBase': {
31
+ top: config.trackTop,
32
+ left: config.trackLeft,
33
+ padding: `${config.thumbPadding}px`,
34
+ color: '#fff',
35
+ '&.Mui-checked': {
36
+ transform: `translateX(${config.checkedShift}px)`,
37
+ color: '#fff',
38
+ '& + .MuiSwitch-track': {
39
+ backgroundColor: 'primary.main',
40
+ opacity: 1,
41
+ },
42
+ },
43
+ '&:hover + .MuiSwitch-track': {
44
+ backgroundColor: '#5E7594',
45
+ opacity: 1,
46
+ },
47
+ '&.Mui-checked:hover + .MuiSwitch-track': {
48
+ backgroundColor: 'primary.dark',
49
+ opacity: 1,
50
+ },
51
+ '&.Mui-disabled': {
52
+ color: '#fff',
53
+ opacity: 1,
54
+ '& .MuiSwitch-thumb': {
55
+ backgroundColor: '#fff',
56
+ },
57
+ '& + .MuiSwitch-track': {
58
+ backgroundColor: '#E6E6E6',
59
+ opacity: 1,
60
+ },
61
+ '& + .MuiSwitch-track::before': {
62
+ boxShadow: 'none',
63
+ opacity: 0,
64
+ transform: 'scale(1)',
65
+ },
66
+ },
67
+ '&.Mui-checked.Mui-disabled + .MuiSwitch-track': {
68
+ backgroundColor: '#E6E6E6',
69
+ opacity: 1,
70
+ },
71
+ '&.Mui-checked.Mui-disabled .MuiSwitch-thumb': {
72
+ backgroundColor: '#fff',
73
+ },
74
+ '&.Mui-checked.Mui-disabled': {
75
+ color: '#fff',
76
+ opacity: 1,
77
+ '& + .MuiSwitch-track': {
78
+ backgroundColor: '#E6E6E6',
79
+ opacity: 1,
80
+ },
81
+ '& + .MuiSwitch-track::before': {
82
+ boxShadow: 'none',
83
+ opacity: 0,
84
+ transform: 'scale(1)',
85
+ },
86
+ },
87
+ '&.Mui-disabled:hover + .MuiSwitch-track': {
88
+ backgroundColor: '#E6E6E6',
89
+ opacity: 1,
90
+ },
91
+ '&.Mui-checked.Mui-disabled:hover + .MuiSwitch-track': {
92
+ backgroundColor: '#E6E6E6',
93
+ opacity: 1,
94
+ },
95
+ '&.Mui-focusVisible:not(.Mui-disabled) + .MuiSwitch-track::before': {
96
+ boxShadow: `0 0 0 ${config.focusOutlineWidth}px ${trackFeedbackColor}`,
97
+ opacity: 1,
98
+ transform: 'scale(1)',
99
+ },
100
+ },
101
+ '&:active .MuiSwitch-switchBase.Mui-focusVisible:not(.Mui-disabled) + .MuiSwitch-track::before, & .MuiSwitch-switchBase.Mui-focusVisible:not(.Mui-disabled):active + .MuiSwitch-track::before': {
102
+ boxShadow: `0 0 0 ${config.pressedOutlineWidth}px ${trackFeedbackColor}`,
103
+ opacity: 1,
104
+ transform: 'scale(1)',
105
+ transitionDuration: '80ms',
106
+ },
107
+ '& .MuiSwitch-thumb': {
108
+ width: config.thumbSize,
109
+ height: config.thumbSize,
110
+ borderRadius: '50%',
111
+ boxShadow: '0px 1px 4px rgba(0, 0, 0, 0.2)',
112
+ },
113
+ '& .MuiSwitch-track': {
114
+ position: 'absolute',
115
+ top: config.trackTop,
116
+ left: config.trackLeft,
117
+ width: config.trackWidth,
118
+ height: config.trackHeight,
119
+ borderRadius: 40,
120
+ backgroundColor: '#809EAE',
121
+ opacity: 1,
122
+ overflow: 'visible',
123
+ '&::before': {
124
+ borderRadius: 'inherit',
125
+ boxShadow: 'none',
126
+ boxSizing: 'border-box',
127
+ content: '""',
128
+ inset: 0,
129
+ opacity: 0,
130
+ pointerEvents: 'none',
131
+ position: 'absolute',
132
+ transform: 'scale(1)',
133
+ transformOrigin: 'center',
134
+ transition: 'box-shadow 150ms cubic-bezier(0.4, 0, 0.2, 1), opacity 150ms cubic-bezier(0.4, 0, 0.2, 1), transform 150ms cubic-bezier(0.4, 0, 0.2, 1)',
135
+ },
136
+ },
137
+ };
138
+ };
139
+ const switchSxBySize = {
140
+ small: createSwitchSx({
141
+ rootWidth: 40,
142
+ rootHeight: 24,
143
+ trackLeft: 8,
144
+ trackTop: 4,
145
+ trackWidth: 24,
146
+ trackHeight: 16,
147
+ thumbSize: 12,
148
+ thumbPadding: 2,
149
+ checkedShift: 8,
150
+ focusOutlineWidth: 2,
151
+ pressedOutlineWidth: 4,
152
+ }),
153
+ medium: createSwitchSx({
154
+ rootWidth: 58,
155
+ rootHeight: 32,
156
+ trackLeft: 12,
157
+ trackTop: 5,
158
+ trackWidth: 34,
159
+ trackHeight: 22,
160
+ thumbSize: 16,
161
+ thumbPadding: 3,
162
+ checkedShift: 12,
163
+ focusOutlineWidth: 4,
164
+ pressedOutlineWidth: 6,
165
+ }),
166
+ };
10
167
  export default PneSwitch;
11
168
  //# sourceMappingURL=PneSwitch.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PneSwitch.js","sourceRoot":"","sources":["../../src/component/PneSwitch.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAC,UAAU,EAAM,MAAM,OAAO,CAAA;AAC5C,OAAO,EAAC,MAAM,EAAuB,MAAM,eAAe,CAAA;AAE1D,MAAM,SAAS,GAAG,UAAU,CAAC,CACzB,KAAkB,EAClB,GAA2B,EAC7B,EAAE;IACA,MAAM,EACF,EAAE,EACF,IAAI,GAAG,OAAO,EACd,GAAG,IAAI,EACV,GAAG,KAAK,CAAA;IAET,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;IAED,OAAO,oBAAC,MAAM,IAAC,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,KAAM,IAAI,EAAE,GAAG,EAAE,GAAG,GAAG,CAAA;AAC7D,CAAC,CAAC,CAAA;AAEF,eAAe,SAAS,CAAA"}
1
+ {"version":3,"file":"PneSwitch.js","sourceRoot":"","sources":["../../src/component/PneSwitch.tsx"],"names":[],"mappings":"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"}
@@ -2,10 +2,11 @@ import React, { ReactNode } from 'react';
2
2
  import { SelectProps, SelectVariants } from '@mui/material';
3
3
  import { PneDropdownChoice } from '../../common/paynet/dropdown';
4
4
  import { SelectOption } from '../../common/pne/type';
5
- export interface IProps<T extends PneDropdownChoice> extends Omit<SelectProps<T>, 'children' | 'onChange' | 'variant'> {
5
+ export interface IProps<T extends PneDropdownChoice> extends Omit<SelectProps<T>, 'children' | 'onChange' | 'placeholder' | 'variant'> {
6
6
  options: readonly T[];
7
7
  onChange: (option: T) => void;
8
8
  getOptionLabel?: (option: SelectOption) => ReactNode;
9
+ placeholder?: ReactNode;
9
10
  variant?: SelectVariants;
10
11
  disableMenuItem?: (option: SelectOption) => boolean;
11
12
  }
@@ -1,22 +1,57 @@
1
- import React, { forwardRef } from 'react';
2
- import { FormControl, InputLabel, MenuItem, Select } from '@mui/material';
1
+ import React, { forwardRef, useId } from 'react';
2
+ import { Box, FormControl, InputLabel, MenuItem, Select } from '@mui/material';
3
3
  import { assertObject, ensure, exhaustiveCheck } from '../../common/pne/type';
4
4
  import { isAbstractEntity, isIAutoCompleteChoice } from '../../common/paynet/type';
5
5
  const PneSelect = forwardRef((props, ref) => {
6
- const { options, onChange, size = 'small', getOptionLabel = createDefaultOptionLabel, variant = 'outlined', disableMenuItem, label, disabled, error, required, sx, ...rest } = props;
6
+ const { options, onChange, size = 'small', getOptionLabel = createDefaultOptionLabel, variant = 'outlined', disableMenuItem, label, disabled, error, required, sx, displayEmpty, placeholder, renderValue, ...rest } = props;
7
+ const labelId = useId();
8
+ const hasLabel = label !== undefined && label !== null && label !== '';
9
+ const mappedOptions = options.map(mapChoiceToSelectOption);
7
10
  const handleChange = (event) => {
8
11
  const value = event.target.value;
9
12
  onChange(ensure(options.find(opt => mapChoiceToSelectOption(opt).value === value)));
10
13
  };
11
14
  const optionsPresent = options?.length > 0;
15
+ const shouldRenderPlaceholder = placeholder !== undefined && placeholder !== null;
16
+ const renderSelectedValue = (selected) => {
17
+ if (isEmptyValue(selected)) {
18
+ return React.createElement(Box, { component: 'span', sx: { color: 'text.secondary' } }, placeholder);
19
+ }
20
+ if (Array.isArray(selected)) {
21
+ return selected.map((value, index) => React.createElement(React.Fragment, { key: String(value) },
22
+ index > 0 ? ', ' : null,
23
+ renderSingleSelectedValue(value, mappedOptions, getOptionLabel)));
24
+ }
25
+ return renderSingleSelectedValue(selected, mappedOptions, getOptionLabel);
26
+ };
12
27
  return React.createElement(FormControl, { size: size, variant: variant, disabled: disabled, error: error, required: required, sx: sx, fullWidth: true },
13
- React.createElement(InputLabel, { id: "select-label" }, label),
14
- React.createElement(Select, { ref: ref, labelId: "select-label", onChange: handleChange, size: size, variant: variant, label: label, ...rest }, optionsPresent ? options.map(mapChoiceToSelectOption).map(option => React.createElement(MenuItem, { disabled: disableMenuItem ? disableMenuItem(option) : false, key: option.value, value: option.value }, getOptionLabel(option))) : null));
28
+ hasLabel ? React.createElement(InputLabel, { id: labelId }, label) : null,
29
+ React.createElement(Select, { ref: ref, displayEmpty: displayEmpty ?? shouldRenderPlaceholder, labelId: hasLabel ? labelId : undefined, onChange: handleChange, size: size, variant: variant, label: hasLabel ? label : undefined, renderValue: renderValue ?? (shouldRenderPlaceholder ? renderSelectedValue : undefined), ...rest }, optionsPresent ? mappedOptions.map(option => React.createElement(MenuItem, { disabled: disableMenuItem ? disableMenuItem(option) : false, key: option.value, value: option.value }, getOptionLabel(option))) : null));
15
30
  });
16
31
  export default PneSelect;
17
32
  const createDefaultOptionLabel = (option) => {
18
33
  return option.label;
19
34
  };
35
+ const isEmptyValue = (value) => {
36
+ return value === '' || value === undefined || value === null
37
+ || (Array.isArray(value) && value.length === 0);
38
+ };
39
+ const renderSingleSelectedValue = (value, options, getOptionLabel) => {
40
+ const option = options.find(option => option.value === value);
41
+ if (option) {
42
+ return getOptionLabel(option);
43
+ }
44
+ if (typeof value === 'string' || typeof value === 'number') {
45
+ return value;
46
+ }
47
+ if (isIAutoCompleteChoice(value)) {
48
+ return value.displayName;
49
+ }
50
+ if (isAbstractEntity(value)) {
51
+ return value.displayName;
52
+ }
53
+ return '';
54
+ };
20
55
  const mapChoiceToSelectOption = (choice) => {
21
56
  if (typeof choice === 'string') {
22
57
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"PneSelect.js","sourceRoot":"","sources":["../../../src/component/dropdown/PneSelect.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PneSelect.js","sourceRoot":"","sources":["../../../src/component/dropdown/PneSelect.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAC,UAAU,EAAa,KAAK,EAAC,MAAM,OAAO,CAAA;AACzD,OAAO,EAAC,GAAG,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAiD,MAAM,eAAe,CAAA;AAE5H,OAAO,EAAC,YAAY,EAAE,MAAM,EAAE,eAAe,EAAe,MAAM,uBAAuB,CAAA;AACzF,OAAO,EAAC,gBAAgB,EAAE,qBAAqB,EAAC,MAAM,0BAA0B,CAAA;AAYhF,MAAM,SAAS,GAAG,UAAU,CAAC,CACzB,KAAgB,EAChB,GAAiC,EACnC,EAAE;IACA,MAAM,EACF,OAAO,EACP,QAAQ,EACR,IAAI,GAAG,OAAO,EACd,cAAc,GAAG,wBAAwB,EACzC,OAAO,GAAG,UAAU,EACpB,eAAe,EACf,KAAK,EACL,QAAQ,EACR,KAAK,EACL,QAAQ,EACR,EAAE,EACF,YAAY,EACZ,WAAW,EACX,WAAW,EACX,GAAG,IAAI,EACV,GAAG,KAAK,CAAA;IAET,MAAM,OAAO,GAAG,KAAK,EAAE,CAAA;IACvB,MAAM,QAAQ,GAAG,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE,CAAA;IACtE,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAA;IAE1D,MAAM,YAAY,GAAG,CAAC,KAA2B,EAAE,EAAE;QACjD,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAA;QAEhC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CACxB,GAAG,CAAC,EAAE,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CACtD,CAAC,CAAC,CAAA;IACP,CAAC,CAAA;IAED,MAAM,cAAc,GAAG,OAAO,EAAE,MAAM,GAAG,CAAC,CAAA;IAC1C,MAAM,uBAAuB,GAAG,WAAW,KAAK,SAAS,IAAI,WAAW,KAAK,IAAI,CAAA;IAEjF,MAAM,mBAAmB,GAAG,CAAC,QAAW,EAAE,EAAE;QACxC,IAAI,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzB,OAAO,oBAAC,GAAG,IACP,SAAS,EAAC,MAAM,EAChB,EAAE,EAAE,EAAC,KAAK,EAAE,gBAAgB,EAAC,IAE5B,WAAW,CACV,CAAA;QACV,CAAC;QAED,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,oBAAC,KAAK,CAAC,QAAQ,IAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC;gBACnE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI;gBACvB,yBAAyB,CAAC,KAAK,EAAE,aAAa,EAAE,cAAc,CAAC,CACnD,CAAC,CAAA;QACtB,CAAC;QAED,OAAO,yBAAyB,CAAC,QAAQ,EAAE,aAAa,EAAE,cAAc,CAAC,CAAA;IAC7E,CAAC,CAAA;IAED,OAAO,oBAAC,WAAW,IACf,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,EAClB,EAAE,EAAE,EAAE,EACN,SAAS;QAER,QAAQ,CAAC,CAAC,CAAC,oBAAC,UAAU,IAAC,EAAE,EAAE,OAAO,IAAG,KAAK,CAAc,CAAC,CAAC,CAAC,IAAI;QAChE,oBAAC,MAAM,IACH,GAAG,EAAE,GAAG,EACR,YAAY,EAAE,YAAY,IAAI,uBAAuB,EACrD,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EACvC,QAAQ,EAAE,YAAY,EACtB,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,EACnC,WAAW,EAAE,WAAW,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,SAAS,CAAC,KACnF,IAAI,IAEP,cAAc,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CACzC,oBAAC,QAAQ,IACL,QAAQ,EAAE,eAAe,CAAC,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,EAC3D,GAAG,EAAE,MAAM,CAAC,KAAK,EACjB,KAAK,EAAE,MAAM,CAAC,KAAK,IAElB,cAAc,CAAC,MAAM,CAAC,CAChB,CAAC,CAAC,CAAC,CAAC,IAAI,CAClB,CACC,CAAA;AAClB,CAAC,CAAC,CAAA;AAEF,eAAe,SAAS,CAAA;AAExB,MAAM,wBAAwB,GAAG,CAAC,MAAoB,EAAa,EAAE;IACjE,OAAO,MAAM,CAAC,KAAK,CAAA;AACvB,CAAC,CAAA;AAED,MAAM,YAAY,GAAG,CAAC,KAAc,EAAW,EAAE;IAC7C,OAAO,KAAK,KAAK,EAAE,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;WACrD,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAA;AACvD,CAAC,CAAA;AAED,MAAM,yBAAyB,GAAG,CAC9B,KAAc,EACd,OAAuB,EACvB,cAAmD,EAC1C,EAAE;IACX,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,KAAK,KAAK,CAAC,CAAA;IAE7D,IAAI,MAAM,EAAE,CAAC;QACT,OAAO,cAAc,CAAC,MAAM,CAAC,CAAA;IACjC,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACzD,OAAO,KAAK,CAAA;IAChB,CAAC;IAED,IAAI,qBAAqB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,KAAK,CAAC,WAAW,CAAA;IAC5B,CAAC;IAED,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAC,WAAW,CAAA;IAC5B,CAAC;IAED,OAAO,EAAE,CAAA;AACb,CAAC,CAAA;AAED,MAAM,uBAAuB,GAAG,CAA8B,MAAS,EAAgB,EAAE;IACrF,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC7B,OAAO;YACH,KAAK,EAAE,MAAM;YACb,KAAK,EAAE,MAAM;SAChB,CAAA;IACL,CAAC;IAED,YAAY,CAAC,MAAM,CAAC,CAAA;IACpB,IAAI,qBAAqB,CAAC,MAAM,CAAC,EAAE,CAAC;QAChC,OAAO;YACH,KAAK,EAAE,MAAM,CAAC,QAAQ;YACtB,KAAK,EAAE,MAAM,CAAC,WAAW;SAC5B,CAAA;IACL,CAAC;SAAM,IAAI,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;QAClC,OAAO;YACH,KAAK,EAAE,MAAM,CAAC,EAAE;YAChB,KAAK,EAAE,MAAM,CAAC,WAAW;SAC5B,CAAA;IACL,CAAC;IAED,eAAe,CAAC,MAAM,CAAC,CAAA;IAEvB,MAAM,IAAI,SAAS,CAAC,wCAAwC;UACtD,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CACpC,CAAA;AACL,CAAC,CAAA"}
@@ -1,4 +1,6 @@
1
1
  export { default as PneTextField } from '../component/PneTextField';
2
+ export { default as PneField } from '../component/PneField';
3
+ export type { PneFieldProps } from '../component/PneField';
2
4
  export { default as PneAutocomplete } from '../component/dropdown/PneAutocomplete';
3
5
  export { default as PneAsyncAutocomplete } from '../component/dropdown/PneAsyncAutocomplete';
4
6
  export type { PneAsyncAutocompleteProps } from '../component/dropdown/PneAsyncAutocomplete';
@@ -8,3 +10,4 @@ export { PneCheckbox } from '../component/PneCheckbox';
8
10
  export { PneLabeledCheckbox } from '../component/PneLabeledCheckbox';
9
11
  export { PneHighContrastLabeledCheckbox } from '../component/PneHighContrastLabeledCheckbox';
10
12
  export { default as PneSwitch } from '../component/PneSwitch';
13
+ export type { PneSwitchProps, PneSwitchSize } from '../component/PneSwitch';
@@ -1,4 +1,5 @@
1
1
  export { default as PneTextField } from '../component/PneTextField';
2
+ export { default as PneField } from '../component/PneField';
2
3
  export { default as PneAutocomplete } from '../component/dropdown/PneAutocomplete';
3
4
  export { default as PneAsyncAutocomplete } from '../component/dropdown/PneAsyncAutocomplete';
4
5
  export { default as PneSelect } from '../component/dropdown/PneSelect';
@@ -1 +1 @@
1
- {"version":3,"file":"inputs.js","sourceRoot":"","sources":["../../src/exports/inputs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,2BAA2B,CAAA;AACnE,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,uCAAuC,CAAA;AAClF,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,4CAA4C,CAAA;AAE5F,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,iCAAiC,CAAA;AAGtE,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAA;AACpE,OAAO,EAAE,8BAA8B,EAAE,MAAM,6CAA6C,CAAA;AAC5F,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,wBAAwB,CAAA"}
1
+ {"version":3,"file":"inputs.js","sourceRoot":"","sources":["../../src/exports/inputs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,2BAA2B,CAAA;AACnE,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAE3D,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,uCAAuC,CAAA;AAClF,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,4CAA4C,CAAA;AAE5F,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,iCAAiC,CAAA;AAGtE,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAA;AACpE,OAAO,EAAE,8BAA8B,EAAE,MAAM,6CAA6C,CAAA;AAC5F,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,wBAAwB,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pne-ui",
3
- "version": "4.0.18",
3
+ "version": "4.0.20",
4
4
  "description": "",
5
5
  "repository": {
6
6
  "type": "git",