@anvilkit/plugin-asset-manager 0.1.5 → 0.1.7
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 +27 -19
- package/dist/adapters/data-url.cjs +9 -5
- package/dist/adapters/extract-image-dimensions.cjs +12 -8
- package/dist/adapters/in-memory.cjs +9 -5
- package/dist/adapters/s3-presigned.cjs +9 -5
- package/dist/index.cjs +16 -5
- package/dist/index.d.cts +11 -3
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.ts +11 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/plugin.cjs +76 -9
- package/dist/plugin.d.cts +3 -2
- package/dist/plugin.d.cts.map +1 -1
- package/dist/plugin.d.ts +3 -2
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +67 -4
- package/dist/sources/composite-source.cjs +137 -0
- package/dist/sources/composite-source.d.cts +39 -0
- package/dist/sources/composite-source.d.cts.map +1 -0
- package/dist/sources/composite-source.d.ts +39 -0
- package/dist/sources/composite-source.d.ts.map +1 -0
- package/dist/sources/composite-source.js +99 -0
- package/dist/sources/federated-search.cjs +163 -0
- package/dist/sources/federated-search.d.cts +33 -0
- package/dist/sources/federated-search.d.cts.map +1 -0
- package/dist/sources/federated-search.d.ts +33 -0
- package/dist/sources/federated-search.d.ts.map +1 -0
- package/dist/sources/federated-search.js +113 -0
- package/dist/sources/provider.cjs +18 -0
- package/dist/sources/provider.d.cts +51 -0
- package/dist/sources/provider.d.cts.map +1 -0
- package/dist/sources/provider.d.ts +51 -0
- package/dist/sources/provider.d.ts.map +1 -0
- package/dist/sources/provider.js +1 -0
- package/dist/sources/unsplash/client.cjs +189 -0
- package/dist/sources/unsplash/client.d.cts +87 -0
- package/dist/sources/unsplash/client.d.cts.map +1 -0
- package/dist/sources/unsplash/client.d.ts +87 -0
- package/dist/sources/unsplash/client.d.ts.map +1 -0
- package/dist/sources/unsplash/client.js +151 -0
- package/dist/sources/unsplash/index.cjs +192 -0
- package/dist/sources/unsplash/index.d.cts +16 -0
- package/dist/sources/unsplash/index.d.cts.map +1 -0
- package/dist/sources/unsplash/index.d.ts +16 -0
- package/dist/sources/unsplash/index.d.ts.map +1 -0
- package/dist/sources/unsplash/index.js +148 -0
- package/dist/sources/unsplash/themes.cjs +141 -0
- package/dist/sources/unsplash/themes.d.cts +18 -0
- package/dist/sources/unsplash/themes.d.cts.map +1 -0
- package/dist/sources/unsplash/themes.d.ts +18 -0
- package/dist/sources/unsplash/themes.d.ts.map +1 -0
- package/dist/sources/unsplash/themes.js +93 -0
- package/dist/sources/unsplash/throttle-cache.cjs +86 -0
- package/dist/sources/unsplash/throttle-cache.d.cts +25 -0
- package/dist/sources/unsplash/throttle-cache.d.cts.map +1 -0
- package/dist/sources/unsplash/throttle-cache.d.ts +25 -0
- package/dist/sources/unsplash/throttle-cache.d.ts.map +1 -0
- package/dist/sources/unsplash/throttle-cache.js +45 -0
- package/dist/testing/index.cjs +9 -5
- package/dist/types/categories.cjs +18 -0
- package/dist/types/categories.d.cts +48 -0
- package/dist/types/categories.d.cts.map +1 -0
- package/dist/types/categories.d.ts +48 -0
- package/dist/types/categories.d.ts.map +1 -0
- package/dist/types/categories.js +1 -0
- package/dist/types/data-source.cjs +18 -0
- package/dist/types/data-source.d.cts +59 -0
- package/dist/types/data-source.d.cts.map +1 -0
- package/dist/types/data-source.d.ts +59 -0
- package/dist/types/data-source.d.ts.map +1 -0
- package/dist/types/data-source.js +1 -0
- package/dist/types/filter.cjs +18 -0
- package/dist/types/filter.d.cts +55 -0
- package/dist/types/filter.d.cts.map +1 -0
- package/dist/types/filter.d.ts +55 -0
- package/dist/types/filter.d.ts.map +1 -0
- package/dist/types/filter.js +1 -0
- package/dist/types/folders.cjs +42 -0
- package/dist/types/folders.d.cts +46 -0
- package/dist/types/folders.d.cts.map +1 -0
- package/dist/types/folders.d.ts +46 -0
- package/dist/types/folders.d.ts.map +1 -0
- package/dist/types/folders.js +4 -0
- package/dist/types/options.cjs +18 -0
- package/dist/types/options.d.cts +68 -0
- package/dist/types/options.d.cts.map +1 -0
- package/dist/types/options.d.ts +68 -0
- package/dist/types/options.d.ts.map +1 -0
- package/dist/types/options.js +1 -0
- package/dist/types/types.d.cts +15 -27
- package/dist/types/types.d.cts.map +1 -1
- package/dist/types/types.d.ts +15 -27
- package/dist/types/types.d.ts.map +1 -1
- package/dist/types/unsplash.cjs +18 -0
- package/dist/types/unsplash.d.cts +60 -0
- package/dist/types/unsplash.d.cts.map +1 -0
- package/dist/types/unsplash.d.ts +60 -0
- package/dist/types/unsplash.d.ts.map +1 -0
- package/dist/types/unsplash.js +1 -0
- package/dist/ui/AssetBrowser.cjs +69 -104
- package/dist/ui/AssetBrowser.d.cts +17 -7
- package/dist/ui/AssetBrowser.d.cts.map +1 -1
- package/dist/ui/AssetBrowser.d.ts +17 -7
- package/dist/ui/AssetBrowser.d.ts.map +1 -1
- package/dist/ui/AssetBrowser.js +60 -99
- package/dist/ui/AssetCommandPalette.cjs +9 -5
- package/dist/ui/AssetManagerUI.cjs +17 -7
- package/dist/ui/AssetManagerUI.d.cts +19 -3
- package/dist/ui/AssetManagerUI.d.cts.map +1 -1
- package/dist/ui/AssetManagerUI.d.ts +19 -3
- package/dist/ui/AssetManagerUI.d.ts.map +1 -1
- package/dist/ui/AssetManagerUI.js +8 -2
- package/dist/ui/DeleteAssetDialog.cjs +9 -5
- package/dist/ui/DeleteFolderDialog.cjs +78 -0
- package/dist/ui/DeleteFolderDialog.d.cts +11 -0
- package/dist/ui/DeleteFolderDialog.d.cts.map +1 -0
- package/dist/ui/DeleteFolderDialog.d.ts +11 -0
- package/dist/ui/DeleteFolderDialog.d.ts.map +1 -0
- package/dist/ui/DeleteFolderDialog.js +40 -0
- package/dist/ui/EmptyFolderState.cjs +53 -0
- package/dist/ui/EmptyFolderState.d.cts +6 -0
- package/dist/ui/EmptyFolderState.d.cts.map +1 -0
- package/dist/ui/EmptyFolderState.d.ts +6 -0
- package/dist/ui/EmptyFolderState.d.ts.map +1 -0
- package/dist/ui/EmptyFolderState.js +15 -0
- package/dist/ui/FolderBreadcrumb.cjs +73 -0
- package/dist/ui/FolderBreadcrumb.d.cts +9 -0
- package/dist/ui/FolderBreadcrumb.d.cts.map +1 -0
- package/dist/ui/FolderBreadcrumb.d.ts +9 -0
- package/dist/ui/FolderBreadcrumb.d.ts.map +1 -0
- package/dist/ui/FolderBreadcrumb.js +35 -0
- package/dist/ui/FolderNameDialog.cjs +98 -0
- package/dist/ui/FolderNameDialog.d.cts +14 -0
- package/dist/ui/FolderNameDialog.d.cts.map +1 -0
- package/dist/ui/FolderNameDialog.d.ts +14 -0
- package/dist/ui/FolderNameDialog.d.ts.map +1 -0
- package/dist/ui/FolderNameDialog.js +60 -0
- package/dist/ui/FolderTree.cjs +83 -0
- package/dist/ui/FolderTree.d.cts +13 -0
- package/dist/ui/FolderTree.d.cts.map +1 -0
- package/dist/ui/FolderTree.d.ts +13 -0
- package/dist/ui/FolderTree.d.ts.map +1 -0
- package/dist/ui/FolderTree.js +42 -0
- package/dist/ui/MetadataPanel.cjs +16 -9
- package/dist/ui/MetadataPanel.d.cts.map +1 -1
- package/dist/ui/MetadataPanel.d.ts.map +1 -1
- package/dist/ui/MetadataPanel.js +7 -4
- package/dist/ui/MoveTargetPicker.cjs +84 -0
- package/dist/ui/MoveTargetPicker.d.cts +16 -0
- package/dist/ui/MoveTargetPicker.d.cts.map +1 -0
- package/dist/ui/MoveTargetPicker.d.ts +16 -0
- package/dist/ui/MoveTargetPicker.d.ts.map +1 -0
- package/dist/ui/MoveTargetPicker.js +46 -0
- package/dist/ui/ReplaceAssetDialog.cjs +9 -5
- package/dist/ui/ReplaceAssetDialog.d.cts +2 -1
- package/dist/ui/ReplaceAssetDialog.d.cts.map +1 -1
- package/dist/ui/ReplaceAssetDialog.d.ts +2 -1
- package/dist/ui/ReplaceAssetDialog.d.ts.map +1 -1
- package/dist/ui/UnsplashPanel.cjs +134 -0
- package/dist/ui/UnsplashPanel.d.cts +28 -0
- package/dist/ui/UnsplashPanel.d.cts.map +1 -0
- package/dist/ui/UnsplashPanel.d.ts +28 -0
- package/dist/ui/UnsplashPanel.d.ts.map +1 -0
- package/dist/ui/UnsplashPanel.js +96 -0
- package/dist/ui/UploadButton.cjs +10 -10
- package/dist/ui/UploadButton.d.cts +9 -2
- package/dist/ui/UploadButton.d.cts.map +1 -1
- package/dist/ui/UploadButton.d.ts +9 -2
- package/dist/ui/UploadButton.d.ts.map +1 -1
- package/dist/ui/UploadButton.js +1 -5
- package/dist/ui/index.cjs +46 -5
- package/dist/ui/index.d.cts +14 -0
- package/dist/ui/index.d.cts.map +1 -1
- package/dist/ui/index.d.ts +14 -0
- package/dist/ui/index.d.ts.map +1 -1
- package/dist/ui/index.js +7 -0
- package/dist/utils/asset-reference.cjs +12 -8
- package/dist/utils/csp.cjs +12 -8
- package/dist/utils/data-source.cjs +177 -0
- package/dist/utils/data-source.d.cts +63 -0
- package/dist/utils/data-source.d.cts.map +1 -0
- package/dist/utils/data-source.d.ts +63 -0
- package/dist/utils/data-source.d.ts.map +1 -0
- package/dist/utils/data-source.js +136 -0
- package/dist/utils/errors.cjs +31 -9
- package/dist/utils/errors.d.cts +27 -0
- package/dist/utils/errors.d.cts.map +1 -1
- package/dist/utils/errors.d.ts +27 -0
- package/dist/utils/errors.d.ts.map +1 -1
- package/dist/utils/errors.js +16 -1
- package/dist/utils/folders.cjs +261 -0
- package/dist/utils/folders.d.cts +49 -0
- package/dist/utils/folders.d.cts.map +1 -0
- package/dist/utils/folders.d.ts +49 -0
- package/dist/utils/folders.d.ts.map +1 -0
- package/dist/utils/folders.js +223 -0
- package/dist/utils/header-action.cjs +12 -8
- package/dist/utils/infer-kind.cjs +12 -8
- package/dist/utils/registry.cjs +36 -17
- package/dist/utils/registry.d.cts +21 -1
- package/dist/utils/registry.d.cts.map +1 -1
- package/dist/utils/registry.d.ts +21 -1
- package/dist/utils/registry.d.ts.map +1 -1
- package/dist/utils/registry.js +20 -11
- package/dist/utils/resolver.cjs +9 -5
- package/dist/utils/retry.cjs +13 -9
- package/dist/utils/studio-asset-source.cjs +14 -7
- package/dist/utils/studio-asset-source.d.cts +6 -1
- package/dist/utils/studio-asset-source.d.cts.map +1 -1
- package/dist/utils/studio-asset-source.d.ts +6 -1
- package/dist/utils/studio-asset-source.d.ts.map +1 -1
- package/dist/utils/studio-asset-source.js +1 -1
- package/dist/utils/validate-upload-result.cjs +9 -5
- package/dist/utils/validate-upload-result.d.cts +2 -1
- package/dist/utils/validate-upload-result.d.cts.map +1 -1
- package/dist/utils/validate-upload-result.d.ts +2 -1
- package/dist/utils/validate-upload-result.d.ts.map +1 -1
- package/dist/version.cjs +12 -8
- package/dist/version.d.cts +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/meta/config.json +1 -1
- package/package.json +19 -9
|
@@ -2,11 +2,15 @@
|
|
|
2
2
|
"use client";
|
|
3
3
|
var __webpack_require__ = {};
|
|
4
4
|
(()=>{
|
|
5
|
-
__webpack_require__.d = (exports1,
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
5
|
+
__webpack_require__.d = (exports1, getters, values)=>{
|
|
6
|
+
var define = (defs, kind)=>{
|
|
7
|
+
for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
|
|
8
|
+
enumerable: true,
|
|
9
|
+
[kind]: defs[key]
|
|
10
|
+
});
|
|
11
|
+
};
|
|
12
|
+
define(getters, "get");
|
|
13
|
+
define(values, "value");
|
|
10
14
|
};
|
|
11
15
|
})();
|
|
12
16
|
(()=>{
|
|
@@ -30,6 +34,7 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
30
34
|
const button_namespaceObject = require("@anvilkit/ui/button");
|
|
31
35
|
const dialog_namespaceObject = require("@anvilkit/ui/dialog");
|
|
32
36
|
const input_namespaceObject = require("@anvilkit/ui/input");
|
|
37
|
+
const label_namespaceObject = require("@anvilkit/ui/label");
|
|
33
38
|
const external_react_namespaceObject = require("react");
|
|
34
39
|
function MetadataPanel({ asset, onCancel, onConfirm }) {
|
|
35
40
|
const [name, setName] = external_react_namespaceObject.useState("");
|
|
@@ -92,7 +97,7 @@ function MetadataPanel({ asset, onCancel, onConfirm }) {
|
|
|
92
97
|
onOpenChange: handleOpenChange
|
|
93
98
|
}, /*#__PURE__*/ external_react_namespaceObject.createElement(dialog_namespaceObject.DialogContent, null, /*#__PURE__*/ external_react_namespaceObject.createElement(dialog_namespaceObject.DialogHeader, null, /*#__PURE__*/ external_react_namespaceObject.createElement(dialog_namespaceObject.DialogTitle, null, "Edit asset"), /*#__PURE__*/ external_react_namespaceObject.createElement(dialog_namespaceObject.DialogDescription, null, asset?.id, mimeType ? ` (${mimeType})` : "")), /*#__PURE__*/ external_react_namespaceObject.createElement("div", {
|
|
94
99
|
"data-asset-manager-metadata": true
|
|
95
|
-
}, /*#__PURE__*/ external_react_namespaceObject.createElement(
|
|
100
|
+
}, /*#__PURE__*/ external_react_namespaceObject.createElement(label_namespaceObject.Label, {
|
|
96
101
|
htmlFor: "asset-metadata-name"
|
|
97
102
|
}, "Name"), /*#__PURE__*/ external_react_namespaceObject.createElement(input_namespaceObject.Input, {
|
|
98
103
|
id: "asset-metadata-name",
|
|
@@ -104,21 +109,23 @@ function MetadataPanel({ asset, onCancel, onConfirm }) {
|
|
|
104
109
|
disabled: busy
|
|
105
110
|
}), /*#__PURE__*/ external_react_namespaceObject.createElement("div", {
|
|
106
111
|
"data-asset-manager-tag-editor": true
|
|
107
|
-
}, /*#__PURE__*/ external_react_namespaceObject.createElement(
|
|
112
|
+
}, /*#__PURE__*/ external_react_namespaceObject.createElement(label_namespaceObject.Label, {
|
|
108
113
|
htmlFor: "asset-metadata-tag-input"
|
|
109
114
|
}, "Tags"), /*#__PURE__*/ external_react_namespaceObject.createElement("ul", {
|
|
110
115
|
"aria-label": "Current tags",
|
|
111
116
|
role: "list"
|
|
112
117
|
}, tags.map((tag)=>/*#__PURE__*/ external_react_namespaceObject.createElement("li", {
|
|
113
118
|
key: tag
|
|
114
|
-
}, /*#__PURE__*/ external_react_namespaceObject.createElement("span", null, tag), /*#__PURE__*/ external_react_namespaceObject.createElement(
|
|
119
|
+
}, /*#__PURE__*/ external_react_namespaceObject.createElement("span", null, tag), /*#__PURE__*/ external_react_namespaceObject.createElement(button_namespaceObject.Button, {
|
|
115
120
|
"aria-label": `Remove tag ${tag}`,
|
|
116
121
|
"data-asset-action": "remove-tag",
|
|
117
122
|
disabled: busy,
|
|
118
123
|
onClick: ()=>{
|
|
119
124
|
removeTag(tag);
|
|
120
125
|
},
|
|
121
|
-
type: "button"
|
|
126
|
+
type: "button",
|
|
127
|
+
variant: "ghost",
|
|
128
|
+
size: "icon-xs"
|
|
122
129
|
}, "\xd7")))), /*#__PURE__*/ external_react_namespaceObject.createElement(input_namespaceObject.Input, {
|
|
123
130
|
id: "asset-metadata-tag-input",
|
|
124
131
|
value: tagInput,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MetadataPanel.d.cts","sourceRoot":"","sources":["../../src/ui/MetadataPanel.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MetadataPanel.d.cts","sourceRoot":"","sources":["../../src/ui/MetadataPanel.tsx"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,MAAM,WAAW,kBAAkB;IAClC;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IACpC;;;;OAIG;IACH,QAAQ,CAAC,SAAS,EAAE,CACnB,KAAK,EAAE,YAAY,EACnB,IAAI,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE,KAC7D,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC;CAC9B;AAED,wBAAgB,aAAa,CAAC,EAC7B,KAAK,EACL,QAAQ,EACR,SAAS,GACT,EAAE,kBAAkB,2CAyIpB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MetadataPanel.d.ts","sourceRoot":"","sources":["../../src/ui/MetadataPanel.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MetadataPanel.d.ts","sourceRoot":"","sources":["../../src/ui/MetadataPanel.tsx"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,MAAM,WAAW,kBAAkB;IAClC;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IACpC;;;;OAIG;IACH,QAAQ,CAAC,SAAS,EAAE,CACnB,KAAK,EAAE,YAAY,EACnB,IAAI,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE,KAC7D,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC;CAC9B;AAED,wBAAgB,aAAa,CAAC,EAC7B,KAAK,EACL,QAAQ,EACR,SAAS,GACT,EAAE,kBAAkB,2CAyIpB"}
|
package/dist/ui/MetadataPanel.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import { Button } from "@anvilkit/ui/button";
|
|
3
3
|
import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from "@anvilkit/ui/dialog";
|
|
4
4
|
import { Input } from "@anvilkit/ui/input";
|
|
5
|
+
import { Label } from "@anvilkit/ui/label";
|
|
5
6
|
import * as __rspack_external_react from "react";
|
|
6
7
|
function MetadataPanel({ asset, onCancel, onConfirm }) {
|
|
7
8
|
const [name, setName] = __rspack_external_react.useState("");
|
|
@@ -64,7 +65,7 @@ function MetadataPanel({ asset, onCancel, onConfirm }) {
|
|
|
64
65
|
onOpenChange: handleOpenChange
|
|
65
66
|
}, /*#__PURE__*/ __rspack_external_react.createElement(DialogContent, null, /*#__PURE__*/ __rspack_external_react.createElement(DialogHeader, null, /*#__PURE__*/ __rspack_external_react.createElement(DialogTitle, null, "Edit asset"), /*#__PURE__*/ __rspack_external_react.createElement(DialogDescription, null, asset?.id, mimeType ? ` (${mimeType})` : "")), /*#__PURE__*/ __rspack_external_react.createElement("div", {
|
|
66
67
|
"data-asset-manager-metadata": true
|
|
67
|
-
}, /*#__PURE__*/ __rspack_external_react.createElement(
|
|
68
|
+
}, /*#__PURE__*/ __rspack_external_react.createElement(Label, {
|
|
68
69
|
htmlFor: "asset-metadata-name"
|
|
69
70
|
}, "Name"), /*#__PURE__*/ __rspack_external_react.createElement(Input, {
|
|
70
71
|
id: "asset-metadata-name",
|
|
@@ -76,21 +77,23 @@ function MetadataPanel({ asset, onCancel, onConfirm }) {
|
|
|
76
77
|
disabled: busy
|
|
77
78
|
}), /*#__PURE__*/ __rspack_external_react.createElement("div", {
|
|
78
79
|
"data-asset-manager-tag-editor": true
|
|
79
|
-
}, /*#__PURE__*/ __rspack_external_react.createElement(
|
|
80
|
+
}, /*#__PURE__*/ __rspack_external_react.createElement(Label, {
|
|
80
81
|
htmlFor: "asset-metadata-tag-input"
|
|
81
82
|
}, "Tags"), /*#__PURE__*/ __rspack_external_react.createElement("ul", {
|
|
82
83
|
"aria-label": "Current tags",
|
|
83
84
|
role: "list"
|
|
84
85
|
}, tags.map((tag)=>/*#__PURE__*/ __rspack_external_react.createElement("li", {
|
|
85
86
|
key: tag
|
|
86
|
-
}, /*#__PURE__*/ __rspack_external_react.createElement("span", null, tag), /*#__PURE__*/ __rspack_external_react.createElement(
|
|
87
|
+
}, /*#__PURE__*/ __rspack_external_react.createElement("span", null, tag), /*#__PURE__*/ __rspack_external_react.createElement(Button, {
|
|
87
88
|
"aria-label": `Remove tag ${tag}`,
|
|
88
89
|
"data-asset-action": "remove-tag",
|
|
89
90
|
disabled: busy,
|
|
90
91
|
onClick: ()=>{
|
|
91
92
|
removeTag(tag);
|
|
92
93
|
},
|
|
93
|
-
type: "button"
|
|
94
|
+
type: "button",
|
|
95
|
+
variant: "ghost",
|
|
96
|
+
size: "icon-xs"
|
|
94
97
|
}, "\xd7")))), /*#__PURE__*/ __rspack_external_react.createElement(Input, {
|
|
95
98
|
id: "asset-metadata-tag-input",
|
|
96
99
|
value: tagInput,
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
"use client";
|
|
3
|
+
var __webpack_require__ = {};
|
|
4
|
+
(()=>{
|
|
5
|
+
__webpack_require__.d = (exports1, getters, values)=>{
|
|
6
|
+
var define = (defs, kind)=>{
|
|
7
|
+
for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
|
|
8
|
+
enumerable: true,
|
|
9
|
+
[kind]: defs[key]
|
|
10
|
+
});
|
|
11
|
+
};
|
|
12
|
+
define(getters, "get");
|
|
13
|
+
define(values, "value");
|
|
14
|
+
};
|
|
15
|
+
})();
|
|
16
|
+
(()=>{
|
|
17
|
+
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
|
|
18
|
+
})();
|
|
19
|
+
(()=>{
|
|
20
|
+
__webpack_require__.r = (exports1)=>{
|
|
21
|
+
if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
|
|
22
|
+
value: 'Module'
|
|
23
|
+
});
|
|
24
|
+
Object.defineProperty(exports1, '__esModule', {
|
|
25
|
+
value: true
|
|
26
|
+
});
|
|
27
|
+
};
|
|
28
|
+
})();
|
|
29
|
+
var __webpack_exports__ = {};
|
|
30
|
+
__webpack_require__.r(__webpack_exports__);
|
|
31
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
32
|
+
MoveTargetPicker: ()=>MoveTargetPicker
|
|
33
|
+
});
|
|
34
|
+
const button_namespaceObject = require("@anvilkit/ui/button");
|
|
35
|
+
const dialog_namespaceObject = require("@anvilkit/ui/dialog");
|
|
36
|
+
const external_react_namespaceObject = require("react");
|
|
37
|
+
function MoveTargetPicker({ open, onOpenChange, folders, onPick, rootLabel = "All assets" }) {
|
|
38
|
+
const [busy, setBusy] = external_react_namespaceObject.useState(false);
|
|
39
|
+
async function pick(folderId) {
|
|
40
|
+
if (busy) return;
|
|
41
|
+
setBusy(true);
|
|
42
|
+
try {
|
|
43
|
+
await onPick(folderId);
|
|
44
|
+
onOpenChange(false);
|
|
45
|
+
} finally{
|
|
46
|
+
setBusy(false);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return /*#__PURE__*/ external_react_namespaceObject.createElement(dialog_namespaceObject.Dialog, {
|
|
50
|
+
open: open,
|
|
51
|
+
onOpenChange: (next)=>{
|
|
52
|
+
if (!busy) onOpenChange(next);
|
|
53
|
+
}
|
|
54
|
+
}, /*#__PURE__*/ external_react_namespaceObject.createElement(dialog_namespaceObject.DialogContent, null, /*#__PURE__*/ external_react_namespaceObject.createElement(dialog_namespaceObject.DialogHeader, null, /*#__PURE__*/ external_react_namespaceObject.createElement(dialog_namespaceObject.DialogTitle, null, "Move to folder")), /*#__PURE__*/ external_react_namespaceObject.createElement("ul", {
|
|
55
|
+
"aria-label": "Move to folder",
|
|
56
|
+
"data-testid": "ak-move-target-picker",
|
|
57
|
+
className: "flex max-h-72 flex-col gap-1 overflow-auto"
|
|
58
|
+
}, /*#__PURE__*/ external_react_namespaceObject.createElement("li", null, /*#__PURE__*/ external_react_namespaceObject.createElement(button_namespaceObject.Button, {
|
|
59
|
+
type: "button",
|
|
60
|
+
variant: "ghost",
|
|
61
|
+
size: "sm",
|
|
62
|
+
className: "w-full justify-start",
|
|
63
|
+
"data-move-target": "root",
|
|
64
|
+
disabled: busy,
|
|
65
|
+
onClick: ()=>void pick(null)
|
|
66
|
+
}, rootLabel)), folders.map((folder)=>/*#__PURE__*/ external_react_namespaceObject.createElement("li", {
|
|
67
|
+
key: folder.id
|
|
68
|
+
}, /*#__PURE__*/ external_react_namespaceObject.createElement(button_namespaceObject.Button, {
|
|
69
|
+
type: "button",
|
|
70
|
+
variant: "ghost",
|
|
71
|
+
size: "sm",
|
|
72
|
+
className: "w-full justify-start",
|
|
73
|
+
"data-move-target": folder.id,
|
|
74
|
+
disabled: busy,
|
|
75
|
+
onClick: ()=>void pick(folder.id)
|
|
76
|
+
}, folder.name))))));
|
|
77
|
+
}
|
|
78
|
+
exports.MoveTargetPicker = __webpack_exports__.MoveTargetPicker;
|
|
79
|
+
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
80
|
+
"MoveTargetPicker"
|
|
81
|
+
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
82
|
+
Object.defineProperty(exports, '__esModule', {
|
|
83
|
+
value: true
|
|
84
|
+
});
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { AssetFolder } from "../types/folders.js";
|
|
2
|
+
/**
|
|
3
|
+
* Keyboard-accessible move-target picker — the a11y fallback for drag-to-folder.
|
|
4
|
+
* Renders, inside a focus-trapping `<Dialog>`, a labelled `<ul>` of Tab-focusable
|
|
5
|
+
* folder `<Button>`s plus a root option (no roving-tabindex listbox; each option
|
|
6
|
+
* is an individually focusable, Enter/Space-activatable button).
|
|
7
|
+
*/
|
|
8
|
+
export interface MoveTargetPickerProps {
|
|
9
|
+
readonly open: boolean;
|
|
10
|
+
readonly onOpenChange: (open: boolean) => void;
|
|
11
|
+
readonly folders: readonly AssetFolder[];
|
|
12
|
+
readonly onPick: (folderId: string | null) => void | Promise<void>;
|
|
13
|
+
readonly rootLabel?: string;
|
|
14
|
+
}
|
|
15
|
+
export declare function MoveTargetPicker({ open, onOpenChange, folders, onPick, rootLabel, }: MoveTargetPickerProps): import("react/jsx-runtime").JSX.Element;
|
|
16
|
+
//# sourceMappingURL=MoveTargetPicker.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MoveTargetPicker.d.cts","sourceRoot":"","sources":["../../src/ui/MoveTargetPicker.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD;;;;;GAKG;AACH,MAAM,WAAW,qBAAqB;IACrC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC/C,QAAQ,CAAC,OAAO,EAAE,SAAS,WAAW,EAAE,CAAC;IACzC,QAAQ,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,wBAAgB,gBAAgB,CAAC,EAChC,IAAI,EACJ,YAAY,EACZ,OAAO,EACP,MAAM,EACN,SAAwB,GACxB,EAAE,qBAAqB,2CA8DvB"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { AssetFolder } from "../types/folders.js";
|
|
2
|
+
/**
|
|
3
|
+
* Keyboard-accessible move-target picker — the a11y fallback for drag-to-folder.
|
|
4
|
+
* Renders, inside a focus-trapping `<Dialog>`, a labelled `<ul>` of Tab-focusable
|
|
5
|
+
* folder `<Button>`s plus a root option (no roving-tabindex listbox; each option
|
|
6
|
+
* is an individually focusable, Enter/Space-activatable button).
|
|
7
|
+
*/
|
|
8
|
+
export interface MoveTargetPickerProps {
|
|
9
|
+
readonly open: boolean;
|
|
10
|
+
readonly onOpenChange: (open: boolean) => void;
|
|
11
|
+
readonly folders: readonly AssetFolder[];
|
|
12
|
+
readonly onPick: (folderId: string | null) => void | Promise<void>;
|
|
13
|
+
readonly rootLabel?: string;
|
|
14
|
+
}
|
|
15
|
+
export declare function MoveTargetPicker({ open, onOpenChange, folders, onPick, rootLabel, }: MoveTargetPickerProps): import("react/jsx-runtime").JSX.Element;
|
|
16
|
+
//# sourceMappingURL=MoveTargetPicker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MoveTargetPicker.d.ts","sourceRoot":"","sources":["../../src/ui/MoveTargetPicker.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD;;;;;GAKG;AACH,MAAM,WAAW,qBAAqB;IACrC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC/C,QAAQ,CAAC,OAAO,EAAE,SAAS,WAAW,EAAE,CAAC;IACzC,QAAQ,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,wBAAgB,gBAAgB,CAAC,EAChC,IAAI,EACJ,YAAY,EACZ,OAAO,EACP,MAAM,EACN,SAAwB,GACxB,EAAE,qBAAqB,2CA8DvB"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { Button } from "@anvilkit/ui/button";
|
|
3
|
+
import { Dialog, DialogContent, DialogHeader, DialogTitle } from "@anvilkit/ui/dialog";
|
|
4
|
+
import * as __rspack_external_react from "react";
|
|
5
|
+
function MoveTargetPicker({ open, onOpenChange, folders, onPick, rootLabel = "All assets" }) {
|
|
6
|
+
const [busy, setBusy] = __rspack_external_react.useState(false);
|
|
7
|
+
async function pick(folderId) {
|
|
8
|
+
if (busy) return;
|
|
9
|
+
setBusy(true);
|
|
10
|
+
try {
|
|
11
|
+
await onPick(folderId);
|
|
12
|
+
onOpenChange(false);
|
|
13
|
+
} finally{
|
|
14
|
+
setBusy(false);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
return /*#__PURE__*/ __rspack_external_react.createElement(Dialog, {
|
|
18
|
+
open: open,
|
|
19
|
+
onOpenChange: (next)=>{
|
|
20
|
+
if (!busy) onOpenChange(next);
|
|
21
|
+
}
|
|
22
|
+
}, /*#__PURE__*/ __rspack_external_react.createElement(DialogContent, null, /*#__PURE__*/ __rspack_external_react.createElement(DialogHeader, null, /*#__PURE__*/ __rspack_external_react.createElement(DialogTitle, null, "Move to folder")), /*#__PURE__*/ __rspack_external_react.createElement("ul", {
|
|
23
|
+
"aria-label": "Move to folder",
|
|
24
|
+
"data-testid": "ak-move-target-picker",
|
|
25
|
+
className: "flex max-h-72 flex-col gap-1 overflow-auto"
|
|
26
|
+
}, /*#__PURE__*/ __rspack_external_react.createElement("li", null, /*#__PURE__*/ __rspack_external_react.createElement(Button, {
|
|
27
|
+
type: "button",
|
|
28
|
+
variant: "ghost",
|
|
29
|
+
size: "sm",
|
|
30
|
+
className: "w-full justify-start",
|
|
31
|
+
"data-move-target": "root",
|
|
32
|
+
disabled: busy,
|
|
33
|
+
onClick: ()=>void pick(null)
|
|
34
|
+
}, rootLabel)), folders.map((folder)=>/*#__PURE__*/ __rspack_external_react.createElement("li", {
|
|
35
|
+
key: folder.id
|
|
36
|
+
}, /*#__PURE__*/ __rspack_external_react.createElement(Button, {
|
|
37
|
+
type: "button",
|
|
38
|
+
variant: "ghost",
|
|
39
|
+
size: "sm",
|
|
40
|
+
className: "w-full justify-start",
|
|
41
|
+
"data-move-target": folder.id,
|
|
42
|
+
disabled: busy,
|
|
43
|
+
onClick: ()=>void pick(folder.id)
|
|
44
|
+
}, folder.name))))));
|
|
45
|
+
}
|
|
46
|
+
export { MoveTargetPicker };
|
|
@@ -2,11 +2,15 @@
|
|
|
2
2
|
"use client";
|
|
3
3
|
var __webpack_require__ = {};
|
|
4
4
|
(()=>{
|
|
5
|
-
__webpack_require__.d = (exports1,
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
5
|
+
__webpack_require__.d = (exports1, getters, values)=>{
|
|
6
|
+
var define = (defs, kind)=>{
|
|
7
|
+
for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
|
|
8
|
+
enumerable: true,
|
|
9
|
+
[kind]: defs[key]
|
|
10
|
+
});
|
|
11
|
+
};
|
|
12
|
+
define(getters, "get");
|
|
13
|
+
define(values, "value");
|
|
10
14
|
};
|
|
11
15
|
})();
|
|
12
16
|
(()=>{
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type { AssetManagerOptions
|
|
1
|
+
import type { AssetManagerOptions } from "../types/options.js";
|
|
2
|
+
import type { UploadResult } from "../types/types.js";
|
|
2
3
|
export interface ReplaceAssetDialogProps extends Pick<AssetManagerOptions, "acceptedMimeTypes" | "maxFileSize"> {
|
|
3
4
|
/** Asset to replace. `null` closes the dialog. */
|
|
4
5
|
readonly asset: UploadResult | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReplaceAssetDialog.d.cts","sourceRoot":"","sources":["../../src/ui/ReplaceAssetDialog.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"ReplaceAssetDialog.d.cts","sourceRoot":"","sources":["../../src/ui/ReplaceAssetDialog.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,MAAM,WAAW,uBAChB,SAAQ,IAAI,CAAC,mBAAmB,EAAE,mBAAmB,GAAG,aAAa,CAAC;IACtE,kDAAkD;IAClD,QAAQ,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IACpC;;;;OAIG;IACH,QAAQ,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9E,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC;CAC9B;AAED,wBAAgB,kBAAkB,CAAC,EAClC,iBAAiB,EACjB,KAAK,EACL,WAAW,EACX,QAAQ,EACR,SAAS,GACT,EAAE,uBAAuB,2CAuHzB"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type { AssetManagerOptions
|
|
1
|
+
import type { AssetManagerOptions } from "../types/options.js";
|
|
2
|
+
import type { UploadResult } from "../types/types.js";
|
|
2
3
|
export interface ReplaceAssetDialogProps extends Pick<AssetManagerOptions, "acceptedMimeTypes" | "maxFileSize"> {
|
|
3
4
|
/** Asset to replace. `null` closes the dialog. */
|
|
4
5
|
readonly asset: UploadResult | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReplaceAssetDialog.d.ts","sourceRoot":"","sources":["../../src/ui/ReplaceAssetDialog.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"ReplaceAssetDialog.d.ts","sourceRoot":"","sources":["../../src/ui/ReplaceAssetDialog.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,MAAM,WAAW,uBAChB,SAAQ,IAAI,CAAC,mBAAmB,EAAE,mBAAmB,GAAG,aAAa,CAAC;IACtE,kDAAkD;IAClD,QAAQ,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IACpC;;;;OAIG;IACH,QAAQ,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9E,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC;CAC9B;AAED,wBAAgB,kBAAkB,CAAC,EAClC,iBAAiB,EACjB,KAAK,EACL,WAAW,EACX,QAAQ,EACR,SAAS,GACT,EAAE,uBAAuB,2CAuHzB"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
"use client";
|
|
3
|
+
var __webpack_require__ = {};
|
|
4
|
+
(()=>{
|
|
5
|
+
__webpack_require__.d = (exports1, getters, values)=>{
|
|
6
|
+
var define = (defs, kind)=>{
|
|
7
|
+
for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
|
|
8
|
+
enumerable: true,
|
|
9
|
+
[kind]: defs[key]
|
|
10
|
+
});
|
|
11
|
+
};
|
|
12
|
+
define(getters, "get");
|
|
13
|
+
define(values, "value");
|
|
14
|
+
};
|
|
15
|
+
})();
|
|
16
|
+
(()=>{
|
|
17
|
+
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
|
|
18
|
+
})();
|
|
19
|
+
(()=>{
|
|
20
|
+
__webpack_require__.r = (exports1)=>{
|
|
21
|
+
if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
|
|
22
|
+
value: 'Module'
|
|
23
|
+
});
|
|
24
|
+
Object.defineProperty(exports1, '__esModule', {
|
|
25
|
+
value: true
|
|
26
|
+
});
|
|
27
|
+
};
|
|
28
|
+
})();
|
|
29
|
+
var __webpack_exports__ = {};
|
|
30
|
+
__webpack_require__.r(__webpack_exports__);
|
|
31
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
32
|
+
UnsplashPanel: ()=>UnsplashPanel
|
|
33
|
+
});
|
|
34
|
+
const button_namespaceObject = require("@anvilkit/ui/button");
|
|
35
|
+
const input_namespaceObject = require("@anvilkit/ui/input");
|
|
36
|
+
const external_react_namespaceObject = require("react");
|
|
37
|
+
function UnsplashPanel({ themes, activeThemeId, onThemeChange, query, onQueryChange, results, status, onPick, onLoadMore, themeLabel = (key)=>key, skeletonCount = 12 }) {
|
|
38
|
+
if ("disabled" === status) return /*#__PURE__*/ external_react_namespaceObject.createElement("div", {
|
|
39
|
+
role: "status",
|
|
40
|
+
"data-testid": "ak-unsplash-disabled",
|
|
41
|
+
className: "flex flex-col items-center gap-2 p-6 text-center text-sm text-[var(--ak-studio-muted-fg)]"
|
|
42
|
+
}, /*#__PURE__*/ external_react_namespaceObject.createElement("p", null, "Connect Unsplash — add an access key via a server proxy."));
|
|
43
|
+
return /*#__PURE__*/ external_react_namespaceObject.createElement("div", {
|
|
44
|
+
"data-testid": "ak-unsplash-panel",
|
|
45
|
+
className: "flex flex-col gap-2"
|
|
46
|
+
}, /*#__PURE__*/ external_react_namespaceObject.createElement("span", {
|
|
47
|
+
role: "status",
|
|
48
|
+
"aria-live": "polite",
|
|
49
|
+
"data-testid": "ak-unsplash-status",
|
|
50
|
+
className: "sr-only"
|
|
51
|
+
}, "loading" === status ? "Loading photos…" : ""), /*#__PURE__*/ external_react_namespaceObject.createElement(input_namespaceObject.Input, {
|
|
52
|
+
value: query,
|
|
53
|
+
placeholder: "Search Unsplash…",
|
|
54
|
+
"data-testid": "ak-unsplash-search",
|
|
55
|
+
onChange: (event)=>onQueryChange(event.currentTarget.value)
|
|
56
|
+
}), themes.length > 0 ? /*#__PURE__*/ external_react_namespaceObject.createElement("div", {
|
|
57
|
+
role: "group",
|
|
58
|
+
"aria-label": "Unsplash themes",
|
|
59
|
+
"data-testid": "ak-unsplash-themes",
|
|
60
|
+
className: "flex flex-wrap gap-1"
|
|
61
|
+
}, themes.map((theme)=>/*#__PURE__*/ external_react_namespaceObject.createElement(button_namespaceObject.Button, {
|
|
62
|
+
key: theme.id,
|
|
63
|
+
type: "button",
|
|
64
|
+
size: "sm",
|
|
65
|
+
variant: theme.id === activeThemeId ? "secondary" : "ghost",
|
|
66
|
+
"aria-pressed": theme.id === activeThemeId,
|
|
67
|
+
"data-theme-id": theme.id,
|
|
68
|
+
onClick: ()=>onThemeChange(theme.id === activeThemeId ? void 0 : theme.id)
|
|
69
|
+
}, themeLabel(theme.label)))) : null, "rateLimited" === status ? /*#__PURE__*/ external_react_namespaceObject.createElement("p", {
|
|
70
|
+
role: "alert",
|
|
71
|
+
"data-testid": "ak-unsplash-rate-limited",
|
|
72
|
+
className: "text-sm"
|
|
73
|
+
}, "Unsplash rate limit reached — try again shortly.") : null, "error" === status ? /*#__PURE__*/ external_react_namespaceObject.createElement("p", {
|
|
74
|
+
role: "alert",
|
|
75
|
+
"data-testid": "ak-unsplash-error",
|
|
76
|
+
className: "text-sm"
|
|
77
|
+
}, "Couldn’t reach Unsplash. Retry.") : null, "loading" === status && 0 === results.length ? /*#__PURE__*/ external_react_namespaceObject.createElement("ul", {
|
|
78
|
+
"data-testid": "ak-unsplash-skeletons",
|
|
79
|
+
className: "grid grid-cols-3 gap-2",
|
|
80
|
+
"aria-hidden": "true"
|
|
81
|
+
}, Array.from({
|
|
82
|
+
length: skeletonCount
|
|
83
|
+
}, (_, index)=>/*#__PURE__*/ external_react_namespaceObject.createElement("li", {
|
|
84
|
+
key: `skeleton-${index}`,
|
|
85
|
+
className: "aspect-square animate-pulse rounded bg-[var(--ak-studio-muted,#e5e7eb)]"
|
|
86
|
+
}))) : 0 === results.length && "idle" === status ? /*#__PURE__*/ external_react_namespaceObject.createElement("p", {
|
|
87
|
+
"data-testid": "ak-unsplash-empty",
|
|
88
|
+
className: "p-4 text-center text-sm"
|
|
89
|
+
}, "Search Unsplash to browse photos.") : /*#__PURE__*/ external_react_namespaceObject.createElement("ul", {
|
|
90
|
+
"data-testid": "ak-unsplash-results",
|
|
91
|
+
className: "grid grid-cols-3 gap-2"
|
|
92
|
+
}, results.map((result)=>/*#__PURE__*/ external_react_namespaceObject.createElement("li", {
|
|
93
|
+
key: result.id,
|
|
94
|
+
className: "flex flex-col gap-0.5"
|
|
95
|
+
}, /*#__PURE__*/ external_react_namespaceObject.createElement("button", {
|
|
96
|
+
type: "button",
|
|
97
|
+
"data-unsplash-id": result.id,
|
|
98
|
+
"aria-label": `Insert photo by ${result.photographerName}`,
|
|
99
|
+
className: "overflow-hidden rounded",
|
|
100
|
+
onClick: ()=>void onPick(result.id)
|
|
101
|
+
}, /*#__PURE__*/ external_react_namespaceObject.createElement("img", {
|
|
102
|
+
src: result.thumbnailUrl,
|
|
103
|
+
alt: `Photo by ${result.photographerName}`,
|
|
104
|
+
className: "aspect-square w-full object-cover",
|
|
105
|
+
loading: "lazy"
|
|
106
|
+
})), /*#__PURE__*/ external_react_namespaceObject.createElement("p", {
|
|
107
|
+
className: "truncate text-[10px] text-[var(--ak-studio-muted-fg)]"
|
|
108
|
+
}, /*#__PURE__*/ external_react_namespaceObject.createElement("a", {
|
|
109
|
+
href: result.photographerUrl,
|
|
110
|
+
target: "_blank",
|
|
111
|
+
rel: "noreferrer noopener",
|
|
112
|
+
className: "underline"
|
|
113
|
+
}, result.photographerName), " ", "\xb7", " ", /*#__PURE__*/ external_react_namespaceObject.createElement("a", {
|
|
114
|
+
href: result.unsplashUrl,
|
|
115
|
+
target: "_blank",
|
|
116
|
+
rel: "noreferrer noopener",
|
|
117
|
+
className: "underline"
|
|
118
|
+
}, "Unsplash"))))), onLoadMore && results.length > 0 ? /*#__PURE__*/ external_react_namespaceObject.createElement("div", {
|
|
119
|
+
className: "flex justify-center"
|
|
120
|
+
}, /*#__PURE__*/ external_react_namespaceObject.createElement(button_namespaceObject.Button, {
|
|
121
|
+
type: "button",
|
|
122
|
+
variant: "outline",
|
|
123
|
+
size: "sm",
|
|
124
|
+
disabled: "loading" === status,
|
|
125
|
+
onClick: onLoadMore
|
|
126
|
+
}, "Load more")) : null);
|
|
127
|
+
}
|
|
128
|
+
exports.UnsplashPanel = __webpack_exports__.UnsplashPanel;
|
|
129
|
+
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
130
|
+
"UnsplashPanel"
|
|
131
|
+
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
132
|
+
Object.defineProperty(exports, '__esModule', {
|
|
133
|
+
value: true
|
|
134
|
+
});
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { AssetTheme } from "../sources/provider.js";
|
|
2
|
+
/** A browsed Unsplash result + the attribution the tile must show. */
|
|
3
|
+
export interface UnsplashResult {
|
|
4
|
+
readonly id: string;
|
|
5
|
+
readonly thumbnailUrl: string;
|
|
6
|
+
readonly photographerName: string;
|
|
7
|
+
readonly photographerUrl: string;
|
|
8
|
+
readonly unsplashUrl: string;
|
|
9
|
+
}
|
|
10
|
+
export type UnsplashPanelStatus = "idle" | "loading" | "rateLimited" | "error" | "disabled";
|
|
11
|
+
export interface UnsplashPanelProps {
|
|
12
|
+
readonly themes: readonly AssetTheme[];
|
|
13
|
+
readonly activeThemeId?: string;
|
|
14
|
+
readonly onThemeChange: (themeId: string | undefined) => void;
|
|
15
|
+
readonly query: string;
|
|
16
|
+
readonly onQueryChange: (query: string) => void;
|
|
17
|
+
readonly results: readonly UnsplashResult[];
|
|
18
|
+
readonly status: UnsplashPanelStatus;
|
|
19
|
+
/** Insert a result — the host calls the provider's pickResult (download trigger). */
|
|
20
|
+
readonly onPick: (id: string) => void | Promise<void>;
|
|
21
|
+
readonly onLoadMore?: () => void;
|
|
22
|
+
/** Map a theme label key → display text (defaults to the raw key). */
|
|
23
|
+
readonly themeLabel?: (key: string) => string;
|
|
24
|
+
/** Skeleton tile count while loading the first page. */
|
|
25
|
+
readonly skeletonCount?: number;
|
|
26
|
+
}
|
|
27
|
+
export declare function UnsplashPanel({ themes, activeThemeId, onThemeChange, query, onQueryChange, results, status, onPick, onLoadMore, themeLabel, skeletonCount, }: UnsplashPanelProps): import("react/jsx-runtime").JSX.Element;
|
|
28
|
+
//# sourceMappingURL=UnsplashPanel.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UnsplashPanel.d.cts","sourceRoot":"","sources":["../../src/ui/UnsplashPanel.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAGzD,sEAAsE;AACtE,MAAM,WAAW,cAAc;IAC9B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,MAAM,mBAAmB,GAC5B,MAAM,GACN,SAAS,GACT,aAAa,GACb,OAAO,GACP,UAAU,CAAC;AAEd,MAAM,WAAW,kBAAkB;IAClC,QAAQ,CAAC,MAAM,EAAE,SAAS,UAAU,EAAE,CAAC;IACvC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;IAC9D,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD,QAAQ,CAAC,OAAO,EAAE,SAAS,cAAc,EAAE,CAAC;IAC5C,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAC;IACrC,qFAAqF;IACrF,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtD,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACjC,sEAAsE;IACtE,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;IAC9C,wDAAwD;IACxD,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;CAChC;AAED,wBAAgB,aAAa,CAAC,EAC7B,MAAM,EACN,aAAa,EACb,aAAa,EACb,KAAK,EACL,aAAa,EACb,OAAO,EACP,MAAM,EACN,MAAM,EACN,UAAU,EACV,UAAyB,EACzB,aAAkB,GAClB,EAAE,kBAAkB,2CAoJpB"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { AssetTheme } from "../sources/provider.js";
|
|
2
|
+
/** A browsed Unsplash result + the attribution the tile must show. */
|
|
3
|
+
export interface UnsplashResult {
|
|
4
|
+
readonly id: string;
|
|
5
|
+
readonly thumbnailUrl: string;
|
|
6
|
+
readonly photographerName: string;
|
|
7
|
+
readonly photographerUrl: string;
|
|
8
|
+
readonly unsplashUrl: string;
|
|
9
|
+
}
|
|
10
|
+
export type UnsplashPanelStatus = "idle" | "loading" | "rateLimited" | "error" | "disabled";
|
|
11
|
+
export interface UnsplashPanelProps {
|
|
12
|
+
readonly themes: readonly AssetTheme[];
|
|
13
|
+
readonly activeThemeId?: string;
|
|
14
|
+
readonly onThemeChange: (themeId: string | undefined) => void;
|
|
15
|
+
readonly query: string;
|
|
16
|
+
readonly onQueryChange: (query: string) => void;
|
|
17
|
+
readonly results: readonly UnsplashResult[];
|
|
18
|
+
readonly status: UnsplashPanelStatus;
|
|
19
|
+
/** Insert a result — the host calls the provider's pickResult (download trigger). */
|
|
20
|
+
readonly onPick: (id: string) => void | Promise<void>;
|
|
21
|
+
readonly onLoadMore?: () => void;
|
|
22
|
+
/** Map a theme label key → display text (defaults to the raw key). */
|
|
23
|
+
readonly themeLabel?: (key: string) => string;
|
|
24
|
+
/** Skeleton tile count while loading the first page. */
|
|
25
|
+
readonly skeletonCount?: number;
|
|
26
|
+
}
|
|
27
|
+
export declare function UnsplashPanel({ themes, activeThemeId, onThemeChange, query, onQueryChange, results, status, onPick, onLoadMore, themeLabel, skeletonCount, }: UnsplashPanelProps): import("react/jsx-runtime").JSX.Element;
|
|
28
|
+
//# sourceMappingURL=UnsplashPanel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UnsplashPanel.d.ts","sourceRoot":"","sources":["../../src/ui/UnsplashPanel.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAGzD,sEAAsE;AACtE,MAAM,WAAW,cAAc;IAC9B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,MAAM,mBAAmB,GAC5B,MAAM,GACN,SAAS,GACT,aAAa,GACb,OAAO,GACP,UAAU,CAAC;AAEd,MAAM,WAAW,kBAAkB;IAClC,QAAQ,CAAC,MAAM,EAAE,SAAS,UAAU,EAAE,CAAC;IACvC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;IAC9D,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD,QAAQ,CAAC,OAAO,EAAE,SAAS,cAAc,EAAE,CAAC;IAC5C,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAC;IACrC,qFAAqF;IACrF,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtD,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACjC,sEAAsE;IACtE,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;IAC9C,wDAAwD;IACxD,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;CAChC;AAED,wBAAgB,aAAa,CAAC,EAC7B,MAAM,EACN,aAAa,EACb,aAAa,EACb,KAAK,EACL,aAAa,EACb,OAAO,EACP,MAAM,EACN,MAAM,EACN,UAAU,EACV,UAAyB,EACzB,aAAkB,GAClB,EAAE,kBAAkB,2CAoJpB"}
|