@teambit/compositions 1.0.871 → 1.0.873
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/dist/{preview-1769025010676.js → preview-1769133677839.js} +2 -2
- package/dist/ui/compositions-panel/live-control-input.js +85 -29
- package/dist/ui/compositions-panel/live-control-input.js.map +1 -1
- package/dist/ui/compositions-panel/live-control-input.module.scss +18 -0
- package/dist/ui/compositions-panel/live-control-panel.js +1 -4
- package/dist/ui/compositions-panel/live-control-panel.js.map +1 -1
- package/dist/ui/compositions-panel/live-control-panel.module.scss +1 -0
- package/dist/ui/compositions-panel/overlay.module.scss +15 -0
- package/dist/ui/compositions-panel/use-overlay.d.ts +16 -0
- package/dist/ui/compositions-panel/use-overlay.js +59 -0
- package/dist/ui/compositions-panel/use-overlay.js.map +1 -0
- package/package.json +14 -12
- package/ui/compositions-panel/live-control-input.module.scss +18 -0
- package/ui/compositions-panel/live-control-input.tsx +86 -38
- package/ui/compositions-panel/live-control-panel.module.scss +1 -0
- package/ui/compositions-panel/live-control-panel.tsx +1 -4
- package/ui/compositions-panel/overlay.module.scss +15 -0
- package/ui/compositions-panel/use-overlay.ts +53 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import * as compositions_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad/teambit.compositions_compositions@1.0.
|
|
2
|
-
import * as overview_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad/teambit.compositions_compositions@1.0.
|
|
1
|
+
import * as compositions_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad/teambit.compositions_compositions@1.0.873/dist/compositions.composition.js';
|
|
2
|
+
import * as overview_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad/teambit.compositions_compositions@1.0.873/dist/compositions.docs.mdx';
|
|
3
3
|
|
|
4
4
|
export const compositions = [compositions_0];
|
|
5
5
|
export const overview = [overview_0];
|
|
@@ -67,6 +67,13 @@ function _designInputs5() {
|
|
|
67
67
|
};
|
|
68
68
|
return data;
|
|
69
69
|
}
|
|
70
|
+
function _useOverlay() {
|
|
71
|
+
const data = require("./use-overlay");
|
|
72
|
+
_useOverlay = function () {
|
|
73
|
+
return data;
|
|
74
|
+
};
|
|
75
|
+
return data;
|
|
76
|
+
}
|
|
70
77
|
function _liveControlInputModule() {
|
|
71
78
|
const data = _interopRequireDefault(require("./live-control-input.module.scss"));
|
|
72
79
|
_liveControlInputModule = function () {
|
|
@@ -74,9 +81,15 @@ function _liveControlInputModule() {
|
|
|
74
81
|
};
|
|
75
82
|
return data;
|
|
76
83
|
}
|
|
84
|
+
function _overlayModule() {
|
|
85
|
+
const data = _interopRequireDefault(require("./overlay.module.scss"));
|
|
86
|
+
_overlayModule = function () {
|
|
87
|
+
return data;
|
|
88
|
+
};
|
|
89
|
+
return data;
|
|
90
|
+
}
|
|
77
91
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
78
|
-
/* eslint-disable no-console */
|
|
79
|
-
|
|
92
|
+
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } /* eslint-disable no-console */
|
|
80
93
|
function ShortTextInput({
|
|
81
94
|
value,
|
|
82
95
|
onChange
|
|
@@ -119,37 +132,50 @@ function SelectInput({
|
|
|
119
132
|
meta
|
|
120
133
|
}) {
|
|
121
134
|
const [selectedValue, setSelectedValue] = _react().default.useState(value || '');
|
|
135
|
+
const [open, setOpen] = _react().default.useState(false);
|
|
136
|
+
const triggerRef = _react().default.useRef(null);
|
|
122
137
|
_react().default.useEffect(() => {
|
|
123
138
|
setSelectedValue(value || '');
|
|
124
139
|
}, [value]);
|
|
125
|
-
const handleChange = newValue => {
|
|
126
|
-
onChange(newValue || '');
|
|
127
|
-
setSelectedValue(newValue || '');
|
|
128
|
-
};
|
|
129
140
|
const options = _react().default.useMemo(() => {
|
|
130
|
-
if (!meta
|
|
131
|
-
return meta.options.map(
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
value: option
|
|
136
|
-
};
|
|
137
|
-
}
|
|
138
|
-
return option;
|
|
139
|
-
});
|
|
141
|
+
if (!meta?.options) return [];
|
|
142
|
+
return meta.options.map(o => typeof o === 'string' ? {
|
|
143
|
+
label: o,
|
|
144
|
+
value: o
|
|
145
|
+
} : o);
|
|
140
146
|
}, [meta]);
|
|
141
147
|
const placeholderContent = options.find(o => o.value === selectedValue)?.label;
|
|
148
|
+
const {
|
|
149
|
+
position,
|
|
150
|
+
style
|
|
151
|
+
} = (0, _useOverlay().useOverlay)(triggerRef, open, 0, {
|
|
152
|
+
paddingTop: 8,
|
|
153
|
+
paddingBottom: 8
|
|
154
|
+
});
|
|
155
|
+
const commitSelection = v => {
|
|
156
|
+
onChange(v);
|
|
157
|
+
setSelectedValue(v);
|
|
158
|
+
setOpen(false);
|
|
159
|
+
};
|
|
142
160
|
return /*#__PURE__*/_react().default.createElement("p", {
|
|
161
|
+
ref: triggerRef,
|
|
143
162
|
className: (0, _classnames().default)(_liveControlInputModule().default.wrapper)
|
|
144
163
|
}, /*#__PURE__*/_react().default.createElement(_designInputs3().Dropdown, {
|
|
145
|
-
placeholderContent: placeholderContent
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
164
|
+
placeholderContent: placeholderContent,
|
|
165
|
+
open: open,
|
|
166
|
+
onChange: (_, isOpen) => setOpen(isOpen),
|
|
167
|
+
position: position,
|
|
168
|
+
dropClass: _overlayModule().default.suppressNativeMenu
|
|
169
|
+
}), open && style && /*#__PURE__*/_react().default.createElement(_useOverlay().BitPortal, null, /*#__PURE__*/_react().default.createElement("div", {
|
|
170
|
+
className: _overlayModule().default.overlay,
|
|
171
|
+
style: style,
|
|
172
|
+
onMouseDown: e => e.stopPropagation()
|
|
173
|
+
}, options.map(option => /*#__PURE__*/_react().default.createElement(_designInputsSelectors().MenuItem, {
|
|
174
|
+
className: _liveControlInputModule().default.portalMenuItem,
|
|
175
|
+
key: option.value,
|
|
176
|
+
active: option.value === selectedValue,
|
|
177
|
+
onClick: () => commitSelection(option.value)
|
|
178
|
+
}, option.label)))));
|
|
153
179
|
}
|
|
154
180
|
function NumberInput({
|
|
155
181
|
value,
|
|
@@ -176,6 +202,36 @@ function NumberInput({
|
|
|
176
202
|
onChange: handleChange
|
|
177
203
|
});
|
|
178
204
|
}
|
|
205
|
+
function ColorPickerPortal(props) {
|
|
206
|
+
const [open, setOpen] = _react().default.useState(false);
|
|
207
|
+
const triggerRef = _react().default.useRef(null);
|
|
208
|
+
const {
|
|
209
|
+
position,
|
|
210
|
+
style
|
|
211
|
+
} = (0, _useOverlay().useOverlay)(triggerRef, open, 4, {
|
|
212
|
+
padding: 16
|
|
213
|
+
});
|
|
214
|
+
return /*#__PURE__*/_react().default.createElement("div", {
|
|
215
|
+
ref: triggerRef
|
|
216
|
+
}, /*#__PURE__*/_react().default.createElement(_designUiInput().ColorPicker, _extends({}, props, {
|
|
217
|
+
open: open,
|
|
218
|
+
onChange: (_, isOpen) => setOpen(isOpen),
|
|
219
|
+
position: position,
|
|
220
|
+
dropClass: _overlayModule().default.suppressNativeMenu
|
|
221
|
+
})), open && style && /*#__PURE__*/_react().default.createElement(_useOverlay().BitPortal, null, /*#__PURE__*/_react().default.createElement("div", {
|
|
222
|
+
className: _overlayModule().default.overlay,
|
|
223
|
+
style: style,
|
|
224
|
+
onMouseDown: e => e.stopPropagation()
|
|
225
|
+
}, /*#__PURE__*/_react().default.createElement(_designUiInput().ColorsBox, {
|
|
226
|
+
onColorSelect: color => {
|
|
227
|
+
props.onColorSelect?.(color);
|
|
228
|
+
setOpen(false);
|
|
229
|
+
},
|
|
230
|
+
colorsList: props.colorsList,
|
|
231
|
+
showNoColor: props.showNoColor,
|
|
232
|
+
selected: props.value ?? ''
|
|
233
|
+
}))));
|
|
234
|
+
}
|
|
179
235
|
function ColorInput({
|
|
180
236
|
value,
|
|
181
237
|
onChange
|
|
@@ -184,13 +240,13 @@ function ColorInput({
|
|
|
184
240
|
_react().default.useEffect(() => {
|
|
185
241
|
setInputValue(value || '');
|
|
186
242
|
}, [value]);
|
|
187
|
-
const handleChange =
|
|
188
|
-
onChange(
|
|
189
|
-
setInputValue(
|
|
243
|
+
const handleChange = v => {
|
|
244
|
+
onChange(v);
|
|
245
|
+
setInputValue(v);
|
|
190
246
|
};
|
|
191
247
|
return /*#__PURE__*/_react().default.createElement("p", {
|
|
192
|
-
className:
|
|
193
|
-
}, /*#__PURE__*/_react().default.createElement(
|
|
248
|
+
className: _liveControlInputModule().default.wrapper
|
|
249
|
+
}, /*#__PURE__*/_react().default.createElement(ColorPickerPortal, {
|
|
194
250
|
value: inputValue,
|
|
195
251
|
onColorSelect: handleChange,
|
|
196
252
|
allowCustomColor: true
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","data","_interopRequireDefault","require","_classnames","_designInputs","_designInputs2","_designInputs3","_designInputsSelectors","_designUiInput","_designInputs4","_designInputs5","_liveControlInputModule","e","__esModule","default","ShortTextInput","value","onChange","inputValue","setInputValue","React","useState","useEffect","handleChange","newValue","target","createElement","InputText","LongTextInput","TextArea","SelectInput","meta","selectedValue","setSelectedValue","options","useMemo","map","option","label","placeholderContent","find","o","className","classNames","styles","wrapper","Dropdown","MenuItem","active","key","onClick","NumberInput","isNaN","Number","console","error","type","ColorInput","ColorPicker","onColorSelect","allowCustomColor","DateInput","Date","toISOString","split","DatePicker","date","ToggleInput","isChecked","setIsChecked","Toggle","defaultChecked","JsonInput","JSON","stringify","message","setMessage","parsedValue","parse","style","color","getInputComponent","warn"],"sources":["live-control-input.tsx"],"sourcesContent":["/* eslint-disable no-console */\n\nimport React from 'react';\nimport classNames from 'classnames';\n\nimport { InputText } from '@teambit/design.inputs.input-text';\nimport { TextArea } from '@teambit/design.inputs.text-area';\nimport { Dropdown } from '@teambit/design.inputs.dropdown';\nimport { MenuItem } from '@teambit/design.inputs.selectors.menu-item';\nimport { ColorPicker } from '@teambit/design.ui.input.color-picker';\nimport { DatePicker } from '@teambit/design.inputs.date-picker';\nimport { Toggle } from '@teambit/design.inputs.toggle-switch';\n\nimport { type SelectOption } from '@teambit/compositions.ui.composition-live-controls';\n\nimport styles from './live-control-input.module.scss';\n\ntype InputComponentProps = {\n id: string;\n value: any;\n onChange: (value: any) => void;\n meta?: any;\n};\n\ntype InputComponent = React.FC<InputComponentProps>;\n\nfunction ShortTextInput({ value, onChange }: InputComponentProps) {\n const [inputValue, setInputValue] = React.useState(value || '');\n\n React.useEffect(() => {\n setInputValue(value || '');\n }, [value]);\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value;\n onChange(newValue || '');\n setInputValue(newValue || '');\n };\n\n return <InputText value={inputValue} onChange={handleChange} />;\n}\n\nfunction LongTextInput({ value, onChange }: InputComponentProps) {\n const [inputValue, setInputValue] = React.useState(value || '');\n\n React.useEffect(() => {\n setInputValue(value || '');\n }, [value]);\n\n const handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n const newValue = e.target.value;\n onChange(newValue || '');\n setInputValue(newValue || '');\n };\n\n return <TextArea value={inputValue} onChange={handleChange} />;\n}\n\nfunction SelectInput({ value, onChange, meta }: InputComponentProps) {\n const [selectedValue, setSelectedValue] = React.useState(value || '');\n\n React.useEffect(() => {\n setSelectedValue(value || '');\n }, [value]);\n\n const handleChange = (newValue: any) => {\n onChange(newValue || '');\n setSelectedValue(newValue || '');\n };\n\n const options: {\n label: string;\n value: string;\n }[] = React.useMemo(() => {\n if (!meta || !meta.options) return [];\n return meta.options.map((option: SelectOption) => {\n if (typeof option === 'string') {\n return { label: option, value: option };\n }\n return option;\n });\n }, [meta]);\n\n const placeholderContent = options.find((o) => o.value === selectedValue)?.label;\n\n return (\n <p className={classNames(styles.wrapper)}>\n <Dropdown placeholderContent={placeholderContent}>\n {options.map((option) => {\n return (\n <MenuItem\n active={option.value === selectedValue}\n key={option.value}\n onClick={() => handleChange(option.value)}\n >\n {option.label}\n </MenuItem>\n );\n })}\n </Dropdown>\n </p>\n );\n}\n\nfunction NumberInput({ value, onChange }: InputComponentProps) {\n const [inputValue, setInputValue] = React.useState(value || 0);\n\n React.useEffect(() => {\n setInputValue(value || 0);\n }, [value]);\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value;\n if (!isNaN(Number(newValue))) {\n onChange(Number(newValue) || 0);\n setInputValue(Number(newValue) || 0);\n } else {\n // TODO: render error message\n // eslint-disable-next-line no-console\n console.error('Invalid number input', newValue);\n }\n };\n\n return <InputText type=\"number\" value={inputValue} onChange={handleChange} />;\n}\n\nfunction ColorInput({ value, onChange }: InputComponentProps) {\n const [inputValue, setInputValue] = React.useState(value || '');\n\n React.useEffect(() => {\n setInputValue(value || '');\n }, [value]);\n\n const handleChange = (newValue: string) => {\n onChange(newValue || '');\n setInputValue(newValue || '');\n };\n\n return (\n <p className={classNames(styles.wrapper)}>\n <ColorPicker value={inputValue} onColorSelect={handleChange} allowCustomColor />\n </p>\n );\n}\n\nfunction DateInput({ value, onChange }: InputComponentProps) {\n const [inputValue, setInputValue] = React.useState<Date | null>(new Date(value));\n\n React.useEffect(() => {\n setInputValue(new Date(value));\n }, [value]);\n\n const handleChange = (newValue: Date | null) => {\n if (newValue) {\n onChange(newValue.toISOString().split('T')[0]);\n }\n setInputValue(newValue);\n };\n\n return (\n <p className={classNames(styles.wrapper)}>\n <DatePicker date={inputValue} onChange={handleChange} />\n </p>\n );\n}\n\nfunction ToggleInput({ value, onChange }: InputComponentProps) {\n const [isChecked, setIsChecked] = React.useState(!!value);\n\n React.useEffect(() => {\n setIsChecked(!!value);\n }, [value]);\n\n const handleChange = () => {\n setIsChecked(!isChecked);\n onChange(!isChecked);\n };\n\n return (\n <p className={classNames(styles.wrapper)}>\n <Toggle defaultChecked={isChecked} onChange={handleChange} />\n </p>\n );\n}\n\nfunction JsonInput({ value, onChange }: InputComponentProps) {\n const [inputValue, setInputValue] = React.useState(JSON.stringify(value, null, 2));\n\n React.useEffect(() => {\n setInputValue(JSON.stringify(value, null, 2));\n }, [value]);\n\n const [message, setMessage] = React.useState('');\n\n const handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n const newValue = e.target.value;\n try {\n const parsedValue = JSON.parse(newValue);\n onChange(parsedValue);\n setMessage('');\n } catch {\n setMessage('Invalid JSON');\n }\n setInputValue(newValue);\n };\n\n return (\n <div>\n <TextArea value={inputValue} onChange={handleChange} />\n {message && <div style={{ color: 'red' }}>{message}</div>}\n </div>\n );\n}\n\nexport function getInputComponent(type: string): InputComponent {\n switch (type) {\n case 'text':\n return ShortTextInput;\n case 'longtext':\n return LongTextInput;\n case 'select':\n return SelectInput;\n case 'number':\n return NumberInput;\n case 'color':\n return ColorInput;\n case 'date':\n return DateInput;\n case 'boolean':\n return ToggleInput;\n case 'json':\n return JsonInput;\n default:\n // eslint-disable-next-line no-console\n console.warn(`Unknown input type: ${type}`);\n return ShortTextInput;\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_react","data","_interopRequireDefault","require","_classnames","_designInputs","_designInputs2","_designInputs3","_designInputsSelectors","_designUiInput","_designInputs4","_designInputs5","_useOverlay","_liveControlInputModule","_overlayModule","e","__esModule","default","_extends","Object","assign","bind","n","arguments","length","t","r","hasOwnProperty","call","apply","ShortTextInput","value","onChange","inputValue","setInputValue","React","useState","useEffect","handleChange","newValue","target","createElement","InputText","LongTextInput","TextArea","SelectInput","meta","selectedValue","setSelectedValue","open","setOpen","triggerRef","useRef","options","useMemo","map","o","label","placeholderContent","find","position","style","useOverlay","paddingTop","paddingBottom","commitSelection","v","ref","className","classNames","styles","wrapper","Dropdown","_","isOpen","dropClass","overlayStyles","suppressNativeMenu","BitPortal","overlay","onMouseDown","stopPropagation","option","MenuItem","portalMenuItem","key","active","onClick","NumberInput","isNaN","Number","console","error","type","ColorPickerPortal","props","padding","ColorPicker","ColorsBox","onColorSelect","color","colorsList","showNoColor","selected","ColorInput","allowCustomColor","DateInput","Date","toISOString","split","DatePicker","date","ToggleInput","isChecked","setIsChecked","Toggle","defaultChecked","JsonInput","JSON","stringify","message","setMessage","parsedValue","parse","getInputComponent","warn"],"sources":["live-control-input.tsx"],"sourcesContent":["/* eslint-disable no-console */\n\nimport React from 'react';\nimport classNames from 'classnames';\n\nimport { InputText } from '@teambit/design.inputs.input-text';\nimport { TextArea } from '@teambit/design.inputs.text-area';\nimport { Dropdown } from '@teambit/design.inputs.dropdown';\nimport { MenuItem } from '@teambit/design.inputs.selectors.menu-item';\nimport { ColorPicker, ColorsBox } from '@teambit/design.ui.input.color-picker';\nimport { DatePicker } from '@teambit/design.inputs.date-picker';\nimport { Toggle } from '@teambit/design.inputs.toggle-switch';\nimport { useOverlay, BitPortal } from './use-overlay';\n\nimport styles from './live-control-input.module.scss';\nimport overlayStyles from './overlay.module.scss';\n\ntype InputComponentProps = {\n id: string;\n value: any;\n onChange: (value: any) => void;\n meta?: any;\n};\n\ntype InputComponent = React.FC<InputComponentProps>;\n\nfunction ShortTextInput({ value, onChange }: InputComponentProps) {\n const [inputValue, setInputValue] = React.useState(value || '');\n\n React.useEffect(() => {\n setInputValue(value || '');\n }, [value]);\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value;\n onChange(newValue || '');\n setInputValue(newValue || '');\n };\n\n return <InputText value={inputValue} onChange={handleChange} />;\n}\n\nfunction LongTextInput({ value, onChange }: InputComponentProps) {\n const [inputValue, setInputValue] = React.useState(value || '');\n\n React.useEffect(() => {\n setInputValue(value || '');\n }, [value]);\n\n const handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n const newValue = e.target.value;\n onChange(newValue || '');\n setInputValue(newValue || '');\n };\n\n return <TextArea value={inputValue} onChange={handleChange} />;\n}\n\nfunction SelectInput({ value, onChange, meta }: InputComponentProps) {\n const [selectedValue, setSelectedValue] = React.useState(value || '');\n const [open, setOpen] = React.useState(false);\n const triggerRef = React.useRef<HTMLParagraphElement>(null);\n\n React.useEffect(() => {\n setSelectedValue(value || '');\n }, [value]);\n\n const options = React.useMemo(() => {\n if (!meta?.options) return [];\n return meta.options.map((o: any) => (typeof o === 'string' ? { label: o, value: o } : o));\n }, [meta]);\n\n const placeholderContent = options.find((o) => o.value === selectedValue)?.label;\n\n const { position, style } = useOverlay(triggerRef, open, 0, {\n paddingTop: 8,\n paddingBottom: 8,\n });\n\n const commitSelection = (v: string) => {\n onChange(v);\n setSelectedValue(v);\n setOpen(false);\n };\n\n return (\n <p ref={triggerRef} className={classNames(styles.wrapper)}>\n <Dropdown\n placeholderContent={placeholderContent}\n open={open}\n onChange={(_, isOpen) => setOpen(isOpen)}\n position={position}\n dropClass={overlayStyles.suppressNativeMenu}\n />\n\n {open && style && (\n <BitPortal>\n <div className={overlayStyles.overlay} style={style} onMouseDown={(e) => e.stopPropagation()}>\n {options.map((option) => (\n <MenuItem\n className={styles.portalMenuItem}\n key={option.value}\n active={option.value === selectedValue}\n onClick={() => commitSelection(option.value)}\n >\n {option.label}\n </MenuItem>\n ))}\n </div>\n </BitPortal>\n )}\n </p>\n );\n}\n\nfunction NumberInput({ value, onChange }: InputComponentProps) {\n const [inputValue, setInputValue] = React.useState(value || 0);\n\n React.useEffect(() => {\n setInputValue(value || 0);\n }, [value]);\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value;\n if (!isNaN(Number(newValue))) {\n onChange(Number(newValue) || 0);\n setInputValue(Number(newValue) || 0);\n } else {\n // TODO: render error message\n // eslint-disable-next-line no-console\n console.error('Invalid number input', newValue);\n }\n };\n\n return <InputText type=\"number\" value={inputValue} onChange={handleChange} />;\n}\n\nfunction ColorPickerPortal(props: any) {\n const [open, setOpen] = React.useState(false);\n const triggerRef = React.useRef<HTMLDivElement>(null);\n\n const { position, style } = useOverlay(triggerRef, open, 4, {\n padding: 16,\n });\n\n return (\n <div ref={triggerRef}>\n <ColorPicker\n {...props}\n open={open}\n onChange={(_, isOpen) => setOpen(isOpen)}\n position={position}\n dropClass={overlayStyles.suppressNativeMenu}\n />\n\n {open && style && (\n <BitPortal>\n <div className={overlayStyles.overlay} style={style} onMouseDown={(e) => e.stopPropagation()}>\n <ColorsBox\n onColorSelect={(color: string) => {\n props.onColorSelect?.(color);\n setOpen(false);\n }}\n colorsList={props.colorsList}\n showNoColor={props.showNoColor}\n selected={props.value ?? ''}\n />\n </div>\n </BitPortal>\n )}\n </div>\n );\n}\n\nfunction ColorInput({ value, onChange }: InputComponentProps) {\n const [inputValue, setInputValue] = React.useState(value || '');\n\n React.useEffect(() => {\n setInputValue(value || '');\n }, [value]);\n\n const handleChange = (v: string) => {\n onChange(v);\n setInputValue(v);\n };\n\n return (\n <p className={styles.wrapper}>\n <ColorPickerPortal value={inputValue} onColorSelect={handleChange} allowCustomColor />\n </p>\n );\n}\n\nfunction DateInput({ value, onChange }: InputComponentProps) {\n const [inputValue, setInputValue] = React.useState<Date | null>(new Date(value));\n\n React.useEffect(() => {\n setInputValue(new Date(value));\n }, [value]);\n\n const handleChange = (newValue: Date | null) => {\n if (newValue) {\n onChange(newValue.toISOString().split('T')[0]);\n }\n setInputValue(newValue);\n };\n\n return (\n <p className={classNames(styles.wrapper)}>\n <DatePicker date={inputValue} onChange={handleChange} />\n </p>\n );\n}\n\nfunction ToggleInput({ value, onChange }: InputComponentProps) {\n const [isChecked, setIsChecked] = React.useState(!!value);\n\n React.useEffect(() => {\n setIsChecked(!!value);\n }, [value]);\n\n const handleChange = () => {\n setIsChecked(!isChecked);\n onChange(!isChecked);\n };\n\n return (\n <p className={classNames(styles.wrapper)}>\n <Toggle defaultChecked={isChecked} onChange={handleChange} />\n </p>\n );\n}\n\nfunction JsonInput({ value, onChange }: InputComponentProps) {\n const [inputValue, setInputValue] = React.useState(JSON.stringify(value, null, 2));\n\n React.useEffect(() => {\n setInputValue(JSON.stringify(value, null, 2));\n }, [value]);\n\n const [message, setMessage] = React.useState('');\n\n const handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n const newValue = e.target.value;\n try {\n const parsedValue = JSON.parse(newValue);\n onChange(parsedValue);\n setMessage('');\n } catch {\n setMessage('Invalid JSON');\n }\n setInputValue(newValue);\n };\n\n return (\n <div>\n <TextArea value={inputValue} onChange={handleChange} />\n {message && <div style={{ color: 'red' }}>{message}</div>}\n </div>\n );\n}\n\nexport function getInputComponent(type: string): InputComponent {\n switch (type) {\n case 'text':\n return ShortTextInput;\n case 'longtext':\n return LongTextInput;\n case 'select':\n return SelectInput;\n case 'number':\n return NumberInput;\n case 'color':\n return ColorInput;\n case 'date':\n return DateInput;\n case 'boolean':\n return ToggleInput;\n case 'json':\n return JsonInput;\n default:\n // eslint-disable-next-line no-console\n console.warn(`Unknown input type: ${type}`);\n return ShortTextInput;\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,3 +1,21 @@
|
|
|
1
|
+
@import '@teambit/ui-foundation.ui.constants.z-indexes/z-indexes.module.scss';
|
|
2
|
+
|
|
1
3
|
.wrapper {
|
|
2
4
|
padding: 4px 0;
|
|
3
5
|
}
|
|
6
|
+
|
|
7
|
+
.portalMenu {
|
|
8
|
+
max-height: 240px;
|
|
9
|
+
overflow-y: auto;
|
|
10
|
+
background: var(--surface-neutral-color, #fff);
|
|
11
|
+
border: 1px solid var(--border-medium-color, #ededed);
|
|
12
|
+
border-radius: 8px;
|
|
13
|
+
box-shadow: var(--bit-shadow-hover-low);
|
|
14
|
+
position: fixed;
|
|
15
|
+
z-index: $modal-z-index - 1;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
.portalMenuItem {
|
|
19
|
+
cursor: pointer;
|
|
20
|
+
font-family: 'CircularPro', 'Gill Sans', 'Gill Sans MT', 'Helvetica Neue', Helvetica, Arial, sans-serif;
|
|
21
|
+
}
|
|
@@ -39,10 +39,7 @@ function LiveControls({
|
|
|
39
39
|
onChange
|
|
40
40
|
}) {
|
|
41
41
|
return /*#__PURE__*/_react().default.createElement("ul", {
|
|
42
|
-
className: (0, _classnames().default)(_liveControlPanelModule().default.container)
|
|
43
|
-
style: {
|
|
44
|
-
paddingBottom: '20em' /* temp walkaround for cutting popups */
|
|
45
|
-
}
|
|
42
|
+
className: (0, _classnames().default)(_liveControlPanelModule().default.container)
|
|
46
43
|
}, defs.map(field => {
|
|
47
44
|
const key = field.id;
|
|
48
45
|
const InputComponent = (0, _liveControlInput().getInputComponent)(field.input || 'text');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","data","_interopRequireDefault","require","_classnames","_liveControlPanelModule","_liveControlInput","e","__esModule","default","LiveControls","defs","values","onChange","createElement","className","classNames","styles","container","
|
|
1
|
+
{"version":3,"names":["_react","data","_interopRequireDefault","require","_classnames","_liveControlPanelModule","_liveControlInput","e","__esModule","default","LiveControls","defs","values","onChange","createElement","className","classNames","styles","container","map","field","key","id","InputComponent","getInputComponent","input","item","label","htmlFor","value","v","meta"],"sources":["live-control-panel.tsx"],"sourcesContent":["import React from 'react';\nimport classNames from 'classnames';\nimport { type Control } from '@teambit/compositions.ui.composition-live-controls';\n\nimport styles from './live-control-panel.module.scss';\nimport { getInputComponent } from './live-control-input';\n\nexport function LiveControls({\n defs,\n values,\n onChange,\n}: {\n defs: Array<Control>;\n values: Record<string, any>;\n onChange: (key: string, value: any) => void;\n}) {\n return (\n <ul className={classNames(styles.container)}>\n {defs.map((field) => {\n const key = field.id;\n const InputComponent = getInputComponent(field.input || 'text');\n return (\n <li key={key} className={classNames(styles.item)}>\n <div className={classNames(styles.label)}>\n <label htmlFor={`control-${key}`}>{field.label || field.id}</label>\n </div>\n <div>\n <InputComponent\n id={`control-${key}`}\n value={values[key]}\n onChange={(v: any) => onChange(key, v)}\n meta={field}\n />\n </div>\n </li>\n );\n })}\n </ul>\n );\n}\n"],"mappings":";;;;;;AAAA,SAAAA,OAAA;EAAA,MAAAC,IAAA,GAAAC,sBAAA,CAAAC,OAAA;EAAAH,MAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAG,YAAA;EAAA,MAAAH,IAAA,GAAAC,sBAAA,CAAAC,OAAA;EAAAC,WAAA,YAAAA,CAAA;IAAA,OAAAH,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAGA,SAAAI,wBAAA;EAAA,MAAAJ,IAAA,GAAAC,sBAAA,CAAAC,OAAA;EAAAE,uBAAA,YAAAA,CAAA;IAAA,OAAAJ,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAK,kBAAA;EAAA,MAAAL,IAAA,GAAAE,OAAA;EAAAG,iBAAA,YAAAA,CAAA;IAAA,OAAAL,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAAyD,SAAAC,uBAAAK,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAElD,SAASG,YAAYA,CAAC;EAC3BC,IAAI;EACJC,MAAM;EACNC;AAKF,CAAC,EAAE;EACD,oBACEb,MAAA,GAAAS,OAAA,CAAAK,aAAA;IAAIC,SAAS,EAAE,IAAAC,qBAAU,EAACC,iCAAM,CAACC,SAAS;EAAE,GACzCP,IAAI,CAACQ,GAAG,CAAEC,KAAK,IAAK;IACnB,MAAMC,GAAG,GAAGD,KAAK,CAACE,EAAE;IACpB,MAAMC,cAAc,GAAG,IAAAC,qCAAiB,EAACJ,KAAK,CAACK,KAAK,IAAI,MAAM,CAAC;IAC/D,oBACEzB,MAAA,GAAAS,OAAA,CAAAK,aAAA;MAAIO,GAAG,EAAEA,GAAI;MAACN,SAAS,EAAE,IAAAC,qBAAU,EAACC,iCAAM,CAACS,IAAI;IAAE,gBAC/C1B,MAAA,GAAAS,OAAA,CAAAK,aAAA;MAAKC,SAAS,EAAE,IAAAC,qBAAU,EAACC,iCAAM,CAACU,KAAK;IAAE,gBACvC3B,MAAA,GAAAS,OAAA,CAAAK,aAAA;MAAOc,OAAO,EAAE,WAAWP,GAAG;IAAG,GAAED,KAAK,CAACO,KAAK,IAAIP,KAAK,CAACE,EAAU,CAC/D,CAAC,eACNtB,MAAA,GAAAS,OAAA,CAAAK,aAAA,2BACEd,MAAA,GAAAS,OAAA,CAAAK,aAAA,CAACS,cAAc;MACbD,EAAE,EAAE,WAAWD,GAAG,EAAG;MACrBQ,KAAK,EAAEjB,MAAM,CAACS,GAAG,CAAE;MACnBR,QAAQ,EAAGiB,CAAM,IAAKjB,QAAQ,CAACQ,GAAG,EAAES,CAAC,CAAE;MACvCC,IAAI,EAAEX;IAAM,CACb,CACE,CACH,CAAC;EAET,CAAC,CACC,CAAC;AAET","ignoreList":[]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
@import '@teambit/ui-foundation.ui.constants.z-indexes/z-indexes.module.scss';
|
|
2
|
+
|
|
3
|
+
.overlay {
|
|
4
|
+
position: fixed;
|
|
5
|
+
z-index: $modal-z-index - 1;
|
|
6
|
+
overflow-y: auto;
|
|
7
|
+
background: var(--surface-neutral-color, #fff);
|
|
8
|
+
border: 1px solid var(--border-medium-color, #ededed);
|
|
9
|
+
border-radius: 8px;
|
|
10
|
+
box-shadow: var(--bit-shadow-hover-low, 0 2px 8px 0 rgba(0, 0, 0, 0.2));
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.suppressNativeMenu {
|
|
14
|
+
display: none !important;
|
|
15
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export type OverlayPosition = 'top' | 'bottom';
|
|
3
|
+
export type OverlayStyle = {
|
|
4
|
+
top?: number;
|
|
5
|
+
bottom?: number;
|
|
6
|
+
left: number;
|
|
7
|
+
maxWidth: number;
|
|
8
|
+
maxHeight: number;
|
|
9
|
+
} & React.CSSProperties;
|
|
10
|
+
export declare function useOverlay(anchorRef: React.RefObject<HTMLElement>, open: boolean, gap?: number, extraStyle?: React.CSSProperties): {
|
|
11
|
+
position: OverlayPosition;
|
|
12
|
+
style: OverlayStyle | null;
|
|
13
|
+
};
|
|
14
|
+
export declare function BitPortal({ children }: {
|
|
15
|
+
children: React.ReactNode;
|
|
16
|
+
}): React.ReactPortal;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.BitPortal = BitPortal;
|
|
7
|
+
exports.useOverlay = useOverlay;
|
|
8
|
+
function _react() {
|
|
9
|
+
const data = _interopRequireDefault(require("react"));
|
|
10
|
+
_react = function () {
|
|
11
|
+
return data;
|
|
12
|
+
};
|
|
13
|
+
return data;
|
|
14
|
+
}
|
|
15
|
+
function _reactDom() {
|
|
16
|
+
const data = _interopRequireDefault(require("react-dom"));
|
|
17
|
+
_reactDom = function () {
|
|
18
|
+
return data;
|
|
19
|
+
};
|
|
20
|
+
return data;
|
|
21
|
+
}
|
|
22
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
23
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
24
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
25
|
+
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
26
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
27
|
+
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
28
|
+
const GAP = 4;
|
|
29
|
+
function useOverlay(anchorRef, open, gap = GAP, extraStyle) {
|
|
30
|
+
const [position, setPosition] = _react().default.useState('bottom');
|
|
31
|
+
const [style, setStyle] = _react().default.useState(null);
|
|
32
|
+
_react().default.useLayoutEffect(() => {
|
|
33
|
+
if (!open || !anchorRef.current) return;
|
|
34
|
+
const rect = anchorRef.current.getBoundingClientRect();
|
|
35
|
+
const below = window.innerHeight - rect.bottom - gap;
|
|
36
|
+
const above = rect.top - gap;
|
|
37
|
+
const shouldFlip = below < 240 && above > below;
|
|
38
|
+
const pos = shouldFlip ? 'top' : 'bottom';
|
|
39
|
+
setPosition(pos);
|
|
40
|
+
setStyle(_objectSpread(_objectSpread({}, extraStyle), {}, {
|
|
41
|
+
left: rect.left,
|
|
42
|
+
maxWidth: rect.width,
|
|
43
|
+
maxHeight: 240,
|
|
44
|
+
top: pos === 'bottom' ? rect.bottom + gap : undefined,
|
|
45
|
+
bottom: pos === 'top' ? window.innerHeight - rect.top + gap : undefined
|
|
46
|
+
}));
|
|
47
|
+
}, [open]);
|
|
48
|
+
return {
|
|
49
|
+
position,
|
|
50
|
+
style
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
function BitPortal({
|
|
54
|
+
children
|
|
55
|
+
}) {
|
|
56
|
+
return /*#__PURE__*/_reactDom().default.createPortal(children, document.body);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
//# sourceMappingURL=use-overlay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_react","data","_interopRequireDefault","require","_reactDom","e","__esModule","default","ownKeys","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","_toPropertyKey","value","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","GAP","useOverlay","anchorRef","open","gap","extraStyle","position","setPosition","React","useState","style","setStyle","useLayoutEffect","current","rect","getBoundingClientRect","below","window","innerHeight","bottom","above","top","shouldFlip","pos","left","maxWidth","width","maxHeight","undefined","BitPortal","children","ReactDOM","createPortal","document","body"],"sources":["use-overlay.ts"],"sourcesContent":["import React from 'react';\nimport ReactDOM from 'react-dom';\n\nexport type OverlayPosition = 'top' | 'bottom';\n\nexport type OverlayStyle = {\n top?: number;\n bottom?: number;\n left: number;\n maxWidth: number;\n maxHeight: number;\n} & React.CSSProperties;\n\nconst GAP = 4;\n\nexport function useOverlay(\n anchorRef: React.RefObject<HTMLElement>,\n open: boolean,\n gap: number = GAP,\n extraStyle?: React.CSSProperties\n) {\n const [position, setPosition] = React.useState<OverlayPosition>('bottom');\n const [style, setStyle] = React.useState<OverlayStyle | null>(null);\n\n React.useLayoutEffect(() => {\n if (!open || !anchorRef.current) return;\n\n const rect = anchorRef.current.getBoundingClientRect();\n\n const below = window.innerHeight - rect.bottom - gap;\n const above = rect.top - gap;\n\n const shouldFlip = below < 240 && above > below;\n\n const pos: OverlayPosition = shouldFlip ? 'top' : 'bottom';\n\n setPosition(pos);\n setStyle({\n ...extraStyle,\n left: rect.left,\n maxWidth: rect.width,\n maxHeight: 240,\n top: pos === 'bottom' ? rect.bottom + gap : undefined,\n bottom: pos === 'top' ? window.innerHeight - rect.top + gap : undefined,\n });\n }, [open]);\n\n return { position, style };\n}\n\nexport function BitPortal({ children }: { children: React.ReactNode }) {\n return ReactDOM.createPortal(children, document.body);\n}\n"],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@teambit/compositions",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.873",
|
|
4
4
|
"homepage": "https://bit.cloud/teambit/compositions/compositions",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"componentId": {
|
|
7
7
|
"scope": "teambit.compositions",
|
|
8
8
|
"name": "compositions",
|
|
9
|
-
"version": "1.0.
|
|
9
|
+
"version": "1.0.873"
|
|
10
10
|
},
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"graphql-tag": "2.12.1",
|
|
@@ -54,16 +54,16 @@
|
|
|
54
54
|
"@teambit/design.inputs.text-area": "0.0.20",
|
|
55
55
|
"@teambit/design.inputs.toggle-switch": "0.0.8",
|
|
56
56
|
"@teambit/design.ui.input.color-picker": "0.0.56",
|
|
57
|
-
"@teambit/component": "1.0.
|
|
58
|
-
"@teambit/graphql": "1.0.
|
|
59
|
-
"@teambit/dev-files": "1.0.
|
|
60
|
-
"@teambit/envs": "1.0.
|
|
61
|
-
"@teambit/preview": "1.0.
|
|
62
|
-
"@teambit/schema": "1.0.
|
|
63
|
-
"@teambit/scope": "1.0.
|
|
64
|
-
"@teambit/workspace": "1.0.
|
|
65
|
-
"@teambit/component-compare": "1.0.
|
|
66
|
-
"@teambit/ui": "1.0.
|
|
57
|
+
"@teambit/component": "1.0.873",
|
|
58
|
+
"@teambit/graphql": "1.0.873",
|
|
59
|
+
"@teambit/dev-files": "1.0.873",
|
|
60
|
+
"@teambit/envs": "1.0.873",
|
|
61
|
+
"@teambit/preview": "1.0.873",
|
|
62
|
+
"@teambit/schema": "1.0.873",
|
|
63
|
+
"@teambit/scope": "1.0.873",
|
|
64
|
+
"@teambit/workspace": "1.0.873",
|
|
65
|
+
"@teambit/component-compare": "1.0.873",
|
|
66
|
+
"@teambit/ui": "1.0.873"
|
|
67
67
|
},
|
|
68
68
|
"devDependencies": {
|
|
69
69
|
"@types/lodash": "4.14.165",
|
|
@@ -76,8 +76,10 @@
|
|
|
76
76
|
},
|
|
77
77
|
"peerDependencies": {
|
|
78
78
|
"react": "^17.0.0 || ^18.0.0",
|
|
79
|
+
"react-dom": "^17.0.0 || ^18.0.0",
|
|
79
80
|
"react-router-dom": "^6.16.0",
|
|
80
81
|
"@types/react": "^17.0.73",
|
|
82
|
+
"@types/react-dom": "^17.0.5",
|
|
81
83
|
"@teambit/base-react.navigation.link": "2.0.33"
|
|
82
84
|
},
|
|
83
85
|
"license": "Apache-2.0",
|
|
@@ -1,3 +1,21 @@
|
|
|
1
|
+
@import '@teambit/ui-foundation.ui.constants.z-indexes/z-indexes.module.scss';
|
|
2
|
+
|
|
1
3
|
.wrapper {
|
|
2
4
|
padding: 4px 0;
|
|
3
5
|
}
|
|
6
|
+
|
|
7
|
+
.portalMenu {
|
|
8
|
+
max-height: 240px;
|
|
9
|
+
overflow-y: auto;
|
|
10
|
+
background: var(--surface-neutral-color, #fff);
|
|
11
|
+
border: 1px solid var(--border-medium-color, #ededed);
|
|
12
|
+
border-radius: 8px;
|
|
13
|
+
box-shadow: var(--bit-shadow-hover-low);
|
|
14
|
+
position: fixed;
|
|
15
|
+
z-index: $modal-z-index - 1;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
.portalMenuItem {
|
|
19
|
+
cursor: pointer;
|
|
20
|
+
font-family: 'CircularPro', 'Gill Sans', 'Gill Sans MT', 'Helvetica Neue', Helvetica, Arial, sans-serif;
|
|
21
|
+
}
|
|
@@ -7,13 +7,13 @@ import { InputText } from '@teambit/design.inputs.input-text';
|
|
|
7
7
|
import { TextArea } from '@teambit/design.inputs.text-area';
|
|
8
8
|
import { Dropdown } from '@teambit/design.inputs.dropdown';
|
|
9
9
|
import { MenuItem } from '@teambit/design.inputs.selectors.menu-item';
|
|
10
|
-
import { ColorPicker } from '@teambit/design.ui.input.color-picker';
|
|
10
|
+
import { ColorPicker, ColorsBox } from '@teambit/design.ui.input.color-picker';
|
|
11
11
|
import { DatePicker } from '@teambit/design.inputs.date-picker';
|
|
12
12
|
import { Toggle } from '@teambit/design.inputs.toggle-switch';
|
|
13
|
-
|
|
14
|
-
import { type SelectOption } from '@teambit/compositions.ui.composition-live-controls';
|
|
13
|
+
import { useOverlay, BitPortal } from './use-overlay';
|
|
15
14
|
|
|
16
15
|
import styles from './live-control-input.module.scss';
|
|
16
|
+
import overlayStyles from './overlay.module.scss';
|
|
17
17
|
|
|
18
18
|
type InputComponentProps = {
|
|
19
19
|
id: string;
|
|
@@ -58,46 +58,57 @@ function LongTextInput({ value, onChange }: InputComponentProps) {
|
|
|
58
58
|
|
|
59
59
|
function SelectInput({ value, onChange, meta }: InputComponentProps) {
|
|
60
60
|
const [selectedValue, setSelectedValue] = React.useState(value || '');
|
|
61
|
+
const [open, setOpen] = React.useState(false);
|
|
62
|
+
const triggerRef = React.useRef<HTMLParagraphElement>(null);
|
|
61
63
|
|
|
62
64
|
React.useEffect(() => {
|
|
63
65
|
setSelectedValue(value || '');
|
|
64
66
|
}, [value]);
|
|
65
67
|
|
|
66
|
-
const
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
};
|
|
70
|
-
|
|
71
|
-
const options: {
|
|
72
|
-
label: string;
|
|
73
|
-
value: string;
|
|
74
|
-
}[] = React.useMemo(() => {
|
|
75
|
-
if (!meta || !meta.options) return [];
|
|
76
|
-
return meta.options.map((option: SelectOption) => {
|
|
77
|
-
if (typeof option === 'string') {
|
|
78
|
-
return { label: option, value: option };
|
|
79
|
-
}
|
|
80
|
-
return option;
|
|
81
|
-
});
|
|
68
|
+
const options = React.useMemo(() => {
|
|
69
|
+
if (!meta?.options) return [];
|
|
70
|
+
return meta.options.map((o: any) => (typeof o === 'string' ? { label: o, value: o } : o));
|
|
82
71
|
}, [meta]);
|
|
83
72
|
|
|
84
73
|
const placeholderContent = options.find((o) => o.value === selectedValue)?.label;
|
|
85
74
|
|
|
75
|
+
const { position, style } = useOverlay(triggerRef, open, 0, {
|
|
76
|
+
paddingTop: 8,
|
|
77
|
+
paddingBottom: 8,
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
const commitSelection = (v: string) => {
|
|
81
|
+
onChange(v);
|
|
82
|
+
setSelectedValue(v);
|
|
83
|
+
setOpen(false);
|
|
84
|
+
};
|
|
85
|
+
|
|
86
86
|
return (
|
|
87
|
-
<p className={classNames(styles.wrapper)}>
|
|
88
|
-
<Dropdown
|
|
89
|
-
{
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
)
|
|
99
|
-
|
|
100
|
-
|
|
87
|
+
<p ref={triggerRef} className={classNames(styles.wrapper)}>
|
|
88
|
+
<Dropdown
|
|
89
|
+
placeholderContent={placeholderContent}
|
|
90
|
+
open={open}
|
|
91
|
+
onChange={(_, isOpen) => setOpen(isOpen)}
|
|
92
|
+
position={position}
|
|
93
|
+
dropClass={overlayStyles.suppressNativeMenu}
|
|
94
|
+
/>
|
|
95
|
+
|
|
96
|
+
{open && style && (
|
|
97
|
+
<BitPortal>
|
|
98
|
+
<div className={overlayStyles.overlay} style={style} onMouseDown={(e) => e.stopPropagation()}>
|
|
99
|
+
{options.map((option) => (
|
|
100
|
+
<MenuItem
|
|
101
|
+
className={styles.portalMenuItem}
|
|
102
|
+
key={option.value}
|
|
103
|
+
active={option.value === selectedValue}
|
|
104
|
+
onClick={() => commitSelection(option.value)}
|
|
105
|
+
>
|
|
106
|
+
{option.label}
|
|
107
|
+
</MenuItem>
|
|
108
|
+
))}
|
|
109
|
+
</div>
|
|
110
|
+
</BitPortal>
|
|
111
|
+
)}
|
|
101
112
|
</p>
|
|
102
113
|
);
|
|
103
114
|
}
|
|
@@ -124,6 +135,43 @@ function NumberInput({ value, onChange }: InputComponentProps) {
|
|
|
124
135
|
return <InputText type="number" value={inputValue} onChange={handleChange} />;
|
|
125
136
|
}
|
|
126
137
|
|
|
138
|
+
function ColorPickerPortal(props: any) {
|
|
139
|
+
const [open, setOpen] = React.useState(false);
|
|
140
|
+
const triggerRef = React.useRef<HTMLDivElement>(null);
|
|
141
|
+
|
|
142
|
+
const { position, style } = useOverlay(triggerRef, open, 4, {
|
|
143
|
+
padding: 16,
|
|
144
|
+
});
|
|
145
|
+
|
|
146
|
+
return (
|
|
147
|
+
<div ref={triggerRef}>
|
|
148
|
+
<ColorPicker
|
|
149
|
+
{...props}
|
|
150
|
+
open={open}
|
|
151
|
+
onChange={(_, isOpen) => setOpen(isOpen)}
|
|
152
|
+
position={position}
|
|
153
|
+
dropClass={overlayStyles.suppressNativeMenu}
|
|
154
|
+
/>
|
|
155
|
+
|
|
156
|
+
{open && style && (
|
|
157
|
+
<BitPortal>
|
|
158
|
+
<div className={overlayStyles.overlay} style={style} onMouseDown={(e) => e.stopPropagation()}>
|
|
159
|
+
<ColorsBox
|
|
160
|
+
onColorSelect={(color: string) => {
|
|
161
|
+
props.onColorSelect?.(color);
|
|
162
|
+
setOpen(false);
|
|
163
|
+
}}
|
|
164
|
+
colorsList={props.colorsList}
|
|
165
|
+
showNoColor={props.showNoColor}
|
|
166
|
+
selected={props.value ?? ''}
|
|
167
|
+
/>
|
|
168
|
+
</div>
|
|
169
|
+
</BitPortal>
|
|
170
|
+
)}
|
|
171
|
+
</div>
|
|
172
|
+
);
|
|
173
|
+
}
|
|
174
|
+
|
|
127
175
|
function ColorInput({ value, onChange }: InputComponentProps) {
|
|
128
176
|
const [inputValue, setInputValue] = React.useState(value || '');
|
|
129
177
|
|
|
@@ -131,14 +179,14 @@ function ColorInput({ value, onChange }: InputComponentProps) {
|
|
|
131
179
|
setInputValue(value || '');
|
|
132
180
|
}, [value]);
|
|
133
181
|
|
|
134
|
-
const handleChange = (
|
|
135
|
-
onChange(
|
|
136
|
-
setInputValue(
|
|
182
|
+
const handleChange = (v: string) => {
|
|
183
|
+
onChange(v);
|
|
184
|
+
setInputValue(v);
|
|
137
185
|
};
|
|
138
186
|
|
|
139
187
|
return (
|
|
140
|
-
<p className={
|
|
141
|
-
<
|
|
188
|
+
<p className={styles.wrapper}>
|
|
189
|
+
<ColorPickerPortal value={inputValue} onColorSelect={handleChange} allowCustomColor />
|
|
142
190
|
</p>
|
|
143
191
|
);
|
|
144
192
|
}
|
|
@@ -15,10 +15,7 @@ export function LiveControls({
|
|
|
15
15
|
onChange: (key: string, value: any) => void;
|
|
16
16
|
}) {
|
|
17
17
|
return (
|
|
18
|
-
<ul
|
|
19
|
-
className={classNames(styles.container)}
|
|
20
|
-
style={{ paddingBottom: '20em' /* temp walkaround for cutting popups */ }}
|
|
21
|
-
>
|
|
18
|
+
<ul className={classNames(styles.container)}>
|
|
22
19
|
{defs.map((field) => {
|
|
23
20
|
const key = field.id;
|
|
24
21
|
const InputComponent = getInputComponent(field.input || 'text');
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
@import '@teambit/ui-foundation.ui.constants.z-indexes/z-indexes.module.scss';
|
|
2
|
+
|
|
3
|
+
.overlay {
|
|
4
|
+
position: fixed;
|
|
5
|
+
z-index: $modal-z-index - 1;
|
|
6
|
+
overflow-y: auto;
|
|
7
|
+
background: var(--surface-neutral-color, #fff);
|
|
8
|
+
border: 1px solid var(--border-medium-color, #ededed);
|
|
9
|
+
border-radius: 8px;
|
|
10
|
+
box-shadow: var(--bit-shadow-hover-low, 0 2px 8px 0 rgba(0, 0, 0, 0.2));
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.suppressNativeMenu {
|
|
14
|
+
display: none !important;
|
|
15
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import ReactDOM from 'react-dom';
|
|
3
|
+
|
|
4
|
+
export type OverlayPosition = 'top' | 'bottom';
|
|
5
|
+
|
|
6
|
+
export type OverlayStyle = {
|
|
7
|
+
top?: number;
|
|
8
|
+
bottom?: number;
|
|
9
|
+
left: number;
|
|
10
|
+
maxWidth: number;
|
|
11
|
+
maxHeight: number;
|
|
12
|
+
} & React.CSSProperties;
|
|
13
|
+
|
|
14
|
+
const GAP = 4;
|
|
15
|
+
|
|
16
|
+
export function useOverlay(
|
|
17
|
+
anchorRef: React.RefObject<HTMLElement>,
|
|
18
|
+
open: boolean,
|
|
19
|
+
gap: number = GAP,
|
|
20
|
+
extraStyle?: React.CSSProperties
|
|
21
|
+
) {
|
|
22
|
+
const [position, setPosition] = React.useState<OverlayPosition>('bottom');
|
|
23
|
+
const [style, setStyle] = React.useState<OverlayStyle | null>(null);
|
|
24
|
+
|
|
25
|
+
React.useLayoutEffect(() => {
|
|
26
|
+
if (!open || !anchorRef.current) return;
|
|
27
|
+
|
|
28
|
+
const rect = anchorRef.current.getBoundingClientRect();
|
|
29
|
+
|
|
30
|
+
const below = window.innerHeight - rect.bottom - gap;
|
|
31
|
+
const above = rect.top - gap;
|
|
32
|
+
|
|
33
|
+
const shouldFlip = below < 240 && above > below;
|
|
34
|
+
|
|
35
|
+
const pos: OverlayPosition = shouldFlip ? 'top' : 'bottom';
|
|
36
|
+
|
|
37
|
+
setPosition(pos);
|
|
38
|
+
setStyle({
|
|
39
|
+
...extraStyle,
|
|
40
|
+
left: rect.left,
|
|
41
|
+
maxWidth: rect.width,
|
|
42
|
+
maxHeight: 240,
|
|
43
|
+
top: pos === 'bottom' ? rect.bottom + gap : undefined,
|
|
44
|
+
bottom: pos === 'top' ? window.innerHeight - rect.top + gap : undefined,
|
|
45
|
+
});
|
|
46
|
+
}, [open]);
|
|
47
|
+
|
|
48
|
+
return { position, style };
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export function BitPortal({ children }: { children: React.ReactNode }) {
|
|
52
|
+
return ReactDOM.createPortal(children, document.body);
|
|
53
|
+
}
|