@teambit/compositions 1.0.994 → 1.0.996

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.
@@ -146,20 +146,37 @@
146
146
  border-top: 1px solid var(--bit-border-color-lightest, #eaeaec);
147
147
  background: var(--bit-bg-color, #ffffff);
148
148
  overflow: hidden;
149
+ min-height: 0;
150
+ // Never overflow the previewArea: if the inline `height` (or a user-set
151
+ // resize) ends up taller than the parent allows (e.g. browser zoom shrinks
152
+ // available space, or there are many controls), `max-height` wins and the
153
+ // tray stays inside its container so `trayBody`'s `overflow-y: auto` keeps
154
+ // working instead of the bottom rows getting clipped off-screen.
155
+ max-height: calc(100% - 80px);
156
+ box-sizing: border-box;
149
157
  }
150
158
 
151
- .trayDragHandle {
159
+ .controlsTrayCollapsed {
160
+ // when collapsed, only show the header bar
161
+ height: auto;
162
+ }
163
+
164
+ // ─── Two-zone header: resize strip on top, click-to-collapse below ─────
165
+ // The two zones are visually separated by a divider so the boundary is
166
+ // obvious: top = "grab to resize", bottom = "click to collapse".
167
+
168
+ .trayResizeStrip {
169
+ position: relative;
152
170
  flex-shrink: 0;
153
- height: 8px;
154
- display: flex;
155
- align-items: center;
156
- justify-content: center;
171
+ height: 12px;
157
172
  cursor: ns-resize;
158
- background: transparent;
159
- transition: background 120ms ease;
173
+ user-select: none;
174
+ background: var(--surface01-color, rgba(0, 0, 0, 0.02));
175
+ border-bottom: 1px solid var(--bit-border-color-lightest, #eaeaec);
176
+ transition: background 140ms ease;
160
177
 
161
178
  &:hover {
162
- background: rgba(0, 0, 0, 0.03);
179
+ background: var(--surface-hover-color, rgba(0, 0, 0, 0.05));
163
180
  }
164
181
 
165
182
  &:hover .trayDragBar {
@@ -169,19 +186,36 @@
169
186
  }
170
187
 
171
188
  .trayDragBar {
189
+ position: absolute;
190
+ top: 50%;
191
+ left: 50%;
192
+ transform: translate(-50%, -50%);
172
193
  width: 32px;
173
194
  height: 3px;
174
195
  border-radius: 2px;
175
196
  background: var(--bit-border-color-lightest, #d0d0d3);
176
197
  transition: all 140ms ease;
198
+ pointer-events: none;
177
199
  }
178
200
 
179
- .trayHeader {
180
- flex-shrink: 0;
201
+ .trayHeaderInner {
181
202
  display: flex;
182
203
  align-items: center;
183
204
  justify-content: space-between;
184
- padding: 4px 14px 8px;
205
+ padding: 8px 14px;
206
+ cursor: pointer;
207
+ user-select: none;
208
+ outline: none;
209
+ transition: background 140ms ease;
210
+
211
+ &:hover {
212
+ background: var(--surface-hover-color, rgba(0, 0, 0, 0.03));
213
+ }
214
+ }
215
+
216
+ // give the collapsed bar a bit more breathing room
217
+ .controlsTrayCollapsed .trayHeaderInner {
218
+ padding: 10px 14px;
185
219
  }
186
220
 
187
221
  .trayTitleRow {
@@ -218,29 +252,31 @@
218
252
  line-height: 1;
219
253
  }
220
254
 
221
- .trayClose {
222
- display: flex;
255
+ .trayCollapseIcon {
256
+ display: inline-flex;
223
257
  align-items: center;
224
258
  justify-content: center;
225
- width: 24px;
226
- height: 24px;
227
- border-radius: 4px;
228
- border: none;
229
- background: transparent;
259
+ width: 20px;
260
+ height: 20px;
261
+ font-size: 10px;
230
262
  color: var(--bit-text-color-light, #8b8d98);
231
- cursor: pointer;
232
- font-size: 12px;
233
- padding: 0;
234
- transition: all 120ms ease;
263
+ transform: rotate(90deg);
264
+ transform-origin: center;
265
+ transition: transform 200ms ease-in-out;
266
+ pointer-events: none;
267
+ }
235
268
 
236
- &:hover {
237
- background: rgba(0, 0, 0, 0.06);
238
- color: var(--bit-text-color-heavy, #1c2024);
239
- }
269
+ .trayCollapseIconCollapsed {
270
+ transform: rotate(-90deg);
240
271
  }
241
272
 
242
273
  .trayBody {
243
- flex: 1;
274
+ // `flex-basis: auto` so the body contributes its natural content height to
275
+ // the tray's intrinsic size — without this, an auto-sized tray collapses to
276
+ // just the header. `min-height: 0` keeps `overflow-y: auto` working when
277
+ // the parent's `max-height` clamps the tray.
278
+ flex: 1 1 auto;
279
+ min-height: 0;
244
280
  overflow-y: auto;
245
281
  overflow-x: hidden;
246
282
  }
@@ -2,30 +2,42 @@ import type { ReactNode, ComponentType } from 'react';
2
2
  import type { SlotRegistry } from '@teambit/harmony';
3
3
  import type { ComponentUI } from '@teambit/component';
4
4
  import type { ComponentCompareUI } from '@teambit/component-compare';
5
- import type { UseSandboxPermission } from '@teambit/preview.ui.component-preview';
5
+ import type { UsePreviewProps, UseSandboxPermission } from '@teambit/preview.ui.component-preview';
6
6
  import type { MenuBarWidget } from './compositions';
7
7
  export type CompositionsMenuSlot = SlotRegistry<MenuBarWidget[]>;
8
8
  export type EmptyStateSlot = SlotRegistry<ComponentType>;
9
9
  export type UsePreviewSandboxSlot = SlotRegistry<UseSandboxPermission>;
10
+ export type UsePreviewPropsSlot = SlotRegistry<UsePreviewProps>;
10
11
  export declare class CompositionsUI {
11
12
  private menuBarWidgetSlot;
12
13
  private emptyStateSlot;
13
14
  private usePreviewSandboxSlot;
14
- constructor(menuBarWidgetSlot: CompositionsMenuSlot, emptyStateSlot: EmptyStateSlot, usePreviewSandboxSlot: UsePreviewSandboxSlot);
15
+ private usePreviewPropsSlot;
16
+ constructor(menuBarWidgetSlot: CompositionsMenuSlot, emptyStateSlot: EmptyStateSlot, usePreviewSandboxSlot: UsePreviewSandboxSlot, usePreviewPropsSlot: UsePreviewPropsSlot);
15
17
  /**
16
18
  * register a new tester empty state. this allows to register a different empty state from each environment for example.
17
19
  */
18
20
  registerEmptyState(emptyStateComponent: ComponentType): this;
19
21
  registerMenuWidget(...widget: MenuBarWidget[]): void;
20
22
  registerPreviewSandbox(useSandboxPermission: UseSandboxPermission): void;
23
+ /**
24
+ * register a per-component resolver for iframe attributes on the composition preview
25
+ * (`allow`, `referrerPolicy`, ...). The resolver runs at render time with the current
26
+ * `ComponentModel`; results from multiple resolvers merge with later keys winning. Use
27
+ * this to grant a specific subset of components extra Permissions Policy capabilities
28
+ * (e.g. `fullscreen` for chart/video components) without loosening the default for all
29
+ * components.
30
+ */
31
+ registerPreviewProps(usePreviewProps: UsePreviewProps): void;
21
32
  getCompositionsCompare: () => import("react/jsx-runtime").JSX.Element;
22
33
  static dependencies: import("@teambit/harmony").Aspect[];
23
34
  static runtime: import("@teambit/harmony").RuntimeDefinition;
24
- static slots: (((registerFn: () => string) => SlotRegistry<UseSandboxPermission>) | ((registerFn: () => string) => SlotRegistry<ComponentType>) | ((registerFn: () => string) => SlotRegistry<ReactNode>))[];
25
- static provider([component, componentCompare]: [ComponentUI, ComponentCompareUI], config: {}, [compositionMenuSlot, emptyStateSlot, usePreviewSandboxSlot]: [
35
+ static slots: (((registerFn: () => string) => SlotRegistry<UseSandboxPermission>) | ((registerFn: () => string) => SlotRegistry<UsePreviewProps>) | ((registerFn: () => string) => SlotRegistry<ComponentType>) | ((registerFn: () => string) => SlotRegistry<ReactNode>))[];
36
+ static provider([component, componentCompare]: [ComponentUI, ComponentCompareUI], config: {}, [compositionMenuSlot, emptyStateSlot, usePreviewSandboxSlot, usePreviewPropsSlot]: [
26
37
  CompositionsMenuSlot,
27
38
  EmptyStateSlot,
28
- UsePreviewSandboxSlot
39
+ UsePreviewSandboxSlot,
40
+ UsePreviewPropsSlot
29
41
  ]): Promise<CompositionsUI>;
30
42
  }
31
43
  export default CompositionsUI;
@@ -80,10 +80,11 @@ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object
80
80
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
81
81
  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); }
82
82
  class CompositionsUI {
83
- constructor(menuBarWidgetSlot, emptyStateSlot, usePreviewSandboxSlot) {
83
+ constructor(menuBarWidgetSlot, emptyStateSlot, usePreviewSandboxSlot, usePreviewPropsSlot) {
84
84
  this.menuBarWidgetSlot = menuBarWidgetSlot;
85
85
  this.emptyStateSlot = emptyStateSlot;
86
86
  this.usePreviewSandboxSlot = usePreviewSandboxSlot;
87
+ this.usePreviewPropsSlot = usePreviewPropsSlot;
87
88
  _defineProperty(this, "getCompositionsCompare", () => {
88
89
  return /*#__PURE__*/_react().default.createElement(_compositionsUi2().CompositionCompare, {
89
90
  emptyState: this.emptyStateSlot,
@@ -109,11 +110,23 @@ class CompositionsUI {
109
110
  registerPreviewSandbox(useSandboxPermission) {
110
111
  this.usePreviewSandboxSlot.register(useSandboxPermission);
111
112
  }
112
- static async provider([component, componentCompare], config, [compositionMenuSlot, emptyStateSlot, usePreviewSandboxSlot]) {
113
- const compositions = new CompositionsUI(compositionMenuSlot, emptyStateSlot, usePreviewSandboxSlot);
113
+
114
+ /**
115
+ * register a per-component resolver for iframe attributes on the composition preview
116
+ * (`allow`, `referrerPolicy`, ...). The resolver runs at render time with the current
117
+ * `ComponentModel`; results from multiple resolvers merge with later keys winning. Use
118
+ * this to grant a specific subset of components extra Permissions Policy capabilities
119
+ * (e.g. `fullscreen` for chart/video components) without loosening the default for all
120
+ * components.
121
+ */
122
+ registerPreviewProps(usePreviewProps) {
123
+ this.usePreviewPropsSlot.register(usePreviewProps);
124
+ }
125
+ static async provider([component, componentCompare], config, [compositionMenuSlot, emptyStateSlot, usePreviewSandboxSlot, usePreviewPropsSlot]) {
126
+ const compositions = new CompositionsUI(compositionMenuSlot, emptyStateSlot, usePreviewSandboxSlot, usePreviewPropsSlot);
114
127
  const section = new (_composition().CompositionsSection)(compositions, {
115
128
  menuBarWidgetSlot: compositions.menuBarWidgetSlot
116
- }, emptyStateSlot, usePreviewSandboxSlot);
129
+ }, emptyStateSlot, usePreviewSandboxSlot, usePreviewPropsSlot);
117
130
  const compositionCompare = new (_compositionsUi().CompositionCompareSection)(compositions);
118
131
  component.registerRoute(section.route);
119
132
  component.registerNavigation(section.navigationLink, section.order);
@@ -125,13 +138,19 @@ class CompositionsUI {
125
138
  manager.add('allow-same-origin');
126
139
  }
127
140
  });
141
+ // Default Permissions Policy: allow clipboard writes so copy-to-clipboard buttons in
142
+ // compositions work. Clipboard-read, camera, mic, geolocation, etc. remain denied. Other
143
+ // aspects may layer on (e.g. `fullscreen` for chart/video components).
144
+ compositions.registerPreviewProps(manager => {
145
+ manager.set('allow', 'clipboard-write');
146
+ });
128
147
  return compositions;
129
148
  }
130
149
  }
131
150
  exports.CompositionsUI = CompositionsUI;
132
151
  _defineProperty(CompositionsUI, "dependencies", [_component().ComponentAspect, _componentCompare().ComponentCompareAspect]);
133
152
  _defineProperty(CompositionsUI, "runtime", _ui().UIRuntime);
134
- _defineProperty(CompositionsUI, "slots", [_harmony().Slot.withType(), _harmony().Slot.withType(), _harmony().Slot.withType()]);
153
+ _defineProperty(CompositionsUI, "slots", [_harmony().Slot.withType(), _harmony().Slot.withType(), _harmony().Slot.withType(), _harmony().Slot.withType()]);
135
154
  var _default = exports.default = CompositionsUI;
136
155
  _compositions().CompositionsAspect.addRuntime(CompositionsUI);
137
156
 
@@ -1 +1 @@
1
- {"version":3,"names":["_react","data","_interopRequireDefault","require","_harmony","_component","_ui","_compositionsUi","_compositionsUi2","_componentCompare","_composition","_compositions","_compositions2","e","__esModule","default","_extends","Object","assign","bind","n","arguments","length","t","r","hasOwnProperty","call","apply","_defineProperty","_toPropertyKey","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","CompositionsUI","constructor","menuBarWidgetSlot","emptyStateSlot","usePreviewSandboxSlot","createElement","CompositionCompare","emptyState","PreviewView","compositionProps","CompositionContent","fullContentHeight","forceHeight","registerEmptyState","emptyStateComponent","register","registerMenuWidget","widget","registerPreviewSandbox","useSandboxPermission","provider","component","componentCompare","config","compositionMenuSlot","compositions","section","CompositionsSection","compositionCompare","CompositionCompareSection","registerRoute","route","registerNavigation","navigationLink","order","registerRoutes","manager","componentModel","host","add","exports","ComponentAspect","ComponentCompareAspect","UIRuntime","Slot","withType","_default","CompositionsAspect","addRuntime"],"sources":["compositions.ui.runtime.tsx"],"sourcesContent":["import type { ReactNode, ComponentType } from 'react';\nimport React from 'react';\nimport type { SlotRegistry } from '@teambit/harmony';\nimport { Slot } from '@teambit/harmony';\nimport type { ComponentUI } from '@teambit/component';\nimport { ComponentAspect } from '@teambit/component';\nimport { UIRuntime } from '@teambit/ui';\nimport { CompositionCompareSection } from '@teambit/compositions.ui.composition-compare-section';\nimport { CompositionCompare } from '@teambit/compositions.ui.composition-compare';\nimport type { ComponentCompareUI } from '@teambit/component-compare';\nimport { ComponentCompareAspect } from '@teambit/component-compare';\nimport type { UseSandboxPermission } from '@teambit/preview.ui.component-preview';\nimport { CompositionsSection } from './composition.section';\nimport { CompositionsAspect } from './compositions.aspect';\nimport type { MenuBarWidget } from './compositions';\nimport { CompositionContent } from './compositions';\n\nexport type CompositionsMenuSlot = SlotRegistry<MenuBarWidget[]>;\nexport type EmptyStateSlot = SlotRegistry<ComponentType>;\nexport type UsePreviewSandboxSlot = SlotRegistry<UseSandboxPermission>;\n\nexport class CompositionsUI {\n constructor(\n private menuBarWidgetSlot: CompositionsMenuSlot,\n private emptyStateSlot: EmptyStateSlot,\n private usePreviewSandboxSlot: UsePreviewSandboxSlot\n ) {}\n /**\n * register a new tester empty state. this allows to register a different empty state from each environment for example.\n */\n registerEmptyState(emptyStateComponent: ComponentType) {\n this.emptyStateSlot.register(emptyStateComponent);\n return this;\n }\n\n registerMenuWidget(...widget: MenuBarWidget[]) {\n this.menuBarWidgetSlot.register(widget);\n }\n\n registerPreviewSandbox(useSandboxPermission: UseSandboxPermission) {\n this.usePreviewSandboxSlot.register(useSandboxPermission);\n }\n\n getCompositionsCompare = () => {\n return (\n <CompositionCompare\n emptyState={this.emptyStateSlot}\n PreviewView={(compositionProps) => {\n return <CompositionContent {...compositionProps} fullContentHeight forceHeight={'100%'} />;\n }}\n />\n );\n };\n\n static dependencies = [ComponentAspect, ComponentCompareAspect];\n static runtime = UIRuntime;\n static slots = [Slot.withType<ReactNode>(), Slot.withType<ComponentType>(), Slot.withType<UseSandboxPermission>()];\n\n static async provider(\n [component, componentCompare]: [ComponentUI, ComponentCompareUI],\n config: {},\n [compositionMenuSlot, emptyStateSlot, usePreviewSandboxSlot]: [\n CompositionsMenuSlot,\n EmptyStateSlot,\n UsePreviewSandboxSlot,\n ]\n ) {\n const compositions = new CompositionsUI(compositionMenuSlot, emptyStateSlot, usePreviewSandboxSlot);\n const section = new CompositionsSection(\n compositions,\n { menuBarWidgetSlot: compositions.menuBarWidgetSlot },\n emptyStateSlot,\n usePreviewSandboxSlot\n );\n const compositionCompare = new CompositionCompareSection(compositions);\n component.registerRoute(section.route);\n component.registerNavigation(section.navigationLink, section.order);\n componentCompare.registerNavigation(compositionCompare);\n componentCompare.registerRoutes([compositionCompare.route]);\n compositions.registerPreviewSandbox((manager, componentModel) => {\n if (componentModel?.host === 'teambit.scope/scope') {\n manager.add('allow-scripts');\n manager.add('allow-same-origin');\n }\n });\n return compositions;\n }\n}\n\nexport default CompositionsUI;\n\nCompositionsAspect.addRuntime(CompositionsUI);\n"],"mappings":";;;;;;AACA,SAAAA,OAAA;EAAA,MAAAC,IAAA,GAAAC,sBAAA,CAAAC,OAAA;EAAAH,MAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEA,SAAAG,SAAA;EAAA,MAAAH,IAAA,GAAAE,OAAA;EAAAC,QAAA,YAAAA,CAAA;IAAA,OAAAH,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEA,SAAAI,WAAA;EAAA,MAAAJ,IAAA,GAAAE,OAAA;EAAAE,UAAA,YAAAA,CAAA;IAAA,OAAAJ,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAK,IAAA;EAAA,MAAAL,IAAA,GAAAE,OAAA;EAAAG,GAAA,YAAAA,CAAA;IAAA,OAAAL,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAM,gBAAA;EAAA,MAAAN,IAAA,GAAAE,OAAA;EAAAI,eAAA,YAAAA,CAAA;IAAA,OAAAN,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAO,iBAAA;EAAA,MAAAP,IAAA,GAAAE,OAAA;EAAAK,gBAAA,YAAAA,CAAA;IAAA,OAAAP,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEA,SAAAQ,kBAAA;EAAA,MAAAR,IAAA,GAAAE,OAAA;EAAAM,iBAAA,YAAAA,CAAA;IAAA,OAAAR,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEA,SAAAS,aAAA;EAAA,MAAAT,IAAA,GAAAE,OAAA;EAAAO,YAAA,YAAAA,CAAA;IAAA,OAAAT,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAU,cAAA;EAAA,MAAAV,IAAA,GAAAE,OAAA;EAAAQ,aAAA,YAAAA,CAAA;IAAA,OAAAV,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEA,SAAAW,eAAA;EAAA,MAAAX,IAAA,GAAAE,OAAA;EAAAS,cAAA,YAAAA,CAAA;IAAA,OAAAX,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAAoD,SAAAC,uBAAAW,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAAA,SAAAG,SAAA,WAAAA,QAAA,GAAAC,MAAA,CAAAC,MAAA,GAAAD,MAAA,CAAAC,MAAA,CAAAC,IAAA,eAAAC,CAAA,aAAAP,CAAA,MAAAA,CAAA,GAAAQ,SAAA,CAAAC,MAAA,EAAAT,CAAA,UAAAU,CAAA,GAAAF,SAAA,CAAAR,CAAA,YAAAW,CAAA,IAAAD,CAAA,OAAAE,cAAA,CAAAC,IAAA,CAAAH,CAAA,EAAAC,CAAA,MAAAJ,CAAA,CAAAI,CAAA,IAAAD,CAAA,CAAAC,CAAA,aAAAJ,CAAA,KAAAJ,QAAA,CAAAW,KAAA,OAAAN,SAAA;AAAA,SAAAO,gBAAAf,CAAA,EAAAW,CAAA,EAAAD,CAAA,YAAAC,CAAA,GAAAK,cAAA,CAAAL,CAAA,MAAAX,CAAA,GAAAI,MAAA,CAAAa,cAAA,CAAAjB,CAAA,EAAAW,CAAA,IAAAO,KAAA,EAAAR,CAAA,EAAAS,UAAA,MAAAC,YAAA,MAAAC,QAAA,UAAArB,CAAA,CAAAW,CAAA,IAAAD,CAAA,EAAAV,CAAA;AAAA,SAAAgB,eAAAN,CAAA,QAAAY,CAAA,GAAAC,YAAA,CAAAb,CAAA,uCAAAY,CAAA,GAAAA,CAAA,GAAAA,CAAA;AAAA,SAAAC,aAAAb,CAAA,EAAAC,CAAA,2BAAAD,CAAA,KAAAA,CAAA,SAAAA,CAAA,MAAAV,CAAA,GAAAU,CAAA,CAAAc,MAAA,CAAAC,WAAA,kBAAAzB,CAAA,QAAAsB,CAAA,GAAAtB,CAAA,CAAAa,IAAA,CAAAH,CAAA,EAAAC,CAAA,uCAAAW,CAAA,SAAAA,CAAA,YAAAI,SAAA,yEAAAf,CAAA,GAAAgB,MAAA,GAAAC,MAAA,EAAAlB,CAAA;AAM7C,MAAMmB,cAAc,CAAC;EAC1BC,WAAWA,CACDC,iBAAuC,EACvCC,cAA8B,EAC9BC,qBAA4C,EACpD;IAAA,KAHQF,iBAAuC,GAAvCA,iBAAuC;IAAA,KACvCC,cAA8B,GAA9BA,cAA8B;IAAA,KAC9BC,qBAA4C,GAA5CA,qBAA4C;IAAAlB,eAAA,iCAkB7B,MAAM;MAC7B,oBACE5B,MAAA,GAAAe,OAAA,CAAAgC,aAAA,CAACvC,gBAAA,GAAAwC,kBAAkB;QACjBC,UAAU,EAAE,IAAI,CAACJ,cAAe;QAChCK,WAAW,EAAGC,gBAAgB,IAAK;UACjC,oBAAOnD,MAAA,GAAAe,OAAA,CAAAgC,aAAA,CAACnC,cAAA,GAAAwC,kBAAkB,EAAApC,QAAA,KAAKmC,gBAAgB;YAAEE,iBAAiB;YAACC,WAAW,EAAE;UAAO,EAAE,CAAC;QAC5F;MAAE,CACH,CAAC;IAEN,CAAC;EA1BE;EACH;AACF;AACA;EACEC,kBAAkBA,CAACC,mBAAkC,EAAE;IACrD,IAAI,CAACX,cAAc,CAACY,QAAQ,CAACD,mBAAmB,CAAC;IACjD,OAAO,IAAI;EACb;EAEAE,kBAAkBA,CAAC,GAAGC,MAAuB,EAAE;IAC7C,IAAI,CAACf,iBAAiB,CAACa,QAAQ,CAACE,MAAM,CAAC;EACzC;EAEAC,sBAAsBA,CAACC,oBAA0C,EAAE;IACjE,IAAI,CAACf,qBAAqB,CAACW,QAAQ,CAACI,oBAAoB,CAAC;EAC3D;EAiBA,aAAaC,QAAQA,CACnB,CAACC,SAAS,EAAEC,gBAAgB,CAAoC,EAChEC,MAAU,EACV,CAACC,mBAAmB,EAAErB,cAAc,EAAEC,qBAAqB,CAI1D,EACD;IACA,MAAMqB,YAAY,GAAG,IAAIzB,cAAc,CAACwB,mBAAmB,EAAErB,cAAc,EAAEC,qBAAqB,CAAC;IACnG,MAAMsB,OAAO,GAAG,KAAIC,kCAAmB,EACrCF,YAAY,EACZ;MAAEvB,iBAAiB,EAAEuB,YAAY,CAACvB;IAAkB,CAAC,EACrDC,cAAc,EACdC,qBACF,CAAC;IACD,MAAMwB,kBAAkB,GAAG,KAAIC,2CAAyB,EAACJ,YAAY,CAAC;IACtEJ,SAAS,CAACS,aAAa,CAACJ,OAAO,CAACK,KAAK,CAAC;IACtCV,SAAS,CAACW,kBAAkB,CAACN,OAAO,CAACO,cAAc,EAAEP,OAAO,CAACQ,KAAK,CAAC;IACnEZ,gBAAgB,CAACU,kBAAkB,CAACJ,kBAAkB,CAAC;IACvDN,gBAAgB,CAACa,cAAc,CAAC,CAACP,kBAAkB,CAACG,KAAK,CAAC,CAAC;IAC3DN,YAAY,CAACP,sBAAsB,CAAC,CAACkB,OAAO,EAAEC,cAAc,KAAK;MAC/D,IAAIA,cAAc,EAAEC,IAAI,KAAK,qBAAqB,EAAE;QAClDF,OAAO,CAACG,GAAG,CAAC,eAAe,CAAC;QAC5BH,OAAO,CAACG,GAAG,CAAC,mBAAmB,CAAC;MAClC;IACF,CAAC,CAAC;IACF,OAAOd,YAAY;EACrB;AACF;AAACe,OAAA,CAAAxC,cAAA,GAAAA,cAAA;AAAAd,eAAA,CAlEYc,cAAc,kBAiCH,CAACyC,4BAAe,EAAEC,0CAAsB,CAAC;AAAAxD,eAAA,CAjCpDc,cAAc,aAkCR2C,eAAS;AAAAzD,eAAA,CAlCfc,cAAc,WAmCV,CAAC4C,eAAI,CAACC,QAAQ,CAAY,CAAC,EAAED,eAAI,CAACC,QAAQ,CAAgB,CAAC,EAAED,eAAI,CAACC,QAAQ,CAAuB,CAAC,CAAC;AAAA,IAAAC,QAAA,GAAAN,OAAA,CAAAnE,OAAA,GAiCrG2B,cAAc;AAE7B+C,kCAAkB,CAACC,UAAU,CAAChD,cAAc,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["_react","data","_interopRequireDefault","require","_harmony","_component","_ui","_compositionsUi","_compositionsUi2","_componentCompare","_composition","_compositions","_compositions2","e","__esModule","default","_extends","Object","assign","bind","n","arguments","length","t","r","hasOwnProperty","call","apply","_defineProperty","_toPropertyKey","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","CompositionsUI","constructor","menuBarWidgetSlot","emptyStateSlot","usePreviewSandboxSlot","usePreviewPropsSlot","createElement","CompositionCompare","emptyState","PreviewView","compositionProps","CompositionContent","fullContentHeight","forceHeight","registerEmptyState","emptyStateComponent","register","registerMenuWidget","widget","registerPreviewSandbox","useSandboxPermission","registerPreviewProps","usePreviewProps","provider","component","componentCompare","config","compositionMenuSlot","compositions","section","CompositionsSection","compositionCompare","CompositionCompareSection","registerRoute","route","registerNavigation","navigationLink","order","registerRoutes","manager","componentModel","host","add","set","exports","ComponentAspect","ComponentCompareAspect","UIRuntime","Slot","withType","_default","CompositionsAspect","addRuntime"],"sources":["compositions.ui.runtime.tsx"],"sourcesContent":["import type { ReactNode, ComponentType } from 'react';\nimport React from 'react';\nimport type { SlotRegistry } from '@teambit/harmony';\nimport { Slot } from '@teambit/harmony';\nimport type { ComponentUI } from '@teambit/component';\nimport { ComponentAspect } from '@teambit/component';\nimport { UIRuntime } from '@teambit/ui';\nimport { CompositionCompareSection } from '@teambit/compositions.ui.composition-compare-section';\nimport { CompositionCompare } from '@teambit/compositions.ui.composition-compare';\nimport type { ComponentCompareUI } from '@teambit/component-compare';\nimport { ComponentCompareAspect } from '@teambit/component-compare';\nimport type { UsePreviewProps, UseSandboxPermission } from '@teambit/preview.ui.component-preview';\nimport { CompositionsSection } from './composition.section';\nimport { CompositionsAspect } from './compositions.aspect';\nimport type { MenuBarWidget } from './compositions';\nimport { CompositionContent } from './compositions';\n\nexport type CompositionsMenuSlot = SlotRegistry<MenuBarWidget[]>;\nexport type EmptyStateSlot = SlotRegistry<ComponentType>;\nexport type UsePreviewSandboxSlot = SlotRegistry<UseSandboxPermission>;\nexport type UsePreviewPropsSlot = SlotRegistry<UsePreviewProps>;\n\nexport class CompositionsUI {\n constructor(\n private menuBarWidgetSlot: CompositionsMenuSlot,\n private emptyStateSlot: EmptyStateSlot,\n private usePreviewSandboxSlot: UsePreviewSandboxSlot,\n private usePreviewPropsSlot: UsePreviewPropsSlot\n ) {}\n /**\n * register a new tester empty state. this allows to register a different empty state from each environment for example.\n */\n registerEmptyState(emptyStateComponent: ComponentType) {\n this.emptyStateSlot.register(emptyStateComponent);\n return this;\n }\n\n registerMenuWidget(...widget: MenuBarWidget[]) {\n this.menuBarWidgetSlot.register(widget);\n }\n\n registerPreviewSandbox(useSandboxPermission: UseSandboxPermission) {\n this.usePreviewSandboxSlot.register(useSandboxPermission);\n }\n\n /**\n * register a per-component resolver for iframe attributes on the composition preview\n * (`allow`, `referrerPolicy`, ...). The resolver runs at render time with the current\n * `ComponentModel`; results from multiple resolvers merge with later keys winning. Use\n * this to grant a specific subset of components extra Permissions Policy capabilities\n * (e.g. `fullscreen` for chart/video components) without loosening the default for all\n * components.\n */\n registerPreviewProps(usePreviewProps: UsePreviewProps) {\n this.usePreviewPropsSlot.register(usePreviewProps);\n }\n\n getCompositionsCompare = () => {\n return (\n <CompositionCompare\n emptyState={this.emptyStateSlot}\n PreviewView={(compositionProps) => {\n return <CompositionContent {...compositionProps} fullContentHeight forceHeight={'100%'} />;\n }}\n />\n );\n };\n\n static dependencies = [ComponentAspect, ComponentCompareAspect];\n static runtime = UIRuntime;\n static slots = [\n Slot.withType<ReactNode>(),\n Slot.withType<ComponentType>(),\n Slot.withType<UseSandboxPermission>(),\n Slot.withType<UsePreviewProps>(),\n ];\n\n static async provider(\n [component, componentCompare]: [ComponentUI, ComponentCompareUI],\n config: {},\n [compositionMenuSlot, emptyStateSlot, usePreviewSandboxSlot, usePreviewPropsSlot]: [\n CompositionsMenuSlot,\n EmptyStateSlot,\n UsePreviewSandboxSlot,\n UsePreviewPropsSlot,\n ]\n ) {\n const compositions = new CompositionsUI(\n compositionMenuSlot,\n emptyStateSlot,\n usePreviewSandboxSlot,\n usePreviewPropsSlot\n );\n const section = new CompositionsSection(\n compositions,\n { menuBarWidgetSlot: compositions.menuBarWidgetSlot },\n emptyStateSlot,\n usePreviewSandboxSlot,\n usePreviewPropsSlot\n );\n const compositionCompare = new CompositionCompareSection(compositions);\n component.registerRoute(section.route);\n component.registerNavigation(section.navigationLink, section.order);\n componentCompare.registerNavigation(compositionCompare);\n componentCompare.registerRoutes([compositionCompare.route]);\n compositions.registerPreviewSandbox((manager, componentModel) => {\n if (componentModel?.host === 'teambit.scope/scope') {\n manager.add('allow-scripts');\n manager.add('allow-same-origin');\n }\n });\n // Default Permissions Policy: allow clipboard writes so copy-to-clipboard buttons in\n // compositions work. Clipboard-read, camera, mic, geolocation, etc. remain denied. Other\n // aspects may layer on (e.g. `fullscreen` for chart/video components).\n compositions.registerPreviewProps((manager) => {\n manager.set('allow', 'clipboard-write');\n });\n return compositions;\n }\n}\n\nexport default CompositionsUI;\n\nCompositionsAspect.addRuntime(CompositionsUI);\n"],"mappings":"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","ignoreList":[]}
@@ -1,5 +1,5 @@
1
- import * as compositions_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad/teambit.compositions_compositions@1.0.994/dist/compositions.composition.js';
2
- import * as overview_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad/teambit.compositions_compositions@1.0.994/dist/compositions.docs.mdx';
1
+ import * as compositions_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad/teambit.compositions_compositions@1.0.996/dist/compositions.composition.js';
2
+ import * as overview_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad/teambit.compositions_compositions@1.0.996/dist/compositions.docs.mdx';
3
3
 
4
4
  export const compositions = [compositions_0];
5
5
  export const overview = [overview_0];
@@ -3,10 +3,13 @@ import type { Composition } from '../../composition';
3
3
  export type CompositionsPanelProps = {
4
4
  compositions: Composition[];
5
5
  onSelectComposition: (composition: Composition) => void;
6
+ onToggleLiveControls?: () => void;
7
+ hasLiveControls?: boolean;
8
+ liveControlsActive?: boolean;
6
9
  active?: Composition;
7
10
  url: string;
8
11
  isScaling?: boolean;
9
12
  includesEnvTemplate?: boolean;
10
13
  useNameParam?: boolean;
11
14
  } & React.HTMLAttributes<HTMLUListElement>;
12
- export declare function CompositionsPanel({ url, compositions, isScaling, onSelectComposition: onSelect, active, includesEnvTemplate, useNameParam, className, ...rest }: CompositionsPanelProps): import("react/jsx-runtime").JSX.Element;
15
+ export declare function CompositionsPanel({ url, compositions, isScaling, onSelectComposition: onSelect, onToggleLiveControls, hasLiveControls, liveControlsActive, active, includesEnvTemplate, useNameParam, className, ...rest }: CompositionsPanelProps): import("react/jsx-runtime").JSX.Element;
@@ -67,7 +67,7 @@ function _compositionsPanelModule() {
67
67
  };
68
68
  return data;
69
69
  }
70
- const _excluded = ["url", "compositions", "isScaling", "onSelectComposition", "active", "includesEnvTemplate", "useNameParam", "className"];
70
+ const _excluded = ["url", "compositions", "isScaling", "onSelectComposition", "onToggleLiveControls", "hasLiveControls", "liveControlsActive", "active", "includesEnvTemplate", "useNameParam", "className"];
71
71
  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); }
72
72
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
73
73
  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); }
@@ -79,6 +79,9 @@ function CompositionsPanel(_ref) {
79
79
  compositions,
80
80
  isScaling,
81
81
  onSelectComposition: onSelect,
82
+ onToggleLiveControls,
83
+ hasLiveControls,
84
+ liveControlsActive,
82
85
  active,
83
86
  includesEnvTemplate,
84
87
  useNameParam,
@@ -124,7 +127,21 @@ function CompositionsPanel(_ref) {
124
127
  className: _compositionsPanelModule().default.name
125
128
  }, composition.displayName)), /*#__PURE__*/_react().default.createElement("div", {
126
129
  className: _compositionsPanelModule().default.itemActions
127
- }, /*#__PURE__*/_react().default.createElement(_uiFoundationUi().MenuWidgetIcon, {
130
+ }, hasLiveControls && onToggleLiveControls && composition === active && /*#__PURE__*/_react().default.createElement(_designUi().Tooltip, {
131
+ content: liveControlsActive ? 'Hide live controls' : 'Show live controls',
132
+ placement: "bottom"
133
+ }, /*#__PURE__*/_react().default.createElement("button", {
134
+ type: "button",
135
+ "aria-label": liveControlsActive ? 'Hide live controls' : 'Show live controls',
136
+ className: (0, _classnames().default)(_compositionsPanelModule().default.actionIcon, _compositionsPanelModule().default.iconButton, liveControlsActive && _compositionsPanelModule().default.actionIconActive),
137
+ onClick: e => {
138
+ e.preventDefault();
139
+ e.stopPropagation();
140
+ onToggleLiveControls();
141
+ }
142
+ }, /*#__PURE__*/_react().default.createElement(_evangelistElements().Icon, {
143
+ of: "settings"
144
+ }))), /*#__PURE__*/_react().default.createElement(_uiFoundationUi().MenuWidgetIcon, {
128
145
  className: _compositionsPanelModule().default.actionIcon,
129
146
  icon: "Code",
130
147
  tooltipContent: "View source",
@@ -1 +1 @@
1
- {"version":3,"names":["_evangelistElements","data","require","_classnames","_interopRequireDefault","_reactRouterDom","_react","_interopRequireWildcard","_uiFoundationUi","_designUi","_baseReactNavigation","_compositionsUi","_compositionsPanelModule","_excluded","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","_extends","assign","bind","arguments","length","apply","_objectWithoutProperties","_objectWithoutPropertiesLoose","getOwnPropertySymbols","indexOf","propertyIsEnumerable","CompositionsPanel","_ref","url","compositions","isScaling","onSelectComposition","onSelect","active","includesEnvTemplate","useNameParam","className","rest","setTimestamp","useLiveControls","shouldAddNameParam","location","useLocation","searchParams","useSearchParams","versionFromQueryParams","navigate","useNavigate","handleSelect","useCallback","selected","onCompositionCodeClicked","composition","preventDefault","queryParams","URLSearchParams","basePath","pathname","split","filepath","toString","identifier","createElement","styles","container","classNames","compositionsList","map","href","key","compositionItem","panelLink","onClick","name","displayName","itemActions","MenuWidgetIcon","actionIcon","icon","tooltipContent","Tooltip","content","placement","iconLink","target","rel","Icon","of"],"sources":["compositions-panel.tsx"],"sourcesContent":["import { Icon } from '@teambit/evangelist.elements.icon';\nimport classNames from 'classnames';\nimport { useSearchParams } from 'react-router-dom';\nimport React, { useCallback } from 'react';\nimport { MenuWidgetIcon } from '@teambit/ui-foundation.ui.menu-widget-icon';\nimport { Tooltip } from '@teambit/design.ui.tooltip';\nimport { useNavigate, useLocation } from '@teambit/base-react.navigation.link';\nimport { useLiveControls } from '@teambit/compositions.ui.composition-live-controls';\nimport styles from './compositions-panel.module.scss';\nimport type { Composition } from '../../composition';\n\nexport type CompositionsPanelProps = {\n compositions: Composition[];\n onSelectComposition: (composition: Composition) => void;\n active?: Composition;\n url: string;\n isScaling?: boolean;\n includesEnvTemplate?: boolean;\n useNameParam?: boolean;\n} & React.HTMLAttributes<HTMLUListElement>;\n\nexport function CompositionsPanel({\n url,\n compositions,\n isScaling,\n onSelectComposition: onSelect,\n active,\n includesEnvTemplate,\n useNameParam,\n className,\n ...rest\n}: CompositionsPanelProps) {\n const { setTimestamp } = useLiveControls();\n const shouldAddNameParam = useNameParam || (isScaling && includesEnvTemplate === false);\n\n const location = useLocation();\n const [searchParams] = useSearchParams();\n const versionFromQueryParams = searchParams.get('version');\n const navigate = useNavigate();\n\n const handleSelect = useCallback(\n (selected: Composition) => {\n onSelect && onSelect(selected);\n if (selected === active) return;\n setTimestamp(0);\n },\n [onSelect, active, setTimestamp]\n );\n\n const onCompositionCodeClicked = useCallback(\n (composition: Composition) => (e: React.MouseEvent<HTMLDivElement>) => {\n e.preventDefault();\n setTimestamp(0);\n const queryParams = new URLSearchParams();\n if (versionFromQueryParams) {\n queryParams.set('version', versionFromQueryParams);\n }\n const basePath = location?.pathname.split('/~compositions')[0];\n navigate(`${basePath}/~code/${composition.filepath}?${queryParams.toString()}#search=${composition.identifier}`);\n },\n [location?.pathname, navigate, setTimestamp, versionFromQueryParams]\n );\n\n return (\n <div className={styles.container}>\n <ul {...rest} className={classNames(styles.compositionsList, className)}>\n {compositions.map((composition) => {\n const href = shouldAddNameParam\n ? `${url}&name=${composition.identifier}`\n : `${url}&${composition.identifier}`;\n return (\n <li\n key={composition.identifier}\n className={classNames(styles.compositionItem, composition === active && styles.active)}\n >\n <a className={styles.panelLink} onClick={() => handleSelect(composition)}>\n <span className={styles.name}>{composition.displayName}</span>\n </a>\n <div className={styles.itemActions}>\n <MenuWidgetIcon\n className={styles.actionIcon}\n icon=\"Code\"\n tooltipContent=\"View source\"\n onClick={onCompositionCodeClicked(composition)}\n />\n <Tooltip content=\"Open in new tab\" placement=\"bottom\">\n <a\n className={classNames(styles.actionIcon, styles.iconLink)}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n href={href}\n >\n <Icon of=\"open-tab\" />\n </a>\n </Tooltip>\n </div>\n </li>\n );\n })}\n </ul>\n </div>\n );\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_evangelistElements","data","require","_classnames","_interopRequireDefault","_reactRouterDom","_react","_interopRequireWildcard","_uiFoundationUi","_designUi","_baseReactNavigation","_compositionsUi","_compositionsPanelModule","_excluded","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","_extends","assign","bind","arguments","length","apply","_objectWithoutProperties","_objectWithoutPropertiesLoose","getOwnPropertySymbols","indexOf","propertyIsEnumerable","CompositionsPanel","_ref","url","compositions","isScaling","onSelectComposition","onSelect","onToggleLiveControls","hasLiveControls","liveControlsActive","active","includesEnvTemplate","useNameParam","className","rest","setTimestamp","useLiveControls","shouldAddNameParam","location","useLocation","searchParams","useSearchParams","versionFromQueryParams","navigate","useNavigate","handleSelect","useCallback","selected","onCompositionCodeClicked","composition","preventDefault","queryParams","URLSearchParams","basePath","pathname","split","filepath","toString","identifier","createElement","styles","container","classNames","compositionsList","map","href","key","compositionItem","panelLink","onClick","name","displayName","itemActions","Tooltip","content","placement","type","actionIcon","iconButton","actionIconActive","stopPropagation","Icon","of","MenuWidgetIcon","icon","tooltipContent","iconLink","target","rel"],"sources":["compositions-panel.tsx"],"sourcesContent":["import { Icon } from '@teambit/evangelist.elements.icon';\nimport classNames from 'classnames';\nimport { useSearchParams } from 'react-router-dom';\nimport React, { useCallback } from 'react';\nimport { MenuWidgetIcon } from '@teambit/ui-foundation.ui.menu-widget-icon';\nimport { Tooltip } from '@teambit/design.ui.tooltip';\nimport { useNavigate, useLocation } from '@teambit/base-react.navigation.link';\nimport { useLiveControls } from '@teambit/compositions.ui.composition-live-controls';\nimport styles from './compositions-panel.module.scss';\nimport type { Composition } from '../../composition';\n\nexport type CompositionsPanelProps = {\n compositions: Composition[];\n onSelectComposition: (composition: Composition) => void;\n onToggleLiveControls?: () => void;\n hasLiveControls?: boolean;\n liveControlsActive?: boolean;\n active?: Composition;\n url: string;\n isScaling?: boolean;\n includesEnvTemplate?: boolean;\n useNameParam?: boolean;\n} & React.HTMLAttributes<HTMLUListElement>;\n\nexport function CompositionsPanel({\n url,\n compositions,\n isScaling,\n onSelectComposition: onSelect,\n onToggleLiveControls,\n hasLiveControls,\n liveControlsActive,\n active,\n includesEnvTemplate,\n useNameParam,\n className,\n ...rest\n}: CompositionsPanelProps) {\n const { setTimestamp } = useLiveControls();\n const shouldAddNameParam = useNameParam || (isScaling && includesEnvTemplate === false);\n\n const location = useLocation();\n const [searchParams] = useSearchParams();\n const versionFromQueryParams = searchParams.get('version');\n const navigate = useNavigate();\n\n const handleSelect = useCallback(\n (selected: Composition) => {\n onSelect && onSelect(selected);\n if (selected === active) return;\n setTimestamp(0);\n },\n [onSelect, active, setTimestamp]\n );\n\n const onCompositionCodeClicked = useCallback(\n (composition: Composition) => (e: React.MouseEvent<HTMLDivElement>) => {\n e.preventDefault();\n setTimestamp(0);\n const queryParams = new URLSearchParams();\n if (versionFromQueryParams) {\n queryParams.set('version', versionFromQueryParams);\n }\n const basePath = location?.pathname.split('/~compositions')[0];\n navigate(`${basePath}/~code/${composition.filepath}?${queryParams.toString()}#search=${composition.identifier}`);\n },\n [location?.pathname, navigate, setTimestamp, versionFromQueryParams]\n );\n\n return (\n <div className={styles.container}>\n <ul {...rest} className={classNames(styles.compositionsList, className)}>\n {compositions.map((composition) => {\n const href = shouldAddNameParam\n ? `${url}&name=${composition.identifier}`\n : `${url}&${composition.identifier}`;\n return (\n <li\n key={composition.identifier}\n className={classNames(styles.compositionItem, composition === active && styles.active)}\n >\n <a className={styles.panelLink} onClick={() => handleSelect(composition)}>\n <span className={styles.name}>{composition.displayName}</span>\n </a>\n <div className={styles.itemActions}>\n {hasLiveControls && onToggleLiveControls && composition === active && (\n <Tooltip\n content={liveControlsActive ? 'Hide live controls' : 'Show live controls'}\n placement=\"bottom\"\n >\n <button\n type=\"button\"\n aria-label={liveControlsActive ? 'Hide live controls' : 'Show live controls'}\n className={classNames(\n styles.actionIcon,\n styles.iconButton,\n liveControlsActive && styles.actionIconActive\n )}\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n onToggleLiveControls();\n }}\n >\n <Icon of=\"settings\" />\n </button>\n </Tooltip>\n )}\n <MenuWidgetIcon\n className={styles.actionIcon}\n icon=\"Code\"\n tooltipContent=\"View source\"\n onClick={onCompositionCodeClicked(composition)}\n />\n <Tooltip content=\"Open in new tab\" placement=\"bottom\">\n <a\n className={classNames(styles.actionIcon, styles.iconLink)}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n href={href}\n >\n <Icon of=\"open-tab\" />\n </a>\n </Tooltip>\n </div>\n </li>\n );\n })}\n </ul>\n </div>\n );\n}\n"],"mappings":"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","ignoreList":[]}
@@ -121,6 +121,19 @@
121
121
  text-decoration: none;
122
122
  }
123
123
 
124
+ .iconButton {
125
+ background: transparent;
126
+ border: none;
127
+ padding: 0;
128
+ color: inherit;
129
+ font: inherit;
130
+ }
131
+
132
+ .actionIconActive {
133
+ background: rgba(255, 255, 255, 0.15);
134
+ color: #ffffff !important;
135
+ }
136
+
124
137
  // ─── Legacy compat ──────────────────────────────────────────────────────
125
138
  .liveControlsSkeleton {
126
139
  padding: 12px 16px;
@@ -53,13 +53,12 @@
53
53
  }
54
54
 
55
55
  .toggleControl {
56
- width: 42px;
57
- max-width: 42px;
58
- min-width: 42px;
59
- }
60
-
61
- .toggleControl > * {
62
- width: 100%;
56
+ // Let the Toggle keep its native dimensions. The component sizes its
57
+ // knob travel in `em`, so stretching the wrapper width without scaling
58
+ // the font-size leaves the knob short of the right edge in the "on"
59
+ // state.
60
+ display: inline-flex;
61
+ flex: 0 0 auto;
63
62
  }
64
63
 
65
64
  .rangeWrapper {
@@ -10,6 +10,10 @@
10
10
  box-shadow:
11
11
  0 4px 16px rgba(0, 0, 0, 0.08),
12
12
  0 1px 3px rgba(0, 0, 0, 0.06);
13
+ // Portaled into <body>, outside the BaseTheme wrapper that carries the
14
+ // app font. Set the family here so descendants (MenuItems, color swatches,
15
+ // etc.) inherit it via the global `font: inherit` reset.
16
+ font-family: 'CircularXX', 'Gill Sans', 'Gill Sans MT', 'Helvetica Neue', Helvetica, Arial, sans-serif;
13
17
  }
14
18
 
15
19
  .suppressNativeMenu {
package/package.json CHANGED
@@ -1,21 +1,25 @@
1
1
  {
2
2
  "name": "@teambit/compositions",
3
- "version": "1.0.994",
3
+ "version": "1.0.996",
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.994"
9
+ "version": "1.0.996"
10
10
  },
11
11
  "dependencies": {
12
12
  "graphql-tag": "2.12.1",
13
13
  "lodash": "4.17.21",
14
+ "classnames": "^2.5.1",
14
15
  "lodash.head": "4.0.1",
15
16
  "query-string": "7.0.0",
16
- "classnames": "^2.5.1",
17
17
  "@teambit/compositions.model.composition-id": "0.0.507",
18
18
  "@teambit/harmony": "0.4.7",
19
+ "@teambit/cli": "0.0.1327",
20
+ "@teambit/component.sources": "0.0.169",
21
+ "@teambit/legacy.consumer-component": "0.0.118",
22
+ "@teambit/toolbox.path.match-patterns": "0.0.28",
19
23
  "@teambit/ui-foundation.ui.constants.z-indexes": "0.0.504",
20
24
  "@teambit/base-ui.surfaces.split-pane.hover-splitter": "1.0.1",
21
25
  "@teambit/base-ui.surfaces.split-pane.split-pane": "1.0.0",
@@ -34,9 +38,10 @@
34
38
  "@teambit/documenter.ui.property-table": "4.1.11",
35
39
  "@teambit/evangelist.elements.icon": "1.0.5",
36
40
  "@teambit/mdx.ui.mdx-layout": "1.0.12",
37
- "@teambit/preview.ui.component-preview": "1.0.34",
41
+ "@teambit/panels": "0.0.1330",
38
42
  "@teambit/ui-foundation.ui.buttons.collapser": "0.0.234",
39
43
  "@teambit/ui-foundation.ui.hooks.use-is-mobile": "0.0.200",
44
+ "@teambit/compositions.ui.composition-compare-section": "0.0.105",
40
45
  "@teambit/compositions.ui.composition-compare": "0.0.265",
41
46
  "@teambit/api-reference.hooks.use-api": "0.0.57",
42
47
  "@teambit/workspace.ui.use-workspace-mode": "0.0.3",
@@ -49,22 +54,17 @@
49
54
  "@teambit/design.inputs.toggle-switch": "0.0.9",
50
55
  "@teambit/design.ui.input.color-picker": "0.0.56",
51
56
  "@teambit/base-ui.loaders.skeleton": "1.0.2",
52
- "@teambit/component": "1.0.994",
53
- "@teambit/graphql": "1.0.994",
54
- "@teambit/cli": "0.0.1327",
55
- "@teambit/component.sources": "0.0.169",
56
- "@teambit/dev-files": "1.0.994",
57
- "@teambit/envs": "1.0.994",
58
- "@teambit/legacy.consumer-component": "0.0.118",
59
- "@teambit/preview": "1.0.994",
60
- "@teambit/schema": "1.0.994",
61
- "@teambit/scope": "1.0.994",
62
- "@teambit/toolbox.path.match-patterns": "0.0.28",
63
- "@teambit/workspace": "1.0.994",
64
- "@teambit/panels": "0.0.1330",
65
- "@teambit/component-compare": "1.0.994",
66
- "@teambit/compositions.ui.composition-compare-section": "0.0.105",
67
- "@teambit/ui": "1.0.994"
57
+ "@teambit/component": "1.0.996",
58
+ "@teambit/graphql": "1.0.996",
59
+ "@teambit/dev-files": "1.0.996",
60
+ "@teambit/envs": "1.0.996",
61
+ "@teambit/preview": "1.0.996",
62
+ "@teambit/schema": "1.0.996",
63
+ "@teambit/scope": "1.0.996",
64
+ "@teambit/workspace": "1.0.996",
65
+ "@teambit/preview.ui.component-preview": "1.0.36",
66
+ "@teambit/component-compare": "1.0.996",
67
+ "@teambit/ui": "1.0.996"
68
68
  },
69
69
  "devDependencies": {
70
70
  "@types/lodash": "4.14.165",
@@ -121,6 +121,19 @@
121
121
  text-decoration: none;
122
122
  }
123
123
 
124
+ .iconButton {
125
+ background: transparent;
126
+ border: none;
127
+ padding: 0;
128
+ color: inherit;
129
+ font: inherit;
130
+ }
131
+
132
+ .actionIconActive {
133
+ background: rgba(255, 255, 255, 0.15);
134
+ color: #ffffff !important;
135
+ }
136
+
124
137
  // ─── Legacy compat ──────────────────────────────────────────────────────
125
138
  .liveControlsSkeleton {
126
139
  padding: 12px 16px;
@@ -12,6 +12,9 @@ import type { Composition } from '../../composition';
12
12
  export type CompositionsPanelProps = {
13
13
  compositions: Composition[];
14
14
  onSelectComposition: (composition: Composition) => void;
15
+ onToggleLiveControls?: () => void;
16
+ hasLiveControls?: boolean;
17
+ liveControlsActive?: boolean;
15
18
  active?: Composition;
16
19
  url: string;
17
20
  isScaling?: boolean;
@@ -24,6 +27,9 @@ export function CompositionsPanel({
24
27
  compositions,
25
28
  isScaling,
26
29
  onSelectComposition: onSelect,
30
+ onToggleLiveControls,
31
+ hasLiveControls,
32
+ liveControlsActive,
27
33
  active,
28
34
  includesEnvTemplate,
29
35
  useNameParam,
@@ -77,6 +83,29 @@ export function CompositionsPanel({
77
83
  <span className={styles.name}>{composition.displayName}</span>
78
84
  </a>
79
85
  <div className={styles.itemActions}>
86
+ {hasLiveControls && onToggleLiveControls && composition === active && (
87
+ <Tooltip
88
+ content={liveControlsActive ? 'Hide live controls' : 'Show live controls'}
89
+ placement="bottom"
90
+ >
91
+ <button
92
+ type="button"
93
+ aria-label={liveControlsActive ? 'Hide live controls' : 'Show live controls'}
94
+ className={classNames(
95
+ styles.actionIcon,
96
+ styles.iconButton,
97
+ liveControlsActive && styles.actionIconActive
98
+ )}
99
+ onClick={(e) => {
100
+ e.preventDefault();
101
+ e.stopPropagation();
102
+ onToggleLiveControls();
103
+ }}
104
+ >
105
+ <Icon of="settings" />
106
+ </button>
107
+ </Tooltip>
108
+ )}
80
109
  <MenuWidgetIcon
81
110
  className={styles.actionIcon}
82
111
  icon="Code"