@wix/himalaya-cli 0.1079.0 → 0.1081.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/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/core/dev-server/src/builder.d.ts +20 -0
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/core/ts/src/schema.d.ts +62 -1
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/core/ts/src/site-shell.d.ts +0 -14
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/core/ts/src/validator.d.ts +36 -0
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/stdlib/wix-sdk/rich-content/src/display.d.ts +26 -0
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/stdlib/wix-sdk/rich-content/src/index.d.ts +79 -0
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/core.mjs +25 -49
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/sdui.mjs +508 -41
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/wix-rich-content.mjs +345 -0
- package/dist/authoring-runtime/node_modules/@wix/himalaya/package.json +4 -0
- package/dist/cli.mjs +2043 -1280
- package/dist/preview-assets.generated.bin +0 -0
- package/guides/component-reference.json +10 -1
- package/guides/component-reference.md +20 -2
- package/guides/importable-sdks.md +1 -0
- package/guides/index.json +1 -1
- package/guides/sdk-reference.json +74 -1
- package/guides/splash-screens.md +13 -1
- package/package.json +2 -2
- package/templates/beauty-salon-owner/tier5-src/_shared/owner-post-content.ts +7 -26
- package/templates/beauty-salon-owner/tier5-src/_shared/owner-rich-guard.ts +12 -41
- package/templates/community-club-owner/tier5-src/_shared/owner-post-content.ts +7 -26
- package/templates/community-club-owner/tier5-src/_shared/owner-rich-guard.ts +12 -41
- package/templates/community-club-owner/tier5-src/himi-owner-lite-event-form/index.ts +2 -2
- package/templates/events-meetups-owner/tier5-src/_shared/owner-post-content.ts +7 -26
- package/templates/events-meetups-owner/tier5-src/_shared/owner-rich-guard.ts +12 -41
- package/templates/events-meetups-owner/tier5-src/himi-owner-lite-event-form/index.ts +2 -2
- package/templates/gym-fitness-owner/tier5-src/_shared/owner-post-content.ts +7 -26
- package/templates/gym-fitness-owner/tier5-src/_shared/owner-rich-guard.ts +12 -41
- package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-event-form/index.ts +2 -2
- package/templates/nonprofit-cause-owner/tier5-src/_shared/owner-post-content.ts +7 -26
- package/templates/nonprofit-cause-owner/tier5-src/_shared/owner-rich-guard.ts +12 -41
- package/templates/nonprofit-cause-owner/tier5-src/himi-owner-lite-event-form/index.ts +2 -2
- package/templates/owner-lite/tier5-src/_shared/owner-post-content.ts +7 -26
- package/templates/owner-lite/tier5-src/_shared/owner-rich-guard.ts +12 -41
- package/templates/owner-lite/tier5-src/himi-owner-lite-event-form/index.ts +2 -2
- package/templates/podcast-creator-owner/tier5-src/_shared/owner-post-content.ts +7 -26
- package/templates/podcast-creator-owner/tier5-src/_shared/owner-rich-guard.ts +12 -41
- package/templates/podcast-creator-owner/tier5-src/himi-owner-lite-event-form/index.ts +2 -2
- package/templates/portfolio-creative-owner/tier5-src/_shared/owner-post-content.ts +7 -26
- package/templates/portfolio-creative-owner/tier5-src/_shared/owner-rich-guard.ts +12 -41
- package/templates/restaurant-owner/tier5-src/_shared/owner-post-content.ts +7 -26
- package/templates/restaurant-owner/tier5-src/_shared/owner-rich-guard.ts +12 -41
- package/templates/restaurant-owner/tier5-src/himi-owner-lite-event-form/index.ts +2 -2
- package/templates/retail-store-owner/tier5-src/_shared/owner-post-content.ts +7 -26
- package/templates/retail-store-owner/tier5-src/_shared/owner-rich-guard.ts +12 -41
- package/templates/yoga-studio-owner/tier5-src/_shared/owner-post-content.ts +7 -26
- package/templates/yoga-studio-owner/tier5-src/_shared/owner-rich-guard.ts +12 -41
- package/templates/yoga-studio-owner/tier5-src/himi-owner-lite-event-form/index.ts +2 -2
|
@@ -4,6 +4,7 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
|
4
4
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
5
|
var __getProtoOf = Object.getPrototypeOf;
|
|
6
6
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
7
8
|
var __commonJS = (cb, mod) => function __require() {
|
|
8
9
|
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
|
|
9
10
|
};
|
|
@@ -23,6 +24,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
23
24
|
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
24
25
|
mod
|
|
25
26
|
));
|
|
27
|
+
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
26
28
|
|
|
27
29
|
// ../../node_modules/ajv/dist/compile/codegen/code.js
|
|
28
30
|
var require_code = __commonJS({
|
|
@@ -92,7 +94,7 @@ var require_code = __commonJS({
|
|
|
92
94
|
}
|
|
93
95
|
exports._ = _;
|
|
94
96
|
var plus = new _Code("+");
|
|
95
|
-
function
|
|
97
|
+
function str2(strs, ...args) {
|
|
96
98
|
const expr = [safeStringify(strs[0])];
|
|
97
99
|
let i = 0;
|
|
98
100
|
while (i < args.length) {
|
|
@@ -103,7 +105,7 @@ var require_code = __commonJS({
|
|
|
103
105
|
optimize(expr);
|
|
104
106
|
return new _Code(expr);
|
|
105
107
|
}
|
|
106
|
-
exports.str =
|
|
108
|
+
exports.str = str2;
|
|
107
109
|
function addCodeArg(code, arg) {
|
|
108
110
|
if (arg instanceof _Code)
|
|
109
111
|
code.push(...arg._items);
|
|
@@ -146,7 +148,7 @@ var require_code = __commonJS({
|
|
|
146
148
|
return;
|
|
147
149
|
}
|
|
148
150
|
function strConcat(c1, c2) {
|
|
149
|
-
return c2.emptyStr() ? c1 : c1.emptyStr() ? c2 :
|
|
151
|
+
return c2.emptyStr() ? c1 : c1.emptyStr() ? c2 : str2`${c1}${c2}`;
|
|
150
152
|
}
|
|
151
153
|
exports.strConcat = strConcat;
|
|
152
154
|
function interpolate(x) {
|
|
@@ -1108,22 +1110,22 @@ var require_util = __commonJS({
|
|
|
1108
1110
|
return (0, codegen_1._)`${topSchemaRef}${schemaPath}${(0, codegen_1.getProperty)(keyword)}`;
|
|
1109
1111
|
}
|
|
1110
1112
|
exports.schemaRefOrVal = schemaRefOrVal;
|
|
1111
|
-
function unescapeFragment(
|
|
1112
|
-
return unescapeJsonPointer(decodeURIComponent(
|
|
1113
|
+
function unescapeFragment(str2) {
|
|
1114
|
+
return unescapeJsonPointer(decodeURIComponent(str2));
|
|
1113
1115
|
}
|
|
1114
1116
|
exports.unescapeFragment = unescapeFragment;
|
|
1115
|
-
function escapeFragment(
|
|
1116
|
-
return encodeURIComponent(escapeJsonPointer(
|
|
1117
|
+
function escapeFragment(str2) {
|
|
1118
|
+
return encodeURIComponent(escapeJsonPointer(str2));
|
|
1117
1119
|
}
|
|
1118
1120
|
exports.escapeFragment = escapeFragment;
|
|
1119
|
-
function escapeJsonPointer(
|
|
1120
|
-
if (typeof
|
|
1121
|
-
return `${
|
|
1122
|
-
return
|
|
1121
|
+
function escapeJsonPointer(str2) {
|
|
1122
|
+
if (typeof str2 == "number")
|
|
1123
|
+
return `${str2}`;
|
|
1124
|
+
return str2.replace(/~/g, "~0").replace(/\//g, "~1");
|
|
1123
1125
|
}
|
|
1124
1126
|
exports.escapeJsonPointer = escapeJsonPointer;
|
|
1125
|
-
function unescapeJsonPointer(
|
|
1126
|
-
return
|
|
1127
|
+
function unescapeJsonPointer(str2) {
|
|
1128
|
+
return str2.replace(/~1/g, "/").replace(/~0/g, "~");
|
|
1127
1129
|
}
|
|
1128
1130
|
exports.unescapeJsonPointer = unescapeJsonPointer;
|
|
1129
1131
|
function eachItem(xs, f) {
|
|
@@ -2148,8 +2150,8 @@ var require_json_schema_traverse = __commonJS({
|
|
|
2148
2150
|
post(schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex);
|
|
2149
2151
|
}
|
|
2150
2152
|
}
|
|
2151
|
-
function escapeJsonPtr(
|
|
2152
|
-
return
|
|
2153
|
+
function escapeJsonPtr(str2) {
|
|
2154
|
+
return str2.replace(/~/g, "~0").replace(/\//g, "~1");
|
|
2153
2155
|
}
|
|
2154
2156
|
}
|
|
2155
2157
|
});
|
|
@@ -3213,10 +3215,10 @@ var require_utils = __commonJS({
|
|
|
3213
3215
|
return { host, isIPV6: false };
|
|
3214
3216
|
}
|
|
3215
3217
|
}
|
|
3216
|
-
function findToken(
|
|
3218
|
+
function findToken(str2, token) {
|
|
3217
3219
|
let ind = 0;
|
|
3218
|
-
for (let i = 0; i <
|
|
3219
|
-
if (
|
|
3220
|
+
for (let i = 0; i < str2.length; i++) {
|
|
3221
|
+
if (str2[i] === token) ind++;
|
|
3220
3222
|
}
|
|
3221
3223
|
return ind;
|
|
3222
3224
|
}
|
|
@@ -3953,7 +3955,7 @@ var require_core = __commonJS({
|
|
|
3953
3955
|
var util_1 = require_util();
|
|
3954
3956
|
var $dataRefSchema = require_data();
|
|
3955
3957
|
var uri_1 = require_uri();
|
|
3956
|
-
var defaultRegExp = (
|
|
3958
|
+
var defaultRegExp = (str2, flags) => new RegExp(str2, flags);
|
|
3957
3959
|
defaultRegExp.code = "new RegExp";
|
|
3958
3960
|
var META_IGNORE_OPTIONS = ["removeAdditional", "useDefaults", "coerceTypes"];
|
|
3959
3961
|
var EXT_SCOPE_NAMES = /* @__PURE__ */ new Set([
|
|
@@ -4748,16 +4750,16 @@ var require_ucs2length = __commonJS({
|
|
|
4748
4750
|
"../../node_modules/ajv/dist/runtime/ucs2length.js"(exports) {
|
|
4749
4751
|
"use strict";
|
|
4750
4752
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4751
|
-
function ucs2length(
|
|
4752
|
-
const len =
|
|
4753
|
+
function ucs2length(str2) {
|
|
4754
|
+
const len = str2.length;
|
|
4753
4755
|
let length = 0;
|
|
4754
4756
|
let pos = 0;
|
|
4755
4757
|
let value;
|
|
4756
4758
|
while (pos < len) {
|
|
4757
4759
|
length++;
|
|
4758
|
-
value =
|
|
4760
|
+
value = str2.charCodeAt(pos++);
|
|
4759
4761
|
if (value >= 55296 && value <= 56319 && pos < len) {
|
|
4760
|
-
value =
|
|
4762
|
+
value = str2.charCodeAt(pos);
|
|
4761
4763
|
if ((value & 64512) === 56320)
|
|
4762
4764
|
pos++;
|
|
4763
4765
|
}
|
|
@@ -6640,8 +6642,8 @@ var require_formats = __commonJS({
|
|
|
6640
6642
|
}
|
|
6641
6643
|
var DATE = /^(\d\d\d\d)-(\d\d)-(\d\d)$/;
|
|
6642
6644
|
var DAYS = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
|
|
6643
|
-
function date(
|
|
6644
|
-
const matches = DATE.exec(
|
|
6645
|
+
function date(str2) {
|
|
6646
|
+
const matches = DATE.exec(str2);
|
|
6645
6647
|
if (!matches)
|
|
6646
6648
|
return false;
|
|
6647
6649
|
const year = +matches[1];
|
|
@@ -6660,8 +6662,8 @@ var require_formats = __commonJS({
|
|
|
6660
6662
|
}
|
|
6661
6663
|
var TIME = /^(\d\d):(\d\d):(\d\d(?:\.\d+)?)(z|([+-])(\d\d)(?::?(\d\d))?)?$/i;
|
|
6662
6664
|
function getTime(strictTimeZone) {
|
|
6663
|
-
return function time(
|
|
6664
|
-
const matches = TIME.exec(
|
|
6665
|
+
return function time(str2) {
|
|
6666
|
+
const matches = TIME.exec(str2);
|
|
6665
6667
|
if (!matches)
|
|
6666
6668
|
return false;
|
|
6667
6669
|
const hr = +matches[1];
|
|
@@ -6707,8 +6709,8 @@ var require_formats = __commonJS({
|
|
|
6707
6709
|
var DATE_TIME_SEPARATOR = /t|\s/i;
|
|
6708
6710
|
function getDateTime(strictTimeZone) {
|
|
6709
6711
|
const time = getTime(strictTimeZone);
|
|
6710
|
-
return function date_time(
|
|
6711
|
-
const dateTime =
|
|
6712
|
+
return function date_time(str2) {
|
|
6713
|
+
const dateTime = str2.split(DATE_TIME_SEPARATOR);
|
|
6712
6714
|
return dateTime.length === 2 && date(dateTime[0]) && time(dateTime[1]);
|
|
6713
6715
|
};
|
|
6714
6716
|
}
|
|
@@ -6733,13 +6735,13 @@ var require_formats = __commonJS({
|
|
|
6733
6735
|
}
|
|
6734
6736
|
var NOT_URI_FRAGMENT = /\/|:/;
|
|
6735
6737
|
var URI = /^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)(?:\?(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i;
|
|
6736
|
-
function uri(
|
|
6737
|
-
return NOT_URI_FRAGMENT.test(
|
|
6738
|
+
function uri(str2) {
|
|
6739
|
+
return NOT_URI_FRAGMENT.test(str2) && URI.test(str2);
|
|
6738
6740
|
}
|
|
6739
6741
|
var BYTE = /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/gm;
|
|
6740
|
-
function byte(
|
|
6742
|
+
function byte(str2) {
|
|
6741
6743
|
BYTE.lastIndex = 0;
|
|
6742
|
-
return BYTE.test(
|
|
6744
|
+
return BYTE.test(str2);
|
|
6743
6745
|
}
|
|
6744
6746
|
var MIN_INT32 = -(2 ** 31);
|
|
6745
6747
|
var MAX_INT32 = 2 ** 31 - 1;
|
|
@@ -6753,11 +6755,11 @@ var require_formats = __commonJS({
|
|
|
6753
6755
|
return true;
|
|
6754
6756
|
}
|
|
6755
6757
|
var Z_ANCHOR = /[^\\]\\Z/;
|
|
6756
|
-
function regex(
|
|
6757
|
-
if (Z_ANCHOR.test(
|
|
6758
|
+
function regex(str2) {
|
|
6759
|
+
if (Z_ANCHOR.test(str2))
|
|
6758
6760
|
return false;
|
|
6759
6761
|
try {
|
|
6760
|
-
new RegExp(
|
|
6762
|
+
new RegExp(str2);
|
|
6761
6763
|
return true;
|
|
6762
6764
|
} catch (e) {
|
|
6763
6765
|
return false;
|
|
@@ -7572,9 +7574,17 @@ var screenDescriptorSchema = {
|
|
|
7572
7574
|
hideHostedSiteHeader: { type: "boolean" },
|
|
7573
7575
|
immersive: { type: "boolean" },
|
|
7574
7576
|
showCloseButton: { type: "boolean" },
|
|
7575
|
-
// Keep the native WebView instance warm across re-presentations
|
|
7576
|
-
//
|
|
7577
|
-
keepAlive: { type: "boolean" }
|
|
7577
|
+
// Keep the native WebView instance warm across re-presentations and tab switches
|
|
7578
|
+
// (per screen id, LRU — WebViewKeepAliveStore on both platforms).
|
|
7579
|
+
keepAlive: { type: "boolean" },
|
|
7580
|
+
// Hosted-site polish — native hosts honoured these before the validator knew them.
|
|
7581
|
+
pinHostedHeader: { type: "boolean" },
|
|
7582
|
+
internalLinksAsScreens: { type: "boolean" },
|
|
7583
|
+
respectHttpCache: { type: "boolean" },
|
|
7584
|
+
coverBandColor: { type: "string" },
|
|
7585
|
+
// RFC 0062 — binary-shipped chrome hiding for a hosted site (no page script over the air).
|
|
7586
|
+
hideWixAds: { type: "boolean" },
|
|
7587
|
+
hideHostedSiteFooter: { type: "boolean" }
|
|
7578
7588
|
}
|
|
7579
7589
|
}
|
|
7580
7590
|
}
|
|
@@ -8007,6 +8017,446 @@ function workerSubtreePolicyErrors(policy) {
|
|
|
8007
8017
|
return out;
|
|
8008
8018
|
}
|
|
8009
8019
|
|
|
8020
|
+
// ../../core/ts/src/rich-content-limits.generated.ts
|
|
8021
|
+
var RICH_CONTENT_LIMITS = Object.freeze({ maxBytes: 262144, maxNodes: 5e3, maxDepth: 16 });
|
|
8022
|
+
|
|
8023
|
+
// ../../core/ts/src/rich-content.ts
|
|
8024
|
+
var RICH_CONTENT_LIMITS2 = RICH_CONTENT_LIMITS;
|
|
8025
|
+
var RICH_CONTENT_CARD_LABELS = Object.freeze({
|
|
8026
|
+
EMBED: "Embedded content",
|
|
8027
|
+
HTML: "Embedded content",
|
|
8028
|
+
APP_EMBED: "Embedded content",
|
|
8029
|
+
LINK_PREVIEW: "Link",
|
|
8030
|
+
POLL: "Poll",
|
|
8031
|
+
FILE: "File",
|
|
8032
|
+
AUDIO: "Audio",
|
|
8033
|
+
MAP: "Map",
|
|
8034
|
+
GIF: "GIF",
|
|
8035
|
+
VIDEO: "Video"
|
|
8036
|
+
});
|
|
8037
|
+
var isObj = (v) => typeof v === "object" && v !== null && !Array.isArray(v);
|
|
8038
|
+
var str = (v) => typeof v === "string" ? v : "";
|
|
8039
|
+
var kids = (n) => Array.isArray(n.nodes) ? n.nodes : [];
|
|
8040
|
+
var typeOf = (n) => typeof n.type === "string" ? n.type : "";
|
|
8041
|
+
function at(v, ...keys) {
|
|
8042
|
+
let c = v;
|
|
8043
|
+
for (const k of keys) {
|
|
8044
|
+
if (!isObj(c)) return void 0;
|
|
8045
|
+
c = c[k];
|
|
8046
|
+
}
|
|
8047
|
+
return c;
|
|
8048
|
+
}
|
|
8049
|
+
function int(v) {
|
|
8050
|
+
return typeof v === "number" && Number.isInteger(v) && v >= -2147483648 && v <= 2147483647 ? v : void 0;
|
|
8051
|
+
}
|
|
8052
|
+
var LINK = /^(https?:\/\/[^\s/?#]\S*|mailto:\S+|tel:\S+)$/i;
|
|
8053
|
+
var MEDIA = /^https:\/\/[^\s/?#]\S*$/i;
|
|
8054
|
+
var AUTHORITY = /^https?:\/\/([^/?#]*)/i;
|
|
8055
|
+
function richContentLinkUrl(raw) {
|
|
8056
|
+
if (typeof raw !== "string") return void 0;
|
|
8057
|
+
const url = raw.trim();
|
|
8058
|
+
return LINK.test(url) ? url : void 0;
|
|
8059
|
+
}
|
|
8060
|
+
function richContentMediaUrl(raw) {
|
|
8061
|
+
return typeof raw === "string" && MEDIA.test(raw) ? raw : void 0;
|
|
8062
|
+
}
|
|
8063
|
+
var isHttp = (url) => /^https?:\/\//i.test(url);
|
|
8064
|
+
var asciiLower = (s) => s.replace(/[A-Z]/g, (c) => c.toLowerCase());
|
|
8065
|
+
function richContentHost(url) {
|
|
8066
|
+
const m = AUTHORITY.exec(url);
|
|
8067
|
+
if (m) {
|
|
8068
|
+
const authority = m[1].slice(m[1].lastIndexOf("@") + 1);
|
|
8069
|
+
if (authority.startsWith("[")) {
|
|
8070
|
+
const close = authority.indexOf("]");
|
|
8071
|
+
return asciiLower(close >= 0 ? authority.slice(0, close + 1) : authority);
|
|
8072
|
+
}
|
|
8073
|
+
const colon2 = authority.indexOf(":");
|
|
8074
|
+
return asciiLower(colon2 >= 0 ? authority.slice(0, colon2) : authority);
|
|
8075
|
+
}
|
|
8076
|
+
const colon = url.indexOf(":");
|
|
8077
|
+
return colon > 0 && /^(mailto|tel)$/i.test(url.slice(0, colon)) ? url.slice(colon + 1) : "";
|
|
8078
|
+
}
|
|
8079
|
+
var VIDEO_CARD_HOSTS = /* @__PURE__ */ new Set([
|
|
8080
|
+
"youtube.com",
|
|
8081
|
+
"www.youtube.com",
|
|
8082
|
+
"m.youtube.com",
|
|
8083
|
+
"youtu.be",
|
|
8084
|
+
"vimeo.com",
|
|
8085
|
+
"www.vimeo.com",
|
|
8086
|
+
"player.vimeo.com"
|
|
8087
|
+
]);
|
|
8088
|
+
var sameStyle = (a, b) => a.bold === b.bold && a.italic === b.italic && a.underline === b.underline && a.link === b.link;
|
|
8089
|
+
function pushSpan(out, s) {
|
|
8090
|
+
if (s.text === "") return;
|
|
8091
|
+
const last = out[out.length - 1];
|
|
8092
|
+
if (last && sameStyle(last, s)) last.text += s.text;
|
|
8093
|
+
else out.push(s);
|
|
8094
|
+
}
|
|
8095
|
+
function spanOf(textNode) {
|
|
8096
|
+
const text2 = str(at(textNode, "textData", "text"));
|
|
8097
|
+
if (text2 === "") return null;
|
|
8098
|
+
let bold = false, italic = false, underline = false;
|
|
8099
|
+
let link;
|
|
8100
|
+
const decorations = at(textNode, "textData", "decorations");
|
|
8101
|
+
if (Array.isArray(decorations)) {
|
|
8102
|
+
for (const d of decorations) {
|
|
8103
|
+
if (!isObj(d)) continue;
|
|
8104
|
+
switch (d.type) {
|
|
8105
|
+
case "BOLD":
|
|
8106
|
+
if (!(typeof d.fontWeightValue === "number" && d.fontWeightValue < 600)) bold = true;
|
|
8107
|
+
break;
|
|
8108
|
+
case "ITALIC":
|
|
8109
|
+
if (d.italicData !== false) italic = true;
|
|
8110
|
+
break;
|
|
8111
|
+
case "UNDERLINE":
|
|
8112
|
+
if (d.underlineData !== false) underline = true;
|
|
8113
|
+
break;
|
|
8114
|
+
case "LINK": {
|
|
8115
|
+
const url = richContentLinkUrl(at(d, "linkData", "link", "url"));
|
|
8116
|
+
if (url !== void 0) link = url;
|
|
8117
|
+
break;
|
|
8118
|
+
}
|
|
8119
|
+
default:
|
|
8120
|
+
break;
|
|
8121
|
+
}
|
|
8122
|
+
}
|
|
8123
|
+
}
|
|
8124
|
+
const span = { text: text2 };
|
|
8125
|
+
if (bold) span.bold = true;
|
|
8126
|
+
if (italic) span.italic = true;
|
|
8127
|
+
if (underline) span.underline = true;
|
|
8128
|
+
if (link !== void 0) span.link = link;
|
|
8129
|
+
return span;
|
|
8130
|
+
}
|
|
8131
|
+
function spansOf(node) {
|
|
8132
|
+
const out = [];
|
|
8133
|
+
for (const k of kids(node)) {
|
|
8134
|
+
if (!isObj(k) || typeOf(k) !== "TEXT") continue;
|
|
8135
|
+
const s = spanOf(k);
|
|
8136
|
+
if (s) pushSpan(out, s);
|
|
8137
|
+
}
|
|
8138
|
+
return out;
|
|
8139
|
+
}
|
|
8140
|
+
function textOf(node) {
|
|
8141
|
+
let out = "";
|
|
8142
|
+
for (const k of kids(node)) if (isObj(k) && typeOf(k) === "TEXT") out += str(at(k, "textData", "text"));
|
|
8143
|
+
return out;
|
|
8144
|
+
}
|
|
8145
|
+
function plainText(node) {
|
|
8146
|
+
if (typeOf(node) === "TEXT") return str(at(node, "textData", "text"));
|
|
8147
|
+
const children = kids(node).filter(isObj);
|
|
8148
|
+
const sep = children.every((c) => typeOf(c) === "TEXT") ? "" : "\n";
|
|
8149
|
+
return children.map(plainText).join(sep);
|
|
8150
|
+
}
|
|
8151
|
+
var PATH_SHAPED = /^[0-9.]+$/;
|
|
8152
|
+
var usableId = (raw) => raw !== "" && !PATH_SHAPED.test(raw) && !raw.includes("/") && !raw.includes("$");
|
|
8153
|
+
var Ids = class {
|
|
8154
|
+
constructor() {
|
|
8155
|
+
__publicField(this, "claimed", /* @__PURE__ */ new Set());
|
|
8156
|
+
}
|
|
8157
|
+
claim(n, path) {
|
|
8158
|
+
const raw = n.id;
|
|
8159
|
+
const id = typeof raw === "string" && usableId(raw) && !this.claimed.has(raw) ? raw : path;
|
|
8160
|
+
this.claimed.add(id);
|
|
8161
|
+
return id;
|
|
8162
|
+
}
|
|
8163
|
+
};
|
|
8164
|
+
function alignOf(v) {
|
|
8165
|
+
switch (v) {
|
|
8166
|
+
case "LEFT":
|
|
8167
|
+
return "left";
|
|
8168
|
+
case "CENTER":
|
|
8169
|
+
return "center";
|
|
8170
|
+
case "RIGHT":
|
|
8171
|
+
return "right";
|
|
8172
|
+
case "JUSTIFY":
|
|
8173
|
+
return "justify";
|
|
8174
|
+
default:
|
|
8175
|
+
return void 0;
|
|
8176
|
+
}
|
|
8177
|
+
}
|
|
8178
|
+
var CARD_TYPES = /* @__PURE__ */ new Set(["EMBED", "HTML", "APP_EMBED", "LINK_PREVIEW", "POLL", "FILE", "AUDIO", "MAP", "GIF"]);
|
|
8179
|
+
function cardFields(n, type) {
|
|
8180
|
+
const firstLink = (...candidates) => {
|
|
8181
|
+
for (const c of candidates) {
|
|
8182
|
+
const u = richContentLinkUrl(c);
|
|
8183
|
+
if (u !== void 0) return u;
|
|
8184
|
+
}
|
|
8185
|
+
return void 0;
|
|
8186
|
+
};
|
|
8187
|
+
switch (type) {
|
|
8188
|
+
case "EMBED":
|
|
8189
|
+
return { title: str(at(n, "embedData", "oembed", "title")), url: firstLink(at(n, "embedData", "oembed", "url"), at(n, "embedData", "src")) };
|
|
8190
|
+
case "HTML":
|
|
8191
|
+
return { title: "", url: firstLink(at(n, "htmlData", "url")) };
|
|
8192
|
+
case "APP_EMBED":
|
|
8193
|
+
return { title: str(at(n, "appEmbedData", "name")), url: firstLink(at(n, "appEmbedData", "url")) };
|
|
8194
|
+
case "LINK_PREVIEW":
|
|
8195
|
+
return { title: str(at(n, "linkPreviewData", "title")), url: firstLink(at(n, "linkPreviewData", "link", "url")) };
|
|
8196
|
+
case "POLL":
|
|
8197
|
+
return { title: str(at(n, "pollData", "poll", "title")) };
|
|
8198
|
+
case "FILE":
|
|
8199
|
+
return { title: str(at(n, "fileData", "name")), url: firstLink(at(n, "fileData", "src", "url")) };
|
|
8200
|
+
case "AUDIO":
|
|
8201
|
+
return { title: str(at(n, "audioData", "name")), url: firstLink(at(n, "audioData", "audio", "src", "url")) };
|
|
8202
|
+
case "MAP": {
|
|
8203
|
+
const location = str(at(n, "mapData", "mapSettings", "locationName"));
|
|
8204
|
+
return { title: location !== "" ? location : str(at(n, "mapData", "mapSettings", "address")) };
|
|
8205
|
+
}
|
|
8206
|
+
case "GIF":
|
|
8207
|
+
return { title: "", url: firstLink(at(n, "gifData", "original", "gif")) };
|
|
8208
|
+
default:
|
|
8209
|
+
return { title: "" };
|
|
8210
|
+
}
|
|
8211
|
+
}
|
|
8212
|
+
function card(id, nodeType, title, url) {
|
|
8213
|
+
const b = { kind: "card", id, title, nodeType };
|
|
8214
|
+
if (url !== void 0) b.url = url;
|
|
8215
|
+
return b;
|
|
8216
|
+
}
|
|
8217
|
+
function forceBold(blocks) {
|
|
8218
|
+
return blocks.map((b) => {
|
|
8219
|
+
switch (b.kind) {
|
|
8220
|
+
case "paragraph": {
|
|
8221
|
+
const spans = [];
|
|
8222
|
+
for (const s of b.spans) pushSpan(spans, { ...s, bold: true });
|
|
8223
|
+
return { ...b, spans };
|
|
8224
|
+
}
|
|
8225
|
+
case "quote":
|
|
8226
|
+
return { ...b, blocks: forceBold(b.blocks) };
|
|
8227
|
+
case "list":
|
|
8228
|
+
return { ...b, items: b.items.map((it) => ({ id: it.id, blocks: forceBold(it.blocks) })) };
|
|
8229
|
+
default:
|
|
8230
|
+
return b;
|
|
8231
|
+
}
|
|
8232
|
+
});
|
|
8233
|
+
}
|
|
8234
|
+
function blocksOf(ids, nodes, prefix) {
|
|
8235
|
+
const out = [];
|
|
8236
|
+
nodes.forEach((n, i) => {
|
|
8237
|
+
if (isObj(n)) out.push(...blockOf(ids, n, prefix === "" ? String(i) : `${prefix}.${i}`));
|
|
8238
|
+
});
|
|
8239
|
+
return out;
|
|
8240
|
+
}
|
|
8241
|
+
function blockOf(ids, n, path) {
|
|
8242
|
+
const type = typeOf(n);
|
|
8243
|
+
switch (type) {
|
|
8244
|
+
case "PARAGRAPH": {
|
|
8245
|
+
const b = { kind: "paragraph", id: ids.claim(n, path), spans: spansOf(n) };
|
|
8246
|
+
const align = alignOf(at(n, "paragraphData", "textStyle", "textAlignment"));
|
|
8247
|
+
if (align) b.align = align;
|
|
8248
|
+
const indent = int(at(n, "paragraphData", "indentation"));
|
|
8249
|
+
if (indent !== void 0 && indent > 0) b.indent = indent;
|
|
8250
|
+
return [b];
|
|
8251
|
+
}
|
|
8252
|
+
case "HEADING": {
|
|
8253
|
+
const raw = int(at(n, "headingData", "level"));
|
|
8254
|
+
const level = raw !== void 0 && raw >= 1 && raw <= 6 ? raw : 2;
|
|
8255
|
+
return [{ kind: "heading", id: ids.claim(n, path), level, spans: spansOf(n) }];
|
|
8256
|
+
}
|
|
8257
|
+
case "BULLETED_LIST":
|
|
8258
|
+
case "ORDERED_LIST": {
|
|
8259
|
+
const ordered = type === "ORDERED_LIST";
|
|
8260
|
+
const b = { kind: "list", id: ids.claim(n, path), ordered, items: [] };
|
|
8261
|
+
const start = int(at(n, "orderedListData", "start"));
|
|
8262
|
+
if (ordered && start !== void 0 && start !== 1) b.start = start;
|
|
8263
|
+
kids(n).forEach((k, j) => {
|
|
8264
|
+
if (!isObj(k) || typeOf(k) !== "LIST_ITEM") return;
|
|
8265
|
+
const itemPath = `${path}.${j}`;
|
|
8266
|
+
const itemId = ids.claim(k, itemPath);
|
|
8267
|
+
b.items.push({ id: itemId, blocks: blocksOf(ids, kids(k), itemPath) });
|
|
8268
|
+
});
|
|
8269
|
+
return [b];
|
|
8270
|
+
}
|
|
8271
|
+
case "BLOCKQUOTE": {
|
|
8272
|
+
const id = ids.claim(n, path);
|
|
8273
|
+
return [{ kind: "quote", id, blocks: blocksOf(ids, kids(n), path) }];
|
|
8274
|
+
}
|
|
8275
|
+
case "CODE_BLOCK":
|
|
8276
|
+
return [{ kind: "code", id: ids.claim(n, path), text: textOf(n) }];
|
|
8277
|
+
case "DIVIDER":
|
|
8278
|
+
return [{ kind: "divider", id: ids.claim(n, path) }];
|
|
8279
|
+
case "IMAGE": {
|
|
8280
|
+
const src = richContentMediaUrl(at(n, "imageData", "image", "src", "url"));
|
|
8281
|
+
if (src === void 0) return [];
|
|
8282
|
+
const b = { kind: "image", id: ids.claim(n, path), src };
|
|
8283
|
+
const alt = str(at(n, "imageData", "altText"));
|
|
8284
|
+
if (alt !== "") b.alt = alt;
|
|
8285
|
+
let caption = str(at(n, "imageData", "caption"));
|
|
8286
|
+
if (caption === "") {
|
|
8287
|
+
const node = kids(n).find((k) => isObj(k) && typeOf(k) === "CAPTION");
|
|
8288
|
+
if (isObj(node)) caption = textOf(node);
|
|
8289
|
+
}
|
|
8290
|
+
if (caption !== "") b.caption = caption;
|
|
8291
|
+
const w = int(at(n, "imageData", "image", "width"));
|
|
8292
|
+
if (w !== void 0 && w > 0) b.width = w;
|
|
8293
|
+
const h = int(at(n, "imageData", "image", "height"));
|
|
8294
|
+
if (h !== void 0 && h > 0) b.height = h;
|
|
8295
|
+
return [b];
|
|
8296
|
+
}
|
|
8297
|
+
case "GALLERY": {
|
|
8298
|
+
const images = [];
|
|
8299
|
+
const items = at(n, "galleryData", "items");
|
|
8300
|
+
if (Array.isArray(items)) {
|
|
8301
|
+
for (const item of items) {
|
|
8302
|
+
const src = richContentMediaUrl(at(item, "image", "media", "src", "url"));
|
|
8303
|
+
if (src === void 0) continue;
|
|
8304
|
+
const image2 = { src };
|
|
8305
|
+
const alt = str(at(item, "altText"));
|
|
8306
|
+
if (alt !== "") image2.alt = alt;
|
|
8307
|
+
images.push(image2);
|
|
8308
|
+
}
|
|
8309
|
+
}
|
|
8310
|
+
return images.length ? [{ kind: "gallery", id: ids.claim(n, path), images }] : [];
|
|
8311
|
+
}
|
|
8312
|
+
case "VIDEO": {
|
|
8313
|
+
const raw = at(n, "videoData", "video", "src", "url");
|
|
8314
|
+
const link = richContentLinkUrl(raw);
|
|
8315
|
+
if (link !== void 0 && isHttp(link) && VIDEO_CARD_HOSTS.has(richContentHost(link))) {
|
|
8316
|
+
return [card(ids.claim(n, path), "VIDEO", str(at(n, "videoData", "title")), link)];
|
|
8317
|
+
}
|
|
8318
|
+
const src = richContentMediaUrl(raw);
|
|
8319
|
+
if (src === void 0) return [];
|
|
8320
|
+
const b = { kind: "video", id: ids.claim(n, path), src };
|
|
8321
|
+
const poster = richContentMediaUrl(at(n, "videoData", "thumbnail", "src", "url"));
|
|
8322
|
+
if (poster !== void 0) b.poster = poster;
|
|
8323
|
+
return [b];
|
|
8324
|
+
}
|
|
8325
|
+
case "BUTTON":
|
|
8326
|
+
case "LINK_BUTTON": {
|
|
8327
|
+
const url = richContentLinkUrl(at(n, "buttonData", "link", "url"));
|
|
8328
|
+
if (url === void 0) return [];
|
|
8329
|
+
return [{ kind: "button", id: ids.claim(n, path), label: str(at(n, "buttonData", "text")), url }];
|
|
8330
|
+
}
|
|
8331
|
+
case "TABLE": {
|
|
8332
|
+
const rows = [];
|
|
8333
|
+
for (const r of kids(n)) {
|
|
8334
|
+
if (!isObj(r) || typeOf(r) !== "TABLE_ROW") continue;
|
|
8335
|
+
rows.push(kids(r).filter(isObj).filter((c) => typeOf(c) === "TABLE_CELL").map((c) => kids(c).filter(isObj).map(textOf).join("\n")));
|
|
8336
|
+
}
|
|
8337
|
+
return rows.length ? [{ kind: "table", id: ids.claim(n, path), rows }] : [];
|
|
8338
|
+
}
|
|
8339
|
+
case "COLLAPSIBLE_LIST": {
|
|
8340
|
+
const out = [];
|
|
8341
|
+
kids(n).forEach((item, j) => {
|
|
8342
|
+
if (!isObj(item)) return;
|
|
8343
|
+
kids(item).forEach((part, k) => {
|
|
8344
|
+
if (!isObj(part)) return;
|
|
8345
|
+
const bs = blocksOf(ids, kids(part), `${path}.${j}.${k}`);
|
|
8346
|
+
out.push(...typeOf(part) === "COLLAPSIBLE_ITEM_TITLE" ? forceBold(bs) : bs);
|
|
8347
|
+
});
|
|
8348
|
+
});
|
|
8349
|
+
return out;
|
|
8350
|
+
}
|
|
8351
|
+
case "TEXT": {
|
|
8352
|
+
const s = spanOf(n);
|
|
8353
|
+
return s ? [{ kind: "paragraph", id: ids.claim(n, path), spans: [s] }] : [];
|
|
8354
|
+
}
|
|
8355
|
+
default: {
|
|
8356
|
+
if (CARD_TYPES.has(type)) {
|
|
8357
|
+
const { title, url } = cardFields(n, type);
|
|
8358
|
+
return [card(ids.claim(n, path), type, title, url)];
|
|
8359
|
+
}
|
|
8360
|
+
const text2 = plainText(n);
|
|
8361
|
+
return text2.trim() !== "" ? [{ kind: "paragraph", id: ids.claim(n, path), spans: [{ text: text2 }] }] : [];
|
|
8362
|
+
}
|
|
8363
|
+
}
|
|
8364
|
+
}
|
|
8365
|
+
function utf8Length(s, cap) {
|
|
8366
|
+
let n = 0;
|
|
8367
|
+
for (let i = 0; i < s.length; i++) {
|
|
8368
|
+
const c = s.charCodeAt(i);
|
|
8369
|
+
if (c < 128) n += 1;
|
|
8370
|
+
else if (c < 2048) n += 2;
|
|
8371
|
+
else if (c >= 55296 && c <= 56319 && i + 1 < s.length && (s.charCodeAt(i + 1) & 64512) === 56320) {
|
|
8372
|
+
n += 4;
|
|
8373
|
+
i++;
|
|
8374
|
+
} else n += 3;
|
|
8375
|
+
if (n > cap) return n;
|
|
8376
|
+
}
|
|
8377
|
+
return n;
|
|
8378
|
+
}
|
|
8379
|
+
function repairLoneSurrogateEscapes(json) {
|
|
8380
|
+
if (!json.includes("\\u")) return json;
|
|
8381
|
+
const hexAt = (i) => {
|
|
8382
|
+
const h = json.slice(i, i + 4);
|
|
8383
|
+
return /^[0-9A-Fa-f]{4}$/.test(h) ? parseInt(h, 16) : -1;
|
|
8384
|
+
};
|
|
8385
|
+
let out = "";
|
|
8386
|
+
let inString = false;
|
|
8387
|
+
for (let i = 0; i < json.length; i++) {
|
|
8388
|
+
const c = json[i];
|
|
8389
|
+
if (!inString) {
|
|
8390
|
+
if (c === '"') inString = true;
|
|
8391
|
+
out += c;
|
|
8392
|
+
continue;
|
|
8393
|
+
}
|
|
8394
|
+
if (c === '"') {
|
|
8395
|
+
inString = false;
|
|
8396
|
+
out += c;
|
|
8397
|
+
continue;
|
|
8398
|
+
}
|
|
8399
|
+
if (c !== "\\" || i + 1 >= json.length) {
|
|
8400
|
+
out += c;
|
|
8401
|
+
continue;
|
|
8402
|
+
}
|
|
8403
|
+
const e = json[i + 1];
|
|
8404
|
+
const v = e === "u" ? hexAt(i + 2) : -1;
|
|
8405
|
+
if (v < 0) {
|
|
8406
|
+
out += c + e;
|
|
8407
|
+
i++;
|
|
8408
|
+
continue;
|
|
8409
|
+
}
|
|
8410
|
+
if (v >= 55296 && v <= 56319) {
|
|
8411
|
+
const low = json[i + 6] === "\\" && json[i + 7] === "u" ? hexAt(i + 8) : -1;
|
|
8412
|
+
if (low >= 56320 && low <= 57343) {
|
|
8413
|
+
out += json.slice(i, i + 12);
|
|
8414
|
+
i += 11;
|
|
8415
|
+
continue;
|
|
8416
|
+
}
|
|
8417
|
+
out += "\\ufffd";
|
|
8418
|
+
i += 5;
|
|
8419
|
+
continue;
|
|
8420
|
+
}
|
|
8421
|
+
if (v >= 56320 && v <= 57343) {
|
|
8422
|
+
out += "\\ufffd";
|
|
8423
|
+
i += 5;
|
|
8424
|
+
continue;
|
|
8425
|
+
}
|
|
8426
|
+
out += json.slice(i, i + 6);
|
|
8427
|
+
i += 5;
|
|
8428
|
+
}
|
|
8429
|
+
return out;
|
|
8430
|
+
}
|
|
8431
|
+
function measure(nodes, limits) {
|
|
8432
|
+
let count = 0;
|
|
8433
|
+
const work = [];
|
|
8434
|
+
for (let i = nodes.length - 1; i >= 0; i--) work.push([nodes[i], 1]);
|
|
8435
|
+
while (work.length) {
|
|
8436
|
+
const [n, depth] = work.pop();
|
|
8437
|
+
if (!isObj(n)) continue;
|
|
8438
|
+
if (depth > limits.maxDepth) return "too_deep";
|
|
8439
|
+
count++;
|
|
8440
|
+
const k = kids(n);
|
|
8441
|
+
for (let i = k.length - 1; i >= 0; i--) work.push([k[i], depth + 1]);
|
|
8442
|
+
}
|
|
8443
|
+
return count > limits.maxNodes ? "too_many_nodes" : null;
|
|
8444
|
+
}
|
|
8445
|
+
function layoutRichContent(json, limits = RICH_CONTENT_LIMITS2) {
|
|
8446
|
+
if (json === "") return { blocks: [] };
|
|
8447
|
+
if (utf8Length(json, limits.maxBytes) > limits.maxBytes) return { rejected: "too_large" };
|
|
8448
|
+
let parsed;
|
|
8449
|
+
try {
|
|
8450
|
+
parsed = JSON.parse(repairLoneSurrogateEscapes(json));
|
|
8451
|
+
} catch {
|
|
8452
|
+
return { rejected: "invalid_json" };
|
|
8453
|
+
}
|
|
8454
|
+
if (!isObj(parsed) || !Array.isArray(parsed.nodes)) return { rejected: "not_a_document" };
|
|
8455
|
+
const over = measure(parsed.nodes, limits);
|
|
8456
|
+
if (over) return { rejected: over };
|
|
8457
|
+
return { blocks: blocksOf(new Ids(), parsed.nodes, "") };
|
|
8458
|
+
}
|
|
8459
|
+
|
|
8010
8460
|
// ../../core/dev-server/src/builder.ts
|
|
8011
8461
|
var auto = (_kind) => "";
|
|
8012
8462
|
function slugId(prefix, key) {
|
|
@@ -8038,7 +8488,7 @@ function text(text2, style, opts) {
|
|
|
8038
8488
|
body: { package: "himalaya", type: "Text", props: { text: text2, style, color: opts?.color, maxLines: opts?.maxLines, collapseWhenEmpty: opts?.collapseWhenEmpty, animateValue: opts?.animateValue, animateReveal: opts?.animateReveal, markdown: opts?.markdown, textDirection: opts?.textDirection } }
|
|
8039
8489
|
};
|
|
8040
8490
|
}
|
|
8041
|
-
function
|
|
8491
|
+
function card2(children, opts) {
|
|
8042
8492
|
return {
|
|
8043
8493
|
id: opts?.id ?? auto("card"),
|
|
8044
8494
|
body: { package: "himalaya", type: "Card", props: { children } }
|
|
@@ -8146,6 +8596,22 @@ function legend(props, opts) {
|
|
|
8146
8596
|
function dataTable(props, opts) {
|
|
8147
8597
|
return { id: opts?.id ?? auto("data_table"), body: { package: "himalaya", type: "DataTable", props } };
|
|
8148
8598
|
}
|
|
8599
|
+
var RICH_CONTENT_PATH = /^(?:\$service:[A-Za-z][A-Za-z0-9_-]{0,63}\.[A-Za-z0-9_.[\]-]+|\$item\.[A-Za-z0-9_]+)$/;
|
|
8600
|
+
function richContent(props, opts) {
|
|
8601
|
+
if (!opts?.id) throw new Error("richContent: an explicit id is required \u2014 child test ids are `<id>/<blockId>` (invariant 27)");
|
|
8602
|
+
const hasPath = props.documentJsonPath !== void 0;
|
|
8603
|
+
const hasLiteral = props.documentJson !== void 0;
|
|
8604
|
+
if (hasPath === hasLiteral) throw new Error("richContent: pass exactly one of documentJsonPath and documentJson");
|
|
8605
|
+
if (hasPath && !RICH_CONTENT_PATH.test(props.documentJsonPath)) {
|
|
8606
|
+
throw new Error(`richContent: documentJsonPath must be $service:<service>.<path> or $item.<field>, got "${props.documentJsonPath}"`);
|
|
8607
|
+
}
|
|
8608
|
+
if (hasLiteral) {
|
|
8609
|
+
const laid = layoutRichContent(props.documentJson);
|
|
8610
|
+
if ("rejected" in laid) throw new Error(`richContent: documentJson rejected (${laid.rejected})`);
|
|
8611
|
+
}
|
|
8612
|
+
const node = { id: opts.id, body: { package: "himalaya", type: "RichContent", props } };
|
|
8613
|
+
return opts.modifiers ? withModifiers(node, opts.modifiers) : node;
|
|
8614
|
+
}
|
|
8149
8615
|
function spacer(opts) {
|
|
8150
8616
|
const props = {};
|
|
8151
8617
|
if (opts?.value !== void 0) props.value = opts.value;
|
|
@@ -8635,7 +9101,7 @@ export {
|
|
|
8635
9101
|
banner,
|
|
8636
9102
|
bottomSheet,
|
|
8637
9103
|
button,
|
|
8638
|
-
card,
|
|
9104
|
+
card2 as card,
|
|
8639
9105
|
carousel,
|
|
8640
9106
|
chart,
|
|
8641
9107
|
chip,
|
|
@@ -8685,6 +9151,7 @@ export {
|
|
|
8685
9151
|
popover,
|
|
8686
9152
|
progressBar,
|
|
8687
9153
|
rating,
|
|
9154
|
+
richContent,
|
|
8688
9155
|
richText,
|
|
8689
9156
|
richTextField,
|
|
8690
9157
|
rive,
|