@blinkk/root-cms 1.0.0-rc.3 → 1.0.0-rc.31
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/LICENSE +22 -0
- package/README.md +41 -0
- package/dist/app.js +19 -1
- package/dist/cli.js +51 -13
- package/dist/client.d.ts +93 -4
- package/dist/client.js +279 -5
- package/dist/core.d.ts +2 -3
- package/dist/core.js +287 -5
- package/dist/functions.d.ts +1 -1
- package/dist/functions.js +3 -1
- package/dist/plugin.d.ts +18 -3
- package/dist/plugin.js +622 -51
- package/dist/project.d.ts +2 -2
- package/dist/richtext.d.ts +73 -0
- package/dist/richtext.js +129 -0
- package/dist/{schema-49de9659.d.ts → schema--v3Ho5Lj.d.ts} +32 -39
- package/dist/ui/signin.css +19 -3
- package/dist/ui/signin.js +572 -405
- package/dist/ui/ui.css +591 -60
- package/dist/ui/ui.js +24791 -8974
- package/package.json +52 -35
package/dist/project.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { S as Schema } from './schema
|
|
1
|
+
import { S as Schema } from './schema--v3Ho5Lj.js';
|
|
2
2
|
import 'preact';
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -13,4 +13,4 @@ interface SchemaModule {
|
|
|
13
13
|
}
|
|
14
14
|
declare function getProjectSchemas(): Record<string, Schema>;
|
|
15
15
|
|
|
16
|
-
export { SchemaModule, getProjectSchemas };
|
|
16
|
+
export { type SchemaModule, getProjectSchemas };
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import * as preact from 'preact';
|
|
2
|
+
import { FunctionalComponent } from 'preact';
|
|
3
|
+
|
|
4
|
+
interface RichTextBlock {
|
|
5
|
+
type: string;
|
|
6
|
+
data?: any;
|
|
7
|
+
}
|
|
8
|
+
interface RichTextData {
|
|
9
|
+
[key: string]: any;
|
|
10
|
+
blocks: any[];
|
|
11
|
+
}
|
|
12
|
+
type RichTextBlockComponent = FunctionalComponent<any>;
|
|
13
|
+
interface RichTextContextProps {
|
|
14
|
+
components?: Record<string, RichTextBlockComponent>;
|
|
15
|
+
}
|
|
16
|
+
declare const RichTextContext: preact.Context<RichTextContextProps>;
|
|
17
|
+
declare function useRichTextContext(): RichTextContextProps;
|
|
18
|
+
interface RichTextProps {
|
|
19
|
+
data: RichTextData;
|
|
20
|
+
components?: Record<string, RichTextBlockComponent>;
|
|
21
|
+
}
|
|
22
|
+
/** Renders data from the "richtext" field. */
|
|
23
|
+
declare function RichText(props: RichTextProps): preact.JSX.Element;
|
|
24
|
+
declare namespace RichText {
|
|
25
|
+
var ParagraphBlock: (props: RichTextParagraphBlockProps) => preact.JSX.Element | null;
|
|
26
|
+
var HeadingBlock: (props: RichTextHeadingBlockProps) => preact.JSX.Element | null;
|
|
27
|
+
var ListBlock: (props: RichTextListBlockProps) => preact.JSX.Element | null;
|
|
28
|
+
var ImageBlock: (props: RichTextImageBlockProps) => preact.JSX.Element | null;
|
|
29
|
+
var HtmlBlock: (props: RichTextHtmlBlockProps) => preact.JSX.Element | null;
|
|
30
|
+
}
|
|
31
|
+
interface RichTextParagraphBlockProps {
|
|
32
|
+
type: 'paragraph';
|
|
33
|
+
data?: {
|
|
34
|
+
text?: string;
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
interface RichTextHeadingBlockProps {
|
|
38
|
+
type: 'heading';
|
|
39
|
+
data?: {
|
|
40
|
+
level?: number;
|
|
41
|
+
text?: string;
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
interface ListItem {
|
|
45
|
+
content?: string;
|
|
46
|
+
items?: ListItem[];
|
|
47
|
+
}
|
|
48
|
+
interface RichTextListBlockProps {
|
|
49
|
+
type: 'orderedList' | 'unorderedList';
|
|
50
|
+
data?: {
|
|
51
|
+
style?: 'ordered' | 'unordered';
|
|
52
|
+
items?: ListItem[];
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
interface RichTextImageBlockProps {
|
|
56
|
+
type: 'image';
|
|
57
|
+
data?: {
|
|
58
|
+
file?: {
|
|
59
|
+
url: string;
|
|
60
|
+
width: string | number;
|
|
61
|
+
height: string | number;
|
|
62
|
+
alt: string;
|
|
63
|
+
};
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
interface RichTextHtmlBlockProps {
|
|
67
|
+
type: 'html';
|
|
68
|
+
data?: {
|
|
69
|
+
html?: string;
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export { RichText, type RichTextBlock, type RichTextBlockComponent, RichTextContext, type RichTextContextProps, type RichTextData, type RichTextHeadingBlockProps, type RichTextHtmlBlockProps, type RichTextImageBlockProps, type RichTextListBlockProps, type RichTextParagraphBlockProps, type RichTextProps, useRichTextContext };
|
package/dist/richtext.js
ADDED
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
// core/richtext.tsx
|
|
2
|
+
import { useTranslations } from "@blinkk/root";
|
|
3
|
+
import { createContext } from "preact";
|
|
4
|
+
import { useContext } from "preact/hooks";
|
|
5
|
+
import { Fragment, jsx, jsxs } from "preact/jsx-runtime";
|
|
6
|
+
var RichTextContext = createContext({});
|
|
7
|
+
function useRichTextContext() {
|
|
8
|
+
return useContext(RichTextContext);
|
|
9
|
+
}
|
|
10
|
+
function RichText(props) {
|
|
11
|
+
var _a;
|
|
12
|
+
const richTextContext = useRichTextContext();
|
|
13
|
+
const components = {
|
|
14
|
+
heading: RichText.HeadingBlock,
|
|
15
|
+
html: RichText.HtmlBlock,
|
|
16
|
+
image: RichText.ImageBlock,
|
|
17
|
+
orderedList: RichText.ListBlock,
|
|
18
|
+
paragraph: RichText.ParagraphBlock,
|
|
19
|
+
unorderedList: RichText.ListBlock,
|
|
20
|
+
...richTextContext.components,
|
|
21
|
+
...props.components
|
|
22
|
+
};
|
|
23
|
+
const blocks = (((_a = props.data) == null ? void 0 : _a.blocks) || []).filter((block) => {
|
|
24
|
+
const blockType = block == null ? void 0 : block.type;
|
|
25
|
+
if (!blockType) {
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
28
|
+
if (!(blockType in components)) {
|
|
29
|
+
console.warn(`ignoring unknown richtext type: "${blockType}"`);
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
return true;
|
|
33
|
+
});
|
|
34
|
+
return /* @__PURE__ */ jsx(Fragment, { children: blocks.map((block) => {
|
|
35
|
+
const Block = components[block.type];
|
|
36
|
+
return /* @__PURE__ */ jsx(Block, { ...block });
|
|
37
|
+
}) });
|
|
38
|
+
}
|
|
39
|
+
RichText.ParagraphBlock = (props) => {
|
|
40
|
+
var _a;
|
|
41
|
+
if (!((_a = props.data) == null ? void 0 : _a.text)) {
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
const t = useTranslations();
|
|
45
|
+
return /* @__PURE__ */ jsx("p", { dangerouslySetInnerHTML: { __html: t(props.data.text) } });
|
|
46
|
+
};
|
|
47
|
+
RichText.HeadingBlock = (props) => {
|
|
48
|
+
var _a;
|
|
49
|
+
if (!((_a = props.data) == null ? void 0 : _a.text)) {
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
const t = useTranslations();
|
|
53
|
+
const level = props.data.level || 2;
|
|
54
|
+
const Component = `h${level}`;
|
|
55
|
+
return /* @__PURE__ */ jsx(Component, { dangerouslySetInnerHTML: { __html: t(props.data.text) } });
|
|
56
|
+
};
|
|
57
|
+
RichText.ListBlock = (props) => {
|
|
58
|
+
var _a, _b, _c;
|
|
59
|
+
if (!((_b = (_a = props.data) == null ? void 0 : _a.items) == null ? void 0 : _b.length)) {
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
let style = (_c = props.data) == null ? void 0 : _c.style;
|
|
63
|
+
if (!style) {
|
|
64
|
+
style = props.type === "orderedList" ? "ordered" : "unordered";
|
|
65
|
+
}
|
|
66
|
+
const Component = style === "ordered" ? "ol" : "ul";
|
|
67
|
+
const items = props.data.items;
|
|
68
|
+
const t = useTranslations();
|
|
69
|
+
return /* @__PURE__ */ jsx(Component, { children: items.map((item) => {
|
|
70
|
+
var _a2;
|
|
71
|
+
if (item.content || ((_a2 = item.items) == null ? void 0 : _a2.length)) {
|
|
72
|
+
return /* @__PURE__ */ jsxs("li", { children: [
|
|
73
|
+
item.content && /* @__PURE__ */ jsx(
|
|
74
|
+
RichText.ParagraphBlock,
|
|
75
|
+
{
|
|
76
|
+
type: "paragraph",
|
|
77
|
+
data: { text: item.content }
|
|
78
|
+
}
|
|
79
|
+
),
|
|
80
|
+
item.items && item.items.length > 0 && /* @__PURE__ */ jsx(
|
|
81
|
+
RichText.ListBlock,
|
|
82
|
+
{
|
|
83
|
+
type: props.type,
|
|
84
|
+
data: { style, items: item.items }
|
|
85
|
+
}
|
|
86
|
+
)
|
|
87
|
+
] });
|
|
88
|
+
}
|
|
89
|
+
return null;
|
|
90
|
+
}) });
|
|
91
|
+
};
|
|
92
|
+
RichText.ImageBlock = (props) => {
|
|
93
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
94
|
+
const imageUrl = (_b = (_a = props.data) == null ? void 0 : _a.file) == null ? void 0 : _b.url;
|
|
95
|
+
if (!imageUrl) {
|
|
96
|
+
return null;
|
|
97
|
+
}
|
|
98
|
+
const width = toNumber((_d = (_c = props.data) == null ? void 0 : _c.file) == null ? void 0 : _d.width);
|
|
99
|
+
const height = toNumber((_f = (_e = props.data) == null ? void 0 : _e.file) == null ? void 0 : _f.height);
|
|
100
|
+
const alt = ((_h = (_g = props.data) == null ? void 0 : _g.file) == null ? void 0 : _h.alt) || "";
|
|
101
|
+
return /* @__PURE__ */ jsx("img", { src: imageUrl, width, height, alt });
|
|
102
|
+
};
|
|
103
|
+
RichText.HtmlBlock = (props) => {
|
|
104
|
+
var _a;
|
|
105
|
+
const html = ((_a = props.data) == null ? void 0 : _a.html) || "";
|
|
106
|
+
if (!html) {
|
|
107
|
+
return null;
|
|
108
|
+
}
|
|
109
|
+
return /* @__PURE__ */ jsx("div", { dangerouslySetInnerHTML: { __html: html } });
|
|
110
|
+
};
|
|
111
|
+
function toNumber(input) {
|
|
112
|
+
if (input === void 0) {
|
|
113
|
+
return 0;
|
|
114
|
+
}
|
|
115
|
+
if (typeof input === "number") {
|
|
116
|
+
return input;
|
|
117
|
+
}
|
|
118
|
+
const parsedNumber = parseFloat(input);
|
|
119
|
+
if (isNaN(parsedNumber)) {
|
|
120
|
+
return 0;
|
|
121
|
+
}
|
|
122
|
+
return parsedNumber;
|
|
123
|
+
}
|
|
124
|
+
export {
|
|
125
|
+
RichText,
|
|
126
|
+
RichTextContext,
|
|
127
|
+
useRichTextContext
|
|
128
|
+
};
|
|
129
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vY29yZS9yaWNodGV4dC50c3giXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7dXNlVHJhbnNsYXRpb25zfSBmcm9tICdAYmxpbmtrL3Jvb3QnO1xuaW1wb3J0IHtGdW5jdGlvbmFsQ29tcG9uZW50LCBjcmVhdGVDb250ZXh0fSBmcm9tICdwcmVhY3QnO1xuaW1wb3J0IHt1c2VDb250ZXh0fSBmcm9tICdwcmVhY3QvaG9va3MnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJpY2hUZXh0QmxvY2sge1xuICB0eXBlOiBzdHJpbmc7XG4gIGRhdGE/OiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmljaFRleHREYXRhIHtcbiAgW2tleTogc3RyaW5nXTogYW55O1xuICBibG9ja3M6IGFueVtdO1xufVxuXG5leHBvcnQgdHlwZSBSaWNoVGV4dEJsb2NrQ29tcG9uZW50ID0gRnVuY3Rpb25hbENvbXBvbmVudDxhbnk+O1xuXG5leHBvcnQgaW50ZXJmYWNlIFJpY2hUZXh0Q29udGV4dFByb3BzIHtcbiAgY29tcG9uZW50cz86IFJlY29yZDxzdHJpbmcsIFJpY2hUZXh0QmxvY2tDb21wb25lbnQ+O1xufVxuXG5leHBvcnQgY29uc3QgUmljaFRleHRDb250ZXh0ID0gY3JlYXRlQ29udGV4dDxSaWNoVGV4dENvbnRleHRQcm9wcz4oe30pO1xuXG5leHBvcnQgZnVuY3Rpb24gdXNlUmljaFRleHRDb250ZXh0KCk6IFJpY2hUZXh0Q29udGV4dFByb3BzIHtcbiAgcmV0dXJuIHVzZUNvbnRleHQoUmljaFRleHRDb250ZXh0KTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSaWNoVGV4dFByb3BzIHtcbiAgZGF0YTogUmljaFRleHREYXRhO1xuICBjb21wb25lbnRzPzogUmVjb3JkPHN0cmluZywgUmljaFRleHRCbG9ja0NvbXBvbmVudD47XG59XG5cbi8qKiBSZW5kZXJzIGRhdGEgZnJvbSB0aGUgXCJyaWNodGV4dFwiIGZpZWxkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFJpY2hUZXh0KHByb3BzOiBSaWNoVGV4dFByb3BzKSB7XG4gIGNvbnN0IHJpY2hUZXh0Q29udGV4dCA9IHVzZVJpY2hUZXh0Q29udGV4dCgpO1xuICBjb25zdCBjb21wb25lbnRzOiBSZWNvcmQ8c3RyaW5nLCBSaWNoVGV4dEJsb2NrQ29tcG9uZW50PiA9IHtcbiAgICBoZWFkaW5nOiBSaWNoVGV4dC5IZWFkaW5nQmxvY2ssXG4gICAgaHRtbDogUmljaFRleHQuSHRtbEJsb2NrLFxuICAgIGltYWdlOiBSaWNoVGV4dC5JbWFnZUJsb2NrLFxuICAgIG9yZGVyZWRMaXN0OiBSaWNoVGV4dC5MaXN0QmxvY2ssXG4gICAgcGFyYWdyYXBoOiBSaWNoVGV4dC5QYXJhZ3JhcGhCbG9jayxcbiAgICB1bm9yZGVyZWRMaXN0OiBSaWNoVGV4dC5MaXN0QmxvY2ssXG4gICAgLi4ucmljaFRleHRDb250ZXh0LmNvbXBvbmVudHMsXG4gICAgLi4ucHJvcHMuY29tcG9uZW50cyxcbiAgfTtcbiAgY29uc3QgYmxvY2tzID0gKHByb3BzLmRhdGE/LmJsb2NrcyB8fCBbXSkuZmlsdGVyKChibG9jaykgPT4ge1xuICAgIGNvbnN0IGJsb2NrVHlwZSA9IGJsb2NrPy50eXBlO1xuICAgIGlmICghYmxvY2tUeXBlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICghKGJsb2NrVHlwZSBpbiBjb21wb25lbnRzKSkge1xuICAgICAgY29uc29sZS53YXJuKGBpZ25vcmluZyB1bmtub3duIHJpY2h0ZXh0IHR5cGU6IFwiJHtibG9ja1R5cGV9XCJgKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH0pO1xuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICB7YmxvY2tzLm1hcCgoYmxvY2spID0+IHtcbiAgICAgICAgY29uc3QgQmxvY2sgPSBjb21wb25lbnRzW2Jsb2NrLnR5cGVdO1xuICAgICAgICByZXR1cm4gPEJsb2NrIHsuLi5ibG9ja30gLz47XG4gICAgICB9KX1cbiAgICA8Lz5cbiAgKTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSaWNoVGV4dFBhcmFncmFwaEJsb2NrUHJvcHMge1xuICB0eXBlOiAncGFyYWdyYXBoJztcbiAgZGF0YT86IHtcbiAgICB0ZXh0Pzogc3RyaW5nO1xuICB9O1xufVxuXG5SaWNoVGV4dC5QYXJhZ3JhcGhCbG9jayA9IChwcm9wczogUmljaFRleHRQYXJhZ3JhcGhCbG9ja1Byb3BzKSA9PiB7XG4gIGlmICghcHJvcHMuZGF0YT8udGV4dCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IHQgPSB1c2VUcmFuc2xhdGlvbnMoKTtcbiAgcmV0dXJuIDxwIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXt7X19odG1sOiB0KHByb3BzLmRhdGEudGV4dCl9fSAvPjtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmljaFRleHRIZWFkaW5nQmxvY2tQcm9wcyB7XG4gIHR5cGU6ICdoZWFkaW5nJztcbiAgZGF0YT86IHtcbiAgICBsZXZlbD86IG51bWJlcjtcbiAgICB0ZXh0Pzogc3RyaW5nO1xuICB9O1xufVxuXG50eXBlIEhlYWRpbmdDb21wb25lbnQgPSAnaDEnIHwgJ2gyJyB8ICdoMycgfCAnaDQnIHwgJ2g1JyB8ICdoNic7XG5cblJpY2hUZXh0LkhlYWRpbmdCbG9jayA9IChwcm9wczogUmljaFRleHRIZWFkaW5nQmxvY2tQcm9wcykgPT4ge1xuICBpZiAoIXByb3BzLmRhdGE/LnRleHQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCB0ID0gdXNlVHJhbnNsYXRpb25zKCk7XG4gIGNvbnN0IGxldmVsID0gcHJvcHMuZGF0YS5sZXZlbCB8fCAyO1xuICBjb25zdCBDb21wb25lbnQgPSBgaCR7bGV2ZWx9YCBhcyBIZWFkaW5nQ29tcG9uZW50O1xuICByZXR1cm4gPENvbXBvbmVudCBkYW5nZXJvdXNseVNldElubmVySFRNTD17e19faHRtbDogdChwcm9wcy5kYXRhLnRleHQpfX0gLz47XG59O1xuXG5pbnRlcmZhY2UgTGlzdEl0ZW0ge1xuICBjb250ZW50Pzogc3RyaW5nO1xuICBpdGVtcz86IExpc3RJdGVtW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmljaFRleHRMaXN0QmxvY2tQcm9wcyB7XG4gIHR5cGU6ICdvcmRlcmVkTGlzdCcgfCAndW5vcmRlcmVkTGlzdCc7XG4gIGRhdGE/OiB7XG4gICAgc3R5bGU/OiAnb3JkZXJlZCcgfCAndW5vcmRlcmVkJztcbiAgICBpdGVtcz86IExpc3RJdGVtW107XG4gIH07XG59XG5cblJpY2hUZXh0Lkxpc3RCbG9jayA9IChwcm9wczogUmljaFRleHRMaXN0QmxvY2tQcm9wcykgPT4ge1xuICBpZiAoIXByb3BzLmRhdGE/Lml0ZW1zPy5sZW5ndGgpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGxldCBzdHlsZSA9IHByb3BzLmRhdGE/LnN0eWxlO1xuICBpZiAoIXN0eWxlKSB7XG4gICAgc3R5bGUgPSBwcm9wcy50eXBlID09PSAnb3JkZXJlZExpc3QnID8gJ29yZGVyZWQnIDogJ3Vub3JkZXJlZCc7XG4gIH1cbiAgY29uc3QgQ29tcG9uZW50ID0gc3R5bGUgPT09ICdvcmRlcmVkJyA/ICdvbCcgOiAndWwnO1xuICBjb25zdCBpdGVtcyA9IHByb3BzLmRhdGEuaXRlbXM7XG4gIGNvbnN0IHQgPSB1c2VUcmFuc2xhdGlvbnMoKTtcbiAgcmV0dXJuIChcbiAgICA8Q29tcG9uZW50PlxuICAgICAge2l0ZW1zLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgICBpZiAoaXRlbS5jb250ZW50IHx8IGl0ZW0uaXRlbXM/Lmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8bGk+XG4gICAgICAgICAgICAgIHtpdGVtLmNvbnRlbnQgJiYgKFxuICAgICAgICAgICAgICAgIDxSaWNoVGV4dC5QYXJhZ3JhcGhCbG9ja1xuICAgICAgICAgICAgICAgICAgdHlwZT1cInBhcmFncmFwaFwiXG4gICAgICAgICAgICAgICAgICBkYXRhPXt7dGV4dDogaXRlbS5jb250ZW50fX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICB7aXRlbS5pdGVtcyAmJiBpdGVtLml0ZW1zLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICAgICAgICAgIDxSaWNoVGV4dC5MaXN0QmxvY2tcbiAgICAgICAgICAgICAgICAgIHR5cGU9e3Byb3BzLnR5cGV9XG4gICAgICAgICAgICAgICAgICBkYXRhPXt7c3R5bGUsIGl0ZW1zOiBpdGVtLml0ZW1zfX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfSl9XG4gICAgPC9Db21wb25lbnQ+XG4gICk7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIFJpY2hUZXh0SW1hZ2VCbG9ja1Byb3BzIHtcbiAgdHlwZTogJ2ltYWdlJztcbiAgZGF0YT86IHtcbiAgICBmaWxlPzoge1xuICAgICAgdXJsOiBzdHJpbmc7XG4gICAgICB3aWR0aDogc3RyaW5nIHwgbnVtYmVyO1xuICAgICAgaGVpZ2h0OiBzdHJpbmcgfCBudW1iZXI7XG4gICAgICBhbHQ6IHN0cmluZztcbiAgICB9O1xuICB9O1xufVxuXG5SaWNoVGV4dC5JbWFnZUJsb2NrID0gKHByb3BzOiBSaWNoVGV4dEltYWdlQmxvY2tQcm9wcykgPT4ge1xuICBjb25zdCBpbWFnZVVybCA9IHByb3BzLmRhdGE/LmZpbGU/LnVybDtcbiAgaWYgKCFpbWFnZVVybCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IHdpZHRoID0gdG9OdW1iZXIocHJvcHMuZGF0YT8uZmlsZT8ud2lkdGgpO1xuICBjb25zdCBoZWlnaHQgPSB0b051bWJlcihwcm9wcy5kYXRhPy5maWxlPy5oZWlnaHQpO1xuICBjb25zdCBhbHQgPSBwcm9wcy5kYXRhPy5maWxlPy5hbHQgfHwgJyc7XG4gIHJldHVybiA8aW1nIHNyYz17aW1hZ2VVcmx9IHdpZHRoPXt3aWR0aH0gaGVpZ2h0PXtoZWlnaHR9IGFsdD17YWx0fSAvPjtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmljaFRleHRIdG1sQmxvY2tQcm9wcyB7XG4gIHR5cGU6ICdodG1sJztcbiAgZGF0YT86IHtcbiAgICBodG1sPzogc3RyaW5nO1xuICB9O1xufVxuXG5SaWNoVGV4dC5IdG1sQmxvY2sgPSAocHJvcHM6IFJpY2hUZXh0SHRtbEJsb2NrUHJvcHMpID0+IHtcbiAgY29uc3QgaHRtbCA9IHByb3BzLmRhdGE/Lmh0bWwgfHwgJyc7XG4gIGlmICghaHRtbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiA8ZGl2IGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXt7X19odG1sOiBodG1sfX0gLz47XG59O1xuXG5mdW5jdGlvbiB0b051bWJlcihpbnB1dD86IHN0cmluZyB8IG51bWJlcik6IG51bWJlciB7XG4gIGlmIChpbnB1dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gaW5wdXQ7XG4gIH1cbiAgY29uc3QgcGFyc2VkTnVtYmVyID0gcGFyc2VGbG9hdChpbnB1dCk7XG4gIGlmIChpc05hTihwYXJzZWROdW1iZXIpKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgcmV0dXJuIHBhcnNlZE51bWJlcjtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7QUFBQSxTQUFRLHVCQUFzQjtBQUM5QixTQUE2QixxQkFBb0I7QUFDakQsU0FBUSxrQkFBaUI7QUFzRHJCLG1CQUdXLEtBdUVILFlBMUVSO0FBcENHLElBQU0sa0JBQWtCLGNBQW9DLENBQUMsQ0FBQztBQUU5RCxTQUFTLHFCQUEyQztBQUN6RCxTQUFPLFdBQVcsZUFBZTtBQUNuQztBQVFPLFNBQVMsU0FBUyxPQUFzQjtBQWhDL0M7QUFpQ0UsUUFBTSxrQkFBa0IsbUJBQW1CO0FB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
|
|
@@ -68,6 +68,11 @@ type FileField = CommonFieldProps & {
|
|
|
68
68
|
type: 'file';
|
|
69
69
|
/** List of supported exts, e.g. `['.mp4']`. */
|
|
70
70
|
exts?: string[];
|
|
71
|
+
/**
|
|
72
|
+
* Whether to preserve the final serving filename when a user uploads a file.
|
|
73
|
+
* By default, the filename is hashed for obfuscation purposes.
|
|
74
|
+
*/
|
|
75
|
+
preserveFilename?: boolean;
|
|
71
76
|
};
|
|
72
77
|
declare function file(field: Omit<FileField, 'type'>): FileField;
|
|
73
78
|
type ObjectField = CommonFieldProps & {
|
|
@@ -105,13 +110,29 @@ type OneOfField = CommonFieldProps & {
|
|
|
105
110
|
types: Schema[];
|
|
106
111
|
};
|
|
107
112
|
declare function oneOf(field: Omit<OneOfField, 'type'>): OneOfField;
|
|
108
|
-
type
|
|
113
|
+
type RichTextField = CommonFieldProps & {
|
|
114
|
+
type: 'richtext';
|
|
115
|
+
translate?: boolean;
|
|
116
|
+
placeholder?: string;
|
|
117
|
+
};
|
|
118
|
+
declare function richtext(field: Omit<RichTextField, 'type'>): RichTextField;
|
|
119
|
+
type ReferenceField = CommonFieldProps & {
|
|
120
|
+
type: 'reference';
|
|
121
|
+
/** List of collection ids the reference can be chosen from. */
|
|
122
|
+
collections?: string[];
|
|
123
|
+
/** Initial collection to show when picking a reference. */
|
|
124
|
+
initialCollection?: string;
|
|
125
|
+
/** Label for the button. Defaults to "Select". */
|
|
126
|
+
buttonLabel?: string;
|
|
127
|
+
};
|
|
128
|
+
declare function reference(field: Omit<ReferenceField, 'type'>): ReferenceField;
|
|
129
|
+
type Field = StringField | NumberField | DateField | DateTimeField | BooleanField | SelectField | MultiSelectField | ImageField | FileField | ObjectField | ArrayField | OneOfField | RichTextField | ReferenceField;
|
|
109
130
|
/**
|
|
110
131
|
* Similar to {@link Field} but with a required `id`.
|
|
111
132
|
* TODO(stevenle): fix this.
|
|
112
133
|
*/
|
|
113
134
|
type FieldWithId = Field;
|
|
114
|
-
type ObjectLikeField = ImageField | FileField | ObjectField | OneOfField;
|
|
135
|
+
type ObjectLikeField = ImageField | FileField | ObjectField | OneOfField | ReferenceField;
|
|
115
136
|
interface Schema {
|
|
116
137
|
name: string;
|
|
117
138
|
description?: string;
|
|
@@ -137,6 +158,9 @@ type Collection = Schema & {
|
|
|
137
158
|
preview?: {
|
|
138
159
|
title?: string;
|
|
139
160
|
image?: string;
|
|
161
|
+
defaultImage?: {
|
|
162
|
+
src: string;
|
|
163
|
+
};
|
|
140
164
|
};
|
|
141
165
|
};
|
|
142
166
|
declare function defineCollection(collection: Collection): Collection;
|
|
@@ -157,6 +181,8 @@ type schema_NumberField = NumberField;
|
|
|
157
181
|
type schema_ObjectField = ObjectField;
|
|
158
182
|
type schema_ObjectLikeField = ObjectLikeField;
|
|
159
183
|
type schema_OneOfField = OneOfField;
|
|
184
|
+
type schema_ReferenceField = ReferenceField;
|
|
185
|
+
type schema_RichTextField = RichTextField;
|
|
160
186
|
type schema_Schema = Schema;
|
|
161
187
|
type schema_SelectField = SelectField;
|
|
162
188
|
type schema_StringField = StringField;
|
|
@@ -174,45 +200,12 @@ declare const schema_multiselect: typeof multiselect;
|
|
|
174
200
|
declare const schema_number: typeof number;
|
|
175
201
|
declare const schema_object: typeof object;
|
|
176
202
|
declare const schema_oneOf: typeof oneOf;
|
|
203
|
+
declare const schema_reference: typeof reference;
|
|
204
|
+
declare const schema_richtext: typeof richtext;
|
|
177
205
|
declare const schema_select: typeof select;
|
|
178
206
|
declare const schema_string: typeof string;
|
|
179
207
|
declare namespace schema {
|
|
180
|
-
export {
|
|
181
|
-
schema_ArrayField as ArrayField,
|
|
182
|
-
schema_BooleanField as BooleanField,
|
|
183
|
-
schema_Collection as Collection,
|
|
184
|
-
schema_CommonFieldProps as CommonFieldProps,
|
|
185
|
-
schema_DateField as DateField,
|
|
186
|
-
schema_DateTimeField as DateTimeField,
|
|
187
|
-
schema_Field as Field,
|
|
188
|
-
schema_FieldWithId as FieldWithId,
|
|
189
|
-
schema_FileField as FileField,
|
|
190
|
-
schema_ImageField as ImageField,
|
|
191
|
-
schema_MultiSelectField as MultiSelectField,
|
|
192
|
-
schema_NumberField as NumberField,
|
|
193
|
-
schema_ObjectField as ObjectField,
|
|
194
|
-
schema_ObjectLikeField as ObjectLikeField,
|
|
195
|
-
schema_OneOfField as OneOfField,
|
|
196
|
-
schema_Schema as Schema,
|
|
197
|
-
schema_SelectField as SelectField,
|
|
198
|
-
schema_StringField as StringField,
|
|
199
|
-
schema_array as array,
|
|
200
|
-
schema_boolean as boolean,
|
|
201
|
-
schema_collection as collection,
|
|
202
|
-
schema_date as date,
|
|
203
|
-
schema_datetime as datetime,
|
|
204
|
-
schema_define as define,
|
|
205
|
-
schema_defineCollection as defineCollection,
|
|
206
|
-
schema_defineSchema as defineSchema,
|
|
207
|
-
schema_file as file,
|
|
208
|
-
schema_image as image,
|
|
209
|
-
schema_multiselect as multiselect,
|
|
210
|
-
schema_number as number,
|
|
211
|
-
schema_object as object,
|
|
212
|
-
schema_oneOf as oneOf,
|
|
213
|
-
schema_select as select,
|
|
214
|
-
schema_string as string,
|
|
215
|
-
};
|
|
208
|
+
export { type schema_ArrayField as ArrayField, type schema_BooleanField as BooleanField, type schema_Collection as Collection, type schema_CommonFieldProps as CommonFieldProps, type schema_DateField as DateField, type schema_DateTimeField as DateTimeField, type schema_Field as Field, type schema_FieldWithId as FieldWithId, type schema_FileField as FileField, type schema_ImageField as ImageField, type schema_MultiSelectField as MultiSelectField, type schema_NumberField as NumberField, type schema_ObjectField as ObjectField, type schema_ObjectLikeField as ObjectLikeField, type schema_OneOfField as OneOfField, type schema_ReferenceField as ReferenceField, type schema_RichTextField as RichTextField, type schema_Schema as Schema, type schema_SelectField as SelectField, type schema_StringField as StringField, schema_array as array, schema_boolean as boolean, schema_collection as collection, schema_date as date, schema_datetime as datetime, schema_define as define, schema_defineCollection as defineCollection, schema_defineSchema as defineSchema, schema_file as file, schema_image as image, schema_multiselect as multiselect, schema_number as number, schema_object as object, schema_oneOf as oneOf, schema_reference as reference, schema_richtext as richtext, schema_select as select, schema_string as string };
|
|
216
209
|
}
|
|
217
210
|
|
|
218
|
-
export { Schema as S, schema as s };
|
|
211
|
+
export { type Schema as S, schema as s };
|
package/dist/ui/signin.css
CHANGED
|
@@ -113,11 +113,19 @@ body.menu\:open {
|
|
|
113
113
|
padding: 48px 20px;
|
|
114
114
|
color: #3c4043;
|
|
115
115
|
}
|
|
116
|
-
.
|
|
116
|
+
.signin__headline {
|
|
117
|
+
margin-bottom: 40px;
|
|
118
|
+
}
|
|
119
|
+
.signin__headline__title {
|
|
117
120
|
font-size: 36px;
|
|
118
|
-
line-height:
|
|
121
|
+
line-height: 1.3;
|
|
122
|
+
font-weight: 500;
|
|
123
|
+
margin-bottom: 20px;
|
|
124
|
+
}
|
|
125
|
+
.signin__headline__body {
|
|
126
|
+
font-size: 18px;
|
|
127
|
+
line-height: 1.5;
|
|
119
128
|
font-weight: 500;
|
|
120
|
-
margin-bottom: 30px;
|
|
121
129
|
}
|
|
122
130
|
.signin__button {
|
|
123
131
|
align-items: center;
|
|
@@ -155,3 +163,11 @@ body.menu\:open {
|
|
|
155
163
|
font-weight: 500;
|
|
156
164
|
color: #3c4043;
|
|
157
165
|
}
|
|
166
|
+
.signin__error {
|
|
167
|
+
color: red;
|
|
168
|
+
font-weight: bold;
|
|
169
|
+
text-align: center;
|
|
170
|
+
max-width: 60ch;
|
|
171
|
+
margin: 20px auto 0;
|
|
172
|
+
}
|
|
173
|
+
/*# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc2lnbmluL3N0eWxlcy9nbG9iYWwuY3NzIiwgIi4uLy4uL3NpZ25pbi9zdHlsZXMvc2lnbmluLmNzcyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiOnJvb3Qge1xuICAtLWZvbnQtZmFtaWx5LWRlZmF1bHQ6IFwiSW50ZXJcIiwgc2Fucy1zZXJpZjtcbiAgLS1mb250LWZhbWlseS1tb25vOiB1aS1tb25vc3BhY2UsIFNGTW9uby1SZWd1bGFyLCBNZW5sbywgTW9uYWNvLCBDb25zb2xhcywgbW9ub3NwYWNlO1xuICAtLWNvbG9yLXRleHQtZGVmYXVsdDogIzMzMzMzMztcbiAgLS1jb2xvci1ib3JkZXI6ICNFRkVGRUY7XG4gIC0tYnV0dG9uLWJhY2tncm91bmQtaG92ZXI6ICNGNUY1RjU7XG4gIC0tYnV0dG9uLWJhY2tncm91bmQtYWN0aXZlOiAjRTVFNUU1O1xufVxuXG5odG1sIHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgb3ZlcmZsb3cteDogaGlkZGVuO1xuICBmb250LXNpemU6IDE2cHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjU7XG59XG5cbiosXG4qOmJlZm9yZSxcbio6YWZ0ZXIge1xuICBib3gtc2l6aW5nOiBpbmhlcml0O1xufVxuXG5odG1sLFxuYm9keSB7XG4gIC8qIGZvbnQtZmFtaWx5OiB0b2tlbnMuJGZvbnQtZmFtaWx5LXByaW1hcnk7ICovXG4gIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWZhbWlseS1kZWZhdWx0KTtcbiAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtZGVmYXVsdCk7XG4gIGhlaWdodDogMTAwJTtcbiAgbWFyZ2luOiAwO1xuICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcbiAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTtcbiAgc2Nyb2xsLWJlaGF2aW9yOiBzbW9vdGg7XG59XG5cbmltZyxcbnBpY3R1cmUsXG5maWd1cmUsXG52aWRlbyxcbmNhbnZhcyxcbnN2ZyxcbmlmcmFtZSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBtYXgtd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogYXV0bztcbiAgbWFyZ2luOiAwO1xufVxuXG5hIHtcbiAgY29sb3I6IGluaGVyaXQ7XG59XG5cbnNlbGVjdCB7XG4gIGNvbG9yLXNjaGVtZTogbGlnaHQ7XG59XG5cbmgxLFxuaDIsXG5oMyxcbmg0LFxuaDUsXG5wIHtcbiAgbWFyZ2luOiAwO1xufVxuXG5ib2R5Lm1lbnVcXDpvcGVuIHtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuI3Jvb3Qge1xuICBtYXJnaW46IDAgYXV0bztcbiAgbWluLWhlaWdodDogMTAwdmg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLmJvb3RzdHJhcCB7XG4gIGZvbnQtc2l6ZTogNDhweDtcbiAgZm9udC13ZWlnaHQ6IDkwMDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwdmg7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHBhZGRpbmc6IDQwcHg7XG4gIGdhcDogMzZweDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG4uYm9vdHN0cmFwLWVycm9yIHtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBmb250LXdlaWdodDogNDAwO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJvdHRvbTogMTAwcHg7XG4gIGxlZnQ6IDA7XG4gIHJpZ2h0OiAwO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGFuaW1hdGlvbjogMC41cyBmb3J3YXJkcyBib290c3RyYXAtbG9hZGluZy1lcnJvcjtcbiAgYW5pbWF0aW9uLWRlbGF5OiAxcztcbiAgb3BhY2l0eTogMDtcbn1cblxuQGtleWZyYW1lcyBib290c3RyYXAtbG9hZGluZy1lcnJvciB7XG4gIDAlIHtcbiAgICBvcGFjaXR5OiAwO1xuICB9XG4gIDEwMCUge1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cbn1cbiIsICIuc2lnbmluIHtcbiAgZm9udC1mYW1pbHk6ICdHb29nbGUgU2FucycsIGFyaWFsLCBzYW5zLXNlcmlmO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHBhZGRpbmc6IDQ4cHggMjBweDtcbiAgY29sb3I6ICMzYzQwNDM7XG59XG5cbi5zaWduaW5fX2hlYWRsaW5lIHtcbiAgbWFyZ2luLWJvdHRvbTogNDBweDtcbn1cblxuLnNpZ25pbl9faGVhZGxpbmVfX3RpdGxlIHtcbiAgZm9udC1zaXplOiAzNnB4O1xuICBsaW5lLWhlaWdodDogMS4zO1xuICBmb250LXdlaWdodDogNTAwO1xuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xufVxuXG4uc2lnbmluX19oZWFkbGluZV9fYm9keSB7XG4gIGZvbnQtc2l6ZTogMThweDtcbiAgbGluZS1oZWlnaHQ6IDEuNTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbn1cblxuLnNpZ25pbl9fYnV0dG9uIHtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xuICAtbW96LWFwcGVhcmFuY2U6IG5vbmU7XG4gIGFwcGVhcmFuY2U6IG5vbmU7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGdhcDogMTJweDtcbiAgcGFkZGluZzogOHB4IDExcHg7XG4gIGJhY2tncm91bmQ6IHdoaXRlO1xuICBib3JkZXI6IDFweCBzb2xpZCAjZGFkY2UwO1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgZm9udC1mYW1pbHk6IGluaGVyaXQ7XG4gIHBhZGRpbmc6IDAgMTJweDtcbiAgaGVpZ2h0OiA0MHB4O1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICB0cmFuc2l0aW9uOiBhbGwgMC4yMThzIGVhc2U7XG59XG5cbi5zaWduaW5fX2J1dHRvbjpob3ZlciB7XG4gIGJvcmRlci1jb2xvcjogI2QyZTNmYztcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSg2NiwgMTMzLCAyNDQsIDAuMDQpO1xufVxuXG4uc2lnbmluX19idXR0b25fX2ljb24ge1xuICB3aWR0aDogMThweDtcbiAgaGVpZ2h0OiAxOHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbn1cblxuLnNpZ25pbl9fYnV0dG9uX19sYWJlbCB7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgbGluZS1oZWlnaHQ6IDE7XG4gIGxldHRlci1zcGFjaW5nOiAuMjVweDtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgY29sb3I6ICMzYzQwNDM7XG59XG5cbi5zaWduaW5fX2Vycm9yIHtcbiAgY29sb3I6IHJlZDtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgbWF4LXdpZHRoOiA2MGNoO1xuICBtYXJnaW46IDIwcHggYXV0byAwO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjtBQUFBO0FBQ0UseUJBQXVCLE9BQU8sRUFBRTtBQUNoQztBQUFBLElBQW9CLFlBQVk7QUFBQSxJQUFFLGNBQWM7QUFBQSxJQUFFLEtBQUs7QUFBQSxJQUFFLE1BQU07QUFBQSxJQUFFLFFBQVE7QUFBQSxJQUFFO0FBQzNFLHdCQUFzQjtBQUN0QixrQkFBZ0I7QUFDaEIsNkJBQTJCO0FBQzNCLDhCQUE0QjtBQUM5QjtBQUVBO0FBQ0UsY0FBWTtBQUNaLGNBQVk7QUFDWixhQUFXO0FBQ1gsZUFBYTtBQUNmO0FBRUE7QUFDQSxDQUFDO0FBQ0QsQ0FBQztBQUNDLGNBQVk7QUFDZDtBQUVBO0FBQ0E7QUFFRSxlQUFhLElBQUk7QUFDakIsU0FBTyxJQUFJO0FBQ1gsVUFBUTtBQUNSLFVBQVE7QUFDUiwwQkFBd0I7QUFDeEIsMkJBQXlCO0FBQ3pCLG1CQUFpQjtBQUNuQjtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0UsV0FBUztBQUNULGFBQVc7QUFDWCxVQUFRO0FBQ1IsVUFBUTtBQUNWO0FBRUE7QUFDRSxTQUFPO0FBQ1Q7QUFFQTtBQUNFLGdCQUFjO0FBQ2hCO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0UsVUFBUTtBQUNWO0FBRUEsSUFBSSxDQUFDO0FBQ0gsWUFBVTtBQUNaO0FBRUEsQ0FBQztBQUNDLFVBQVEsRUFBRTtBQUNWLGNBQVk7QUFDWixZQUFVO0FBQ1o7QUFFQSxDQUFDO0FBQ0MsYUFBVztBQUNYLGVBQWE7QUFDYixTQUFPO0FBQ1AsVUFBUTtBQUNSLFdBQVM7QUFDVCxrQkFBZ0I7QUFDaEIsbUJBQWlCO0FBQ2pCLGVBQWE7QUFDYixjQUFZO0FBQ1osV0FBUztBQUNULE9BQUs7QUFDTCxZQUFVO0FBQ1o7QUFFQSxDQUFDO0FBQ0MsYUFBVztBQUNYLGVBQWE7QUFDYixZQUFVO0FBQ1YsVUFBUTtBQUNSLFFBQU07QUFDTixTQUFPO0FBQ1AsY0FBWTtBQUNaLGFBQVcsS0FBSyxTQUFTO0FBQ3pCLG1CQUFpQjtBQUNqQixXQUFTO0FBQ1g7QUFFQSxXQUwyQjtBQU16QjtBQUNFLGFBQVM7QUFDWDtBQUNBO0FBQ0UsYUFBUztBQUNYO0FBQ0Y7OztBQzdHQSxDQUFDO0FBQ0M7QUFBQSxJQUFhLGFBQWE7QUFBQSxJQUFFLEtBQUs7QUFBQSxJQUFFO0FBQ25DLGNBQVk7QUFDWixXQUFTLEtBQUs7QUFDZCxTQUFPO0FBQ1Q7QUFFQSxDQUFDO0FBQ0MsaUJBQWU7QUFDakI7QUFFQSxDQUFDO0FBQ0MsYUFBVztBQUNYLGVBQWE7QUFDYixlQUFhO0FBQ2IsaUJBQWU7QUFDakI7QUFFQSxDQUFDO0FBQ0MsYUFBVztBQUNYLGVBQWE7QUFDYixlQUFhO0FBQ2Y7QUFFQSxDQUFDO0FBQ0MsZUFBYTtBQUNiLHNCQUFvQjtBQUNwQixtQkFBaUI7QUFDakIsY0FBWTtBQUNaLFdBQVM7QUFDVCxlQUFhO0FBQ2IsY0FBWTtBQUNaLE9BQUs7QUFDTCxXQUFTLElBQUk7QUFDYixjQUFZO0FBQ1osVUFBUSxJQUFJLE1BQU07QUFDbEIsaUJBQWU7QUFDZixVQUFRO0FBQ1IsZUFBYTtBQUNiLFdBQVMsRUFBRTtBQUNYLFVBQVE7QUFDUixjQUFZO0FBQ1osY0FBWSxJQUFJLE9BQU87QUFDekI7QUFFQSxDQXJCQyxjQXFCYztBQUNiLGdCQUFjO0FBQ2Qsb0JBQWtCLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUU7QUFDdkM7QUFFQSxDQUFDO0FBQ0MsU0FBTztBQUNQLFVBQVE7QUFDUixvQkFBa0I7QUFDcEI7QUFFQSxDQUFDO0FBQ0MsYUFBVztBQUNYLGVBQWE7QUFDYixrQkFBZ0I7QUFDaEIsZUFBYTtBQUNiLFNBQU87QUFDVDtBQUVBLENBQUM7QUFDQyxTQUFPO0FBQ1AsZUFBYTtBQUNiLGNBQVk7QUFDWixhQUFXO0FBQ1gsVUFBUSxLQUFLLEtBQUs7QUFDcEI7IiwKICAibmFtZXMiOiBbXQp9Cg== */
|