@bettercms-ai/types 1.24.0 → 1.26.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/index.js CHANGED
@@ -2156,6 +2156,482 @@ var PAGE_CONTENT_ANCHOR_ID = "page-content";
2156
2156
  var NAVIGATION_SECTION_ID = "navigation";
2157
2157
  var FOOTER_SECTION_ID = "footer";
2158
2158
 
2159
+ // src/dock-icon-names.ts
2160
+ var DOCK_ICON_NAMES = [
2161
+ "access-denied",
2162
+ "activity",
2163
+ "add",
2164
+ "add-circle",
2165
+ "add-comment",
2166
+ "add-document",
2167
+ "add-user",
2168
+ "api",
2169
+ "archive",
2170
+ "arrow-down",
2171
+ "arrow-left",
2172
+ "arrow-right",
2173
+ "arrow-top-right",
2174
+ "arrow-up",
2175
+ "asterisk",
2176
+ "bar-chart",
2177
+ "basket",
2178
+ "bell",
2179
+ "bill",
2180
+ "binary-document",
2181
+ "block-content",
2182
+ "block-element",
2183
+ "blockquote",
2184
+ "bold",
2185
+ "bolt",
2186
+ "book",
2187
+ "bookmark",
2188
+ "bookmark-filled",
2189
+ "bottle",
2190
+ "bug",
2191
+ "bulb-filled",
2192
+ "bulb-outline",
2193
+ "calendar",
2194
+ "case",
2195
+ "chart-upward",
2196
+ "checkmark",
2197
+ "checkmark-circle",
2198
+ "chevron-down",
2199
+ "chevron-left",
2200
+ "chevron-right",
2201
+ "chevron-up",
2202
+ "circle",
2203
+ "clipboard",
2204
+ "clipboard-image",
2205
+ "clock",
2206
+ "close",
2207
+ "close-circle",
2208
+ "code",
2209
+ "code-block",
2210
+ "cog",
2211
+ "collapse",
2212
+ "color-wheel",
2213
+ "comment",
2214
+ "component",
2215
+ "compose",
2216
+ "compose-sparkles",
2217
+ "confetti",
2218
+ "controls",
2219
+ "copy",
2220
+ "credit-card",
2221
+ "crop",
2222
+ "cube",
2223
+ "dashboard",
2224
+ "database",
2225
+ "desktop",
2226
+ "diamond",
2227
+ "document",
2228
+ "document-pdf",
2229
+ "document-remove",
2230
+ "document-sheet",
2231
+ "document-text",
2232
+ "document-video",
2233
+ "document-word",
2234
+ "document-zip",
2235
+ "documents",
2236
+ "dot",
2237
+ "double-chevron-down",
2238
+ "double-chevron-left",
2239
+ "double-chevron-right",
2240
+ "double-chevron-up",
2241
+ "double-quote",
2242
+ "download",
2243
+ "drag-handle",
2244
+ "drop",
2245
+ "earth-americas",
2246
+ "earth-globe",
2247
+ "edit",
2248
+ "ellipsis-horizontal",
2249
+ "ellipsis-vertical",
2250
+ "empty",
2251
+ "enter",
2252
+ "enter-right",
2253
+ "envelope",
2254
+ "equal",
2255
+ "error-filled",
2256
+ "error-outline",
2257
+ "error-screen",
2258
+ "expand",
2259
+ "eye-closed",
2260
+ "eye-open",
2261
+ "face-happy",
2262
+ "face-indifferent",
2263
+ "face-sad",
2264
+ "feedback",
2265
+ "filter",
2266
+ "folder",
2267
+ "generate",
2268
+ "github",
2269
+ "groq",
2270
+ "hash",
2271
+ "heart",
2272
+ "heart-filled",
2273
+ "help-circle",
2274
+ "highlight",
2275
+ "home",
2276
+ "ice-cream",
2277
+ "image",
2278
+ "image-remove",
2279
+ "images",
2280
+ "inbox",
2281
+ "info-filled",
2282
+ "info-outline",
2283
+ "inline",
2284
+ "inline-element",
2285
+ "insert-above",
2286
+ "insert-below",
2287
+ "italic",
2288
+ "joystick",
2289
+ "json",
2290
+ "launch",
2291
+ "leave",
2292
+ "lemon",
2293
+ "link",
2294
+ "link-removed",
2295
+ "linkedin",
2296
+ "list",
2297
+ "lock",
2298
+ "logo-js",
2299
+ "logo-ts",
2300
+ "marker",
2301
+ "marker-removed",
2302
+ "master-detail",
2303
+ "menu",
2304
+ "microphone",
2305
+ "microphone-slash",
2306
+ "mobile-device",
2307
+ "moon",
2308
+ "number",
2309
+ "ok-hand",
2310
+ "olist",
2311
+ "overage",
2312
+ "package",
2313
+ "panel-left",
2314
+ "panel-right",
2315
+ "pause",
2316
+ "pin",
2317
+ "pin-filled",
2318
+ "pin-removed",
2319
+ "play",
2320
+ "plug",
2321
+ "presentation",
2322
+ "progress-50",
2323
+ "progress-75",
2324
+ "projects",
2325
+ "publish",
2326
+ "read-only",
2327
+ "redo",
2328
+ "refresh",
2329
+ "remove",
2330
+ "remove-circle",
2331
+ "reset",
2332
+ "restore",
2333
+ "retrieve",
2334
+ "retry",
2335
+ "revert",
2336
+ "robot",
2337
+ "rocket",
2338
+ "schema",
2339
+ "search",
2340
+ "select",
2341
+ "share",
2342
+ "sort",
2343
+ "sparkle",
2344
+ "sparkles",
2345
+ "spinner",
2346
+ "split-horizontal",
2347
+ "split-vertical",
2348
+ "square",
2349
+ "stack",
2350
+ "stack-compact",
2351
+ "star",
2352
+ "star-filled",
2353
+ "stop",
2354
+ "strikethrough",
2355
+ "string",
2356
+ "sun",
2357
+ "sync",
2358
+ "tablet-device",
2359
+ "tag",
2360
+ "tags",
2361
+ "target",
2362
+ "task",
2363
+ "terminal",
2364
+ "text",
2365
+ "th-large",
2366
+ "th-list",
2367
+ "thumbs-down",
2368
+ "thumbs-up",
2369
+ "tiers",
2370
+ "timeline",
2371
+ "toggle-arrow-right",
2372
+ "token",
2373
+ "transfer",
2374
+ "translate",
2375
+ "trash",
2376
+ "trend-upward",
2377
+ "triangle-outline",
2378
+ "trolley",
2379
+ "truncate",
2380
+ "twitter",
2381
+ "ulist",
2382
+ "unarchive",
2383
+ "underline",
2384
+ "undo",
2385
+ "unknown",
2386
+ "unlink",
2387
+ "unlock",
2388
+ "unpublish",
2389
+ "upload",
2390
+ "user",
2391
+ "users",
2392
+ "versions",
2393
+ "video",
2394
+ "warning-filled",
2395
+ "warning-outline",
2396
+ "wrench"
2397
+ ];
2398
+ var DOCK_ICON_NAME_SET = new Set(DOCK_ICON_NAMES);
2399
+
2400
+ // src/dock-budget.ts
2401
+ var DOCK_BUDGET = { ungrouped: 8, group: 12, depth: 3, activations: 2 };
2402
+ function listItems(f) {
2403
+ const c = f.config ?? {};
2404
+ if (f.type === "repeater") return f.fields ?? [];
2405
+ if (f.type === "table") return c.fields ?? f.fields ?? [];
2406
+ if (f.type === "array" && c.zones?.repeatable) return c.zones.repeatable.fields ?? [];
2407
+ if (f.type === "modular") return null;
2408
+ return void 0;
2409
+ }
2410
+ function zoneFields(f) {
2411
+ const c = f.config ?? {};
2412
+ if (f.type === "group") return c.fields ?? f.fields ?? [];
2413
+ if (f.type === "array" && c.zones?.nonRepeatable) return c.zones.nonRepeatable;
2414
+ return void 0;
2415
+ }
2416
+ function layout(fields, fieldsets, root) {
2417
+ const byId = new Map(fieldsets.map((s) => [s.id, s]));
2418
+ const tabIds = root ? fieldsets.filter((s) => s.kind === "tab").map((s) => s.id) : [];
2419
+ const tabOf = (s) => s?.kind === "tab" ? s.id : s?.tab !== void 0 && byId.get(s.tab)?.kind === "tab" ? s.tab : void 0;
2420
+ const nonEmpty = new Set(
2421
+ fields.map((f) => tabOf(byId.get(f.fieldsetId ?? ""))).filter((t) => t && tabIds.includes(t))
2422
+ );
2423
+ const strip = nonEmpty.size >= 2;
2424
+ const branches = /* @__PURE__ */ new Map();
2425
+ const nodeFor = (f, path) => {
2426
+ const key = `${path}${f.key}`;
2427
+ const zone = zoneFields(f);
2428
+ if (zone) {
2429
+ return { kind: "group", id: key, collapsed: f.ui?.collapsed === true, nodes: zone.map((z) => nodeFor(z, `${key}.`)) };
2430
+ }
2431
+ const items = listItems(f);
2432
+ if (items !== void 0) {
2433
+ branches.set(key, { key, field: f, items });
2434
+ return { kind: "branch", key };
2435
+ }
2436
+ return { kind: "leaf", key };
2437
+ };
2438
+ const pinned = [];
2439
+ const panels = new Map(strip ? tabIds.filter((t) => nonEmpty.has(t)).map((t) => [t, []]) : []);
2440
+ const containers = /* @__PURE__ */ new Map();
2441
+ for (const f of fields) {
2442
+ const node = nodeFor(f, "");
2443
+ const set = byId.get(f.fieldsetId ?? "");
2444
+ const target = strip && panels.get(tabOf(set) ?? "") || pinned;
2445
+ if (set?.kind !== "group" && set?.kind !== "row") {
2446
+ target.push(node);
2447
+ continue;
2448
+ }
2449
+ let box = containers.get(set.id);
2450
+ if (!box) {
2451
+ box = set.kind === "row" ? { kind: "row", id: set.id, keys: [] } : { kind: "group", id: set.id, collapsed: set.collapsed === true, nodes: [] };
2452
+ containers.set(set.id, box);
2453
+ target.push(box);
2454
+ }
2455
+ if (box.kind === "row") box.keys.push(f.key);
2456
+ else if (box.kind === "group") box.nodes.push(node);
2457
+ }
2458
+ return { pinned, tabs: [...panels.values()], branches };
2459
+ }
2460
+ function walkCosts(screen) {
2461
+ const values = [];
2462
+ const branchCost = /* @__PURE__ */ new Map();
2463
+ const walk = (nodes, cost) => {
2464
+ for (const n of nodes) {
2465
+ if (n.kind === "group") walk(n.nodes, cost + (n.collapsed ? 1 : 0));
2466
+ else if (n.kind === "branch") branchCost.set(n.key, cost);
2467
+ else values.push(cost);
2468
+ }
2469
+ };
2470
+ walk(screen.pinned, 0);
2471
+ screen.tabs.forEach((panel, i) => walk(panel, i === 0 ? 0 : 1));
2472
+ return { values, branchCost };
2473
+ }
2474
+ function dockScreens(source, lane, props) {
2475
+ let fields = source.fields ?? [];
2476
+ let fieldsets = source.fieldsets ?? [];
2477
+ if (props) {
2478
+ fieldsets = [];
2479
+ fields = props.map((p) => {
2480
+ const g = p.ui?.group;
2481
+ if (!g) return p;
2482
+ if (!fieldsets.some((s) => s.id === g.id)) {
2483
+ fieldsets.push({ id: g.id, name: g.label, kind: g.kind ?? "group", collapsed: g.collapsed });
2484
+ }
2485
+ return { ...p, fieldsetId: g.id };
2486
+ });
2487
+ }
2488
+ const screens = [];
2489
+ const open = (id, kind, title, depth, entry, level) => {
2490
+ const laid = level ? layout(level, fieldsets, kind === "root") : null;
2491
+ const screen = {
2492
+ id,
2493
+ lane,
2494
+ kind,
2495
+ title,
2496
+ depth,
2497
+ entry,
2498
+ pinned: laid?.pinned ?? [],
2499
+ tabs: laid?.tabs ?? []
2500
+ };
2501
+ screens.push(screen);
2502
+ if (!laid) return;
2503
+ const { branchCost } = walkCosts(screen);
2504
+ for (const b of laid.branches.values()) {
2505
+ const listId = `${id}/${b.key}`;
2506
+ const listEntry = entry + (branchCost.get(b.key) ?? 0) + 1;
2507
+ const label = b.field.label ?? b.field.key;
2508
+ open(listId, "list", label, depth + 1, listEntry, null);
2509
+ if (b.items) open(`${listId}/item`, "item", `${label} item`, depth + 2, listEntry + 1, b.items);
2510
+ }
2511
+ };
2512
+ open(lane, "root", lane === "component" ? "Component" : lane === "page-fields" ? "Page fields" : "Section", 0, 0, fields);
2513
+ return screens;
2514
+ }
2515
+ function dockBudget(screen) {
2516
+ const rows = (nodes) => nodes.filter((n) => n.kind !== "group").length;
2517
+ let maxGroupLeaves = 0;
2518
+ const groups = (nodes) => {
2519
+ for (const n of nodes) {
2520
+ if (n.kind !== "group") continue;
2521
+ maxGroupLeaves = Math.max(maxGroupLeaves, rows(n.nodes));
2522
+ groups(n.nodes);
2523
+ }
2524
+ };
2525
+ groups(screen.pinned);
2526
+ screen.tabs.forEach(groups);
2527
+ const pinned = rows(screen.pinned);
2528
+ const { values } = walkCosts(screen);
2529
+ return {
2530
+ ungroupedLeaves: screen.tabs.length ? Math.max(...screen.tabs.map((p) => pinned + rows(p))) : pinned,
2531
+ maxGroupLeaves,
2532
+ depth: screen.depth,
2533
+ maxActivations: screen.entry + (values.length ? Math.max(...values) : 0)
2534
+ };
2535
+ }
2536
+
2537
+ // src/button-link-pairing.ts
2538
+ var TEXT_ROLES = /* @__PURE__ */ new Set(["label", "text", "title", "cta", "button", "btn", "name"]);
2539
+ var LINK_ROLES = /* @__PURE__ */ new Set(["href", "link", "url", "to"]);
2540
+ var BUTTON_NOUNS = /* @__PURE__ */ new Set(["cta", "button", "btn"]);
2541
+ var TEXT_TYPES = /* @__PURE__ */ new Set(["text", "string"]);
2542
+ var LINK_TYPES = /* @__PURE__ */ new Set(["link", "url"]);
2543
+ var MEDIA = /image|img|photo|video|avatar|logo|icon|thumb|poster|embed|src|og|favicon/i;
2544
+ function keyWords(key) {
2545
+ const leaf = key.split(".").pop() ?? "";
2546
+ return leaf.replace(/([a-z\d])([A-Z])/g, "$1 $2").replace(/([A-Z]+)([A-Z][a-z])/g, "$1 $2").split(/[\s_-]+/).filter(Boolean).map((word) => word.toLowerCase());
2547
+ }
2548
+ function roleFromWords(candidate, words) {
2549
+ const type = (candidate.type ?? "").toLowerCase();
2550
+ const value = candidate.value;
2551
+ if (!(value === void 0 || value === null || typeof value === "string")) return null;
2552
+ if (!words.length) return null;
2553
+ const last = words[words.length - 1];
2554
+ const stem = words.slice(0, -1).join("_");
2555
+ const full = words.join("_");
2556
+ if (LINK_TYPES.has(type)) return { role: "link", stems: LINK_ROLES.has(last) ? [stem] : [stem, full] };
2557
+ if (!TEXT_TYPES.has(type)) return null;
2558
+ if (LINK_ROLES.has(last)) {
2559
+ if (MEDIA.test(candidate.key) || MEDIA.test(candidate.label ?? "")) return null;
2560
+ return { role: "link", stems: [stem] };
2561
+ }
2562
+ if (TEXT_ROLES.has(last)) return { role: "text", stems: BUTTON_NOUNS.has(last) ? [stem, full] : [stem] };
2563
+ return null;
2564
+ }
2565
+ function candidateRole(candidate) {
2566
+ const fromKey = roleFromWords(candidate, keyWords(candidate.key));
2567
+ if (fromKey) return fromKey;
2568
+ const label = candidate.label?.trim();
2569
+ if (!label) return null;
2570
+ const fromLabel = roleFromWords(candidate, keyWords(label.replace(/\s+/g, "_")));
2571
+ return fromLabel ? { role: fromLabel.role, stems: fromLabel.stems.map((stem) => `label:${stem}`) } : null;
2572
+ }
2573
+ function buttonLinkPairs(candidates) {
2574
+ const roles = candidates.map(candidateRole);
2575
+ const byStem = /* @__PURE__ */ new Map();
2576
+ roles.forEach((role, index) => {
2577
+ if (!role) return;
2578
+ for (const stem of new Set(role.stems)) {
2579
+ const bucket = byStem.get(stem) ?? { text: /* @__PURE__ */ new Set(), link: /* @__PURE__ */ new Set() };
2580
+ bucket[role.role].add(index);
2581
+ byStem.set(stem, bucket);
2582
+ }
2583
+ });
2584
+ const ambiguous = /* @__PURE__ */ new Set();
2585
+ const proposals = /* @__PURE__ */ new Map();
2586
+ for (const bucket of byStem.values()) {
2587
+ if (bucket.text.size + bucket.link.size >= 3) {
2588
+ for (const index of [...bucket.text, ...bucket.link]) ambiguous.add(index);
2589
+ continue;
2590
+ }
2591
+ if (bucket.text.size === 1 && bucket.link.size === 1) {
2592
+ const pair = [[...bucket.text][0], [...bucket.link][0]];
2593
+ proposals.set(pair.join(":"), pair);
2594
+ }
2595
+ }
2596
+ const uses = /* @__PURE__ */ new Map();
2597
+ for (const [text, link] of proposals.values()) {
2598
+ uses.set(text, (uses.get(text) ?? 0) + 1);
2599
+ uses.set(link, (uses.get(link) ?? 0) + 1);
2600
+ }
2601
+ return [...proposals.values()].filter(([t, l]) => !ambiguous.has(t) && !ambiguous.has(l) && uses.get(t) === 1 && uses.get(l) === 1).sort((a, b) => Math.min(...a) - Math.min(...b));
2602
+ }
2603
+
2604
+ // src/button-look.ts
2605
+ var BUTTON_VARIANTS = ["primary", "secondary", "tertiary", "brand", "dark", "light", "outline", "link"];
2606
+ var BUTTON_ICONS = {
2607
+ "arrow-right": '<path d="M5 12h14"/><path d="m12 5 7 7-7 7"/>',
2608
+ "arrow-up-right": '<path d="M7 7h10v10"/><path d="M7 17 17 7"/>',
2609
+ "chevron-right": '<path d="m9 18 6-6-6-6"/>',
2610
+ plus: '<path d="M5 12h14"/><path d="M12 5v14"/>',
2611
+ check: '<path d="M20 6 9 17l-5-5"/>',
2612
+ download: '<path d="M12 15V3"/><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/><path d="m7 10 5 5 5-5"/>',
2613
+ "external-link": '<path d="M15 3h6v6"/><path d="M10 14 21 3"/><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/>',
2614
+ mail: '<path d="m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7"/><rect x="2" y="4" width="20" height="16" rx="2"/>',
2615
+ phone: '<path d="M13.832 16.568a1 1 0 0 0 1.213-.303l.355-.465A2 2 0 0 1 17 15h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2A18 18 0 0 1 2 4a2 2 0 0 1 2-2h3a2 2 0 0 1 2 2v3a2 2 0 0 1-.8 1.6l-.468.351a1 1 0 0 0-.292 1.233 14 14 0 0 0 6.392 6.384"/>',
2616
+ calendar: '<path d="M8 2v4"/><path d="M16 2v4"/><rect width="18" height="18" x="3" y="4" rx="2"/><path d="M3 10h18"/>',
2617
+ play: '<path d="M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z"/>',
2618
+ search: '<path d="m21 21-4.34-4.34"/><circle cx="11" cy="11" r="8"/>',
2619
+ "shopping-cart": '<circle cx="8" cy="21" r="1"/><circle cx="19" cy="21" r="1"/><path d="M2.05 2.05h2l2.66 12.42a2 2 0 0 0 2 1.58h9.78a2 2 0 0 0 1.95-1.57l1.65-7.43H5.12"/>',
2620
+ star: '<path d="M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z"/>',
2621
+ sparkles: '<path d="M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z"/><path d="M20 2v4"/><path d="M22 4h-4"/><circle cx="4" cy="20" r="2"/>',
2622
+ zap: '<path d="M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z"/>'
2623
+ };
2624
+ var BUTTON_ICON_NAMES = Object.keys(BUTTON_ICONS);
2625
+ function buttonVariantOf(value) {
2626
+ return BUTTON_VARIANTS.includes(value) ? value : "primary";
2627
+ }
2628
+ function buttonIconOf(value) {
2629
+ return BUTTON_ICON_NAMES.includes(value) ? value : null;
2630
+ }
2631
+ function buttonIconSvg(name, cls) {
2632
+ return `<svg class="${cls}" viewBox="0 0 24 24" width="1em" height="1em" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false">${BUTTON_ICONS[name]}</svg>`;
2633
+ }
2634
+
2159
2635
  // src/locator.ts
