@builder.io/sdk-qwik 0.14.22 → 0.14.23

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.
@@ -2085,1252 +2085,1252 @@ const handleABTesting = async ({ item, canTrack }) => {
2085
2085
  };
2086
2086
  };
2087
2087
  const getDefaultCanTrack = (canTrack) => checkIsDefined(canTrack) ? canTrack : true;
2088
- const componentInfo$h = {
2089
- name: "Core:Button",
2090
- image: "https://cdn.builder.io/api/v1/image/assets%2FIsxPKMo2gPRRKeakUztj1D6uqed2%2F81a15681c3e74df09677dfc57a615b13",
2091
- defaultStyles: {
2092
- // TODO: make min width more intuitive and set one
2093
- appearance: "none",
2094
- paddingTop: "15px",
2095
- paddingBottom: "15px",
2096
- paddingLeft: "25px",
2097
- paddingRight: "25px",
2098
- backgroundColor: "#000000",
2099
- color: "white",
2100
- borderRadius: "4px",
2101
- textAlign: "center",
2102
- cursor: "pointer"
2088
+ const defaultTitle = {
2089
+ "@type": "@builder.io/sdk:Element",
2090
+ layerName: "Accordion item title",
2091
+ responsiveStyles: {
2092
+ large: {
2093
+ marginTop: "10px",
2094
+ position: "relative",
2095
+ display: "flex",
2096
+ alignItems: "stretch",
2097
+ flexDirection: "column",
2098
+ paddingBottom: "10px"
2099
+ }
2103
2100
  },
2104
- inputs: [
2105
- {
2106
- name: "text",
2107
- type: "text",
2108
- defaultValue: "Click me!",
2109
- bubble: true
2110
- },
2101
+ children: [
2111
2102
  {
2112
- name: "link",
2113
- type: "url",
2114
- bubble: true
2115
- },
2103
+ "@type": "@builder.io/sdk:Element",
2104
+ responsiveStyles: {
2105
+ large: {
2106
+ textAlign: "left",
2107
+ display: "flex",
2108
+ flexDirection: "column"
2109
+ }
2110
+ },
2111
+ component: {
2112
+ name: "Text",
2113
+ options: {
2114
+ text: "I am an accordion title. Click me!"
2115
+ }
2116
+ }
2117
+ }
2118
+ ]
2119
+ };
2120
+ const defaultDetail = {
2121
+ "@type": "@builder.io/sdk:Element",
2122
+ layerName: "Accordion item detail",
2123
+ responsiveStyles: {
2124
+ large: {
2125
+ position: "relative",
2126
+ display: "flex",
2127
+ alignItems: "stretch",
2128
+ flexDirection: "column",
2129
+ marginTop: "10px",
2130
+ paddingBottom: "10px"
2131
+ }
2132
+ },
2133
+ children: [
2116
2134
  {
2117
- name: "openLinkInNewTab",
2118
- type: "boolean",
2119
- defaultValue: false,
2120
- friendlyName: "Open link in new tab"
2135
+ "@type": "@builder.io/sdk:Element",
2136
+ responsiveStyles: {
2137
+ large: {
2138
+ paddingTop: "50px",
2139
+ textAlign: "left",
2140
+ display: "flex",
2141
+ flexDirection: "column",
2142
+ paddingBottom: "50px"
2143
+ }
2144
+ },
2145
+ component: {
2146
+ name: "Text",
2147
+ options: {
2148
+ text: "I am an accordion detail, hello!"
2149
+ }
2150
+ }
2121
2151
  }
2122
- ],
2123
- static: true,
2124
- noWrap: true
2152
+ ]
2125
2153
  };
2126
- const componentInfo$g = {
2127
- // TODO: ways to statically preprocess JSON for references, functions, etc
2128
- name: "Columns",
2129
- isRSC: true,
2154
+ const componentInfo$h = {
2155
+ name: "Builder:Accordion",
2156
+ canHaveChildren: true,
2157
+ image: "https://cdn.builder.io/api/v1/image/assets%2FagZ9n5CUKRfbL9t6CaJOyVSK4Es2%2Ffab6c1fd3fe542408cbdec078bca7f35",
2158
+ defaultStyles: {
2159
+ display: "flex",
2160
+ flexDirection: "column",
2161
+ alignItems: "stretch"
2162
+ },
2130
2163
  inputs: [
2131
2164
  {
2132
- name: "columns",
2133
- type: "array",
2165
+ name: "items",
2166
+ type: "list",
2134
2167
  broadcast: true,
2135
2168
  subFields: [
2136
2169
  {
2137
- name: "blocks",
2138
- type: "array",
2170
+ name: "title",
2171
+ type: "uiBlocks",
2139
2172
  hideFromUI: true,
2140
2173
  defaultValue: [
2141
- {
2142
- "@type": "@builder.io/sdk:Element",
2143
- responsiveStyles: {
2144
- large: {
2145
- display: "flex",
2146
- flexDirection: "column",
2147
- alignItems: "stretch",
2148
- flexShrink: "0",
2149
- position: "relative",
2150
- marginTop: "30px",
2151
- textAlign: "center",
2152
- lineHeight: "normal",
2153
- height: "auto",
2154
- minHeight: "20px",
2155
- minWidth: "20px",
2156
- overflow: "hidden"
2157
- }
2158
- },
2159
- component: {
2160
- name: "Image",
2161
- options: {
2162
- image: "https://builder.io/api/v1/image/assets%2Fpwgjf0RoYWbdnJSbpBAjXNRMe9F2%2Ffb27a7c790324294af8be1c35fe30f4d",
2163
- backgroundPosition: "center",
2164
- backgroundSize: "cover",
2165
- aspectRatio: 0.7004048582995948
2166
- }
2167
- }
2168
- },
2169
- {
2170
- "@type": "@builder.io/sdk:Element",
2171
- responsiveStyles: {
2172
- large: {
2173
- display: "flex",
2174
- flexDirection: "column",
2175
- alignItems: "stretch",
2176
- flexShrink: "0",
2177
- position: "relative",
2178
- marginTop: "30px",
2179
- textAlign: "center",
2180
- lineHeight: "normal",
2181
- height: "auto"
2182
- }
2183
- },
2184
- component: {
2185
- name: "Text",
2186
- options: {
2187
- text: "<p>Enter some text...</p>"
2188
- }
2189
- }
2190
- }
2174
+ defaultTitle
2191
2175
  ]
2192
2176
  },
2193
2177
  {
2194
- name: "width",
2195
- type: "number",
2178
+ name: "detail",
2179
+ type: "uiBlocks",
2196
2180
  hideFromUI: true,
2197
- helperText: "Width %, e.g. set to 50 to fill half of the space"
2198
- },
2199
- {
2200
- name: "link",
2201
- type: "url",
2202
- helperText: "Optionally set a url that clicking this column will link to"
2181
+ defaultValue: [
2182
+ defaultDetail
2183
+ ]
2203
2184
  }
2204
2185
  ],
2205
2186
  defaultValue: [
2206
2187
  {
2207
- blocks: [
2208
- {
2209
- "@type": "@builder.io/sdk:Element",
2210
- responsiveStyles: {
2211
- large: {
2212
- display: "flex",
2213
- flexDirection: "column",
2214
- alignItems: "stretch",
2215
- flexShrink: "0",
2216
- position: "relative",
2217
- marginTop: "30px",
2218
- textAlign: "center",
2219
- lineHeight: "normal",
2220
- height: "auto",
2221
- minHeight: "20px",
2222
- minWidth: "20px",
2223
- overflow: "hidden"
2224
- }
2225
- },
2226
- component: {
2227
- name: "Image",
2228
- options: {
2229
- image: "https://builder.io/api/v1/image/assets%2Fpwgjf0RoYWbdnJSbpBAjXNRMe9F2%2Ffb27a7c790324294af8be1c35fe30f4d",
2230
- backgroundPosition: "center",
2231
- backgroundSize: "cover",
2232
- aspectRatio: 0.7004048582995948
2233
- }
2234
- }
2235
- },
2236
- {
2237
- "@type": "@builder.io/sdk:Element",
2238
- responsiveStyles: {
2239
- large: {
2240
- display: "flex",
2241
- flexDirection: "column",
2242
- alignItems: "stretch",
2243
- flexShrink: "0",
2244
- position: "relative",
2245
- marginTop: "30px",
2246
- textAlign: "center",
2247
- lineHeight: "normal",
2248
- height: "auto"
2249
- }
2250
- },
2251
- component: {
2252
- name: "Text",
2253
- options: {
2254
- text: "<p>Enter some text...</p>"
2255
- }
2256
- }
2257
- }
2188
+ title: [
2189
+ defaultTitle
2190
+ ],
2191
+ detail: [
2192
+ defaultDetail
2258
2193
  ]
2259
2194
  },
2260
2195
  {
2261
- blocks: [
2262
- {
2263
- "@type": "@builder.io/sdk:Element",
2264
- responsiveStyles: {
2265
- large: {
2266
- display: "flex",
2267
- flexDirection: "column",
2268
- alignItems: "stretch",
2269
- flexShrink: "0",
2270
- position: "relative",
2271
- marginTop: "30px",
2272
- textAlign: "center",
2273
- lineHeight: "normal",
2274
- height: "auto",
2275
- minHeight: "20px",
2276
- minWidth: "20px",
2277
- overflow: "hidden"
2278
- }
2279
- },
2280
- component: {
2281
- name: "Image",
2282
- options: {
2283
- image: "https://builder.io/api/v1/image/assets%2Fpwgjf0RoYWbdnJSbpBAjXNRMe9F2%2Ffb27a7c790324294af8be1c35fe30f4d",
2284
- backgroundPosition: "center",
2285
- backgroundSize: "cover",
2286
- aspectRatio: 0.7004048582995948
2287
- }
2288
- }
2289
- },
2290
- {
2291
- "@type": "@builder.io/sdk:Element",
2292
- responsiveStyles: {
2293
- large: {
2294
- display: "flex",
2295
- flexDirection: "column",
2296
- alignItems: "stretch",
2297
- flexShrink: "0",
2298
- position: "relative",
2299
- marginTop: "30px",
2300
- textAlign: "center",
2301
- lineHeight: "normal",
2302
- height: "auto"
2303
- }
2304
- },
2305
- component: {
2306
- name: "Text",
2307
- options: {
2308
- text: "<p>Enter some text...</p>"
2309
- }
2310
- }
2311
- }
2196
+ title: [
2197
+ defaultTitle
2198
+ ],
2199
+ detail: [
2200
+ defaultDetail
2312
2201
  ]
2313
2202
  }
2314
2203
  ],
2315
- onChange: (options) => {
2316
- function clearWidths() {
2317
- columns.forEach((col) => {
2318
- col.delete("width");
2319
- });
2320
- }
2321
- const columns = options.get("columns");
2322
- if (Array.isArray(columns)) {
2323
- const containsColumnWithWidth = !!columns.find((col) => col.get("width"));
2324
- if (containsColumnWithWidth) {
2325
- const containsColumnWithoutWidth = !!columns.find((col) => !col.get("width"));
2326
- if (containsColumnWithoutWidth)
2327
- clearWidths();
2328
- else {
2329
- const sumWidths = columns.reduce((memo, col) => {
2330
- return memo + col.get("width");
2331
- }, 0);
2332
- const widthsDontAddUp = sumWidths !== 100;
2333
- if (widthsDontAddUp)
2334
- clearWidths();
2335
- }
2336
- }
2337
- }
2338
- }
2339
- },
2340
- {
2341
- name: "space",
2342
- type: "number",
2343
- defaultValue: 20,
2344
- helperText: "Size of gap between columns",
2345
- advanced: true
2346
- },
2347
- {
2348
- name: "stackColumnsAt",
2349
- type: "string",
2350
- defaultValue: "tablet",
2351
- helperText: "Convert horizontal columns to vertical at what device size",
2352
- enum: [
2353
- "tablet",
2354
- "mobile",
2355
- "never"
2356
- ],
2357
- advanced: true
2204
+ showIf: (options) => !options.get("useChildrenForItems")
2358
2205
  },
2359
2206
  {
2360
- name: "reverseColumnsWhenStacked",
2207
+ name: "oneAtATime",
2208
+ helperText: "Only allow opening one at a time (collapse all others when new item openned)",
2361
2209
  type: "boolean",
2362
- defaultValue: false,
2363
- helperText: "When stacking columns for mobile devices, reverse the ordering",
2364
- advanced: true
2365
- }
2366
- ]
2367
- };
2368
- const componentInfo$f = {
2369
- name: "Fragment",
2370
- static: true,
2371
- hidden: true,
2372
- canHaveChildren: true,
2373
- noWrap: true
2374
- };
2375
- const componentInfo$e = {
2376
- name: "Image",
2377
- static: true,
2378
- image: "https://firebasestorage.googleapis.com/v0/b/builder-3b0a2.appspot.com/o/images%2Fbaseline-insert_photo-24px.svg?alt=media&token=4e5d0ef4-f5e8-4e57-b3a9-38d63a9b9dc4",
2379
- defaultStyles: {
2380
- position: "relative",
2381
- minHeight: "20px",
2382
- minWidth: "20px",
2383
- overflow: "hidden"
2384
- },
2385
- canHaveChildren: true,
2386
- inputs: [
2387
- {
2388
- name: "image",
2389
- type: "file",
2390
- bubble: true,
2391
- allowedFileTypes: [
2392
- "jpeg",
2393
- "jpg",
2394
- "png",
2395
- "svg"
2396
- ],
2397
- required: true,
2398
- defaultValue: "https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F72c80f114dc149019051b6852a9e3b7a",
2399
- onChange: (options) => {
2400
- const DEFAULT_ASPECT_RATIO = 0.7041;
2401
- options.delete("srcset");
2402
- options.delete("noWebp");
2403
- function loadImage(url, timeout = 6e4) {
2404
- return new Promise((resolve, reject) => {
2405
- const img = document.createElement("img");
2406
- let loaded = false;
2407
- img.onload = () => {
2408
- loaded = true;
2409
- resolve(img);
2410
- };
2411
- img.addEventListener("error", (event) => {
2412
- console.warn("Image load failed", event.error);
2413
- reject(event.error);
2414
- });
2415
- img.src = url;
2416
- setTimeout(() => {
2417
- if (!loaded)
2418
- reject(new Error("Image load timed out"));
2419
- }, timeout);
2420
- });
2421
- }
2422
- function round2(num) {
2423
- return Math.round(num * 1e3) / 1e3;
2424
- }
2425
- const value = options.get("image");
2426
- const aspectRatio = options.get("aspectRatio");
2427
- fetch(value).then((res) => res.blob()).then((blob) => {
2428
- if (blob.type.includes("svg"))
2429
- options.set("noWebp", true);
2430
- });
2431
- if (value && (!aspectRatio || aspectRatio === DEFAULT_ASPECT_RATIO))
2432
- return loadImage(value).then((img) => {
2433
- const possiblyUpdatedAspectRatio = options.get("aspectRatio");
2434
- if (options.get("image") === value && (!possiblyUpdatedAspectRatio || possiblyUpdatedAspectRatio === DEFAULT_ASPECT_RATIO)) {
2435
- if (img.width && img.height) {
2436
- options.set("aspectRatio", round2(img.height / img.width));
2437
- options.set("height", img.height);
2438
- options.set("width", img.width);
2439
- }
2440
- }
2441
- });
2442
- }
2443
- },
2444
- {
2445
- name: "backgroundSize",
2446
- type: "text",
2447
- defaultValue: "cover",
2448
- enum: [
2449
- {
2450
- label: "contain",
2451
- value: "contain",
2452
- helperText: "The image should never get cropped"
2453
- },
2454
- {
2455
- label: "cover",
2456
- value: "cover",
2457
- helperText: "The image should fill it's box, cropping when needed"
2458
- }
2459
- ]
2460
- },
2461
- {
2462
- name: "backgroundPosition",
2463
- type: "text",
2464
- defaultValue: "center",
2465
- enum: [
2466
- "center",
2467
- "top",
2468
- "left",
2469
- "right",
2470
- "bottom",
2471
- "top left",
2472
- "top right",
2473
- "bottom left",
2474
- "bottom right"
2475
- ]
2476
- },
2477
- {
2478
- name: "altText",
2479
- type: "string",
2480
- helperText: "Text to display when the user has images off"
2481
- },
2482
- {
2483
- name: "height",
2484
- type: "number",
2485
- hideFromUI: true
2486
- },
2487
- {
2488
- name: "width",
2489
- type: "number",
2490
- hideFromUI: true
2210
+ defaultValue: false
2491
2211
  },
2492
2212
  {
2493
- name: "sizes",
2494
- type: "string",
2495
- hideFromUI: true
2213
+ name: "grid",
2214
+ helperText: "Display as a grid",
2215
+ type: "boolean",
2216
+ defaultValue: false
2496
2217
  },
2497
2218
  {
2498
- name: "srcset",
2219
+ name: "gridRowWidth",
2220
+ helperText: "Display as a grid",
2499
2221
  type: "string",
2500
- hideFromUI: true
2501
- },
2502
- {
2503
- name: "lazy",
2504
- type: "boolean",
2505
- defaultValue: true,
2506
- hideFromUI: true
2222
+ showIf: (options) => options.get("grid"),
2223
+ defaultValue: "25%"
2507
2224
  },
2508
2225
  {
2509
- name: "fitContent",
2226
+ name: "useChildrenForItems",
2510
2227
  type: "boolean",
2511
- helperText: "When child blocks are provided, fit to them instead of using the image's aspect ratio",
2512
- defaultValue: true
2513
- },
2514
- {
2515
- name: "aspectRatio",
2516
- type: "number",
2517
- helperText: "This is the ratio of height/width, e.g. set to 1.5 for a 300px wide and 200px tall photo. Set to 0 to not force the image to maintain it's aspect ratio",
2228
+ helperText: "Use child elements for each slide, instead of the array. Useful for dynamically repeating items",
2518
2229
  advanced: true,
2519
- defaultValue: 0.7041
2230
+ defaultValue: false,
2231
+ onChange: (options) => {
2232
+ if (options.get("useChildrenForItems") === true)
2233
+ options.set("items", []);
2234
+ }
2520
2235
  }
2521
2236
  ]
2522
2237
  };
2523
- const componentInfo$d = {
2524
- name: "Core:Section",
2525
- static: true,
2526
- image: "https://cdn.builder.io/api/v1/image/assets%2FIsxPKMo2gPRRKeakUztj1D6uqed2%2F682efef23ace49afac61748dd305c70a",
2527
- inputs: [
2528
- {
2529
- name: "maxWidth",
2530
- type: "number",
2531
- defaultValue: 1200
2532
- },
2533
- {
2534
- name: "lazyLoad",
2535
- type: "boolean",
2536
- defaultValue: false,
2537
- advanced: true,
2538
- description: "Only render this section when in view"
2539
- }
2540
- ],
2541
- defaultStyles: {
2542
- paddingLeft: "20px",
2543
- paddingRight: "20px",
2544
- paddingTop: "50px",
2545
- paddingBottom: "50px",
2546
- marginTop: "0px",
2547
- width: "100vw",
2548
- marginLeft: "calc(50% - 50vw)"
2549
- },
2550
- canHaveChildren: true,
2551
- defaultChildren: [
2552
- {
2553
- "@type": "@builder.io/sdk:Element",
2554
- responsiveStyles: {
2555
- large: {
2556
- textAlign: "center"
2557
- }
2558
- },
2559
- component: {
2560
- name: "Text",
2561
- options: {
2562
- text: "<p><b>I am a section! My content keeps from getting too wide, so that it's easy to read even on big screens.</b></p><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur</p>"
2563
- }
2564
- }
2565
- }
2566
- ]
2238
+ const convertOrderNumberToString = (order) => {
2239
+ return order.toString();
2567
2240
  };
2568
- const componentInfo$c = {
2569
- name: "Slot",
2570
- isRSC: true,
2571
- description: "Allow child blocks to be inserted into this content when used as a Symbol",
2572
- docsLink: "https://www.builder.io/c/docs/symbols-with-blocks",
2573
- image: "https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F3aad6de36eae43b59b52c85190fdef56",
2574
- // Maybe wrap this for canHaveChildren so bind children to this hm
2575
- inputs: [
2576
- {
2577
- name: "name",
2578
- type: "string",
2579
- required: true,
2580
- defaultValue: "children"
2581
- }
2582
- ]
2241
+ const getAccordionTitleClassName = function getAccordionTitleClassName2(props, state, onlyOneAtATime, accordionStyles, accordionTitleStyles, openGridItemOrder, accordionDetailStyles, index) {
2242
+ return `builder-accordion-title builder-accordion-title-${state.open.includes(index) ? "open" : "closed"}`;
2583
2243
  };
2584
- const Slot = /* @__PURE__ */ qwik.componentQrl(/* @__PURE__ */ qwik.inlinedQrl((props) => {
2585
- var _a, _b;
2586
- return /* @__PURE__ */ qwik._jsxS("div", {
2587
- ...!((_a = props.builderContext.context) == null ? void 0 : _a.symbolId) && {
2588
- "builder-slot": props.name
2589
- },
2590
- children: /* @__PURE__ */ qwik._jsxC(Blocks, {
2591
- get parent() {
2592
- var _a2;
2593
- return (_a2 = props.builderContext.context) == null ? void 0 : _a2.symbolId;
2594
- },
2595
- get path() {
2596
- return `symbol.data.${props.name}`;
2597
- },
2598
- get context() {
2599
- return props.builderContext;
2600
- },
2601
- blocks: deoptSignal((_b = props.builderContext.rootState) == null ? void 0 : _b[props.name]),
2602
- [qwik._IMMUTABLE]: {
2603
- context: qwik._fnSignal((p0) => p0.builderContext, [
2604
- props
2605
- ], "p0.builderContext"),
2606
- parent: qwik._fnSignal((p0) => {
2607
- var _a2;
2608
- return (_a2 = p0.builderContext.context) == null ? void 0 : _a2.symbolId;
2609
- }, [
2610
- props
2611
- ], "p0.builderContext.context?.symbolId"),
2612
- path: qwik._fnSignal((p0) => `symbol.data.${p0.name}`, [
2613
- props
2614
- ], "`symbol.data.${p0.name}`")
2615
- }
2616
- }, 3, "B1_0")
2617
- }, {
2618
- style: {
2619
- pointerEvents: "auto"
2620
- }
2621
- }, 0, "B1_1");
2622
- }, "Slot_component_WWgWgfV0bb0"));
2623
- const componentInfo$b = {
2624
- name: "Symbol",
2625
- noWrap: true,
2626
- static: true,
2627
- isRSC: true,
2628
- inputs: [
2629
- {
2630
- name: "symbol",
2631
- type: "uiSymbol"
2632
- },
2633
- {
2634
- name: "dataOnly",
2635
- helperText: "Make this a data symbol that doesn't display any UI",
2636
- type: "boolean",
2637
- defaultValue: false,
2638
- advanced: true,
2639
- hideFromUI: true
2640
- },
2641
- {
2642
- name: "inheritState",
2643
- helperText: "Inherit the parent component state and data",
2644
- type: "boolean",
2645
- defaultValue: false,
2646
- advanced: true
2647
- },
2648
- {
2649
- name: "renderToLiquid",
2650
- helperText: "Render this symbols contents to liquid. Turn off to fetch with javascript and use custom targeting",
2651
- type: "boolean",
2652
- defaultValue: false,
2653
- advanced: true,
2654
- hideFromUI: true
2655
- },
2656
- {
2657
- name: "useChildren",
2658
- hideFromUI: true,
2659
- type: "boolean"
2660
- }
2661
- ]
2244
+ const getAccordionDetailClassName = function getAccordionDetailClassName2(props, state, onlyOneAtATime, accordionStyles, accordionTitleStyles, openGridItemOrder, accordionDetailStyles, index) {
2245
+ return `builder-accordion-detail builder-accordion-detail-${state.open.includes(index) ? "open" : "closed"}`;
2662
2246
  };
2663
- const defaultTab = {
2664
- "@type": "@builder.io/sdk:Element",
2665
- responsiveStyles: {
2666
- large: {
2667
- paddingLeft: "20px",
2668
- paddingRight: "20px",
2669
- paddingTop: "10px",
2670
- paddingBottom: "10px",
2671
- minWidth: "100px",
2672
- textAlign: "center",
2247
+ const onClick$2 = function onClick22(props, state, onlyOneAtATime, accordionStyles, accordionTitleStyles, openGridItemOrder, accordionDetailStyles, index) {
2248
+ if (state.open.includes(index))
2249
+ state.open = onlyOneAtATime.value ? [] : state.open.filter((item) => item !== index);
2250
+ else
2251
+ state.open = onlyOneAtATime.value ? [
2252
+ index
2253
+ ] : state.open.concat(index);
2254
+ };
2255
+ const Accordion = /* @__PURE__ */ qwik.componentQrl(/* @__PURE__ */ qwik.inlinedQrl((props) => {
2256
+ const state = qwik.useStore({
2257
+ open: []
2258
+ });
2259
+ const onlyOneAtATime = qwik.useComputedQrl(/* @__PURE__ */ qwik.inlinedQrl(() => {
2260
+ const [props2] = qwik.useLexicalScope();
2261
+ return Boolean(props2.grid || props2.oneAtATime);
2262
+ }, "Accordion_component_onlyOneAtATime_useComputed_QYD7IoPU2HY", [
2263
+ props
2264
+ ]));
2265
+ const accordionStyles = qwik.useComputedQrl(/* @__PURE__ */ qwik.inlinedQrl(() => {
2266
+ const [props2] = qwik.useLexicalScope();
2267
+ const styles = {
2673
2268
  display: "flex",
2269
+ alignItems: "stretch",
2674
2270
  flexDirection: "column",
2675
- cursor: "pointer",
2676
- userSelect: "none"
2677
- }
2678
- },
2679
- component: {
2680
- name: "Text",
2681
- options: {
2682
- text: "New tab"
2683
- }
2684
- }
2685
- };
2686
- const defaultElement = {
2687
- "@type": "@builder.io/sdk:Element",
2688
- responsiveStyles: {
2689
- large: {
2690
- height: "200px",
2271
+ ...props2.grid && {
2272
+ flexDirection: "row",
2273
+ alignItems: "flex-start",
2274
+ flexWrap: "wrap"
2275
+ }
2276
+ };
2277
+ return styles;
2278
+ }, "Accordion_component_accordionStyles_useComputed_Jrd0cwGn25U", [
2279
+ props
2280
+ ]));
2281
+ const accordionTitleStyles = qwik.useComputedQrl(/* @__PURE__ */ qwik.inlinedQrl(() => {
2282
+ const shared = {
2691
2283
  display: "flex",
2692
- marginTop: "20px",
2693
2284
  flexDirection: "column"
2285
+ };
2286
+ const styles = {
2287
+ ...shared,
2288
+ alignItems: "stretch",
2289
+ cursor: "pointer"
2290
+ };
2291
+ return Object.fromEntries(Object.entries(styles).filter(([_, value]) => value !== void 0));
2292
+ }, "Accordion_component_accordionTitleStyles_useComputed_FopdBMH0V6U"));
2293
+ const openGridItemOrder = qwik.useComputedQrl(/* @__PURE__ */ qwik.inlinedQrl(() => {
2294
+ const [props2, state2] = qwik.useLexicalScope();
2295
+ let itemOrder = null;
2296
+ const getOpenGridItemPosition = props2.grid && state2.open.length;
2297
+ if (getOpenGridItemPosition && document) {
2298
+ const openItemIndex = state2.open[0];
2299
+ const openItem = document.querySelector(`.builder-accordion-title[data-index="${openItemIndex}"]`);
2300
+ let subjectItem = openItem;
2301
+ itemOrder = openItemIndex;
2302
+ if (subjectItem) {
2303
+ let prevItemRect = subjectItem.getBoundingClientRect();
2304
+ while (subjectItem = subjectItem && subjectItem.nextElementSibling)
2305
+ if (subjectItem) {
2306
+ if (subjectItem.classList.contains("builder-accordion-detail"))
2307
+ continue;
2308
+ const subjectItemRect = subjectItem.getBoundingClientRect();
2309
+ if (subjectItemRect.left > prevItemRect.left) {
2310
+ const index = parseInt(subjectItem.getAttribute("data-index") || "", 10);
2311
+ if (!isNaN(index)) {
2312
+ prevItemRect = subjectItemRect;
2313
+ itemOrder = index;
2314
+ }
2315
+ } else
2316
+ break;
2317
+ }
2318
+ }
2694
2319
  }
2695
- },
2696
- component: {
2697
- name: "Text",
2698
- options: {
2699
- text: "New tab content "
2700
- }
2701
- }
2702
- };
2703
- const componentInfo$a = {
2704
- name: "Builder: Tabs",
2705
- inputs: [
2706
- {
2707
- name: "tabs",
2708
- type: "list",
2709
- broadcast: true,
2710
- subFields: [
2711
- {
2712
- name: "label",
2713
- type: "uiBlocks",
2714
- hideFromUI: true,
2715
- defaultValue: [
2716
- defaultTab
2717
- ]
2718
- },
2719
- {
2720
- name: "content",
2721
- type: "uiBlocks",
2722
- hideFromUI: true,
2723
- defaultValue: [
2724
- defaultElement
2725
- ]
2726
- }
2727
- ],
2728
- defaultValue: [
2320
+ if (typeof itemOrder === "number")
2321
+ itemOrder = itemOrder + 1;
2322
+ return itemOrder;
2323
+ }, "Accordion_component_openGridItemOrder_useComputed_cCQY1Vnxll0", [
2324
+ props,
2325
+ state
2326
+ ]));
2327
+ const accordionDetailStyles = qwik.useComputedQrl(/* @__PURE__ */ qwik.inlinedQrl(() => {
2328
+ const [openGridItemOrder2, props2] = qwik.useLexicalScope();
2329
+ const styles = {
2330
+ order: typeof openGridItemOrder2.value === "number" ? openGridItemOrder2.value : void 0,
2331
+ ...props2.grid && {
2332
+ width: "100%"
2333
+ }
2334
+ };
2335
+ return Object.fromEntries(Object.entries(styles).filter(([_, value]) => value !== void 0));
2336
+ }, "Accordion_component_accordionDetailStyles_useComputed_S0QmQzGJoRo", [
2337
+ openGridItemOrder,
2338
+ props
2339
+ ]));
2340
+ return /* @__PURE__ */ qwik._jsxQ("div", null, {
2341
+ class: "builder-accordion",
2342
+ style: qwik._fnSignal((p0) => p0.value, [
2343
+ accordionStyles
2344
+ ], "p0.value")
2345
+ }, (props.items || []).map((item, index) => {
2346
+ qwik._jsxBranch();
2347
+ return /* @__PURE__ */ qwik._jsxC(qwik.Fragment, {
2348
+ children: [
2349
+ /* @__PURE__ */ qwik._jsxQ("div", {
2350
+ class: getAccordionTitleClassName(props, state, onlyOneAtATime, accordionStyles, accordionTitleStyles, openGridItemOrder, accordionDetailStyles, index),
2351
+ "data-index": index,
2352
+ onClick$: /* @__PURE__ */ qwik.inlinedQrl((event) => {
2353
+ const [accordionDetailStyles2, accordionStyles2, accordionTitleStyles2, index2, onlyOneAtATime2, openGridItemOrder2, props2, state2] = qwik.useLexicalScope();
2354
+ return onClick$2(props2, state2, onlyOneAtATime2, accordionStyles2, accordionTitleStyles2, openGridItemOrder2, accordionDetailStyles2, index2);
2355
+ }, "Accordion_component_div_Fragment_div_onClick_VtzhhJnK0XI", [
2356
+ accordionDetailStyles,
2357
+ accordionStyles,
2358
+ accordionTitleStyles,
2359
+ index,
2360
+ onlyOneAtATime,
2361
+ openGridItemOrder,
2362
+ props,
2363
+ state
2364
+ ]),
2365
+ style: {
2366
+ ...accordionTitleStyles.value,
2367
+ width: props.grid ? props.gridRowWidth : void 0,
2368
+ order: openGridItemOrder.value !== null ? convertOrderNumberToString(index) : convertOrderNumberToString(index + 1)
2369
+ }
2370
+ }, null, /* @__PURE__ */ qwik._jsxC(Blocks, {
2371
+ get blocks() {
2372
+ return item.title;
2373
+ },
2374
+ path: `items.${index}.title`,
2375
+ get parent() {
2376
+ return props.builderBlock.id;
2377
+ },
2378
+ get context() {
2379
+ return props.builderContext;
2380
+ },
2381
+ get registeredComponents() {
2382
+ return props.builderComponents;
2383
+ },
2384
+ get linkComponent() {
2385
+ return props.builderLinkComponent;
2386
+ },
2387
+ [qwik._IMMUTABLE]: {
2388
+ blocks: qwik._wrapProp(item, "title"),
2389
+ context: qwik._fnSignal((p0) => p0.builderContext, [
2390
+ props
2391
+ ], "p0.builderContext"),
2392
+ linkComponent: qwik._fnSignal((p0) => p0.builderLinkComponent, [
2393
+ props
2394
+ ], "p0.builderLinkComponent"),
2395
+ parent: qwik._fnSignal((p0) => p0.builderBlock.id, [
2396
+ props
2397
+ ], "p0.builderBlock.id"),
2398
+ registeredComponents: qwik._fnSignal((p0) => p0.builderComponents, [
2399
+ props
2400
+ ], "p0.builderComponents")
2401
+ }
2402
+ }, 3, "hf_0"), 0, null),
2403
+ state.open.includes(index) ? /* @__PURE__ */ qwik._jsxQ("div", {
2404
+ class: getAccordionDetailClassName(props, state, onlyOneAtATime, accordionStyles, accordionTitleStyles, openGridItemOrder, accordionDetailStyles, index)
2405
+ }, {
2406
+ style: qwik._fnSignal((p0) => p0.value, [
2407
+ accordionDetailStyles
2408
+ ], "p0.value")
2409
+ }, /* @__PURE__ */ qwik._jsxC(Blocks, {
2410
+ get blocks() {
2411
+ return item.detail;
2412
+ },
2413
+ path: `items.${index}.detail`,
2414
+ get parent() {
2415
+ return props.builderBlock.id;
2416
+ },
2417
+ get context() {
2418
+ return props.builderContext;
2419
+ },
2420
+ get registeredComponents() {
2421
+ return props.builderComponents;
2422
+ },
2423
+ get linkComponent() {
2424
+ return props.builderLinkComponent;
2425
+ },
2426
+ [qwik._IMMUTABLE]: {
2427
+ blocks: qwik._wrapProp(item, "detail"),
2428
+ context: qwik._fnSignal((p0) => p0.builderContext, [
2429
+ props
2430
+ ], "p0.builderContext"),
2431
+ linkComponent: qwik._fnSignal((p0) => p0.builderLinkComponent, [
2432
+ props
2433
+ ], "p0.builderLinkComponent"),
2434
+ parent: qwik._fnSignal((p0) => p0.builderBlock.id, [
2435
+ props
2436
+ ], "p0.builderBlock.id"),
2437
+ registeredComponents: qwik._fnSignal((p0) => p0.builderComponents, [
2438
+ props
2439
+ ], "p0.builderComponents")
2440
+ }
2441
+ }, 3, "hf_1"), 1, "hf_2") : null
2442
+ ]
2443
+ }, 1, "hf_3");
2444
+ }), 1, "hf_4");
2445
+ }, "Accordion_component_jkuUCHm0nt0"));
2446
+ const componentInfo$g = {
2447
+ name: "Core:Button",
2448
+ image: "https://cdn.builder.io/api/v1/image/assets%2FIsxPKMo2gPRRKeakUztj1D6uqed2%2F81a15681c3e74df09677dfc57a615b13",
2449
+ defaultStyles: {
2450
+ // TODO: make min width more intuitive and set one
2451
+ appearance: "none",
2452
+ paddingTop: "15px",
2453
+ paddingBottom: "15px",
2454
+ paddingLeft: "25px",
2455
+ paddingRight: "25px",
2456
+ backgroundColor: "#000000",
2457
+ color: "white",
2458
+ borderRadius: "4px",
2459
+ textAlign: "center",
2460
+ cursor: "pointer"
2461
+ },
2462
+ inputs: [
2463
+ {
2464
+ name: "text",
2465
+ type: "text",
2466
+ defaultValue: "Click me!",
2467
+ bubble: true
2468
+ },
2469
+ {
2470
+ name: "link",
2471
+ type: "url",
2472
+ bubble: true
2473
+ },
2474
+ {
2475
+ name: "openLinkInNewTab",
2476
+ type: "boolean",
2477
+ defaultValue: false,
2478
+ friendlyName: "Open link in new tab"
2479
+ }
2480
+ ],
2481
+ static: true,
2482
+ noWrap: true
2483
+ };
2484
+ const componentInfo$f = {
2485
+ // TODO: ways to statically preprocess JSON for references, functions, etc
2486
+ name: "Columns",
2487
+ isRSC: true,
2488
+ inputs: [
2489
+ {
2490
+ name: "columns",
2491
+ type: "array",
2492
+ broadcast: true,
2493
+ subFields: [
2729
2494
  {
2730
- label: [
2495
+ name: "blocks",
2496
+ type: "array",
2497
+ hideFromUI: true,
2498
+ defaultValue: [
2731
2499
  {
2732
- ...defaultTab,
2500
+ "@type": "@builder.io/sdk:Element",
2501
+ responsiveStyles: {
2502
+ large: {
2503
+ display: "flex",
2504
+ flexDirection: "column",
2505
+ alignItems: "stretch",
2506
+ flexShrink: "0",
2507
+ position: "relative",
2508
+ marginTop: "30px",
2509
+ textAlign: "center",
2510
+ lineHeight: "normal",
2511
+ height: "auto",
2512
+ minHeight: "20px",
2513
+ minWidth: "20px",
2514
+ overflow: "hidden"
2515
+ }
2516
+ },
2733
2517
  component: {
2734
- name: "Text",
2518
+ name: "Image",
2735
2519
  options: {
2736
- text: "Tab 1"
2520
+ image: "https://builder.io/api/v1/image/assets%2Fpwgjf0RoYWbdnJSbpBAjXNRMe9F2%2Ffb27a7c790324294af8be1c35fe30f4d",
2521
+ backgroundPosition: "center",
2522
+ backgroundSize: "cover",
2523
+ aspectRatio: 0.7004048582995948
2737
2524
  }
2738
2525
  }
2739
- }
2740
- ],
2741
- content: [
2526
+ },
2742
2527
  {
2743
- ...defaultElement,
2528
+ "@type": "@builder.io/sdk:Element",
2529
+ responsiveStyles: {
2530
+ large: {
2531
+ display: "flex",
2532
+ flexDirection: "column",
2533
+ alignItems: "stretch",
2534
+ flexShrink: "0",
2535
+ position: "relative",
2536
+ marginTop: "30px",
2537
+ textAlign: "center",
2538
+ lineHeight: "normal",
2539
+ height: "auto"
2540
+ }
2541
+ },
2744
2542
  component: {
2745
2543
  name: "Text",
2746
2544
  options: {
2747
- text: "Tab 1 content"
2545
+ text: "<p>Enter some text...</p>"
2748
2546
  }
2749
2547
  }
2750
2548
  }
2751
2549
  ]
2752
2550
  },
2753
2551
  {
2754
- label: [
2755
- {
2756
- ...defaultTab,
2757
- component: {
2758
- name: "Text",
2759
- options: {
2760
- text: "Tab 2"
2761
- }
2762
- }
2763
- }
2764
- ],
2765
- content: [
2552
+ name: "width",
2553
+ type: "number",
2554
+ hideFromUI: true,
2555
+ helperText: "Width %, e.g. set to 50 to fill half of the space"
2556
+ },
2557
+ {
2558
+ name: "link",
2559
+ type: "url",
2560
+ helperText: "Optionally set a url that clicking this column will link to"
2561
+ }
2562
+ ],
2563
+ defaultValue: [
2564
+ {
2565
+ blocks: [
2766
2566
  {
2767
- ...defaultElement,
2567
+ "@type": "@builder.io/sdk:Element",
2568
+ responsiveStyles: {
2569
+ large: {
2570
+ display: "flex",
2571
+ flexDirection: "column",
2572
+ alignItems: "stretch",
2573
+ flexShrink: "0",
2574
+ position: "relative",
2575
+ marginTop: "30px",
2576
+ textAlign: "center",
2577
+ lineHeight: "normal",
2578
+ height: "auto",
2579
+ minHeight: "20px",
2580
+ minWidth: "20px",
2581
+ overflow: "hidden"
2582
+ }
2583
+ },
2584
+ component: {
2585
+ name: "Image",
2586
+ options: {
2587
+ image: "https://builder.io/api/v1/image/assets%2Fpwgjf0RoYWbdnJSbpBAjXNRMe9F2%2Ffb27a7c790324294af8be1c35fe30f4d",
2588
+ backgroundPosition: "center",
2589
+ backgroundSize: "cover",
2590
+ aspectRatio: 0.7004048582995948
2591
+ }
2592
+ }
2593
+ },
2594
+ {
2595
+ "@type": "@builder.io/sdk:Element",
2596
+ responsiveStyles: {
2597
+ large: {
2598
+ display: "flex",
2599
+ flexDirection: "column",
2600
+ alignItems: "stretch",
2601
+ flexShrink: "0",
2602
+ position: "relative",
2603
+ marginTop: "30px",
2604
+ textAlign: "center",
2605
+ lineHeight: "normal",
2606
+ height: "auto"
2607
+ }
2608
+ },
2768
2609
  component: {
2769
2610
  name: "Text",
2770
2611
  options: {
2771
- text: "Tab 2 content"
2612
+ text: "<p>Enter some text...</p>"
2613
+ }
2614
+ }
2615
+ }
2616
+ ]
2617
+ },
2618
+ {
2619
+ blocks: [
2620
+ {
2621
+ "@type": "@builder.io/sdk:Element",
2622
+ responsiveStyles: {
2623
+ large: {
2624
+ display: "flex",
2625
+ flexDirection: "column",
2626
+ alignItems: "stretch",
2627
+ flexShrink: "0",
2628
+ position: "relative",
2629
+ marginTop: "30px",
2630
+ textAlign: "center",
2631
+ lineHeight: "normal",
2632
+ height: "auto",
2633
+ minHeight: "20px",
2634
+ minWidth: "20px",
2635
+ overflow: "hidden"
2636
+ }
2637
+ },
2638
+ component: {
2639
+ name: "Image",
2640
+ options: {
2641
+ image: "https://builder.io/api/v1/image/assets%2Fpwgjf0RoYWbdnJSbpBAjXNRMe9F2%2Ffb27a7c790324294af8be1c35fe30f4d",
2642
+ backgroundPosition: "center",
2643
+ backgroundSize: "cover",
2644
+ aspectRatio: 0.7004048582995948
2645
+ }
2646
+ }
2647
+ },
2648
+ {
2649
+ "@type": "@builder.io/sdk:Element",
2650
+ responsiveStyles: {
2651
+ large: {
2652
+ display: "flex",
2653
+ flexDirection: "column",
2654
+ alignItems: "stretch",
2655
+ flexShrink: "0",
2656
+ position: "relative",
2657
+ marginTop: "30px",
2658
+ textAlign: "center",
2659
+ lineHeight: "normal",
2660
+ height: "auto"
2661
+ }
2662
+ },
2663
+ component: {
2664
+ name: "Text",
2665
+ options: {
2666
+ text: "<p>Enter some text...</p>"
2772
2667
  }
2773
2668
  }
2774
2669
  }
2775
2670
  ]
2776
2671
  }
2777
- ]
2778
- },
2779
- {
2780
- name: "activeTabStyle",
2781
- type: "uiStyle",
2782
- helperText: "CSS styles for the active tab",
2783
- defaultValue: {
2784
- backgroundColor: "rgba(0, 0, 0, 0.1)"
2672
+ ],
2673
+ onChange: (options) => {
2674
+ function clearWidths() {
2675
+ columns.forEach((col) => {
2676
+ col.delete("width");
2677
+ });
2678
+ }
2679
+ const columns = options.get("columns");
2680
+ if (Array.isArray(columns)) {
2681
+ const containsColumnWithWidth = !!columns.find((col) => col.get("width"));
2682
+ if (containsColumnWithWidth) {
2683
+ const containsColumnWithoutWidth = !!columns.find((col) => !col.get("width"));
2684
+ if (containsColumnWithoutWidth)
2685
+ clearWidths();
2686
+ else {
2687
+ const sumWidths = columns.reduce((memo, col) => {
2688
+ return memo + col.get("width");
2689
+ }, 0);
2690
+ const widthsDontAddUp = sumWidths !== 100;
2691
+ if (widthsDontAddUp)
2692
+ clearWidths();
2693
+ }
2694
+ }
2695
+ }
2785
2696
  }
2786
2697
  },
2787
2698
  {
2788
- name: "defaultActiveTab",
2699
+ name: "space",
2789
2700
  type: "number",
2790
- helperText: 'Default tab to open to. Set to "1" for the first tab, "2" for the second, or choose "0" for none',
2791
- defaultValue: 1,
2701
+ defaultValue: 20,
2702
+ helperText: "Size of gap between columns",
2792
2703
  advanced: true
2793
2704
  },
2794
2705
  {
2795
- name: "collapsible",
2706
+ name: "stackColumnsAt",
2707
+ type: "string",
2708
+ defaultValue: "tablet",
2709
+ helperText: "Convert horizontal columns to vertical at what device size",
2710
+ enum: [
2711
+ "tablet",
2712
+ "mobile",
2713
+ "never"
2714
+ ],
2715
+ advanced: true
2716
+ },
2717
+ {
2718
+ name: "reverseColumnsWhenStacked",
2796
2719
  type: "boolean",
2797
- helperText: "If on, clicking an open tab closes it so no tabs are active",
2798
2720
  defaultValue: false,
2721
+ helperText: "When stacking columns for mobile devices, reverse the ordering",
2799
2722
  advanced: true
2723
+ }
2724
+ ]
2725
+ };
2726
+ const componentInfo$e = {
2727
+ name: "Fragment",
2728
+ static: true,
2729
+ hidden: true,
2730
+ canHaveChildren: true,
2731
+ noWrap: true
2732
+ };
2733
+ const componentInfo$d = {
2734
+ name: "Image",
2735
+ static: true,
2736
+ image: "https://firebasestorage.googleapis.com/v0/b/builder-3b0a2.appspot.com/o/images%2Fbaseline-insert_photo-24px.svg?alt=media&token=4e5d0ef4-f5e8-4e57-b3a9-38d63a9b9dc4",
2737
+ defaultStyles: {
2738
+ position: "relative",
2739
+ minHeight: "20px",
2740
+ minWidth: "20px",
2741
+ overflow: "hidden"
2742
+ },
2743
+ canHaveChildren: true,
2744
+ inputs: [
2745
+ {
2746
+ name: "image",
2747
+ type: "file",
2748
+ bubble: true,
2749
+ allowedFileTypes: [
2750
+ "jpeg",
2751
+ "jpg",
2752
+ "png",
2753
+ "svg"
2754
+ ],
2755
+ required: true,
2756
+ defaultValue: "https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F72c80f114dc149019051b6852a9e3b7a",
2757
+ onChange: (options) => {
2758
+ const DEFAULT_ASPECT_RATIO = 0.7041;
2759
+ options.delete("srcset");
2760
+ options.delete("noWebp");
2761
+ function loadImage(url, timeout = 6e4) {
2762
+ return new Promise((resolve, reject) => {
2763
+ const img = document.createElement("img");
2764
+ let loaded = false;
2765
+ img.onload = () => {
2766
+ loaded = true;
2767
+ resolve(img);
2768
+ };
2769
+ img.addEventListener("error", (event) => {
2770
+ console.warn("Image load failed", event.error);
2771
+ reject(event.error);
2772
+ });
2773
+ img.src = url;
2774
+ setTimeout(() => {
2775
+ if (!loaded)
2776
+ reject(new Error("Image load timed out"));
2777
+ }, timeout);
2778
+ });
2779
+ }
2780
+ function round2(num) {
2781
+ return Math.round(num * 1e3) / 1e3;
2782
+ }
2783
+ const value = options.get("image");
2784
+ const aspectRatio = options.get("aspectRatio");
2785
+ fetch(value).then((res) => res.blob()).then((blob) => {
2786
+ if (blob.type.includes("svg"))
2787
+ options.set("noWebp", true);
2788
+ });
2789
+ if (value && (!aspectRatio || aspectRatio === DEFAULT_ASPECT_RATIO))
2790
+ return loadImage(value).then((img) => {
2791
+ const possiblyUpdatedAspectRatio = options.get("aspectRatio");
2792
+ if (options.get("image") === value && (!possiblyUpdatedAspectRatio || possiblyUpdatedAspectRatio === DEFAULT_ASPECT_RATIO)) {
2793
+ if (img.width && img.height) {
2794
+ options.set("aspectRatio", round2(img.height / img.width));
2795
+ options.set("height", img.height);
2796
+ options.set("width", img.width);
2797
+ }
2798
+ }
2799
+ });
2800
+ }
2800
2801
  },
2801
2802
  {
2802
- name: "tabHeaderLayout",
2803
- type: "enum",
2804
- helperText: "Change the layout of the tab headers (uses justify-content)",
2805
- defaultValue: "flex-start",
2803
+ name: "backgroundSize",
2804
+ type: "text",
2805
+ defaultValue: "cover",
2806
2806
  enum: [
2807
2807
  {
2808
- label: "Center",
2809
- value: "center"
2810
- },
2811
- {
2812
- label: "Space between",
2813
- value: "space-between"
2814
- },
2815
- {
2816
- label: "Space around",
2817
- value: "space-around"
2818
- },
2819
- {
2820
- label: "Left",
2821
- value: "flex-start"
2808
+ label: "contain",
2809
+ value: "contain",
2810
+ helperText: "The image should never get cropped"
2822
2811
  },
2823
2812
  {
2824
- label: "Right",
2825
- value: "flex-end"
2813
+ label: "cover",
2814
+ value: "cover",
2815
+ helperText: "The image should fill it's box, cropping when needed"
2826
2816
  }
2827
2817
  ]
2828
- }
2829
- ]
2830
- };
2831
- const activeTabContent = function activeTabContent2(props, state, active) {
2832
- return props.tabs && props.tabs[active].content;
2833
- };
2834
- const onClick$2 = function onClick22(props, state, index) {
2835
- if (index === state.activeTab && props.collapsible)
2836
- state.activeTab = -1;
2837
- else
2838
- state.activeTab = index;
2839
- };
2840
- const Tabs = /* @__PURE__ */ qwik.componentQrl(/* @__PURE__ */ qwik.inlinedQrl((props) => {
2841
- qwik._jsxBranch();
2842
- const state = qwik.useStore({
2843
- activeTab: props.defaultActiveTab ? props.defaultActiveTab - 1 : 0
2844
- });
2845
- return /* @__PURE__ */ qwik._jsxQ("div", null, null, [
2846
- /* @__PURE__ */ qwik._jsxQ("div", null, {
2847
- class: "builder-tabs-wrap",
2848
- style: qwik._fnSignal((p0) => ({
2849
- display: "flex",
2850
- flexDirection: "row",
2851
- justifyContent: p0.tabHeaderLayout || "flex-start",
2852
- overflow: "auto"
2853
- }), [
2854
- props
2855
- ], '{display:"flex",flexDirection:"row",justifyContent:p0.tabHeaderLayout||"flex-start",overflow:"auto"}')
2856
- }, (props.tabs || []).map((tab, index) => {
2857
- return /* @__PURE__ */ qwik._jsxQ("span", {
2858
- class: `builder-tab-wrap ${state.activeTab === index ? "builder-tab-active" : ""}`,
2859
- onClick$: /* @__PURE__ */ qwik.inlinedQrl((event) => {
2860
- const [index2, props2, state2] = qwik.useLexicalScope();
2861
- return onClick$2(props2, state2, index2);
2862
- }, "Tabs_component_div_div_span_onClick_hSTBabAHGks", [
2863
- index,
2864
- props,
2865
- state
2866
- ]),
2867
- style: {
2868
- ...state.activeTab === index ? props.activeTabStyle : {}
2869
- }
2870
- }, null, /* @__PURE__ */ qwik._jsxC(Blocks, {
2871
- get parent() {
2872
- return props.builderBlock.id;
2873
- },
2874
- path: `component.options.tabs.${index}.label`,
2875
- get blocks() {
2876
- return tab.label;
2877
- },
2878
- get context() {
2879
- return props.builderContext;
2880
- },
2881
- get registeredComponents() {
2882
- return props.builderComponents;
2883
- },
2884
- get linkComponent() {
2885
- return props.builderLinkComponent;
2886
- },
2887
- [qwik._IMMUTABLE]: {
2888
- blocks: qwik._wrapProp(tab, "label"),
2889
- context: qwik._fnSignal((p0) => p0.builderContext, [
2890
- props
2891
- ], "p0.builderContext"),
2892
- linkComponent: qwik._fnSignal((p0) => p0.builderLinkComponent, [
2893
- props
2894
- ], "p0.builderLinkComponent"),
2895
- parent: qwik._fnSignal((p0) => p0.builderBlock.id, [
2896
- props
2897
- ], "p0.builderBlock.id"),
2898
- registeredComponents: qwik._fnSignal((p0) => p0.builderComponents, [
2899
- props
2900
- ], "p0.builderComponents")
2901
- }
2902
- }, 3, "6k_0"), 0, index);
2903
- }), 1, null),
2904
- activeTabContent(props, state, state.activeTab) ? /* @__PURE__ */ qwik._jsxQ("div", null, null, /* @__PURE__ */ qwik._jsxC(Blocks, {
2905
- get parent() {
2906
- return props.builderBlock.id;
2907
- },
2908
- get path() {
2909
- return `component.options.tabs.${state.activeTab}.content`;
2910
- },
2911
- blocks: activeTabContent(props, state, state.activeTab),
2912
- get context() {
2913
- return props.builderContext;
2914
- },
2915
- get registeredComponents() {
2916
- return props.builderComponents;
2917
- },
2918
- get linkComponent() {
2919
- return props.builderLinkComponent;
2920
- },
2921
- [qwik._IMMUTABLE]: {
2922
- context: qwik._fnSignal((p0) => p0.builderContext, [
2923
- props
2924
- ], "p0.builderContext"),
2925
- linkComponent: qwik._fnSignal((p0) => p0.builderLinkComponent, [
2926
- props
2927
- ], "p0.builderLinkComponent"),
2928
- parent: qwik._fnSignal((p0) => p0.builderBlock.id, [
2929
- props
2930
- ], "p0.builderBlock.id"),
2931
- path: qwik._fnSignal((p0) => `component.options.tabs.${p0.activeTab}.content`, [
2932
- state
2933
- ], "`component.options.tabs.${p0.activeTab}.content`"),
2934
- registeredComponents: qwik._fnSignal((p0) => p0.builderComponents, [
2935
- props
2936
- ], "p0.builderComponents")
2937
- }
2938
- }, 3, "6k_1"), 1, "6k_2") : null
2939
- ], 1, "6k_3");
2940
- }, "Tabs_component_MhWcxXy0lMY"));
2941
- const componentInfo$9 = {
2942
- name: "Text",
2943
- static: true,
2944
- isRSC: true,
2945
- image: "https://firebasestorage.googleapis.com/v0/b/builder-3b0a2.appspot.com/o/images%2Fbaseline-text_fields-24px%20(1).svg?alt=media&token=12177b73-0ee3-42ca-98c6-0dd003de1929",
2946
- inputs: [
2818
+ },
2947
2819
  {
2948
- name: "text",
2949
- type: "html",
2950
- required: true,
2951
- autoFocus: true,
2952
- bubble: true,
2953
- defaultValue: "Enter some text..."
2954
- }
2955
- ],
2956
- defaultStyles: {
2957
- lineHeight: "normal",
2958
- height: "auto",
2959
- textAlign: "center"
2960
- }
2961
- };
2962
- const Text = /* @__PURE__ */ qwik.componentQrl(/* @__PURE__ */ qwik.inlinedQrl((props) => {
2963
- return /* @__PURE__ */ qwik._jsxQ("div", null, {
2964
- class: "builder-text",
2965
- dangerouslySetInnerHTML: qwik._fnSignal((p0) => {
2966
- var _a;
2967
- return ((_a = p0.text) == null ? void 0 : _a.toString()) || "";
2968
- }, [
2969
- props
2970
- ], 'p0.text?.toString()||""'),
2971
- style: {
2972
- outline: "none"
2973
- }
2974
- }, null, 3, "yO_0");
2975
- }, "Text_component_15p0cKUxgIE"));
2976
- const convertOrderNumberToString = (order) => {
2977
- return order.toString();
2978
- };
2979
- const getAccordionTitleClassName = function getAccordionTitleClassName2(props, state, onlyOneAtATime, accordionStyles, accordionTitleStyles, openGridItemOrder, accordionDetailStyles, index) {
2980
- return `builder-accordion-title builder-accordion-title-${state.open.includes(index) ? "open" : "closed"}`;
2981
- };
2982
- const getAccordionDetailClassName = function getAccordionDetailClassName2(props, state, onlyOneAtATime, accordionStyles, accordionTitleStyles, openGridItemOrder, accordionDetailStyles, index) {
2983
- return `builder-accordion-detail builder-accordion-detail-${state.open.includes(index) ? "open" : "closed"}`;
2984
- };
2985
- const onClick$1 = function onClick23(props, state, onlyOneAtATime, accordionStyles, accordionTitleStyles, openGridItemOrder, accordionDetailStyles, index) {
2986
- if (state.open.includes(index))
2987
- state.open = onlyOneAtATime.value ? [] : state.open.filter((item) => item !== index);
2988
- else
2989
- state.open = onlyOneAtATime.value ? [
2990
- index
2991
- ] : state.open.concat(index);
2992
- };
2993
- const Accordion = /* @__PURE__ */ qwik.componentQrl(/* @__PURE__ */ qwik.inlinedQrl((props) => {
2994
- const state = qwik.useStore({
2995
- open: []
2996
- });
2997
- const onlyOneAtATime = qwik.useComputedQrl(/* @__PURE__ */ qwik.inlinedQrl(() => {
2998
- const [props2] = qwik.useLexicalScope();
2999
- return Boolean(props2.grid || props2.oneAtATime);
3000
- }, "Accordion_component_onlyOneAtATime_useComputed_QYD7IoPU2HY", [
3001
- props
3002
- ]));
3003
- const accordionStyles = qwik.useComputedQrl(/* @__PURE__ */ qwik.inlinedQrl(() => {
3004
- const [props2] = qwik.useLexicalScope();
3005
- const styles = {
3006
- display: "flex",
3007
- alignItems: "stretch",
3008
- flexDirection: "column",
3009
- ...props2.grid && {
3010
- flexDirection: "row",
3011
- alignItems: "flex-start",
3012
- flexWrap: "wrap"
3013
- }
3014
- };
3015
- return styles;
3016
- }, "Accordion_component_accordionStyles_useComputed_Jrd0cwGn25U", [
3017
- props
3018
- ]));
3019
- const accordionTitleStyles = qwik.useComputedQrl(/* @__PURE__ */ qwik.inlinedQrl(() => {
3020
- const shared = {
3021
- display: "flex",
3022
- flexDirection: "column"
3023
- };
3024
- const styles = {
3025
- ...shared,
3026
- alignItems: "stretch",
3027
- cursor: "pointer"
3028
- };
3029
- return Object.fromEntries(Object.entries(styles).filter(([_, value]) => value !== void 0));
3030
- }, "Accordion_component_accordionTitleStyles_useComputed_FopdBMH0V6U"));
3031
- const openGridItemOrder = qwik.useComputedQrl(/* @__PURE__ */ qwik.inlinedQrl(() => {
3032
- const [props2, state2] = qwik.useLexicalScope();
3033
- let itemOrder = null;
3034
- const getOpenGridItemPosition = props2.grid && state2.open.length;
3035
- if (getOpenGridItemPosition && document) {
3036
- const openItemIndex = state2.open[0];
3037
- const openItem = document.querySelector(`.builder-accordion-title[data-index="${openItemIndex}"]`);
3038
- let subjectItem = openItem;
3039
- itemOrder = openItemIndex;
3040
- if (subjectItem) {
3041
- let prevItemRect = subjectItem.getBoundingClientRect();
3042
- while (subjectItem = subjectItem && subjectItem.nextElementSibling)
3043
- if (subjectItem) {
3044
- if (subjectItem.classList.contains("builder-accordion-detail"))
3045
- continue;
3046
- const subjectItemRect = subjectItem.getBoundingClientRect();
3047
- if (subjectItemRect.left > prevItemRect.left) {
3048
- const index = parseInt(subjectItem.getAttribute("data-index") || "", 10);
3049
- if (!isNaN(index)) {
3050
- prevItemRect = subjectItemRect;
3051
- itemOrder = index;
3052
- }
3053
- } else
3054
- break;
3055
- }
3056
- }
3057
- }
3058
- if (typeof itemOrder === "number")
3059
- itemOrder = itemOrder + 1;
3060
- return itemOrder;
3061
- }, "Accordion_component_openGridItemOrder_useComputed_cCQY1Vnxll0", [
3062
- props,
3063
- state
3064
- ]));
3065
- const accordionDetailStyles = qwik.useComputedQrl(/* @__PURE__ */ qwik.inlinedQrl(() => {
3066
- const [openGridItemOrder2, props2] = qwik.useLexicalScope();
3067
- const styles = {
3068
- order: typeof openGridItemOrder2.value === "number" ? openGridItemOrder2.value : void 0,
3069
- ...props2.grid && {
3070
- width: "100%"
3071
- }
3072
- };
3073
- return Object.fromEntries(Object.entries(styles).filter(([_, value]) => value !== void 0));
3074
- }, "Accordion_component_accordionDetailStyles_useComputed_S0QmQzGJoRo", [
3075
- openGridItemOrder,
3076
- props
3077
- ]));
3078
- return /* @__PURE__ */ qwik._jsxQ("div", null, {
3079
- class: "builder-accordion",
3080
- style: qwik._fnSignal((p0) => p0.value, [
3081
- accordionStyles
3082
- ], "p0.value")
3083
- }, (props.items || []).map((item, index) => {
3084
- qwik._jsxBranch();
3085
- return /* @__PURE__ */ qwik._jsxC(qwik.Fragment, {
3086
- children: [
3087
- /* @__PURE__ */ qwik._jsxQ("div", {
3088
- class: getAccordionTitleClassName(props, state, onlyOneAtATime, accordionStyles, accordionTitleStyles, openGridItemOrder, accordionDetailStyles, index),
3089
- "data-index": index,
3090
- onClick$: /* @__PURE__ */ qwik.inlinedQrl((event) => {
3091
- const [accordionDetailStyles2, accordionStyles2, accordionTitleStyles2, index2, onlyOneAtATime2, openGridItemOrder2, props2, state2] = qwik.useLexicalScope();
3092
- return onClick$1(props2, state2, onlyOneAtATime2, accordionStyles2, accordionTitleStyles2, openGridItemOrder2, accordionDetailStyles2, index2);
3093
- }, "Accordion_component_div_Fragment_div_onClick_VtzhhJnK0XI", [
3094
- accordionDetailStyles,
3095
- accordionStyles,
3096
- accordionTitleStyles,
3097
- index,
3098
- onlyOneAtATime,
3099
- openGridItemOrder,
3100
- props,
3101
- state
3102
- ]),
3103
- style: {
3104
- ...accordionTitleStyles.value,
3105
- width: props.grid ? props.gridRowWidth : void 0,
3106
- order: openGridItemOrder.value !== null ? convertOrderNumberToString(index) : convertOrderNumberToString(index + 1)
3107
- }
3108
- }, null, /* @__PURE__ */ qwik._jsxC(Blocks, {
3109
- get blocks() {
3110
- return item.title;
3111
- },
3112
- path: `items.${index}.title`,
3113
- get parent() {
3114
- return props.builderBlock.id;
3115
- },
3116
- get context() {
3117
- return props.builderContext;
3118
- },
3119
- get registeredComponents() {
3120
- return props.builderComponents;
3121
- },
3122
- get linkComponent() {
3123
- return props.builderLinkComponent;
3124
- },
3125
- [qwik._IMMUTABLE]: {
3126
- blocks: qwik._wrapProp(item, "title"),
3127
- context: qwik._fnSignal((p0) => p0.builderContext, [
3128
- props
3129
- ], "p0.builderContext"),
3130
- linkComponent: qwik._fnSignal((p0) => p0.builderLinkComponent, [
3131
- props
3132
- ], "p0.builderLinkComponent"),
3133
- parent: qwik._fnSignal((p0) => p0.builderBlock.id, [
3134
- props
3135
- ], "p0.builderBlock.id"),
3136
- registeredComponents: qwik._fnSignal((p0) => p0.builderComponents, [
3137
- props
3138
- ], "p0.builderComponents")
3139
- }
3140
- }, 3, "hf_0"), 0, null),
3141
- state.open.includes(index) ? /* @__PURE__ */ qwik._jsxQ("div", {
3142
- class: getAccordionDetailClassName(props, state, onlyOneAtATime, accordionStyles, accordionTitleStyles, openGridItemOrder, accordionDetailStyles, index)
3143
- }, {
3144
- style: qwik._fnSignal((p0) => p0.value, [
3145
- accordionDetailStyles
3146
- ], "p0.value")
3147
- }, /* @__PURE__ */ qwik._jsxC(Blocks, {
3148
- get blocks() {
3149
- return item.detail;
3150
- },
3151
- path: `items.${index}.detail`,
3152
- get parent() {
3153
- return props.builderBlock.id;
3154
- },
3155
- get context() {
3156
- return props.builderContext;
3157
- },
3158
- get registeredComponents() {
3159
- return props.builderComponents;
3160
- },
3161
- get linkComponent() {
3162
- return props.builderLinkComponent;
3163
- },
3164
- [qwik._IMMUTABLE]: {
3165
- blocks: qwik._wrapProp(item, "detail"),
3166
- context: qwik._fnSignal((p0) => p0.builderContext, [
3167
- props
3168
- ], "p0.builderContext"),
3169
- linkComponent: qwik._fnSignal((p0) => p0.builderLinkComponent, [
3170
- props
3171
- ], "p0.builderLinkComponent"),
3172
- parent: qwik._fnSignal((p0) => p0.builderBlock.id, [
3173
- props
3174
- ], "p0.builderBlock.id"),
3175
- registeredComponents: qwik._fnSignal((p0) => p0.builderComponents, [
3176
- props
3177
- ], "p0.builderComponents")
3178
- }
3179
- }, 3, "hf_1"), 1, "hf_2") : null
2820
+ name: "backgroundPosition",
2821
+ type: "text",
2822
+ defaultValue: "center",
2823
+ enum: [
2824
+ "center",
2825
+ "top",
2826
+ "left",
2827
+ "right",
2828
+ "bottom",
2829
+ "top left",
2830
+ "top right",
2831
+ "bottom left",
2832
+ "bottom right"
3180
2833
  ]
3181
- }, 1, "hf_3");
3182
- }), 1, "hf_4");
3183
- }, "Accordion_component_jkuUCHm0nt0"));
3184
- const defaultTitle = {
3185
- "@type": "@builder.io/sdk:Element",
3186
- layerName: "Accordion item title",
3187
- responsiveStyles: {
3188
- large: {
3189
- marginTop: "10px",
3190
- position: "relative",
3191
- display: "flex",
3192
- alignItems: "stretch",
3193
- flexDirection: "column",
3194
- paddingBottom: "10px"
2834
+ },
2835
+ {
2836
+ name: "altText",
2837
+ type: "string",
2838
+ helperText: "Text to display when the user has images off"
2839
+ },
2840
+ {
2841
+ name: "height",
2842
+ type: "number",
2843
+ hideFromUI: true
2844
+ },
2845
+ {
2846
+ name: "width",
2847
+ type: "number",
2848
+ hideFromUI: true
2849
+ },
2850
+ {
2851
+ name: "sizes",
2852
+ type: "string",
2853
+ hideFromUI: true
2854
+ },
2855
+ {
2856
+ name: "srcset",
2857
+ type: "string",
2858
+ hideFromUI: true
2859
+ },
2860
+ {
2861
+ name: "lazy",
2862
+ type: "boolean",
2863
+ defaultValue: true,
2864
+ hideFromUI: true
2865
+ },
2866
+ {
2867
+ name: "fitContent",
2868
+ type: "boolean",
2869
+ helperText: "When child blocks are provided, fit to them instead of using the image's aspect ratio",
2870
+ defaultValue: true
2871
+ },
2872
+ {
2873
+ name: "aspectRatio",
2874
+ type: "number",
2875
+ helperText: "This is the ratio of height/width, e.g. set to 1.5 for a 300px wide and 200px tall photo. Set to 0 to not force the image to maintain it's aspect ratio",
2876
+ advanced: true,
2877
+ defaultValue: 0.7041
2878
+ }
2879
+ ]
2880
+ };
2881
+ const componentInfo$c = {
2882
+ name: "Core:Section",
2883
+ static: true,
2884
+ image: "https://cdn.builder.io/api/v1/image/assets%2FIsxPKMo2gPRRKeakUztj1D6uqed2%2F682efef23ace49afac61748dd305c70a",
2885
+ inputs: [
2886
+ {
2887
+ name: "maxWidth",
2888
+ type: "number",
2889
+ defaultValue: 1200
2890
+ },
2891
+ {
2892
+ name: "lazyLoad",
2893
+ type: "boolean",
2894
+ defaultValue: false,
2895
+ advanced: true,
2896
+ description: "Only render this section when in view"
3195
2897
  }
2898
+ ],
2899
+ defaultStyles: {
2900
+ paddingLeft: "20px",
2901
+ paddingRight: "20px",
2902
+ paddingTop: "50px",
2903
+ paddingBottom: "50px",
2904
+ marginTop: "0px",
2905
+ width: "100vw",
2906
+ marginLeft: "calc(50% - 50vw)"
3196
2907
  },
3197
- children: [
2908
+ canHaveChildren: true,
2909
+ defaultChildren: [
3198
2910
  {
3199
2911
  "@type": "@builder.io/sdk:Element",
3200
2912
  responsiveStyles: {
3201
2913
  large: {
3202
- textAlign: "left",
3203
- display: "flex",
3204
- flexDirection: "column"
2914
+ textAlign: "center"
3205
2915
  }
3206
2916
  },
3207
2917
  component: {
3208
2918
  name: "Text",
3209
2919
  options: {
3210
- text: "I am an accordion title. Click me!"
2920
+ text: "<p><b>I am a section! My content keeps from getting too wide, so that it's easy to read even on big screens.</b></p><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur</p>"
3211
2921
  }
3212
2922
  }
3213
2923
  }
3214
2924
  ]
3215
2925
  };
3216
- const defaultDetail = {
2926
+ const componentInfo$b = {
2927
+ name: "Slot",
2928
+ isRSC: true,
2929
+ description: "Allow child blocks to be inserted into this content when used as a Symbol",
2930
+ docsLink: "https://www.builder.io/c/docs/symbols-with-blocks",
2931
+ image: "https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F3aad6de36eae43b59b52c85190fdef56",
2932
+ // Maybe wrap this for canHaveChildren so bind children to this hm
2933
+ inputs: [
2934
+ {
2935
+ name: "name",
2936
+ type: "string",
2937
+ required: true,
2938
+ defaultValue: "children"
2939
+ }
2940
+ ]
2941
+ };
2942
+ const Slot = /* @__PURE__ */ qwik.componentQrl(/* @__PURE__ */ qwik.inlinedQrl((props) => {
2943
+ var _a, _b;
2944
+ return /* @__PURE__ */ qwik._jsxS("div", {
2945
+ ...!((_a = props.builderContext.context) == null ? void 0 : _a.symbolId) && {
2946
+ "builder-slot": props.name
2947
+ },
2948
+ children: /* @__PURE__ */ qwik._jsxC(Blocks, {
2949
+ get parent() {
2950
+ var _a2;
2951
+ return (_a2 = props.builderContext.context) == null ? void 0 : _a2.symbolId;
2952
+ },
2953
+ get path() {
2954
+ return `symbol.data.${props.name}`;
2955
+ },
2956
+ get context() {
2957
+ return props.builderContext;
2958
+ },
2959
+ blocks: deoptSignal((_b = props.builderContext.rootState) == null ? void 0 : _b[props.name]),
2960
+ [qwik._IMMUTABLE]: {
2961
+ context: qwik._fnSignal((p0) => p0.builderContext, [
2962
+ props
2963
+ ], "p0.builderContext"),
2964
+ parent: qwik._fnSignal((p0) => {
2965
+ var _a2;
2966
+ return (_a2 = p0.builderContext.context) == null ? void 0 : _a2.symbolId;
2967
+ }, [
2968
+ props
2969
+ ], "p0.builderContext.context?.symbolId"),
2970
+ path: qwik._fnSignal((p0) => `symbol.data.${p0.name}`, [
2971
+ props
2972
+ ], "`symbol.data.${p0.name}`")
2973
+ }
2974
+ }, 3, "B1_0")
2975
+ }, {
2976
+ style: {
2977
+ pointerEvents: "auto"
2978
+ }
2979
+ }, 0, "B1_1");
2980
+ }, "Slot_component_WWgWgfV0bb0"));
2981
+ const componentInfo$a = {
2982
+ name: "Symbol",
2983
+ noWrap: true,
2984
+ static: true,
2985
+ isRSC: true,
2986
+ inputs: [
2987
+ {
2988
+ name: "symbol",
2989
+ type: "uiSymbol"
2990
+ },
2991
+ {
2992
+ name: "dataOnly",
2993
+ helperText: "Make this a data symbol that doesn't display any UI",
2994
+ type: "boolean",
2995
+ defaultValue: false,
2996
+ advanced: true,
2997
+ hideFromUI: true
2998
+ },
2999
+ {
3000
+ name: "inheritState",
3001
+ helperText: "Inherit the parent component state and data",
3002
+ type: "boolean",
3003
+ defaultValue: false,
3004
+ advanced: true
3005
+ },
3006
+ {
3007
+ name: "renderToLiquid",
3008
+ helperText: "Render this symbols contents to liquid. Turn off to fetch with javascript and use custom targeting",
3009
+ type: "boolean",
3010
+ defaultValue: false,
3011
+ advanced: true,
3012
+ hideFromUI: true
3013
+ },
3014
+ {
3015
+ name: "useChildren",
3016
+ hideFromUI: true,
3017
+ type: "boolean"
3018
+ }
3019
+ ]
3020
+ };
3021
+ const defaultTab = {
3217
3022
  "@type": "@builder.io/sdk:Element",
3218
- layerName: "Accordion item detail",
3219
3023
  responsiveStyles: {
3220
3024
  large: {
3221
- position: "relative",
3025
+ paddingLeft: "20px",
3026
+ paddingRight: "20px",
3027
+ paddingTop: "10px",
3028
+ paddingBottom: "10px",
3029
+ minWidth: "100px",
3030
+ textAlign: "center",
3222
3031
  display: "flex",
3223
- alignItems: "stretch",
3224
3032
  flexDirection: "column",
3225
- marginTop: "10px",
3226
- paddingBottom: "10px"
3033
+ cursor: "pointer",
3034
+ userSelect: "none"
3227
3035
  }
3228
3036
  },
3229
- children: [
3230
- {
3231
- "@type": "@builder.io/sdk:Element",
3232
- responsiveStyles: {
3233
- large: {
3234
- paddingTop: "50px",
3235
- textAlign: "left",
3236
- display: "flex",
3237
- flexDirection: "column",
3238
- paddingBottom: "50px"
3239
- }
3240
- },
3241
- component: {
3242
- name: "Text",
3243
- options: {
3244
- text: "I am an accordion detail, hello!"
3245
- }
3246
- }
3037
+ component: {
3038
+ name: "Text",
3039
+ options: {
3040
+ text: "New tab"
3247
3041
  }
3248
- ]
3042
+ }
3249
3043
  };
3250
- const componentInfo$8 = {
3251
- name: "Builder:Accordion",
3252
- canHaveChildren: true,
3253
- image: "https://cdn.builder.io/api/v1/image/assets%2FagZ9n5CUKRfbL9t6CaJOyVSK4Es2%2Ffab6c1fd3fe542408cbdec078bca7f35",
3254
- defaultStyles: {
3255
- display: "flex",
3256
- flexDirection: "column",
3257
- alignItems: "stretch"
3044
+ const defaultElement = {
3045
+ "@type": "@builder.io/sdk:Element",
3046
+ responsiveStyles: {
3047
+ large: {
3048
+ height: "200px",
3049
+ display: "flex",
3050
+ marginTop: "20px",
3051
+ flexDirection: "column"
3052
+ }
3258
3053
  },
3054
+ component: {
3055
+ name: "Text",
3056
+ options: {
3057
+ text: "New tab content "
3058
+ }
3059
+ }
3060
+ };
3061
+ const componentInfo$9 = {
3062
+ name: "Builder: Tabs",
3259
3063
  inputs: [
3260
3064
  {
3261
- name: "items",
3065
+ name: "tabs",
3262
3066
  type: "list",
3263
3067
  broadcast: true,
3264
3068
  subFields: [
3265
3069
  {
3266
- name: "title",
3070
+ name: "label",
3267
3071
  type: "uiBlocks",
3268
3072
  hideFromUI: true,
3269
3073
  defaultValue: [
3270
- defaultTitle
3074
+ defaultTab
3271
3075
  ]
3272
3076
  },
3273
3077
  {
3274
- name: "detail",
3078
+ name: "content",
3275
3079
  type: "uiBlocks",
3276
3080
  hideFromUI: true,
3277
3081
  defaultValue: [
3278
- defaultDetail
3082
+ defaultElement
3279
3083
  ]
3280
3084
  }
3281
3085
  ],
3282
3086
  defaultValue: [
3283
3087
  {
3284
- title: [
3285
- defaultTitle
3088
+ label: [
3089
+ {
3090
+ ...defaultTab,
3091
+ component: {
3092
+ name: "Text",
3093
+ options: {
3094
+ text: "Tab 1"
3095
+ }
3096
+ }
3097
+ }
3286
3098
  ],
3287
- detail: [
3288
- defaultDetail
3099
+ content: [
3100
+ {
3101
+ ...defaultElement,
3102
+ component: {
3103
+ name: "Text",
3104
+ options: {
3105
+ text: "Tab 1 content"
3106
+ }
3107
+ }
3108
+ }
3289
3109
  ]
3290
3110
  },
3291
3111
  {
3292
- title: [
3293
- defaultTitle
3112
+ label: [
3113
+ {
3114
+ ...defaultTab,
3115
+ component: {
3116
+ name: "Text",
3117
+ options: {
3118
+ text: "Tab 2"
3119
+ }
3120
+ }
3121
+ }
3294
3122
  ],
3295
- detail: [
3296
- defaultDetail
3123
+ content: [
3124
+ {
3125
+ ...defaultElement,
3126
+ component: {
3127
+ name: "Text",
3128
+ options: {
3129
+ text: "Tab 2 content"
3130
+ }
3131
+ }
3132
+ }
3297
3133
  ]
3298
3134
  }
3299
- ],
3300
- showIf: (options) => !options.get("useChildrenForItems")
3301
- },
3302
- {
3303
- name: "oneAtATime",
3304
- helperText: "Only allow opening one at a time (collapse all others when new item openned)",
3305
- type: "boolean",
3306
- defaultValue: false
3135
+ ]
3307
3136
  },
3308
3137
  {
3309
- name: "grid",
3310
- helperText: "Display as a grid",
3311
- type: "boolean",
3312
- defaultValue: false
3138
+ name: "activeTabStyle",
3139
+ type: "uiStyle",
3140
+ helperText: "CSS styles for the active tab",
3141
+ defaultValue: {
3142
+ backgroundColor: "rgba(0, 0, 0, 0.1)"
3143
+ }
3313
3144
  },
3314
3145
  {
3315
- name: "gridRowWidth",
3316
- helperText: "Display as a grid",
3317
- type: "string",
3318
- showIf: (options) => options.get("grid"),
3319
- defaultValue: "25%"
3146
+ name: "defaultActiveTab",
3147
+ type: "number",
3148
+ helperText: 'Default tab to open to. Set to "1" for the first tab, "2" for the second, or choose "0" for none',
3149
+ defaultValue: 1,
3150
+ advanced: true
3320
3151
  },
3321
3152
  {
3322
- name: "useChildrenForItems",
3153
+ name: "collapsible",
3323
3154
  type: "boolean",
3324
- helperText: "Use child elements for each slide, instead of the array. Useful for dynamically repeating items",
3325
- advanced: true,
3155
+ helperText: "If on, clicking an open tab closes it so no tabs are active",
3326
3156
  defaultValue: false,
3327
- onChange: (options) => {
3328
- if (options.get("useChildrenForItems") === true)
3329
- options.set("items", []);
3330
- }
3157
+ advanced: true
3158
+ },
3159
+ {
3160
+ name: "tabHeaderLayout",
3161
+ type: "enum",
3162
+ helperText: "Change the layout of the tab headers (uses justify-content)",
3163
+ defaultValue: "flex-start",
3164
+ enum: [
3165
+ {
3166
+ label: "Center",
3167
+ value: "center"
3168
+ },
3169
+ {
3170
+ label: "Space between",
3171
+ value: "space-between"
3172
+ },
3173
+ {
3174
+ label: "Space around",
3175
+ value: "space-around"
3176
+ },
3177
+ {
3178
+ label: "Left",
3179
+ value: "flex-start"
3180
+ },
3181
+ {
3182
+ label: "Right",
3183
+ value: "flex-end"
3184
+ }
3185
+ ]
3331
3186
  }
3332
3187
  ]
3333
3188
  };
3189
+ const activeTabContent = function activeTabContent2(props, state, active) {
3190
+ return props.tabs && props.tabs[active].content;
3191
+ };
3192
+ const onClick$1 = function onClick23(props, state, index) {
3193
+ if (index === state.activeTab && props.collapsible)
3194
+ state.activeTab = -1;
3195
+ else
3196
+ state.activeTab = index;
3197
+ };
3198
+ const Tabs = /* @__PURE__ */ qwik.componentQrl(/* @__PURE__ */ qwik.inlinedQrl((props) => {
3199
+ qwik._jsxBranch();
3200
+ const state = qwik.useStore({
3201
+ activeTab: props.defaultActiveTab ? props.defaultActiveTab - 1 : 0
3202
+ });
3203
+ return /* @__PURE__ */ qwik._jsxQ("div", null, null, [
3204
+ /* @__PURE__ */ qwik._jsxQ("div", null, {
3205
+ class: "builder-tabs-wrap",
3206
+ style: qwik._fnSignal((p0) => ({
3207
+ display: "flex",
3208
+ flexDirection: "row",
3209
+ justifyContent: p0.tabHeaderLayout || "flex-start",
3210
+ overflow: "auto"
3211
+ }), [
3212
+ props
3213
+ ], '{display:"flex",flexDirection:"row",justifyContent:p0.tabHeaderLayout||"flex-start",overflow:"auto"}')
3214
+ }, (props.tabs || []).map((tab, index) => {
3215
+ return /* @__PURE__ */ qwik._jsxQ("span", {
3216
+ class: `builder-tab-wrap ${state.activeTab === index ? "builder-tab-active" : ""}`,
3217
+ onClick$: /* @__PURE__ */ qwik.inlinedQrl((event) => {
3218
+ const [index2, props2, state2] = qwik.useLexicalScope();
3219
+ return onClick$1(props2, state2, index2);
3220
+ }, "Tabs_component_div_div_span_onClick_hSTBabAHGks", [
3221
+ index,
3222
+ props,
3223
+ state
3224
+ ]),
3225
+ style: {
3226
+ ...state.activeTab === index ? props.activeTabStyle : {}
3227
+ }
3228
+ }, null, /* @__PURE__ */ qwik._jsxC(Blocks, {
3229
+ get parent() {
3230
+ return props.builderBlock.id;
3231
+ },
3232
+ path: `component.options.tabs.${index}.label`,
3233
+ get blocks() {
3234
+ return tab.label;
3235
+ },
3236
+ get context() {
3237
+ return props.builderContext;
3238
+ },
3239
+ get registeredComponents() {
3240
+ return props.builderComponents;
3241
+ },
3242
+ get linkComponent() {
3243
+ return props.builderLinkComponent;
3244
+ },
3245
+ [qwik._IMMUTABLE]: {
3246
+ blocks: qwik._wrapProp(tab, "label"),
3247
+ context: qwik._fnSignal((p0) => p0.builderContext, [
3248
+ props
3249
+ ], "p0.builderContext"),
3250
+ linkComponent: qwik._fnSignal((p0) => p0.builderLinkComponent, [
3251
+ props
3252
+ ], "p0.builderLinkComponent"),
3253
+ parent: qwik._fnSignal((p0) => p0.builderBlock.id, [
3254
+ props
3255
+ ], "p0.builderBlock.id"),
3256
+ registeredComponents: qwik._fnSignal((p0) => p0.builderComponents, [
3257
+ props
3258
+ ], "p0.builderComponents")
3259
+ }
3260
+ }, 3, "6k_0"), 0, index);
3261
+ }), 1, null),
3262
+ activeTabContent(props, state, state.activeTab) ? /* @__PURE__ */ qwik._jsxQ("div", null, null, /* @__PURE__ */ qwik._jsxC(Blocks, {
3263
+ get parent() {
3264
+ return props.builderBlock.id;
3265
+ },
3266
+ get path() {
3267
+ return `component.options.tabs.${state.activeTab}.content`;
3268
+ },
3269
+ blocks: activeTabContent(props, state, state.activeTab),
3270
+ get context() {
3271
+ return props.builderContext;
3272
+ },
3273
+ get registeredComponents() {
3274
+ return props.builderComponents;
3275
+ },
3276
+ get linkComponent() {
3277
+ return props.builderLinkComponent;
3278
+ },
3279
+ [qwik._IMMUTABLE]: {
3280
+ context: qwik._fnSignal((p0) => p0.builderContext, [
3281
+ props
3282
+ ], "p0.builderContext"),
3283
+ linkComponent: qwik._fnSignal((p0) => p0.builderLinkComponent, [
3284
+ props
3285
+ ], "p0.builderLinkComponent"),
3286
+ parent: qwik._fnSignal((p0) => p0.builderBlock.id, [
3287
+ props
3288
+ ], "p0.builderBlock.id"),
3289
+ path: qwik._fnSignal((p0) => `component.options.tabs.${p0.activeTab}.content`, [
3290
+ state
3291
+ ], "`component.options.tabs.${p0.activeTab}.content`"),
3292
+ registeredComponents: qwik._fnSignal((p0) => p0.builderComponents, [
3293
+ props
3294
+ ], "p0.builderComponents")
3295
+ }
3296
+ }, 3, "6k_1"), 1, "6k_2") : null
3297
+ ], 1, "6k_3");
3298
+ }, "Tabs_component_MhWcxXy0lMY"));
3299
+ const componentInfo$8 = {
3300
+ name: "Text",
3301
+ static: true,
3302
+ isRSC: true,
3303
+ image: "https://firebasestorage.googleapis.com/v0/b/builder-3b0a2.appspot.com/o/images%2Fbaseline-text_fields-24px%20(1).svg?alt=media&token=12177b73-0ee3-42ca-98c6-0dd003de1929",
3304
+ inputs: [
3305
+ {
3306
+ name: "text",
3307
+ type: "html",
3308
+ required: true,
3309
+ autoFocus: true,
3310
+ bubble: true,
3311
+ defaultValue: "Enter some text..."
3312
+ }
3313
+ ],
3314
+ defaultStyles: {
3315
+ lineHeight: "normal",
3316
+ height: "auto",
3317
+ textAlign: "center"
3318
+ }
3319
+ };
3320
+ const Text = /* @__PURE__ */ qwik.componentQrl(/* @__PURE__ */ qwik.inlinedQrl((props) => {
3321
+ return /* @__PURE__ */ qwik._jsxQ("div", null, {
3322
+ class: "builder-text",
3323
+ dangerouslySetInnerHTML: qwik._fnSignal((p0) => {
3324
+ var _a;
3325
+ return ((_a = p0.text) == null ? void 0 : _a.toString()) || "";
3326
+ }, [
3327
+ props
3328
+ ], 'p0.text?.toString()||""'),
3329
+ style: {
3330
+ outline: "none"
3331
+ }
3332
+ }, null, 3, "yO_0");
3333
+ }, "Text_component_15p0cKUxgIE"));
3334
3334
  const componentInfo$7 = {
3335
3335
  name: "Custom Code",
3336
3336
  static: true,
@@ -3820,11 +3820,11 @@ const onSubmit = function onSubmit2(props, state, formRef, event) {
3820
3820
  return;
3821
3821
  }
3822
3822
  event.preventDefault();
3823
- const el = event.currentTarget;
3823
+ const el = event.currentTarget || event.target;
3824
3824
  const headers = props.customHeaders || {};
3825
3825
  let body;
3826
3826
  const formData = new FormData(el);
3827
- const formPairs = Array.from(event.currentTarget.querySelectorAll("input,select,textarea")).filter((el2) => !!el2.name).map((el2) => {
3827
+ const formPairs = Array.from(el.querySelectorAll("input,select,textarea")).filter((el2) => !!el2.name).map((el2) => {
3828
3828
  let value;
3829
3829
  const key = el2.name;
3830
3830
  if (el2 instanceof HTMLInputElement) {
@@ -4071,6 +4071,7 @@ const FormComponent = /* @__PURE__ */ qwik.componentQrl(/* @__PURE__ */ qwik.inl
4071
4071
  name: qwik._fnSignal((p0) => p0.name, [
4072
4072
  props
4073
4073
  ], "p0.name"),
4074
+ "preventdefault:submit": true,
4074
4075
  validate: qwik._fnSignal((p0) => p0.validate, [
4075
4076
  props
4076
4077
  ], "p0.validate")
@@ -4575,44 +4576,44 @@ const getExtraComponents = () => [
4575
4576
  const getDefaultRegisteredComponents = () => [
4576
4577
  {
4577
4578
  component: Button,
4578
- ...componentInfo$h
4579
+ ...componentInfo$g
4579
4580
  },
4580
4581
  {
4581
4582
  component: Columns,
4582
- ...componentInfo$g
4583
+ ...componentInfo$f
4583
4584
  },
4584
4585
  {
4585
4586
  component: FragmentComponent,
4586
- ...componentInfo$f
4587
+ ...componentInfo$e
4587
4588
  },
4588
4589
  {
4589
4590
  component: Image,
4590
- ...componentInfo$e
4591
+ ...componentInfo$d
4591
4592
  },
4592
4593
  {
4593
4594
  component: SectionComponent,
4594
- ...componentInfo$d
4595
+ ...componentInfo$c
4595
4596
  },
4596
4597
  {
4597
4598
  component: Slot,
4598
- ...componentInfo$c
4599
+ ...componentInfo$b
4599
4600
  },
4600
4601
  {
4601
4602
  component: Symbol$1,
4602
- ...componentInfo$b
4603
+ ...componentInfo$a
4603
4604
  },
4604
4605
  {
4605
4606
  component: Text,
4606
- ...componentInfo$9
4607
+ ...componentInfo$8
4607
4608
  },
4608
4609
  ...[
4609
4610
  {
4610
4611
  component: Tabs,
4611
- ...componentInfo$a
4612
+ ...componentInfo$9
4612
4613
  },
4613
4614
  {
4614
4615
  component: Accordion,
4615
- ...componentInfo$8
4616
+ ...componentInfo$h
4616
4617
  }
4617
4618
  ],
4618
4619
  ...getExtraComponents()
@@ -5071,7 +5072,7 @@ function isFromTrustedHost(trustedHosts, e) {
5071
5072
  const url = new URL(e.origin), hostname = url.hostname;
5072
5073
  return (trustedHosts || DEFAULT_TRUSTED_HOSTS).findIndex((trustedHost) => trustedHost.startsWith("*.") ? hostname.endsWith(trustedHost.slice(1)) : trustedHost === hostname) > -1;
5073
5074
  }
5074
- const SDK_VERSION = "0.14.22";
5075
+ const SDK_VERSION = "0.14.23";
5075
5076
  const registry = {};
5076
5077
  function register(type, info) {
5077
5078
  let typeList = registry[type];