@knkcs/mediahub-ui 0.3.0 → 0.5.0
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/README.md +62 -0
- package/dist/index.d.ts +498 -0
- package/dist/index.js +3503 -2355
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# @knkcs/mediahub-ui
|
|
2
|
+
|
|
3
|
+
Mediahub's reusable UI, published as a versioned npm package so that every host renders the same
|
|
4
|
+
media surfaces instead of re-implementing them.
|
|
5
|
+
|
|
6
|
+
Two hosts consume it today: knkCMS core, which embeds it as a build-time dependency, and mediahub's
|
|
7
|
+
own standalone app, which consumes it through the workspace.
|
|
8
|
+
|
|
9
|
+
## Screens, not routes
|
|
10
|
+
|
|
11
|
+
A screen takes **typed paths** and emits **callbacks**; the host owns routing and draws the page
|
|
12
|
+
frame. No screen builds a URL, and no host builds UI a screen already owns.
|
|
13
|
+
|
|
14
|
+
That contract is the point of the package. When a host re-implements a surface instead of composing
|
|
15
|
+
it, the two copies diverge and bugs are fixed in one of them — see
|
|
16
|
+
[knkCS/mediahub#138](https://github.com/knkCS/mediahub/issues/138), which consolidated the asset-type
|
|
17
|
+
screens after four such bugs, and
|
|
18
|
+
[mediahub ADR 0008](../../docs/adr/0008-narrowing-composes-folder-collection-and-tag.md), which
|
|
19
|
+
removed a host-built browse switcher for the same reason.
|
|
20
|
+
|
|
21
|
+
## What it exports
|
|
22
|
+
|
|
23
|
+
| Surface | What it is |
|
|
24
|
+
|---|---|
|
|
25
|
+
| `AssetLibrary` | The media browser: folder tree, filters, upload, and the context rail carrying Tags and Collections |
|
|
26
|
+
| `AssetDetail` | One asset, its versions and its metadata |
|
|
27
|
+
| `AssetPicker`, `CollectionPicker` | Embeddable pickers for a host's own forms |
|
|
28
|
+
| `AssetTypeIndex`, `AssetTypeCreate`, `AssetTypeDetail` | Asset-type administration, including the AI-processes tab |
|
|
29
|
+
| `CollectionIndex` | The Collections the user can see, marking the Restricted ones. Listing is not gated by authority — per [ADR 0001](../../docs/adr/0001-grant-authority-owner-or-workspace-admin.md) seeing a Collection and managing it are separate privileges |
|
|
30
|
+
| `CollectionCreate` | Create a Collection from a name, slug and description. **Static only** — a smart Collection's `rules` are stored and never evaluated, so no type selector and no rules editor appear ([#173](https://github.com/knkCS/mediahub/issues/173)) |
|
|
31
|
+
| `CollectionDetail` | One Collection's identity — name, description, delete — **and its access control**: the Restricted toggle (with the leak-guard refusal naming what it would expose) and the roster, offered only where the can-manage probe says the reader is an authority ([ADR 0001](../../docs/adr/0001-grant-authority-owner-or-workspace-admin.md): owner-on-the-Collection or admin-on-its-workspace, and grantees never see the roster). Not Curation: adding and removing assets happens in the library, where the assets are |
|
|
32
|
+
| `MediahubProvider` | The provider a host mounts once, holding the clients and query client |
|
|
33
|
+
| Clients | `createConnectMediahubClients` adapts per-service Connect clients into the domain clients the screens' hooks read, and owns the mapping — a host supplies transport only |
|
|
34
|
+
| Hooks and stores | The queries and mutations behind the screens, for a host composing its own view |
|
|
35
|
+
|
|
36
|
+
Everything lands at the package root (`.`). A second entry point, `./testing`, ships a stub client
|
|
37
|
+
and fixtures so a host can test its own composition without a server.
|
|
38
|
+
|
|
39
|
+
## Narrowing composes
|
|
40
|
+
|
|
41
|
+
Folder, Collection and Tag narrow the library **together** — one folder, many collections, many tags.
|
|
42
|
+
They are not alternative modes, and a UI that makes them mutually exclusive cannot express a question
|
|
43
|
+
the data model permits. `AssetLibrary` accounts for what is applied with a row of dismissible filter
|
|
44
|
+
chips. See ADR 0008 and the `Narrowing` entry in [`CONTEXT.md`](../../CONTEXT.md).
|
|
45
|
+
|
|
46
|
+
## Layout comes from anker
|
|
47
|
+
|
|
48
|
+
Screens use anker's templates and primitives — `IndexPageTemplate`, `DetailPageTemplate`,
|
|
49
|
+
`SubNavLayout`, `ContextRail` — and report their frame through anker's host contract. anker's own
|
|
50
|
+
guidance is explicit: if a template does not fit, file an issue rather than hand-rolling a layout.
|
|
51
|
+
|
|
52
|
+
## Peers
|
|
53
|
+
|
|
54
|
+
Every non-trivial dependency is a **peer** the host supplies once, so a host and the package can
|
|
55
|
+
never load two copies of React, the query client or anker. The Rollup external list is derived from
|
|
56
|
+
`peerDependencies`, so declaring a peer is the whole change.
|
|
57
|
+
|
|
58
|
+
## Releases
|
|
59
|
+
|
|
60
|
+
Versioned with release-please from conventional commits, and published to npm by CI. A commit whose
|
|
61
|
+
subject loses its `feat:`/`fix:` prefix — which a squash merge can do — produces no release at all,
|
|
62
|
+
silently ([knkCS/mediahub#185](https://github.com/knkCS/mediahub/issues/185)).
|
package/dist/index.d.ts
CHANGED
|
@@ -13,6 +13,46 @@ import { UseMutateFunction } from '@tanstack/react-query';
|
|
|
13
13
|
import { UseMutationResult } from '@tanstack/react-query';
|
|
14
14
|
import { UseQueryResult } from '@tanstack/react-query';
|
|
15
15
|
|
|
16
|
+
/** One narrowing currently applied to the library. */
|
|
17
|
+
export declare interface ActiveFilterChip {
|
|
18
|
+
/** Stable identity for the row — never rendered. */
|
|
19
|
+
id: string;
|
|
20
|
+
/**
|
|
21
|
+
* What the chip says, already translated and already resolved to a name.
|
|
22
|
+
* A chip never carries a raw id: the caller resolves Folder, Collection
|
|
23
|
+
* and Tag through the data the panels load, and falls back to the kind's
|
|
24
|
+
* own word when a row cannot be resolved.
|
|
25
|
+
*/
|
|
26
|
+
label: string;
|
|
27
|
+
/** Removes exactly this filter, leaving the others applied. */
|
|
28
|
+
onRemove: () => void;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* The library's account of what is narrowing it (ADR 0008).
|
|
33
|
+
*
|
|
34
|
+
* Presentation only: it owns no filter state and resolves no names — it
|
|
35
|
+
* renders the chips it is handed and reports the dismissals, so the caller's
|
|
36
|
+
* single filter state stays the one source the panels also write.
|
|
37
|
+
*
|
|
38
|
+
* With nothing applied it renders `null` rather than an empty band, so the
|
|
39
|
+
* row costs no vertical space until there is something to account for.
|
|
40
|
+
*
|
|
41
|
+
* Each chip is anker's `Toolbar.FilterChip`, a native button — reachable by
|
|
42
|
+
* Tab and activated by Enter or Space with no key handling of our own.
|
|
43
|
+
*/
|
|
44
|
+
export declare const ActiveFilterChips: React.FC<ActiveFilterChipsProps>;
|
|
45
|
+
|
|
46
|
+
export declare interface ActiveFilterChipsProps {
|
|
47
|
+
chips: ActiveFilterChip[];
|
|
48
|
+
onClearAll: () => void;
|
|
49
|
+
/** Names the group for assistive technology, e.g. "Active filters". */
|
|
50
|
+
groupLabel: string;
|
|
51
|
+
/** Said before each chip's label, so the button announces what it does. */
|
|
52
|
+
removeLabel: string;
|
|
53
|
+
clearAllLabel: string;
|
|
54
|
+
}
|
|
55
|
+
|
|
16
56
|
export declare interface AddVersionVars {
|
|
17
57
|
assetId: string;
|
|
18
58
|
file: File;
|
|
@@ -94,6 +134,47 @@ export declare interface AIProcessClient {
|
|
|
94
134
|
delete(id: string): Promise<void>;
|
|
95
135
|
}
|
|
96
136
|
|
|
137
|
+
/**
|
|
138
|
+
* The AI-Processes tab of the packaged asset-type detail screen: the processes
|
|
139
|
+
* an asset type runs when an asset is analyzed, in order — listed, reordered,
|
|
140
|
+
* enabled/disabled, deleted, created and edited (knkCS/mediahub#157).
|
|
141
|
+
*
|
|
142
|
+
* No routing of its own: where a host's AI-connection settings live is the
|
|
143
|
+
* host's URL, so the "no connections" hint is text, not a link.
|
|
144
|
+
*/
|
|
145
|
+
export declare function AIProcessesTab({ typeId, metadataSchema, }: AIProcessesTabProps): React.JSX.Element;
|
|
146
|
+
|
|
147
|
+
export declare namespace AIProcessesTab {
|
|
148
|
+
var displayName: string;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
export declare interface AIProcessesTabProps {
|
|
152
|
+
/** The asset type whose processes are listed. */
|
|
153
|
+
typeId: string;
|
|
154
|
+
/** The asset type's metadata schema, source of the metadata output targets. */
|
|
155
|
+
metadataSchema: string | undefined;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* Create or edit one AI process for an asset type. Packaged from the
|
|
160
|
+
* standalone's host-local dialog (knkCS/mediahub#157) — same behaviour, same
|
|
161
|
+
* mount semantics, strings under the package's i18n namespace.
|
|
162
|
+
*/
|
|
163
|
+
export declare function AIProcessFormDialog({ open, onClose, assetTypeId, metadataAccessors, editProcess, }: AIProcessFormDialogProps): React.JSX.Element;
|
|
164
|
+
|
|
165
|
+
export declare namespace AIProcessFormDialog {
|
|
166
|
+
var displayName: string;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
export declare interface AIProcessFormDialogProps {
|
|
170
|
+
open: boolean;
|
|
171
|
+
onClose: () => void;
|
|
172
|
+
assetTypeId: string;
|
|
173
|
+
metadataAccessors: MetadataAccessorOption[];
|
|
174
|
+
/** If provided, the dialog opens in edit mode for this process. */
|
|
175
|
+
editProcess?: AIProcessInfo;
|
|
176
|
+
}
|
|
177
|
+
|
|
97
178
|
export declare interface AIProcessInfo {
|
|
98
179
|
id: string;
|
|
99
180
|
workspaceId: string;
|
|
@@ -523,6 +604,146 @@ export declare interface CollectionClient {
|
|
|
523
604
|
setRestricted(id: string, restricted: boolean): Promise<CollectionInfo>;
|
|
524
605
|
}
|
|
525
606
|
|
|
607
|
+
/**
|
|
608
|
+
* Create a Collection. The package owns the screen; both hosts compose it and
|
|
609
|
+
* keep their routing to themselves (#176, parent #174).
|
|
610
|
+
*
|
|
611
|
+
* **Static Collections only.** There is deliberately no Smart/Static selector
|
|
612
|
+
* and no `rules` editor, though the standalone app's form dialog offered both.
|
|
613
|
+
* A smart Collection's `rules` are validated as JSON, stored and returned —
|
|
614
|
+
* and never evaluated anywhere; membership resolves exclusively through
|
|
615
|
+
* explicit edges. The control would therefore do nothing at all, and this
|
|
616
|
+
* project does not ship a known-inert control into a second host
|
|
617
|
+
* (knkCS/mediahub#173). Every Collection created here is `static` with empty
|
|
618
|
+
* rules.
|
|
619
|
+
*
|
|
620
|
+
* The slug follows the name until it is edited by hand and then stops, and the
|
|
621
|
+
* server's rule (lowercase alphanumeric with hyphens, at least two characters)
|
|
622
|
+
* is both stated on the form and enforced before submit — without both, a name
|
|
623
|
+
* like `Bild Anhang` produced a bare 400 (knkcms/core#861).
|
|
624
|
+
*/
|
|
625
|
+
export declare function CollectionCreate({ collectionsPath, onCreated, onCancel, }: CollectionCreateProps): default_2.JSX.Element;
|
|
626
|
+
|
|
627
|
+
export declare namespace CollectionCreate {
|
|
628
|
+
var displayName: string;
|
|
629
|
+
}
|
|
630
|
+
|
|
631
|
+
export declare interface CollectionCreateProps {
|
|
632
|
+
/**
|
|
633
|
+
* The host's Collection index path — the breadcrumb's target. A path, not a
|
|
634
|
+
* route: the screen never navigates, it only says where the list it belongs
|
|
635
|
+
* to lives (core's `docs/service-integration.md`; spec #174).
|
|
636
|
+
*/
|
|
637
|
+
collectionsPath: string;
|
|
638
|
+
/**
|
|
639
|
+
* The Collection was created; the host receives its id and decides where to
|
|
640
|
+
* go. Id only, like `CollectionIndex`'s `onOpen` — the host needs it to
|
|
641
|
+
* build a detail URL, and nothing here knows what that URL looks like.
|
|
642
|
+
*/
|
|
643
|
+
onCreated?: (collectionId: string) => void;
|
|
644
|
+
/** Called when the administrator abandons the form. */
|
|
645
|
+
onCancel?: () => void;
|
|
646
|
+
}
|
|
647
|
+
|
|
648
|
+
/**
|
|
649
|
+
* The packaged collection detail screen: view one Collection, correct its name
|
|
650
|
+
* and description, delete it behind a confirmation, and — for an authority —
|
|
651
|
+
* decide who may see it.
|
|
652
|
+
*
|
|
653
|
+
* **Authority, per ADR 0001**, is owner-on-the-Collection *or* admin-on-its-
|
|
654
|
+
* workspace, and the package already answers it: `useCanManage` probes it by
|
|
655
|
+
* attempting the roster read the server gates on exactly that authority. Only
|
|
656
|
+
* `data === true` unlocks anything — a pending probe, a denial and a failure
|
|
657
|
+
* all render the same screen without management controls (fail closed).
|
|
658
|
+
*
|
|
659
|
+
* **A denial is an answer, not a failure.** `canManage` reads Connect's
|
|
660
|
+
* *numeric* code 7 as "not an authority" and returns false. A host transport
|
|
661
|
+
* that flattens errors to a bare message (core's did until
|
|
662
|
+
* knkboor/general#814) turns that answer into a rejection — which this screen
|
|
663
|
+
* survives, because a rejected probe is not `true` either, so the controls
|
|
664
|
+
* stay hidden instead of the screen breaking for the users with least access.
|
|
665
|
+
* Both shapes are pinned by test.
|
|
666
|
+
*
|
|
667
|
+
* **Grantees never see the roster** (ADR 0001 again): content access and
|
|
668
|
+
* roster access are separate privileges, so a viewer gets the Collection's
|
|
669
|
+
* identity and no Manage Access affordance at all — the roster is never
|
|
670
|
+
* fetched for them, not merely hidden after the fact. Authority withdrawn
|
|
671
|
+
* *mid-session* takes the controls away at once and closes an open dialog
|
|
672
|
+
* through its `open` prop — the machine itself stays mounted, because
|
|
673
|
+
* unmounting a dialog while it is open leaks the body scroll lock over the
|
|
674
|
+
* whole application (CLAUDE-ANKER's Modal mount pattern). The Restricted state
|
|
675
|
+
* itself is on the record they already read and is shown to everyone, as the
|
|
676
|
+
* index and the folder tree show it.
|
|
677
|
+
*
|
|
678
|
+
* **Curation** — adding and removing assets — is not this screen's job: per
|
|
679
|
+
* ADR 0003 it happens in the library, where the assets are.
|
|
680
|
+
*
|
|
681
|
+
* **The patch is the whole record this screen owns, every time.**
|
|
682
|
+
* `UpdateCollectionRequest` carries plain proto3 scalars and the service applies
|
|
683
|
+
* `description` unconditionally, so a patch naming only `name` clears the
|
|
684
|
+
* description (knkCS/mediahub#159, the same trap as knkcms/core#863). Saving
|
|
685
|
+
* therefore sends both fields, and deliberately does *not* name `rules` — the
|
|
686
|
+
* smart-collection field this surface does not edit (knkCS/mediahub#173) — so
|
|
687
|
+
* the client's read-modify-write keeps whatever is stored there.
|
|
688
|
+
*
|
|
689
|
+
* **Correct against the wire, not against the declared type.** Connect omits
|
|
690
|
+
* empty strings from its JSON, so a description-less collection arrives with
|
|
691
|
+
* the key absent. Every field is defaulted where it is read, so an absent value
|
|
692
|
+
* renders as empty rather than flipping a controlled input to uncontrolled.
|
|
693
|
+
*/
|
|
694
|
+
export declare function CollectionDetail({ collectionId, collectionsPath, onBack, onDeleted, }: CollectionDetailProps): default_2.JSX.Element;
|
|
695
|
+
|
|
696
|
+
export declare namespace CollectionDetail {
|
|
697
|
+
var displayName: string;
|
|
698
|
+
}
|
|
699
|
+
|
|
700
|
+
export declare interface CollectionDetailProps {
|
|
701
|
+
/** The collection to show. */
|
|
702
|
+
collectionId: string;
|
|
703
|
+
/**
|
|
704
|
+
* Typed path of the host's collection index, used for the breadcrumb back
|
|
705
|
+
* link. The screen never routes itself — the host owns its URLs
|
|
706
|
+
* (core's `docs/service-integration.md`).
|
|
707
|
+
*/
|
|
708
|
+
collectionsPath?: string;
|
|
709
|
+
/**
|
|
710
|
+
* Navigate back to the collection index. Given one, the screen renders a
|
|
711
|
+
* back affordance that confirms before discarding unsaved edits — the
|
|
712
|
+
* breadcrumb link above is the host's own navigation and the screen cannot
|
|
713
|
+
* intercept it.
|
|
714
|
+
*/
|
|
715
|
+
onBack?: () => void;
|
|
716
|
+
/** Called after a successful delete; the host decides where to go next. */
|
|
717
|
+
onDeleted?: () => void;
|
|
718
|
+
}
|
|
719
|
+
|
|
720
|
+
/**
|
|
721
|
+
* The workspace's Collections, listed. The package owns the screen; both hosts
|
|
722
|
+
* compose it and keep their own routing to themselves (#175, parent #174).
|
|
723
|
+
*
|
|
724
|
+
* Listing is deliberately NOT gated by authority: a Collection the user can see
|
|
725
|
+
* is listed, because per ADR 0001 seeing a Collection and managing it are
|
|
726
|
+
* separate privileges. Management controls arrive in later tickets and are
|
|
727
|
+
* gated there, on the can-manage probe — never here, on the listing.
|
|
728
|
+
*/
|
|
729
|
+
export declare function CollectionIndex(props: CollectionIndexProps): React.JSX.Element;
|
|
730
|
+
|
|
731
|
+
export declare namespace CollectionIndex {
|
|
732
|
+
var displayName: string;
|
|
733
|
+
}
|
|
734
|
+
|
|
735
|
+
export declare interface CollectionIndexProps {
|
|
736
|
+
/**
|
|
737
|
+
* A collection was opened. The host decides what that means — it receives
|
|
738
|
+
* the id and nothing else, because this package must not know either host's
|
|
739
|
+
* URL structure (core's `docs/service-integration.md`; spec #138, #174).
|
|
740
|
+
* Screens, not routes: nothing here navigates and nothing here builds a path.
|
|
741
|
+
*/
|
|
742
|
+
onOpen?: (collectionId: string) => void;
|
|
743
|
+
/** The reader asked for a new collection. Same contract as `onOpen`. */
|
|
744
|
+
onCreate?: () => void;
|
|
745
|
+
}
|
|
746
|
+
|
|
526
747
|
export declare interface CollectionInfo {
|
|
527
748
|
id: string;
|
|
528
749
|
workspaceId: string;
|
|
@@ -1057,6 +1278,7 @@ export declare const i18nResources: {
|
|
|
1057
1278
|
backButtonAria: string;
|
|
1058
1279
|
generalTab: string;
|
|
1059
1280
|
metadataTab: string;
|
|
1281
|
+
aiProcessesTab: string;
|
|
1060
1282
|
nameLabel: string;
|
|
1061
1283
|
nameRequired: string;
|
|
1062
1284
|
slugLabel: string;
|
|
@@ -1082,6 +1304,41 @@ export declare const i18nResources: {
|
|
|
1082
1304
|
discardConfirmMessage: string;
|
|
1083
1305
|
discardConfirmLabel: string;
|
|
1084
1306
|
};
|
|
1307
|
+
collectionDetail: {
|
|
1308
|
+
breadcrumbCollections: string;
|
|
1309
|
+
notFound: string;
|
|
1310
|
+
untitled: string;
|
|
1311
|
+
backButtonAria: string;
|
|
1312
|
+
nameLabel: string;
|
|
1313
|
+
nameRequired: string;
|
|
1314
|
+
slugLabel: string;
|
|
1315
|
+
descriptionLabel: string;
|
|
1316
|
+
descriptionPlaceholder: string;
|
|
1317
|
+
save: string;
|
|
1318
|
+
delete: string;
|
|
1319
|
+
saveSuccessToast: string;
|
|
1320
|
+
saveFailedToast: string;
|
|
1321
|
+
deleteConfirmTitle: string;
|
|
1322
|
+
deleteConfirmMessage: string;
|
|
1323
|
+
deleteConfirmLabel: string;
|
|
1324
|
+
deleteSuccessToast: string;
|
|
1325
|
+
deleteFailedToast: string;
|
|
1326
|
+
discardConfirmTitle: string;
|
|
1327
|
+
discardConfirmMessage: string;
|
|
1328
|
+
discardConfirmLabel: string;
|
|
1329
|
+
accessHeading: string;
|
|
1330
|
+
accessOpenNote: string;
|
|
1331
|
+
accessRestrictedNote: string;
|
|
1332
|
+
restrict: string;
|
|
1333
|
+
unrestrict: string;
|
|
1334
|
+
manageAccess: string;
|
|
1335
|
+
unrestrictConfirmTitle: string;
|
|
1336
|
+
unrestrictConfirmLabel: string;
|
|
1337
|
+
restrictSuccessToast: string;
|
|
1338
|
+
unrestrictSuccessToast: string;
|
|
1339
|
+
restrictFailedToast: string;
|
|
1340
|
+
unrestrictFailedToast: string;
|
|
1341
|
+
};
|
|
1085
1342
|
assetLibrary: {
|
|
1086
1343
|
pageTitle: string;
|
|
1087
1344
|
uploadButton: string;
|
|
@@ -1116,6 +1373,20 @@ export declare const i18nResources: {
|
|
|
1116
1373
|
clearStatusGroup: string;
|
|
1117
1374
|
assetsLoadFailedHeader: string;
|
|
1118
1375
|
noAssetsFound: string;
|
|
1376
|
+
activeFiltersLabel: string;
|
|
1377
|
+
removeFilter: string;
|
|
1378
|
+
clearAllFilters: string;
|
|
1379
|
+
chipFolder: string;
|
|
1380
|
+
chipFolderUnresolved: string;
|
|
1381
|
+
chipCollection: string;
|
|
1382
|
+
chipCollectionUnresolved: string;
|
|
1383
|
+
chipTag: string;
|
|
1384
|
+
chipTagUnresolved: string;
|
|
1385
|
+
chipStatus: string;
|
|
1386
|
+
chipStatusGroup: string;
|
|
1387
|
+
chipSearch: string;
|
|
1388
|
+
noAssetsMatchFilters: string;
|
|
1389
|
+
noAssetsMatchFiltersDescription: string;
|
|
1119
1390
|
};
|
|
1120
1391
|
assetPicker: {
|
|
1121
1392
|
headerSingle: string;
|
|
@@ -1359,6 +1630,92 @@ export declare const i18nResources: {
|
|
|
1359
1630
|
noMatchesDescription: string;
|
|
1360
1631
|
loadFailedHeader: string;
|
|
1361
1632
|
};
|
|
1633
|
+
collectionCreate: {
|
|
1634
|
+
title: string;
|
|
1635
|
+
breadcrumbCollections: string;
|
|
1636
|
+
nameLabel: string;
|
|
1637
|
+
namePlaceholder: string;
|
|
1638
|
+
nameRequired: string;
|
|
1639
|
+
slugLabel: string;
|
|
1640
|
+
slugHint: string;
|
|
1641
|
+
slugInvalid: string;
|
|
1642
|
+
descriptionLabel: string;
|
|
1643
|
+
descriptionPlaceholder: string;
|
|
1644
|
+
submit: string;
|
|
1645
|
+
cancel: string;
|
|
1646
|
+
createdToast: string;
|
|
1647
|
+
createFailedToast: string;
|
|
1648
|
+
};
|
|
1649
|
+
collectionIndex: {
|
|
1650
|
+
pageTitle: string;
|
|
1651
|
+
pageSubtitle: string;
|
|
1652
|
+
newButton: string;
|
|
1653
|
+
searchPlaceholder: string;
|
|
1654
|
+
collectionsCount: string;
|
|
1655
|
+
columnName: string;
|
|
1656
|
+
columnDescription: string;
|
|
1657
|
+
noCollectionsHeader: string;
|
|
1658
|
+
noCollectionsDescription: string;
|
|
1659
|
+
noMatchesHeader: string;
|
|
1660
|
+
noMatchesDescription: string;
|
|
1661
|
+
loadFailedHeader: string;
|
|
1662
|
+
};
|
|
1663
|
+
aiProcesses: {
|
|
1664
|
+
intro: string;
|
|
1665
|
+
newProcess: string;
|
|
1666
|
+
noConnectionsHint: string;
|
|
1667
|
+
empty: string;
|
|
1668
|
+
outputCount_one: string;
|
|
1669
|
+
outputCount_other: string;
|
|
1670
|
+
active: string;
|
|
1671
|
+
inactive: string;
|
|
1672
|
+
enableAria: string;
|
|
1673
|
+
disableAria: string;
|
|
1674
|
+
moveUpAria: string;
|
|
1675
|
+
moveDownAria: string;
|
|
1676
|
+
editAria: string;
|
|
1677
|
+
deleteAria: string;
|
|
1678
|
+
deleteConfirmTitle: string;
|
|
1679
|
+
deleteConfirmMessage: string;
|
|
1680
|
+
deleteConfirmLabel: string;
|
|
1681
|
+
deletedToast: string;
|
|
1682
|
+
deleteFailedToast: string;
|
|
1683
|
+
updateFailedToast: string;
|
|
1684
|
+
reorderFailedToast: string;
|
|
1685
|
+
};
|
|
1686
|
+
aiProcessDialog: {
|
|
1687
|
+
createHeader: string;
|
|
1688
|
+
editHeader: string;
|
|
1689
|
+
createLabel: string;
|
|
1690
|
+
saveLabel: string;
|
|
1691
|
+
nameLabel: string;
|
|
1692
|
+
namePlaceholder: string;
|
|
1693
|
+
nameRequired: string;
|
|
1694
|
+
connectionLabel: string;
|
|
1695
|
+
connectionPlaceholder: string;
|
|
1696
|
+
connectionRequired: string;
|
|
1697
|
+
promptLabel: string;
|
|
1698
|
+
promptPlaceholder: string;
|
|
1699
|
+
promptRequired: string;
|
|
1700
|
+
outputsLabel: string;
|
|
1701
|
+
outputKeyLabel: string;
|
|
1702
|
+
outputKeyPlaceholder: string;
|
|
1703
|
+
outputKeyRequired: string;
|
|
1704
|
+
outputRequired: string;
|
|
1705
|
+
addOutput: string;
|
|
1706
|
+
removeOutputAria: string;
|
|
1707
|
+
targetLabel: string;
|
|
1708
|
+
targetDescription: string;
|
|
1709
|
+
targetTags: string;
|
|
1710
|
+
targetMetadata: string;
|
|
1711
|
+
metadataFieldLabel: string;
|
|
1712
|
+
metadataFieldPlaceholder: string;
|
|
1713
|
+
metadataFieldRequired: string;
|
|
1714
|
+
createdToast: string;
|
|
1715
|
+
createFailedToast: string;
|
|
1716
|
+
updatedToast: string;
|
|
1717
|
+
updateFailedToast: string;
|
|
1718
|
+
};
|
|
1362
1719
|
};
|
|
1363
1720
|
};
|
|
1364
1721
|
de: {
|
|
@@ -1428,6 +1785,7 @@ export declare const i18nResources: {
|
|
|
1428
1785
|
backButtonAria: string;
|
|
1429
1786
|
generalTab: string;
|
|
1430
1787
|
metadataTab: string;
|
|
1788
|
+
aiProcessesTab: string;
|
|
1431
1789
|
nameLabel: string;
|
|
1432
1790
|
nameRequired: string;
|
|
1433
1791
|
slugLabel: string;
|
|
@@ -1453,6 +1811,41 @@ export declare const i18nResources: {
|
|
|
1453
1811
|
discardConfirmMessage: string;
|
|
1454
1812
|
discardConfirmLabel: string;
|
|
1455
1813
|
};
|
|
1814
|
+
collectionDetail: {
|
|
1815
|
+
breadcrumbCollections: string;
|
|
1816
|
+
notFound: string;
|
|
1817
|
+
untitled: string;
|
|
1818
|
+
backButtonAria: string;
|
|
1819
|
+
nameLabel: string;
|
|
1820
|
+
nameRequired: string;
|
|
1821
|
+
slugLabel: string;
|
|
1822
|
+
descriptionLabel: string;
|
|
1823
|
+
descriptionPlaceholder: string;
|
|
1824
|
+
save: string;
|
|
1825
|
+
delete: string;
|
|
1826
|
+
saveSuccessToast: string;
|
|
1827
|
+
saveFailedToast: string;
|
|
1828
|
+
deleteConfirmTitle: string;
|
|
1829
|
+
deleteConfirmMessage: string;
|
|
1830
|
+
deleteConfirmLabel: string;
|
|
1831
|
+
deleteSuccessToast: string;
|
|
1832
|
+
deleteFailedToast: string;
|
|
1833
|
+
discardConfirmTitle: string;
|
|
1834
|
+
discardConfirmMessage: string;
|
|
1835
|
+
discardConfirmLabel: string;
|
|
1836
|
+
accessHeading: string;
|
|
1837
|
+
accessOpenNote: string;
|
|
1838
|
+
accessRestrictedNote: string;
|
|
1839
|
+
restrict: string;
|
|
1840
|
+
unrestrict: string;
|
|
1841
|
+
manageAccess: string;
|
|
1842
|
+
unrestrictConfirmTitle: string;
|
|
1843
|
+
unrestrictConfirmLabel: string;
|
|
1844
|
+
restrictSuccessToast: string;
|
|
1845
|
+
unrestrictSuccessToast: string;
|
|
1846
|
+
restrictFailedToast: string;
|
|
1847
|
+
unrestrictFailedToast: string;
|
|
1848
|
+
};
|
|
1456
1849
|
assetLibrary: {
|
|
1457
1850
|
pageTitle: string;
|
|
1458
1851
|
uploadButton: string;
|
|
@@ -1487,6 +1880,20 @@ export declare const i18nResources: {
|
|
|
1487
1880
|
clearStatusGroup: string;
|
|
1488
1881
|
assetsLoadFailedHeader: string;
|
|
1489
1882
|
noAssetsFound: string;
|
|
1883
|
+
activeFiltersLabel: string;
|
|
1884
|
+
removeFilter: string;
|
|
1885
|
+
clearAllFilters: string;
|
|
1886
|
+
chipFolder: string;
|
|
1887
|
+
chipFolderUnresolved: string;
|
|
1888
|
+
chipCollection: string;
|
|
1889
|
+
chipCollectionUnresolved: string;
|
|
1890
|
+
chipTag: string;
|
|
1891
|
+
chipTagUnresolved: string;
|
|
1892
|
+
chipStatus: string;
|
|
1893
|
+
chipStatusGroup: string;
|
|
1894
|
+
chipSearch: string;
|
|
1895
|
+
noAssetsMatchFilters: string;
|
|
1896
|
+
noAssetsMatchFiltersDescription: string;
|
|
1490
1897
|
};
|
|
1491
1898
|
assetPicker: {
|
|
1492
1899
|
headerSingle: string;
|
|
@@ -1730,6 +2137,92 @@ export declare const i18nResources: {
|
|
|
1730
2137
|
noMatchesDescription: string;
|
|
1731
2138
|
loadFailedHeader: string;
|
|
1732
2139
|
};
|
|
2140
|
+
collectionCreate: {
|
|
2141
|
+
title: string;
|
|
2142
|
+
breadcrumbCollections: string;
|
|
2143
|
+
nameLabel: string;
|
|
2144
|
+
namePlaceholder: string;
|
|
2145
|
+
nameRequired: string;
|
|
2146
|
+
slugLabel: string;
|
|
2147
|
+
slugHint: string;
|
|
2148
|
+
slugInvalid: string;
|
|
2149
|
+
descriptionLabel: string;
|
|
2150
|
+
descriptionPlaceholder: string;
|
|
2151
|
+
submit: string;
|
|
2152
|
+
cancel: string;
|
|
2153
|
+
createdToast: string;
|
|
2154
|
+
createFailedToast: string;
|
|
2155
|
+
};
|
|
2156
|
+
collectionIndex: {
|
|
2157
|
+
pageTitle: string;
|
|
2158
|
+
pageSubtitle: string;
|
|
2159
|
+
newButton: string;
|
|
2160
|
+
searchPlaceholder: string;
|
|
2161
|
+
collectionsCount: string;
|
|
2162
|
+
columnName: string;
|
|
2163
|
+
columnDescription: string;
|
|
2164
|
+
noCollectionsHeader: string;
|
|
2165
|
+
noCollectionsDescription: string;
|
|
2166
|
+
noMatchesHeader: string;
|
|
2167
|
+
noMatchesDescription: string;
|
|
2168
|
+
loadFailedHeader: string;
|
|
2169
|
+
};
|
|
2170
|
+
aiProcesses: {
|
|
2171
|
+
intro: string;
|
|
2172
|
+
newProcess: string;
|
|
2173
|
+
noConnectionsHint: string;
|
|
2174
|
+
empty: string;
|
|
2175
|
+
outputCount_one: string;
|
|
2176
|
+
outputCount_other: string;
|
|
2177
|
+
active: string;
|
|
2178
|
+
inactive: string;
|
|
2179
|
+
enableAria: string;
|
|
2180
|
+
disableAria: string;
|
|
2181
|
+
moveUpAria: string;
|
|
2182
|
+
moveDownAria: string;
|
|
2183
|
+
editAria: string;
|
|
2184
|
+
deleteAria: string;
|
|
2185
|
+
deleteConfirmTitle: string;
|
|
2186
|
+
deleteConfirmMessage: string;
|
|
2187
|
+
deleteConfirmLabel: string;
|
|
2188
|
+
deletedToast: string;
|
|
2189
|
+
deleteFailedToast: string;
|
|
2190
|
+
updateFailedToast: string;
|
|
2191
|
+
reorderFailedToast: string;
|
|
2192
|
+
};
|
|
2193
|
+
aiProcessDialog: {
|
|
2194
|
+
createHeader: string;
|
|
2195
|
+
editHeader: string;
|
|
2196
|
+
createLabel: string;
|
|
2197
|
+
saveLabel: string;
|
|
2198
|
+
nameLabel: string;
|
|
2199
|
+
namePlaceholder: string;
|
|
2200
|
+
nameRequired: string;
|
|
2201
|
+
connectionLabel: string;
|
|
2202
|
+
connectionPlaceholder: string;
|
|
2203
|
+
connectionRequired: string;
|
|
2204
|
+
promptLabel: string;
|
|
2205
|
+
promptPlaceholder: string;
|
|
2206
|
+
promptRequired: string;
|
|
2207
|
+
outputsLabel: string;
|
|
2208
|
+
outputKeyLabel: string;
|
|
2209
|
+
outputKeyPlaceholder: string;
|
|
2210
|
+
outputKeyRequired: string;
|
|
2211
|
+
outputRequired: string;
|
|
2212
|
+
addOutput: string;
|
|
2213
|
+
removeOutputAria: string;
|
|
2214
|
+
targetLabel: string;
|
|
2215
|
+
targetDescription: string;
|
|
2216
|
+
targetTags: string;
|
|
2217
|
+
targetMetadata: string;
|
|
2218
|
+
metadataFieldLabel: string;
|
|
2219
|
+
metadataFieldPlaceholder: string;
|
|
2220
|
+
metadataFieldRequired: string;
|
|
2221
|
+
createdToast: string;
|
|
2222
|
+
createFailedToast: string;
|
|
2223
|
+
updatedToast: string;
|
|
2224
|
+
updateFailedToast: string;
|
|
2225
|
+
};
|
|
1733
2226
|
};
|
|
1734
2227
|
};
|
|
1735
2228
|
};
|
|
@@ -1884,6 +2377,11 @@ export declare interface MediahubProviderProps {
|
|
|
1884
2377
|
children: ReactNode;
|
|
1885
2378
|
}
|
|
1886
2379
|
|
|
2380
|
+
export declare interface MetadataAccessorOption {
|
|
2381
|
+
label: string;
|
|
2382
|
+
value: string;
|
|
2383
|
+
}
|
|
2384
|
+
|
|
1887
2385
|
/**
|
|
1888
2386
|
* The asset type's fieldkit metadata schema, edited on a page with room for it
|
|
1889
2387
|
* (spec knkCS/mediahub#138, story 7) rather than as a JSON textarea.
|