2160
2636
  var LANDMARK_SELECTOR = "header,nav,footer";
2161
2637
  var LANDMARK_TAGS = /* @__PURE__ */ new Set(["HEADER", "NAV", "FOOTER"]);
@@ -2218,8 +2694,14 @@ function regionOf(regions, el) {
2218
2694
  }
2219
2695
  export {
2220
2696
  BLOCK_BINDINGS,
2697
+ BUTTON_ICONS,
2698
+ BUTTON_ICON_NAMES,
2699
+ BUTTON_VARIANTS,
2221
2700
  COMPONENT_PROP_TYPES,
2222
2701
  DIALOG_SELECTOR,
2702
+ DOCK_BUDGET,
2703
+ DOCK_ICON_NAMES,
2704
+ DOCK_ICON_NAME_SET,
2223
2705
  FOOTER_SECTION_ID,
2224
2706
  LANDMARK_SELECTOR,
2225
2707
  LAYOUT_SECTION_ICONS,
@@ -2232,13 +2714,21 @@ export {
2232
2714
  SPACE_BOTTOM_TOKENS,
2233
2715
  SPACE_STEP_TOKENS,
2234
2716
  blockStyleToCss,
2717
+ buttonIconOf,
2718
+ buttonIconSvg,
2719
+ buttonLinkPairs,
2720
+ buttonVariantOf,
2721
+ candidateRole,
2235
2722
  componentInstanceAddresses,
2236
2723
  componentPropTargetKey,
2724
+ dockBudget,
2725
+ dockScreens,
2237
2726
  expandBlockBindings,
2238
2727
  formatPropsAttribute,
2239
2728
  getBlockType,
2240
2729
  isBlock,
2241
2730
  isChromeLandmark,
2731
+ keyWords,
2242
2732
  landmarkRegions,
2243
2733
  locatorFor,
2244
2734
  parsePropsAttribute,