@ai-matrx/design-system 0.18.22 → 0.19.1
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/CHANGELOG.md +28 -0
- package/dist/content-transfer/alchemy.svg +1 -1
- package/dist/content-transfer/copy-transform.svg +1 -0
- package/dist/content-transfer/icon.cjs +8 -2
- package/dist/content-transfer/icon.cjs.map +1 -1
- package/dist/content-transfer/icon.d.cts +5 -3
- package/dist/content-transfer/icon.d.ts +5 -3
- package/dist/content-transfer/icon.js +8 -2
- package/dist/content-transfer/icon.js.map +1 -1
- package/dist/content-transfer/portal.svg +1 -0
- package/dist/content-transfer.cjs +923 -304
- package/dist/content-transfer.cjs.map +1 -1
- package/dist/content-transfer.css +17 -74
- package/dist/content-transfer.d.cts +14 -3
- package/dist/content-transfer.d.ts +14 -3
- package/dist/content-transfer.js +929 -305
- package/dist/content-transfer.js.map +1 -1
- package/dist/data-table/copy-helpers.d.cts +1 -1
- package/dist/data-table/copy-helpers.d.ts +1 -1
- package/dist/data-table/data-row-inspector.cjs +990 -397
- package/dist/data-table/data-row-inspector.cjs.map +1 -1
- package/dist/data-table/data-row-inspector.js +988 -390
- package/dist/data-table/data-row-inspector.js.map +1 -1
- package/dist/data-table/data-row-window.cjs +989 -396
- package/dist/data-table/data-row-window.cjs.map +1 -1
- package/dist/data-table/data-row-window.js +987 -389
- package/dist/data-table/data-row-window.js.map +1 -1
- package/dist/data-table/filter-engine.d.cts +1 -1
- package/dist/data-table/filter-engine.d.ts +1 -1
- package/dist/data-table/host.d.cts +1 -1
- package/dist/data-table/host.d.ts +1 -1
- package/dist/data-table/index.cjs +1665 -1012
- package/dist/data-table/index.cjs.map +1 -1
- package/dist/data-table/index.d.cts +2 -2
- package/dist/data-table/index.d.ts +2 -2
- package/dist/data-table/index.js +1517 -859
- package/dist/data-table/index.js.map +1 -1
- package/dist/data-table/infer-filter.d.cts +1 -1
- package/dist/data-table/infer-filter.d.ts +1 -1
- package/dist/data-table/layered-filters.d.cts +1 -1
- package/dist/data-table/layered-filters.d.ts +1 -1
- package/dist/data-table/pagination.cjs +1 -1
- package/dist/data-table/pagination.cjs.map +1 -1
- package/dist/data-table/pagination.js +1 -1
- package/dist/data-table/pagination.js.map +1 -1
- package/dist/data-table/query-control.d.cts +1 -1
- package/dist/data-table/query-control.d.ts +1 -1
- package/dist/data-table/scroll-pagination.cjs +85 -54
- package/dist/data-table/scroll-pagination.cjs.map +1 -1
- package/dist/data-table/scroll-pagination.js +85 -54
- package/dist/data-table/scroll-pagination.js.map +1 -1
- package/dist/data-table/types.cjs.map +1 -1
- package/dist/data-table/types.d.cts +1 -1
- package/dist/data-table/types.d.ts +1 -1
- package/dist/data-table/url-state.d.cts +1 -1
- package/dist/data-table/url-state.d.ts +1 -1
- package/dist/data-table/uuid-cell.cjs +1 -1
- package/dist/data-table/uuid-cell.cjs.map +1 -1
- package/dist/data-table/uuid-cell.js +1 -1
- package/dist/data-table/uuid-cell.js.map +1 -1
- package/dist/data-table/xlsx.d.cts +1 -1
- package/dist/data-table/xlsx.d.ts +1 -1
- package/dist/index.cjs +527 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +531 -0
- package/dist/index.js.map +1 -1
- package/dist/tap-target.cjs +636 -0
- package/dist/tap-target.cjs.map +1 -0
- package/dist/tap-target.css +151 -0
- package/dist/tap-target.d.cts +131 -0
- package/dist/tap-target.d.ts +131 -0
- package/dist/tap-target.js +608 -0
- package/dist/tap-target.js.map +1 -0
- package/dist/{types-CWW4Tur-.d.cts → types-BcIcmIxd.d.cts} +6 -1
- package/dist/{types-Cbnj1Qlm.d.ts → types-xTXSqmR7.d.ts} +6 -1
- package/package.json +14 -1
|
@@ -1,37 +1,10 @@
|
|
|
1
1
|
/* Structural Alchemy rules. Hosts own token values; Tailwind is never required. */
|
|
2
|
+
@import "./tap-target.css";
|
|
2
3
|
.matrx-alchemy {
|
|
3
4
|
display: inline-flex;
|
|
4
5
|
align-items: center;
|
|
5
6
|
gap: 0.375rem;
|
|
6
7
|
}
|
|
7
|
-
.matrx-alchemy-trigger {
|
|
8
|
-
display: inline-flex;
|
|
9
|
-
align-items: center;
|
|
10
|
-
justify-content: center;
|
|
11
|
-
width: 2rem;
|
|
12
|
-
height: 2rem;
|
|
13
|
-
padding: 0.375rem;
|
|
14
|
-
border: 0;
|
|
15
|
-
border-radius: 0.375rem;
|
|
16
|
-
background: transparent;
|
|
17
|
-
color: hsl(var(--foreground, 240 10% 4%));
|
|
18
|
-
cursor: pointer;
|
|
19
|
-
}
|
|
20
|
-
.matrx-alchemy-trigger svg {
|
|
21
|
-
width: 1.125rem;
|
|
22
|
-
height: 1.125rem;
|
|
23
|
-
}
|
|
24
|
-
.matrx-alchemy-trigger:hover {
|
|
25
|
-
background: hsl(var(--accent, 240 5% 96%));
|
|
26
|
-
}
|
|
27
|
-
.matrx-alchemy-trigger:focus-visible {
|
|
28
|
-
outline: 2px solid hsl(var(--ring, 240 5% 65%));
|
|
29
|
-
outline-offset: 2px;
|
|
30
|
-
}
|
|
31
|
-
.matrx-alchemy-trigger:disabled {
|
|
32
|
-
opacity: 0.5;
|
|
33
|
-
cursor: not-allowed;
|
|
34
|
-
}
|
|
35
8
|
.matrx-alchemy-menu {
|
|
36
9
|
min-width: 18rem;
|
|
37
10
|
max-width: min(24rem, calc(100vw - 2rem));
|
|
@@ -134,6 +107,7 @@
|
|
|
134
107
|
.matrx-alchemy-toolbar select,
|
|
135
108
|
.matrx-alchemy-preview-label select,
|
|
136
109
|
.matrx-alchemy-workspace aside textarea,
|
|
110
|
+
.matrx-alchemy-workspace aside select,
|
|
137
111
|
.matrx-alchemy-options input {
|
|
138
112
|
min-height: 2.25rem;
|
|
139
113
|
border: 1px solid hsl(var(--border, 240 6% 90%));
|
|
@@ -256,25 +230,7 @@
|
|
|
256
230
|
}
|
|
257
231
|
}
|
|
258
232
|
|
|
259
|
-
.matrx-alchemy-xs .matrx-alchemy-trigger {
|
|
260
|
-
width: 1.75rem;
|
|
261
|
-
height: 1.75rem;
|
|
262
|
-
padding: 0.375rem;
|
|
263
|
-
}
|
|
264
|
-
.matrx-alchemy-xs .matrx-alchemy-trigger svg {
|
|
265
|
-
width: 1rem;
|
|
266
|
-
height: 1rem;
|
|
267
|
-
}
|
|
268
|
-
.matrx-alchemy-sm .matrx-alchemy-trigger {
|
|
269
|
-
width: 2.25rem;
|
|
270
|
-
height: 2.25rem;
|
|
271
|
-
}
|
|
272
233
|
@media (pointer: coarse) {
|
|
273
|
-
.matrx-alchemy .matrx-alchemy-trigger {
|
|
274
|
-
width: 2.75rem;
|
|
275
|
-
height: 2.75rem;
|
|
276
|
-
padding: 0.625rem;
|
|
277
|
-
}
|
|
278
234
|
.matrx-alchemy-workspace input,
|
|
279
235
|
.matrx-alchemy-workspace select,
|
|
280
236
|
.matrx-alchemy-workspace textarea {
|
|
@@ -434,34 +390,6 @@
|
|
|
434
390
|
.matrx-alchemy-menu *, .matrx-alchemy-workspace * { box-sizing: border-box; }
|
|
435
391
|
.matrx-alchemy-workspace-grid:not(:has(aside)) { grid-template-columns: minmax(0, 1fr); }
|
|
436
392
|
|
|
437
|
-
/* Table toolbar matches the canonical tap-target 44 / 28 / 14 geometry.
|
|
438
|
-
tap-target depends on design-system, so this primitive cannot import it. */
|
|
439
|
-
.matrx-alchemy-toolbar-target .matrx-alchemy-trigger {
|
|
440
|
-
position: relative;
|
|
441
|
-
flex-shrink: 0;
|
|
442
|
-
width: 2.75rem;
|
|
443
|
-
height: 2.75rem;
|
|
444
|
-
background: transparent;
|
|
445
|
-
touch-action: manipulation;
|
|
446
|
-
}
|
|
447
|
-
.matrx-alchemy-toolbar-target .matrx-alchemy-trigger::before {
|
|
448
|
-
content: "";
|
|
449
|
-
position: absolute;
|
|
450
|
-
width: 1.75rem;
|
|
451
|
-
height: 1.75rem;
|
|
452
|
-
border-radius: 9999px;
|
|
453
|
-
transition: background-color 150ms ease, transform 100ms ease;
|
|
454
|
-
}
|
|
455
|
-
.matrx-alchemy-toolbar-target .matrx-alchemy-trigger:hover::before {
|
|
456
|
-
background: hsl(var(--accent, 240 5% 96%));
|
|
457
|
-
}
|
|
458
|
-
.matrx-alchemy-toolbar-target .matrx-alchemy-trigger:active::before { transform: scale(0.92); }
|
|
459
|
-
.matrx-alchemy-toolbar-target .matrx-alchemy-trigger svg {
|
|
460
|
-
position: relative;
|
|
461
|
-
width: 0.875rem;
|
|
462
|
-
height: 0.875rem;
|
|
463
|
-
}
|
|
464
|
-
|
|
465
393
|
.matrx-alchemy-data-controls { max-height: none; }
|
|
466
394
|
.matrx-alchemy-data-controls-body { display: grid; gap: 0.75rem; margin-top: 0.75rem; }
|
|
467
395
|
.matrx-alchemy-preview-label { display: flex; align-items: center; gap: 0.5rem; }
|
|
@@ -483,3 +411,18 @@
|
|
|
483
411
|
|
|
484
412
|
/* Dialogs show their own result; an earlier page notice must not cover their actions. */
|
|
485
413
|
body:has(.matrx-alchemy-workspace[data-state="open"]) > .matrx-alchemy-feedback { display: none; }
|
|
414
|
+
|
|
415
|
+
.matrx-alchemy-destination-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 15rem), 1fr)); gap: 0.25rem; margin-top: 0.5rem; padding: 0.25rem; }
|
|
416
|
+
.matrx-alchemy-destination-grid button:disabled { opacity: 0.5; cursor: not-allowed; }
|
|
417
|
+
|
|
418
|
+
.matrx-alchemy-receipt-link { flex-shrink: 0; color: hsl(var(--primary)); text-decoration: underline; text-underline-offset: 2px; }
|
|
419
|
+
|
|
420
|
+
.matrx-alchemy-workspace aside { min-width: 0; }
|
|
421
|
+
.matrx-alchemy-workspace aside select { width: 100%; min-width: 0; }
|
|
422
|
+
.matrx-alchemy-palette { overflow-y: auto; overscroll-behavior: contain; }
|
|
423
|
+
.matrx-alchemy-palette-destinations { margin-top: 0.375rem; padding-top: 0.375rem; border-top: 1px solid hsl(var(--border)); }
|
|
424
|
+
.matrx-alchemy-palette-destinations > summary { display: flex; align-items: center; justify-content: space-between; min-height: 2.25rem; padding: 0.375rem 0.5rem; border-radius: 0.3125rem; font-size: 0.8125rem; font-weight: 500; cursor: pointer; list-style: none; }
|
|
425
|
+
.matrx-alchemy-palette-destinations > summary::-webkit-details-marker { display: none; }
|
|
426
|
+
.matrx-alchemy-palette-destinations > summary > span { font-size: 0.6875rem; color: hsl(var(--muted-foreground)); }
|
|
427
|
+
.matrx-alchemy-palette-destinations > summary:hover { background: hsl(var(--accent)); }
|
|
428
|
+
.matrx-alchemy-palette-destinations > summary:focus-visible { outline: none; box-shadow: inset 0 0 0 2px hsl(var(--ring)); }
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { AgentPayloadInput, TransferOutcome, TransferCapabilities, Transport, PageAction, TransferPreferenceOverrides, Source, Payload, ExportProjection, Section, SurfaceHandle, TransferScope } from '@ai-matrx/kit/content-transfer';
|
|
3
|
-
|
|
3
|
+
import { AlchemyIcon } from './content-transfer/icon.cjs';
|
|
4
|
+
export { ALCHEMY_COPY_TRANSFORM_SVG, ALCHEMY_GLYPH_SVG } from './content-transfer/icon.cjs';
|
|
4
5
|
|
|
5
6
|
type AlchemyOptionValues = Record<string, boolean | number>;
|
|
6
7
|
type AlchemySourceOption = {
|
|
@@ -137,6 +138,8 @@ interface MatrxCopyMenuProps {
|
|
|
137
138
|
appearance?: "bare" | "segmented";
|
|
138
139
|
unified?: boolean;
|
|
139
140
|
grouped?: boolean;
|
|
141
|
+
icon?: AlchemyIcon;
|
|
142
|
+
triggerVariant?: "transparent" | "glass";
|
|
140
143
|
}
|
|
141
144
|
/** Opinionated bridge for Matrx's existing content builders, with one transfer UI. */
|
|
142
145
|
declare function MatrxCopyMenu(props: MatrxCopyMenuProps): React.JSX.Element;
|
|
@@ -147,7 +150,9 @@ declare function defaultGroomerSelections(sections: AlchemyGroomerSection[]): Re
|
|
|
147
150
|
declare function buildGroomerPresetPayload(config: AlchemyGroomerConfig, preset: AlchemyGroomerPreset): AgentPayloadInput;
|
|
148
151
|
declare function groomerPresetVariants(getConfig: () => AlchemyGroomerConfig): AlchemyCopyVariant[];
|
|
149
152
|
|
|
150
|
-
declare function AlchemyGlyph(props: React.SVGAttributes<SVGSVGElement>
|
|
153
|
+
declare function AlchemyGlyph({ icon, ...props }: React.SVGAttributes<SVGSVGElement> & {
|
|
154
|
+
icon?: AlchemyIcon;
|
|
155
|
+
}): React.JSX.Element;
|
|
151
156
|
type ContentTransferCapabilities = TransferCapabilities & {
|
|
152
157
|
/** Opaque host session boundary. It is used only to reset local menu state. */
|
|
153
158
|
identityKey?: string;
|
|
@@ -168,6 +173,8 @@ declare function ContentTransferSurfaceProvider({ handle, children }: {
|
|
|
168
173
|
declare const useContentTransferSurface: () => SurfaceHandle | null;
|
|
169
174
|
type SerializableFormat = "plain" | "markdown" | "html" | "json" | "compact-json" | "csv" | "tsv";
|
|
170
175
|
interface TransferMenuPresentation {
|
|
176
|
+
group?: "save" | "chat";
|
|
177
|
+
prepared?: boolean;
|
|
171
178
|
hint?: string;
|
|
172
179
|
icon?: React.ComponentType<{
|
|
173
180
|
className?: string;
|
|
@@ -205,6 +212,10 @@ interface ContentTransferMenuProps {
|
|
|
205
212
|
actions?: (PageAction & TransferMenuPresentation)[];
|
|
206
213
|
capabilities?: ContentTransferCapabilities;
|
|
207
214
|
disabled?: boolean;
|
|
215
|
+
/** Portal is the default Alchemy mark; copy-transform remains opt-in. */
|
|
216
|
+
icon?: AlchemyIcon;
|
|
217
|
+
/** Uses the canonical TapTargetButton presentation. */
|
|
218
|
+
triggerVariant?: "transparent" | "glass";
|
|
208
219
|
className?: string;
|
|
209
220
|
stopPropagation?: boolean;
|
|
210
221
|
hide?: readonly ("copy" | "prepare" | "download")[];
|
|
@@ -219,4 +230,4 @@ interface ContentTransferController {
|
|
|
219
230
|
}
|
|
220
231
|
declare function ContentTransferMenu(props: ContentTransferMenuProps): React.JSX.Element;
|
|
221
232
|
|
|
222
|
-
export { type AlchemyCopyVariant, type AlchemyCustomSource, type AlchemyDetail, type AlchemyExportItem, AlchemyGlyph, type AlchemyGroomerConfig, type AlchemyGroomerPreset, type AlchemyGroomerSection, type AlchemyOptionValues, type AlchemySourceOption, type ContentTransferCapabilities, ContentTransferCapabilitiesProvider, type ContentTransferController, ContentTransferMenu, type ContentTransferMenuProps, ContentTransferSurfaceProvider, GROOMER_LEVELS, MatrxCopyMenu, type MatrxCopyMenuProps, type SerializableFormat, type TransferMenuPresentation, type TransferMenuVariant, applyGroomerPreset, buildGroomerPresetPayload, defaultGroomerSelections, groomerPresetVariants, useContentTransferCapabilities, useContentTransferSurface };
|
|
233
|
+
export { type AlchemyCopyVariant, type AlchemyCustomSource, type AlchemyDetail, type AlchemyExportItem, AlchemyGlyph, type AlchemyGroomerConfig, type AlchemyGroomerPreset, type AlchemyGroomerSection, AlchemyIcon, type AlchemyOptionValues, type AlchemySourceOption, type ContentTransferCapabilities, ContentTransferCapabilitiesProvider, type ContentTransferController, ContentTransferMenu, type ContentTransferMenuProps, ContentTransferSurfaceProvider, GROOMER_LEVELS, MatrxCopyMenu, type MatrxCopyMenuProps, type SerializableFormat, type TransferMenuPresentation, type TransferMenuVariant, applyGroomerPreset, buildGroomerPresetPayload, defaultGroomerSelections, groomerPresetVariants, useContentTransferCapabilities, useContentTransferSurface };
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { AgentPayloadInput, TransferOutcome, TransferCapabilities, Transport, PageAction, TransferPreferenceOverrides, Source, Payload, ExportProjection, Section, SurfaceHandle, TransferScope } from '@ai-matrx/kit/content-transfer';
|
|
3
|
-
|
|
3
|
+
import { AlchemyIcon } from './content-transfer/icon.js';
|
|
4
|
+
export { ALCHEMY_COPY_TRANSFORM_SVG, ALCHEMY_GLYPH_SVG } from './content-transfer/icon.js';
|
|
4
5
|
|
|
5
6
|
type AlchemyOptionValues = Record<string, boolean | number>;
|
|
6
7
|
type AlchemySourceOption = {
|
|
@@ -137,6 +138,8 @@ interface MatrxCopyMenuProps {
|
|
|
137
138
|
appearance?: "bare" | "segmented";
|
|
138
139
|
unified?: boolean;
|
|
139
140
|
grouped?: boolean;
|
|
141
|
+
icon?: AlchemyIcon;
|
|
142
|
+
triggerVariant?: "transparent" | "glass";
|
|
140
143
|
}
|
|
141
144
|
/** Opinionated bridge for Matrx's existing content builders, with one transfer UI. */
|
|
142
145
|
declare function MatrxCopyMenu(props: MatrxCopyMenuProps): React.JSX.Element;
|
|
@@ -147,7 +150,9 @@ declare function defaultGroomerSelections(sections: AlchemyGroomerSection[]): Re
|
|
|
147
150
|
declare function buildGroomerPresetPayload(config: AlchemyGroomerConfig, preset: AlchemyGroomerPreset): AgentPayloadInput;
|
|
148
151
|
declare function groomerPresetVariants(getConfig: () => AlchemyGroomerConfig): AlchemyCopyVariant[];
|
|
149
152
|
|
|
150
|
-
declare function AlchemyGlyph(props: React.SVGAttributes<SVGSVGElement>
|
|
153
|
+
declare function AlchemyGlyph({ icon, ...props }: React.SVGAttributes<SVGSVGElement> & {
|
|
154
|
+
icon?: AlchemyIcon;
|
|
155
|
+
}): React.JSX.Element;
|
|
151
156
|
type ContentTransferCapabilities = TransferCapabilities & {
|
|
152
157
|
/** Opaque host session boundary. It is used only to reset local menu state. */
|
|
153
158
|
identityKey?: string;
|
|
@@ -168,6 +173,8 @@ declare function ContentTransferSurfaceProvider({ handle, children }: {
|
|
|
168
173
|
declare const useContentTransferSurface: () => SurfaceHandle | null;
|
|
169
174
|
type SerializableFormat = "plain" | "markdown" | "html" | "json" | "compact-json" | "csv" | "tsv";
|
|
170
175
|
interface TransferMenuPresentation {
|
|
176
|
+
group?: "save" | "chat";
|
|
177
|
+
prepared?: boolean;
|
|
171
178
|
hint?: string;
|
|
172
179
|
icon?: React.ComponentType<{
|
|
173
180
|
className?: string;
|
|
@@ -205,6 +212,10 @@ interface ContentTransferMenuProps {
|
|
|
205
212
|
actions?: (PageAction & TransferMenuPresentation)[];
|
|
206
213
|
capabilities?: ContentTransferCapabilities;
|
|
207
214
|
disabled?: boolean;
|
|
215
|
+
/** Portal is the default Alchemy mark; copy-transform remains opt-in. */
|
|
216
|
+
icon?: AlchemyIcon;
|
|
217
|
+
/** Uses the canonical TapTargetButton presentation. */
|
|
218
|
+
triggerVariant?: "transparent" | "glass";
|
|
208
219
|
className?: string;
|
|
209
220
|
stopPropagation?: boolean;
|
|
210
221
|
hide?: readonly ("copy" | "prepare" | "download")[];
|
|
@@ -219,4 +230,4 @@ interface ContentTransferController {
|
|
|
219
230
|
}
|
|
220
231
|
declare function ContentTransferMenu(props: ContentTransferMenuProps): React.JSX.Element;
|
|
221
232
|
|
|
222
|
-
export { type AlchemyCopyVariant, type AlchemyCustomSource, type AlchemyDetail, type AlchemyExportItem, AlchemyGlyph, type AlchemyGroomerConfig, type AlchemyGroomerPreset, type AlchemyGroomerSection, type AlchemyOptionValues, type AlchemySourceOption, type ContentTransferCapabilities, ContentTransferCapabilitiesProvider, type ContentTransferController, ContentTransferMenu, type ContentTransferMenuProps, ContentTransferSurfaceProvider, GROOMER_LEVELS, MatrxCopyMenu, type MatrxCopyMenuProps, type SerializableFormat, type TransferMenuPresentation, type TransferMenuVariant, applyGroomerPreset, buildGroomerPresetPayload, defaultGroomerSelections, groomerPresetVariants, useContentTransferCapabilities, useContentTransferSurface };
|
|
233
|
+
export { type AlchemyCopyVariant, type AlchemyCustomSource, type AlchemyDetail, type AlchemyExportItem, AlchemyGlyph, type AlchemyGroomerConfig, type AlchemyGroomerPreset, type AlchemyGroomerSection, AlchemyIcon, type AlchemyOptionValues, type AlchemySourceOption, type ContentTransferCapabilities, ContentTransferCapabilitiesProvider, type ContentTransferController, ContentTransferMenu, type ContentTransferMenuProps, ContentTransferSurfaceProvider, GROOMER_LEVELS, MatrxCopyMenu, type MatrxCopyMenuProps, type SerializableFormat, type TransferMenuPresentation, type TransferMenuVariant, applyGroomerPreset, buildGroomerPresetPayload, defaultGroomerSelections, groomerPresetVariants, useContentTransferCapabilities, useContentTransferSurface };
|