@teambit/compositions 1.0.893 → 1.0.895

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/composition.section.tsx +1 -0
  2. package/compositions.tsx +30 -5
  3. package/dist/composition.section.js +2 -1
  4. package/dist/composition.section.js.map +1 -1
  5. package/dist/compositions.d.ts +2 -1
  6. package/dist/compositions.js +36 -2
  7. package/dist/compositions.js.map +1 -1
  8. package/dist/index.d.ts +2 -1
  9. package/dist/index.js +31 -0
  10. package/dist/index.js.map +1 -1
  11. package/dist/{preview-1772220644928.js → preview-1772488540837.js} +2 -2
  12. package/dist/ui/compositions-panel/compositions-panel.js +20 -66
  13. package/dist/ui/compositions-panel/compositions-panel.js.map +1 -1
  14. package/dist/ui/compositions-panel/compositions-panel.module.scss +33 -0
  15. package/dist/ui/compositions-panel/live-control-input.d.ts +1 -0
  16. package/dist/ui/compositions-panel/live-control-input.js +142 -23
  17. package/dist/ui/compositions-panel/live-control-input.js.map +1 -1
  18. package/dist/ui/compositions-panel/live-control-input.module.scss +94 -1
  19. package/dist/ui/compositions-panel/live-control-panel.d.ts +3 -1
  20. package/dist/ui/compositions-panel/live-control-panel.js +4 -2
  21. package/dist/ui/compositions-panel/live-control-panel.js.map +1 -1
  22. package/dist/ui/compositions-panel/live-controls-diff-panel.d.ts +13 -0
  23. package/dist/ui/compositions-panel/live-controls-diff-panel.js +220 -0
  24. package/dist/ui/compositions-panel/live-controls-diff-panel.js.map +1 -0
  25. package/dist/ui/compositions-panel/live-controls-diff-panel.module.scss +185 -0
  26. package/dist/ui/compositions-panel/live-controls-renderer.d.ts +1 -0
  27. package/dist/ui/compositions-panel/live-controls-renderer.js +53 -0
  28. package/dist/ui/compositions-panel/live-controls-renderer.js.map +1 -0
  29. package/dist/ui/index.d.ts +4 -0
  30. package/dist/ui/index.js +39 -0
  31. package/dist/ui/index.js.map +1 -1
  32. package/dist/use-default-controls-schema-responder.d.ts +1 -0
  33. package/dist/use-default-controls-schema-responder.js +89 -0
  34. package/dist/use-default-controls-schema-responder.js.map +1 -0
  35. package/package.json +22 -20
  36. package/ui/compositions-panel/compositions-panel.module.scss +33 -0
  37. package/ui/compositions-panel/compositions-panel.tsx +21 -74
  38. package/ui/compositions-panel/live-control-input.module.scss +94 -1
  39. package/ui/compositions-panel/live-control-input.tsx +133 -30
  40. package/ui/compositions-panel/live-control-panel.tsx +4 -1
  41. package/ui/compositions-panel/live-controls-diff-panel.module.scss +185 -0
  42. package/ui/compositions-panel/live-controls-diff-panel.tsx +206 -0
  43. package/ui/compositions-panel/live-controls-renderer.tsx +15 -0
  44. package/ui/index.ts +4 -0
