create-cloudflare 2.67.0 → 2.67.2

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/cli.js CHANGED
@@ -74534,7 +74534,7 @@ var __toESM2 = (mod, isNodeMode, target) => (target = mod != null ? __create2(__
74534
74534
  mod
74535
74535
  ));
74536
74536
 
74537
- // ../workers-utils/dist/chunk-S3JFRPJM.mjs
74537
+ // ../workers-utils/dist/chunk-L6UDSO24.mjs
74538
74538
  var import_node_assert = __toESM(require("node:assert"), 1);
74539
74539
  function isCompatDate(str) {
74540
74540
  return /^\d{4}-\d{2}-\d{2}$/.test(str);
@@ -74666,6 +74666,17 @@ function mapWorkerMetadataBindings(bindings) {
74666
74666
  ];
74667
74667
  }
74668
74668
  break;
74669
+ case "artifacts":
74670
+ {
74671
+ configObj.artifacts = [
74672
+ ...configObj.artifacts ?? [],
74673
+ {
74674
+ binding: binding.name,
74675
+ namespace: binding.namespace
74676
+ }
74677
+ ];
74678
+ }
74679
+ break;
74669
74680
  case "unsafe_hello_world": {
74670
74681
  configObj.unsafe_hello_world = [
74671
74682
  ...configObj.unsafe_hello_world ?? [],
@@ -78462,6 +78473,7 @@ var defaultWranglerConfig = {
78462
78473
  hyperdrive: [],
78463
78474
  workflows: [],
78464
78475
  secrets_store_secrets: [],
78476
+ artifacts: [],
78465
78477
  services: [],
78466
78478
  analytics_engine_datasets: [],
78467
78479
  ai: void 0,
@@ -83060,7 +83072,7 @@ var friendlyBindingNames = {
83060
83072
  services: "Worker",
83061
83073
  analytics_engine_datasets: "Analytics Engine Dataset",
83062
83074
  text_blobs: "Text Blob",
83063
- browser: "Browser",
83075
+ browser: "Browser Run",
83064
83076
  ai: "AI",
83065
83077
  images: "Images",
83066
83078
  stream: "Stream",
@@ -83074,6 +83086,7 @@ var friendlyBindingNames = {
83074
83086
  workflows: "Workflow",
83075
83087
  pipelines: "Pipeline",
83076
83088
  secrets_store_secrets: "Secrets Store Secret",
83089
+ artifacts: "Artifacts",
83077
83090
  ratelimits: "Rate Limit",
83078
83091
  assets: "Assets",
83079
83092
  unsafe_hello_world: "Hello World",
@@ -83091,7 +83104,7 @@ var bindingTypeFriendlyNames = {
83091
83104
  send_email: "Send Email",
83092
83105
  wasm_module: "Wasm Module",
83093
83106
  text_blob: "Text Blob",
83094
- browser: "Browser",
83107
+ browser: "Browser Run",
83095
83108
  ai: "AI",
83096
83109
  images: "Images",
83097
83110
  stream: "Stream",
@@ -83113,6 +83126,7 @@ var bindingTypeFriendlyNames = {
83113
83126
  mtls_certificate: "mTLS Certificate",
83114
83127
  pipeline: "Pipeline",
83115
83128
  secrets_store_secret: "Secrets Store Secret",
83129
+ artifacts: "Artifacts",
83116
83130
  logfwdr: "logfwdr",
83117
83131
  unsafe_hello_world: "Hello World",
83118
83132
  flagship: "Flagship",
@@ -84430,6 +84444,16 @@ function normalizeAndValidateEnvironment(diagnostics, configPath, rawEnv, isDisp
84430
84444
  validateBindingArray(envName, validateSecretsStoreSecretBinding),
84431
84445
  []
84432
84446
  ),
84447
+ artifacts: notInheritable(
84448
+ diagnostics,
84449
+ topLevelEnv,
84450
+ rawConfig,
84451
+ rawEnv,
84452
+ envName,
84453
+ "artifacts",
84454
+ validateBindingArray(envName, validateArtifactsBinding),
84455
+ []
84456
+ ),
84433
84457
  unsafe_hello_world: notInheritable(
84434
84458
  diagnostics,
84435
84459
  topLevelEnv,
@@ -85327,7 +85351,8 @@ var validateUnsafeBinding = /* @__PURE__ */ __name((diagnostics, field, value) =
85327
85351
  "flagship",
85328
85352
  "vpc_network",
85329
85353
  "stream",
85330
- "media"
85354
+ "media",
85355
+ "artifacts"
85331
85356
  ];
85332
85357
  if (safeBindings.includes(value.type)) {
85333
85358
  diagnostics.warnings.push(
@@ -85585,6 +85610,11 @@ function validateContainerApp(envName, topLevelName, configPath) {
85585
85610
  `"containers.durable_objects" is deprecated. Use the "class_name" field instead.`
85586
85611
  );
85587
85612
  }
85613
+ if ("wrangler_ssh" in containerAppOptional) {
85614
+ diagnostics.warnings.push(
85615
+ `"containers.wrangler_ssh" is deprecated. Use "containers.ssh" instead.`
85616
+ );
85617
+ }
85588
85618
  if ("unsafe" in containerAppOptional) {
85589
85619
  if (containerAppOptional.unsafe && typeof containerAppOptional.unsafe !== "object" || Array.isArray(containerAppOptional.unsafe)) {
85590
85620
  diagnostics.errors.push(
@@ -85608,6 +85638,7 @@ function validateContainerApp(envName, topLevelName, configPath) {
85608
85638
  "class_name",
85609
85639
  "scheduling_policy",
85610
85640
  "instance_type",
85641
+ "ssh",
85611
85642
  "wrangler_ssh",
85612
85643
  "authorized_keys",
85613
85644
  "trusted_user_ca_keys",
@@ -85629,23 +85660,28 @@ function validateContainerApp(envName, topLevelName, configPath) {
85629
85660
  ["image", "secrets", "labels", "disk", "vcpu", "memory_mib"]
85630
85661
  );
85631
85662
  }
85632
- if ("wrangler_ssh" in containerAppOptional) {
85633
- if (!isRequiredProperty(
85634
- containerAppOptional.wrangler_ssh,
85635
- "enabled",
85636
- "boolean"
85637
- )) {
85663
+ let sshField;
85664
+ let sshConfig;
85665
+ if ("ssh" in containerAppOptional) {
85666
+ sshField = "ssh";
85667
+ sshConfig = containerAppOptional.ssh;
85668
+ containerAppOptional.wrangler_ssh = containerAppOptional.ssh;
85669
+ delete containerAppOptional.ssh;
85670
+ } else if ("wrangler_ssh" in containerAppOptional) {
85671
+ sshField = "wrangler_ssh";
85672
+ sshConfig = containerAppOptional.wrangler_ssh;
85673
+ }
85674
+ if (sshField !== void 0) {
85675
+ const sshConfigObject = typeof sshConfig === "object" && sshConfig !== null ? sshConfig : {};
85676
+ if (!isRequiredProperty(sshConfigObject, "enabled", "boolean")) {
85638
85677
  diagnostics.errors.push(
85639
- `${field}.wrangler_ssh.enabled must be a boolean`
85678
+ `${field}.${sshField}.enabled must be a boolean`
85640
85679
  );
85641
85680
  }
85642
- if (!isOptionalProperty(
85643
- containerAppOptional.wrangler_ssh,
85644
- "port",
85645
- "number"
85646
- ) || containerAppOptional.wrangler_ssh.port < 1 || containerAppOptional.wrangler_ssh.port > 65535) {
85681
+ const sshPort = "port" in sshConfigObject ? sshConfigObject.port : void 0;
85682
+ if (!isOptionalProperty(sshConfigObject, "port", "number") || typeof sshPort === "number" && (sshPort < 1 || sshPort > 65535)) {
85647
85683
  diagnostics.errors.push(
85648
- `${field}.wrangler_ssh.port must be a number between 1 and 65535 inclusive`
85684
+ `${field}.${sshField}.port must be a number between 1 and 65535 inclusive`
85649
85685
  );
85650
85686
  }
85651
85687
  }
@@ -85721,6 +85757,43 @@ function validateContainerApp(envName, topLevelName, configPath) {
85721
85757
  constraints.tiers,
85722
85758
  "number"
85723
85759
  );
85760
+ validateOptionalProperty(
85761
+ diagnostics,
85762
+ `${field}.constraints`,
85763
+ "jurisdiction",
85764
+ constraints.jurisdiction,
85765
+ "string"
85766
+ );
85767
+ if (constraints.jurisdiction && !["eu", "fedramp"].includes(constraints.jurisdiction)) {
85768
+ diagnostics.errors.push(
85769
+ `${field}.constraints.jurisdiction must be one of: "eu", "fedramp"`
85770
+ );
85771
+ }
85772
+ if (validateOptionalTypedArray(
85773
+ diagnostics,
85774
+ `${field}.constraints.regions`,
85775
+ constraints.regions,
85776
+ "string"
85777
+ ) && constraints.regions && Array.isArray(constraints.regions)) {
85778
+ const validRegions = [
85779
+ "ENAM",
85780
+ "WNAM",
85781
+ "EEUR",
85782
+ "WEUR",
85783
+ "APAC",
85784
+ "SAM",
85785
+ "ME",
85786
+ "OC",
85787
+ "AFR"
85788
+ ];
85789
+ for (const region of constraints.regions) {
85790
+ if (typeof region === "string" && !validRegions.includes(region.toUpperCase())) {
85791
+ diagnostics.errors.push(
85792
+ `${field}.constraints.regions contains invalid region "${region}". Valid regions are: ${validRegions.join(", ")}`
85793
+ );
85794
+ }
85795
+ }
85796
+ }
85724
85797
  }
85725
85798
  if (typeof containerAppOptional.instance_type === "string") {
85726
85799
  validateOptionalProperty(
@@ -86731,6 +86804,40 @@ var validateSecretsStoreSecretBinding = /* @__PURE__ */ __name((diagnostics, fie
86731
86804
  ]);
86732
86805
  return isValid2;
86733
86806
  }, "validateSecretsStoreSecretBinding");
86807
+ var validateArtifactsBinding = /* @__PURE__ */ __name((diagnostics, field, value) => {
86808
+ if (typeof value !== "object" || value === null) {
86809
+ diagnostics.errors.push(
86810
+ `"artifacts" bindings should be objects, but got ${JSON.stringify(value)}`
86811
+ );
86812
+ return false;
86813
+ }
86814
+ let isValid2 = true;
86815
+ if (!isRequiredProperty(value, "binding", "string")) {
86816
+ diagnostics.errors.push(
86817
+ `"${field}" bindings must have a string "binding" field but got ${JSON.stringify(
86818
+ value
86819
+ )}.`
86820
+ );
86821
+ isValid2 = false;
86822
+ }
86823
+ if (!isRequiredProperty(value, "namespace", "string")) {
86824
+ diagnostics.errors.push(
86825
+ `"${field}" bindings must have a string "namespace" field but got ${JSON.stringify(
86826
+ value
86827
+ )}.`
86828
+ );
86829
+ isValid2 = false;
86830
+ }
86831
+ validateAdditionalProperties(diagnostics, field, Object.keys(value), [
86832
+ "binding",
86833
+ "namespace",
86834
+ "remote"
86835
+ ]);
86836
+ if (!isRemoteValid(value, field, diagnostics)) {
86837
+ isValid2 = false;
86838
+ }
86839
+ return isValid2;
86840
+ }, "validateArtifactsBinding");
86734
86841
  var validateHelloWorldBinding = /* @__PURE__ */ __name((diagnostics, field, value) => {
86735
86842
  if (typeof value !== "object" || value === null) {
86736
86843
  diagnostics.errors.push(
@@ -86952,6 +87059,7 @@ var validatePreviewsConfig = /* @__PURE__ */ __name((envName) => (diagnostics, f
86952
87059
  "media",
86953
87060
  "pipelines",
86954
87061
  "secrets_store_secrets",
87062
+ "artifacts",
86955
87063
  "unsafe_hello_world",
86956
87064
  "worker_loaders",
86957
87065
  "ratelimits",
@@ -87121,6 +87229,12 @@ var validatePreviewsConfig = /* @__PURE__ */ __name((envName) => (diagnostics, f
87121
87229
  previews.secrets_store_secrets,
87122
87230
  void 0
87123
87231
  ) && isValid2;
87232
+ isValid2 = validateBindingArray(envName, validateArtifactsBinding)(
87233
+ diagnostics,
87234
+ `${field}.artifacts`,
87235
+ previews.artifacts,
87236
+ void 0
87237
+ ) && isValid2;
87124
87238
  isValid2 = validateBindingArray(envName, validateHelloWorldBinding)(
87125
87239
  diagnostics,
87126
87240
  `${field}.unsafe_hello_world`,
@@ -94543,7 +94657,7 @@ var Yargs = YargsFactory(esm_default2);
94543
94657
  var yargs_default = Yargs;
94544
94658
 
94545
94659
  // package.json
94546
- var version = "2.67.0";
94660
+ var version = "2.67.2";
94547
94661
 
94548
94662
  // src/metrics.ts
94549
94663
  var import_node_async_hooks = require("node:async_hooks");
@@ -96769,23 +96883,23 @@ var package_default = {
96769
96883
  name: "frameworks_clis_info",
96770
96884
  dependencies: {
96771
96885
  "@angular/create": "21.2.6",
96772
- "@tanstack/create-start": "0.59.8",
96773
- "create-analog": "2.4.7",
96886
+ "@tanstack/create-start": "0.59.21",
96887
+ "create-analog": "2.4.8",
96774
96888
  "create-astro": "5.0.5",
96775
96889
  "create-docusaurus": "3.10.0",
96776
96890
  "create-hono": "0.19.4",
96777
- "create-next-app": "16.2.2",
96891
+ "create-next-app": "16.2.4",
96778
96892
  "create-qwik": "1.19.2",
96779
- "create-react-router": "7.14.0",
96893
+ "create-react-router": "7.14.1",
96780
96894
  "create-rwsdk": "3.1.3",
96781
96895
  "create-solid": "0.7.0",
96782
- "create-vike": "0.0.616",
96896
+ "create-vike": "0.0.622",
96783
96897
  "create-vite": "9.0.4",
96784
96898
  "create-vue": "3.22.2",
96785
96899
  "create-waku": "0.12.5-1.0.0-alpha.7-0",
96786
96900
  gatsby: "5.16.1",
96787
96901
  nuxi: "3.34.0",
96788
- sv: "0.12.4"
96902
+ sv: "0.12.5"
96789
96903
  },
96790
96904
  info: [
96791
96905
  "This package.json is only used to keep track of the frameworks cli dependencies",
@@ -98531,23 +98645,23 @@ async function getVariant2(ctx) {
98531
98645
  lang: "ts",
98532
98646
  label: "TypeScript"
98533
98647
  },
98534
- {
98535
- value: "react-swc-ts",
98536
- lang: "ts",
98537
- label: "TypeScript + SWC"
98538
- },
98539
98648
  {
98540
98649
  value: "react",
98541
98650
  lang: "js",
98542
98651
  label: "JavaScript"
98543
- },
98544
- {
98545
- value: "react-swc",
98546
- lang: "js",
98547
- label: "JavaScript + SWC"
98548
98652
  }
98549
98653
  ];
98550
98654
  if (ctx.args.variant) {
98655
+ const deprecatedVariantReplacements = {
98656
+ "react-swc-ts": "react-ts",
98657
+ "react-swc": "react"
98658
+ };
98659
+ const replacement = deprecatedVariantReplacements[ctx.args.variant];
98660
+ if (replacement) {
98661
+ throw new Error(
98662
+ `The React variant "${ctx.args.variant}" is no longer available. Use "${replacement}" instead.`
98663
+ );
98664
+ }
98551
98665
  const selected2 = variantsOptions2.find(
98552
98666
  (variant) => variant.value === ctx.args.variant
98553
98667
  );
@@ -99243,7 +99357,7 @@ If the application uses Durable Objects or Workflows, refer to the relevant best
99243
99357
  var import_node_assert6 = __toESM(require("node:assert"));
99244
99358
 
99245
99359
  // ../wrangler/package.json
99246
- var version2 = "4.83.0";
99360
+ var version2 = "4.84.1";
99247
99361
 
99248
99362
  // src/git.ts
99249
99363
  var offerGit = async (ctx) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-cloudflare",
3
- "version": "2.67.0",
3
+ "version": "2.67.2",
4
4
  "description": "A CLI for creating and deploying new applications to Cloudflare.",
5
5
  "keywords": [
6
6
  "cloudflare",
@@ -31,7 +31,7 @@
31
31
  "@babel/parser": "^7.21.3",
32
32
  "@babel/types": "^7.21.4",
33
33
  "@clack/prompts": "^0.6.3",
34
- "@cloudflare/workers-types": "^4.20260415.1",
34
+ "@cloudflare/workers-types": "^4.20260421.1",
35
35
  "@types/command-exists": "^1.2.0",
36
36
  "@types/cross-spawn": "^6.0.2",
37
37
  "@types/deepmerge": "^2.2.0",
@@ -53,7 +53,6 @@
53
53
  "execa": "^7.1.1",
54
54
  "exit-hook": "2.2.1",
55
55
  "get-port": "^7.1.0",
56
- "glob": "^10.5.0",
57
56
  "haikunator": "^2.1.2",
58
57
  "indent-string": "^5.0.0",
59
58
  "jsonc-parser": "^3.2.0",
@@ -62,6 +61,7 @@
62
61
  "recast": "^0.23.11",
63
62
  "semver": "^7.7.1",
64
63
  "smol-toml": "^1.5.2",
64
+ "tinyglobby": "^0.2.12",
65
65
  "tree-kill": "^1.2.2",
66
66
  "typescript": "~5.8.3",
67
67
  "undici": "7.24.8",
@@ -75,10 +75,10 @@
75
75
  "@cloudflare/cli": "1.4.0",
76
76
  "@cloudflare/codemod": "1.1.0",
77
77
  "@cloudflare/mock-npm-registry": "0.0.0",
78
- "@cloudflare/vite-plugin": "1.32.3",
78
+ "@cloudflare/vite-plugin": "1.33.1",
79
79
  "@cloudflare/workers-tsconfig": "0.0.0",
80
- "@cloudflare/workers-utils": "0.16.1",
81
- "wrangler": "4.83.0"
80
+ "@cloudflare/workers-utils": "0.17.0",
81
+ "wrangler": "4.84.1"
82
82
  },
83
83
  "engines": {
84
84
  "node": ">=20.0.0"
@@ -122,25 +122,27 @@ async function getVariant(ctx: C3Context) {
122
122
  lang: "ts",
123
123
  label: "TypeScript",
124
124
  },
125
- {
126
- value: "react-swc-ts",
127
- lang: "ts",
128
- label: "TypeScript + SWC",
129
- },
130
125
  {
131
126
  value: "react",
132
127
  lang: "js",
133
128
  label: "JavaScript",
134
129
  },
135
- {
136
- value: "react-swc",
137
- lang: "js",
138
- label: "JavaScript + SWC",
139
- },
140
130
  ];
141
131
 
142
132
  // If variant is provided via CLI args, use it directly
143
133
  if (ctx.args.variant) {
134
+ const deprecatedVariantReplacements: Record<string, string> = {
135
+ "react-swc-ts": "react-ts",
136
+ "react-swc": "react",
137
+ };
138
+
139
+ const replacement = deprecatedVariantReplacements[ctx.args.variant];
140
+ if (replacement) {
141
+ throw new Error(
142
+ `The React variant "${ctx.args.variant}" is no longer available. Use "${replacement}" instead.`
143
+ );
144
+ }
145
+
144
146
  const selected = variantsOptions.find(
145
147
  (variant) => variant.value === ctx.args.variant
146
148
  );
@@ -1,7 +1,8 @@
1
1
  import { useState } from 'react'
2
2
  import reactLogo from './assets/react.svg'
3
3
  import viteLogo from './assets/vite.svg'
4
- import cloudflareLogo from './assets/Cloudflare_Logo.svg'
4
+ import cloudflareLogo from './assets/cloudflare.svg'
5
+ import heroImg from './assets/hero.png'
5
6
  import './App.css'
6
7
 
7
8
  function App() {
@@ -10,47 +11,136 @@ function App() {
10
11
 
11
12
  return (
12
13
  <>
13
- <div>
14
- <a href='https://vite.dev' target='_blank'>
15
- <img src={viteLogo} className='logo' alt='Vite logo' />
16
- </a>
17
- <a href='https://react.dev' target='_blank'>
18
- <img src={reactLogo} className='logo react' alt='React logo' />
19
- </a>
20
- <a href='https://workers.cloudflare.com/' target='_blank'>
21
- <img src={cloudflareLogo} className='logo cloudflare' alt='Cloudflare logo' />
22
- </a>
23
- </div>
24
- <h1>Vite + React + Cloudflare</h1>
25
- <div className='card'>
26
- <button
27
- onClick={() => setCount((count) => count + 1)}
28
- aria-label='increment'
29
- >
30
- count is {count}
31
- </button>
32
- <p>
33
- Edit <code>src/App.tsx</code> and save to test HMR
34
- </p>
35
- </div>
36
- <div className='card'>
37
- <button
38
- onClick={() => {
39
- fetch('/api/')
40
- .then((res) => res.json())
41
- .then((data) => setName(data.name))
42
- }}
43
- aria-label='get name'
44
- >
45
- Name from API is: {name}
46
- </button>
47
- <p>
48
- Edit <code>worker/index.js</code> to change the name
49
- </p>
50
- </div>
51
- <p className='read-the-docs'>
52
- Click on the Vite and React logos to learn more
53
- </p>
14
+ <section id="center">
15
+ <div className="hero">
16
+ <img src={heroImg} className="base" width="170" height="179" alt="" />
17
+ <img src={reactLogo} className="framework" alt="React logo" />
18
+ <img src={viteLogo} className="vite" alt="Vite logo" />
19
+ </div>
20
+ <div>
21
+ <h1>Get started with Cloudflare</h1>
22
+ <p>
23
+ Edit <code>src/App.jsx</code> or <code>worker/index.js</code> and save to test <code>HMR</code>
24
+ </p>
25
+ </div>
26
+ <ul style={{ display: 'flex', gap: '1rem', listStyle: 'none', padding: 0 }}>
27
+ <li>
28
+ <button
29
+ className="counter"
30
+ onClick={() => setCount((count) => count + 1)}
31
+ >
32
+ Count is {count}
33
+ </button>
34
+ </li>
35
+ <li>
36
+ <button
37
+ className="counter"
38
+ onClick={() => {
39
+ fetch('/api/')
40
+ .then((res) => res.json())
41
+ .then((data) => setName(data.name))
42
+ }}
43
+ aria-label='get name'
44
+ >
45
+ Name from API is: {name}
46
+ </button>
47
+ </li>
48
+ </ul>
49
+
50
+
51
+ </section>
52
+
53
+ <div className="ticks"></div>
54
+
55
+ <section id="next-steps">
56
+ <div id="docs">
57
+ <svg className="icon" role="presentation" aria-hidden="true">
58
+ <use href="/icons.svg#documentation-icon"></use>
59
+ </svg>
60
+ <h2>Documentation</h2>
61
+ <p>Your questions, answered</p>
62
+ <ul>
63
+ <li>
64
+ <a href="https://vite.dev/" target="_blank">
65
+ <img className="logo" src={viteLogo} alt="" />
66
+ Explore Vite
67
+ </a>
68
+ </li>
69
+ <li>
70
+ <a href="https://react.dev/" target="_blank">
71
+ <img className="button-icon" src={reactLogo} alt="" />
72
+ Learn more
73
+ </a>
74
+ </li>
75
+ <li>
76
+ <a href="https://workers.cloudflare.com/" target="_blank">
77
+ <img className="button-icon" src={cloudflareLogo} alt="" />
78
+ Workers Docs
79
+ </a>
80
+ </li>
81
+ </ul>
82
+ </div>
83
+ <div id="social">
84
+ <svg className="icon" role="presentation" aria-hidden="true">
85
+ <use href="/icons.svg#social-icon"></use>
86
+ </svg>
87
+ <h2>Connect with us</h2>
88
+ <p>Join the Vite community</p>
89
+ <ul>
90
+ <li>
91
+ <a href="https://github.com/vitejs/vite" target="_blank">
92
+ <svg
93
+ className="button-icon"
94
+ role="presentation"
95
+ aria-hidden="true"
96
+ >
97
+ <use href="/icons.svg#github-icon"></use>
98
+ </svg>
99
+ GitHub
100
+ </a>
101
+ </li>
102
+ <li>
103
+ <a href="https://chat.vite.dev/" target="_blank">
104
+ <svg
105
+ className="button-icon"
106
+ role="presentation"
107
+ aria-hidden="true"
108
+ >
109
+ <use href="/icons.svg#discord-icon"></use>
110
+ </svg>
111
+ Discord
112
+ </a>
113
+ </li>
114
+ <li>
115
+ <a href="https://x.com/vite_js" target="_blank">
116
+ <svg
117
+ className="button-icon"
118
+ role="presentation"
119
+ aria-hidden="true"
120
+ >
121
+ <use href="/icons.svg#x-icon"></use>
122
+ </svg>
123
+ X.com
124
+ </a>
125
+ </li>
126
+ <li>
127
+ <a href="https://bsky.app/profile/vite.dev" target="_blank">
128
+ <svg
129
+ className="button-icon"
130
+ role="presentation"
131
+ aria-hidden="true"
132
+ >
133
+ <use href="/icons.svg#bluesky-icon"></use>
134
+ </svg>
135
+ Bluesky
136
+ </a>
137
+ </li>
138
+ </ul>
139
+ </div>
140
+ </section>
141
+
142
+ <div className="ticks"></div>
143
+ <section id="spacer"></section>
54
144
  </>
55
145
  )
56
146
  }
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="40" height="19" fill="none" viewBox="0 0 40 19"><path fill="#f6821f" d="m27.16 18.507.204-.735c.242-.873.152-1.68-.255-2.274-.374-.547-.998-.868-1.755-.906l-14.346-.19a.3.3 0 0 1-.127-.034.3.3 0 0 1-.099-.09.31.31 0 0 1-.03-.27.4.4 0 0 1 .128-.185.37.37 0 0 1 .205-.081l14.479-.192c1.717-.082 3.576-1.536 4.227-3.31l.826-2.25a.55.55 0 0 0 .022-.298C29.702 3.29 25.94 0 21.44 0c-4.146 0-7.667 2.792-8.928 6.673a4.1 4.1 0 0 0-2.978-.86c-1.99.206-3.589 1.877-3.786 3.953a4.6 4.6 0 0 0 .11 1.547C2.605 11.41 0 14.189 0 17.603q0 .459.065.911c.009.07.042.134.093.18.05.047.116.072.183.073l26.485.003h.007a.34.34 0 0 0 .205-.076.36.36 0 0 0 .122-.187"/><path fill="#fbad41" d="M31.94 8.153q-.2 0-.397.01a.2.2 0 0 0-.062.014.2.2 0 0 0-.091.061.24.24 0 0 0-.054.098l-.564 2.033c-.243.874-.152 1.68.254 2.274.375.547.998.868 1.756.906l3.058.191a.3.3 0 0 1 .123.035.28.28 0 0 1 .142.22.3.3 0 0 1-.015.14.4.4 0 0 1-.128.185.37.37 0 0 1-.205.08l-3.177.192c-1.725.083-3.585 1.536-4.235 3.31l-.23.626a.18.18 0 0 0 .017.16.17.17 0 0 0 .134.08h10.941a.3.3 0 0 0 .176-.06.3.3 0 0 0 .106-.16 8.5 8.5 0 0 0 .291-2.216c0-4.517-3.51-8.18-7.84-8.18"/></svg>
@@ -1,7 +1,8 @@
1
1
  import { useState } from 'react'
2
2
  import reactLogo from './assets/react.svg'
3
3
  import viteLogo from './assets/vite.svg'
4
- import cloudflareLogo from './assets/Cloudflare_Logo.svg'
4
+ import cloudflareLogo from './assets/cloudflare.svg'
5
+ import heroImg from './assets/hero.png'
5
6
  import './App.css'
6
7
 
7
8
  function App() {
@@ -10,47 +11,136 @@ function App() {
10
11
 
11
12
  return (
12
13
  <>
13
- <div>
14
- <a href='https://vite.dev' target='_blank'>
15
- <img src={viteLogo} className='logo' alt='Vite logo' />
16
- </a>
17
- <a href='https://react.dev' target='_blank'>
18
- <img src={reactLogo} className='logo react' alt='React logo' />
19
- </a>
20
- <a href='https://workers.cloudflare.com/' target='_blank'>
21
- <img src={cloudflareLogo} className='logo cloudflare' alt='Cloudflare logo' />
22
- </a>
23
- </div>
24
- <h1>Vite + React + Cloudflare</h1>
25
- <div className='card'>
26
- <button
27
- onClick={() => setCount((count) => count + 1)}
28
- aria-label='increment'
29
- >
30
- count is {count}
31
- </button>
32
- <p>
33
- Edit <code>src/App.tsx</code> and save to test HMR
34
- </p>
35
- </div>
36
- <div className='card'>
37
- <button
38
- onClick={() => {
39
- fetch('/api/')
40
- .then((res) => res.json() as Promise<{ name: string }>)
41
- .then((data) => setName(data.name))
42
- }}
43
- aria-label='get name'
44
- >
45
- Name from API is: {name}
46
- </button>
47
- <p>
48
- Edit <code>worker/index.ts</code> to change the name
49
- </p>
50
- </div>
51
- <p className='read-the-docs'>
52
- Click on the Vite and React logos to learn more
53
- </p>
14
+ <section id="center">
15
+ <div className="hero">
16
+ <img src={heroImg} className="base" width="170" height="179" alt="" />
17
+ <img src={reactLogo} className="framework" alt="React logo" />
18
+ <img src={viteLogo} className="vite" alt="Vite logo" />
19
+ </div>
20
+ <div>
21
+ <h1>Get started with Cloudflare</h1>
22
+ <p>
23
+ Edit <code>src/App.tsx</code> or <code>worker/index.ts</code> and save to test <code>HMR</code>
24
+ </p>
25
+ </div>
26
+ <ul style={{ display: 'flex', gap: '1rem', listStyle: 'none', padding: 0 }}>
27
+ <li>
28
+ <button
29
+ className="counter"
30
+ onClick={() => setCount((count) => count + 1)}
31
+ >
32
+ Count is {count}
33
+ </button>
34
+ </li>
35
+ <li>
36
+ <button
37
+ className="counter"
38
+ onClick={() => {
39
+ fetch('/api/')
40
+ .then((res) => res.json())
41
+ .then((data) => setName(data.name))
42
+ }}
43
+ aria-label='get name'
44
+ >
45
+ Name from API is: {name}
46
+ </button>
47
+ </li>
48
+ </ul>
49
+
50
+
51
+ </section>
52
+
53
+ <div className="ticks"></div>
54
+
55
+ <section id="next-steps">
56
+ <div id="docs">
57
+ <svg className="icon" role="presentation" aria-hidden="true">
58
+ <use href="/icons.svg#documentation-icon"></use>
59
+ </svg>
60
+ <h2>Documentation</h2>
61
+ <p>Your questions, answered</p>
62
+ <ul>
63
+ <li>
64
+ <a href="https://vite.dev/" target="_blank">
65
+ <img className="logo" src={viteLogo} alt="" />
66
+ Explore Vite
67
+ </a>
68
+ </li>
69
+ <li>
70
+ <a href="https://react.dev/" target="_blank">
71
+ <img className="button-icon" src={reactLogo} alt="" />
72
+ Learn more
73
+ </a>
74
+ </li>
75
+ <li>
76
+ <a href="https://workers.cloudflare.com/" target="_blank">
77
+ <img className="button-icon" src={cloudflareLogo} alt="" />
78
+ Workers Docs
79
+ </a>
80
+ </li>
81
+ </ul>
82
+ </div>
83
+ <div id="social">
84
+ <svg className="icon" role="presentation" aria-hidden="true">
85
+ <use href="/icons.svg#social-icon"></use>
86
+ </svg>
87
+ <h2>Connect with us</h2>
88
+ <p>Join the Vite community</p>
89
+ <ul>
90
+ <li>
91
+ <a href="https://github.com/vitejs/vite" target="_blank">
92
+ <svg
93
+ className="button-icon"
94
+ role="presentation"
95
+ aria-hidden="true"
96
+ >
97
+ <use href="/icons.svg#github-icon"></use>
98
+ </svg>
99
+ GitHub
100
+ </a>
101
+ </li>
102
+ <li>
103
+ <a href="https://chat.vite.dev/" target="_blank">
104
+ <svg
105
+ className="button-icon"
106
+ role="presentation"
107
+ aria-hidden="true"
108
+ >
109
+ <use href="/icons.svg#discord-icon"></use>
110
+ </svg>
111
+ Discord
112
+ </a>
113
+ </li>
114
+ <li>
115
+ <a href="https://x.com/vite_js" target="_blank">
116
+ <svg
117
+ className="button-icon"
118
+ role="presentation"
119
+ aria-hidden="true"
120
+ >
121
+ <use href="/icons.svg#x-icon"></use>
122
+ </svg>
123
+ X.com
124
+ </a>
125
+ </li>
126
+ <li>
127
+ <a href="https://bsky.app/profile/vite.dev" target="_blank">
128
+ <svg
129
+ className="button-icon"
130
+ role="presentation"
131
+ aria-hidden="true"
132
+ >
133
+ <use href="/icons.svg#bluesky-icon"></use>
134
+ </svg>
135
+ Bluesky
136
+ </a>
137
+ </li>
138
+ </ul>
139
+ </div>
140
+ </section>
141
+
142
+ <div className="ticks"></div>
143
+ <section id="spacer"></section>
54
144
  </>
55
145
  )
56
146
  }
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="40" height="19" fill="none" viewBox="0 0 40 19"><path fill="#f6821f" d="m27.16 18.507.204-.735c.242-.873.152-1.68-.255-2.274-.374-.547-.998-.868-1.755-.906l-14.346-.19a.3.3 0 0 1-.127-.034.3.3 0 0 1-.099-.09.31.31 0 0 1-.03-.27.4.4 0 0 1 .128-.185.37.37 0 0 1 .205-.081l14.479-.192c1.717-.082 3.576-1.536 4.227-3.31l.826-2.25a.55.55 0 0 0 .022-.298C29.702 3.29 25.94 0 21.44 0c-4.146 0-7.667 2.792-8.928 6.673a4.1 4.1 0 0 0-2.978-.86c-1.99.206-3.589 1.877-3.786 3.953a4.6 4.6 0 0 0 .11 1.547C2.605 11.41 0 14.189 0 17.603q0 .459.065.911c.009.07.042.134.093.18.05.047.116.072.183.073l26.485.003h.007a.34.34 0 0 0 .205-.076.36.36 0 0 0 .122-.187"/><path fill="#fbad41" d="M31.94 8.153q-.2 0-.397.01a.2.2 0 0 0-.062.014.2.2 0 0 0-.091.061.24.24 0 0 0-.054.098l-.564 2.033c-.243.874-.152 1.68.254 2.274.375.547.998.868 1.756.906l3.058.191a.3.3 0 0 1 .123.035.28.28 0 0 1 .142.22.3.3 0 0 1-.015.14.4.4 0 0 1-.128.185.37.37 0 0 1-.205.08l-3.177.192c-1.725.083-3.585 1.536-4.235 3.31l-.23.626a.18.18 0 0 0 .017.16.17.17 0 0 0 .134.08h10.941a.3.3 0 0 0 .176-.06.3.3 0 0 0 .106-.16 8.5 8.5 0 0 0 .291-2.216c0-4.517-3.51-8.18-7.84-8.18"/></svg>
@@ -1,45 +0,0 @@
1
- #root {
2
- max-width: 1280px;
3
- margin: 0 auto;
4
- padding: 2rem;
5
- text-align: center;
6
- }
7
-
8
- .logo {
9
- height: 6em;
10
- padding: 1.5em;
11
- will-change: filter;
12
- transition: filter 300ms;
13
- }
14
- .logo:hover {
15
- filter: drop-shadow(0 0 2em #646cffaa);
16
- }
17
- .logo.react:hover {
18
- filter: drop-shadow(0 0 2em #61dafbaa);
19
- }
20
- .logo.cloudflare:hover {
21
- filter: drop-shadow(0 0 2em #f6821faa);
22
- }
23
-
24
- @keyframes logo-spin {
25
- from {
26
- transform: rotate(0deg);
27
- }
28
- to {
29
- transform: rotate(360deg);
30
- }
31
- }
32
-
33
- @media (prefers-reduced-motion: no-preference) {
34
- a:nth-of-type(2) .logo {
35
- animation: logo-spin infinite 20s linear;
36
- }
37
- }
38
-
39
- .card {
40
- padding: 2em;
41
- }
42
-
43
- .read-the-docs {
44
- color: #888;
45
- }
@@ -1,53 +0,0 @@
1
- <?xml version="1.0" encoding="utf-8"?>
2
- <!-- Generator: Adobe Illustrator 21.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
- <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
4
- viewBox="0 0 822.8 355.5" style="enable-background:new 0 0 822.8 355.5;" xml:space="preserve">
5
- <style type="text/css">
6
- .st0{fill:#FFFFFF;}
7
- @media(prefers-color-scheme:light){.st0{fill:#404242;}}
8
- .st1{fill:#FFFFFF;}
9
- .st2{fill:#FBAE40;}
10
- .st3{fill:#F58220;}
11
- </style>
12
- <g id="Page-1">
13
- <path id="CLOUDFLARE-_xAE_" class="st0" d="M772.2,252.6c-3.4,0-6.1-2.7-6.1-6.1c0-3.3,2.7-6.1,6.1-6.1c3.3,0,6.1,2.7,6.1,6.1
14
- C778.3,249.8,775.5,252.6,772.2,252.6L772.2,252.6z M772.2,241.6c-2.7,0-4.9,2.2-4.9,4.9s2.2,4.9,4.9,4.9c2.7,0,4.9-2.2,4.9-4.9
15
- S774.9,241.6,772.2,241.6L772.2,241.6z M775.3,249.7h-1.4l-1.2-2.3h-1.6v2.3h-1.3V243h3.2c1.4,0,2.3,0.9,2.3,2.2c0,1-0.6,1.7-1.4,2
16
- L775.3,249.7z M772.9,246.2c0.5,0,1-0.3,1-1c0-0.8-0.4-1-1-1h-2v2H772.9z M136.7,239.8h15.6v42.5h27.1v13.6h-42.7V239.8z
17
- M195.5,268v-0.2c0-16.1,13-29.2,30.3-29.2s30.1,12.9,30.1,29v0.2c0,16.1-13,29.2-30.3,29.2S195.5,284.1,195.5,268z M240.1,268
18
- v-0.2c0-8.1-5.8-15.1-14.4-15.1c-8.5,0-14.2,6.9-14.2,15v0.2c0,8.1,5.8,15.1,14.3,15.1C234.4,283,240.1,276.1,240.1,268z
19
- M275,271.3v-31.5h15.8V271c0,8.1,4.1,11.9,10.3,11.9c6.2,0,10.3-3.7,10.3-11.5v-31.6h15.8v31.1c0,18.1-10.3,26-26.3,26
20
- C285,296.9,275,288.9,275,271.3z M351,239.8h21.6c20,0,31.7,11.5,31.7,27.7v0.2c0,16.2-11.8,28.2-32,28.2H351V239.8z M372.9,282.1
21
- c9.3,0,15.5-5.1,15.5-14.2v-0.2c0-9-6.2-14.2-15.5-14.2h-6.3V282L372.9,282.1L372.9,282.1z M426.9,239.8h44.9v13.6h-29.4v9.6H469
22
- v12.9h-26.6v20h-15.5V239.8z M493.4,239.8h15.5v42.5h27.2v13.6h-42.7V239.8z M576.7,239.4h15l23.9,56.5h-16.7l-4.1-10h-21.6l-4,10
23
- h-16.3L576.7,239.4z M590.4,273.8l-6.2-15.9l-6.3,15.9H590.4z M635.6,239.8h26.5c8.6,0,14.5,2.2,18.3,6.1c3.3,3.2,5,7.5,5,13.1v0.2
24
- c0,8.6-4.6,14.3-11.5,17.2l13.4,19.6h-18L658,279h-6.8v17h-15.6V239.8z M661.4,266.7c5.3,0,8.3-2.6,8.3-6.6v-0.2
25
- c0-4.4-3.2-6.6-8.4-6.6h-10.2v13.4H661.4z M707.8,239.8h45.1V253h-29.7v8.5h26.9v12.3h-26.9v8.9h30.1v13.2h-45.5V239.8z
26
- M102.7,274.6c-2.2,4.9-6.8,8.4-12.8,8.4c-8.5,0-14.3-7.1-14.3-15.1v-0.2c0-8.1,5.7-15,14.2-15c6.4,0,11.3,3.9,13.3,9.3h16.4
27
- c-2.6-13.4-14.4-23.3-29.6-23.3c-17.3,0-30.3,13.1-30.3,29.2v0.2c0,16.1,12.8,29,30.1,29c14.8,0,26.4-9.6,29.4-22.4L102.7,274.6z"
28
- />
29
- <path id="flare" class="st1" d="M734.5,150.4l-40.7-24.7c-0.6-0.1-4.4,0.3-6.4-0.7c-1.4-0.7-2.5-1.9-3.2-4c-3.2,0-175.5,0-175.5,0
30
- v91.8h225.8V150.4z"/>
31
- <path id="right-cloud" class="st2" d="M692.2,125.8c-0.8,0-1.5,0.6-1.8,1.4l-4.8,16.7c-2.1,7.2-1.3,13.8,2.2,18.7
32
- c3.2,4.5,8.6,7.1,15.1,7.4l26.2,1.6c0.8,0,1.5,0.4,1.9,1c0.4,0.6,0.5,1.5,0.3,2.2c-0.4,1.2-1.6,2.1-2.9,2.2l-27.3,1.6
33
- c-14.8,0.7-30.7,12.6-36.3,27.2l-2,5.1c-0.4,1,0.3,2,1.4,2H758c1.1,0,2.1-0.7,2.4-1.8c1.6-5.8,2.5-11.9,2.5-18.2
34
- c0-37-30.2-67.2-67.3-67.2C694.5,125.7,693.3,125.7,692.2,125.8z"/>
35
- <path id="left-cloud" class="st3" d="M656.4,204.6c2.1-7.2,1.3-13.8-2.2-18.7c-3.2-4.5-8.6-7.1-15.1-7.4L516,176.9
36
- c-0.8,0-1.5-0.4-1.9-1c-0.4-0.6-0.5-1.4-0.3-2.2c0.4-1.2,1.6-2.1,2.9-2.2l124.2-1.6c14.7-0.7,30.7-12.6,36.3-27.2l7.1-18.5
37
- c0.3-0.8,0.4-1.6,0.2-2.4c-8-36.2-40.3-63.2-78.9-63.2c-35.6,0-65.8,23-76.6,54.9c-7-5.2-15.9-8-25.5-7.1
38
- c-17.1,1.7-30.8,15.4-32.5,32.5c-0.4,4.4-0.1,8.7,0.9,12.7c-27.9,0.8-50.2,23.6-50.2,51.7c0,2.5,0.2,5,0.5,7.5
39
- c0.2,1.2,1.2,2.1,2.4,2.1h227.2c1.3,0,2.5-0.9,2.9-2.2L656.4,204.6z"/>
40
- </g>
41
- <g>
42
- </g>
43
- <g>
44
- </g>
45
- <g>
46
- </g>
47
- <g>
48
- </g>
49
- <g>
50
- </g>
51
- <g>
52
- </g>
53
- </svg>
@@ -1,45 +0,0 @@
1
- #root {
2
- max-width: 1280px;
3
- margin: 0 auto;
4
- padding: 2rem;
5
- text-align: center;
6
- }
7
-
8
- .logo {
9
- height: 6em;
10
- padding: 1.5em;
11
- will-change: filter;
12
- transition: filter 300ms;
13
- }
14
- .logo:hover {
15
- filter: drop-shadow(0 0 2em #646cffaa);
16
- }
17
- .logo.react:hover {
18
- filter: drop-shadow(0 0 2em #61dafbaa);
19
- }
20
- .logo.cloudflare:hover {
21
- filter: drop-shadow(0 0 2em #f6821faa);
22
- }
23
-
24
- @keyframes logo-spin {
25
- from {
26
- transform: rotate(0deg);
27
- }
28
- to {
29
- transform: rotate(360deg);
30
- }
31
- }
32
-
33
- @media (prefers-reduced-motion: no-preference) {
34
- a:nth-of-type(2) .logo {
35
- animation: logo-spin infinite 20s linear;
36
- }
37
- }
38
-
39
- .card {
40
- padding: 2em;
41
- }
42
-
43
- .read-the-docs {
44
- color: #888;
45
- }
@@ -1,51 +0,0 @@
1
- <?xml version="1.0" encoding="utf-8"?>
2
- <!-- Generator: Adobe Illustrator 21.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
- <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
4
- viewBox="0 0 822.8 355.5" style="enable-background:new 0 0 822.8 355.5;" xml:space="preserve">
5
- <style type="text/css">
6
- .st0{fill:#FFFFFF;}
7
- .st1{fill:#FBAE40;}
8
- .st2{fill:#F58220;}
9
- </style>
10
- <g id="Page-1">
11
- <path id="CLOUDFLARE-_xAE_" class="st0" d="M772.2,252.6c-3.4,0-6.1-2.7-6.1-6.1c0-3.3,2.7-6.1,6.1-6.1c3.3,0,6.1,2.7,6.1,6.1
12
- C778.3,249.8,775.5,252.6,772.2,252.6L772.2,252.6z M772.2,241.6c-2.7,0-4.9,2.2-4.9,4.9s2.2,4.9,4.9,4.9c2.7,0,4.9-2.2,4.9-4.9
13
- S774.9,241.6,772.2,241.6L772.2,241.6z M775.3,249.7h-1.4l-1.2-2.3h-1.6v2.3h-1.3V243h3.2c1.4,0,2.3,0.9,2.3,2.2c0,1-0.6,1.7-1.4,2
14
- L775.3,249.7z M772.9,246.2c0.5,0,1-0.3,1-1c0-0.8-0.4-1-1-1h-2v2H772.9z M136.7,239.8h15.6v42.5h27.1v13.6h-42.7V239.8z
15
- M195.5,268v-0.2c0-16.1,13-29.2,30.3-29.2s30.1,12.9,30.1,29v0.2c0,16.1-13,29.2-30.3,29.2S195.5,284.1,195.5,268z M240.1,268
16
- v-0.2c0-8.1-5.8-15.1-14.4-15.1c-8.5,0-14.2,6.9-14.2,15v0.2c0,8.1,5.8,15.1,14.3,15.1C234.4,283,240.1,276.1,240.1,268z
17
- M275,271.3v-31.5h15.8V271c0,8.1,4.1,11.9,10.3,11.9c6.2,0,10.3-3.7,10.3-11.5v-31.6h15.8v31.1c0,18.1-10.3,26-26.3,26
18
- C285,296.9,275,288.9,275,271.3z M351,239.8h21.6c20,0,31.7,11.5,31.7,27.7v0.2c0,16.2-11.8,28.2-32,28.2H351V239.8z M372.9,282.1
19
- c9.3,0,15.5-5.1,15.5-14.2v-0.2c0-9-6.2-14.2-15.5-14.2h-6.3V282L372.9,282.1L372.9,282.1z M426.9,239.8h44.9v13.6h-29.4v9.6H469
20
- v12.9h-26.6v20h-15.5V239.8z M493.4,239.8h15.5v42.5h27.2v13.6h-42.7V239.8z M576.7,239.4h15l23.9,56.5h-16.7l-4.1-10h-21.6l-4,10
21
- h-16.3L576.7,239.4z M590.4,273.8l-6.2-15.9l-6.3,15.9H590.4z M635.6,239.8h26.5c8.6,0,14.5,2.2,18.3,6.1c3.3,3.2,5,7.5,5,13.1v0.2
22
- c0,8.6-4.6,14.3-11.5,17.2l13.4,19.6h-18L658,279h-6.8v17h-15.6V239.8z M661.4,266.7c5.3,0,8.3-2.6,8.3-6.6v-0.2
23
- c0-4.4-3.2-6.6-8.4-6.6h-10.2v13.4H661.4z M707.8,239.8h45.1V253h-29.7v8.5h26.9v12.3h-26.9v8.9h30.1v13.2h-45.5V239.8z
24
- M102.7,274.6c-2.2,4.9-6.8,8.4-12.8,8.4c-8.5,0-14.3-7.1-14.3-15.1v-0.2c0-8.1,5.7-15,14.2-15c6.4,0,11.3,3.9,13.3,9.3h16.4
25
- c-2.6-13.4-14.4-23.3-29.6-23.3c-17.3,0-30.3,13.1-30.3,29.2v0.2c0,16.1,12.8,29,30.1,29c14.8,0,26.4-9.6,29.4-22.4L102.7,274.6z"
26
- />
27
- <path id="flare" class="st0" d="M734.5,150.4l-40.7-24.7c-0.6-0.1-4.4,0.3-6.4-0.7c-1.4-0.7-2.5-1.9-3.2-4c-3.2,0-175.5,0-175.5,0
28
- v91.8h225.8V150.4z"/>
29
- <path id="right-cloud" class="st1" d="M692.2,125.8c-0.8,0-1.5,0.6-1.8,1.4l-4.8,16.7c-2.1,7.2-1.3,13.8,2.2,18.7
30
- c3.2,4.5,8.6,7.1,15.1,7.4l26.2,1.6c0.8,0,1.5,0.4,1.9,1c0.4,0.6,0.5,1.5,0.3,2.2c-0.4,1.2-1.6,2.1-2.9,2.2l-27.3,1.6
31
- c-14.8,0.7-30.7,12.6-36.3,27.2l-2,5.1c-0.4,1,0.3,2,1.4,2H758c1.1,0,2.1-0.7,2.4-1.8c1.6-5.8,2.5-11.9,2.5-18.2
32
- c0-37-30.2-67.2-67.3-67.2C694.5,125.7,693.3,125.7,692.2,125.8z"/>
33
- <path id="left-cloud" class="st2" d="M656.4,204.6c2.1-7.2,1.3-13.8-2.2-18.7c-3.2-4.5-8.6-7.1-15.1-7.4L516,176.9
34
- c-0.8,0-1.5-0.4-1.9-1c-0.4-0.6-0.5-1.4-0.3-2.2c0.4-1.2,1.6-2.1,2.9-2.2l124.2-1.6c14.7-0.7,30.7-12.6,36.3-27.2l7.1-18.5
35
- c0.3-0.8,0.4-1.6,0.2-2.4c-8-36.2-40.3-63.2-78.9-63.2c-35.6,0-65.8,23-76.6,54.9c-7-5.2-15.9-8-25.5-7.1
36
- c-17.1,1.7-30.8,15.4-32.5,32.5c-0.4,4.4-0.1,8.7,0.9,12.7c-27.9,0.8-50.2,23.6-50.2,51.7c0,2.5,0.2,5,0.5,7.5
37
- c0.2,1.2,1.2,2.1,2.4,2.1h227.2c1.3,0,2.5-0.9,2.9-2.2L656.4,204.6z"/>
38
- </g>
39
- <g>
40
- </g>
41
- <g>
42
- </g>
43
- <g>
44
- </g>
45
- <g>
46
- </g>
47
- <g>
48
- </g>
49
- <g>
50
- </g>
51
- </svg>