@@ -36,13 +36,15 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e
36
36
  function LiveControls({
37
37
  defs,
38
38
  values,
39
- onChange
39
+ onChange,
40
+ renderLabel
40
41
  }) {
41
42
  return /*#__PURE__*/_react().default.createElement("ul", {
42
43
  className: (0, _classnames().default)(_liveControlPanelModule().default.container)
43
44
  }, defs.map(field => {
44
45
  const key = field.id;
45
46
  const InputComponent = (0, _liveControlInput().getInputComponent)(field.input || 'text');
47
+ const labelContent = renderLabel ? renderLabel(field) : field.label || field.id;
46
48
  return /*#__PURE__*/_react().default.createElement("li", {
47
49
  key: key,
48
50
  className: (0, _classnames().default)(_liveControlPanelModule().default.item)
@@ -50,7 +52,7 @@ function LiveControls({
50
52
  className: (0, _classnames().default)(_liveControlPanelModule().default.label)
51
53
  }, /*#__PURE__*/_react().default.createElement("label", {
52
54
  htmlFor: `control-${key}`
53
- }, field.label || field.id)), /*#__PURE__*/_react().default.createElement("div", null, /*#__PURE__*/_react().default.createElement(InputComponent, {
55
+ }, labelContent)), /*#__PURE__*/_react().default.createElement("div", null, /*#__PURE__*/_react().default.createElement(InputComponent, {
54
56
  id: `control-${key}`,
55
57
  value: values[key],
56
58
  onChange: v => onChange(key, v),
@@ -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","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":[]}
1
+ {"version":3,"names":["_react","data","_interopRequireDefault","require","_classnames","_liveControlPanelModule","_liveControlInput","e","__esModule","default","LiveControls","defs","values","onChange","renderLabel","createElement","className","classNames","styles","container","map","field","key","id","InputComponent","getInputComponent","input","labelContent","label","item","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 renderLabel,\n}: {\n defs: Array<Control>;\n values: Record<string, any>;\n onChange: (key: string, value: any) => void;\n renderLabel?: (field: Control) => React.ReactNode;\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 const labelContent = renderLabel ? renderLabel(field) : field.label || field.id;\n return (\n <li key={key} className={classNames(styles.item)}>\n <div className={classNames(styles.label)}>\n <label htmlFor={`control-${key}`}>{labelContent}</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,QAAQ;EACRC;AAMF,CAAC,EAAE;EACD,oBACEd,MAAA,GAAAS,OAAA,CAAAM,aAAA;IAAIC,SAAS,EAAE,IAAAC,qBAAU,EAACC,iCAAM,CAACC,SAAS;EAAE,GACzCR,IAAI,CAACS,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,MAAMC,YAAY,GAAGb,WAAW,GAAGA,WAAW,CAACO,KAAK,CAAC,GAAGA,KAAK,CAACO,KAAK,IAAIP,KAAK,CAACE,EAAE;IAC/E,oBACEvB,MAAA,GAAAS,OAAA,CAAAM,aAAA;MAAIO,GAAG,EAAEA,GAAI;MAACN,SAAS,EAAE,IAAAC,qBAAU,EAACC,iCAAM,CAACW,IAAI;IAAE,gBAC/C7B,MAAA,GAAAS,OAAA,CAAAM,aAAA;MAAKC,SAAS,EAAE,IAAAC,qBAAU,EAACC,iCAAM,CAACU,KAAK;IAAE,gBACvC5B,MAAA,GAAAS,OAAA,CAAAM,aAAA;MAAOe,OAAO,EAAE,WAAWR,GAAG;IAAG,GAAEK,YAAoB,CACpD,CAAC,eACN3B,MAAA,GAAAS,OAAA,CAAAM,aAAA,2BACEf,MAAA,GAAAS,OAAA,CAAAM,aAAA,CAACS,cAAc;MACbD,EAAE,EAAE,WAAWD,GAAG,EAAG;MACrBS,KAAK,EAAEnB,MAAM,CAACU,GAAG,CAAE;MACnBT,QAAQ,EAAGmB,CAAM,IAAKnB,QAAQ,CAACS,GAAG,EAAEU,CAAC,CAAE;MACvCC,IAAI,EAAEZ;IAAM,CACb,CACE,CACH,CAAC;EAET,CAAC,CACC,CAAC;AAET","ignoreList":[]}
@@ -0,0 +1,13 @@
1
+ type PanelStatus = 'loading' | 'available' | 'empty';
2
+ export type LiveControlsDiffPanelProps = {
3
+ resetKey?: string;
4
+ baseChannel?: string;
5
+ compareChannel?: string;
6
+ commonLabel?: string;
7
+ baseLabel?: string;
8
+ compareLabel?: string;
9
+ showEmptyState?: boolean;
10
+ onStatusChange?: (status: PanelStatus) => void;
11
+ };
12
+ export declare function LiveControlsDiffPanel({ resetKey, baseChannel, compareChannel, commonLabel, baseLabel, compareLabel, showEmptyState, onStatusChange, }: LiveControlsDiffPanelProps): import("react/jsx-runtime").JSX.Element | null;
13
+ export {};
@@ -0,0 +1,220 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.LiveControlsDiffPanel = LiveControlsDiffPanel;
7
+ function _react() {
8
+ const data = _interopRequireWildcard(require("react"));
9
+ _react = function () {
10
+ return data;
11
+ };
12
+ return data;
13
+ }
14
+ function _compositionsUi() {
15
+ const data = require("@teambit/compositions.ui.composition-live-controls");
16
+ _compositionsUi = function () {
17
+ return data;
18
+ };
19
+ return data;
20
+ }
21
+ function _baseUiLoaders() {
22
+ const data = require("@teambit/base-ui.loaders.skeleton");
23
+ _baseUiLoaders = function () {
24
+ return data;
25
+ };
26
+ return data;
27
+ }
28
+ function _evangelistElements() {
29
+ const data = require("@teambit/evangelist.elements.icon");
30
+ _evangelistElements = function () {
31
+ return data;
32
+ };
33
+ return data;
34
+ }
35
+ function _classnames() {
36
+ const data = _interopRequireDefault(require("classnames"));
37
+ _classnames = function () {
38
+ return data;
39
+ };
40
+ return data;
41
+ }
42
+ function _liveControlInput() {
43
+ const data = require("./live-control-input");
44
+ _liveControlInput = function () {
45
+ return data;
46
+ };
47
+ return data;
48
+ }
49
+ function _liveControlsDiffPanelModule() {
50
+ const data = _interopRequireDefault(require("./live-controls-diff-panel.module.scss"));
51
+ _liveControlsDiffPanelModule = function () {
52
+ return data;
53
+ };
54
+ return data;
55
+ }
56
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
57
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
58
+ const WAIT_FOR_CONTROLS_MS = 1200;
59
+ function LiveControlsDiffPanel({
60
+ resetKey,
61
+ baseChannel,
62
+ compareChannel,
63
+ commonLabel = 'Common',
64
+ baseLabel = 'Base',
65
+ compareLabel = 'Compare',
66
+ showEmptyState = true,
67
+ onStatusChange
68
+ }) {
69
+ const lastResetKeyRef = (0, _react().useRef)(null);
70
+ const [isWaitingForFreshData, setIsWaitingForFreshData] = (0, _react().useState)(true);
71
+ const waitTimeoutRef = (0, _react().useRef)(null);
72
+ const currentKey = `${baseChannel || ''}-${compareChannel || ''}-${resetKey || ''}`;
73
+ const model = (0, _react().useMemo)(() => new (_compositionsUi().DiffControlsModel)(baseChannel, compareChannel), [baseChannel, compareChannel]);
74
+ const allChannels = (0, _react().useMemo)(() => {
75
+ const channels = [model.baseChannel, model.compareChannel];
76
+ if (!channels.includes('default')) channels.push('default');
77
+ return [...new Set(channels)];
78
+ }, [model.baseChannel, model.compareChannel]);
79
+ const combined = (0, _compositionsUi().useLiveControls)(allChannels);
80
+ const {
81
+ ready: combinedReady,
82
+ setTimestamp
83
+ } = combined;
84
+ (0, _react().useEffect)(() => {
85
+ if (lastResetKeyRef.current !== currentKey) {
86
+ lastResetKeyRef.current = currentKey;
87
+ setIsWaitingForFreshData(true);
88
+ setTimestamp(0);
89
+ }
90
+ }, [currentKey, setTimestamp]);
91
+ const channelsReady = Boolean(baseChannel && compareChannel);
92
+ const registryReady = combinedReady || model.isReady;
93
+ const controls = model.controls;
94
+ const hasControls = controls.length > 0;
95
+ const hasSubscribers = model.hasSubscribers;
96
+ const prevRegistryReady = (0, _react().useRef)(registryReady);
97
+ (0, _react().useEffect)(() => {
98
+ if (registryReady && !prevRegistryReady.current && isWaitingForFreshData) {
99
+ setIsWaitingForFreshData(false);
100
+ }
101
+ prevRegistryReady.current = registryReady;
102
+ }, [registryReady, isWaitingForFreshData]);
103
+ (0, _react().useEffect)(() => {
104
+ if (!channelsReady || registryReady || !isWaitingForFreshData) {
105
+ if (waitTimeoutRef.current !== null) {
106
+ window.clearTimeout(waitTimeoutRef.current);
107
+ waitTimeoutRef.current = null;
108
+ }
109
+ return;
110
+ }
111
+ waitTimeoutRef.current = window.setTimeout(() => {
112
+ setIsWaitingForFreshData(false);
113
+ waitTimeoutRef.current = null;
114
+ }, WAIT_FOR_CONTROLS_MS);
115
+ return () => {
116
+ if (waitTimeoutRef.current !== null) {
117
+ window.clearTimeout(waitTimeoutRef.current);
118
+ waitTimeoutRef.current = null;
119
+ }
120
+ };
121
+ }, [channelsReady, registryReady, isWaitingForFreshData, currentKey]);
122
+ const status = (0, _react().useMemo)(() => {
123
+ if (!channelsReady) return 'empty';
124
+ if (isWaitingForFreshData) return 'loading';
125
+ if (!registryReady && !hasSubscribers) return 'empty';
126
+ return hasControls ? 'available' : 'empty';
127
+ }, [channelsReady, isWaitingForFreshData, registryReady, hasSubscribers, hasControls]);
128
+ (0, _react().useEffect)(() => {
129
+ onStatusChange?.(status);
130
+ }, [status, onStatusChange]);
131
+ const handleChange = (0, _react().useCallback)((control, value) => {
132
+ model.updateControl(control.id, value, control.source);
133
+ }, [model]);
134
+ if (status === 'loading') {
135
+ return /*#__PURE__*/_react().default.createElement("div", {
136
+ className: _liveControlsDiffPanelModule().default.loader
137
+ }, /*#__PURE__*/_react().default.createElement(_baseUiLoaders().LineSkeleton, {
138
+ width: "68px"
139
+ }), /*#__PURE__*/_react().default.createElement(_baseUiLoaders().LineSkeleton, {
140
+ width: "52px"
141
+ }), /*#__PURE__*/_react().default.createElement(_baseUiLoaders().LineSkeleton, {
142
+ width: "72px"
143
+ }));
144
+ }
145
+ if (status === 'empty') {
146
+ if (!showEmptyState) return null;
147
+ return /*#__PURE__*/_react().default.createElement("div", {
148
+ className: _liveControlsDiffPanelModule().default.emptyState
149
+ }, /*#__PURE__*/_react().default.createElement("div", {
150
+ className: _liveControlsDiffPanelModule().default.emptyStateIconWrap
151
+ }, /*#__PURE__*/_react().default.createElement(_evangelistElements().Icon, {
152
+ of: "scan-component",
153
+ className: _liveControlsDiffPanelModule().default.emptyStateIcon,
154
+ "aria-hidden": true
155
+ })), /*#__PURE__*/_react().default.createElement("div", {
156
+ className: _liveControlsDiffPanelModule().default.emptyStateText
157
+ }, /*#__PURE__*/_react().default.createElement("div", {
158
+ className: _liveControlsDiffPanelModule().default.emptyStateTitle
159
+ }, "No live controls"), /*#__PURE__*/_react().default.createElement("div", {
160
+ className: _liveControlsDiffPanelModule().default.emptyStateSubtitle
161
+ }, "This composition does not expose live controls.")));
162
+ }
163
+ const commonControls = controls.filter(c => c.source === 'common');
164
+ const baseControls = controls.filter(c => c.source === 'base');
165
+ const compareControls = controls.filter(c => c.source === 'compare');
166
+ const hasBaseOrCompare = baseControls.length > 0 || compareControls.length > 0;
167
+ const hasBaseAndCompare = baseControls.length > 0 && compareControls.length > 0;
168
+ const getControlValue = control => {
169
+ return model.getValueForControl(control.id, control.source);
170
+ };
171
+ const renderControlList = list => /*#__PURE__*/_react().default.createElement("ul", {
172
+ className: _liveControlsDiffPanelModule().default.controlsList
173
+ }, list.map(control => {
174
+ const inputType = control.input || 'text';
175
+ const isWideControl = inputType === 'longtext' || inputType === 'multiselect' || inputType === 'json';
176
+ const InputComponent = (0, _liveControlInput().getInputComponent)(inputType);
177
+ const key = `${control.id}-${control.source}`;
178
+ const value = getControlValue(control);
179
+ return /*#__PURE__*/_react().default.createElement("li", {
180
+ key: key,
181
+ className: (0, _classnames().default)(_liveControlsDiffPanelModule().default.controlRow, isWideControl && _liveControlsDiffPanelModule().default.controlRowWide)
182
+ }, /*#__PURE__*/_react().default.createElement("div", {
183
+ className: _liveControlsDiffPanelModule().default.controlMain
184
+ }, /*#__PURE__*/_react().default.createElement("div", {
185
+ className: _liveControlsDiffPanelModule().default.controlLabel
186
+ }, /*#__PURE__*/_react().default.createElement("label", {
187
+ htmlFor: `control-${key}`
188
+ }, control.label || control.id)), /*#__PURE__*/_react().default.createElement("div", {
189
+ className: _liveControlsDiffPanelModule().default.controlInput
190
+ }, /*#__PURE__*/_react().default.createElement(InputComponent, {
191
+ id: `control-${key}`,
192
+ value: value,
193
+ onChange: val => handleChange(control, val),
194
+ meta: control
195
+ }))));
196
+ }));
197
+ return /*#__PURE__*/_react().default.createElement("div", {
198
+ className: _liveControlsDiffPanelModule().default.container
199
+ }, /*#__PURE__*/_react().default.createElement("div", {
200
+ className: _liveControlsDiffPanelModule().default.columnsLayout
201
+ }, commonControls.length > 0 && /*#__PURE__*/_react().default.createElement("div", {
202
+ className: _liveControlsDiffPanelModule().default.column
203
+ }, /*#__PURE__*/_react().default.createElement("div", {
204
+ className: _liveControlsDiffPanelModule().default.columnHeader
205
+ }, commonLabel), renderControlList(commonControls)), commonControls.length > 0 && hasBaseOrCompare && /*#__PURE__*/_react().default.createElement("div", {
206
+ className: _liveControlsDiffPanelModule().default.columnDivider
207
+ }), baseControls.length > 0 && /*#__PURE__*/_react().default.createElement("div", {
208
+ className: _liveControlsDiffPanelModule().default.column
209
+ }, /*#__PURE__*/_react().default.createElement("div", {
210
+ className: _liveControlsDiffPanelModule().default.columnHeader
211
+ }, baseLabel), renderControlList(baseControls)), hasBaseAndCompare && /*#__PURE__*/_react().default.createElement("div", {
212
+ className: _liveControlsDiffPanelModule().default.columnDivider
213
+ }), compareControls.length > 0 && /*#__PURE__*/_react().default.createElement("div", {
214
+ className: _liveControlsDiffPanelModule().default.column
215
+ }, /*#__PURE__*/_react().default.createElement("div", {
216
+ className: _liveControlsDiffPanelModule().default.columnHeader
217
+ }, compareLabel), renderControlList(compareControls))));
218
+ }
219
+
220
+ //# sourceMappingURL=live-controls-diff-panel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","data","_interopRequireWildcard","require","_compositionsUi","_baseUiLoaders","_evangelistElements","_classnames","_interopRequireDefault","_liveControlInput","_liveControlsDiffPanelModule","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","WAIT_FOR_CONTROLS_MS","LiveControlsDiffPanel","resetKey","baseChannel","compareChannel","commonLabel","baseLabel","compareLabel","showEmptyState","onStatusChange","lastResetKeyRef","useRef","isWaitingForFreshData","setIsWaitingForFreshData","useState","waitTimeoutRef","currentKey","model","useMemo","DiffControlsModel","allChannels","channels","includes","push","Set","combined","useLiveControls","ready","combinedReady","setTimestamp","useEffect","current","channelsReady","Boolean","registryReady","isReady","controls","hasControls","length","hasSubscribers","prevRegistryReady","window","clearTimeout","setTimeout","status","handleChange","useCallback","control","value","updateControl","id","source","createElement","className","styles","loader","LineSkeleton","width","emptyState","emptyStateIconWrap","Icon","of","emptyStateIcon","emptyStateText","emptyStateTitle","emptyStateSubtitle","commonControls","filter","c","baseControls","compareControls","hasBaseOrCompare","hasBaseAndCompare","getControlValue","getValueForControl","renderControlList","list","controlsList","map","inputType","input","isWideControl","InputComponent","getInputComponent","key","classNames","controlRow","controlRowWide","controlMain","controlLabel","htmlFor","label","controlInput","onChange","val","meta","container","columnsLayout","column","columnHeader","columnDivider"],"sources":["live-controls-diff-panel.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport {\n DiffControlsModel,\n useLiveControls,\n type ControlWithSource,\n} from '@teambit/compositions.ui.composition-live-controls';\nimport { LineSkeleton } from '@teambit/base-ui.loaders.skeleton';\nimport { Icon } from '@teambit/evangelist.elements.icon';\nimport classNames from 'classnames';\nimport { getInputComponent } from './live-control-input';\n\nimport styles from './live-controls-diff-panel.module.scss';\n\ntype PanelStatus = 'loading' | 'available' | 'empty';\nconst WAIT_FOR_CONTROLS_MS = 1200;\n\nexport type LiveControlsDiffPanelProps = {\n resetKey?: string;\n baseChannel?: string;\n compareChannel?: string;\n commonLabel?: string;\n baseLabel?: string;\n compareLabel?: string;\n showEmptyState?: boolean;\n onStatusChange?: (status: PanelStatus) => void;\n};\n\nexport function LiveControlsDiffPanel({\n resetKey,\n baseChannel,\n compareChannel,\n commonLabel = 'Common',\n baseLabel = 'Base',\n compareLabel = 'Compare',\n showEmptyState = true,\n onStatusChange,\n}: LiveControlsDiffPanelProps) {\n const lastResetKeyRef = useRef<string | null>(null);\n const [isWaitingForFreshData, setIsWaitingForFreshData] = useState(true);\n const waitTimeoutRef = useRef<number | null>(null);\n const currentKey = `${baseChannel || ''}-${compareChannel || ''}-${resetKey || ''}`;\n\n const model = useMemo(() => new DiffControlsModel(baseChannel, compareChannel), [baseChannel, compareChannel]);\n\n const allChannels = useMemo(() => {\n const channels = [model.baseChannel, model.compareChannel];\n if (!channels.includes('default')) channels.push('default');\n return [...new Set(channels)];\n }, [model.baseChannel, model.compareChannel]);\n\n const combined = useLiveControls(allChannels);\n const { ready: combinedReady, setTimestamp } = combined;\n\n useEffect(() => {\n if (lastResetKeyRef.current !== currentKey) {\n lastResetKeyRef.current = currentKey;\n setIsWaitingForFreshData(true);\n setTimestamp(0);\n }\n }, [currentKey, setTimestamp]);\n\n const channelsReady = Boolean(baseChannel && compareChannel);\n const registryReady = combinedReady || model.isReady;\n const controls = model.controls;\n const hasControls = controls.length > 0;\n const hasSubscribers = model.hasSubscribers;\n\n const prevRegistryReady = useRef(registryReady);\n useEffect(() => {\n if (registryReady && !prevRegistryReady.current && isWaitingForFreshData) {\n setIsWaitingForFreshData(false);\n }\n prevRegistryReady.current = registryReady;\n }, [registryReady, isWaitingForFreshData]);\n\n useEffect(() => {\n if (!channelsReady || registryReady || !isWaitingForFreshData) {\n if (waitTimeoutRef.current !== null) {\n window.clearTimeout(waitTimeoutRef.current);\n waitTimeoutRef.current = null;\n }\n return;\n }\n\n waitTimeoutRef.current = window.setTimeout(() => {\n setIsWaitingForFreshData(false);\n waitTimeoutRef.current = null;\n }, WAIT_FOR_CONTROLS_MS);\n\n return () => {\n if (waitTimeoutRef.current !== null) {\n window.clearTimeout(waitTimeoutRef.current);\n waitTimeoutRef.current = null;\n }\n };\n }, [channelsReady, registryReady, isWaitingForFreshData, currentKey]);\n\n const status: PanelStatus = useMemo(() => {\n if (!channelsReady) return 'empty';\n if (isWaitingForFreshData) return 'loading';\n if (!registryReady && !hasSubscribers) return 'empty';\n return hasControls ? 'available' : 'empty';\n }, [channelsReady, isWaitingForFreshData, registryReady, hasSubscribers, hasControls]);\n\n useEffect(() => {\n onStatusChange?.(status);\n }, [status, onStatusChange]);\n\n const handleChange = useCallback(\n (control: ControlWithSource, value: any) => {\n model.updateControl(control.id, value, control.source);\n },\n [model]\n );\n\n if (status === 'loading') {\n return (\n <div className={styles.loader}>\n <LineSkeleton width=\"68px\" />\n <LineSkeleton width=\"52px\" />\n <LineSkeleton width=\"72px\" />\n </div>\n );\n }\n\n if (status === 'empty') {\n if (!showEmptyState) return null;\n return (\n <div className={styles.emptyState}>\n <div className={styles.emptyStateIconWrap}>\n <Icon of=\"scan-component\" className={styles.emptyStateIcon} aria-hidden />\n </div>\n <div className={styles.emptyStateText}>\n <div className={styles.emptyStateTitle}>No live controls</div>\n <div className={styles.emptyStateSubtitle}>This composition does not expose live controls.</div>\n </div>\n </div>\n );\n }\n\n const commonControls = controls.filter((c) => c.source === 'common');\n const baseControls = controls.filter((c) => c.source === 'base');\n const compareControls = controls.filter((c) => c.source === 'compare');\n const hasBaseOrCompare = baseControls.length > 0 || compareControls.length > 0;\n const hasBaseAndCompare = baseControls.length > 0 && compareControls.length > 0;\n\n const getControlValue = (control: ControlWithSource) => {\n return model.getValueForControl(control.id, control.source);\n };\n\n const renderControlList = (list: ControlWithSource[]) => (\n <ul className={styles.controlsList}>\n {list.map((control) => {\n const inputType = control.input || 'text';\n const isWideControl = inputType === 'longtext' || inputType === 'multiselect' || inputType === 'json';\n const InputComponent = getInputComponent(inputType);\n const key = `${control.id}-${control.source}`;\n const value = getControlValue(control);\n return (\n <li key={key} className={classNames(styles.controlRow, isWideControl && styles.controlRowWide)}>\n <div className={styles.controlMain}>\n <div className={styles.controlLabel}>\n <label htmlFor={`control-${key}`}>{control.label || control.id}</label>\n </div>\n <div className={styles.controlInput}>\n <InputComponent\n id={`control-${key}`}\n value={value}\n onChange={(val: any) => handleChange(control, val)}\n meta={control}\n />\n </div>\n </div>\n </li>\n );\n })}\n </ul>\n );\n\n return (\n <div className={styles.container}>\n <div className={styles.columnsLayout}>\n {commonControls.length > 0 && (\n <div className={styles.column}>\n <div className={styles.columnHeader}>{commonLabel}</div>\n {renderControlList(commonControls)}\n </div>\n )}\n {commonControls.length > 0 && hasBaseOrCompare && <div className={styles.columnDivider} />}\n {baseControls.length > 0 && (\n <div className={styles.column}>\n <div className={styles.columnHeader}>{baseLabel}</div>\n {renderControlList(baseControls)}\n </div>\n )}\n {hasBaseAndCompare && <div className={styles.columnDivider} />}\n {compareControls.length > 0 && (\n <div className={styles.column}>\n <div className={styles.columnHeader}>{compareLabel}</div>\n {renderControlList(compareControls)}\n </div>\n )}\n </div>\n </div>\n );\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,185 @@
1
+ .container {
2
+ display: flex;
3
+ flex-direction: column;
4
+ height: 100%;
5
+ min-height: 0;
6
+ }
7
+
8
+ .columnsLayout {
9
+ display: flex;
10
+ gap: 0;
11
+ height: 100%;
12
+ min-height: 0;
13
+ overflow: auto;
14
+ align-items: stretch;
15
+ }
16
+
17
+ .column {
18
+ flex: 1 1 0;
19
+ min-width: 320px;
20
+ padding: 0 16px;
21
+ overflow: visible;
22
+
23
+ &:first-child {
24
+ padding-left: 0;
25
+ }
26
+
27
+ &:last-child {
28
+ padding-right: 0;
29
+ }
30
+ }
31
+
32
+ .columnHeader {
33
+ font-size: var(--bit-p-xxs, 12px);
34
+ font-weight: 600;
35
+ text-transform: uppercase;
36
+ letter-spacing: 0.5px;
37
+ line-height: 1.3;
38
+ color: var(--on-background-color, #222222);
39
+ opacity: 0.5;
40
+ margin-bottom: 12px;
41
+ padding-bottom: 8px;
42
+ border-bottom: 1px solid var(--border-color, rgba(0, 0, 0, 0.08));
43
+ }
44
+
45
+ .columnDivider {
46
+ width: 1px;
47
+ background: var(--border-medium-color, rgba(0, 0, 0, 0.14));
48
+ flex-shrink: 0;
49
+ margin: 0 8px;
50
+ }
51
+
52
+ .controlsList {
53
+ list-style: none;
54
+ margin: 0;
55
+ padding: 0;
56
+ display: grid;
57
+ grid-template-columns: repeat(2, minmax(0, 1fr));
58
+ gap: 14px 12px;
59
+ align-items: start;
60
+ }
61
+
62
+ .controlRow {
63
+ display: block;
64
+ min-width: 0;
65
+ margin: 0;
66
+ padding: 0;
67
+ }
68
+
69
+ .controlRowWide {
70
+ grid-column: 1 / -1;
71
+ }
72
+
73
+ .controlMain {
74
+ display: grid;
75
+ grid-template-rows: auto minmax(36px, auto);
76
+ align-content: start;
77
+ row-gap: 8px;
78
+ flex: 1;
79
+ min-width: 0;
80
+ }
81
+
82
+ .controlInput {
83
+ min-width: 0;
84
+ }
85
+
86
+ .controlLabel {
87
+ display: flex;
88
+ align-items: center;
89
+ gap: 6px;
90
+ margin-bottom: 0;
91
+ min-height: 20px;
92
+
93
+ label {
94
+ font-size: var(--bit-p-xs, 13px);
95
+ font-weight: 500;
96
+ color: var(--on-background-color, #222222);
97
+ }
98
+ }
99
+
100
+ .sourceTag {
101
+ font-size: 10px;
102
+ line-height: 14px;
103
+ padding: 0 5px;
104
+ border-radius: 999px;
105
+ text-transform: capitalize;
106
+ font-weight: 500;
107
+ }
108
+
109
+ .tagCommon {
110
+ background: rgba(106, 87, 253, 0.12);
111
+ color: var(--primary-color, #6a57fd);
112
+ }
113
+
114
+ .tagBase {
115
+ background: rgba(255, 152, 0, 0.12);
116
+ color: #e65100;
117
+ }
118
+
119
+ .tagCompare {
120
+ background: rgba(33, 150, 243, 0.12);
121
+ color: #1565c0;
122
+ }
123
+
124
+ .loader {
125
+ display: flex;
126
+ align-items: center;
127
+ gap: 12px;
128
+ padding: 10px 0;
129
+ color: var(--skeleton-color, #e0e0e0);
130
+ }
131
+
132
+ @media (max-width: 1200px) {
133
+ .column {
134
+ min-width: 280px;
135
+ }
136
+
137
+ .controlsList {
138
+ grid-template-columns: 1fr;
139
+ gap: 12px;
140
+ }
141
+ }
142
+
143
+ .emptyState {
144
+ display: flex;
145
+ align-items: center;
146
+ gap: 12px;
147
+ padding: 12px;
148
+ border: 1px dashed var(--border-medium-color, rgba(0, 0, 0, 0.12));
149
+ border-radius: 8px;
150
+ background: var(--background-color, #ffffff);
151
+ }
152
+
153
+ .emptyStateIconWrap {
154
+ width: 32px;
155
+ height: 32px;
156
+ border-radius: 8px;
157
+ background: rgba(0, 0, 0, 0.04);
158
+ display: flex;
159
+ align-items: center;
160
+ justify-content: center;
161
+ }
162
+
163
+ .emptyStateIcon {
164
+ width: 18px;
165
+ height: 18px;
166
+ opacity: 0.7;
167
+ }
168
+
169
+ .emptyStateText {
170
+ display: flex;
171
+ flex-direction: column;
172
+ gap: 2px;
173
+ }
174
+
175
+ .emptyStateTitle {
176
+ font-size: var(--bit-p-xs, 13px);
177
+ font-weight: 600;
178
+ color: var(--on-background-color, #222222);
179
+ }
180
+
181
+ .emptyStateSubtitle {
182
+ font-size: var(--bit-p-xxs, 12px);
183
+ color: var(--on-background-color, #222222);
184
+ opacity: 0.7;
185
+ }
@@ -0,0 +1 @@
1
+ export declare function LiveControlsRenderer(): import("react/jsx-runtime").JSX.Element | null;
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.LiveControlsRenderer = LiveControlsRenderer;
7
+ function _react() {
8
+ const data = _interopRequireDefault(require("react"));
9
+ _react = function () {
10
+ return data;
11
+ };
12
+ return data;
13
+ }
14
+ function _liveControlPanel() {
15
+ const data = require("./live-control-panel");
16
+ _liveControlPanel = function () {
17
+ return data;
18
+ };
19
+ return data;
20
+ }
21
+ function _compositionsUi() {
22
+ const data = require("@teambit/compositions.ui.composition-live-controls");
23
+ _compositionsUi = function () {
24
+ return data;
25
+ };
26
+ return data;
27
+ }
28
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
29
+ function LiveControlsRenderer() {
30
+ const {
31
+ hasLiveControls,
32
+ ready,
33
+ defs,
34
+ values,
35
+ onChange
36
+ } = (0, _compositionsUi().useLiveControls)();
37
+ if (!hasLiveControls) return null;
38
+ if (!ready) {
39
+ return /*#__PURE__*/_react().default.createElement("div", {
40
+ style: {
41
+ padding: 12,
42
+ opacity: 0.7
43
+ }
44
+ }, "No live controls available.");
45
+ }
46
+ return /*#__PURE__*/_react().default.createElement(_liveControlPanel().LiveControls, {
47
+ defs: defs,
48
+ values: values,
49
+ onChange: onChange
50
+ });
51
+ }
52
+
53
+ //# sourceMappingURL=live-controls-renderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","data","_interopRequireDefault","require","_liveControlPanel","_compositionsUi","e","__esModule","default","LiveControlsRenderer","hasLiveControls","ready","defs","values","onChange","useLiveControls","createElement","style","padding","opacity","LiveControls"],"sources":["live-controls-renderer.tsx"],"sourcesContent":["import React from 'react';\nimport { LiveControls } from './live-control-panel';\nimport { useLiveControls } from '@teambit/compositions.ui.composition-live-controls';\n\nexport function LiveControlsRenderer() {\n const { hasLiveControls, ready, defs, values, onChange } = useLiveControls();\n\n if (!hasLiveControls) return null;\n\n if (!ready) {\n return <div style={{ padding: 12, opacity: 0.7 }}>No live controls available.</div>;\n }\n\n return <LiveControls defs={defs} values={values} onChange={onChange} />;\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,kBAAA;EAAA,MAAAH,IAAA,GAAAE,OAAA;EAAAC,iBAAA,YAAAA,CAAA;IAAA,OAAAH,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAI,gBAAA;EAAA,MAAAJ,IAAA,GAAAE,OAAA;EAAAE,eAAA,YAAAA,CAAA;IAAA,OAAAJ,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAAqF,SAAAC,uBAAAI,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAE9E,SAASG,oBAAoBA,CAAA,EAAG;EACrC,MAAM;IAAEC,eAAe;IAAEC,KAAK;IAAEC,IAAI;IAAEC,MAAM;IAAEC;EAAS,CAAC,GAAG,IAAAC,iCAAe,EAAC,CAAC;EAE5E,IAAI,CAACL,eAAe,EAAE,OAAO,IAAI;EAEjC,IAAI,CAACC,KAAK,EAAE;IACV,oBAAOX,MAAA,GAAAQ,OAAA,CAAAQ,aAAA;MAAKC,KAAK,EAAE;QAAEC,OAAO,EAAE,EAAE;QAAEC,OAAO,EAAE;MAAI;IAAE,GAAC,6BAAgC,CAAC;EACrF;EAEA,oBAAOnB,MAAA,GAAAQ,OAAA,CAAAQ,aAAA,CAACZ,iBAAA,GAAAgB,YAAY;IAACR,IAAI,EAAEA,IAAK;IAACC,MAAM,EAAEA,MAAO;IAACC,QAAQ,EAAEA;EAAS,CAAE,CAAC;AACzE","ignoreList":[]}
@@ -1 +1,5 @@
1
1
  export { ComponentComposition } from './composition-preview';
2
+ export { LiveControls } from './compositions-panel/live-control-panel';
3
+ export { LiveControlsDiffPanel } from './compositions-panel/live-controls-diff-panel';
4
+ export type { LiveControlsDiffPanelProps } from './compositions-panel/live-controls-diff-panel';
5
+ export { LiveControlsRenderer } from './compositions-panel/live-controls-renderer';
package/dist/ui/index.js CHANGED
@@ -9,6 +9,24 @@ Object.defineProperty(exports, "ComponentComposition", {
9
9
  return _compositionPreview().ComponentComposition;
10
10
  }
11
11
  });
12
+ Object.defineProperty(exports, "LiveControls", {
13
+ enumerable: true,
14
+ get: function () {
15
+ return _liveControlPanel().LiveControls;
16
+ }
17
+ });
18
+ Object.defineProperty(exports, "LiveControlsDiffPanel", {
19
+ enumerable: true,
20
+ get: function () {
21
+ return _liveControlsDiffPanel().LiveControlsDiffPanel;
22
+ }
23
+ });
24
+ Object.defineProperty(exports, "LiveControlsRenderer", {
25
+ enumerable: true,
26
+ get: function () {
27
+ return _liveControlsRenderer().LiveControlsRenderer;
28
+ }
29
+ });
12
30
  function _compositionPreview() {
13
31
  const data = require("./composition-preview");
14
32
  _compositionPreview = function () {
@@ -16,5 +34,26 @@ function _compositionPreview() {
16
34
  };
17
35
  return data;
18
36
  }
37
+ function _liveControlPanel() {
38
+ const data = require("./compositions-panel/live-control-panel");
39
+ _liveControlPanel = function () {
40
+ return data;
41
+ };
42
+ return data;
43
+ }
44
+ function _liveControlsDiffPanel() {
45
+ const data = require("./compositions-panel/live-controls-diff-panel");
46
+ _liveControlsDiffPanel = function () {
47
+ return data;
48
+ };
49
+ return data;
50
+ }
51
+ function _liveControlsRenderer() {
52
+ const data = require("./compositions-panel/live-controls-renderer");
53
+ _liveControlsRenderer = function () {
54
+ return data;
55
+ };
56
+ return data;
57
+ }
19
58
 
20
59
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_compositionPreview","data","require"],"sources":["index.ts"],"sourcesContent":["export { ComponentComposition } from './composition-preview';\n"],"mappings":";;;;;;;;;;;AAAA,SAAAA,oBAAA;EAAA,MAAAC,IAAA,GAAAC,OAAA;EAAAF,mBAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA","ignoreList":[]}
1
+ {"version":3,"names":["_compositionPreview","data","require","_liveControlPanel","_liveControlsDiffPanel","_liveControlsRenderer"],"sources":["index.ts"],"sourcesContent":["export { ComponentComposition } from './composition-preview';\nexport { LiveControls } from './compositions-panel/live-control-panel';\nexport { LiveControlsDiffPanel } from './compositions-panel/live-controls-diff-panel';\nexport type { LiveControlsDiffPanelProps } from './compositions-panel/live-controls-diff-panel';\nexport { LiveControlsRenderer } from './compositions-panel/live-controls-renderer';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAAAA,oBAAA;EAAA,MAAAC,IAAA,GAAAC,OAAA;EAAAF,mBAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAE,kBAAA;EAAA,MAAAF,IAAA,GAAAC,OAAA;EAAAC,iBAAA,YAAAA,CAAA;IAAA,OAAAF,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAG,uBAAA;EAAA,MAAAH,IAAA,GAAAC,OAAA;EAAAE,sBAAA,YAAAA,CAAA;IAAA,OAAAH,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEA,SAAAI,sBAAA;EAAA,MAAAJ,IAAA,GAAAC,OAAA;EAAAG,qBAAA,YAAAA,CAAA;IAAA,OAAAJ,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA","ignoreList":[]}
@@ -0,0 +1 @@
1
+ export declare function useDefaultControlsSchemaResponder(componentId: string | undefined, enabled?: boolean): void;